TU Chemnitz, Fakultät für Mathematik, 09107 Chemnitz
Copyright © 2024 by TU Chemnitz. Alle Rechte vorbehalten.
https://www-user.tu-chemnitz.de/~pester/Lehre/LV/fortran/uebung.php?nr=14 - 18. Mai 2024 10:29
Arbeit mit Unterprogrammen und Dateien |
(als PDF-Datei mit lesbaren Formeln)
- Das Programm zum Testen der Simpsonregel ist so zu erweitern, dass die Ergebnisse als Tabelle in eine Datei geschrieben werden.
- Neben der Simpsonregel soll die Trapezregel
für jeweils die gleiche Anzahl Teilintervalle angewendet werden,
um die Ergebnisse zu vergleichen.
Trapezregel:
b
∫
a
f(x) dx ≈ h
2n
∑
k=0ck f(xk), mit h= (b-a)
n, xk=a+k h , ck = { 1, k=0 bzw. k=n 2, k=1, ,n−1 - Zum Öffnen der Datei für die Ausgabe der Tabelle ist ein
spezielles Unterprogramm zu schreiben, das vom Hauptprogramm durch
call Neue_Datei(LUN,IER)
gerufen wird und das folgendes realisieren soll: - Aufforderung zur Eingabe des Dateinamens (Einlesen auf eine Zeichenkettenvariable)
- Warnung, falls die Datei schon existiert (wahlweise trotzdem überschreiben oder mit IER=2 Fehler an Hauptprogramm melden)
- Bestimmung (mittels INQUIRE) einer freien Dateinummer LUN, der noch keine Datei zugewiesen ist
- Öffnen der Datei und Rückgabe von IER=0, wenn das fehlerfrei war, sonst IER=1 Das Unterprogramm ist damit für andere Anwendungen wiederverwendbar!
-
Ausgabe der Tabelle im Hauptprogramm (natürlich nur im
Falle IER=0) dann mit
write(LUN,*) n,Simpson(a,b,n,f),Trapez(a,b,n,f)
- Nachdem das Hauptprogramm die Ergebnisse als Tabelle
in eine Datei geschrieben hat,
soll es noch eine zweite Datei schreiben, in der die notwendigen
Steuerkommandos für Gnuplot stehen:
set data style linespoints plot "datei" using 1:2 title "Simpson",\ "datei" using 1:3 title "Trapez"
Dabei ist datei der Name der zuvor geschriebenen Datei mit den berechneten Ergebnissen. - Da das Hauptprogramm nur noch die Dateinummer der zu schreibenden Datei kennt, muss der Dateiname hier nochmals mit INQUIRE bestimmt werden, um ihn in die Steuerdatei zu schreiben.
- HINWEIS:
Zeichenketten werden in Fortran immer mit der vereinbarten Länge verarbeitet. Man benötigt aber hier nur die Teilzeichenkette, name(1:L), ohne abschließende Leerzeichen. Da dieser Fall immer wieder mal vorkommt, sollte man eine FunktionL=LEN_TRIM (string)
benutzen, welche die vereinbarte Länge LEN(string), vermindert um die Anzahl der abschließenden Leerzeichen, als Funktionswert liefert.
(LEN_TRIM könnte man sich leicht selbst schreiben, ist aber bei gfortran als Standardfunktion vorhanden) - Am Ende CLOSE(LUN) nicht vergessen.
File translated from TEX by TTH, version 2.92.