Anzahl Werte < 0 ermitteln lassen & Streuung berechnen



  • Hallo. Ich wollte einmal kurz nachfragen ob mir einer bei meinem Problem helfen kann. Ich habe einen Array mit maximal 40 Werten. Die exakte Größe wird am Anfang des Programms festgelegt. Danach werden Messwerte eingegeben. Nun soll ich die Anzahl der negativen Messwerte anzeigen lassen und die Streuung der Messwerte nach s²=1/(n-1)∑(xi-x)² berechnen lassen.

    Könntet ihr mir einen Tipp geben wie ich da am besten vorgehen könnte. Mit Sizeof hab ich das nicht hinbekommen. Vielen Dank und viele Grüße



  • Poste mal bitte deinen Code. Dann kann man dir helfen.



  • #include <iomanip>
    #include <iostream>
    
    using namespace std;
    
    main()
    {
          int anz, maxi, maxi_stelle, mini, mini_stelle, neg, i, feld[40]; 
          float sum;
          cout << "Geben Sie die Anzahl der Messwerte ein : ";
          cin >> anz;
    
          while (anz<5 || anz>40)
            {
            cout <<endl<<endl<< "Geben Sie eine Anzahl zwischen 5 und 40 Werten ein!" << endl
            <<endl<<"Geben Sie die Anzahl der Messwerte ein : ";
            cin >> anz;
            }
    
    // Feldelemente belegen
       for (i=0; i< anz; i++)
       {
           cout << endl << i+1 <<". Feldelement : ";
           cin >> feld[i];
           while (feld[i]<-25 || feld[i]>35)
              {
              cout <<endl<<"Geben Sie ein nur Messergebnisse zwischen -25 Grad Celsius und +35 Grad Celsius ein!"
              <<endl<<endl<<i+1 << ". Feldelement : ";
              cin >> feld[i];
              }
       }
    
    // Streuung nach s²=1/(n-1)[e]sum[/e](xi-x)²
    
    // Anzahl negative Messwerte ?????
    
    neg = anz;
    cout << endl << endl << "Die Anzahl der negativen Werte beträgt: " << neg <<endl<<endl;       
    
       while (1); // anhalten
    }
    

    /edit pumuckl: cpp-Tags



  • Deinen bisheriger Ansatz zu zeigen wäre von Vorteil.
    Die Anzahl der negativen Messwerte sollte ja kein Problem sein, du durchlaufst das Array und vergleichst welche negative sind und zählst diese eben, wobei ich dir eher zu einem Vektor raten würden, anstatt des Arrays.

    Zu der Streuung kann ich dir nicht viel sagen, da ich mich dort nicht auskenne. Wenn das aber nur eine Formel ist sollte auch das kein Problem darstellen.

    Lg freeG



  • Speichere deine Messwerte in einem std::vector
    http://www.cplusplus.com/reference/stl/vector/

    Zähle negative Werte mit std::count_if
    http://www.cplusplus.com/reference/algorithm/count_if/

    Benutze std::accumulate um einen Mittelwert und Streuung auszurechnen
    http://www.cplusplus.com/reference/std/numeric/accumulate/

    statt der STL Algorithmen kannst du auch eigene Schleifen schreiben, die allerdings nicht so elegant sind 😉
    Hauptsache du benutzt erstmal einen vector, dann ist der Rest ziemlich simpel (bzw. noch simpler).



  • Zuerst musst du mal den Mittelwert berechnen. Die Formel dafür kennst du bestimmt.

    Der STL-vector bietet sich in deinem Fall in der Tat an.

    Hier mal ein Anwendungsbeispiel für den Vektor.

    std::vector<int> Zahlenreihe;
    for ( int i = 0; i < 10; ++i )
        Messwert.push_back( i );
    

    Du hängst quasi mit jedem Iterationsschritt einen neuen Integer in den Vektor.
    Zugreifen kannst du auf deine Inhalte ganz normal wie bei jedem herkömmlichen Array auch.

    Du musst aber keinen Vektor nehmen.
    Da du ja die Anzahl der Werte bereits vorher kennst, kannst du auch mit new und delete arbeiten.

    z.B.

    int Anzahl = 40;
    int *MeinFeld = new int[ Anzahl ]; // Speicher fuer Feld anfordern
    //...
    //...
    // Mach irgendwas mit dem Feld
    //...
    //...
    delete [] MeinFeld; // Speicher wieder freigeben
    


  • Wobei ich ihm von der manuellen Speicherverwaltung auf jeden Fall abraten würde, erst recht in diesem Fall. Es ist hier so einfach und elegant möglich, das ganze ohne manuelle Speicherverwaltung zu lösen, dass es total unnötig wäre, die Risiken, Gefahren und nächtliche Debug-Sitzungen auf sich zunehmen.
    Klar, bei dem einfachen Programm mag die manuelle Speicherverwaltung nicht sonderlich schwer in der Umsetzung sein, aber wenn er es gleich besser löst, dann hilft ihm das auch für die Zukunft.

    Lg freeG


Log in to reply