====== 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. Für den Vergleich von [[string|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). ===== 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 () , , 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 () 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 () then c code else 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 () case () c code case () 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.