Harmonischer Mittelwert in C

blaubarscbube

Newbie
Registriert
Jan. 2020
Beiträge
3
Moin, ich bin Anfänger im Programmieren und möchte in C den harmonischen Mittelwert eines Arrays ausgegeben bekommen.. jedoch spuckt er mir jedes mal die Größe des Feldes also hier "3" aus. Kann mir jemand sagen was ich bei dem Code falsch gemacht habe?
Der Code:

double hmw(int *array, int n){
int i;
double summe = 0;
for (i = 0; i < n; i++){
summe += (1 / array[]); //<- in den eckigen Klammern steht in i
return n / (double)summe;
}
}

int main(){
int array [3] = {1,2,2};
int n = sizeof(array)/sizeof(int);


double ergebnis = hmw(array,n);
printf("Harmonischer Mittelwert: %.1f",ergebnis);


return 0;
}
 
Bitte verwende doch Code-Blöcke zum FOrmatieren

Code:
double hmw(int *array, int n){
    int i;
    double summe = 0;
    for (i = 0; i < n; i++){
        summe += (1 / array[]); //<- in den eckigen Klammern steht in i
        return n / (double)summe;
    }
}

Was passiert denn hier bei dem return?

Bzw. wann returnt die FUnktion?

Lg
 
  • Gefällt mir
Reaktionen: blaubarscbube
1. Deine Summe ist zwar double, die aufsummierung ist aber Integer, also in deinem Fall immer 1 oder 0.
2. Dein Return ist in der Schleife statt danach.

Punkt 2 führt dazu, dass du n/1, also n als Ergebnis bekommst.
 
  • Gefällt mir
Reaktionen: abcddcba und blaubarscbube
Ich habs. statt der 1 musste ich 1.0 reinsetzen.. und den return ausserhalb der Schleife! danke!
 
Wenn du einen Integer durch einen Integer teilst, wird der Compiler das Ergebnis ebenfalls in einen Integer speichern. Teilst du hingegen einen Double durch einen Integer, wird daraus ein Double. Genau das hast du dadurch erreicht, dass du 1.0 statt 1 geschrieben hast, weil 1.0 ein double bzw. Fließkomma ist und 1 eben nur ein Integer.

Es ist übrigens auch überflüssig, eine Variable vom Typ double - wie summe - noch mit (double) zu casten.
 
  • Gefällt mir
Reaktionen: blaubarscbube
Zurück
Oben