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.