Arrays in MSWLogo
Die Datenstruktur Feld oder Array kann im Unterschied zu einer Variablen nicht nur einen sondern mehrere Werte des gleichen Typs speichern. Jeder dieser Werte steht an einer bestimmten Stelle im Array. Das Array wird durchnummeriert, so dass über den sog. Index der entsprechende Wert angesprochen werden kann. Der Vorteil eines Arrays ist, dass man mit Hilfe des veränderbaren Index die Zuweisung zu den einzelnen Elementen in einer Schleife realisieren kann. (1) to BeispielArray
(2) cs
(3) make “Feld array(9 1)
(4) for[i 1 9 1][setitem :i :Feld random 10]
(5) for[j 1 9 1][print item :j :Feld]
(6) end
(3) Hier wird ein Array mit dem Namen Feld vereinbart. Dieses besitzt 9 Elemente, die Zählung beginnt mit 1.
(4)Die Feldelemente werden durch den Befehl setitem mit Zufallszahlen gefüllt. Dabei beginnt die Zählung bei 1 und endet mit 9. setitem entspricht dem make-Befehl bei den normalen Variablen.
(5) Durch item wird auf die einzelnen Elemente des Arrays zugegriffen und mit print in der Command-Zeile ausgegeben.
Veränderung der Werte eines einzelnen Array-Elements am Beispiel des ersten Elements.
(3) Hier wird ein Array mit dem Namen Feld vereinbart. Dieses besitzt maximal 9 Elemente, die Zählung beginnt mit 1.
(4)Dem ersten Element des Arrays wird der Wert 8 zugewiesen.
(5) Dem ersten Element des Arrays wird der doppelte Wert des 1. Elements zugewiesen.
(6) Der Inhalt des ersten Elements wird in der Command-Zeile ausgegeben.
(1) to FeldBeispiel
(2) cs
(3) make “Feld array(9 1)
(4) setitem 1 :Feld 8
(5) setitem 1 :Feld (item 1 :Feld)*2
(6) print item 1 :Feld
(7) end
Für bestimmte Datenstrukturen ist ein zweidimensionales Array sinnvoll. So kann man z.B. jedes Feld eines Schachbrettes über die Zeilennummer plus Spaltennummer ansprechen. Auch Punkte in einem zweidimensionalen Koordinatensystem werden über x- und y-Koordinate festgelegt. (1) to ZweiDimFeld
(2) cs
(3) make “Feld2 (mdarray[2 3] 1)
(4) for[i 1 2 1][for[j 1 3 1][mdsetitem (list :i :j) :Feld2 Random 10]]
(5) for[i 1 2 1][for[j 1 3 1][print mditem (list :i :j) :Feld2]]
(6) end
(3) Hier wird ein zweidimensionales Array mit dem Namen Feld2 vereinbart. Dieses besitzt maximal 6 Elemente, die Zählung beginnt mit 1. Also erhalten wir folgende Elemente: Feld2[1 1]; Feld2[1 2]; Feld2[1 3]; Feld2[2 1]; Feld2[2 2] und Feld2[2 3].

(4)Den einzelnen Elementen werden mit mdsetitem Zufallszahlen zugeordnet, dabei geschieht die Indizierung über den list-Befehl.

(5) Die einzelnen Array-Elemente werden jetzt mit mditem angesprochen und über print im Command-Feld ausgegeben.
Zweidimensionales Array
Veränderung der Werte eines einzelnen Array-Elements am Beispiel des ersten Elements mit den Indizes Feld2[1 1].
(3) Hier wird ein zweidimensionales Array mit dem Namen Feld2 vereinbart. Dieses besitzt 100 Elemente, die Zählung beginnt mit Feld2[1 1].
(4)Dem ersten Element des Arrays Feld2[1 1] wird der Wert 8 zugewiesen.
(5) Dem ersten Element des Arrays Feld2[1 1] wird der doppelte Wert des 1. Elements Feld2[1 1]zugewiesen.
Achtung: Die runden Klammern müssen genauso gesetzt werden.
(6) Der Inhalt des ersten Elements Feld2[1 1] wird in der Command-Zeile ausgegeben, hier also 16.
(1) to ZweiDimFeld
(2) cs
(3) make “Feld2 (mdarray[10 10] 1)
(4) mdsetitem [1 1] :Feld2 8
(5) mdsetitem[1 1] :Feld2 (mditem [1 1] :Feld2)*2
(6) print mditem[1 1] :Feld2
(7) end
Mehrdimensionale Arrays
Benötigt man mehrdimensionale Arrays, so stellt MSWLogo diese Möglichkeit ebenfalls zur Verfügung. Hier ist ein Beispiel eines dreidimensionalen Arrays.
(1) to MehrDimFeld
(2) cs
(3) make “DimFeld (mdarray[2 3 4] 1)
(4) for[i 1 2 1][for[j 1 3 1][For [k 1 4 1] [mdsetitem (list :i :j :k) :Feld2 Random 10]]]
(5) for[i 1 2 1][for[j 1 3 1][For [k 1 4 1] [print mditem (list :i :j :k) :Feld2]]]
(6) end
(3) Hier wird ein dreidimensionales Array mit dem Namen DimFeld vereinbart. Dieses besitzt 24 Elemente, die Zählung beginnt mit 1. Also erhalten wir folgende Elemente:
DimFeld(1 1 1), DimFeld(1 1 2), DimFeld(1 1 3), DimFeld(1 1 4),
DimFeld(1 2 1), DimFeld(1 2 2), DimFeld(1 2 3), DimFeld(1 2 4),
DimFeld(1 3 1), DimFeld(1 3 2), DimFeld(1 3 3), DimFeld(1 3 4),
DimFeld(2 1 1), DimFeld(2 1 2), DimFeld(2 1 3), DimFeld(2 1 4),
DimFeld(2 2 1), DimFeld(2 2 2), DimFeld(2 2 3), DimFeld(2 2 4),
DimFeld(2 3 1), DimFeld(2 3 2), DimFeld(2 3 3), DimFeld(2 3 4),
(4)Den einzelnen Elementen werden mit mdsetitem Zufallszahlen zugeordnet, dabei geschieht die Indizierung über den list-Befehl.
(5) Die einzelnen Array-Elemente werden jetzt mit mditem angesprochen und über print im Command-Feld ausgegeben.