fortran ed

sollte Fortran95 sein (freie Form)...

Grundlagen ed

Übersetzuung ed

Quellcode in Datei *.f95

f95 programm.f95 -o programm

oder

gfortran programm.f95 -o programm

Struktur ed

Die Form (Einrückungen, Zwischenräume,...) ist in Fortran95 frei wählbar.

program Name
    Variablen-Deklaration   (immer vor den Anweisungen!)
    Anweisungen
! Kommentar
    stop                    (nicht wirklich nötig)
end

Variablen ed

Skalare ed

Typen:

Typ Name                oder
Typ :: Name

wenn mit Initial-Wert immer

Typ :: Name = Wert

Konstanten:
real a, b, c
parameter ( a = 1.0, b=... )

(parameter muss immer vor den Anweisungen stehen!)

Arrays ed

eindimensional

Typ Name( Anzahl_Elemente )                      oder
Typ, dimension( Anzahl_Elemente )                oder
Typ Name ( erstes_Element : letztes_Element )

wichtig: im Gegensatz zu C ist für integer i(5) das erste Element i(1) und das letzte i(5)!

mehrdimensional

Typ Name ( Anzahl_1, Anzahl_2 )                  oder
Typ, dimension( Anzahl_1, Anzahl_2 ) Name

mit Initialwert (1dim.)

Typ :: Name ( Anzahl ) = (/ Wert_1, ..., Wert_n /)

Unterprogramme ed

Stehen vor dem Hauptprogramm ('program'...)!

subroutine ed

subroutine Name ( Parameter_Liste )      (nur Parameter-Namen, keine Typen)
    Variablen_Deklaration                (hier Parameter nochmal definieren, mit Typ)
    Anweisungen
    return
end

program Name_2
    call Name( Parameter )
end

Es gilt das "Call-By-Reference"-Prinzip!!! (Variable im Unter- sowie im Hauptprogramm sind ein und die selbe)

Beispiel:

subroutine addiere ( a, b )
    integer a, b
    a = a + b
    return
end

program test
    integer :: c = 4, d = 5
    call addiere( c, d )
! hier ist c=9
end

function ed

Typ function Name (Parameter_Liste )
    Variablen_Deklaration
    ...
    Name = Wert
    return
end

Der Rückgabewert wird wie eine Variable verwendet (ohne eigene Deklaration)

Dafür muss im Hauptprogramm eine Variable mit dem Namen und Typ der Funktion deklariert werden!

Beispiel:

real function quadriere ( x )
    real x
    quadriere = x * x
    return
end

program Test
    real a
    real :: b = 5.0
    real quadriere
    a = quadriere( b )
end

Ausgabe ed

write(*,*) 'einfache Stringausgabe'
write(*,*) x, y
write(*,*) 'x = ', x

Bedingungen ed

if ed

Kurzform (einzeilig)

if ( Bedingung ) Anweisung

mehrzeilig

if ( Bedingung ) then
    Anweisungen
endif

optionale Konstrukte

if ( Bedingung ) then
    ...
elseif ( andere_Bedingung )
    ...
else
    ...
endif

logische Ausdrücke ed

(als Parameter für if(...)-Anweisungen)

Variablen-Typ: logical

Werte:

Vergleichsoperatoren:

logische Operatoren:

Beispiel:

if ( 3 > 4 .OR. 4 > 3 ) ...

Schleifen ed

do ed

mit Label

do Label Variable = Anfangs_Wert, Maximal_Wert [, Inkrement]
    Anweisungen...
Label continue

ohne Label

do Variable = Anfangs_Wert, Maximal_Wert [, Inkrement]
    Anweisungen...
end do                   (kann auch enddo sein)

Beispiel

integer i

do i = 1, 5
    write(*,*) i
end do

gibt die natürlichen Zahlen (1,2,3,4,5) aus

andere ed

...