63
W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -1- Springer-Verlag, ISBN 3-540- 20958-1 Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte Algorithmen und algorithmische Sprachkonzepte Programme und Algorithmen Foliensatz von A. Weber zur Vorlesung Informatik I, Bonn, 2002/03 Überarbeitet und ergänzt von W. Küchlin zu Informatik I, Tübingen 2003/04

Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -1- Springer-Verlag,

Embed Size (px)

Citation preview

Page 1: Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -1- Springer-Verlag,

W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -1- Springer-Verlag, ISBN 3-540-20958-1

Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte

Algorithmen und algorithmische Sprachkonzepte

Programme und Algorithmen

Foliensatz von A. Weber zur Vorlesung Informatik I, Bonn, 2002/03Überarbeitet und ergänzt von W. Küchlin zu Informatik I, Tübingen 2003/04

Page 2: Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -1- Springer-Verlag,

W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -2- Springer-Verlag, ISBN 3-540-20958-1

Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte

Was ist ein Programm?

• Deutliche Diskrepanz zwischen beiden Begriffserklärungen im Lexikon!• 'Programm': sehr allgemein (umgangssprachlich) aufgefasst• 'Programmierung': spezifische Deutung des Begriffs 'Programm' • 'Programm' im allgemeinen:

– z.B. Fernsehprogramm, Konferenzprogramm, Parteiprogramm • 'Programm' im speziellen:

– nicht notwendig nur auf Computer bezogen Programm einer Waschmaschine, eines Videorecorders Programm einer Waschmaschine, eines Videorecorders

Nach R. Manthey, Vorlesung Informatik I, Universität Bonn, WS 2001/2002

Page 3: Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -1- Springer-Verlag,

W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -3- Springer-Verlag, ISBN 3-540-20958-1

Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte

Was ist ein Programm?

Nach R. Manthey, Vorlesung Informatik I, Universität Bonn, WS 2001/2002

Page 4: Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -1- Springer-Verlag,

W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -4- Springer-Verlag, ISBN 3-540-20958-1

Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte

Was ist ein Programm?

Nach R. Manthey, Vorlesung Informatik I, Universität Bonn, WS 2001/2002

Page 5: Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -1- Springer-Verlag,

W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -5- Springer-Verlag, ISBN 3-540-20958-1

Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte

Begriff des Algorithmus

• Begriffsdefinition– Ein Algorithmus (algorithm) ist die Beschreibung

eines Verfahrens, um aus gewissen Eingabegrößen bestimmte Ausgabegrößen zu berechnen. Dabei müssen folgende Bedingungen erfüllt sein

• Spezifikation

• Durchführbarkeit

• Korrektheit

Page 6: Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -1- Springer-Verlag,

W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -6- Springer-Verlag, ISBN 3-540-20958-1

Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte

Begriff des Algorithmus

Spezifikation– Eingabespezifikation: Es muss genau spezifiziert

sein, welche Eingabegrößen erforderlich sind und welchen Anforderungen diese Größen genügen müssen, damit das Verfahren funktioniert

– Ausgabespezifikation: Es muss genau spezifiziert sein, welche Ausgabegrößen (Resultate) mit welchen Eigenschaften berechnet werden

Page 7: Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -1- Springer-Verlag,

W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -7- Springer-Verlag, ISBN 3-540-20958-1

Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte

Begriff des Algorithmus

Durchführbarkeit– Endliche Beschreibung: das Verfahren muss in

einem endlichen Text vollständig beschrieben sein– Effektivität: Jeder Schritt des Verfahrens muss

effektiv (d.h. tatsächlich) „mechanisch“ ausführbar sein

• Bem.: „Effektivität“ ist nicht zu verwechseln mit „Effizienz“ („Wirtschaftlichkeit“)

– Determiniertheit: Der Verfahrensablauf ist zu jedem Zeitpunkt fest vorgeschrieben

Page 8: Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -1- Springer-Verlag,

W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -8- Springer-Verlag, ISBN 3-540-20958-1

Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte

Begriff des Algorithmus

