i

Übungen

Aufgabe 1: Ein Unterprogramm analysieren

In dieser Aufgabe wird ein gegebenes Unterprogramm hinsichtlich Funktionalität und Namensgebung analysiert.

Betrachte die folgende Unterprogrammdefinition:

def p():
    if kara.treeFront():
        kara.turnLeft()
        kara.move()
        kara.turnRight()
        kara.move()
        kara.move()
        kara.turnRight()
        kara.move()
        kara.turnLeft()
    else:
        kara.move()

Was leistet dieses Unterprogramm? Teste sein Verhalten. Ändere anschließende den Unterprogrammnamen so, dass er das Verhalten des Unterprogramms besser wiedergibt.

Aufgabe 2: Unterprogramme entwickeln und benutzen

In dieser Aufgabe werden einfache Unterprogramme erstellt und verwendet. Dabei wird auch auf Verschachtelung eingegangen.

(a) Erstelle und teste ein Unterprogramm umdrehen(), das Kara um 180° dreht.

(b) Innerhalb von Unterprogrammdefinitionen kann man bereits definierte Unterprogramme aufrufen.

# Unterprogramme

def umdrehen():
    ...

def drehen():
    umdrehen()
    umdrehen()

# Hauptprogramm

drehen()

Probiere das selbst aus. Man nennt so ein Vorgehen auch „Verschachteltung“. Mache dir klar, wieso.

Eine Verschachtelung kann man sehr gut mit Matroshkas, russischen Puppen, veranschaulichen: Dabei ist in einer äußeren Puppe eine innere Puppe enthalten. In dieser können weitere Puppen enthalten sein.

Bei Unterprogrammen ist das genauso: Im Unterprogramm drehen() (äußere Puppe) ist ein weiteres Unterprogramm umdrehen() (innere Puppe) enthalten. In diesem sind dann weitere Befehle enthalten.

(c) Erstelle ein Unterprogramm, das Kara einen Schritt zurückgehen lässt.

Aufgabe 3: Ins Innere der Spirale

In dieser Aufgabe wird der Ablauf eines Programms mit Unterprogrammen genauer analysiert.

Kara möchte ins Innere der Baumspirale und dort ein Kleeblatt aufheben.

Kara läuft ins Innere ihrer Spirale-

(a) Optional: Schreibe selbst ein Programm für dieses Problem. Es soll für Spiralen unterschiedlicher Größe funktionieren. Der Weg darf immer – wie hier – im Uhrzeigersinn verlaufen.

(b) Blende dir die vorgegebene Lösung ein und vergleiche mit deiner Lösung.

def walkToTree():
    while not kara.treeFront():
        kara.move()

while not kara.onLeaf():
    walkToTree()
    kara.turnRight()
kara.removeLeaf()

Kleine Spirale (c) Zum Verständnis von Unterprogrammen hilft es, den Ablauf des Programms genau zu analyieren. Dafür nutzen wir eine kleinere Kara-Welt.

Im Laufe des Programms passieren die folgenden Dinge. Bringe sie in die richtige Reihenfolge. Du kannst die Zeilen hier verschieben.

  • Es wird überprüft, ob Kara nicht auf einem Blatt steht (Z. 5). Ergebnis: True. Deshalb wird die Schleife ausgeführt.
  • Wir sind in Zeile 6: Das Unterprogramm wird aufgerufen.
  • Wir sind in Zeile 2/3: Kara läuft nun bis zum Baum.
  • Wir sind in Zeile 7: Kara dreht sich nach rechts.
  • Es wird überprüft, ob Kara nicht auf einem Blatt steht (Z. 5). Ergebnis: True. Deshalb wird die Schleife ausgeführt.
  • Wir sind in Zeile 6: Das Unterprogramm wird aufgerufen.
  • Wir sind in Zeile 2/3: Kara läuft nun bis zum Baum.
  • Wir sind in Zeile 7: Kara dreht sich nach rechts.
  • Es wird überprüft, ob Kara nicht auf einem Blatt steht (Z. 5). Ergebnis: True. Deshalb wird die Schleife ausgeführt.
  • Wir sind in Zeile 6: Das Unterprogramm wird aufgerufen.
  • Wir sind in Zeile 2/3: Kara läuft nun bis zum Baum.
  • Wir sind in Zeile 7: Kara dreht sich nach rechts.
  • Es wird überprüft, ob Kara nicht auf einem Blatt steht (Z. 5). Ergebnis: False. Deshalb wird die Schleife nicht mehr ausgeführt.
  • Wir sind in Zeile 8: Das Blatt wird aufgehoben.

Aufgabe 4: Unterprogramme verwenden (offene Aufgabe)

In dieser Aufgabe werden die Erkenntnisse zu Unterprogrammen auf bereits gelöste Probleme übertragen.

Du hast im Laufe des Kapitels bereits viele Probleme mit Kara gelöst. Gehe sie noch einmal durch und schau, bei welchen Problemen bestimmte Dinge immer wieder ausgeführt werden müssen. Vereinfache die jeweiligen Programme dann durch Unterprogramme.

Quellen

Suche

v
6.1.6.4
dev.inf-schule.de/imperative-programmierung/kara/unterprogramme/uebungen
dev.inf-schule.de/6.1.6.4
dev.inf-schule.de/@/page/Sivr9pKqHdIduPcV

Rückmeldung geben