Einführung in die Verzweigung im Rahmen der Lehre des Programmierens [] (if, Verzweigung, Verzweigungen, if-Anweisung, if-Anweisungen, bedingte Ausführung, einfache Alternative), Lektion, Seite 720834
http://www.purl.org/stefan_ram/pub/programmieren_verzweigung_de ist die kanonische URI dieser Seite.
Stefan Ram

Verzweigungen

Werden alle  Anweisungen eines Programmes in der im Programmtext gegebenen Reihenfolge hintereinander ausgeführt, muß der Programmierer beim Schreiben entscheiden, ob eine bestimmte Anweisung ausgeführt werden soll oder nicht. Diese Entscheidung setzt er dann um, indem er die Anweisung in das Programm schreibt bzw. nicht in das Programm schreibt.

In manchen Fällen kann der Programmierer diese Entscheidung zur Schreibzeit aber gar nicht treffen, weil er noch nicht alle benötigten Information hat. Etwa deshalb, weil diese Informationen erst zur Laufzeit bereitstehen werden.

Der Programmierer kann dann die Entscheidung programmieren  und verfügen, daß erst zur Laufzeit  in Abhängigkeit von den dann bekannten Informationen entschieden wird, ob eine bestimmte Anweisung ausgeführt wird.

Einfache Alternative

Bei der einfachen Alternative  werden zwei mögliche Werte eines Ausdrucks vorgegeben, die zusammen den Bereich möglicher Werte abdecken. Für jeden der beiden Werte wird eine Anweisung festgelegt, die ausgeführt wird, wenn der Ausdruck den betreffenden Wert annimmt. Diese Anweisungen zu den jeweiligen Werten werden auch als die Zweige  der Verzweigung bezeichnet.

Als Ausdruck wird meistens eine Aussage verwendet: Der Wert „wahr“ und der Wert „falsch“ sind dann die beiden möglichen Werte. In diesem Fall kann der Ausdruck im Struktogramm auch in Frageform  erscheinen: Der Wert „wahr“ und der Wert „falsch“ wird dann durch die Antwort „Ja“ bzw. die Antwort „falsch“ dargestellt.

In dem folgenden Beispiel wird ein Struktogramm zum Ausdrucken der Tage des Monats Februar in einem bestimmten Jahr dargestellt.

Februartage [Struktogramm DIN 66261 - A]
.-------------------------------------. 
| Ist das Jahr ein Schaltjahr? | 
| | 
| Ja | Nein | 
|------------------+------------------| 
| Drucke 29 | Drucke 28 | 
'-------------------------------------'

Bei einem bestimmten Ablauf des Programmes wird dann nur eine der beiden Anweisungen ausgeführt. Da der Programmierer aber bei der Niederschrift des Programmes noch nicht weiß, für welches Jahr die Zahl der Tage berechnet werden soll, kann er diese Anweisung nicht schon festschreiben.

Wenn das Programm läuft, ist das Jahr aber bekannt und damit ist der Ablauf dann bestimmt, wie in dem folgenden Beispiel für das Jahr 2002.

Ablauf für das Jahr 2002
> Ist 2002 ein Schaltjahr? 
> Nein, also: 
> Drucke 28

Das Jahr 2004 ist hingegen ein Schaltjahr.

Ablauf für das Jahr 2004
> Ist 2004 ein Schaltjahr? 
> Ja, also: 
> Drucke 29

Bedingte Verarbeitung

Bei der bedingten Verarbeitung  wird eine Anweisung nur unter einer bestimmten Bedingung  ausgeführt. Ob diese Bedingung zutrifft, wird dabei im Allgemeinen erst während der Verarbeitung geprüft.

Im Struktogramm wird nach der zu prüfenden Bedingung der Wert genannt, oder es wird zu einer Frage die Antwort genannt, für den die danach folgende Anweisung ausgeführt werden soll. Zur Kennzeichnung der bedingten Verarbeitung wird eine leere Alternative eingetragen. (Allgemein bedeutet ein leeres Kästchen die Nullanweisung, also die Anweisung, welche nichts bewirkt.)

Flugverhalten [Struktogramm DIN 66261 - A]
.---------------------------------. 
| Ist die Flugbahn fehlerhaft? | 
| | 
| Ja | Nein | 
|-----------------------+---------| 
| Selbstzerstoerung | | 
| auslösen | | 
'---------------------------------'

Struktogramm*

Zur Visualisierung von Verzweigungen kann man das Struktogramm (hier nach DIN 66261, vgl. ISO/IEC 8631:1989) verwenden. Die grundlegenden Anwendungen wurden oben schon gezeigt. In diesem Abschnitt werden noch einige weitere Verwendungsmöglichkeiten des Struktogrammes (und somit auch des Programmablaufs) in Zusammenhang mit Verzweigungen vorgestellt.

