Sollen in Abhängigkeit von einer Bedingung mehrere Anweisungen ausgeführt werden, so verwenden wir das Block-IF.
Eine Block-IF-Struktur beginnt mit einer Block-IF-Anweisung und endet mit einer ENDIF-Anweisung. Dazwischen steht ein Block von ausführbaren Anweisungen:
IF () THEN
ENDIF
Darin ist expr ein logischer Ausdruck.
Ein Beispiel für die einfachste Form einer Block-IF-Struktur: wir erweitern das obige Beispiel der Wurzelberechnung um die Ausgabe des Wertes der Wurzel auf dem Bildschirm.
Dies läßt sich wie folgt umsetzen:
IF (x .GE. 0.0) THEN wurz = SQRT (x) PRINT*, 'Die Wurzel ist:', wurz ENDIF
Wenn die Bedingung erfüllt
ist, dann wird die Wurzel berechnet,
und das Ergebnis wird zusammen mit einem
Kommentar ausgedruckt.
Anschließend wird die auf die
ENDIF-Anweisung folgende Anweisung
ausgeführt. Ist der logische Ausdruck
falsch, also
, dann wird sofort
mit der auf das ENDIF folgenden
Anweisung fortgefahren.
Um zwei alternative Anweisungsblöcke programmieren zu können, verwendet man die ELSE-Anweisung in der Block-IF-Struktur.
Die Umsetzung in FORTRAN lautet allgemein:
IF () THEN
ELSE
ENDIF
Bedingung ist ein logischer
Ausdruck. Ist sein Wert , wird
der Block mit den Anweisungen
ausgeführt, ist sein Wert
,
dann wird der Block mit den
Anweisungen
ausgeführt.
Beispiel:
Das Struktogramm kann wie folgt umgesetzt werden:
IF (x .GE. 0.0) THEN wurz = SQRT (x) PRINT*, 'Die Wurzel ist:', wurz ELSE PRINT*, 'Fehler: Der Radikand ist negativ!' ENDIF
Je nachdem ob wahr oder
falsch ist, wird entweder die Wurzel
berechnet und ausgedruckt, oder es wird
eine Fehlermeldung ausgegeben.
Wird beim Abarbeiten eines Blockes ELSE oder ENDIF angetroffen, ist damit der betreffende Block abgeschlossen, und es wird mit der auf ENDIF folgenden Anweisung fortgesetzt.
Für den Fall der allgemeinen Auswahlanweisung lassen sich mehr als zwei alternative Anweisungsblöcke mit einer oder mehreren ELSEIF-Anweisungen realisieren.
Dieses Konstrukt wird wie folgt umgesetzt:
IF () THEN
ELSEIF () THEN
ELSEIF () THEN
ELSEIF () THEN
ELSE
ENDIF
Von den hier fünf IF-Blöcken wird höchstens einer ausgeführt. Die logischen Ausdrücke Bedingung Bn werden der Reihe nach ausgewertet, bis einer mit dem Wert wahr gefunden wird. Dann wird mit der ersten Anweisung des zugehörigen IF-Blocks fortgefahren. Wenn dieser IF-Block abgearbeitet ist (oder der zugehörige Block leer sein sollte), wird mit der dem ENDIF folgenden Anweisung weitergemacht.
Um alle möglichen Fälle in der Auswahlanweisung zu erfassen, kann man dies mit der zusätzlichen ELSE-Anweisung in der Block-IF-Struktur erreichen. Sie muß dem letzten ELSEIF folgen. Ist keiner der logischen Ausdrücke Bn wahr, wird mit dem auf ELSE folgenden Block fortgefahren.
Als Beispiel diene wieder die Wurzelberechnung von oben, diesmal mit noch mehr Ausgabekomfort. Als Struktogramm könnte das so aussehen:
Die Umsetzung in FORTRAN könnte dann so erfolgen:
IF (x .GT. 0.0) THEN wurz = SQRT (x) PRINT*, 'Die Wurzel ist', wurz ELSEIF (x .EQ. 0.0) THEN PRINT*, 'Die Wurzel ist: 0.0' ELSEIF (x .LT. 0.0) THEN PRINT*, 'Fehler: Der Radikand ist negativ!' ELSE PRINT*, 'Dieser Fall kann gar nicht auftreten!' ENDIF
Hier wird nacheinander überprüft, ob die Zahl größer, gleich, oder kleiner Null ist. Trifft einer dieser Fälle zu, wird eine Meldung und gegebenenfalls das Ergebnis ausgegeben. In allen anderen Fällen (solche kann es eigentlich gar nicht geben) wird eine Meldung mit Hinweis auf die Unmöglichkeit des Ereignisses ausgegeben.