• Korrektheit– partielle Korrektheit: Jedes berechnete Ergebnis

genügt der Ausgabespezifikation, sofern die Eingaben der Eingabespezifikation genügt haben

– Terminierung: Der Algorithmus hält nach endlich vielen Schritten mit einem Ergebnis an, sofern die Eingaben der Eingabespezifikation genügt haben

Page 9: Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -1- Springer-Verlag,

W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -9- Springer-Verlag, ISBN 3-540-20958-1

Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte

Begriff des Algorithmus

• Bemerkung: Nach unserer Begriffsbestimmung gäbe es also keine – nicht-deterministische,

– nicht-terminierende

– ...

• Algorithmen

• Diese Begriffe werden aber durchaus verwendet!– Methode erfüllt alle Anforderungen an einen Algorithmus,

bis auf die mit „nicht“ gekennzeichnete

Page 10: Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -1- Springer-Verlag,

W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -10- Springer-Verlag, ISBN 3-540-20958-1

Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte

Ein "Algorithmus" aus dem täglichen Leben

Nach R. Manthey, Vorlesung Informatik I, Universität Bonn, WS 2001/2002

Page 11: Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -1- Springer-Verlag,

W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -11- Springer-Verlag, ISBN 3-540-20958-1

Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte

Eine sehr alte Beschreibung eines Algorithmus

Zitiert nach R. Manthey, Vorlesung Informatik I, WS 2001/2002

Page 12: Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -1- Springer-Verlag,

W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -12- Springer-Verlag, ISBN 3-540-20958-1

Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte

Herkunft des Wortes „Algorithmus“

nach R. Manthey, Vorlesung Informatik I, WS 2001/2002

Page 13: Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -1- Springer-Verlag,

W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -13- Springer-Verlag, ISBN 3-540-20958-1

Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte

Algorithmen und Programme

nach R. Manthey, Vorlesung Informatik I, WS 2001/2002

Page 14: Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -1- Springer-Verlag,

W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -14- Springer-Verlag, ISBN 3-540-20958-1

Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte

Problem – Algorithmus - Programm

Nach R. Manthey, Vorlesung Informatik I, Universität Bonn, WS 2001/2002

Page 15: Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -1- Springer-Verlag,

W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -15- Springer-Verlag, ISBN 3-540-20958-1

Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte

Prinzipien des Algorithmenentwurfs

• Neben den Bedingungen, die schon in die Begriffsdefinition eingegangen sind, gibt es weitere wichtige Prinzipien, die beim Entwurf zu beachten sind– Effizienz

• Der Algorithmus soll möglichst wenig Aufwand verursachen– Das Ergebnis mit möglichst wenig Rechenschritten (oder mit möglichst

wenig Speicherbedarf) erzielen

• Frage der Komplexität von Algorithmen wichtiges Thema in der Informatik III und Informatik IV

– Korrektheit beweisbar?• Ein nicht-korrekter Algorithmus ist nach unserer Definition kein

Algorithmus!• Trotzdem sind nicht-korrekte Verfahren eher die Regel als die

Ausnahme

Page 16: Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -1- Springer-Verlag,

W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -16- Springer-Verlag, ISBN 3-540-20958-1

Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte

Beschreibung von Algorithmen

• Für die Beschreibung von Algorithmen gibt es viele Möglichkeiten– Alltagssprache – Konkrete Programmiersprache– Dazwischen gibt es eine Vielzahl von Notationen,

die den Übergang zwischen Problembeschreibung und Programm erleichtern sollen

• Flussdiagramme

• Pseudocode

Page 17: Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -1- Springer-Verlag,

W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -17- Springer-Verlag, ISBN 3-540-20958-1

Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte

Beschreibung von Algorithmen

• Wir stellen Algorithmen als Folge einzelner Bearbeitungsschritte dar– Diese können ggf. wiederholt werden, bis das gewünschte

Ergebnis erzielt ist

– Wiederholungen geschehen entweder • innerhalb der Schrittfolge durch Anweisungen wie:

