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.
Ab Fortran IV wurden logische Ausdrücke in Fortran integriert. In Fortran 90 wurden dann die Schlüsselworte durch die mathematischen Symbole ersetzt. Für den Vergleich von Zeichenketten gibt es besondere Funktionen, die berechnen, ob eine Zeichenkette lexikalisch vor der anderen steht. Hier sind nur die Ausdrücke für Zahlenwerte dargestellt:
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).
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.
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 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.
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.