Lazy Pattern Matching. 10. Dezember 2014

Größe: px
Ab Seite anzeigen:

Download "Lazy Pattern Matching. 10. Dezember 2014"

Transkript

1 Lazy Lazy s Universität Bielefeld AG Praktische Informatik 10. Dezember 2014

2 Themen-Vorschau : as-s und lazy s Client-Server-Programmierung Lazy s

3 matching (alias Mustervergleich) kennen wir bereits aus Funktionsgleichungen aus case-ausdrücken Ein (Muster) ist ein Ausdruck bestehend aus Variablen, der anonymen Variablen _ ( Joker ) Konstruktoren aller Datentypen Zahlen, Characters... also keine Funktionen, die nicht Konstruktoren sind... und keine Variable mehrfach, ausgenommen _ Lazy s

4 Ergonomie des matching leistet zweierlei Fallunterscheidung in übersichtlicher Form Nutzung der Reihenfolge bei überlappenden Mustern Bindung von Muster-Variablen an Substrukturen des geprüften Werts 1 leaves ( Leaf a) = [a] 2 leaves ( Br ( Leaf a) y) = a : leaves y 3 leaves (Br (Br x y) z) = leaves (Br x (Br y z)) Lazy s

5 As-s 1 Manchmal will man Muster verwenden und einen Namen für den (unzerlegten) Argumentwert haben 2 suffixes (x:xs) = (x:xs ): suffixes xs erzeugt eine überflüssige (:) Operation, vergeudet Zeit und verschwendet Platz. Besser mit as-pattern Lazy s suffixes z@(x:xs) = z: suffixes xs Nun ist das schon vorhandene x:xs unter dem Namen z zu haben.

6 As-s 1 Manchmal will man Muster verwenden und einen Namen für den (unzerlegten) Argumentwert haben 2 suffixes (x:xs) = (x:xs ): suffixes xs erzeugt eine überflüssige (:) Operation, vergeudet Zeit und verschwendet Platz. Besser mit as-pattern Lazy s suffixes z@(x:xs) = z: suffixes xs Nun ist das schon vorhandene x:xs unter dem Namen z zu haben. Nebenbei: Welche Komplexität hat die Berechnung von suffixes x? Und welche die Ausgabe des Ergebnisses?

7 und Auswertungreihenfolge Vergleich eines Musters mit einem Wert erfordert, dass der Wert ausgerechnet wird, aber nur soweit es für den Vergleich nötig ist (Laziness) Verwendung von Mustern hat also Auswirkung auf die Berechenungsreihenfolge Lazy s

8 Abweisbare und nicht abweisbare Muster a.k.a. refutable versus irrefutable patterns Ein Muster ohne Konstruktoren (also x, _ ) passt auf jedem Wert und heißt unabweisbar Ein Muster mit Konstruktoren heißt abweisbar Ist eine Funktion mit unabweisbaren Mustern definiert, ist sie immer ein Redex. Beispiele: 1 square x = x * x 2 double f = f. f 3 five _ = 5 NB: Man kann alle Funktionen auf der linken Seite mit unabweisbaren Mustern schreiben, wenn man stattdessen case-ausdrücke auf der rechten Seite verwendet. Lazy s

9 und Terminierung (1) Erinnerung: Die Auswertungsstrategie in einer funktionalen Sprache hat keinen Einfluss auf den ggf. berechneten Wert, wohl aber auf die Terminierung der Berechnung. Ein Mustervergleich kann positive oder negativ ausgehen, oder divergieren Alle Muster in einer Gleichung werden top-down, links-rechts verglichen Geht ein Vergleich negativ aus, ist die aktuelle Gleichung nicht anwendbar, und es wird die nachfolgende Gleichung versucht Ruft der Vergleich eine nicht-endende Berechnung hervor, divergiert er und das Ergebnis der Gesamtrechnung ist undefiniert. Passen alle Muster einer Gleichung, wird sie angewendet Lazy s

10 Bottom Hier eine Definition des undefinierten Werts 1 > bot = bot bot, ausgesprochen bottom ist der gänzlich undefinierte Wert. Seine Berechnung terminiert nicht, und produziert auch keinen Konstruktor. Lazy s

11 Bottom Hier eine Definition des undefinierten Werts 1 > bot = bot bot, ausgesprochen bottom ist der gänzlich undefinierte Wert. Seine Berechnung terminiert nicht, und produziert auch keinen Konstruktor. Lazy s Was wäre ein teilweise undefinierter Wert?

12 Bottom Hier eine Definition des undefinierten Werts 1 > bot = bot bot, ausgesprochen bottom ist der gänzlich undefinierte Wert. Seine Berechnung terminiert nicht, und produziert auch keinen Konstruktor. Lazy s Was wäre ein teilweise undefinierter Wert? Nebenbei: Welchen Typ hat bot?

13 und Terminierung (2) Vergleiche 1 take 0 _ = [] 2 take _ [] = [] 3 take n (x:xs) = x : take (n -1) xs und mit vertauschten Zeilen 1 take _ [] = [] 2 take 0 _ = [] 3 take n (x:xs) = x : take (n -1) xs Einen Unterschied gibt es nur, wenn eines der Argumente undefiniert ist... Lazy s

14 Unterschiedliches Terminierungsverhalten 1 take 0 bot ==> [] 2 take 0 bot = = > undefiniert 3 4 take bot [] = = > undefiniert 5 take bot [] ==> [] Lazy s Der Haskell Prelude implementiert die Version take.

15 Lazy s a.k.a. Muster mit verzögertem Vergleich Problem: Man möchte eine Funktion mit einem Muster definieren und zwar für ein Argument, das durch die Anwendung der Funktion erst berechnet wird Zwar steht fest, dass das Muster erfüllt sein wird, jedoch zum Zeitpunkt der Funktionsaufrufs muss für den Mustervergleich die gleiche Funktion wieder aufgerufen werden... Lazy s Wo kommt so etwas überhaupt vor?

