83
Algorithmisches Problemlösen mit Kara Klaus Becker 2015

Algorithmisches Problemlösen mit Kara Klaus Becker 2015

Embed Size (px)

Citation preview

Page 1: Algorithmisches Problemlösen mit Kara Klaus Becker 2015

Algorithmisches Problemlösenmit Kara

Klaus Becker2015

Page 2: Algorithmisches Problemlösen mit Kara Klaus Becker 2015

2 Kara

Page 3: Algorithmisches Problemlösen mit Kara Klaus Becker 2015

3 Teil 1

Ausführsystem Kara

Page 4: Algorithmisches Problemlösen mit Kara Klaus Becker 2015

4 Kara, ein steuerbarer MarienkäferKara ist ein Marienkäfer. Kara lebt in einer Welt mit unbewegliche Baumstümpfen, mit Pilzen (die Kara verschieben kann) und mit Kleeblättern, die Kara hinlegen und aufnehmen kann.

Page 5: Algorithmisches Problemlösen mit Kara Klaus Becker 2015

5 Kara direkt steuernAufgabe: Kara steht hier vor einem Baumstumpf. Kara soll jetzt einmal um den Baum laufen und den Weg mit Kleeblättern auslegen. Benutze die Schaltflächen im Kara-Fenster, um diese Aufgabe zu erledigen.

vorher nachher

Page 6: Algorithmisches Problemlösen mit Kara Klaus Becker 2015

6 Kara mit Anweisungen steuernAufgabe:Stelle nochmal die Ausgangssituation wie oben her. Klicke jetzt auf die Schaltfläche [Programmieren]. Es öffnet sich ein neues Fenster, in das man Anweisungen zur Steuerung von Kara schreiben kann. Ergänze diese Anweisungen und lasse sie von Kara ausführen.

KaraweltfensterProgrammfenster

Page 7: Algorithmisches Problemlösen mit Kara Klaus Becker 2015

7

Fachkonzept - elementare Anweisung

Die Steuerung von Kara erfolgt mit Hilfe von Anweisungen. Zur Bildung von Anweisungen stellt ein Ausführsystem wie PythonKara bestimmte Grundoperationen zur Verfügung. Solche direkt aus Grundoperationen gebildete Anweisungen nennt man auch elementare Anweisungen.

elementare Anweisungkara.move()

Mit einem Aufruf einer Operation wird Kara aufgefordert, die betreffende Operation auszuführen. Solch ein Aufruf hat - hier im Kontext Kara - die Gestalt kara.operation. So führt etwa der Aufruf kara.move() dazu, dass Kara einen Schritt weiter geht.

Aufruf einer Operation

Page 8: Algorithmisches Problemlösen mit Kara Klaus Becker 2015

8 Fachkonzept - AnweisungssequenzEine Anweisungssequenz ist eine Folge von Anweisungen, die vom Ausführsystem der Reihe nach ausgeführt werden.

kara.turnLeft()kara.putLeaf()kara.move()kara.putLeaf()kara.turnRight()kara.move()kara.putLeaf()kara.move()kara.putLeaf()kara.turnRight()kara.move()kara.putLeaf()kara.move()kara.putLeaf()kara.turnRight()kara.move()kara.putLeaf()kara.move()kara.putLeaf()kara.turnRight()kara.move()kara.putLeaf()kara.turnLeft()

Page 9: Algorithmisches Problemlösen mit Kara Klaus Becker 2015

9 ÜbungenAufgabe:Versuche, das Problem direkt mit Hilfe von Anweisungen zu lösen. Hierzu muss du Kara in Gedanken steuern und die jeweiligen Steueranweisungen in der richtigen Reihenfolge im Programmfenster notieren. Schafft du das gleich im ersten Anlauf?

Page 10: Algorithmisches Problemlösen mit Kara Klaus Becker 2015

10 ÜbungenAufgabe:Kara möchte einen Pilz um einen Baumstumpf schieben. Entwickle erst sämtliche Anweisungen zur Lösung des Problems. Du musst dazu in Gedanken die Anweisungen alle ausführen. Teste anschließend, ob die Anweisungssequenz das Problem tatsächlich löst.

Page 11: Algorithmisches Problemlösen mit Kara Klaus Becker 2015

11 Teil 2

Fallunterscheidungen

Page 12: Algorithmisches Problemlösen mit Kara Klaus Becker 2015

12 Problem – Kleeblatt suchenProblem: Kara steht vor ihrem/seinem Bau und möchte das Kleeblatt, das sich irgendwo im Bau befindet, nach draußen befördern.

vorher

nachher

vorher

nachher

vorher

nachher

Page 13: Algorithmisches Problemlösen mit Kara Klaus Becker 2015

13 Ein Lösungsverfahren entwickeln

