Zum Inhalt springen

Fortran: FORTRAN 77: Verzweigungen und Schleifen

Aus Wikibooks
<<< zur Fortran-Startseite
<< FORTRAN 77 Fortran 90/95 >>
< Stringoperationen Standardfunktionen >

GOTO bewirkt einen Sprung zu einer bestimmten Anweisungsnummer.

Beispiel:

0   . |  1    .    2    .    3    .    4    .    5    .    6    .    7 |  .    8  
12345678901234567890123456789012345678901234567890123456789012345678901234567890
      PROGRAM BSP
      
      GOTO 100
      WRITE (*,*) 'Hallo'
 100  WRITE (*,*) 'Welt'  
C  Ausgabe: Welt
 
      END
12345678901234567890123456789012345678901234567890123456789012345678901234567890
0   . |  1    .    2    .    3    .    4    .    5    .    6    .    7 |  .    8  

CONTINUE

[Bearbeiten]

CONTINUE ermöglicht bei Anweisungsnummern eine „leere“ Anweisung.

Beispiel:

0   . |  1    .    2    .    3    .    4    .    5    .    6    .    7 |  .    8  
12345678901234567890123456789012345678901234567890123456789012345678901234567890
      PROGRAM BSP
      
      GOTO 100
      WRITE (*,*) 'Hallo'
 100  CONTINUE
C  keine Ausgabe
 
      END
12345678901234567890123456789012345678901234567890123456789012345678901234567890
0   . |  1    .    2    .    3    .    4    .    5    .    6    .    7 |  .    8  

Bedingtes GOTO

[Bearbeiten]

Beim bedingten GOTO ist in Abhängigkeit von einer Integer-Variablen der Sprung zu einer bestimmten Anweisungsnummer möglich.

Beispiel: Eine „Switch“-Verzweigung

0   . |  1    .    2    .    3    .    4    .    5    .    6    .    7 |  .    8  
12345678901234567890123456789012345678901234567890123456789012345678901234567890
      PROGRAM BSP
    
      INTEGER I
   
      I=2
      GOTO (100, 200, 300), I
 100  WRITE (*,*) 'Hallo 1'
      GOTO 1000
 200  WRITE (*,*) 'Hallo 2'
      GOTO 1000
 300  WRITE (*,*) 'Hallo 3'
 1000 CONTINUE
C  Ausgabe: Hallo 2
 
      END
12345678901234567890123456789012345678901234567890123456789012345678901234567890
0   . |  1    .    2    .    3    .    4    .    5    .    6    .    7 |  .    8  

IF-Verzweigungen

[Bearbeiten]

Der IF-Einzeiler

[Bearbeiten]
IF (logischer ausdruck) anweisung

Beispiel:

0   . |  1    .    2    .    3    .    4    .    5    .    6    .    7 |  .    8  
12345678901234567890123456789012345678901234567890123456789012345678901234567890
      PROGRAM BSP
     
      INTEGER I
   
      I=2
      IF (I .EQ. 2) WRITE (*,*) 'Hallo'
C  Ausgabe: Hallo
 
      END
12345678901234567890123456789012345678901234567890123456789012345678901234567890
0   . |  1    .    2    .    3    .    4    .    5    .    6    .    7 |  .    8  

IF-THEN

[Bearbeiten]
 IF (logischer ausdruck) THEN
   anweisungsblock
 END IF

Beispiel:

0   . |  1    .    2    .    3    .    4    .    5    .    6    .    7 |  .    8  
12345678901234567890123456789012345678901234567890123456789012345678901234567890
      PROGRAM BSP
     
      INTEGER I
   
      I=2
      IF (I .EQ. 2) THEN
        WRITE (*,*) 'Hallo'
      END IF
C  Ausgabe: Hallo
 
      END
12345678901234567890123456789012345678901234567890123456789012345678901234567890
0   . |  1    .    2    .    3    .    4    .    5    .    6    .    7 |  .    8  

IF-THEN-ELSE

[Bearbeiten]
IF (logischer ausdruck) THEN
  if-anweisungsblock
ELSE
  else-anweisungsblock
END IF

Beispiel:

0   . |  1    .    2    .    3    .    4    .    5    .    6    .    7 |  .    8  
12345678901234567890123456789012345678901234567890123456789012345678901234567890
      PROGRAM BSP
    
      INTEGER I
    
      I=333
      IF (I .GE. 444) THEN
        WRITE (*,*) 'Hallo'
      ELSE
        WRITE (*,*) 'Hola' 
      END IF
C  Ausgabe: Hola
 
     END
12345678901234567890123456789012345678901234567890123456789012345678901234567890
0   . |  1    .    2    .    3    .    4    .    5    .    6    .    7 |  .    8  

ELSE-IF

[Bearbeiten]
IF (logischer ausdruck 1) THEN
  if-anweisungsblock 1
ELSE IF (logischerAusdruck 2) THEN
  if-anweisungsblock 2