weiter mit Schritt (2) („Iteration“),

• oder durch erneutes Aufrufen des Algorithmus mit einer einfacheren Problemstellung („Rekursion“)

• Jeder Schritt sollte wie ein Buchkapitel einem Thema folgen

Page 18: Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -1- Springer-Verlag,

W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -18- Springer-Verlag, ISBN 3-540-20958-1

Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte

Grundschema des Algorithmenaufbaus

• Folgendes Grundschema wird uns bei vielen Algorithmen begegnen

Page 19: Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -1- Springer-Verlag,

W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -19- Springer-Verlag, ISBN 3-540-20958-1

Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte

Grundschema des Algorithmenaufbaus: Beispiel

• Beispiel: Man finde ein Verfahren zur Berechnung des Rests r der Ganzzahldivision a/b, also für cb+r=a und r<b, wobei 0≤a und 0≤b– Diese Funktion wird meist „Modulus-Funktion“ genannt, da ra mod b

Page 20: Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -1- Springer-Verlag,

W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -20- Springer-Verlag, ISBN 3-540-20958-1

Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte

Steuerungsverlauf

• Die Anordnung der Anweisungen eines Algorithmus, die bestimmt, in welcher Reihenfolge Dinge geschehen, heißt– Steuerungsverlauf (control flow) des Algorithmus

• Wird auch Kontrollfluss (flow of control) genannt

– Manchmal wird auch der Programmablauf oder Kontrollfaden (thread of control), also die tatsächlich abgespulten Schritte und Anweisungen so bezeichnet

Page 21: Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -1- Springer-Verlag,

W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -21- Springer-Verlag, ISBN 3-540-20958-1

Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte

Steuerungsverlauf

• Die Konstruktion „fahre fort mit Schritt 2“ stellt einen Sprung (jump) im Steuerungsverlauf dar– Dies ist die elementarste Form, eine Wiederholung

oder sonstige Verzweigung im Ablauf auszudrücken– Dadurch erhalten wir die elementar-iterative

Beschreibungsform von Algorithmen

Page 22: Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -1- Springer-Verlag,

W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -22- Springer-Verlag, ISBN 3-540-20958-1

Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte

Elementar-iterative Beschreibungsform

• Die elementar-iterative Beschreibungsform hat die nützliche und angenehme Eigenschaft:– Wir können über einzelne Schritte des Verfahrens sprechen

• Die „fahre fort“-Konstruktion entspricht unmittelbar der goto-Anweisung im Programmieren– Zur Anwendung von goto werden Schritte mit einer Marke

(Label) versehen, um das Ziel des Sprunges zu kennzeichnen

• Anwendung von goto ist aber sehr gefährlich!– Strukturiert komplexe Programm nicht ausreichend

• Steuerungsverlauf kann verworren und unübersichtlich sein

Page 23: Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -1- Springer-Verlag,

W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -23- Springer-Verlag, ISBN 3-540-20958-1

Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte

• Der Steuerungsverlauf kann mit der Notation der Flussdiagramme (flow chart) graphisch dargestellt werden – Die Sprache der Flussdiagramme benutzt folgende Symbole

• Werden mit Pfeilen verbunden• Die Ausführung solcher Ablaufpläne folgt den Pfeilen zwischen den Kästchen

Flussdiagramme

Page 24: Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -1- Springer-Verlag,

W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -24- Springer-Verlag, ISBN 3-540-20958-1

Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte

Flussdiagramme

• Beispiel: Grundschema des Algorithmenaufbaus als Flussdiagramm

Page 25: Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -1- Springer-Verlag,

W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -25- Springer-Verlag, ISBN 3-540-20958-1

Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte

Modulus-Funktion als Flussdiagramm

• Beispiel: Flussdiagramm für iterative Beschreibung der Modulus-Funktion

Page 26: Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -1- Springer-Verlag,

W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -26- Springer-Verlag, ISBN 3-540-20958-1

Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte

Strukturiert-iterative Beschreibungsform

