Erkundung – Kara lernt neue Befehle
Das Problem: Ein Runde um den Platz laufen
Kara soll eine Runde auf einem rechteckigen, mit Baumstämmen markierten Platz laufen. Kara soll dabei den zurückgelegten Weg mit Blättern auslegen.
Ein erster Lösungsversuch
Das Problem lässt sich mit dem folgenden naheliegenden Algorithmus lösen.
Kleeblattreihe bis Baum legen um Baum laufen Kleeblattreihe bis Baum legen um Baum laufen Kleeblattreihe bis Baum legen um Baum laufen Kleeblattreihe bis Baum legen um Baum laufen
Eine Implementierung ist hier auch schnell erstellt:
# Kleeblattreihe bis Baum legen
while not kara.treeFront():
kara.putLeaf()
kara.move()
# um Baum laufen
kara.turnRight()
kara.move()
kara.turnLeft()
kara.move()
kara.turnRight()
# Kleeblattreihe bis Baum legen
...
Aufgabe 1
(a) Vervollständige die Implementierung.
(b) Teste das Programm. Möglicherweise hat sich ein kleiner Fehler eingeschlichen: Ein Befehl fehlt noch. Korrigiere den Fehler und teste erneut.
(c) Beurteile das Programm. Was ist hier ungünstig?
Eine Programmeinheit als neuer Befehl
Wenn Programmteile immer wieder beim Problemlösen benötigt werden, ist es günstig, wenn man sie als eigenständige Programmeinheiten konzipiert. Das folgende, noch unfertige Programm zeigt, wie das geht.
# Unterprogramme
def kleeblattreiheBisBaumLegen():
while not kara.treeFront():
kara.putLeaf()
kara.move()
kara.putLeaf()
...
# Hauptprogramm
kleeblattreiheBisBaumLegen()
umBaumLaufen()
...
Aufgabe 2
(a) Vervollständige auch hier die Implementierung und teste das Programm.
(b) Kara lernt hier neue Befehle. Was ist an dieser Vorgehensweise günstig? Vergleiche auch mit dem Programm oben.
(c) Lasse das Programm langsam ablaufen. An welchen Stellen wird die while
-Schleife aus dem Unterpgrogramm aufgerufen? Wie oft geschieht das?