Rekursive Prozeduren 1-Loesung

Aus ProgrammingWiki
Archivierte Version vom 2009-10-26T06:53:23+00:00. Aktuelle Version

Inhaltsverzeichnis

Turtle-Prozeduren

zur Übungsübersicht

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

In den folgenden Beispielen werden Sie auf verschiedenen Zeichenflächen mit verschiedenen Turtles arbeiten. Um diese anzusprechen, hat jede Fläche und jede Turtle einen eigenen Namen, der man die Turtle identifiziert.

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 (Koordinatenursprung: linke obere Ecke)
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, über die sie läuft (wie ein Radiergummi).
clear canvaslöscht die Zeichenfläche


Beispiel

Setzen Sie sich mit dem folgenden Beispiel auseinander und modifizieren Sie die Prozedur quad.

Ihr Browser unterstützt Canvas nicht.

<eval id="4ae30126a3ec6"> (clear canvas1) (home turtle1) (quad turtle1 50)</eval>

Rechteck

Schreiben Sie eine Prozedur, die ein Rechteck mit den Seitenlängen a und b mit einer der turtle2 auf canvas2 zeichnet.

Ihr Browser unterstützt Canvas nicht.

<eval id="4ae302a9cc2f8"> (clear canvas2) (move turtle2 20 180) (rechteck 100 70) </eval>

Nikolaus

Schreiben Sie eine Prozedur, deren Ausführung turtle3 auf canvas3 das Haus vom Nikolaus zeichnen lässt. Diese Prozedur soll als Argumente die entsprechende Turtle sowie die Länge der Grundseite des Hauses verwenden.

Ihr Browser unterstützt Canvas nicht.

<eval id="4ae304e730d68"> (clear canvas3) (move turtle3 100 270) (show turtle3) (nikolaus turtle3 100) </eval>

Turtle-Kreis

Schreiben Sie eine rekursive Prozedur kreis, die die Turtle turtle4 einen Kreis auf canvas4 zeichnen lässt. Überlegen Sie, welche Eingaben die Prozedur kreis nimmt: Ein Turtle-Kreis ist ein 360-Eck. Jeder der 360 Turtle-Schritte beträgt 2 Längeneinheit (LE). Nach jedem Schritt dreht sich die Turtle um 1 Grad nach rechts (oder links). Der Umfang dieses Kreises beträgt offenbar 360 LE.

Ihr Browser unterstützt Canvas nicht.

<eval id="4ae319c7a59ac"> (clear canvas4) (move turtle4 200 150) (kreis turtle4 0)</eval>

Turtle-Baum

Erproben Sie die folgende rekursive Prozedur tree und machen Sie sich klar, wie die rekursive Struktur des Baumes in der Prozedur direkt abgebildet wird.

Ihr Browser unterstützt Canvas nicht.

<eval id="4ae2fcc599117"> (clear canvas5) (move turtle5 200 230) (tree 100 turtle5) </eval>

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 360 Grad nach rechts dreht und 0 bis 10 Pixel vorwärts bewegt. Nach n Turtleschritten soll sich die Turtle genau auf dem eingeschlagenen Weg zum Ausgangspunkt zurück bewegen und dabei die hinterlassene Spur löschen. Dabei ist es nicht gestattet, den Weg explizit (z.B. in einer Liste) zu speichern. Erstellen Sie vorher einen Zufallszahlengenerator, indem Sie für <init> eine beliebige wenigstens 10- stellige natürliche Zahl verwenden. <eval id="4ae324e93d0a4">(define random (random-maker <init>))</init></eval> Danach bekommt man mit <tt>(random <zahl>)</zahl></tt> eine neue Zufallszahl zwischen <tt>0</tt> und <tt>zahl</tt>. <eval id="4ae324e93d852">(random <zahl>)</zahl></eval></init>

Ihr Browser unterstützt Canvas nicht.

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

randomwalk canvas6 turtle6

(clear canvas6) (randomwalk turtle6 10 34 60)


Rosette

Lassen Sie sich von dieser schönen Rosette

Rosette.jpeg
Rosette
inspirieren und entwerfen Sie eine ähnliche. Beginnen Sie mit der verbalen Beschreibung der zu zeichnenden Figur. Diese schreiben Sie dann in Form einer rekursiven Turtle-Prozedur.

Ihr Browser unterstützt Canvas nicht.

<eval id="4ae2fcc59a0e0"> (clear canvas7) (move turtle7 240 150) (rosette turtle7 70 20 0 0) </eval>

zur Übungsübersicht