vorher nachher

Aufgabe: Ergänze die fehlenden Teile.

Schritt weitergehenWENN auf einem Kleeblatt: Kleeblatt aufheben rechts drehen rechts drehen Schritt weitergehenSONST: Schritt weitergehen

Kleeblatt hinlegen

vorher nachher

vorher nachher

Page 14: Algorithmisches Problemlösen mit Kara Klaus Becker 2015

14

Ein Lösungsverfahren implementieren

Schritt weitergehenWENN auf einem Kleeblatt: Kleeblatt aufheben rechts drehen rechts drehen Schritt weitergehenSONST: Schritt weitergehen

Kleeblatt hinlegen

Aufgabe: Ergänze den Quelltext und teste, ob das Programm das Gewünschte leistet. Beachte, dass du alle drei Fälle testen musst. Achte auch hier besonders auf korrekte Einrückungen.

kara.move()if kara.onLeaf(): kara.removeLeaf() ...else: kara.move() …kara.putLeaf()

Python-Quelltext

Lösungsverfahren

Page 15: Algorithmisches Problemlösen mit Kara Klaus Becker 2015

15 Fachkonzept - BedingungKara kann die Umgebung mit Sensoren wahrnehmen.

Die folgende Tabelle zeigt die Operationen, die Kara zur Aktivierung der Sensoren ausführen kann.

Page 16: Algorithmisches Problemlösen mit Kara Klaus Becker 2015

16 Fachkonzept - BedingungDie Steuerung komplexerer Abläufe (wie Fallunterscheidungen und Wiederholungen) erfolgt mit Hilfe von Bedingungen.

Die einfachsten Bedingungen, die mit Hilfe der Grundoperationen des Ausführsystems gebildet werden, nennt man auch elementare Bedingungen.

…if kara.onLeaf(): ...else: ……

elementare Bedingungen

Komplexere Bedingungen lassen sich mit Hilfe logischer Operatoren aufbauen.

…if not kara.treeFront(): ...else: ……

Komplexe Bedingung

Page 17: Algorithmisches Problemlösen mit Kara Klaus Becker 2015

17 Fachkonzept - FallunterscheidungSchritt weitergehenWENN auf einem Kleeblatt: # Fall 1 Kleeblatt aufheben rechts drehen rechts drehen Schritt weitergehenSONST: Schritt weitergehen WENN auf einem Kleeblatt: # Fall 2 Kleeblatt aufheben rechts drehen rechts drehen Schritt weitergehen Schritt weitergehen SONST: # Fall 3 Schritt weitergehen Kleeblatt aufheben rechts drehen rechts drehen Schritt weitergehen Schritt weitergehen Schritt weitergehenKleeblatt hinlegen

Fall 2

Fall 1

Fall 3

Page 18: Algorithmisches Problemlösen mit Kara Klaus Becker 2015

18 Fachkonzept - FallunterscheidungSchritt weitergehenWENN auf einem Kleeblatt: # Fall 1 Kleeblatt aufheben rechts drehen rechts drehen Schritt weitergehenSONST: Schritt weitergehen WENN auf einem Kleeblatt: # Fall 2 Kleeblatt aufheben rechts drehen rechts drehen Schritt weitergehen Schritt weitergehen SONST: # Fall 3 Schritt weitergehen Kleeblatt aufheben rechts drehen rechts drehen Schritt weitergehen Schritt weitergehen Schritt weitergehenKleeblatt hinlegen

Eine Fallunterscheidung dient dazu, alternative Abläufe zu beschreiben.

Page 19: Algorithmisches Problemlösen mit Kara Klaus Becker 2015

19 Fachkonzept - Fallunterscheidung

WENN [Bedingung]: [Anweisungssequenz]SONST: [Anweisungssequenz]

if [Bedingung]: [Anweisungssequenz]else: [Anweisungssequenz]zweiseitige Fallunterscheidung

Flussdiagramm Struktogramm

Page 20: Algorithmisches Problemlösen mit Kara Klaus Becker 2015

20 Fachkonzept - Fallunterscheidung

WENN [Bedingung]: [Anweisungssequenz]

if [Bedingung]: [Anweisungssequenz]

einseitige Fallunterscheidung

Flussdiagramm Struktogramm

Page 21: Algorithmisches Problemlösen mit Kara Klaus Becker 2015

21 Übungen

if kara.onLeaf(): kara.removeLeaf() kara.move()else: kara.move()

Aufgabe:Gegeben sind zwei Mini-Programme. Erkläre mit Hilfe von Flussdiagrammen, dass beide Programme dasselbe leisten.

if kara.onLeaf(): kara.removeLeaf()kara.move()

Page 22: Algorithmisches Problemlösen mit Kara Klaus Becker 2015

