Structomat
Der Structomat befindet sich derzeit noch in der Betaphase - also für Infos über Fehlverhalten bin ich dankbar!
Das Tool erlaubt die Steuerung eines Autos mit Hilfe von Struktogrammen, um das Thema Struktogramme interaktiv üben zu können. Es ist der JavaScript Nachfolger meines ursprünglichen Structomat Programms auf Java Basis. Ziel ist es, das Auto mit Hilfe von Struktogrammelementen auf einem Feld zu steuern und Passagiere einzusammeln. Das Spielfeld kann von der Größe angepasst werden, bzw. kann der User Hindernisse platzieren.
Top
2. Erzeugung von Struktogrammen am Designer
Die Struktogramme werden im Struktogrammdesigner durchgeführt. Folgender Aufbau:
Struktogramm Designer
Abb.: 1: Aufbau Strugrogramm Designer
Auf der linken Seite befinden sich die sechs Struktogrammelemente, Anweisung (oder "Befehl"), Verzweigung, Mehrfachauswahl (oder "Switch/Case"), Zählschleife (oder "For-Schleife"), kopfgesteuerte Wiederholungsschleife (oder "While-Schleife") und die fußgesteuerte Wiederholungsschleife (oder "Do-Schleife"). Sie werden mit "Drag and Drop" auf ihre Position gezogen. Die Zielfelder leuchten immer gelb auf, sobald das Element platziert werden kann:
Platzieren eines Elements
Abb.: 2: Platzieren eines Elements
Mit Hilfe des "X" Symbols können die Elemente gelöscht werden. Achtung - wenn ein Elternelement gelöscht wird, werden alle Kindelemente ebenfalls gelöscht! Die einzelnen Elemente können per Doppelklick angepasst werden. Sämtliche Einträge müssen korrekt formatiert sein.
Anweisung
Hier können im Wesentlichen zwei Dinge eingetragen werden:
Verzweigung
Die Bedingung muss ein boolscher Ausdruck sein (also true/false) ergeben. Der true-Zweig ist immer links, false entsprechend rechts.

Mehrfachauswahl
Hier muss eine Variable im Kopf stehen, welche ausgewertet wird. In den einzelnen Cases stehen Zahlenwerte oder Konstanten

Zählschleife
Hier muss im Kopf eine Gültige Zählbedingung stehen. diese besteht aus vier Informationen, verteilt in drei per Semikolon separiereten Bereichen, bspw.: $i=0;$i<10;$i=$i+1
  • Zählvariable: $i
  • Startwert: 0
  • Zählbedingung: $i<10
  • Wertanpassung: $i=$i+1
Der Syntax orientiert sich an den gängigen Programmiersprachen. Da alle Variablen im Structomat global sind, gilt dies auch für die Zählvariable.

kopf- bzw. fußgesteuerte Wiederholungsschleife
Die Wiederholbedingung muss wie bei der Verzweigung ein boolscher Ausdruck sein.
Top
3. Aweisung
Der Anweisungsblock wird für Operationen und Bewegungskommandos für das Auto genutzt.
Operationen
Hiermit sind mathematische oder boolsche Formeln gemeint. Details zum Syntax findet man im Kaptel Formeln.
Bewegungskommandos
Das Auto kann vier verschiedene Bewegungen ausführen. Für jede wurde ein Befehl definiert:
Aktion: Befehl:
Ein Schritt nach vorne. mvF()
Ein Schritt nach hinten. mvB()
Eine 90° Drehung nach rechts. trnR()
Eine 90° Drehung nach links. trnL()
Tabelle 1: Bewegungskommandos
Das Aufnehmen von Passagieren geht automatisch, sobald das Auto auf ein Feld mit Passagier fährt.
Top
4. Variablen und Konstanten
Bei den Variablen unterscheiden wir vier verschiedene Grundttypen:
  • Konstantwerte von Structomat
  • Automatisch belegte Variablen
  • Selbstdefinierte Variablen
  • Arrays
