ANHANG KURZÃœBERSICHT zu Fortran 90

Document Sample
ANHANG KURZÃœBERSICHT zu Fortran 90 Powered By Docstoc
					ANHANG: KURZÜBERSICHT zu Fortran 90

Im Juli 1991 wurde Standard Fortran 90 als ISO Norm veröffentlicht. Damit ist die neueste Stufe der
Modernisierung von Fortran abgeschlossen und wesentliche Mängel von FORTRAN 77 sind behoben.

Fortran 90 ist aufwärtskompatibel zu FORTRAN 77, d.h. daß FORTRAN 77 Programme auch weiterhin ver-
wendbar sind.

Neben modernen Datenstrukturen, einer neuen Programmstrukturierung, ist es möglich, Matrizenoperationen
einfacher zu beschreiben. Die Kompiler werden veraltete Sprachkonstrukte zwar weiter akzeptieren, den Pro-
grammierer aber darauf aufmerksam machen, wenn es bessere Fortran 90 Konstrukte gibt.

Die bisherigen Schwierigkeiten mit FORTRAN 77 waren:

       die feste Verknüpfung der Daten mit dem physikalischen Speicher, auch "storage association" genannt.
       die Lochkarten - Formatierung des Quellcodes
       fehlende Datenstrukturen
       Bindung der numerischen Genauigkeit an Wortlänge des Prozessors

Fortran 90 bietet folgende neuen Möglichkeiten:

       Matrizenoperation werden ermöglicht
       Felder können zur Laufzeit eingerichtet und freigegeben werden
       verbesserte numerische Genauigkeit (KIND=) prozessorunabhängig
       Datentypen lassen sich vom Programmierer definieren
       Programmierer kann eigene Operatoren und Zuweisungen definieren
       Modulkonzept für Daten und Prozeduren
       Zeiger (Pointer) Variablen
       Rekursive Prozeduren
       Ein- und Ausgabe von Variablengruppen über Gruppennamen (NAMELIST)
       Erweiterter Zeichensatz
       Operationszeichen für Relationen
       interne Funktionen erlauben Bitmanipulationen
       Lochkartenunabhängiges Quellformat
       neue Typ-Deklarationen, auch selbst definierbar
       neue Steuerkonstrukte

Folgende Merkmale gelten als veraltet in FORTRAN 77

       arithmetisches IF
       Schleifenvariable des Typs REAL, DOUBLE PRECISION
       mehrere DO-Schleifen mit gleichem Schleifenende
       Sprung auf ENDIF von außerhalb
       Rücksprung aus Prozedur auf Marke (RETURN I)
       PAUSE
       ASSIGN
       ASSIGN GO TO


Die wichtigsten Änderungen

Quellformat:             formatgebunden (wie bisher) 1-5 | 6 | 7-72 | 73-80
                         formatfrei 0-132 Zeichen pro Zeile

Zeichenvorrat:           alphanumerische Zeichen, Sonderzeichen
                         zusätzlich $ : ! " % & ; < > ? _

Namen:                   alphanumerische Zeichen und _ , erstes Zeichen Buchstabe , max. 31 Zeichen
Kommentar:               hinter ! an jeder Stelle einer Zeile

Fortsetzung:             &-Zeichen auf voriger Zeile, beliebige Stelle
Trennung:               ;-Zeichen trennt zwei Anweisungen innerhalb einer Zeile

Operationszeichen:      neu:              ==       <          >       /=        <=     >=
                        entspricht:       .EQ.     .LT.       .GT.    .NE.      .LE.   .GE.

                        es ist auch möglich, eigene Operatoren zu definieren.

Rekursive Prozeduren:
                        Prozedur ruft sich direkt oder indirekt selbst auf.

                        RECURSIVE FUNCTION name (a) RESULT (erg)
                                .
                                .
                        erg = name (b)
                                .
                                .
                        END FUNCTION name

Strukturierte Namen:    PERSON % NAME % GEB_DATUM
                        PERSON % NAME % ADRESSE

