Download - FORTRAN 77

Transcript
Page 1: FORTRAN 77

FORTRAN 77

Page 2: FORTRAN 77

Allgemeines

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

müssen leer bleiben Komentare mit vorgestelltem C

Page 3: FORTRAN 77

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!

Page 4: FORTRAN 77

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

Page 5: FORTRAN 77

Ein-, Ausgeben & Die letzte Zeile

read*, a, b, c

print*, a, b, c

stop

end

muß immer am Ende stehen!

Page 6: FORTRAN 77

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

Page 7: FORTRAN 77

Beispiel

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

Page 8: FORTRAN 77

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

Page 9: FORTRAN 77

Schreiben in ein File

Ergebnisse in ein Textfile schreiben:

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

Page 10: FORTRAN 77

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)

Page 11: FORTRAN 77

Und jetzt das gleiche Bsp...

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

Page 12: FORTRAN 77

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

Page 13: FORTRAN 77

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

Page 14: FORTRAN 77

nocheinmal das gleiche Bsp.

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

Page 15: FORTRAN 77

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

Page 16: FORTRAN 77

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

Page 17: FORTRAN 77

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...

Page 18: FORTRAN 77

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

Page 19: FORTRAN 77

ein letztes Mal das gleiche Beispiel

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

Page 20: FORTRAN 77

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

Page 21: FORTRAN 77

bei grösseren Programmen

kann es sehr sinnvoll sein Unterprogramme zu verwenden:

ein Beispiel aus einem LIE – Integrator Programm:

Page 22: FORTRAN 77

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

Page 23: FORTRAN 77

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


Top Related