22 ÜbungenAufgabe:Kara weiß nicht, ob und wie viele Kleeblätter sich in ihrem/seinem Bau befinden. Kara möchte sie alle einsammeln.

vorher nachher

Page 23: Algorithmisches Problemlösen mit Kara Klaus Becker 2015

23 Teil 3

Wiederholungen

Page 24: Algorithmisches Problemlösen mit Kara Klaus Becker 2015

24 Problem – Baumreihe umlaufenProblem: Kara steht vor einer Baumreihe, weiß jedoch nicht, wie lang sie ist. Kara möchte um die Baumreihe laufen und den Weg mit Blättern auslegen.

vorher nachher

Page 25: Algorithmisches Problemlösen mit Kara Klaus Becker 2015

25 Lösungsverfahren

Aufgabe: Ergänze die fehlenden Teile. Teste das fertige Programm

...SOLANGE ein Baumstumpf rechts steht: ......

...while kara.treeRight(): ......

vorher nachher

Page 26: Algorithmisches Problemlösen mit Kara Klaus Becker 2015

26 Ein ähnliches Problem

Aufgabe: Löse das Problem analog.

vorher nachher

Page 27: Algorithmisches Problemlösen mit Kara Klaus Becker 2015

27 Fachkonzept - WiederholungKleeblatt hinlegenlinks drehenSchritt weitergehenKleeblatt hinlegenrechts drehenSchritt weitergehen

SOLANGE ein Baumstumpf rechts steht: Kleeblatt hinlegen Schritt weitergehen

Kleeblatt hinlegenrechts drehenSchritt weitergehenKleeblatt hinlegenlinks drehen

Wiederholung

Eine Wiederholung dient dazu, wiederholte Abläufe zu beschreiben.

Page 28: Algorithmisches Problemlösen mit Kara Klaus Becker 2015

28 Fachkonzept - Fallunterscheidung

SOLANGE [Bedingung]: [Anweisungssequenz]

while [Bedingung]: [Anweisungssequenz]

Wiederholung mit Eintrittsbedingung

Flussdiagramm Struktogramm

Page 29: Algorithmisches Problemlösen mit Kara Klaus Becker 2015

29 ÜbungenAufgabe:Betrachte das folgende Kara-Programm: while not kara.treeFront(): kara.move()

(a) Was leistet dieses Programm? Teste es mit geeigneten Kara-Welten.(b) Überlege dir, wie die Kara-Welt jeweils beschaffen sein muss, damit einer der folgenden Sonderfälle eintritt:- Die Schleife wird überhaupt nicht durchlaufen.- Kara gerät in eine Endlosschleife.

Page 30: Algorithmisches Problemlösen mit Kara Klaus Becker 2015

30 ÜbungenAufgabe:Worin besteht der Unterschied zwischen den folgenden Programmen? Verdeutliche den Unterschied anhand konkreter Situationen.

while not kara.treeFront(): kara.move() kara.putLeaf()

while not kara.treeFront(): kara.move()kara.putLeaf()

Page 31: Algorithmisches Problemlösen mit Kara Klaus Becker 2015

31 ÜbungenAufgabe:Kara steht im Eingang ihres/seines rechteckigen Baus. Kara soll in die hintere Ecke des Baus (siehe Abbildung) laufen. Beachte, dass der Kara-Bau verschiedene Ausmaße haben kann.

Page 32: Algorithmisches Problemlösen mit Kara Klaus Becker 2015

32 ÜbungenAufgabe:Kara soll einmal um ihren/seinen Bau laufen und den Weg mit Kleeblättern auslegen. Aber Achtung, der rechteckige Kara-Bau kann ganz unterschiedliche Ausmaße haben. Die Beispiele zeigen zwei Möglichkeiten.

Page 33: Algorithmisches Problemlösen mit Kara Klaus Becker 2015

33 Teil 4

Algorithmen

Page 34: Algorithmisches Problemlösen mit Kara Klaus Becker 2015

34 ProblemProblem: Kara ist auf der Suche nach einem Kleeblatt. Kara soll hierzu geradeaus weiterlaufen, bis sie/er ein Kleeblatt gefunden hat. Aber, es befinden sich manchmal Baumstümpfe im Weg. Kara muss diese Hindernisse dann umlaufen.

Page 35: Algorithmisches Problemlösen mit Kara Klaus Becker 2015

35 Ideen suchenAufgabe: Am besten, du spielst selbst Kara und probierst verschiedene Problemsituationen erst einmal aus.

Page 36: Algorithmisches Problemlösen mit Kara Klaus Becker 2015

36 Ideen beschreibenAufgabe: Beschreibe in deinen Worten, wie du vorgehen willst.

