2. Entwurf von Algorithmen -...

50
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

Transcript of 2. Entwurf von Algorithmen -...

Page 1: 2. Entwurf von Algorithmen - pi4.informatik.uni-mannheim.depi4.informatik.uni-mannheim.de/pi4.data/content/courses/2008-hws/pi1/...Praktische Informatik I 2. Entwurf von Algorithmen

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

Page 2: 2. Entwurf von Algorithmen - pi4.informatik.uni-mannheim.depi4.informatik.uni-mannheim.de/pi4.data/content/courses/2008-hws/pi1/...Praktische Informatik I 2. Entwurf von Algorithmen

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

Page 3: 2. Entwurf von Algorithmen - pi4.informatik.uni-mannheim.depi4.informatik.uni-mannheim.de/pi4.data/content/courses/2008-hws/pi1/...Praktische Informatik I 2. Entwurf von Algorithmen

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)

Page 4: 2. Entwurf von Algorithmen - pi4.informatik.uni-mannheim.depi4.informatik.uni-mannheim.de/pi4.data/content/courses/2008-hws/pi1/...Praktische Informatik I 2. Entwurf von Algorithmen

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.

Page 5: 2. Entwurf von Algorithmen - pi4.informatik.uni-mannheim.depi4.informatik.uni-mannheim.de/pi4.data/content/courses/2008-hws/pi1/...Praktische Informatik I 2. Entwurf von Algorithmen

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.

Page 6: 2. Entwurf von Algorithmen - pi4.informatik.uni-mannheim.depi4.informatik.uni-mannheim.de/pi4.data/content/courses/2008-hws/pi1/...Praktische Informatik I 2. Entwurf von Algorithmen

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?

Page 7: 2. Entwurf von Algorithmen - pi4.informatik.uni-mannheim.depi4.informatik.uni-mannheim.de/pi4.data/content/courses/2008-hws/pi1/...Praktische Informatik I 2. Entwurf von Algorithmen

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.

Page 8: 2. Entwurf von Algorithmen - pi4.informatik.uni-mannheim.depi4.informatik.uni-mannheim.de/pi4.data/content/courses/2008-hws/pi1/...Praktische Informatik I 2. Entwurf von Algorithmen

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.

Page 9: 2. Entwurf von Algorithmen - pi4.informatik.uni-mannheim.depi4.informatik.uni-mannheim.de/pi4.data/content/courses/2008-hws/pi1/...Praktische Informatik I 2. Entwurf von Algorithmen

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)

Page 10: 2. Entwurf von Algorithmen - pi4.informatik.uni-mannheim.depi4.informatik.uni-mannheim.de/pi4.data/content/courses/2008-hws/pi1/...Praktische Informatik I 2. Entwurf von Algorithmen

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)

Page 11: 2. Entwurf von Algorithmen - pi4.informatik.uni-mannheim.depi4.informatik.uni-mannheim.de/pi4.data/content/courses/2008-hws/pi1/...Praktische Informatik I 2. Entwurf von Algorithmen

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.

Page 12: 2. Entwurf von Algorithmen - pi4.informatik.uni-mannheim.depi4.informatik.uni-mannheim.de/pi4.data/content/courses/2008-hws/pi1/...Praktische Informatik I 2. Entwurf von Algorithmen

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

Page 13: 2. Entwurf von Algorithmen - pi4.informatik.uni-mannheim.depi4.informatik.uni-mannheim.de/pi4.data/content/courses/2008-hws/pi1/...Praktische Informatik I 2. Entwurf von Algorithmen

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

Page 14: 2. Entwurf von Algorithmen - pi4.informatik.uni-mannheim.depi4.informatik.uni-mannheim.de/pi4.data/content/courses/2008-hws/pi1/...Praktische Informatik I 2. Entwurf von Algorithmen

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;

Page 15: 2. Entwurf von Algorithmen - pi4.informatik.uni-mannheim.depi4.informatik.uni-mannheim.de/pi4.data/content/courses/2008-hws/pi1/...Praktische Informatik I 2. Entwurf von Algorithmen

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;

Page 16: 2. Entwurf von Algorithmen - pi4.informatik.uni-mannheim.depi4.informatik.uni-mannheim.de/pi4.data/content/courses/2008-hws/pi1/...Praktische Informatik I 2. Entwurf von Algorithmen

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!

