Algorithmisches Problemlösen mit Scratch Klaus Becker 2008.

50
Algorithmisches Problemlösen mit Scratch Klaus Becker 2008

Transcript of Algorithmisches Problemlösen mit Scratch Klaus Becker 2008.

Page 1: Algorithmisches Problemlösen mit Scratch Klaus Becker 2008.

Algorithmisches Problemlösenmit Scratch

Klaus Becker

2008

Page 2: Algorithmisches Problemlösen mit Scratch Klaus Becker 2008.

2 Scratch

Scratch ist eine Programmierumgebung, mit der man ansprechende dynamische Anwendungen entwickeln kann.

Page 3: Algorithmisches Problemlösen mit Scratch Klaus Becker 2008.

3 Teil 1

Die Scratch-Welt

Page 4: Algorithmisches Problemlösen mit Scratch Klaus Becker 2008.

4 Eine Bühne mit Figuren

Wie im Theater: Die Scratch-Welt besteht aus einer Bühne, auf der Figuren agieren können.

Page 5: Algorithmisches Problemlösen mit Scratch Klaus Becker 2008.

5 Bausteine der Scratch-Welt

Eine Scratch-Welt ist aus Objekten aufgebaut.

Objekte

Objektfenster

Weltfenster

Objektname

Objekteigenschaften

Page 6: Algorithmisches Problemlösen mit Scratch Klaus Becker 2008.

6 Regieanweisungen

Mit einem Programm kann man die Aktionen festlegen, die eine Scratch-Figur ausführen soll.

ProgrammfensterProgrammierkache

ln

Page 7: Algorithmisches Problemlösen mit Scratch Klaus Becker 2008.

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.

Ein Programm ist eine Folge von Anweisungen.

elementare Anweisung

Programm

Anweisung

Page 8: Algorithmisches Problemlösen mit Scratch Klaus Becker 2008.

8 Einsatzkommandos

Scratch-Objekte agieren nur, wenn sie dazu aufgefordert werden

Page 9: Algorithmisches Problemlösen mit Scratch Klaus Becker 2008.

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

Ereignis-behandlung

Page 10: Algorithmisches Problemlösen mit Scratch Klaus Becker 2008.

10 Übungen

Aufgabe Entwickeln Sie Scratch-Programme, die die bisher eingeführten Fachkonzepten verwenden (z. B. eine Hundeampel).

Page 11: Algorithmisches Problemlösen mit Scratch Klaus Becker 2008.

11 Teil 2

Entscheidungen

Page 12: Algorithmisches Problemlösen mit Scratch Klaus Becker 2008.

12 Zum Einstieg

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.

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.

Page 13: Algorithmisches Problemlösen mit Scratch Klaus Becker 2008.

13 Fallunterscheidungen

zweiseitige Fallunterscheidung

einseitige Fallunterscheidung

Page 14: Algorithmisches Problemlösen mit Scratch Klaus Becker 2008.

14 Fallunterscheidungen

Bedingung

Anweisungs-sequenz

Anweisungs-sequenz

Bedingung

Anweisungs-sequenz

Page 15: Algorithmisches Problemlösen mit Scratch Klaus Becker 2008.

15 komplexe Bedingungen

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

Konjunktion

DisjunktionNegation und oder

nicht

logischer Operator

elementare Bedingung

Page 16: Algorithmisches Problemlösen mit Scratch Klaus Becker 2008.

16 Übungen

Aufgabe Entwickeln Sie weitere Scratch-Programme, die die bisher eingeführten Fachkonzepten verwenden.

Page 17: Algorithmisches Problemlösen mit Scratch Klaus Becker 2008.

17 Teil 3

Wiederholungen

Page 18: Algorithmisches Problemlösen mit Scratch Klaus Becker 2008.

18 Zum Einstieg

berni soll 20 Schritte weiterlaufen.

berni soll bis zum Rand laufen.

Oft gibt es Situationen, in denen ein Ablauf wiederholt durchgeführt werden soll.

Page 19: Algorithmisches Problemlösen mit Scratch Klaus Becker 2008.

19 Wiederholungen

feste Anzahl von

Wiederholungen

bedingte Wiederholung

en

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 20 Schritte weiterlaufen.

berni soll bis zum Rand laufen.

Page 20: Algorithmisches Problemlösen mit Scratch Klaus Becker 2008.

20 bedingte Wiederholung

Bedingung

Anweisungs-sequenz

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.

Page 21: Algorithmisches Problemlösen mit Scratch Klaus Becker 2008.

21 Vorsicht: Variantenwiederhole: [Anweisungssequenz] bis [Bedingung]

bis [Bedingung] wiederhole: [Anweisungssequenz]

Scratch-Version

Pascal: repeat

Page 22: Algorithmisches Problemlösen mit Scratch Klaus Becker 2008.

22 Vorsicht: Variantenbis [Bedingung] wiederhole: [Anweisungssequenz]

Scratch-Version

Python, Pascal: while

solange [Bedingung] wiederhole: [Anweisungssequenz]

Page 23: Algorithmisches Problemlösen mit Scratch Klaus Becker 2008.

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.

Page 24: Algorithmisches Problemlösen mit Scratch Klaus Becker 2008.

24 Übungen

Aufgabe Entwickeln Sie weitere Scratch-Programme, die die bisher eingeführten Fachkonzepten verwenden.

Page 25: Algorithmisches Problemlösen mit Scratch Klaus Becker 2008.

25 Teil 4

Kontrollstrukturen

Page 26: Algorithmisches Problemlösen mit Scratch Klaus Becker 2008.

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 rechtsLösung: In diesem Fall muss berni bis zur Wand weiterlaufen, sich dort umdrehen und dann weiterlaufen, bis er unterhalb von sabine ist. Fall 2: ...

