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.


  • Mod


Anmelden zum Antworten