Page 37: Algorithmisches Problemlösen mit Kara Klaus Becker 2015

37 Ein Verfahren präzise beschreibenAufgabe: Die Ablauflogik lässt sich oft sehr gut mit einem Struktogrammen beschreiben.Die Abbildung zeigt Bausteine eines solchen Struktogramms. Kannst du die fehlenden Teile ergänzen?

Page 38: Algorithmisches Problemlösen mit Kara Klaus Becker 2015

38 Ein Verfahren implementierenAufgabe: Versuche, das in Struktogrammform entwickelte Verfahren in die Python-Sprache zu übersetzen. Teste das Programm mit verschiedenen Problemsituationen (u.a. den oben gezeigten).

Page 39: Algorithmisches Problemlösen mit Kara Klaus Becker 2015

39 Fachkonzept - ProblemspezifikationEine Problemspezifikation dient dazu, ein Problem möglichst präzise zu beschreiben

Wir benutzen hier ein Verfahren zur Problembeschreibung, das in vielen Bereichen der Informatik angewandt wird. Wir beschreiben ein Problem mit Hilfe der Zustände, die das betrachtete System (hier: Kara und ihre/seine Welt) vor und nach der Problembearbeitung einnehmen soll. Zur Darstellung der Zustände benutzen wir häufig Bilder.

Zustand vorher Zustand nachher

Zustand vorher Zustand nachher

Zustand vorher Zustand nachher

Bsp. 1

Bsp. 2

Bsp. 3

Page 40: Algorithmisches Problemlösen mit Kara Klaus Becker 2015

40 Fachkonzept - AlgorithmusEin Algorithmus ist eine Verarbeitungsvorschrift zur Lösung eines Problems, die so präzise formuliert ist, dass sie (zumindest im Prinzip) auch von einer Maschine abgearbeitet werden kann.

SOLANGE nicht auf einem Kleeblatt: WENN vor einem Baum: links drehen Schritt weitergehen rechts drehen Schritt weitergehen SOLANGE rechts ein Baum: Schritt weitergehen rechts drehen Schritt weitergehen links drehen SONST: Schritt weitergehenKleeblatt aufheben

Page 41: Algorithmisches Problemlösen mit Kara Klaus Becker 2015

41 Fachkonzept - AlgorithmusZur Darstellung von Algorithmen verwendet man die natürliche Sprache, Pseudo-Codes, Struktogramme, …

SOLANGE nicht auf einem Kleeblatt: WENN vor einem Baum: links drehen Schritt weitergehen rechts drehen Schritt weitergehen SOLANGE rechts ein Baum: Schritt weitergehen rechts drehen Schritt weitergehen links drehen SONST: Schritt weitergehenKleeblatt aufheben

Struktogramm

Pseudo-Code

Page 42: Algorithmisches Problemlösen mit Kara Klaus Becker 2015

42 Fachkonzept - ProgrammEin Programm ist ein Algorithmus zur Lösung eines Problems, der in einer vorgegebenen Programmiersprache verfasst ist.

while not kara.onLeaf(): if kara.treeFront(): kara.turnLeft() kara.move() kara.turnRight() kara.move() while kara.treeRight(): kara.move() kara.turnRight() kara.move() kara.turnLeft() else: kara.move()kara.removeLeaf()

Page 43: Algorithmisches Problemlösen mit Kara Klaus Becker 2015

43 Bausteine von Algorithmen

Elementaranweisung

Fallunterscheidung

Wiederholung

Page 44: Algorithmisches Problemlösen mit Kara Klaus Becker 2015

44 Bausteine von Algorithmen

Schachtelung

Sequenzbildung

Page 45: Algorithmisches Problemlösen mit Kara Klaus Becker 2015

45 Kontrollstrukturen

Kontrollstrukturen dienen dazu, den Ablauf der Ausführungsschritte festzulegen. Wesentliche Kontrollstrukturen sind die Sequenzbildung, die Fallunterscheidung und die Wiederholung.

Flussdiagramme

Programmablaufpläne

Page 46: Algorithmisches Problemlösen mit Kara Klaus Becker 2015

46 Kontrollstrukturen

Kontrollstrukturen dienen dazu, den Ablauf der Ausführungsschritte festzulegen. Wesentliche Kontrollstrukturen sind die Sequenzbildung, die Fallunterscheidung und die Wiederholung.

Struktogramme

Sequenzbildung Fallunterscheidung Wiederholung

Page 47: Algorithmisches Problemlösen mit Kara Klaus Becker 2015

47

Fehler in Algorithmen und Programmen

Kleeblatt suchen:SOLANGE nicht auf einem Kleeblatt, mache Folgendes: WENN vor einem Baum, dann den Baum / die Baumreihe umlaufen anschließend einen Schritt weitergehendas Kleeblatt aufheben