16 Client-Server-Anwendungen Client-Server-Anwendungen sind parallel laufende Programme, die über Ströme kommunizieren Nachrichten an einander Requests und Responses werden wechselseitig erzeugt und gelesen Sie werden in Strömen (streams) verwaltet. Ströme sind einfach lazy Listen, in andern Sprachen weden sie als spezieller Datentyp zur Verfügung gestellt. Lazy s

17 Zahlen raten als client- Programm (1) Ratespiel: Finde eine Zahl n aus dem Intervall [0..N] durch Fragen der Art Ist n z? mit geschickt gewählten Vergleichszahlen z. Lazy s

18 Zahlen raten als client- Programm (1) Ratespiel: Finde eine Zahl n aus dem Intervall [0..N] durch Fragen der Art Ist n z? mit geschickt gewählten Vergleichszahlen z. 63 Lazy s

19 Zahlen raten als client- Programm (1) Ratespiel: Finde eine Zahl n aus dem Intervall [0..N] durch Fragen der Art Ist n z? mit geschickt gewählten Vergleichszahlen z. Rollenverteilung: Client: Erzeugt Fragen und merkt sich das Ergebnis. Seine Strategie: Intervall-Halbierung; sie führt garantiert in O(log(N)) Schritten zum Ziel. Server: Kennt n und beantwortet Fragen Ist n z? mit True oder False. Der Server antwortet wahrheitsgemäß. Kommunikation zwischen Client und Server über zwei Ströme: questions und answers. Lazy s

20 Zahlen raten als client- Programm (2) Eine Frage hat die Form (l,g,u) und bedeutet ausführlich: Ich weiß dass n [l..u] und frage ob n g. g ist dabei die Intervallmitte, und wird, je nach Antwort, für die nächste Frage ins linke oder rechte Halbintervall verlegt. Das Ende erkennt der Client daran, dass das Intervall sich nicht mehr ändert. 1 > minn = 0 2 > maxn = > t a k e d i f f [ ] = [ ] 4 > t a k e d i f f [ x ] = [ x ] 5 > t a k e d i f f ( x : y : x s ) = x : i f y == x then [ ] e l s e t a k e d i f f ( y : x s ) takediff nimmt den Präfix einer Liste bis zur ersten Wiederholung Lazy s

21 Zahlen raten als client- Programm (2) Wir definieren die Prozesse ask und reply, die über die Listen questions und answers kommunizieren. 1 > g u e s s n = t a k e d i f f (map ( \ (_, g, _) > g ) q u e s t i o n s ) where 2 > a n s w e r s = r e p l y q u e s t i o n s 3 > r e p l y ( ( _, g, _ ) : qs ) = ( n <= g ) : r e p l y qs 4 5 > q u e s t i o n s = ask i n i t i a l a n s w e r s where 6 > i n i t i a l = ( minn, (maxn + minn ) div 2, maxn) 7 > ask ( l, g, u ) ( a : as ) = ( l, g, u ) : ask newguess as where 8 > newguess = i f a then ( l, ( l + g ) div 2, g ) 9 > e l s e ( g+1, ( g+1 + u ) div 2, u ) Lazy s

22 Zahlen raten als client- Programm (2) Wir definieren die Prozesse ask und reply, die über die Listen questions und answers kommunizieren. 1 > g u e s s n = t a k e d i f f (map ( \ (_, g, _) > g ) q u e s t i o n s ) where 2 > a n s w e r s = r e p l y q u e s t i o n s 3 > r e p l y ( ( _, g, _ ) : qs ) = ( n <= g ) : r e p l y qs 4 5 > q u e s t i o n s = ask i n i t i a l a n s w e r s where 6 > i n i t i a l = ( minn, (maxn + minn ) div 2, maxn) 7 > ask ( l, g, u ) ( a : as ) = ( l, g, u ) : ask newguess as where 8 > newguess = i f a then ( l, ( l + g ) div 2, g ) 9 > e l s e ( g+1, ( g+1 + u ) div 2, u ) Diese Version funktioniert nicht warum? Lazy s

23 Verklemmung! Der Aufruf von ask (l,g,u) (a:as) stellt eine Frage ((l,g,u)), die von reply beantwortet wird (a) fragt jedoch in seinem rechten Muster bereits nach dieser Antwort ((a:as)), um aus ihr die nächste Frage (newguess) zu generieren Das pattern matching beim Aufruf von ask kommt zu frueh: es verlangt ein Ergbnis von reply, bevor der gegebene Aufruf von ask das erste Element von questions generiert hat. reply seinerseits verlangt ein Ergebnis von ask... Lazy s

24 Zahlen raten als client- Programm (3) Vermeidung des übereifrigen Musters: 1 > guess n = t a k e d i f f (map ( \ (_, g, _) > g ) q u e s t i o n s ) where 2 > a n s w e r s = r e p l y q u e s t i o n s 3 > 4 r e p l y ( ( _, g, _ ) : qs ) = ( n <= g ) : r e p l y qs 5 > q u e s t i o n s = ask i n i t i a l a n s w e r s where 6 > i n i t i a l = ( minn, (maxn + minn ) div 2, maxn) 7 > ask ( l, g, u ) as = ( l, g, u ) : ask newguess ( t a i l as ) where Lazy s 8 > a = head as 9 > newguess = i f a then ( l, ( l + g ) div 2, g ) 10 > e l s e ( g+1, ( g+1 + u ) div 2, u ) ask kann nun starten, ohne zuerst nach der Zerlegung der answers-liste as zu fragen. Also kann die Frage ausgegeben und daraus die erste Antwort erzeugt werden, bevor mit head as nach ihr gefragt wird

25 Lazy s Durch (...) Lazy s wird ein als lazy markiert. Das löst unser Verklemmungsproblem.

