230 likes | 420 Views
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
E N D
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 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 Die erste Zeile Zwei Variablen dürfen nie den gleichen Namen haben!
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 Die Grundrechnungsarten
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) do 100 n=1,7 read(11,*,end=200) b(n), c(n) 100 continue 200 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...
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 if - else
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