Die Anweisung eines Zweiges kann intern auch wieder aus mehreren Anweisungen bestehen, so enthält der Ja-Zwei in dem folgenden Struktogramm eine Sequenz-Anweisung aus der Anweisung "Tanke" und der Anweisung "Pruefe den Oelstand".

Durch die Einordnung einer Anweisung unter einen möglichen Wert eines Ausdrucks oder eine mögliche Antwort auf einer Frage, wird festgelegt, daß diese Anweisung nur dann ausgeführt werden soll, wenn der Ausdruck diesen Wert annimmt bzw. die Frage diese Antwort hat. In dem folgenden Struktogramm wird der Ölstand also nur dann mitgeprüft, wenn auch gerade getankt wurde. Die Anweisung "Fahre zum Fahrziel" erfolgt jedoch immer, auch wenn kein Tanken nötig wurde, denn sowohl der Ja-Zweig also auch der Nein-Zwei endet oberhalb dieser Anweisung.

Automobil-Fahrt [Struktogramm DIN 66261 - A]
.-------------------------------------------------------------. 
| Ist der Tank ganz oder fast leer? | 
| Ja | Nein | 
|-----------------------------------------------------|-------| 
| Tanke | | 
|-----------------------------------------------------| | 
| Pruefe den Oelstand | | 
|-------------------------------------------------------------| 
| Fahre zum Fahrziel | 
'-------------------------------------------------------------'

Es kann aber auch sein, daß der Ölstand nach dem Tanken nur geprüft werden soll, wenn er schon eine Weile nicht geprüft wurde. Dies kann durch Verschachteln  einer weiteren Prüfung in das Struktogramm eingebaut werden.

Automobil-Fahrt 1 [Struktogramm DIN 66261 - A]
.-------------------------------------------------------------. 
| Ist der Tank ganz oder fast leer? | 
| Ja | Nein | 
|-----------------------------------------------------|-------| 
| Tanke | | 
|-----------------------------------------------------| | 
| Wurde der Oelstand lange nicht geprueft? | | 
| Ja | Nein | | 
|----------------------------------------------|------| | 
| Pruefe den Oelstand | | | 
|-------------------------------------------------------------| 
| Fahre zum Fahrziel | 
'-------------------------------------------------------------'

Falls eine weitere Verschachtelung nicht mehr möglich oder nicht erwünscht ist, so kann ein Teil eines Struktogramms als separates Struktogramm „ausgelagert“ werden. Das separate Struktogramm erhält dann einen Namen und kann unter Verwendung dieses Namens an anderer Stelle „eingebaut“ werden.

In dem folgenden Struktogramm "Automobil-Fahrt 2" lautet eine Anweisung "Oel-Wartung". Es ist aber ohne weitere Erläuterungen nicht unbedingt verständlich, was damit gemeint ist. Daher wird dies in dem Struktogramm "Oel-Wartung" näher beschrieben. Je nach Bedarf könnte beispielsweise auch die Anweisung "Oelstand pruefen" in einem weiteren Struktogramm genauer beschrieben werden.

Automobil-Fahrt 2 [Struktogramm DIN 66261 - A]
.-------------------------------------------------------------. 
| Ist der Tank ganz oder fast leer? | 
| Ja | Nein | 
|-----------------------------------------------------|-------| 
| Tanken | | 
|-----------------------------------------------------| | 
| Oel-Wartung | | 
|-------------------------------------------------------------| 
| Zum Fahrziel fahren | 
'-------------------------------------------------------------'

Oel-Wartung [Struktogramm DIN 66261 - A]
.-------------------------------------------------------------. 
| Wurde der Oelstand lange nicht geprueft? | 
| Ja | Nein | 
|-----------------------------------------------------|-------| 
| Oelstand pruefen | | 
|-----------------------------------------------------| | 
| Ist der Oelstand zu niedrig? | | 
| Ja | Nein | | 
|----------------------------------------------|------| | 
| Oel wechseln | | | 
'-------------------------------------------------------------'

Von der Stefan-Ram-Startseite ausgehend finden sich oft noch mehr Informationen zu Themen, die auf einer Seite angesprochen wurden. (Eine Verbindung zur Stefan-Ram-Startseite befindet sich ganz oben auf dieser Seite.)  |   Netzpostadresse von Stefan Ram: "ram@zedat.fu-berlin.de" (ohne die Anführungszeichen)   |   Seiteninformation und Impressum  |   Formular für diese Seite betreffende Mitteilungen an den Herausgeber  |   Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram. slrprd, PbclevtugFgrsnaEnz