Title: Algorithmisches Probleml
1Algorithmisches Problemlösenmit Scratch
2Scratch
Scratch ist eine Programmierumgebung, mit der man
ansprechende dynamische Anwendungen entwickeln
kann.
3Teil 1
Die Scratch-Welt
4Eine Bühne mit Figuren
Wie im Theater Die Scratch-Welt besteht aus
einer Bühne, auf der Figuren agieren können.
5Bausteine der Scratch-Welt
Eine Scratch-Welt ist aus Objekten aufgebaut.
Objektname
Objekteigenschaften
Objektfenster
Objekte
Weltfenster
6Regieanweisungen
Mit einem Programm kann man die Aktionen
festlegen, die eine Scratch-Figur ausführen soll.
Programmfenster
Programmierkacheln
7Elementare Anweisungen
Anweisungen sind Bausteine zur Steuerung eines
gegebenes Systems. Jedes System (so wie Scratch)
stellt dem Benutzer sogenannte elementare
Anweisungen bereit. Das sind die Anweisungen, die
als Grundbausteine zur Verfügung stehen und die
das System direkt ausführen kann. Ein Programm
ist eine Folge von Anweisungen.
Anweisung
elementare Anweisung
Programm
8Einsatzkommandos
Scratch-Objekte agieren nur, wenn sie dazu
aufgefordert werden
9Ereignissteuerung
Ereignisse sind bestimmte Zustandsänderungen im
System. Ereignisse können mit Programmen zur
Ereignisbehandlung verknüpft
- Beispiele für Ereignisse sind
- die grüne Fahne wird angeklickt
- eine Taste wird gedrückt
- eine Figur wird angeklickt
- eine Nachricht wird empfangen
Ereignis
Ereignis-behandlung
10Übungen
Aufgabe Entwickeln Sie Scratch-Programme, die
die bisher eingeführten Fachkonzepten verwenden
(z. B. eine Hundeampel).
11Teil 2
Entscheidungen
12Zum Einstieg
Oft gibt es Situationen, in denen der Ablauf
davon abhängt, ob eine bestimmte Bedingung
erfüllt ist oder nicht. Man benötigt dann
Anweisungen zur Fallunterscheidung, um die
unterschiedlichen Abläufe festzulegen.
Mit den Pfeiltasten soll sabine nach rechts /
links / oben / unten bewegt werden. Wenn sabine
den rechten oder linken Rand berührt, dann soll
sie sich umdrehen, sonst soll sie weiterfliegen.
Beim oberen oder unteren Rand soll sie nicht
weiterfliegen. Zusatz sabine soll ebenfalls
nicht weiterfliegen, wenn sie berni berührt.
13Fallunterscheidungen
zweiseitige Fallunterscheidung
einseitige Fallunterscheidung
14Fallunterscheidungen
Bedingung
Bedingung
Anweisungs-sequenz
Anweisungs-sequenz
Anweisungs-sequenz
15komplexe Bedingungen
elementare Bedingung
logischer Operator
a b a und b falsch falsch falsch falsch
wahr falsch wahr falsch falsch wahr wahr
wahr
a b a oder b falsch falsch falsch falsch
wahr wahr wahr falsch wahr wahr wahr wahr
a nicht a falsch wahr wahr falsch
nicht
Konjunktion
Disjunktion
Negation
und
oder
16Übungen
Aufgabe Entwickeln Sie weitere
Scratch-Programme, die die bisher eingeführten
Fachkonzepten verwenden.
17Teil 3
Wiederholungen
18Zum Einstieg
Oft gibt es Situationen, in denen ein Ablauf
wiederholt durchgeführt werden soll.
berni soll bis zum Rand laufen.
berni soll 20 Schritte weiterlaufen.
19Wiederholungen
feste Anzahl von Wiederholungen
bedingte Wiederholungen
Eine Wiederhole-anweisung mit vorgegebener Anzahl
von Wiederholungen dient dazu, wiederholte
Abläufe zu beschreiben, bei denen die Anzahl der
Wiederholungen von vorneherein feststeht.
Eine bedingte Wiederholeanweisung dient dazu,
wiederholte Abläufe zu beschreiben, bei der die
Anzahl der Wiederholungen vom Eintreten einer
Bedingung abhängt.
berni soll bis zum Rand laufen.
berni soll 20 Schritte weiterlaufen.
20bedingte Wiederholung
Zunächst wird überprüft, ob die angegebene
Bedingung erfüllt ist. Ist das nicht der Fall, so
werden die zu wiederholenden Anweisungen
ausgeführt. Anschließend wird die Bedingung
wieder überprüft und es beginnt der nächste
Wiederholedurchgang. Erst wenn die Bedingung
erfüllt ist, wird der Vorgang beendet.
Bedingung
Anweisungs-sequenz
21Vorsicht Varianten
wiederhole Anweisungssequenz bis
Bedingung
bis Bedingung wiederhole
Anweisungssequenz
Scratch-Version
Pascal repeat
22Vorsicht Varianten
bis Bedingung wiederhole
Anweisungssequenz
solange Bedingung wiederhole
Anweisungssequenz
Scratch-Version
Python, Pascal while
23Vorsicht Endlosschleife
Bei einer Endlosschleife werden die zu
wiederholenden Anweisungen - zumindest
theoretisch - unendlich oft ausgeführt. Die
Ausführung eines Programms mit einer
Endlosschleife muss daher durch geeignete
Maßnahmen unterbrochen werden.
24Übungen
Aufgabe Entwickeln Sie weitere
Scratch-Programme, die die bisher eingeführten
Fachkonzepten verwenden.
25Teil 4
Kontrollstrukturen
26Zum Einstieg
Egal, wo sabine ist, wenn man berni anklickt,
dann soll er zu sabine hinlaufen. Im vorliegenden
Fall (siehe Abbildung) soll berni bis zur Wand
laufen, sich dort umdrehen und dann weiterlaufen,
bis er unterhalb von sabine ist.
Fall 1 berni befindet sich rechts von sabine und
schaut nach rechts Lösung In diesem Fall muss
berni bis zur Wand weiterlaufen, sich dort
umdrehen und dann weiterlaufen, bis er unterhalb
von sabine ist. Fall 2 ...
27Schachtelung von Anweisungen
Das Programm zur Lösung des Problems benutzt eine
ganze Reihe von ineinander geschachtelten
Anweisungskacheln.
Fall 1 berni befindet sich rechts von sabine und
schaut nach rechts Lösung In diesem Fall muss
berni bis zur Wand weiterlaufen, sich dort
umdrehen und dann weiterlaufen, bis er unterhalb
von sabine ist. Fall 2 ...
28Kontrollstrukturen
Kontrollstrukturen dienen dazu, den Ablauf der
Ausführungsschritte festzulegen. Wesentliche
Kontrollstrukturen sind die Fallunterscheidung,
die Wiederholung sowie die Sequenzbildung
(Hintereinanderreihung).
Fallunterscheidung
Wiederholung
Sequenzbildung
29Teil 5
Variablenkonzept
30Zum Einstieg
berni befindet sich irgendwo auf der Bühne. berni
soll bis zur Wand und wieder zurück zur
Ausgangsposition laufen.
berni überlegt sich Am besten zähle ich die
Schritte, die ich bis zur Wand benötige.
31Variablen
Variablen dienen in der Informatik dazu, Daten zu
verwalten, die in Speicherzellen abgelegt sind.
Jede Variable hat einen Namen, mit dem man auf
den in der zugehörigen Speicherzelle abgelegten
Datenwert (den sog. Variablenwert) zugreifen kann.
Variablenwert
Variablenname
32Wertzuweisung
Eine Veränderung eines Variablenwerts bzw. des
zugehörigen Speicherzelleninhalts kann mit Hilfe
einer Wertzuweisung an die entsprechende Variable
erfolgen.
setze zaehler auf (zaehler 1)
Variable
Term
Auswertung einer Wertzuweisung Erst wird der
Wert des Terms mit Hilfe des aktuellen
Variablenzustands ermittelt. Dieser Wert wird
dann der Variablen als neuer aktueller Wert
zugewiesen.
33Terme
Eine Wertzuweisung besteht aus einer Variablen
(der ein Wert zugewiesen wird) und einem Term
(der den zuzuweisenden Wert festlegt).
Programm zur Bestimmung des Abstands zwischen
berni und sabine.
Terme können recht komplex werden. Sie können die
gängigen Rechenoperationen, Zahlen, Variablen
usw. enthalten und fast beliebig verschachtelt
werden. Wichtig ist nur, dass der aktuelle Wert
des Terms (hier bei Scratch) eine Zahl ist.
34Datentyp
Ein Datentyp beschreibt eine Menge von
Datenobjekten, die alle die gleiche Struktur
haben und mit denen die gleichen Operationen
ausgeführt werden können.
Term
Wert Zahl
Bedingung
Wert Wahrheitswert
Programm zur Bestimmung des Flächeninhalts des
Rechtecks, das berni und sabine aufspannen.
Zu verarbeitende Daten können von ganz
unterschiedlichem Typ sein, z. B. Zahlen, mit
denen man rechnen kann, oder Wahrheitswerte, die
man mit logischen Operatoren verknüpfen kann.
35Teil 6
EVA-Struktur
36Zum Einstieg
sabine kann ein vorgegebenes Hundealter in das
entsprechende Menschenalter umrechnen.
Ausgabe-variable
Eingabe-Variable
Verarbeitung
Entwickeln Sie ein Programm mit Ein- und
Ausgabevariable, bei dem ein Menschenalter in ein
entsprechendes Hundealter umgerechnet wird.
37Eingabe - Verarbeitung - Ausgabe
Programme, die eine EVA-Struktur aufweisen,
verarbeiten Benutzereingaben und geben die
Ergebnisse der Verarbeitung in einer für den
Benutzer verständlichen Weise wieder aus.
Ausgabe-variable
Eingabe-Variable
Verarbeitung
sabine kann ein vorgegebenes Hundealter in das
entsprechende Menschenalter umrechnen.
38Übungen
Aufgabe Entwickeln Sie weitere
Scratch-Programme, die die bisher eingeführten
Fachkonzepten verwenden.
39Teil 7
Algorithmen
40Zum Einstieg
berni denkt sich eine Zahl zwischen 0 und 100
aus. sabine soll diese Zahl mit möglichst wenigen
Rateversuchen herausfinden. Wenn sie einen
Rateversuch macht und berni ihre Zahl nennt, so
erhält sie als Rückmeldung eine der folgenden
Nachrichten "Treffer", "zu klein" bzw. "zu groß".
Überlegen Sie sich eine Strategie, nach der
sabine die Rateversuche machen soll. Entwickeln
Sie geeignete Programme zur Durchführung des
Spiels.
41Algorithmus zum Ratespiel
Beim Ratespiel kann sabine folgendermaßen
vorgehen. Sie merkt sich den Bereich, in dem die
Ratezahl liegen muss. Zu Beginn ist das der
Bereich 0..100. Als Rateversuch nimmt sie immer
die Zahl in der Mitte des Bereiches. Wenn sie die
Rückmeldung "zu klein" erhält, dann passt sie den
gemerkten Bereich an, indem sie ihren Rateversuch
um 1 erhöht und diese Zahl als neue untere Grenze
wählt. Analog verfährt sie, wenn sie die
Rückmeldung "zu gross" erhält. Diese Schritte
werden wiederholt, bis der Rateversuch der
Ratezahl entspricht.
Idee
eingabe ratezahl setze untere_grenze auf 0 setze
obere_grenze auf 100 setze zaehler auf 0 setze
geraten auf falsch wiederhole bis geraten
wahr ändere zaehler um 1 setze
rateversuch auf gerundet((untere_Grenze
obere_grenze)/2) wenn rateversuch
ratezahl setze geraten auf wahr
sonst wenn rateversuch lt ratezahl
setze untere_grenze auf (rateversuch 1)
sonst setze obere_grenze auf
(rateversuch - 1) ausgabe zaehler
Algorithmus
42Algorithmus zum Ratespiel
Ein Algorithmus ist eine Verarbeitungsvorschrift,
die so präzise formuliert ist, dass sie
(zumindest im Prinzip) auch von einer Maschine
abgearbeitet werden kann.
eingabe ratezahl setze untere_grenze auf 0 setze
obere_grenze auf 100 setze zaehler auf 0 setze
geraten auf falsch wiederhole bis geraten
wahr ändere zaehler um 1 setze
rateversuch auf gerundet((untere_Grenze
obere_grenze)/2) wenn rateversuch
ratezahl setze geraten auf wahr
sonst wenn rateversuch lt ratezahl
setze untere_grenze auf (rateversuch 1)
sonst setze obere_grenze auf
(rateversuch - 1) ausgabe zaehler
Algorithmus
43Implementierung eines Algorithmus
Eine Implementierung eines Algorithmus ist eine
Übersetzung und Anpassung des Algorithmus in eine
bestimmte Programmierwelt.
44Übungen
Aufgabe Entwickeln Sie eine interaktive
Implementierung zum Algorithmus.
45Teil 5
Teile und herrsche
46Zum Einstieg
berni und sabine wollen ein Problem aus der
Wahrscheinlichkeitsrechnung lösen. Es geht bei
diesem Problem um sogenannte Irrfahrten
Ein Teilchen startet in der Position 0 und
springt jede Sekunde mit der Wahrscheinlichkeit
1/2 einen Schritt nach links oder rechts. Mit
welcher Wahrscheinlichkeit endet die Irrfahrt
nach genau n 10 Schritten in der Position k (z.
B. k 0)?
berni und sabine einigen sich, das Problem durch
eine Simulation zu lösen. Die Irrfahrt wird dabei
wiederholt durchgespielt. Gleichzeitig wird
mitprotokolliert, wie oft ein bestimmtes Ereignis
(z. B. Irrfahrt endet in der Position 0)
eingetre-ten ist. Aus der Gesamtzahl der
Wiederholungen und der Anzahl der Treffer (das
sind die Simula-tionsdurchgänge, bei denen das
Ereignis eingetroffen ist) lässt sich dann die
gesuchte Wahrscheinlichkeit abschätzen. berni zu
sabine Wir teilen uns die Arbeit. Du bist für
die Durchführung der Irrflüge zuständig, ich
zähle mit und werte die Ergebnisse statistisch
aus.
47Problemzerlegung
ALGORITHMUS simulation_durchfuehren setze
anzahl_fluege auf 0 setze anzahl_treffer auf
0 wiederhole 100 mal ändere anzahl_fluege um
1 führe ALGORITHMUS irrflug_durchfuehren aus
falls position 0 ändere
anzahl_treffer um 1 setze relative_haeufigkeit
auf (anzahl_treffer / anzahl_fluege)
Problem Simulation durchführen
ALGORITHMUS irrflug_durchfuehren setze position
auf 0 setze flug_richtung auf 0 führe ALGORITHMUS
position_zeigen aus wiederhole 10 mal setze
flug_richtung auf (zufallszahl von 0 bis 1)
falls flug_richtung 0 ändere position
um 1 sonst ändere position um -1
führe ALGORITHMUS position_zeigen aus
Teilproblem Irrflug durchführen
Teilproblem Position anzeigen
48Teile und Herrsche
Teile und herrsche ist eine Problemlösestrategie,
bei der ein Problem immer weiter in Teilprobleme
zerlegt wird, bis sich diese einfach lösen
lassen. Aus den Lösungen der Teilprobleme wird
dann die Lösung des Gesamtproblems
zusammengesetzt.
Problem Simulation durchführen
Algorithmus Simulation durchführen
Teilproblem Irrflug durchführen
Algorithmus Irrflug durchführen
Teilproblem Position anzeigen
Algorithmus Position anzeigen
49Implementierung von Teilalgorithmen
ALGORITHMUS simulation_durchfuehren setze
anzahl_fluege auf 0 setze anzahl_treffer auf
0 wiederhole 100 mal ändere anzahl_fluege um
1 führe ALGORITHMUS irrflug_durchfuehren aus
falls position 0 ändere
anzahl_treffer um 1 setze relative_haeufigkeit
auf (anzahl_treffer / anzahl_fluege)
ALGORITHMUS irrflug_durchfuehren setze position
auf 0 setze flug_richtung auf 0 führe ALGORITHMUS
position_zeigen aus wiederhole 10 mal setze
flug_richtung auf (zufallszahl von 0 bis 1)
falls flug_richtung 0 ändere position
um 1 sonst ändere position um -1
führe ALGORITHMUS position_zeigen aus
Aktivierung durch Nachrichten
50Übungen
Aufgabe Bearbeiten Sie analog ein selbst
ausgedachtes komplexeres Problem.