Ausblicke zu Rekursiven Datenstrukturen
|
|
- Frauke Klein
- vor 5 Jahren
- Abrufe
Transkript
1 Ausblicke zu Rekursiven Datenstrukturen Martin Hofmann Ludwig-Maximilians-Universität München TdI 09, mh (lmumun) Ausblicke zu Rekursiven Datenstrukturen TdI 1 / 39
2 Inhalt Ein Mini-Computeralgebra-System Syntaxbäume Polynome als Listen Rekursive Auswertung von Syntaxbäumen Rekursive Implementierung von Algorithmen für Polynome Einsatz von Parsergenerator und Hauptprogramm Ausblick auf Ray-Tracing Technik zur Erzeugung von Bildern aus Szenebeschreibungen Zusätzliche Verwendung rekursiver Datenstrukturen Ray-Tracing selbst ist bereits rekursiv. Schlussbetrachtung mh (lmumun) Ausblicke zu Rekursiven Datenstrukturen TdI 2 / 39
3 Computeralgebra maple \^/ Maple 9.5 (IBM INTEL LINUX)._ \ / _. Copyright (c) Maplesoft, a division of Waterloo Maple \ MAPLE / All rights reserved. Maple is a trademark of < > Waterloo Maple Inc. Type? for help. > expand((x^2+2*x+1)*(x^2+3*x-1)); X + 5 X + 6 X + X - 1 > quo(x^2+2*x+1,x+1,x); X + 1 > > gcd(x^2+2*x+1,x^2-1); 0 X + 1 mh (lmumun) Ausblicke zu Rekursiven Datenstrukturen TdI 3 / 39
4 Computeralgebra > sum(i^2+2*i+1,i=0..n); 3 2 (n + 1) (n + 1) n/6 + 1/6 3 2 > sum(binomial(n,i),i=0..n); n 2 > sum(binomial(n+i,i)*binomial(n,i),i=0..n); LegendreP(n, 3) > sum(binomial(n+i,i),i=0..n); binomial(2 n + 1, n + 1) mh (lmumun) Ausblicke zu Rekursiven Datenstrukturen TdI 4 / 39
5 In diesem Vortrag MHs Polynomalgebrasystem vom > expand((x^2+2*x)*(x^3-x-1)*(x^2+1)); X^7+2*X^6-X^4-3*X^3-3*X^2-2*X > poldiv(x^7+2*x^6-x^4-3*x^3-3*x^2-2*x+1,x^3-x-1); Quotient = X^4+2*X^3+X^2+2*X Rest = 1 > gcd(x^7+2*x^6-x^4-3*x^3-3*x^2-2*x,(x^2+1)*(x^3-4*x^2+5)); X^2+1 mh (lmumun) Ausblicke zu Rekursiven Datenstrukturen TdI 5 / 39
6 Syntaxbäume * + ^ * X ^ X 2 2 * X ^ X 3 X (X^2+2*X)*(X^3-X-1)*(X^2+1) mh (lmumun) Ausblicke zu Rekursiven Datenstrukturen TdI 6 / 39
7 Syntaxbäume in OCAML type operator = Plus Minus Times Hat type expression = Var Int of int UMinus of expression Binop of operator * expression * expression Unser Ausdruck entspricht: Binop(Times, Binop(Times, Binop(Plus,Binop(Hat,Var,Int 2),Binop (Times,Int 2,Var)), Binop(Minus,Binop(Minus,Binop(Hat,Var,Int 3),Var),Int 1)), Binop(Plus,Binop(Hat,Var,Int 2),Int 1)) Im Rechner natürlich wieder als verzeigerter Baum repräsentiert, mh (lmumun) Ausblicke zu Rekursiven Datenstrukturen TdI 7 / 39
8 Schrittweise Konstruktion # let fac1 = Binop(Plus,Binop(Hat,Var,Int(2)),Binop(Times,Int(2),Var));; val fac1 : expression = Binop(Plus,Binop(Hat,Var,Int 2),Binop(Times,Int 2,Var)) # let fac2 = Binop(Minus,Binop(Minus,Binop(Hat,Var,Int 3),Var),Int 1);; val fac2 : expression =... # let fac3 = Binop(Plus,Binop(Hat,Var,Int(2)),Int(1));; val fac3 : expression =... # let tree = Binop(Times,Binop(Times,fac1,fac2),fac3);; val tree =... mh (lmumun) Ausblicke zu Rekursiven Datenstrukturen TdI 8 / 39
9 Polynome Polynome mit ganzzahligen Koeffizienten repräsentieren wir als Listen ihrer Koeffizienten beginnend mit der niedrigsten Potenz. Z.B.: X 2 + 3X + 5 wird zu [5;3;1] Z.B.: 7X 5 + 4X 2 8X 3 wird zu [-3;-8;4;0;0;-7] Nachteile: nicht ganz eindeutig wg. führende Nullen. Typ int list deutet nicht eindeutig auf Polynom hin. Alternativen: Koeffizientenlisten andersrum Listen von Monomen (Paar Koeff. Exponent), Grad, Leitkoeffizient etc. als Attribute mitführen. mh (lmumun) Ausblicke zu Rekursiven Datenstrukturen TdI 9 / 39
10 Addition von Polynomen Durch Rekursion über die Listenrepräsentation: let rec poly_add p1 p2 = match (p1,p2) with (p,[]) -> p ([],p) -> p (a1::rest1,a2::rest2) -> a1+a2 :: poly_add rest1 rest2 Z.B.: poly_add [4;5;6] [10;11;12;13] = 14::poly_add [5;6] [11;12;13] = 14::16::poly_add [6] [12;13] = 14::16::18::poly_add [] [13] = 14::16::18::[13] = [14;16;18;13] Nicht vergessen: :: ist cons, [] ist die leere Liste. mh (lmumun) Ausblicke zu Rekursiven Datenstrukturen TdI 10 / 39
11 Normalisieren von Polynomen Nullen am Ende eines Polynoms (als Liste) sollen entfernt werden. let remove_leading_zeros p = let rec strip l = match l with [] -> [] h::t -> if h=0 then strip t else l in List.rev (strip (List.rev p)) Die lokale Hilfsfunktion strip entfernt Nullen von vorne. Die Bibliotheksfunktion List.rev dreht eine Liste um. Den gewünschten Effekt erhalten wir durch Hintereinanderschalten von List.rev, dann strip, dann wieder List.rev mh (lmumun) Ausblicke zu Rekursiven Datenstrukturen TdI 11 / 39
12 Einfache Multiplikationen Mit X multiplizieren: let times_x p = 0::p Mit X n multiplizieren: let rec times_xn p n = if n=0 then p else times_xn (times_x p) (n-1) Z.B.: times_xn [1;5;9] 2 = times_xn (times_x [1;5;9]) 1 = times_xn [0;1;5;9] 1 = times_xn (times_x [0;1;5;9]) 0 = times_xn [0;0;1;5;9] 0 = [0;0;1;5;9] Mit Skalar multiplizieren: let poly_scalar a p = List.map (fun b -> a * b) p Die Bibliotheksfunktion List.map wendet eine Funktion auf alle Einträge einer Liste an: List.map (fun x -> x*x) [1;2;3;4] = [1;4;9;16] mh (lmumun) Ausblicke zu Rekursiven Datenstrukturen TdI 12 / 39
13 Multiplikation von Polynomen let rec poly_mult p1 p2 = match p1 with [] -> [] a1::rest1 -> poly_add (poly_scalar a1 p2) (times_x (poly_mult rest1 p2)) Ist p1 die leere Liste, also Null, dann ist das Ergebnis auch Null Ist p1 von der Form a1::rest1, also p 1 = a 1 + X rest 1, so ist p 1 p 2 = a 1 p 1 + X (rest 1 p 2 ). Beispiel: poly_mult [1;2;1] [1;3;1] = [1; 5; 8; 5; 1] mh (lmumun) Ausblicke zu Rekursiven Datenstrukturen TdI 13 / 39
14 Auswerten von Syntaxbäumen let rec expand expr = match expr with Var -> [0;1] Int i -> [i] UMinus expr -> poly_scalar (-1) (expand expr) Binop(op,expr1,expr2) -> let p1 = expand expr1 in let p2 = expand expr2 in (match op with Plus -> poly_add p1 p2 Times -> poly_mult p1 p2 Minus -> poly_add p1 (poly_scalar (-1) p2) Hat -> if not(posint p2) then raise (Error "Nur natuerliche Exponenten") else ntimes (poly_mult p1) (toint p2) [1]) mh (lmumun) Ausblicke zu Rekursiven Datenstrukturen TdI 14 / 39
15 Hilfsfunktionen und Erläuterungen zu Hat Testen, ob ein Polynom positiver Integer ist: let posint p = match (remove_leading_zeros p) with [] -> true [n] -> n >= 0 _ -> false Eine Funktion n-mal auf einen Wert anwenden, also f (n) (x) berechnen: let rec ntimes f n x = if n = 0 then x else ntimes f (n-1) (f x) Ein Polynom p Z nach int konvertieren. let toint p = match (remove_leading_zeros p) with [] -> 0 [n] -> n _ -> raise (Error "toint") mh (lmumun) Ausblicke zu Rekursiven Datenstrukturen TdI 15 / 39
16 Exceptions Mit exception Error of string haben wir eine Exception Error deklariert. Man kann sie mit raise werfen und mit try with fangen. Man kann ihr einen string-wert mitgeben. mh (lmumun) Ausblicke zu Rekursiven Datenstrukturen TdI 16 / 39
17 Eingabe Lexikalische Analyse: Eingabestring in Tokenstream konvertieren. Stream = Funktion, die bei jedem Aufruf das jeweils nächste Token zurückgibt. Token = Lexikalische Einheit (Schlüsselwörter, Klammern, Komma, Zahlen,... ) Syntaxanalyse: Tokenstream in Syntaxbaum konvertieren. Wir reichern unsere Syntax noch um Kommandos an. Es gibt zunächst nur ein Kommando; expand, welches als Argument einen Ausdruck hat. type command = Expand of expression mh (lmumun) Ausblicke zu Rekursiven Datenstrukturen TdI 17 / 39
18 Ocamlyacc Grammatik 1. Teil %{open Syntax%} %token <int> INT %token PLUS MINUS TIMES DIV %token LPAREN RPAREN SEMI COMMA %token EXPAND %token VAR HAT %left PLUS MINUS /* lowest precedence */ %left TIMES DIV /* medium precedence */ %nonassoc UMINUS /* one to highest precedence */ %right HAT /* highest precedence */ %start main /* the entry point */ %type <Syntax.command> main %% Hier sind die Tokens definiert, die Präzedenz und Bindungskraft von Operatoren, das Startsymbol und sein Typ (command) mh (lmumun) Ausblicke zu Rekursiven Datenstrukturen TdI 18 / 39
19 Ocamlyacc Grammatik 2. Teil main: EXPAND LPAREN expr RPAREN SEMI { Expand($3) } ; expr: INT { Int $1 } LPAREN expr RPAREN { $2 } expr PLUS expr { Binop(Plus,$1,$3) } expr MINUS expr { Binop(Minus,$1,$3) } expr TIMES expr { Binop(Times,$1,$3) } expr HAT expr { Binop(Hat,$1,$3) } VAR { Var } MINUS expr %prec UMINUS { UMinus $2 } ; Produktionen einer kontextfreien Grammatik. In den geschw. Klammern steht jeweils die semantische Aktion, also was als Wert zurückgegeben wird. Mit $1, $2, etc. kann man auf die Werte der Komponenten zurückgreifen. mh (lmumun) Ausblicke zu Rekursiven Datenstrukturen TdI 19 / 39
20 Lexer-Definition { open Parser exception Eof exception Bad_Token } rule token = parse [ \n \t ] { token lexbuf } (* skip blanks *) [ 0-9 ]+ as lxm { INT(int_of_string lxm) } + { PLUS } - { MINUS } * { TIMES } ^ { HAT } ( { LPAREN } ) { RPAREN } X { VAR } ; { SEMI }, { COMMA } "expand" { EXPAND } "poldiv" { POLDIV } "gcd" { GCD } eof { raise Eof } _ { raise Bad_Token } Die Werkzeuge Ocamlyacc und Ocamllex erzeugen aus diesen Spezifikationen automatisch Ocaml-Code, der übersetzt und dann verwendet werden kann: mh (lmumun) Ausblicke zu Rekursiven Datenstrukturen TdI 20 / 39
21 while true do e done wertet e immer wieder aus. Dasselbe wie let rec loop f = f();loop f in loop (fun _ -> e) ^ konkateniert Strings Das Ganze mehr oder weniger aus dem Ocaml-Referenzmanual kopiert. mh (lmumun) Ausblicke zu Rekursiven Datenstrukturen TdI 21 / 39 Read-Eval-Print-Schleife let _ = print_string "MHs Polynomalgebrasystem vom \n" try ( let lexbuf = Lexing.from_channel stdin in while true do print_string "> ";flush stdout; try let com = Parser.main Lexer.token lexbuf in run_command com; print_newline(); flush stdout with Error err -> print_string ("Fehler: "^err^"\n") done ) with Lexer.Eof -> exit 0
22 Drucken von Polynomen let string_of_poly p = let p = remove_leading_zeros p in let deg = degree p in if deg = -1 then "0" else ( let q = List.rev p in let (_,_,str) = List.fold_left (fun (needsign,exponent,str) coeff (true,exponent-1,(str ^ if coeff = 0 then "" else ((if needsign && coeff > 0 then "+" else "") ^ (if coeff = 1 && exponent > 0 then "" else if coeff = -1 && exponent > 0 then "-" else string_of_int coef (if coeff!= 1 && coeff!= -1 && exponent > 0 then "*" else "") ^ (if exponent > 0 then "X" else "") ^ (if exponent > 1 then "^" ^ string_of_int exponent else ""))))) (false,deg,"") q in str) Im Prinzip trivial, aber erstaunlich zeitaufwendig zu programmieren. mh (lmumun) Ausblicke zu Rekursiven Datenstrukturen TdI 22 / 39
23 Abarbeiten von Kommandos let run_command com = match com with Expand exp -> print_string(string_of_poly (expand exp)) Wir führen jetzt noch weitere Kommandos ein: type command = Expand of expression Poldiv of expression*expression Gcd of expression * expression nebst entsprechenden Grammatik- und Lexer-Regeln. mh (lmumun) Ausblicke zu Rekursiven Datenstrukturen TdI 23 / 39
24 Polynomdivision let rec poly_div p1 p2 = let deg1 =degree p1 in let deg2 =degree p2 in let lc1 = lcoeff p1 in let lc2 = lcoeff p2 in if isnull p2 then raise (Error "Division durch Null") else if deg1 < deg2 then (poly_of_int 0,p1) else if lc1 mod lc2!= 0 then raise (Error "Rationale Zahl nicht unterstuetzt") else if deg1 < deg2 then (poly_of_int 0,p1) else let quotmon = times_xn (poly_of_int (lc1/lc2)) (deg1-deg2) in let diff = poly_add p1 (poly_scalar (-1) (poly_mult quotmon p2)) in let (quot,rem) = poly_div diff p2 in (poly_add quotmon quot,rem) mh (lmumun) Ausblicke zu Rekursiven Datenstrukturen TdI 24 / 39
25 Hilfsfunktionen & Idee let degree p = let p = remove_leading_zeros p in List.length p - 1 let lcoeff p = let p = remove_leading_zeros p in match List.rev p with [] -> 0 h::t -> h let isnull p = let p = remove_leading_zeros p in p=[] let poly_of_int a = if a = 0 then [] else [a] Falls deg(p 1 ) < deg(p 2 ) so ist Quotient 0 und Rest p 2. Falls deg(p 1 ) deg(p 2 ) so bilde diff = p 1 X deg(p 1) deg(p 2 ) p 2 und dividiere diff rekursiv durch p 2. Zum Quotienten wird X deg(p 1) deg(p 2 ) addiert; Rest ist derselbe. mh (lmumun) Ausblicke zu Rekursiven Datenstrukturen TdI 25 / 39
26 Euklidischer Algorithmus für ggt let rec int_gcd x y = if abs x < abs y then int_gcd y x else if y = 0 then x else int_gcd y (x mod y) ggt(24, 32) = ggt(32, 24) = ggt(24, 8) = ggt(8, 0) = 8. mh (lmumun) Ausblicke zu Rekursiven Datenstrukturen TdI 26 / 39
27 Euklidischer Algorithmus für Polynome (Erste Version) let rec int_gcd x y = if abs x < abs y then int_gcd y x else if y = 0 then x else int_gcd y (x mod y) let rec poly_gcd p1 p2 = let lc2 = lcoeff p2 in let deg1 =degree p1 in let deg2 =degree p2 in if deg1 < deg2 then poly_gcd p2 p1 else if isnull p2 then p1 else let (quot,rem) = poly_div p1 p2 in poly_gcd p2 rem mh (lmumun) Ausblicke zu Rekursiven Datenstrukturen TdI 27 / 39
28 Problem mit der ersten Version let rec poly_gcd p1 p2 = let lc2 = lcoeff p2 in let deg1 =degree p1 in let deg2 =degree p2 in if deg1 < deg2 then poly_gcd p2 p1 else if isnull p2 then p1 else let (quot,rem) = poly_div p1 p2 in poly_gcd p2 rem Problem: Rationale Zahl nicht unterstuetzt Beispiel: ggt(x 2 X + 1, X + 1) = ggt(x + 1, 2X + 1) = Exception mh (lmumun) Ausblicke zu Rekursiven Datenstrukturen TdI 28 / 39
29 Abhilfe Multipliziere p 1 mit lcoeff(p 2 ) deg(p 1) deg(p 2 )+1. Dividiere aber vorher p 2 durch ggt seiner Koeffizienten, z.b.: 2X 2 4X + 6 X 2 2X + 3 Dieser ggt heißt Inhalt (engl.: content) von p 2. ggt von Polynomen ist ohnehin nur bis auf ganzz. Vielfache bestimmt. mh (lmumun) Ausblicke zu Rekursiven Datenstrukturen TdI 29 / 39
30 Endgültige Lösung let rec poly_gcd p1 p2 = let p2 = remove_content p2 in let lc2 = lcoeff p2 in let deg1 =degree p1 in let deg2 =degree p2 in if deg1 < deg2 then poly_gcd p2 p1 else if isnull p2 then p1 else let p1 = poly_scalar (int_pot lc2 (deg1-deg2+1)) p1 in let (quot,rem) = poly_div p1 p2 in poly_gcd p2 rem mh (lmumun) Ausblicke zu Rekursiven Datenstrukturen TdI 30 / 39
31 Zusammenfassung Polynomalgebra Syntax von Ausdrücken intern als Bäume, dadurch rekursive Auswertung sehr einfach. Umwandlung von konkreter Syntax in Bäume mit Parsergenerator (Ocamlyacc & Ocamllex). Polynome als Werte von Ausdrücken. Repräsentiert als Listen. Rekursion über Listen und Hilfsfunktionen wie List.map erlauben kompakte Definition der Funktionen auf Polynomen. Read-Eval-Print-Loop zur wiederholten Abarbeitung von Befehlen. GgT-Berechnung durch Beschränkung auf ganze Zahlen etwas aufwendig. Alternative: floats oder rationale Arithmetik. mh (lmumun) Ausblicke zu Rekursiven Datenstrukturen TdI 31 / 39
32 Ausblick auf Raytracing ICFP Programming Contest 2000: Erstelle in 72Std ein Programm, welches Befehle einer Szenebeschreibungssprache einliest und eine entsprechende Bilddatei erzeugt. Sprache und Lösungsstrategie war in einem sehr gut lesbaren und hochinteressanten 20S. Dokument dargestellt mh (lmumun) Ausblicke zu Rekursiven Datenstrukturen TdI 32 / 39
33 Eines der Testbilder mh (lmumun) Ausblicke zu Rekursiven Datenstrukturen TdI 33 / 39
34 Auszug aus der Szenebeschreibung { /v /u /face white } sphere 0.10 uscale /ball { /v /u /face black } cylinder 0.25 uscale /hole [...] mh (lmumun) Ausblicke zu Rekursiven Datenstrukturen TdI 34 / 39
35 Forts. field hole translate difference sky union post translate union ball translate union flag translate union translate /scene mh (lmumun) Ausblicke zu Rekursiven Datenstrukturen TdI 35 / 39
36 Forts point %% position point %% intensity light /sun point %% Ambient [ sun ] %% Lights scene 2 %% Depth 90.0 %% fov 320 %% width (pixels) 200 %% height (pixels) "golf.ppm" %% filename render mh (lmumun) Ausblicke zu Rekursiven Datenstrukturen TdI 36 / 39
37 Funktionsweise Für jeden Pixel einen gedachten Strahl in der entsprechenden Richtung in die Szene schicken. Trifft der Strahl ein Objekt, in Reflektionsrichtung rekursiv weiterverfolgen. Schattenstrahlen in Richtung der Lichtquellen schicken. Falls verdeckt, kein Beitrag der Lichtquelle. Farbe und Intensität des ursprünglichen Pixels aus den Farben und Intensitäten der (rekursiven) Hilfsstrahlen berechnen. Rekursionstiefe beschränkt auf z.b Objekte in Bounding-Boxen packen und diese in Bäume zu organisieren hilft bei der schnellen Ermittlung von Verdeckungen. mh (lmumun) Ausblicke zu Rekursiven Datenstrukturen TdI 37 / 39
38 Ein weiteres Testbild mh (lmumun) Ausblicke zu Rekursiven Datenstrukturen TdI 38 / 39
39 Zusammenfassung Computeralgebra und Raytracing als Anwendungen rekursiver Datenstrukturen Syntaxbäume, Verdeckungshierarchien, Objektlisten, Koeffizientenlisten Rekursive Kontrollstruktur bei Auswertung, Raytracing und bei Polynomalgorithmen. Verwendung einer funktionalen Sprache, hier OCAML, erlaubt relativ schnelles Prototyping, bei gleichzeitig hoher Leistung. Ist für Problemstellungen der Form Eingabe Parser Syntaxbaum Verarbeiten Ausgabe hervorragend geeignet. Dokumentation & Download Wir verwenden Ocaml zur Implementierung von Ressourcenanalysen (Eingabe=Programm, Ausgabe=Ressourceninformation), Entscheidungsverfahren (Eingabe=logische Formeln, Ausgabe=Beweis/Modell) mh (lmumun) Ausblicke zu Rekursiven Datenstrukturen TdI 39 / 39
Inhalt Kapitel 11: Formale Syntax und Semantik
Inhalt Kapitel 11: Formale Syntax und Semantik 1 Abstrakte und konkrete Syntax 2 Lexikalische Analyse 3 Formale Sprachen, Grammatiken, BNF 4 Syntaxanalyse konkret 266 Abstrakte und konkrete Syntax Abstrakte
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
Programmierung 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 +
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
3.1 Reservierte Wörter
3.1 Reservierte Wörter int Bezeichner für Basis-Typen; if, else, while Schlüsselwörter aus Programm-Konstrukten; (,), ",, {,},,,; Sonderzeichen. 62 3.2 Was ist ein erlaubter Name? Schritt 1: Angabe der
Die 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
3 Syntax von Programmiersprachen
3 Syntax von Programmiersprachen Syntax ( Lehre vom Satzbau ) formale Beschreibung des Aufbaus der Worte und Sätze, die zu einer Sprache gehören; im Falle einer Programmiersprache Festlegung, wie Programme
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
Programmieren 1 C Überblick
Programmieren C Überblick. Einleitung 2. Graphische Darstellung von Algorithmen 3. Syntax und Semantik 4. Einstieg in C: Einfache Sprachkonstrukte und allgemeiner Programmaufbau 5. Skalare Standarddatentypen
Folgen und Funktionen in der Mathematik
Folgen und Funktionen in der Mathematik Anhand von einigen exemplarischen Beispielen soll die Implementierung von mathematischen Algorithmen in C/C++ gezeigt werden: Reelle Funktionen in C/C++ Diese wird
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
Programmierung 1 (Wintersemester 2015/16) Wiederholungstutorium Lösungsblatt 11 (Parser II)
Fachrichtung 6.2 Informatik Universität des Saarlandes Tutorenteam der Vorlesung Programmierung 1 Programmierung 1 (Wintersemester 2015/16) Wiederholungstutorium Lösungsblatt 11 (Parser II) Hinweis: Dieses
15. 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
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 =
Angewandte Mathematik und Programmierung
Angewandte Mathematik und Programmierung Einführung in das Konzept der objektorientierten Anwendungen zu mathematischen Rechnens WS 2013/14 Operatoren Operatoren führen Aktionen mit Operanden aus. Der
3 Syntax von Programmiersprachen
3 Syntax von Programmiersprachen Syntax ( Lehre vom Satzbau ) formale Beschreibung des Aufbaus der Worte und Sätze, die zu einer Sprache gehören; im Falle einer Programmiersprache Festlegung, wie Programme
1 Potenzen und Polynome
1 Potenzen und Polynome Für eine reelle Zahl x R und eine natürliche Zahl n N definieren wir x n := x x x... x }{{} n-mal Einschub über die bisher aufgetretenen mathematischen Symbole: Definition mittels
Informatik 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
Zuerst wird die Bedingung ausgewertet. Ist sie erfüllt, wird der Rumpf des while-statements ausgeführt. Nach Ausführung des Rumpfs wird das gesamte
Zuerst wird die Bedingung ausgewertet. Ist sie erfüllt, wird der Rumpf des while-statements ausgeführt. Nach Ausführung des Rumpfs wird das gesamte while-statement erneut ausgeführt. Ist die Bedingung
Lex und Yacc Lt. Worf, scannen Sie das Schiff! 300dpi, Sir?
Lex und Yacc Lt. Worf, scannen Sie das Schiff! 300dpi, Sir? Hagen Paul Pfeifer hagen@jauu.net 29. April 2004 Lex und Yacc Überblick Einführung Lex und Yacc 1 Überblick Einführung Beispiele Lex und Yacc
3.4 Struktur von Programmen
3.4 Struktur von Programmen Programme sind hierarchisch aus Komponenten aufgebaut. Für jede Komponente geben wir Regeln an, wie sie aus anderen Komponenten zusammengesetzt sein können. program ::= decl*
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
Übung zu Algorithmen und Datenstrukturen (für ET/IT)
Übung zu Algorithmen und Datenstrukturen (für ET/IT) Sommersemester 2015 Matthias Wieczorek Computer-Aided Medical Procedures Technische Universität München Administratives Zentralübung (Mittwoch, 09:45
Übung zu Algorithmen und Datenstrukturen (für ET/IT)
Übung zu Algorithmen und Datenstrukturen (für ET/IT) Sommersemester 2017 Rüdiger Göbl, Mai Bui Computer Aided Medical Procedures Technische Universität München Administratives Zentralübung (Mittwoch, 09:45
Programmierung 1 (Wintersemester 2015/16) Lösungsblatt: Aufgaben für die Übungsgruppen: 12 (Kapitel 13)
Fachrichtung 6.2 Informatik Universität des Saarlandes Tutorenteam der Vorlesung Programmierung 1 Programmierung 1 (Wintersemester 2015/16) Lösungsblatt: Aufgaben für die Übungsgruppen: 12 (Kapitel 13)
Proinformatik Marco Block Dienstag, den 21. Juli 2009
2. Skript vom Dienstag, den 21. Juli 2009 zur Vorlesung Proinformatik Marco Block Dienstag, den 21. Juli 2009 1 Verschiedenes 1.1 let und where Am Anfang der Vorlesung haben wir uns ein paar einfache neue
7. Einführung in C++ Programmieren / Algorithmen und Datenstrukturen 1 Prof. Dr. Bernhard Humm FB Informatik, Hochschule Darmstadt
7. Einführung in C++ Programmieren / Algorithmen und Datenstrukturen 1 Prof. Dr. Bernhard Humm FB Informatik, Hochschule Darmstadt 1 Kontrollfragen Rekursion Was bedeutet Rekursion? Geben Sie Beispiele
Inhalt 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
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
Übungs- und Praktikumsaufgaben zur Systemprogrammierung Dipl.-Ing. H. Büchter (Lehrbeauftragter) FH-Dortmund WS 2001/2002 / SS 2002
1. Stellen Sie die schrittweise Verbesserung eines Compilers durch das Bootstrap- Verfahren mit Hilfe von T-Diagrammen dar. Gegeben ist ein auf der Maschine M lauffähiger Compiler C 1, der in S geschrieben
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
Bash-Skripting Linux-Kurs der Unix-AG
Bash-Skripting Linux-Kurs der Unix-AG Sebastian Weber 13.06.2012 Was ist ein Bash-Skript? Skript muss mit chmod +x ausführbar gemacht sein Aneinanderreihung von Befehlen normale Befehle nutzbar Sebastian
Pascal Schärli
Informatik I - Übung 8 Pascal Schärli pascscha@student.ethz.ch 12.04.2019 1 Was gibts heute? Best-Of Vorlesung: Prefix / Infix EBNF Vorbesprechung Problem of the Week 2 Vorlesung 3. 1 Prefix Notation Infix
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)]
DieÜbersetzung funktionaler Programmiersprachen
DieÜbersetzung funktionaler Programmiersprachen 107 11 Die Sprache PuF Wir betrachten hier nur die Mini-Sprache PuF( Pure Functions ). Insbesondere verzichten wir(vorerst) auf: Seiteneffekte; Datenstrukturen;
Syntax von Programmiersprachen
Syntax von Programmiersprachen SEP 209 Programmiersprachen Sprache = Menge von Wörtern, typischerweise unendlich Programmiersprache: Wörter repräsentieren Programme Programm kann auf einem Computer evtl.
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" ++
17. 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
Polynome. Analysis 1 für Informatik
Gunter Ochs Analysis 1 für Informatik Polynome sind reelle Funktionen, die sich ausschlieÿlich mit den Rechenoperation Addition, Subtraktion und Multiplikation berechnen lassen. Die allgemeine Funktionsgleichung
Programmierung und Modellierung
Programmierung und Modellierung Benutzerdefinierte Datentypen Martin Wirsing in Zusammenarbeit mit Moritz Hammer SS 2009 2 Inhalt Kap. 7 Benutzerdefinierte Datentypen 1. Aufzählungstypen 2. Typen mit zusammengesetzten
1 Attributierte Grammatiken. 2 Zyklische AG. 3 Codeerzeugung mit AGs. Zusatzfolien Semantische Analyse Wintersemester 2008/09 1 / 28
1 Attributierte Grammatiken 2 Zyklische AG 3 Codeerzeugung mit AGs Zusatzfolien Semantische Analyse Wintersemester 2008/09 1 / 28 Beispiel: Taschenrechner mit Attributierter Grammatik Produktion Semantische
Programmierung 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.
Javakurs für Anfänger
Javakurs für Anfänger Einheit 06: Einführung in Kontrollstrukturen Lorenz Schauer Lehrstuhl für Mobile und Verteilte Systeme Heutige Agenda 1. Teil: Einführung in Kontrollstrukturen 3 Grundstrukturen von
2 Eine einfache Programmiersprache
2 Eine einfache Programmiersprache Eine Programmiersprache soll Datenstrukturen anbieten Operationen auf Daten erlauben Kontrollstrukturen zur Ablaufsteuerung bereitstellen Als Beispiel betrachten wir
Methoden zur Interpretation LISPähnlicher. Programmiersprachen. Seminarvortrag / 53 FH AACHEN FACHBEREICH 9 TOBIAS STUMM MATR.-NR.
Methoden zur Interpretation LISPähnlicher Programmiersprachen Seminarvortrag 20.01.2017 FACHBEREICH 9 TOBIAS STUMM MATR.-NR. 4012917 1 Inhalt Motivation Lisp > Definition > Scheme Interpreter > Definition
Literale. Programmbestandteile. Variable. Schlüsselwörter. Literal: Ein Literal ist ein vordefinierter Name, der für einen festen Wert steht.
Programmbestandteile Literale Literale Variablen Schlüsselwörter Zusammengesetzte Formen Literal: Ein Literal ist ein vordefinierter Name, der für einen festen Wert steht. Beispiele: Ziffernfolgen sind
Programmieren in Java
Programmieren in Java Vorlesung 10: Ein Interpreter für While Prof. Dr. Peter Thiemann Albert-Ludwigs-Universität Freiburg, Germany SS 2015 Peter Thiemann (Univ. Freiburg) Programmieren in Java JAVA 1
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
Informatik I: Einführung in die Programmierung
Informatik I: Einführung in die Programmierung 7., While-, Hilfsfunktionen und Akkumulatoren Albert-Ludwigs-Universität Freiburg Peter Thiemann 13. November 2018 1 13. November 2018 P. Thiemann Info I
Anwendung (2. Versuch:-) Entkopplung der Locks
Gut gemeint aber leider fehlerhaft... Jeder Producer benötigt zwei Locks gleichzeitig, um zu produzieren: 1. dasjenige für den Puffer; 2. dasjenige für einen Semaphor. Musser fürden Semaphor einwait()
JAVA-Datentypen und deren Wertebereich
Folge 8 Variablen & Operatoren JAVA 8.1 Variablen JAVA nutzt zum Ablegen (Zwischenspeichern) von Daten Variablen. (Dies funktioniert wie beim Taschenrechner. Dort können Sie mit der Taste eine Zahl zwischenspeichern).
Programmierung und Modellierung
Programmierung und Modellierung Zusammenfassung und Ausblick Martin Wirsing in Zusammenarbeit mit Moritz Hammer SS 2009 2 Inhalt 13. Zusammenfassung und Ausblick 1. Thema der Vorlesung 2. Beispiel rekursive
Linux und Shell-Programmierung Teil 6
Prof. Dr. Christian Baun Linux und Shell-Programmierung Teil 6 Fachhochschule Frankfurt am Main WS1314 1/18 Linux und Shell-Programmierung Teil 6 Prof. Dr. Christian Baun Fachhochschule Frankfurt am Main
JCup. auspacken JCUP o.ä cd JCUP Übersetzten. javac java_cup/main.java./install
JCup / JLex download JCup als java_cup_v10k.tar.gz von http://www2.cs.tum.edu/projects/cup/ download JFlex von als jflex-1.4.3.tar.gz von http://jflex.de/ oder download JLex Main.java von http://www.cs.princeton.edu/~appel/modern/java/jlex
Outline. 1 Einleitung. 2 Einführung in C. 3 Fortgeschrittenes in C. 4 Einführung in Emacs Lisp. 5 Einführung in Prolog. 6 Formale Semantik
Outline 1 Einleitung 2 Einführung in C 3 Fortgeschrittenes in C 4 Einführung in Emacs Lisp 5 Einführung in Prolog 6 Formale Semantik Lisp 1958 von John McCarthy erfunden Funktionales Programmierparadigma
17 Interpretation. Scheme-Programme als Datenstruktur. Interpretation von Ausdrücken. Interpretation von Lambda. Lambda als Datenstruktur
17 Interpretation Scheme-Programme als Datenstruktur Interpretation von Ausdrücken Interpretation von Lambda Lambda als Datenstruktur Toplevel Definitionen set! 17.1 Programme als Datenstruktur 17.1.1
Allgemeine Hinweise:
TECHNISCHE UNIVERSITÄT MÜNCHEN FAKULTÄT FÜR INFORMATIK Lehrstuhl für Sprachen und Beschreibungsstrukturen SS 2011 Einführung in die Informatik I Midtermklausur Prof. Dr. Helmut Seidl, A. Lehmann, A. Herz,
Praktikum Funktionale Programmierung Teil 1: Lexen und Parsen
Stand der Folien: SoSe 2011 Praktikum Funktionale Programmierung Teil 1: Lexen und Parsen Dr. David Sabel Sommersemester 2011 Übersicht FP-PR Teil 1: Lexen & Parsen Sommersemester 2011 D. Sabel 2/20 Übersicht
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
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,
5.5 Aufsteigende Analyse. 5.5 Aufsteigende Analyse (2) Typische Konflikte. Konflikte
5.5 Aufsteigende Analyse 5.5 Aufsteigende Analyse (2) 5.5.1 Prinzip der aufsteigenden Analyse 5.5.2 Algorithmus der LR-Syntaxanalyse 5.5.3 Konstruktion der Syntaxanalysetabellen 5.5.4 Konflikte 5.5.5 Präzedenzen
Einführung in die Funktionale Programmierung
Einführung in die Funktionale Programmierung Am Beispiel von OCaml Michael Dienert 12. Oktober 2018 Inhaltsverzeichnis 1 Welche funktionale Sprache wählen wir? 2 1.1 Welche funktionale Sprache soll ich
2 Eine einfache Programmiersprache
2 Eine einfache Programmiersprache Eine Programmiersprache soll Datenstrukturen anbieten Operationen auf Daten erlauben Kontrollstrukturen zur Ablaufsteuerung bereitstellen Als Beispiel betrachten wir
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
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,
Tutorium für Fortgeschrittene
Tutorium für Fortgeschrittene Stroop Aufgabe: Die Farbe gesehener Wörter ist zu klassifizieren. Es gibt 4 Farben (rot, blau, gelb, grün) In Eprime: red, blue, yellow and green. Jeder Farbe ist einer Taste
Inhalt 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
Bash-Skripting Linux-Kurs der Unix-AG
Bash-Skripting Linux-Kurs der Unix-AG Sebastian Weber 07.01.2013 Was ist ein Bash-Skript? Skript muss mit chmod +x ausführbar gemacht sein Aneinanderreihung von Befehlen normale Befehle nutzbar Sebastian
Modellierung und Programmierung 1
Modellierung und Programmierung 1 Prof. Dr. Sonja Prohaska Computational EvoDevo Group Institut für Informatik Universität Leipzig 4. November 2015 Administratives Zur Abgabe von Übungsaufgaben Nein, wir
Boolean Wertemenge: Wahrheitswerte {FALSE,TRUE}, auch {0,1} Deklaration:
Boolean Wertemenge: Wahrheitswerte {,}, auch {,} Deklaration: VAR present,billig,laut,gefunden : BOOLEAN; Ein-/Ausgabe: keine! Operatoren: Negation, Verneinung NOT ~ Konjunktion, logisches UND AND & Disjunktion,
INFORMATIK FÜR BIOLOGEN
Technische Universität Dresden 15012015 Institut für Theoretische Informatik Professur für Automatentheorie INFORMATIK FÜR BIOLOGEN Musterklausur WS 2014/15 Studiengang Biologie und Molekulare Biotechnologie
19. Vererbung und Polymorphie
667 19. Vererbung und Polymorphie Ausdrucksbäume, Vererbung, Code-Wiederverwendung, virtuelle Funktionen, Polymorphie, Konzepte des objektorientierten Programmierens (Ausdrucks-)Bäume -(3-(4-5))*(3+4*5)/6
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
Lexikalische Programmanalyse der Scanner
Der Scanner führt die lexikalische Analyse des Programms durch Er sammelt (scanned) Zeichen für Zeichen und baut logisch zusammengehörige Zeichenketten (Tokens) aus diesen Zeichen Zur formalen Beschreibung
System.out.println("TEXT");
Inhaltsübersicht - Erstes Beispiel - Datentypen - Ausdrücke und Operatoren - Schleifen / Bedinungen - Struktogramme - Grundgerüst eines Programms in JAVA - Einlesen von Daten Erstes Beispiel public class
Projekt 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.
ALP 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
Gliederung. n Teil I: Einleitung und Grundbegriffe. n Teil II: Imperative und objektorientierte Programmierung
Gliederung n Teil I: Einleitung und Grundbegriffe l 1. Organisatorisches l 2. Grundlagen von Programmiersprachen n Teil II: Imperative und objektorientierte Programmierung l 1. Grundelemente der Programmierung
Java I Vorlesung Imperatives Programmieren
Java I Vorlesung 2 Imperatives Programmieren 3.5.2004 Variablen -- Datentypen -- Werte Operatoren und Ausdrücke Kontrollstrukturen: if Imperatives Programmieren Im Kern ist Java eine imperative Programmiersprache.
11. Rekursion. 1, falls n 1. n (n 1)!, andernfalls. Mathematische Rekursion. Rekursion in Java: Genauso! Unendliche Rekursion. n!
Mathematische Rekursion 11. Rekursion Mathematische Rekursion, Terminierung, der Aufrufstapel, Beispiele, Rekursion vs. Iteration, Lindenmayer Systeme Viele mathematische Funktionen sind sehr natürlich
Programmierkurs 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
Ray Tracing. 2. Ray Tracing-Prinzip und -Algorithmen. 3. Schnittpunkt- und Normalenberechnung
1. Vorbemerkungen 2. -Prinzip und -Algorithmen 3. Schnittpunkt- und Normalenberechnung 4. Verbesserte -Techniken 4.1 Supersampling 4.2 Adaptives Supersampling 4.3 Stochastisches Supersampling 4.4 Verteiltes
12. Rekursion. 1, falls n 1. n (n 1)!, andernfalls. Lernziele. Mathematische Rekursion. Rekursion in Java: Genauso! n! =
Lernziele Sie verstehen, wie eine Lösung eines rekursives Problems in Java umgesetzt werden kann. Sie wissen, wie Methoden in einem Aufrufstapel abgearbeitet werden. 12. Rekursion Mathematische Rekursion,
Induktion nach der Länge n von x
Allgemeiner: app (rev x) y = rev1 x y füralle Listenx, y. Beweis: n = 0 : Induktion nach der Länge n von x Dann gilt: x = []. Wirschließen: app (rev x) y = app (rev []) y = app (match [] with [] -> []...)
Allgemeine Hinweise:
TECHNISCHE UNIVERSITÄT MÜNCHEN FAKULTÄT FÜR INFORMATIK Lehrstuhl für Sprachen und Beschreibungsstrukturen WS 12/13 Einführung in die Informatik I Wiederholungsklausur Prof. Dr. Helmut Seidl, A. Lehmann,
Programmierkurs 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
Kapitel 2: Python: Ausdrücke und Typen. Grundlagen der Programmierung 1. Holger Karl. Wintersemester 2016/2017. Inhaltsverzeichnis 1
Kapitel 2: Python: Ausdrücke und Typen Grundlagen der Programmierung 1 Holger Karl Wintersemester 2016/2017 Inhaltsverzeichnis Inhaltsverzeichnis 1 Abbildungsverzeichnis 2 Liste von Definitionen u.ä. 2
Gültigkeitsbereich. T. Neckel Einführung in die wissenschaftliche Programmierung IN8008 Wintersemester 2016/
Gültigkeitsbereich Funktionen Erinnerung: Python ist eine interpretierte Sprache! Funktionen müssen definiert sein, bevor sie aufgerufen werden können. T. Neckel Einführung in die wissenschaftliche Programmierung
Phasen eines Compilers. Grundlagen der Programmierung 2. Programm für heute. LR-Parser, Shift-Reduce-Verfahren. Schiebe-Reduziere-Parser
Phasen eines Compilers Grundlagen der Programmierung 2 Schiebe-Reduziere-Parser Prof Dr. Manfred Schmidt-Schauß (unter Mithilfe von PD Dr. David Sabel) Quelltext (String) Syntaxbaum Lexikalische Analyse
Programmierung für Mathematik HS11
software evolution & architecture lab Programmierung für Mathematik HS11 Übung 8 1 Aufgabe: Codeverständnis (Repetition) 1.1 Lernziele 1. Code verstehen können. 2. Fehler im Code finden und korrigieren
Vorkurs Informatik WiSe 17/18
Java Ausdrücke und Variablen Dr. Werner Struckmann / Stephan Mielke, Nicole Naczk, 05.10.2017 Technische Universität Braunschweig, IPS Überblick Ausdrücke, Datentypen und Variablen Kontrollstrukturen 05.10.2017
Kapitel 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
Programming Exercises
Programming Exercises 1. Schreibe eine Funktion, die Hello world! ausgibt. 2. Schreibe eine Funktion, die ausgibt, ob eine gegebene Zahl positiv oder negativ ist. 3. Schreibe eine Funktion, die ausgibt,
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
Organisatorisches. Neue Übungsblätter: Nur mehr elektronisch? Abgabe Di, , 14 Uhr bis Do, , 8Uhr
Organisatorisches Neue Übungsblätter: Nur mehr elektronisch? Abgabe Di, 14.10., 14 Uhr bis Do, 23.10., 8Uhr. 14.10.2014 IT I - VO 1 1 IT I: Heute Wiederholung CuP ctd: this Arrays, ArrayLists Schleifen: