Summe bilden von Listenelementen



  • Meine Frage:
    In einer Funktion wurden Meßwerte eingegeben und damit eine Liste aufgebaut. Wie kann ich in einer weiteren Funktion diese Meßwerte (bzw. Listenelemente) addieren und den Mittelwert bilden? Mir wird dann immer angezeigt das ich einen Ganzahloperanden benötige???
    😕



  • Hi,

    zeig doch mal die Liste, wie sie aufgebaut ist.

    Muesste eigentlich so ungefaehr so gehn:

    struct Liste
    {
         int   Wert;
         Liste *Next;
    };
    
    int   Count = 0;
    float Mittelwert = 0;
    Liste *MyListe;
    
    /*
       MyListe fuellen...
    */
    
    //durchlaufen und addieren
    for (Liste *i = MyListe, Count = 0; i -> Next; i = i -> Next, ++Count )
            Mittelwert += i -> Wert;
    
    Mittelwert /= Count; //mittelwert bilden
    

    Sollte eigentlich so funzen, wenn ich en Fehler gemacht hab, bitte
    ich um Korrektur

    mfg
    v R



  • struct digit{float f; digit *pNext;};

    void ausgabe(digit *l)
    {
    int i=1;
    while(i)
    {
    cout<<l->f<<" ";
    if (l->pNext!=NULL)
    l=l->pNext;
    else
    i=0;
    }
    }

    float generate (digit *&pA)

    {

    digit *neu;
    digit *last;
    digit *listpointer;

    int i;
    float d;
    int a;

    i=0; d=0; a=0;

    pA=new digit;
    pA->f=0;
    pA->pNext=NULL;
    last=pA;

    cout <<"Liste erstellen:\n";
    cout <<"Abbruch/Neustart mit 0\n";
    cout <<"Wieviele Werte moechten Sie eingeben?\n";
    cin>>a;

    for (i=1;i<a+1;i++)

    { cout<<i<<".ter Wert\n";
    cin>>d;cout<<"\n";

    neu=new digit;
    neu->f=d;
    last->pNext=neu;
    last=neu;
    last->pNext=NULL;
    }

    cout<<"Ausgabe Liste\n";
    ausgabe(pA);

    Und dann muß ich wie gesagt von den eingegebenen Meßwerten den Mittelwert ermitteln...?



  • Du musst mitzaehlen, wie oft du dich durch die Liste hangelst und dass ist
    dann der Wert, der der Anzahl der Elemente in deiner Liste entspricht.

    Ausserdem musst du die Werte die in deiner Liste gespeichert sind auch
    aufsummieren.

    mfg
    v R



  • float summe(digit *list, float acc = 0) {
      if (list)
        return summe(list->pNext, acc + list->f);
      else
        return acc;
    }
    


  • Super!!
    Danke für die Hilfe, hat jetzt geklappt!!



  • Eigentlich gibt es ja sogar std::acumulate(), aber hier ist das wohl kaum sinnvoll (keine geeigneten Iteratoren).



  • @nmap: Kannste mal en Beispiel posten? Wuerd mich mal interessieren wie man
    das anwendet (und ich bin grad faul es zu suchen 😃 )

    mfg
    v R



  • Naja, zum Beispiel so:

    #include <iostream>
    #include <numeric>
    #include <vector>
    
    int main(void)
    {
        std::vector<int> someInts;
        int input;
        while (std::cin >> input)
            someInts.push_back(input);
    
        const int summe = std::accumulate(someInts.begin(), someInts.end(), 0);
        const float durchschnitt = float(summe) / someInts.size();
    
        std::cout << "Summe: " << summe << "\nDurchschnitt: " << durchschnitt << std::endl;
    
        return 0;
    }
    

    http://www.sgi.com/tech/stl/accumulate.html


Anmelden zum Antworten