Matthias Spohrer · TU München Modul Ablaufmodellierung 2. Präsenzveranstaltung – 13.03.2003 – TU Stammgelände Innenstadt Nachqualifizierungskurs für Informatiklehrkräfte.

Slides:



Advertisements
Ähnliche Präsentationen
Blue J.
Advertisements

Algorithmentheorie 08 – Dynamische Programmierung (1)
Imperative Programmierung
Rekursion: Rekurrenz: Algorithmen rufen sich selbst (rekursiv) auf.
Falls Algorithmen sich selbst rekursiv aufrufen, so kann ihr Laufzeitverhalten bzw. ihr Speicherplatzbedarf in der Regel durch eine Rekursionsformel (recurrence,
Einführung in die Programmierung Zusammenfassung
Zusammenfassung der Vorwoche
3. Kapitel: Komplexität und Komplexitätsklassen
10. Grundlagen imperativer Programmiersprachen
5. Sortier-Algorithmen Vorbemerkungen:
Puck eine visuelle Programmiersprache für die Schule
(kleine!) Java Einführung Mittwoch, Heute Ziel: erstes Java-Programm erstellen Von der Aufgabenstellung bis zur Lösung Grundlagen Einfache.
Christos, Kornelia, Jan Christos, Kornelia, Jan Entwicklungsumgebung Versteht unseren Java Programm Code Versteht unseren Java Programm.
Christos, Kornelia, Jan Christos, Kornelia, Jan Entwicklungsumgebung Versteht unseren Java Programm Code Versteht unseren Java Programm.
Christos, Kornelia, Jan Christos, Kornelia, Jan Entwicklungsumgebung Versteht unseren Java Programm Code Versteht unseren Java Programm.
Paul, Morten, Yannick Blue J. Entwicklungsumgebung versteht Java Programmcode versteht Java Programmcode Für die Entwicklung eigener Software.
Java: Objektorientierte Programmierung
Sortierverfahren Richard Göbel.
Java: Dynamische Datentypen
Sortierverfahren Richard Göbel.
Strukturen. In einer Struktur kann eine beliebige Anzahl von Komponenten (Daten) mit unterschiedlichen Datentypen (im Gegensatz zu Feldern) zusammengefaßt.
Dynamische Programmierung (2) Matrixkettenprodukt
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Prof. Dr. Th. Ottmann.
WS Algorithmentheorie 01 – Divide and Conquer (Segmentschnitt) Prof. Dr. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Tobias Lauer.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Prof. Dr. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen Halbzeit: Was haben wir bisher gelernt? Prof. Th. Ottmann.
WS Algorithmentheorie 08 – Dynamische Programmierung (2) Matrixkettenprodukt Prof. Dr. Th. Ottmann.
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 2 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.
WS 06/07 Algorithmentheorie 01 - Einleitung Prof. Dr. Th. Ottmann Tobias Lauer.
Geometrisches Divide and Conquer
Fakten, Regeln und Anfragen
Universität Dortmund, Lehrstuhl Informatik 1 EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 7 Claudio Moraga, Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
Imperative Programmierung
PKJ 2005/1 Stefan Dissmann Zusammenfassung Vorwoche Methoden sind mit einem Namen versehene Programmabschnitte besitzen Rückgabetyp, Namen, Parameterliste.
Programmierung 1 - Repetitorium WS 2002/2003 Programmierung 1 - Repetitorium Andreas Augustin und Marc Wagner Homepage:
Matthias Spohrer · TU München 8. Präsenzveranstaltung – TU Stammgelände Innenstadt Nachqualifizierungskurs für Informatiklehrkräfte.
Nachqualifizierungskurs für Informatiklehrkräfte
Marcus Haller & René Schulze
Objektorientierte Modellierung
University of Applied Sciences Übung Objektorientierte Programmierung II Dipl.-Inf. (FH) Markus Vogler.
LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
Entwicklung der Programmiersprachen
BIT – Schaßan – WS 02/03 Basisinformationstechnologie HK-Medien Teil 1, 11.Sitzung WS 02/03.
Polynome und schnelle Fourier-Transformation
Einführung in die Programmierung
Kompetenz -, Lern - und Prüfungsbereiche Anforderungsbereiche
2.4 Rekursion Klassifikation und Beispiele
Programmieren in C Einführung
1. Entwicklungsumgebung 2. Kontextmenü 3. Compile 4. Objekt 5. Attribut 6. Klasse 7. Deklaration 8. Intialisierung.
Programmiersprachen Proseminar Grundlagen wissenschaftlichen Arbeitens
Grundlagen Wissenschaftlichen Arbeitens Hilal Tekoglu
MODULA-2.
Agenda für heute, 7. April, 2005 Bedingte ProgrammausführungBedingte Programmausführung Algorithmische Grundlagen Vergleichsoperatoren, Wahrheitswerte.
Agenda für heute, 14. April, 2005 Wiederholte ProgrammausführungWiederholte Programmausführung Algorithmische Grundlagen Bedingungen zum Abbruch von Programmschleifen.
PHP: Operatoren und Kontrollstrukturen
Paul, Morten, Yannick Blue J. Entwicklungsumgebung  versteht Java Programmcode  Für die Entwicklung eigener Software  Durch die Programmierung.
Analyse der Laufzeit von Algorithmen
Agenda für heute, 21. April, 2005 Interaktion mit Pascal-ProgrammenInteraktion mit Pascal-Programmen Dateneingabe Programmsteuerung Debugging Datentypen:
Inhalt Einordnung und Funktion der lexikalische Analyse Grundlagen
2 Grundlagen In diesem Abschnitt werden die Grundbegriffe und Methoden der Theorie der formalen Sprachen und der Automaten wiederholt, soweit diese ben.
Paul, Morten, Yannick Blue J. Entwicklungsumgebung  versteht Java Programmcode  Für die Entwicklung eigener Software  Durch die Programmierung.
Objektorientierte (OO) Programmierung
Software-Entwicklung
Dr. Wolfram Amme, Semantik funktionaler Programme, Informatik II, FSU Jena, SS Semantik funktionaler Programme.
Objektorientierte Programmierung §Klassen §Objekte §Attribute §Eigenschaften §Methoden §Datenkapselung §Ereignisse §Vererbung §Entwicklungszeit §Laufzeit.
 Präsentation transkript:

Matthias Spohrer · TU München Modul Ablaufmodellierung 2. Präsenzveranstaltung – – TU Stammgelände Innenstadt Nachqualifizierungskurs für Informatiklehrkräfte

© 2003 Matthias Spohrer · TU München Seite 2 Inhaltsübersicht Informationen Überblick über Programmiersprachen Vergleich Imperativ - Funktional Wiederholung: Grundstrukturen Imperativer Programme Call-by-value / Call-by-reference Der Quicksort Einführung in die funktionale Programmierung: Haskell

Nachqualifizierungskurs für Informatiklehrkräfte © 2003 Matthias Spohrer · TU München Seite 3 Infos - Präsenztage Donnerstag, UhrHS 0670 Funktionale Modellierung Dienstag, UhrHS 1601 OOM Mittwoch, UhrHS 1601 OOM Montag, *15(?)-18 Uhr* HS 0220 Auf Wunsch, zur Klausur Donnerstag, UhrHS 0220 Klausur *ob und ab wann dieser Präsenztag stattfinden soll, werden wir jetzt gemeinsam ausmachen. Außerdem eine Abschlussveranstaltung im Juli.

Nachqualifizierungskurs für Informatiklehrkräfte © 2003 Matthias Spohrer · TU München Seite 4 Sonstiges / Infos / Aussprache Dienstag Präsenztag nächstes Schuljahr: wie angekündigt Dienstag Fehlende Stammblätter / Einverständniserklärungen bitte umgehend abgeben!!!!! Auffälligkeiten zu den Korrekturen Anmerkungen / Wünsche / Fragen zum aktuellen Material... Unterschied Felder – Verbund – Liste?

Nachqualifizierungskurs für Informatiklehrkräfte © 2003 Matthias Spohrer · TU München Seite 5 Kleine Aufwärmübung Staatsexamen Herbst 2000, Thema II, Aufgabe 1 Geben Sie Zustandsdiagramme für deterministische endliche Automaten für die folgenden Sprachen an. a) Die Menge der Wörter w {a,b}*,deren Länge |w| entweder durch 2 oder durch 3 teilbar ist.

