next up previous contents
Nächste Seite: CASE-Verzweigung Aufwärts: Verzweigungen Vorherige Seite: Verzweigungen   Inhalt

Block-IF-Strukturen

Sollen in Abhängigkeit von einer Bedingung mehrere Anweisungen ausgeführt werden, so verwenden wir das Block-IF.


\begin{picture}(120.00,40.00)
\unitlength=1.00mm
\linethickness{0.75pt}\put(0.00...
...,25.00){\line(4,1){60.00}}
\put(120.00,40.00){\line(-1,0){120.00}}
\end{picture}

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 ($expr$) THEN

$Anweisungen\ wenn\ expr\ den\ Wert\ wahr\ hat$

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.

=1.00mm
\begin{picture}(120.00,39.00)
\put(0.00,0.00){\line(1,0){120.00}}
\put(0.00,24.0...
...0.00,0.00){\line(0,1){39.00}}
\put(120.00,0.00){\line(0,1){39.00}}
\end{picture}

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 $x \ge 0$ 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 $x < 0$, 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.

=1mm
\begin{picture}(120.00,30.00)
\put(0.00,0.00){\line(1,0){120.00}}
\put(120.00,0....
...n A1}}}
\put(90.00,12.00){\makebox(0,0)[cc]{{\it Anweisungen A2}}}
\end{picture}

Die Umsetzung in FORTRAN lautet allgemein:

IF ($Bedingung$) THEN

$Anweisungen\ A1\ wenn\ Bedingung\ erf\uml {u}llt \ ist$

ELSE

$Anweisungen\ A2\ wenn\ Bedingung\ nicht\ erf\uml {u}llt \ ist$

ENDIF

Bedingung ist ein logischer Ausdruck. Ist sein Wert $wahr $, wird der Block mit den Anweisungen $A1 $ ausgeführt, ist sein Wert $falsch$, dann wird der Block mit den Anweisungen $A2$ ausgeführt.

Beispiel:


\begin{picture}(120.00,40.00)
\put(120.00,0.00){\line(0,1){40.00}}
\put(120.00,4...
....00,25.00){\line(1,0){120.00}}
\put(60.00,0.00){\line(0,1){25.00}}
\end{picture}

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 $x \ge 0$ 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.


\begin{picture}(120.67,40.09)
\put(0.00,0.00){\line(1,0){120.00}}
\put(120.00,0....
...[lb]{{\it B4}}}
\put(108.00,10.00){\makebox(0,0)[cb]{{\it sonst}}}
\end{picture}

Dieses Konstrukt wird wie folgt umgesetzt:

IF ($Bedingung\ B1$) THEN

$Anweisungen\ A1\ wenn\ B1\ erf\uml {u}llt\ ist$

ELSEIF ($Bedingung\ B2$) THEN

$Anweisungen\ A2\ wenn\ B2\ erf\uml {u}llt\ ist$

ELSEIF ($Bedingung\ B3$) THEN

$Anweisungen\ A3\ wenn\ B3\ erf\uml {u}llt\ ist$

ELSEIF ($Bedingung\ B4$) THEN

$Anweisungen\ A4\ wenn\ B4\ erf\uml {u}llt\ ist$

ELSE

$Anweisungen\ Asonst\ wenn\ keine\ der\ anderen\ Bedingungen\ erf\uml {u}llt\ sind$

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:

=1.2mm
\begin{picture}(120.00,50.00)
\put(120.00,0.00){\line(0,1){50.00}}
\put(120.00,5...
....00){\makebox(0,0)[lb]{{\it\small 'Radikand negativ'}}}
\normalsize\end{picture}
=1.0mm

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.


next up previous contents
Nächste Seite: CASE-Verzweigung Aufwärts: Verzweigungen Vorherige Seite: Verzweigungen   Inhalt
Lars Tornow 2003-03-31