Kleine Anleitung

Inhaltsverzeichnis

Funktioniert das Programm überhaupt ?!?
Warum dauert das solange ?!?
Struktogramm erstellen/umbenennen/löschen
Elemente verschieben/Größe ändern
Die verschiedenen Elemente
Das Kontextmenü der Elemente
Die Struktor-Befehlssyntax
Input/Output
Variablen deklarieren (Datentypen, Arrays, Pointer, Parameter)
Funktionen verwenden (selber schreiben, eingebaute Funktionen)
Struktogramm starten
Die Watchlist

Funktioniert das Programm überhaupt ?!?

Das Programm funktioniert nur wenn Sie das Java-Runtime-Environment installiert haben oder den Netscape Navigator 6.0 benutzen! Allerdings sollte Sie der Browser informieren, wenn die eine dieser Voraussetzungen nicht gegeben ist. Anschließend können Sie daß doch leider 5MB große Plugin runterladen

Struktogramm erstellen/umbenennen/löschen

Durch die Buttons "new", "rename" und "remove" können Sie ein neues Struktogramm erstellen bzw. ein existierendes Struktogramm umbenennen/löschen. Jedes Struktogramm hat einen eindeutigen Namen. Über den Namen können Sie oben im PullDown-Menü das entsprechende Struktogramm auswählen. Nach dem Start ist immer schon ein Struktogramm (mit einer leeren Anweisung) vorhanden. Dieses Struktogramm hat automatisch den Namen "Default".

Elemente verschieben/Größe ändern

Die Elemente können an dem schwarzen Punkt beliebig auf dem Bildschirm positioniert werden. Die Größe kann über den unteren Rand jedes Elements verändert werden (Rand anklicken, gedrückt halten und mit der Maus verändern). Die Breite sämtlicher Elemente kann verändert werden, indem man den rechten Rand des ersten Elements anklickt und verschiebt.

Die verschiedenen Elemente

In Struktor sind insgesamt (bis jetzt) 5 verschiedene Struktogrammelemente verwendbar:
- Command (das einfachste Element in das dann die entprechende Anweisung eingegeben werden kann)
- HeadLoop (eine kopfgesteuerte Schleife)
- TailLoop (eine fußgesteuerte Schleife)
- ForLoop (eine zählergesteuerte Schleife)
- Condition (eine Fallunterscheidung)
Die Elemente werden jeweils graphisch anders dargestellt.

Das Kontextmenü der Elemente

Bewegen Sie den Mauszeiger auf ein Element und klicken Sie mit der rechten Maustaste. Ein PopUp-Menü erscheint. Je nach Kontext erscheinen hier eine oder mehrere mögliche Aktionen. Zum einen können Sie hier das "properties"-Fenster des Elements öffnen (su.) zum anderen finden Sie hier die Befehle zum editieren der Struktur. Die wichtigsten sind "append" bzw. "insert" mit denen ein neues Struktogrammelement eingefügt bzw. an das aktuelle Element angefügt werden kann. mit "delete" kann ein Element gelöscht werden. Wendet man die "delete" Option auf eine Loop oder eine Condition an, so läßt sich auswählen, ob man bestimmte Teile innerhalb der Loop oder Condition behalten möchte oder ob alles gelöscht werden soll.
Gibt es ein Elment über dem aktuellen, so kann mit der Option "swop (with obove)" das aktuelle Element mit dem darüberliegenden ausgetauscht werden.
Über die Option "move outside Block" läßt sich eine Element aus einer dem Block einer Condition oder Loop hinausschieben. Umgekehrt kann man mit der Option "add" bzw. "add to Loop" eine Element zu einem Block einer Loop oder Condition hinzufügen.
Desweiteren können Sie Breakpoints setzen, die durch einen roten Punkt gekennzeichnet sind. Breakpoints funktionieren nur im Debug-Mode.

Die Struktor-Befehlssyntax