Nachqualifizierungskurs für Informatiklehrkräfte © 2003 Matthias Spohrer · TU München Seite 6 Falls der Wert von a größer als 0 ist, erhöhe a um 1 Kontext: Datentyp von a Syntax Aufbau der (zulässigen) Programmtexte Definition durch eine Grammatik Semantik Bedeutung der Syntax unter Berücksichtigung des Kontextes Unterscheidung Beispiel: if (a > 0) a = a + 1; Programmiersprachen Einteilung der Programmiersprachen in niedere Programmiersprachen höhere oder problemorientierte Programmiersprachen

Nachqualifizierungskurs für Informatiklehrkräfte © 2003 Matthias Spohrer · TU München Seite 7 Niedere Programmiersprachen Maschinensprache: Darstellung der Befehle durch Binärcode Vorteil: direkte Ausführung durch den jeweiligen Prozessor, damit schnell Nachteil: prozessorabhängig für den Menschen nicht verständlich Beispiel: Assemblersprache: Darstellung der Maschinenbefehle durch mnemonische Symbole Vorteil: leichter verständlich Nachteil: prozessorabhängig, Übersetzung in Maschinensprache notwendig Beispiel:move 9 A( A Akkumulator = spezieller Speicher) add 10 A

Nachqualifizierungskurs für Informatiklehrkräfte © 2003 Matthias Spohrer · TU München Seite 8 Höhere Programmiersprachen Sprachen zur Formulierung einer Problemlösung Man unterscheidet: imperative Programmiersprachen objektorientierte Programmiersprachen funktionale Programmiersprachen logische (prädikative) Programmiersprachen Anfragesprachen für Datenbanken, z.B. SQL Internetsprachen, z.B. HTML, XML Entwurfs- und Spezifikationssprachen, z.B. UML Klassische Einteilung, orientiert am vorliegenden Denkschema

