Średnia i mediana

Średnia i mediana
GO
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 92
0

Witam
pisałem funkcję, która pobiera tablicę o nieparzystej liczbie elementów typu int. Program ma zwrócić "mean", "median", lub "same" w zależności od tego czy mediana czy średnia jest większa, lub czy są takie same. Kod poniżej

Kopiuj
int compare(const void *a, const void *b)
  {
  return *(int*)a-*(int*)b;
}

const char* meanVsMedian(int *numbers, size_t numbersSize) {
  int median=0;
  double mean=0;
  qsort(numbers,numbersSize,sizeof(int),compare);
  for(int i=0;i<numbersSize;i++)
    mean+=numbers[i];
  mean=mean/numbersSize;
  median=numbers[numbersSize/2];
  return mean>median?"mean":median>mean?"median":"same";
}

Funkcja przechodzi wszystkie testy, ale wcześniej próbowałem zadeklarować mean jako typ int i wyrzucało mi błędy. Myślałem, że dzielenie int przez int zaokrągli wynik w dół. Może ktoś wyjaśnić, dlaczego mean musi być zadeklarowane jako double?

Spine
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 7103
0

Liczenie średniej całkowitej jest trochę bez sensu.
Ale spróbuj zadeklarować mean jako long long int. Każdy int z testu może zjeść zakres zwykłego inta i Twoja suma elementów tablicy będzie niewłaściwa. Double ma więcej bajtów niż int i jakoś łyka taką sumę...

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.