Dies ist eine alte Version des Dokuments!


Verzweigungen

Verzweigungen und Schleifen sind Grundbestandteil eines jeden Programms. Durch Verzweigungen ist es möglich den Programmlauf anhand von Werten von Variablen zu steuern, mit Schleifen ist es möglich Teile des Programms mehrmals auszuführen.

Logische Ausdrücke

Ab Fortran IV wurden logische Ausdrücke in Fortran integriert. In Fortran 90 wurden dann die Schlüsselworte durch die mathematischen Symbole ersetzt:

Bedeutung Fortran IV Fortran 90
kleiner als .LT. <
größer als .GT. >
kleiner gleich .LE. <=
größer gleich .GE. >=
gleich .EQ. ==
ungleich .NE. /=

Außerdem können logische Ausdrücke verknüpft werden durch folgende logische Operatoren:

Bedeutung Operator
UND .AND.
ODER .OR.
Equivalenz .EQV.
Nicht equivalent (XOR) .NEQV.

Equivalenz gibt dann True zurück, wenn beide Ausdrücke True sind oder wenn beide Ausdrücke False sind (also die Ausdrücke müssen gleich sein).

Verzweigungen

frühes Fortran

Die Verwendung dieser Version von if wird nicht empfohlen!

In frühen Versionen von Fortran gab es die folgende Möglichkeit ein if-Statement zu schreiben (dabei sind m1, m2 und m3 Sprungmarken):

      if (<arithmetischer ausdruck>) <m1>, <m2>, <m3>

Beispiel:

c     Programmcode
      INTEGER c 10
      if (c) 1, 2, 3
1     write(*,*) "<0"
      goto 4
2     write (*,*) "=0"
      goto 4
3     write (*,*) ">0"
4     CONTINUE

Diese if-Verzweigung überprüft, ob der Wert in Klammern größer, gleich oder kleiner als Null ist. Ist er kleiner, wird zur ersten Marke gesprungen, ist er genau 0, so wird zur zweiten Marke gesprungen, ansonsten zur dritten. Die Marken dürfen identisch sein. Als Marken werden ganze, vorzeichnlose Zahlen verwendet, in in den Spalten 1 bis 5 im Fortrancode stehen (die wir bislang freigelassen hatten).

Die goto Anweisung ist eine Sprunganweisung, die zur dahinter stehenden Sprungmarke springt, später mehr. CONTINUE ist eine Dummy-Anweisung, die nichts tut (siehe pass in Python). Dabei wird lediglich angezeigt, dass Code steht (damit der Compiler nicht meckert), die Anweisung hat aber keinen Effekt.

Fortan IV

In Fortran IV war es möglich genau eine Anweisung zu verwenden hinter einer if-Bedingung. Es gab allerdings noch kein else:

      if (<logischer ausdruck>) <anweisung>

Die Anweisung durfte auch eine goto oder call-Anweisung sein.

ab Fortran 77

Ab Fortran 77 war es möglich mit if Blöcke zu bilden. Außerdem wurde ein ELSE hinzugefügt, sodass auch mehrere Fälle möglich wurden:

      if (<logischer Ausdruck>) then
c       code
      else if (<logischer Ausdruck) then
c       code
      else 
c       mehr Code
      end if

Die ELSE-Zweige dürfen fehlen.

Select-Case

Es ist auch möglich mit einer Select-Case Anweisung den Ablauf zu steuern. Dabei wird ein skalarer Wert (INTEGER, CHARACTER, LOGICAL) untersucht. Die Fälle müssen sich gegenseitig ausschließen, dh. es wird immer maximal ein Fall ausgeführt:

      select case (<skalarer Ausdruck>)
      case (<w1>)
c       code
      case (<w2>)
c       code
      case default
c        default-code
      end select

Aks Werte sind auch Aufzählungen oder Intervalle möglich, bspw:

      case (1,3,5)
c       oder
      case (:-1) ! also alle Zahlen < -1

Es werden nur die Anweisungen ausgeführt, die auf die erste Auswahl passen! Ein explizites Unterbrechen (wie in C mittels break) ist in Fortran nicht nötig.