ELSE IF (logischerAusdruck n) THEN
  if-anweisungsblock n
ELSE
  else-anweisungsblock
END IF
0   . |  1    .    2    .    3    .    4    .    5    .    6    .    7 |  .    8  
12345678901234567890123456789012345678901234567890123456789012345678901234567890
      PROGRAM BSP
       
      INTEGER I

      I = 2
      IF (I .EQ. 1) THEN
          WRITE (*,*) 'I ist eins'
      ELSE IF (I .EQ. 2) THEN
          WRITE (*,*) 'I ist zwei'
      ELSE
          WRITE (*,*) 'Ich weiß nicht was I ist'
      END IF
C Ausgabe: I ist zwei
 
      END
12345678901234567890123456789012345678901234567890123456789012345678901234567890
0   . |  1    .    2    .    3    .    4    .    5    .    6    .    7 |  .    8  

DO-Schleifen

[Bearbeiten]

Die DO-Schleife (Zählschleife) ist die einzige Schleife die FORTRAN 77 standardmäßig kennt.

       DO nr zählvariable = startwert, endwert [, schrittweite]
          anweisungsblock
  nr   CONTINUE

Beispiel:

0   . |  1    .    2    .    3    .    4    .    5    .    6    .    7 |  .    8  
12345678901234567890123456789012345678901234567890123456789012345678901234567890
      PROGRAM BSP
    
      INTEGER I
  
      DO 100 I = 1, 10  
        WRITE (*,*) I
 100  CONTINUE     
C  Zeilenweise Ausgabe der Zahlen 1 bis 10
      END
12345678901234567890123456789012345678901234567890123456789012345678901234567890
0   . |  1    .    2    .    3    .    4    .    5    .    6    .    7 |  .    8  

Weitere Schleifen

[Bearbeiten]

Da FORTRAN 77 keine weiteren Schleifen kennt, müssen diese mit Hilfe einer IF-Verzweigung und einem GOTO-Befehl nachgebildet werden. Prominente Beispiele aus anderen Programmiersprachen sind die While-Schleife und die Do-While-Schleife.

While-Schleife (kopfgesteuerte Schleife)

[Bearbeiten]

Beispiel:

0   . |  1    .    2    .    3    .    4    .    5    .    6    .    7 |  .    8  
12345678901234567890123456789012345678901234567890123456789012345678901234567890
      PROGRAM BSP
    
      INTEGER I
   
      I=0
  
 10   IF(I .LT. 5) THEN
        WRITE (*,*) I
        I = I + 1
        GOTO 10
      END IF  
C  Die Zahlen 0 bis 4 werden ausgegeben
 
      END
12345678901234567890123456789012345678901234567890123456789012345678901234567890
0   . |  1    .    2    .    3    .    4    .    5    .    6    .    7 |  .    8  

Do-While-Schleife (fußgesteuerte Schleife)

[Bearbeiten]

Beispiel:

0   . |  1    .    2    .    3    .    4    .    5    .    6    .    7 |  .    8  
12345678901234567890123456789012345678901234567890123456789012345678901234567890
      PROGRAM BSP
    
      INTEGER I
  
      I=6
  
 10   CONTINUE
        WRITE (*,*) I
        I = I + 1
      IF (I .LT. 5) GOTO 10  
C  Die Zahl 6 wird ausgegeben
 
      END
12345678901234567890123456789012345678901234567890123456789012345678901234567890
0   . |  1    .    2    .    3    .    4    .    5    .    6    .    7 |  .    8  

Implizite Schleife

[Bearbeiten]

Bei Eingabe oder Ausgabe ist die Angabe einer impliziten Schleife möglich.

Beispiel:

0   . |  1    .    2    .    3    .    4    .    5    .    6    .    7 |  .    8  
12345678901234567890123456789012345678901234567890123456789012345678901234567890
      PROGRAM BSP
    
      INTEGER I
  
      WRITE (*,*) ('Hallo', I = 1, 10)
C  Ausgabe: HalloHalloHalloHalloHalloHalloHalloHalloHalloHallo
 
      END
12345678901234567890123456789012345678901234567890123456789012345678901234567890
0   . |  1    .    2    .    3    .    4    .    5    .    6    .    7 |  .    8  

Die STOP-Anweisung beendet das Programm.

Beispiel:

0   . |  1    .    2    .    3    .    4    .    5    .    6    .    7 |  .    8  
12345678901234567890123456789012345678901234567890123456789012345678901234567890
      PROGRAM BSP
    
      WRITE (*,*) 'Vor Stop-Statement'
      STOP
      WRITE (*,*) 'Nach Stop-Statement'
C  Ausgabe: Vor Stop-Statement
 
      END
12345678901234567890123456789012345678901234567890123456789012345678901234567890
0   . |  1    .    2    .    3    .    4    .    5    .    6    .    7 |  .    8  

<<< zur Fortran-Startseite
<< FORTRAN 77 Fortran 90/95 >>
< Stringoperationen Standardfunktionen >