Nachqualifizierungskurs für Informatiklehrkräfte © 2003 Matthias Spohrer · TU München Seite 9 Imperative Programmiersprachen Grundprinzipien: + Anwendung bei algorithmischen Problemen (festgelegte Folge von Anweisungen) + Variablenkonzept Beispiele: Basic, Pascal, C Programmbeispiel: Sortier-Algorithmen Grundlagen der Programmierung im Studienmaterial betrachtet Java als imperative Programmiersprache

Nachqualifizierungskurs für Informatiklehrkräfte © 2003 Matthias Spohrer · TU München Seite 10 Funktionale Programmiersprachen Grundprinzipien: + Programm = Funktion, die sich aus anderen Funktionen zusammensetzen kann + wichtigstes Konstruktionsprinzip: Rekursion + keine Variablen (= benannter Speicherplatz) Beispiele: Gofer / Haskell, LISP / Scheme Programmbeispiel:in Gofer / Haskell: quadrat::Int -- > Int quadrat n = n * n binom:: (Int, Int) --> Int binom n m = quadrat(n) + 2 * n * m + quadrat(m) Aufruf z.B. mit binom(2,3)

Nachqualifizierungskurs für Informatiklehrkräfte © 2003 Matthias Spohrer · TU München Seite 11 Logische Programmiersprachen Grundprinzipien: Formulierung des eigenen Wissens in Form einer Menge von Regeln Computer versucht mit Hilfe der Regeln, selbstständig eine Lösung zu finden Beispiele: PROLOG Programmbeispiel: in PROLOG Heiratsbeziehung: verheiratet(Mann, Frau) Regeln: verheiratet(Heinz, Klara). verheiratet(Klaus, Maria). ?verheiratet(Heinz, Klara) yes ?verheiratet(Klaus, Frau) Frau = Maria