• Um den Steuerungsverlauf auch bei komplexen Algorithmen übersichtlich zu halten, schränkt man die Sprünge ein:– Schleifen der Flussdiagramme sind höchstens ineinander geschachtelt– Schleifen überkreuzen sich nicht!

• Im Arbeitsschritt des Grundschemas würde man z. B. nur wieder eine geschlossene Schleife oder einen (vorzeitigen) Sprung zurück zum Test des Trivialfalls erlauben

• Wir sprechen in diesem Fall von strukturierten Sprüngen im Gegensatz zu freien Sprüngen, die prinzipiell beliebige Ziele haben können

Page 27: Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -1- Springer-Verlag,

W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -27- Springer-Verlag, ISBN 3-540-20958-1

Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte

Strukturiert-iterative versus elemantar-iterative Beschreibungsform

• Beispiel: Schemata einiger Kontrollflüsse

Strukturiert-iterativ Elementar-iterativ Spaghetti-Code

Page 28: Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -1- Springer-Verlag,

W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -28- Springer-Verlag, ISBN 3-540-20958-1

Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte

Strukturiert-iterative Beschreibungsform

• Sprünge kommen zunächst nur noch implizit bei der Ausführung höherer Iterationsstrukturen vor– Dieses sind Fallunterscheidungen wie if-then-else– Oder insbesondere bei Schleifenkonstrukten (loop),

wie etwa •while

– Diese bewirken, dass der Programmfluss in einer Schleife von einem Test zu einem Bearbeitungsschritt und wieder zurück zum Test geht

Page 29: Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -1- Springer-Verlag,

W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -29- Springer-Verlag, ISBN 3-540-20958-1

Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte

Strukturiert-iterative Beschreibungsform: while

• Schleifenkonstrukte: while – Die klassische while-Schleife lautet wie folgt:

– Bei Eintritt in die while-Schleife wird zunächst die Bedingung (ein Boolescher Ausdruck) ausgewertet

• Beim Wert true wird die Anweisungssequenz einmal ausgeführt und danach erneut zur Bedingung verzweigt

• Beim Wert false wird die Schleife (ohne Ausführung der Anweisungssequenz) beendet

Page 30: Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -1- Springer-Verlag,

W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -30- Springer-Verlag, ISBN 3-540-20958-1

Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte

Strukturiert-iterative Beschreibungsform: while

• Die while-Schleife entspricht also der Konstruktion

.

Page 31: Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -1- Springer-Verlag,

W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -31- Springer-Verlag, ISBN 3-540-20958-1

Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte

Rekursive Beschreibungsform

• Im rekursiven Ansatz versucht man, ein vorgelegtes Problem P(X) nach folgendem Schema in zwei Teilen zu lösen:

• Bem.: Rekursive und iterative Beschreibungsformen sind gleich mächtig– Nach einer Formalisierung des Algorithmenbegriffs kann dies auch

bewiesen werden! • Etwa in der Vorlesung Informatik IV

Page 32: Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -1- Springer-Verlag,

W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -32- Springer-Verlag, ISBN 3-540-20958-1

Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte

Rekursive Beschreibungsform: Beispiel

• Beispiel: In gängiger mathematischer Notation könnte ein Verfahren zur Berechnung der Modulus-Funktion a mod b wie folgt aussehen:

Page 33: Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -1- Springer-Verlag,

W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -33- Springer-Verlag, ISBN 3-540-20958-1

Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte

Rekursive Beschreibungsform: Beispiel

• Beispiel (Forts.): Um festzustellen, ob diese Berechnungsvorschrift einen Algorithmus darstellt, müssen wir folgende Fragen beantworten:– Spezifikation

• Eingabe• Ausgabe

– Durchführbarkeit• Endliche Beschreibung• Effektivität• Determiniertheit

– Korrektheit• Partielle Korrektheit• Terminierung

Page 34: Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -1- Springer-Verlag,

W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -34- Springer-Verlag, ISBN 3-540-20958-1

Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte

Rekursive Beschreibungsform: Korrektheitsbeweis des Beispiels

