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)
endVariablen ed
Skalare ed
Typen:
- integer
- real
- double precision
- complex
- logical
- character
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 )
endEs 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
endfunction ed
Typ function Name (Parameter_Liste )
Variablen_Deklaration
...
Name = Wert
return
endDer 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 )
endAusgabe 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
...
endiflogische Ausdrücke ed
(als Parameter für if(...)-Anweisungen)
Variablen-Typ: logical
Werte:
- .TRUE.
- .FALSE.
Vergleichsoperatoren:
- == (gleich)
- /= (ungleich)
- < (kleiner)
- < (kleiner gleich)
- >= (größer)
- >= (größer gleich)
logische Operatoren:
- .AND.
- .OR.
- .NOT.
Beispiel:
if ( 3 > 4 .OR. 4 > 3 ) ...
Schleifen ed
do ed
- mit Label
do Label Variable = Anfangs_Wert, Maximal_Wert [, Inkrement]
Anweisungen...
Label continue- der Inkrement kann weggelassen werden (dann wird immer um 1 erhöht)
- Label muss eine Zahl sein!
- die Schleife bricht sofort ab, sobald der Maximal_Wert überschritten wird (falls er exakt erreicht wird, wird der Schleifeninhalt noch ausgeführt)
- 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 dogibt die natürlichen Zahlen (1,2,3,4,5) aus
andere ed
...