Übungsblatt 6: Softwareentwicklung I (WS 2006/07)

Größe: px
Ab Seite anzeigen:

Download "Übungsblatt 6: Softwareentwicklung I (WS 2006/07)"

Transkript

1 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 Übungsblatt 6: Softwareentwicklung I (WS 2006/07) Ausgabe: 27. November 2006 Abgabe: 04. Dezember 2006, Uhr Abnahme praktischer Teil: 04. Dezember Dezember 2006 Aufgabe 1 Stapel und Warteschlange (praktisch) (10 Punkte) In dieser Aufgabe sollen Sie Funktionen der Datenstrukturen Stack (Stapel) und Queue (Warteschlange) in ML schreiben und zur Lösung eines konkreten Problems anwenden: Implementierung eines Mini-Parsers. Die Eigenschaften der Datenstruktur Stapel haben Sie in Übungsblatt 1 kennengelernt. Die Daten auf dem Stapel werden nach dem LIFO- Prinzip (last-in-first-out) organisiert, d.h. ein Element, das zuletzt auf einen Stapel von der Operation push gelegt wurde, wird als erstes aus dem Stapel von der Operation pop entfernt. Dagegen, werden die Daten in einer Warteschlange nach dem FIFO-Prinzip (first-in-first-out) organisiert, d.h. ein Element, das am frühesten von der Operation enqueue zu einer Warteschlange hinzugefügt wurde, wird als erstes aus der Warteschlange von der Operation dequeue entnommen. In dieser Aufgabe werden die zugehörigen Typen Stapel und Warteschlange folgendermaßen definiert: datatype stack = EMPTYSTACK PUSH of char stack datatype queue = EMPTYQUEUE ENQUEUE of char queue Und nun beschreiben wir den Mini-Parser: Der Parser soll durch eine Funktion parse : string parenthesisnesting realisiert werden, siehe unten die Typdeklaration des Typs parenthesisnesting. parse nimmt eine Zeichenreihe str als Parameter und entscheidet, ob str eine korrekt geklammerte Zeichenreihe darstellt. Stellt str eine korrekt geklammerte Zeichenreihe dar, dann wird von parse der Wert CORRECT_NESTING zurückgegeben. Ansonsten, wird von der Funktion WRONG_NESTING geliefert. datatype parenthesisnesting = CORRECT_NESTING WRONG_NESTING 1. Bsp.: parse "" = CORRECT_NESTING 2. Bsp.: parse "()" = CORRECT_NESTING 3. Bsp.: parse "((a+b)(c-d))" = CORRECT_NESTING 4. Bsp.: parse "((abd-34)c-d))" = WRONG_NESTING 5. Bsp.: parse "((c-d)" = WRONG_NESTING 6. Bsp.: parse "(informatik)" = CORRECT_NESTING a) 1. Schreiben Sie eine ML-Funktion isemptystack : stack bool, die einen Stapel s als Parameter nimmt und entscheidet ob s ein leerer Stapel ist. 2. Schreiben Sie eine ML-Funktion push : char stack stack, die ein Zeichen c und einen Stapel s als Parameter nimmt und c auf s legt. 3. Schreiben Sie eine ML-Funktion top : stack char option, die einen Stapel s als Parameter nimmt und versucht das oberste Element auf dem Stapel s zurückzugeben. Ist der Stapel s nicht leer und ist das oberste Element des Stapels ein Zeichen c, dann wird von der Funktion SOME c zurückgegeben. Ansonsten wird von der Funktion der Wert NONE zurückgegeben. 4. Schreiben Sie eine ML-Funktion pop : stack stack option, die einen Stapel s als Parameter nimmt und versucht das oberste Element auf dem Stapel s zu entfernen. Ist der Stapel s nicht leer und ist das oberste Element von s ein Zeichen c, dann wird von der Funktion SOME s zurückgegeben, wobei s ein Stapel ist, der nach dem Entfernen von c aus s übrig bleibt. Ansonsten wird von der Funktion der Wert NONE zurückgegeben.