Jeder macht Fehler. Algorithmisches Problemlösen ist eine anspruchsvolle Tätigkeit. Es ist ganz natürlich, wenn du dabei Fehler machst. Das kommt selbst bei Profis immer wieder vor.

Aufgabe: Was wurde hier bei der Ideensuche nicht berücksichtigt?

Page 48: Algorithmisches Problemlösen mit Kara Klaus Becker 2015

48

Fehler in Algorithmen und Programmen

Jeder macht Fehler. Algorithmisches Problemlösen ist eine anspruchsvolle Tätigkeit. Es ist ganz natürlich, wenn du dabei Fehler machst. Das kommt selbst bei Profis immer wieder vor.

Aufgabe: Hier hat sich ein Fehler in der Ablaufmodellierung eingeschlichen Findest du ihn?

Page 49: Algorithmisches Problemlösen mit Kara Klaus Becker 2015

49

Fehler in Algorithmen und Programmen

while not kara.onLeaf(): if kara.treeFront() kara.turnLeft() kara.move() kara.turnRight() kara.move() while kara.treeRight(): kara.move() kara.turnRight() kara.move() kara.turnLeft() else: kara.move()kara.removeLeaf()

Jeder macht Fehler. Algorithmisches Problemlösen ist eine anspruchsvolle Tätigkeit. Es ist ganz natürlich, wenn du dabei Fehler machst. Das kommt selbst bei Profis immer wieder vor.

Aufgabe: Bei der Übersetzung eines korrekten Algorithmus in ein lauffähiges Programm kann es zu weiteren Fehlern kommen. Welche wurden hier gemacht?

Page 50: Algorithmisches Problemlösen mit Kara Klaus Becker 2015

50

Fehler in Algorithmen und Programmen

Grob unterscheiden lassen sich die folgenden beiden Fehlertypen:

Logische Fehler sind Fehler in Algorithmen, bei denen die Ablauflogik nicht korrekt festgelegt ist.

Syntaxfehler sind Fehler in Programmen, bei denen die Vorgaben der Programmiersprache nicht beachtet sind.

Syntaxfehler werden in der Regel durch Fehlermedungen vom Ausführsystem angezeigt. Die Schwierigkeit besteht meist nur darin, die Fehlermeldungen zu verstehen.

Schwieriger ist es, logische Fehler zu finden. Hier hilft es oft, den Algorithmus - für verschiedene Problemsituationen - Schritt für Schritt selbst auszuführen.

Page 51: Algorithmisches Problemlösen mit Kara Klaus Becker 2015

51 ÜbungenAufgabe: T. hat das folgende Programm zur Lösung des Problems entwickelt. Das Programm enthält etliche Fehler. Suche und korrigiere sie.

while kara.onLeaf(): kara.removeleaf()kara.move()kara.turnRight()while kara.onLeaf(): kara.removeleaf()kara.move()kara.turnRight()while kara.onLeaf(): kara.removeleaf()kara.move()kara.turnRight()while kara.onLeaf(): kara.removeleaf()kara.move()kara.turnRight()

Problem: Kara soll die Kleeblätter, die als Rechteck ausgelegt sind, alle einsammeln.

Page 52: Algorithmisches Problemlösen mit Kara Klaus Becker 2015

52 ÜbungenAufgabe: Entwickle zunächst eine Lösungsidee. Beschreibe sie in Worten. Formuliere anschließend einen Algorithmus. Entwickle und teste dann erst ein zum Algorithmus passendes Programm.

Problem: Kara soll Bäume mit Kleeblättern auslegen. Zu Beginn befindet sich Kara unten im Baumstamm. Kara soll anschließend ein mit Bäumen umrandetes Gebiet (das die Form eines Baumes hat) mit Kleeblättern auslegen. Wir gehen dabei davon aus, dass alle Felder direkt vom Baumstamm aus erreichbar sind.

Page 53: Algorithmisches Problemlösen mit Kara Klaus Becker 2015

53 Teil 5

Unterprogramme

Page 54: Algorithmisches Problemlösen mit Kara Klaus Becker 2015

54 ProblemProblem: Kara soll eine Runde um einen markierten Platz laufen. Die Markierungspfosten stehen schon. Damit man den Weg sieht, soll er mit Kleeblättern ausgelegt werden.

Page 55: Algorithmisches Problemlösen mit Kara Klaus Becker 2015

55 Algorithmus

Kleeblattreihe bis Baum legen

um einen Pfosten laufen

ALGORITHMUS Runde laufenKleeblattreihe bis Baum legenum einen Pfosten laufenKleeblattreihe bis Baum legenum einen Pfosten laufenKleeblattreihe bis Baum legenum einen Pfosten laufenKleeblattreihe bis Baum legenum einen Pfosten laufen

