FORTRAN 77

Post on 06-Feb-2016

55 views 0 download

description

FORTRAN 77. Allgemeines. Nicht mehr als 70 Zeichen pro Zeile Mindestens die ersten 7 Zeichen müssen leer bleiben Komentare mit vorgestelltem C. Allgemeine Deffinition implicit double precision (a-h,o-z) wenig schreibarbeit man kann keine Deffinitionen vergessen - PowerPoint PPT Presentation

Transcript of FORTRAN 77

FORTRAN 77

Allgemeines

Nicht mehr als 70 Zeichen pro Zeile Mindestens die ersten 7 Zeichen

müssen leer bleiben Komentare mit vorgestelltem C

Die erste Zeile

Allgemeine Deffinition implicit double precision (a-

h,o-z)

wenig schreibarbeit man kann keine

Deffinitionen vergessen

- man kann nicht alle Variablennamen verwenden (z.B. mü, nü,...)

Spezielle Deffinition integer a, b real c, d double precision e, f character g, h

Variablennamen beliebig wählbar

- man muß die Definition ändern, wenn man im Programm was ändert

Zwei Variablen dürfen nie den gleichen Namen haben!

Die Grundrechnungsarten

Addition, Subtraktion, Multiplikation, Division: a = b + c a = b – c a = b * c a = b / c

Potenzen und Wurzeln a = b**c a = sqrt(b) = a = b**(1/c) =

sonstige Funktionen: cos, sin,...

Achtung Fortran rechnet in Radians also:

z.B. sin(45) schreibt man in Fortran:

sin(45*/180) Logarithmus inverse Funktionen

Informationen im Web:

http://www.fortran.com/fortran/F77_std/rjcnf0001.html

bc b

Ein-, Ausgeben & Die letzte Zeile

read*, a, b, c

print*, a, b, c

stop

end

muß immer am Ende stehen!

und schon kanns los gehen!

Fortran Compiler

für Windows:

z.B. Force 8

http://myweb.lmu.edu/dmsmith/Math282.html

für Linux:

g77 –o programm –O programm.f

Beispiel

Das Programm soll mit zwei angegebene Zahlen alle Grundrechnungsarten durchführen...

Einlesen aus einem File

Aus einem Textfile Zahlen einlesen:

open(unit=11, file='zahlen.txt', status='old') read(11,*) b, c close(11)

Das File zahlen.txt muß zuerst angelegt werden Leerzeichen trennen die Einträge

Schreiben in ein File

Ergebnisse in ein Textfile schreiben:

open(unit=12, file='ergebnis.txt', status='unknown') write(12,*) a, a1, a2 close(12)

mehrere Zeilen lesen bzw. schreiben

open(unit=11, file='zahlen.txt', status='old')open(unit=12, file=‚ergebnis.txt', status=‚unknown')

read(11,*) b, cread(11,*) b1, c1read(11,*) b2, c2Usw... write(12,*) a, a1, a2write(12,*) aa, aa1, aa2Usw... close(11)close(12)

Und jetzt das gleiche Bsp...

Diesesmal wollen wir mehrere Zahlen eingeben, mit denen die gleichen bzw. verschiedene Rechenoperationen durchgeführt werden sollen...

Do - Schleifen

implicit double precision (a-h,o-z)open(unit=11, file='zahlen.txt', status='old')open(unit=12, file=‘ergebnis.txt', status=‘unknown')do 100 n=1, 4read(11,*) b, ca=b+cwrite(12,*) a

100 continueclose(11)close(12)

stopend

nur einlesen

dimension b(10), c(10)

do 100 n=1,7 read(11,*,end=200) b(n), c(n)100 continue200 stop

end

damit lassen sich beliebig viele Zahlen einlesen und z.B. in do – Schleifen verwendenend=200 ..... beendet die do – schleife wenn die letzte Zeile eingelesen ist

Die Marken (z.B. 100, 200) müssen gleich am Anfang einer Zeile stehen

nocheinmal das gleiche Bsp.

Diesmal wollen wir die Zahlen mit Hilfe einer do – Schleife einlesen bzw. auch rausschreiben...

If - Abfrage

z.B. if(a.gt.0) write(12,*) a

bei mehreren Befehlen: if(a.gt.0) then

write... b=c+d usw.

endif

mögliche if – Abfragen

(a.eq.0) ... ist gleich (a.gt.0) ... größer als (a.lt.0) ... kleiner als (a.ge.0) ... größer oder gleich (a.le.0) ... kleiner oder gleich

Kombinationen von if - Abfragen

Bedingung: a<b und c>dif(a.lt.b.and.c.gt.d) then....

Bedingung: a<b oder c<dif(a.lt.b.or.c.lt.d) then...

if - else

z.B. else

if(a.gt.0) then

write(12,*) a

else

write(12,*) b

end if

z.B. else if

if(a.gt.0) then

write(12,*) a

else if(a.lt.-5)

write(12,*) b

end if

ein letztes Mal das gleiche Beispiel

Wir wollen jetzt nur die Zahlen > 0 in das ergebnis – file geschrieben haben...

der goto - Befehl

nicht gerne gesehen, aber trotzdem recht nützlich:

Anwendung: goto Referenz z.B.: goto 300

das Programm springt dann sofort zu der Marke 300

bei grösseren Programmen

kann es sehr sinnvoll sein Unterprogramme zu verwenden:

ein Beispiel aus einem LIE – Integrator Programm:

Unterprogramme – Bsp. 1

CALL PARAM

C....EINLESEN DER PARAMETER

SUBROUTINE PARAM

TINV = 1 / T READ(11,*) STP,PRT

read(11,*) xlim READ(11,*) INI READ(11,*) N READ(11,*) NM,NML READ(11,*) LOGEPS READ(11,*) SWMINI READ(11,*) SWSUM,NSTEP

RETURNEND

Unterprogramme – Bsp. 2

call TRUAN

C MEAN ANOMALY ---> TRUE ANOMALY

SUBROUTINE TRUAN(EKAR,T)

IMPLICIT REAL(A-H,O-Z)IMPLICIT INTEGER (I-N)

Q=(1.-EKAR)/(1.+EKAR)SQ=SQRT(Q)RSQ=1./SQ

T=T*PI/180

RETURNEND