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


Anmelden zum Antworten