Summe ausrechnen



  • Hallo,
    ich habe folgendes Problem.
    Ich soll für ein eingegebenes Array den Durchschnitt und die Standardabweichung s = root(1/(n-1)summe(xi-durchschnitt)) ausrechnen.
    Der Durchschnitt war leicht, aber ich habe Probleme mit der Summe.
    Das ist mein code:
    double average ; //evaluating the average value
    for (int i = 0; i < 10; ++i)
    {
    average += array[i] ;
    }
    average /= 10. ;
    cout << "Average: " << average << endl ;
    return average ;

    double standard ; //evaluating the standard deviration
    for (int b = 0; b < 10; ++b)
    {
    standard = sqrt(1/(10-1)*)
    }
    Kann mir jemand helfen, die Standardabweichung zu berechnen?
    Vielen Dank im Voraus,
    Katharina



  • sqrt übernimmt double, d.h. du musst da auch double übergeben und divisionen mit double durchführen. d.h. statt 1 / (10 - 1) heißt es eigentlich (1.0 / (10.0 - 1.0). ansonsten wird eine integerdivision ausgeführt, die in diesem fall 0 ergibt. für double 1.0 und für float 1.0f bzw. halt die entsprechenden zahlenwerte verwenden



  • @KathiJ Du hast doch für den Mittelwert (Durchschnitt) die Summe vom ganzen Feld berechnet.

    Jetzt musst du halt die Summe nicht array[i] sondern von (array[i]-average) berechnen.

    Ja, du musst vorher den Mittelwert berechnen.
    Ja, du musst unbedingt die Compiler-Warnungen auf Maximum stellen und auch beachten.
    Ja, dein Code hat noch einen Fehler.

    Und benutze bitte Code-Tags. Code markieren und auf das </> Symbol clicken.



  • Ähnlich wie deine erste Schleife mußt du einfach die Summe aufaddieren (wobei xi deinem array[i] entspricht).
    Und den Standardwert berechnest du dann nach der Schleife in einer eigenen Anweisung.



  • Ist es so richtig?
    double standard ; //evaluating the standard deviration
    for (int b = 0; b < 10; ++b)
    {
    double sum += (array[i]-average) ;
    standard = sqrt(1.0/(10.0-1.0)*(sum))
    cout << "Standard Deviration: " << standard << endl ;
    }



  • @KathiJ Nein. So wie der Mittelwert außerhalb der Schleife berechnet wird, geschieht das auch mit der Standardabweichung.

    Was ist mit den Compilerwarnungen? Etwa "Erste Nutzung der Variable xyz ohne vorherige Zuweisung/Initialisierung"



  • So?
    double standard ; //evaluating the standard deviration
    for (int b = 0; b < 10; ++b)
    {
    double sum += (array[i]-average) ;
    }
    standard = sqrt(1.0/(10.0-1.0)*(sum))
    cout << "Standard Deviration: " << standard << endl ;

    Das Programm ist wesentlich umfangreicher. Es ist alles definiert.



  • @KathiJ sagte in Summe ausrechnen:

    So?

    Was sagt denn der Compiler?

    Das Programm ist wesentlich umfangreicher. Es ist alles definiert.

    Ich habe nichts von Definitionen gesagt.
    Aber genau das wird der Compiler in deinem Codefragment anmeckern (diesmal als Fehler)



  • @KathiJ sum muss außerhalb der schleife definiert und mit 0 initialisiert werden, ansonsten müsste das so stimmen.



  • @Wade1234 sagte in Summe ausrechnen:

    sum muss ... mit 0 initialisiert werden,

    Nicht nur sum



  • Ich habs jetzt so.
    Es wird mir kein Fehler angezeigt und das restliche Programm läuft, aber die Standardabweichung wird nicht ausgegeben.
    double standard ; //evaluating the standard deviration
    double sum = 0 ;
    for (int b = 0; b < 10; ++b)
    {
    sum += (array[b]-average) ;
    }
    standard = sqrt(1.0/(10.0-1.0)*(sum)) ;
    cout << "Standard Deviration: " << standard << endl ;
    return standard ;
    }



  • @KathiJ sagte in Summe ausrechnen:

    aber die Standardabweichung wird nicht ausgegeben.

    Was soll das heißen?
    Gar keine Ausgabe?
    Programmabsturz?
    Falsche Ausgabe?

    In der Formel ist auch noch ein Fehler.
    Es ist die Summe der Abweichungsquadrate.



  • PS: Es heißt auf englisch "standard deviation". 😉



  • @DirkB Stimmt, vielen Dank.
    Es gibt keine Ausgabe.
    Der Rest des Programmes läuft.



  • @KathiJ sagte in Summe ausrechnen:

    Es gibt keine Ausgabe.
    Der Rest des Programmes läuft.

    Mit dem von dir gezeigten Fragment kann man dazu keine Aussage machen.

    Im einfachsten Fall wird die Funktion (deren Definition nicht gezeigt wird) gar nicht aufgerufen.

    Die Ausgabe selber sollte auch nicht in der Funktion erfolgen, die rechnet.



  • Hast du den Code in einer Funktion stehen und zwischendrin (so wie in deinem ersten Code)
    @KathiJ sagte in Summe ausrechnen:

    return average;

    ?

    Dann solltest du eine Warnung bzgl. nichtverwendeter Code o.ä. erhalten.



  • Ja, ich habe alles in einer Funktion stehen, aber es wird kein Fehler angezeigt.



  • @DirkB sagte in Summe ausrechnen:

    du musst unbedingt die Compiler-Warnungen auf Maximum stellen und auch beachten.

    Eine Warnung ist etwas anderes als ein Fehler, obwohl du sie gleich behandeln solltest.

    Bei einer Warnung macht der Compiler weiter, obwohl er den Code für merkwürdig hält.

    Dann zeig bitte mal die ganze Funktion.



  • Ok vielen Dank für eure Hilfe, ich habs hinbekommen.


Log in to reply