Lösungen zum Übungsblatt 3: Softwareentwicklung I (WS 2006/07)
|
|
- Manfred Kohl
- vor 6 Jahren
- Abrufe
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 Lösungen zum Übungsblatt 3: Softwareentwicklung I (WS 2006/07) Aufgabe 1 Operatorpräzedenzen a) fun f (x,y) = ((x + (y * y)) >= x) Der Bezeichner * hat höhere Präzedenz als + und der Bezeichner + hat höhere Präzedenz als >=. b) fun m (a, b) = ((b + (a div b)) = (b mod a)) Die Bezeichner div und mod haben höhere Präzedenzen als + und = und der Bezeichner + hat höhere Präzedenz als =. c) f : int * int bool. Da y und x als Argumente der Operatoren * und + auftretten, und diese vom Typ m : int * int int sind, müssen sowohl x und y als auch die Ausdrücke y * y und (x + (y * y)) den Typ int besitzen. Da die Ausdrücke (x + (y * y)) und x den gleichen Typ besitzen und als Argumente des Infix-Operators >= auftreten, muss der Ausdruck (x + (y * y)) >= x vom Typ bool sein. m : int * int bool. Da a und b als Argumente der Operatoren div und mod auftreten und diese vom Typ int * int int sind, müssen sowohl a und b als auch die Ausdrücke (b + (a div b)) und (b mod a) vom Typ int sein. Da das Resultat der Addition zweier Zahlen vom Typ int vom Typ int ist, muss ebenfalls der Ausdruck (b + (a div b)) den Typ int besitzen. Da die Ausdrücke (b + (a div b)) und (b mod a) den gleichen Typ besitzen und als Argumente des Infix-Operators = auftreten, muss der Ausdruck (b + (a div b)) = (b mod a) vom Typ bool sein. Aufgabe 2 Syntax-, Typisierungs- und Laufzeitfehler a) Liefert das Ergebnis : real. b) Liefert einen Typisierungsfehler, da der Ausdruck auf der linken Seite des Gleichheitszeichens vom Typ int ist, der Ausdruck auf der rechten Seite aber den Typ real besitzt. c) Liefert das Ergebnis "reit nie tot ein tier". d) Liefert das Ergebnis true. e) Liefert das Ergebnis false. f) Liefert das Ergebnis true. g) Liefert das Ergebnis true. h) Liefert das Ergebnis false. i) Liefert einen Typisierungsfehler. In dem Ausdruck (fn x => (x + 1))[] wird versucht eine Funktion vom Typ int int auf eine leere Liste anzuwenden. j) Liefert einen Typisierungfehler, da die Ausdrücke 2 und false nicht den gleichen Typ haben. k) Liefert einen Typisierungsfehler, da die Vergleichsoperation < nur für zwei Argumente des gleichen Typs definiert ist. l) Liefert einen Typisierungsfehler, da das erste Argument im if-then-else-konstrukt vom Typ bool sein muß. m) Liefert das Ergebnis "bibabu". n) Liefert das Ergebnis false.
2 o) Liefert einen Typisierungsfehler, da der Operator not linksassoziativ ist. Der Ausdruck (not not true) wird von links nach rechts gelesen, als wäre er so geklammert: ((not not) true). Hier, in den innersten Klammern, wird versucht die Funktion not auf not anzuwenden, obwohl not eine Funktion ist, die einen Wert vom Typ bool als Argument erwartet. Dagegen liefert der geklammerte Ausdruck: (10 mod 2, true) = (5-(4+1), if true then (not (not true)) else false) das Ergebnis true. p) Liefert einen Deklarationsfehler, da die Variable x nicht deklariert wurde. q) Liefert einen Syntaxfehler, da das Zeichen? kein Bestandteil von Bezeichnern sein darf. r) Liefert das Ergebnis s) Liefert einen Typisierungsfehler, da die Gleichheitsoperation = für den Typ real nicht definiert ist. Hinweis: Dagegen liefert der Ausdruck Real.==(1.0e~3, 0.001) das Ergebnis true. t) Liefert das Ergebnis Aufgabe 3 Die Datenstruktur String 13 fun dual2decimal (str:string): int = 14 if ((size(str)) = 0) 15 then 0 16 else (if ((substring(str,(size(str))-1,1))="1") 17 then (2*(dual2decimal(substring(str,0,(size(str)) -1)))) else (2*(dual2decimal(substring(str,0,(size(str)) -1)))) 19 ); Aufgabe 4 Rekursion a) Die Funktion fakultaet 29 fun fakultaet n = 30 if n=0 then 1 31 else fakultaet (n-1) * n b) Die Funktion ngeraden 41 fun ngeraden n = 42 if n=0 then [] 43 else [(n-1)*2] c) Die Funktion power 52 fun power (j:int, k:int) : int = 53 if k = 0 then 1 54 else j * power (j, k-1) d) Die Funktion findapprox 63 fun findappr_helper (d:real,n:real,l:real list,i:int) = 64 if i=((length l)-1) then (~1,~1) 65 else if abs(list.nth(l,i)-n) < d 66 then (0,i) 67 else findappr_helper(d,n,l,i+1) fun findapprox (d:real, n:real, l:real list) = 70 if null(l) then (~1,~1) 71 else findappr_helper(d,n,l,0) e) Die Funktion log2: 2
3 80 fun odd n = if n=0 then false 81 else (if n=1 then true 82 else even(n-1)) 83 and even n = if n=0 then true 84 else (if n=1 then false 85 else odd(n-1)) fun gerade x = 88 if (x>0.0) 89 then ungerade(x-1.0) - (1.0/x) 90 else and ungerade x = 92 gerade (x-1.0) + (1.0/x) fun log2 n = 95 if even n 96 then gerade (Real.fromInt n) 97 else ungerade (Real.fromInt n) Aufgabe 5 Binärer Zähler 116 fun singletick (i:bool,l:bool list): bool list = 117 if (null(l)) 118 then (if (i=true) 119 then [true] 120 else [] 121 ) 122 else (if (i=true) 123 then (if (hd(l)=false) 124 then (true::(tl(l))) 125 else (false::(singletick(true,tl(l))))) 126 else (if (hd(l)=false) 127 then (false::(tl(l))) 128 else (true::(tl(l)))) 129 ); fun tick(l:bool list): bool list = (rev(singletick(true,rev l))); Aufgabe 6 Terminierung a) Die Funktion find1: 140 fun find_helper1(n,e,l) = 141 if e=list.nth(l,n) 142 then n 143 else find_helper1(n+1,e,l) fun find1 (e,l) = find_helper1(0,e,l) find1 (3,[]); uncaught exception subscript out of bounds 150 raised at: boot/list.sml: find1 (3,[2]); uncaught exception subscript out of bounds 154 raised at: boot/list.sml: find1 (3,[2,4,5,6]); uncaught exception subscript out of bounds 158 raised at: boot/list.sml: Betrachten wir als Beispiel einen Aufruf auf die Funktion find1 mit dem Parameterwert (3, [2, 4, 5, 6]), find1(3, [2, 4, 5, 6]). Die Auswertung des Ausdrucks find1(3, [2, 4, 5, 6]) verläuft dann folgendermaßen: find1(3, [2, 4, 5, 6]) = find_helper1(0, 3, [2, 4, 5, 6]) = if 3 = List.nth([2, 4, 5, 6], 0) then 0 then find_helper1(1, 3, [2, 4, 5, 6]) = find_helper1(1, 3, [2, 4, 5, 6]) = if 3 = List.nth([2, 4, 5, 6], 1) then 1 then find_helper1(2, 3, [2, 4, 5, 6]) = find_helper1(2, 3, [2, 4, 5, 6]) = if 3 = List.nth([2, 4, 5, 6], 2) then 2 then find_helper1(3, 3, [2, 4, 5, 6]) = find_helper1(3, 3, [2, 4, 5, 6]) = if 3 = List.nth([2, 4, 5, 6], 3) then 3 then find_helper1(4, 3, [2, 4, 5, 6]) = find_helper1(4, 3, [2, 4, 5, 6]) = if 3 = List.nth([2, 4, 5, 6], 4) then 4 then find_helper1(5, 3, [2, 4, 5, 6]) = find_helper1(5, 3, [2, 4, 5, 6]) = if 3 = List.nth([2, 4, 5, 6], 5) then 5 then find_helper1(6, 3, [2, 4, 5, 6]) = find_helper1(6, 3, [2, 4, 5, 6]) = if 3 = List.nth([2, 4, 5, 6], 6) then 6 then find_helper1(7, 3, [2, 4, 5, 6]) = find_helper1(7, 3, [2, 4, 5, 6]) =... 3
4 Wie man an diesem Beispiel sieht, gibt es Eingaben (e, l) gibt, für welche die Auswertung des Ausdrucks find1(e, l) nicht terminieren kann: Die Auswertung von find1(e, l) startet mit der Auswertung des Ausdrucks find_helper1(0, e, l) und für jeden Auswertungsschritt i gilt, dass Auswertung von find_helper1(i, e, l) mit dem rekursiven Aufruf von find_helper1(i+1, e, l) endet. In der Praxis sieht dies anders aus. Der Aufruf von find1(e, l) terminiert in ML immer. Allerdings wird die Berechnung des Wertes find1(e, l) für bestimmte Eingaben vorzeitig abgebrochen und statt des Ergebnises wird die Ausnahme subscript out of bounds geliefert. Es gibt natürlich auch Ausdrücke, deren Auswertung in ML nicht terminiert. Z.B. in dem unten dargestellten Beispiel terminiert die Auswertung des Bezeichners semaphor nicht. fun semaphoroeffne s = (print "semaphoroeffne\n" ; if s then semaphorschliesse (not s) else false) and semaphorschliesse s = (print "semaphorschliesse\n" ; if s then true else semaphoroeffne (not s) ) val semaphor = semaphoroeffne true; Ein anderer Grund für die Terminierung der Auswertung eines Ausdrucks, der theoretisch nicht terminierend ist, ist die Beschränktheit von Hardwareressourcen, z.b. die Größe des verfügbaren Arbeitsspeichers und der Festplatte. Zum Beispiel verbrauchte die Auswertung des Bezeichners testtliste in dem unten aufgeführten Beispiel schon nach wenigen Minuten 75% des Arbeitsspeichers auf einem standard Desktop-Rechner. Danach hat sich die Auswertung von testliste dramatisch verlangsamt, da die Liste nicht mehr in den frei verfügbaren Platz im Arbeitsspeicher passte und musste immer wieder das Betriebssystem zwischen der Festplatte und Arbeitsspeicher hin und her verschoben werden (sog. swapping). Da der frei verfügbarer Platz auf der Festplatte auch beschränkt ist, ist klar, dass irgendwann die Auswertung von testliste vom Betriebssystem unterbrochen werden müsste. fun f x = x; val meineliste = List.tabulate( ,f); val fertig = false fun erzeugeliste (l1,l2) = (print (Int.toString(length(l2))^"\n"); if fertig then l2 else erzeugeliste(l1,(l1@l2))) val testliste = erzeugelist(meineliste,[]); Im Folgenden werden wir formal die Menge A der Eingaben (e, l) mit der Eigenschaft, dass die Auswertung von find1(e, l) theoretisch nicht terminiert, definieren. Die Auswertung von find1(e, l) terminiert nicht, wenn die Eingabe (e, l) eine der folgenden Bedingungen erfüllt. 1. l = [], d.h. e ist beliebig und l ist eine leere Liste. 2. l [] i. 0 i < length(l) e = List.nth(l, i), d.h. e ist beliebig und l ist eine nicht leere Liste und das Element e kommt in der Liste l nicht vor. Da jede leere Liste l auch die Bedingung i. 0 i < length(l) e = List.nth(l, i) erfüllt, reicht es, wenn wir A wie folgt formulieren A = {(e, l) e ist eine ganze Zahl und l ist eine Liste von ganzen Zahlen und i. 0 i < length(l) e = List.nth(l, i) }. b) Die Funktion find2: 171 fun find_helper2(n,e,l) = 172 if (e/list.nth(l,n))< then n 174 else find_helper2(n+1,e,l) fun find2 (e,l:real list) = find_helper2(0,e,l) find2(3.0,[]); uncaught exception subscript out of bounds 181 raised at: boot/list.sml: find2(3.0,[3.4]); 183 val it = 0 : int find2(3.0,[2.0,3.4]); 185 val it = 1 : int find2(3.0,[0.0,2.0,3.4]); 187 val it = 2 : int find2(3.0,[0.0,2.0]); uncaught exception subscript out of bounds 191 raised at: boot/list.sml:
5 Es gilt hier die gleiche Überlegung wie in der vorherigen Teilaufgabe. Der Aufruf von find2(e, l) terminiert in ML immer. Allerdings wird die Berechnung des Wertes find2(e, l) für bestimmte Eingaben vorzeitig abgebrochen und statt des Ergebnises wird die Ausnahme subscript out of bounds geliefert. Dies passiert, wenn die Eingabe (e, l) eine der folgenden Bedingungen erfüllt. 1. l = [], d.h. e ist beliebig und l ist eine leere Liste. 2. l [] i e. 0 i < length(l) e = List.nth(l, i) e < e, d.h. e ist beliebig l ist nicht eine leere Liste, in der kein Element größer als e vorkommt. Interesanterweise, stellen hier Listen-Elemente mit dem Wert gleich 0.0, kein Problem dar, da das Ergebnis der Auswertung des Ausdrucks e/0.0 in ML gleich inf für 0 e beziehungsweise inf für 0 > e ist. Es wird dabei keine Ausnahme geliefert. Die Menge A der Eingaben (e, l) mit der Eigenschaft, dass die Auswertung von find2(e, l) theoretisch nicht terminiert, ist wie folgt definiert A = {(e, l) e ist eine reelle Zahl und l ist eine Liste reeller Zahlen und i e. 0 i < length(l) e = List.nth(l, i) e < e }. 5
Übungsblatt 6: 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 Übungsblatt 6:
MehrVerarbeitung 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 =
MehrKlausur Programmierung WS 2002/03
Klausur Programmierung WS 2002/03 Prof. Dr. Gert Smolka, Dipl. Inf. Thorsten Brunklaus 14. Dezember 2002 Leo Schlau 45 Vor- und Nachname Sitz-Nr. 4711 007 Matrikelnummer Code Bitte öffnen Sie das Klausurheft
MehrBeschreibung 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" ++
MehrProgrammierung 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
MehrFunktionale Programmierung ALP I. Funktionen höherer Ordnung SS Prof. Dr. Margarita Esponda. Prof. Dr. Margarita Esponda
ALP I SS 2011 Funktionstypen Funktionen haben einen Datentyp, der folgende allgemeine Form hat: functionname :: T 1 -> T 2, wobei T 1, T 2 wiederum beliebige Datentypen sind Beispiel: T 1 T 2 Der Datentyp
MehrProgrammierung und Modellierung
Programmierung und Modellierung Funktionen höherer Ordnung Martin Wirsing in Zusammenarbeit mit Moritz Hammer SS 2009 2 Inhalt Kap. 6 Funktionen höherer Ordnung 1. Funktionen als Parameter und Wert von
MehrDie Definition eines Typen kann rekursiv sein, d.h. Typ-Konstruktoren dürfen Elemente des zu definierenden Typ erhalten.
4.5.5 Rekursive Typen Die Definition eines Typen kann rekursiv sein, d.h. Typ-Konstruktoren dürfen Elemente des zu definierenden Typ erhalten. datatype IntList = Nil Cons o f ( i n t IntList ) ; Damit
MehrLö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
MehrProbeklausur 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
MehrLö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
MehrInformatik I Übung, Woche 40
Giuseppe Accaputo 1. Oktober, 2015 Plan für heute 1. Nachbesprechung Übung 2 2. Vorbesprechung Übung 3 3. Zusammenfassung der für Übung 3 wichtigen Vorlesungsslides Informatik 1 (D-BAUG) Giuseppe Accaputo
MehrVorsemesterkurs 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
MehrInhalt Kapitel 2: Rekursion
Inhalt Kapitel 2: Rekursion 1 Beispiele und Definition 2 Partialität und Terminierung 3 Formen der Rekursion Endständige Rekursion 4 Einbettung 29 Beispiele und Definition Rekursion 30 Man kann eine Funktion
MehrTECHNISCHE UNIVERSITÄT MÜNCHEN FAKULTÄT FÜR INFORMATIK
TECHNISCHE UNIVERSITÄT MÜNCHEN FAKULTÄT FÜR INFORMATIK WS 11/12 Einführung in die Informatik II Übungsblatt 4 Univ.-Prof. Dr. Andrey Rybalchenko, M.Sc. Ruslán Ledesma Garza 21.11.2011 Dieses Blatt behandelt
MehrSoftware 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
MehrGrundlegende Datentypen
Funktionale Programmierung Grundlegende Datentypen Fakultät für Informatik und Mathematik Hochschule München Letzte Änderung: 14.11.2017 15:37 Inhaltsverzeichnis Typen........................................
MehrFunktionale 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........................................
MehrBerechnungsschemata: 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
MehrLösungshinweise/-vorschläge zum Übungsblatt 4: 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 4: Grundlagen der Programmierung
MehrSoftware 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
MehrProgrammierung 1 (Wintersemester 2012/13) Lösungsblatt 4 (Kapitel 4)
Fachrichtung 6.2 Informatik Universität des Saarlandes Tutorenteam der Vorlesung Programmierung 1 Programmierung 1 (Wintersemester 2012/13) Lösungsblatt 4 (Kapitel 4) Hinweis: Dieses Übungsblatt enthält
Mehr3 Einführung in ML. 3.1 Überblick. 3.2 Elementare Datentypen und Funktionen Bezeichner Elementare Datentypen
3 Einführung in ML 3.1 Überblick ML (Abk. für Meta Language) ist eine funktionale Programmiersprache, die Ende der 70er Jahre an der University of Edinburgh entwickelt und 1987 standardisiert wurde. Wir
MehrAufgabe 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
MehrALP I. Funktionale Programmierung
ALP I Funktionale Programmierung Zusammengesetzte Datentypen in Haskell WS 2012/2013 Zusammengesetzte Datentypen Tupel List String Zusammengesetzte Datentypen Tupel-Datentyp Ein Tupel ist eine Ansammlung
MehrAbstrakte Syntax von Prolog (1)
3. Prolog Syntax 3-1 Abstrakte Syntax von Prolog (1) Abstrakte und konkrete Syntax: Abstrakte Syntax: Nur Datenstrukturen, die der Parser anlegt (z.b. Operatorbaum). Konkrete Syntax: Zeichenketten, die
MehrLösungshinweise/-vorschläge zum Übungsblatt 3: Software-Entwicklung 1 (WS 2017/18)
Dr. Annette Bieniusa Mathias Weber, M. Sc. Peter Zeller, M. Sc. TU Kaiserslautern Fachbereich Informatik AG Softwaretechnik Lösungshinweise/-vorschläge zum Übungsblatt 3: Software-Entwicklung 1 (WS 2017/18)
MehrVorsemesterkurs 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
MehrFunktionales Programmieren
3. Funktionales Programmieren 3.0 Kapitel 3 Funktionales Programmieren Arnd Poetzsch-Heffter TU Kaiserslautern 157 3. Funktionales Programmieren 3.0 Übersicht 3. Funktionales Programmieren Grundkonzepte
MehrSyntax der Sprache PASCAL
Syntax der Sprache PASCAL Buchstaben A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z Ziffern 0 1 2 3 4 5 6 7 8 9 Sonderzeichen und Wortsymbole +
MehrGrundlegende 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
Mehr2.5 Listen. Kurzschreibweise: [42; 0; 16] Listen werden mithilfe von [] und :: konstruiert.
2.5 Listen Listen werden mithilfe von [] und :: konstruiert. Kurzschreibweise: [42; 0; 16] # let mt = [];; val mt : a list = [] # let l1 = 1::mt;; val l1 : int list = [1] # let l = [1;2;3];; val l : int
MehrGrunddatentypen, Ausdrücke und Variablen Typkonversion, Überprüfen und Auswerten von Ausdrücken
1 Typkonversion, Überprüfen und Auswerten von Ausdrücken Dr. Philipp Wendler Zentralübung zur Vorlesung Einführung in die Informatik: Programmierung und Softwareentwicklung WS18/19 https://www.sosy-lab.org/teaching/2018-ws-infoeinf/
MehrTECHNISCHE UNIVERSITÄT MÜNCHEN FAKULTÄT FÜR INFORMATIK
TECHNISCHE UNIVERSITÄT MÜNCHEN FAKULTÄT FÜR INFORMATIK WS 11/12 Einführung in die Informatik II Übungsblatt 2 Univ.-Prof. Dr. Andrey Rybalchenko, M.Sc. Ruslán Ledesma Garza 8.11.2011 Dieses Blatt behandelt
MehrInformatik für Schüler, Foliensatz 18 Rekursion
Prof. G. Kemnitz Institut für Informatik, Technische Universität Clausthal 26. März 2009 1/10 Informatik für Schüler, Foliensatz 18 Rekursion Prof. G. Kemnitz Institut für Informatik, Technische Universität
MehrBeispiele: 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
Mehr17. Rekursion 2. Bau eines Taschenrechners, Ströme, Formale Grammatiken, Extended Backus Naur Form (EBNF), Parsen von Ausdrücken
564 17. Rekursion 2 Bau eines Taschenrechners, Ströme, Formale Grammatiken, Extended Backus Naur Form (EBNF), Parsen von Ausdrücken Motivation: Taschenrechner 565 Beispiel Eingabe: 3 + 5 Ausgabe: 8 Binäre
MehrMethoden. Gerd Bohlender. Einstieg in die Informatik mit Java, Vorlesung vom
Einstieg in die Informatik mit Java, Vorlesung vom 2.5.07 Übersicht 1 2 definition 3 Parameterübergabe, aufruf 4 Referenztypen bei 5 Überladen von 6 Hauptprogrammparameter 7 Rekursion bilden das Analogon
MehrProgrammierung 1 (Wintersemester 2015/16) Wiederholungstutorium Lösungsblatt 11 (Parser II)
Fachrichtung 6.2 Informatik Universität des Saarlandes Tutorenteam der Vorlesung Programmierung 1 Programmierung 1 (Wintersemester 2015/16) Wiederholungstutorium Lösungsblatt 11 (Parser II) Hinweis: Dieses
MehrEinführung in die Informatik I
Einführung in die Informatik I Fortgeschrittene Rekursion Prof. Dr. Nikolaus Wulff Problematische Rekursion Mittels Rekursion lassen sich Spezifikationen recht elegant und einfach implementieren. Leider
MehrInhalt Kapitel 5: Funktionen höherer Ordnung
Inhalt Kapitel 5: 1 Funktionen als Argumente 2 Funktionen als Werte einer Funktion 3 Currying 4 Grundlegende 88 Funktionen als Argumente Funktionen als Argumente: map Anwenden einer Funktion auf alle Einträge
MehrPraktische Informatik 3
Praktische Informatik 3 Christian Maeder WS 03/04 Vorlesung vom 12.1.2004: Ein/Ausgabe in funktionalen Sprachen Vorlesung vom 12.1.2004: Ein/Ausgabe in funktionalen Sprachen 3 Inhalt Wo ist das Problem?
MehrLö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
MehrInformatik I: Einführung in die Programmierung 3. Werte, Typen, Variablen und Ausdrücke
Informatik I: Einführung in die Programmierung 3. Werte,, n und Albert-Ludwigs-Universität Freiburg Peter Thiemann 30. Oktober 2018 1 30. Oktober 2018 P. Thiemann Info I 3 / 39 Bits Der Computer repräsentiert
MehrKapitel 1: Informationsverarbeitung durch Programme
LUDWIG- MAXIMILIANS- UNIVERSITY MUNICH DEPARTMENT INSTITUTE FOR INFORMATICS Skript zur Vorlesung: Einführung in die Informatik: Systeme und Anwendungen Sommersemester 2009 Kapitel 1: Informationsverarbeitung
MehrGrunddatentypen, 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
MehrHaskell, Typen, und Typberechnung. Grundlagen der Programmierung 3 A. Einige andere Programmiersprachen. Typisierung in Haskell
Haskell, Typen, und Typberechnung Grundlagen der Programmierung 3 A Typen, Typberechnung und Typcheck Prof. Dr. Manfred Schmidt-Schauß Ziele: Haskells Typisierung Typisierungs-Regeln Typ-Berechnung Milners
MehrProgrammierkurs Python I
Programmierkurs Python I Michaela Regneri 2009-11-05 (Folien basieren auf dem gemeinsamen Kurs mit Stefan Thater) Übersicht Variablen Datentypen Werte Operatoren und Ausdrücke Kontrollstrukturen: if, while
MehrSoftware Entwicklung 1. Rekursion. Beispiel: Fibonacci-Folge I. Motivation. Annette Bieniusa / Arnd Poetzsch-Heffter
Software Entwicklung 1 Annette Bieniusa / Arnd Poetzsch-Heffter AG Softech FB Informatik TU Kaiserslautern Rekursion Bieniusa/Poetzsch-Heffter Software Entwicklung 1 2/ 27 Motivation Beispiel: Fibonacci-Folge
MehrDatentypen: integer, char, string, boolean
Agenda für heute, 13. April, 2006 Der Datentyp integer Vergleichsoperatoren, Wahrheitswerte und boolesche Variablen Zusammengesetzte if-then-else-anweisungen Var i: integer; Teilbereich der ganzen Zahlen,
Mehr4. Wahrheitswerte. Wo wollen wir hin? Boolesche Werte in der Mathematik. Der Typ bool in C++
162 Wo wollen wir hin? 163 4. Wahrheitswerte Boolesche Funktionen; der Typ bool; logische und relationale Operatoren; Kurzschlussauswertung int a; std::cin >> a; if (a % 2 == 0) std::cout
MehrProgrammierung und Modellierung
Programmierung und Modellierung Benutzerdefinierte Datentypen Martin Wirsing in Zusammenarbeit mit Moritz Hammer SS 2009 2 Inhalt Kap. 7 Benutzerdefinierte Datentypen 1. Aufzählungstypen 2. Typen mit zusammengesetzten
MehrProjekt 3 Variablen und Operatoren
Projekt 3 Variablen und Operatoren Praktisch jedes Programm verarbeitet Daten. Um mit Daten programmieren zu können, muss es Möglichkeiten geben, die Daten in einem Programm zu verwalten und zu manipulieren.
MehrGrunddatentypen, Ausdrücke und Variablen Typkonversion, Überprüfen und Auswerten von Ausdrücken
1 Typkonversion, Überprüfen und Auswerten von Ausdrücken Philipp Wendler Zentralübung zur Vorlesung Einführung in die Informatik: Programmierung und Softwareentwicklung https://www.sosy-lab.org/teaching/2017-ws-infoeinf/
MehrProgrammierung WS 2002 / 03: Musterlösung zum 12. Übungsblatt
U N S A R I V E R S A V I E I T A S N I S S Programmierung WS 2002 / 03: Musterlösung zum 12. Übungsblatt Prof. Dr. Gert Smolka, Dipl.-Inform. Thorsten Brunklaus Aufgabe 12.1: Syntaxbäume (10 = 2 + 2 +
MehrGrundlegende 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
MehrInformatik I: Einführung in die Programmierung
Informatik I: Einführung in die Programmierung 5., bedingte Ausführung und Albert-Ludwigs-Universität Freiburg Bernhard Nebel 27. Oktober 2017 1 und der Typ bool Typ bool Typ bool Vergleichsoperationen
Mehr5.3 Auswertung von Ausdrücken
5.3 Auswertung von Ausdrücken Funktionen in Java bekommen Parameter/Argumente als Input, und liefern als Output den Wert eines vorbestimmten Typs. Zum Beispiel könnte man eine Funktion i n t min ( i n
MehrInformatik I Übung, Woche 38
Giuseppe Accaputo 18. September, 2014 Plan für heute 1. Wer bin ich 2. Allgemeines 3. Zusammenfassung der bisherigen Vorlesungsslides 4. Kurze Vorbesprechung zur Übung 1 Informatik 1 (D-BAUG) Giuseppe
MehrHaskell, Typen, und Typberechnung. Grundlagen der Programmierung 3 A. Überladung und Konversion in Haskell. Typisierung in Haskell
Haskell, Typen, und Typberechnung Grundlagen der Programmierung 3 A Typen, Typberechnung und Typcheck Prof. Dr Manfred Schmidt-Schauß Ziele: Haskells Typisierung Typisierungs-Regeln Typ-Berechnung Sommersemester
MehrProgrammierkurs Python I
Programmierkurs Python I Michaela Regneri & Stefan Thater Universität des Saarlandes FR 4.7 Allgemeine Linguistik (Computerlinguistik) Winter 2010/11 Übersicht Variablen Datentypen Werte Ausdrücke Operatoren
MehrDie Klasse MiniJava ist in der Datei MiniJava.java definiert:
Die Klasse MiniJava ist in der Datei MiniJava.java definiert: import javax.swing.joptionpane; import javax.swing.jframe; public class MiniJava { public static int read () { JFrame f = new JFrame (); String
MehrAbschnitt 11: Korrektheit von imperativen Programmen
Abschnitt 11: Korrektheit von imperativen Programmen 11. Korrektheit von imperativen Programmen 11.1 11.2Testen der Korrektheit in Java Peer Kröger (LMU München) in die Programmierung WS 16/17 931 / 961
Mehr15. Rekursion. Rekursive Funktionen, Korrektheit, Terminierung, Aufrufstapel, Bau eines Taschenrechners, BNF, Parsen
453 15. Rekursion Rekursive Funktionen, Korrektheit, Terminierung, Aufrufstapel, Bau eines Taschenrechners, BNF, Parsen Mathematische Rekursion 454 Viele mathematische Funktionen sind sehr natürlich rekursiv
MehrC.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
MehrLö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
MehrProgrammierung 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,
MehrKapitel 1: Informationsverarbeitung durch Programme
LUDWIG- MAXIMILIANS- UNIVERSITY MUNICH DEPARTMENT INSTITUTE FOR INFORMATICS Skript zur Vorlesung: Einführung in die Informatik: Systeme und Anwendungen Sommersemester 2018 Kapitel 1: Informationsverarbeitung
Mehr1. Probeklausur Programmierung 1 (WS 2010/2011)
1. Probeklausur Programmierung 1 (WS 2010/2011) Team der Tutoren 11. Dezember 2010 Name Sitzplatz Matrikelnummer Bitte öffnen Sie das Klausurheft erst dann, wenn Sie dazu aufgefordert werden. Sie können
MehrCrashkurs: Haskell. Mentoring FU Berlin Felix Droop
Crashkurs: Haskell Mentoring FU Berlin 7.11.2018 Felix Droop Crashkurs Haskell 1. GHCi Umgebung
MehrVorlesung Objektorientierte Programmierung Klausur
Prof. Dr. Stefan Brass 16. Februar 2007 Dipl.-Inform. Annett Thüring Institut für Informatik MLU Halle-Wittenberg Vorlesung Objektorientierte Programmierung Klausur Name: Matrikelnummer: Studiengang: Aufgabe
MehrGrundlagen der Programmierung 2. Operationale Semantik
Grundlagen der Programmierung 2 Operationale Semantik Prof. Dr. Manfred Schmidt-Schauÿ Künstliche Intelligenz und Softwaretechnologie 29. April 2009 Semantik von Programmiersprachen Semantik = Bedeutung
MehrInformatik I - Programmierung Globalübung Hugs98 Currying. Hugs98 Currying
Informatik I - Programmierung Globalübung 13.01.2003 Hugs98 Currying Thomas Weiler Fachgruppe Informatik RWTH Aachen T. Weiler, RWTH Aachen - 1 - Hugs98 Currying Bedienung Typen Fehlermeldungen Inhalt
MehrGrunddatentypen, 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-13-14/infoeinf WS13/14 Action required
MehrVorsicht 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
MehrPrüfung Informatik D-MATH/D-PHYS :00 11:00
Prüfung Informatik D-MATH/D-PHYS 4. 8. 2009 09:00 11:00 Dr. Bernd Gartner, Prof. Juraj Hromkovic Kandidat/in: Name:... Vorname:... Stud.-Nr.:... Ich bezeuge mit meiner Unterschrift, dass ich die Prufung
MehrGrunddatentypen, 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-14-15/infoeinf WS14/15 Action required
MehrGrunddatentypen, 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-16-17/infoeinf WS16/17 Action required
MehrGrundlagen der Programmierung 3 A
Grundlagen der Programmierung 3 A Typen, Typberechnung und Typcheck Prof. Dr. Manfred Schmidt-Schauß Sommersemester 2016 Haskell, Typen, und Typberechnung Ziele: Haskells Typisierung Typisierungs-Regeln
MehrLösungen zum Übungsblatt 10: Entwicklung von Softwaresystemen I (WS 2003/04)
Prof. Dr. A. Poetzsch-Heffter Dipl.-Inform. N. Rauch Dipl.-Inform. C. Stenzel Technische Universität Kaiserslautern Fachbereich Informatik AG Softwaretechnik Lösungen zum Übungsblatt 10: Entwicklung von
MehrProgrammierung WS12/13 Lösung - Übung 1 M. Brockschmidt, F. Emmes, C. Otto, T. Ströder
Prof. aa Dr. J. Giesl Programmierung WS12/13 M. Brockschmidt, F. Emmes, C. Otto, T. Ströder Tutoraufgabe 1 (Syntax und Semantik): 1. Was ist Syntax? Was ist Semantik? Erläutern Sie den Unterschied. 2.
MehrDank. Theoretische Informatik II. Teil II. Registermaschinen. Vorlesung
Dank Vorlesung Theoretische Informatik II Bernhard Beckert Institut für Informatik Diese Vorlesungsmaterialien basieren zum Teil auf den Folien zu den Vorlesungen von Katrin Erk (gehalten an der Universität
MehrÜbungsblatt 8: Software-Entwicklung 1 (WS 2008/09)
Prof. Dr. A. Poetzsch-Heffter Dipl.-Inf. J.-M. Gaillourdet Dipl.-Inform. M. Reitz Dipl.-Inform. K. Geilmann Dipl.-Inf. P. Michel M. Sc. Y. Welsch TU Kaiserslautern Fachbereich Informatik AG Softwaretechnik
MehrEinführung in die Informatik I (autip)
Einführung in die Informatik I (autip) Dr. Stefan Lewandowski Fakultät 5: Informatik, Elektrotechnik und Informationstechnik Abteilung Formale Konzepte Universität Stuttgart 24. Oktober 2007 Was Sie bis
MehrWS 2012/2013. Robert Giegerich. 21. November 2012
WS 2012/2013 Robert AG Praktische Informatik 21. November 2012 Funktionen als Bürger erster Klasse Funktionen definieren kann man in jeder Programmiersprache. Eine funktionalen Programmiersprache erlaubt
MehrEinführung in die Theoretische Informatik
Technische Universität München Fakultät für Informatik Prof. Tobias Nipkow, Ph.D. Sascha Böhme, Lars Noschinski Sommersemester 2011 Lösungsblatt 8 18. Juli 2011 Einführung in die Theoretische Informatik
MehrProgrammierung 1 (Wintersemester 2015/16) Lösungsblatt: Aufgaben für die Übungsgruppen: 8 (Kapitel 9)
Fachrichtung 6. Informatik Universität des Saarlandes Tutorenteam der Vorlesung Programmierung Programmierung (Wintersemester 5/6) Lösungsblatt: Aufgaben für die Übungsgruppen: 8 (Kapitel 9) Hinweis: Dieses
MehrJAVA - Methoden - Rekursion
Übungen Informatik I JAVA - Methoden - Rekursion http://www.fbi-lkt.fh-karlsruhe.de/lab/info01/tutorial Übungen Informatik 1 1 Methoden Methoden sind eine Zusammenfassung von Deklarationen und Anweisungen
MehrInstitut für Programmierung und Reaktive Systeme. Java 2. Markus Reschke
Java 2 Markus Reschke 07.10.2014 Datentypen Was wird gespeichert? Wie wird es gespeichert? Was kann man mit Werten eines Datentyps machen (Operationen, Methoden)? Welche Werte gehören zum Datentyp? Wie
MehrKontrollfluss. man Verzweigungen und Sprünge. o bisher linear (von oben nach unten) o Für interessante Programme braucht
Kontrollanweisungen Kontrollfluss o bisher linear (von oben nach unten) o Für interessante Programme braucht man Verzweigungen und Sprünge Kontrollfluss o bisher linear (von oben nach unten) o Für interessante
MehrEinstieg in die Informatik mit Java
1 / 26 Einstieg in die Informatik mit Java Methoden Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 26 1 Methoden 2 Methodendefinition 3 Parameterübergabe, Methodenaufruf
MehrKapitel 3. Funktionale Programmierung in OCAML. Informatik I WS03/04 Martin Hofmann 90
Kapitel 3. Funktionale Programmierung in OCAML Informatik I WS03/04 Martin Hofmann 90 Arbeitsweise von OCAML OCAML hat zwei Modi: Interaktiver Modus: Man gibt Definitionen ein; OCAML wertet sie aus und
MehrAllgemeine 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,
MehrLö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