Algorithmisches Problemlösen Klaus Becker Algorithmisches Problemlösen Teil 1 Programmgesteuerte Systeme Automatisierung Mit Hilfe programmgesteuerter Systeme lassen sich Vorgänge automatisieren. Gelenkarmroboter mit Schweißbrenner (Foto: H.

Download Report

Transcript Algorithmisches Problemlösen Klaus Becker Algorithmisches Problemlösen Teil 1 Programmgesteuerte Systeme Automatisierung Mit Hilfe programmgesteuerter Systeme lassen sich Vorgänge automatisieren. Gelenkarmroboter mit Schweißbrenner (Foto: H.

Algorithmisches Problemlösen
Klaus Becker
2005
2
Algorithmisches Problemlösen
3
Teil 1
Programmgesteuerte Systeme
4
Automatisierung
Mit Hilfe programmgesteuerter Systeme lassen sich Vorgänge
automatisieren.
Gelenkarmroboter mit Schweißbrenner (Foto: H. Weihe, 2000, Lizenz: Public Domain)
5
Karol, der Roboter
Als Beispiel eines sehr einfachen programmgesteuerten Systems
betrachten wir einen Roboter (Karol oder Karel oder Karl), der seine Arbeit
in einer rechteckigen Welt verrichtet. Die Welt, in der sich Karol bewegt,
ist in Felder aufgeteilt ist. Auf diesen Feldern können Quader, Ziegel oder
Markierungen liegen.
Karol, der Roboter
6
Mit Hilfe von Anweisungen lässt sich
Karol steuern. Karol führt dann
jeweils bestimmte Aktionen aus.
Anweisung:
Aktion:
Schritt
Karol bewegt sich ein Feld weiter (sofern dies möglich ist).
LinksDrehen
Karol dreht sich um 90° nach links.
RechtsDrehen
Karol dreht sich um 90° nach rechts.
Hinlegen
Karol legt einen Ziegel vor sich ab.
Aufheben
Karol hebt einen vor ihm liegenden Ziegel auf.
MarkeSetzen
Karol markiert das Feld, auf dem er gerade steht.
MarkeLöschen
Karol entfernt eine Markierung, auf der er gerade steht.
7
Vorher:
Karol steht in der Ausgangsposition.
Nachher:
Karol hat eine Treppe gebaut.
Aufgabe
Steuern Sie Karol zunächst im
„Direktmodus“ mit Hilfe der
vorgesehenen Schaltflächen.
Steuern Sie Karol anschließend mit
den entsprechenden Anweisungen.
Diese werden in das dafür
vorgesehene Fenster geschrieben.
Nach einem Programmstart (▶ )
werden die Anweisungen von Karol
automatisch ausgeführt.
LinksDrehen
Schritt
LinksDrehen
...
8
Aufgabe
Vorher:
Karol steht in der Ausgangsposition.
Nachher:
Karol hat eine Siegerpodest gebaut.
Versuchen Sie, direkt ein korrektes Programm zu schreiben. Beachten
Sie, dass Karol bei einem Schritt nach vorne maximal einen Ziegel hoch
steigen kann.
9
Karol als programmgesteuertes System
Zustand vorher
Programm
(Algorithmus)
LinksDrehen
Schritt
LinksDrehen
LinksDrehen
Hinlegen
Hinlegen
Hinlegen
LinksDrehen
LinksDrehen
Schritt
LinksDrehen
LinksDrehen
Hinlegen
Hinlegen
LinksDrehen
LinksDrehen
...
Roboter
(Prozessor)
Zustand nachher
10
Problemspezifikation
Zustand vorher
Eine Problemspezifikation ist eine
vollständige und eindeutige Beschreibung
des Ausgangszustands („Zustand vorher“)
und Zielzustandes („Zustand nachher“).
Zustand nachher
Roboter
(Prozessor)
Algorithmus
11
Programm
(Algorithmus)
LinksDrehen
Schritt
LinksDrehen
LinksDrehen
Hinlegen
...
Roboter
(Prozessor)
Ziel ist es, einen komplizierten Ablauf / Vorgang so zu beschreiben, dass er von
einem „Prozessor“ (Mensch oder Maschine, der bzw. die für die Ausführung
zuständig ist) ausgeführt werden wird.
Eine Algorithmus ist eine endliche Folge eindeutig ausführbarer
Anweisungen zur Lösung eines Problems.
Algorithmus
12
Programm
(Algorithmus)
LinksDrehen
Schritt
LinksDrehen
LinksDrehen
Hinlegen
...
Roboter
(Prozessor)
Anforderungen an Algorithmen:
- Endlichkeit: Die Anweisungsfolge ist durch einen endlichen Text beschrieben.
- Ausführbarkeit: Die Anweisungen sind für den „Prozessor“ (Mensch oder
Maschine) verständlich formuliert und ausführbar.
- Eindeutigkeit: An jeder Stelle ist der Ablauf der Anweisungen eindeutig
festgelegt.
- Allgemeinheit: Die Anweisungen besitzen Gültigkeit für die Lösung einer ganzen
Problemklasse, nicht nur für ein Einzelproblem.
(s. Gasper, Leiß, Spengler, Stimm: Technische und theoretische Informatik)
Korrektheit
13
Eine Algorithmus ist korrekt bzgl. einer
Spezifikation, wenn er jeden möglichen
Ausgangszustand tatsächlich in den
festgelegten Zielzustand überführt.
Zustand vorher
Programm
(Algorithmus)
LinksDrehen
Schritt
LinksDrehen
LinksDrehen
Hinlegen
...
Roboter
(Prozessor)
Zustand vorher
14
Aufgabe
Beim Schreiben eines Programms müssen bestimmte Regeln eingehalten
werden. Prüfen Sie, welche der folgenden Schreibweisen erlaubt bzw.
nicht erlaubt sind:
- Anweisungen hintereinander schreiben
- Trennsymbole benutzen (z. B. ein Komma)
- Groß- / Kleinschreibung nicht beachten
- Anweisungsbezeichner ändern oder trennen
- ...
Programm
(Algorithmus)
Linksdrehen
Schritt
LinksDrehen, LinksDrehen
Hinlegen Ablegen Hinlegen
...
Roboter
(Prozessor)
15
Syntaxfehler
Die Sprache, in der Algorithmen für einen „Prozessor“ formuliert werden,
ist (normalerweise) genau festgelegt. Den Aufbau der in dieser Sprache
korrekt formulierten „Programme“ wird durch sog. Syntaxregeln
beschrieben. Verstößt man gegen eine dieser Syntaxregeln, so kommt es
zu einem Syntaxfehler (Fehlermeldung z. B.: unbekannte Anweisung).
Anweisungen
(Programm)
Linksdrehen
Schritt
LinksDrehen, Links Drehen
Hinlegen Ablegen Hinlegen
...
Syntaxfehler
Roboter
(Prozessor)
Logische Fehler
16
Wenn das Programm nicht korrekt ist, dann liegt ein logischer Fehler vor.
Beachte, dass man in der Regel in einem solchen Fall keine Fehlermeldung
erhält. Logische Fehler kann man durch Austesten des Programms
feststellen.
LinksDrehen
Schritt
LinksDrehen
LinksDrehen
Hinlegen
Hinlegen
Hinlegen
LinksDrehen
Ausgangszustand
Beabsichtigter
Zielzustand
Schritt
LinksDrehen
LinksDrehen
...
Tatsächlicher
Zielzustand
17
Teil 2
Wiederholungen
18
Viel (zu viel) Schreibarbeit!
Vorher:
Karol steht in der Ausgangsposition.
MarkeSetzen
Schritt
MarkeSetzen
Schritt
MarkeSetzen
Schritt
MarkeSetzen
Schritt
MarkeSetzen
Schritt
MarkeSetzen
Schritt
MarkeSetzen
Schritt
Sequenz:
Folge von
Anweisungen
Nachher:
Karol hat den Weg zur Wand markiert.
19
Algorithmus mit Wiederholung
Vorher:
Karol steht in der Ausgangsposition.
Wiederhole 7 mal
MarkeSetzen
Schritt
*wiederhole
Wiederholungsanweisung
Nachher:
Karol hat den Weg zur Wand markiert.
20
Wiederholung mit fester Anzahl
Soll eine Sequenz (von Anweisungen) mehrfach ausgeführt werden, wobei
die Anzahl der Wiederholungen von Anfang an feststeht, so benutzt man
zur Beschreibung eine Wiederholung mit fester Anzahl.
Wiederhole <n> mal
<Sequenz>
*wiederhole
Wiederhole 7 mal
Schritt
MarkeSetzen
*wiederhole
Allgemeines Schema
Beispiel
Eine solche Wiederholung mit fester Anzahl kann als Einheit aufgefasst
werden und bildet dann eine einzelne (strukturierte) Anweisung.
21
Schachtelung von Wiederholungen
Vorher:
Karol steht in der Ausgangsposition.
wiederhole 4 mal
MarkeSetzen
Schritt
*wiederhole
LinksDrehen
wiederhole 4 mal
MarkeSetzen
Schritt
*wiederhole
...
wiederhole 4 mal
wiederhole 4 mal
MarkeSetzen
Schritt
*wiederhole
LinksDrehen
*wiederhole
Nachher:
Karol hat seine Welt umrundet und
Markierungen hinterlegt.
22
Schachtelung von Wiederholungen
Wiederholungsanweisungen kann man auch ineinander schachteln. Um
einen besseren Überblick über die zusammengehörenden Anweisungen zu
Hauptprogramm
erhalten, sollte man sie
systematisch einrücken (am besten 2 Anschläge).
wiederhole 4 mal
MarkeSetzen
Schritt
*wiederhole
LinksDrehen
wiederhole 4 mal
MarkeSetzen
Schritt
*wiederhole
...
wiederhole 4 mal
MarkeSetzen
Schritt
LinksDrehen
wiederhole 4 mal
MarkeSetzen
Schritt
LinksDrehen
wiederhole 4 mal
wiederhole 4 mal
MarkeSetzen
Schritt
*wiederhole
LinksDrehen
*wiederhole
Hauptprogramm
Programm
wiederhole 4 mal
MarkeSetzen
Schritt
wiederhole 4 mal
wiederhole 4 mal
LinksDrehen
MarkeSetzen
wiederhole 4 mal
Schritt
MarkeSetzen
LinksDrehen
Schritt
LinksDrehen
Struktogramm
23
Aufgabe
Vorher:
Karol steht in der Ausgangsposition
in einer 10x10-Zellen-Welt.
Nachher:
Karol hat eine 6 Ziegel hohe Mauer
gebaut.
24
Aufgabe
Vorher:
Karol steht in der Ausgangsposition
in einer 10x10-Zellen-Welt.
Nachher:
Karol hat ein Schachbrettmuster
gelegt.
Zusatz:
Etwas schwieriger ist das Problem, wenn der äußere „freie Rand“ nicht
vorhanden ist.
25
Teil 3
Fallunterscheidungen
26
Situationsabhängiges Vorgehen
Vorher:
Karol steht vor einer Reihe mit Ziegeln.
Schritt
Aufheben
Schritt
MarkeSetzen
Schritt
Schritt
Aufheben
Schritt
MarkeSetzen
Aufheben
Schritt
MarkeSetzen
Schritt
Nachher:
Karol steht am Ende der Reihe, hat alle
Ziegel aufgesammelt und ihre Positionen
markiert.
27
IstZiegel? (f)
Schritt
Fallunterscheidung
wenn IstZiegel dann
Aufheben
Schritt
MarkeSetzen
sonst
Schritt
*wenn
wahr
IstZiegel? (w)
Aufheben
Schritt
MarkeSetzen
Aufheben
Schritt
MarkeSetzen
IstZiegel?
falsch
Schritt
28
Algorithmus mit Fallunterscheidung
Vorher:
Karol steht vor einer Reihe mit Ziegeln.
Wiederhole 7 mal
wenn IstZiegel dann
Aufheben
Schritt
MarkeSetzen
sonst
Schritt
*wenn
*wiederhole
Nachher:
Karol steht am Ende der Reihe, hat alle
Ziegel aufgesammelt und ihre Positionen
markiert.
29
Vorher:
Karol steht vor eine Reihe von
Ziegeln.
Aufgabe
Nachher:
Karol hat die Lücken in der
Ziegelreihe geschlossen.
30
Aufgabe
Vorher:
Karol steht vor eine Reihe, in der
sich genau drei Quader befinden. Es
sollen dabei keine zwei Quader
nebeneinander stehen.
Nachher:
Karol hat die Quader auf seinem
Weg nach Süden umlaufen.
31
Ein- / zweiseitige Fallunterscheidung
...
wiederhole 9 mal
wenn NichtIstZiegel dann
Hinlegen
Schritt
sonst
Schritt
Zweiseitige
*wenn
Fallunter*wiederhole
scheidung
...
...
wiederhole 9 mal
wenn NichtIstZiegel dann
Hinlegen
*wenn
Einseitige
Schritt
Fallunter*wiederhole
scheidung
...
wahr
wahr
NichtIstZiegel?
NichtIstZiegel?
falsch
Hinlegen
Hinlegen
Schritt
Schritt
Schritt
falsch
Darstellungen
32
wenn NichtIstZiegel dann
wenn NichtIstZiegel dann
Hinlegen
Hinlegen
Schritt
*wenn
Programm
sonst
Schritt
Schritt
*wenn
Flussdiagramm
falsch
Programmablaufplan wahr
NichtIstZiegel?
wahr
falsch
NichtIstZiegel?
Hinlegen
Hinlegen
Schritt
Schritt
Schritt
Struktogramm
Hauptprogramm
Hauptprogramm
NichtIstZ iegel
NichtIstZ iegel
w
Hinlegen
Schritt
f
Schritt
w
Hinlegen
Schritt
f
33
Teil 4
Wiederholungen mit Abbruchbedingungen
34
Wiederholung mit fester Anzahl
Vorher:
Karol steht in der Ausgangsposition.
Wiederhole 7 mal
MarkeSetzen
Schritt
*wiederhole
Nachher:
Karol hat den Weg zur Wand markiert.
Dieses Programm ist nur dann
korrekt, wenn die Welt genau 8
Felder lang ist. Bei beliebig großen
Welten benötigt man
Wiederholungsanweisungen mit
nicht vorher feststehender Anzahl.
Bedingte Wiederholung
35
Steuerung mit einer
Wiederholungsanzahl
Steuerung mit einer
Abbruchbedingung
Vorher:
Karol steht in der Ausgangsposition.
Wiederhole 7 mal
MarkeSetzen
Schritt
*wiederhole
solange NichtIstWand tue
MarkeSetzen
Schritt
*solange
Nachher:
Karol hat den Weg zur Wand markiert.
36
Bedingte Wiederholung
solange NichtIstWand tue
MarkeSetzen
Schritt
*solange
NichtIstWand ?
MarkeSetzen
Schritt
...
NichtIstWand?
wahr
MarkeSetzen
...
NichtIstWand ?
Schritt
falsch
37
Aufgabe
Testen Sie die folgenden Varianten bedingter Wiederholungen (u. a. auch in
einer 1x1-Felder-Welt). Welche Gemeinsamkeiten bzw. Unterschiede gibt
es?
solange NichtIstWand tue
wiederhole
MarkeSetzen
MarkeSetzen
Schritt
Schritt
wiederhole
*solange
*wiederhole solange NichtIstWand
MarkeSetzen
Schritt
*wiederhole bis IstWand
Aufgabe
38
Verdeutliche die Ausführung der Programme jeweils mit einen
Programmablaufplan.
solange NichtIstWand tue
MarkeSetzen
Schritt
*solange
wiederhole
MarkeSetzen
Schritt
*wiederhole bis IstWand
39
Aufgabe
Teste das folgende Programm. Erkläre das Verhalten.
solange NichtIstMarke tue
solange NichtIstWand tue
Schritt
*solange
LinksDrehen
LinksDrehen
*solange
40
Varianten von Abbruchbedingungen
solange NichtIstWand tue
MarkeSetzen
Schritt
*solange
wiederhole
MarkeSetzen
Schritt
*wiederhole bis IstWand
Eintrittsbedingung
NichtIstWand?
falsch
MarkeSetzen
wahr
Schritt
MarkeSetzen
Schritt
falsch
IstWand?
wahr
Austrittsbedingung
41
Eintrittsbedingung / Austrittsbedingung
Vorher:
Karol steht in der Ausgangsposition.
solange NichtIstWand tue
MarkeSetzen
Schritt
*solange
Nachher:
Karol hat den Weg zur Wand
markiert.
Vorher:
Karol steht in der Ausgangsposition.
wiederhole
MarkeSetzen
Schritt
*wiederhole bis IstWand
Abbruch:
Karol ist an die Wand gestoßen.
Bei einer Wiederholung mit Austrittsbedingung wird die Sequenz (von
Anweisungen) mindestens einmal ausgeführt, bei einer Wiederholung mit
Eintrittsbedingung kann die Sequenz (von Anweisungen) auch überhaupt
nicht ausgeführt werden.
Varianten von Austrittsbedingungen
42
wiederhole
MarkeSetzen
Schritt
*wiederhole bis IstWand
falsch
wiederhole
MarkeSetzen
Schritt
*wiederhole solange NichtIstWand
MarkeSetzen
MarkeSetzen
Schritt
Schritt
IstWand?
wahr
wahr
NichtIstWand?
falsch
Bei einer Wiederholung mit Austrittsbedingung kann überprüft werden, ob
die Austrittsbedingung erfüllt bzw. nicht erfüllt ist.
43
Endlosschleife
solange NichtIstMarke tue
solange NichtIstWand tue
Schritt
*solange
LinksDrehen
LinksDrehen
*solange
wiederhole immer
solange NichtIstWand tue
Schritt
*solange
LinksDrehen
LinksDrehen
*wiederhole
Bei einer Wiederholung mit Abbruchbedingung kann es vorkommen, dass
es zu keinem regulären Abbruch der Wiederholungen kommt. Karol gerät
dann in eine Endlosschleife.
44
Aufgabe
Vorher:
Karol steht in der Ausgangsposition
in einer beliebig großen Welt.
Nachher:
Karol hat eine 6 Ziegel hohe Mauer
gebaut.
45
Aufgabe
Vorher:
Karol steht in der Ausgangsposition
in einer beliebig großen Welt.
Nachher:
Karol hat eine 1 Ziegel hohe Mauer
zur Begrenzung der Welt gebaut.
46
Aufgabe
Vorher:
Karol steht in der Ausgangsposition. In der
Welt ist eine geschlossene Bahn aus
Ziegeln gelegt.
Entwickle ein passendes Programm
mit Hilfe geeigneter Entscheidungsund Wiederholungsanweisungen.
Nachher:
Karol hat die Ziegelbahn umrundet und
Markierungen hinterlegt.
47
Teil 5
Aufbau und Entwicklung von Algorithmen
48
Ein Komplexer Algorithmus
Vorher:
solange NichtIstMarke tue
MarkeSetzen
wenn IstZiegel dann
Schritt
sonst
LinksDrehen
wenn IstZiegel dann
Schritt
sonst
RechtsDrehen
RechtsDrehen
Schritt
*wenn
*wenn
*solange
Nachher:
49
Strukturbetonte
Darstellung
Hauptprogramm
solange NichtIstMarke
MarkeSetzen
IstZ iegel
w
Programm
Schritt
f
LinksDrehen
IstZ iegel
w
solange NichtIstMarke tue
MarkeSetzen
wenn IstZiegel dann
Schritt
sonst
LinksDrehen
wenn IstZiegel dann
Schritt
sonst
RechtsDrehen
RechtsDrehen
Schritt
*wenn
*wenn
*solange
Schritt
f
RechtsDrehen
RechtsDrehen
Schritt
Struktogramm
Kontrollstrukturen
50
STRUKT3
STRUKT4
STRUKT1
<Bedingung>
<Anweisung>
ja
solange <Bedingung>
nein
<Anweisung>
<Anweisungssequenz>
<Anweisungssequenz>
...
Sequenz
<Anweisungssequenz>
Fallunterscheidung
Wiederholung
Kontrollstrukturen dienen dazu, den Ablauf der Verarbeitung festzulegen.
Bausteine
von Algorithmen
Hauptprogramm
51
W
solange NichtIstMarke
MarkeSetzen
S
IstZ iegel
E
w
F
Schritt
f
LinksDrehen
IstZ iegel
E
w
S
Schritt
f
RechtsDrehen
E
RechtsDrehen
F
Schritt
E
S
E
E
E
Ein Algorithmus ist aus
- Elementaranweisungen (E)
und den Kontrollstrukturen
- Sequenzbildung (S),
- Fallunterscheidung (F),
- Wiederholung (W)
aufgebaut.
52
Entwicklung von Algorithmen
Wie findet man einen Algorithmus / ein Programm zur Lösung eines
Problems?
?
solange NichtIstMarke tue
MarkeSetzen
wenn IstZiegel dann
Schritt
sonst
LinksDrehen
wenn IstZiegel dann
Schritt
sonst
RechtsDrehen
RechtsDrehen
Schritt
*wenn
*wenn
*solange
Von Ablaufsituationen ...
53
Schritt 1: Ablaufsituationen klären und die Verarbeitung beschreiben
Marke setzen
Ziegel vorne?  ja
Marke setzen
Ziegel vorne?  nein
Marke setzen
Ziegel vorne?  nein
Schritt vorwärts
Links drehen
Ziegel vorne?  ja
Links drehen
Ziegel vorne?  nein
Schritt vorwärts
Rechts drehen
Rechts drehen
Schritt vorwärts
54
... über einen Algorithmus ...
Schritt 2: Die Verarbeitungsabläufe mit Hilfe von Kontrollstrukturen
beschreiben (strukturbetonte, z. T. informelle Darstellung)
STRUKT1
solange nicht auf einer Marke
Marke setzen
v or Ziegel?
ja
nein
nach links
drehen
v or Ziegel?
Schritt
v orwärts
ja
nein
Schritt
v orwärts
um 180°
drehen
Schritt
v orwärts
... zum Programm
55
Schritt 3: Den Algorithmus in ein (syntaktisch korrektes) Programms
übersetzen
STRUKT1
solange nicht auf einer Marke
Marke setzen
v or Ziegel?
ja
nein
nach links
drehen
v or Ziegel?
Schritt
v orwärts
ja
nein
Schritt
v orwärts
um 180°
drehen
Schritt
v orwärts
solange NichtIstMarke tue
MarkeSetzen
wenn IstZiegel dann
Schritt
sonst
LinksDrehen
wenn IstZiegel dann
Schritt
sonst
RechtsDrehen
RechtsDrehen
Schritt
*wenn
*wenn
*solange
56
Aufgabe
Führen Sie die Schritte, die zum Algorithmus führen, explizit aus:
Schritt 1: Ablaufsituationen klären und die Verarbeitung beschreiben
Schritt 2: Die Verarbeitungsabläufe mit Hilfe von Kontrollstrukturen
beschreiben
57
Teil 6
Unterprogramme
58
Ein komplexes Problem
Vorher:
Karol steht vor eine Reihe von Ziegeln.
Nachher:
Karol hat die Ziegel alle eingesammelt und in der Ecke
aufgestapelt.
59
Ziegel aufheben
Schritt vorwärts
Marke setzen
Umdrehen
Bis zur Wand laufen
Schritt zurück
Ziegel hinlegen
Ablaufbeschreibung
Umdrehen
Bis zur Marke laufen
Marke löschen
Ziegel aufheben
Schritt vorwärts
Marke setzen
Umdrehen
Bis zum Ziegel laufen
Schritt zurück
Ziegel hinlegen
u.
s.
w.
60
Algorithmus
Hauptprogramm
Aufheben
Schritt
MarkeSetzen
UMDREHEN
LAUFEBISWAND
SCHRITTRUECKWAERTS
Hinlegen
UMDREHEN
LAUFEBISMARKE
Ziegel aufheben
Schritt vorwärts
Marke setzen
Umdrehen
Bis zur Wand laufen
Schritt zurück
Ziegel hinlegen
Umdrehen
Bis zur Marke laufen
Marke löschen
Ziegel aufheben
Schritt vorwärts
Marke setzen
Umdrehen
Bis zum Ziegel laufen
Schritt zurück
Ziegel hinlegen
MarkeLöschen
solange IstZiegel
Aufheben
Schritt
MarkeSetzen
UMDREHEN
LAUFEBISZIEGEL
Hinlegen
Im Algorithmus kommen Anweisungen vor, die Karol
direkt ausführen kann (z. B. Schritt), aber auch
Anweisungen, die Karol noch nicht kennt (z. B.
Umdrehen).
UMDREHEN
LAUFEBISMARKE
MarkeLöschen
UMDREHEN
LAUFEBISZIEGEL
UMDREHEN
61
Unterprogramme
Programm
Aufheben
Schritt
MarkeSetzen
Umdrehen
LaufeBisWand
SchrittRueckwaerts
Hinlegen
Umdrehen
LaufeBisMarke
MarkeLöschen
solange IstZiegel tue
Aufheben
Schritt
MarkeSetzen
Umdrehen
LaufeBisZiegel
...
*solange
Umdrehen
LaufeBisZiegel
Umdrehen
*Programm
Anweisung Umdrehen
RechtsDrehen
RechtsDrehen
*Anweisung
Hauptprogramm
Aufheben
Schritt
MarkeSetzen
UMDREHEN
LAUFEBISWAND
SCHRITTRUECKWAERTS
Hinlegen
UMDREHEN
Mit Hilfe eines Unterprogramms kann man
einen Teilalgorithmus zu
einer neuen Einheit
zusammenfassen. Der
Name, mit dem das
Unterprogramms
bezeichnet wird, kann als
neue Anweisung benutzt
werden.
LAUFEBISMARKE
MarkeLöschen
solange IstZiegel
Aufheben
Schritt
MarkeSetzen
UMDREHEN
LAUFEBISZIEGEL
Hinlegen
UMDREHEN
LAUFEBISMARKE
MarkeLöschen
UMDREHEN
LAUFEBISZIEGEL
UMDREHEN
62
Karol lernt neue Anweisungen
Anweisung Umdrehen
RechtsDrehen
RechtsDrehen
*Anweisung
Hauptprogramm
Festlegung des
Aufheben
Unterprogramms
Anweisung SchrittRueckwaerts
Umdrehen
Schritt
Umdrehen
*Anweisung
Schritt
MarkeSetzen
UMDREHEN
LAUFEBISWAND
SCHRITTRUECKWAERTS
Hinlegen
UMDREHEN
LAUFEBISMARKE
MarkeLöschen
Anweisung LaufeBisWand
solange NichtIstWand tue
Schritt
*solange
*Anweisung
Anweisung LaufeBisZiegel
solange NichtIstZiegel tue
Schritt
*solange
*Anweisung
...
solange IstZiegel
Aufheben
Schritt
MarkeSetzen
UMDREHEN
LAUFEBISZIEGEL
Hinlegen
UMDREHEN
LAUFEBISMARKE
MarkeLöschen
UMDREHEN
LAUFEBISZIEGEL
UMDREHEN
Anw.: UMDREHEN
...
Programm
Aufheben
Schritt
MarkeSetzen
Umdrehen
LaufeBisWand
SchrittRueckwaerts
Hinlegen
Umdrehen
LaufeBisMarke
MarkeLöschen
solange IstZiegel tue
Aufheben
Schritt
...
*solange
Umdrehen
LaufeBisZiegel
Umdrehen
*Programm
Aufruf des
Unterprogramms
63
Karol führt neue Anweisungen aus
Programm
Aufheben
Schritt
MarkeSetzen
Umdrehen
LaufeBisWand
SchrittRueckwaerts
Hinlegen
Umdrehen
LaufeBisMarke
MarkeLöschen
solange IstZiegel tue
Aufheben
Schritt
...
*solange
Umdrehen
LaufeBisZiegel
Umdrehen
*Programm
Anweisung Umdrehen
RechtsDrehen
RechtsDrehen
*Anweisung
Wird der Bezeichner eines Unterprogramms in
einem Programm aufgerufen, so werden
zunächst die Anweisungen des Unterprogramms ausgeführt, bevor die nächste
Anweisung des Programms bearbeitet wird.
Anweisung Umdrehen
Schnell
RechtsDrehen
RechtsDrehen
*Anweisung
Das Unterprogramms wird
so schnell wie eine
Elementaranweisung
durchgeführt.
64
Eine Bibliothek anlegen
{ Anweisung Umdrehen
vorher: Karol steht auf einem beliebigen Feld
und schaut in eine beliebige Richtung.
nachher: Karol hat sich um 180° gedreht.
}
Anweisung Umdrehen
Kommentar zur Spezifikation des
Schnell
Verhaltens des Unterprogramms
RechtsDrehen
RechtsDrehen
*Anweisung
...
Die Festlegungen von Anweisungen, die in vielen Algorithmen
wiederverwendet werden können, werden ausgelagert und in einer
Bibliotheksdatei gesammelt. Damit der Programmierer sich schnell über
das Verhalten einer Anweisung informieren kann, wird das Verhalten in
einem Kommentar zur Anweisung genau spezifiziert.
65
Eine Bibliothek benutzen
Einfügen
Bibliothek1
*Einfügen
Programm
Aufheben
Schritt
MarkeSetzen
Umdrehen
LaufeBisWand
...
*Programm
Damit die in der Bibliothek festgelegten „neuen Anweisungen“ in einem
Programm benutzt werden können, muss die Bibliothek in das aktuelle
Programm eingefügt werden.
66
Karol lernt neue Bedingungen
Vorher:
Nachher:
Hauptprogramm
solange NichtIstMarke
MarkeSetzen
Z IEGELVORNE
w
f
Schritt
Z IEGELLINKS
w
f
LinksDrehen
RechtsDrehen
Schritt
Schritt
Karol lernt neue Bedingungen
67
Bedingung ZiegelVorne
Schnell
Falsch
wenn IstZiegel dann Wahr *wenn
*Bedingung
Bedingung ZiegelLinks
Schnell
Falsch
LinksDrehen
wenn IstZiegel dann Wahr *wenn
RechtsDrehen
*Bedingung
Hauptprogramm
Programm
solange NichtIstMarke tue
MarkeSetzen
wenn ZiegelVorne dann
Schritt
sonst
wenn ZiegelLinks dann
LinksDrehen Schritt
sonst
RechtsDrehen Schritt
*wenn
*wenn
*solange
*Programm
solange NichtIstMarke
MarkeSetzen
Z IEGELVORNE
w
f
Schritt
Z IEGELLINKS
w
f
LinksDrehen
RechtsDrehen
Schritt
Schritt
68
Aufgabe
Vorher:
Karol befindet sich in einem
„zeilenorientierten“ Labyrinth und schaut
nach rechts.
Löse das Problem mit Hilfe
geeigneter neuer Anweisungen und
Bedingungen.
Nachher:
Karol hat den Ausgang des Labyrinths
gefunden.
69
Aufgabe
Vorher:
In der Welt von Karol liegen viele Ziegel
herum.
Löse das Problem mit Hilfe
geeigneter neuer Anweisungen und
Bedingungen.
Nachher:
Karol hat die Ziegel alle eingesammelt und in
der jeweiligen Reihe aufgestapelt.
70
71
Teil 7
Top-Down-Methode
72
Karol soll die Welt aufräumen
Vorher:
In der Welt von Karol liegen viele Ziegel
herum.
Nachher:
Karol hat die Ziegel alle eingesammelt und in
der jeweiligen Reihe aufgestapelt.
Zerlegen ...
73
Komplexe Probleme zerlegt man in Teilprobleme,
die sich in der Regel leichter lösen lassen.
ZiegelSammeln
ReiheSammeln
InEckeRechtsVorne?
NaechsteAusgangsposition
... und lösen
74
ReiheSammeln
InEcke?
NaechsteAusgangsposition
Mit Hilfe der Lösungen der Teilprobleme entwickelt man dann eine Lösung
des Gesamtproblems.
ZiegelSammeln
ReiheSammeln
ZiegelSammeln
ReiheSammeln
InEckeRechtsVorne?
ja
nein
InEckeRechtsVorne?
Naechste
NaechsteAusgangsposition
Ausgangsposition
wiederhole bis InEckeRechtsVorne
75
... top-down weiter ...
ReiheSammeln
LaufeBisZiegelOderWand
Umdrehen
ZiegelAblegen
ReiheSammeln
solange NichtIstWand tue
Lauf eBisZiegelOderWand
IstZiegel?
nein
ja
Auf heben
Umdrehen
Lauf eBisZiegelOderWand
...
ZiegelAblegen
Umdrehen
... bis unten angekommen
76
ReiheSammeln
LaufeBisZiegelOderWand
Umdrehen
ZiegelAblegen
// BibliothekErweitert
Anweisung Umdrehen
...
Anweisung SchrittRueckwaerts
...
Bedingung NichtVorZiegelOderWand
...
LaufeBisZiegelOderWand
solange NichtVorZiegelOderWand tue
Schritt
ZiegelAblegen
IstWand?
ja
nein
SchrittRueckwaerts
Hinlegen
Hinlegen
77
Noch einmal: Zerlegen und lösen
ZiegelSammeln
// BibliothekErweitert
NaechsteAusgangsposition
LaufeBisWand
Anweisung Umdrehen
...
Anweisung LaufeBisWand
...
Umdrehen
NaechsteAusgangsposition
LinksDrehen
Schritt
LinksDrehen
Lauf eBisWand
Umdrehen
Top-Down-Methode
78
Die „Top-Down-Methode“ ist eine Methode, die einem hilft, komplexere
Problemstellungen zu lösen. Man verschafft sich zunächst einen Überblick,
welche Teilprobleme zu lösen sind. Entsprechend verfährt man mit den
Teilproblemen selbst. So wird durch schrittweises Verfeinern das
Gesamtproblem „top-down“ gelöst.
ZiegelSammeln
ReiheSammeln
LaufeBisZiegelOderWand
Umdrehen
ZiegelAblegen
InEckeRechtsVorne?
NaechsteAusgangsposition
LaufeBisWand
Umdrehen
79
Teil 8
Der Problemlöseprozess
80
Beschreibung des Problems
Vorher:
In der Welt von Karol liegen viele Ziegel herum.
Schritt 1:
Das Problem wird erfasst und
möglichst genau beschrieben.
Nachher:
Karol hat die Ziegel alle eingesammelt und in der jeweiligen Reihe aufgestapelt.
Entwicklung von Algorithmen
81
ZiegelSammeln
ReiheSammeln
InEckeRechtsVorne?
NaechsteAusgangsposition
Schritt 2:
Eine Lösung des Problems
wird Schritt für Schritt
entwickelt. Es hilft dabei,
genau zu planen und
Problemlösetechniken zu
benutzen.
ZiegelSammeln
ReiheSammeln
InEckeRechtsVorne?
ja
nein
Naechste
Ausgangsposition
wiederhole bis InEckeRechtsVorne
Übersetzung in Programme
82
ZiegelSammeln
ReiheSammeln
InEckeRechtsVorne?
ja
nein
Naechste
Ausgangsposition
wiederhole bis InEckeRechtsVorne
Schritt 3:
Die entwickelten Algorithmen
werden implementiert und
getestet. Beim Testen werden
auch „extreme“ Fälle
durchgespielt.
Programm
wiederhole
ReiheSammeln
wenn Nicht InEckeRechtsVorne dann
NaechsteAusgangsposition
*wenn
*wiederhole bis InEckeRechtsVorne
*Programm
83
Dokumentation
Während des gesamten Problemlöseprozesses werden die wichtigsten
Ergebnisse festgehalten. Hierzu gehören:
- eine genaue Problembeschreibung
- die wichtigsten Algorithmen
- kommentierte Programme
- Testberichte
84
Aufgabe
Karol soll eine Treppe zwischen den vorgegebenen Marken bauen. Der
gesamte Problemlöseprozess soll möglichst gut strukturiert werden.
85
Aufgabe
Karol sollen Zahlen addieren. Der
gesamte Problemlöseprozess soll
möglichst gut strukturiert werden.
2574
+ 462
3036
Vorher:
Die beiden zu
addierenden Zahlen
sind mit Hilfe von
Ziegelstapel dargestellt.
Nachher:
Karol hat die Stapelzahlen
„addiert“.
86
87
Teil 9
Automatisierte Verarbeitung von Daten
88
Karol soll Zahlen addieren
Vorher:
Die beiden zu addierenden Zahlen sind mit
Hilfe von Ziegelstapel dargestellt.
2574
+ 462
3036
Nachher:
Karol hat die Stapelzahlen „addiert“.
89
Zahlen schriftlich addieren
Solange noch Ziffern vorhanden sind,
addiere die Zahlen
der betreffenden Stelle
unter Berücksichtigung
des Übertrags.
...
Anweisung AddiereStelleMitUebertrag
Schnell
StapelEinsNachRechts
Schritt
StapelZweiNachRechts
NächsteStelle
*Anweisung
Programm
solange NochZiffernVorhanden tue
AddiereStelleMitUebertrag
*solange
*Programm
2
Algorithmus
„schriftliches
Addieren“
5
7
4
4
6
2
2574
+ 462
KarolProgramm
3036
3
3
6
90
Zahlen schriftlich addieren
Solange noch Ziffern vorhanden sind,
addiere die Zahlen
der betreffenden Stelle
unter Berücksichtigung
des Übertrags.
Algorithmus
„schriftliches
Addieren“
2574
+ 462
3036
Algorithmen werden nicht nur zur Steuerung von Computern benutzt,
Algorithmen können auch Tätigkeiten steuern, die von Menschen
ausgeführt werden (z. B. schriftliches Rechnen).
Eine Algorithmus ist eine endliche Folge eindeutig ausführbarer
Anweisungen zur Lösung eines Problems.
91
Algorithmus im Alltag
ZUTATEN für 5 Portionen:
650g Erdbeeren
150g Zucker
2 Pk Vanillezucker
5 EL Weinbrand
400 ml Sahne (gut gekühlt)
Rezept für
Erdbeermousse
ZUBEREITUNG
Erdbeeren kalt abbrausen, abtropfen lassen und trockentupfen. Blütenansatz
entfernen. 150 Gramm der Früchte zugedeckt beiseite stellen.
Restliche Erdbeeren in Stücke schneiden. Zucker, Vanillezucker und Weinbrand
darunterheben und alles 30 Minuten zugedeckt ziehen lassen. Dann mit dem
Mixstab fein pürieren. Die Hälfte der Sahne steif schlagen und unter das Püree
ziehen. Die Creme im Gefrierfach oder in der Tiefkühltruhe gefrieren lassen.
Restliche Sahne halbsteif schlagen. Mit einem Esslöffel Nocken von der Mousse
abstechen und auf Dessertteller verteilen. Die halbsteife Sahne angießen und das
Dessert mit den ganzen Erdbeeren garnieren.
Quelle: www.daskochrezept.de
92
Algorithmus im Alltag
Bedienungsanleitung
Aufgabe:
Beurteilen Sie, welche der üblicherweise geforderten Anforderungen an
einen Algorithmus (Endlichkeit, Ausführbarkeit, Eindeutigkeit,
Allgemeinheit) bei den gezeigten Alltagsalgorithmen erfüllt sind.
93
Al-Khwarizmi
Die Bezeichnung „Algorithmus“ leitet
sich aus dem Namen „Al-Khwarizmi“ –
einem arabischen Mathematiker – ab.
Algorithmus
Problem des Abu Abd Allah Mohammed Ibn Musa al-Khwarizmi:
Wie ist das Vermögen eines wohlhabender Manns aufzuteilen, der bis zu
4 Frauen in unterschiedlichem Stand und eine Vielzahl von Kindern hat?
Lösung im Lehrbuch „Kitab al jabr w‘almuqabalah“
Algebra
94
Al-Khwarizmi
Abu Abd Allah Mohammed Ibn Musa AlKhwarizmi lebte etwa von 780 bis 850 n.
Chr. Er stammte aus Choresm (arab.
Khwarizmi), eine Gegend südlich des
Aralsees, die heute Teil von Usbekistan und
Turkmenistan ist. Für seinen Namen sind
mehrere Schreibweisen gebräuchlich, z.B.
Alhwarizmi, Al-Hwarizmi, al-Khowarizmi oder
auch Mohammed ben Musa. Al-Khwarizmi
beschäftigte sich u. a. mit Verfahren zur
Lösung von Gleichungen. Er verfasste
Bücher, die sich mit Algebra, Astronomie
und Geographie beschäftigten, sowie Werke
über indische Ziffern und den Jüdischen
Kalender.
95
Literaturhinweise
Frey, Hubwieser, Winhard: Informatik 1 – Objekte, Strukturen,
Algorithmen. Klett-Verlag 2004.
Buttke, Engelmann, Formann: Informatische Grundbildung. Paetec-Verlag
2004.