Fortran: FORTRAN 77: Arithmetische Ausdrücke

Aus Wikibooks
<<< zur Fortran-Startseite
<< FORTRAN 77 Fortran 90/95 >>
< Felder Logische Ausdrücke >

Arithmetische Operatoren[Bearbeiten]

FORTRAN 77 kennt folgende arithmetische Operatoren

Operator Kommentar Mathematische Entsprechung
A + B Addition
A - B Subtraktion
A * B Multiplikation
A / B Division
A ** B Exponentiation

Mit dem Exponentiationsoperator (Potenzierung) war und ist FORTRAN 77 anderen Programmiersprachen einen Schritt voraus. Andererseits kennt FORTRAN 77 den aus vielen anderen Programmiersprachen bekannten Modulo-Operator nicht. Als Überkompensation gibt es für diesen Zweck die MOD()-Funktion sowohl für Ganzzahlen, wie auch für Fließkommazahlen.

Operatorenpriorität[Bearbeiten]

Die Prioriät der arithmetischen Operatoren entspricht den mathematischen Gesetzmäßigkeiten.

  • Klammerung vor allem anderen, z. B. (A+B)*C A*C+B*C
  • Exponentiation vor Punktrechnung, z. B. A*B**C A*(B**C)
  • Punktrechnung vor Strichrechnung, z. B. A+B*C A+(B*C)

Berechnungsfolge bei gleicher Priorität[Bearbeiten]

  • Klammerung, Punktrechnung und Strichrechnung:
    Beispiel: A*B/C*D((A*B)/C)*D
  • Exponentiation:
    Beispiel: A**B**C A**(B**C)

Außerdem ist zu beachten, dass niemals zwei Operatoren direkt aufeinander folgen dürfen.

Beispiel: Der Ausdruck 1.5**-1 ist in FORTRAN 77 falsch und führt zu einer Fehlermeldung. Richtig ist 1.5**(-1)

Ergebnisdatentyp[Bearbeiten]

Operanden gleichen Datentyps[Bearbeiten]

Bei Operanden gleichen Datentyps erhält das Ergebnis den Datentyp der Operanden.

Beispiel:

0   . |  1    .    2    .    3    .    4    .    5    .    6    .    7 |  .    8  
12345678901234567890123456789012345678901234567890123456789012345678901234567890
      PROGRAM BSP                                
 
      REAL A            
 
      A = 3/2
C  3 ist ein INTEGER und 2 ist auch ein INTEGER,
C  daher muss das Ergebnis auch ein INTEGER sein, also 1.
C  Die Zuweisung an die REAL-Variable A stellt das 
C  Ergebnis nicht mehr richtig.
 
      WRITE (*,*) A  
C  Ausgabe: 1.00000
  
      END
12345678901234567890123456789012345678901234567890123456789012345678901234567890
0   . |  1    .    2    .    3    .    4    .    5    .    6    .    7 |  .    8  

Implizite Typumwandlung bei Operanden gemischten Datentyps[Bearbeiten]

Weisen die Operanden unterschiedliche Datentypen auf, so wird bei jeder Operation, falls nötig, das Ergebnis dem höherwertigen Datentyp angepasst.

INTEGER REAL DOUBLE PRECISION COMPLEX


Beispiel:

0   . |  1    .    2    .    3    .    4    .    5    .    6    .    7 |  .    8  
12345678901234567890123456789012345678901234567890123456789012345678901234567890
      PROGRAM BSP                                
 
      REAL A            
 
      A = 3/2.
C  2. ist ein REAL. Jetzt stimmt das Ergebnis.
  
      WRITE (*,*) A  
C  Ausgabe: 1.500000
 
      END
12345678901234567890123456789012345678901234567890123456789012345678901234567890
0   . |  1    .    2    .    3    .    4    .    5    .    6    .    7 |  .    8  

Explizite Typumwandlung[Bearbeiten]

FORTRAN 77 besitzt auch Funktionen zur expliziten Umwandlung des Datentyps. Diese werden im Kapitel Standardfunktionen näher beschrieben.

Beispiel:

0   . |  1    .    2    .    3    .    4    .    5    .    6    .    7 |  .    8  
12345678901234567890123456789012345678901234567890123456789012345678901234567890
       PROGRAM BSP 
 
       REAL R 
       COMPLEX C
 
       R = 2 
       C = CMPLX(R)
 
       WRITE (*,*) C 
 C Ausgabe: ( 2.000000 , 0.000000 )
 
       END
12345678901234567890123456789012345678901234567890123456789012345678901234567890
0   . |  1    .    2    .    3    .    4    .    5    .    6    .    7 |  .    8  

<<< zur Fortran-Startseite
<< FORTRAN 77 Fortran 90/95 >>
< Felder Logische Ausdrücke >