Die Turtle im Koordinatensystem 1 Die folgenden Erläuterungen wurden mit MicroWorlds 2.01 der Firma LCSI (Logo Computer Systems Incorporation) erstellt. 1. DAS KOORDINATENSYSTEM IN LOGO Der Bildschirm ist durch ein Gitter aufgeteilt (in der Mathematik spricht man von einem Koordinatensystem). Die Mitte des Gitters entspricht dabei genau der Turtlestellung, die man mit HOME oder auch mit CG (LöscheGrafik) erhält. Von diesem Punkt aus kann man sich waagrecht und senkrecht zwei Achsen denken, die X-Achse (waagrecht) und die Y-Achse (senkrecht). Beide Achsen sind in Turtleschritte unterteilt, von der Mitte aus nach rechts bis 290, nach links bis -290, von der Mitte aus nach oben bis 155, nach unten bis -155. Die Mitte selbst ist der Null-Punkt. Soll nun ein bestimmter Punkt des Bildschirmes ausgewählt werden, dann muß man lediglich angeben, wie weit nach rechts oder LTnks, also in X- Richtung, und wie weit nach oben oder unten, also in Y-Richtung man zu gehen hat. Folgende Prozeduren erzeugen auf dem Bildschirm die Koordinatenachsen: TO SKALA.STRICH.X.ACHSE FD 2 BK 4 FD 2 TO SKALA.STRICH.Y.ACHSE LT 90 FD 2 BK 4 FD 2 RT 90 TO PFEIL LT 90 FD 3 REPEAT 2[RT 120 FD 6] RT 120 FD 3 RT 90 TO PFEIL.X.ACHSE RT 90 PFEIL LT 90 PU BK 10 1
TO PFEIL.Y.ACHSE PFEIL PU LT 90 FD 7.5 RT 90 TO SKALA.X.ACHSE :X IF :X > 225 [STOP] NZ :X 0 SKALA.STRICH.X.ACHSE SKALA.X.ACHSE :X + 10 TO SKALA.Y.ACHSE :Y IF :Y > 145 [STOP] NZ 0 :Y SKALA.STRICH.Y.ACHSE SKALA.Y.ACHSE :Y + 10 TO X.ACHSE NZ -220 0 Z 220 0 PFEIL.X.ACHSE SKALA.X.ACHSE -220 TO Y.ACHSE NZ 0-140 Z 0 140 PFEIL.Y.ACHSE SKALA.Y.ACHSE -140 TO ACHSEN CG SETC 14 X.ACHSE Y.ACHSE HOME SETC 9 TO Z :X :Y IF :X > 240 [STOP] IF :X < -240 [STOP] IF :Y > 190 [STOP] IF :Y < -190 [STOP] 2
SETPOS LIST :X :Y TO NZ :X :Y IF :X > 240 [STOP] IF :X < -240 [STOP] IF :Y > 190 [STOP] IF :Y < -190 [STOP] PU SETPOS LIST :X :Y PD Die Hauptprozedur heißt ACHSEN. Wird diese aufgerufen, werden die Koordinatenachsen gezeichnet. 2. DER LOGO-BEFEHL SETPOS [X Y] Der LOGO - Befehl, der die Turtle auf einen bestimmten Bildschirmpunkt setzt, heißt: SETPOS [x y] Für ihn sind zwei Angaben notwendig, nämlichch eine Zahl für den X-Wert und eine für den Y-Wert. Wir wollen ein Quadrat mit seinen Diagonalen zeichnen. Wir versuchen folgende Prozedur: TO QUADRAT1 PU 3
SETPOS [70 70] PD SETPOS [70 0] SETPOS [0 0] SETPOS [0 70] SETPOS [70 70] SETPOS [0 0] SETPOS [0 70] SETPOS [70 0] SETPOS [0 0] 3. DIE LOGO-BEFEHLE XCOR UND YCOR In unseremm Beispiel haben wir mit dem Befehl SETPOS die Koordinaten der Punkte vorgegeben und die Turtle zeichnend immer wieder zu den neuen Punkten geschickt, bis ein Quadrat mit seinen Diagonalen ensteht. Wenn wir aber später irgend ein Quadrat zeichnen wollen, woher wissen wir dann die X-Werte und die Y-Werte der Punkte, die miteinander verbunden werden sollen, um z. B. die Diagonalen des Quadrats zeichnen zu lassen. Die Befehle XCOR und YCOR stellen jeweils fest, an welchem Punkt sich die Turtle jeweils befindet, und zwar bestimmt XCOR den X-Wert und YCOR den Y-Wert des Punktes. Der Befehl 4
SETPOS -30 70 schickt die Turtle an einen bestimmten Punkt des Koordinatensystems. Der Befehl SHOW XCOR ergibt -30 der Befehl SHOW YCOR ergibt 70 4. DIE X-WERTE UND Y-WERTE SOLLEN IN VARIABLEN GESPEICHERT WERDEN Wenn wir nun ein x-beliebiges Quadrat zeichnen wollen und später die Diagonalen eingezeichnet werden sollen, hat die Turtle den Eckpunkt, von dem aus die erste Diagonale gezeichnet werden soll, womöglich schon wieder verlassen. Deshalb bestimmen wir eine Variable, in der wir den für später zu behaltenden Wert speichern. Der entsprechende Befehl dafür heißt MAKE "Name (der Variablen) Wert (der ihr zugewiesen wird) Der erste Eckpunkt unseres Quadrats befindet sich am Turtlestandort, wenn mit dem Zeichnen begonnen wird. Seine Koordinaten können wir mit XCOR und YCOR abfragen und mit dem MAKE-Befehl bewirken, dass entsprechende Variablen diese Werte (XCOR und YCOR) erhalten sollen. MAKE "X.ECKE.1 XCOR MAKE "Y.ECKE.1 YCOR Es existieren nun zwei Variablen, deren Werte gerade die Koordinatenwerte der ersten Ecke unseres Quadrates sind. Nach dem Zeichnen der ersten Quadratseite ist die Turtle am zweiten Eckpunkt des Quadrates angelangt. Wir erzeugen zwei weitere Variablen. MAKE "X.ECKE.2 XCOR MAKE "Y.ECKE.2 YCOR 5
XCOR und YCOR ergeben nun andere Werte, da ja der Turtlestandort nun ein anderer ist. Diese Werte werden an die neuen Variablen übergeben. Wieder wird die (diesmal zweite) Quadratseite gezeichnet. Die Turtle steht dann am dritten Eckpunkt. Wieder erzeugen wir zwei Variablen. Die gesamte Prozedur sieht nun so aus: TO QUADRAT2 :SEITE MAKE X.ECKE.1 XCOR MAKE Y.ECKE.1 YCOR FD :SEITE RT 90 MAKE X.ECKE.2 XCOR MAKE Y.ECKE.2 YCOR FD :SEITE RT 90 MAKE X.ECKE.3 XCOR MAKE Y.ECKE.3 YCOR FD :SEITE RT 90 MAKE X.ECKE.4 XCOR MAKE Y.ECKE.4 YCOR FD :SEITE RT 90 DIAGONALEN1 HOME Nach Aufruf der Prozedur, z. B. nach QUADRAT2 90 können wir uns die einzelnen Variablen auf dem Bildschirm ausdrucken lassen. 6
Der Befehl SHOW NAMES druckt die Namen der Variablen und die Inhalte der Variablen aus. Wir erhalten also folgendes Ergebnis: :X.ECKE.1 0 :Y.ECKE.1 0 :X.ECKE.2 0 :Y.ECKE.2 90 :X.ECKE.3 90 :Y.ECKE.3 90 :X.ECKE.4 90 :Y.ECKE.4 0 Die Werte 0 und 90, die wir für X.ECKE.2 und Y.ECKE.2 erhalten haben, beschreiben also die Lage des zweiten Eckpunktes unseres Quadrates. Die Lage des vierten Eckpunktes unseres Quadrates ist in den Variablen X.ECKE.4 und Y.ECKE.4 gespeichert. Werden nun beide Ecken verbunden, ergibt sich die erste Diagonale. Mit dem Befehl SETPOS [x y] kann ich nun die Turtle an einen bestimmten Punkt setzen. Somit kann ich mit dem Befehl SETPOS LIST :X.ECKE.2 :Y.ECKE.2 die Turtle auf den Punkt [0 90] setzen. Das Zeichnen der Diagonalen ist nun relativ einfach. TO DIAGONALEN1 PU SETPOS LIST :X.ECKE.1 :Y.ECKE.1 PD SETPOS LIST :X.ECKE.3 :Y.ECKE.3 PU SETPOS LIST :X.ECKE.2 :Y.ECKE.2 PD SETPOS LIST :X.ECKE.4 :Y.ECKE.4 HOME 7
5. VARIABLE AUTOMATISCH ERZEUGEN Eine Quadrat-Prozedur geht schneller zu zeichnen, wenn wir mit dem REPEAT-Befehl arbeiten. REPEAT 4 [FD 70 RT 90] Warum ist bei unserem QUADRAT2 der REPEAT-Befehl nicht möglich? Doch nur deshalb, weil bei MAKE jedesmal ein anderer Variablenname angegeben worden ist, also eben nicht einfach nur wiederholt werden durfte. In LOGO ist es möglich, selbständig neue Wörter als Variablennamen erzeugen zu lassen. Für diesen Zweck gibt es den Befehl WORD a) Der Befehl SHOW WORD "Wörter "Buch gibt auf dem Bildschirm aus Wörterbuch b) Der Befehl SHOW WORT "X.ECKE. "9 ergibt X.ECKE.9 c) Die Befehle MAKE "ZAHL 17 und SHOW WORT "X.ECKE. :ZAHL ergeben X.ECKE.17 d) Da wir bei unserem Quadrat mit der Ecke Nr. 1 beginnen, schaffen wir eine Variable ZÄHLZAHL, in der wir den Wert 1 speichern, also MAKE "ZÄHLZAHL 1 8
Und nun unsere Prozedur: TO QUADRAT3 :SEITE MAKE "ZÄHLZAHL 1 REPEAT 4[FD :SEITE RT 90 MAKE (WORD "X.ECKE. :ZÄHLZAHL) XCOR MAKE (WORD "Y.ECKE. :ZÄHLZAHL) YCOR MAKE "ZÄHLZAHL :ZÄHLZAHL + 1] DIAGONALEN1 Die Prozedur übergibt als erstes den Wert 1 einer Variablen mit dem Namen ZÄHLZAHL. Dann kommt die viermal zu wiederholende Befehlsfolge. Sie beginnt mit dem Zeichnen der ersten Quadratseite und der Rechtsdrehung um 90 Grad. Anschließend folgt der MAKE-Befehl, in dem der Wert XCOR dem Wort aus "X.ECKE. und :ZÄHLZAHL zugewiesen wird. Da die Variable :ZÄHLZAHL beim ersten Durchgang noch den Wert 1 hat, ergibt WORD "X.ECKE. :ZÄHLZAHL das Wort X.ECKE.1 Entsprechendes geschieht mit der Variablen X.ECKE.1 und dem Wert YCOR. Zum Schluß steht noch MAKE "ZÄHLZAHL :ZÄHLZAHL + 1 Zu dem bisherigen Wert von ZÄHLZAHL - nämlich im Moment noch 1 - wird die Zahl 1 addiert. Dieser Wert wird der Variablen ZÄHLZAHL neu übergeben. ZÄHLZAHL hat nun also den Wert 2. Der Vorgang beginnt von vorne. Da ZÄHLZAHL nun den Wert 2 hat, wird durch den Befehl MAKE WORD "X.ECKE. :ZÄHLZAHL das Wort X.ECKE.2 geschaffen. Dieser neu geschaffenen Variablen wird der neue Wert XCOR zugewiesen. Und so geht es weiter, bis alle vier Seiten gezeichnet worden sind. 9
AUFGABEN: 1) Schreibe Prozeduren, die mit Hilfe einer Folge von SETPOS - Befehlen a) ein Rechteck b) ein Parallelogramm mit seinen Diagonalen erzeugt. Lösungen: TO RECHTECK1 PU SETPOS [ 30 10] PD SETPOS [ 30 70] SETPOS [ 120 70] SETPOS [ 120 10] SETPOS [ 30 10] SETPOS [ 120 70] SETPOS [ 30 70] SETPOS [120 10] TO PARALLELOGRAMM1 PU SETPOS [-10 20] PD SETPOS [70 40] SETPOS [50 10] SETPOS [-30 70] SETPOS [-10 20] SETPOS [50 10] SETPOS [-30 70] SETPOS [70 40] 10
2. Schreibe Prozeduren für ein Rechteck und ein Parallelogramm, in denen die Koordinatenpunkte in Variablen gespeichert werden! Lösungen: TO RECHTECK2 :A :B MAKE "X.1 XCOR MAKE "Y.1 YCOR FD :A RT 90 MAKE "X.2 XCOR MAKE "Y.2 YCOR FD :B RT 90 MAKE "X.3 XCOR MAKE "Y.3 YCOR FD :A RT 90 MAKE "X.4 XCOR MAKE "Y.4 YCOR FD :B RT 90 DIAGONALEN2 TO DIAGONALEN2 PU SETPOS LIST :X.1 :Y.1 PD SETPOS LIST:X.3 :Y.3 PU SETPOS LIST :X.2 :Y.2 PD SETPOS LIST :X.4 :Y.4 TO PARALLELOGRAMM2 :A :B :W MAKE "X.1 XCOR MAKE "Y.1 YCOR FD :A RT :W 11
MAKE "X.2 XCOR MAKE "Y.2 YCOR FD :B RT 180 - :W MAKE "X.3 XCOR MAKE "Y.3 YCOR FD :A RT :W MAKE "X.4 XCOR MAKE "Y.4 YCOR FD :B RT 180 - :W DIAGONALEN2 3. Schreibe Prozeduren, die ein Rechteck und ein Parallelogramm mit deren Diagonalen erzeugen, in denen die Variablennamen und die Inhalte der Variablen selbst erzeugt werden! Lösungen: TO RECHTECK3 :A :B MAKE "ZÄHLZAHL 1 REPEAT 2[FD :A RT 90 MAKE (WORD "X. :ZÄHLZAHL) XCOR MAKE (WORD "Y. :ZÄHLZAHL) YCOR MACHE "ZÄHLZAHL :ZÄHLZAHL + 1 FD :B RT 90 MAKE (WORD "X. :ZÄHLZAHL) XCOR MAKE (WORD "Y. :ZÄHLZAHL) YCOR MACHE "ZÄHLZAHL :ZÄHLZAHL + 1] DIAGONALEN2 TO PARALLELOGRAMM3 :A :B :W MAKE "ZÄHLZAHL 1 REPEAT 2[FD :A RT :W 12
MAKE (WORD "X. :ZÄHLZAHL) XCOR MAKE (WORD "Y. :ZÄHLZAHL) YCOR MAKE "ZÄHLZAHL :ZÄHLZAHL + 1 FD :B RT 180 - :W MAKE (WORD "X. :ZÄHLZAHL) XCOR MAKE (WORD "Y. :ZÄHLZAHL) YCOR MAKE "ZÄHLZAHL :ZÄHLZAHL + 1] DIAGONALEN2 6. VIELECKE UND DEREN VARIABLE Die Prozedur für ein Vieleck ist recht einfach. TO VIELECK :N :S MAKE "ZÄHLZAHL 1 REPEAT :N[FD :S RT 360 / :N MAKE (WORD "X.ECKE. :ZÄHLZAHL) XCOR MAKE (WORD "Y.ECKE. :ZÄHLZAHL) YCOR MAKE "ZÄHLZAHL :ZÄHLZAHL + 1] DIAGONALEN3 :N 1 Wie aber können alle Diagonalen gezeichnet werden? Das Problem besteht darin, daß wir nun nicht mehr von einer feststehenden Eckenzahl (z. B. 4 bei einem Quadrat) ausgehen können. Wir können also nicht mehr von vornherein bestimmen, welche Ecken miteinander verbunden werden können 13
TO ALLE.DIAGONALEN :ANZAHL :NR :START IF :START > :ANZAHL [SETPOS LIST THING WORD "X.ECKE. :NR THING WORD "Y.ECKE. :NR STOP] SETPOS LIST THING WORD "X.ECKE. :NR THING WORD "Y.ECKE. :NR SETPOS LIST THING WORD "X.ECKE. :START THING WORD "Y.ECKE. :START ALLE.DIAGONALEN :ANZAHL :NR :START + 1 TO DIAGONALEN3 :ANZAHL :NR IF :NR > :ANZAHL - 2 [SETPOS LIST THING WORD "X.ECKE. :ANZAHL THING WORD "X.ECKE. :ANZAHL STOP] ALLE.DIAGONALEN :ANZAHL :NR (:NR + 2) DIAGONALEN3 :ANZAHL :NR + 1 7. REFERENZLITERATUR Ernst F. Haas, Schüler programmieren in Logo Lehr- und Arbeitsbuch mit mehr als 200 Prozedurbeispielen und 180 Aufgaben Verlag Ferdinand Schöningh, Paderborn 1988 Maria HEERDEGEN-LEITNER Andreas HEERDEGEN KMS_NTS 4 Schäffergasse 3 A - 1040 Wien 14