Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

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

Ähnliche Präsentationen


Präsentation zum Thema: "Matthias Spohrer · TU München Modul Ablaufmodellierung 2. Präsenzveranstaltung – 13.03.2003 – TU Stammgelände Innenstadt Nachqualifizierungskurs für Informatiklehrkräfte."—  Präsentation transkript:

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

2 © 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

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

4 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?

5 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.

6 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

7 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:00101011 00000110 11010101 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

8 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

9 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

10 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)

11 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

12 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

13 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!

14 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

15 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

16 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

17 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

18 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

19 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 {... }

20 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

21 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.

22 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

23 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.

24 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)

25 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!

26 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

27 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 = 1 + 3 // y = 2 +7 (4, 9, 7)

28 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!

29 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.

30 Nachqualifizierungskurs für Informatiklehrkräfte © 2003 Matthias Spohrer · TU München Seite 30 Quicksort(a, links, rechts) 314280985314280985 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=8 314280985 i=0j=8 while a[i] < x do inc(i) i=2 314280985 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 314880925 i=2j=7 od a:=

31 Nachqualifizierungskurs für Informatiklehrkräfte © 2003 Matthias Spohrer · TU München Seite 31 Quicksort(a, links, rechts) 314280985 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 314880925 i=2j=7 314880925 i=3 j=5 310884925 i=3 310884925 i=4, j=4 od Wähle mittleres Element z.B. x = a[(links+rechts) div 2] Oder x=4

32 Nachqualifizierungskurs für Informatiklehrkräfte © 2003 Matthias Spohrer · TU München Seite 32 Quicksort(a, links, rechts) 314280985 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 310884925 j=3i=4 310884925 i=4, j=4 od 310884925 Quicksort(links, j)Quicksort(i, rechts) Wähle mittleres Element z.B. x = a[(links+rechts) div 2] Oder x=4

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

34 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.

35 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:

36 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.

37 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.

38 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.

39 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 http://cvs.haskell.org/Hugs/pages/downloading.htm 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. http://cvs.haskell.org/Hugs/pages/downloading.htmhugs98-Nov2002.msi 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!): http://www.cse.ogi.edu/PacSoft/projects/Hugs/downloads/Hugs98install. exe http://www.cse.ogi.edu/PacSoft/projects/Hugs/downloads/Hugs98install. exe

40 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

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


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

Ähnliche Präsentationen


Google-Anzeigen