Fortran: FORTRAN 77: Datentypen
| <<< zur Fortran-Startseite | |
| << FORTRAN 77 | Fortran 90/95 >> |
| < Programmaufbau | Felder > |
Dieses Kapitel handelt von Datentypen, Variablen, Konstanten und der Wertzuweisung.
Datentypen
[Bearbeiten]Arithmetische Datentypen
[Bearbeiten]FORTRAN 77 unterscheidet standardmäßig zwischen vier arithmetischen Datentypen:
| Datentyp | Kommentar | Literale (Beispiele) |
|---|---|---|
INTEGER |
Ganzzahlen | 15, -6500, 200 000 000
|
REAL |
Reelle Zahlen einfacher Genauigkeit | 3.1415, -5.5, .7E3, 12.5E-5
|
DOUBLE PRECISION |
Reelle Zahlen doppelter Genauigkeit | 3.1415D0, -5.5D0, .7D3, 12.5D-5
|
COMPLEX |
Komplexe Zahlen (zwei REAL-Zahlen) | (3.1415, -5.5), (1.4, 7.1E4)
|
Logischer Datentyp
[Bearbeiten]| Datentyp | Kommentar | Literale (alle) |
|---|---|---|
LOGICAL |
Logischer Datentyp (wahr oder falsch) | .TRUE., .FALSE.
|
Manchmal sind in alten FORTRAN-Programmen auch folgende Schreibweisen zu finden, welche jedoch nicht standardkonform sind:
INTEGER*4,REAL*4,LOGICAL*4(Standardgrößen)INTEGER*1,LOGICAL*1INTEGER*2,LOGICAL*2REAL*8(entspricht DOUBLE PRECISION)COMPLEX*16(komplexe Zahlen mit zwei DOUBLE-PRECISION-Elementen)
Die Zahlen geben den Speicherplatzbedarf in Byte an.
Zeichenketten
[Bearbeiten]| Datentyp | Kommentar | Beispiel (Konstante) |
|---|---|---|
CHARACTER*n |
Zeichenkette (String) mit einer Länge von n Zeichen | 'Hallo, Welt!' |
CHARACTER |
Zeichenkette mit einer Länge von einem Zeichen (entspricht CHARACTER*1) |
'A' |
Beachte: Im Gegensatz zu vielen anderen Programmiersprachen werden Zeichenketten in FORTRAN 77 nicht in Anführungszeichen eingeschlossen, sondern in Apostrophe.
Tritt in einem String ein Apostroph auf, so muss dieses verdoppelt werden, z. B.
'Wie geht''s?'
Beispiel:
CHARACTER*5 STR STR = 'Hallo'
Alternative Schreibweise:
CHARACTER STR*5 STR = 'Hallo'
Variablen
[Bearbeiten]Eine Variable ist charakterisiert durch einen
- symbolischen Namen
- Datentyp
- Wert
- Speicherplatz
Beim Programmstart hat eine Variable keinen definierten Wert. Eine Variable kann ihren Datentyp auf zwei Arten erhalten, durch implizite oder explizite Typanweisung.
Implizite Typanweisung
[Bearbeiten]Bei der impliziten Typanweisung bestimmt der Anfangsbuchstabe des Variablenbezeichners den Datentyp.
| Anfangsbuchstabe der Variablen | Impliziter Datentyp |
|---|---|
| I, J, K, L, M oder N | INTEGER |
| alle restliche Buchstaben | REAL |
Beispiel:
0 . | 1 . 2 . 3 . 4 . 5 . 6 . 7 | . 8 12345678901234567890123456789012345678901234567890123456789012345678901234567890 |
PROGRAM BSP
B1 = 8.9
C1 = 3.
I1 = B1/C1
WRITE (*,*) I1
C Das Ergebnis ist 2, da I1 implizit als INTEGER definiert ist
END
|
12345678901234567890123456789012345678901234567890123456789012345678901234567890 0 . | 1 . 2 . 3 . 4 . 5 . 6 . 7 | . 8 |
Die Standardzuordnung der Anfangsbuchstaben kann durch das Schlüsselwort IMPLICIT auch geändert werden.
Es gibt noch ein weiteres Problem dieser impliziten Datentypzuordnung. Durch Tippfehler können unbeabsichtigt neue Variablen entstehen. Entschärft werden kann diese Tatsache durch folgende Festlegung im Vereinbarungsteil des Programms:
IMPLICIT LOGICAL (A-Z)
Dadurch werden alle Variablen mit implizit festgelegtem Datentyp automatisch zu Variablen mit logischem Datentyp. In vielen Fällen konnten so Tippfehler bei Variablennamen schnell eingegrenzt werden.
Beispiel:
0 . | 1 . 2 . 3 . 4 . 5 . 6 . 7 | . 8 12345678901234567890123456789012345678901234567890123456789012345678901234567890 |
PROGRAM BSP
IMPLICIT LOGICAL (A-Z)
REAL REE
REE = 5.8
C Tippfehler: REA anstatt REE
WRITE (*,*) REA + 2.1
END
|
12345678901234567890123456789012345678901234567890123456789012345678901234567890 0 . | 1 . 2 . 3 . 4 . 5 . 6 . 7 | . 8 |
Der Compilierungsversuch mit gfortran endet mit einer Fehlermeldung. Das sieht so aus
In file test.f:9
WRITE (*,*) REA + 2.1
1
Error: Operands of binary numeric operator '+' at (1) are LOGICAL(4)/REAL(4)
Doch Intels ifx und AMDs AOCC (flang) zeigen die Grenzen der Sinnhaftigkeit der IMPLICIT-Anweisung in der dargestellten Art und Weise beim heutigen Einsatz von FORTRAN-77-Code auf. Diese Compiler akzeptieren den Beispielcode warnhinweislos und liefern bei Programmausführung den Wert 2.1. Wirklich Abhilfe schafft also erst die IMPLICIT NONE-Anweisung. Diese legt eindeutig fest, dass ausschließlich die explizite Datentypfestlegung Verwendung finden soll. Allerdings ist IMPLICIT NONE erst ab Fortran-90/95 Standard.
Explizite Typanweisung
[Bearbeiten]Durch die Vorgabe von
| datentyp variablenbezeichner |
im Vereinbarungsteil des Programms wird der Datentyp einer Variablen explizit festgelegt. Die explizite Typanweisung hat gegenüber der impliziten Typanweisung Vorrang.
Beispiel:
0 . | 1 . 2 . 3 . 4 . 5 . 6 . 7 | . 8 12345678901234567890123456789012345678901234567890123456789012345678901234567890 |
PROGRAM BSP
IMPLICIT LOGICAL (A-Z)
REAL B
REAL C
REAL I
B = 8.9
C = 3.
I = B/C
WRITE (*,*) I
C Das Ergebnis ist 2.966666
END
|
12345678901234567890123456789012345678901234567890123456789012345678901234567890 0 . | 1 . 2 . 3 . 4 . 5 . 6 . 7 | . 8 |
Benannte Konstanten
[Bearbeiten]Benannte Konstanten können durch das PARAMETER-Schlüsselwort festgelegt werden.
CHARACTER*5 STR PARAMETER (PI=3.1415, PIFAK=PI/2., STR='Hallo')
Der zugewiesene Wert kann eine Konstante (Literal) oder eine schon definierte benannte Konstante sein. Der Datentyp muss vorher vereinbart werden oder ist implizit bekannt.
Für Zeichenketten ist im Zusammenwirken mit PARAMETER auch eine *-Schreibweise möglich. Dies erspart die explizite Angabe der Stringlänge.
Beispiel:
0 . | 1 . 2 . 3 . 4 . 5 . 6 . 7 | . 8 12345678901234567890123456789012345678901234567890123456789012345678901234567890 |
PROGRAM BSP
CHARACTER*(*) A
PARAMETER (A = 'Jetzt wird auch die Stringlaenge festgelegt')
WRITE (*,*) A
C Ausgabe: Jetzt wird auch die Stringlaenge festgelegt
END
|
12345678901234567890123456789012345678901234567890123456789012345678901234567890 0 . | 1 . 2 . 3 . 4 . 5 . 6 . 7 | . 8 |
Wertzuweisung
[Bearbeiten]Wertzuweisungen haben wir schon kennengelernt:
| variable = ausdruck |
Beispiel:
K = 1 K = K + 2
Die Wertzuweisung an eine Variable ist, wie am vorigen Beispiel und auch nachfolgend zu ersehen, nicht zu verwechseln mit einer mathematischen Gleichung. Der Ausdruck
K + 2 = 5
wäre zwar mathematisch korrekt. Als Wertzuweisung in einem FORTRAN-Programm ist dies aber keine gültige Formulierung. K + 2 ist kein zulässiger Ausdruck auf der linken Seite des Zuweisungsoperators (L-Wert).
Beachte: In FORTRAN 77 ist auch keine Kette von Wertzuweisungen möglich. Der folgende Ausdruck ist in FORTRAN 77 nicht erlaubt und liefert eine Fehlermeldung.
I = J = K = 1.5 C Fehler!
| <<< zur Fortran-Startseite | |
| << FORTRAN 77 | Fortran 90/95 >> |
| < Programmaufbau | Felder > |