C++ Potenz und PI



  • Bin noch völlig neu was das progammieren angeht...
    Habe in den Foren schon gelesen wie man PI hinzufügt. Nur gibt die von mir erstellte Quelldatei andere Werte raus als mein Taschenrechner wo liegt der Denkfehler?

    // Anhand des Radius das volumen und die Oberfläche berechnen

    #include <iostream>
    #define _USE_MATH_DEFINES
    #include <math.h>

    using namespace std;

    int main(void)

    {
    char r;

    double v = pow(r,3);
    double o = pow(r,2);

    cout << "Gebe einen Wert ein um das Volumen und die Oberflaeche einer Kugel zu berechnen\n";
    cout << "Gebe jetzt den Radius ein ";
    cin >> r;

    cout << "\nDas Ergebnis fuer das Volumen lautet: " << 4/3*M_PI*v << "\nDas Ergebnis fuer die Oberfläche lautet: " << 4*M_PI*o << "\n\n\n";

    system ("Pause");
    return 0;
    }



  • Ein offensichtliches Problem ist, dass Du r schon verwendest, bevor Du es einliest.

    Warum ist r eigentlich ein char und kein int oder gar ein double?



  • @Furble Wurble Jetzt wo du es schreibst kann ich mich nur in die Ecke stellen und mich schämen. Beide Antworten sind korregt (die eine Frage sehe ich als rhetorisch an)

    Nach deinem Beitrag alles korrigiert und erledigt danke sehr 😃

    P.S. Eine kurze Frage habe ich noch wie kann ich dem Programm erklären das er bei der Berechnung des Volumens erst 4/3 rechnen soll bevor er mit PI weiter rechnet...



  • Und noch als Tipp:
    kann man als r*r schreiben und dann als r*r*r .

    Das spart den Aufruf von pow.



  • 4/3*M_PI*v
    

    Ist das nicht das selbe wie M_PI*v, da 4/3==1?



  • @DirkB danke merke ich mir 🙂
    @intivider ne leider nicht 1,3*PI*103 ist ein anderes Ergebnis als PI*103



  • Habe es selber gelöst:

    // Anhand des Radius das volumen und die Oberfläche berechnen

    #include <iostream>
    #define _USE_MATH_DEFINES
    #include <math.h>

    using namespace std;

    int main(void)

    {
    double r;

    cout << "Gebe einen Wert ein um das Volumen und die Oberflaeche einer Kugel zu berechnen\n";
    cout << "Gebe jetzt den Radius ein ";
    cin >> r;

    double v = pow(r,3);
    double o = pow(r,2);
    double t = 1.33333333;

    cout << "\nDas Ergebnis fuer das Volumen lautet: " << t*M_PI*v << "\nDas Ergebnis fuer die Oberflaeche lautet: " << 4*M_PI*o << "\n\n\n";

    system ("Pause");
    return 0;
    }



  • Goldeneye88 schrieb:

    P.S. Eine kurze Frage habe ich noch wie kann ich dem Programm erklären das er bei der Berechnung des Volumens erst 4/3 rechnen soll bevor er mit PI weiter rechnet...

    Binäre Operationen (also z.B. +-*/) werden zunächst in der Rangfolge der Operatoren und dann von links nach rechts abgearbeitet. In C(++) ist es nun so, dass der Typ des Ergebnisses einer solchen Operation immer dem genaueren Typ der beiden Operanden entspricht (stimmt nicht 100%ig, aber für eine Erklärung sollte es ausreichen).

    Das führt hier dazu, dass zuerst 4/3 berechnet wird, was, da beide Operanden Integer sind, einen Integer ergibt. Deshalb kommt hier 1 raus. Erst dann wird 1*PI berechnet, was wegen des Typs von PI ein Double ergibt.

    Um das zu lösen, muss mindestens einer der Operanden schon double sein. Wegen der Lesbarkeit am besten beide: 4.0 / 3.0 * PI



  • @LordJaxom Ich bedanke mich für den Beitrag jetzt fehlt meinem Programm nichts mehr 👍



  • Goldeneye88 schrieb:

    ... jetzt fehlt meinem Programm nichts mehr 👍

    vielleicht etwas Verbesserungspotential:

    da M_PI meines Wissens weder C- noch C++-Standard ist, empfehle ich folgende Konstruktion für eine Konstante ' PI '

    #include <cmath>    // wg. std::acos
    
    namespace 
    {
        const double PI = std::acos(-1.0);
    }
    

    Gruß
    Werner


Anmelden zum Antworten