2 b) 1. Schreiben Sie eine ML-Funktion isemptyqueue : queue bool, die eine Warteschlange q als Parameter nimmt und entscheidet ob q eine leere Warteschlange ist. 2. Schreiben Sie eine ML-Funktion enqueue : char queue queue, die ein Zeichen c und eine Warteschlange q als Parameter nimmt und c zu q hinzufügt. 3. Schreiben Sie eine ML-Funktion dequeue : queue queue option, die eine Warteschlange q als Parameter nimmt und versucht das vorderste Element aus der Warteschlange q zu entnehmen. Ist die Warteschlange q nicht leer und ist das vorderste Element von q ein Zeichen c, dann wird von der Funktion SOME (c, q ) zurückgegeben, wobei q eine Warteschlange ist, die nach dem Entfernen von c aus q übrig bleibt. Ansonsten wird von der Funktion der Wert NONE zurückgegeben. c) 1. Schreiben Sie eine ML-Funktion charlist2queue : char list queue, die eine Liste der Zeichen l als Parameter nimmt und diese in eine Warteschlange konvertiert. 2. Schreiben Sie eine ML-Funktion leftparenthesis : char bool, die ein Zeichen c als Parameter nimmt und entscheidet, c die öffnende runde Klammer, (, ist. 3. Schreiben Sie eine ML-Funktion rightparenthesis : char bool, die ein Zeichen c als Parameter nimmt und entscheidet, ob c die schließende runde Klammer, ), ist. 4. Schreiben Sie eine ML-Funktion isparenthesis : char bool, die ein Zeichen c als Parameter nimmt und entscheidet, ob c das Zeichen eine runde Klammer ist. d) Schreiben Sie die oben besprochene ML-Funktion parse : string parenthesisnesting. Die Funktion soll nach dem folgenden Algorithmus verfahren: 1. Schritt: Konvertiere die Eingabe-Zeichenreihe str in eine Warteschlange q, initialisiere einen leeren Stapel s und gehe zu Schritt: Bearbeite Folgendes mit q und s beginnend mit 2a. 2a. Schritt: Wenn q leer ist, dann gebe CORRECT_NESTING zurück. Ansonsten gehe zu 2b. 2b. Schritt: Entnehme solange die Zeichen aus q bis entweder q leer wird oder eine Klammer vorliegt und gehe zu 2c. 2c. Schritt: Wenn keine Klammer vorliegt, q ist leer und der Stapel s auch leer ist, dann gebe CORRECT_NESTING zurück. Wenn keine Klammer vorliegt, q leer ist und der Stapel s nicht leer ist, dann gebe WRONG_NESTING zurück. Ansonsten gehe zu 2d. 2d. Schritt: Sei c die nächste aus der Warteschlange entnommene Klammer und q die Warteschlange, die nach dem Entnehmen von c übrig bliebt. Wenn c die öffnende Klammer ist dann lege c auf den Stapel s und gehe zu 2b. Ansonsten überprüfe ob s ein leerer Stapel ist. Ist s leer dann gebe WRONG_NESTING zurück. Ansonsten entferne das oberste Element aus dem Stapel s und gehe zu 2b. (4 Punkte) Siehe die Beispiele unten. Um die Übersichtlichkeit zu verbessern, haben wir den Stapel und die Warteschlange als Listen dargestellt. 1.Bsp.: str="" 1.Schritt: q=[], s=[] 2.Schritt: 2a.Schritt CORRECT_NESTING 2.Bsp: str="()" 1.Schritt: q=[(,)], s=[] 2.Schritt: 2a.Schritt: c=(, q=[)], s=[] q=[)], s=[(] 2b.Schritt c=), q=[], s=[(] q=[],s=[] q=[],s=[] CORRECT_NESTING 3.Bsp: str="((c-d)" 1.Schritt: q=[(,(,c,-,d,)],s=[] 2.Schritt: 2a.Schritt: c=(,q=[(,c,-,d,)],s=[] q=[(,c,-,d,)],s=[(] c=(,q=[c,-,d,)],s=[(] q=[c,-,d,)],s=[(,(] c=),q=[],s=[(,(]

3 q=[],s=[(] WRONG_NESTING Aufgabe 2 Verschränkte Rekursion (praktisch) (6 Punkte) In dieser Aufgabe sollen Sie üben, verschränkt rekursive Funktionsdeklarationen zu schreiben und extensiv Pattern- Matching zu verwenden. Mit den unten dargestellten verschränkt rekursiven Datentypdeklarationen arithmexpr und boolexpr kann man eine Menge von Ausdrücken modellieren. datatype arithmexpr = IFTHENELSE of boolexpr arithmexpr arithmexpr SUM of arithmexpr arithmexpr DIFF of arithmexpr arithmexpr NUMB of int and boolexpr = LESS of arithmexpr arithmexpr AND of boolexpr boolexpr NEG of boolexpr BOOL of bool 1. (5 + 4) lässt sich als SUM(NUMB 5, NUMB 4) modellieren. 2. if false then (4 + 5 ) else (4 5 ) lässt sich als IFTHENELSE(BOOL false, SUM(NUMB 4, NUMB 5), SUM(NUMB 4, NUMB 5)) Aufgabenstellung: a) Schreiben Sie eine ML-Funktion evala : arithmexpr int, die einen arithmethischen Ausdruck e als Parameter nimmt und diesen zu einer ganzen Zahl auswertet. 1. evala(numb 45) = evala(sum(numb 5, NUMB 4)) = 9 3. evala(ifthenelse(bool f alse, SUM(NUMB 1, NUMB 1), SUM(NUMB 4, NUMB 5))) = 9 (3 Punkte) b) Schreiben Sie eine ML-Funktion evalb : boolexpr bool, die einen booleschen Ausdruck e als Parameter nimmt und diesen zur einem booleschen Wahrheitswert auswertet. 1. evalb(and(bool false, BOOL true)) = false 2. evalb(less(numb 5, NUMB 4)) = false 3. evalb(neg(less(numb 5, SUM(NUMB 4, NUMB 5))) = false (3 Punkte) Aufgabe 3 Polymorphe Datentypen (7 Punkte) In dieser Aufgabe sollen Sie einen Datentyp multiset (Multimenge) implementieren. Eine Multimenge weist im Wesentlichen Merkmale des Datentyps set auf. Der Unterschied liegt darin, dass in einer Multimenge das merfache Vorkommen eines Elements erlaubt ist. Eine Möglichkeit, endliche Multimengen zu modellieren ist, sie als eine Liste von Paaren vom Typ ( a int) aufzufassen. Dabei modelliert ein Listenelement (x, i) in der Liste l die Tatsache, dass x i-mal in der Multimenge l vorkommt. Implementieren Sie die folgenden Signaturen in ML: type a multimenge = ( a int) list.

4 a) istelement : a a multimenge bool: istelement e mm liefere genau dann true, wenn (e, i) mit 0 < i in der Menge mm liegt. b) einfuegen : a a a multimenge a multimenge: einfuegen e mm liefere eine Multimenge mm, für die es Folgendes gilt: 1. Alle Elemente (e, i) in mm mit e e liegen in mm. 2. Existiert ein Element (e, i) in mm, dann liegt ein Element (e, i + 1) in mm. c) vereinigen : a multimenge a multimenge a multimenge: vereinigen mm 1 mm 2 liefere eine Multimenge mm für die es Folgendes gilt: Für jedes Element (e, i) in mm gilt eine der folgenden Bedingungen: 1. (e, i) liegt in mm 1 und mm 2 enthält kein Element (e, j) mit e = e. 2. (e, i) liegt in mm 2 und mm 1 enthält kein Element (e, j) mit e = e. 3. mm 1 und mm 2 enthalten entsprechend zwei Elemente (e, j 1 ) und (e, j 2 ) mit i = j 1 + j 2. d) durchschnitt : a multimenge a multimenge a multimenge: durschnitt mm 1 mm 2 liefere eine Multimenge mm für die es Folgendes gilt: 1. Für jedes Element (e, i) in mm gibt es gibt es zwei Elemente (e, j 1 ) und (e, j 2 ) in den entsprechenden Multimengen mm 1 und mm 2 mit k = min(j 1, j 2 ). e) sindgleich : a multimenge a multimenge bool: sindgleich m 1 m 2 liefere genau dann true, wenn die Multimengen mm 1 und mm 2 die gleichen Elemente enthalten. f) Definieren Sie die Datenstrukturinvariante der Multimenge. g) Welche Aussagen lassen sich bezüglich des Laufzeitverhaltens der Funktionen vereiningen und durchschnitt treffen? Aufgabe 4 Funktionen höherer Ordung (praktisch) (7 Punkte) In dieser Aufgabe sollen Sie die Anwendung von Funktionen höherer Ordnung am Beispiel von Addition der Zahlen in verschiedenen Zahlsystemen üben. a) Schreiben Sie eine ML-Funktion dual_summe_uebertr : int int int (int int)option, die für ein aus drei Ziffern im Dualzahlsystem bestehendes 3-Tupel (c, x 1, x 2 ) den Übertrag und die Summe ohne Übertrag von der Addition von Ziffern c, x 1 und x 2 berechnet. Dabei soll das Ergebnis die folgenden Anforderungen erfüllen: 1. Repräsentieren alle drei Zahlen c, x 1 und x 2 die Ziffern des Dualzahlsystems, d.h. c, x 1 x 2 {0, 1}, dann soll von der Funktion SOME(c + x 1 + x 2 div 2, c + x 1 + x 2 mod 2) zurückgeben werden. 2. Ansonsten soll das Ergebnis gleich NONE sein. 1) dual_summe_und_uebertr (0,0,0) = SOME (0,0) 2) dual_summe_und_uebertr (1,1,1) = SOME (1,1) 3) dual_summe_und_uebertr (1,1,0) = SOME (1,0) 4) dual_summe_und_uebertr (1,0,123) = NONE 5) dual_summe_und_uebertr (1,0,1) = SOME (1,0) 6) dual_summe_und_uebertr (1,~65,0) = NONE 7) dual_summe_und_uebertr (1,0,2) = NONE b) Schreiben Sie eine ML-Funktion dez_summe_uebertr : int int int (int int)option, die für ein aus drei Ziffern im Dezimalzahlsystem bestehendes 3-Tupel (c, x 1, x 2 ) den Übertrag und die Summe ohne Übertrag von der Addition von Ziffern c, x 1 und x 2 berechnet. Dabei soll das Ergebnis die folgenden Anforderungen erfüllen:

