Nächste Seite: Über dieses Dokument ...
7. Übung des Programmierpraktikums
Abgabetermin: 2. Juni 2009, 23:59 Uhr
Die Übungen sind grundsätzlich allein zu machen.
Gruppenarbeit ist nicht erlaubt.
Abzugeben sind jeweils die sinnvoll dokumentierten
Programmfiles
(Files für Bsp. 5: bsp_5.cpp, bsp_5_fkt.cpp, bsp_5_fkt.hpp )
indem Sie diese in Ihr Verzeichnis im globalen Abgabeordner kopieren.
- In Aufgabe 19 (Blatt 6) haben wir die Vektorlängen (Feldlängen)
nur statisch vereinbaren können.
Ändern Sie Ihren Code (alternativ auch die Beispiellösung) entsprechend
§6.4
des
Skriptes so ab, daß nach dem Abfragen der Vektorlänge n die Vektoren
dynamisch allokiert werden und dann die Berechnungen aus Aufgabe 19 folgen.
Vergessen Sie nicht das explizite Deallokieren des dynamischen Speichers.
Eingabedaten (n): (4), (20), (31553)
- In mathematics, the Fibonacci numbers form a sequence defined
recursively by the following formulas:
Fn =

Write a recursive function
fibonacci(n) that computes the n-th
element of the sequence. Show that the ratio of a term with respect
to the previous one tends to
.
Input data (n): (2), (20), (60)
- Verändern Sie Ihr Hauptprogramm der vorigen Aufgabe so,
- daß die Variable n sowohl als Kommandozeilenparameter, siehe
§7.6
des Skriptes
- als auch über cin (wie bislang) übergeben werden kann,
falls nicht genügend Kommandozeilenparameter vorhanden sind.
- Schreiben Sie eine weitere Funktion zur Berechnung der Fibonaccizahlen, welche
mittels eines Zählzyklus realisiert ist.
- Vergleichen Sie die Laufzeiten Ihrer beiden Fibonaccifunktionen (aus Aufg. 22 und 23) mittels
der Zeitmessung in
§11.2
des Skriptes.
Eingabedaten (n): (4), (20), (40), (60)
- Implementieren Sie eine Funktion riemann,
zum (numerischen) Integrieren einer geg. Funktion f (x)
mit Hilfe der Riemann-Summen
f (
x)
dx =
f (
a +
jh)
. h
wobei das geg. Intervall von a bis b in (geg.) n gleichgroße Intervalle der
Länge h unterteilt wird.
Die zu integrierende Funktion ist ebenfalls eine INPUT-Größe der Parameterliste,
siehe Beispielfunktion Bisect3 in
§7.8
der Vorlesung
(auch in Bisect3.cpp).
Testdaten:
sqrt() in [1, 4], cos() in
[0,
/2],
log() in
[1, e]
- Implementieren Sie eine Funktion derivative, die unter Verwendung
einer gegebenen Schrittweite h,
die numerische Ableitung der (über)gebenen Funktion f (x)) an einem
vorgegebenen Punkt x berechnet.
Verwenden Sie die Formel
f'(
x) =
Testdaten:
sqrt() in x = 4, cos() in x =
/6,
log() in x = 1,
- In dieser Aufgabe müssen Sie sich unbedingt an die gegebenen Filebezeichnungen halten,
die da wären bsp_26_fkt.hpp für das Headerfile und bsp_26_fkt.cpp
für das Sourcefile Ihrer zu schreibenden/geschriebenen Funktionen.
Kopieren Sie Ihre Funktionen derivative und riemann aus
den beiden vorigen Aufgaben in Header- und Sourcefile, und testen Sie deren korrekte
Nutzung in einem kurzen Hauptprogramm.
Ende für LAK
- Schreiben Sie verbesserte Funktionen riemann und derivative welche
das bestimmte Integral (bzw. den Ableitungswert) mit einer Genauigkeit von
zurückgeben. Speichern Sie diese Funktionen ebenfalls in den
Files bsp_26_fkt.hpp, bsp_26_fkt.cpp.
Testen Sie deren korrekte Nutzung bei
= 10-4 mit den Testdaten
aus Aufg. 24 und 25 in Ihrem Hauptprogramm.
Achten Sie insbesondere bei der Differentiation darauf, daß die Schrittweite h nicht zu klein wird
(Maschinen-Epsilon in §3.9
bzw. Reihe.cpp).
- Die Bestimmung der Nullstelle einer Funktion f (x) ist sehr effizient berechenbar mit der
Newton-Iteration
xn+1 : = xn - f (xn)/f'(xn)
für einen geeigneten Startwert
x0
[a, b]
(die math. Voraussetzung, daß die Funktion
xn - f (xn)/f'(xn)
eine kontraktive Abbildung ist, muß
in Ihrem Programm nicht getestet werden).
Nutzen Sie Ihre Funktionen aus den Aufgaben 25 und 26 und erweitern Sie die
Files bsp_26_fkt.hpp, bsp_26_fkt.cpp um Ihre Funktion
newton_diff_approx().
Testen Sie Ihren Nullstellenloeser (und überprüfen Sie die Lösung)
im Hauptprogramm mit den folgenden Funktionen:
Testdaten:
| f (x) |
: = |
sin(x) - x/2 |
| g(x) |
: = |
- (x - 1.234567)(x + 0.987654) |
| h(x) |
: = |
3.0 - ex |
| z(x) |
: = |
cos(x) - ex ln| x| |
generelle Hinweise:
Die Befehle break, continue, goto
sind nicht erlaubt.
Abgabe der Lösungen:
Die Abgabe der Lösungen (*.cpp-Files, *.hpp, ...,
keine exe-Files)
erfolgt ausschließlich durch das Kopieren dieser Files
in Ihr (beim erstenmal anzulegendes) Verzeichnis
Nachname_Vorname im globalen Abgabeordner
y: \\pers.ad.uni-graz.at\fs\ou\621\stud_haase\Nachname_Vorname .
Hinweise hierzu sind unter der
LV-Homepage
zu finden.
Die Filenamen müssen dem Schema bsp_nummer,
gefolgt von der Filextension, entsprechen. Z.B. ist in Beispiel 1 das File
bsp_1.cpp abzugeben.
Andere Filebezeichner zählen als nicht abgegebene Files.
Nächste Seite: Über dieses Dokument ...
Gundolf Haase
2009-05-05