Algorithmisches Problemlösen mit Scratch Klaus Becker Scratch Scratch ist eine Programmierumgebung, mit der man ansprechende dynamische Anwendungen entwickeln kann.

Download Report

Transcript Algorithmisches Problemlösen mit Scratch Klaus Becker Scratch Scratch ist eine Programmierumgebung, mit der man ansprechende dynamische Anwendungen entwickeln kann.

Algorithmisches Problemlösen
mit Scratch
Klaus Becker
2008
2
Scratch
Scratch ist eine Programmierumgebung, mit der man ansprechende dynamische
Anwendungen entwickeln kann.
3
Teil 1
Die Scratch-Welt
4
Eine Bühne mit Figuren
Wie im Theater: Die Scratch-Welt besteht aus einer Bühne, auf der Figuren agieren können.
5
Bausteine der Scratch-Welt
Eine Scratch-Welt ist aus Objekten aufgebaut.
Objektname
Objekteigenschaften
Objektfenster
Objekte
Weltfenster
Regieanweisungen
6
Mit einem Programm kann man die Aktionen festlegen, die eine Scratch-Figur ausführen soll.
Programmfenster
Programmierkacheln
7
Elementare 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.
Anweisung
Ein Programm ist eine Folge von
Anweisungen.
elementare
Anweisung
Programm
8
Einsatzkommandos
Scratch-Objekte agieren nur, wenn sie dazu
aufgefordert werden
9
Ereignissteuerung
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
Ereignisbehandlung
10
Übungen
Aufgabe
Entwickeln Sie Scratch-Programme, die die bisher eingeführten Fachkonzepten verwenden (z.
B. eine Hundeampel).
11
Teil 2
Entscheidungen
12
Zum 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.
13
Fallunterscheidungen
zweiseitige
Fallunterscheidung
einseitige
Fallunterscheidung
14
Fallunterscheidungen
Bedingung
Bedingung
Anweisungssequenz
Anweisungssequenz
Anweisungssequenz
komplexe Bedingungen
15
elementare
Bedingung
logischer
Operator
a
nicht a
a
b
a und b
a
b
a oder b
falsch
wahr
falsch
falsch
falsch
falsch
falsch
falsch
wahr
falsch
falsch
wahr
falsch
falsch
wahr
wahr
wahr
falsch
falsch
wahr
falsch
wahr
wahr
wahr
wahr
wahr
wahr
wahr
nicht
Negation
Konjunktion
und
Disjunktion
oder
16
Übungen
Aufgabe
Entwickeln Sie weitere Scratch-Programme, die die bisher eingeführten Fachkonzepten
verwenden.
17
Teil 3
Wiederholungen
18
Zum Einstieg
Oft gibt es Situationen, in denen ein Ablauf wiederholt durchgeführt werden soll.
berni soll 20 Schritte weiterlaufen.
berni soll bis zum Rand laufen.
19
Wiederholungen
feste Anzahl
von
Wiederholungen
Eine Wiederholeanweisung mit
vorgegebener Anzahl
von Wiederholungen
dient dazu,
wiederholte Abläufe
zu beschreiben, bei
denen die Anzahl der
Wiederholungen von
vorneherein feststeht.
berni soll 20 Schritte weiterlaufen.
bedingte
Wiederholungen
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.
20
bedingte 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
Anweisungssequenz
Vorsicht: Varianten
21
bis [Bedingung] wiederhole:
[Anweisungssequenz]
ScratchVersion
wiederhole:
[Anweisungssequenz]
bis [Bedingung]
Pascal:
repeat
Vorsicht: Varianten
22
bis [Bedingung] wiederhole:
[Anweisungssequenz]
ScratchVersion
solange [Bedingung] wiederhole:
[Anweisungssequenz]
Python, Pascal:
while
23
Vorsicht: 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.
25
Teil 4
Kontrollstrukturen
26
Zum 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: ...
27
Schachtelung 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: ...
28
Kontrollstrukturen
Kontrollstrukturen dienen dazu, den Ablauf der Ausführungsschritte
festzulegen. Wesentliche Kontrollstrukturen sind die Fallunterscheidung, die
Wiederholung sowie die Sequenzbildung (Hintereinanderreihung).
Fallunterscheidung
Wiederholung
Sequenzbildung
29
Teil 5
Variablenkonzept
30
Zum 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.
31
Variablen
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
Wertzuweisung
32
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.
33
Terme
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.
34
Datentyp
Ein Datentyp beschreibt eine Menge von Datenobjekten, die alle die gleiche Struktur haben
und mit denen die gleichen Operationen ausgeführt werden können.
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.
Term
Wert: Zahl
Bedingung
Wert: Wahrheitswert
35
Teil 6
EVA-Struktur
36
Zum Einstieg
sabine kann ein vorgegebenes Hundealter in das entsprechende Menschenalter umrechnen.
EingabeVariable
Ausgabevariable
Verarbeitung
Entwickeln Sie ein Programm mit Ein- und Ausgabevariable, bei dem ein Menschenalter in ein
entsprechendes Hundealter umgerechnet wird.
37
Eingabe - 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.
EingabeVariable
Ausgabevariable
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.
39
Teil 7
Algorithmen
40
Zum 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.
41
Algorithmus 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
Algorithmus
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 < ratezahl:
setze untere_grenze auf (rateversuch + 1)
sonst:
setze obere_grenze auf (rateversuch - 1)
ausgabe: zaehler
42
Algorithmus 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
Algorithmus
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 < ratezahl:
setze untere_grenze auf (rateversuch + 1)
sonst:
setze obere_grenze auf (rateversuch - 1)
ausgabe: zaehler
43
Implementierung 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.
45
Teil 5
Teile und herrsche
46
Zum 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 Simulationsdurchgä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.
47
Problemzerlegung
ALGORITHMUS simulation_durchfuehren
Problem:
setze anzahl_fluege auf 0
Simulation durchführen
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
Teilproblem:
setze position auf 0
Irrflug durchführen
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:
Position anzeigen
48
Teile 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
49
Implementierung 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.