Nachqualifizierungskurs für Informatiklehrkräfte © 2003 Matthias Spohrer · TU München Seite 12 Objektorientierte Programmiersprachen Grundprinzipien: Objekte mit Eigenschaften und Operationen Klassenbildung Vererbung Polymorphie Dynamische Bindung Beispiele: C++, Java, Delphi (mit Einschränkungen) Programmbeispiel: Kontenverwaltung bei einer Bank -> OOM - Modul

Nachqualifizierungskurs für Informatiklehrkräfte © 2003 Matthias Spohrer · TU München Seite 13 Zusammenfassung Viele Sprachen benutzen auch Konzepte anderer Sprachgruppen. Beispiel: Verwendung von Konzepten imperativer Sprachen in Java bei der Programmierung von Methoden. Es gibt keine beste Programmiersprache Die Wahl der Sprache ist abhängig vom zu lösenden Problem!

Nachqualifizierungskurs für Informatiklehrkräfte © 2003 Matthias Spohrer · TU München Seite 14 Imperative und funktionale Programmierspr. FunktionalImperativ Grundprinzip Funktionales Programm = Term, in dem selbstdefinierte Funktionen vorkommen können Zustand A (= Speicherbelegung) Zustand B (= neue Speicherbel.) Imperatives Programm = Folge von Zustandskombinationen der betroffenen Variablen Variablen als benannter Container zur Aufnahme eines Wertes (eines be- stimmten Typs ) NeinJa Problem: Seiteneffekt, verstanden als. unerwünschte, nichtbeobach- tete Änderung einer Variablen ( Abschnitt Felder im Material) BedingungsanweisungJa WiederholungsanweisungNein, Steuerung über RekursionJa Besondere Eignung fürrekursive DatenstrukturenAlgorithmen Anweisung

Nachqualifizierungskurs für Informatiklehrkräfte © 2003 Matthias Spohrer · TU München Seite 15 Modellierung von Abläufen Möglichkeiten, Abläufe zu beschreiben Aktionsstrukturen Zustandsmodell Algorithmische Modelle

Nachqualifizierungskurs für Informatiklehrkräfte © 2003 Matthias Spohrer · TU München Seite 16 Modellierung von Algorithmen Verwendung von Kontrollflussdiagrammen Aktivitätsdiagramme Struktogrammen Lehrplan trifft bzgl. der Modellierungsmethode keine Festlegung! An den Schulen in der Regel Verwendung von Struktogramme

Nachqualifizierungskurs für Informatiklehrkräfte © 2003 Matthias Spohrer · TU München Seite 17 Algorithmisches Problemlösen Diese Vorgehensweise wird oft Strukturierte Programmentwicklung oder Top – Down – Entwicklung oder Prinzip der schrittweisen Verfeinerung genannt. 1.Zerlegung des vorgegebenen Problems in Teilprobleme und die Beziehungen zwischen diesen Teilproblemen ( Schnittstellen) 2.Wiederholung von Schritt 1, angewendet auf die Teilprobleme, bis man kleinste Teilprobleme hat, die ohne weitere Zerlegung gelöst werden können. Zur Lösung dieser kleinsten Teilprobleme sind nur eine geringe Zahl unterschiedlicher Grundstrukturen nötig. 3.Zusammensetzung der Teilproblemlösungen führt zur Lösung des Ausgangsproblems

Nachqualifizierungskurs für Informatiklehrkräfte © 2003 Matthias Spohrer · TU München Seite 18 Algorithmisches Problemlösen HAUPTPROGRAMMHAUPTPROGRAMM Daten Code Prozedur 1 Daten Code Prozedur 2 Daten Code Prozedur 3 Daten 2 Daten 3 Daten 4 Daten 5 Daten 1

Nachqualifizierungskurs für Informatiklehrkräfte © 2003 Matthias Spohrer · TU München Seite 19 Grundstrukturen und Darstellung in Struktogrammen I... Einfache Anweisung... Sequenz von Anweisungen Bool. Ausdruck wahr falsch Einseitige Bedingungsanweisung... Prozeduraufruf IF Boolscher Ausdruck {... } Bool. Ausdruck wahr falsch Zweiseitige Bedingungsanweisung IF Boolscher Ausdruck {... } ELSE {... }

