einfache Rechnung, bekomme aber nicht das richtige Ergebnis
-
Hallo,
ich soll eine Funtion mit dem Prototyp
double(float *feldAnfang, int anzahl); realisieren, die von einem Feld den Mittelwert der Einträge berechnet.
Ich komm aber nicht auf richtige Ergebnisse, weiß jemand Rat?#include <stdio.h> #define LAENGE 5 double mittel(float *feldAnfang, int anzahl); //MUSS->is vorgegeben int main () { float feld[LAENGE] = {3.9,4.0,1.0,-1.0,0.0};//auch vorgegeben float mittelwert = mittel(&feld[0], 5); //wenn ich hier statt "5" //"int LAENGE" eintrage kommt ein Fehler // aber so läufts printf("\n\nErgebnis = %f", mittelwert); return 0; } double mittel (float *feldAnfang, int anzahl){ int i; float summe; float mittelwert; for (i=0; i<= anzahl; i++) { summe += feldAnfang[i]; } mittelwert = summe/anzahl; return mittelwert; }
-
> mittel(&feld[0], 5);
oder auch mittel(&feld[0], LAENGE);
du willst ja keine neue variable anlegen, sondern nur die konstante benutzen, die hinter LAENGE definiert wurde.statt &feld[0] kannst du auch einfach feld schreiben, da arrays sich wie unveraenderbare pointer auf das erste element verwenden lassen.
im for loop laeufst du ueber die arraygrenze hinaus.
du musst von 0 bis LAENGE-1 gehen, weil das array kein element [5] hat.
also so: i < anzahl
-
summe und mittelwert =0 setzen...sonst nimmter sich irgend ne zufalls zahl ausm speicher und du bekommst das falsche ergebniss....würde ich mal so sagen
-
"oder auch mittel(&feld[0], LAENGE);
du willst ja keine neue variable anlegen, sondern nur die konstante benutzen, die hinter LAENGE definiert wurde."
-> ja logisch, is schon spät"statt &feld[0] kannst du auch einfach feld schreiben, da arrays sich wie unveraenderbare pointer auf das erste element verwenden lassen."
-> stimmt"im for loop laeufst du ueber die arraygrenze hinaus.
du musst von 0 bis LAENGE-1 gehen, weil das array kein element [5] hat.
also so: i < anzahl"
-> stimmt auch@LordSash
"summe und mittelwert =0 setzen..."
-> wow, echt ne große Fehlerquelle - stimmt!@c.rackwitz/LordSash
Danke für eure schnellen Antworten! Das Ergebnis sieht jetzt schon erheblich besser aus - wenn auch nicht korrekt. Ich werde da noch nen bissl tüfteln.
-
obiwan schrieb:
Danke für eure schnellen Antworten! Das Ergebnis sieht jetzt schon erheblich besser aus - wenn auch nicht korrekt. Ich werde da noch nen bissl tüfteln.
Tatsächlich? Bei mir kommt erwartungsgemäß 7.9/5=1.58 raus.
-
jo, jetzt ich auch - ich hatte den code nen bissel verbastelt, weil ich da noch was probiert hatte. bye