26 Zahlen raten als client- Programm (4) Der gleiche Effekt mit lazy pattern ~(a:as) 1 > guess n = t a k e d i f f (map ( \ (_, g, _) > g ) q u e s t i o n s ) where 2 > a n s w e r s = r e p l y q u e s t i o n s 3 > r e p l y ( ( _, g, _ ) : qs ) = ( n <= g ) : r e p l y qs 4 5 > q u e s t i o n s = ask i n i t i a l a n s w e r s where 6 > i n i t i a l = ( minn, (maxn + minn ) div 2, maxn) 7 > ask ( l, g, u ) ~( a : as ) = ( l, g, u ) : ask newguess as where Lazy s 8 > newguess = i f a then ( l, ( l + g ) div 2, g ) 9 > e l s e ( g+1, ( g+1 + u ) div 2, u ) der lazy pattern ~(a:as) wird beim Aufruf als erfüllt angenommen erst wenn a oder as gebraucht wird, findet der Abgleich statt.

27 Lazy s Lazy patterns, ~(...) sind unabweisbar. Ihre Überprüfung findet nur statt, wenn eine Komponente daraus gebraucht wird Scheitert sie, bricht die Rechnung ab. Eine weitere Mustergleichung nach einer Gleichung mit einem lazy macht also keinen Sinn. Lazy s

28 Top level pattern binding: immer lazy Werden Muster nicht auf Argumentposition, sondern in der Definition von Konstanten benutzt, sind sie automatisch lazy: = 1:1:[a+b (a,b) <- zip fibp tfibp ] Lazy s

29 Top level pattern binding: immer lazy Werden Muster nicht auf Argumentposition, sondern in der Definition von Konstanten benutzt, sind sie automatisch lazy: = 1:1:[a+b (a,b) <- zip fibp tfibp ] Hier haben wir einen as-, der eine konstante, unendliche Liste definiert, die Liste der Fibonacci-Zahlen. Das Muster bindet die Gesamtliste an den Namen fibp, zugleich ihren tail an den Namen tfibp die linke Seite fragt, ob die Liste nicht leer ist, aber dank der laziness des Musters wird dies erst geprüft, wenn tfibp rechts benutzt wird Lazy s

30 Top level pattern binding: immer lazy Werden Muster nicht auf Argumentposition, sondern in der Definition von Konstanten benutzt, sind sie automatisch lazy: = 1:1:[a+b (a,b) <- zip fibp tfibp ] Hier haben wir einen as-, der eine konstante, unendliche Liste definiert, die Liste der Fibonacci-Zahlen. Das Muster bindet die Gesamtliste an den Namen fibp, zugleich ihren tail an den Namen tfibp die linke Seite fragt, ob die Liste nicht leer ist, aber dank der laziness des Musters wird dies erst geprüft, wenn tfibp rechts benutzt wird Vergleiche: let a@(1:as) = 1:[] in 2:a let a@(0:as) = 1:[] in 2:a Lazy s

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

Programmieren in Haskell. Stefan Janssen. Strukturelle Rekursion. Universität Bielefeld AG Praktische Informatik. 10.

Programmieren in Haskell. Stefan Janssen. Strukturelle Rekursion. Universität Bielefeld AG Praktische Informatik. 10. Universität Bielefeld AG Praktische Informatik 10. Dezember 2014 Wiederholung: Schema: f :: [σ] -> τ f [] = e 1 f (a : as) = e 2 where s = f as wobei e 1 und e 2 Ausdrücke vom Typ τ sind und e 2 die Variablen

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

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

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

Programmieren in Haskell

Programmieren in Haskell Programmieren in Haskell Syntax und Semantik von Haskell Programmieren in Haskell 1 Was wir heute (und nächstes mal) machen Datentypdefinitionen Wertdefinitionen, Variablenbindungen Musterbindungen Funktionsbindungen

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

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

Funktionale Programmierung ALP I. Funktionen höherer Ordnung. Teil 2 SS 2013. Prof. Dr. Margarita Esponda. Prof. Dr.

