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 🙂



  • @c.rackwitz

    "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


Anmelden zum Antworten