Nachqualifizierungskurs für Informatiklehrkräfte © 2003 Matthias Spohrer · TU München Seite 20 Mehrseitige Bedingungsanweisung Ausdruck w1w2 w3 SWITCH Ausdruck { case w1:.... case w2:.... case w3:.... } Solange Wiederholung mit Anfangsbedingung wdh. WHILE (bool. Ausdruck) {... } bis Wiederholung mit Endbedingung wdh. DO {... } WHILE (bool. Ausdruck) Von... bis... Wiederholung mit Zähler wdh. FOR (i = 1; i < 3, i = i+1) {... } Grundstrukturen und Darstellung in Struktogrammen II

Nachqualifizierungskurs für Informatiklehrkräfte © 2003 Matthias Spohrer · TU München Seite 21 Problem von Struktogrammen in der Schule Bei Betrachtung von einfacheren Problemen wirken Struktogramme oft (vor allem) für Schüler überdimensioniert, in der Regel reicht hier meist Pseudocode. Bei komplexen Problemen sind Struktogramme unübersichtlich, schwierig wartbar. Man muss bereits am Anfang wissen, wie das ganze Struktogramm ausschaut.

Nachqualifizierungskurs für Informatiklehrkräfte © 2003 Matthias Spohrer · TU München Seite 22 Schwierigkeiten beim algorith. Problemlösen Trotz Strukturierung muss der Problemlösende das Gesamtkonzept erkennen und bei jedem Teilalgorithmus die Zweckdienlichkeit für die Gesamtlösung bedenken Nachträgliche Änderung der Daten erfordert eine aufwendige Überarbeitung aller darauf operierenden Teilalgorithmen

Nachqualifizierungskurs für Informatiklehrkräfte © 2003 Matthias Spohrer · TU München Seite 23 Compiler / Interpreter Compiler: Ein Programm, das Programme aus einer Sprache A (Quellsprache) in eine Sprache B (Zielsprache) übersetzt.(lexikalische, syntaktische, semantische Analyse) Nach dieser Übersetzung kann das Programm ausgeführt werden. Interpreter: Ein Programm, das ein Programm aus einer Sprache A Anweisung für Anweisung (nach der notwendigen lexikalischen und syntaktischen Analyse) sofort ausführt.

Nachqualifizierungskurs für Informatiklehrkräfte © 2003 Matthias Spohrer · TU München Seite 24 Compiler / Interpreter Vorteil Interpreter: - sind einfacher zu konstruieren - schneller im Dialogbetrieb, beim Testen, Nachteil Interpreter: - längere Rechenzeit bei der kompletten Ausführung (jeder Befehl, der mehrfach ausgeführt wird, muss mehrfach übersetzt werden; bei jeder Zuweisung müssen die Adressen der Variablen gesucht werden)

Nachqualifizierungskurs für Informatiklehrkräfte © 2003 Matthias Spohrer · TU München Seite 25 Kleine Zwischenübung Versuchen Sie sich kurz an Aufgabe 6! Programm dazu! Programm dazu!

Nachqualifizierungskurs für Informatiklehrkräfte © 2003 Matthias Spohrer · TU München Seite 26 Staatsexamen Frühjahr 1996, Aufgabe 5 Erklären und vergleichen Sie die Aufrufprinzipien Call-by-value und Call- by-reference

Nachqualifizierungskurs für Informatiklehrkräfte © 2003 Matthias Spohrer · TU München Seite 27 Call-by-value Call-by-value: Wertparameter Es wird beim Prozeduraufruf nur der Wert des aktuellen Parameters als Kopie übergeben, nicht jedoch der Name (die ganze Schachtel) oder die Speicheradresse procedure cbv(x, y, z: integer); begin x := x + 3; y := y + z; output(x,y,z); end; a := 1; b := 2 cbv(a, b, 7); Es bleibt a=1, b=2; 1 27 // x = // y = 2 +7 (4, 9, 7)

