Standartabweichung von Zahlen im Array
-
Hi, ich hätte mal wieder eine frage wo denn der Fehler liegt.
#include<iostream> #include<cmath> using namespace std; int main () { cout << "Berechnet den Mittelwert,Meridian und Standartabweichung von bis zu 50 Zahlen." << endl; double array[49]={}; int i=0,zahl=1,zaehler=0; int sum=0,median; double temp=0; double mittelwert,Varianz,s; cout << "Bitte Zahlen eingeben(max 50)(0 to stop): " << endl; while(i<50 && zahl!=0) { cin >> zahl; array[i] = zahl; zaehler++; i++; } i -= 2; zaehler-= 1; cout << "i ist gleich " << i << endl; cout << "zaehler ist gleich " << zaehler << endl; for(int j=0;j<=zaehler;j++) sum+=array[j]; //Mittelwert mittelwert = (double)sum/zaehler; //Median if(i%2 == 0) median = array[i/2]; else median = array[((i/2)+((i+1)/2)/2)]; //Standartabweichung for(int k=0;k<=zaehler;k++) { temp+=pow(array[k]-mittelwert,2); } Varianz = (1/zaehler) * temp; s = sqrt(Varianz); cout << "Der gesuchte Mittelwert der Zahlen ist: " << mittelwert << " ." << endl; cout << "Der gesuchte Median der Zahlen ist: " << median << " ." << endl; cout << "Die Standartabweichung der Zahlen ist: " << s << " ." << endl; return 0; }
Der Mittelwert sowieo der Median stimmen von den Ergebnissen her,
bei der Standartabweichung kommt jedoch immer 0 heraus..?
Vorgang: Schleife startet mit k=0 also dem ersten eintrag Array[0] bis zum letzten array eintrag.
in temp werden die summierten schleifen ergebnisse gespeichert (+=)
von (Wert an der array stelle - Mittelwert)^2
dann die varianz, einfach den tempwert mal 1 durch die anzahl der elemente
und standartabweichung gewurzelt.hoffe jmd kann mir da einen wink geben.
~Hawk
-
1/zaehler = 0.
-
und wieso?
bei der abfrage in der mitte ist der zaehler immernoch korrekt
auch beim berechnen von mittelwert und median
warum sollte er sich dann beim berechnen der saw, auf 0 gesetzt haben?
denn nur dann wäre 1/zaehler =0
-
ich hab nicht geschrieben, dass zaehler = 0 ist, sondern 1/zahler = 0. Siehe Zeile 43. Integerdivision gibt halt einen Integer raus. und dann ist 1/2 eben 0, weil 0.5 kein Integer ist.
-
int main () { cout << "Berechnet den Mittelwert,Meridian und Standartabweichung von bis zu "<<std::numeric_limits<size_t>::max()<<" Zahlen.\n"; cout << "Bitte Zahlen eingeben: " << endl; std::vector<int> a(std::istream_iterator<int>(std::cin), (std::istream_iterator<int>())); cout << "Der gesuchte Mittelwert der A ist: " << std::accumulate(a.begin(), a.end(), 0)*1./a.size() << " .\n"; cout << "Der gesuchte Median der A ist: " << (std::nth_element(a.begin(), a.begin()+a.size()/2, a.end()), a[a.size()/2]) << " .\n"; cout << "Die Standartabweichung der A ist: " << std::sqrt(std::inner_product(a.begin(), a.end(), a.begin(), 0.)*1./a.size()) << " .\n"; }
-
ach hab dort wieder die typ umwandlung vergessen-.- bzw geht ja der zaehler auch gleich als double variable danke otze
@wink: sieht nett aus aber nur sachen drin die ich derzeit noch nicht verwenden soll, aber danke
-
double array[49]={}; ... cout << "Bitte Zahlen eingeben(max 50)(0 to stop): " << endl;
Das passt auch nicht.
Bei der Definition von Arrays wird die Anzahl der Elemente angegeben und nicht der maximale Index.
Und auch bei den anderen Schleifen musst du dir mal die Grenzen ansehen.
-