View
55
Download
0
Category
Preview:
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
Citation preview
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
Recommended