Yahoo Clever wird am 4. Mai 2021 (Eastern Time, Zeitzone US-Ostküste) eingestellt. Ab dem 20. April 2021 (Eastern Time) ist die Website von Yahoo Clever nur noch im reinen Lesemodus verfügbar. Andere Yahoo Produkte oder Dienste oder Ihr Yahoo Account sind von diesen Änderungen nicht betroffen. Auf dieser Hilfeseite finden Sie weitere Informationen zur Einstellung von Yahoo Clever und dazu, wie Sie Ihre Daten herunterladen.
hallo ist sehr wichtig?
C++ - Was stimmt hier nicht?
Das hier soll ein ganz einfaches Programm sein um Pi bei einer bestimmten Genauigkeit gemäß der Formel
Pi/4 = 1/1 - 1/3 + 1/5 - 1/7 + 1/9 ...
zu berechen. Allerdings funktioniert irgendetwas nicht.
Sourcecode:
#include <stdio.h>
#include <iostream>
using namespace std;
int vzc = -1, vorzeichen = 1, genau = 1, nenner = 1;
double pi = 0;
main()
{
printf("\n\tBitte Genauigkeit angeben ( Nachkommastellen )\n\t");
scanf("%d", &genau);
genau *= 2;
for( nenner = 1; nenner <= genau; nenner += 2 )
{
vorzeichen *= vzc;
nenner *= vorzeichen;
pi = pi - ( 1 /nenner );
}
printf("\n\tBei einer Genauigkeit von %d ist Pi %f\n\t", genau/2, pi*4);
system("pause");
}
Wenn ich als Genauigkeit 1 eingeben also , sie 2 ist dann wird eine Berechnung durchgeführt und dann is Schluss.
Wenn ich aber 2 oder mehr eingebe, wird unendlich lang gerechnet und außerdem kommt in beiden Fällen ein falsches Ergebnis heraus.
Rest folgt...
3 Antworten
- Anonymvor 1 JahrzehntBeste Antwort
hab mich versehen, das mit den Vorzeichen ist ja drin. Ich überlege nochmal.
Sollte aber eh einfacher gehen:
Pi/4 =1/(2i-1)
Summe von 1 bis 3 = 1/(2i-1) =
1/1 + 1/3 + 1/5.
Vorzeichenwechsel (kommt nach den Einkauf):
- + - + - +
Die Folge ist der "Vorzeichenregelformel" ist:
-1, 3, 7, 11, 15, 19
Also immer +4.
Da ist noch ein Denkfehler drin, bei dem was ich geplant hab.
So, habs...alle geraden i enthalten ein Minus:
i=1 => "+" => 1/1
i=2 => "-" => (2*i-1) = 4-1 = 3, i ist aber gerade => Minus.
i=3 => "+" =>(2*3-1) = 5 , 3 ist ungerade, kein Minus.
2,4,6,8....
Zum besseren Verständnis Basic-Notation:
for i=1 to n
if i/2 = int(i/2) then vorzeichen=-1 else vorzeichen=1.
Pi=Pi+(1/(2i-1)*Vorzeichen)
next i
Und dann halt die Angabe mit Pi*4.
Mein Algorithmus ist da um Längen einfacher, auch als C++-Programm.
- GnurpelLv 7vor 1 Jahrzehnt
Also, ich habe von dem was du da geschrieben hast nicht ein bischen verstanden.