Page 56: Algorithmisches Problemlösen mit Kara Klaus Becker 2015

56 Ein Programm

# Kleeblattreihe bis Baum legenwhile not kara.treeFront(): kara.putLeaf() kara.move()kara.putLeaf()# um Baum laufenkara.turnRight()kara.move()kara.turnLeft()kara.move()kara.turnRight()# Kleeblattreihe bis Baum legenwhile not kara.treeFront(): kara.putLeaf() …

Codeduplizierung

ALGORITHMUS Runde laufenKleeblattreihe bis Baum legenum einen Pfosten laufenKleeblattreihe bis Baum legenum einen Pfosten laufenKleeblattreihe bis Baum legenum einen Pfosten laufenKleeblattreihe bis Baum legenum einen Pfosten laufen

Page 57: Algorithmisches Problemlösen mit Kara Klaus Becker 2015

57 Kara lernt neue Befehle

# Unterprogramm

def kleeblattreiheBisBaumLegen(): while not kara.treeFront(): kara.putLeaf() kara.move() kara.putLeaf()

# HauptprogrammkleeblattreiheBisBaumLegen()

Page 58: Algorithmisches Problemlösen mit Kara Klaus Becker 2015

58 Ein besseres ProgrammALGORITHMUS Runde laufenKleeblattreihe bis Baum legenum einen Pfosten laufenKleeblattreihe bis Baum legenum einen Pfosten laufenKleeblattreihe bis Baum legenum einen Pfosten laufenKleeblattreihe bis Baum legenum einen Pfosten laufen

# Unterprogramm

def kleeblattreiheBisBaumLegen(): while not kara.treeFront(): kara.putLeaf() kara.move() kara.putLeaf()

# HauptprogrammkleeblattreiheBisBaumLegen()…

Aufgabe: Ergänze die fehlenden Teile.

Page 59: Algorithmisches Problemlösen mit Kara Klaus Becker 2015

59 Fachkonzept – UnterprogrammEin Unterprogramm ist eine eigenständige Programmeinheit zur Lösung eines Teilproblems. # Unterprogramm kleeblattreiheBisBaumLegen

# vorher: # Kara sieht (in einiger Entfernung) vor sich einen Baum. # nachher:# Kara hat den gesamten Weg bis zum Baum mit Kleeblättern ausgelegt.

def kleeblattreiheBisBaumLegen(): while not kara.treeFront(): kara.putLeaf() kara.move() kara.putLeaf()

# HauptprogrammkleeblattreiheBisBaumLegen()

Unterprogrammdeklaration

Unterprogrammaufruf

Vorteile von Unterprogrammen:Unterprogramme tragen dazu bei, Programme übersichtlich zu gestalten.Unterprogramme dienen dazu, Code-Duplizierungen zu vermeiden.

Kommentare

Page 60: Algorithmisches Problemlösen mit Kara Klaus Becker 2015

60 Teil 6

Problemzerlegung

Page 61: Algorithmisches Problemlösen mit Kara Klaus Becker 2015

61 Ein etwas schwierigeres ProblemProblem: Kara will ein Fußballfeld mit Kleeblättern auslegen. Die Eckpfosten stehen schon.

Das Problem ist recht komplex. In solch einer Situation ist es meist günstig, das Problem in geeignete Teilprobleme zu zerlegen.

Page 62: Algorithmisches Problemlösen mit Kara Klaus Becker 2015

62 Zerlegung in Teilprobleme

zur Ausgangsposit. gehen

Spielfeldrand mit Blättern auslegen

ins Innere des Spielfelds gehen

das Innere mit Blättern auslegen

Zur Endposition gehen

Fussballfeld mit Kleeblättern auslegen

Page 63: Algorithmisches Problemlösen mit Kara Klaus Becker 2015

63 Lösung des Ausgangsproblems

zur Ausgangsposit. gehen

Spielfeldrand mit Blättern auslegen

ins Innere des Spielfelds gehen

das Innere mit Blättern auslegen

zur Endposition gehen

ALGORITHMUS Fussballfeld mit Kleeblättern auslegenzur Ausgangsposition gehenden Spielfeldrand mit Blättern auslegenins Innere des Spielfelds gehendas Innere mit Blättern auslegenzur Endposition gehen

Page 64: Algorithmisches Problemlösen mit Kara Klaus Becker 2015

64 Zerlegung in Teilprobleme

Kleeblattreihe bis Baum legen

Spielfeldrand mit Blättern auslegen

um einen Pfosten laufen

Page 65: Algorithmisches Problemlösen mit Kara Klaus Becker 2015

65 Lösung des Problems

Kleeblattreihe bis Baum legen