Die Struktor-Befehlssyntax ist vorwiegend an die Programmiersprache C/C++/Java angelehnt. Da keine Kontrollstrukturen eingegeben werden müssen (diese werden ja graphisch dargestellt) handelt es sich bei allen "Befehlen" eigentlich um mathematische Ausdrücke.
Einzelne Beispiele: - a = 5;(liefert 5 zurück und sozusagen als Nebeneffekt wird gleichzeitig in der Variablen a der Wert 5 gespeichert)
- *pa; (liefert den Wert zurück auf den der Pointer zeigt)
- sin(4); (liefert den sinus von 4 zurück; nur sinnvoll bei gleichzeitiger Ausgabe s.u.)
- a = func("Hallo", 'a', 9); (speichert in der Variablen a den Rückgabewert der Funktion) - (a == 5) && (b!=4) (Hier handelt es sich um eine Bedingung die (wahrscheinlich) in einer Condition oder Loop auftauchen könnte. Bei Bedingungen darf grundsätzlich kein Semikolon folgen. Der Rückgabewert ist nicht wirklich ein boolean. (fast) Analog zu C wird hier ein Double (0.0 oder 1.0) je nach Wahrheitswert zurückgeliefert)
Ausdrücke können umgewandelt werden. Hierzu stehen die beiden Operatoren "(int)" und "(double)" zur Verfügung. (Beispiel: ia = (int)5.3; oder db = (double)5;
Desweiteren wurden für Schleifen die Befehle "break;" und "continue;" realisiert. Das ganze auch mehrstufig: "break 2;" oder "continue 7;". Allgemeine Erläuterung zu logischen Operatoren

Input/Output:

Über das Kontextmenü gelangen Sie zu den Elementeigenschaften (properties). Bei Loops und Conditions Können Sie nur den Inhalt verändern. Bei Commands können Sie zudem Werte in Variablen einlesen oder Ausdrücke ausgeben. Wählen Sie hierzu die jeweilige Aktion aus. Bei "Input" bzw. "Output" darf kein Semikolon am Schluss angegeben werden. In beiden Fällen kann auch noch ein entsprechender zusätzlicher Text mit angegeben werden, der dann in dem PopUp-Fenster mit erscheint.

Variablen deklarieren

Bevor Sie das Struktogramm starten können, muessen Sie jede verwendete Variable deklarieren: Wählen Sie die "Declaration-View". das Struktogramm verschwindet und Sie können über den unteren Button neue Variablen deklarieren, bzw. über die oberen Buttons diese wieder löschen.

Datentyp

Es stehen Ihnen 4 verschiedene Datentypen zur Verfügung: Integer, Double Character, und String.
Bei der Deklaration in der Deklarationsansicht müssen die voreingestellten Initialisierungswerte ohne irgendeine Kennzeichnung eingeben werden (Bei Character wird nur das erste Zeichen gewertet). Bei nachträglichen Wertzuweisungen im Struktogramm müssen bei Strings doppelte Anführungszeichen verwendet werden (Beispiel: string = "Hallo Welt";), bei Characters einfache Anführungszeiche (Beispiel character = 'a')

Pointer

Wollen Sie einen Zeiger auf den entsprechenden Datentyp erstellen, so aktivieren Sie die CheckBox "Pointer". Vom Datentyp String kann kein Pointer erstellt werden. Pointer arbeiten mit zwei speziellen Operatoren zusammen: Der Adreßoperator "&" gibt die Adresse einer Variablen im Speicher zurück. Diese kann einer Pointervariablen (sofern sie auf vom Typ der Variablen ist) zugewiesen werden. (Beispiel: pointer = &variable;). Der Dreferenzierungsoperator kann vor Pointern benutzt werden. Das Resultat entpricht dem Wert an der Adresse die in der Pointervariablen gespeichert ist. (Beispiel: *pa = 12;). Mit Pointern kann auch gerechnet werden (Pointerarithmetik). (Beispiel: *(pa+1) = 12). Deutet der Pointer auf einen Integer-Wert, dann bedeutet (pa+1) einen Pointer, der auf den nächsten Integer-wert im Speicher deutet. Ob dort tatsächlich ein Integer-Wert liegt, muß vom Programmierer (analog zu C) sichergestellt werden. Im Gegensatz zu C gibt der Interpreter allerdings Fehlermeldungen aus, wenn Pointer falsch verwendet wurden. Pointer sind v.a. im Hinblick auf Funktionen interessant. Allgemeine Erklärung zu Pointern

Arrays (Felder)

Sie können von allen Datentypen Arrays erzeugen. Entsprechend der Sprache C entspricht der Arrayname der Adresse des ersten Elements des Feldes. Wollen sie auf ein bestimmtes Element zugreifen, müssen Sie dahinter den Index in eckigen Klammern angeben (Beispiel a[5]=12;). Die Arrays wurden (analog zu C) mithilfe von Pointern implementiert. Das heißt das der Programmierer selber für die Einhaltung der Arraygrenzen verantwortlich ist. Sie können auch mehrdimensionale Arrays verwenden. Verwenden Sie hierzu den Button "incDim" der erscheint, wenn Sie eine Variable zu einem Array erklärt haben. Die Dimension kann allerdings nicht wieder runtergesetzt werden. Hierzu muß die komplette Variable gelöscht und neu angelegt werden. Allgemeine Erklärung zu Arrays

Parameter

(Fast) jede Deklaration kann zu einem Parameter werden. Dadurch lassen sich Struktogramme wie Funktionen gegenseitig aufrufen. Analog zu C können keine Arrays (aber doch Strings die es ja in C sowieso nicht gibt) an Funktionen übergeben werden. Siehe den Abschnitt über Funktionen.

Funktionen

In Struktor ist es möglich, das Funktionskonzept für unterschiedliche Zwecke einzusetzen.

Aufruf anderer Struktogramme

Zum einen kann jedes Struktogramm ein anderes Stuktogramm aufrufen. Selbstverständlich müssen dabei die Anzahl und die Typen der Parameter eingehalten werden. das Struktogramm wird einfach mit seinem Namen aufgerufen.
Geben Sie z.B.
struk('a', 8, "Hallo");
in eine Anweisung ein, wird versucht das Struktogramm "struk" mit den entsprechenden Parametern (ein Character, ein Integer, ein String -> muß im Declaration-View des Struktogramms "struk" entsprechend eingetragen werden) aufzufufen.
Um einen Wert aus einer selbstprogrammierten Funktion zurückzuliefern muß das Kommando "return;" oder "return value;" benutzt werden. (Dieser Wert muß dann mit einer Wertzuweisung abgeholt werden -> a = struk() ).
Analog zu C wird bei jedem Funktionsaufruf die Argumente "by-Value" übergeben. Außerdem wird auf dem Stack (wie bei "by-value" üblich) eine neue VariablenListe angelegt. Daß heißt, es können in Funktionen durchaus für Variablen die gleichen Namen verwendet werden, wie in anderen Struktogrammen.

"Eingebaute" Funktionen

Output-Funktionen

Wenn man rechts Oben die Checkbox "output" aktiviert, so erscheint links ein Bereich in dem graphische bzw. textuelle Ausgabe möglich ist. Für Textausgabe (unterer Bereich) stehen die Funktionen "println" (mit anschließendem Zeilenumbruch) bzw. "print" (ohne Zeilenumbruch) zur Verfügung. Möchte man z.b. den Text "Dies ist der 5.Durchgang" ausgeben, wobei die 5 in einer Variablen a gespeichert ist, so gibt man ein:
println("Dies ist der ",a,".Durchgang");
Für die graphische Ausgabe stehen alle Funktionen zur Verfügung, die in Java dem Object "Graphics" zur Verfügung stehen und die mit den Struktor eigenen Datentypen verwendet werden können. Beispiele: - drawRect(int x, int y, int width, int height);
- fillRect(siehe oben)
- drawOval(siehe oben)
- fillOval(siehe oben)
- drawLine(int x1, int y1, int x2, int y2);
(setColor konnte noch nicht implementiert werden)
Desweiteren gibt es Turtle-Funktionen die eine relative Grafikausgabe ermöglichen. Diese Funktionen starten alle mit einem "t". Die Winkelangaben gehen jeweils von 0 bis 360 Grad: - tturnto(double winkel); (Dreht die "Schildkröte" in die angegebene Richtung)
- tturn(double winkel); (Dreht die "Schildkröte" um die angegebene Gradzahl)
- tdrawto(double x, double y); (Zeichnet eine Linie von der aktuellen Position zur Angegebenen)
tdraw(double laenge); (Zeichnet eine Linie der angegebenen Länge und bewegt dementsprechend die Schildkröte)
- tmoveto(double x, double y); (Bewegt die "Schildkröte" zur angegeben Position)
- tmove(double laenge); (wie tdraw, aber ohne eine Linie zu zeichnen)
Zu beachten ist, daß die Funktionen nur dann fehlerfrei arbeiten, wenn gleichzeitig das output-Window angezeigt wird. Das Koordinatensystem läuft übrigens von 0-100 in X- und Y-Richtung. Zu beachten ist hierbei, dass bei der Verwendung von Grafikfunktionen der Browser immer in der Vollansicht betrieben werden sollte.

Mathematische Funktionen

Ferner können sämtliche Funktionen verwendet werden, die in der Klasse java.lang.Math zur Verfügung stehen (sofern die Parametertypen in Struktor zur Verfügung stehen). Beispiele: - cos(double d), sin(double d), acos(double d), tan(double d) ....
- min(double a, double b) (gibt den kleineren Wert zurück) analog max()
- analog auch mit anderen Datentypen z.b. min(int a, int b)
- random() gibt Zufallszahl zwischen 0 und 1 zurück
- sqrt(double d) gibt die Quadratwurzel zurück
- pow(double a, double b) die Potenz a hoch b
- log(double a) natürlicher Logarithmus
- ...

Struktogramm starten

Haben Sie Ihr Struktogramm erstellt und alle Variablen deklariert, können Sie das Struktogramm über "execute" ausführen. Jedes Element das gerade ausgeführt wird, wird rot umrandet. klicken sie auf "Pause" wird die Ausführung angehalten. Per "resume" kann die Verarbeitung fortgeführt werden. Der "step"-Button, der jeden Schritt einzeln ausführt, kann benutzt werden, wenn Sie vorher "pause" geklickt haben. Außerdem gibt es die Möglichkeit, das Struktogramm an einer bestimmten Stelle automatisch über sog. Breakpoints anhalten zu lassen. Aktivieren Sie hierzu im Kontextmenü des entsprechenden Elements einen "Breakpoint". Allerdings wird die Ausführung nur dann gestoppt, wenn vorher die "Debug" Checkbox aktiviert wurde.

Die Watchlist

Während der Ausführung haben Sie die Möglichkeit bestimmte Variablen oder auch beliebige Ausdrücke in der "Watchlist" (Überwachungsliste) zu überwachen. Aktivieren Sie hierzu die Checkbox "Watchlist" (rechts oben) und geben Sie die entsprechende Variable oder den Ausdruck in eins der Felder ein. Wollen Sie z.B. die Variable "a" überwachen, geben Sie einfach "a" (ohne Anführungszeichen oder Semikolon) ein. Für jedes Struktogramm gibt es eine eigene Überwachungsliste !

save/load

  • Durch "save" können Sie ein beliebiges Struktogramm in C-ähnlichen Pseudocode umwandeln. Diesen Pseudocode bitte komplett markieren, in die Zwischenablage kopieren (Ctrl-C) und in einem beliebigen Texteditor (z.B. Notepad) einfügen. Nun kann das Struktogramm abgespeichert werden. Klicken Sie auf "load" kann auf umgekehrtem Wege das Struktogramm wieder geladen werden.