Typ Deklarationen:      Typ, Attributliste :: Deklarationen-Liste

                        PARAMETER
                        DIMENSION
                        POINTER
                        SAVE

eigene Definition:
                        TYPE name
                        .
                        .
                        END TYPE name

standard:               REAL::A,B,C
                               .
                               REAL,DIMENSION(1:9)::X,Y
                               .
                               CHARACTER(LEN=9),DIMENSION(0:17)::C
                        .
eigen:                  TYPE(name) :: M,N

Pointer-Variable:       Variable besitzt erst bei Assoziierung des Zeigers mit Zielobjekt einen Speicher
                        Variable wird dynamisch zugewiesen


Felder (Arrays)

Feldbelegung:           Vektor X = (/ 1.2, 3.5, 1.1, 1.5 /)

                        Matrix über RESHAPE-Funktion

Dynam.Felder:           INTEGER,DIMENSION(:),ALLOCATABLE::Zeilen

                        INTEGER::ZAHL_DER_ZEILEN
                              .
                              .
                        READ *, ZAHL_DER_ZEILEN

                        ALLOCATE (ZEILEN(ZAHL_DER_ZEILEN))
                              .
                        READ *, ZEILEN
                              .
                      DEALLOCATE (ZEILEN)

Teilbereiche:         V(0:4)
                      V(3:7:2)

Feldzuweisung:        A(2:4,5:8) = A(3:5,1:4)
                      M(K+1:N,K) = 0

Bed. Feldzuweisung:   grundsätzlich elementweise Operationen

Maskierung:           WHERE (A<0) B = 0          WHERE ( C /= 0)
                      A = B/C
                      ELSEWHERE
                      A=0
                      C=1
                      ENDWHERE

Matrizen-
operationen:          mit zusätzlichen intrinsic functions

                      z.B. MATMUL


Steueranweisungen

        IF-THEN-ELSE:                   wie in FORTRAN 77

        CASE:                           SELECT CASE (Ausdruck)
                                        CASE(Wert1 des Ausdrucks)
                                        .
                                        .
                                        CASE(Wert2 des Ausdrucks)
                                        .
                                        .
                                        END SELECT

        DO:                             DO
                                        .
                                        .
                                        EXIT
                                        .
                                        END DO

        DO (CYCLE):                     DO
                                        .
                                        .
                                        . CYCLE
                                        .
                                        END DO

        DO WHILE:                       DO WHILE (log.Ausdr.)
                                        .
                                        .
                                        .
                                        .
                                        END DO

Prozeduren
                      SUBROUTINE name (......)
                                  .
                                  .
                      END SUBROUTINE name
                        FUNCTION name (b) RESULT (c)
                              .
                              .
                              c = ...
                              .
                        END FUNCTION name

Externe Prozeduren:     PROGRAM HAUPT
                              .
                              .
                        CALL SUB1
                              .
                              .
                        END PROGRAM HAUPT

                        SUBROUTINE SUB1
                              .
                        END SUBROUTINE SUB1

Interne Prozeduren:     PROGRAM HAUPT
                              .
                              .
                        CALL SUB1
                              .
                              .
                        CONTAINS

                              SUBROUTINE SUB1
                              .
                              .
                              END SUBROUTINE SUB1
                              .
                              .
                        END PROGRAM HAUPT



Generische Prozeduren: Typ der Funktion wird über Argumententyp gesteuert



Modulprozeduren:        nicht-ausführbare Programmeinheiten, die Datenspezifikationen und Prozeduren
                        enthalten und in andere Prozeduren durch "USE" eingebunden werden. (ähnlich
                        COMMON)

Interfaceblock:         dient zur Kontrolle des Prozeduraufrufs und enthält nur die wesentlichen Definitionen;
                        wichtig bei getrennter Kompilation von Prozedur und Prozeduraufruf.

				
DOCUMENT INFO
Shared By:
Stats:
views:19
posted:2/1/2010
language:German
pages:4