Konstantwerte
Diese dienen der besseren Lesbarkeit. Folgende Konstanten existieren:
Konstante: Inhalt:
$BRICK Ein Feld mit diesem Wert beinhaltet ein Hindernis.
$EMPTY Ein Feld mit diesem Wert ist leer.
$PASG Ein Feld mit diesem Wert beinhaltet einen Passagier.
$EAST Wenn die Richtungsvariable des Autos diesen Wert hat, zeigt das Auto nach Osten.
$SOUTH Wenn die Richtungsvariable des Autos diesen Wert hat, zeigt das Auto nach Süden.
$WEST Wenn die Richtungsvariable des Autos diesen Wert hat, zeigt das Auto nach Westen.
$NORTH Wenn die Richtungsvariable des Autos diesen Wert hat, zeigt das Auto nach Norden.
Tabelle 2: Konstantwerte
Automatisch belegte Variablen
Diese sollen vom User nicht überschieben werden, da sie automatisch vom System belegt sind:
Variable: Inhalt:
$left Inhalt des Feldes auf der linken Seite des Autos(1)
$right Inhalt des Feldes auf der rechten Seite des Autos(1)
$front Inhalt des Feldes vor dem Auto(1)
$back Inhalt des Feldes hinter dem Auto(1)
$dir Ausrichtung des Autos(1)
$posX X-Koordinate des Autos
$posY Y-Koordinate des Autos
$noPsg Anzahl der aufgesammelten Passagiere.
$noPers Anzahl der noch verbleibenden Personen auf dem Feld.
$gridWidth Anzahl der Felder in X-Richtung.
$gridHeight Anzahl der Felder in Y-Richtung.
Tabelle 3: Bewegungskommandos
(1) Mögliche Werte siehe Tabelle für Konstanten.
Selbstdefinierte Variablen
Eine Variable wird ab der Zuweisung definiert (also bspw. $a=2). Variablennamen dürfen nur Buchstaben enthalten. Vor der Nutzung der Variablen in Rechnungen etc. muss ihr selbstverständlich vorher ein Wert zugewiesen werden (sie muss also "initialisiert" werden).
Arrays
Ein Array wird mit einer eigenen Funktion erzeugt, welche die Anzahl der Elemente pro Dimension enthält. Ein zweidimmensionales Array mit 5 Zeilen und 6 Spalten wird wie folgt erzeugt: $myAr=Array(5,6). Der Zugriff erfolgt über ein eckiges Klammernpaar. Wenn wir bspw. auf die Position 2/4 den Wert 1 schreiben wollen, wird dies wie folgt belegt $myAr[2,4]=1. Für das Auslesen wird der gleiche Syntax für die Arrayadressierung verwendet.
Beispiel für die Nutzung von Schleifen, Konstanten und Variablen:
Das folgende Struktogramm lässt das Auto bis zur nächsten Mauer fahren:
Beispielstruktogramm
Abb.: 3: Beispielstruktogramm
Top
5. Formeln
Operationen
Für die Auswertung von Berechnungen habe ich die Bibliothek math.js eingebunden. Hiervon nutze ich folgende Funktionalitäten:
Operatorengruppe: Operatoren:
Mathematische Operatoren. + - * /
Klammern. ( )
Vergleichsoperatoren. == != > < >= <=
logische Operatoren. & | (2)
Zuweisung. =
Tabelle 4: Operatoren
(2) Das "lazy" Verhalten (also && bzw. ||) werden nicht unterstützt..
Die Prüfung, ob bereits alle Passagiere eingesammelt wruden würde also lauten: $noPers==0. Die Zuweisung einer Variable namens "myVar" mit dem Wert 1: $myVar=1. Achtung - die verkürzten Operatoren wie ++, -- bzw. +=, *= etc. werden nicht ausgewertet!
Top
6. Veränderung des Spielfeldes
Das Spielfeld ist immer mit einer Mauer umgeben. Links befinden sich die Kontrollelemente für den Start/Stop des Struktogramms und und überhalb des Spielfeldes die Elemente für die Spielfeldanpassung.
Spielfeld
Abb.: 4: Spielfeld
Elementgruppe: Funktion:
Positionierung Auto Ein Klick auf das Auto iteriert die Startposition durch. Zeigt dieses Auto nach rechts, so wird es im Spielfeld auch inital nach rechts zeigen. Das Würfelsymbol zeigt an, dass nach Spielstart das Fahrzeug in eine zufällige Richtung zeigt. Die Auswahlelemente für X und Y geben an, in welchen Quadranten das Fahrzeug bei Start platziert wird. ist die Checkbox bei "random" ausgewählt, so wird auch diese Position zufällig bestimmt.
Feldsteuerung Hier werden die Anzahl der Spalten/Reihen des Spielfeldes angegeben.
Passengers: Anzahl der Passagiere, welche aufgenommen wurden.
No. of moves: Anzahl der Bewegungsaktionen des Autos.
No. of steps: Anzahl der verarbeiteten Struktogrammschritte.
Speed: Auswahl der Geschwindigkeit des Autos.
Trace: Wenn aktiv, markiert das Auto eine Spur, dort wo es bereits gefahren ist.
Tabelle 5: Konfigurationsmöglichkeiten für das Spielfeld
Die Hindernisse werden durch einen Klick in das Spielfeld gesetzt bzw. entfernt. Passagiere werden durch Drag and Drop des links oben platzierten Passagiers gesetzt. Ein Klick auf einen platzierten Passagier enfernt diesen wieder.
Top
7. Kontrollbuttons
Den Ablauf der Abarbeitung steuert man mit den drei Kontrollbuttons.
Button: Funktion:
StartbuttonStoppbutton Bei Klick auf den Startbutton ("Dreieck") setzt das Auto auf den voreingestellten Ort und startet das Struktogramm. Der Button wechselt dann auf das Stoppsymbol ("Viereck"), wodurch der komplette Prozess angehalten wird.
Pause Button Der gesamte Ablauf wird pausiert.
Step ButtonStep Button Das aktuelle Struktogrammelement wird ausgeführt. Anschließend wird pausiert (roter Balken). Bei einem weiteren Klick wird das nächste Element abgearbeitet.
Tabelle 6: Kontrollbuttons
Top
8. Speichern und öffnen von Dateien
Mit Hilfe des Speicherbuttons kann das aktuelle Struktogramm bzw. die Spielfeldkonfiguratione als File abgelegt werden. Es wird automatisch auf dem lokalen Rechner unter "Downloads" abgelegt. Es ist sinnvoll, das File anschließend von dort auf einen anderen Ort zu verschieben. Da der Structomat als Ausbildungsprogramm dient, habe ich darauf verzichtet, eine eigene Fileextension zu definieren - vielmehr hat es die Extension "json", da es sich auch um ein JSON-File handelt. Mit Hilfe des "Öffnen" Buttons kann ein lokales Struktogramm/Spielfeld-File geöffnet und geladen werden. Das alte Struktogramm/Spielfeld wird dadurch überschrieben.
Top
9. Beispiele
Die grundsätzliche Idee vom Structomaten ist es, dass Schüler den Umgang mit Struktogrammen ausprobieren und üben können. Da ich hier nicht zu viel vorgeben möchte, beschränke ich mich hier auf das Allerwesentlichste.
Loopbeispiel
Hier geht es darum, die Funktionsweise einer kopfgesteuerten Wiederholungsschleife zu sehen. Das Auto wird mittig platziert, jedoch wird die Richtung zufällig gewählt. Das Struktogramm soll nun mittels einer Schleife dafür sorgen, dass das Auto immer nach Osten zeigt.
Switchbeispiel
Das Ziel ist das gleiche wie beim vorausgegangenen Beispiel. Hier nutzen wir jedoch eine Mehrfachauswahl, so dass wir immer den kürzesten Weg richtung Osten nehmen - im Gegensatz zur "Loop-Lösung".
Beispiel für Zählschleifen
In diesem Beispiel wird die Nutzung von zwei Zählschleifen gezeigt. Hierbei fährt das Auto ein Quadrat ab.
Top