Download - Algorithmisches Problemlösen mit Kara
![Page 1: Algorithmisches Problemlösen mit Kara](https://reader033.vdokument.com/reader033/viewer/2022061612/5681510d550346895dbf2acb/html5/thumbnails/1.jpg)
Algorithmisches Problemlösenmit Kara
Klaus Becker2012
![Page 2: Algorithmisches Problemlösen mit Kara](https://reader033.vdokument.com/reader033/viewer/2022061612/5681510d550346895dbf2acb/html5/thumbnails/2.jpg)
2
Algorithmisches Problemlösen / Kara
![Page 3: Algorithmisches Problemlösen mit Kara](https://reader033.vdokument.com/reader033/viewer/2022061612/5681510d550346895dbf2acb/html5/thumbnails/3.jpg)
3 Teil 1
Die Kara-Welt
![Page 4: Algorithmisches Problemlösen mit Kara](https://reader033.vdokument.com/reader033/viewer/2022061612/5681510d550346895dbf2acb/html5/thumbnails/4.jpg)
4 Kara and ihre/seine WeltKara 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).
Kara kann bestimmte Befehle ausführen. Kara kann die Umgebung wahrnehmen.
![Page 5: Algorithmisches Problemlösen mit Kara](https://reader033.vdokument.com/reader033/viewer/2022061612/5681510d550346895dbf2acb/html5/thumbnails/5.jpg)
5 Steuerung von KaraAufgabe: 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-Weltfenster, um diese Aufgabe zu erledigen. Wenn die Arbeit getan ist, soll die Karawelt so aussehen:
Karawelt - nachher
Karawelt - vorher
![Page 6: Algorithmisches Problemlösen mit Kara](https://reader033.vdokument.com/reader033/viewer/2022061612/5681510d550346895dbf2acb/html5/thumbnails/6.jpg)
6 Steuerung von KaraAufgabe: Stelle nochmal die Ausgangssituation her. Klicke jetzt auf die Schaltfläche [Programmieren]. Es öffnet sich ein neues Fenster, in das man Anweisungen zur Steuerung von Kara schreiben kann. In der folgenden Abbildung sind erste Anweisungen zur Lösung der oben gestellten Aufgabe bereits eingetragen.
WeltfensterProgrammfenster
![Page 7: Algorithmisches Problemlösen mit Kara](https://reader033.vdokument.com/reader033/viewer/2022061612/5681510d550346895dbf2acb/html5/thumbnails/7.jpg)
7 Anweisung
Operation Bedeutungmove() einen Schritt weiter gehenturnLeft() sich um 90° nach links drehen turnRight() sich um 90° nach rechts drehenputLeaf() Kleeblatt auf das aktuelle Feld legenremoveLeaf() Kleeblatt vom aktuellen Feld entfernen
Die Steuerung von Kara erfolgt mit Hilfe von Anweisungen. Anweisungen, die mit Hilfe der vom Ausführsystem direkt zur Verfügung gestellten Grundoperationen gebildet werden, nennt man auch elementare Anweisungen.
elementare Anweisungkara.move()
![Page 8: Algorithmisches Problemlösen mit Kara](https://reader033.vdokument.com/reader033/viewer/2022061612/5681510d550346895dbf2acb/html5/thumbnails/8.jpg)
8 AnweisungssequenzenEine 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()Anweisungssequenz
![Page 9: Algorithmisches Problemlösen mit Kara](https://reader033.vdokument.com/reader033/viewer/2022061612/5681510d550346895dbf2acb/html5/thumbnails/9.jpg)
9 Teil 2
Fallunterscheidungen
![Page 10: Algorithmisches Problemlösen mit Kara](https://reader033.vdokument.com/reader033/viewer/2022061612/5681510d550346895dbf2acb/html5/thumbnails/10.jpg)
10
Problem - Blatt aus dem Bau tragen
Problem: Kara steht vor ihrem/seinem Bau und möchte das Kleeblatt, das sich irgendwo im Bau befindet, nach draußen befördern.
Karawelt - nachher
Karawelt - vorherFall 1
Karawelt - vorherFall 2
Karawelt - vorherFall 3
![Page 11: Algorithmisches Problemlösen mit Kara](https://reader033.vdokument.com/reader033/viewer/2022061612/5681510d550346895dbf2acb/html5/thumbnails/11.jpg)
11
Problem - Blatt aus dem Bau tragen
Aufgabe: Ergänze jeweils die fehlenden Teile. Achte auf die Einrückungen, um die verschiedenen Fälle deutlich zu unterscheiden.
Lösungsverfahren
Schritt weitergehenWENN auf einem Kleeblatt: Kleeblatt aufheben rechts drehen rechts drehen Schritt weitergehenSONST: Schritt weitergehen WENN auf einem Kleeblatt: ... SONST: ...Kleeblatt hinlegen
kara.move()if kara.onLeaf(): kara.removeLeaf() ...else: kara.move() if kara.onLeaf(): kara.removeLeaf() ... else: kara.move() ...kara.putLeaf()
Python-Programm
![Page 12: Algorithmisches Problemlösen mit Kara](https://reader033.vdokument.com/reader033/viewer/2022061612/5681510d550346895dbf2acb/html5/thumbnails/12.jpg)
12
Problem - Blatt aus dem Bau tragen
Aufgabe: Leistet das folgende Lösungsverfahren auch das Gewünschte? Überprüfe das zunächst, indem du es selbst (z.B. auf dem Papier) durchspielst. Übersetze das Lösungsverfahren anschließend in die Programmiersprache Python und teste das entsprechende Python-Programm.
Lösungsverfahren
Schritt weitergehenWENN auf einem Kleeblatt: Kleeblatt aufheben rechts drehen rechts drehenSONST: Schritt weitergehen WENN auf einem Kleeblatt: Kleeblatt aufheben rechts drehen rechts drehen SONST Schritt weitergehen Kleeblatt aufheben rechts drehen rechts drehen Schritt weitergehen Schritt weitergehenSchritt weitergehenKleeblatt hinlegen
![Page 13: Algorithmisches Problemlösen mit Kara](https://reader033.vdokument.com/reader033/viewer/2022061612/5681510d550346895dbf2acb/html5/thumbnails/13.jpg)
13 BedingungDie Steuerung komplexerer Abläufe (wie Fallunterscheidungen und Wiederholungen) erfolgt mit Hilfe von Bedingungen. Die einfachsten Bedingungen, die mit Hilfe der Grandoperationen des Ausführsystems gebildet werden, nennt man auch elementare Bedingungen. Komplexere Bedingungen lassen sich mit Hilfe der logischen Operatoren not, and and or aufbauen.
elementare Bedingung kara.treeFront()
Operation BedeutungtreeFront() Baum vorne?treeLeft() Baum links?treeRight() Baum rechts?mushroomFront() vor einem Pilz?onLeaf() auf einem Kleeblatt?
komplexe Bedingung mit logischem Operator
not kara.treeFront()
True / False
True / False
![Page 14: Algorithmisches Problemlösen mit Kara](https://reader033.vdokument.com/reader033/viewer/2022061612/5681510d550346895dbf2acb/html5/thumbnails/14.jpg)
14 FallunterscheidungEine Fallunterscheidung dient dazu, alternative Abläufe zu beschreiben.
zweiseitige Fallunterscheidun
g
einseitige Fallunterscheidun
g
WENN [Bedingung]: [Anweisungssequenz]SONST: [Anweisungssequenz]
WENN [Bedingung]: [Anweisungssequenz]
![Page 15: Algorithmisches Problemlösen mit Kara](https://reader033.vdokument.com/reader033/viewer/2022061612/5681510d550346895dbf2acb/html5/thumbnails/15.jpg)
15 FallunterscheidungEine Fallunterscheidung dient dazu, alternative Abläufe zu beschreiben.
if [Bedingung]: [Anweisungssequenz]else: [Anweisungssequenz]
zweiseitige Fallunterscheidun
g
einseitige Fallunterscheidun
g
if [Bedingung]: [Anweisungssequenz]
Doppelpunkt
if kara.treeFront(): kara.turnLeft()else: kara.move()
if kara.onLeaf(): kara.removeLeaf()kara.move()
Einrückung
Schlüsselwort
WENN [Bedingung]: [Anweisungssequenz]SONST: [Anweisungssequenz]
WENN [Bedingung]: [Anweisungssequenz]
![Page 16: Algorithmisches Problemlösen mit Kara](https://reader033.vdokument.com/reader033/viewer/2022061612/5681510d550346895dbf2acb/html5/thumbnails/16.jpg)
16 ÜbungenAufgabe:
(a) Kara weiß nicht, ob und wie viele Kleeblätter sich in ihrem/seinem Bau befinden. Kara möchte sie alle einsammeln.
(b) Kara möchte den Bau mit Kleeblättern auslegen. Es können sich aber schon Kleeblätter in einigen Feldern des Baus befinden.
![Page 17: Algorithmisches Problemlösen mit Kara](https://reader033.vdokument.com/reader033/viewer/2022061612/5681510d550346895dbf2acb/html5/thumbnails/17.jpg)
17 Teil 3
Wiederholungen
![Page 18: Algorithmisches Problemlösen mit Kara](https://reader033.vdokument.com/reader033/viewer/2022061612/5681510d550346895dbf2acb/html5/thumbnails/18.jpg)
18
Problem - um eine Baumreihe laufen
Problem: Kara steht vor einer Baumreihe, weiß jedoch not, wie lang sie ist. Kara möchte um die Baumreihe laufen und den Weg mit Blättern auslegen.
Karawelt - nachher
Karawelt - vorher
![Page 19: Algorithmisches Problemlösen mit Kara](https://reader033.vdokument.com/reader033/viewer/2022061612/5681510d550346895dbf2acb/html5/thumbnails/19.jpg)
19
Problem - um eine Baumreihe laufen
Aufgabe: Kannst du die Lösung vervollständigen. Welche Aktionen müssen wiederholt durchgeführt werden? Welche Aktionen müssen vor der SOLANGE-Anweisung erfolgen, welche danach? Versuche, das Lösungsverfahren in Python zu beschreiben. Beachte, dass man die zu wiederholenden Anweisungen (um 4 Einheiten) einrücken muss. Teste das Programm anschließend mit unterschiedlich langen Baumreihen.
...SOLANGE ein Baumstumpf rechts steht: ......
...while kara.treeRight(): ......
Lösungsverfahren Python-Programm
![Page 20: Algorithmisches Problemlösen mit Kara](https://reader033.vdokument.com/reader033/viewer/2022061612/5681510d550346895dbf2acb/html5/thumbnails/20.jpg)
20
Problem - um eine Baumreihe laufen
Aufgabe: Kara soll jetzt einmal ganz um eine Baumreihe laufen und den Weg mit Kleeblättern auslegen.
![Page 21: Algorithmisches Problemlösen mit Kara](https://reader033.vdokument.com/reader033/viewer/2022061612/5681510d550346895dbf2acb/html5/thumbnails/21.jpg)
21 WiederholungEine Wiederholung dient dazu, wiederholte Abläufe zu beschreiben.
SOLANGE [Bedingung]: [Anweisungssequenz]
Wiederholung mit
Eintrittsbedingung
Bei der Ausführung einer SOLANGE-Anweisung wird vor jedem Wiederholungsdurchgang überprüft, ob die Bedingung erfüllt ist. Ist das der Fall, so werden die Anweisungen der Anweisungssequenz ausgeführt und der nächste Wiederholungsdurchgang kann beginnen. Andernfalls wird die Ausführung der Wiederholungsanweisung beendet.
Flussdiagramm / Programmablaufpla
n
![Page 22: Algorithmisches Problemlösen mit Kara](https://reader033.vdokument.com/reader033/viewer/2022061612/5681510d550346895dbf2acb/html5/thumbnails/22.jpg)
22 WiederholungEine Wiederholung dient dazu, wiederholte Abläufe zu beschreiben.
SOLANGE [Bedingung]: [Anweisungssequenz]
while kara.treeRight(): kara.putLeaf() kara.move()
Wiederholung mit
Eintrittsbedingung
while [Bedingung]: [Anweisungssequenz]
Doppelpunkt
Einrückung
Schlüsselwort
Python-Syntax
![Page 23: Algorithmisches Problemlösen mit Kara](https://reader033.vdokument.com/reader033/viewer/2022061612/5681510d550346895dbf2acb/html5/thumbnails/23.jpg)
23
Ist die Bedingung vor jedem Schleifendurchlauf erfüllt, so wird die Schleife (theoretisch) unendlich oft durchlaufen. Man spricht dann auch von einer Endlosschleife. In der Praxis muss man in einem solchen Fall die Ausführung abbrechen.
Schleifendurchläufe
Ist die Bedingung gleich zu Beginn nicht erfüllt, so wird die Schleife überhaupt nicht durchlaufen. Die Wiederholungsanweisung bewirkt dann gar nichts.
while not kara.treeFront(): kara.putLeaf() kara.move()
kein Schleifendurchlau
f
Endlosschleife: unendlich viele
Schleifendurchläufe
![Page 24: Algorithmisches Problemlösen mit Kara](https://reader033.vdokument.com/reader033/viewer/2022061612/5681510d550346895dbf2acb/html5/thumbnails/24.jpg)
24 ÜbungenAufgabe:(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.
while not kara.treeFront(): kara.move()
Aufgabe: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 25: Algorithmisches Problemlösen mit Kara](https://reader033.vdokument.com/reader033/viewer/2022061612/5681510d550346895dbf2acb/html5/thumbnails/25.jpg)
25 Ü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 26: Algorithmisches Problemlösen mit Kara](https://reader033.vdokument.com/reader033/viewer/2022061612/5681510d550346895dbf2acb/html5/thumbnails/26.jpg)
26 Ü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 27: Algorithmisches Problemlösen mit Kara](https://reader033.vdokument.com/reader033/viewer/2022061612/5681510d550346895dbf2acb/html5/thumbnails/27.jpg)
27 Teil 4
Algorithmen
![Page 28: Algorithmisches Problemlösen mit Kara](https://reader033.vdokument.com/reader033/viewer/2022061612/5681510d550346895dbf2acb/html5/thumbnails/28.jpg)
28 Problem - Kleeblatt suchenProblem: Kara ist auf der Suche nach einem Kleeblatt. Kara soll hierzu geradeaus weiterlaufen, bis sie/er ein Kleeblatt gefanden hat. Aber, es befinden sich manchmal Baumstümpfe im Weg. Kara muss diese Hindernisse dann umlaufen.
Karawelt - nachher
Karawelt - vorher
Aufgabe: Entwickle zunächst ein Verfahren zur Lösung des Problems. Beschreibe das Verfahren in Worten. Entwickle dann erst das zugehörige Programm.
![Page 29: Algorithmisches Problemlösen mit Kara](https://reader033.vdokument.com/reader033/viewer/2022061612/5681510d550346895dbf2acb/html5/thumbnails/29.jpg)
29 ProblembeschreibungDie zu bearbeitenden Probleme sind oft allgemein in dem Sinne, dass viele konkrete Problemsituationen möglich sind. Im dargestellten Beispiel sind viele verschiedene Anordnungen von Baumreihen und von zu suchendem Kleeblatt denkbar. Häufig deuten wir den allgemeinen Charakter eines Problems dadurch an, dass wir mehrere unterschiedliche Problemsituationen wiedergeben.
Karawelt - nachher
Karawelt - vorher
Vor jeder Problembearbeitung sollte das zu lösende Problem möglichst klar beschrieben werden. 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 and ihre/seine Welt) vor und nach der Problembearbeitung einnehmen soll.
![Page 30: Algorithmisches Problemlösen mit Kara](https://reader033.vdokument.com/reader033/viewer/2022061612/5681510d550346895dbf2acb/html5/thumbnails/30.jpg)
30 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
Algorithmus
Karawelt - nachher
Karawelt - vorher
![Page 31: Algorithmisches Problemlösen mit Kara](https://reader033.vdokument.com/reader033/viewer/2022061612/5681510d550346895dbf2acb/html5/thumbnails/31.jpg)
31 ProgrammEin Programm ist ein Algorithmus zur Lösung eines Problems, der in einer vorgegebenen Programmiersprache verfasst ist.
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
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()
Algorithmus
Programm
![Page 32: Algorithmisches Problemlösen mit Kara](https://reader033.vdokument.com/reader033/viewer/2022061612/5681510d550346895dbf2acb/html5/thumbnails/32.jpg)
32 Bausteine von AlgorithmenDieser Algorithmus ist aus zahlreichen elementaren Anweisungen, einer Entscheidungsanweisung sowie zwei Wiederholungsanweisungen aufgebaut.Besonders deutlich werden die Bausteine, wenn man Algorithmen mit einer Bildsprache - den sogenannten Struktogrammen - beschreibt.
Algorithmus
Struktogramme
![Page 33: Algorithmisches Problemlösen mit Kara](https://reader033.vdokument.com/reader033/viewer/2022061612/5681510d550346895dbf2acb/html5/thumbnails/33.jpg)
33 Algorithmisches ProblemlösenProblem
beschreiben
Ideensuchen and informell beschreiben
Algorithmus präzisieren (z.B. mit Struktogrammen)
Algorithmus in ein Programm übersetzen
Programmtesten
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()
Kleeblatt suchen: SOLANGE man nicht auf einem Kleeblatt steht, macht man Folgendes: WENN man vor einem Baum steht, dann muss man den Baum / die Baumreihe umlaufen SONST kann man einen Schritt weitergehen. Zuletzt muss man das Kleeblatt aufheben
![Page 34: Algorithmisches Problemlösen mit Kara](https://reader033.vdokument.com/reader033/viewer/2022061612/5681510d550346895dbf2acb/html5/thumbnails/34.jpg)
34 ÜbungenAufgabe 1: Einen Algorithmus in Struktogrammform beschreiben (einfach)
Kara soll einmal um einen Baum laufen. Beachte, dass Kara danach in derselben Position am Baum steht.
Aufgabe 2: Einen Algorithmus in Struktogrammform beschreiben (schwierig)
Kara merkt sich die Uhrzeit mit einem Pilz, der schrittweise um einen Baum geschoben wird. Kara soll hier den Pilz - egal, wo er sich zunächst befindet - um einen Schritt weiterverschieben.
![Page 35: Algorithmisches Problemlösen mit Kara](https://reader033.vdokument.com/reader033/viewer/2022061612/5681510d550346895dbf2acb/html5/thumbnails/35.jpg)
35 Jeder macht FehlerProblem
beschreiben
Ideensuchen and informell beschreiben
Algorithmus präzisieren (z.B. mit Struktogrammen)
Algorithmus in ein Programm übersetzen
Programmtesten
Fehler bei der IdeensucheHäufig kommt es bereits bei der Ideensuche zu Fehlern. Man glaubt, die entscheidende Idee gefanden zu haben, hat aber etwas Wichtiges übersehen.
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
![Page 36: Algorithmisches Problemlösen mit Kara](https://reader033.vdokument.com/reader033/viewer/2022061612/5681510d550346895dbf2acb/html5/thumbnails/36.jpg)
36 Jeder macht FehlerProblem
beschreiben
Ideensuchen and informell beschreiben
Algorithmus präzisieren (z.B. mit Struktogrammen)
Algorithmus in ein Programm übersetzen
Programmtesten
Fehler bei der AblaufmodellierungBei der Ablaufmodellierung kann es vorkommen, dass man die Bausteine zur Beschreibung des Ablaufs nicht korrekt zusammenzusetzt.
![Page 37: Algorithmisches Problemlösen mit Kara](https://reader033.vdokument.com/reader033/viewer/2022061612/5681510d550346895dbf2acb/html5/thumbnails/37.jpg)
37 Jeder macht FehlerProblem
beschreiben
Ideensuchen and informell beschreiben
Algorithmus präzisieren (z.B. mit Struktogrammen)
Algorithmus in ein Programm übersetzen
Programmtesten
Fehler bei der Implementierung Bei der Übersetzung eines korrekten Algorithmus in ein lauffähiges Programm kann es zu weiteren Fehlern kommen. So kann man z.B. den Doppelpunkt in der if-Anweisung vergessen, oder eine Anweisung nicht richtig einrücken.
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 38: Algorithmisches Problemlösen mit Kara](https://reader033.vdokument.com/reader033/viewer/2022061612/5681510d550346895dbf2acb/html5/thumbnails/38.jpg)
38 ÜbungenAufgabe 3: Fehler suchen
Kara soll die Kleeblätter, die als Recht-eck ausgelegt sind, alle einsammeln. T. hat das folgende Programm zur Lösung des Problems entwickelt.
(a) Teste erst einmal das Programm. Es erscheint direkt eine Fehlermeldung. Welchen syntaktischen Fehler hat T. gemacht? (b) Korrigiere den Fehler und teste erneut das Programm. Es leistet noch nicht das Gewünschte. Irgend etwas stimmt mit den Einrückungen noch nicht. Kannst du diesen Fehler auch noch beheben? (c) Wenn du den Einrückfehler verbessert hast, dann leistet das Programm immer noch nicht das Gewünschte. Der Algorithmus, der dem Programm zu Grunde liegt, ist noch nicht in Ordnung. Kannst du das auch noch korrigieren? (d) Wenn du ein korrekt arbeitendes Programm hast, dann stelle den zu Grunde liegenden Algorithmus in Struktogrammform dar.
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()
![Page 39: Algorithmisches Problemlösen mit Kara](https://reader033.vdokument.com/reader033/viewer/2022061612/5681510d550346895dbf2acb/html5/thumbnails/39.jpg)
39 Teil 5
Logische Operatoren
![Page 40: Algorithmisches Problemlösen mit Kara](https://reader033.vdokument.com/reader033/viewer/2022061612/5681510d550346895dbf2acb/html5/thumbnails/40.jpg)
40 Problem - Kleeblatt suchenProblem: Kara befindet sich in einem Baumlabyrinth und möchte zum Ausgang laufen. Hier liegt (zur Belohnung) ein Kleeblatt. Wie kann man systematisch aus einem Labyrinth herauslaufen? Die folgenden Aufgaben weisen dir einen Weg zur Lösung des Labyrinth-Problems. Du kannst natürlich auch versuchen, das Problem selbstständig zu lösen.
Karawelt - nachher
Karawelt - vorher
![Page 41: Algorithmisches Problemlösen mit Kara](https://reader033.vdokument.com/reader033/viewer/2022061612/5681510d550346895dbf2acb/html5/thumbnails/41.jpg)
41 Linke-Hand-StrategieAufgabe: Kennst du die Linke-Hand-Strategie (Rechte-Hand-Strategie): Man läuft so weiter, dass die linke (rechte) Hand immer die Labyrinthbegrenzung berührt.(a) Probiere die Linke-Hand-Strategie selbst einmal aus.(b) Welchen Weg würde Kara in den drei oben gezeigten Labyrinthen laufen, wenn sie/er die Linke-Hand-Strategie systematisch anwendet?
Karawelt - nachher
Karawelt - vorher
Aufgabe: Wie soll Kara sich nach der Linken-Hand-Strategie verhalten, wenn eine der folgenden Situationen vorliegt:Situation 1: links ein kein BaumSituation 2: links ist ein Baum und Kara steht nicht vor einem BaumSituation 3: links ist ein Baum und Kara steht vor einem Baum
![Page 42: Algorithmisches Problemlösen mit Kara](https://reader033.vdokument.com/reader033/viewer/2022061612/5681510d550346895dbf2acb/html5/thumbnails/42.jpg)
42 VerhaltensbeschreibungAufgabe: Wir beschreiben den Algorithmus zur Linken-Hand-Strategie mit einem Struktogramm. Gehe nach den Situationsbeschreibungen oben vor und ergänze die fehlenden Bedingungen. Übersetze den Algorithmus in die Programmiersprache Python. Hier auch eine Auswahl an Vorschlägen zur Übersetzung der Bedingungen. Die richtigen Übersetzungen sind auch dabei.
kara.onLeaf()not kara.onLeaf()not kara.treeLeft()kara.treeLeft()not kara.treeLeft() and not kara.treeFront()kara.treeLeft() and kara.treeFront()kara.treeLeft() and not kara.treeFront()kara.treeLeft() or kara.treeFront()
![Page 43: Algorithmisches Problemlösen mit Kara](https://reader033.vdokument.com/reader033/viewer/2022061612/5681510d550346895dbf2acb/html5/thumbnails/43.jpg)
43
Wahrheitswerte / logische Operatoren
a b a and bFalse False FalseFalse True FalseTrue False FalseTrue True True
a b a or bFalse False FalseFalse True TrueTrue False TrueTrue True True
a not aFalse TrueTrue False
Konjunktion
DisjunktionNegation und oder
nicht
Zur Beschreibung von Werten von Bedingungen benutzt man die Wahrheitswerte wahr and falsch bzw. True and False. Logische Operatoren werden benötigt, um Bedingungen zusammenzusetzen.
SOLANGE nicht (links ein Baum und rechts ein Baum): Schritt weitergehen
![Page 44: Algorithmisches Problemlösen mit Kara](https://reader033.vdokument.com/reader033/viewer/2022061612/5681510d550346895dbf2acb/html5/thumbnails/44.jpg)
44 ÜbungenAufgabe:
Kara befindet sich irgendwo in ihrem/seinem rechteckigen Bau. Kara will zum Ausgang des Baus laufen.
(a) Welche Bedingung ist erfüllt, wenn Kara im Ausgang des Baus steht?(b) Wie kann Kara diesem Ausgang finden? Tipp: Erst einmal geradeaus laufen, bis ..., dann evtl. mit der Linken-Hand-Strategie den Ausgang suchen.(c) Entwickle eine Lösung in Struktogrammform und übersetze sie dann in die Programmiersprache Python. Teste das Programm mit verschiedenen Ausgangssituationen..
![Page 45: Algorithmisches Problemlösen mit Kara](https://reader033.vdokument.com/reader033/viewer/2022061612/5681510d550346895dbf2acb/html5/thumbnails/45.jpg)
45 Teil 6
Problemzerlegung
![Page 46: Algorithmisches Problemlösen mit Kara](https://reader033.vdokument.com/reader033/viewer/2022061612/5681510d550346895dbf2acb/html5/thumbnails/46.jpg)
46 Problem - Fußballfeld auslegenProblem: Kara will ein Fußballfeld mit Kleeblättern auslegen. Die Eckpfosten stehen schon.
Karawelt - nachher
Karawelt - vorher
Das Problem ist recht komplex. In solch einer Situation ist es meist günstig, das Problem in geeignete Teilprobleme zu zerlegen.
![Page 47: Algorithmisches Problemlösen mit Kara](https://reader033.vdokument.com/reader033/viewer/2022061612/5681510d550346895dbf2acb/html5/thumbnails/47.jpg)
47
Teilprobleme - Fußballfeld auslegen
Aufgabe:Welche weiteren Teilprobleme kann man festlegen, wenn das Innere des Spielfelds mit Kleeblättern ausgelegt werden soll?
Teilproblem: "zur Ausgangsposition laufen"
Teilproblem: "Kleeblattreihe bis zum nächsten Baum legen"
Teilproblem: "um einen Pfosten laufen"
![Page 48: Algorithmisches Problemlösen mit Kara](https://reader033.vdokument.com/reader033/viewer/2022061612/5681510d550346895dbf2acb/html5/thumbnails/48.jpg)
48 Teillösungen zusammensetzen
Algorithmus FussballfeldAuslegen:zur Ausgangsposition laufenKleeblattreihe bis zum nächsten Baum legenum einen Pfosten laufenKleeblattreihe bis zum nächsten Baum legenum einen Pfosten laufenKleeblattreihe bis zum nächsten Baum legenum einen Pfosten laufenKleeblattreihe bis zum nächsten Baum legenum einen Pfosten laufen...
Aufgabe:(a) Wo befindet sich Kara nach der Ausführung des gezeigten Algorithmus?(a) Wie kann man ihn fortsetzen, so dass auch das Spielfeldinnere mit Kleeblättern ausgelegt wird?
![Page 49: Algorithmisches Problemlösen mit Kara](https://reader033.vdokument.com/reader033/viewer/2022061612/5681510d550346895dbf2acb/html5/thumbnails/49.jpg)
49 Teillösungen zusammensetzen# Unterprogramme
def zurAusgangpositionLaufen(): kara.move() kara.turnRight() kara.move() kara.turnLeft()
def kleeblattreiheBisBaumLegen(): while not kara.treeFront(): kara.putLeaf() kara.move() kara.putLeaf()
def umPfostenLaufen(): kara.turnRight() kara.move() kara.turnLeft() kara.move() kara.turnRight()
...
...
# Hauptprogramm
zurAusgangpositionLaufen()kleeblattreiheBisBaumLegen()umPfostenLaufen()kleeblattreiheBisBaumLegen()umPfostenLaufen()kleeblattreiheBisBaumLegen()umPfostenLaufen()kleeblattreiheBisBaumLegen()umPfostenLaufen()
Aufgabe:(a) Schaue dir das Programm zunächst genau an. Kannst du den Aufbau erklären? Teste anschließend das Programm.(b) Versuche, das Programm um weitere Unterprogramme so zu ergänzen, dass auch das Spielfeldinnere mit geeigneten neuen Befehlen ausgelegt werden kann.
![Page 50: Algorithmisches Problemlösen mit Kara](https://reader033.vdokument.com/reader033/viewer/2022061612/5681510d550346895dbf2acb/html5/thumbnails/50.jpg)
50 Teile and herrscheTeile and 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.
Algorithmus FussballfeldAuslegen:zur Ausgangsposition laufenKleeblattreihe bis zum nächsten Baum legenum einen Pfosten laufenKleeblattreihe bis zum nächsten Baum legenum einen Pfosten laufenKleeblattreihe bis zum nächsten Baum legenum einen Pfosten laufenKleeblattreihe bis zum nächsten Baum legenum einen Pfosten laufen...
![Page 51: Algorithmisches Problemlösen mit Kara](https://reader033.vdokument.com/reader033/viewer/2022061612/5681510d550346895dbf2acb/html5/thumbnails/51.jpg)
51 UnterprogrammEin Unterprogramm ist eine eigenständige Programmeinheit zur Lösung eines Teilproblems.
# 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()
...kleeblattreiheBisBaumLegen()...
Unterprogrammdeklaration
Unterprogrammaufruf
Vorteile von Unterprogrammen:Unterprogramme tragen dazu bei, Programme übersichtlich zu gestaltenUnterprogramme dienen dazu, Code-Duplizierungen zu vermeiden
![Page 52: Algorithmisches Problemlösen mit Kara](https://reader033.vdokument.com/reader033/viewer/2022061612/5681510d550346895dbf2acb/html5/thumbnails/52.jpg)
52 ÜbungenAufgabe:Was leistet dieses Unterprogramm? Teste sein Verhalten. Ändere anschließende den Unterprogrammnamen so, dass er das Verhalten des Unterprogramms besser wiedergibt.
def p(): if kara.treeFront(): kara.turnLeft() kara.move() kara.turnRight() kara.move() kara.move() kara.turnRight() kara.move() kara.turnLeft() else: kara.move()
Aufgabe:(a) Erstelle und teste ein Unterprogramm umdrehen, das Kara um 180° dreht.(b) Innerhalb von Unterprogrammdeklarationen kann man bereits deklarierte Unterprogramme aufrufen. Probiere das einmal aus. (c) Erstelle ein Unterprogramm, das Kara einen Schritt zurückgehen lässt.
# Unterprogrammedef umdrehen(): ...
def drehen(): umdrehen() umdrehen()
# Hauptprogrammdrehen()
![Page 53: Algorithmisches Problemlösen mit Kara](https://reader033.vdokument.com/reader033/viewer/2022061612/5681510d550346895dbf2acb/html5/thumbnails/53.jpg)
53 ÜbungenAufgabe:Kara soll um einen Baum herum und wieder zurück zur Ausgangsposition laufen. Zerlege das Problem in Teilprobleme. Entwickle zur Lösung der Teilprobleme passende Unterprogramme und mit diesen eine Lösung des Gesamtproblems.
![Page 54: Algorithmisches Problemlösen mit Kara](https://reader033.vdokument.com/reader033/viewer/2022061612/5681510d550346895dbf2acb/html5/thumbnails/54.jpg)
54 ÜbungenAufgabe:Kara soll die Kleeblätter, die sich in ihrem/seinem Bau befinden, alle einsammeln. Zerlege das Problem in Teilprobleme. Entwickle passende Algorithmen und Unterprogramme zur Lösung der Teilprobleme und mit diesen Teillösungen eine Lösung des Gesamtproblems.
![Page 55: Algorithmisches Problemlösen mit Kara](https://reader033.vdokument.com/reader033/viewer/2022061612/5681510d550346895dbf2acb/html5/thumbnails/55.jpg)
55 Teil 7
Algorithmen mit Variablen
![Page 56: Algorithmisches Problemlösen mit Kara](https://reader033.vdokument.com/reader033/viewer/2022061612/5681510d550346895dbf2acb/html5/thumbnails/56.jpg)
56 Problem - Kleeblätter zählenProblem: Kara soll alle Kleeblätter auf dem Weg zu einem Baum einsammeln und sie vor dem Baum der Reihe nach auslegen.
Karawelt - nachher
Karawelt - vorher
setze zaehler auf 0SOLANGE nicht vor einem Baum: WENN auf einem Kleeblatt: erhöhe zaehler um 1 Kleeblatt aufheben einen Schritt weitergehen...
zaehler = 0while not kara.treeFront(): if kara.onLeaf(): zaehler = zaehler + 1 kara.removeLeaf() kara.move()...
Aufgaben:Wie könnte man den Algorithmus zur Lösung des Problems fortsetzen? Versuche auch, das Programm fertigzustellen.Kara soll jetzt alle Blätter auf dem Weg zum Baum einsammeln und anschließend die doppelte Anzahl von Blättern vor dem Baum auslegen.
![Page 57: Algorithmisches Problemlösen mit Kara](https://reader033.vdokument.com/reader033/viewer/2022061612/5681510d550346895dbf2acb/html5/thumbnails/57.jpg)
57 VariablenVariablen dienen in der Informatik dazu, Daten zu verwalten. Eine Variable ist ein Name, der (in der Regel) mit einem Datenwert verknüpft ist.
{zaehler -> 3}
Kurzschreibweise
Variable Wertzaehler 3
Variablenzustand
![Page 58: Algorithmisches Problemlösen mit Kara](https://reader033.vdokument.com/reader033/viewer/2022061612/5681510d550346895dbf2acb/html5/thumbnails/58.jpg)
58 ZuweisungEine Veränderung eines Variablenwerts bzw. des zugehörigen Speicherzelleninhalts kann mit Hilfe einer Zuweisung an die entsprechende Variable erfolgen.
Auswertung einer Zuweisung: Erst wird der Wert des Terms mit Hilfe des aktuellen Variablenzustands ermittelt. Dieser Wert wird dann der Variablen als neuer aktueller Wert zugewiesen.
Aufbau einer Zuweisung: Eine Zuweisung besteht aus einer Variablen (der ein Wert zugewiesen wird) and einem Term (der den zuzuweisenden Wert festlegt).
zaehler = zaehler + 1
Variable Term
Zuweisungszeichen
zaehler = zaehler + 1
Zustand - vorher{zaehler -> 0}
1
{zaehler -> 1} Zustand - nachher
zaehler ->Auswertun
g
![Page 59: Algorithmisches Problemlösen mit Kara](https://reader033.vdokument.com/reader033/viewer/2022061612/5681510d550346895dbf2acb/html5/thumbnails/59.jpg)
59
Bei einer Zählschleife wird vor der Ausführung festgelegt, wie oft die Anweisungen wiederholt werden sollen.
Zählschleife
WIEDERHOLE 10 mal: Schritt weitergehen
zaehler = 0SOLANGE zaehler < 10: Schritt weitergehen zaehler = zaehler + 1
anzahl = ...# Zählvariable initialisierenzaehler = 0SOLANGE zaehler < anzahl: [Anweisung(en)] # Zählvariable aktualisieren zaehler = zaehler + 1
Beispiel
Realisierung mit einer Solange-
Anweisung und einer Zählvariablen
Muster
![Page 60: Algorithmisches Problemlösen mit Kara](https://reader033.vdokument.com/reader033/viewer/2022061612/5681510d550346895dbf2acb/html5/thumbnails/60.jpg)
60
Ein Datentyp beschreibt eine Menge von Datenobjekten, die alle die gleiche Struktur haben und mit denen die gleichen Operationen ausgeführt werden können.
Datentyp
# Unterprogramm
def imEingang(): if kara.treeLeft() and kara.treeRight: ergebnis = True else: ergebnis = False return ergebnis
def drehen(): kara.turnLeft() kara.turnLeft() kara.turnLeft() kara.turnLeft()...
...# Hauptprogramm
abstand = 0while not imEingang(): kara.move() abstand = abstand + 1while abstand > 0: drehen() abstand = abstand - 1
Kara soll zum Eingang des Baus laufen und sich im Eingang genau so oft drehen, wie Schritte zum Erreichen des Baus erforderlich sind.
Wahrheitswert
ganze Zahl
![Page 61: Algorithmisches Problemlösen mit Kara](https://reader033.vdokument.com/reader033/viewer/2022061612/5681510d550346895dbf2acb/html5/thumbnails/61.jpg)
61 ÜbungenAufgabe:Kara steht im Eingang ihres/seines Baus. Kara soll um den Bau laufen und die Stelle mit einem Kleeblatt markieren, die sich gegenüber dem Baueingang befindet.
![Page 62: Algorithmisches Problemlösen mit Kara](https://reader033.vdokument.com/reader033/viewer/2022061612/5681510d550346895dbf2acb/html5/thumbnails/62.jpg)
62 ÜbungenAufgabe:Kara soll ein Spielfeld mit vorgegeben Maßen (z.B. 6x4) mit Hilfe von Kleeblättern abstecken.
![Page 63: Algorithmisches Problemlösen mit Kara](https://reader033.vdokument.com/reader033/viewer/2022061612/5681510d550346895dbf2acb/html5/thumbnails/63.jpg)
63 ÜbungenAufgabe:Kara steht im Eingang ihres/seines Baus und schaut hinein. Kara soll die Ausmaße ihres/seines Baus bestimmen und draußen im Freien den Bau mit Kleeblättern nachlegen.