Hallo, wie kann ich die Kreiszahl PI mit Hilfe der folgenden Reihendarstellung nach Gottfried Willhelm Leibniz berechnen(In C)?
Die Aufgabe lautet: Schreiben Sie eine Funktion double leibniz (double n), welche die obige Reihenentwicklung bis zum Summand n berechnet und das Ergebnis ausgibt. Verwenden Sie für alle Variablen den Datentyp double.
(Programmiersprache C)
Ich sitze nun schon Stunden daran und weiß nicht weiter.
Muss es bis morgen abgeben und alles was ich versuche ist falsch es kommt nie das gewollte Ergebnis raus.
Das obere ist immer die Eingabe der Funktion und das untere der gewollte return Wert, aber ich weiß nicht wie ich dahin kommen kann.
leibniz(2);
3.466667
leibniz(10);
3.232316
leibniz(50);
3.161199
leibniz(1000);
3.142592
leibniz(250);
3.145577
Wie siehst deine Code und deine Ausgabe den aktuell aus?
double leibniz(double n) {
double pi = 0.0;
for (int i = 0; i < n; i++) {
double z = 1.0 / (2 * i + 1);
if (i % 2 == 0) {
pi += z;
}
else {
pi -= z;
}
}
pi *= 4.0;
return pi;
}
..
Darf anscheinend nicht so viel schreiben habe den code den ich jetzt versucht habe geschickt und es kommt bei mir 2.666667 bei leibniz(2); und nicht 3.466667.
1 Antwort
Versuch es doch mal mit Double-Literalen und Werten:
(2.0 * ((double) i) + 1.0);
Ansonsten: Vielleicht ist die Grenze "n" inklusiv gemeint? (Also kleiner gleich statt kleiner.)
Habe bemerkt das der Fehler kam weil ich double i auch in der for schleife versucht habe. Der Code jetzt hat keinen Syntaxfehler aber ist angeblich trotzdem falsch. Und wenn ich double d = i; versuche kommt wieder ein Syntaxfehler.
double leibniz(double n) {
double pi = 0.0;
for (int i = 0; i <= n; i++) {
double z = 1.0 / (2.0 * (double)i + 1.0);
if (i % 2 == 0) {
pi += z;
}
else {
pi -= z;
}
}
pi *= 4.0;
return pi;
}
Alles klar ich schreibe eine Mail und frage ob der Compiler einen Fehler hat und vielen Dank für die Hilfe!
Das ist mein momentaner Code
double leibniz(double n) {
double pi = 0.0;
for (int i = 0; i <= n; i++) {
double z = 1.0 / (2 * i + 1);
if (i % 2 == 0) {
pi += z;
}
else {
pi -= z;
}
}
pi *= 4.0;
return pi;
}
Bei Visual Studio bekomme ich das richtige Ergebnis raus aber auf der Website wo ich das hochladen muss kommt anscheinend die falsche Lösung raus. Habe auch schon vesucht es zu double werten zu ändern.
Danke war das kleiner gleich weiß nicht wie ich das nie bemerkt habe. Ich schaue jetzt ob der code komplett richtig ist, aber sollte wahrscheinlich.
Wenn ich (double) i versuche bekomme ich auch einen Syntaxfehler bei der Website zum hochladen. Weiß nicht was ich noch ändern kann oder muss.