Page 17: 2. Entwurf von Algorithmen - pi4.informatik.uni-mannheim.depi4.informatik.uni-mannheim.de/pi4.data/content/courses/2008-hws/pi1/...Praktische Informatik I 2. Entwurf von Algorithmen

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.

Page 18: 2. Entwurf von Algorithmen - pi4.informatik.uni-mannheim.depi4.informatik.uni-mannheim.de/pi4.data/content/courses/2008-hws/pi1/...Praktische Informatik I 2. Entwurf von Algorithmen

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, …

Page 19: 2. Entwurf von Algorithmen - pi4.informatik.uni-mannheim.depi4.informatik.uni-mannheim.de/pi4.data/content/courses/2008-hws/pi1/...Praktische Informatik I 2. Entwurf von Algorithmen

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.

Page 20: 2. Entwurf von Algorithmen - pi4.informatik.uni-mannheim.depi4.informatik.uni-mannheim.de/pi4.data/content/courses/2008-hws/pi1/...Praktische Informatik I 2. Entwurf von Algorithmen

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

Page 21: 2. Entwurf von Algorithmen - pi4.informatik.uni-mannheim.depi4.informatik.uni-mannheim.de/pi4.data/content/courses/2008-hws/pi1/...Praktische Informatik I 2. Entwurf von Algorithmen

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

Page 22: 2. Entwurf von Algorithmen - pi4.informatik.uni-mannheim.depi4.informatik.uni-mannheim.de/pi4.data/content/courses/2008-hws/pi1/...Praktische Informatik I 2. Entwurf von Algorithmen

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

Page 23: 2. Entwurf von Algorithmen - pi4.informatik.uni-mannheim.depi4.informatik.uni-mannheim.de/pi4.data/content/courses/2008-hws/pi1/...Praktische Informatik I 2. Entwurf von Algorithmen

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!

Page 24: 2. Entwurf von Algorithmen - pi4.informatik.uni-mannheim.depi4.informatik.uni-mannheim.de/pi4.data/content/courses/2008-hws/pi1/...Praktische Informatik I 2. Entwurf von Algorithmen

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

Page 25: 2. Entwurf von Algorithmen - pi4.informatik.uni-mannheim.depi4.informatik.uni-mannheim.de/pi4.data/content/courses/2008-hws/pi1/...Praktische Informatik I 2. Entwurf von Algorithmen

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.

Page 26: 2. Entwurf von Algorithmen - pi4.informatik.uni-mannheim.depi4.informatik.uni-mannheim.de/pi4.data/content/courses/2008-hws/pi1/...Praktische Informatik I 2. Entwurf von Algorithmen

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

Page 27: 2. Entwurf von Algorithmen - pi4.informatik.uni-mannheim.depi4.informatik.uni-mannheim.de/pi4.data/content/courses/2008-hws/pi1/...Praktische Informatik I 2. Entwurf von Algorithmen

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

Page 28: 2. Entwurf von Algorithmen - pi4.informatik.uni-mannheim.depi4.informatik.uni-mannheim.de/pi4.data/content/courses/2008-hws/pi1/...Praktische Informatik I 2. Entwurf von Algorithmen

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

Page 29: 2. Entwurf von Algorithmen - pi4.informatik.uni-mannheim.depi4.informatik.uni-mannheim.de/pi4.data/content/courses/2008-hws/pi1/...Praktische Informatik I 2. Entwurf von Algorithmen

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

Page 30: 2. Entwurf von Algorithmen - pi4.informatik.uni-mannheim.depi4.informatik.uni-mannheim.de/pi4.data/content/courses/2008-hws/pi1/...Praktische Informatik I 2. Entwurf von Algorithmen

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

Page 31: 2. Entwurf von Algorithmen - pi4.informatik.uni-mannheim.depi4.informatik.uni-mannheim.de/pi4.data/content/courses/2008-hws/pi1/...Praktische Informatik I 2. Entwurf von Algorithmen

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

Page 32: 2. Entwurf von Algorithmen - pi4.informatik.uni-mannheim.depi4.informatik.uni-mannheim.de/pi4.data/content/courses/2008-hws/pi1/...Praktische Informatik I 2. Entwurf von Algorithmen

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

Page 33: 2. Entwurf von Algorithmen - pi4.informatik.uni-mannheim.depi4.informatik.uni-mannheim.de/pi4.data/content/courses/2008-hws/pi1/...Praktische Informatik I 2. Entwurf von Algorithmen

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

• …

