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 Korrekturmfg
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; }