Termin 2: Grundlagen der Programmierung - lgorithmen Grundlagen der Informatik Wintersemester 2006 Prof. ernhard Jung Übersicht Folien im Web: http://www.informatik.tu-freiberg.de/lehre/pflicht/grundl/index_ws0607.html Einleitung Vom Programm zur Maschine Übersetzer (Compiler), Virtuelle Maschinen Vom Problem zum Programm (... nicht ganz!) Darstellung von lgorithmen mit Programmablaufplänen Darstellung von lgorithmen mit Struktogrammen Hauptlernziel: Darstellungsmittel verstehen, die es ermöglichen, lgorithmen unabhängig von konkreten Programmiersprachen zu formulieren 1
Wiederholung: lgorithmen, Programme, Programmiersprachen lgorithmus Problemlösungsbeschreibung, die festlegt, wie ein Problem gelöst werden soll unabhängig von konkreter Programmiersprache Programm Streng formalisierter, eindeutiger und detaillierter lgorithmus, der maschinell ausgeführt werden kann Programmiersprache Formalisierte Sprache zum Schreiben von lgorithmen, die ausgeführt werden sollen Klassen von Programmiersprachen: Maschinenorientierte Sprachen: Maschinencodes (1GL), ssemblersprachen (2GL) Problemorientierte Sprachen: prozedurale (3GL), bildschirmorientierte (4GL), deklarative (5GL) Sprachen funktionale, objektorientierte Sprachen Kommunikation Mensch-Maschine: vom Problem zum Maschinenprogramm Mensch? Computer Menschl. Tätigkeit Menschl. Tätigkeit ufgabe des Übersetzers (Compiler) Umgangssprache lgorithm. Sprache Programmiersprache Maschinensprache komplex mehrdeutig semiformal noch nicht vollständig detailliert exakter Formalismus meist genormt unabhäbgig von bestimmt. Prozessor primitiv abhängig vom jeweiligen Prozessor Problem lgorithmus Programm Maschinenprogramm 2
Was Computer verstehen: Maschinensprache LOD LOD #10,R0 #10,R0 ;; load loadspecial (register) (register) variable variable R0 R0 with with10 10 LOD LOD #12,R1 #12,R1 ;; load loadspecial (register) (register) variable variable R1 R1 with with12 12 SUM SUM R0, R0, R1 R1 ;; add addspecial specialvariables R0 R0 and and R1 R1 STOR STOR R1,#45 R1,#45 ;; store storethe theresult resultinto intomemory memorylocation #45 #45 ssembler maschinennahe Sprache Lesbarere Form der Maschinensprache (nweisungen entsprechen i.d.r. 1:1 den nweisungen in Maschinensprache) Darstellung von zulässigen itfolgen durch sog. Mnemoniks z.. efehl: Lade Wert in Register, Mnemonik: LOD, Maschinencode: 01 Maschinensprache kann von Prozessor verarbeitet werden für Menschen aber kaum verständlich, nur von Experten bearbeitet Maschinenprogramm = Folge von ytes 01 0100 0010 10 01 01 01 0112 12 02 0200 0001 01 03 0301 0145 45 Übersetzer (Compiler) Übersetzung von Programmen in problemorientierten Programmiersprachen zu Programmen in Maschinensprache Java C++ C# Fortan PC pple Sun Pascal Problem: m n Übersetzer notwendig! 3
Virtuelle Maschinen Ideale Situation "Ideale" Situation: gemeinsame virtuelle Maschine für alle Programmiersprachen und Plattformen nur m + n Übersetzer notwendig Java C++ C# Python PHP Virtuelle Maschine PC pple Sun Virtuelle Maschinen Real Existierende Situation Visual C++ Java Jython Java Virtuelle Maschine PC mit Intel Chip PC mit MD Chip pple Sun C# Visualasic TCL Microsoft.Net Common Language Runtime PC mit Intel Chip PC mit MD Chip 4
lgorithmen Ziel der rbeit mit dem Computer: Lösung von Problemen Problem gegeben: nfangszustand / Eingaben Menge von möglichen Operationen Endzustand / usgaben (zumindest im Prinzip bekannt / verifizierbar) natürlich-sprachl. eschreibung (auch: mehr oder weniger formale Spezifikation) lgorithmus allgemeiner Lösungsplan, der festlegt, wie man durch usführung von ktionen von einem gegebenen nfangszustand zu einem Endzustand gelangt (bzw. für gegebene Eingabe eine usgabe berechnet) lgorithmus soll möglichst für eine Klasse ähnlicher Probleme gültig sein z.. nicht nur ein bestimmtes ild invertieren sondern beliebige ilder invertieren eschreibung z.. durch Programmablaufpläne oder Struktogramme Darstellung von lgorithmen: Einfache nweisungen und Kontrollstrukturen nweisungen / ktionen einfache nweisungen / elementare ktionen Kontrollstrukturen / Steueranweisungen Sequenz / Folge uswahl / lternative / Selektion Wiederholung / Iteration ufruf anderer lgorithmen / lock / Unterprogramm Einfache nweisungen nweisung, evtl. mit Parametern x, y, z: ; (x); (x,y,z) Eingabe von Daten: Eingabe(x); Eingabe(x,y) Zuweisung von Daten: x=2; y=z; y=3+4; y=3+4*(5-6); z=f(x) usgabe von Daten: usgabe(x); usgabe(3); usgabe(x,z,4) 5
Einfache Datenstrukturen und usdrücke Einfache Datenstrukturen (später mehr davon) Ganze Zahlen ("integer"): 1, 2, 5, -100,... Reelle Zahlen ("float"): 0.1, 3.14, 10.0, -33.33,... Zeichenketten ("string"): "TU ergakademie Freiberg",... Listen: [1,2,3], ["eins", "zwei", drei"],... oolean: true, false Objekte (später)... usdrücke z.. zur erechnung von Zahlenwerten 2-4; 1/a; 5*(4-z/(1+y));... (a, y, z sind Variablen) z.. zur erechnung bool'scher Werte (edingungen) Gleichheit von zwei Werten: i == 5 Ungleichheit: x!= 10 größer, größer-oder-gleich, kleiner, kleiner-oder-gleich: a>1, a>=1, a<9, a<=9 Darstellung von lgorithmen: Programmablaufpläne Programmablaufpläne: graph-orientierte Darstellung Struktogramme: block-orientierte Darstellung nweisung (auch "Verarbeitung") usführung der nweisung Folge / Sequenz Erst nweisung 1 dann nweisung 2 1 2 6
Darstellung von lgorithmen: Programmablaufpläne lternative / uswahl ja nein Falls edingung dann nweisung 1 sonst nweisung 2 1 2 Mehrfache lternative: Falls edingung = W1: nweisung 1 W2: nweisung 2 sonst: nweisung 3 W1 W2 sonst 1 2 3 Darstellung von lgorithmen: Programmablaufpläne edingte Wiederholung (abweisend) ja nein Solange edingung wiederhole nweisung edingte Wiederholung (akzeptierend; nicht abweisend) Wiederhole nweisung solange edingung "Schleife" ja nein 7
Darstellung von lgorithmen: Programmablaufpläne lock-definition Definition lock N mit formalen Parametern P, Rumpf und Rückgabewert R N(P) R lock-ufruf: N(P) bzw. X = N ( P ) als nweisung N(P) mit oder ohne Zuweisung Ersetzen der formalen Parameter P durch die aktuellen Parameter barbeiten des Rumpfes (Parameter P können verwendet und verändert werden) Rückgabe des Ergebnisses R Sonstige Konstrukte eginn, Ende von lgorithmen STRT STOP eispiele Programmablaufplan Produktbildung Eine Folge von Zahlen soll eingegeben und miteinander multipliziert werden. Wird eine Null eingeben, wird das Produkt der bisherigen Zahlen ausgegeben. Ist das Produkt größer 1000, erfolgt statt der Multiplikation eine Fehlerausschrift. 8
eispiele Programmablaufplan Fakultätsfunktion Multiplikation aller natürlichen Zahlen von 1 bis n. Realisierung rekursiv als lock falls n == 0: Ergebnis 1 sonst (n>0): n! = n * (n-1)! Hauptprogramm Eingabe einer (natürlichen) Zahl n ufruf der Fakultätsfunktion für n usgabe des Ergebnisses Einschub: Terminierung von lgorithmen oft gefordert: Terminierung von lgorithmen STRT aber: z.t. nicht einfach nachprüfbar, ob lgorithmus terminiert z.. unbekannt, ob "ULM- lgorithmus" (rechts) für beliebige Eingaben terminiert Eingabe(n) n>1 ja n ungerade? ja nein nein STOP n = 3 n + 1 n = n div 2 9
Darstellung von lgorithmen: Struktogramme Programmablaufpläne: graph-orientiert Darstellung Struktogramme: block-orientierte Darstellung (Nassi & Shneidermann, 1973; DIN 66261) nweisung usführung der nweisung Folge / Sequenz Erst nweisung 1 dann nweisung 2 1 2 Darstellung von lgorithmen: Struktogramme lternative / uswahl Falls edingung dann nweisung 1 sonst nweisung 2 ja 1 nein 2 Mehrfache lternative: Falls edingung = W1: nweisung 1 W2: nweisung 2 sonst: nweisung 3 W1 1 W2 2 sonst 3 10
Darstellung von lgorithmen: Struktogramme edingte Wiederholung (abweisend) Solange edingung wiederhole nweisung edingte Wiederholung (akzeptierend; nicht abweisend) Wiederhole nweisung solange edingung Iteration über Sequenzen Für jedes Element x der Liste L wiederhole nweisung (auf das jeweilige x kann in jedem Schleifendurchgang zugegriffen werden) for x in L Darstellung von lgorithmen: Struktogramme lock-definition Definition lock N mit formalen Parametern P, Rumpf und Rückgabewert R N(P) R lock-ufruf: N(P) bzw. X = N ( P ) 11
eispiele Struktogramm Produktbildung Eine Folge von Zahlen soll eingegeben und miteinander multipliziert werden. Wird eine Null eingeben, wird das Produkt der bisherigen Zahlen ausgegeben. Ist das Produkt größer 1000, erfolgt statt der Multiplikation eine Fehlerausschrift. eispiele Struktogramm Fakultätsfunktion Multiplikation aller natürlichen Zahlen von 1 bis n. Realisierung rekursiv als lock falls n == 0: Ergebnis 1 sonst (n>0): n! = n * (n-1)! 12
eispiele Struktogramme Eingabe(filename) Invertierung von ildern Funktion makepicture erzeugt aus einem Dateinamen (String) eine interne Datenstruktur (Matrix von Pixeln) zur Repräsentation eines ildes Funktion getpixels erzeugt für das als Parameter übergebene ild eine Liste mit allen Pixeln des ildes picture = makepicture(filename) for pixel in getpixels(picture) r = getred(pixel) g = getgreen(pixel) b = getlue(pixel) setred(pixel, 255 - r) setgreen(pixel, 255 - g) setlue(pixel, 255 b) show(picture) 13