Fortran: FORTRAN 77: Vergleichsausdrücke
<<< zur Fortran-Startseite | |
<< FORTRAN 77 | Fortran 90/95 >> |
< Logische Ausdrücke | Stringoperationen > |
Zum Vergleichen zweier arithmetischer Ausdrücke oder von Strings gibt es in FORTRAN 77 Vergleichsoperatoren. Das Ergebnis eines Vergleichs ist immer logischer Wert (.TRUE.
oder .FALSE.
).
Vergleichsoperatoren für arithmetische Typen
BearbeitenOperator | Kommentar | Mathematische Entsprechung |
---|---|---|
A .LT. B |
less than (kleiner als) | |
A .LE. B |
less equal (kleiner gleich) | |
A .GT. B |
greater than (größer als) | |
A .GE. B |
greater equal (größer gleich) | |
A .EQ. B |
equal (gleich) | |
A .NE. B |
not equal (ungleich) |
Beispiel:
0 . | 1 . 2 . 3 . 4 . 5 . 6 . 7 | . 8 12345678901234567890123456789012345678901234567890123456789012345678901234567890 |
PROGRAM BSP INTEGER A, B A = 5 B = 6 WRITE (*,*) A .LT. B C Ausgabe: T END |
12345678901234567890123456789012345678901234567890123456789012345678901234567890 0 . | 1 . 2 . 3 . 4 . 5 . 6 . 7 | . 8 |
Beispiel:
0 . | 1 . 2 . 3 . 4 . 5 . 6 . 7 | . 8 12345678901234567890123456789012345678901234567890123456789012345678901234567890 |
PROGRAM BSP CHARACTER*5 A, B A = 'Halli' B = 'Hallo' WRITE (*,*) A .LT. B C Ausgabe: T END |
12345678901234567890123456789012345678901234567890123456789012345678901234567890 0 . | 1 . 2 . 3 . 4 . 5 . 6 . 7 | . 8 |
Beim Rechnen mit Fließkommazahlen (Datentypen: REAL
, DOUBLE PRECISION
, COMPLEX
) sind die systemimmanenten Rechenungenauigkeiten zu beachten. Aus diesem Grund sollten Fließkommazahlen nicht auf strikte (Un)Gleichheit geprüft werden, sondern Vergleiche sollten einen kleinen Toleranzbereich aufweisen: .
Beispiel (hier mit und :
0 . | 1 . 2 . 3 . 4 . 5 . 6 . 7 | . 8 12345678901234567890123456789012345678901234567890123456789012345678901234567890 |
X = LOG(A) C Statt... IF (X .EQ. 2) C besser IF (ABS(X - 2) .LT. .00001) |
12345678901234567890123456789012345678901234567890123456789012345678901234567890 0 . | 1 . 2 . 3 . 4 . 5 . 6 . 7 | . 8 |
Zeichenkettenvergleiche
BearbeitenDas Ergebnis eines Vergleichs von Zeichenketten mittels Vergleichsoperatoren ist teilweise systemabhängig. Ausnahmen sind .EQ.
und .NE.
. Systemunabhängige Resultate sind durch Verwendung der entsprechenden lexikalischen Standardfunktionen erhältlich. Dort wird immer die Reihenfolge im ASCII-Zeichensatz verwendet.
Beispiel:
0 . | 1 . 2 . 3 . 4 . 5 . 6 . 7 | . 8 12345678901234567890123456789012345678901234567890123456789012345678901234567890 |
PROGRAM BSP IMPLICIT LOGICAL(A-Z) CHARACTER*15 A, B A = 'Hallö' B = 'hallo' WRITE (*,*) 'A gleich B? ', A .EQ. B WRITE (*,*) 'A kleiner als B (Operator)? ', A .LT. B WRITE (*,*) 'A kleiner als B (Funktion)? ', LLT (A, B) C Ausgabe: C A gleich B? F C A kleiner als B (Operator)? T C A kleiner als B (Funktion)? T END |
12345678901234567890123456789012345678901234567890123456789012345678901234567890 0 . | 1 . 2 . 3 . 4 . 5 . 6 . 7 | . 8 |
Operatorenpriorität
Bearbeiten- Klammerung
- Arithmetische Operatoren
- Vergleichsoperatoren
- Logische Operatoren
- Zuweisungsoperator
Beispiel:
0 . | 1 . 2 . 3 . 4 . 5 . 6 . 7 | . 8 12345678901234567890123456789012345678901234567890123456789012345678901234567890 |
PROGRAM BSP IMPLICIT LOGICAL(A-Z) REAL A, B, C LOGICAL X, RES A = 5.5 B = -1.2 C = 8.6 X = .FALSE. RES = X .AND. A - B .GT. C .OR. A .LE. C C entspricht infolge Op.priorität: C RES = ((X .AND. ((A-B) .GT. C)) .OR. (A .LE. C)) WRITE (*,*) RES C Ausgabe: T END |
12345678901234567890123456789012345678901234567890123456789012345678901234567890 0 . | 1 . 2 . 3 . 4 . 5 . 6 . 7 | . 8 |
Vergleichsoperatoren und logische Operatoren finden in erster Linie bei Verzweigungen und Schleifenbedingungen Verwendung.
<<< zur Fortran-Startseite | |
<< FORTRAN 77 | Fortran 90/95 >> |
< Logische Ausdrücke | Stringoperationen > |