Nachqualifizierungskurs für Informatiklehrkräfte © 2003 Matthias Spohrer · TU München Seite 28 Call-by-value / Call-by-reference Call-by-reference: Referenzparameter Die Prozedur arbeitet unmittelbar mit den aktuellen Parametern und nicht nur auf Kopien der Werte procedure cbr(var x, y, z: integer); begin x := x + 3; y := y + z; end; a := 1; b := 2 cbr(a, b, 7); Zuerst ist a:=a+3, also a=4 Dann ist b:=b+7=9 Also ist a=4, b=9; 127 Test hier! Test hier!

Nachqualifizierungskurs für Informatiklehrkräfte © 2003 Matthias Spohrer · TU München Seite 29 Der Quicksort Schnelles internes Sortierverfahren 1962 von C. Hoare vorgeschlagen Divide-and-conquer-Verfahren (Teile und herrsche) Divide-and-conquer-Verfahren (Teile und herrsche) Divide: Das Problem wird in mehrere möglichst gleichgroße Teilprobleme gleicher Art aufgespalten, die unabhängig voneinander gelöst werden Conquer: Die Teillösungen werden zu einer Lösung des Gesamtproblems zusammengesetzt Quicksort gilt als schnellstes internes Sortierverfahren mit durchschnittlicher Laufzeit von n*log(n) ( nächstes Jahr!) Quicksort(a, links, rechts) Quicksort(a, links, rechts) soll eine Liste a von Elementen innerhalb der Grenzen links und rechts sortieren.

Nachqualifizierungskurs für Informatiklehrkräfte © 2003 Matthias Spohrer · TU München Seite 30 Quicksort(a, links, rechts) Wähle mittleres Element z.B. x = a[(links+rechts) div 2] Oder x=4 x = 4 i = links, j = rechts while i <= j do links=0rechts= i=0j=8 while a[i] < x do inc(i) i= while a[j] > x do dec(j) i=2 j=8 j=7 If i <= j then vertausche a[i] und a[j] inc(i), dec(j) fi i=2j=7 od a:=

Nachqualifizierungskurs für Informatiklehrkräfte © 2003 Matthias Spohrer · TU München Seite 31 Quicksort(a, links, rechts) i = links, j = rechts while i <= j do links=0rechts=8 while a[i] < x do inc(i) while a[j] > x do dec(j) if i <= j then vertausche a[i] und a[j] inc(i), dec(j) fi i=2j= i=3 j= i= i=4, j=4 od Wähle mittleres Element z.B. x = a[(links+rechts) div 2] Oder x=4

Nachqualifizierungskurs für Informatiklehrkräfte © 2003 Matthias Spohrer · TU München Seite 32 Quicksort(a, links, rechts) i = links, j = rechts while i <= j do links=0rechts=8 while a[i] < x do inc(i) while a[j] > x do dec(j) if i <= j then vertausche a[i] und a[j] inc(i), dec(j) fi j=3i= i=4, j=4 od Quicksort(links, j)Quicksort(i, rechts) Wähle mittleres Element z.B. x = a[(links+rechts) div 2] Oder x=4

Nachqualifizierungskurs für Informatiklehrkräfte © 2003 Matthias Spohrer · TU München Seite 33 Aufgabe Setze den Algorithmus in java um! MattsQuickSort.java

Nachqualifizierungskurs für Informatiklehrkräfte © 2003 Matthias Spohrer · TU München Seite 34 Einführung in HASKELL – Über Haskell Haskell ist eine rein funktionale Programmiersprache, ziemlich verschieden von anderen bekannten Programmiersprachen. Die Sprache ist benannt nach Haskell Brooks Curry, dessen Arbeit in mathematischer Logik ein Grundbaustein f ü r die funktionalen Programmiersprachen war. Haskell basiert auf dem Lambda Kalk ü l deshalb wird das Lambda als Logo verwendet.