• Beispiel (Forts.):

– Spezifikation

Page 35: Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -1- Springer-Verlag,

W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -35- Springer-Verlag, ISBN 3-540-20958-1

Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte

Rekursive Beschreibungsform: Korrektheitsbeweis des Beispiels

• Beispiel (Forts.):

Page 36: Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -1- Springer-Verlag,

W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -36- Springer-Verlag, ISBN 3-540-20958-1

Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte

Rekursive Beschreibungsform: Korrektheitsbeweis des Beispiels

• Beispiel (Forts.):

Page 37: Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -1- Springer-Verlag,

W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -37- Springer-Verlag, ISBN 3-540-20958-1

Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte

Rekursive Beschreibungsform: Korrektheitsbeweis des Beispiels

• Beispiel (Forts.):

– Korrektheit

Bemerkungen: Diese Überlegungen stellen einen Korrektheitsbeweis dar

Die Termination konnte bei diesem Algorithmus also bewiesen werden; es gibt aber kein mechanisches Verfahren das bei einem beliebigen Algorithmus entscheiden kann, ob dieser terminiert oder nicht („Halte-Problem“)

Page 38: Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -1- Springer-Verlag,

W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -38- Springer-Verlag, ISBN 3-540-20958-1

Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte

Rekursive Beschreibungsform: Beispiel in Java

• Das rekursive Verfahren in mathematischer Notation können wir mit minimalen Änderungen nach Java umsetzen– Wir definieren dazu eine Java-Funktion mod, die zwei ganze Zahlen a

und b als Parameter hat und eine ganze Zahl als Ergebnis liefert

Page 39: Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -1- Springer-Verlag,

W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -39- Springer-Verlag, ISBN 3-540-20958-1

Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte

Rekursive Beschreibungsform: Beispiel in Java

• Zur Illustration stellen wir nun noch eine etwas ausführlichere (aber gleichwertige) Version dieser Funktion vor

Kommentarzeilen

Zum Vergleich: Rekursionsgleichung

Page 40: Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -1- Springer-Verlag,

W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -40- Springer-Verlag, ISBN 3-540-20958-1

Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte

Euklidischer Algorithmus zur ggT-Berechung

• Als weiteres Beispiel für die rekursive Beschreibungsform nehmen wir den Euklidischen Algorithmus zu Berechnung des größten gemeinsamen Teilers (ggT) zweier ganzer Zahlen

Page 41: Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -1- Springer-Verlag,

W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -41- Springer-Verlag, ISBN 3-540-20958-1

Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte

Euklidischer Algorithmus zur ggT-Berechung

• Beschreibung in einem Pseudo-CodeZum Vergleich:

Rekursionsgleichung

Page 42: Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -1- Springer-Verlag,

W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -42- Springer-Verlag, ISBN 3-540-20958-1

Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte

Euklidischer Algorithmus zur ggT-Berechung

• Beschreibung in Java

Andere Art eines Kommentars, ein

„Dokumentationskommentar“

Modulus-Funktion ist in Java eingebaut; wird durch das Symbol % beschrieben;könnten auch die selbst definierte Funktion mod aufrufen

Page 43: Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -1- Springer-Verlag,

W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -43- Springer-Verlag, ISBN 3-540-20958-1

Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte

Rekursion und funktionale Programmierung

• Der rekursive Ansatz zur Problemlösung ist die Hauptdenkweise, die die funktionalen Programmiersprachen unterstützen– Etwa LISP, Scheme, ML, Haskell

• Vorzug liegt in der großen Eleganz und Kompaktheit gerade bei kleinen Lehrbuchbeispielen

• Dieser Ansatz erfordert nur sehr wenige syntaktische Konstrukte der Programmiersprache (kein while, for, repeat, ...)

Page 44: Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -1- Springer-Verlag,

W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -44- Springer-Verlag, ISBN 3-540-20958-1

Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte

Rekursion und funktionale Programmierung

• Funktionale Denkweise: – kein Begriff des Zustands (state) einer Berechnung.

