Programmierung 1 (Wintersemester 2015/16) Wiederholungstutorium Lösungsblatt 4 (Sortieren und Konstruktoren)

Größe: px
Ab Seite anzeigen:

Download "Programmierung 1 (Wintersemester 2015/16) Wiederholungstutorium Lösungsblatt 4 (Sortieren und Konstruktoren)"

Transkript

1 Fachrichtung 6.2 Informatik Universität des Saarlandes Tutorenteam der Vorlesung Programmierung 1 Programmierung 1 (Wintersemester 2015/16) Wiederholungstutorium Lösungsblatt 4 (Sortieren und Konstruktoren) Hinweis: Dieses Übungsblatt enthält von den Tutoren für das Wiederholungstutorium erstellte Aufgaben. Die Aufgaben und die damit abgedeckten Themenbereiche sind für die Klausur weder relevant noch irrelevant. 1 Vergleichsprozeduren Aufgabe 4.1 (Case-Käse) Schreiben Sie eine Prozedur kaese: int string, die zu einer gegebenen Zahl eine Zeichenkette nach folgenden Regeln liefert. kaese 0 = " null " kaese 1 = " eins " kaese 2 = " zwei " Für alle anderen Zahlen soll kaese die Zeichenkette kaese liefern. Schreiben Sie kaese mit einem case Ausdruck. Lösung 4.1: fun kaese x = case x of 0 " null " 1 " eins " 2 " zwei " _ " kaese " Aufgabe 4.2 Betrachten Sie folgende case-struktur: case xs of nil 0 [(x,y)] x+y [(x,5), (7,y)] x*y (_::_:: xr) 1 Welche der Muster der 4 Regeln des case-ausdrucks treffen den Wert [(2, 5), (7, 3)]? An welche Werte werden die Variablen der Muster dabei gebunden? Aufgabe 4.3 (Lexikalische Ordnung für Listen) Schreiben Sie eine polymorphe Prozedur listcmp: (α * α order) α list * α list order, die zwei Listen gemäß einer Vergleichsprozedur lexikalisch vergleicht. Lösung 4.3: fun listcmp cmp ( nil, nil ) = EQUAL listcmp cmp ( xs, nil ) = GREATER listcmp cmp ( nil, ys) = LESS listcmp cmp (x::xr,y:: yr) = case cmp (x,y) of EQUAL listcmp cmp ( xr, yr) 1

2 s s Aufgabe 4.4 (Zeichenketten vergleichen) Schreiben Sie eine Vergleichsprozedur strcmp: string * string order, die zwei Zeichenketten gemäß der lexikalischen Ordnung vergleicht. Gehen Sie dazu wie folgt vor. (a) Schreiben Sie eine Vergleichsprozedur charcmp: char * char order, die zwei Zeichen gemäß ihrer Ordnungszahlen vergleicht. (b) Schreiben Sie strcmp unter Verwendung von charcmp und listcmp aus der vorherigen Aufgabe. Lösung 4.4: (a) fun charcmp (x,y) = Int. compare ( ord x, ord y) (b) fun strcmp ( x, y) = listcmp charcmp ( explode x, explode y) Aufgabe 4.5 (Member) Schreiben Sie eine polymorphe Prozedur member: (α * α order) α α list bool, die testet, ob ein gegebener Wert in einer Liste vorkommt. Lösung 4.5: fun member cmp x nil = false member cmp x (y:: yr) = case cmp (x,y) of EQUAL true s member cmp x yr 2 Sortieren Aufgabe 4.6 (Sortieren durch Einfügen) Verdeutlichen Sie sich den Algorithmus von Sortieren durch Einfügen und lösen Sie folgende Aufgaben. (a) Muss der Algorithmus für alle Argumente gleich viel Arbeit leisten? (b) Wenn nicht, wann ist der Algorithmus am effizientesten/ineffizientesten? Geben Sie Beispiele für Listen der Länge 5 an, die aufsteigend sortiert werden sollen. (c) Implementieren Sie Sortieren durch Einfügen durch eine Prozedur isort: int list int list, die eine Liste aus ganzen Zahlen strikt aufsteigend sortiert. (d) Implementieren Sie nun den Algorithmus polymorph unter Verwendung einer an pisort übergebenen Vergleichsprozedur cmp. Dabei soll pisort das Typschema (α * α order) α list α list besitzen und beliebige Listen aufsteigend sortieren. (e) Verdeutlichen Sie sich, wie die bereits fertige polymorphe Prozedur pisort jetzt verwendet werden kann, um eine andere Sortierprozedur (z.b. absteigend sortierend) zu erhalten. (f) Schreiben Sie eine Prozedur downsort: int list int list, die Listen von ganzen Zahlen absteigend sortiert. Verwenden Sie pisort. Lösung 4.6: (a) Nein, da in jedem Schritt in die bereits sortierte Teilliste von der zu sortierenden Liste die restlichen Elemente einsortiert werden, kommt es darauf an, an welcher Stelle diese einzufügen sind. 2

3 (b) sort [1,2,3,4,5] ist am ineffizientesten, da das einzusortierende Element in jedem Schritt am Ende der sortierten Teilliste einzufügen ist. Dahingegen ist sort [5,4,3,2,1] am effizientesten, da immer vorne eingefügt wird. (c) fun sort xs = let fun insert (x,nil ) = [x] insert (x,y:: yr) = if x<y then x::y:: yr else if x=y then y:: yr else y:: insert (x,yr) in foldl insert nil xs end (d) fun sort cmp xs = let fun insert (x,nil ) = [x] insert (x,y:: yr) = case cmp (x,y) of GREATER y:: insert (x,yr) _ x::y:: yr in foldl insert nil xs end (e) Die übergebene Vergleichsprozedur entscheidet darüber, wie die Elemente sortiert werden. (f) fun mycmp ( x, y) = if x<y then GREATER else if x>y then LESS else EQUAL val downsort = sort mycmp Aufgabe 4.7 (Sortieren durch Mischen) Schreiben Sie eine polymorphe Sortierprozedur pmsort: (α * α order) α list α list, die durch Mischen sortiert. Lösung 4.7: fun pmsort cmp nil = nil pmsort cmp [x] = [x] pmsort cmp xs = let fun split xs = foldl (fn (x,(us,vs )) (x::vs,us )) (nil, nil ) xs fun merge xs nil = xs merge nil ys = ys merge (x:: xr) (y:: yr) = case cmp (x,y) of GREATER y:: merge (x:: xr) yr EQUAL x::y:: merge xr yr LESS x:: merge xr (y:: yr) val (us,vs) = split xs in merge ( pmsort cmp us) ( pmsort cmp vs) end Aufgabe 4.8 (Für fleißige Meistersortierer oder zum überspringen) (a) Schreiben Sie eine Prozedur partition : int int list int list * int list die zu einer Zahl x und einer Liste xs zwei Listen us und vs wie folgt liefert: 1. sort(us@vs) = sort xs 2. Alle Elemente von us sind kleiner als x und alle Elemente von vs sind größer oder gleich x. Schreiben Sie partition mit foldl. (b) Schreiben Sie eine Prozedur qsort: int list int list, die Listen über int gemäß dem Algorithmus Quicksort sortiert. 3