Nachqualifizierungskurs für Informatiklehrkräfte © 2003 Matthias Spohrer · TU München Seite 35 Einführung in HASKELL – funktionales Programmieren Ein funktionales Programm besteht aus einem einzelnen Ausdruck, der ausgeführt wird indem er berechnet wird: Bsp.: Tabellenkalkulation: man definiert den Inhalt einer Zelle in Abhängigkeit von den anderen Zellen. Im Mittelpunkt steht das, 'was' berechnet wird und nicht 'wie' es berechnet wird. Beispiele:

Nachqualifizierungskurs für Informatiklehrkräfte © 2003 Matthias Spohrer · TU München Seite 36 Einführung in HASKELL – funktionales Programmieren Beachte: Reihenfolge, in welcher die Zellen berechnet werden sollen, wird nicht festgelegt Tabellenkalkulation soll die Zellen unter Berücksichtigung ihrer Abhängigkeiten berechnen Keine Vorgabe der Speicherzuteilung Tabellenkalkulation stellt eine unendliche Ebene von Zellen bereit und weist nur den gerade benutzten Zellen einen Speicherplatz zu Inhalt einer Zelle wird durch einen Ausdruck festgelegt (dessen Teile in beliebiger Reihenfolge berechnet werden können) und nicht durch eine Folge von Befehlen welche den Wert berechnen.

Nachqualifizierungskurs für Informatiklehrkräfte © 2003 Matthias Spohrer · TU München Seite 37 Einführung in HASKELL Eine interessante Konsequenz aus der unbestimmten Reihenfolge der Berechnung in der Tabellenkalkulation ist, dass der Begriff Anweisung nicht mehr n ü tzlich ist. Wenn man nicht wei ß, wann genau die Anweisung ausgef ü hrt wird, kann man keinen Nutzen daraus ziehen! Dies steht im krassen Gegensatz zu Programmen in herk ö mmlichen Programmiersprachen wie C oder PASCAL, welche notwendigerweise aus einer sorgf ä ltig festgelegten Folge von Anweisungen bestehen, oder Java, in welcher die Reihenfolge der Methodenaufrufe entscheidend f ü r die Bedeutung des Programms ist. Die Konzentration auf das 'was' (high-level, d.h. h ö herer Abstraktionsgrad), im Gegensatz zum 'wie' (low-level, d.h. niederer Abstraktionsgrad), ist das wesentliche Merkmal der funktionalen Programmiersprachen.

Nachqualifizierungskurs für Informatiklehrkräfte © 2003 Matthias Spohrer · TU München Seite 38 Einführung in HASKELL - SQL Eine andere fast-funktionale Sprache ist SQL. Eine SQL-Abfrage ist ein Ausdruck mit "projections, selections, joins". Die Abfrage bestimmt, welche Relation berechnet werden soll ohne zu sagen wie. Tatsächlich kann die Abfrage in jeder passenden Reihenfolge ausgewertet werden.

Nachqualifizierungskurs für Informatiklehrkräfte © 2003 Matthias Spohrer · TU München Seite 39 Installation HASKELL Hugs Wir verwenden einen Haskell-Interpreter namens Hugs. Diesen müsst ihr euch im Internet besorgen (etwa 2,7MB groß), er ist für alle Plattformen verfügbar. Ladet euch bitte unter die passenden Dateien herunter (für Windows wäre das hugs98-Nov2002.msi sowie falls gewünscht die beiden anderen msi-Dateien, entsprechende Dateien findet ihr dort auch für alle anderen Betriebssysteme. Ihr benötigt den MS Installer zum Ausführen, dieser ist jedoch in den neueren Windows-Systemen bereits integriert. Ansonsten könnt ihr ihn nachrüsten (link ebenfalls auf obiger homepage), oder auch folgende Alternative für ältere Windows- Systeme verwenden (diese habe ich jedoch nicht getestet!): exe exe

Nachqualifizierungskurs für Informatiklehrkräfte © 2003 Matthias Spohrer · TU München Seite 40 Demonstration zur Arbeit mit HASKELL Einfache Grundprozeduren Steuerungsoptionen Selbstdefinierte Funktionen Quicksort in HASKELL Starte Hugs Starte Hugs

Nachqualifizierungskurs für Informatiklehrkräfte © 2003 Matthias Spohrer · TU München Seite 41 Fragen ?