Praktische Informatik I 2. Entwurf von Algorithmen 2 - 1© Wolfgang Effelsberg
2. Entwurf von Algorithmen
2.1 Algorithmen, Programmiersprachen und Programme
2.2 Systematischer Entwurf von Algorithmen
2.3 Schrittweise Verfeinerung
Praktische Informatik I 2. Entwurf von Algorithmen 2 - 2© Wolfgang Effelsberg
2.1 Algorithmen, Programmiersprachen und Programme
Algorithmus: ein Verfahren zur systematischen, schrittweisen Lösung eines ProblemsBeschrieben in:
• Umgangssprache
• Programmiersprache
• mathematischem Formalismus (z. B. Turing-Maschine)
• …
Church-Turing-These"All reasonable definitions of 'algorithm' are equivalent."
Praktische Informatik I 2. Entwurf von Algorithmen 2 - 3© Wolfgang Effelsberg
Algorithmus vs. Programm
Algorithmus
Programmierung
Programm inhöherer
Programmiersprache
Übersetzung
Programm inMaschinensprache
Interpretation durch CPU
(Gewünschter Ablauf wird ausgeführt)
Praktische Informatik I 2. Entwurf von Algorithmen 2 - 4© Wolfgang Effelsberg
Beispiele für Algorithmen
Prozess Algorithmus Typische Schritte im AlgorithmusPullover stricken Strickmuster Linke Masche, rechte Masche stricken
Modellflugzeug bauen
Montage-anleitung
Leime Rippe A an den Holm B
Kleider nähen Schnittmuster Nähe Saum
spiele Musik Notenblatt
kochen Rezept Zutaten (4 Personen)400 g Tomatensoße, 1/2 l Wasser, 3 Teelöffel Chilipulver,1 1/2 l Minutenreis, 1/2 kg zerstoßene Tortilla-Chips,1/2 kg klein geschnittener CheddarkäseAnleitung: vermenge Tomatensoße, Wasser, Chilipulver in einem mittelgroßen Topf und bringe es zum Kochen. Rühre den Reis ein, decke den Topf ab, nehme ihn vom Feuer und lasse ihn 10 Minuten stehen. Streue Tortilla-Chips und Käse darüber. Serviere das Essen, wenn gewünscht, mit Salat-blättern und saurer Sahne. Aus: Syd's Kochbuch.
Praktische Informatik I 2. Entwurf von Algorithmen 2 - 5© Wolfgang Effelsberg
Algorithmen als fundamentales Konzept
Der Entwurf von Algorithmen ist ein kreativer Prozess, der nicht auto-matisiert werden kann. Er ist
• unabhängig von der Programmiersprache
• unabhängig von der Rechner-Hardware
BeispielSummiere alle Zahlen zwischen 1 und 100.
Lösung 11+2+3+4…+99+100 = 5050
Lösung 2(1+100)+(2+99)+…(50+51) = 50*101 = 5050
Wir sehen: Die Effizienz eines Algorithmus ist ein wichtiges Kriterium.
Praktische Informatik I 2. Entwurf von Algorithmen 2 - 6© Wolfgang Effelsberg
Richtlinien
• Ist das Problem lösbar?
• Welche Schritte müssen ausgeführt werden, um einen korrektenAlgorithmus zu erhalten? Korrektheit heißt:
• Der Algorithmus erzeugt ein Resultat (ist endlich).
• Das Resultat ist korrekt.
• Ist der Algorithmus effizient?
Praktische Informatik I 2. Entwurf von Algorithmen 2 - 7© Wolfgang Effelsberg
Beispiele
• Unlösbares Problem HalteproblemFinde einen Algorithmus, der feststellt, ob ein beliebiger Algorithmus in endlicher Zeit irgendein Ergebnis liefert (=anhält).
• Sehr komplexes ProblemProblem des Handlungsreisenden (traveling salesman) Für eine beliebige Topologie: Finde den kürzesten Weg, der alle Städte verbindet, die der Handlungsreisende aufsuchen soll.
Praktische Informatik I 2. Entwurf von Algorithmen 2 - 8© Wolfgang Effelsberg
Schwierigkeiten beim Algorithmenentwurf
• Es existiert keine präzise Definition des Problems.
• Spezialfälle kommen vor, die nicht betrachtet wurden.
• Es ist schwer zu zeigen, dass der Algorithmus für alle möglichen Ein-gabedaten korrekt abläuft.
Praktische Informatik I 2. Entwurf von Algorithmen 2 - 9© Wolfgang Effelsberg
Beispiele für Schwierigkeiten (1)
Beispiel 1: Wegbeschreibung 1. am Laden rechts abbiegen2. geradeaus bis zur nächsten Kreuzung3. rechts abbiegen4. dritte Querstraße linksAn welchem Laden? (UNPRÄZISE)
Praktische Informatik I 2. Entwurf von Algorithmen 2 - 10© Wolfgang Effelsberg
Beispiele für Schwierigkeiten (2)
Beispiel 2: Finde Süden mit der Uhr1. Richte kleinen Zeiger auf die Sonne.2. Berechne die Winkelhalbierende zwischen dem kleinen Zeiger und
12.00 h.3. Winkelhalbierende zeigt nach Süden.Ausrichten des kleinen Zeigers durch Drehen am Stellknopf oder Drehen der gesamten Uhr? (UNPRÄZISE)Funktioniert nicht auf der Südhalbkugel! (Sonderfall vergessen)
Praktische Informatik I 2. Entwurf von Algorithmen 2 - 11© Wolfgang Effelsberg
Beispiele für Schwierigkeiten (3)
Beispiel 3: Repariere Wasserhahn1. Wasserhahn aufdrehen2. warten, bis kein Wasser mehr fließt3. Hahn abschrauben4. Dichtung gegen neue Dichtung auswechseln5. Hahn anschrauben6. Hahn zudrehen 7. Haupthahn öffnenEndet nicht; Schritt 2 unendlich; es wurde vergessen, zu Anfang den Haupthahn zuzudrehen.
Praktische Informatik I 2. Entwurf von Algorithmen 2 - 12© Wolfgang Effelsberg
Folgerung
Der Entwurf von Algorithmen muss auf systematische Weise diszipliniertdurchgeführt werden. Methoden zum systematischen Entwurf und zur Ana-lyse von Algorithmen (Komplexität und Korrektheit) sind hilfreich.In einem zweiten Schritt wird der Algorithmus als Computerprogramm for-muliert. Dieser Schritt wird als Programmierung bezeichnet. Durch die Verwendung einer in Syntax und Semantik wohldefinierten Sprache wird sichergestellt, dass die einzelnen Anweisungen
• unmissverständlich sind
• auf dem Zielrechner ausführbar sind (Mächtigkeit, Detaillierungsgrad).
Praktische Informatik I 2. Entwurf von Algorithmen 2 - 13© Wolfgang Effelsberg
Formulierungsfehler
Annahme:Es existiert ein Algorithmus, der nicht zu komplex ist. Welche Fehler können in der Formulierung auftauchen?Wir unterscheiden drei Klassen von Fehlern:
• syntaktische Fehler
• semantische Fehler
• logische Fehler
Praktische Informatik I 2. Entwurf von Algorithmen 2 - 14© Wolfgang Effelsberg
Klassifikation von Fehlern (1)
a) Syntaktische FehlerWerden durch den Compiler oder Interpreter gefunden und als solche ge-kennzeichnet. Die Instruktion wird nicht ausgeführt. Beispiel:
a = b * + c;
Praktische Informatik I 2. Entwurf von Algorithmen 2 - 15© Wolfgang Effelsberg
Klassifikation von Fehlern (2)
b) Semantische FehlerWerden entweder während der Ausführung gefunden (Java Exception, seg-mentation fault im Betriebssystem) oder schlimmstenfalls nie gefunden.Beispiel: Feldgrenzenverletzung. Der Vektor a habe 100 Elemente.
i = 101;
a[i] = 17;
Beispiel: Teilen durch 0 r = 0.0;
s = 170/r;
Praktische Informatik I 2. Entwurf von Algorithmen 2 - 16© Wolfgang Effelsberg
Klassifikation von Fehlern (3)
c) Logische FehlerDas Programm tut nicht, was der Programmierer eigentlich wollte.Beispiel:
// berechne Kreisumfang
circumference = PI * radius;
// anstatt 2*PI*radius
Viele semantischen und alle logischen Fehler können während des Testens und durch formale Verifikation gefunden werden. Wichtig: Tests sind im Gegensatz zur formalen Verifikation keine Korrekt-heitsbeweise für ein Programm!
Praktische Informatik I 2. Entwurf von Algorithmen 2 - 17© Wolfgang Effelsberg
Programmierung
Ein Programm ist eine Folge von Anweisungen, die einem Computer sagen, was er tun soll.
tuwas.ctuwas.c
for(int i=0; i<10; i++) System.out.println
(“Hello World“);Beep();
Play(nextAudiofile);
for(int i=0; i<10; i++) System.out.println
(“Hello World“);Beep();
Play(nextAudiofile);
Programme werden in einer künstlichen Sprache verfasst und in Textdateien gespeichert. Sie sollen
• für Menschen lesbar sein• so präzise sein, dass sie unmissverständliche Handlungsanweisungen
für denRechner beinhalten.
Praktische Informatik I 2. Entwurf von Algorithmen 2 - 18© Wolfgang Effelsberg
Programmiersprachen
Es gibt Tausende von Programmiersprachen.• Allgemeine Sprachen, mit denen prinzipiell alle Fähigkeiten eines
Rechners zugänglich sind:Pascal, C, Java, C#, Prolog, LISP, FORTRAN, …
• Spezialsprachen für bestimmte Anwendungen:SQL, HTML, TeX, TCL/TK, …
Praktische Informatik I 2. Entwurf von Algorithmen 2 - 19© Wolfgang Effelsberg
Kommando
Die Hardware des Rechners versteht nur sehr einfache Kommandos:
ADD R4,R5, INC R6, JMP A3, MOV R5,TARGET (Assembler)
Diese Kommandos sind als Zahlen im Binärsystem (d.h. mit den Ziffern 0 und 1) kodiert, etwa:
10001010 10100111 11010101 10010110 11010110 10101001 11110101 01011110 10110010 10100101
Für Menschen sind daher Programme in Maschinensprache nicht mehr direkt lesbar.
Praktische Informatik I 2. Entwurf von Algorithmen 2 - 20© Wolfgang Effelsberg
Compiler (1)
Ein Compiler übersetzt Programme aus einer höheren Sprache in die Maschinensprache des Computers.
C-Compiler
tuwas.ctuwas.c
int i;for(i=0;i<10;i++) printf(“Hello World“);
beep();play(“HeyJoe.mp3“);
int i;for(i=0;i<10;i++) printf(“Hello World“);
beep();play(“HeyJoe.mp3“);
Ausführbares Programm
tuwas.exetuwas.exe
10001010 10100111 11010101 10010110 11010110 10101001 11110101 01011110 10110010
10100101
10001010 10100111 11010101 10010110 11010110 10101001 11110101 01011110 10110010
10100101
Praktische Informatik I 2. Entwurf von Algorithmen 2 - 21© Wolfgang Effelsberg
Compiler (2)
Jede Maschine hat andere Befehle.• Ein Maschinenprogramm für einen PC läuft nicht auf einem Mac und
umgekehrt.Betriebssysteme stellen eine Infrastruktur bereit, die Programme nutzen können:
• Dateiverwaltung, Speicherverwaltung, Prozessverwaltung, Input/Output, Hilfsprogramme…
Programme greifen direkt auf die Ressourcen zu, die das Betriebssystemen verwaltet:
• writefile, print, readfile, send, receive …
Konsequenz:Jedes Programm läuft nur auf einem bestimmten Rechnertyp mit einem be-stimmten Betriebssystem, z. B. nur auf einem PC PC mit Linux, oder nur auf Mac mit MacOS
Praktische Informatik I 2. Entwurf von Algorithmen 2 - 22© Wolfgang Effelsberg
Compiler (3)
Pascal Compiler für PC mit LinuxPascal
PC mit Linux
PC mit Windows
Mac mit MacOS
C
Basic
Pascal Compiler für PC mit WindowsPascal Compiler für Mac mit MacOS
m Sprachen, n Hardware-Plattformen = m*n Compiler
LISP
Praktische Informatik I 2. Entwurf von Algorithmen 2 - 23© Wolfgang Effelsberg
Virtuelle Maschine (1)
Eine Virtuelle Maschine VM ist ein gedachter Computer. VM wird auf jedem realen Computer simuliert (emuliert).Jede VM simuliert eine Zwischensprache. Anweisungen in dieser Zwischensprache heißen Bytecode.Für jede Sprache benötigt man dann nur einen Compiler nach VM!
Praktische Informatik I 2. Entwurf von Algorithmen 2 - 24© Wolfgang Effelsberg
Virtuelle Maschine (2)
PC mit LinuxPascal
PC mit Windows
Virtuelle Maschine
C
Basic
LISP
Mac mit MacOS
m Sprachen , n Plattformen = m Compiler + n Implementierungen der VM
Praktische Informatik I 2. Entwurf von Algorithmen 2 - 25© Wolfgang Effelsberg
Virtuelle Maschine (3)
Nachteile einer virtuellen MaschineEffizienzverlust
• spezielle Stärken bestimmter Hardware werden vielleicht nicht genutzt
• z.B. spezielle Graphikbefehle, Textbefehle, …
• spezielle Features bestimmter Sprachen kommen auf bestimmten (virtuellen) Maschinen mehr, auf anderen weniger zur Geltung
• Z. B. Garbage Collection, Rekursion, …
Fazit: Eine ideale virtuelle Maschine gibt es nicht.
Praktische Informatik I 2. Entwurf von Algorithmen 2 - 26© Wolfgang Effelsberg
Java Virtual Machine (1)
Java Virtuelle Maschine – nur für Java Die Java Runtime Engine ist eine virtuelle Maschine speziell für die Sprache Java.Sie ist auf fast allen Plattformen implementiert.Unter Windows heißt sie java.exe.
PC mit Linux
PC mit Windows
JVM (Java Virtual Machine)
Mac mit MacOS
Praktische Informatik I 2. Entwurf von Algorithmen 2 - 27© Wolfgang Effelsberg
Java Virtual Machine (2)
Virtuelle Maschinen für • eine Sprache und• multiple Plattformen gab es schon früher, sie haben sich aber nie durchgesetzt.
Beispiele für virtuelle Maschinen für verschiedene Sprachen sind
• Pascal: p-Maschine (Mitte der 80-er Jahre)
• Smalltalk: Smalltalk Bytecode Interpreter
• Prolog: WAM
Praktische Informatik I 2. Entwurf von Algorithmen 2 - 28© Wolfgang Effelsberg
Java Virtual Machine (3)
Seit sich Java durchgesetzt hat, wird die Java VM auch als Ziel-maschine für andere Sprachen benutzt:
JPython
JavaPC mit Linux
PC mit Windows
Mac mit MacOS
NetProlog
JBasic
Java VMSmalltalk/JVM
Praktische Informatik I 2. Entwurf von Algorithmen 2 - 29© Wolfgang Effelsberg
Java Virtual Machine (4)
Kompilation von Java-ProgrammenAus einer Textdatei mit der Endung „.java“ erzeugt der Compiler javaceine Datei mit gleichem Namen, aber der Endung „.class“Diese enthält den Bytecode für die Java VM.
Hallo.javaHallo.java
public class Hallo{ public static void main(String[] args){ System.out.println
(“Hallo Leute“); } }
public class Hallo{ public static void main(String[] args){ System.out.println
(“Hallo Leute“); } }
Hallo.classHallo.classif_cmpeq dup_x1 got_w istoreddiv isubladd ifgebipush ldiv
dadd return
if_cmpeq dup_x1 got_w istoreddiv isubladd ifgebipush ldiv
dadd return
Quellprogramm alsTextdatei Hallo.java
Bytecode alsDatei Hallo.class
Compilerjavac.exe
Praktische Informatik I 2. Entwurf von Algorithmen 2 - 30© Wolfgang Effelsberg
Java Virtual Machine (5)
Die Datei mit dem Bytecode wird an die Java VM übergeben.Der Bytecode könnte auch von einem anderen System, etwa von JPython, JBasic oder Smalltalk/JVM erzeugt worden sein.
Hallo.classHallo.classif_cmpeq dup_x1 got_w istoreddiv isubladd ifgebipush ldivdadd return
if_cmpeq dup_x1 got_w istoreddiv isubladd ifgebipush ldivdadd return
Bytecode alsDatei Hallo.class
Java Virtual Machinejava.exe
HalloLeute
Praktische Informatik I 2. Entwurf von Algorithmen 2 - 31© Wolfgang Effelsberg
Die Werkzeuge des SDK
Java Virtual Machinejava.exe
Java-Compiler javac.exe
Dokumentationstooljavadoc.exe
Praktische Informatik I 2. Entwurf von Algorithmen 2 - 32© Wolfgang Effelsberg
Java Software Development Kit (1)
In Windows XP
• Mit beliebigem Texteditor die Datei Hallo.java erstellen
• Den Kommmandointerpreter cmd.exe aufrufen
• Kompilieren mit javac
• Ausführen mit java
Praktische Informatik I 2. Entwurf von Algorithmen 2 - 33© Wolfgang Effelsberg
Java Software Development Kit (2)
Solche Programme sind aber heute untypisch.Niemand schreibt mehr auf die Konsole.• Rückmeldungen kommen in
• MessageBoxen• Statuszeilen• Klängen
Niemand liest mehr von der Konsole• Eingabe kommt aus
• Bestätigungen• Menüs• TextFeldern• RadioButtons• CheckBoxes• ListBoxes• Slider
• …
Praktische Informatik I 2. Entwurf von Algorithmen 2 - 34© Wolfgang Effelsberg
Java Software Development Kit (3)
Die Programmerstellung ist vorsintflutlich.Man muss Kommandos auf der Kommandozeile eintippen.
• Wo ist die ?• Sind die Pfade richtig gesetzt ?
Man wechselt dauernd zwischen Programmaufrufen von• Editor• Compiler• Virtueller Maschine
Compilermeldungen erscheinen auf der Kommandozeile• „error in line 737“• „; expected“ (wo?)
Testen der Programme durch eingebaute Fehlermeldungen ist umständlich:
•System.out.println(“Das dürfte jetzt nicht sein“);
Praktische Informatik I 2. Entwurf von Algorithmen 2 - 35© Wolfgang Effelsberg
Fazit
Wir werden in diesem Kurs BlueJ verwenden, eine Programmierumgebung für Java, die das Erstellen und Testen von Programmen einfach macht.BlueJ benutzt ein modernes Fensterkonzept.BlueJ beginnt gleich mit dem Konzept der Objektorientierung, was für das Verständnis der Sprache Java sehr hilfreich ist.
Praktische Informatik I 2. Entwurf von Algorithmen 2 - 36© Wolfgang Effelsberg
2.2 Systematischer Entwurf von Algorithmen
a) Problemstellung(a) Ist die Problemstellung verstanden bzw. wie lautet das eigentliche
Problem?• Wenn die Problemstellung nicht verstanden ist, dann weitere
Informationen einholen. Wenn der Kern des Problems klar hervorgehoben ist, dann das eigentliche Problem formulieren.
(b) Ist die selbst Problemstellung klar und exakt?• Wenn nein, dann weitere Informationen zur Problemstellung
beschaffen oder Problemstellung präzisieren.(c) Hat das Problem bereits einen Namen?
• Wenn nein, dann dem Problem einen kurzen und treffenden Namen geben.
Praktische Informatik I 2. Entwurf von Algorithmen 2 - 37© Wolfgang Effelsberg
Problemstellung (2)
(d) Was ist bekannt und was ist gegeben?• Zusammenstellen aller bekannten Eingabegrößen bzw. –objekte.
Jedem Eingabeobjekt einen Namen geben und seinen Typ bzw. seine Art beschreiben.
(e) Was ist unbekannt bzw. was ist gesucht?• Zusammenstellen aller bekannten Ausgabegrößen bzw. Ausgabe-
objekte. Jedem Ausgabeobjekt einen Namen geben und seinen Typ festlegen.
(f) Welche Bedingungen für Ein- und Ausgabeobjekte müssen erfüllt sein bzw. werden gefordert? • Zusammenstellen dieser Bedingungen (z. B. formelmäßige Zusam-
menhänge).
Praktische Informatik I 2. Entwurf von Algorithmen 2 - 38© Wolfgang Effelsberg
Anmerkung zur Problemstellung
In der Praxis ist nur in den seltensten Fällen das zu lösende Problem von vornherein klar beschrieben (spezifiziert)!Gründe•Derjenige, der das Problem hat, und derjenige, der den Algorithmus entwirft, soll, sind oft nicht identisch.•Sie haben meist unterschiedliches Vorwissen über die Anwendungsum-gebung.•Sie machen meist unterschiedliche „selbstverständliche“ Annahmen.Deshalb:Spezifikationen sollten gemeinsam erarbeitet werden.
Praktische Informatik I 2. Entwurf von Algorithmen 2 - 39© Wolfgang Effelsberg
Beispiel für eine unklare Aufgabenstellung (1)
ProblemstellungBerechne die Funktion f(x) = log(x)
Fragen• Was ist die Basis des Logarithmus?
• Wie ist x gegeben? In welchem Datentyp? Welchen Wertebereich hat x?
• Wie soll f(x) ausgegeben werden?
• Mit welcher Genauigkeit soll gerechnet werden?
• Was soll passieren, wenn ein unzulässiges x eingegeben wird?
Praktische Informatik I 2. Entwurf von Algorithmen 2 - 40© Wolfgang Effelsberg
Beispiel für eine unklare Aufgabenstellung (2)
Spezifikationf(x) = log10(x)x, f(x) als IEEE double precision floating point-Wertex: Eingabef(x): AusgabeWertebereich: [0.3, 30]; in allen anderen Fällen eine Fehlermeldung ausgeben.
Praktische Informatik I 2. Entwurf von Algorithmen 2 - 41© Wolfgang Effelsberg
Systematischer Entwurf von Algorithmen (1)
b) Lösungsplan(a) Ist dasselbe Problem oder ein ähnliches bzw. vergleichbares Pro-
blem bekannt?Wenn ja, dann versuche man, Kenntnisse über die Lösung zu er-halten.
(b) Ist ein allgemeineres Problem bekannt? Wenn ja, dann versuche man, Kenntnisse über die Lösung dieses Problems zu erhalten. Man prüfe, ob das gegebene Problem als Sonderfall des allgemeinen Problems behandelt werden kann. Wenn ja, dann wende man die allgemeine Problemlösung an. Wenn sich das Problem verallgemeinern lässt, ohne dass die Lösung erheblich schwerer wird, dann löse man das allgemeinere Problem.
Praktische Informatik I 2. Entwurf von Algorithmen 2 - 42© Wolfgang Effelsberg
Systematischer Entwurf von Algorithmen (2)
(c) Lässt sich das Problem in ein einfacheres Teilproblem oder in mehrere einfachere, in sich geschlossene Teilprobleme aufteilen?Wenn ja, dann teile man das Problem auf und löse die Teilprobleme.
(d) Man stelle einen in Schritte gegliederten Lösungsplan auf. Sind die Teilprobleme zu lösen, dann nehme man für jedes Teilpro-blem einen Schritt.
Praktische Informatik I 2. Entwurf von Algorithmen 2 - 43© Wolfgang Effelsberg
Kommentare zum Lösungsplan
a) Problem: Zeichne ein Dreieck auf dem Bildschirm.b) Allgemeineres Problem: Zeichnen eines Polygons mit n Ecken auf dem
Bildschirm (Dreieck: n = 3, Rechteck: n = 4)Lösung des allgemeineren Problems erheblich schwerer?
Dreieck: Linie von Ecke 1 nach Ecke 2Linie von Ecke 2 nach Ecke 3Linie von Ecke 3 nach Ecke 1
Polygon: Linie von Ecke 1 zu Ecke 2Linie von Ecke 2 nach Ecke 3...Linie von Ecke n nach Ecke 1
c) Teilproblem: Zeichnen einer Linie zwischen zwei Punkten auf dem Bildschirm.
Praktische Informatik I 2. Entwurf von Algorithmen 2 - 44© Wolfgang Effelsberg
Was ist ein guter Algorithmus?
Kriterien
• Ausführungszeit (Komplexität)
• Speicherbedarf für Programm und Daten
• Entwicklungszeit. Wird zunehmend wichtiger!
• Gut strukturiertes, wartbares Programm: sehr wichtig!
Praktische Informatik I 2. Entwurf von Algorithmen 2 - 45© Wolfgang Effelsberg
2.3 Schrittweise Verfeinerung
Unter schrittweiser Verfeinerung versteht man die Zerlegung eines Algo-rithmus in Teilalgorithmen, von denen jeder einzelne einfacher und über-schaubarer ist als der ursprüngliche Algorithmus. Dadurch verbessern sich die Chancen, einen insgesamt korrekten Algorithmus zu entwerfen.Die Verfeinerung wird so lange fortgesetzt, bis die einzelnen Schritte unmit-telbar auf dem Prozessor ausgeführt werden können: vom Menschen bis hin zur Programmiersprache, vom Compiler bis hin zur Maschinensprache.
Praktische Informatik I 2. Entwurf von Algorithmen 2 - 46© Wolfgang Effelsberg
Beispiel für schrittweise Verfeinerung (1)
Algorithmus "Koche Kaffee"1. Koche Wasser2. Gib Kaffeepulver in die Tasse3. Fülle Wasser in die Tasse
Praktische Informatik I 2. Entwurf von Algorithmen 2 - 47© Wolfgang Effelsberg
Beispiel für schrittweise Verfeinerung (2)
Erste Verfeinerung(1.1) Fülle Wasserkessel(1.2) Schalte Herdplatte an(1.3) Warte, bis das Wasser kocht(1.4) Schalte Herdplatte aus(2.1) Öffne Kaffeeglas(2.2) Entnehme einen Löffel Kaffee(2.3) Kippe Löffel in die Tasse(2.4) Schließe Kaffeeglas(3.1) Gieße Wasser aus dem Kessel in die Tasse, bis die Tasse voll ist
Praktische Informatik I 2. Entwurf von Algorithmen 2 - 48© Wolfgang Effelsberg
Beispiel für schrittweise Verfeinerung (3)
Zweite Verfeinerung{Algorithmus zur Zubereitung einer Tasse Kaffee}{Zuerst Wasser kochen}(1.1.1.) Stelle Kessel unter Wasserhahn(1.1.2.) Drehe Wasserhahn auf(1.1.3.) Warte, bis Kessel voll ist(1.1.4.) Drehe Wasserhahn zu(1.2.) Schalte Herdplatte an(1.3.1.) Warte, bis Kessel pfeift(1.4.) Schalte Herdplatte aus
Praktische Informatik I 2. Entwurf von Algorithmen 2 - 49© Wolfgang Effelsberg
Beispiel für schrittweise Verfeinerung (4)
Zweite Verfeinerung (Fortsetzung){Gib Kaffeepulver in die Tasse}(2.1.1.) Nehme Kaffeeglas aus dem Fach(2.1.2.) Entferne Deckel vom Kaffeeglas(2.2) Entnehme einen Löffel Kaffee(2.3.) Kippe Löffel in die Tasse(2.4.1.) Schraube Deckel auf das Kaffeeglas(2.4.2.) Stelle Kaffeeglas in das Fach zurück{Fülle Wasser in die Tasse}(3.1.) Gieße Wasser aus dem Kessel in die Tasse, bis die Tasse voll ist
Praktische Informatik I 2. Entwurf von Algorithmen 2 - 50© Wolfgang Effelsberg
Fazit
• Der Schritt vom Problem zu Algorithmus ist Aufgabe des Menschen.• Eine sorgfältige Analyse des Problems in enger Zusammenarbeit des
Aufgabenstellers und des Programmierers ist sinnvoll.• Der systematische Entwurf eines geeigneten Algorithmus ist sehr zu
empfehlen. Dieser ist sorgfältig zu spezifizieren.• Als eine Technik dazu ist die schrittweise Verfeinerung sehr gut ge-
eignet.• Beim Entwurf von Algorithmen ist bereits auf die Performance zu achten.
Top Related