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*1
INTEGER*2
,LOGICAL*2
REAL*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 g77, gfortran und g95 endet mit einer Fehlermeldung. Bei gfortran sieht das 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 der Intel Fortran Compiler 9.0 zeigt die Grenzen der Sinnhaftigkeit der IMPLICIT
-Anweisung in der dargestellten Art und Weise beim heutigen Einsatz von FORTRAN-77-Code auf. Dieser Compiler akzeptiert den Beispielcode warnhinweislos und liefert 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. In einigen noch erhältlichen FORTRAN-77-Compilern, wie dem g77, ist diese Anweisung im Vorgriff auf den genannten neueren Standard bereits implementiert.
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 > |