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