next up previous contents
Nächste Seite: CASE - Konstrukt Aufwärts: Kontrollstrukturen (Konstrukte) Vorherige Seite: CYCLE und EXIT   Inhalt

IF - Konstrukt

Im Prinzip gibt es 2 IF-Konstrukte:
den IF-THEN-ENDIF - Block und die IF-Anweisung

IF (bedingung) anweisung
falls 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.

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


next up previous contents
Nächste Seite: CASE - Konstrukt Aufwärts: Kontrollstrukturen (Konstrukte) Vorherige Seite: CYCLE und EXIT   Inhalt
Reinfried O. Peter 2001-09-07