Obliczanie średniej arytmetycznej nieujemnych i ujemnych elementów tablicy

0

Napisz funkcję, która jako argumenty dostaje tablicę liczb całkowitych tab oraz jej rozmiar
i wyświetla na standardowym wyjściu średnią arytmetyczną nieujemnych elementów tablicy tab
oraz średnią arytmetyczną ujemnych elementów tab. Dlaczego moj program nie dziala poprawnie?

 #include <stdio.h>
int f(int tab[], int size)
{
    int i;

    float x = 0, y = 0;
    for (i = 0; i < size; i++) {
        if (tab[i] < 0) {
            x = (tab[i] + x) / size;
            printf("\n%lf", x);
        }
        if (tab[i] > 0) {
            y = (tab[i] + y) / size;
            printf("\n%lf", y);
        }
    }

    return 0;
}
int main()
{
    int tab[] = { -3, -2, -1, 1, 2, 3, 4 };
    f(tab, 6);
    return 0;
}
1
  1. Dzielisz przez size, a nie przez faktyczną ilość ujemnych/nieujemnych elementów, (myślałem, że do sumy dodajesz element/size)
  2. Wydajesz się nie mieć pojęcia jak obliczyć średnią arytmetyczną (suma/ilość ≈ lub suma elementów podzielonych przez ilość),
  3. dzielisz przez size, a nie przez faktyczną ilość elementów,
  4. wyświetlasz w każdej iteracji, zamiast na koniec,
  5. masz off by one, podajesz 6 jako wielkość tablicy zawierającej 7 elementów. Polecam:
#define ARRAY_SIZE(arr) (sizeof(arr)/sizeof(*arr))
1

Znasz wzór na średnią arytmetyczną?

0

Rozumiem racja nie skojarzylem w ogóle, ze dziele przez wszystkie elementy.

1
#include <stdio.h>

void show_avg(int tab[],size_t size)
  {
   int pos,val;
   struct { const char *name;  size_t count; double sum; } tb[2]={{"ujemnych"},{"dodatnich"}};
   while(size--)
     {
      val=tab[size];
      pos=(val>=0);
      ++tb[pos].count;
      tb[pos].sum+=val;
     }
   for(pos=0;pos<2;++pos) printf("srednia %s wynosi: %.2lf\n",tb[pos].name,tb[pos].count?tb[pos].sum/tb[pos].count:0);
   return 0;
  }

int main()
  {
   int tab[]={ -3, -2, -1, 1, 2, 3, 4 };
   show_avg(tab,sizeof(tab)/sizeof(*tab));
   return 0;
  }

http://ideone.com/XjrMVq

1 użytkowników online, w tym zalogowanych: 0, gości: 1