Page 27: Algorithmisches Problemlösen mit Scratch Klaus Becker 2008.

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 rechtsLösung: In diesem Fall muss berni bis zur Wand weiterlaufen, sich dort umdrehen und dann weiterlaufen, bis er unterhalb von sabine ist. Fall 2: ...

Page 28: Algorithmisches Problemlösen mit Scratch Klaus Becker 2008.

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

Page 29: Algorithmisches Problemlösen mit Scratch Klaus Becker 2008.

29 Teil 5

Variablenkonzept

Page 30: Algorithmisches Problemlösen mit Scratch Klaus Becker 2008.

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.

Page 31: Algorithmisches Problemlösen mit Scratch Klaus Becker 2008.

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.

Variablenname

Variablenwert

Page 32: Algorithmisches Problemlösen mit Scratch Klaus Becker 2008.

32 Wertzuweisung

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)

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.

Variable

Term

Page 33: Algorithmisches Problemlösen mit Scratch Klaus Becker 2008.

33 Terme

Eine Wertzuweisung besteht aus einer Variablen (der ein Wert zugewiesen wird) und einem Term (der den zuzuweisenden Wert festlegt).

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.

Programm zur Bestimmung des Abstands zwischen berni und sabine.

Page 34: Algorithmisches Problemlösen mit Scratch Klaus Becker 2008.

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.

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.

Programm zur Bestimmung des Flächeninhalts des Rechtecks, das berni und sabine aufspannen.

Bedingung

Term

Wert: Wahrheitswert

Wert: Zahl

Page 35: Algorithmisches Problemlösen mit Scratch Klaus Becker 2008.

35 Teil 6

EVA-Struktur

Page 36: Algorithmisches Problemlösen mit Scratch Klaus Becker 2008.

36 Zum 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.

Page 37: Algorithmisches Problemlösen mit Scratch Klaus Becker 2008.

37 Eingabe - Verarbeitung - Ausgabe

sabine kann ein vorgegebenes Hundealter in das entsprechende Menschenalter umrechnen.

Ausgabe-variable

Eingabe-Variable

Verarbeitung

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.

Page 38: Algorithmisches Problemlösen mit Scratch Klaus Becker 2008.

38 Übungen

Aufgabe Entwickeln Sie weitere Scratch-Programme, die die bisher eingeführten Fachkonzepten verwenden.

Page 39: Algorithmisches Problemlösen mit Scratch Klaus Becker 2008.

39 Teil 7

Algorithmen

Page 40: Algorithmisches Problemlösen mit Scratch Klaus Becker 2008.

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.

Page 41: Algorithmisches Problemlösen mit Scratch Klaus Becker 2008.

41 Algorithmus zum Ratespiel

eingabe: ratezahlsetze untere_grenze auf 0setze obere_grenze auf 100setze zaehler auf 0setze geraten auf falschwiederhole 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

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.

Algorithmus

Idee

Page 42: Algorithmisches Problemlösen mit Scratch Klaus Becker 2008.

42 Algorithmus zum Ratespiel

eingabe: ratezahlsetze untere_grenze auf 0setze obere_grenze auf 100setze zaehler auf 0setze geraten auf falschwiederhole 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

Algorithmus

Ein Algorithmus ist eine Verarbeitungsvorschrift, die so präzise formuliert ist, dass sie (zumindest im Prinzip) auch von einer Maschine abgearbeitet werden kann.

Page 43: Algorithmisches Problemlösen mit Scratch Klaus Becker 2008.

43

Implementierung eines Algorithmus

Eine Implementierung eines Algorithmus ist eine Übersetzung und Anpassung des Algorithmus in eine bestimmte Programmierwelt.

Page 44: Algorithmisches Problemlösen mit Scratch Klaus Becker 2008.

44 Übungen

Aufgabe Entwickeln Sie eine interaktive Implementierung zum Algorithmus.

Page 45: Algorithmisches Problemlösen mit Scratch Klaus Becker 2008.

45 Teil 5

Teile und herrsche

Page 46: Algorithmisches Problemlösen mit Scratch Klaus Becker 2008.

46 Zum Einstieg

berni und sabine wollen ein Problem aus der Wahrscheinlichkeitsrechnung lösen. Es geht bei diesem Problem um sogenannte Irrfahrten:

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.

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

Page 47: Algorithmisches Problemlösen mit Scratch Klaus Becker 2008.

47 Problemzerlegung

ALGORITHMUS simulation_durchfuehrensetze anzahl_fluege auf 0setze anzahl_treffer auf 0wiederhole 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_durchfuehrensetze position auf 0setze flug_richtung auf 0führe ALGORITHMUS position_zeigen auswiederhole 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

Page 48: Algorithmisches Problemlösen mit Scratch Klaus Becker 2008.

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

Teilproblem: Irrflug durchführen

Teilproblem: Position anzeigen

Algorithmus: Simulation

durchführen

Algorithmus: Irrflug durchführen

Algorithmus: Position anzeigen

Page 49: Algorithmisches Problemlösen mit Scratch Klaus Becker 2008.

49

Implementierung von Teilalgorithmen

ALGORITHMUS simulation_durchfuehrensetze anzahl_fluege auf 0setze anzahl_treffer auf 0wiederhole 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_durchfuehrensetze position auf 0setze flug_richtung auf 0führe ALGORITHMUS position_zeigen auswiederhole 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

Page 50: Algorithmisches Problemlösen mit Scratch Klaus Becker 2008.

50 Übungen

Aufgabe Bearbeiten Sie analog ein selbst ausgedachtes komplexeres Problem.