Vom Algorithmus zum Programm Menschen und Maschinen Spezifikation Maschinenorientierte Präzisierung Präzisierung von Daten- und Anweisungskonstruktoren Programm und Programmiersprache Syntax und Semantik
Menschen und Maschinen Ziel: Einsatz einer Maschine statt eines Menschen für den Verteilungsalgorithmus Unterschiede Mensch - (ideale) Maschine sehr schnell und vor allem unermüdlich absolut zuverlässig. Handlung beim millionsten Male genauso exakt wie beim ersten Male. unbedingt gehorsam; tun genau das, was man ihnen befiehlt; tun nichts, was man ihnen nicht befiehlt; führen jede Handlung ohne Verständnis aus
Menschen und Maschinen Ziel: Einsatz einer Maschine statt eines Menschen für den Verteilungsalgorithmus Unterschiede Mensch - (ideale) Maschine jedes Detail sehr schnell und vor allem unermüdlich vollständig und ganz exakt beschreiben; absolut zuverlässig. Handlung beim jede millionsten Situation Male genauso exakt wie beim ersten berücksichtigen Male. unbedingt gehorsam; tun genau das, was man ihnen befiehlt; tun nichts, was man ihnen nicht befiehlt; führen jede Handlung ohne Verständnis aus
Defizite des Verteilungsalgorithmus Exaktheit unseres Verteilungsalgorithmus: Was ist in Anweisung 1. und 2. eine "gut sichtbare Stelle"? Was bedeutet Anweisung 3.1 "Leere den Briefkasten", wenn keine Zettel abgegeben wurden, Briefkasten also schon leer ist? Was bedeutet Anweisung 3.2 "Schreibe auf jeden Zettel eine Zahl...", wenn der Briefkasten leer war, und daher in 3.2 gar keine Zettel da sind, auf die man etwas schreiben kann? viele weitere Defizite
technische Probleme Eine Maschine wird nicht... Briefkasten aufhängen Eintrittskarten verkaufen
technische Probleme Eine Maschine wird nicht... Briefkasten aufhängen Eintrittskarten verkaufen Menschen gelingt es kraft Vernunft, fehlende Information zu ergänzen und problematische Situationen und Anweisungen vernünftig zu bewältigen Maschinen derzeit nicht
Folgerungen Maschine wird nicht alle Tätigkeiten beim Verteilungsverfahren übernehmen, die vorher der Mensch erledigt hat Automatisierungsversuch scheitert auf jeden Fall an der unpräzisen Darstellung unseres Verteilungsalgorithmus
Spezifikation des Problems Spezifikation = exakte Definition, was der Computer leisten soll Formalisierung später hier nur umgangssprachlich
Spezifikation des Problems Kleincomputer C mit Tastatur und Bildschirm nach jeder Briefkastenleerung drückt M Taste "E" (Eingabe) und tippt die auf den Zetteln eingetragenen/angekreuzten Daten getrennt durch Druck auf Eingabetaste und Leertaste ein C codiert Eingaben und bildet Codenummer (Anw. 3.2.1-3.2.3) alle Zettel einer Leerung eingetippt? M drückt Taste "F" (fertig) C sortiert die Zahlen und mischt sie mit früher eingegebenen Werten zusammen letzte Leerung und alle Zettel eingetippt? M drückt fortlaufend Taste "A" (Abrufen); C zeigt jedes Mal eine Zahl in der vorgeschriebenen Reihenfolge auf dem Bildschirm; M ruft die letzten drei Ziffern dieser Zahl, also die Ordnungsnummer, aus.
Spezifikation des Problems Kleincomputer C mit Tastatur und Bildschirm nach jeder Briefkastenleerung drückt M Taste "E" (Eingabe) und tippt die auf den Zetteln eingetragenen/angekreuzten Daten getrennt durch Aufgabe: Druck auf Transformiere Eingabetaste und Leertaste ein C codiert Eingaben diese Aufgaben und bildet Codenummer nun in eine(anw. 3.2.1-3.2.3) Darstellung, die C auch alle Zettel einer Leerung eingetippt? M drückt Taste "F" (fertig) versteht C sortiert die Zahlen und mischt sie mit früher eingegebenen Werten zusammen letzte Leerung und alle Zettel eingetippt? M drückt fortlaufend Taste "A" (Abrufen); C zeigt jedes Mal eine Zahl in der vorgeschriebenen Reihenfolge auf dem Bildschirm; M ruft die letzten drei Ziffern dieser Zahl, also die Ordnungsnummer, aus.
Präzisierung der Objekte Zu präzisieren: Zahlen, Zettelstapel, Texte Zahlen sind schon präzise z.b.: 771036, 971007, 920126 Zettelstapel als Zahlenfolgen z.b.: [771036, 971007, 920126]
Präzisierung der Objekte Zu präzisieren: Zahlen, Zettelstapel, Texte Zahlen sind schon präzise z.b.: 771036, 971007, 920126 oberster Zettel Zettelstapel als Zahlenfolgen z.b.: [771036, 971007, 920126]
Präzisierung der Objekte Zu präzisieren: Zahlen, Zettelstapel, Texte Zahlen sind schon präzise z.b.: 771036, 971007, 920126 unterster Zettel Zettelstapel als Zahlenfolgen z.b.: [771036, 971007, 920126]
Präzisierung der Objekte Zu präzisieren: Zahlen, Zettelstapel, Texte Zahlen sind schon präzise kein Zettelstapel =leere Zahlenfolge z.b.: 771036, 971007, 920126 [ ] Zettelstapel als Zahlenfolgen z.b.: [771036, 971007, 920126]
Präzisierung der Objekte Zu präzisieren: Zahlen, Zettelstapel, Texte Zahlen sind schon präzise Texte in... : z.b.: 771036, 971007, 920126 Zettelstapel als Zahlenfolgen z.b.: [771036, 971007, 920126] z.b.: "Kommen Sie von auswärts?"
Präzisierung der Elementaranweisungen Zu präzisieren: Daten merken, identifizieren, nachschauen identifizieren eindeutige Namen (Bezeichner) vergeben merken Zuweisung: z.b.: fertig [771036, 971007, 920126] frage "Kommen Sie von auswärts?". z 1 leerung [ ]
Präzisierung der Elementaranweisungen Zu präzisieren: Daten einlesen von Tastatur, anzeigen auf Bildschirm einlesen (Eingabe) lies(...) z.b.: lies(leerung) anzeigen (Ausgabe) zeige(...) z.b.: zeige(fertig)
Präzisierung der Elementaranweisungen Zu präzisieren: bei Zahlen Daten und einlesen Texten von schließt Tastatur, anzeigen auf Bildschirm die Eingabe ab einlesen (Eingabe) lies(...) z.b.: lies(leerung) anzeigen (Ausgabe) zeige(...) z.b.: zeige(fertig)
Präzisierung der Elementaranweisungen Zu präzisieren: Daten Bei einlesen Eingabe von einer Tastatur, anzeigen auf Bildschirm Zahlenfolge ein weiteres Mal am Schluß der Eingabe einlesen (Eingabe) lies(...) z.b.: lies(leerung) anzeigen (Ausgabe) zeige(...) z.b.: zeige(fertig)
Präzisierung der Elementaranweisungen Zu präzisieren: 2Daten 7 einlesen 3 von 4 Tastatur, 6 1 anzeigen auf Bildschirm einlesen (Eingabe) lies(...) z.b.: lies(leerung) anzeigen (Ausgabe) zeige(...) z.b.: zeige(fertig) [27,3,461]
Präzisierung der Objektbeschreibung Motivation Identifizierung von Namen Bezeichnet leerung eine Zahlenfolge, eine einzelne Zahl oder einen Text? Davon hängt Ausführung der Anweisung lies(...) ab => Drücken der -Taste beendet Eingabe insgesamt oder nur die Eingabe einer Zahl einer Zahlenfolge
Typen und Deklarationen 1 Lösung: Ergänze Typen "Zahl" "Zahlenfolge" "Text" Ergänze Vereinbarungen/Deklarationen: def fertig, leerung: Zahlenfolge def z: Zahl def frage: Text
Typen und Deklarationen 1 Lösung: Ergänze Typen "Zahl" "Zahlenfolge" "Text" fertig und leerung in Zukunft nur Zahlenfolgen; z nur eine Zahl; frage nur ein Text Ergänze Vereinbarungen/Deklarationen: def fertig, leerung: Zahlenfolge def z: Zahl def frage: Text
Typen und Deklarationen - Definitionen Definition Ein Bezeichner ist eine Zeichenfolge, die zur eindeutigen Identifizierung eines Objekts dient. Definition Die Zuweisung ist eine Anweisung, durch die ein Bezeichner einen (neuen) Wert erhält. Definition Eine Deklaration/Vereinbarung ist die Festlegung, welche Bedeutung ein Bezeichner im Algorithmus besitzen soll, d.h., welche Typen von Objekten mit dem Bezeichner benannt werden dürfen.
Präzisierung von Operationen auf Objekten wir können noch nicht auf Objekten operieren daher: bei Zahlen: +, -, *, / bei Zahlenfolgen: sort(f), misch(f,g)
Operationen - Beispiele Addition zweier Zahlen a und b: def a,b,c: Zahl; a 3; b 6; c a + b; zeige(c). 3.3 Sortiere die Zettel aufsteigend nach diesen Zahlen zu einem Stapel, die kleinste Zahl nach oben: leerung sort(leerung) 3.4 Mische diesen Stapel und den Stapel, der aus den Zetteln besteht, die du bei früheren Briefkastenleerungen geholt hast, zusammen: fertig misch(fertig,leerung)
weitere Operationen auf Folgen erstes(f): erste Zahl der Folge f Beispiel: erstes([771036, 971007, 920126]) liefert 771036. rest(f): Folge f ohne das erste Folgenelement Beispiel: rest([771036, 971007, 920126]) ist [971007, 920126]. Speziell: rest([771036]) ist die leere Folge [ ]. Anwendung: 5.1 Rufe die Ordnungsnummer des obersten Zettels aus; 5.2 Lege den Zettel beiseite wird zu zeige(erstes(fertig)); fertig rest(fertig)
Konkatenation von Folgen Konkatenation von Folgen = Verbinden zweier Zettelstapel: Beispiele: [3, 27, 5] [8, 1] = [3, 27, 5, 8, 1]. f [ ] = [ ] f = f
Bedingungen Bedingungsoperatoren: =, (bei allen Typen), <, >,, (bei Zahlen) z.b.: a=1, 3=4, [1,2] [2,3], f=[ ], "ja" antwort, erstes(f) 3 Verknüpfung von Bedingungen B und B': und: B und B' dann und nur dann wahr, wenn sowohl B als auch B' wahr ist oder: B oder B' dann und nur dann wahr, wenn entweder B oder B' oder beide wahr sind nicht: nicht B dann und nur dann wahr, wenn B nicht wahr sind
Bedingungen - Beispiele a=1 und erstes(f) 3. wahr, wenn sowohl Bezeichner a für Zahl 1 als auch erstes Folgenelement von f kleiner oder gleich 3 [1,2] f oder "ja" antwort. erfüllt, wenn entweder die Folge f verschieden von Folge [1,2] oder antwort nicht für den Text "ja" steht oder beides
Bedingungen - Beispiele (a=2 und b=3) oder f=[1,2]. erfüllt, wenn sowohl a für 1 als auch b für 3 steht, oder wenn f gleich [1,2], falls eine der ersten beiden Bedingungen nicht zutrifft aus einfachen Bedingungen mittels und und oder und Klammerbildung beliebig komplizierte Bedingungen formulieren. Prioritätenregelung: Klammern vor nicht vor und vor oder
Konstruktoren Konkatenation: wie bisher ; Alternative "Wenn... dann... sonst...": wenn Bedingung dann... sonst... ende. Iteration: Solange... tue folgendes...": solange Bedingung tue... ende Schlüsselwörter wenn, tue, ende,... unterstreichen
Konstruktoren - Beispiele Summe 1+2+3+...+10: def i,s: Zahl; i 1; s 0; solange i 10 tue s s + i; i i + 1 ende; zeige(s).
Konstruktoren - Beispiele Im Verteilungsalgorithmus: 5. Solange noch Eintrittskarten vorhanden sind, tue folgendes: 5.1 Rufe die Ordnungsnummer des obersten Zettels aus; 5.2 Lege den Zettel beiseite; 5.3 Verkaufe an die Gruppe mit dieser Ordnungsnummer die gewünschte Zahl an Eintrittskarten wird jetzt: solange taste = "A" und fertig [ ] tue zeige(erstes(fertig)); fertig rest(fertig); lies(taste) ende. Hierbei: def taste: Text.
Konstruktoren - Beispiele Im Verteilungsalgorithmus: 3.2.2 Wenn auf die Frage "Kommen Sie von auswärts?" "ja" angekreuzt ist, dann ist die nächste Ziffer eine Null, sonst ist die nächste Ziffer eine Eins wird jetzt: wenn antwort = "ja" dann ziffer 0 sonst ziffer 1 ende
Vollständiger Verteilungsalgorithmus def ziffer, z, kinderzahl, ordnungsnr: Zahl; def fertig, leerung: Zahlenfolge; def antwort, taste: Text; fertig [ ]; lies(taste); solange taste = "E" tue leerung [ ]; solange taste "F" tue lies(kinderzahl); lies(antwort); wenn antwort = "ja" dann ziffer 0 sonst ziffer 1 ende; lies(ordnungsnr); z (100 - kinderzahl) * 10000 + ziffer * 1000 + ordnungsnr; leerung leerung [ z ]; lies(taste) ende; leerung sort(leerung); fertig misch(fertig,leerung); lies(taste) ende; solange taste ="A" und fertig [ ] tue zeige(erstes(fertig)); fertig rest(fertig); lies(taste) ende.
Schachtelung von Schleifen solange taste = "E" tue leerung [ ]; solange taste "F" tue lies(kinderzahl); lies(antwort); wenn antwort = "ja" dann ziffer 0 sonst ziffer 1 ende; lies(ordnungsnr); z (100 - kinderzahl) * 10000 + ziffer * 1000 + ordnungsnr; leerung leerung [ z ]; lies(taste) ende; leerung sort(leerung); fertig misch(fertig,leerung); lies(taste) ende; innere Schleife äußere Schleife
Schachtelungsdiagramm (mengenorientiert)
Schachtelungsdiagramm (mengenorientiert)
Präzisierung der Abstraktion Definition Die Zusammenfassung von Deklarationen und Anweisungen zu einer Einheit bezeichnet man als Prozedur. Liefert eine Prozedur einen Wert, so nennt man sie Funktion oder Funktionsprozedur. Jede beliebige Prozedur oder Funktion kann als elementare Anweisung oder elementarer Ausdruck (durch Aufruf) in jedem anderen Algorithmus verwendet werden.
Umsetzung beim Verteilungsalgorithmus Zwei Zettelstapel S1 und S2 mischst du... zu S3...: def s1,s2,s3: Zahlenfolge M1. Solange auf beiden Stapeln S1 und S2 noch Zettel liegen, tue folgendes:... : solange s1 [ ] und s2 [ ] tue... ende. M1.1 Nimm von den beiden obersten Zetteln von S1 und S2 den mit der kleineren Codenummer weg: wenn erstes(s1) < erstes(s2) dann s3 s3 [ erstes(s1) ]; s1 rest(s1) sonst s3 s3 [ erstes(s2) ]; s2 rest(s2) ende
Umsetzung beim Verteilungsalgorithmus M2. Wenn einer der Stapel S1 oder S2 leer ist, dann hänge den anderen komplett hinten an den Stapel S3 an: s3 s3 s1 s2
Umsetzung beim Verteilungsalgorithmus M2. Wenn einer der Stapel S1 oder S2 leer ist, dann hänge den anderen komplett hinten an den Stapel S3 an: s3 s3 s1 s2 Prüfen Sie zur Übung nach, daß diese Zuweisung M2 korrekt beschreibt
Umsetzung beim Verteilungsalgorithmus M2. Wenn einer der Stapel S1 oder S2 leer ist, dann hänge den anderen komplett hinten an den Stapel S3 an: s3 s3 s1 s2 Mischen insgesamt: def s1, s2 s3: Zahlenfolge; solange s1 [ ] und s2 [ ] tue wenn erstes(s1) < erstes(s2) dann s3 s3 [ erstes(s1) ]; s1 rest(s1) sonst s3 s3 [ erstes(s2) ]; s2 rest(s2) ende ende; s3 s3 s1 s2
Umsetzung beim Verteilungsalgorithmus Mangel 1 def s1, s2 s3: Zahlenfolge; Bezug zwischen solange s1 [ ] und s2 [ ] tueaufruf von Mischen und wenn erstes(s1) < erstes(s2) dann dieser Beschreibung s3 s3 [ erstes(s1) ]; s1 rest(s1) sonst s3 s3 [ erstes(s2) ]; s2 rest(s2) ende ende; s3 s3 s1 s2
Umsetzung beim Verteilungsalgorithmus funktion misch; def s1, s2 s3: Zahlenfolge; solange s1 [ ] und s2 [ ] tue wenn erstes(s1) < erstes(s2) dann s3 s3 [ erstes(s1) ]; s1 rest(s1) sonst s3 s3 [ erstes(s2) ]; s2 rest(s2) ende ende; s3 s3 s1 s2 funkende
Umsetzung beim Verteilungsalgorithmus funktion misch; def s1, s2 s3: Zahlenfolge; Mangel 2 solange s1 [ ] und s2 [ ] tuebezug der Zahlenfolgen wenn erstes(s1) < erstes(s2) dann fertig und leerung zu s3 s3 [ erstes(s1) ]; s1 und s2 s1 rest(s1) sonst s3 s3 [ erstes(s2) ]; s2 rest(s2) ende ende; s3 s3 s1 s2 funkende
Umsetzung beim Verteilungsalgorithmus funktion misch (s1,s2: Zahlenfolge); def s3: Zahlenfolge; solange s1 [ ] und s2 [ ] tue wenn erstes(s1) < erstes(s2) dann s3 s3 [ erstes(s1) ]; s1 rest(s1) sonst s3 s3 [ erstes(s2) ]; s2 rest(s2) ende ende; s3 s3 s1 s2 funkende
Umsetzung beim Verteilungsalgorithmus s1, s2 sind formale Parameter funktion misch (s1,s2: Zahlenfolge); def s3: Zahlenfolge; solange s1 [ ] und s2 [ ] tue wenn erstes(s1) < erstes(s2) dann s3 s3 [ erstes(s1) ]; s1 rest(s1) sonst s3 s3 [ erstes(s2) ]; s2 rest(s2) ende ende; s3 s3 s1 s2 funkende
Umsetzung beim Verteilungsalgorithmus s1, s2 sind formale Parameter funktion misch (s1,s2: Zahlenfolge); def s3: Zahlenfolge; solange s1 [ ] und s2 [ ] tue fertig und leerung im wenn erstes(s1) < erstes(s2) dann Aufruf misch(fertig,leerung) s3 s3 [ erstes(s1) ]; sind aktuelle Parameter s1 rest(s1) sonst s3 s3 [ erstes(s2) ]; s2 rest(s2) ende ende; s3 s3 s1 s2 funkende
formale und aktuelle Parameter Definition: Als Parameter bezeichnet man variable oder austauschbare Objekte in einer Prozedur oder Funktion. Die in einer Prozedur oder Funktion benutzten und im Kopf der Prozedur anzugebenden Parameter heißen formale Parameter; sie sind Platzhalter für später einzusetzende Objekte. Die im Aufruf einer Prozedur oder Funktion stehenden Argumente nennt man aktuelle Parameter.
Umsetzung beim Verteilungsalgorithmus funktion misch (s1,s2: Zahlenfolge); def s3: Zahlenfolge; Mangel 3 solange s1 [ ] und s2 [ ] tue Bezug zwischen Ergebnis wenn erstes(s1) < erstes(s2) dann des Mischens s3 s3 s3 [ erstes(s1) ]; und Aufruf s1 rest(s1) sonst s3 s3 [ erstes(s2) ]; s2 rest(s2) ende ende; s3 s3 s1 s2 funkende
Umsetzung beim Verteilungsalgorithmus funktion misch (s1,s2: Zahlenfolge); def s3: Zahlenfolge; solange s1 [ ] und s2 [ ] tue wenn erstes(s1) < erstes(s2) dann s3 s3 [ erstes(s1) ]; s1 rest(s1) sonst s3 s3 [ erstes(s2) ]; s2 rest(s2) ende ende; s3 s3 s1 s2; ergebnis s3 funkende s3 ist das Ergebnis und tritt an die Stelle des Aufrufs misch(fertig,leerung)
der Typ des Ergebnisses von misch, also Zahlenfolge, wird hier festgehalten Umsetzung beim Verteilungsalgorithmus funktion misch (s1,s2: Zahlenfolge) Zahlenfolge; def s3: Zahlenfolge; solange s1 [ ] und s2 [ ] tue wenn erstes(s1) < erstes(s2) dann s3 s3 [ erstes(s1) ]; s1 rest(s1) sonst s3 s3 [ erstes(s2) ]; s2 rest(s2) ende ende; s3 s3 s1 s2; ergebnis s3 funkende s3 ist das Ergebnis und tritt an die Stelle des Aufrufs misch(fertig,leerung)
Umsetzung beim Verteilungsalgorithmus funktion misch (s1,s2: Zahlenfolge) Zahlenfolge; def s3: Zahlenfolge; solange s1 [ ] und s2 [ ] tue wenn erstes(s1) < erstes(s2) dann s3 s3 [ erstes(s1) ]; s1 rest(s1) sonst s3 s3 [ erstes(s2) ]; s2 rest(s2) ende ende; s3 s3 s1 s2; ergebnis s3 funkende
Prozesse beim Aufruf
Prozesse beim Aufruf fertig misch(fertig,leerung)
Prozesse beim Aufruf fertig misch(fertig,leerung) 1. unterbreche Ausführung des Programms.
Prozesse beim Aufruf fertig misch(fertig,leerung) 1. unterbreche Ausführung des Programms. 2. wo ist misch? Suche Beschreibung.
Prozesse beim Aufruf fertig misch(fertig,leerung) 1. unterbreche Ausführung des Programms. 2. wo ist misch? Suche Beschreibung. 3. Parameter passend (Typ, Anzahl)?
Prozesse beim Aufruf fertig misch(fertig,leerung) 1. unterbreche Ausführung des Programms. 2. wo ist misch? Suche Beschreibung. 3. Parameter passend (Typ, Anzahl)? 4. identifiziere aktuelle und formale Parameter
Prozesse beim Aufruf fertig misch(fertig,leerung) 1. unterbreche Ausführung des Programms. 2. wo ist misch? Suche Beschreibung. 3. Parameter passend (Typ, Anzahl)? 4. identifiziere aktuelle und formale Parameter 5. führe Anweisungen der Funktion aus
Prozesse beim Aufruf fertig misch(fertig,leerung) 1. unterbreche Ausführung des Programms. 2. wo ist misch? Suche Beschreibung. 3. Parameter passend (Typ, Anzahl)? 4. identifiziere aktuelle und formale Parameter 5. führe Anweisungen der Funktion aus 6. zum Schluß ersetze Aufruf durch den Wert hinter ergebnis
Prozesse beim Aufruf fertig misch(fertig,leerung) 1. unterbreche Ausführung des Programms. 2. wo ist misch? Suche Beschreibung. 3. Parameter passend (Typ, Anzahl)? 4. identifiziere aktuelle und formale Parameter 5. führe Anweisungen der Funktion aus 6. zum Schluß ersetze Aufruf durch den Wert hinter ergebnis 7. setze Programm an der unterbrochenen Stelle fort
Prozesse beim Aufruf 1. unterbreche Ausführung des Programms. 2. wo ist misch? 3. Parameter passend (Typ, Anzahl)? 4. identifiziere aktuelle und formale Parameter 5. führe Anweisungen der Funktion aus 6. zum Schluß ersetze Aufruf durch den Wert hinter ergebnis 7. setze Programm an der unterbrochenen Stelle fort
Prozesse beim Aufruf 1. unterbreche Ausführung des Programms. 2. wo ist misch? 3. Parameter passend (Typ, Anzahl)? 4. identifiziere aktuelle und formale Parameter 5. führe Anweisungen der Funktion aus fertig misch(fertig,leerung) 6. zum Schluß ersetze Aufruf durch den Wert hinter ergebnis 7. setze Programm an der unterbrochenen Stelle fort
Prozesse beim Aufruf 1. unterbreche Ausführung des Programms. 2. wo ist misch? 3. Parameter passend (Typ, Anzahl)? 4. identifiziere aktuelle und formale Parameter 5. führe Anweisungen der Funktion aus 6. zum Schluß ersetze Aufruf durch den Wert hinter ergebnis 7. setze Programm an der unterbrochenen Stelle fort
Prozesse beim Aufruf 1. unterbreche Ausführung Suche Beschreibung des Programms. besser: aufsuchen 2. wo ist misch? 3. Parameter passend (Typ, Anzahl)? 4. identifiziere aktuelle und formale Parameter 5. führe Anweisungen der Funktion aus 6. zum Schluß ersetze Aufruf durch den Wert hinter ergebnis 7. setze Programm an der unterbrochenen Stelle fort
Prozesse beim Aufruf 1. unterbreche Ausführung des Programms. 2. wo ist misch? 3. Parameter passend (Typ, Anzahl)? 4. identifiziere aktuelle und formale Parameter 5. führe Anweisungen der Funktion aus 6. zum Schluß ersetze Aufruf durch den Wert hinter ergebnis 7. setze Programm an der unterbrochenen Stelle fort
Prozesse beim Aufruf 1. unterbreche Ausführung des Programms. (fertig,leerung) 2. wo ist misch? zahlenfolge zahlenfolge (s1,s2) 3. Parameter passend (Typ, Anzahl)? 4. identifiziere aktuelle und formale Parameter 5. führe Anweisungen der Funktion aus 6. zum Schluß ersetze Aufruf durch den Wert hinter ergebnis 7. setze Programm an der unterbrochenen Stelle fort
Prozesse beim Aufruf 1. unterbreche Ausführung des Programms. 2. wo ist misch? 3. Parameter passend (Typ, Anzahl)? 4. identifiziere aktuelle und formale Parameter 5. führe Anweisungen der Funktion aus 6. zum Schluß ersetze Aufruf durch den Wert hinter ergebnis 7. setze Programm an der unterbrochenen Stelle fort
Prozesse beim Aufruf 1. unterbreche Ausführung des Programms. 2. wo ist misch? s1 fertig 3. Parameter passend (Typ, Anzahl)? s2 leerung 4. identifiziere aktuelle und formale Parameter 5. führe Anweisungen der Funktion aus 6. zum Schluß ersetze Aufruf durch den Wert hinter ergebnis 7. setze Programm an der unterbrochenen Stelle fort
Prozesse beim Aufruf 1. unterbreche Ausführung des Programms. 2. wo ist misch? 3. Parameter passend (Typ, Anzahl)? 4. identifiziere aktuelle und formale Parameter 5. führe Anweisungen der Funktion aus 6. zum Schluß ersetze Aufruf durch den Wert hinter ergebnis 7. setze Programm an der unterbrochenen Stelle fort
Prozesse beim Aufruf 1. unterbreche Ausführung des Programms. 2. wo ist misch? 3. Parameter passend (Typ, Anzahl)? 4. identifiziere aktuelle und formale Parameter 5. führe Anweisungen der Funktion aus fertig s3 6. zum Schluß ersetze Aufruf durch den Wert hinter ergebnis 7. setze Programm an der unterbrochenen Stelle fort
Prozesse beim Aufruf 1. unterbreche Ausführung des Programms. 2. wo ist misch? 3. Parameter passend (Typ, Anzahl)? 4. identifiziere aktuelle und formale Parameter 5. führe Anweisungen der Funktion aus 6. zum Schluß ersetze Aufruf durch den Wert hinter ergebnis 7. setze Programm an der unterbrochenen Stelle fort
Prozedurkonzept jede als Algorithmus formulierte Vorschrift kann zu Elementaranweisung in anderem Algorithmus werden Zerlegung und Strukturierung umfangreicher Algorithmen: Zerlegung des Problems in bis zu 10 Teilschritte je Teilschritt eine Prozedur/Funktion ggf. weitere Zerlegung schrittweise Verfeinerung bis kleine überschaubare Einheiten vorliegen
Prozedurschachtelung Definition: Eine Prozedur ist in einer anderen geschachtelt, wenn sie in ihr deklariert oder aufgerufen wird. Im ersten Fall spricht man von statischer, im zweiten Fall von dynamischer Schachtelung bzw. Abstützen einer Prozedur auf eine andere.
prozedur p1(...)... funktion p11(...)... prozedur p111(...)...... prozende; funktion p112(...)...... funkende;... funkende; prozedur p12(...)... funktion p121(...)...... funkende; prozedur p122(...)...... prozende;... prozende prozende; prozedur p2(...)... prozedur p21(...)... prozedur p211(...)...... prozende; prozedur p212(...)...... prozende;... prozende prozedur p22(...)... funktion p221(...)...... funkende; funktion p222(...)...... funkende;... prozende prozende...
prozedur p1(...)... funktion p11(...)... prozedur p111(...)...... prozende; funktion p112(...)...... funkende;... funkende; prozedur p12(...)... funktion p121(...)...... funkende; prozedur p122(...)...... prozende;... prozende prozende; prozedur p2(...)... prozedur p21(...)... prozedur p211(...)...... prozende; prozedur p212(...)...... prozende;... prozende prozedur p22(...)... funktion p221(...)...... funkende; funktion p222(...)...... funkende;... prozende prozende... Schachtelungsbaum
prozedur p1(...)... funktion p11(...)... prozedur p111(...)...... prozende; funktion p112(...)...... funkende;... funkende; prozedur p12(...)... funktion p121(...)...... funkende; prozedur p122(...)...... prozende;... prozende prozende; prozedur p2(...)... prozedur p21(...)... prozedur p211(...)...... prozende; prozedur p212(...)...... prozende;... prozende prozedur p22(...)... funktion p221(...)...... funkende; funktion p222(...)...... funkende;... prozende prozende... Schachtelungsbaum hierarchische Modularisierung
Programm und Programmiersprache Verteilungsproblem nun vollständig gelöst automatisierbare Elemente bestimmt dargestellt in einer Form, daß C sie ausführen kann solche Darstellungen heißen Programm Sprachen mit geeigneten Darstellungselementen und erforderlicher Präzision: Programmiersprachen die hier erfundene Sprache heißt PRO
Programm und Programmiersprache Definition: Eine Sprache zur Formulierung von Algorithmen, die von einem Computer ausgeführt werden können, bezeichnet man als Programmiersprache. Die Formulierung eines Algorithmus in einer Programmiersprache nennt man Programm.
Algorithmus und Programm Algorithmus relativ allgemein beschrieben an keine besonderen formellen Vorschriften gebunden Programm im exakt definierten Formalismus einer Programmiersprache verfaßt ein Algorithmus ist eine Abstraktion aller Programme, die ihn formal beschreiben
Welt der Programmiersprachen
Welt der Programmiersprachen
Welt der Programmiersprachen deklarativ: Problem beschreiben prozedural: Lösungsweg zum Problem beschreiben
Welt der Programmiersprachen deklarativ: Problem beschreiben funktional: Problem durch funktionale Zusammenhänge beschreiben prädikativ: Problem durch Fakten und logische Beziehungen beschreiben prozedural: Lösungsweg zum Problem beschreiben
Welt der Programmiersprachen deklarativ: Problem beschreiben funktional: Problem durch funktionale Zusammenhänge beschreiben prädikativ: Problem durch Fakten und logische Beziehungen beschreiben prozedural: Lösungsweg zum Problem beschreiben imperativ: Lösungsweg durch Anweisungen beschreiben
Welt der Programmiersprachen deklarativ: Problem beschreiben ML, MIRANDA, Gofer, Haskell funktional: Problem durch funktionale Zusammenhänge beschreiben prädikativ: Problem durch Fakten und logische Beziehungen beschreiben prozedural: Lösungsweg zum Problem beschreiben imperativ: Lösungsweg durch Anweisungen beschreiben
Welt der Programmiersprachen deklarativ: Problem beschreiben ML, MIRANDA, Gofer, Haskell funktional: Problem durch funktionale Zusammenhänge beschreiben prädikativ: Problem durch Prolog, Gödel, Fakten CLP und logische Beziehungen beschreiben prozedural: Lösungsweg zum Problem beschreiben imperativ: Lösungsweg durch Anweisungen beschreiben
Welt der Programmiersprachen deklarativ: Problem beschreiben funktional: Problem durch funktionale Zusammenhänge beschreiben prädikativ: Problem durch Prolog, Gödel, Fakten CLP und logische Beziehungen beschreiben prozedural: Lösungsweg zum Problem beschreiben ML, MIRANDA, Gofer, Haskell PRO, ADA, ALGOL, BASIC, C, EIFFEL, FORTRAN, MODULA, OBERON, PASCAL imperativ: Lösungsweg durch Anweisungen beschreiben
Syntax und Semantik
Syntax und Semantik Programmiersprachen immer präzise und eindeutige Syntax und Semantik
Syntax und Semantik Programmiersprachen immer präzise und eindeutige Syntax und Semantik Syntax: sprachliche Notierung von Programmen
Syntax und Semantik Programmiersprachen immer präzise und eindeutige Syntax und Semantik Syntax: sprachliche Notierung von Programmen Semantik: Bedeutung syntaktisch korrekter Programme
Syntax und Semantik welche Zeichenreihen sind syntaktisch korrekte eindeutige Syntax und Semantik Programme? Syntax: sprachliche Notierung von Programmen Programmiersprachen immer präzise und Semantik: Bedeutung syntaktisch korrekter Programme
Syntax und Semantik welche Zeichenreihen sind syntaktisch korrekte eindeutige Syntax und Semantik Programme? Syntax: sprachliche Notierung von Programmen welche Wirkung Semantik: Bedeutung hat syntaktisch ein syntaktisch korrekter Programme korrektes Programm auf dem Rechner? Programmiersprachen immer präzise und
Semantikansätze Semantik operationale Semantik: Art und Weise, wie ein Rechner es ausführt axiomatische Semantik: Eigenschaften, die die (Ein-/Ausgabe-)Variablen vorher und nachher erfüllen denotationale Semantik: Funktion, die das Programm berechnet
Syntax und Semantik Beispiel 1
Syntax und Semantik Beispiel 1 Programm P def s: Zahl; lies(s); s 0; zeige(s).
Syntax und Semantik Beispiel 1 Programm P def s: Zahl; lies(s); s 0; zeige(s). syntaktisch korrekt
Syntax und Semantik Beispiel 1 Programm P def s: Zahl; lies(s); s 0; zeige(s). syntaktisch korrekt Semantik (ugs.): : "Lies eine beliebige Zahl ein und gib die Zahl 0 aus".
Syntax und Semantik Beispiel 1 Programm P def s: Zahl; lies(s); s 0; zeige(s). syntaktisch korrekt Semantik (ugs.): : "Lies eine beliebige Zahl ein und gib die Zahl 0 aus". Semantik denotational: fp: Z Z mit fp(s)=0 für alle s Z.
Syntax und Semantik Beispiel 1 Programm P def s: Zahl; lies(s); s 0; zeige(s). syntaktisch korrekt Semantik (ugs.): : "Lies eine beliebige Zahl ein und gib die Zahl 0 aus". Semantik denotational: fp: Z Z mit fp(s)=0 für alle s Z. Programm mit gleicher Semantik: zeige(0)
Syntax und Semantik Beispiel 1 Programm P def s: Zahl; lies(s); s 0; zeige(s). syntaktisch korrekt Semantik (ugs.): : "Lies eine beliebige Zahl ein und gib die Zahl 0 aus". Semantik denotational: fp: Z Z mit fp(s)=0 für alle s Z. Programm mit gleicher Semantik: zeige(0) Programme können semantisch äquivalent sein.
Syntax und Semantik Beispiel 2
Syntax und Semantik Beispiel 2 Programm P' def i,s: Zahl; lies(n); i 1; s 0; solange i n tue s s + i; i i + 1 zeige(s)
Syntax und Semantik Beispiel 2 Programm P' n nicht def i,s: Zahl; deklariert lies(n); i 1; s 0; solange i n tue s s + i; i i + 1 zeige(s)
Syntax und Semantik Beispiel 2 Programm P' n nicht def i,s: Zahl; deklariert lies(n); i 1; s 0; solange i n tue s s ende + i; fehlt i i + 1 zeige(s)
Syntax und Semantik Beispiel 2 Programm P' n nicht def i,s: Zahl; deklariert lies(n); i 1; s 0; solange i n tue s s ende + i; fehlt i i + 1 zeige(s) syntaktisch nicht korrekt
Syntax und Semantik Beispiel 2 Programm P def i,n,s: Zahl; lies(n); i 1; s 0; solange i n tue s s + i; i i + 1 ende; zeige(s)
Syntax und Semantik Beispiel 2 Programm P def i,n,s: Zahl; lies(n); i 1; s 0; solange i n tue s s + i; i i + 1 ende; zeige(s) Semantik ugs: "Falls der eingegebene Wert n kleiner oder gleich 0 ist, so gib die Zahl 0 aus. Falls n größer als 0 ist, so gib die Summe der ersten n Zahlen 1+2+3+...+n aus".
Syntax und Semantik Beispiel 2 Programm P def i,n,s: Zahl; lies(n); i 1; s 0; solange i n tue s s + i; i i + 1 ende; zeige(s) Semantik ugs: "Falls der eingegebene Wert n kleiner oder gleich 0 ist, so gib die Zahl 0 aus. Falls n größer als 0 ist, so gib die Summe der ersten n Zahlen 1+2+3+...+n aus". Semantik denotational: fp": Z Z mit n { Σ i, falls n 1, fp"(n)= i=1 0, sonst.
Korrektheit und Komplexität Korrektheit: exakt beweisen, daß das Programm die Spezifikation erfüllt, also stets und in jeder Hinsicht das Gewünschte leistet,... Komplexität:... und die Zeitvorgaben einhält in der Regel: sehr hoher Aufwand bei Korrektheit ( nicht berechenbar) mittelgroßer Aufwand bei Komplexität Beispiel: Mischen
Mischen - Spezifikation Spezifikation: präzise Beschreibung der Anforderung an das Programm (funktionale) Spezifikation Mischen (halbformal): Eingabe: s1,s2 IN0* Ausgabe: s3 IN0* Funktionaler Zusammenhang: Für s1=[x1,...,xn] mit x1 x2... xn und s2= [y1,...,ym] mit y1 y2... ym ist s3=[z1,...,zn+m] mit z1 z2... zn+m und s3 ist eine Permutation von s1 s2.
Mischen - Spezifikation Spezifikation: präzise Beschreibung der Anforderung an das Programm (funktionale) Spezifikation Mischen (halbformal): Eingabe: s1,s2 IN0* Ausgabe: s3 IN0* n Werte Funktionaler Zusammenhang: Für s1=[x1,...,xn] mit x1 x2... xn und s2= [y1,...,ym] mit y1 y2... ym ist s3=[z1,...,zn+m] mit z1 z2... zn+m und s3 ist eine Permutation von s1 s2.
Mischen - Spezifikation Spezifikation: präzise Beschreibung der Anforderung an das Programm (funktionale) Spezifikation Mischen (halbformal): Eingabe: s1,s2 IN0* Ausgabe: s3 IN0* Funktionaler Zusammenhang: Für s1=[x1,...,xn] mit x1 x2... xn und s2= [y1,...,ym] mit y1 y2... ym ist s3=[z1,...,zn+m] mit z1 z2... zn+m und s3 ist eine Permutation von s1 s2.
Mischen - Spezifikation Spezifikation: präzise Beschreibung der Anforderung an das Programm (funktionale) Spezifikation Mischen (halbformal): Eingabe: s1,s2 IN0* Ausgabe: s3 IN0* aufsteigend Funktionaler Zusammenhang: sortiert Für s1=[x1,...,xn] mit x1 x2... xn und s2= [y1,...,ym] mit y1 y2... ym ist s3=[z1,...,zn+m] mit z1 z2... zn+m und s3 ist eine Permutation von s1 s2.
Mischen - Spezifikation Spezifikation: präzise Beschreibung der Anforderung an das Programm (funktionale) Spezifikation Mischen (halbformal): Eingabe: s1,s2 IN0* Ausgabe: s3 IN0* Funktionaler Zusammenhang: Für s1=[x1,...,xn] mit x1 x2... xn und s2= [y1,...,ym] mit y1 y2... ym ist s3=[z1,...,zn+m] mit z1 z2... zn+m und s3 ist eine Permutation von s1 s2.
Mischen - Spezifikation Spezifikation: präzise Beschreibung der Anforderung an das Programm (funktionale) Spezifikation Mischen (halbformal): Eingabe: s1,s2 IN0* Ausgabe: s3 IN0* Funktionaler Zusammenhang: m Werte Für s1=[x1,...,xn] mit x1 x2... xn und s2= [y1,...,ym] mit y1 y2... ym ist s3=[z1,...,zn+m] mit z1 z2... zn+m und s3 ist eine Permutation von s1 s2.
Mischen - Spezifikation Spezifikation: präzise Beschreibung der Anforderung an das Programm (funktionale) Spezifikation Mischen (halbformal): Eingabe: s1,s2 IN0* Ausgabe: s3 IN0* Funktionaler Zusammenhang: Für s1=[x1,...,xn] mit x1 x2... xn und s2= [y1,...,ym] mit y1 y2... ym ist s3=[z1,...,zn+m] mit z1 z2... zn+m und s3 ist eine Permutation von s1 s2.
Mischen - Spezifikation Spezifikation: präzise Beschreibung der Anforderung an das Programm (funktionale) Spezifikation Mischen (halbformal): Eingabe: s1,s2 IN0* Ausgabe: s3 IN0* Funktionaler Zusammenhang: aufsteigend Für s1=[x1,...,xn] mit x1 x2... xn sortiert und s2= [y1,...,ym] mit y1 y2... ym ist s3=[z1,...,zn+m] mit z1 z2... zn+m und s3 ist eine Permutation von s1 s2.
Mischen - Spezifikation Spezifikation: präzise Beschreibung der Anforderung an das Programm (funktionale) Spezifikation Mischen (halbformal): Eingabe: s1,s2 IN0* Ausgabe: s3 IN0* Funktionaler Zusammenhang: Für s1=[x1,...,xn] mit x1 x2... xn und s2= [y1,...,ym] mit y1 y2... ym ist s3=[z1,...,zn+m] mit z1 z2... zn+m und s3 ist eine Permutation von s1 s2.
Mischen - Spezifikation Spezifikation: präzise Beschreibung der Anforderung an das Programm (funktionale) Spezifikation Mischen (halbformal): Eingabe: s1,s2 IN0* Ausgabe: s3 IN0* Funktionaler Zusammenhang: Für s1=[x1,...,xn] mit x1 x2... xn und s2= [y1,...,ym] mit y1 y2... ym ist s3=[z1,...,zn+m] mit z1 z2... zn+m und s3 ist eine Permutation von s1 s2. n+m Werte
Mischen - Spezifikation Spezifikation: präzise Beschreibung der Anforderung an das Programm (funktionale) Spezifikation Mischen (halbformal): Eingabe: s1,s2 IN0* Ausgabe: s3 IN0* Funktionaler Zusammenhang: Für s1=[x1,...,xn] mit x1 x2... xn und s2= [y1,...,ym] mit y1 y2... ym ist s3=[z1,...,zn+m] mit z1 z2... zn+m und s3 ist eine Permutation von s1 s2.
Mischen - Spezifikation Spezifikation: präzise Beschreibung der Anforderung an das Programm (funktionale) Spezifikation Mischen (halbformal): Eingabe: s1,s2 IN0* Ausgabe: s3 IN0* Funktionaler Zusammenhang: Für s1=[x1,...,xn] aufsteigend mit x1 x2... xn und s2= [y1,...,ym] mit sortiert y1 y2... ym ist s3=[z1,...,zn+m] mit z1 z2... zn+m und s3 ist eine Permutation von s1 s2.
Mischen - Spezifikation Spezifikation: präzise Beschreibung der Anforderung an das Programm (funktionale) Spezifikation Mischen (halbformal): Eingabe: s1,s2 IN0* Ausgabe: s3 IN0* Funktionaler Zusammenhang: Für s1=[x1,...,xn] mit x1 x2... xn und s2= [y1,...,ym] mit y1 y2... ym ist s3=[z1,...,zn+m] mit z1 z2... zn+m und s3 ist eine Permutation von s1 s2.
Mischen - Spezifikation Spezifikation: präzise Beschreibung der Anforderung an das Programm (funktionale) Spezifikation Mischen (halbformal): Eingabe: s1,s2 IN0* Ausgabe: s3 IN0* Funktionaler Zusammenhang: Für s1=[x1,...,xn] mit x1 x2... xn es sind und die gleichen s2= [y1,...,ym] mit y1 y2... ym Werte ist s3=[z1,...,zn+m] wie in s1 und mit s2 z1 z2... zn+m und s3 ist eine Permutation von s1 s2.
Mischen - Spezifikation Spezifikation: präzise Beschreibung der Anforderung an das Programm (funktionale) Spezifikation Mischen (halbformal): Eingabe: s1,s2 IN0* Ausgabe: s3 IN0* Funktionaler Zusammenhang: Für s1=[x1,...,xn] mit x1 x2... xn und s2= [y1,...,ym] mit y1 y2... ym ist s3=[z1,...,zn+m] mit z1 z2... zn+m und s3 ist eine Permutation von s1 s2.
Mischen - Beweis Korrektheit Behauptung: misch terminiert nach höchstens n+m Schleifendurchläufen und erfüllt die Spezifikation. Beweis: (vollständige Induktion über n+m) Induktionsanfang: Zeige, daß Behauptung für n+m=0 gilt. Beweis des Induktionsanfangs: Bei Eingabe von s1=[ ] und s2=[ ] werden im Programm durchlaufen: s3 [ ]; s3 s3 s1 s2; ergebnis s3 Zum Schluß wie gewünscht: s3=[ ]. Folglich ist der Induktionsanfang bewiesen.
Mischen - Beweis Korrektheit Induktionsvoraussetzung: Sei Behauptung wahr bis zur Zahl n+m. Induktionsbehauptung: Behauptung gilt dann auch für n+m+1. Beweis der Induktionsbehauptung: Ist s1=[ ] oder s2= [ ], so folgt Behauptung durch Nachvollziehen des Programms: s3 [ ]; s3 s3 s1 s2; ergebnis s3.
Mischen - Beweis Korrektheit Sei also s1 [ ] s2. O.B.d.A. erstes(s1)<erstes(s2). Dann ist erstes(s1)=min{x1,...,xn,y1,...,ym} und in der Schleife wird s3 s3 [erstes(s1)]; s1 rest(s1) ausgeführt. Zu Beginn des zweiten Schleifendurchlaufs gilt also s3=[erstes(s1)] und s1=[x2,...,xn].
Mischen - Beweis Korrektheit Sei also s1 [ ] s2. O.B.d.A. erstes(s1)<erstes(s2). Dann ist erstes(s1)=min{x1,...,xn,y1,...,ym} und in der Schleife wird s3 s3 [erstes(s1)]; s1 rest(s1) ausgeführt. Zu Beginn des zweiten Schleifendurchlaufs gilt also s3=[erstes(s1)] und s1=[x2,...,xn]. ohne Beschränkung der Allgemeinheit
Mischen - Beweis Korrektheit Sei also s1 [ ] s2. O.B.d.A. erstes(s1)<erstes(s2). Dann ist erstes(s1)=min{x1,...,xn,y1,...,ym} und in der Schleife wird s3 s3 [erstes(s1)]; s1 rest(s1) s1 und s2 sind jeweils ausgeführt. Zu Beginn des n-1 zweiten und m, zusammen Schleifendurchlaufs gilt also n+m-1 groß s3=[erstes(s1)] und s1=[x2,...,xn]. ohne Beschränkung der Allgemeinheit
Mischen - Beweis Korrektheit Ergebnis: zwei Folgen mit zusammen nur noch n+m Elementen zu mischen. Induktionsvoraussetzung beide Folgen werden durch Programm in der behaupteten Weise mit höchstens n+m Schleifendurchläufen gemischt. Da jede Operation nur Elemente hinten an s3 anfügt, bleibt das erste Element das Minimum aller Folgenelemente. Dann werden also die beiden ursprünglichen Folgen in korrekter Weise mit höchstens n+m+1 Schleifendurchläufen gemischt.
Mischen - Beweis Korrektheit Ergebnis: zwei Folgen mit zusammen nur noch n+m Elementen zu mischen. Induktionsvoraussetzung beide Folgen werden durch Programm in der behaupteten Weise mit höchstens n+m Schleifendurchläufen gemischt. Da jede Operation nur Elemente hinten an s3 anfügt, bleibt das erste Element Ergebnis: das Programm Minimum aller ist bezgl. Folgenelemente. Spezifikation korrekt. Dann werden also die beiden ursprünglichen Folgen in korrekter Weise mit höchstens n+m+1 Schleifendurchläufen gemischt.
Mischen - Komplexität Wie effizient ist Mischen realisiert? allgemeines Vorgehen: jede Operation kostet Zeit zähle, wieviele Elementaroperationen bei Eingabe zweier Folgen ausgeführt werden. Da diese Zahl von den Elementen der Folge abhängt, gehe vom schlimmsten Fall (worst-case) aus.
Mischen - Beweis Komplexität Behauptung: Zum Mischen zweier Folgen mit n+m Elementen benötigt Funktion misch höchstens 11(n+m)+4 elementare Operationen. Beweis: Seien s1=[x1,...,xn] mit x1... xn und s2=[y1,...,ym] mit y1... ym die zu mischenden Folgen. Korrektheitsbeweis höchstens n+m Schleifendurchläufe erforderlich. Je Durchlauf 11 Elementaroperationen (selbst nachzählen). Außerhalb der Schleife noch einmal 4 Operationen. Insgesamt also höchstens 11(n+m)+4 Operationen.
Mischen - Beweis Komplexität Behauptung: Zum Mischen zweier Folgen mit n+m Elementen benötigt Funktion misch höchstens 11(n+m)+4 elementare Operationen. Beweis: Seien s1=[x1,...,xn] mit x1... xn und s2=[y1,...,ym] mit y1... ym die zu mischenden Folgen. Korrektheitsbeweis höchstens n+m Schleifendurchläufe erforderlich. linearer zusätzlicher Aufwand Je Durchlauf 11 Elementaroperationen (selbst nachzählen). Außerhalb der Schleife noch einmal 4 Operationen. Insgesamt also höchstens 11(n+m)+4 Operationen.
Mischen - Beweis Komplexität Behauptung: Zum Mischen zweier Folgen mit n+m Elementen benötigt Funktion misch höchstens 11(n+m)+4 elementare Operationen. Beweis: Seien s1=[x1,...,xn] mit x1... xn und s2=[y1,...,ym] mit y1... ym die zu mischenden Folgen. Korrektheitsbeweis höchstens n+m Schleifendurchläufe erforderlich. quadratischer linearerzusätzlicher zusätzlicher Aufwand Aufwand Je Durchlauf 11 Elementaroperationen (selbst nachzählen). Außerhalb der Schleife noch einmal 4 Operationen. Insgesamt also höchstens 11(n+m)+4 Operationen.
Mischen - Beweis Komplexität Behauptung: Zum Mischen zweier Folgen mit n+m Elementen benötigt Funktion misch höchstens 11(n+m)+4 elementare Operationen. Beweis: Seien s1=[x1,...,xn] mit x1... xn und s2=[y1,...,ym] mit y1... ym die zu mischenden Folgen. Korrektheitsbeweis höchstens n+m Schleifendurchläufe erforderlich. exponentieller quadratischer zusätzlicher linearerzusätzlicher Aufwand zusätzlicher Aufwand Aufwand Je Durchlauf 11 Elementaroperationen (selbst nachzählen). Außerhalb der Schleife noch einmal 4 Operationen. Insgesamt also höchstens 11(n+m)+4 Operationen.
Zusammenfassung Zwang zur Präzisierung des Verteilungsalgorithmus Programm in PRO Objekte deklarieren, benennen, einlesen, verändern, ausgeben Anweisungen und die Konstruktoren formulieren Prozeduren und Funktionen mit Parameterübergabe Programmiersprachen Syntax Semantik