Einfache Beispielaufgaben zu MSW-Logo

Quadrat 2   Dreieck 1   Dreieck 2   Treppe 1   Treppe 2   Treppe 3   Treppe 3b   Summe 1   Strasse   Haus   Randomstreet   Kette  

Neue Puzzle-Übungen:  Dreieck1  Dreieck2  Quadrate1  Stollen


Eine ganz wichtige Übung besteht darin, zu den Zeichnungen das jeweilige Programm selbst mit MSW-Logo zu entwickeln. Erst wenn es gar nicht klappt, sollte man die Lösung studieren und es erneut versuchen.

Ebenso nützlich kann es sein, wenn man die angegebene Lösung in der Weise nachvollzieht, dass man eine entsprechende Zeichnung von Hand erstellt. In der Kursarbeit steht auch kein Rechner zur Verfügung. Ohne eine solche Zeichnung kann man dann relativ leicht "den Faden verlieren".


Einfache Logo-Befehle (Grafik)

fd 100   Igel geht um 100 Pixel vorwärts  (fd=forward)
rt 90 Igel dreht sich nach rechts um 90°  (rt=right)
lt 120 Igel dreht sich nach links um 120°  (lt=left)
pu Stift hoch d.h. Igel hinterlässt nun keine Spur  (pu=penup)
pd Stift runter d.h. Igel hinterlässt wieder eine Spur  (pd=pendown)

Befehle zur Steuerung des Programmablaufs (Repeat - Schleife)

Will man z.B. ein regelmäßiges Sechseck (Innenwinkel = 120°) zeichnen, so wiederholen sich bestimmte Anweisungen:
fd 80 rt 60 fd 80 rt 60 fd 80 rt 60 fd 80 rt 60 fd 80 rt 60 fd 80
Dreht man den Igel anschließen wieder in die Ausgangrichtung rt 60, so wiederholen sich die Anweisungen fd 80 rt 60 genau 6-mal.

Kürzer und übersichtlicher kann man das Programm nun mit Hilfe der Repeat-Anweisung schreiben:
repeat 6 [fd 80 rt 60]

Es ist vielfach hilfreich, wenn man die ersten Anweisungen erst einmal hinschreibt, um zu sehen, was sich genau wiederholt.

Prozeduren

Prozeduren fassen eine Reihe von Logo-Anweisungen unter einem Namen zusammen. Dieser Name wird wie ein Logo-Befehl benutzt. Um eine neue Prozedur zu erstellen, wählt man im File-Menue edit aus. In der oberen Zeile wird der künftige Name der Prozedur eingetragen. Dann klickt man ok an. Zwischen die beiden Zeilen trägt man die Befehle ein. Alle unten angegebenen Lösungen haben diese Form.

Mit save and exit wird dieser neue Befehl (diese Prozedur) verfügbar - allerdings nur für die aktuelle Sitzung. Will man die Befehle auch in der nächsten Sitzung verwenden, muss man diese noch mit save as im File-Menü abspeichern.

Lokale Variablen

Viele Prozeduren werden mit einer Variablen aufgerufen. Eine Variable kann einen Zahlenwert z.B. Anzahl der Pixel oder Winkel im Gradmaß speichern. Alle Variablennamen werden durch einen Doppelpunkt eingeleitet z.B. in der Form    ecke  :seite  :winkel.
Die beim Aufruf von  ecke  100  90  angegebenen Zahlen werden dann in der Prozedur ecke übernommen (hier z.B. in der Form  fd  :seite  right  :winkel  fd  :seite ).

Da solche Variablen nur innerhalb der Prozedur (und ggf. in weiteren darin aufgerufenen Prozeduren) einen Wert haben, nennt man sie lokale Variablen.

















Globale Variablen

Beim Aufruf von Prozeduren können lokale Variablen eingesetzt werden, um Werte an die Prozedur zu übergeben wie z.B. bei quadrat  :a  . Beim Aufruf  quadrat  100   gsd1  :a  besitzt die innerhalb von quadrat benutzte Variable :a den Wert 100. Bei  gsd1  :a  also außerhalb von quadrat ist diese Variable aber schon nicht mehr gültig.

Innerhalb von Prozeduren kann durch die Anweisung  make  "neu  5  eine weitere Variable neu definiert werden, die hier z.B. den Wert  5  bekommt. Solche Variablen heißen globale Variablen, weil sie auch außerhalb (insbesondere auch "oberhalb") der Prozedur gültig bleiben und ihren Wert behalten.



















Zufallszahlen

Würfelt man mit einem Würfel, so erhält man bei jedem Wurf eine Zahl zwischen 1 und 6. Welches die nächste Zahl sein wird, ist vom "Zufall" abhängig. Würfelt man sehr oft und zählt die Ergebnisse, so kommt jede der Zahlen etwa gleich oft vor. Bei einem Würfel kommt also bei insgesamt z.B. 6000 Würfen jede der Zahlen von 1 bis 6 etwa 1000-mal vor.

In Logo gibt es dafür die Funktion random  :n .
:n  muss einen ganzzahligen Wert größer als 1 haben. Mit random  3 bekommt man z.B. einen der Zahlenwerte  0,  1,  2  zurück.
Mit  make  "z  random  6   make  "z  :z+1  erhält man in  :z  z.B. die Zahlen von 1 bis 6 wie bei einem Würfel.







Befehle zur Steuerung des Programmablaufs (Ifelse - Verzweigung)

Der Programmablauf kann durch bestimmte Ergebnisse gesteuert werden. Der Igel kann z.B. immer um 30 Pixel vorwärtsgehen und dann vom Zufall gesteuert ("Münzwurf" - random 2) entweder nach links oder nach rechts gehen. Dieser alternative Ablauf lässt sich z.B. so realisieren
 repeat  50  [fd  30  make  "z   random 2   ifelse  :z=0  [left 65]  [right 65] ]   Allgemein:

ifelse BEDINGUNG [ ANWEISUNG(EN) für den Fall, dass die Bedingung erfüllt ist ]   [ ANWEISUNG(EN) für den Fall, dass die Bedingung nicht erfüllt ist ]

Bedingungen sind z.B.       :a = :b  oder  :a < :b  oder  :a > :b   (:a und :b müssen natürlich mit Werten belegt sein).








Wird fortgesetzt / Helmut Klatt 17.3.06