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
BearbeitenFü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
BearbeitenREAL 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
BearbeitenINTEGER MAXIND PARAMETER (MAXIND=10) REAL ARR(MAXIND)
Hier erfolgt die Festlegung der Feldgröße über eine benannte Konstante.
Variante 4: Explizite Angabe der Indexgrenzen
BearbeitenREAL 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
Bearbeiten0 . | 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
BearbeitenFü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
Bearbeiten0 . | 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
BearbeitenDie 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 > |