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, parameter :: a = 1.0, b = 2, c = 3
Arrays ed
- eindimensional
Typ :: Name(Anzahl_Elemente) oder Typ, dimension(Anzahl_Elemente) :: Name 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 (1 dim.)
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
am Bildschirm ed
write(*,*) 'einfache Stringausgabe' write(*,*) x, y write(*,*) 'x = ', x
Datei ed
genauso wie am Bildschirm....jeder write-Befehl schreibt in eine Zeile
integer :: i = 72 (irgendeine Zahl waehlen....) open(unit = i, file = 'Dateiname') write(i,*) 'Stringausgabe' write(i,*) x, y close(i)
Bedingungen ed
if ed
- Kurzform (einzeilig)
if (Bedingung) Anweisung
- mehrzeilig
if (Bedingung) then
Anweisungen
endif- optionale Konstrukte
if (Bedingung) then
...
elseif (andere_Bedingung) then
...
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 (veraltet?)
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
...