Fortran: FORTRAN 77: Felder

<<< zur Fortran-Startseite
<< FORTRAN 77 Fortran 90/95 >>
< Datentypen Arithmetische Ausdrücke >

Bei allem, was mehr oder weniger wie ein Vektor, eine Matrix oder eine sonstige Aneinanderreihung von gleichartigen Elementen aussieht, kann der Einsatz von Feldern (Arrays) sinnvoll sein.

Eindimensionale Felder

Bearbeiten

Für die Deklaration von eindimensionalen Feldern gibt es mehrere Möglichkeiten. Die Feldgrenzen müssen konstante Werte sein. Die Varianten werden nun anhand von Beispielen gezeigt.

Variante 1: Einfach

Bearbeiten
REAL ARR(10)

Beachte: Der Feldindex läuft hier von 1 bis 10 und nicht von 0 bis 9, wie es bei vielen modernen Hochsprachen der Fall ist.

Variante 2: Das DIMENSION-Schlüsselwort

Bearbeiten
REAL ARR
DIMENSION ARR(10)

Variante 3: Verwendung von benannten Konstanten

Bearbeiten
INTEGER MAXIND                    
PARAMETER (MAXIND=10)                   
REAL ARR(MAXIND)

Hier erfolgt die Festlegung der Feldgröße über eine benannte Konstante.

Variante 4: Explizite Angabe der Indexgrenzen

Bearbeiten
REAL ARR(0:9)

Hier wird Unter- und Obergrenze explizit angegeben. Der Index läuft nun von 0 bis 9. Auch negative Werte für die Indizes sind möglich, z. B.

REAL ARR(-4:5)

Beispiel

Bearbeiten
0   . |  1    .    2    .    3    .    4    .    5    .    6    .    7 |  .    8  
12345678901234567890123456789012345678901234567890123456789012345678901234567890
      PROGRAM BSP
 
      INTEGER MAXIND                    
      PARAMETER (MAXIND=10)                   
      REAL ARR(MAXIND)
C ACHTUNG! Array startet mit dem Index 1 
C ARR(0) waere ein Fehler!       
      ARR(1) = 1.5
      ARR(2) = 2.5          
      ARR(10) = 10.5  
 
      WRITE (*,*) ARR(1) 
C  1.5 wird ausgegeben       
 
      WRITE (*,*) ARR(10) 
C  10.5 wird ausgegeben       

      END
12345678901234567890123456789012345678901234567890123456789012345678901234567890
0   . |  1    .    2    .    3    .    4    .    5    .    6    .    7 |  .    8  


Ein

WRITE (*,*) ARR

listet den gesamten Feldinhalt.

1.500000       2.500000       0.000000      3.9876625E-34   0.000000      3.9902670E-34 -2.7682916E-05  
-2.7269103E-05 -2.9040850E-05   10.50000

Im Beispielsfall wurden die Feldelemente ARR(3) bis ARR(9) nicht explizit vorbelegt. Sie sind deshalb undefinierten Inhalts und können bei jedem Programmaufruf andere Werte annehmen.

Mehrdimensionale Felder

Bearbeiten

Für mehrdimensionale Felder gelten die gleichen Varianten wie für eindimensionale Felder. Standardmäßig kann ein Feld bis zu sieben Dimensionen besitzen. Die Speicherreihenfolge ist spaltenorientiert. Das bedeutet, der erste Index variiert am schnellsten:  

 

Beispiel: Ein 2-dimensionales Feld

Bearbeiten
0   . |  1    .    2    .    3    .    4    .    5    .    6    .    7 |  .    8  
12345678901234567890123456789012345678901234567890123456789012345678901234567890
      PROGRAM BSP                                
 
      CHARACTER*10 ARR(0:9, 2:5)              
 
      ARR(0, 2) = 'Hallo'            
      ARR(1, 2) = 'Welt' 
C  ...         
      ARR(9, 5) = 'Universum'         

      WRITE (*,*) ARR(0, 2) 
C  Hallo  
 
      WRITE (*,*) ARR(9, 5) 
C  Universum       
 
      END
12345678901234567890123456789012345678901234567890123456789012345678901234567890
0   . |  1    .    2    .    3    .    4    .    5    .    6    .    7 |  .    8  

Beispiel: Spaltenorientierte Speicherreihenfolge

Bearbeiten

Die 3×3-Matrix   soll in ein Fortran-Programm eingelesen und wieder komplett ausgegeben werden. Zusätzlich soll auch der Wert des Feldelementes a23 (2. Zeile, 3.Spalte, Wert = -2) separat ausgegeben werden.

0   . |  1    .    2    .    3    .    4    .    5    .    6    .    7 |  .    8  
12345678901234567890123456789012345678901234567890123456789012345678901234567890
      PROGRAM BSP
 
      INTEGER ARR(3,3)

C Feldelemente einlesen
      WRITE (*,*) 'Werte (spaltenorientierte Eingabe):'
      READ (*,*) ARR
 
C Komplettes Feld ausgeben 
      WRITE (*,*) 'Gesamtfeld = ' , ARR 

C  a23 ausgeben
      WRITE (*,*) 'a23 = ', ARR(2,3) 

      END
12345678901234567890123456789012345678901234567890123456789012345678901234567890
0   . |  1    .    2    .    3    .    4    .    5    .    6    .    7 |  .    8  

Ein-/Ausgabe:

 Werte (spaltenorientierte Eingabe):
1
40
-1
-5
3
9
0
-2
65
 Gesamtfeld =            1          40          -1          -5           3           9           0          
     -2          65
 a23 =           -2

<<< zur Fortran-Startseite
<< FORTRAN 77 Fortran 90/95 >>
< Datentypen Arithmetische Ausdrücke >