Funktionale Programmierung ALP I. Funktionen höherer Ordnung. Teil 2 SS 2013. Prof. Dr. Margarita Esponda. Prof. Dr. ALP I Funktionen höherer Ordnung Teil 2 SS 2013 Funktionen höherer Ordnung Nehmen wir an, wir möchten alle Zahlen innerhalb einer Liste miteinander addieren addall:: (Num a) => [a -> a addall [ = 0 addall

Mehr

Tag 7. Pattern Matching und eigene Datentypen

Tag 7. Pattern Matching und eigene Datentypen Tag 7 Pattern Matching und eigene Datentypen Heute werden wir eine Technik kennenlernen, die dafür sorgt, daß wir sehr viel übersichtlichere und kürzere Programme schreiben können. Als Überleitung auf

Mehr

Einführung in die Funktionale Programmierung mit Haskell

Einführung in die Funktionale Programmierung mit Haskell Einführung in die Funktionale Programmierung mit Haskell Rekursion LFE Theoretische Informatik, Institut für Informatik, Ludwig-Maximilians Universität, München 25. April 2013 Planung Achtung: Nächste

Mehr

Felder. November 5, 2014

Felder. November 5, 2014 Felder Universität Bielefeld AG Praktische Informatik November 5, 2014 Felder: Datenstrukturen mit konstantem Zugriff Felder nennt man auch, Vektoren, Matrizen,... Konstanter Zugriff heisst: Zugriff auf

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

Crashkurs Haskell Mentoring WiSe 2016/17. Anja Wolffgramm Freie Universität Berlin

Crashkurs Haskell Mentoring WiSe 2016/17. Anja Wolffgramm Freie Universität Berlin Crashkurs Haskell Mentoring WiSe 2016/17 Anja Wolffgramm Freie Universität Berlin 02/11/2016 , Inhalt Kommandozeile Haskell installieren & starten Ein 1. Haskell-Programm Funktionsdefinition Primitive

Mehr

Funktionale Programmiersprachen

Funktionale Programmiersprachen Funktionale Programmiersprachen An den Beispielen Haskell und Erlang Übersicht Programmiersprachen λ-kalkül Syntax, Definitionen Besonderheiten von funktionalen Programmiersprache, bzw. Haskell Objektorientierte

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

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 s Wochenende Programmieren

Mehr

Funktionale Programmierung

Funktionale Programmierung Schleifen 1 Funktionale Programmierung Jörg Kreiker Uni Kassel und SMA Solar Technology AG Wintersemester 2011/2012 3 Teil I Jedem Anfang wohnt ein Zauber inne 4 Über mich Diplom in Informatik in Saarbrücken

Mehr

Beispiele: (Funktionen auf Listen) (3) Bemerkungen: Die Datenstrukturen der Paare (2) Die Datenstrukturen der Paare

Beispiele: (Funktionen auf Listen) (3) Bemerkungen: Die Datenstrukturen der Paare (2) Die Datenstrukturen der Paare Beispiele: (Funktionen auf Listen) (3) Bemerkungen: 5. Zusammenhängen der Elemente einer Liste von Listen: concat :: [[a]] -> [a] concat xl = if null xl then [] else append (head xl) ( concat (tail xl))

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

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

Das Damenproblem - funktional und logisch

Das Damenproblem - funktional und logisch - funktional und logisch 1 1 Technische Fakultät Universität Bielefeld 14.5.2014 / Seminar Programmiersprachen Gliederung Einleitung 1 Einleitung 2 3 Problembeschreibung Definition Definition Sei N eine

Mehr

Funktionen höherer Ordnung

Funktionen höherer Ordnung Eine Funktion wird als Funktion höherer Ordnung bezeichnet, wenn Funktionen als Argumente verwendet werden, oder wenn eine Funktion als Ergebnis zurück gegeben wird. Beispiel: twotimes :: ( a -> a ) ->

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

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

ALP I. Funktionale Programmierung

ALP I. Funktionale Programmierung ALP I Funktionale Programmierung Sortieren und Suchen (Teil 1) WS 2012/2013 Suchen 8 False unsortiert 21 4 16 7 19 11 12 7 1 5 27 3 8 False sortiert 2 4 6 7 9 11 12 18 21 24 27 36 Suchen in unsortierten

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

11 Fallstudie: Reguläre Ausdrücke

11 Fallstudie: Reguläre Ausdrücke 11 Fallstudie: Reguläre Ausdrücke Mit den bisher eingeführten Sprachelementen von Haskell lassen sich bereits substantielle Projekte realisieren. Dieses Kapitel 1 beschreibt einen algebraischen Datentyp

Mehr

Induktion und Rekursion

Induktion und Rekursion Induktion und Rekursion Induktion und Rekursion Vorkurs Informatik Theoretischer Teil WS 013/14. Oktober 013 Vorkurs Informatik WS 013/14 1/1 Vollständige Induktion Vorkurs Informatik WS 013/14 /1 Ziel

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

WS 2011/2012. Georg Sauthoff 1. October 18, 2011

WS 2011/2012. Georg Sauthoff 1. October 18, 2011 in in WS 2011/2012 Georg 1 AG Praktische Informatik October 18, 2011 1 gsauthof@techfak.uni-bielefeld.de Neue Übungsgruppen in neue Übungsgruppen neue Tutoren Sprechstunden in GZI-Arbeitsraum (V2-240)

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

Programmieren I. Kapitel 5. Kontrollfluss

Programmieren I. Kapitel 5. Kontrollfluss Programmieren I Kapitel 5. Kontrollfluss Kapitel 5: Kontrollfluss Ziel: Komplexere Berechnungen im Methodenrumpf Ausdrücke und Anweisungen Fallunterscheidungen (if, switch) Wiederholte Ausführung (for,

Mehr

Grundlagen der Programmierung 2 (1.C)

Grundlagen der Programmierung 2 (1.C) Grundlagen der Programmierung 2 (1.C) Prof. Dr. Manfred Schmidt-Schauÿ Künstliche Intelligenz und Softwaretechnologie 3. Mai 2006 Funktionen auf Listen: map map :: (a -> b) -> [a] -> [b] map f [] = []

Mehr

Funktionale Programmierung mit Haskell. Jan Hermanns

Funktionale Programmierung mit Haskell. Jan Hermanns Funktionale Programmierung mit Haskell Jan Hermanns 1 Programmiersprachen imperativ deklarativ konventionell OO logisch funktional Fortran Smalltalk Prolog Lisp C Eiffel ML Pascal Java Haskell 2 von Neumann

Mehr

Programmieren in Haskell Einführung

Programmieren in Haskell Einführung Programmieren in Haskell Einführung Peter Steffen Universität Bielefeld Technische Fakultät 16.10.2009 1 Programmieren in Haskell Veranstalter Dr. Peter Steffen Raum: M3-124 Tel.: 0521/106-2906 Email:

Mehr

Programmtransformationen und Induktion in funktionalen Programmen

Programmtransformationen und Induktion in funktionalen Programmen Programmtransformationen und Induktion in funktionalen Programmen Prof. Dr. Manfred Schmidt-Schauß Künstliche Intelligenz und Softwaretechnologie 13. Januar 2009 Einschub: Monadisches IO verzögern Implementierung

Mehr

ALP I Einführung in Haskell

ALP I Einführung in Haskell ALP I Einführung in Haskell WS 2012/2013 Was ist Haskell? Haskell ist eine rein Funktionale Programmiersprache mit einer nach Bedarf Auswertung-Strategie oder "Lazy Evaluation". Was bedeutet rein funktional?

Mehr

Hilfsblatt für C++ Prüfungen im 5. Semester

Hilfsblatt für C++ Prüfungen im 5. Semester Hilfsblatt für C++ Prüfungen im 5. Semester Hilfsblatt für C++ Prüfungen im 5. Semester 1 Klassen 2 Win-32 Programmierung 3 Handles 3 Dateien, Files 3 Threads 3 Events 4 Funktionen 5 Einfache Funktionen

Mehr

Informatik I: Einführung in die Programmierung

Informatik I: Einführung in die Programmierung Informatik I: Einführung in die Programmierung 7. Albert-Ludwigs-Universität Freiburg Bernhard Nebel 31. Oktober 2014 1 31. Oktober 2014 B. Nebel Info I 3 / 20 Um zu, muss man zuerst einmal. Abb. in Public

Mehr

C++ Teil 2. Sven Groß. 16. Apr IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Apr / 22

C++ Teil 2. Sven Groß. 16. Apr IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Apr / 22 C++ Teil 2 Sven Groß IGPM, RWTH Aachen 16. Apr 2015 Sven Groß (IGPM, RWTH Aachen) C++ Teil 2 16. Apr 2015 1 / 22 Themen der letzten Vorlesung Hallo Welt Elementare Datentypen Ein-/Ausgabe Operatoren Sven

Mehr

Algorithmen & Programmierung. Rekursive Funktionen (1)

Algorithmen & Programmierung. Rekursive Funktionen (1) Algorithmen & Programmierung Rekursive Funktionen (1) Berechnung der Fakultät Fakultät Die Fakultät N! einer nichtnegativen ganzen Zahl N kann folgendermaßen definiert werden: d.h. zur Berechnung werden

Mehr

Zahlen in Haskell Kapitel 3

Zahlen in Haskell Kapitel 3 Einführung in die Funktionale Programmiersprache Haskell Zahlen in Haskell Kapitel 3 FH Wedel IT-Seminar: WS 2003/04 Dozent: Prof. Dr. Schmidt Autor: Timo Wlecke (wi3309) Vortrag am: 04.11.2003 - Kapitel

Mehr

Verschlüsseln eines Bildes. Visuelle Kryptographie. Verschlüsseln eines Bildes. Verschlüsseln eines Bildes

Verschlüsseln eines Bildes. Visuelle Kryptographie. Verschlüsseln eines Bildes. Verschlüsseln eines Bildes Verschlüsseln eines Bildes Visuelle Kryptographie Anwendung von Zufallszahlen Wir wollen ein Bild an Alice und Bob schicken, so dass Alice allein keine Information über das Bild bekommt Bob allein keine

Mehr

Datenstrukturen & Algorithmen

Datenstrukturen & Algorithmen Datenstrukturen & Algorithmen Matthias Zwicker Universität Bern Frühling 2010 Übersicht Dynamische Programmierung Einführung Ablaufkoordination von Montagebändern Längste gemeinsame Teilsequenz Optimale

Mehr

Haskell Seminar Abstrakte Datentypen. Nils Bardenhagen ms2725

Haskell Seminar Abstrakte Datentypen. Nils Bardenhagen ms2725 Haskell Seminar Abstrakte Datentypen Nils Bardenhagen ms2725 Gliederung Konzept Queue Module Sets Bags Flexible Arrays Fazit Abstrakte Datentypen (ADT) Definition: Eine Zusammenfassung von Operationen,

Mehr

Haskell, Typen, und Typberechnung. Grundlagen der Programmierung 3 A. Einige andere Programmiersprachen. Typisierung in Haskell

Haskell, Typen, und Typberechnung. Grundlagen der Programmierung 3 A. Einige andere Programmiersprachen. Typisierung in Haskell Haskell, Typen, und Typberechnung Grundlagen der Programmierung 3 A Typen, Typberechnung und Typcheck Prof. Dr. Manfred Schmidt-Schauß Ziele: Haskells Typisierung Typisierungs-Regeln Typ-Berechnung Milners

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

Visual Basic Basisbefehle Hinweis: Der Text in eckigen Klammern [ ] ist variabel, z.b. [var] => 5.3. Eckige Klammern sind stets wegzulassen!

Visual Basic Basisbefehle Hinweis: Der Text in eckigen Klammern [ ] ist variabel, z.b. [var] => 5.3. Eckige Klammern sind stets wegzulassen! Visual Basic Basisbefehle Hinweis: Der Text in eckigen Klammern [ ] ist variabel, z.b. [var] => 5.3. Eckige Klammern sind stets wegzulassen! Grundstrukturen: Sub [name]([übergabe]) End Sub [Übergabe] ist

Mehr

ROGER GILLIAR / MCS GMBH HASKELL FÜR JAVA PROGRAMMIERER

ROGER GILLIAR / MCS GMBH HASKELL FÜR JAVA PROGRAMMIERER ROGER GILLIAR / MCS GMBH HASKELL FÜR JAVA PROGRAMMIERER interface ImportantService { Double getmoney(); } ... sollte stets ein so genannter Kontrakt definiert werden, über den die Bedeutung der verschiedenen

Mehr

zu große Programme (Bildschirmseite!) zerlegen in (weitgehend) unabhängige Einheiten: Unterprogramme

zu große Programme (Bildschirmseite!) zerlegen in (weitgehend) unabhängige Einheiten: Unterprogramme Bisher Datentypen: einfach Zahlen, Wahrheitswerte, Zeichenketten zusammengesetzt Arrays (Felder) zur Verwaltung mehrerer zusammengehörender Daten desselben Datentypes eindimensional, mehrdimensional, Array-Grenzen

Mehr

Escher funktionale und logische Programmierung

Escher funktionale und logische Programmierung Escher funktionale und logische Programmierung Seminar Programming Languages From Hell Lars Hupel 2010-06-07 Dieses Werk ist lizenziert unter den Bedingungen der Creative Commons Namensnennung 3.0 Deutschland.

Mehr

DataTables LDAP Service usage Guide

DataTables LDAP Service usage Guide DataTables LDAP Service usage Guide DTLDAP Usage Guide thomasktn@me.com / www.ktn.ch Benutzung des DTLDAP Service DataTables Der Service stellt einen JSON Feed für DataTables (http://www.datatables.net)

Mehr

Einstieg in die Programmierung mit Visual Basic.NET

Einstieg in die Programmierung mit Visual Basic.NET Einstieg in die Programmierung mit Visual Basic.NET Agenda - Methoden mit Argumenten - Überladen von Methoden - Eigenschaftenprozeduren - Eigenschaftenprozeduren automatisch generieren - Konstruktoren

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

zu große Programme (Bildschirmseite!) zerlegen in (weitgehend) unabhängige Einheiten: Unterprogramme

zu große Programme (Bildschirmseite!) zerlegen in (weitgehend) unabhängige Einheiten: Unterprogramme Bisher Datentypen: einfach Zahlen, Wahrheitswerte, Zeichenketten zusammengesetzt Arrays (Felder) zur Verwaltung mehrerer zusammengehörender Daten desselben Datentypes eindimensional, mehrdimensional, Array-Grenzen

Mehr

Scala kann auch faul sein

Scala kann auch faul sein Scala kann auch faul sein Kapitel 19 des Buches 1 Faulheit Faulheit ( lazy evaluation ) ist auch in C oder Java nicht unbekannt int x=0; if(x!=0 && 10/x>3){ System.out.println("In if"); } Nutzen der Faulheit?

Mehr

Lösungsvorschlag Serie 2 Rekursion

Lösungsvorschlag Serie 2 Rekursion (/) Lösungsvorschlag Serie Rekursion. Algorithmen-Paradigmen Es gibt verschiedene Algorithmen-Paradigmen, also grundsätzliche Arten, wie man einen Algorithmus formulieren kann. Im funktionalen Paradigma

Mehr

Organisatorisches. drei Gruppen Gruppe 1: 10:10-11:40, Gruppe 2: 11:45-13:15 Gruppe 3: 13:20-14:50

Organisatorisches. drei Gruppen Gruppe 1: 10:10-11:40, Gruppe 2: 11:45-13:15 Gruppe 3: 13:20-14:50 Organisatorisches Vorlesung Donnerstag 8:35 bis 10:05 Übung drei Gruppen Gruppe 1: 10:10-11:40, Gruppe 2: 11:45-13:15 Gruppe 3: 13:20-14:50 Tutorium (Mehr oder weniger) abwechselnd Mo und Mi 10-11:30 Termine

Mehr

Funktionale Programmierung mit Haskell

Funktionale Programmierung mit Haskell Funktionale Programmierung mit Haskell Prof. Dr. Hans J. Schneider Lehrstuhl für Programmiersprachen und Programmiermethodik Friedrich-Alexander-Universität Erlangen-Nürnberg Sommersemester 2012 I. Die

Mehr

Wie funktioniert das Sortieren einer Reihe von Zufallszahlen mit Quicksort?

Wie funktioniert das Sortieren einer Reihe von Zufallszahlen mit Quicksort? Wie funktioniert das Sortieren einer Reihe von Zufallszahlen mit Quicksort? Seite 1 Sehen wir uns zunächst einmal die grundsätzliche Vorgehensweise des Programmes an, ohne auf Einzelheiten oder Fachtermini

Mehr

Institut für Programmierung und Reaktive Systeme 19. August Programmier-Labor. 1. Übungsblatt

Institut für Programmierung und Reaktive Systeme 19. August Programmier-Labor. 1. Übungsblatt echnische Universität Braunschweig Dr. Werner Struckmann Institut für Programmierung und Reaktive Systeme 19. August 2014 Aufgabe 1: Programmier-Labor 1. Übungsblatt a) Welche primitiven Datentypen kennt

Mehr

Tutorium - Haskell in der Schule. Ralf Dorn - Dennis Buchmann - Felix Last - Carl Ambroselli

Tutorium - Haskell in der Schule. Ralf Dorn - Dennis Buchmann - Felix Last - Carl Ambroselli Tutorium - Haskell in der Schule Wer sind wir? Otto-Nagel-Gymnasium in Berlin-Biesdorf Hochbegabtenförderung und MacBook-Schule Leistungskurse seit 2005 Einführung Was ist funktionale Programmierung? Einführung

Mehr

Entwurfsmuster und Frameworks Singleton

Entwurfsmuster und Frameworks Singleton Entwurfsmuster und Frameworks Singleton Oliver Haase Oliver Haase Emfra Singleton 1/20 Beschreibung I Klassifikation: objektbasiertes Erzeugungsmuster Zweck: sicherstellen, dass eine Klasse nur genau einmal

Mehr

Vorlesung Unix-Praktikum

Vorlesung Unix-Praktikum 1/2 Vorlesung 6. - und Rechnerbetriebsgruppe Technische Fakultät Universität Bielefeld 23. November 2015 2/2 Willkommen zur sechsten Vorlesung Was gab es beim letzten Mal? Dateiverwaltung Aliase echo und

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

Präsentation Interfaces

Präsentation Interfaces Einführung in Java Präsentation Interfaces Nozar Delassaei Marvi Inhalt 1. Erinnerung Klasse Objekte Beispiel Klasse Abstrakte Klasse Beispiel Abstrakte Klasse Mehrfachvererbung-1 Mehrfachvererbung-2 2.

Mehr

Programmieren in C++ Überladen von Methoden und Operatoren

Programmieren in C++ Überladen von Methoden und Operatoren Programmieren in C++ Überladen von Methoden und Operatoren Inhalt Überladen von Methoden Überladen von Operatoren Implizite und explizite Konvertierungsoperatoren 7-2 Überladen von Methoden Signatur einer

Mehr

Installation und Benutzung AD.NAV.ZipTools

Installation und Benutzung AD.NAV.ZipTools Installation und Benutzung AD.NAV.ZipTools Version 1.0.0.0 ALTENBRAND Datentechnik GmbH Am Gelicht 5 35279 Neustadt (Hessen) Tel: 06692/202 290 Fax: 06692/204 741 email: support@altenbrand.de Die Komponente

Mehr

Überblick. 5. Objekt und Klasse, Elementfunktionen

Überblick. 5. Objekt und Klasse, Elementfunktionen Überblick 1. Einführung C++ / Entwicklung/ Sprachfamilie 2. Nicht objektorientierte Erweiterungen von C 2.1 Das Ein-/Ausgabekonzept von C++ 2.2 Referenzen in C++ 2.3 Heap-Allokatoren in C++ 3. Grundlagen

Mehr

Einführung in die Programmierung Wintersemester 2011/12

Einführung in die Programmierung Wintersemester 2011/12 Einführung in die Programmierung Wintersemester 2011/12 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund : Kontrollstrukturen Inhalt Wiederholungen - while

Mehr

Algorithmen und Datenstrukturen 1. EINLEITUNG. Algorithmen und Datenstrukturen - Ma5hias Thimm 1

Algorithmen und Datenstrukturen 1. EINLEITUNG. Algorithmen und Datenstrukturen - Ma5hias Thimm 1 Algorithmen und Datenstrukturen 1. EINLEITUNG Algorithmen und Datenstrukturen - Ma5hias Thimm (thimm@uni-koblenz.de) 1 Allgemeines Einleitung Zu den Begriffen: Algorithmen und Datenstrukturen systematische

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 47 Einstieg in die Informatik mit Java Anweisungen Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 47 1 Ausdrucksanweisung 2 Einfache Ausgabeanweisung 3 Einfache Eingabeanweisung,

Mehr

Tutoraufgabe 1 (Datenstrukturen in Haskell):

Tutoraufgabe 1 (Datenstrukturen in Haskell): Prof. aa Dr. J. Giesl Programmierung WS12/13 M. Brockschmidt, F. Emmes, C. Otto, T. Ströder Allgemeine Die Hausaufgaben sollen in Gruppen von je 2 Studierenden aus der gleichen Kleingruppenübung (Tutorium)

Mehr

Grundlagen der Informatik

Grundlagen der Informatik Grundlagen der Informatik Polymorphie, Abstrakte Klassen, Mehrfachvererbung Prof. Dr.-Ing. Thomas Wiedemann Prof. Dr. rer.nat. Ralph Großmann Fachgebiet Informatik / Mathematik Überblick zum Inhalt Klassen-3

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 22 Einstieg in die Informatik mit Java Generics Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 22 1 Überblick Generics 2 Generische Klassen 3 Generische Methoden 4

Mehr

Kontextfreie Grammatiken

Kontextfreie Grammatiken Kontextfreie Grammatiken Bisher haben wir verschiedene Automatenmodelle kennengelernt. Diesen Automaten können Wörter vorgelegt werden, die von den Automaten gelesen und dann akzeptiert oder abgelehnt

Mehr

Algorithmen und ihre Programmierung

Algorithmen und ihre Programmierung Veranstaltung Pr.-Nr.: 101023 Algorithmen und ihre Programmierung Veronika Waue WS 07/08 Einführung Definition: Algorithmus Ein Algorithmus ist eine genau definierte Folge von Anweisungen zur Lösung eines

Mehr

Tag 8. Beispiel: Tabellen formatieren

Tag 8. Beispiel: Tabellen formatieren Tag 8 Beispiel: Tabellen formatieren Am heutigen Tag geht es nicht in erster Linie darum, neue Konzepte einzuführen, sondern wir wollen sehen, was wir mit dem bereits Erlernten schon erreichen können.

Mehr

Einführung Servlets. JEE Vorlesung Teil 2. Ralf Gitzel

Einführung Servlets. JEE Vorlesung Teil 2. Ralf Gitzel Einführung Servlets JEE Vorlesung Teil 2 Ralf Gitzel ralf_gitzel@hotmail.de 1 Übersicht Wiederholung Hello World Blick in die Details Servlet Programmierung Potentielle Fehler Lernziele Gruppenübung 2

Mehr

13. Funktionale Konzepte in Java

13. Funktionale Konzepte in Java Funktionale vs. Imperative Programmierung 13. Funktionale Konzepte in Java Funktionale Programmierung, Lambda Ausdrücke, Datenströme, Pipelines Imperative Konzepte Ausführen von Anweisungen Zustand (z.b.

Mehr

Zeichendarstellung. Zeichen sind Zahlen (in C) Zeichen und switch

Zeichendarstellung. Zeichen sind Zahlen (in C) Zeichen und switch darstellung Arbeiten mit darstellung werden im Computer durch (kleine) Zahlen dargestellt in C können im Datentyp char gespeichert werden, dieser umfasst ein Byte und gilt als Ganzzahltyp darstellung Arbeiten

Mehr

Informatik I. Informatik I Iteration vs. Rekursion. Iteration vs. Rekursion Iteration vs. Rekursion. 20. Iteration vs.

Informatik I. Informatik I Iteration vs. Rekursion. Iteration vs. Rekursion Iteration vs. Rekursion. 20. Iteration vs. Informatik I 1. Februar 2011 20. Informatik I 20. Jan-Georg Smaus 20.1 Albert-Ludwigs-Universität Freiburg 1. Februar 2011 Jan-Georg Smaus (Universität Freiburg) Informatik I 1. Februar 2011 1 / 31 Jan-Georg

Mehr

Grundlagen der Programmierung in C Funktionen

Grundlagen der Programmierung in C Funktionen Der erste Mechanismus für Code-Reuse! Grundlagen der Programmierung in C Funktionen Wintersemester 2005/2006 G. Zachmann Clausthal University, Germany zach@in.tu-clausthal.de Ältester Mechanismus für Code-Reuse:

Mehr

Praktikum Funktionale Programmierung Teil 1: Lexen und Parsen

Praktikum Funktionale Programmierung Teil 1: Lexen und Parsen Praktikum Funktionale Programmierung Teil 1: Lexen und Parsen Professur für Künstliche Intelligenz und Softwaretechnologie Sommersemester 2009 Überblick Teil 1: Lexen und Parsen Die Sprache LFP +C Professur

Mehr

Grundlagen der Informatik Vorlesungsskript

Grundlagen der Informatik Vorlesungsskript Grundlagen der Informatik Vorlesungsskript Prof. Dr. T. Gervens, Prof. Dr.-Ing. B. Lang, Prof. Dr. F.M. Thiesing, Prof. Dr.-Ing. C. Westerkamp 16 AUTOMATISCHES ÜBERSETZEN VON PROGRAMMEN MIT MAKE... 2 16.1

Mehr

Speicherklassen (1) Lokale Variablen

Speicherklassen (1) Lokale Variablen Speicherklassen (1) Lokale Variablen Lokale Variablen beschränken sich auf die Funktionen, in denen sie definiert werden Sind in der Funktion gekapselt können also nur in der Funktion verändert werden

Mehr

Der Aufruf von DM_in_Euro 1.40 sollte die Ausgabe 1.40 DM = 0.51129 Euro ergeben.

Der Aufruf von DM_in_Euro 1.40 sollte die Ausgabe 1.40 DM = 0.51129 Euro ergeben. Aufgabe 1.30 : Schreibe ein Programm DM_in_Euro.java zur Umrechnung eines DM-Betrags in Euro unter Verwendung einer Konstanten für den Umrechnungsfaktor. Das Programm soll den DM-Betrag als Parameter verarbeiten.

Mehr

Lösungsvorschläge Blatt 4

Lösungsvorschläge Blatt 4 Theoretische Informatik Departement Informatik Prof. Dr. Juraj Hromkovič http://www.ita.inf.ethz.ch/theoinf16 Lösungsvorschläge Blatt 4 Zürich, 21. Oktober 2016 Lösung zu Aufgabe 10 (a) Wir zeigen mit

Mehr

Großübung zu Einführung in die Programmierung

Großübung zu Einführung in die Programmierung Großübung zu Einführung in die Programmierung Daniel Bimschas, M.Sc. Institut für Telematik, Universität zu Lübeck https://www.itm.uni-luebeck.de/people/bimschas Inhalt 1. Besprechung Übung 4 Iteration

Mehr

Java: Eine kurze Einführung an Beispielen

Java: Eine kurze Einführung an Beispielen Java: Eine kurze Einführung an Beispielen Quellcode, javac und die JVM Der Quellcode eines einfachen Java-Programms besteht aus einer Datei mit dem Suffix.java. In einer solchen Datei wird eine Klasse

Mehr

C.3 Funktionen und Prozeduren

C.3 Funktionen und Prozeduren C3 - Funktionen und Prozeduren Funktionsdeklarationen in Pascal auch in Pascal kann man selbstdefinierte Funktionen einführen: Funktionen und Prozeduren THEN sign:= 0 Funktion zur Bestimmung des Vorzeichens

Mehr

Algorithmen und Datenstrukturen 1 Kapitel 3

Algorithmen und Datenstrukturen 1 Kapitel 3 Algorithmen und Datenstrukturen 1 Kapitel 3 Technische Fakultät robert@techfak.uni-bielefeld.de Vorlesung, U. Bielefeld, Winter 2005/2006 3.6 Dynamische Programmierung Die rekursive Problemzerlegung kann

Mehr

Interpreter - Gliederung

Interpreter - Gliederung Institut für Informatik Ludwig-Maximilian Universität Interpreter - Gliederung Programmiersprache Syntax Konkrete Syntax Abstrakter Syntax Baum (Abstrakte Syntax) Parser Syntaktische Struktur einer Sprache

Mehr

Einführung in die Programmierung mit Java

Einführung in die Programmierung mit Java Einführung in die Programmierung mit Java Teil 15: Wiederholung Martin Hofmann Steffen Jost LFE Theoretische Informatik, Institut für Informatik, Ludwig-Maximilians Universität, München 3. Februar 2016

Mehr

1 RPC-Protokoll-Definitionssprache (Protocol Definition Language )

1 RPC-Protokoll-Definitionssprache (Protocol Definition Language ) 1 RPC-Protokoll-Definitionssprache (Protocol Definition Language ) RPCL ist die Protokoll-Definitionssprache, die vom ONC-RPCGEN verwendet wird. Diese Sprache wird in dem Quellprogramm application.x verwendet.

Mehr

Datenstrukturen & Algorithmen Lösungen zu Blatt 5 FS 14

Datenstrukturen & Algorithmen Lösungen zu Blatt 5 FS 14 Eidgenössische Technische Hochschule Zürich Ecole polytechnique fédérale de Zurich Politecnico federale di Zurigo Federal Institute of Technology at Zurich Institut für Theoretische Informatik 26. März

Mehr

Objektorientierte Programmierung

Objektorientierte Programmierung Unterlagen zur Veranstaltung Einführung in die Objektorientierte Programmierung Mit Processing Alexis Engelke Sommer 2012 Alexis Engelke Inhalt Level 1: Geometrie Hintergrundfarben Punkte, Linien und deren

Mehr

Praktische Informatik 3: Einführung in die Funktionale Programmierung Vorlesung vom 10.11.2010: Rekursive Datentypen

Praktische Informatik 3: Einführung in die Funktionale Programmierung Vorlesung vom 10.11.2010: Rekursive Datentypen Rev. 1152 1 [23] Praktische Informatik 3: Einführung in die Funktionale Programmierung Vorlesung vom 10.11.2010: Rekursive Datentypen Christoph Lüth & Dennis Walter Universität Bremen Wintersemester 2010/11

Mehr

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12 1. Kapitel 11. Listen. Listen

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12 1. Kapitel 11. Listen. Listen Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12 1 Kapitel 11 Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12 2 Ziele Implementierungen für

Mehr