Struktogramme
Struktogramme sind eine weitere Möglichkeit, Programme und Algorithmen grafisch darzustellen. Diese Dartstellungsform wurde 1973 von Isaac Nassi und Ben Shneiderman vorgeschlagen und heisst deshalb auch Nassi-Shneiderman-Diagramm.1
Die hier verwendeten Farben nur eine optische Hilfe. Sie haben keine besondere Bedeutung.
Sequenz 👣
In einem Struktogramm wird jeder Befehl in einen rechteckigen Kasten geschrieben. Befehle müssen nicht in einer Programmiersprache geschrieben werden.
Schleife 🔁
Eine Schleife («Wiederholung») wird wie folgt dargestellt.
- Beim Struktogramm wird der wiederholte Teil durch die Einrückung ersichtlich. Auch in Python werden wiederholte Sequenzen (Zeilen 4-5) visuell mit einem Tabulator eingerückt.
- Der Doppelpunkt am Zeilenende zeigt an, dass eine eingerückte Sequenz (beim Programmieren spricht man von einem Codeblock) folgt.
Bedingte Ausführung (Verzweigung) ☑️
Wenn ein Befehl nur unter bestimmten Bedingungen ausgeführt werden soll, stellen wir dies folgendermassen dar:
Für die bedingte Ausführung (auch Verzweigung genannt) gibt es auch andere Darstellungsformen, welche wir hier nicht behandeln.
Nicht bei jedem Algorithmus braucht es einen Sonst-Block zu einem Wenn-Block. Das zeigt folgendes Beispiel:
Eine Verzweigung kann auch mehr als nur einen oder zwei "Ausgänge" haben. Das können wir mit Sonst, wenn-Blöcken ausdrücken:
- Wir prüfen nur so lange die jeweils nächste Bedingung, bis eine davon erfüllt ist.
- Wenn also die Sonne scheint, prüft der obige Algorithmus nicht mehr, ob es allenfalls trotzdem auch kalt ist.
- Ein neues Wenn (kein Sonst, wenn) würde allerdings eine neue Verzweigung starten: ab da prüfen wir wieder die Bedingungen.
- Der Sonst-Block hat keine Bedingung. Er wird immer dann ausgeführt, wenn keine der Bedingungen erfüllt ist.
Unterprogramm 🏷
Wenn wir bereits ein Programm haben, das ein bestimmtes Problem löst, können wir dieses in einem anderen Programm als Unterprogramm aufrufen:
Gehen wir davon aus, dass wir bereits zwei Programme Spaghetti(n)
und Tomatensauce(n)
haben, die jeweils n
Portionen Spaghetti, respektive n
Portionen Tomatensauce kochen. Dann können wir diese beiden Programme in einem neuen Programm Spaghetti Napoletana(n)
aufrufen, um n
Portionen Spaghetti Napoletana zu kochen:
Mit den vertikalen Balken zeigen wir, dass es sich um einen Unterprogramm-Aufruf handelt. Nur so dürfen wir die Befehle Spaghetti(…)
und Tomatensauce(…)
verwenden. Wir können sie nicht einfach so in einem Struktogramm schreiben, sondern müssen sie immer in einem Unterprogramm-Aufruf verwenden – denn sonst wäre nicht klar, was dort genau gemacht werden soll.
Rückgabewerte
Programme können auch Werte zurückgeben, statt sie einfach auszugeben. Das ist immer dann nützlich, wenn wir ein solches Programm als Unterprogramm verwenden und auf einen von ihm berechneten Wert zugreifen wollen.
Das folgende Programm Addieren(a, b)
addiert zwei Zahlen und gibt das Ergebnis zurück:
Wir können seinen Rückgabewert nun in einem anderen Programm, z.B. Mittelwert(a, b)
, verwenden:
EVA (Eingabe ‣ Verarbeitung ‣ Ausgabe)
Die meisten Algorithmen verarbeiten eine Eingabe und produzieren eine Ausgabe.

In einem Struktogramm stellen wir dies folgendermassen dar:
Variablen und Parameter
Eine Variable ist wie eine Box, die einen Wert enthält, der sich verändern kann.
Variablen (hier: Schafe) kennzeichnen wir in einem Struktogramm deshalb auch mit einer "Box", um sie visuell hervorzuheben:
Betrachten Sie nochmal den folgeden Block:
Aus der Mathematik sind wir uns gewohnt, das als Gleichung zu lesen: Wir fragen ob Schafe
gleich Schafe + 1
sei, oder wir behaupten, dass dies so ist. Das ist hier aber nicht der Fall!
In der Informatik (bei Algorithmen und beim Programmieren) ist das aber keine Gleichung, sondern eine Zuweisung. Wir weisen der Variable Schafe
den Wert von Schafe + 1
zu. Es ist also ein Befehl, keine Frage. Wir befehlen dem Computer, dass er den Wert der Variable Schafe
auf den Wert Schafe + 1 setzen soll.
Die Richtung der Zuweisung ist immer von rechts nach links: Rechts steht der Wert und Links steht die «Box» (also die Variable), in der dieser Wert gespeichert werden soll.
Um zu prüfen, ob zwei Werte gleich sind (z.B. in der Bedingung einer Schleife oder einer Verzweigung) verwenden wir deshalb meistens zwei Gleichheitszeichen (==
), um zu zeigen, dass es sich in dem Fall tatsächlich um eine Frage statt um einen Befehl handelt. Dieser Block würde also fragen, ob Schafe
gleich 0
ist:
Variablen werden von Algorithmus bei der Ausführung mit Werten gefüllt, um diese bei der Berechnung zu verwenden oder um sie später auszugeben. Bei einigen Variablen können wir den Wert aber auch von aussen vorgeben – nämlich immer bei einem solchen Block:
Dieser Block erlaubt uns, den Wert eine Variable – in diesem Fall x
– von aussen vorzugeben. Eine solche Variable nennem wir einen Parameter. Parameter sind die Eingabe im EVA-Prinzip. Wir können damit steuern, mit welchem Wert (oder welchen Werten) der Algorithmus ausgeführt werden soll.
Im folgenden Struktogramm haben wir zwei Parameter, a
und b
, die wir von aussen vorgeben können. Der Algorithmus addiert diese beiden Zahlen und speichert das Ergebnis in der Variable c
. Anschliessend gibt er den Wert von c
aus:
Hier sprechen wir bei a
und b
von Parametern, weil wir sie von aussen vorgeben können. Schliesslich müssen wir dem Algorithmus ja sagen, welche Zahlen er addieren soll. Der Wert von c
hingegen wird im Algorithmus berechnet und ist deshalb keine Variable, die wir von aussen vorgeben können. Wir können den Wert vo c
also nicht selbst festlegen.
Struktogramme in Aktion
Addition zweier Zahlen
Nimm zwei Zahlen als Eingabe. Addiere diese Zahlen. Gib die Summe als Ausgabe aus.

Zahl dekrementieren
Nimm eine Zahl als Eingabe. Dekrementiere diese Zahl in Einerschritten, solange sie grösser ist als 0. Gib nach jedem Dekrementierungsschritt die aktuelle Zahl aus. Gib am Schluss aus, dass du fertig bist.

Übungen
Testen Sie Ihr Wissen mit diesem Quiz.
Geben Sie hier das Lösungswort ein, das Ihnen am Ende des Quiz angezeigt wird, und überprüfen Sie Ihre Antwort:
Footnotes
-
Quelle: 👉 rothe.io ↩