Informatik

Struktogramme

Flussdiagramme haben einen Nachteil: Mit ihren Pfeilen kann man Sprünge kreuz und quer zeichnen – auch solche, die sich gar nicht sauber programmieren lassen. Struktogramme (nach ihren Erfindern auch Nassi-Shneiderman-Diagramme) verhindern das durch ihre Bauweise: Sie bestehen nur aus ineinandergeschachtelten Kästen und kennen überhaupt keine Pfeile.

Die Bausteine

Baustein Aussehen in Java
Anweisung ein Kasten mit Text eine Anweisung
Eingabe Kasten mit ▶ davor einlesen
Ausgabe Kasten mit ◀ davor ausgeben
Sequenz Kästen untereinander nacheinander
Verzweigung Kasten mit Schrägen, darunter zwei Spalten if / else
Zählergesteuerte Schleife Kasten, der oben und links um den Rumpf greift for
Kopfgesteuerte Schleife genauso – nur steht oben eine Bedingung statt eines Zählers while
Fußgesteuerte Schleife Kasten, der unten und links um den Rumpf greift do-while

Die beiden Spalten einer Verzweigung sind mit Wahr und Falsch beschriftet. Bleibt eine von beiden leer, wird sie trotzdem gezeichnet – sie bleibt einfach leer. So ist zu sehen, dass der Fall bedacht und nicht vergessen wurde.

Die Zuweisung schreibt man mit =, so wie in Java.

Die Struktogramme auf dieser Seite sind mit StruktoLab gezeichnet. Dort kannst du deine eigenen bauen – und sie am Ende in Java übersetzen lassen.

Eine Sequenz

Das einfachste Struktogramm ist eine Folge von Kästen:

Ein- und Ausgabe erkennst du an den kleinen Dreiecken am Kastenrand.

Eine Verzweigung

Die beiden Spalten stehen nebeneinander, weil immer nur eine von beiden ausgeführt wird. Darunter läuft es wieder in einem Kasten zusammen – genau wie im Programm.

Eine Schleife

Der Schleifenkasten umschließt seinen Rumpf. Dadurch sieht man sofort, was wiederholt wird und was nicht – bei einem Flussdiagramm muss man dafür den Pfeilen folgen.

Aufgabe 1: Struktogramm lesen

Gegeben ist das folgende Struktogramm.

a) Beschreibe in Worten, was der Algorithmus tut.

b) Verfolge ihn auf Papier für die Eingabe n = 4. Notiere nach jedem Durchlauf die Werte von i und erg.

c) Setze ihn danach in Java um und prüfe deine Handrechnung.

Auflösung zu a) und b)

a) Der Algorithmus berechnet 2 hoch n. Er startet bei 1 und verdoppelt n-mal.

b) Für n = 4:

nach Durchlauf i erg
(Start) 1 1
1 2 2
2 3 4
3 4 8
4 5 16

Die Schleife endet, weil 5 nicht mehr kleiner oder gleich 4 ist. Ausgegeben wird 16.

Lösung. Erfrage das Passwort bei deiner Lehrkraft.

Aufgabe 2: Struktogramm entwickeln

Entwickle auf Papier ein Struktogramm für den folgenden Algorithmus:

Lies eine Zahl n ein. Gib alle Zahlen von 1 bis n aus. Bei jeder Zahl, die durch 3 teilbar ist, gib zusätzlich das Wort „Fizz“ aus.

Setze es danach in Java um.

Tipp: Wo steckt die Verzweigung?

Die Verzweigung liegt innerhalb der Schleife. Im Struktogramm heißt das: Der Verzweigungskasten steht im Rumpf des Schleifenkastens.

Und: Die Falsch-Spalte bleibt leer. Zeichne sie trotzdem – weglassen darfst du sie nicht.

Lösung. Erfrage das Passwort bei deiner Lehrkraft.

:::

Aufgabe 3: Darstellungen überführen

Denselben Ablauf in einer anderen Darstellungsform aufzuschreiben, ist eine eigene Fähigkeit. Genau die übst du hier.

Gegeben ist dieses Flussdiagramm.

a) Überführe es in ein Struktogramm.

b) Überführe es in ein Java-Programm.

c) Beschreibe in einem Satz, was der Algorithmus berechnet.

flowchart TD
    S([Start]) --> E1[/a einlesen/]
    E1 --> E2[/b einlesen/]
    E2 --> B{a != b?}
    B -- ja --> C{a > b?}
    C -- ja --> D[a = a - b]
    C -- nein --> F[b = b - a]
    D --> B
    F --> B
    B -- nein --> G[/a ausgeben/]
    G --> ENDE([Ende])
Tipp: Erst die Struktur erkennen

Es gibt eine äußere Schleife (die Raute mit a != b, zu der zwei Pfeile zurückführen) und darin eine Verzweigung (die Raute mit a > b).

Lösung. Erfrage das Passwort bei deiner Lehrkraft.

Der Algorithmus berechnet den größten gemeinsamen Teiler von a und b. Er heißt euklidischer Algorithmus und ist über 2000 Jahre alt. Teste ihn mit 48 und 18 – heraus kommt 6.

:::

Zusatzaufgabe

Der euklidische Algorithmus in der Fassung oben zieht immer nur ab. Bei den Zahlen 1000 und 3 braucht er dafür über 300 Durchläufe.

a) Überlege, wie man das Abziehen durch eine Rechenoperation ersetzen kann, die alle Subtraktionen auf einmal erledigt.

b) Zeichne das Struktogramm der schnelleren Fassung.

c) Was passiert bei deiner Fassung, wenn eine der beiden Zahlen 0 ist?


Selbsttest

Struktogramme

Teilbare URL erstellen

Abschnitte auswählen