Fortran: FORTRAN 77: Programmaufbau

Aus Wikibooks
<<< zur Fortran-Startseite
<< FORTRAN 77 Fortran 90/95 >>
< Programmaufbau Datentypen >



Beispiel: Hallo Welt[Bearbeiten]

0   . |  1    .    2    .    3    .    4    .    5    .    6    .    7 |  .    8  
12345678901234567890123456789012345678901234567890123456789012345678901234567890
      PROGRAM HALLO 
C                        
C     Das typische Hallo Welt-Programm
C                 
      WRITE (*,*) 'Hallo Welt!'
      END            
12345678901234567890123456789012345678901234567890123456789012345678901234567890
0   . |  1    .    2    .    3    .    4    .    5    .    6    .    7 |  .    8  


Wie Sie an diesem Beispiel ersehen, weist FORTRAN-77-Code eine charakteristische Struktur auf. Etwas seltsam mutet an, dass die Programmanweisungen nicht am Zeilenanfang stehen, sondern mehrere Leerzeichen eingerückt sind. Das ist obligatorisch, ansonsten würde sich das Programm nicht kompilieren lassen. Die Nummerierungen oberhalb und unterhalb der Programmanweisungen (12345678901...) gehören übrigens nicht zum FORTRAN-Code, sondern sollen nur die Spaltenstruktur von FORTRAN-77-Programmen verdeutlichen und die Orientierung etwas erleichtern.

Weiter ist zu erkennen, dass das Beispiel sehr kurz und aussagekräftig ausfällt. Die Anweisung in der ersten Zeile kennzeichnet die Programmeinheit als Hauptprogramm und gibt ihr die Bezeichnung HALLO. Die nächsten drei Zeilen sind Kommentarzeilen, erkennbar am Buchstaben in der ersten Spalte der Zeile. Dann folgt die Anweisung, einen String auf die Standardausgabe zu schreiben. Und schließlich signalisiert die END-Anweisung das Programmende.

Das Zeilenformat[Bearbeiten]

Normalerweise gilt, dass jede FORTRAN-Anweisung in einer eigenen Zeile steht. Eine Spezialität von FORTRAN 77 ist die Spaltenorganisation eines Programmes: das fixe Zeilenformat. Es gibt fixe Spalten (Zeichenpositionen) in denen bestimmte Inhalte stehen müssen bzw. dürfen. Diese Art der Codeanordnung rührt von den Anforderungen der Lochkarte her. Bei den damaligen Großrechenanlagen war die Eingabe von Programmen häufig nur in Form von Lochkartenstapeln möglich. FORTRAN 77 nimmt auf diese Beschränkung Rücksicht.

Lochkarte mit Fortran-Statements

Der generelle Aufbau des fixen Zeilenformates von FORTRAN 77 ist wie folgt:

In der nachstehenden Tabelle wird die Bedeutung der einzelnen Spalten detaillierter dargestellt.

Spalte Inhalt Bedeutung
1 C oder * Kennzeichnet eine Kommentarzeile
1 bis 5 Eine Zahl 1 bis 99999 Anweisungsnummer (Marke)
6 Leerzeichen oder 0 (Null) Beginn einer Anweisung (das ist der Normalfall)
6 sonstiges Zeichen Fortsetzungszeile (standardmäßig sind bis zu 19 Fortsetzungszeilen erlaubt)
7 bis 72 FORTRAN-Befehl (Anweisung)
73 bis 80 beliebige Zeichen Kommentar (ursprünglich für Lochkarten-Sequenznummern)

Beispiel:

0   . |  1    .    2    .    3    .    4    .    5    .    6    .    7 |  .    8  
12345678901234567890123456789012345678901234567890123456789012345678901234567890
      PROGRAM BSP
* Leerzeilen werden übrigens wie Kommentarzeilen behandelt
 
* Eine 0 (Null) an der sechsten Position entspricht einem Leerzeichen, 
* foerdert aber nicht gerade die Uebersichtlichkeit 
     0A = 5
      B = 7
      C = A + 
* Und jetzt kommt eine Fortsetzungszeile          
     $B
      WRITE (*,*) C
      END 