um einen Pfosten laufen

ALGORITHMUS Spielfedrand m. Kleeblättern auslegenKleeblattreihe bis Baum legenum einen Pfosten laufenKleeblattreihe bis Baum legenum einen Pfosten laufenKleeblattreihe bis Baum legenum einen Pfosten laufenKleeblattreihe bis Baum legenum einen Pfosten laufen

Page 66: Algorithmisches Problemlösen mit Kara Klaus Becker 2015

66 Zerlegung in Teilprobleme

Das Innere mit Blättern auslegen

Aufgabe: In welche Teilprobleme lässt sich das beschriebene Problem zerlegen?

Page 67: Algorithmisches Problemlösen mit Kara Klaus Becker 2015

67 Lösung des ProblemsALGORITHMUS Innere mit Kleeblättern auslegen

Aufgabe: Wie lässt sich das Teilproblem jetzt lösen?

Page 68: Algorithmisches Problemlösen mit Kara Klaus Becker 2015

68 Lösung „einfacher“ Probleme

„Einfache“ Probleme werden nicht weiter in Teilprobleme zerlegt, sondern direkt gelöst.

ALGORITHMUS Kleeblattreihe bis Baum legenSOLANGE nicht vor einem Baum: Kleeblatt hinlegen Schritt weitergehenKleeblatt hinlegen

ALGORITHMUS Spielfedrand m. Kleeblättern auslegenKleeblattreihe bis Baum legenum einen Pfosten laufenKleeblattreihe bis Baum legenum einen Pfosten laufenKleeblattreihe bis Baum legenum einen Pfosten laufenKleeblattreihe bis Baum legenum einen Pfosten laufen

ALGORITHMUS um einen Pfosten laufen

Page 69: Algorithmisches Problemlösen mit Kara Klaus Becker 2015

69 Fachkonzept – „teile und herrsche“Teile und herrsche ist eine Problemlösestrategie, bei der ein Problem immer weiter in Teilprobleme zerlegt wird, bis diese sich einfach lösen lassen. Aus den Lösungen der Teilprobleme wird dann die Lösung des Gesamtproblems zusammengesetzt.

ALGORITHMUS Kleeblattreihe bis Baum legenSOLANGE nicht vor einem Baum: Kleeblatt hinlegen Schritt weitergehenKleeblatt hinlegen

ALGORITHMUS Spielfedrand m. Kleeblättern auslegenKleeblattreihe bis Baum legenum einen Pfosten laufenKleeblattreihe bis Baum legenum einen Pfosten laufen…

ALGORITHMUS um einen Pfosten laufenRechts drehenSchritt weitergehenLinks drehen Schritt weitergehen Rechts drehen

Problem zerlegen Lösung zusammensetzen

Teilproblem lösen

Page 70: Algorithmisches Problemlösen mit Kara Klaus Becker 2015

70 ÜbungenAufgabe:Entwickle passende Unterprogramme zur Lösung des Fussballfeldproblems. Orientiere dich an den vorgenommenen Problemzerlegungen.

Page 71: Algorithmisches Problemlösen mit Kara Klaus Becker 2015

71 ÜbungenAufgabe:Kara soll die Kleeblätter, die sich in ihrem/seinem Bau befinden, alle einsammeln. Löse das Problem mit der Problemlösestrategie „teile und herrsche“.

Page 72: Algorithmisches Problemlösen mit Kara Klaus Becker 2015

72 Teil 7

Algorithmen mit Variablen

Page 73: Algorithmisches Problemlösen mit Kara Klaus Becker 2015

73 Ein Zählproblem Problem: Kara soll alle Kleeblätter auf dem Weg zu einem Baum einsammeln und sie vor dem Baum der Reihe nach auslegen.

Page 74: Algorithmisches Problemlösen mit Kara Klaus Becker 2015

74 Lösung des ZählproblemsProblem: Kara soll alle Kleeblätter auf dem Weg zu einem Baum einsammeln und sie vor dem Baum der Reihe nach auslegen.

ALGORITHMUS Kleeblätter einsammeln und auslegensetze zaehler auf 0SOLANGE nicht vor einem Baum: WENN auf einem Kleeblatt: erhöhe zaehler um 1 Kleeblatt aufheben einen Schritt weitergehen...

Aufgabe:Wie könnte der Algorithmus fortgesetzt werden?

Page 75: Algorithmisches Problemlösen mit Kara Klaus Becker 2015

75 Implementierung einer LösungProblem: Kara soll alle Kleeblätter auf dem Weg zu einem Baum einsammeln und sie vor dem Baum der Reihe nach auslegen.

zaehler = 0while not kara.treeFront(): if kara.onLeaf(): zaehler = zaehler + 1 kara.removeLeaf() kara.move()...

