Pi ermitteln
-
Thorsten C++ schrieb:
Mit freundlichen Grüßen, ein verzweifelter C++ Programmierer, Thorsten
Du meinst wohl verzweifelter C-Programmierer. In deinem Code ist kein Stück C++.
Wenn du zwei
int
dividierst, wird wieder einint
herauskommen. Caste mindestens einen Typen vor der Division oder benutzefloat
-Literale:e = 1.f/n;
Falls du doch C++ und nicht C programmieren willst:
#include <iostream> // du brauchst keine C-Header mehr int main() // main muss int zurückgeben { int a,n=1,i; // Variablen erst dann deklarieren, wenn man sie braucht float e,pi=0; clrscr(); // nicht C++- oder C-Standard gotoxy(2,2); // nicht C++- oder C-Standard printf("GEBEN SIE DIE ANZAHL MIT DER pi ERMITTELT WERDEN SOLL EIN:"); // in C++ ist std::cout normalerweise angebrachter als printf() scanf("%d",&a); // statt scanf() kannst du std::cin verwenden // Statt dieser Schleife... for(i=1;i<=a;i++) { e=1/n; n=n+2; pi=pi+e; n=n*(-1); } // ...nimmst du diese: for (int i = 1; i <= a; ++i) // i erst hier deklarieren { e = 1.f/n; // float verwenden n += 2; // Operator += pi += e; // Operator += n = -n; // Besser Vorzeichen wechseln als multiplizieren } pi *= 4; // Operator *= }
-
Reines C ist es auch nicht
-
Ich weiß nicht ob es schon einer gesagt hat, aber das ist kein C++. Das ist reines C.
-
übrigens schrieb:
Ich weiß nicht ob es schon einer gesagt hat, aber das ist kein C++. Das ist reines C.
ist es eben nicht^^
ist zwar C++ dabei, aber gotoxy, clrscr und getch sind alles dreis imho keine ansi C funktionen
-
Hab irgendwie sowas gehört.
-
Hallo zusammen,
Danke für eure Antworten.
Ach ja ich Programmier im Borland C dort schreibt es, wenn man es öffnet, immer C++ hin, deswegen schrieb ich bei meinen ersten Beitrag C++.OK Danke nochmals, das Prog. rechnet jetzt mit Nachkommastellen
(der Fehler wäre mir überghaupt nicht aufgefallen ,danke nochmals)
doch leider gibt es wenn man z.B. bei 'a' 3 eingibt keine 3,466667 aus.Ist da noch was falsch?
Mit freundlichen Grüßen, ein schlauer gewordener C Programmierer, Thorsten
-
Thorsten C++ schrieb:
leider gibt es wenn man z.B. bei 'a' 3 eingibt keine 3,466667 aus.
Sondern?
Wenn dein Programm in ANSI-C wäre, würd ich's vielleicht ausprobieren, aber Borland hab ich grad nicht da (mein DOS-PC ist schon ein paar Jahre eingemottet).
-
Hallo Bashar,
Er gibt 6.666667 aus, bei Eingabe von 3Mein prog. ist leider nicht in ANSI-C.
mfg Thorsten
-
Ah ich seh schon, dein Algorithmus ist falsch:
for(i=1;i<=a;i++) { e=1/n; n=n+2; pi=pi+e; n=n*(-1); }
Nach dem ersten Durchlauf ist n -3 (richtig), nach dem zweiten Durchlauf ist n -(-3+2) = 1 (falsch). Wenn ich nicht irgendeinen Trick übersehe, muss man das Vorzeichen getrennt vom Nenner verwalten:
int sign = 1; for (i=1; i<=a; ++i) { pi += sign * 1.0 / n; sign = -sign; n += 2; }
-
Heyyyyy, Bashar,
DANKE es funktioniert , du hast recht gehabt, mein Algorithmus war falsch.
D A N K E
sehr nette und gute Grüße, Thorsten