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:
r²kann man alsr*rschreiben undr³dann alsr*r*r.Das spart den Aufruf von pow.
-
4/3*M_PI*vIst 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