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

Ähnliche Dokumente
WS 2012/2013. Robert Giegerich. October 9, 2012

WS 2011/2012. Georg Sauthoff 1. November 10, 2011

Programmieren in Haskell Einführung

Algorithmen und Datenstrukturen. und. Programmieren in Haskell

Programmieren in Haskell Einführung

III.1 Prinzipien der funktionalen Programmierung - 1 -

Stichworte zur Ideengeschichte der Programmiersprachen

Gliederung. n Teil I: Einleitung und Grundbegriffe. n Teil II: Imperative und objektorientierte Programmierung

n 1. Der Begriff Informatik n 2. Syntax und Semantik von Programmiersprachen - 1 -

1. Grundkonzepte der logischen Programmierung 2. Syntax von Prolog 3. Rechnen in Prolog. IV.1 Grundkonzepte der logischen Programmierung - 1 -

n 1. Grundkonzepte der logischen Programmierung n 2. Syntax von Prolog n 3. Rechnen in Prolog IV.1 Grundkonzepte der logischen Programmierung - 1 -

Übung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++, 1. Teil

1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen - 1 -

1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen - 1 -

Übung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++, 1. Teil

Grundlagen Internet-Technologien. Clientseitige Web-Programmierung

1. Einführung Programmieren / Algorithmen und Datenstrukturen 1 Prof. Dr. Bernhard Humm FB Informatik, Hochschule Darmstadt

WS 2011/2012. Georg Sauthoff November 2011

WS 2011/2012. Robert Giegerich. October 17, 2012

7. Einführung in C++ Programmieren / Algorithmen und Datenstrukturen 1 Prof. Dr. Bernhard Humm FB Informatik, Hochschule Darmstadt

Bru ckenkurs Programmieren

Programmieren in C. Eine Einführung in die Programmiersprache C. Prof. Dr. Nikolaus Wulff

Programmiersprachen. Organisation und Einführung. Berthold Hoffmann. Studiengang Informatik Universität Bremen

Grundlegende Datentypen

Grundlegende Datentypen

2. JAVA-Programmierung. Informatik II für Verkehrsingenieure

EINFÜHRUNG IN DIE PROGRAMMIERUNG

Technische Informatik I - HS 18

Haskell for Hackers... or why functional programming matters

Inhalt. n Algorithmus. n Euklidscher Algorithmus. n Sortieren. n Programmiersprachen. n Entwicklungsschritte eines Programms.

Grundlegende Datentypen

Programmiersprachen: Klassifizierung und Methoden. Programmier-Paradigmen. Grundlagen der Programmierung 2 (1.C) - 1 -

Angewandte Mathematik und Programmierung

Funktionale Programmiersprachen

Funktionale Programmierung Grundlegende Datentypen

Inhaltsverzeichnis I Grundlagen...1 II Programmieren in C/C

Programmieren I. Methoden-Special Heusch --- Ratz 6.1, Institut für Angewandte Informatik

ALP I Geschichtliche Einführung in die Programmiersprachen

2. Programmierung in C

Introduction to Python. Introduction. First Steps in Python. pseudo random numbers. May 2016

Mul$media im Netz Wintersemester 2012/13. Übung 01

II. Grundlagen der Programmierung. Beispiel: Merge Sort. Beispiel: Merge Sort (Forts. ) Beispiel: Merge Sort (Forts. )

Inhalt. Einführung in die Strukturierte Programmierung 15

Einführung in die Programmierung

Einführung in Haskell und seine Werkzeuge

1.3 Geschichte der Programmiersprachen

Computergrundlagen Turingmaschinen und Programmierung

Dynamische Webseiten mit PHP. Oder: LAMP - The open way

(Building) Flexible Functional Programming Interfaces. Von Amos Treiber

Anwendungen der Logik: Deklarative bzw. Logik-Programmierung in PROLOG

Informatik für Mathematiker und Physiker Woche 7. David Sommer

Python Zahlen, Strings Logik Kontrollstrukturen. Scriptsprachen. Python Basics. Sascha Winter

EIGENSCHAFTEN VON SPRACHEN

Erste Java-Programme (Scopes und Rekursion)

Algorithmik und Programmieren

6. Funktionen, Parameterübergabe

Einführung in die Programmierung mit Go

Organisatorisches/Einstieg

Programmieren in Haskell

Intensivübung zu Algorithmen und Datenstrukturen

Programmieren in Haskell

Hallo Haskell. Funktionale Programmierung. Prof. Dr. Oliver Braun Letzte Änderung: :06. Hallo Haskell 1/23

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

Programmier-Befehle - Woche 08

Kapitel 2: Grundelemente der Programmierung

Kapitel 1: Einleitung. Gliederung. Zum Begriff Informatik Zum Begriff Algorithmus Zum Begriff Programmieren

Einführung in die Funktionale Programmierung

Informatik I - Programmierung Globalübung Hugs98 Currying. Hugs98 Currying

Hallo Haskell. (Funktionale Programmierung) Prof. Dr. Oliver Braun. Letzte Änderung: :08. Hallo Haskell 1/23

2. Programmierung in C

1 Bedingte Anweisungen. 2 Vergleiche und logische Operatoren. 3 Fallunterscheidungen. 4 Zeichen und Zeichenketten. 5 Schleifen.

Prof. Dr. Jürgen Giesl Lehr- und Forschungsgebiet Informatik 2. Proseminar - 1 -

Computergrundlagen Programmiersprachen, Interpreter, Compiler, Linker

Grundlagen der Programmierung 2 (1.A)

Computerphysik II. Python Einführung. S. Gerlach. WiSe S. Gerlach Computerphysik II

Programmieren I. Methoden-Spezial Heusch --- Ratz 6.1, Institut für Angewandte Informatik

Algorithmen und Datenstrukturen (für ET/IT)

Teil III. Objektorientierung und SW-Entwicklung

Computergrundlagen Programmiersprachen, Interpreter, Compiler, Linker

2. Einführung. Informatik II für Verkehrsingenieure

Effektiv Programmieren in С und C++

Grundlagen der Informatik 0

Programmiersprachen Pascal, Modula-2, Oberon. Charlotte Prieß

Praktische Informatik 3

Grundlagen der Programmierung in C++ Arrays und Strings, Teil 1

Programmieren in Haskell Einstieg in Haskell

EINI WiMa. Einführung in die Informatik für Naturwissenschaftler und Ingenieure. Vorlesung 2 SWS WS 11/12

EINFÜHRUNG IN DIE PROGRAMMIERUNG

2 Programmieren in Java I noch ohne Nachbearbeitung

Programm heute. Algorithmen und Datenstrukturen (für ET/IT) Definition Algorithmus. Wie beschreibt man Algorithmen?

Einführung in die Programmierung

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

Einführung in die Programmierung

Einführung Datentypen Verzweigung Schleifen. Java Crashkurs. Kim-Manuel Klein May 4, 2015

SmallTalk - Eine kurze Einführung

Software Entwicklung 1

1953/54 (USA) PS FORTRAN (FORmula TRANslating system) 1958/60 (Europa) ALGOL (ALGOrithmic Language)

Transkript:

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"