Universität Karlsruhe Einstieg in die Informatik und algorithmische

Werbung
Universität Karlsruhe
SS 2005
Institut für Angewandte Mathematik II
Dr. K. Grüner
Dipl.-Math. J.-P. Weiß
|xn+1 − xn | < ²|xn |
10. Mai 2005
Praktikum zu
Einstieg in die Informatik und algorithmische Mathematik
Programmieren mit C++
Aufgabenblatt 4
Bearbeitungszeitraum: 11. Mai - 24. Mai 2005
Aufgabe 10: Mittelwerte
Pflichtaufgabe bis 24. Mai!
Erstellen Sie ein C++-Programm, das beliebig viele positive Zahlen einliest und deren arithmetischen und geometrischen Mittelwert berechnet. Dies soll mit Hilfe einer while- oder einer
do-while-Schleife realisiert werden. Bei Eingabe einer negativen Zahl soll diese ignoriert und
eine Fehlermeldung ausgegeben werden. Die Eingabe soll solange fortgesetzt werden, bis diese
durch Eingabe der Null beendet wird. Das arithmetische Mittel AN von N Zahlen a1 , . . . , aN
berechnet sich zu
AN (a1 , . . . , aN ) =
Die Iteration wird abgebrochen, wenn der relative Fehler klein genug ist, d.h. wenn
N
1 X
1
ai = (a1 + a2 + . . . + aN ).
N i=1
N
Das geometrische Mittel GN von N positiven Zahlen a1 , . . . , aN ergibt sich zu
v
uN
uY
√
N
ai = N a 1 · a 2 · . . . · a N .
GN (a1 , . . . , aN ) = t
für ein gegebenes, kleines ² erfüllt ist, oder wenn die Anzahl der Iterationsschritte eine vorgegebene Schranke überschreitet. Erstellen Sie C++-Programm, das die Nullstelle der Funktion
f (x) = x2 − 10x sin(x) + 1 mit Hilfe des Newtonverfahrens ermittelt. Gehen Sie dabei wie folgt
vor:
• Definieren Sie eine Funktion vom Typ double mit einem Argument vom Typ double, die
den Funktionswert f (x) = x2 −10x sin(x)+1 zurückliefert, und eine ebensolche Funktion,
die den Wert der Ableitung f 0 (x) berechnet. Binden Sie die Headerdatei math.h mit ein,
um auf die Funktion sin zugreifen zu können.
• Schreiben Sie ein Hauptprogramm, in dem zunächst der Startwert x0 , die Genauigkeit ²
und die maximale Schrittzahl eingelesen wird. Desweiteren soll die Nullstelle der Funktion
f mittels des Newtonverfahrens bestimmt werden.
• Geben Sie in jedem Schritt die aktuelle Näherung aus.
• Geben Sie eine Meldung aus, falls die erforderte Genauigkeit erreicht wurde oder das
Verfahren abgebrochen wurde.
Wieviele Nullstellen können Sie finden? Verwenden Sie hierzu jeweils unterschiedliche Startwerte. Gibt es Startwerte für die das Verfahren scheitert? Woran liegt das?
Aufgabe 12: Primzahlsummen
(freiwillig, keine Pflichtaufgabe!)
Eine natürliche Zahl ist eine Primzahl, falls Sie nur durch 1 und sich selbst (ohne Rest) teilbar
ist. Die Zahl 2 ist die einzige gerade Primzahl, die Zahl 1 ist per Definition keine Primzahl. Die
Primzahlen lauten somit 2, 3, 5, 7, 11, 13, . . ..
i=1
Die N -te√Wurzel aus einer positiven Zahl z kann in C++ mit Hilfe der Funktion pow aus math.h
gemäß N z =pow(z,1/N) berechnet werden.
Aufgabe 11: Newtonverfahren
Pflichtaufgabe bis 24. Mai!
Das Newtonverfahren ist eine effektive Methode zur Bestimmung einer Nullstelle einer gegebenen Funktion f . Ausgehend von einem geeigneten Startwert x0 wird eine Folge von Iterationen
gemäß dem Schema
xn+1 = xn −
bestimmt.
f (xn )
,
f 0 (xn )
n = 0, 1, . . .
a) Erstellen Sie ein C++-Programm, das eine ganze positive Zahl einliest und entscheidet,
ob diese Zahl eine Primzahl ist.
b) Erstellen Sie ein C++-Programm, das zu jeder geraden Zahl n > 2 zwei Primzahlen p
und q mit n = p + q findet. Ist das für jede gerade Zahl möglich?
c) Erstellen Sie ein C++-Programm, das zu jeder ungeraden Zahl n > 5 drei Primzahlen p
und q und r mit n = p + q + r findet.
Verwenden Sie geeignete Schleifenkonstruktionen.
Hinweis: Mittels einer Auswertung des Ausdrucks N %2 kann untersucht werden, ob die ganze
Zahl N gerade ist oder nicht.
Herunterladen