fortran 77. allgemeines nicht mehr als 70 zeichen pro zeile mindestens die ersten 7 zeichen müssen...
TRANSCRIPT
![Page 1: FORTRAN 77. Allgemeines Nicht mehr als 70 Zeichen pro Zeile Mindestens die ersten 7 Zeichen müssen leer bleiben Komentare mit vorgestelltem C](https://reader036.vdocuments.mx/reader036/viewer/2022062312/55204d7549795902118ca2b7/html5/thumbnails/1.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022062312/55204d7549795902118ca2b7/html5/thumbnails/2.jpg)
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. Allgemeines Nicht mehr als 70 Zeichen pro Zeile Mindestens die ersten 7 Zeichen müssen leer bleiben Komentare mit vorgestelltem C](https://reader036.vdocuments.mx/reader036/viewer/2022062312/55204d7549795902118ca2b7/html5/thumbnails/3.jpg)
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. Allgemeines Nicht mehr als 70 Zeichen pro Zeile Mindestens die ersten 7 Zeichen müssen leer bleiben Komentare mit vorgestelltem C](https://reader036.vdocuments.mx/reader036/viewer/2022062312/55204d7549795902118ca2b7/html5/thumbnails/4.jpg)
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. Allgemeines Nicht mehr als 70 Zeichen pro Zeile Mindestens die ersten 7 Zeichen müssen leer bleiben Komentare mit vorgestelltem C](https://reader036.vdocuments.mx/reader036/viewer/2022062312/55204d7549795902118ca2b7/html5/thumbnails/5.jpg)
Ein-, Ausgeben & Die letzte Zeile
read*, a, b, c
print*, a, b, c
stop
end
muß immer am Ende stehen!
![Page 6: FORTRAN 77. Allgemeines Nicht mehr als 70 Zeichen pro Zeile Mindestens die ersten 7 Zeichen müssen leer bleiben Komentare mit vorgestelltem C](https://reader036.vdocuments.mx/reader036/viewer/2022062312/55204d7549795902118ca2b7/html5/thumbnails/6.jpg)
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. Allgemeines Nicht mehr als 70 Zeichen pro Zeile Mindestens die ersten 7 Zeichen müssen leer bleiben Komentare mit vorgestelltem C](https://reader036.vdocuments.mx/reader036/viewer/2022062312/55204d7549795902118ca2b7/html5/thumbnails/7.jpg)
Beispiel
Das Programm soll mit zwei angegebene Zahlen alle Grundrechnungsarten durchführen...
![Page 8: FORTRAN 77. Allgemeines Nicht mehr als 70 Zeichen pro Zeile Mindestens die ersten 7 Zeichen müssen leer bleiben Komentare mit vorgestelltem C](https://reader036.vdocuments.mx/reader036/viewer/2022062312/55204d7549795902118ca2b7/html5/thumbnails/8.jpg)
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. Allgemeines Nicht mehr als 70 Zeichen pro Zeile Mindestens die ersten 7 Zeichen müssen leer bleiben Komentare mit vorgestelltem C](https://reader036.vdocuments.mx/reader036/viewer/2022062312/55204d7549795902118ca2b7/html5/thumbnails/9.jpg)
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. Allgemeines Nicht mehr als 70 Zeichen pro Zeile Mindestens die ersten 7 Zeichen müssen leer bleiben Komentare mit vorgestelltem C](https://reader036.vdocuments.mx/reader036/viewer/2022062312/55204d7549795902118ca2b7/html5/thumbnails/10.jpg)
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. Allgemeines Nicht mehr als 70 Zeichen pro Zeile Mindestens die ersten 7 Zeichen müssen leer bleiben Komentare mit vorgestelltem C](https://reader036.vdocuments.mx/reader036/viewer/2022062312/55204d7549795902118ca2b7/html5/thumbnails/11.jpg)
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. Allgemeines Nicht mehr als 70 Zeichen pro Zeile Mindestens die ersten 7 Zeichen müssen leer bleiben Komentare mit vorgestelltem C](https://reader036.vdocuments.mx/reader036/viewer/2022062312/55204d7549795902118ca2b7/html5/thumbnails/12.jpg)
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. Allgemeines Nicht mehr als 70 Zeichen pro Zeile Mindestens die ersten 7 Zeichen müssen leer bleiben Komentare mit vorgestelltem C](https://reader036.vdocuments.mx/reader036/viewer/2022062312/55204d7549795902118ca2b7/html5/thumbnails/13.jpg)
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. Allgemeines Nicht mehr als 70 Zeichen pro Zeile Mindestens die ersten 7 Zeichen müssen leer bleiben Komentare mit vorgestelltem C](https://reader036.vdocuments.mx/reader036/viewer/2022062312/55204d7549795902118ca2b7/html5/thumbnails/14.jpg)
nocheinmal das gleiche Bsp.
Diesmal wollen wir die Zahlen mit Hilfe einer do – Schleife einlesen bzw. auch rausschreiben...
![Page 15: FORTRAN 77. Allgemeines Nicht mehr als 70 Zeichen pro Zeile Mindestens die ersten 7 Zeichen müssen leer bleiben Komentare mit vorgestelltem C](https://reader036.vdocuments.mx/reader036/viewer/2022062312/55204d7549795902118ca2b7/html5/thumbnails/15.jpg)
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. Allgemeines Nicht mehr als 70 Zeichen pro Zeile Mindestens die ersten 7 Zeichen müssen leer bleiben Komentare mit vorgestelltem C](https://reader036.vdocuments.mx/reader036/viewer/2022062312/55204d7549795902118ca2b7/html5/thumbnails/16.jpg)
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. Allgemeines Nicht mehr als 70 Zeichen pro Zeile Mindestens die ersten 7 Zeichen müssen leer bleiben Komentare mit vorgestelltem C](https://reader036.vdocuments.mx/reader036/viewer/2022062312/55204d7549795902118ca2b7/html5/thumbnails/17.jpg)
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. Allgemeines Nicht mehr als 70 Zeichen pro Zeile Mindestens die ersten 7 Zeichen müssen leer bleiben Komentare mit vorgestelltem C](https://reader036.vdocuments.mx/reader036/viewer/2022062312/55204d7549795902118ca2b7/html5/thumbnails/18.jpg)
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. Allgemeines Nicht mehr als 70 Zeichen pro Zeile Mindestens die ersten 7 Zeichen müssen leer bleiben Komentare mit vorgestelltem C](https://reader036.vdocuments.mx/reader036/viewer/2022062312/55204d7549795902118ca2b7/html5/thumbnails/19.jpg)
ein letztes Mal das gleiche Beispiel
Wir wollen jetzt nur die Zahlen > 0 in das ergebnis – file geschrieben haben...
![Page 20: FORTRAN 77. Allgemeines Nicht mehr als 70 Zeichen pro Zeile Mindestens die ersten 7 Zeichen müssen leer bleiben Komentare mit vorgestelltem C](https://reader036.vdocuments.mx/reader036/viewer/2022062312/55204d7549795902118ca2b7/html5/thumbnails/20.jpg)
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. Allgemeines Nicht mehr als 70 Zeichen pro Zeile Mindestens die ersten 7 Zeichen müssen leer bleiben Komentare mit vorgestelltem C](https://reader036.vdocuments.mx/reader036/viewer/2022062312/55204d7549795902118ca2b7/html5/thumbnails/21.jpg)
bei grösseren Programmen
kann es sehr sinnvoll sein Unterprogramme zu verwenden:
ein Beispiel aus einem LIE – Integrator Programm:
![Page 22: FORTRAN 77. Allgemeines Nicht mehr als 70 Zeichen pro Zeile Mindestens die ersten 7 Zeichen müssen leer bleiben Komentare mit vorgestelltem C](https://reader036.vdocuments.mx/reader036/viewer/2022062312/55204d7549795902118ca2b7/html5/thumbnails/22.jpg)
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. Allgemeines Nicht mehr als 70 Zeichen pro Zeile Mindestens die ersten 7 Zeichen müssen leer bleiben Komentare mit vorgestelltem C](https://reader036.vdocuments.mx/reader036/viewer/2022062312/55204d7549795902118ca2b7/html5/thumbnails/23.jpg)
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