5 1. Repräsentieren alle drei Zahlen c, x 1 und x 2 die Ziffern des Dezimalzahlsystems, d.h. c, x 1, x 2 {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}, dann soll von der Funktion SOME(c + x 1 + x 2 div 10, c + x 1 + x 2 mod 10) zurückgeben werden. 2. Ansonsten soll das Ergebnis gleich NONE sein. 1) dez_summe_und_uebertr (0,7,8) = SOME (1,5) 2) dez_summe_und_uebertr (0,2,3) = SOME (0,5) 3) dez_summe_und_uebertr (0,23,3) = NONE 4) dez_summe_und_uebertr (1,4,3) = SOME (0,8) 5) dez_summe_und_uebertr (1,9,9) = SOME (1,9) 6) dez_summe_und_uebertr (1,9,~9) = NONE c) Schreiben Sie eine ML-Funktion hex_summe_uebertr : int int int (int int)option, die für ein aus drei Ziffern im Hexadezimalzahlsystem bestehendes 3-Tupel (c, x 1, x 2 ) den Übertrag und die Summe ohne Übertrag von der Addition von Ziffern c, x 1 und x 2 berechnet. Dabei soll das Ergebnis die folgenden Anforderungen erfüllen: 1. Repräsentieren alle drei Zahlen c, x 1 und x 2 die Ziffern des Hexadezimalzahlsystems, wobei die Ziffern durch ganze Zahlen aus der Menge {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15} modelliert werden, dann soll von der Funktion SOME(c + x 1 + x 2 div 16, c + x 1 + x 2 mod 16) zurückgeben werden. 2. Ansonsten soll das Ergebnis gleich NONE sein. analog zu Teilaufgaben a) und b). d) Schreiben Sie eine ML-Funktion höherer Ordnung summe : (int int int (int int)option) (int list int list) int list option, die eine Funktion f und ein Paar von Listen ganzer Zahlen (l 1, l 2 ), als Parameter nimmt und ein Ergebnis, das die folgenden Anforderungen erfüllt, zurückgibt: 1. Repräsentieren die Listen l 1 und l 2 zwei Zahlen z 1 und z 2 in einem Zahlsystem mit Basis b, wobei b eine positive ganze Zahl ist, und berechnet die Funktion f den Übertrag und die Summe ohne Übertrag aus der Addition von drei Ziffern des Zahlsystems mit Basis b, dann ist das Ergebnis als SOME l 3 definiert, wobei die Liste l 3 eine Zahl gleich z 1 + z 2 im Zahlsystem mit Basis b repräsentiert. Dabei repräsentiert die leere Liste [] die Zahl 0 in jedem Zahlsystem. 2. Ansonsten wird von der Funktion NONE zurückgegeben. 1) summe dual_summe_und_uebertr ([1,1,1],[1]) = SOME [1,0,0,0] 2) summe dual_summe_und_uebertr ([1],[1]) = SOME [1,0] 3) summe dual_summe_und_uebertr ([1],[0]) = SOME [1] 4) summe dual_summe_und_uebertr ([3],[0]) = NONE 5) summe dez_summe_und_uebertr ([3],[0]) = SOME [3] 6) summe dez_summe_und_uebertr ([1],[0]) = SOME [1] 7) summe dez_summe_und_uebertr ([1,0,0,0],[2,3,4]) = SOME [1,2,3,4] 8) summe dez_summe_und_uebertr ([1,0,0,0],[9,0,0,0]) = SOME [1,0,0,0,0] 9) summe dez_summe_und_uebertr ([1,0,0,0],[4,56]) = NONE 10) summe hex_summe_und_uebertr ([1,0,0,0],[4,14]) = SOME [1,0,4,14] 11) summe hex_summe_und_uebertr ([12],[4,14]) = SOME [5,11] 12) summe dez_summe_und_uebertr ([12],[4,14]) = NONE 13) summe dez_summe_und_uebertr ([],[]) = SOME [0] 13) summe dez_summe_und_uebertr ([4],[]) = SOME [4] e) Schreiben Sie eine ML-Funktion höherer Ordnung summiereliste : (int int int (int int)option) (int list list) int list option, die eine Funktion f und eine Liste von Listen ganzer Zahlen l, als Parameter nimmt und ein Ergebnis, das die folgenden Anforderungen erfüllt, zurückgibt:

6 1. Hat die Liste l die Form [l 1, l 2,..., l n ] und repräsentieren die Listen l 1, l 2,..., l n Zahlen z 1, z 2,..., z n in einem Zahlsystem mit Basis b, wobei b eine positive ganze Zahl ist, und kann die Funktion f den Übertrag und die Summe ohne Übertrag aus der Addition von drei Ziffern des Zahlsystems mit Basis b berechnen, dann ist das Ergebnis als SOME l definiert, wobei die Liste l eine Zahl gleich z 1 + z z n im Zahlsystem mit Basis b repräsentiert. 2. Ansonsten wird von der Funktion NONE zurückgegeben. 1) summiereliste dez_summe_und_uebertr [[1,0,0,0],[3,4],[2,0,0]] = SOME [1,2,3,4] 2) summiereliste dual_summe_und_uebertr [[1],[1],[1],[1]] = SOME [1,0,0] 3) summiereliste dual_summe_und_uebertr [[1],[1],[1],[]] = SOME [1,1] 4) summiereliste dez_summe_und_uebertr [[1],[1],[1],[]] = SOME [3] 5) summiereliste dez_summe_und_uebertr [] = SOME [0]

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

Übung Algorithmen und Datenstrukturen

Übung Algorithmen und Datenstrukturen Übung Algorithmen und Datenstrukturen Sommersemester 2017 Marc Bux, Humboldt-Universität zu Berlin Agenda 1. (Sortierte) Listen 2. Stacks & Queues 3. Datenstrukturen 4. Rekursion und vollständige Induktion

Mehr

Aufgabe 1 Basiswissen zur Vorlesung (8 Punkte)

Aufgabe 1 Basiswissen zur Vorlesung (8 Punkte) Matrikelnummer: 1 Aufgabe 1 Basiswissen zur Vorlesung (8 Punkte) Kreuzen Sie an, ob die folgenden Aussagen richtig oder falsch sind. Bewertung: keine Antwort: 0 Punkte richtige Antwort: +0.5 Punkte falsche