Aufgabe:Was bewirken die Anweisungen zaehler = 0 bzw. zaehler = zaehler + 1?Teste das bereits vorgegebene Programm.Versuche, das Programm fertigzustellen.

Page 76: Algorithmisches Problemlösen mit Kara Klaus Becker 2015

76 VariableVariablen dienen in der Informatik dazu, Daten zu verwalten. Eine Variable ist ein Name, der (in der Regel) mit einem Datenwert verknüpft ist.

zaehler = 0while not kara.treeFront(): if kara.onLeaf(): zaehler = zaehler + 1 kara.removeLeaf() kara.move()

Page 77: Algorithmisches Problemlösen mit Kara Klaus Becker 2015

77 WertzuweisungEine Veränderung eines Variablenwerts bzw. des zugehörigen Speicherzelleninhalts kann mit Hilfe einer Wertzuweisung an die entsprechende Variable erfolgen.

kara.move()kara.turnRight()kara.move()zaehler = 0while kara.treeRight(): zaehler = zaehler + 1 kara.move()kara.turnRight()kara.move()while kara.treeRight(): kara.move()kara.turnRight()kara.move()while zaehler > 0: zaehler = zaehler - 1 kara.move()kara.turnLeft()...

zaehler = 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 78: Algorithmisches Problemlösen mit Kara Klaus Becker 2015

78 Noch ein ZählproblemProblem: Kara soll die Schritte bis zum Eingang zählen und sich im Eingang so oft drehen, wie Schritte zum Erreichen des Baus erforderlich waren.

gefunden = Falseabstand = 0while not gefunden: kara.move() abstand = abstand + 1 gefunden = kara.treeLeft() and kara.treeRight() while abstand > 0: kara.turnLeft() kara.turnLeft() kara.turnLeft() kara.turnLeft()

Page 79: Algorithmisches Problemlösen mit Kara Klaus Becker 2015

79 DatentypenEin Datentyp beschreibt eine Menge von Datenobjekten, die alle die gleiche Struktur haben und mit denen die gleichen Operationen ausgeführt werden können.

abstand = abstand + 1

Wahrheitswert

Rechnen mit Zahlen

gefunden = Falseabstand = 0while not gefunden: kara.move() abstand = abstand + 1 gefunden = kara.treeLeft() and kara.treeRight() while abstand > 0: kara.turnLeft() kara.turnLeft() kara.turnLeft() kara.turnLeft()

Zahl

gefunden = kara.treeLeft() and kara.treeRight()

logische Verknüpfung mit Wahrheitswerten

Zählvariable boolesche V.

Page 80: Algorithmisches Problemlösen mit Kara Klaus Becker 2015

80 Teil 8

Miniprojekt - Kara lernt rechnen

Page 81: Algorithmisches Problemlösen mit Kara Klaus Becker 2015

81 RechenproblemeProblem: Kara soll Rechenaufgaben mit Kleeblättern ausführen.

Einfach: Addition

Nicht schwer: Subtraktion, Vergleich

Eher schwer: Multiplikation, Division

Herausforderung: Potenzierung, Wurzelziehen, ...

Page 82: Algorithmisches Problemlösen mit Kara Klaus Becker 2015

82 Auftrag Kara soll rechnen lernen. Entwickele Algorithmen und entsprechende Programme für verschiedene Rechenoperationen.

* Benutze keine Variablen. Kara soll nur mit Kleeblättern operieren. * Wähle mindestens zwei Rechenoperationen aus, für die du die Algorithmen und Programme entwickelst. Besonders einfach ist die Addition. Nicht sonderlich schwierig ist die Subtraktion. Hier muss man sich nur überlegen, was man bei Aufgaben wie 3-5 macht. Schwieriger sind die Multiplikation und Division. Wer sich weit vorwagen möchte, kann auch das Potenzieren oder Wurzelziehen bearbeiten. * Alle wesentlichen Arbeitsergebnisse sollen dokumentiert werden. Was alles hier dazu gehört, wird auf der folgenden Folie gezeigt.

Page 83: Algorithmisches Problemlösen mit Kara Klaus Becker 2015

83

Arbeitsschritte und ihre Dokumentation

ProblemAuftrag

Ermittlung der AnforderungenPflichtenheft

(Prototyp)Entwicklung eines Modells

Algorithmus

Implementierung des Modells

LauffähigesProgramm

Testen des Programms

AuftraggerechtesProdukt

Informelle Problembeschreibung: Kara soll Rechenaufgaben mit Kleeblättern ausführen.

Präzise ProblemspezifikationBeschreibung der Anforderungen an das Programm

Algorithmus in Struktogrammform / ...

Strukturiertes und kommentiertes Programm

Testprotokoll über die untersuchten Testfälle