Im Prinzip gibt es 2 IF-Konstrukte:
den IF-THEN-ENDIF - Block und die IF-Anweisung
IF (bedingung) anweisungfalls die Bedingung "bedingung" den Wert .TRUE. annimmt, wird die Anweisung "anweisung" ausgeführt, sonst nicht.
[name:] IF (bedingung) THEN anweisungen [ELSE IF (bedingung) THEN [name] anweisungen] ... [ELSE [name] anweisungen] END IF [name]
Ein Beispiel eines einfachen Programms mit Kontrollstrukturen (DO und IF):
Aufgabenstellung:
Gesucht ist ein Programm, das zu gegebenen 3 Zahlen feststellt,
ob ein Dreieck mit diesen Seitenlängen existiert und falls ja,
welche Art von Dreieck es ist.
Initialisierung DO lies Dreiecksseiten a, b, c IF (Ende) EXIT teste ob gültiges Dreieck IF (gültiges Dreieck) THEN Test auf Gleichseitigkeit IF (kein gleichseitiges Dreieck) THEN Test auf spitze Gleichschenkeligkeit Test auf stumpfe Gleichschenkeligkeit IF (nicht gleichschenkelig) oder (stumpf) THEN Test auf Rechtwinkeligkeit IF (nicht rechtwinkelig) allgemeines Dreieck ENDIF ENDIF ENDIF ENDDO
teste ob gültiges Dreieck:
sortiere die Eingabe längste Seite < kürzeste + mittlere Seite
PROGRAM Dreieck !-------------------------------------------------------------------------- ! testet ob drei Zahlen ein Dreieck repraesentieren und wenn ja, welches. ! ! Test ob Dreieck vorliegt: laengste Seite musz kuerzer als die Summe der ! ! beiden kuerzeren sein! ! !-------------------------------------------------------------------------- IMPLICIT NONE REAL :: a, b, c ! Seitenlaengen REAL :: lang, mitte, kurz ! geordnete Seitenlaengen INTEGER :: ios ! Eingabe-Status DO WRITE (*,'(a)',ADVANCE='NO') 'Geben Sie 3 Zahlen ein: ' READ (*,*,IOSTAT=ios) a, b, c IF (ios > 0) THEN CYCLE ! Fehlerhafte Eingabe -> lies Zahlen neu ein ELSE IF (ios < 0) THEN EXIT ENDIF !-- beginne zu sortieren, koennte schoener als Subroutine realisiert werden -- IF (a >= b) THEN IF (a >= c) THEN lang = a IF (b >= c) THEN kurz = c mitte = b ELSE kurz = b mitte = c ENDIF ELSE lang = c mitte = a kurz = b ENDIF ELSE IF (b >= c) THEN lang = b IF (a >= c) THEN kurz = c mitte = a ELSE kurz = a mitte = c ENDIF ELSE lang = c mitte = b kurz = a ENDIF ENDIF !-- beginne auszuwerten -- IF ((kurz <= 0.0) .OR. (lang >= mitte + kurz)) THEN WRITE (*,'(3(A1,F5.2),A26)') '(',a,',',b,',',c,') ist kein Dreieck!' ELSE WRITE (*,*) 'geordnete Seitenlaengen: ', lang, mitte, kurz IF (lang == mitte) THEN IF (mitte == kurz) THEN WRITE (*,*) 'gleichseitiges Dreieck' ELSE WRITE (*,*) 'gleichschenkeliges spitzes Dreieck' ENDIF ELSE IF ((mitte == kurz) .AND. (lang**2 == kurz**2 + mitte**2)) THEN WRITE (*,*) 'gleichschenkeliges rechtwinkeliges Dreieck' ELSE IF (mitte == kurz) THEN WRITE (*,*) 'gleichschenkeliges stumpfes Dreieck' ELSE IF (lang**2 == kurz**2 + mitte**2) THEN WRITE (*,*) 'rechtwinkeliges Dreieck' ELSE WRITE (*,*) 'allgemeines Dreieck' ENDIF ENDIF ENDIF ENDDO WRITE (*,*) 'Programm wurde beendet! ' END PROGRAM Dreieck