• manchmal beträchtliche Eleganz, erleichtert auch Korrektheitsbeweise

– Alle Daten sind global, alle Funktionen können auf allen Daten operieren

• Objektorientierte Denkweise:– Funktionen sind mit ihren Daten zu Objekten gekapselt– Objekte interagieren durch Fenster mit anderen Objekten– Objekte haben Zustände (gegeben durch die Daten)– Zustände werden durch Berechnung weiterentwickelt

• In der objektorientierten Welt ist daher das (ebenfalls klassische) zustandsorientierte iterative Konzept zur Konstruktion von algorithmischen Problemlösungen am weitesten verbreitet

• Wie wir gesehen haben, kann auch in einer objektorientierten Sprache wie Java rekursiv programmiert werden!

Page 45: Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -1- Springer-Verlag,

W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -45- Springer-Verlag, ISBN 3-540-20958-1

Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte

Konstruktion und Verifikation iterativer Algorithmen

• Bei der Verwendung von imperativen (Anweisungs orientiert) Programmiersprachen wie Java stellt die Konstruktion korrekter iterativer Algorithmen den Kern des Programmierens dar– Hat man diese nicht verstanden, kann man auch nicht

programmieren

• Wir betrachten deshalb den Grundaufbau iterativer Algorithmen nochmals in vertiefter Form– Besonders auch unter dem Aspekt, dass wir strukturiert-

iterative Algorithmen entwickeln und als korrekt beweisen wollen

Page 46: Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -1- Springer-Verlag,

W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -46- Springer-Verlag, ISBN 3-540-20958-1

Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte

Konstruktion und Verifikation iterativer Algorithmen

• Betrachten Grundschema des Algorithmenaufbaus in einer Variante, die einem strukturiert-iterativen Ansatz entspricht

• Der Algorithmus operiert dabei auf einer Menge V von Variablen (Name mit wechselndem Wert)– Diese Zustandsvariablen haben veränderliche Werte und können somit

bearbeitet werden, und unter ihnen befindet sich schlußendlich das Resultat

• Nach einem Vorbereitungsschritt wird so lange die Arbeit f(V) verrichtet, wie die Schleifenbedingung C(V) wahr ist

• Danach wird ein Nachbearbeitungsschritt ausgeführt und der Algorithmus beendet

Page 47: Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -1- Springer-Verlag,

W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -47- Springer-Verlag, ISBN 3-540-20958-1

Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte

Konstruktion und Verifikation iterativer Algorithmen

• Zur Verifikation werden Zustandsvariablen partitioniert in V=EHA– E ist Menge der Eingabevariablen

• Eingabeparameter der Berechnung

– A ist Menge der Ausgabevariablen• Werte zum Schluss zeigen Ergebnis der Berechnung an

– H ist Menge der Hilfsvariablen

• Die Werte der Variablen spiegeln zu jedem Zeitpunkt den Zustand (state) der Berechnung wider

Page 48: Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -1- Springer-Verlag,

W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -48- Springer-Verlag, ISBN 3-540-20958-1

Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte

Konstruktion und Verifikation iterativer Algorithmen

• Problemlösung durch den Algorithmus findet also dadurch statt, dass der Anfangszustand V0, in dem nur die Variablen in E relevante Werte haben, durch eine Berechnungssequenz Schritt für Schritt („iterativ“) in einen Endzustand transformiert wird– In dem die Werte der Variablen in A das

gewünschte Gesamtresultat darstellen– Oft gibt es nur ein einziges Resultat, das wir

üblicherweise mit r oder res bezeichnen

Page 49: Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -1- Springer-Verlag,

W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -49- Springer-Verlag, ISBN 3-540-20958-1

Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte

Konstruktion und Verifikation iterativer Algorithmen

• Ein elementarer Berechnungsschritt eines Algorithmus ändert im Allgemeinen den Wert von Variablen– Variablen können Werte zugewiesen werden– Zuweisungsoperator in imperativen Sprachen von

fundamentaler Bedeutung• In Pascal heißt Zuweisungsoperator :=