12345678901234567890123456789012345678901234567890123456789012345678901234567890
0   . |  1    .    2    .    3    .    4    .    5    .    6    .    7 |  .    8  

Besondere Vorsicht ist bei langen Anweisungen geboten. Alles nach der 72 Zeichenposition wird nicht mehr als Teil der Anweisung aufgefasst. Im günstigsten Fall wirft der Compiler in einem solchen Fall bei der Übersetzung einen Syntaxfehler aus.

Die Programmstruktur für das Hauptprogramm[Bearbeiten]

Ein Hauptprogramm weist immer folgende Struktur auf

  1. PROGRAM prname
  2. Vereinbarungsteil
  3. Aktionsteil
  4. END

prname ist ein symbolischer Name für das Hauptprogramm und kann mehr oder minder willkürlich festgelegt werden. Das erste Zeichen muss immer ein Buchstabe sein. Im Vereinbarungsteil werden z. B. die Variablen deklariert. Im Aktionsteil wird dann der eigentliche Programmablauf festgelegt. END kennzeichnet das Programmende. Theoretisch könnte im Hauptprogramm die erste Zeile (PROGRAM prname) auch komplett entfallen. In älteren Programmcodes wurde das durchaus auch so gehandhabt. Allerdings leidet darunter die Übersichtlichkeit des Programmes. Die END-Anweisung muss auf jeden Fall angegeben werden.

Der FORTRAN-Zeichenvorrat[Bearbeiten]

FORTRAN-77-Programme bestehen standardmäßig nur aus folgenden Zeichen

  • Großbuchstaben: A bis Z
  • Ziffern: 0 bis 9
  • 13 Sonderzeichen: + - * / = ( ) : , . ' $ und dem Leerzeichen

Viele FORTRAN-77-Compiler akzeptieren auch Kleinbuchstaben. Zeichenkettenliterale können natürlich alle ASCII-Zeichen beinhalten.

Symbolische Namen[Bearbeiten]

Standardmäßig dürfen symbolische Namen maximal sechs Zeichen lang sein. Als erstes Zeichen muss immer ein Buchstabe (A-Z) stehen, der Rest muss alphanumerisch sein (Buchstabe oder Ziffer). „Lustigerweise“ dürfen bei FORTRAN 77 Leerzeichen auch innerhalb eines symbolischen Namens auftreten.

Beispiel:

0   . |  1    .    2    .    3    .    4    .    5    .    6    .    7 |  .    8  
12345678901234567890123456789012345678901234567890123456789012345678901234567890
      PR O GRA M BSP
*
* gfortran, g95, ifort etc. kompilieren diesen Code und
* bei der Programmausfuehrung wird auch das richtige 
* Ergebnis angezeigt.
*
      ALPHA = 5
      BETA = 7
      GAMm a = A L PH   A + B E    TA
      WRI  TE (*,*) G A MM    A
      EN D
12345678901234567890123456789012345678901234567890123456789012345678901234567890
0   . |  1    .    2    .    3    .    4    .    5    .    6    .    7 |  .    8  

Besonders unangenehm kann dieses Verhalten werden, wenn in einer Zählschleife anstelle eines Kommas irrtümlicherweise ein Punkt gesetzt wird, wenn also z. B. anstelle

DO 10 I = 1, 3

fälschlicherweise

DO 10 I = 1. 3

steht. Letzteres entspricht nämlich der Zuweisung der Zahl 1.3 an die Variable DO10I.

Gleiches gilt, wenn ähnlich wie in den Programmiersprachen C, C++ oder Java versucht wird, einer Variablen gleich in einer Deklarationszeile einen Wert zuzuweisen, z. B.

REAL A = 10.5
WRITE(*,*) A

Hier wird irgendein Wert ausgegeben, aber mit an Sicherheit grenzender Wahrscheinlichkeit nicht 10.500000, denn die Wertzuweisung erfolgte an die Variable REALA und nicht an A.


<<< zur Fortran-Startseite
<< FORTRAN 77 Fortran 90/95 >>
< Programmaufbau Datentypen >