5. Januar Universität Bielefeld AG Praktische Informatik. Programmieren in Haskell. Stefan Janssen. Abstrakte Datentypen.
|
|
- Fabian Müller
- vor 6 Jahren
- Abrufe
Transkript
1 Universität Bielefeld AG Praktische Informatik 5. Januar 2015
2 Themen-Vorschau Module
3 In der Software-Entwicklung unterscheidet zwei Arten von : konkrete beziehen sich auf eine konkrete Repräsentation in der verwendeten Programmiersprache. Beispiele: Int, Char, Listen, Bäume; auch polymorphe sind konkret! abstrakte sind nicht an eine konkrete Repräsentation gebunden. Wie kann man dann überhaupt etwas definieren?
4 Ein abstrakter Datentyp (ADT) ist, unabhängig von einer Programmiersprache, eine (nicht weiter spezifizierte) Wertemenge mit Operationen auf dieser Wertemenge, die bestimmte Axiome (Gleichungen) erfüllen die Menge der Operationen ist die Schnittstelle (API) nach außen konkrete Repräsentation der Daten in der Implementierung ist nicht nach außen sichtbar (Kapselung)
5 Warum? mit ADTs erhöht die Wiederverwendbarkeit von Programmen Beispiel: ADT Verzeichnis Operationen auf Verzeichnissen: Erzeugen, Einfuegen, Loeschen, Sortieren, Bereinigen Programmierer, die Verzeichnisse verwenden, kennen NUR diese Operationen Verzeichnisse können konkret Listen, Bäume, Arrays,... sein, ggf. mit Zusatzoperationen Die konkrete Implementierung kann geändert werden, ohne dass andere Programme davon betroffen sind
6 spielen eine bedeutende Rolle in der Software-Entwicklung Alle modernen Programmiersprachen unterstützen ihre Verwendung Sie dienen der Spezifikation der nach außen sichtbaren Operationen und Eigenschaften Manchmal werden die Operationen mit Effizienzvorgaben verknüpft In werden abstrakte durch Module und durch Typklassen unterstützt. In Java/C++ geschieht dies durch Klassen ud Interfaces
7 Mini-ADT Llist Wir spezifizieren einen ADT Llist a analog zu Listen, dessen length-funktion die Komplexität O(1) haben soll. Operationen: empty : Llist a in O(1) (1) lcons : a Llista Llist a in O(1) (2) lhead : Llist a a in O(1) (3) ltail : Llist a Llist a in O(1) (4) llength : Llist a Int in O(1) (5) lapp : Llist a Llist a Llist a in O(n) (6)
8 Eigenschaften Eigenschaften der Operationen: lhead(lcons(x, xs)) = x (7) ltail(lcons(x, xs)) = xs (8) llength(lcons(x, empty)) = 1 (9) llength(lapp(xs, ys)) = llength(xs) + llength(ys)(10) lapp(x, empty) = x (11) und so weiter... Können wir das spontan implementieren? Können wir. Siehe Tafel.
9 Module Aus einigen Beispielen bekannt: Modulname Imports-Deklarationen Definitionen des Moduls
10 Module Aus einigen Beispielen bekannt: Modulname Imports-Deklarationen Definitionen des Moduls 1 > module Meinmodul 2 > where 3 > import Data. List 4 5 > splits n = [ splitat k [1.. n] k <- [1..n -1] ]
11 Modulaufbau Was bisher verschwiegen wurde E-Modul ist eine Datei, welche wie folgt eingeleitet wird: module <Name> (<Exportliste>) where Nur die und Funktionen, die in <Exportliste> angegeben werden, sind nach außen hin sichtbar Wenn <Exportliste> weggelassen wird, sind alle Definitionen nach außen sichtbar.
12 Exportieren von 1 module Liste ( List ) where 2 3 data List a = Nil 4 Cons a ( List a) Dies exportiert nur den Datentyp List, nicht aber die Konstruktoren Nil und Cons. Diese können in dem importierenden Modul nicht verwendet werden module Liste ( List ( Nil, Cons )) where exportiert auch die Konstruktoren alternativ: module Liste ( List (..)) where exportiert alle Konstruktoren eines Datentyps
13 ADT-Beispiel: Anhängen eines Elements am Ende einer Liste erfordert O(n) Schritte. erlauben diese Operation in O(1). Spezifikation: 1 > module Hlist ( Hlist,l2h,h2l, lcons, rcons, happ Holy) Lists whe 2 > l2h :: [a] -> Hlist a -- in O(n) 3 > h2l :: Hlist a -> [a] -- in O(n) 4 > lcons :: a - > Hlist a - > Hlist a -- in O (1) 5 > rcons :: Hlist a - > a - > Hlist a -- in O (1)
14 : Eigenschaften 1 Einige der erwarteten Eigenschaften: 2 l2h. h2l = id ( Konvertierung ) 3 h2l. l2h = id ( " )
15 : Eigenschaften 1 Einige der erwarteten Eigenschaften: 2 l2h. h2l = id ( Konvertierung ) 3 h2l. l2h = id ( " ) Implementierung??? Zum Nachdenken über die Feiertage! Tipp: holy kommt von hole Listen mit Loch am Ende...
16 Schöne Feiertage und Guten Rutsch PS: Purer Zufall, dass die HolyLists immer in die letzte Vorlesung vor Weihnachten fallen...
17 ADT 1 type Hlist a 2 empty :: Hlist a -- klassisch 3 cons :: a - > Hlist a - > Hlist a 4 append :: Hlist a - > Hlist a - > Hlist a 5 6 hcons :: Hlist a - > a - > Hlist a -- neu!! 7 8 l2h :: [a] -> Hlist a -- Konversion 9 h2l :: Hlist a -> [a]
18 Axiome für ADT Forderungen an die Implementierung: Alle Eigenschaften von (:), [], (++) sollen auch für cons, empty, append gelten. h2l. l2h == id hcons h a == l2h (h2l h ++ [a]) Konvertierung (l2h l) und (h2l h) in O(n) hcons h a in O(1) Die letzte Anforderung ist die eigentliche Herausforderung!
19 Lösungsvorschlag Implementierung siehe Datei Hlist.lhs Auszug: 1 Hlist - Listen mit effizientem Anfuegen vorne und h 2 Append - Funktion ebenfalls in O (1) 3 4 Specification 5 6 > module Hlist ( Hlist,l2h,h2l, lcons, rcons, happ ) whe 7 > l2h :: [a] -> Hlist a -- in O(n) 8 > h2l :: Hlist a -> [a] -- in O(n) 9 > lcons :: a - > Hlist a - > Hlist a -- in O (1) uns so weiter...
20 ADT-Beispiel: Ein ( Stapel oder auch Keller ) ist ein Datentyp, der eine Menge von gleichartigen Elementen aufnehmen kann. Er unterstützt fünf Operationen: emptystack: Liefert einen ohne Inhalt stackempty s: Fragt ob ein s leer ist push x s: Legt ein neues Element x auf den s pop s: Entfernt das oberste Element vom top s: Liefert das oberste Element des s s, ohne dieses zu entfernen Last-In-First-Out (LIFO)-Strategie: Das letzte Element, was auf den gelegt wurde, ist das erste, was wieder heruntergenommen wird.
21 -Schnittstelle 1 module (,push,pop,top, 2 empty, stackempty ) where 3 4 empty :: a 5 stackempty :: a - > Bool 6 push :: a - > a - > a 7 pop :: a - > a 8 top :: a -> a empty liefert einen neuen, leeren stackempty überprüft, ob der leer ist push legt ein Element auf den pop entfernt das oberste Element vom top liefert das oberste Element vom
22 -Implementierung (1) 1 > module (, empty, stackempty, pop, push, top ) 2 > data a = St [ a ] 3 4 > empty : : a 5 > empty = St [ ] 6 7 > stackempty : : a > Bool 8 > stackempty ( St [ ] ) = True 9 > stackempty ( St _) = F a l s e > push : : a > a > a 12 > push x ( St xs ) = St ( x : xs )
23 -Implementierung (1) 1 > module (, empty, stackempty, pop, push, top ) 2 > data a = St [ a ] 3 4 > empty : : a 5 > empty = St [ ] 6 7 > stackempty : : a > Bool 8 > stackempty ( St [ ] ) = True 9 > stackempty ( St _) = F a l s e > push : : a > a > a 12 > push x ( St xs ) = St ( x : xs ) Der Datentyp stack wird exportiert, aber nicht der Konstruktor St! NUR mittels Emptystack und push können s erzeugt werden. Alternative: module ((St), empty... oder auch module ((..), empty...
24 -Implementierung (2) 14 > pop : : a > a 15 > pop ( St [ ] ) = e r r o r " pop : empty! " 16 > pop ( St ( x : xs ) ) = St xs > top : : a > a 19 > top ( St [ ] ) = e r r o r " top : empty! " 20 > top ( St ( x : xs ) ) = x Inspektion und Abbau von s
25 Sicherheit... Welche Rolle spielt der Konstruktor St? unterhalb von St stehen immer nur einfache Listen eigentlich kann man ihn ganz weglassen, oder? wie z.b. in...
26 Schlichte s... 1 > module 2 (, empty, stackempty, pop, push, top ) 2 > type a = [ a ] 3 4 > empty : : a 5 > empty = [ ] 6 7 > stackempty : : a > Bool 8 > stackempty [ ] = True 9 > stackempty _ = F a l s e > push : : a > a > a 12 > push x xs = x : xs > pop : : a > a 15 > pop [ ] = e r r o r " pop : empty! " 16 > pop ( x : xs ) = xs > top : : a > a 19 > top [ ] = e r r o r " top : empty! " 20 > top ( x : xs ) = x
27 Der Unterschied... Den Unterschied sieht man mit Hugs an Ausdrücken wie push y empty empty ++ "nonono"
28 Der Unterschied... Den Unterschied sieht man mit Hugs an Ausdrücken wie push y empty empty ++ "nonono" Auf den schlichten s sind normale Listenoperationen ausführbar das will man gerade nicht, auch wenn es manchmal praktisch wäre, so wie im Falle von show.
29 Konvertierung Die erste Lösung ist also die bessere. Ggf. brauchen wir Konvertierungsfunktionen zwischen Listen und s. 1 > l2s :: [a] -> a 2 > s2l : a -> [a] Wo würde man die implementieren?
30 Konvertierung wo? Im Modul geht es einfach und effizient: 1 > l2s l = St l 2 > s2l (St l) = l
31 Konvertierung wo? Im Modul geht es einfach und effizient: 1 > l2s l = St l 2 > s2l (St l) = l außerhalb geht es auch recht einfach, aber weniger effizient: 1 > l2s = foldr push empty 2 > s2l s = if s == empty then [] 3 > else top s : s2l pop s Das liegt daran, dass wir außen nichts über die interne Implementierung wissen.
32 Beispiel: Warteschlangen realisiert der ADT. Eine (Schlange) arbeitet (im Gegensatz zum ) nach dem FIFO (First In First Out)-Prinzip das erste Element, das einer hinzugefügt wurde, ist auch das erste, das wieder entfernt wird Eine stellt die Operationen enqueue, dequeue und front bereit, sowie empty und queueempty.
33 -Schnittstelle 1 module (, empty, queueempty, 2 enqueue, dequeue, front ) where 3 4 empty :: a 5 queueempty :: a - > Bool 6 enqueue :: a - > a - > a 7 dequeue :: a - > a 8 front :: a - > a empty liefert eine neue queueempty überprüft, ob eine leer ist enqueue fügt einer ein neues Element hinzu dequeue entfernt das erste Element aus der front liefert das erste Element der
34 Implementierung (0) Vorüberlegung: Warum kann es nicht effizient werden, s einfach als Listen zu implementieren? Also z.b. als data a = Q [a]?
35 Implementierung (1) Moduldeklaration: 1 > module (, empty, queueempty, 2 > enqueue, dequeue, f r o n t ) where 3 4 > empty : : a 5 > queueempty : : a > Bool 6 > enqueue : : a > a > a 7 > dequeue : : a > a 8 > f r o n t : : a > a Auch hier wird kein Konstruktor exportiert!
36 Implementierung (1) Aufbau einer : 10 > data a = Q [ a ] [ a ] d e r i v i n g (Show, Eq) > empty = Q [ ] [ ] 13 > queueempty (Q [ ] [ ] ) = True 14 > queueempty _ = F a l s e > enqueue a (Q back f r o n t ) = Q ( a : back ) f r o n t
37 Implementierung (3) 17 Abbau einer : 18 > dequeue (Q [ ] [ ] ) = e r r o r " dequeue : queue empty! " 19 > dequeue (Q back [ ] ) = dequeue (Q [ ] ( r e v e r s e back ) ) 20 > dequeue (Q back ( a : f r o n t ) ) = Q back f r o n t > f r o n t (Q [ ] [ ] ) = e r r o r " f r o n t : queue empty! " 23 > f r o n t (Q back [ ] ) = f r o n t (Q [ ] ( r e v e r s e back ) ) 24 > f r o n t (Q back ( a : f r o n t ) ) = a Natürlich verwenden wir eine O(n)-Implementierung von reverse
38 : Effizienz? empty liefert eine neue queueempty überprüft, ob eine leer ist enqueue fügt einer ein neues Element hinzu dequeue entfernt das erste Element aus der front liefert das erste Element der Effizienzbetrachtung: Welchen Rechenaufwand haben die einzelnen Operationen? Was ist der Aufwand, wenn n Eintraege erzeugt, gelesen und entfernt werden?
39 : Effizienz? empty liefert eine neue queueempty überprüft, ob eine leer ist enqueue fügt einer ein neues Element hinzu dequeue entfernt das erste Element aus der front liefert das erste Element der Effizienzbetrachtung: Welchen Rechenaufwand haben die einzelnen Operationen? Was ist der Aufwand, wenn n Eintraege erzeugt, gelesen und entfernt werden? Amortisierte Effizienz von O(1) für dequeue.
40 Varianten Was ändert sich, wenn man front und dequeue zusammenlegt als frondeq:: a -> (a, a)?
41 Varianten Was ändert sich, wenn man front und dequeue zusammenlegt als frondeq:: a -> (a, a)? 1 > frondeq ( Q [] []) = error " front : empty queue!" 2 > frondeq (Q back []) = frondeq (Q [] ( reverse back )) 3 > frondeq ( Q back ( a: front )) = (a, Q back front )
42 Varianten Was ändert sich, wenn man front und dequeue zusammenlegt als frondeq:: a -> (a, a)? 1 > frondeq ( Q [] []) = error " front : empty queue!" 2 > frondeq (Q back []) = frondeq (Q [] ( reverse back )) 3 > frondeq ( Q back ( a: front )) = (a, Q back front ) Jedes Element wird nur einmal gelesen und nur einmal revertiert.
43 Varianten Was ändert sich, wenn man front und dequeue zusammenlegt als frondeq:: a -> (a, a)? 1 > frondeq ( Q [] []) = error " front : empty queue!" 2 > frondeq (Q back []) = frondeq (Q [] ( reverse back )) 3 > frondeq ( Q back ( a: front )) = (a, Q back front ) Jedes Element wird nur einmal gelesen und nur einmal revertiert. Nochmals die Sinnfrage: Warum kann man ohne abstrakte den Typ nicht korrekt implementieren?
44 Beispiel: Mengen Mengen sind ein recht schwieriger Datentyp. Eine Menge ist eine ungeordnete Sammlung von unterschiedlichen Elementen Ein Element kann auf Mitgliedschaft in einer Menge hin überprüft werden, kann einer Menge hinzugefügt oder aus einer Menge entfernt werden Was ist daran schwierig?
45 Mengen-Schnittstelle 1 module (, empty, setempty, in, 2 add, del ) where 3 4 empty :: a 5 setempty :: a - > Bool 6 in :: (Eq a) => a -> a -> Bool 7 add :: (Eq a) => a -> a -> a 8 del :: (Eq a) => a -> a -> a
46 Mengen-Schnittstelle 1 module (, empty, setempty, in, 2 add, del ) where 3 4 empty :: a 5 setempty :: a - > Bool 6 in :: (Eq a) => a -> a -> Bool 7 add :: (Eq a) => a -> a -> a 8 del :: (Eq a) => a -> a -> a empty erzeugt eine leere Menge setempty überprüft, ob die Menge leer ist in überprüft, ob ein Element in einer Menge enthalten ist add fügt ein Element der Menge hinzu del entfernt ein Element aus der Menge
47 Mengen-Implementierung Siehe Datei set.lhs
48 Synonyme: Multimenge Bag
49 Synonyme: Multimenge Bag die Elementpositionen spielen keine Rolle wie bei Unterschied zu Listen Elemente können vielfach enthalten sein Unterschied zu wie bei Listen
50 Multimenge die leere Multimenge, a die einelementige Multimenge, die genau ein Vorkommen von a enthält, x y die Vereinigung der Elemente von x und y; das + im Vereinigungszeichen deutet an, dass sich die Vorkommen in x und y akkumulieren. x = x = x y = x x y x (x y) z = x (y z)
51 Multimenge 1 bag :: [a] -> Bag a 2 bag [] = 3 bag (a:as) = a bag as Beobachtung Eine Liste x enthält alle Elemente von y, falls bag x = bag y. In diesem Fall heißt x Permutation von y.
52 r Datentyp Multimenge 1 module Bag ( Bag, emptybag, bagempty, inbag, 2 addbag, delbag, appendbag, 3 eqbag ) where 4 import List 5 6 emptybag :: Bag a 7 bagempty :: Bag a - > Bool 8 inbag :: Eq a = > a - > Bag a - > Bool 9 addbag :: Eq a = > a - > Bag a - > Bag a 10 delbag :: Eq a = > a - > Bag a - > Bag a 11 appendbag :: Bag a - > Bag a - > Bag a 12 eqbag :: Eq a = > Bag a - > Bag a - > Bool
53 r Datentyp Multimenge emptybag erzeugt eine neue Multimenge bagempty überprüft, ob eine Multimenge leer ist inbag überprüft, ob ein Element in der Multimenge enthalten ist addbag fügt ein Element einer Multimenge hinzu delbag löscht ein Element aus einer Multimenge appendbag vereinigt zwei Multimengen
54 r Datentyp Multimenge emptybag erzeugt eine neue Multimenge bagempty überprüft, ob eine Multimenge leer ist inbag überprüft, ob ein Element in der Multimenge enthalten ist addbag fügt ein Element einer Multimenge hinzu delbag löscht ein Element aus einer Multimenge appendbag vereinigt zwei Multimengen Was soll man von diesen Operationen halten? headbag gibt das erste Element aus der Multimenge aus tailbag entfernt das erste Element aus der Multimenge Siehe Datei bag.lhs
55 ADT-Fazit ADTs sind wesentlich für die nachhaltige Software-Entwicklung. Einzelne Programmteile können unabhängig voneinander entwickelt verbessert und erweitert ausgetauscht werden und haben klare Schnittstellen (auch für das Verstehen des Programms)
Programmieren in Haskell. Abstrakte Datentypen
Programmieren in Haskell Abstrakte Datentypen Einführung Man unterscheidet zwei Arten von Datentypen: konkrete Datentypen: beziehen sich auf eine konkrete Repräsentation in der Sprache. Beispiele: Listen,
MehrProgrammieren in Haskell Programmiermethodik
Programmieren in Haskell Programmiermethodik Peter Steffen Universität Bielefeld Technische Fakultät 12.01.2011 1 Programmieren in Haskell Bisherige Themen Was soll wiederholt werden? Bedienung von hugs
MehrGrundlagen der Informatik. Prof. Dr. Stefan Enderle NTA Isny
Grundlagen der Informatik Prof. Dr. Stefan Enderle NTA Isny 2 Datenstrukturen 2.1 Einführung Syntax: Definition einer formalen Grammatik, um Regeln einer formalen Sprache (Programmiersprache) festzulegen.
MehrInstitut für Informatik
Technische Universität München Institut für Informatik Lehrstuhl für Computer Graphik & Visualisierung WS 2010 Praktikum: Grundlagen der Programmierung Lösungsblatt 7 Prof. R. Westermann, A. Lehmann, R.
MehrAlgorithmen und Datenstrukturen (für ET/IT)
Algorithmen und Datenstrukturen (für ET/IT) Sommersemester 2016 Dr. Tobias Lasser Computer Aided Medical Procedures Technische Universität München Programm heute 1 Einführung 2 Grundlagen von Algorithmen
MehrVorlesung Datenstrukturen
Vorlesung Datenstrukturen Binärbaum Suchbaum Dr. Frank Seifert Vorlesung Datenstrukturen - Sommersemester 2016 Folie 356 Datenstruktur Binärbaum Strukturrepräsentation des mathematischen Konzepts Binärbaum
MehrWS 2011/2012. Georg Sauthoff 1. October 18, 2011
in in WS 2011/2012 Georg 1 AG Praktische Informatik October 18, 2011 1 gsauthof@techfak.uni-bielefeld.de Neue Übungsgruppen in neue Übungsgruppen neue Tutoren Sprechstunden in GZI-Arbeitsraum (V2-240)
MehrWiederholung ADT Menge Ziel: Verwaltung (Finden, Einfügen, Entfernen) einer Menge von Elementen
Was bisher geschah abstrakter Datentyp : Signatur Σ und Axiome Φ z.b. ADT Menge zur Verwaltung (Finden, Einfügen, Entfernen) mehrerer Elemente desselben Typs Spezifikation einer Schnittstelle Konkreter
Mehrexpr :: Expr expr = Mul (Add (Const 3) (Const 4)) (Div (Sub (Const 73) (Const 37)) (Const 6))
1 - Korrektur 2 - Abstrakte Datentypen für arithmetische Ausdrücke Der Datentyp Wir beginnen zunächst mit dem algebraischen Datentyp für Ausdrücke. Hierfür definieren wir einen Konstruktor Number für Zahlen,
MehrFormale Methoden in der Informatik Wiederholung klassische Logik Konkrete Datentypen (algebraische Strukturen) Abstrakte Datentypen
Was bisher geschah Formale Methoden in der Informatik Wiederholung klassische Logik Konkrete Datentypen (algebraische Strukturen) Abstrakte Datentypen Syntax: Signatur Semantik: Axiome (FOL-Formeln, meist
MehrHTTP://WWW.WIKIPAINTINGS.ORG/EN/FRIEDENSREICH-HUNDERTWASSER/YOU-ARE-A-GUEST-OF-NATURE-BEHAVE Abstrakte Datentypen.
HTTP://WWW.WIKIPAINTINGS.ORG/EN/FRIEDENSREICH-HUNDERTWASSER/YOU-ARE-A-GUEST-OF-NATURE-BEHAVE Abstrakte Datentypen OOPM, Ralf Lämmel (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau 562 Motivation abstrakter
MehrWas bisher geschah. deklarative Programmierung. funktionale Programmierung (Haskell):
Was bisher geschah deklarative Programmierung funktional: Programm: Menge von Termgleichungen, Term Auswertung: Pattern matsching, Termumformungen logisch: Programm: Menge von Regeln (Horn-Formeln), Formel
MehrAdvanced Programming in C
Advanced Programming in C Pointer und Listen Institut für Numerische Simulation Rheinische Friedrich-Wilhelms-Universität Bonn Oktober 2013 Überblick 1 Variablen vs. Pointer - Statischer und dynamischer
MehrInformatik 11 Kapitel 2 - Rekursive Datenstrukturen
Fachschaft Informatik Informatik 11 Kapitel 2 - Rekursive Datenstrukturen Michael Steinhuber König-Karlmann-Gymnasium Altötting 15. Januar 2016 Folie 1/77 Inhaltsverzeichnis I 1 Datenstruktur Schlange
MehrProgrammieren in Haskell
Programmieren in Haskell Programmieren mit Listen Programmieren in Haskell 1 Was wir heute machen Eigener Listen-Datentyp Eine Sortierfunktion Nützliche Listenfunktionen Programmieren in Haskell 2 Ein
MehrTeil IV : Abstrakte Datentypen (ADT)
Teil IV : Abstrakte Datentypen (ADT) Abstraktion ADT in Modula-2 K. Murmann, H. Neumann, Fakultät für Informatik, Universität Ulm, 2001 1. Abstraktion Rekapitulation Realisation eines Stacks Idee für ADT-Konzept
MehrVerträge für die funktionale Programmierung Design und Implementierung
1 Verträge für die funktionale Programmierung Design und Implementierung RALF HINZE Institut für Informatik III, Universität Bonn Römerstraße 164, 53117 Bonn, Germany Email: ralf@informatik.uni-bonn.de
MehrProgrammierung und Modellierung
Programmierung und Modellierung Terme, Suchbäume und Pattern Matching Martin Wirsing in Zusammenarbeit mit Moritz Hammer SS 2009 2 Inhalt Kap. 7 Benutzerdefinierte Datentypen 7. Binärer Suchbaum 8. Anwendung:
MehrHaskell, Typen, und Typberechnung. Grundlagen der Programmierung 3 A. Einige andere Programmiersprachen. Typisierung in Haskell
Haskell, Typen, und Typberechnung Grundlagen der Programmierung 3 A Typen, Typberechnung und Typcheck Prof. Dr. Manfred Schmidt-Schauß Ziele: Haskells Typisierung Typisierungs-Regeln Typ-Berechnung Milners
MehrUm nicht immer den Strukturnamen verwenden zu müssen, kann man auch alle Definitionen einer Struktur auf einmal sichtbar machen:
Öffnen von Strukturen Um nicht immer den Strukturnamen verwenden zu müssen, kann man auch alle Definitionen einer Struktur auf einmal sichtbar machen: open P a i r s ; opening Pairs type a Pair = a * a
MehrTheoretische Informatik 1 WS 2007/2008. Prof. Dr. Rainer Lütticke
Theoretische Informatik 1 WS 2007/2008 Prof. Dr. Rainer Lütticke Inhalt der Vorlesung Grundlagen - Mengen, Relationen, Abbildungen/Funktionen - Datenstrukturen - Aussagenlogik Automatentheorie Formale
MehrWas bisher geschah ADT Menge mit Operationen: Suche nach einem Element Einfügen eines Elementes Löschen eines Elementes Realisierung durch
Was bisher geschah ADT Menge mit Operationen: Suche nach einem Element Einfügen eines Elementes Löschen eines Elementes Realisierung durch verschiedene Datenstrukturen: lineare Datenstrukturen: Array,
MehrAgenda. 1 Einleitung. 2 Binäre Bäume. 3 Binäre Suchbäume. 4 Rose Trees. 5 Zusammenfassung & Ausblick. Haskell Bäume. Einleitung.
Vortrag: Bäume in Haskell Bäume in Haskell Vortrag Christoph Forster Thomas Kresalek Fachhochschule Wedel University of Applied Sciences 27. November 2009 Christoph Forster, Thomas Kresalek 1/53 Vortrag
MehrAlgorithmen & Datenstrukturen Lösungen zu Blatt 9 HS 16
Eidgenössische Technische Hochschule Zürich Ecole polytechnique fédérale de Zurich Politecnico federale di Zurigo Federal Institute of Technology at Zurich Departement Informatik 24. November 2016 Markus
MehrBeispiele: (Funktionen auf Listen) (3) Bemerkungen: Die Datenstrukturen der Paare (2) Die Datenstrukturen der Paare
Beispiele: (Funktionen auf Listen) (3) Bemerkungen: 5. Zusammenhängen der Elemente einer Liste von Listen: concat :: [[a]] -> [a] concat xl = if null xl then [] else append (head xl) ( concat (tail xl))
MehrAufgabenblatt Nr. 5 Generizität und TicTacToe
Aufgabenblatt Nr. 5 Generizität und TicTacToe 1 Generische Sortier-Methode 1.1 Aufgabe: Entwickeln einer generischen Sortiermethode für Objekte mit der Schnittstelle Comparable Ihnen ist aus der Vorlesung
MehrFunktionale Programmierung mit Haskell
Funktionale Programmierung mit Haskell Prof. Dr. Hans J. Schneider Lehrstuhl für Programmiersprachen und Programmiermethodik Friedrich-Alexander-Universität Erlangen-Nürnberg Sommersemester 2011 I. Die
MehrDaten mit Typetikett Abstrakter Datentyp (ADT) 4-Stufen-Modell Generische Operationen Datengesteuerte Programmierung.
Datenabstraktion Prof. Dr. Christian Wagenknecht Prof. Dr. Christian Wagenknecht Datenabstraktion 1 von 36 Daten mit Typetikett Programmiersprachen mit Deklarationszwang von Variablen Schlüsselworte, wie
MehrProgrammiersprache 1 (C++) Prof. Dr. Stefan Enderle NTA Isny
Programmiersprache 1 (C++) Prof. Dr. Stefan Enderle NTA Isny 11. Dynamische Datenstrukturen 11.1 Lineare Liste Eine lineare Liste (auch einfach verkettete Liste ) ist eine Art Array mit flexibler Länge.
Mehr6 Datenstrukturen und abstrakte Datentypen. Datenstrukturen = Werkzeuge für die Buchhaltung
Überblick 6 Datenstrukturen und abstrakte Datentypen 6.1 Datenstrukturen - alt und neu 6.2 Abstrakte Datentypen: Grundlagen 6.3 ADTs für Paare und Listen in Scheme 6.4 Stack und First-In-First-Out Queue
MehrKlausur Algorithmen und Datenstrukturen
Technische Universität Braunschweig Sommersemester 2013 IBR - Abteilung Algorithmik Prof. Dr. Sándor Fekete Dr. Christiane Schmidt Stephan Friedrichs Klausur Algorithmen und Datenstrukturen 22.08.2013
MehrWS 2011/2012. Georg Sauthoff 1. November 1, 2011
WS 2011/2012 Georg 1 AG Praktische Informatik November 1, 2011 1 gsauthof@techfak.uni-bielefeld.de Übungen Abgaben und Aufgabenblätter am Ende der Vorlesung Skript gibt es demnächst in den Übungen Der
MehrFolge 18 - Vererbung
Workshop Folge 18 - Vererbung 18.1 Ein einfacher Fall der Vererbung Schritt 1 - Vorbereitungen Besorgen Sie sich - vielleicht aus einer der Übungen der Folge 17 - ein fertiges und lauffähiges Listenprojekt,
MehrListenverarbeitung in Python
Listenverarbeitung in Python Datentypen für Sequenzen von Objekten: Tupel, Listen und Strings Tupel und Listen sind analog zu Haskells Tupel und Listen: (1, 2, 3) 3-Tupel aus den Zahlen 1,2,3, [1, 2, 3]
MehrInterpreter - Gliederung
Institut für Informatik Ludwig-Maximilian Universität Interpreter - Gliederung Programmiersprache Syntax Konkrete Syntax Abstrakter Syntax Baum (Abstrakte Syntax) Parser Syntaktische Struktur einer Sprache
MehrStruktur am Beispiel einer Liste
Struktur am Beispiel einer 1 Einfügen(neues element ) Aktiv Wartend knoten knoten 2 Einfügen(neues element ) Aktiv Wartend knoten knoten 3 Einfügen(neues element ) Aktiv Wartend knoten knoten 4 Aha, ich
MehrProgrammieren in Haskell
Programmieren in Haskell Felder (Arrays) Programmieren in Haskell 1 Was wir heute machen Motivationsbeispiel Die Typklasse Ix Felder in Haskell Funktionstabellierung Binäre Suche Pascalsches Dreieck Ein
MehrThomas Behr. 17. November 2011
in in Fakultät für Mathematik und Informatik Datenbanksysteme für neue Anwendungen FernUniversität in Hagen 17. November 2011 c 2011 FernUniversität in Hagen Outline in 1 2 3 4 5 6 - Was ist das? in über
MehrProgrammieren in Haskell
Programmieren in Haskell Syntax und Semantik von Haskell Programmieren in Haskell 1 Was wir heute (und nächstes mal) machen Datentypdefinitionen Wertdefinitionen, Variablenbindungen Musterbindungen Funktionsbindungen
MehrProgrammiertechnik II
2007 Martin v. Löwis Priority Queues and Heapsort 2007 Martin v. Löwis 2 Priority Queue Abstrakter Datentyp Inhalt: Elemente mit Priorität Operationen: Einfügen: Angabe des Elements und seiner Priorität
MehrRepetitorium Informatik (Java)
Repetitorium Informatik (Java) Tag 6 Lehrstuhl für Informatik 2 (Programmiersysteme) Übersicht 1 Klassen und Objekte Objektorientierung Begrifflichkeiten Deklaration von Klassen Instanzmethoden/-variablen
MehrFunktionale Programmierung mit Haskell
Funktionale Programmierung mit Haskell Dr. Michael Savorić Hohenstaufen-Gymnasium (HSG) Kaiserslautern Version 20120622 Überblick Wichtige Eigenschaften Einführungsbeispiele Listenerzeugung und Beispiel
MehrFelder. November 5, 2014
Felder Universität Bielefeld AG Praktische Informatik November 5, 2014 Felder: Datenstrukturen mit konstantem Zugriff Felder nennt man auch, Vektoren, Matrizen,... Konstanter Zugriff heisst: Zugriff auf
Mehr26 Hierarchisch strukturierte Daten
Algorithmik II Peter Wilke Sommersemester 2005 Teil III Funktionale Programmierung 26 Hierarchisch strukturierte Daten Peter Wilke Algorithmik II Sommersemester 2005 1 Peter Wilke Algorithmik II Sommersemester
MehrÜbersicht Datenstrukturen und Algorithmen. Literatur. Algorithmus: Wikipedia Definition. Vorlesung 1: Einführung. Prof. Dr.
Übersicht Datenstrukturen und Vorlesung 1: Prof. Dr. Erika Ábrahám Theorie Hybrider Systeme Informatik 2 http://ths.rwth-aachen.de/teaching/ss-14/ datenstrukturen-und-algorithmen/ Diese Präsentation verwendet
MehrVererbung & Schnittstellen in C#
Vererbung & Schnittstellen in C# Inhaltsübersicht - Vorüberlegung - Vererbung - Schnittstellenklassen - Zusammenfassung 1 Vorüberlegung Wozu benötigt man Vererbung überhaubt? 1.Um Zeit zu sparen! Verwendung
MehrProgrammieren ++ Begleitende Übungen zu Veranstaltungen + Umsetzen des Algorithmus in ein lauffähiges Programm
Studienanforderungen Studiengang Maschinenbau Programmieren Begleitende Übungen zu Veranstaltungen Umsetzen des Algorithmus in ein lauffähiges Programm Studiengang Bauingenieurwesen Programmieren Begleitende
MehrInhalte Informatik. I1 Grundprinzip des objektorientierten Modellierens I3 Modellieren von Netzwerkanwendungen
Inhalte Informatik I1 Grundprinzip des objektorientierten Modellierens I3 Modellieren von Netzwerkanwendungen II.0 Grundlegende Programmstrukturen und Algorithmen Sortier- und Suchalgorithmen auf Arrays
Mehr3.2 Modellierende Spezifikation von ADT
3.2 Modellierende Spezifikation von ADT Wie kann ich das Verhalten der Operationen eines ADO spezifizieren, wenn ich mich wegen der Datenabstraktion nicht auf seine Daten beziehen kann? 2 Alternativen:
MehrAusarbeitung des Interpreter Referats
Ausarbeitung des Interpreter Referats Gliederung 1. Programmiersprache 1.2. Syntax 1.2.1. Konkrete Syntax 1.2.2. Abstrakter Syntax Baum (Abstrakte Syntax) 2. Parser 2.1. Syntaktische Struktur einer Sprache
MehrString s1, s2; Eine Zuweisung geschieht am einfachsten direkt durch Angabe des Strings eingeschlossen in doppelte Hochkommata:
Informatik mit Java: Gierhardt Zeichenketten bzw. Strings Der Datentyp String Zeichenketten bzw. Strings sind eine häufig benutzte Datenstruktur. Man könnte auch mit Arrays aus Zeichen arbeiten. Da aber
MehrDer Datentyp String. Stringvariable und -vergleiche
Informatik 12 mit Java: Gierhardt Zeichenketten bzw. Strings Der Datentyp String Zeichenketten bzw. Strings sind eine häufig benutzte Datenstruktur. Man könnte auch mit Arrays aus Zeichen arbeiten. Da
Mehr1. Typen und Literale (6 Punkte) 2. Zuweisungen (6 = Punkte)
Praktische Informatik (Software) Vorlesung Softwareentwicklung 1 Prof. Dr. A. Ferscha Hauptklausur am 01. 02. 2001 Zuname Vorname Matr. Nr. Stud. Kennz. Sitzplatz HS / / / Punkte Note korr. Fügen Sie fehlende
MehrDie Bedeutung abstrakter Datentypen in der objektorientierten Programmierung. Klaus Kusche, September 2014
Die Bedeutung abstrakter Datentypen in der objektorientierten Programmierung Klaus Kusche, September 2014 Inhalt Ziel & Voraussetzungen Was sind abstrakte Datentypen? Was kann man damit grundsätzlich?
MehrGrundlegende Datentypen
Foliensatz 4 Michael Brinkmeier Technische Universität Ilmenau Institut für Theoretische Informatik Sommersemester 2009 TU Ilmenau Seite 1 / 50 Grundlegende Datentypen TU Ilmenau Seite 2 / 50 Atomare Datentypen
MehrKapitel 11: Wiederholung und Zusammenfassung
Wiederholung und Zusammenfassung 1: Begriff und Grundprobleme der Informatik Begriff Informatik Computer als universelle Rechenmaschine Grenzen der Berechenbarkeit Digitalisierung Problem der Komplexität
MehrBTree.dll - Balancierte und verkettete Bäume. Ecofor. BTree.dll. Realisiert mit Microsoft Visual Studio 16.04.2015 1/9
BTree.dll Realisiert mit Microsoft Visual Studio 16.04.2015 1/9 INHALT 1. Allgemein... 3 2. Class BTree1 (balanciert)... 3 3. Class BTree2 (balanciert und verkettet)... 4 4. Beschreibung BTree1 und BTree2...
MehrInhaltsverzeichnis. Praktikum Algoritmen und Datenstrukturen WS2004/2005 Paul Litzbarski Stefan Nottorf. Druckmanager allgemein 2.
Praktikum Algoritmen und Datenstrukturen WS2004/2005 Paul Litzbarski Stefan Nottorf Inhaltsverzeichnis Druckmanager allgemein 2 Design 2 Druckauftrag 3 Liste 4 ListenEintrag 6 GUI 7 1 Druckmanager : allgemein
MehrFachgebiet Informationssysteme Prof. Dr.-Ing. N. Fuhr. Programmierung Prof. Dr.-Ing. Nobert Fuhr. Übungsblatt Nr. 10
Gudrun Fischer Sascha Kriewel programmierung@is.informatik.uni-duisburg.de Übungsblatt Nr. 10 Aufgabe 20: Code Verständnis Löse diese Aufgabe selbständig als Vorbereitung zur Übung auf dem Papier. a) Gib
MehrHaskell. A Wild Ride. Sven M. Hallberg. sm@khjk.org. 21C3 Berlin / Bildungswerk Hamburg 20.6.2007 p. 1/36
21C3 Berlin / Bildungswerk Hamburg 20.6.2007 p. 1/36 Haskell A Wild Ride Sven M. Hallberg sm@khjk.org 21C3 Berlin / Bildungswerk Hamburg 20.6.2007 p. 2/36 Überblick Vorsichtsmaßnahmen Einführung und Sprachgrundlagen
MehrProgrammierung mit C Zeiger
Programmierung mit C Zeiger Zeiger (Pointer)... ist eine Variable, die die Adresse eines Speicherbereichs enthält. Der Speicherbereich kann... kann den Wert einer Variablen enthalten oder... dynamisch
MehrGrundlagen von Python
Einführung in Python Grundlagen von Python Felix Döring, Felix Wittwer November 17, 2015 Scriptcharakter Programmierparadigmen Imperatives Programmieren Das Scoping Problem Objektorientiertes Programmieren
MehrWas bisher geschah Funktionale Programmierung in Haskell: Algebraische Datentypen Pattern Matching Polymorphie Typklassen Rekursive Datentypen:
Was bisher geschah Funktionale Programmierung in Haskell: Algebraische Datentypen Pattern Matching Polymorphie Typklassen Rekursive Datentypen: Peano-Zahlen, Listen, Bäume Rekursive Funktionen strukturelle
Mehr[10] Software Transactional Memory in Haskell, Tortenwurf und Aufgabenblatt 7
Haskell Live [10 Software Transactional Memory in Haskell, Tortenwurf und Aufgabenblatt 7 Bong Min Kim e0327177@student.tuwien.ac.at Christoph Spörk christoph.spoerk@inode.at Bernhard Urban lewurm@gmail.com
MehrAlgorithmen und Datenstrukturen
Gustav Pomberger Heinz Dobler Algorithmen und Datenstrukturen Eine systematische Einführung in die Programmierung ein Imprint von Pearson Education München Boston San Francisco Harlow, England Don Mills,
MehrNiedersächsisches Kultusministerium Juli 2015
18. Informatik A. Fachbezogene Hinweise Die Rahmenrichtlinien Informatik sind so offen formuliert, dass sie Raum für die Gestaltung eines zeitgemäßen Informatikunterrichts lassen. Neue Inhalte der Informatik
MehrTypdeklarationen. Es gibt in Haskell bereits primitive Typen:
Typdeklarationen Es gibt in bereits primitive Typen: Integer: ganze Zahlen, z.b. 1289736781236 Int: ganze Zahlen mit Computerarithmetik, z.b. 123 Double: Fließkommazahlen, z.b. 3.14159 String: Zeichenketten,
MehrÜbungspaket 31 Entwicklung eines einfachen Kellerspeiches (Stacks)
Übungspaket 31 Entwicklung eines einfachen Kellerspeiches (Stacks) Übungsziele: Skript: 1. Definieren einer dynamischen Datenstruktur 2. Dynamische Speicher Speicherallokation 3. Implementierung eines
MehrInhaltsverzeichnis. Einführende Bemerkungen 11. Das Fach Informatik 11 Zielsetzung der Vorlesung Grundbegriffe
Inhaltsverzeichnis Einführende Bemerkungen 11 Das Fach Informatik 11 Zielsetzung der Vorlesung 12 1. Grundbegriffe 1 3 1.1 1.2 1.3 1.4 1.5 1.6 1.7 Information und Nachricht 1.1.1 Information 1.1.2 Nachricht
MehrKapitel 9: Klassen und höhere Datentypen. Klassen und höhere. Objekte, Felder, Methoden. Küchlin/Weber: Einführung in die Informatik
Klassen und höhere Datentypen Objekte, Felder, Methoden Küchlin/Weber: Einführung in die Informatik Klassen Klasse (class) stellt einen (i.a. benutzerdefinierten) Verbund-Datentyp dar Objekte sind Instanzen
Mehr2.5 Listen. Kurzschreibweise: [42; 0; 16] Listen werden mithilfe von [] und :: konstruiert.
2.5 Listen Listen werden mithilfe von [] und :: konstruiert. Kurzschreibweise: [42; 0; 16] # let mt = [];; val mt : a list = [] # let l1 = 1::mt;; val l1 : int list = [1] # let l = [1;2;3];; val l : int
MehrWelche Informatik-Kenntnisse bringen Sie mit?
Welche Informatik-Kenntnisse bringen Sie mit? So gehen Sie vor! Lösen Sie die Aufgaben der Reihe nach von 1 bis 20, ohne das Lösungsblatt zur Hilfe zu nehmen. Der Schwierigkeitsgrad der Aufgaben nimmt
MehrTag 6. Module, benannte Funktionen und Rekursion
Tag 6 Module, benannte Funktionen und Rekursion Wir verlassen nun die abgeschlossene kleine Welt des interaktiven Interpreters und lernen, wie man richtige Haskell-Programme schreibt. Im Interpreter haben
MehrJava Generics & Collections
Java Praktikum Effizientes Programmieren (Sommersemester 2015) Dennis Reuling Agenda 1 2 3 1 / 30 Praktikum Effizientes Programmieren (Sommersemester 2015) Java Subtyping Teil 1 2 / 30 Praktikum Effizientes
MehrEinführung in die Java- Programmierung
Einführung in die Java- Programmierung Dr. Volker Riediger Tassilo Horn riediger horn@uni-koblenz.de WiSe 2012/13 1 Wichtig... Mittags keine Pommes... Praktikum A 230 C 207 (Madeleine + Esma) F 112 F 113
MehrProgrammieren in Java
Datenstrukturen 2 Gruppierung von Daten Datentypen, die eine Menge an Daten gruppieren und auf dieser Gruppierung eine gewisse Logik bereitstellen werden Datenstrukturen genannt Bisher wurde zur Gruppierung
MehrVerkettete Listen. Implementierung von einfach verketteten Listen. Implementierung von doppelt verketteten Listen
Verkettete Listen Verwendung von Listen in Java Das Prinzip des Iterators Implementierung von einfach verketteten Listen Implementierung von doppelt verketteten Listen Informatik II: Objektorientierte
Mehr1. Teilklausur. Modul "OOPM Vorlesung/Übung" 16.12.2008. Gruppe A
Objektorientierte Programmierung und Modellierung WS 2008/2009 Institut für Informatik Prof. Dr. Ralf Lämmel Dr. Manfred Jackel 1. Teilklausur Modul "OOPM Vorlesung/Übung" 16.12.2008 Gruppe A Name Vorname
MehrBinärbäume als weiteres Beispiel für abstrakte Datentypen in PVS mit in Knoten gespeicherten Werten vom Typ T:
Binäre Bäume Binärbäume als weiteres Beispiel für abstrakte Datentypen in PVS mit in Knoten gespeicherten Werten vom Typ T: BinTree [T: TYPE]: DATATYPE empty: empty? node (key: T, left:bibtree, right:bibtree):
MehrTypklassen, Eingabe und Monaden In Haskell
Typklassen, Eingabe und Monaden In Haskell Felix Rahmati Jonathan Beierle 1 Einleitung In dieser Ausarbeitung befassen wir uns mit den Vorteilen einiger fortgeschrittener Konzepte der funktionalen Programmierung
MehrSpeicher und Adressraum
Linearer Speicher (Adressraum) Technische Universität München Speicher und Adressraum Freie Speicherhalde (Heap) Freier Speicherstapel (Stack) Globale Variablen Bibliotheksfunktionen Laufzeitsystem Programmcode
MehrKapitel 2: Analyse der Laufzeit von Algorithmen Gliederung
Gliederung 1. Motivation / Einordnung / Grundlagen 2. Analyse der Laufzeit von Algorithmen 3. Untere Schranken für algorithmische Probleme 4. Sortier- und Selektionsverfahren 5. Paradigmen des Algorithmenentwurfs
MehrInformatik II, SS 2014
Informatik II SS 2014 (Algorithmen & Datenstrukturen) Vorlesung 10 (3.6.2014) Binäre Suchbäume I Algorithmen und Komplexität Zusätzliche Dictionary Operationen Dictionary: Zusätzliche mögliche Operationen:
MehrKlausur zur Veranstaltung Programmierung (fortgeschrittene Konzepte)
Klausur zur Veranstaltung Programmierung (fortgeschrittene Konzepte) Bearbeitungszeit: 100 Minuten (14:15-15:55) Gesamtpunktzahl: 80 Punkte + 30 Zusatzpunkte Die Punktzahlen sind in etwa so bemessen, dass
Mehr14. Rot-Schwarz-Bäume
Bislang: Wörterbuchoperationen bei binären Suchbäume effizient durchführbar, falls Höhe des Baums klein. Rot-Schwarz-Bäume spezielle Suchbäume. Rot-Schwarz-Baum mit n Knoten hat Höhe höchstens 2 log(n+1).
MehrAmortisierte Analysen
Amortisierte Analysen 26. Mai 2016 1 Einleitung Es gibt viele Datenstrukturen, bei deren Komplexitätsanalyse das Problem auftaucht, dass die Ausführung mancher Operationen Einfluss auf die Komplexität
Mehrzu große Programme (Bildschirmseite!) zerlegen in (weitgehend) unabhängige Einheiten: Unterprogramme
Bisher Datentypen: einfach Zahlen, Wahrheitswerte, Zeichenketten zusammengesetzt Arrays (Felder) zur Verwaltung mehrerer zusammengehörender Daten desselben Datentypes eindimensional, mehrdimensional, Array-Grenzen
MehrEinführung in die Programmierung
Technische Universität München WS 2003/2004 Institut für Informatik Prof. Dr. Christoph Zenger Testklausur Einführung in die Programmierung Probeklausur Java (Lösungsvorschlag) 1 Die Klasse ArrayList In
MehrDatenstrukturen & Algorithmen
Datenstrukturen & Algorithmen Matthias Zwicker Universität Bern Frühling 2010 Übersicht Elementare Datenstrukturen für dynamische Mengen Stapel & Warteschlangen Verkettete Listen Bäume Anwendungsbeispiel:
MehrKapitel 8: Abstrakte Datentypen. Inhalt. Definition ADT Keller ADT Schlange
Wintersemester 005/06 Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich Informatik Lehrstuhl
MehrEinführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung)
Wintersemester 2005/06 Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich Informatik Lehrstuhl
MehrModul Entscheidungsunterstützung in der Logistik. Einführung in die Programmierung mit C++ Übung 1
Fakultät Verkehrswissenschaften Friedrich List, Professur für Verkehrsbetriebslehre und Logistik Modul Entscheidungsunterstützung in der Logistik Einführung in die Programmierung mit C++ Übung 1 SS 2016
MehrFunktionale Programmiersprachen
Funktionale Programmiersprachen An den Beispielen Haskell und Erlang Übersicht Programmiersprachen λ-kalkül Syntax, Definitionen Besonderheiten von funktionalen Programmiersprache, bzw. Haskell Objektorientierte
Mehrzu große Programme (Bildschirmseite!) zerlegen in (weitgehend) unabhängige Einheiten: Unterprogramme
Bisher Datentypen: einfach Zahlen, Wahrheitswerte, Zeichenketten zusammengesetzt Arrays (Felder) zur Verwaltung mehrerer zusammengehörender Daten desselben Datentypes eindimensional, mehrdimensional, Array-Grenzen
MehrALP I. Funktionale Programmierung
ALP I Funktionale Programmierung Sortieren und Suchen (Teil 1) WS 2012/2013 Suchen 8 False unsortiert 21 4 16 7 19 11 12 7 1 5 27 3 8 False sortiert 2 4 6 7 9 11 12 18 21 24 27 36 Suchen in unsortierten
MehrRekursion. Was heißt "rekursiv" Page 1. Eine Methode m() heißt rekursiv, wenn sie sich selbst aufruft. Beispiel: Berechnung der Fakultät (n!
Rekursion Was heißt "rekursiv" Eine Methode m() heißt rekursiv, wenn sie sich selbst aufruft m() { m(); direkt rekursiv m() { n() { m(); indirekt rekursiv Beispiel: Berechnung der Fakultät (n!) n! = 1
MehrFormale Spezialisierungstechniken. am Beispiel des binären Baums. Hybride Programmiersprachen Daniel Krompass Berlin, 2009
Formale Spezialisierungstechniken am Beispiel des binären Baums. Hybride Programmiersprachen Daniel Krompass Berlin, 2009 Spezialisierungsarten (Typbeziehungen erster Art) X stellt Methoden und Eigenschaften
MehrFunktionale Programmierung mit Haskell. Jan Hermanns
Funktionale Programmierung mit Haskell Jan Hermanns 1 Programmiersprachen imperativ deklarativ konventionell OO logisch funktional Fortran Smalltalk Prolog Lisp C Eiffel ML Pascal Java Haskell 2 von Neumann
MehrProbeklausur: Programmierung WS04/05
Probeklausur: Programmierung WS04/05 Name: Hinweise zur Bearbeitung Nimm Dir für diese Klausur ausreichend Zeit, und sorge dafür, dass Du nicht gestört wirst. Die Klausur ist für 90 Minuten angesetzt,
MehrEin Algorithmus heißt rekursiv, wenn er sich selbst aufruft. Meist werden nur einzelne Module eines Gesamtalgorithmus rekursiv verwendet.
3.6 Rekursion Ein Algorithmus heißt rekursiv, wenn er sich selbst aufruft. Meist werden nur einzelne Module eines Gesamtalgorithmus rekursiv verwendet. Klassisches Beispiel: Berechnung von n! (Fakultät
Mehr