Hilfe bei Hausaufgabe (Näherungsverfahren für Pi)
-
So hier ist mal die Aufgabenstellung: http://www.tfh-berlin.de/~radners/WS2007_8/IM/aufgaben/HA2.pdf
Die Werte für das 6- Eck sind ja Uu6 und Ui6.
Für das 12- Eck müssen die Werte nun in die Formel eingesetzt werden. Für das 24- Eck die Ergebnisse vom 12- Eck usw.
Bisher habe ich das ganze in eine sehr einfache Form gebracht, die mir für das 6- Eck und das 12- Eck die Werte berechnet. Das könnte ich jetzt auch noch ewig weiter führen, bis ich Pi auf 3-4Kommastellen genau raus habe. Jedoch hab ich dann keine if- Anweisung oder for- Schliefe angewandt und wüsste auch nicht, wie er mir nur den Wert für eine Iteration also das 6- Eck anzeigt.
Die Formel beschreibt doch auch schon eine Iteration oder? Die weiteren Werte sollten dann in einer for- Schleife ausgerechnet werden mit den selben Variablen, die nach 4 oder 5 Iterationen abbricht.
Das Problem ist nur, dass ich jetzt 0 Ahnung habe wie ich das realisieren soll.
Wäre für Hilfe sehr dankbar.
Hier ist noch mal der sehr einfache Code, den ich schon geschrieben habe mit den deklarierten Variablen:
#include <cstdlib> #include <iostream> #include <iomanip> #include <cmath> using namespace std; int main(int argc, char *argv[]) { double Uin; // Innenkreis double Uun; // Umkreis const long double PiREELL=3.14159265358979323846264338328L;// pi const double Uu= 2*sqrt(3); // Umfang Umkreis const double Ui= 3; // Umfang Innenkreis double ite; // Iterationen double Pi; // Näherung für Pi double Eck = 6; // Eckzahl double eck12; // Ecken (nur zum Test) double abw; // Abweichung // Pi- Brechnung cout << "PI- Naeherung" <<endl; cout << " " << endl; eck6:{ Uun = Uu; Uin = Ui; Pi = (Uun+Uin)/2; Eck = Eck; abw = Pi-PiREELL; } cout << "Pi ist jetzt:" << Pi << endl; cout << "Uu ist jetzt:" << Uun << endl; cout << "Ui ist jetzt:" << Uin << endl; cout << "Die Abweichung betraegt:" << abw << endl; cout << "Die Eckzahl ist jetzt:" << Eck << endl; cout << " " << endl; eck12:{ Uun = (2*Ui*Uu)/(Ui+Uu); Uin = sqrt(Ui*Uun); Pi = (Uun+Uin)/2; Eck = 2*Eck; abw = Pi-PiREELL; } cout << "Pi ist jetzt:" << Pi << endl; cout << "Uu ist jetzt:" << Uun << endl; cout << "Ui ist jetzt:" << Uin << endl; cout << "Die Abweichung betraegt:" << abw << endl; cout << "Die Eckzahl ist jetzt:" << Eck << endl; cout << " " << endl; system("PAUSE"); return EXIT_SUCCESS; }
-
in Deiner Aufgabenstellung steht:
"Lerninhalte: if-Bedingung, for-Schleife, tabellarische cout-Formatierung"Den Anfang hast Du ja schon gemacht. Statt es für jedes n-Eck hinzuschreiben kannst Du das in einer for-Schleife fassen und auch als Tabelle ausgeben.
// Startwerte wie gehabt double Uu= 2*sqrt(3.0); // Umfang Umkreis double Ui= 3; // Umfang Innenkreis for( ; /*Abbruchkriterium?*/; ) { // -- jetzt eine (!) Zeile der Tabelle ausgeben ... // ... // anschließend Uu und Ui neu berechnen Uu = (2*Ui*Uu)/(Ui+Uu); // Uu ist jetzt Uun Ui = sqrt(Ui*Uu); }zur formatierten Ausgabe schaue Dir bitte mal setw, setprecision und fixed an.
Gruß
Werner