Prinz01 Geschrieben 16. Oktober 2005 Geschrieben 16. Oktober 2005 Hallo - ich versuch schon die ganze Zeit, den Kreissegment im C++ zu berechnen - aber es kommt immer was andereres raus #include <iostream> #include <math.h> using namespace std; int main () { double a, r, pi; double sin(double a); cout << "Mittelpunktswinkel (Gradmaß):\t"; cin >> a; cout << "Radius:\t\t"; cin >> r; pi = 3.14159; cout << "KreissegmentsFlaeche:\t" << float (((a / 360) * (r * r) * pi) - ((1 / 2) * (r * r) * sin(a))) << endl; return 0; } formel für kreissegment: A= (alpha/360) * r^2 * PI - (1/2) * r^2 * sin(alpha) kann mir bitte einer sagen - was ich da falsch mache??? thx Zitieren
Prinz01 Geschrieben 16. Oktober 2005 Autor Geschrieben 16. Oktober 2005 zb: alpha=90 , r = 5 , Fläche = 7, 135! Zitieren
Klotzkopp Geschrieben 16. Oktober 2005 Geschrieben 16. Oktober 2005 Die Winkelfunktionen aus <math.h> (bzw. <cmath>, wie die Headerdatei bei C++ heißt) gehen davon aus, dass der Winkel in Bogenmaß angegeben wird, nicht in Grad. Auch deine Formel müsstest du dementsprechend ändern. P.S.: Wenn du Code-Tags benutzt, geht die Einrückung deines Codes nicht verloren. P.P.S.: Es ist nicht besonders höflich, seine Frage mit dem Zusatz "wichtig" zu versehen. Damit sagst du, dass die Fragen der Anderen nicht wichtig sind. Zitieren
Prinz01 Geschrieben 16. Oktober 2005 Autor Geschrieben 16. Oktober 2005 Also ich versteh das nicht ganz wie würde dass dann aussehen? da ich ein Beginner bin - kenn ich mich da nicht so aus! :-( Zitieren
Klotzkopp Geschrieben 16. Oktober 2005 Geschrieben 16. Oktober 2005 Also ich versteh das nicht ganzWeißt du, was Bogenmaß ist? Ein ganzer Kreis = 360° sind 2 Pi. Ein rechter Winkel ist Pi/2. Wenn der Benutzer den Winkel in Grad eingeben soll, musst du ihn mit Pi multiplizieren und durch 180 teilen, bevor du ihn an eine der Winkelfunkionen übergibst. Die 360 in der Formel musst du durch 2 Pi ersetzen. Zitieren
Prinz01 Geschrieben 16. Oktober 2005 Autor Geschrieben 16. Oktober 2005 Also ich habs veruscht - so wie du es sagtest - aber wieder ein Fehler??? #include <iostream> #include <math.h> using namespace std; int main () { double a, r, pi; double sin(double a);cout << "Mittelpunktswinkel (Gradmaß):\t"; cin >> a; pi = 3.14159; a = (a * pi) / 180; cout << "Radius:\t\t"; cin >> r; cout << "KreissegmentsFlaeche:\t" << (((a / (2*pi)) * (r * r) * pi) - ((1 / 2) * (r * r) * sin(a))) << endl; return 0; } Zitieren
Klotzkopp Geschrieben 16. Oktober 2005 Geschrieben 16. Oktober 2005 Also ich habs veruscht - so wie du es sagtest - aber wieder ein Fehler??? Normalerweise ist eine ausführlichere Fehlerbeschreibung immer besser. Aber hier sehe ich auch so, wo es klemmt: 1 / 2Dieser Ausdruck in deiner Formel ist immer 0. Das liegt daran, dass der Compiler hier zwei ganzzahlige Operanden sieht und demzufolge eine Integerdivision ausführt. Das Ergebnis ist 0. Du könntest entweder einen der beiden Operanden durch ein Double-Literal ersetzen (2.0) oder die Formel umstellen und am Ende durch zwei teilst. Sobald nämlich mindestens einer der beiden Operanden keinen Ganzzahltyp mehr hat, macht der Compiler eine Fließkommadivision. Zitieren
Prinz01 Geschrieben 16. Oktober 2005 Autor Geschrieben 16. Oktober 2005 Dieser Ausdruck in deiner Formel ist immer 0. Das liegt daran, dass der Compiler hier zwei ganzzahlige Operanden sieht und demzufolge eine Integerdivision ausführt. Das Ergebnis ist 0. Du könntest entweder einen der beiden Operanden durch ein Double-Literal ersetzen (2.0) oder die Formel umstellen und am Ende durch zwei teilst. Sobald nämlich mindestens einer der beiden Operanden keinen Ganzzahltyp mehr hat, macht der Compiler eine Fließkommadivision. also es sieht jetzt so bei mir aus - und die richtige Lösung kommt endlich raus: cout << "KreissegmentsFlaeche:\t" << (((a / (2*pi)) * (r * r) * pi) - ((0.5) * (r * r) * sin(a))) << endl; meinst du mit double-literal - 0.5?? und wieso es vorher 0 kam - hab ich auch nicht verstanden - aber es funktioniert jetzt - das zählt Danke for your help :uli Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.