FORTRAN 77

Werbung
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 (ah,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:





sonstige Funktionen:

a=b+c
a=b–c
a=b*c
a=b/c





Potenzen und Wurzeln

a = b**c
a = sqrt(b) = b
c
a = b**(1/c) = b




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
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, c
read(11,*) b1, c1
read(11,*) b2, c2
Usw...
write(12,*) a, a1, a2
write(12,*) aa, aa1, aa2
Usw...
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, 4
read(11,*) b, c
a=b+c
write(12,*) a
100
continue
close(11)
close(12)
stop
end
nur einlesen
dimension b(10), c(10)
100
200
do 100 n=1,7
read(11,*,end=200) b(n), c(n)
continue
stop
end
damit lassen sich beliebig viele Zahlen einlesen und z.B. in
do – Schleifen verwenden
end=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>d
if(a.lt.b.and.c.gt.d) then....
Bedingung: a<b oder c<d
if(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
RETURN
END
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
RETURN
END
Herunterladen