Brauche Hilfe bei der Berechnung von pi in c++



  • hallo, habe noch nicht viel Erfahrung mit c++ und deshalb noch große Probleme die folgende Aufgabe zu lösen.
    Man soll durch eine Annäherung mit der Streifenmethode (Ober- Untersumme) pi berechnen.
    Das Programm soll mit n=4,8,16,... die untere und die obere Schranke für pi berechnen, bis sich beide Werte um weniger als eps= 0.00001 unterscheiden.

    Hier mein Ansatz:

    #include <iostream>
    #include <math.h>
    using namespace std;

    //Definition der Untersumme

    double Untersumme(double n)
    {double Ergebnis=0;
    for (int i=1; i<=n; i=i+1)
    Ergebnis = Ergebnis +((1/n)*sqrt(1-pow(i/n,2)));

    return 4*Ergebnis;
    }

    // Definition der Obersumme

    double Obersumme(double n)
    { double Ergebnis=0;
    for (int i=0; i<=(n-1); i++)
    Ergebnis = Ergebnis +((1/n)*sqrt(1-pow(i/n,2)));

    return 4*Ergebnis;
    }
    int main()
    {
    int n=4;

    double diff, eps=0.00001;
    do
    {
    diff = Untersumme(n) - Obersumme(n);
    n= n*2;
    }while (diff >= eps);
    }

    Ich hoffe, dass mir jemand weiterhelfen kann.
    Jetzt schon vielen Dank
    bin solangsam wirklich verzweifelt 😕



  • Hallo

    Und wo genau kommst du nicht weiter? Fehlerbeschreibung?

    Und bitte beachten : sfds

    bis bald
    akari



  • #include <iostream>
    #include <math.h>
    using namespace std;
    
    //Definition der Untersumme
    double Untersumme(double n)
    {
        double Ergebnis=0;
        for (int i=1; i<=n; i=i+1)
            Ergebnis = Ergebnis + (1/n)*sqrt(1-pow(i/n,2));
    
        return 4*Ergebnis;
    }
    
    // Definition der Obersumme
    double Obersumme(double n)
    { 
        double Ergebnis=0;
        for (int i=0; i<=(n-1); i++)
            Ergebnis = Ergebnis + (1/n)*sqrt(1-pow(i/n,2));
    
        return 4*Ergebnis;
    }
    int main()
    {
        int n=4;
        double diff, eps=0.00001;
        do
        {
            // diff = Untersumme(n) - Obersumme(n);
            diff = Obersumme(n) - Untersumme(n);  // besser, da Obersumme > Untersumme
            n = n*2;
        }
        while (diff >= eps);
        // Ausgabe wäre doch auch nicht verkehrt, oder
        cout << Untersumme( n ) << " " << Obersumme(n) << endl;
        return 0;
    }
    

    Gruß
    Werner


Anmelden zum Antworten