in in WS 2011/2012 Georg 1 AG Praktische Informatik October 12, 2011 1 gsauthof@techfak.uni-bielefeld.de
Kontakt in Dr. Georg Email: gsauthof@techfak.uni-bielefeld.de M3-128 in Organisation der Übungen zu A&D und in http://www.techfak.uni-bielefeld.de/ags/pi/lehre/ AuDIWS11/ Zentrale Seite für Übungszettel, Folien, usw.
Übungen Übungen zu Algorithmen und Datenstrukturen sind die Übungen zu den beiden Veranstaltungen: Algorithmen & Datenstrukturen (Prof. Dr. Giegerich) in (Dr. Georg ) Scheinkriterien: 50 % der Punkte aktive Teilnahme an den Übungen Bearbeitung in 2er- bzw. 3er-Gruppen in Anmeldung http://www.techfak.uni-bielefeld.de/ags/pi/lehre/ AuDIWS11/gruppen.pdf
Prüfung in Voraussetzung: Erfolgreiche Teilnahme an der Übungen Mündliche Prüfung (ca. 20 Minuten) mögliche Termine werden noch bekanntgegeben
Skript in Es gibt ein Vorlesungsskript zu den beiden Veranstaltungen: http://www.techfak.uni-bielefeld.de/ags/pi/lehre/ AuDIWS11/literatur_aud.html Im Laufe des Semesters werden nach Bedarf noch gedruckte Skripte zur Verfügung gestellt.
Uhrzeit in Statt 8h c.t. 8.30 s.t.? Nein, es bleibt bei 8h c.t.
Ideengeschichte der achen in Welche achenparadigmen? Historische Entwicklung Wie ist einzuordnen? Visualisierungen O Reilly Poster: http://oreilly.com/news/languageposter_0504.html Computer Languages History: http://www.levenez.com/lang/
Maschinennahe Sprachen Welche Maschinen? Konventionelle Rechnenmaschinen festverdrahtet keine Software in
Maschinennahe Sprachen Welche Maschinen? Konventionelle Rechnenmaschinen festverdrahtet keine Software 1941: Zuse Z3 elektromechanisch (Relais!) 2 Register 200 Byte RAM programmierbar (Lochstreifen) in
Maschinennahe Sprachen Welche Maschinen? Konventionelle Rechnenmaschinen festverdrahtet keine Software 1941: Zuse Z3 elektromechanisch (Relais!) 2 Register 200 Byte RAM programmierbar (Lochstreifen) aber: kein Sprungbefehl 1945 Von-Neumann-Architektur Sprungbefehl! Universelle Rechenmaschine Keine Trennung von Programm und Daten Quelle: http://commons. wikimedia.org/wiki/file: Z3_Deutsches_Museum.JPG, CC-by-SA 3.0 in
Übliche Rechner-Architektur in Labels Adressen RAM Register Programcounter start: 500 add R1, R2 R1 42 612 613 cmp R2, 0 cjmp start R2 13 + 42 Daten
Maschinennahe Sprachen in Von Binärcode zu Assembler-Sprachen: Symbolische OP-codes Symbolische Adressen stack Subroutinen relocatable code indirekte adressierung Programme überhaupt nicht portabel Höhere achen (imperativ)
Imperative achen Bis heute der Mainstream Weiterführung der Assembler-Ideen nah am Maschinenmodell 1957 Fortran FORmula TRANslation zunächst definiert durch die Fähigkeiten des Compilers ALGOL 60 systematisch konstruierte Sprache maschinenunabhängig präzise Syntaxdefinition (CFG) Strenge Typisierung Arrays Verschachtelte Sichtbarkeitsbereiche, Blockstruktur Prozeduren Rekursion, Schleifen,... Input/Output? in
Funktionale achen in FP als neues Programmierparadigma 1958 LISP LISt Processing alles ist eine Liste, auch die Programme Funktionen als universelle Kontrollstruktur, z.b. (COND (EQUAL x y) (PLUS x 1)(Minus y 1))
Funktionale achen in FP als neues Programmierparadigma 1958 LISP LISt Processing alles ist eine Liste, auch die Programme Funktionen als universelle Kontrollstruktur, z.b. (COND (EQUAL x y) (PLUS x 1)(Minus y 1)) if (x = y) then x+1 else y+1
Funktionale achen in FP als neues Programmierparadigma 1958 LISP LISt Processing alles ist eine Liste, auch die Programme Funktionen als universelle Kontrollstruktur, z.b. (COND (EQUAL x y) (PLUS x 1)(Minus y 1)) if (x = y) then x+1 else y+1 Einfache Semantik durch Interpreter in LISP (fast) untypisiert moderne Variante: SCHEME
Logische achen in 1972 Prolog Menge von Fakten Menge von Regeln Inferenz-Algorithmus Programmablauf: Auswertung einer Abfrage wie funktionale achen, Teil der Gruppe der deklarativen achen
Ada-Projekt in DOD-Projekt Entwicklung 1979-1983 Ziel: Aufräumen mit dem Sprachendurcheinander Universal-Sprache Steigerung der Wiederverwendbarkeit von Software Komplexe Sprache Verbot von Sprach-Subsets keine Verbreitung
Gegenläufiger Trend in Kleine, einfache Sprachen C (1970) Pascal (1972) C++ (1979) Kompatibilität mit C OOP templates Überladung...
Objekt-orientierte Programmierung (OOP) in Simula 67: ALGOL + Klassen Klasse = Funktion/Prozedur mit Gedächtnis 1972 Smalltalk Klassen und Methoden Vererbung Byte-Code Interpreter Klassen-Bibliothek 1979 C++
Anwendungsspezifische Sprachen in sed awk sh make bibtex LaTeX Postscript (Druckseitenbeschreibung) SGML, HTML (Dokumentenbeschreibung)...
Heute Es gibt immer noch die alten Sprachen: Fortran (ISO 2010) nun auch OO LISP C (ISO C99) C++ (ISO 2011) Ada (ISO 2005) Imperativer/OOP Mainstream: Java, C#, C, C++ Funktionaler Mainstream:, ML, LISP Scriptsprachen: Python, Ruby... in
seit 1990 benannt nach dem Logiker Curry Beeinflusst von ML Miranda funktional (pure) lazy evaluation stark typisiert notationelles Juwel Typinferenz Implementierungen Hugs GHC in Quicksort Snippets
Quicksort in 1 q s o r t : : ( Ord a ) => [ a ] > [ a ] 2 q s o r t [ ] = [ ] 3 q s o r t ( a : as ) = q s o r t [ b b < as, b < a ] 4 ++ [ a ] 5 ++ q s o r t [ b b < as, b >= a ] Quicksort Snippets
Quicksort in 1 q s o r t : : ( Ord a ) => [ a ] > [ a ] 2 q s o r t [ ] = [ ] 3 q s o r t ( a : as ) = q s o r t [ b b < as, b < a ] 4 ++ [ a ] 5 ++ q s o r t [ b b < as, b >= a ] Quicksort Snippets Main> qsort [1,4,2,2,4] [1,2,2,4,4]
Pseudo-Code function quicksort( array ) create empty lists less and greater if length( array ) <= 1 // an array of zero or one elements // is already sorted return array select and remove a pivot value pivot from array for each x in array if x <= pivot then append x to less else append x to greater return concatenate(quicksort( less ), pivot, quicksort( greater )) Quelle: http://en.wikipedia.org/w/index.php?title= Quicksort&oldid=454693051, CC-BY-SA 3.0 in Quicksort Snippets
-Module in -Script: Endung.hs, Kommentare werden mit - - eingeleitet Literate--Script: Endung.lhs, alles ist Kommentar, nur Zeilen, die mit > beginnen, gehören zum Programm. Zwischen Kommentaren und Definitionen muss sich mindestens eine leere Zeile befinden. Quicksort Snippets
Beispiel 1 > module Test 2 3 ^ immer g r o s s g e s c h r i e b e n 4 5 > where 6 7 Es f o l g e n D e k l a r a t i o n e n und D e f i n i t i o n e n 8 10 9 f : : I n t > I n t 11 ^ Typnamen immer g r o s s g e s c h r i e b e n 12 13 > f x = x x 14 15 > l e s s : : I n t > I n t > Bool Rueckgabetyp a l s l e t z t e s 16 > l e s s a b = a < b 17 18 A u f r u f von d e r S h e l l v i a : 19 20 $ hugs Test in Quicksort Snippets
Bedienung vom Hugs in Aufrufen mit hugs <Modulname> Laden eines neuen Moduls: :l <Modulname> Erneutes Laden eines Moduls nach einer Änderung: :r Den Typ eines Ausdrucks anzeigen: :t <Ausdruck> Alle verfügbaren Kommandos anzeigen: :? hugs beenden: :q Quicksort Snippets
-Typen in Typ Werte Int Ganze Zahlen Integer Ganze Zahlen, unbeschränkte Stelligkeit Float Fliesskommazahlen 32 bit Double Fliesskommazahlen 64 bit Bool Wahrheitswerte, True/False Char Zeichen, a, b,... String Zeichenketten Int -> Int,... Funktionen Quicksort Snippets
Int vs. Integer 1 > fakint :: Int - > Int 2 > fakint 0 = 1 3 > fakint n = n * fakint ( n -1) Fak> fakint 20-2102132736 in Quicksort Snippets 1 > fakinteger :: Integer - > Integer 2 > fakinteger 0 = 1 3 > fakinteger n = n * fakinteger ( n -1) Fak> fakinteger 20 2432902008176640000
Listen Unendliche Listen: Hugs> [1..] [1,2,3,4,5,6,7,8,9,10,11, in Quicksort Snippets
Listen Unendliche Listen: Hugs> [1..] [1,2,3,4,5,6,7,8,9,10,11, Die ersten 4 natürlichen Zahlen: in Quicksort Snippets Hugs> take 4 [1..] [1,2,3,4] Hugs> [1..4]
Listen Unendliche Listen: Hugs> [1..] [1,2,3,4,5,6,7,8,9,10,11, Die ersten 4 natürlichen Zahlen: in Quicksort Snippets Hugs> take 4 [1..] [1,2,3,4] Hugs> [1..4] Strings sind auch Listen: Hugs> reverse "Hello World" "dlrow olleh"