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 ein int herauskommen. Caste mindestens einen Typen vor der Division oder benutze float -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 3

    Mein 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


Anmelden zum Antworten