– Benutzen := für Zuweisungsoperator in Pseudocode

• In C, C++, Java heißt Zuweisungsoperator =

Page 50: Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -1- Springer-Verlag,

W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -50- Springer-Verlag, ISBN 3-540-20958-1

Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte

Konstruktion und Verifikation iterativer Algorithmen

• Erfolgt Reduktion mithilfe strukturierter Iteration, so kann i.A. Korrektheit durch Finden einer geeigneten Schleifeninvariante bewiesen werden

• Schleifeninvariante: Prädikatenlogische Formel INV(V), die an bestimmter Stelle einer Schleife bei allen Schleifendurchgängen stets gilt

• F(V) ist Schleifeninvariante falls1. F(V) gilt vor dem ersten Durchgang

2. F(V) => F(V ´); F gilt nachher, falls F vorher gegolten hat

Page 51: Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -1- Springer-Verlag,

W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -51- Springer-Verlag, ISBN 3-540-20958-1

Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte

Vorbereitung

Name des AlgorithmusEingabe: Liste der Parameter mit TypAnforderung: Bedingung für ParameterAusgabe: Ausgabevariablen mit TypZusicherung: Bedingung für AusgabenHilfsgrößen: Hilfsvariablen mit Typ

Nachbereitung

Arbeit f(V)

Schleifen-InvarianteINV(V) gilt hier

Zusicherunggilt hier

[Anforderung]

[Iterationsbedingung]

[Abbruchbedingung]

Konstruktion und Verifikation iterativer Algorithmen

Grundschema der strukturierten Iteration mit Schleifeninvariante als UML activity chart

Schleifeninvariante INV(V)geeignete Formel, die beiallen Schleifendurchgängen gilt

Page 52: Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -1- Springer-Verlag,

W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -52- Springer-Verlag, ISBN 3-540-20958-1

Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte

Konstruktion und Verifikation iterativer Algorithmen

Grundschema der strukturierten Iteration mit Schleifeninvariante

Schleifeninvariante INV(V)geeignete Formel, die beiallen Schleifendurchgängen gilt

Verifikation nach Floyd:1) INV(V) ʌ C(V) =>

nach Arbeit f(V) gilt INV(V)2) Anforderung =>

nach Vorbereitung gilt INV(V)3) INV(V) ʌ ¬C(V) =>

nach Nachbereitung gilt Zusicherung

Page 53: Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -1- Springer-Verlag,

W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -53- Springer-Verlag, ISBN 3-540-20958-1

Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte

Verifikationsmethode von Floyd

• Die Verifikationsmethode von Floyd für das Grundschema iterativer Algorithmen ist

1. Finde eine geeignete Formel F(V) und zeige, dass sie eine Schleifen-Invariante an der im Flußdiagramm auf voriger Seite angegebenen Stelle ist; bezeichne F(V) nachfolgend mit INV(V)

2. Zeige, dass aus der Eingabespezifikation folgt, dass INV(V) vor dem ersten Schleifendurchgang gültig ist

3. Zeige, dass nach dem letzten Schleifendurchgang aus INV(V) und aus der Negation der Schleifenbedingung C(V), also aus INV(V) C(V) die Gültigkeit der Ausgabespezifikation folgt

4. Zeige, dass die Schleife terminiert

Page 54: Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -1- Springer-Verlag,

W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -54- Springer-Verlag, ISBN 3-540-20958-1

Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte

Verifikationsmethode von Floyd

Page 55: Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -1- Springer-Verlag,

W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -55- Springer-Verlag, ISBN 3-540-20958-1

Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte

Konstruktion und Verifikation iterativer Algorithmen

• Algorithmus für die Fakultätsfunktion mit Schleifeninvariante

Schleifeninvariante F(n,r,i)= [n! = r*i!]

Page 56: Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -1- Springer-Verlag,

W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -56- Springer-Verlag, ISBN 3-540-20958-1

Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte

r := 1; i := n;

