Dies ist eine alte Version des Dokuments!
Lösungen und Beispiele
Aufgaben A
- Der Agent baut einen Block, dreht sich nach links, baut 2 Blöcke, dreht sich nach links, baut 3 Blöcke… bis 6 Blöcke. Es entsteht eine linksdrehende Spirale. Wenn er aussen angekommen ist, baut er 10 Blöcke gerade aus und baut dann erneut eine Spirale - insgesamt 4 Mal. Erst wenn die Funktion
baueSpirale()aufgerufen wird, beginnt er mit dem Bau, nicht bei der Definition der Funktion. - <Code ausführen>
agent.set_assist(PLACE_ON_MOVE, True) # bauen während er bewegt agent.set_assist(DESTROY_OBSTACLES,True) # Hindernisse autom. zerstören def baueSpirale(richtung): for zahl in range(1,7): # zahl läuft von 1 bis 6 agent.move(FORWARD,zahl) agent.turn(richtung) for i in range(4): # i läuft von 0 bis 3 baueSpirale(LEFT) agent.move(FORWARD,10)
Aufgaben B
- Solange n grösser ist als 1 ruft die Funktion sich selbst auf, mit jeweils einem um 2 verkleinerten Argument. Zunächst wird rec1(10) aufgerufen. Dies zeichnet ein Quadrat der Grösse 10×10, danach teleportiert sich der Agent um 1 nach oben, 1 nach Osten und 1 nach Süden. Danach wird dieselbe Funktion aufgerufen mit dem Argument 8 und es wird ein Quadrat der Grösse 8×8 gezeichnet etc. bis 2×2 und wenn rec(0) aufgerufen wird, bricht das Programm ab. Es entsteht eine Pyramide.
- Die zweite Funktion
rec2ruft sich zweimal selber auf die verwendet nicht doppelt so viel Speicher, sondern exponentiell mehr Speicher. Am besten stellt man sich dies an einem Baumdiagramm vor:rec2(30,4)ruftrec2(29,6)undrec2(31,5)auf und diese beiden rufen jeweils wiederrec2zweimal auf. Dies führt zu einem sehr hohen Speicherverbrauch.