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