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.