Mehr

Wiederholung: Zusammenfassung Felder. Algorithmen und Datenstrukturen (für ET/IT) Definition Abstrakter Datentyp. Programm heute

Wiederholung: Zusammenfassung Felder. Algorithmen und Datenstrukturen (für ET/IT) Definition Abstrakter Datentyp. Programm heute Wiederholung: Zusammenfassung Felder Algorithmen und Datenstrukturen (für ET/IT) Wintersemester / Dr. Tobias Lasser Computer Aided Medical Procedures Technische Universität München Ein Feld A kann repräsentiert

Mehr

Abstrakte Datentypen und deren Implementierung in Python

Abstrakte Datentypen und deren Implementierung in Python Kapitel 15: Abstrakte Datentypen und deren Implementierung in Python Einführung in die Informatik Wintersemester 007/08 Prof. Bernhard Jung Übersicht Abstrakte Datentypen ADT Stack Python-Implementierung(en)

Mehr

12. Dynamische Datenstrukturen

12. Dynamische Datenstrukturen Motivation: Stapel. Dynamische Datenstrukturen Verkettete Listen, Abstrakte Datentypen Stapel, Warteschlange, Implementationsvarianten der verketteten Liste 0 04 Motivation: Stapel ( push, pop, top, empty

Mehr

ALP II Dynamische Datenmengen Datenabstraktion

ALP II Dynamische Datenmengen Datenabstraktion ALP II Dynamische Datenmengen Datenabstraktion O1 O2 O3 O4 SS 2012 Prof Dr Margarita Esponda M Esponda-Argüero 1 Dynamische Datenmengen Dynamische Datenmengen können durch verschiedene Datenstrukturen

Mehr

B2.1 Abstrakte Datentypen

B2.1 Abstrakte Datentypen Algorithmen und Datenstrukturen 21. März 2018 B2. Abstrakte Datentypen Algorithmen und Datenstrukturen B2. Abstrakte Datentypen B2.1 Abstrakte Datentypen Marcel Lüthi and Gabriele Röger B2.2 Multimengen,

Mehr

Einführung in die Objektorientierte Programmierung Vorlesung 18: Lineare Datenstrukturen. Sebastian Küpper

Einführung in die Objektorientierte Programmierung Vorlesung 18: Lineare Datenstrukturen. Sebastian Küpper Einführung in die Objektorientierte Programmierung Vorlesung 18: Lineare Datenstrukturen Sebastian Küpper Unzulänglichkeit von Feldern Wenn ein Unternehmen alle Rechnungen eines Jahres verwalten möchte,

Mehr

Vorsemesterkurs Informatik Sommersemester Aufgabenblatt Nr. 5A. Lösung zu Aufgabe 1 (Fehler in Haskell-Quelltext: Parsefehler)

Vorsemesterkurs Informatik Sommersemester Aufgabenblatt Nr. 5A. Lösung zu Aufgabe 1 (Fehler in Haskell-Quelltext: Parsefehler) Fachbereich Informatik und Mathematik Institut für Informatik Vorsemesterkurs Informatik Sommersemester 2017 Aufgabenblatt Nr. 5A zu Aufgabe 1 (Fehler in Haskell-Quelltext: Parsefehler) Laden Sie von der

Mehr

Übung Algorithmen und Datenstrukturen

Übung Algorithmen und Datenstrukturen Übung Algorithmen und Datenstrukturen Sommersemester 2017 Patrick Schäfer, Humboldt-Universität zu Berlin Agenda 1. Sortierte Listen 2. Stacks & Queues 3. Teile und Herrsche Nächste Woche: Vorrechnen (first-come-first-served)

Mehr

Programmieren in Haskell Abstrakte Datentypen

Programmieren in Haskell Abstrakte Datentypen Programmieren in Haskell Abstrakte Datentypen Peter Steffen Universität Bielefeld Technische Fakultät 09.01.2009 1 Programmieren in Haskell Einführung Man unterscheidet zwei Arten von Datentypen: konkrete

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

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

Einführung in die Programmiertechnik

Einführung in die Programmiertechnik Einführung in die Programmiertechnik Klassen und Abstrakte Datentypen Abstrakte Datentypen (ADT) Beschreibung der Datentypen nicht auf Basis ihrer Repräsentation, sondern auf Basis ihrer Operationen und

Mehr

Geheimnisprinzip: (information hiding principle, Parnas 1972)

Geheimnisprinzip: (information hiding principle, Parnas 1972) 2. Abstrakte Datentypen 2.0 Begriffe Geheimnisprinzip: (information hiding principle, Parnas 1972) Zugriffe auf Teile einer Programmeinheit, die für die reguläre Benutzung nicht erforderlich sind, sollten

Mehr

Datentypen. strukturierte. elementare. skalare reelle statische dynamische int. list. real float. set. record. inhomogen. homogen

Datentypen. strukturierte. elementare. skalare reelle statische dynamische int. list. real float. set. record. inhomogen. homogen Datentypen elementare strukturierte skalare reelle statische dynamische int real float list homogen set inhomogen record Der elementare Datentyp nat bestehend aus einer Objektmenge und den darauf definierten

Mehr

Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen Algorithmen und Datenstrukturen B3. ADTs, Bags, Stack and Queues Marcel Lüthi and Gabriele Röger Universität Basel 21. März 2019 Abstrakte Datentypen Abstrakte Datentypen : Definition Abstrakter Datentyp

Mehr

Lösungshinweise/-vorschläge zur Altklausur Abschlussklausur 06/07

Lösungshinweise/-vorschläge zur Altklausur Abschlussklausur 06/07 Lösungshinweise/-vorschläge zur Altklausur Abschlussklausur 06/07 Dies sind die Lösungsvorschläge zu einer Altklausur, deren Aufgabenstellung an die Inhalte der Vorlesung Grundlagen der Programmierung

Mehr

5. Januar Universität Bielefeld AG Praktische Informatik. Programmieren in Haskell. Stefan Janssen. Abstrakte Datentypen.

5. Januar Universität Bielefeld AG Praktische Informatik. Programmieren in Haskell. Stefan Janssen. Abstrakte Datentypen. Universität Bielefeld AG Praktische Informatik 5. Januar 2015 Themen-Vorschau Module In der Software-Entwicklung unterscheidet zwei Arten von : konkrete beziehen sich auf eine konkrete Repräsentation in

Mehr

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

Programmieren in Haskell. Abstrakte Datentypen

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,

Mehr

1. Die rekursive Datenstruktur Liste

1. Die rekursive Datenstruktur Liste 1. Die rekursive Datenstruktur Liste 1.6 Die Datenstruktur Stapel Ein Stack, auch Stapel oder Keller genannt, ist eine Datenstruktur, bei der die Elemente nur an einem Ende der Folge eingefügt bzw. gelöscht

Mehr

- Welche konkreten Invarianten müssen gelten? Berücksichtigen: Invarianten aus Modell und Implem.

- Welche konkreten Invarianten müssen gelten? Berücksichtigen: Invarianten aus Modell und Implem. 234 Implementierung von Abstrakten Datentypen und Korrektheitskriterien Ziel: Zusammenhang zwischen Spezifikation (Modell!) und Implementierung(en) herstellen Spezifikation Implementierung abstraktes Modell?

Mehr

SS10 Algorithmen und Datenstrukturen 2. Kapitel Fundamentale Datentypen und Datenstrukturen

SS10 Algorithmen und Datenstrukturen 2. Kapitel Fundamentale Datentypen und Datenstrukturen SS10 Algorithmen und Datenstrukturen 2. Kapitel Fundamentale Datentypen und Datenstrukturen Martin Dietzfelbinger April 2010 FG KTuEA, TU Ilmenau Algorithmen und Datenstrukturen SS10 Kapitel 2 Datentyp

Mehr

Einführung in die Informatik I

Einführung in die Informatik I Einführung in die Informatik I Einige wichtige Datenstrukturen: Vektor, Matrix, Liste, Stapelspeicher, Warteschlange Prof. Dr. Nikolaus Wulff Datenstruktur / Datentyp Programme benötigen nicht nur effiziente

Mehr

Übungsblatt 10. Thema: Abstrakte Datentypen, Datenstrukturen in Java

Übungsblatt 10. Thema: Abstrakte Datentypen, Datenstrukturen in Java Informatik I WS 05/06 Prof. Dr. W. May Dipl.-Inform. Oliver Fritzen Dipl.-Inform. Christian Kubczak Übungsblatt 10 Ausgegeben am: Abgabe bis: 13.01.2006 24.1.2006 (Theorie) 27.1.2006 (Praktisch) Thema:

Mehr

Abstrakter Datentyp (ADT): Besteht aus einer Menge von Objekten, sowie Operationen, die auf diesen Objekten wirken.

Abstrakter Datentyp (ADT): Besteht aus einer Menge von Objekten, sowie Operationen, die auf diesen Objekten wirken. Abstrakte Datentypen und Datenstrukturen/ Einfache Beispiele Abstrakter Datentyp (ADT): Besteht aus einer Menge von Objekten, sowie Operationen, die auf diesen Objekten wirken. Datenstruktur (DS): Realisierung

Mehr

Algorithmen und Datenstrukturen (für ET/IT)

Algorithmen 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

Mehr

Grundlegende Datentypen

Grundlegende Datentypen Funktionale Programmierung Grundlegende Datentypen Fakultät für Informatik und Mathematik Hochschule München Letzte Änderung: 14.11.2017 15:37 Inhaltsverzeichnis Typen........................................

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

5.3 Doppelt verkettete Listen

5.3 Doppelt verkettete Listen 5.3 Doppelt verkettete Listen Einfach verkettete Listen unterstützen das Einfügen und Löschen am Anfang in konstanter Zeit; für das Einfügen und Löschen am Ende benötigen sie jedoch lineare Laufzeit Doppelt

Mehr

Konkatenation zweier Listen mit concat

Konkatenation zweier Listen mit concat Ein Datenmodell für Listen Konkatenation zweier Listen mit concat Was ist an der Konkatenation etwas unschön? Man muss die vordere Liste einmal durchgehen, um den letzten Nachfolger (urspr. null zu erhalten,

Mehr

16. Dynamische Datenstrukturen

16. Dynamische Datenstrukturen Datenstrukturen 6. Dynamische Datenstrukturen Eine Datenstruktur organisiert Daten so in einem Computer, dass man sie effizient nutzen kann. Verkettete Listen, Abstrakte Datentypen Stapel, Warteschlange

Mehr

Einfügen immer nur am Kopf der Liste Löschen auch nur an einem Ende (2 Möglichkeiten!)

Einfügen immer nur am Kopf der Liste Löschen auch nur an einem Ende (2 Möglichkeiten!) Stack und Queue Grundlegender Datentyp Menge von Operationen (add, remove, test if empty) auf generischen Daten Ähnlich wie Listen, aber mit zusätzlichen Einschränkungen / Vereinfachungen: Einfügen immer

Mehr

Programmieren 2 15 Abstrakte Datentypen

Programmieren 2 15 Abstrakte Datentypen Programmieren 2 15 Abstrakte Datentypen Bachelor Medieninformatik Sommersemester 2015 Dipl.-Inform. Ilse Schmiedecke schmiedecke@beuth-hochschule.de 1 Verallgemeinerte Datenbehälter Typ, der eine variable

Mehr

Organisatorisches. Algorithmen und Datenstrukturen (für ET/IT) Programm heute. Definition Feld. Definition Feld

Organisatorisches. Algorithmen und Datenstrukturen (für ET/IT) Programm heute. Definition Feld. Definition Feld Organisatorisches Algorithmen und Datenstrukturen (für ET/IT) Sommersemester 208 Dr. Stefanie Demirci Computer Aided Medical Procedures Technische Universität München TUMonline-Einträge: Vorlesung https://campus.tum.de/tumonline/wblv.

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

ProInformatik: Funktionale Programmierung. Punkte

ProInformatik: Funktionale Programmierung. Punkte ProInformatik: Funktionale Programmierung 27.7-22.8.2008, M. Knobelsdorf Probeklausur Ihre persönliche Klausurnummer: Vorname, Nachname: Aufgabe 1 2 3 4 5 6 7 8 Punkte 12 4 4 4 4 2 4 6 40 Erz. Punkte Zum

Mehr

Grundlegende Datentypen

Grundlegende Datentypen Grundlegende Datentypen (Funktionale Programmierung) Prof. Dr. Oliver Braun Letzte Änderung: 18.03.2018 21:08 Grundlegende Datentypen 1/16 Typen in Haskell ist alles streng typisiert Haskell verfügt über

Mehr

Spezielle Datenstrukturen

Spezielle Datenstrukturen Spezielle Datenstrukturen Stapel (Stack) Beschreibung der Datenstruktur Stapel Ein Stapel (engl. Stack), auch Stapelspeicher oder Keller bzw. Kellerspeicher genannt, ist eine Datenstruktur, in der Daten

Mehr

13. Dynamische Datenstrukturen

13. Dynamische Datenstrukturen Motivation: Stapel. Dynamische Datenstrukturen Verkettete Listen, Abstrakte Datentypen Stapel, Warteschlange, Sortierte Liste 40 40 Motivation: Stapel ( push, pop, top, empty ) Wir brauchen einen neuen

Mehr

Informatik I (D-MAVT)

Informatik I (D-MAVT) Informatik I (D-MAVT) Übungsstunde 8, 22.4.2009 simonmayer@student.ethz.ch ETH Zürich Aufgabe 1: Pointer & Structs Schauen wir s uns an! Aufgabe 2: Grossteils gut gemacht! Dynamische Arrays! Sortieren:

Mehr

Kapitel 3: Datentyp Keller und Schlange

Kapitel 3: Datentyp Keller und Schlange Kapitel 3: Datentyp Keller und Schlange Keller (Stack) Schlange (Queue) Prof. Dr. O. Bittel, HTWG Konstanz Programmiertechnik II Datentyp Keller und Schlange SS 2019 3-1 Definition Keller und seine Operationen

Mehr

Algorithmen und Datenstrukturen (für ET/IT)

Algorithmen und Datenstrukturen (für ET/IT) Algorithmen und Datenstrukturen (für ET/IT) Sommersemester 2014 Dr. Tobias Lasser Computer Aided Medical Procedures Technische Universität München 2 Programm heute 1 Einführung 2 Grundlagen von Algorithmen

Mehr

Schnittstellen, Stack und Queue

Schnittstellen, Stack und Queue Schnittstellen, Stack und Queue Schnittstelle Stack Realisierungen des Stacks Anwendungen von Stacks Schnittstelle Queue Realisierungen der Queue Anwendungen von Queues Hinweise zum Üben Anmerkung: In

Mehr

Stack. Queue. pop() liefert zuletzt auf den Stack gelegtes Element und löscht es push( X ) legt ein Element X auf den Stack

Stack. Queue. pop() liefert zuletzt auf den Stack gelegtes Element und löscht es push( X ) legt ein Element X auf den Stack Stack und Queue Grundlegender Datentyp Menge von Operationen (add, remove, test if empty) auf generischen Daten Ähnlich wie Listen, aber mit zusätzlichen Einschränkungen / Vereinfachungen: Einfügen immer

Mehr

Informatik II, SS 2014

Informatik II, SS 2014 Informatik II SS 2014 (Algorithmen & Datenstrukturen) Vorlesung 6 (14.5.2014) Abstrakte Datentypen, Einfache Datenstrukturen Algorithmen und Komplexität Abstrakte Datentypen : Beispiele Dictionary: (auch:

Mehr

Fallstudie: Nim Spiel

Fallstudie: Nim Spiel Fallstudie: Nim Spiel Angeblich chinesischen Ursprungs (Jianshizi) Interessant für Spieltheorie: vollständig analysierbar Frühzeitig computerisiert 1939 Nimatron (Weltausstellung New York) 1951 Nimrod

Mehr

Lösungshinweise/-vorschläge zum Übungsblatt 2: Grundlagen der Programmierung (WS 2018/19)

Lösungshinweise/-vorschläge zum Übungsblatt 2: Grundlagen der Programmierung (WS 2018/19) Prof. Dr. Ralf Hinze Sebastian Schweizer, M.Sc. Peter Zeller, M. Sc. TU Kaiserslautern Fachbereich Informatik AG Programmiersprachen Lösungshinweise/-vorschläge zum Übungsblatt 2: Grundlagen der Programmierung

Mehr

Counting - Sort [ [ ] [ [ ] 1. SS 2008 Datenstrukturen und Algorithmen Sortieren in linearer Zeit

Counting - Sort [ [ ] [ [ ] 1. SS 2008 Datenstrukturen und Algorithmen Sortieren in linearer Zeit Counting-Sort Counting - Sort ( A,B,k ). for i to k. do C[ i]. for j to length[ A]. do C[ A[ j ] C[ A[ j ] +. > C[ i] enthält Anzahl der Elemente in 6. for i to k. do C[ i] C[ i] + C[ i ]. > C[ i] enthält

Mehr

Grundlagen der Informatik. Prof. Dr. Stefan Enderle NTA Isny

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

Mehr

Praktikum Funktionale Programmierung Teil 3: Abstrakte Maschinen Mark 1 und Mark 2

Praktikum Funktionale Programmierung Teil 3: Abstrakte Maschinen Mark 1 und Mark 2 Praktikum Funktionale Programmierung Teil 3: Abstrakte Maschinen und Professur für Künstliche Intelligenz und Softwaretechnologie Sommersemester 2009 Zeitplan Teil 3 Meilenstein 1 Teil 1: Lexen und Parsen

Mehr

Software Entwicklung 1. Fallstudie: Arithmetische Ausdrücke. Rekursive Klassen. Überblick. Annette Bieniusa / Arnd Poetzsch-Heffter

Software Entwicklung 1. Fallstudie: Arithmetische Ausdrücke. Rekursive Klassen. Überblick. Annette Bieniusa / Arnd Poetzsch-Heffter Software Entwicklung 1 Annette Bieniusa / Arnd Poetzsch-Heffter Fallstudie: Arithmetische Ausdrücke AG Softech FB Informatik TU Kaiserslautern Bieniusa/Poetzsch-Heffter Software Entwicklung 1 2/ 33 Überblick

Mehr

Programm heute. Algorithmen und Datenstrukturen (für ET/IT) Feld als sequentielle Liste. Definition Feld

Programm heute. Algorithmen und Datenstrukturen (für ET/IT) Feld als sequentielle Liste. Definition Feld Programm heute Algorithmen und Datenstrukturen (für ET/IT) Sommersemester 205 Dr. Tobias Lasser Computer Aided Medical Procedures Technische Universität München Einführung 2 Grundlagen von Algorithmen

Mehr

Thomas Behr. 17. November 2011

Thomas 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

Mehr

1 Abstrakte Datentypen

1 Abstrakte Datentypen 1 Abstrakte Datentypen Spezifiziere nur die Operationen! Verberge Details der Datenstruktur; der Implementierung der Operationen. == Information Hiding 1 Sinn: Verhindern illegaler Zugriffe auf die Datenstruktur;

Mehr

Grundlegende Datentypen

Grundlegende Datentypen Grundlegende Datentypen Funktionale Programmierung Prof. Dr. Oliver Braun Letzte Änderung: 22.10.2018 10:53 Grundlegende Datentypen 1/21 Typen in Haskell ist alles streng typisiert Haskell verfügt über

Mehr

11. Elementare Datenstrukturen

11. Elementare Datenstrukturen 11. Elementare Datenstrukturen Definition 11.1: Eine dynamische Menge ist gegeben durch eine oder mehrer Mengen von Objekten sowie Operationen auf diesen Mengen und den Objekten der Mengen. Dynamische

Mehr

Vorlesung Datenstrukturen

Vorlesung Datenstrukturen Vorlesung Datenstrukturen Lineare Listen (2) Doppelt verkettete Listen Ringlisten, Stapel, Schlangen Dr. Frank Seifert Vorlesung Datenstrukturen - Sommersemester 2016 Folie 175 Doppelt verkettete Listen

Mehr

Crashkurs: Haskell. Mentoring FU Berlin Felix Droop

Crashkurs: Haskell. Mentoring FU Berlin Felix Droop Crashkurs: Haskell Mentoring FU Berlin 7.11.2018 Felix Droop Crashkurs Haskell 1. GHCi Umgebung

Mehr

Software Entwicklung 1

Software Entwicklung 1 Software Entwicklung 1 Annette Bieniusa / Arnd Poetzsch-Heffter AG Softech FB Informatik TU Kaiserslautern Fallstudie: Arithmetische Ausdrücke Bieniusa/Poetzsch-Heffter Software Entwicklung 1 2/ 33 Überblick

Mehr

Kapitel 4: Datentyp Keller und Schlange

Kapitel 4: Datentyp Keller und Schlange Kapitel 4: Datentyp Keller und Schlange Keller (Stack) Schlange (Queue) 4-1 Definition Keller und seine Operationen Ein Keller (engl. Stack; Stapel) ist eine endliche Menge von Elementen mit einer LIFO-Organisation

Mehr

Beispiele: Funktionsabstraktion (3) Funktionsdeklaration. Funktionsdeklaration (2) Funktionsdeklaration (3) 3. Abstraktion über Funktionsbezeichner:

Beispiele: Funktionsabstraktion (3) Funktionsdeklaration. Funktionsdeklaration (2) Funktionsdeklaration (3) 3. Abstraktion über Funktionsbezeichner: Beispiele: Funktionsabstraktion (3) Funktionsdeklaration 3. Abstraktion über Funktionsbezeichner: Ausdruck: f (f x) Abstraktion: \ f x -> f (f x) Mit Bezeichnervereinbarung: twice = \ f x -> f (f x) erg

Mehr

4.3 Keller und Warteschlangen

4.3 Keller und Warteschlangen .3 Keller und Warteschlangen Wir werden zuerst die weitverbreitete Datenstruktur Keller (auch stack, pushdown) kennenlernen. Auch in Python selbst wird sie z.b. bei der Auswertung arithmetischer Ausdrücke

Mehr

Vollständigkeit. Klassifikation von Operationen

Vollständigkeit. Klassifikation von Operationen Vollständigkeit Definition Konstruktormenge := mininale Menge von Operationen, mit denen man alle Elemente (=Instanzen) des ADT konstruieren kann. Für Stack ist das die Menge {create, push} Definition

Mehr

Datenstrukturen. Mariano Zelke. Sommersemester 2012

Datenstrukturen. Mariano Zelke. Sommersemester 2012 Datenstrukturen Mariano Zelke Sommersemester 2012 Kapitel 3: Elementare Datenstrukturen Mariano Zelke Datenstrukturen 2/18 Einfach verkettete Listen Mariano Zelke Datenstrukturen 3/18 Eine Zeiger-Implementierung

Mehr

ALP II Dynamische Datenmengen Datenabstraktion (Teil 2)

ALP II Dynamische Datenmengen Datenabstraktion (Teil 2) ALP II Dynamische Datenmengen Datenabstraktion (Teil 2) O1 O2 O3 O4 SS 2012 Prof. Dr. Margarita Esponda 49 Einfach verkettete Listen O1 O2 O3 50 Einführung Einfach verkettete Listen sind die einfachsten

Mehr

Theoretische Informatik 1 WS 2007/2008. Prof. Dr. Rainer Lütticke

Theoretische 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

Mehr

Lösungsvorschläge zum Übungsblatt 11: Übersetzung von Programmiersprachen (WS 05/06)

Lösungsvorschläge zum Übungsblatt 11: Übersetzung von Programmiersprachen (WS 05/06) Prof. Dr. A. Poetzsch-Heffter Dipl.-Inform. M. Gawkowski Technische Universität Kaiserslautern Fachbereich Informatik AG Softwaretechnik Lösungsvorschläge zum Übungsblatt 11: Übersetzung von Programmiersprachen

Mehr

Institut für Programmierung und Reaktive Systeme 7. Mai Programmieren II. 11. Übungsblatt

Institut für Programmierung und Reaktive Systeme 7. Mai Programmieren II. 11. Übungsblatt Technische Universität Braunschweig Dr. Werner Struckmann Institut für Programmierung und Reaktive Systeme 7. Mai 2018 Programmieren II 11. Übungsblatt Hinweis: Auf diesem und den folgenden Übungsblättern

Mehr

Informatik 1 ( ) D-MAVT F2010. Rekursion, Signaturen. Yves Brise Übungsstunde 8

Informatik 1 ( ) D-MAVT F2010. Rekursion, Signaturen. Yves Brise Übungsstunde 8 Informatik 1 (251-0832-00) D-MAVT F2010 Rekursion, Signaturen Nachbesprechung Blatt 6 Aufgabe 1 - Strukturen und Zeiger Genau die Variablen angeben, die sich geändert haben. Implizite Initialisierung ergänzt

Mehr

Paradigmen der Programmierung

Paradigmen der Programmierung SS 11 Prüfungsklausur 25.07.2011 Aufgabe 5 (6+9 = 15 Punkte) a) Bestimmen Sie jeweils den Typ der folgenden Haskell-Ausdrücke: ( 1, 2 :"3", 4 < 5) :: (Char, String, Bool) [(last, tail), (head, take 5)]

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

Kapitel 4. Kontrollstrukturen

Kapitel 4. Kontrollstrukturen Kapitel 4 Kontrollstrukturen Kontrollstrukturen 1 Ziele Kontrollstrukturen in imperativen Programmen kennenlernen und verstehen. Realisierung der Kontrollstrukturen in Java. Kontrollstrukturen 2 Anweisungen

Mehr

Nachtrag: Vergleich der Implementierungen von Stack

Nachtrag: Vergleich der Implementierungen von Stack Nachtrag: Vergleich der Implementierungen von Stack In der letzten Vorlesung hatten wir zwei Implementierung der Klasse Stack: eine Implementierung als Liste (Array): liststack eine Implementierung als

Mehr

Probeklausur Software-Entwicklung I

Probeklausur Software-Entwicklung I Prof. Dr. A. Poetzsch-Heter Dipl.-Inform. J. O. Blech Dipl.-Inform. M. J. Gawkowski Dipl.-Inform. N. Rauch Technische Universität Kaiserslautern Fachbereich Informatik AG Softwaretechnik Probeklausur Software-Entwicklung

Mehr

Stack. Seniorenseminar Michael Pohlig

Stack. Seniorenseminar Michael Pohlig Stack Seniorenseminar 21.06.2013 Michael Pohlig (pohlig@kit.edu) Übersicht 1. Axiomatik eins Kellers und seine Software- Realisierung 2. Bedeutung der Rekursion in der Mathematik 3. Rekursive Programmierung.

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

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

Algorithmen und Datenstrukturen Abstrakte Datentypen. M. Herpers, Y. Jung, P. Klingebiel

Algorithmen und Datenstrukturen Abstrakte Datentypen. M. Herpers, Y. Jung, P. Klingebiel Algorithmen und Datenstrukturen Abstrakte Datentypen M. Herpers, Y. Jung, P. Klingebiel 1 Lernziele Die abstrakten Datentypen Stapel, Warteschlange und Liste sind bekannt und können angewendet werden Listen

Mehr

Beschreibung von Werten: Beschreibung von Werten: (2) Begriffsklärung: (Ausdruck, expression) (2) Begriffsklärung: (Ausdruck, expression)

Beschreibung von Werten: Beschreibung von Werten: (2) Begriffsklärung: (Ausdruck, expression) (2) Begriffsklärung: (Ausdruck, expression) Beschreibung von Werten: Beschreibung von Werten: (2) mittels Konstanten oder Bezeichnern für Werte: 23 " Ich bin eine Zeichenreihe" True x durch direkte Anwendung von Funktionen: abs (-28382) "Urin" ++

Mehr

WS 2011/2012. Georg Sauthoff Januar 2012

WS 2011/2012. Georg Sauthoff Januar 2012 WS 2011/2012 Georg 1 AG Praktische Informatik 11. Januar 2012 1 gsauthof@techfak.uni-bielefeld.de Man unterscheidet zwei Arten von : konkrete : beziehen sich auf eine konkrete Repräsentation in der Sprache.

Mehr

2.3 Spezifikation von Abstrakten Datentypen

2.3 Spezifikation von Abstrakten Datentypen Abstrakte Datentypen (ADT) 2.3 Spezifikation von Abstrakten Datentypen Sichtbare Schnittstelle: Typbezeichner Signaturen der Operationen Spezifikation der Operationen Abstraktionsbarriere Implementierung

Mehr

Tutoraufgabe 1 (Implementierung eines ADTs):

Tutoraufgabe 1 (Implementierung eines ADTs): Prof. aa Dr. E. Ábrahám Datenstrukturen und Algorithmen SS Tutoriumslösung - Übung (Abgabe.05.0) F. Corzilius, S. Schupp, T. Ströder Tutoraufgabe (Implementierung eines ADTs): Wir spezifizieren den ADT

Mehr

Vorsemesterkurs Informatik

Vorsemesterkurs Informatik Vorsemesterkurs Informatik Sommersemester 2011 Grundlagen der Programmierung in Haskell SoSe 2011 Stand der Folien: 30. März 2011 Übersicht 1 Ausdrücke und Typen 2 Funktionen 3 Rekursion Vorkurs Informatik

Mehr

8 Elementare Datenstrukturen

8 Elementare Datenstrukturen Algorithmen und Datenstrukturen 186 8 Elementare Datenstrukturen In diesem und dem folgenden Kapitel werden grundlegende Techniken der Darstellung und Manipulation dynamischer Mengen auf Computern vorgestellt.

Mehr

Programmieren in Haskell Einstieg in Haskell

Programmieren in Haskell Einstieg in Haskell Programmieren in Haskell Einstieg in Haskell Peter Steffen Universität Bielefeld Technische Fakultät 24.10.2008 1 Programmieren in Haskell Was wir heute machen Umfrage: Wer hat den Hugs ausprobiert? Ausdrücke

Mehr

Übung zur Vorlesung Programmierung

Übung zur Vorlesung Programmierung RWTH Aachen Lehrgebiet Theoretische Informatik Frohn Reidl Rossmanith Sánchez Ströder WS 013/14 Übungsblatt 4 18.11.013 Übung zur Vorlesung Programmierung Aufgabe T8 Ein Stack ist eine Datenstruktur, die

Mehr

Algorithmen und Datenstrukturen (für ET/IT)

Algorithmen und Datenstrukturen (für ET/IT) Algorithmen und Datenstrukturen (für ET/IT) Sommersemester 2014 Dr. Tobias Lasser Computer Aided Medical Procedures Technische Universität München 2 Programm heute 1 Einführung 2 Grundlagen von Algorithmen

Mehr

Kapitel 4. Kontrollstrukturen

Kapitel 4. Kontrollstrukturen Kapitel 4 Kontrollstrukturen Kontrollstrukturen 1 Ziele Kontrollstrukturen in imperativen Programmen kennenlernen und verstehen. Realisierung der Kontrollstrukturen in Java. Kontrollstrukturen 2 Anweisungen

Mehr

Einfache Liste: Ein Stapel (Stack) Ansatz. Schaubild. Vorlesung 1. Handout S. 2. Die einfachste Form einer Liste ist ein Stapel (stack).

Einfache Liste: Ein Stapel (Stack) Ansatz. Schaubild. Vorlesung 1. Handout S. 2. Die einfachste Form einer Liste ist ein Stapel (stack). Programmieren I Martin Schultheiß Hochschule Darmstadt Sommersemester 2011 1 / 64 2 / 64 Motivation Hauptteil dieser Vorlesung sind die so genannten. Zur Motivation (und als Vorbereitung der Datencontainer-Klassen

Mehr

Probeklausur Grundlagen der Programmierung

Probeklausur Grundlagen der Programmierung Prof. Ralf Hinze S. Schweizer, M.Sc. P. Zeller, M.Sc. Technische Universität Kaiserslautern Fachbereich Informatik AG Programmiersprachen Probeklausur Grundlagen der Programmierung Dienstag, 08.01.2019

Mehr

Grunddatentypen, Ausdrücke und Variablen Typkonversion, Überprüfen und Auswerten von Ausdrücken

Grunddatentypen, Ausdrücke und Variablen Typkonversion, Überprüfen und Auswerten von Ausdrücken Typkonversion, Überprüfen und Auswerten von Ausdrücken Annabelle Klarl Zentralübung zur Vorlesung Einführung in die Informatik: http://www.pst.ifi.lmu.de/lehre/wise-12-13/infoeinf WS12/13 Grunddatentypen

Mehr

Aufgabe 1 (12 Punkte)

Aufgabe 1 (12 Punkte) Aufgabe 1 (12 Punkte) Schreiben Sie eine Klasse public class ZinsesZins, die zu einem gegebenen Anfangskapital von 100,00 die Kapitalentwicklung bei einer jährlichen nachschüssigen Verzinsung in Höhe von

Mehr

Programmierkurs Java

Programmierkurs Java Programmierkurs Java Dr. Dietrich Boles Aufgaben zu UE16-Rekursion (Stand 09.12.2011) Aufgabe 1: Implementieren Sie in Java ein Programm, das solange einzelne Zeichen vom Terminal einliest, bis ein #-Zeichen

Mehr

Übungsblatt 13. Abgabe / Besprechung in Absprache mit dem Tutor

Übungsblatt 13. Abgabe / Besprechung in Absprache mit dem Tutor Albert-Ludwigs-Universität Freiburg Institut für Informatik Einführung in die Informatik Sommersemester 2013 PD Dr. Cyrill Stachniss Dr. Rainer Kümmerle Übungsblatt 13 Abgabe / Besprechung in Absprache

Mehr