i

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.

Kara läuft um den rechteckigen Platz

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?

Suche

v
6.1.6.1
www.inf-schule.de/imperative-programmierung/kara/unterprogramme/erkundung_unterprogramm
www.inf-schule.de/6.1.6.1
www.inf-schule.de/@/page/TrvAyQ1dpWfZe2h3

Rückmeldung geben