Sinnvolles Ergebnis nur durch anzeigen von zw Ergebissen ...wtf?



  • Hey Leute, bin gerade am programmieren von nem Programm, welches Pi annähert und es kommt nur ein Ergebnis raus, wenn ich mir in der Schleife jedes mal den Zwischenwert für die Höhe(mach es mit ner Annäherung an den Kreisbogen eines Viertel-Kreises) ausgeben lasse. 😮 Wenn nicht kommt -4.29497e+007 raus?! Ich benutze übrigens CodeBlocks mit GCC Compiler! Wenn ihr den Code sehen wollt dann kann ich den auch noch bringen. Ist bloß mein erster Beitrag und muss das System mit dem Code einfügen erstmal verstehen 😉 Ansonsten schonmal danke für eure Antworten!!



  • Code einfügen, Code markieren und dann unter dem Eingabefenster auf 'C++' drücken.



  • #include <iostream>
    #include <math.h>
    
    using namespace std;
    
    int pi(double it){
         double b=2*it, s=0, hv, h;
         for (double i = 1; i <= it; i++) {
            hv=h;
            h=sqrt(i*(b-i));
            //cout << hv<<endl<<h<<endl;
            hv=h-hv;
    		s+=sqrt(hv*hv + 1);
        }
    
        return s;
    
    }
    
    int main()
    {
        double it;
        cin >> it;
        double ergebnis= pi(it);
        cout << "PI ist:" << ergebnis/(it/2);
        return 0;
    }
    

  • Mod

    Welchen Wert hat h in Zeile 9?
    Außerdem:

    int pi
    ...
    double it
    ...
    double i
    ...
    

    Sieht gewagt aus.

    Ansonsten: Bitte genauere Problembeschreibung. Was tust du, was erwartest du, was passiert stattdessen?



  • haha danke das war die Lösung! ich hab h und hv keinen wert zugewiesen aber direkt angefangen hv erstmal gleich h zu setzen wobei die keine werte haben! Sind halt meistens irgendwelche kleinen Probleme. Was meinst du mit sieht spannend aus? berichtigt mich bitte was ich besser mache kann!



  • El.Clown schrieb:

    for (double i = 1; i <= it; i++)
    

    Diese Art von Schleife ist generell problematisch. Warum?



  • ich könnte mir vorstellen das es zu Ungenauigkeiten kommen kann --> int besser wa?
    👍


  • Mod

    El.Clown schrieb:

    ich könnte mir vorstellen das es zu Ungenauigkeiten kommen kann --> int besser wa?
    👍

    Auch. Vergleiche auf kleiner gleich sind ebenfalls ziemlich unüblich, da man gewöhnlich Laufweiten als [Start, Ende), also inklusive dem Start und ohne das Ende angibt. Diese Denkweise hat allerlei Vorteile. Das heißt aber, dass man gewöhnlich auf kleiner oder ungleich dem Ende vergleicht.

    Was möchtest du hier denn erreichen? Ein Anfangswert und eine Schrittweite von 1 schreien doch geradezu danach, dass man einen Integer als Zählvariable nimmt. Warum also double?


Anmelden zum Antworten