4 Quicksort sortiert Listen gemäß der Prozedur partition, die eine Liste in zwei Teillisten zerlegt und ihre durch Rekursion berechnete Sortierung mit Konkatenation wieder zusammenfügt: qsort(x :: xr) = (qsort (qsort vs) (c) Schreiben Sie eine Prozedur ppartition : (α * α order ) α list α list * α list * α list die eine Liste xs gemäß einer Vergleichsprozedur f in drei Listen us, vs, ws zerlegt, sodass der Vergleich f für die Elemente von us LESS, von vs EQUAL und von ws GREAT ER liefert. (d) Knifflig! Implementieren Sie Quicksort mithilfe von ppartition polymorph. Lösung 4.8: (a) fun partition r xs = let fun spread (x,(us,vs )) = if x<r then (x::us,vs) else (us,x:: vs) in foldl spread ( nil, nil ) xs end (b) fun qsort nil = nil qsort (x:: xr) = let val (us,vs) = partition x xr in qsort qsort vs end (c) fun ppartition cmp r xs = let fun spread (x,(us,vs,ws )) = case cmp (x,r) of GREATER (us,vs,x:: ws) EQUAL (us,x::vs,ws) LESS (x::us,vs,ws) in foldl spread ( nil, nil, nil ) xs end (d) fun pqsort cmp nil = nil pqsort cmp (x:: xr) = let val (us,vs,ws) = ppartition cmp x xr in pqsort cmp [ pqsort cmp pqsort cmp ws end 4

5 3 Konstruktoren Aufgabe 4.9 (Osterschmuck mit Konstruktoren) Ihr bester Freund Dieter Schlau bereitet sich schon früh auf die Osterzeit vor. Er möchte bereits jetzt einen Osterstrauch festlich schmücken und plant dafür erstmal in SML, wie er dies realisieren könnte. Seien die Datentypen f arbe und strauch wie folgt gegeben: datatype farbe = GELB WEISS GRUEN datatype strauch = S of int Dabei zeigt f arbe, welche Farbe der Osterschmuck haben kann, mit dem man den Osterstrauch schmücken kann. Die ganze Zahl von strauch gibt an, wie viel Osterschmuck noch an den Strauch passt. Ignorieren Sie, dass man den Osterschmuck einfach etwas enger an den Osterstrauch hängen könnte. (a) Deklarieren Sie einen Datentyp schmuck, der den vorhandenen Osterschmuck darstellt. Osterschmuck besteht aus Ostereiern und kleinen Stoffschäfchen. Ostereier können alle gegebenen Farben haben. Für Stoffschäfchen braucht es keine Farbangabe, da diese immer weiß sind. (b) Deklarieren Sie eine Prozedur schaefchen: strauch strauch schmuck list, die einen Osterstrauch bekommt und eine Liste mit 8 Stoffschäfchen zurückgibt, zusammen mit den leer geblieben Ästen des Strauches (d.h. wenn der Eingabestrauch für 10 Schäfchen freie Äste hat, soll der Rückgabestrauch 2 freie Äste haben). Reicht der Strauch nicht mehr für 8 Schäfchen, so sollen nur so viele Schäfchen zurückgegeben werden wie Äste da sind, zusammen mit dem jetzt aufgebrauchten Platz, also S 0. (c) Wir können das Schmücken der Strauchs durch Prozeduren vom Typ strauch strauch schmuck darstellen. Hier soll der zurückgegebene Strauch für ein Schmuckstück weniger reichen als der Eingabestrauch. Falls der Eingabestrauch nicht mehr genug Platz für weiteren Schmuck hat, soll eine NotEnoughBoughs Exception geworfen werden. Definieren Sie einen Typ anhaengen, der das Schmücken des Strauches auf diese Weise darstellt. Hinweis: Sie sollen hier das Schlüsselwort type verwenden, nicht datatype. (d) Deklarieren Sie eine Prozedur verwandle : farbe anhaengen, die zu einer gegebenen Farbe eine Prozedur zurückgibt, die Ostereier der Farbe an einen Strauch hängt. (e) Deklarieren Sie eine Prozedur schmuecken : strauch farbe option strauch schmuck list, die ein Osterei der entsprechenden Farbe an den Strauch hängt. Falls die übergebene Farbe N ON E ist, sollen bis zu 8 Stoffschäfchen an den Strauch gehängt werden. Sollten während des Schmückens die Äste ausgehen, (es werden z.b. nur 5 Schäfchen an den Strauch gehangen), so soll die NotEnoughBoughs Exception geworfen werden. Bleiben Äste übrig, so soll diese zurückgegeben werden. (f) Und nun zum krönenden Abschluss: Deklarieren Sie eine Prozedur schmueckautonomous : strauch f arbe option list strauch schmuck list die (unter Verwendung von schmuecken) entsprechend der f arbe option list den Strauch schmückt und zurückgibt. Falls während des Schmückens die Äste ausgehen, sollen automatisch neue Äste hinzugestellt werden. Mit val newboughs = S 20 können immer neue Äste hinzugestellt werden. Es dürfen maximal 7 Äste weggeworfen werden, d.h. Sie dürfen sich nicht einfach für jeden Schmuckvorgang neue Äste nehmen. Lösung 4.9: (a) datatype schmuck = EIER of farbe STOFFSCHAEFCHEN (b) fun schaefchen ( S x) = iter ( Int. min (x,8)) ((S x), nil ) (fn ((S x),zs) (S (x 1), STOFFSCHAEFCHEN :: zs )) (c) exception NotEnoughBoughs type anhaengen = strauch strauch * schmuck (d) fun verwandle f ( S x) = if x=0 then raise NotEnoughBoughs else (S(x 1), EIER f) (e) fun schmuecken ( S x) NONE = if x < 8 then raise NotEnoughBoughs else schaefchen ( S x) schmuecken t ( SOME f) = let val ( a, b)=verwandle f t 5

6 in (a,[b]) end (f) fun schmueckautonomous t nil = ( t, nil ) schmueckautonomous t ( f:: fs) = let val ( a, b) = schmuecken t f handle NotEnoughBoughs schmueckautonomous newboughs ( f:: fs) val ( c, d) = schmueckautonomous a fs in (c,b@d ) end Aufgabe 4.10 (Natürliche Zahlen) Wir stellen die natürlichen Zahlen dar mit den Werten folgendes Konstruktortyps: datatype nat = O S of nat So ergibt sich z.b. 0 O, 1 SO, 2 S(SO), 3 S(S(SO)). (a) Deklarieren Sie eine Prozedur code: int nat, die die Darstellung einer natürlichen Zahl liefert und eine Prozedur decode: nat int, sodass decode (code n) = n für alle natürlichen Zahlen gilt. (b) Deklarieren Sie Prozeduren nat nat nat für folgende Berechnungen, ohne dabei Operationen für int zu verwenden: (i) Addition m + n. (ii) Multiplikation m n. (iii) Potenzierung m n. (iv) Kleiner-als m < n. Lösung 4.10: (a) fun code 0 = O code n = S ( code (n 1)) fun decode O = 0 decode ( S x) = 1 + decode x (b) (i) fun natadd O n = n natadd m O = m natadd (S m) (S n) = S ( natadd m (S n)) (ii) fun natmul O n = O natmul m O = O natmul (S m) (S n) = natadd (S m) ( natmul (S m) n) (iii) fun natpot O n = O natpot m O = S O natpot (S m) (S n) = natmul (S m) ( natpot (S m) n) (iv) fun natleq O O = false natleq O n = true natleq m O = false natleq (S m) (S n) = natleq m n Aufgabe 4.11 (Ziffern) Betrachten Sie folgenden Konstruktortyp, der natürliche Zahlen durch einzelne Ziffern darstellt: datatype digit = E of int M of int * digit So wird die Zahl 13 etwa durch M(1,E 3) dargestellt. (a) Geben Sie die Konstruktordarstellung der Zahl 9042 an. 6

7 (b) Schreiben Sie eine Prozedur stell: digit int zur Berechnung der Stelligkeit einer digit-zahl. (c) Schreiben Sie eine Prozedur rev: digit digit, die eine digit-zahl reversiert. Deklarieren Sie zunächst eine endrekursive Hilfsprozedur rev : digit digit digit. (d) Knifflig! Schreiben Sie eine Prozedur add: digit digit digit, die zwei digit-zahlen addiert. Verwenden Sie weder mod noch div. Orientieren Sie sich an dem schriftlichen Additionsverfahren, das Ziffern einzeln von rechts nach links zusammenzählt. Lösung 4.11: (a) M(9, M(0, M(4, E 2))) (b) fun stell ( E x) = 1 stell (M (x,m)) = 1 + stell m (c) fun rev (E z) = (E z) rev (M (z,e)) = let fun rev a (E z ) = M(z,a) rev a (M(z,d)) = rev (M(z,a)) d in rev (E z) e end (d) fun add d1 d2 = let fun add ( E z1) ( E z2) = if z1+z2 < 10 then ( E ( z1+z2 )) else (M(( z1+z2) 10,E 1)) add (M(z1,e)) (E z2) = if z1+z2 < 10 then (M(( z1+z2),e)) else (M(( z1+z2) 10, add e (E 1))) add (E z1) (M(z2,e)) = if z1+z2 < 10 then (M(( z1+z2),e)) else (M(( z1+z2) 10, add e (E 1))) add (M(z1,e)) (M(z2,h)) = if z1+z2 < 10 then (M(( z1+z2),add e h)) else (M(( z1+z2) 10, add (add e (E 1)) h)) in rev (add ( rev d1) ( rev d2 )) end Aufgabe 4.12 (Ausdrücke und Umgebungen) Wir betrachten folgende Deklaration für den Konstruktortyp exp. datatype exp = C of int V of string A of exp * exp M of exp * exp (a) Stellen Sie den Ausdruck (3x + 2)y durch die Werte des Konstruktortyps exp dar. (b) Schreiben Sie eine Prozedur subexps: exp exp list, die zu einem Ausdruck die Liste aller Teilausdrücke liefert. (c) Schreiben Sie eine Prozedur eval: (string int) exp int, die einen Ausdruck gegeben einer Umgebung auswertet. Die Umgebung wird dabei durch eine Prozedur string int realisiert, die Bezeichner an einen Wert bindet. Lösung 4.12: (a) M(A(M(C 3,V "x"),c 2),V "y") (b) fun subexps e = e ::( case e of A(e,e ) subexps subexps e M(e,e ) subexps subexps e _ nil ) (c) fun eval env ( V x) = env x eval env (C c) = c eval env (M(e,e )) = eval env e * eval env e eval env (A(e,e )) = eval env e + eval env e 7

8 4 Ausnahmen und Optionen Aufgabe 4.13 (Inception) Betrachten Sie folgendes Programm. Geben Sie das Typschema an. Zu was wertet die Prozedur aus? fun inception x = if null x then let exception Exception in Exception end else let val deception = tl x in inception ( deception ) end Lösung 4.13: Die Prozedur inception: α list exn gibt immer die Ausnahme Exception zurück. Aufgabe 4.14 (Someone?) Sei exception E of int vordeklariert. Sind folgende Programme gültig? Zu was werten sie aus? (a) ((fn x E x) (1 div 0); NONE) handle E x SOME x (b) ((fn x raise E x) 1; NONE) handle E x SOME x (c) ((fn E x x _ 0) (E 1); NONE) handle E x SOME x (d) (let exception F in raise E 1; NONE end) handle E x SOME x Welches der Programme bietet uns eine praktikable, funktionale Struktur zur Verwendung von Ausnahmen? Lösung 4.14: (a) uncaught exception Div (b) val it: SOME 1 Praktikabel und funktional zum Werfen und Fangen von Ausnahmen. (c) val it: NONE (d) val it: SOME 1 Aufgabe 4.15 (Auf Listen) (a) Schreiben Sie eine Prozedur last: α list α option, die das letzte Element einer Liste liefert. (b) Deklarieren Sie eine Prozedur length: α list int, die die Länge einer Liste bestimmt. Verwenden Sie keine Hilfsprozeduren außer hd und tl und verwenden Sie genau eine Regel für die Prozedur. (c) Schreiben Sie eine Prozedur double: (α * α order) α list α option, die eine Liste auf Mehrfachauftreten überprüft und gegebenenfalls das mehrfach auftretende Element als Option zurückgibt. (d) Schreiben Sie eine Prozedur find: (α * α order) α α list α option, die mithilfe einer Vergleichsprozedur prüft, ob ein Element x in einer Liste vorkommt. Ist dies der Fall, soll SOME x zurückgegeben werden, andernfalls N ON E. Lösung 4.15: (a) fun last nil = NONE last [x] = SOME x last (x:: xr) = last xr (b) fun length xs = 1 + length ( tl xs) handle Empty 0 (c) fun finddouble comp xs = let exception Double of α fun comp (x,y) = case comp (x,y) of EQUAL raise Double x v v in ( List. sort comp xs; NONE ) handle Double x SOME x 8

9 end (d) fun find cmp x nil = NONE find cmp x (y:: yr) = case cmp (x,y) of EQUAL SOME x _ find cmp x yr Aufgabe 4.16 (a) Schreiben Sie eine Prozedur optionizer: α option list α list, welche eine option-liste in eine Liste übersetzt. Sobald jedoch ein N ON E in der Liste auftritt, wird die bereits übersetzte Liste verworfen und ab dem NONE eine neue Liste aufgebaut. Zum Beispiel: optionizer[some a, NONE, SOME b] [b] (b) Schreiben Sie eine Prozedur multioptionater: (int option * int option) list int list, welche eine Liste aus int option-tupeln bekommt. Diese sollen miteinander multipliziert werden und in einer Liste ausgegeben werden. Befindet sich ein N ON E in einer Tupelkomponente, soll die Ausnahme urgh geworfen werden. Zum Beispiel: multioptionater[(some 4,SOME 0),(SOME 2,SOME 3),(SOME 1,SOME 4)] [0,6,4] Lösung 4.16: (a) fun optionizer xs = let fun opt nil ys = ys opt ( SOME x :: xr) ys = opt xr (x:: ys) opt ( NONE :: xr) ys = opt xr nil in opt xs nil end (b) exception urgh fun multioptionater xs = map (fn (x,y) case (x,y) of ( SOME x, SOME y) x*y _ raise urgh ) xs 9

Programmierung 1 (Wintersemester 2015/16) Wiederholungstutorium Lösungsblatt 15 (Linearer Speicher, Listen, Bäume)

Programmierung 1 (Wintersemester 2015/16) Wiederholungstutorium Lösungsblatt 15 (Linearer Speicher, Listen, Bäume) Fachrichtung 6.2 Informatik Universität des Saarlandes Tutorenteam der Vorlesung Programmierung 1 Programmierung 1 (Wintersemester 2015/16) Wiederholungstutorium Lösungsblatt 15 (Linearer Speicher, Listen,

Mehr

Klausur Programmierung WS 2002/03

Klausur Programmierung WS 2002/03 Klausur Programmierung WS 2002/03 Prof. Dr. Gert Smolka, Dipl. Inf. Thorsten Brunklaus 14. Dezember 2002 Leo Schlau 45 Vor- und Nachname Sitz-Nr. 4711 007 Matrikelnummer Code Bitte öffnen Sie das Klausurheft

Mehr

Programmierung 1 (Wintersemester 2012/13) Lösungsblatt 5 (Kapitel 6)

Programmierung 1 (Wintersemester 2012/13) Lösungsblatt 5 (Kapitel 6) Fachrichtung 6.2 Informatik Universität des Saarlandes Tutorenteam der Vorlesung Programmierung 1 Programmierung 1 (Wintersemester 2012/13) Lösungsblatt 5 (Kapitel 6) Hinweis: Dieses Zusatzübungsblatt

Mehr

1. Probeklausur (Lösung) zu Programmierung 1 (WS 07/08)

1. Probeklausur (Lösung) zu Programmierung 1 (WS 07/08) Fachschaft Informatikstudiengänge Fachrichtung 6.2 Informatik Das Team der Bremser 1. Probeklausur (Lösung) zu Programmierung 1 (WS 07/08) http://fsinfo.cs.uni-sb.de Name Matrikelnummer Bitte öffnen Sie

Mehr

Programmierung 1 (Wintersemester 2015/16) Wiederholungstutorium Lösungsblatt 13 (Queues, Binary Search)

Programmierung 1 (Wintersemester 2015/16) Wiederholungstutorium Lösungsblatt 13 (Queues, Binary Search) Fachrichtung 6.2 Informatik Universität des Saarlandes Tutorenteam der Vorlesung Programmierung 1 Programmierung 1 (Wintersemester 2015/16) Wiederholungstutorium Lösungsblatt 13 (Queues, Binary Search)

Mehr

Programmierung 1 (Wintersemester 2015/16) Lösungsblatt: Aufgaben für die Übungsgruppen: 5 (Kapitel 5)

Programmierung 1 (Wintersemester 2015/16) Lösungsblatt: Aufgaben für die Übungsgruppen: 5 (Kapitel 5) Fachrichtung 6.2 Informatik Universität des Saarlandes Tutorenteam der Vorlesung Programmierung 1 Programmierung 1 (Wtersemester 2015/16) Lösungsblatt: Aufgaben für die Übungsgruppen: 5 (Kapitel 5) Hweis:

Mehr

Verarbeitung unendlicher Datenstrukturen Jetzt können wir z.b. die unendliche Liste aller geraden Zahlen oder aller Quadratzahlen berechnen:

Verarbeitung unendlicher Datenstrukturen Jetzt können wir z.b. die unendliche Liste aller geraden Zahlen oder aller Quadratzahlen berechnen: Verarbeitung unendlicher Datenstrukturen Jetzt können wir z.b. die unendliche Liste aller geraden Zahlen oder aller Quadratzahlen berechnen: take 1 0 ( f i l t e r ( fn x => x mod 2=0) nat ) ; val it =

Mehr

Programmierung 1 Probeklausur zur Vorklausur

Programmierung 1 Probeklausur zur Vorklausur Fachrichtung 6.2 Informatik Universität des Saarlandes Tutorenteam der Vorlesung Programmierung 1 05.12.2015 Programmierung 1 Probeklausur zur Vorklausur Matrikelnummer: Bitte öffnen Sie das Klausurheft

Mehr

Programmierung 1 (Wintersemester 2012/13) Lösungsblatt 7 (Kapitel 7)

Programmierung 1 (Wintersemester 2012/13) Lösungsblatt 7 (Kapitel 7) Fachrichtung 6.2 Informatik Universität des Saarlandes Tutorenteam der Vorlesung Programmierung 1 Programmierung 1 (Wintersemester 2012/13) Lösungsblatt 7 (Kapitel 7) Hinweis: Dieses Übungsblatt enthält

Mehr

1. Probeklausur Programmierung 1 (WS 2010/2011)

1. Probeklausur Programmierung 1 (WS 2010/2011) 1. Probeklausur Programmierung 1 (WS 2010/2011) Team der Tutoren 11. Dezember 2010 Name Sitzplatz Matrikelnummer Bitte öffnen Sie das Klausurheft erst dann, wenn Sie dazu aufgefordert werden. Sie können

Mehr

1. Probeklausur zu Programmierung 1 (WS 07/08)

1. Probeklausur zu Programmierung 1 (WS 07/08) Fachschaft Informatikstudiengänge Fachrichtung 6.2 Informatik Das Team der Bremser 1. Probeklausur zu Programmierung 1 (WS 07/08) http://fsinfo.cs.uni-sb.de Name Matrikelnummer Bitte öffnen Sie das Klausurheft

Mehr

Programmierung 1 (Wintersemester 2012/13) Lösungsblatt 1 (Kapitel 1)

Programmierung 1 (Wintersemester 2012/13) Lösungsblatt 1 (Kapitel 1) Fachrichtung 6.2 Informatik Universität des Saarlandes Tutorenteam der Vorlesung Programmierung 1 Programmierung 1 (Wintersemester 2012/13) Lösungsblatt 1 (Kapitel 1) Hinweis: Dieses Übungsblatt enthält

Mehr

1. Probeklausur zur Vorlesung Programmierung 1 im Wintersemester 2011/2012

1. Probeklausur zur Vorlesung Programmierung 1 im Wintersemester 2011/2012 1. Probeklausur zur Vorlesung Programmierung 1 im Wintersemester 2011/2012 Das Team der Tutoren 03. Dezember 2011 Name Matrikelnummer Bitte öffnen Sie das Klausurheft erst dann, wenn Sie dazu aufgefordert

Mehr

Programmierung 1 (Wintersemester 2015/16) Wiederholungstutorium Lösungsblatt 11 (Parser II)

Programmierung 1 (Wintersemester 2015/16) Wiederholungstutorium Lösungsblatt 11 (Parser II) Fachrichtung 6.2 Informatik Universität des Saarlandes Tutorenteam der Vorlesung Programmierung 1 Programmierung 1 (Wintersemester 2015/16) Wiederholungstutorium Lösungsblatt 11 (Parser II) Hinweis: Dieses

Mehr

Programmierung 1 (Wintersemester 2015/16) Wiederholungstutorium Lösungsblatt 17 (Best of)

Programmierung 1 (Wintersemester 2015/16) Wiederholungstutorium Lösungsblatt 17 (Best of) Fachrichtung 6.2 Informatik Universität des Saarlandes Tutorenteam der Vorlesung Programmierung 1 Programmierung 1 (Wintersemester 2015/16) Wiederholungstutorium Lösungsblatt 17 (Best of) Hinweis: Dieses

Mehr

Programmierung 1 (Wintersemester 2012/13) Lösungsblatt 7 (Kapitel 7)

Programmierung 1 (Wintersemester 2012/13) Lösungsblatt 7 (Kapitel 7) Fachrichtung 6.2 Informatik Universität des Saarlandes Tutorenteam der Vorlesung Programmierung 1 Programmierung 1 (Wintersemester 2012/13) Lösungsblatt 7 (Kapitel 7) Hinweis: Dieses Übungsblatt enthält

Mehr

Programmierung 1 (Wintersemester 2012/13) Lösungsblatt 10 (Kapitel 11)

Programmierung 1 (Wintersemester 2012/13) Lösungsblatt 10 (Kapitel 11) Fachrichtung 6.2 Informatik Universität des Saarlandes Tutorenteam der Vorlesung Programmierung 1 Programmierung 1 (Wintersemester 2012/13) Lösungsblatt 10 (Kapitel 11) Hinweis: Dieses Übungsblatt enthält

Mehr

Programmierung 1 (Wintersemester 2015/16) Lösungsblatt: Aufgaben für die Übungsgruppen: 12 (Kapitel 13)

Programmierung 1 (Wintersemester 2015/16) Lösungsblatt: Aufgaben für die Übungsgruppen: 12 (Kapitel 13) Fachrichtung 6.2 Informatik Universität des Saarlandes Tutorenteam der Vorlesung Programmierung 1 Programmierung 1 (Wintersemester 2015/16) Lösungsblatt: Aufgaben für die Übungsgruppen: 12 (Kapitel 13)

Mehr

Theorembeweiserpraktikum SS 2016

Theorembeweiserpraktikum SS 2016 Institut für Programmstrukturen und Datenorganisation Lehrstuhl Programmierparadigmen Am Fasanengarten 5 76131 Karlsruhe http://pp.ipd.kit.edu/ Theorembeweiserpraktikum SS 2016 http://pp.ipd.kit.edu/lehre/ss2016/tba

Mehr

Programmierung 1 (Wintersemester 2015/16) Lösungsblatt: Aufgaben für die Übungsgruppen: 8 (Kapitel 9)

Programmierung 1 (Wintersemester 2015/16) Lösungsblatt: Aufgaben für die Übungsgruppen: 8 (Kapitel 9) Fachrichtung 6. Informatik Universität des Saarlandes Tutorenteam der Vorlesung Programmierung Programmierung (Wintersemester 5/6) Lösungsblatt: Aufgaben für die Übungsgruppen: 8 (Kapitel 9) Hinweis: Dieses

Mehr

Programmierung und Modellierung

Programmierung 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:

Mehr

Was bisher geschah. deklarative Programmierung. funktionale Programmierung (Haskell):

Was 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

Mehr

Allgemeine Hinweise: TECHNISCHE UNIVERSITÄT MÜNCHEN. Name Vorname Studiengang Matrikelnummer. Hörsaal Reihe Sitzplatz Unterschrift

Allgemeine Hinweise: TECHNISCHE UNIVERSITÄT MÜNCHEN. Name Vorname Studiengang Matrikelnummer. Hörsaal Reihe Sitzplatz Unterschrift TECHNISCHE UNIVERSITÄT MÜNCHEN FAKULTÄT FÜR INFORMATIK Lehrstuhl für Sprachen und Beschreibungsstrukturen WS 2008/09 Einführung in die Informatik 2 Klausur Prof. Dr. Helmut Seidl, T. M. Gawlitza, S. Pott,

Mehr

Lösungen zum Übungsblatt 3: Softwareentwicklung I (WS 2006/07)

Lösungen zum Übungsblatt 3: Softwareentwicklung I (WS 2006/07) Prof. Dr. A. Poetzsch-Heffter Dipl.-Inform. J.O. Blech Dipl.-Inform. M.J. Gawkowski Dipl.-Inform. N. Rauch Technische Universität Kaiserslautern Fachbereich Informatik AG Softwaretechnik Lösungen zum Übungsblatt

Mehr

Einführung in die funktionale Programmierung

Einführung in die funktionale Programmierung Einführung in die funktionale Programmierung Prof. Dr. Manfred Schmidt-Schauÿ Künstliche Intelligenz und Softwaretechnologie 26. Oktober 2006 Haskell - Einführung Syntax Typen Auswertung Programmierung

Mehr

Allgemeine Hinweise:

Allgemeine Hinweise: TECHNISCHE UNIVERSITÄT MÜNCHEN FAKULTÄT FÜR INFORMATIK WS 11/12 Einführung in die Informatik 2 Klausur Prof. Dr. Andrey Rybalchenko, M.Sc. Ruslán Ledesma Garza 11.02.2011 Name Vorname Studiengang Matrikelnummer

Mehr

Programmierung Eine Einführung in die Informatik mit Standard ML Musterlösungen für ausgewählte Aufgaben. 1 Schnellkurs. Gert Smolka.

Programmierung Eine Einführung in die Informatik mit Standard ML Musterlösungen für ausgewählte Aufgaben. 1 Schnellkurs. Gert Smolka. Programmierung Eine Einführung in die Informatik mit Standard ML Musterlösungen für ausgewählte Aufgaben Gert Smolka Vorbemerkungen a) Ich danke den Assistenten der Vorlesungen in Saarbrücken für ihre

Mehr

Programmierung und Modellierung

Programmierung und Modellierung Programmierung und Modellierung Benutzerdefinierte Datentypen Martin Wirsing in Zusammenarbeit mit Moritz Hammer SS 2009 2 Inhalt Kap. 7 Benutzerdefinierte Datentypen 1. Aufzählungstypen 2. Typen mit zusammengesetzten

Mehr

WS 2011/2012. RobertGiegerich. November 12, 2013

WS 2011/2012. RobertGiegerich. November 12, 2013 WS 2011/2012 Robert AG Praktische Informatik November 12, 2013 Haskell-Syntax: Ergänzungen Es gibt noch etwas bequeme Notation für Fallunterscheidungen, die wir bisher nicht benutzt haben. Bisher kennen

Mehr

WS 2011/2012. RobertGiegerich. November 12, 2013

WS 2011/2012. RobertGiegerich. November 12, 2013 WS 2011/2012 Robert AG Praktische Informatik November 12, 2013 Haskell-Syntax: Ergänzungen Es gibt noch etwas bequeme Notation für Fallunterscheidungen, die wir bisher nicht benutzt haben. Bisher kennen

Mehr

Funktionale Programmierung mit Haskell

Funktionale Programmierung mit Haskell Funktionale Programmierung mit Haskell Dr. Michael Savorić Hohenstaufen-Gymnasium (HSG) Kaiserslautern Version 20120622 Überblick Wichtige Eigenschaften Einführungsbeispiele Listenerzeugung und Beispiel

Mehr

Programmierung 1 (Wintersemester 2012/13) Lösungsblatt 11 (Kapitel 12)

Programmierung 1 (Wintersemester 2012/13) Lösungsblatt 11 (Kapitel 12) Fachrichtung 6.2 Informatik Universität des Saarlandes Tutorenteam der Vorlesung Programmierung 1 Programmierung 1 (Wintersemester 2012/13) Lösungsblatt 11 (Kapitel 12) Hinweis: Dieses Übungsblatt enthält

Mehr

Programmierung 1 (Wintersemester 2012/13) Erklärung 5 (Prä- und Postordnung)

Programmierung 1 (Wintersemester 2012/13) Erklärung 5 (Prä- und Postordnung) Fachrichtung 6. Informatik Universität des Saarlandes Tutorenteam der Vorlesung Programmierung 1 Programmierung 1 (Wintersemester 01/13) Erklärung (Prä- und Postordnung) Hinweis: Dieses Blatt enthält eine

Mehr

Programmierung 1 (Wintersemester 2015/16) Wiederholungstutorium Lösungsblatt 9 (Dynamische und Statische Semantik)

Programmierung 1 (Wintersemester 2015/16) Wiederholungstutorium Lösungsblatt 9 (Dynamische und Statische Semantik) Fachrichtung 6.2 Informatik Universität des Saarlandes Tutorenteam der Vorlesung Programmierung 1 Programmierung 1 (Wintersemester 2015/16) Wiederholungstutorium Lösungsblatt 9 (Dynamische und Statische

Mehr

Lösungvorschlag zum Übungsblatt 6: Software-Entwicklung I (WS 2007/08)

Lösungvorschlag zum Übungsblatt 6: Software-Entwicklung I (WS 2007/08) Prof. Dr. A. Poetzsch-Heffter Dipl.-Inform. J. O. Blech Dipl.-Inform. M. J. Gawkowski Dipl.-Inform. N. Rauch TU Kaiserslautern Fachbereich Informatik AG Softwaretechnik Lösungvorschlag zum Übungsblatt

Mehr

Typdeklarationen. Es gibt in Haskell bereits primitive Typen:

Typdeklarationen. 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

TECHNISCHE UNIVERSITÄT MÜNCHEN. Abgabe: (vor der Vorlesung)

TECHNISCHE UNIVERSITÄT MÜNCHEN. Abgabe: (vor der Vorlesung) TECHNISCHE UNIVERSITÄT MÜNCHEN FAKULTÄT FÜR INFORMATIK Lehrstuhl für Sprachen und Beschreibungsstrukturen WS 2008/09 Einführung in die Informatik 2 Übungsblatt 6 Prof. Dr. Helmut Seidl, T. M. Gawlitza,

Mehr

Berechnungsschemata: Funktion als Parameter abstrahiert Operation im Schema, wird bei Aufruf des Schemas konkretisiert

Berechnungsschemata: Funktion als Parameter abstrahiert Operation im Schema, wird bei Aufruf des Schemas konkretisiert 6. Funktionen als Daten, Übersicht Orthogonales Typsystem: Funktionen sind beliebig mit anderen Typen kombinierbar Notation für Funktionswerte (Lambda-Ausdruck): fn (z,k) => z*k Datenstrukturen mit Funktionen

Mehr

Was 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: Was bisher geschah Funktionale Programmierung in Haskell: Algebraische Datentypen Pattern Matching Polymorphie Typklassen Rekursive Datentypen: Peano-Zahlen, Listen, Bäume Rekursive Funktionen strukturelle

Mehr

II. Grundlagen der Programmierung. Beispiel: Merge Sort. Beispiel: Merge Sort (Forts. ) Beispiel: Merge Sort (Forts. )

II. Grundlagen der Programmierung. Beispiel: Merge Sort. Beispiel: Merge Sort (Forts. ) Beispiel: Merge Sort (Forts. ) Technische Informatik für Ingenieure (TIfI) WS 2006/2007, Vorlesung 9 II. Grundlagen der Programmierung Ekkart Kindler Funktionen und Prozeduren Rekursion Datenstrukturen Merge S ( split, s, merge ) Beispiel:

Mehr

Programmierung 1 (Wintersemester 2012/13) Zusatzübungsblatt 7 (Kapitel 7)

Programmierung 1 (Wintersemester 2012/13) Zusatzübungsblatt 7 (Kapitel 7) Fachrichtung 6.2 Informatik Universität des Saarlandes Tutorenteam der Vorlesung Programmierung 1 Programmierung 1 (Wintersemester 2012/13) Zusatzübungsblatt 7 (Kapitel 7) Hinweis: Dieses Übungsblatt enthält

Mehr

TECHNISCHE UNIVERSITÄT MÜNCHEN FAKULTÄT FÜR INFORMATIK

TECHNISCHE UNIVERSITÄT MÜNCHEN FAKULTÄT FÜR INFORMATIK TECHNISCHE UNIVERSITÄT MÜNCHEN FAKULTÄT FÜR INFORMATIK WS 11/12 Einführung in die Informatik II Übungsblatt 2 Univ.-Prof. Dr. Andrey Rybalchenko, M.Sc. Ruslán Ledesma Garza 8.11.2011 Dieses Blatt behandelt

Mehr

Strukturelle Rekursion und Induktion

Strukturelle Rekursion und Induktion Kapitel 2 Strukturelle Rekursion und Induktion Rekursion ist eine konstruktive Technik für die Beschreibung unendlicher Mengen (und damit insbesondere für die Beschreibung unendliche Funktionen). Induktion

Mehr

Inhalt Kapitel 11: Formale Syntax und Semantik

Inhalt Kapitel 11: Formale Syntax und Semantik Inhalt Kapitel 11: Formale Syntax und Semantik 1 Abstrakte und konkrete Syntax 2 Lexikalische Analyse 3 Formale Sprachen, Grammatiken, BNF 4 Syntaxanalyse konkret 266 Abstrakte und konkrete Syntax Abstrakte

Mehr

Grundlagen der Informatik

Grundlagen der Informatik Grundlagen der Informatik Musterklausur 1. Dynamische Datenstrukturen und objektorientierte Programmierung Zur Verwaltung einer digitalen Fotogalerie sollen Techniken der objektorientierten Programmierung

Mehr

Lösung Probeklausur Informatik I

Lösung Probeklausur Informatik I Lösung Probeklausur Informatik I 1 Lösung Aufgabe 1 (5 Punkte) Algorithmen und Programme Was ist der Unterschied zwischen einem Algorithmus und einem Programm? Ein Algorithmus ist eine Vorschrift zur Durchführung

Mehr

2.5 Listen. Kurzschreibweise: [42; 0; 16] Listen werden mithilfe von [] und :: konstruiert.

2.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

Mehr

Konzepte von Programmiersprachen

Konzepte von Programmiersprachen Konzepte von Programmiersprachen Kapitel 3: Ausdrücke Phillip Heidegger Universität Freiburg, Deutschland SS 2009 Phillip Heidegger (Univ. Freiburg) Konzepte von Programmiersprachen KvP 1 / 17 Inhalt Let

Mehr

FAKULTÄT FÜR INFORMATIK

FAKULTÄT FÜR INFORMATIK TECHNISCHE UNIVERSITÄT MÜNCHEN FAKULTÄT FÜR INFORMATIK Lehrstuhl für Sprachen und Beschreibungsstrukturen WS 2008/09 Einführung in die Informatik 2 Übungsblatt 10 Prof. Dr. Helmut Seidl, T. M. Gawlitza,

Mehr

Praktische Informatik 3: Funktionale Programmierung Vorlesung 4 vom : Typvariablen und Polymorphie

Praktische Informatik 3: Funktionale Programmierung Vorlesung 4 vom : Typvariablen und Polymorphie Rev. 2749 1 [28] Praktische Informatik 3: Funktionale Programmierung Vorlesung 4 vom 04.11.2014: Typvariablen und Polymorphie Christoph Lüth Universität Bremen Wintersemester 2014/15 2 [28] Fahrplan Teil

Mehr

Die Schnittstelle Comparable

Die Schnittstelle Comparable Die Schnittstelle Comparable Wir wollen Such- und Sortieroperationen für beliebige Objekte definieren. Dazu verwenden wir die vordefinierte Schnittstelle Comparable: public interface Comparable { int compareto(object

Mehr

Kapitel 6: Typprüfung

Kapitel 6: Typprüfung Ludwig Maximilians Universität München Institut für Informatik Lehr- und Forschungseinheit für Datenbanksysteme Skript zur Vorlesung Informatik I Wintersemester 2006 Vorlesung: Prof. Dr. Christian Böhm

Mehr

Einführung in Haskell

Einführung in Haskell Einführung in Haskell Axel Stronzik 21. April 2008 1 / 43 Inhaltsverzeichnis 1 Allgemeines 2 / 43 Inhaltsverzeichnis 1 Allgemeines 2 Funktions- und Typdefinitionen 2 / 43 Inhaltsverzeichnis 1 Allgemeines

Mehr

Institut für Informatik

Institut für Informatik Technische Universität München Institut für Informatik Lehrstuhl für Computer Graphik & Visualisierung WS 2010 Praktikum: Grundlagen der Programmierung Aufgabenblatt 4 Prof. R. Westermann, A. Lehmann,

Mehr

Vorsicht bei redundanten und unvollständigen Matches!

Vorsicht bei redundanten und unvollständigen Matches! Vorsicht bei redundanten und unvollständigen Matches! # let n = 7;; val n : int = 7 # match n with 0 -> "null";; Warning: this pattern-matching is not exhaustive. Here is an example of a value that is

Mehr

Algorithmen und Datenstrukturen I

Algorithmen und Datenstrukturen I Algorithmen und Datenstrukturen I Sortierverfahren D. Rösner Institut für Wissens- und Sprachverarbeitung Fakultät für Informatik Otto-von-Guericke Universität Magdeburg Winter 2009/10, 18. Januar 2010,

Mehr

3. Übungsblatt zu Algorithmen I im SoSe 2017

3. Übungsblatt zu Algorithmen I im SoSe 2017 Karlsruher Institut für Technologie Prof. Dr. Jörn Müller-Quade Institut für Theoretische Informatik Björn Kaidel, Sebastian Schlag, Sascha Witt 3. Übungsblatt zu Algorithmen I im SoSe 2017 http://crypto.iti.kit.edu/index.php?id=799

Mehr

Listen und Listenfunktionen. Grundlagen der Programmierung 2 A (Listen) Listen und Listenfunktionen. Listen? Haskell: Listen

Listen und Listenfunktionen. Grundlagen der Programmierung 2 A (Listen) Listen und Listenfunktionen. Listen? Haskell: Listen Listen und Listenfunktionen Grundlagen der Programmierung 2 A (Listen) Haskell: Listen Prof. Dr. Manfred Schmidt-Schauß Listen modellieren Folgen von gleichartigen, gleichgetypten Objekten. Ausdruck im

Mehr

Welche Informatik-Kenntnisse bringen Sie mit?

Welche 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

Mehr

Tutoraufgabe 1 (Auswertungsstrategie):

Tutoraufgabe 1 (Auswertungsstrategie): Prof. aa Dr. J. Giesl Programmierung WS12/13 M. Brockschmidt, F. Emmes, C. Otto, T. Ströder Tutoraufgabe 1 (Auswertungsstrategie): Gegeben sei das folgende Haskell-Programm: absteigend :: Int - > [ Int

Mehr

Agenda. 1 Einleitung. 2 Binäre Bäume. 3 Binäre Suchbäume. 4 Rose Trees. 5 Zusammenfassung & Ausblick. Haskell Bäume. Einleitung.

Agenda. 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

Mehr

Programmieren in Haskell Programmiermethodik

Programmieren 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

Mehr

Typklassen. Natascha Widder

Typklassen. Natascha Widder Typklassen Natascha Widder 19.11.2007 Motivation Typklassen fassen Typen mit ähnlichen Operatoren zusammen ermöglichen überladenen Funktionen Definition Typklassen Deklarationsschema class Name Platzhalter

Mehr

// Objekt-Methoden: public void insert(int x) { next = new List(x,next); } public void delete() { if (next!= null) next = next.next; } public String

// Objekt-Methoden: public void insert(int x) { next = new List(x,next); } public void delete() { if (next!= null) next = next.next; } public String // Objekt-Methoden: public void insert(int x) { next = new List(x,next); } public void delete() { if (next!= null) next = next.next; } public String tostring() { String result = "["+info; for(list t=next;

Mehr

HASKELL KAPITEL 2.1. Notationen: Currying und das Lambda-Kalkül

HASKELL KAPITEL 2.1. Notationen: Currying und das Lambda-Kalkül HASKELL KAPITEL 2.1 Notationen: Currying und das Lambda-Kalkül Bisheriges (Ende VL-Teil 1) weite :: (Float,Float) ->Float weite (v0, phi) = (square(v0)/9.81) * sin(2 * phi) (10, 30 ) smaller ::(Integer,

Mehr

Prof. Dr. Margarita Esponda

Prof. Dr. Margarita Esponda Analyse von Algorithmen Die O-Notation WS 2012/2013 Prof. Dr. Margarita Esponda Freie Universität Berlin 1 Korrekte und effiziente Lösung von Problemen Problem Wesentlicher Teil der Lösung eines Problems.

Mehr

Funktionale Programmierung

Funktionale Programmierung Funktionale Programmierung Jörg Kreiker Uni Kassel und SMA Solar Technology AG Wintersemester 2011/2012 2 Teil II Typen mit Werten und Ausdruck, sogar listenweise 3 Haskell Programme Programm Module ein

Mehr

INFORMATIK FÜR BIOLOGEN

INFORMATIK FÜR BIOLOGEN Technische Universität Dresden 15012015 Institut für Theoretische Informatik Professur für Automatentheorie INFORMATIK FÜR BIOLOGEN Musterklausur WS 2014/15 Studiengang Biologie und Molekulare Biotechnologie

Mehr

Funktionale Programmierung Grundlegende Datentypen

Funktionale Programmierung Grundlegende Datentypen Grundlegende Datentypen Prof. Dr. Oliver Braun Fakultät für Informatik und Mathematik Hochschule München Letzte Änderung: 06.11.2017 16:45 Inhaltsverzeichnis Typen........................................

Mehr

Grundprinzipien der funktionalen Programmierung

Grundprinzipien der funktionalen Programmierung Grundprinzipien der funktionalen Programmierung Funktionen haben keine Seiteneffekte Eine Funktion berechnet einen Ausgabewert der nur von den Eingabewerten abhängt: 12 inputs + output 46 34 2 Nicht nur

Mehr

Programmieren in Haskell Das Haskell Typsystem

Programmieren in Haskell Das Haskell Typsystem Programmieren in Haskell Das Haskell Typsystem Peter Steffen Robert Giegerich Universität Bielefeld Technische Fakultät 22.01.2010 1 Programmieren in Haskell Belauscht... Lisa Lista: Ohne Typen keine korrekten

Mehr

Institut für Informatik

Institut 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 6 Prof. R. Westermann, A. Lehmann, R.

Mehr

Funktionale Programmierung. ALP I Lambda-Kalkül. Teil III SS Prof. Dr. Margarita Esponda. Prof. Dr. Margarita Esponda

Funktionale Programmierung. ALP I Lambda-Kalkül. Teil III SS Prof. Dr. Margarita Esponda. Prof. Dr. Margarita Esponda ALP I Lambda-Kalkül Teil III SS 2011 Parser Hilfsfunktionen: Die break-funktion ist eine Funktion Höherer Ordnung, die eine Liste beim ersten Vorkommen einer Bedingung in zwei Listen spaltet. break ::

Mehr

Grundlagen der Programmierung 3 A

Grundlagen der Programmierung 3 A Grundlagen der Programmierung 3 A Typen, Typberechnung und Typcheck Prof. Dr. Manfred Schmidt-Schauß Sommersemester 2017 Haskell, Typen, und Typberechnung Ziele: Haskells Typisierung Typisierungs-Regeln

Mehr

Kapitel 3: Eine einfache Programmiersprache. Programmieren in Haskell 1

Kapitel 3: Eine einfache Programmiersprache. Programmieren in Haskell 1 Kapitel 3: Eine einfache Programmiersprache Programmieren in Haskell 1 Datentypen, Datentypdefinitionen data Instrument = Oboe HonkyTonkPiano Cello VoiceAahs data Musik = Note Ton Dauer Pause Dauer Musik

Mehr

Frage, Fragen und nochmals Fragen

Frage, Fragen und nochmals Fragen Frage, Fragen und nochmals Fragen Berthold Hoffmann Universität Bremen and DFKI Bremen hof@informatik.uni-bremen.de In diesem Text stehen einige Fragen, die man sich zu den Folien der Veranstaltung Funktionales

Mehr

UE Algorithmen und Datenstrukturen 1 UE Praktische Informatik 1. Übung 2. Spezifikation Schrittweise Verfeinerung

UE Algorithmen und Datenstrukturen 1 UE Praktische Informatik 1. Übung 2. Spezifikation Schrittweise Verfeinerung UE Algorithmen und Datenstrukturen 1 UE Praktische Informatik 1 Übung 2 Spezifikation Schrittweise Verfeinerung Institut für Pervasive Computing Johannes Kepler Universität Linz Altenberger Straße 69,

Mehr

Grundlagen der Programmierung 2 A (Listen)

Grundlagen der Programmierung 2 A (Listen) Grundlagen der Programmierung 2 A (Listen) Haskell: Listen Prof. Dr. Manfred Schmidt-Schauß Sommersemester 2017 Listen und Listenfunktionen Listen modellieren Folgen von gleichartigen, gleichgetypten Objekten.

Mehr

Lösungshinweise/-vorschläge zum Übungsblatt 13: Software-Entwicklung 1 (WS 2017/18)

Lösungshinweise/-vorschläge zum Übungsblatt 13: Software-Entwicklung 1 (WS 2017/18) Dr. Annette Bieniusa Mathias Weber, M. Sc. Peter Zeller, M. Sc. TU Kaiserslautern Fachbereich Informatik AG Softwaretechnik Lösungshinweise/-vorschläge zum Übungsblatt 13: Software-Entwicklung 1 (WS 2017/18)

Mehr

Programmierung 1 (Wintersemester 2012/13) Weihnachtsübungsblatt

Programmierung 1 (Wintersemester 2012/13) Weihnachtsübungsblatt Fachrichtung 6.2 Informatik Universität des Saarlandes Tutorenteam der Vorlesung Programmierung 1 Programmierung 1 (Wintersemester 2012/13) Weihnachtsübungsblatt Hinweis: Dieses Zusatzübungsblatt wird

Mehr

Informatik-Seminar Thema 6: Bäume

Informatik-Seminar Thema 6: Bäume Informatik-Seminar 2003 - Thema 6: Bäume Robin Brandt 14. November 2003 1 Robin Brandt Informatik-Seminar 2003 - Thema 6: Bäume Übersicht Definition Eigenschaften Operationen Idee Beispiel Datendefinition

Mehr

Typ-Polymorphismus. November 12, 2014

Typ-Polymorphismus. November 12, 2014 Typ-Polymorphismus Universität Bielefeld AG Praktische Informatik November 12, 2014 Das Haskell Typ-System Wir beginnen mit einer Wiederholung des Bekannten: In allen Programmiersprachen sind Typ-Konzepte

Mehr

Praktische Informatik 3: Funktionale Programmierung Vorlesung 11 vom : Monaden als Berechnungsmuster

Praktische Informatik 3: Funktionale Programmierung Vorlesung 11 vom : Monaden als Berechnungsmuster 16:02:16 2017-01-17 1 [30] Praktische Informatik 3: Funktionale Programmierung Vorlesung 11 vom 10.01.2017: Monaden als Berechnungsmuster Christoph Lüth Universität Bremen Wintersemester 2016/17 Frohes

Mehr

Gliederung. Algorithmen und Datenstrukturen I. Listen in Haskell: Listen in Haskell: Listen in Haskell. Datentyp Liste Strings Listenkomprehension

Gliederung. Algorithmen und Datenstrukturen I. Listen in Haskell: Listen in Haskell: Listen in Haskell. Datentyp Liste Strings Listenkomprehension Gliederung Algorithmen und Datenstrukturen I D. Rösner Institut für Wissens- und Sprachverarbeitung Fakultät für Informatik Otto-von-Guericke Universität Magdeburg 1 Winter 2009/10, 16. Oktober 2009, c

Mehr

Programmieren in Haskell

Programmieren in Haskell Programmieren in Haskell Wir steigen ein... Programmieren in Haskell 1 Was wir heute machen Umfrage: Wer hat den Hugs ausprobiert? Ausdrücke und Werte Datentypen Funktionen Aufgabe für diese Woche Programmieren

Mehr

Computergrundkenntnisse und Programmieren, WS 07/08, Übung 11: Klassen der Standardbibliothek 2

Computergrundkenntnisse und Programmieren, WS 07/08, Übung 11: Klassen der Standardbibliothek 2 Computergrundkenntnisse und Programmieren, WS 07/08, Übung 11: Klassen der Standardbibliothek 2 Neben vector ist list die zweite wichtige Containerklasse. Um unsere Kenntnisse von Containerklassen zu erweitern,

Mehr

Tutoraufgabe 1 (Sortieralgorithmus):

Tutoraufgabe 1 (Sortieralgorithmus): Prof. aa Dr. Ir. Joost-Pieter Katoen Datenstrukturen und Algorithmen SS Tutoriumslösung - Übung 4 (Abgabe 2..2) Christian Dehnert, Friedrich Gretz, Benjamin Kaminski, Thomas Ströder Tutoraufgabe (Sortieralgorithmus):

Mehr

WS 2011/2012. Robert Giegerich Dezember 2013

WS 2011/2012. Robert Giegerich Dezember 2013 WS 2011/2012 Robert 1 AG Praktische Informatik 11. Dezember 2013 1 robert@techfak.uni-bielefeld.de Vorschau Themen heute: Funktionen höherer Ordnung (Fortsetzung) künstliche Striktheit mehr zu fold für

Mehr

Grundlagen der Programmierung 2. Sortierverfahren

Grundlagen der Programmierung 2. Sortierverfahren Grundlagen der Programmierung 2 Sortierverfahren Prof. Dr. Manfred Schmidt-Schauÿ Künstliche Intelligenz und Softwaretechnologie 30. Mai 2006 Sortieren Ziel: Bringe Folge von Objekten in eine Reihenfolge

Mehr

Tutoraufgabe 1 (Zweierkomplement): Lösung: Programmierung WS16/17 Lösung - Übung 2

Tutoraufgabe 1 (Zweierkomplement): Lösung: Programmierung WS16/17 Lösung - Übung 2 Prof. aa Dr. J. Giesl Programmierung WS16/17 F. Frohn, J. Hensel, D. Korzeniewski Tutoraufgabe 1 (Zweierkomplement): a) Sei x eine ganze Zahl. Wie unterscheiden sich die Zweierkomplement-Darstellungen

Mehr

5.1 Mehr Basistypen. (Wie viele Werte kann man mit n Bit darstellen?)

5.1 Mehr Basistypen. (Wie viele Werte kann man mit n Bit darstellen?) 5.1 Mehr Basistypen Außer int, stellt Java weitere Basistypen zur Verfügung. Zu jedem Basistyp gibt es eine Menge möglicher Werte. Jeder Wert eines Basistyps benötigt die gleiche Menge Platz, um ihn im

Mehr

expr :: Expr expr = Mul (Add (Const 3) (Const 4)) (Div (Sub (Const 73) (Const 37)) (Const 6))

expr :: 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,

Mehr

Tutoraufgabe 1 (Listen):

Tutoraufgabe 1 (Listen): Prof. aa Dr. J. Giesl Programmierung WS16/17 F. Frohn, J. Hensel, D. Korzeniewski Allgemeine Die Hausaufgaben sollen in Gruppen von je 2 Studierenden aus der gleichen Kleingruppenübung (Tutorium) bearbeitet

Mehr

Vorlesung Künstliche Intelligenz Alexander Manecke Oliver Schneider Andreas Stoffel 9. Mai 2006

Vorlesung Künstliche Intelligenz Alexander Manecke Oliver Schneider Andreas Stoffel 9. Mai 2006 Vorlesung Künstliche Intelligenz 9. Mai 2006 Aufgabe 1: Listen in Prolog a) Den Fall der leeren Liste müssen wir hier nicht betrachten, denn eine leere Liste besitzt kein Maximum. Also ist Standardantwort

Mehr

Softwareentwicklung II (IB) Blatt 2. Prof. Dr. Oliver Braun. Fakultät für Informatik und Mathematik Hochschule München

Softwareentwicklung II (IB) Blatt 2. Prof. Dr. Oliver Braun. Fakultät für Informatik und Mathematik Hochschule München Softwareentwicklung II (IB) Blatt 2 Fakultät für Informatik und Mathematik Hochschule München Letzte Änderung: 18.04.2018 08:07 Abgabe der Aufgabe auf diesem Blatt: bis 02.05.18, 08:00 Uhr durch Pushen

Mehr

Basiskonstrukte von Haskell

Basiskonstrukte von Haskell Basiskonstrukte von Haskell PD Dr. David Sabel Goethe-Universität Frankfurt am Main 29. September 2015 Basistypen und Operationen Ganzzahlen: Int = Ganzzahlen beschränkter Länge Integer = Ganzzahlen beliebiger

Mehr

Funktionale Programmierung mit ML

Funktionale Programmierung mit ML Funktionale Programmierung mit ML Logische und funktionale Programmierung - Universität Potsdam - M. Thomas - Funkt. Programmierung mit ML - X.1 Wichtigsten Eigenschaften von SML funktionale Programmiersprache

Mehr

Übergang von funktionaler zu OOP. Algorithmen und Datenstrukturen II 1

Übergang von funktionaler zu OOP. Algorithmen und Datenstrukturen II 1 Übergang von funktionaler zu OOP Algorithmen und Datenstrukturen II 1 Imperative vs. funktionale Programmierung Plakativ lassen sich folgende Aussagen treffen: funktional: imperativ: Berechnung von Werten

Mehr

1 - FortProg ist: [ ] objekt-orientiert; [ ] funktional; [ ] logisch; [ ] manchmal nicht auszuhalten

1 - FortProg ist: [ ] objekt-orientiert; [ ] funktional; [ ] logisch; [ ] manchmal nicht auszuhalten 1 - FortProg ist: [ ] objekt-orientiert; [ ] funktional; [ ] logisch; [ ] manchmal nicht auszuhalten Java-1. a), e) Java-2. --- gestrichen --- Java-3. keine Antwort ist richtig Java-4. a) Java-5. a), b)

Mehr

Haskell, Typen, und Typberechnung. Grundlagen der Programmierung 3 A. Überladung und Konversion in Haskell. Typisierung in Haskell

Haskell, Typen, und Typberechnung. Grundlagen der Programmierung 3 A. Überladung und Konversion in Haskell. 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 Sommersemester

Mehr