Fortran-Skript

Transcription

Fortran-Skript
C RASHKURS F ORTRAN
M ANUEL K ALLWEIT & FABIAN K INDERMANN
Literaturempfehlung:
Vorlesungsskript von Heidrun Kolinsky zu FORTRAN 90/95:
http://www.rz.uni-bayreuth.de/lehre/fortran90/vorlesung/index.html
Schmitt, Günter (1996): Fortran–90–Kurs technisch orientiert, R. Oldenbourg Verlag, München
Brainerd, W., C. Goldberg and J. Adams (1996): Programme’s Guide to Fortran 90, Springer–Verlag
C RASHKURS F ORTRAN
E INFÜHRUNG
program hallo
character(LEN=50) :: input
Programmcode
(Quellcode)
write(*,*)'Bitte Namen eingeben:'
read(*,*)input
write(*,*)'Hallo ',input
end program hallo
Compilieren
Ausführen
Umwandlung des Programmcode
in Binärcode (vom Computer lesbar).
evtl. Eingabedaten
read(*,*)input
Ausgabedaten
write(*,*)’Hallo ‘,input
SS 2008
1
C RASHKURS F ORTRAN
D IE P ROGRAMMSTRUKTUR
Ein Fortran–Programm besteht aus vier Programmteilen:
Programmkopf
program hallo
Deklarationsteil
character(LEN=50) :: input
Anweisungsteil
write(*,*)’Bitte Namen eingeben:’
read(*,*)input
write(*,*)’Hallo ’,input
Programmende
SS 2008
end program hallo
2
C RASHKURS F ORTRAN
P ROGRAMMKOPF
UND
– ENDE
Allgemeine Definition:
program <Programmname>
end program <Programmname>
<Programmname> muss der Fortran Namenssyntax genügen.
Fortran Namenssyntax:
Ein Name darf in Fortran bis zu 31 Zeichen lang sein. Der Name muss mit einem
Buchstaben beginnen. Für die auf das erste Zeichen folgenden Zeichen dürfen alle
alphanumerischen Zeichen sowie Unterstriche verwendet werden. GroSS- und
Kleinschreibung kann eingesetzt werden, bleibt aber vom Compiler unberücksichtigt.
Es dürfen keine Schlüsselwörter (z.B. program, integer, real, do, if, else, . . . )
verwendet werden.
SS 2008
3
C RASHKURS F ORTRAN
D EKLARATIONSTEIL
Allgemeine Definition:
Der Deklarationsteil besteht aus einer Reihe von Konstanten– und
Variablenvereinbarungen.
Variablenvereinbarung:
<Variablentyp> :: <Variable>
Konstantenvereinbarung:
parameter (<Variable>=<Variablenwert>,...)
<Variable> muss der Fortran Namenssyntax genügen und im Programm eindeutig
sein.
SS 2008
4
C RASHKURS F ORTRAN
Variablentypen und –wertebereiche:
Datentyp
Erw.
Erläuterung
Wertebereich
logische Werte
.true., .false.
(1)
ganze Zahlen
−27 + 1 bis 27 − 1
(2)
ganze Zahlen
−215 + 1 bis 215 − 1
(3) (∗)
ganze Zahlen
−231 + 1 bis 231 − 1
reelle Zahlen
≈ −1038,53 bis ≈ 1038,53
reelle Zahlen
≈ −10308,25 bis ≈ 10308,25
einzelnes Zeichen
alle möglichen Zeichen
Zeichenkette der Länge x
alle möglichen Zeichen
logical
integer
real
*4
(∗)
*8
character
(∗)
(LEN=x)
(∗)
: Standardeinstellung; ohne Erweiterung gilt diese Einstellung.
SS 2008
5
C RASHKURS F ORTRAN
Die Bedeutung von implicit :
In Fortran sind Variablen grundsätzlich als integer vordefiniert. Diese Definition
führt jedoch häufig zu Programmierfehlern, da man sich während der
Programmierung nicht immer dieser Vordefinition bewusst ist. Guter Programmierstil
erfordert deshalb die Verwendung des Befehls implicit none. Durch diesen
Befehl müssen alle benutzten Variablen explizit definiert werden.
Es besteht allerdings auch die Möglichkeit, die Vordefinition von Variablen zu
ändern. Dies geschieht mit dem Befehl
implicit <Variablentyp> <Variablenbereich>. Beim
<Variablenbereich> beschränkt man sich üblicherweise auf die
Anfangsbuchstaben der Variablennamen.
Beispiele:
implicit real*8 (A-F)
implicit character(LEN=20) (H-I,L-N)
SS 2008
6
C RASHKURS F ORTRAN
A NWEISUNGSTEIL
Der Anweisungsteil ist eine strikte Aneinanderreihung von auszuführenden Befehlen.
Dieses Vorgehen kann mit Hilfe von Flussdiagrammen modelliert werden.
lese Zahl i ein
(1)
initialisiere j=1,
summe=0
(2)
summe=summe+j
j=j+1
(2)
nein
ist j > i?
(3)
ja
gebe summe aus
SS 2008
(1)
7
C RASHKURS F ORTRAN
(1) Lesen und Schreiben
Befehle:
SS 2008
read(*,*)<Variable>
Liest den vom Benutzer einzugebenden
Wert der <Variable> von der Konsole
ein.
write(*,*)<Variable>
Schreibt den Wert der <Variable>
unformatiert auf die Konsole.
write(*,*)’<Text>’
Schreibt den eingegebenen <Text> auf
die Konsole.
write(*,’(f6.3)’)<Variable>
Schreibt den Wert der <Variable> im
Format f6.3 auf die Konsole.
8
C RASHKURS F ORTRAN
Formatierungsbefehle:
i4
Integerzahl mit maximal 4 Stellen.
a7
Character mit maximal 7 Stellen.
f6.3
Realzahl mit insgesamt 6 Stellen (inkl. Trennzeichen) und 3
Nachkommastellen.
3x
3 Leerzeichen
Mehrere Formatierungsbefehle hintereinander werden durch Kommas getrennt.
Beispiel:
Befehl:
write(*,’(a5,2x,2(f4.2,2x),a3,i2)’)’Hallo’,123.456,1.544,’hALLO’,12
Ausgabe:
Hallo--****--1.54---hAL12
SS 2008
9
C RASHKURS F ORTRAN
(2) Wertzuweisungen
Befehl:
<Variable>=<Variablenwert>
Der <Variablenwert> muss nicht unbedingt eine feste Zahl/Zeichenkette sein.
Er kann sich genauso aus der Verknüpfung meherer anderer Variablen
zusammensetzen.
Beispiele:
a=6
a=b+c
c=exp(x)+c**2*sqrt(x)
l=max(a,b)*sign(-3)/mod(9,5)+abs(l)
SS 2008
10
C RASHKURS F ORTRAN
(3) Kontrollstrukturen
1. Schleifen:
Sollen Anweisungen mehrmals wiederholt werden, so lässt sich dies
mit Hilfe einer do–Schleife realisieren.
Befehle:
do <Laufindex>=<von>,<bis>(,<Schrittweite>)
<Anweisungsblock>
enddo
Standardmässig ist als Schrittweite 1 eingestellt.
Beispiele:
do i=2,6
write(*,*)i
enddo
SS 2008
do j=10,2,-2
write(*,*)j,j**2
enddo
11
C RASHKURS F ORTRAN
2. Verzweigungen:
Sollen Anweisungen nur unter einer Bestimmten Bedingung ausgeführt
werden, so können diese Anweisungen in ein if–Statement
geschrieben werden.
Befehle:
if(<Bedingung1>)then
<Anweisungsblock1>
alternativ:
if(<Bedingung>)<Anweisung>
(elseif(<Bedingung2>)then
<Anweisungsblock2>)
(else
<Anweisungsblock3>)
endif
SS 2008
12
C RASHKURS F ORTRAN
Beispiele:
if(i.ge.0)then
sign=1
else
sign=-1
endif
SS 2008
j=1 ; summe=0
do
summe=summe+j ; j=j+1
if(j.gt.i)exit
enddo
13
C RASHKURS F ORTRAN
F UNKTIONEN
Funktionen dienen in FORTRAN zur Berechnung eines Wertes. An eine Funktion
können mehrere Werte übergegeben werden, die zur Bestimmung des Funktionswerts
benötigt werden.
Befehl:
<Variablentyp> function <Funktionsname>((<Variable1>,...))
<Variablendeklaration>
<Werteberechnung>
end function <Funktionsname>
In der <Variablendeklaration> müssen alle eingegebenen Variablen deklariert
werden. <Variablentyp> legt den Variablentyp des Rückgabewerts der Funktion
fest.
SS 2008
14
C RASHKURS F ORTRAN
Beispiel:
integer function summe(a,b)
integer :: a,b
summe=a+b
end function summe
real function logsumme(c,d)
real :: c,d
if(c.le.0.or.d.le.0)then
write(*,*)’logsumme nicht definiert’
else
logsumme=log(c)+log(d)
endif
end function logsumme
SS 2008
15
C RASHKURS F ORTRAN
Beispiele für den Aufruf von Funtionen:
integer :: wert1,wert2,erg1
real :: wert3,wert4,erg2
erg1=summe(3,6)
erg2=logsumme(2.45,1.0)
wert1=5
wert2=19
wert3=-1.45
wert4=4.67
erg1=summe(wert1,wert2)
erg2=logsumme(wert3,wert4)
SS 2008
16
C RASHKURS F ORTRAN
S UBROUTINEN
Mit Subroutinen können in FORTRAN Programmabschnitte definiert werden, die in
einem Programm mehrmals in gleicher Form verwendet werden können. Auch hier
ist die Übergabe von Variablen möglich. Eine Subroutine besitzt jedoch keinen
Rückgabewert.
Befehl:
subroutine <Subroutinenname>((<Variable1>,...))
<Variablendeklaration>
<Programmabschnitt>
end subroutine <Subroutinenname>
SS 2008
17
C RASHKURS F ORTRAN
Beispiele:
subroutine output(a)
real*8 :: a
write(*,’(a14,1x,f8.3)’)’Variablenwert:’,a
end subroutine output
subroutine summen(a,b,c,d,summe,logsumme)
integer :: a,b,summe
real :: c,d,logsumme
summe=a+b
if(c.le.0.or.d.le.0)then
write(*,*)’logsumme nicht definiert’
else
logsumme=log(c)+log(d)
endif
end subroutine summen
SS 2008
18
C RASHKURS F ORTRAN
Beispiele für den Aufruf von Subroutinen:
real*8 :: wert
integer :: wert1,wert2,erg1
real :: wert3,wert4,erg2
call output(23.126723)
call summen(3,6,2.34,1.23,erg1,erg2)
wert=121.2343
wert1=5
wert2=19
wert3=-1.45
wert4=4.67
call output(wert)
call summen(wert1,wert2,wert3,wert4,erg1,erg2)
SS 2008
19

Documents pareils