Funktion fac(n)Eingabe: n : INAnforderung: n in INAusgabe: r : INZusicherung: r = n!Hilfsgrößen: i : int

return( r );

r := r * i; i := i - 1;

Schleifen-Invariante: (n! = r * i!)gilt hier.

Zusicherung: r = n! gilt hier

[n >= 0]

[i > 1]

[i <= 1]

Konstruktion und Verifikation iterativer Algorithmen

Fakultätsfunktion als UML activity chart

Page 57: Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -1- Springer-Verlag,

W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -57- Springer-Verlag, ISBN 3-540-20958-1

Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte

Konstruktion und Verifikation iterativer Algorithmen

Page 58: Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -1- Springer-Verlag,

W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -58- Springer-Verlag, ISBN 3-540-20958-1

Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte

Konstruktion und Verifikation iterativer Algorithmen

Beispiel: Modulus-Funktion (iterativ)

Page 59: Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -1- Springer-Verlag,

W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -59- Springer-Verlag, ISBN 3-540-20958-1

Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte

Konstruktion und Verifikation iterativer Algorithmen

Beispiel: Modulus-Funktion (iterativ)

Page 60: Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -1- Springer-Verlag,

W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -60- Springer-Verlag, ISBN 3-540-20958-1

Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte

Konstruktion und Verifikation iterativer Algorithmen

Beispiel: Modulus-Funktion (iterativ) als UML activity chart

r := a;

r := r - b;

return( r );

Funktion mod(a,b)Anforderungen: a: IN, b: IN, (b > 0)Ausgabe: r : INZusicherung: r = a - (a/b)*b (r ist der Rest der Division a/b)

r = a - (a/b)*b

[a >= 0; b > 0]

[r < b]

[r >= b]

Page 61: Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -1- Springer-Verlag,

W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -61- Springer-Verlag, ISBN 3-540-20958-1

Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte

Konstruktion und Verifikation iterativer Algorithmen

Beispiel: Verifikation der Modulus-Funktion (iterativ) nach Floyd

r := a;

r := r - b;

return( r );

Funktion mod(a,b)Anforderungen: a: IN, b: IN, (b > 0)Ausgabe: r : INZusicherung: r = a - (a/b)*b (r ist der Rest der Division a/b)

r = a - (a/b)*b

Invariante[a - (a/b)*b = r - (r/b)*b]gilt hier

[a >= 0; b > 0]

[r < b]

[r >= b]

Verifikation nach Floyd:1. Aus [a-(a/b)*b = r-(r/b)*b]

und (r>=b) und {r := r-b;}folgt [a-(a/b)*b = r-(r/b)*b]

2. Aus (a >= 0, b > 0) und {r := a;} folgt [a-(a/b)*b = r-(r/b)*b]

3. Aus [a-(a/b)*b = r-(r/b)*b] und(r < b) und {return( r );}folgt (r = a – (a/b)*b)

Page 62: Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -1- Springer-Verlag,

W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -62- Springer-Verlag, ISBN 3-540-20958-1

Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte

Konstruktion und Verifikation iterativer Algorithmen

Verifikations-Beispiel: Modulus-Funktion (iterativ)

Page 63: Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -1- Springer-Verlag,

W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -63- Springer-Verlag, ISBN 3-540-20958-1

Folien zu Kapitel 3: Algorithmen und algorithmische Sprachkonzepte

Konstruktion und Verifikation iterativer Algorithmen

• Finden von Schleifen-Invarianten– Invariante für fac(n) : [n! = r * i!]– Invariante für mod(a,b): [(a mod b) = r – (r/b)*b]

• Gemeinsame Struktur– Links von = steht die Aufgabe– Rechts steht getane Arbeit und noch zu tuende Arbeit

• r steht für getane Arbeit (akkumuliertes Ergebnis)• Schleifen-Index i repräsentiert noch zu tuende Arbeit

– Bei fac ist i! der Wert, den man noch zu r multiplizieren muß, bis r = n!

– Bei mod ist (r/b)*b der Wert, den man noch von r abziehen muß, bis r = (a mod b).