Abbruchkriterium einer while schleife



  • [cpp]
    # include <iostream.h>
    # include <conio.h>

    void main (void) {
    double anzahlSchleifendurchlaeufe,ungeradeZahl,genauigkeit,pi,zahlenReihe;
    ungeradeZahl=3; //Noch mehr Speicher
    zahlenReihe=1;
    bool minus=true;

    // Eingabe
    cout << "Geben Sie an wie weit die Summe, der Klammer berechnet werden soll !"<< endl;
    cin >>genauigkeit ;

    if(genauigkeit>0) { //Prüfen, ob ein postiver Wert eingegeben wurde

    while (anzahlSchleifendurchlaeufe<=genauigkeit)//Prüfung, wie lange die Schleife noch durchlaufen werden muss
    {

    if (minus==true ) { //Berechnung der negativen Bruchzahlen
    zahlenReihe=zahlenReihe-(1/ungeradeZahl);
    minus=false;
    }
    else
    {
    zahlenReihe=zahlenReihe+(1/ungeradeZahl); //Berechnung der positiven Bruchzahlen
    minus=true;
    }

    anzahlSchleifendurchlaeufe=anzahlSchleifendurchlaeufe+1;
    ungeradeZahl=ungeradeZahl+2;
    }

    // Pi berechnen
    clrscr();
    pi=(zahlenReihe)*4;

    // Ausgabe von Pi
    cout <<" Pi betraegt: "<<pi<< endl;
    getch ();
    }

    else
    {
    cout <<"Sorry, leider werden nur positive Zahlen akzeptiert! "<<endl;
    getch();
    }
    }
    Meine Frage ist sicher nicht alltäglich doch das Forum hier ist meine letzte Rettung. Bin Informatik student an einer Fachhochschule , und muss bis Donnerstag eine Programmieraufgabe überarbeitet haben. Mein Problem ist ich weiß nicht genau wie ich das anstellen soll. Nun das programm das wir schreiben sollten , soll die Zahl pi berechnen , dabei soll der Benutzer entscheiden können , bis zu welcher kommastelle das geschieht.(Benutzer gibt an 5 Kommastellen -->Ausgabe 3,14159 . So weit so gut. Mein problem liegt darin , wie ich das mit dem Abbruchkriterium in der while schleife anstellen soll.
    Ich bedanke mich schon mal im Voraus .
    Mfg Tiga551



  • Tiga551 schrieb:

    [cpp]
    Meine Frage ist sicher nicht alltäglich doch das Forum hier ist meine letzte Rettung. Bin Informatik student an einer Fachhochschule , und muss bis Donnerstag eine Programmieraufgabe überarbeitet haben. Mein Problem ist ich weiß nicht genau wie ich das anstellen soll. Nun das programm das wir schreiben sollten , soll die Zahl pi berechnen , dabei soll der Benutzer entscheiden können , bis zu welcher kommastelle das geschieht.(Benutzer gibt an 5 Kommastellen -->Ausgabe 3,14159 . So weit so gut. Mein problem liegt darin , wie ich das mit dem Abbruchkriterium in der while schleife anstellen soll.
    Ich bedanke mich schon mal im Voraus .
    Mfg Tiga551

    leider blicke ich bei deinem prog gar nicht durch. Was soll es machen?
    Pi berechnen? Pi ist doch konstant...
    schreib' am besten die ganze aufgabenstellung



  • Der Mathematiker Leibnitz hat herausgefunden, dass man die Kreiszahl Pi auf folgende Art und Weise berechnen kann:

    Pi = (1 - 1/3 + 1/5 - 1/7 + 1/9 - 1/11 + 1/13 + ...) *4

    Schreiben Sie ein Programm, das nach diesem Verfahren die Zahl Pi berechnet. Da es sich um ein Nährungsverfahren handelt, dessen Ergebnis sich immer weiter an die tatsächliche Zahl Pi annährt, je weiter die Summe berechnet wird, soll das Programm vor der Berechnung fragen, wie weit die Summe gebildet werden soll, damit keine unendliche Reihe entsteht.



  • Das Problem ist das du nicht wissen kannst, wie genau dein Ergebnis ist, weil du ja PI nicht kennst. Oder hab ich das Problem nicht verstanden?



  • a=a->next schrieb:

    Das Problem ist das du nicht wissen kannst, wie genau dein Ergebnis ist, weil du ja PI nicht kennst.

    Klar kann man das wissen. Sei a_n die obige Folge. Dann ist |a_n - a_{n-1}| > |a_n - pi|, man hat also eine Abschaetzung nach oben.



  • Tiga551 schrieb:

    [cpp]
    dabei soll der Benutzer entscheiden können , bis zu welcher kommastelle das geschieht

    ich glaube du hast die aufgabenstellung falsch verstanden. es sollen nicht die kommastellen gecheckt werden, sondern die anzahl der durchlaeufe...
    so ist dein prog in ordnung, was fehlt ist die initialiesierung der variable anzahlSchleifendurchlaeufe = 0 ;
    geprüft habe ich das nicht, aber auf den ersten blick sieht es danach aus...

    p.s.
    gewoene die einen sauberen codierungstill an.



  • Grüße,
    naja eigentlich sollte man mit dem ersten post nicht gleich meckern...
    aba...
    @Tiga551 was hältst du davon erst mal nen vernünftigen coder-style zu
    lernen? Dass da oben ist ja... naja etwas schlecht leserlich... dann würden
    sich vielleicht auch manche fehler von alleine erledigen... nimm's mir nicht
    übel aber ein sauber geschriebener code ist goldwert und dann werden sie auch besser geholfen. 😉

    de Gortosch



  • Moin,
    Hab mal das gleiche nur aus Spaß versucht, das ganze aber ein bißchen anders gestaltet :

    #include <windows.h>
    #include <math.h>
    #include <stdio.h>
    #include <conio.h>
    
    int main(void)
    {
     long double i = 1;
     long double durchlaufe = 0;
     long double pi = 0;
    
     printf("Bitte geben sie die Anzahl der Durchläufe an :");
     scanf("%Lf", &durchlaufe);
    
     while(i < durchlaufe)
     {
      pi += pow(-1, i-1) * (1/((2*i) - 1));
      i++;
     }
     pi *= 4;
     printf("Pi : %Lg", pi);
     getch();
     return 0;
    }
    

    Ab wann wird Pi denn genau? Ich hab grad 1.000.000.000 Durchläufe gemacht, grad mal 8 Stellen sind richtig...



  • Wozu brauchst du die windows.h? Und die conio.h sollte man auch vermeiden, da dies kein Standard ist.



  • Paul W. schrieb:

    Ab wann wird Pi denn genau? Ich hab grad 1.000.000.000 Durchläufe gemacht, grad mal 8 Stellen sind richtig...

    ich denke NIE. man kann Pi immer genauer berechnen bis in die unendlichkeit...



  • WebFritzi schrieb:

    Wozu brauchst du die windows.h? Und die conio.h sollte man auch vermeiden, da dies kein Standard ist.

    hmm... stimmt, aber ich wollte es eigentlich auf Win32-Konsole machen, da braucht man das doch oder?
    Und die Conio.h brauchte ich für irgendwas... weiß nicht mehr was...

    Ja, ok, genau wirds nie, aber ich hab schon Seiten gesehen, da werden ein paar Tausend Stellen nagezeigt... und ich will doch nur die 10.-20. Stelle berechnen :)...
    Ich guck mich mal um wegen einer anderen Methode, um an PI zu kommen...



  • [quote="Paul W."]Und die Conio.h brauchte ich für irgendwas... weiß nicht mehr was...
    quote]

    getch() ;


Anmelden zum Antworten