Rekursive Prozeduren 1

Aus ProgrammingWiki
Archivierte Version vom 2009-10-24T13:21:06+00:00. Aktuelle Version

Inhaltsverzeichnis

zur Übungsübersicht

Eine Turtle ist eine Zeichenroboter, den man sich wie eine Schildkröte mit Stift am Bauch vorstellen kann. Eine Turtle lebt auf genau einer Zeichenfläche (canvas).

In den folgenden Beispielen werden Sie auf verschiedenen canvas mit verschiedenen Turtles arbeiten. Um diese anzusprechen, hat jede Fläche und jede Turtle einen eigenen Namen, welcher zur Kommunikation angegeben wird. In der Regel wird die erste Zeichenfläche canvas1 mit turtle1, canvas2 mit turtle2 und so weiter bearbeitet.

Sämtliche Kommandos, die eine Turtle versteht, finden sich in der folgenden Liste. Das Aufrufmuster ist: ([comando] [turtle] [parameter])

Befehlsliste

Turtle Befehle
BefehlBeschreibung
homesetzt die Turtle auf die Mitte der Zeichenfläche
move turtle x ysetzt die Turtle auf den Punkt (x,y) der Zeichenfläche
forward turtle xlässt die Turtle x Schritte nach vorn gehen
backward turtle xlässt die Turtle x Schritte nach hinten gehen
pendown turtlesetzt den stift ab, sodass Turtle-Bewegungen eine Spur hinterlassen (Standard)
penup turtlenimmt den stift hoch, sodass Turtle-Bewegungen keine Spur hinterlassen
penwidth turtle xSetzt die Stärke des Stiftes auf x
pencolor turtle r g bsetzt die Farbe des Stiftes (Rot-Gelb-Grün-Werte im Bereich 0-255)
right turtle xdreht die Turtle um x Grad nach rechts
left turtle xdreht die Turtle um x Grad nach links
hide turtleblendet die Turtle aus
show turtleblendet die Turtle ein
clone turtleclont die Turtle in der Aktuellen Position
panerase turtleDie Turtle löscht die Markierungen, denen sie begegnet (wie ein Radiergummi).
clear canvaslöscht die Zeichenfläche

Beispiel

Setzen sie sich mit der folgenden Beispiel auseinander und testen sie eigenen Funktionen mit dem Turtle

Ihr Browser unterstützt Canvas nicht.

<eval id="4ae2fcc5971d9"> (clear canvas1) (home turtle1)</eval>

(define quad

 (lambda (turtle s)
   (begin  
     (penwidth turtle 10)
     (pencolor turtle 255 0 0)
     (forward turtle s)
     (right turtle 90)
     (forward turtle s)
     (right turtle 90)
     (forward turtle s)
     (right turtle 90)
     (forward turtle s)
     (right turtle 90))))

(quad turtle1 50)

Rechteck

1. Schreiben Sie eine Prozedur, die ein Rechteck mit den Seitenlänngen a und b mit einer der turtle2 auf canvas2 zeichnet. <eval id="4ae2fcc5979a7">;Rechteck canvas2 turtle2</eval>


Nikolaus

Schreiben Sie auf canvas2 eine Prozedur, mit deren Hilfe das Haus vom Nikolaus gezeichnet werden kann. Diese soll als Argumente die Turtle sowie die Länge der Grundseite des Hauses ubernehmen. <eval id="4ae2fcc598177">;Nikolaus canvas2 turtle2</eval>

Kreisbogen

Schreiben Sie eine rekursive Prozedur kreisbogen, die die Turtle Nummer 5, die Bogenlänge und den Drehwinkel der Turtle nach jedem Schritt (der Länge 1) nimmt und einen dementsprechenden Kreisbogen zeichnet.Hinweis: Ein Turtle-Kreis ist ein 360-Eck. Jeder der 360 Turtle-Schritte hat die Länge 1. Nach jedem Schritt dreht sich die Turtle um 1 Grad nach rechts (oder links). Der Umfang dieses Kreises beträgt offenbar 360. (Ganz nebenbei: Wie groß ist dann eigentlich der Radius?) <eval id="4ae2fcc598993" cols="150">;kreisbogen canvas2 turtle2</eval>

canvas2

Ihr Browser unterstützt Canvas nicht.

Tree

Erproben Sie die folgende rekursive Prozedur tree unter Verwendung des turtle-Systems.

Ihr Browser unterstützt Canvas nicht.

<eval id="4ae2fcc599117"></eval>

tree canvas3 turtle3

(clear canvas3) (move turtle3 300 230)

(define tree

(lambda(side turtle) 
 (cond 
   ((< side 20) #t)
   (else  
     (penwidth turtle (+ (/ side 10) 1 ))    
     (forward turtle side)  
     (left turtle 45)  
     (tree (/ side 2) turtle) 
     (right turtle 90)  
     (tree (/ side 2) turtle)
     (left turtle 45)  
     (backward turtle side)))))

(tree 100 turtle3)

Random Walk

Erarbeiten Sie eine rekursive Prozedur randomwalk, die eine turtle und eine Schrittanzahl erwartet und die turtle bei jedem Schritt zufällig 0 bis 16 grad nach rechts dreht und 0 bis 10 Pixel vorwärts bewegt. Erstellen sie vorher einen Zufallszahlengenerator mit

(define random 
(random-maker <init>))</init>

Danach bekommt man mit (random <zahl>)</zahl> eine neue Zufallszahl.

Ihr Browser unterstützt Canvas nicht.<eval id="4ae2fcc5998f1">;randomwalk canvas4 turtle4</eval>

Rosette


Rosette.jpeg
Rosette

Lassen Sie sich von der schönen Rosette (s.u.) inspirieren und entwerfen Sie ähnliche. Beginnen Sie stets mit der Planung und verbalen Beschreibung der zu zeichnenden Figuren. Die Implementation erfolgt mit rekursiven Turtle-Prozeduren.


Ihr Browser unterstützt Canvas nicht.<eval id="4ae2fcc59a0e0">;Rosette canvas5 turtle5</eval>

zur Übungsübersicht