Zum Inhalt springen

Fortran: FORTRAN 77: Vergleichsausdrücke

Aus Wikibooks
<<< 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

[Bearbeiten]
Operator 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

[Bearbeiten]

Das 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]
  1. Klammerung
  2. Arithmetische Operatoren
  3. Vergleichsoperatoren
  4. Logische Operatoren
  5. 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 >