Page 34: 2. Entwurf von Algorithmen - pi4.informatik.uni-mannheim.depi4.informatik.uni-mannheim.de/pi4.data/content/courses/2008-hws/pi1/...Praktische Informatik I 2. Entwurf von Algorithmen

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“);

Page 35: 2. Entwurf von Algorithmen - pi4.informatik.uni-mannheim.depi4.informatik.uni-mannheim.de/pi4.data/content/courses/2008-hws/pi1/...Praktische Informatik I 2. Entwurf von Algorithmen

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.

Page 36: 2. Entwurf von Algorithmen - pi4.informatik.uni-mannheim.depi4.informatik.uni-mannheim.de/pi4.data/content/courses/2008-hws/pi1/...Praktische Informatik I 2. Entwurf von Algorithmen

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.

Page 37: 2. Entwurf von Algorithmen - pi4.informatik.uni-mannheim.depi4.informatik.uni-mannheim.de/pi4.data/content/courses/2008-hws/pi1/...Praktische Informatik I 2. Entwurf von Algorithmen

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

Page 38: 2. Entwurf von Algorithmen - pi4.informatik.uni-mannheim.depi4.informatik.uni-mannheim.de/pi4.data/content/courses/2008-hws/pi1/...Praktische Informatik I 2. Entwurf von Algorithmen

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.

Page 39: 2. Entwurf von Algorithmen - pi4.informatik.uni-mannheim.depi4.informatik.uni-mannheim.de/pi4.data/content/courses/2008-hws/pi1/...Praktische Informatik I 2. Entwurf von Algorithmen

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?

Page 40: 2. Entwurf von Algorithmen - pi4.informatik.uni-mannheim.depi4.informatik.uni-mannheim.de/pi4.data/content/courses/2008-hws/pi1/...Praktische Informatik I 2. Entwurf von Algorithmen

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.

Page 41: 2. Entwurf von Algorithmen - pi4.informatik.uni-mannheim.depi4.informatik.uni-mannheim.de/pi4.data/content/courses/2008-hws/pi1/...Praktische Informatik I 2. Entwurf von Algorithmen

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.

Page 42: 2. Entwurf von Algorithmen - pi4.informatik.uni-mannheim.depi4.informatik.uni-mannheim.de/pi4.data/content/courses/2008-hws/pi1/...Praktische Informatik I 2. Entwurf von Algorithmen

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.

Page 43: 2. Entwurf von Algorithmen - pi4.informatik.uni-mannheim.depi4.informatik.uni-mannheim.de/pi4.data/content/courses/2008-hws/pi1/...Praktische Informatik I 2. Entwurf von Algorithmen

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.

Page 44: 2. Entwurf von Algorithmen - pi4.informatik.uni-mannheim.depi4.informatik.uni-mannheim.de/pi4.data/content/courses/2008-hws/pi1/...Praktische Informatik I 2. Entwurf von Algorithmen

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!

Page 45: 2. Entwurf von Algorithmen - pi4.informatik.uni-mannheim.depi4.informatik.uni-mannheim.de/pi4.data/content/courses/2008-hws/pi1/...Praktische Informatik I 2. Entwurf von Algorithmen

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.

Page 46: 2. Entwurf von Algorithmen - pi4.informatik.uni-mannheim.depi4.informatik.uni-mannheim.de/pi4.data/content/courses/2008-hws/pi1/...Praktische Informatik I 2. Entwurf von Algorithmen

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

Page 47: 2. Entwurf von Algorithmen - pi4.informatik.uni-mannheim.depi4.informatik.uni-mannheim.de/pi4.data/content/courses/2008-hws/pi1/...Praktische Informatik I 2. Entwurf von Algorithmen

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

Page 48: 2. Entwurf von Algorithmen - pi4.informatik.uni-mannheim.depi4.informatik.uni-mannheim.de/pi4.data/content/courses/2008-hws/pi1/...Praktische Informatik I 2. Entwurf von Algorithmen

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

Page 49: 2. Entwurf von Algorithmen - pi4.informatik.uni-mannheim.depi4.informatik.uni-mannheim.de/pi4.data/content/courses/2008-hws/pi1/...Praktische Informatik I 2. Entwurf von Algorithmen

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

Page 50: 2. Entwurf von Algorithmen - pi4.informatik.uni-mannheim.depi4.informatik.uni-mannheim.de/pi4.data/content/courses/2008-hws/pi1/...Praktische Informatik I 2. Entwurf von Algorithmen

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.