ENUM - wartosci jako nowe typy zmiennych

Odpowiedz Nowy wątek
2018-01-16 20:41
0

Witam,
Mam problem z zadaniem

Zadanie 2.
Zdefiniuj typ wyliczeniowy składający się z wartości odzwierciedlających typy: CHAR, UCHAR, INT, FLOAT. Napisz funkcję, która przyjmie jako argumenty wskaźnik na void, pod którym znajduje się tablica, rozmiar tej tablicy oraz zmienną uprzednio zdefiniowanego typu wyliczeniowego oznaczającą typ danych znajdujących się w tablicy. Funkcja powinna zwrócić średnią arytmetyczną danych w przekazanej tablicy za pomocą typu float.

Próbuję już na różne sposoby i nie mogę wymyśleć jak liczyć srednią w zaleznosci od typu przekazywanego w zdefiniowanym przeze mnie typie. Właściwie to nie wiem nawet jak go poprawnie zdefiniować. Myślałem o switchu w funkcji, który w zaleznosci od parametru typ(który jest typedef enum {CHAR, UCHAR, INT, FLOAT} types) deklaruje zmienna suma i pozniej rzutuje elementy tablicy i dodaje je do sumy, ale w switchu nie można zawierać deklaracji.

Czy ktoś jest w stanie mnie jakoś nakierować?

Pozostało 580 znaków

2018-01-16 20:45

Najczytelniejsze byłoby imho podejście:

int foo_char(char* array, uint8 count) {
  /* ... */
}

int foo_uint8(uint8* array, uint8 count) {
  /* ... */
}

int foo(uint8* array, uint8 count, Type type) {
  switch (type) {
    case TYPE_CHAR:
      return foo_char(array, count);

    case TYPE_UINT8:
      return foo_uint8(array, count);

    default:
      return -1;
  }
}

edytowany 2x, ostatnio: Patryk27, 2018-01-16 22:17
return w void? - atmal 2018-01-16 20:49

Pozostało 580 znaków

2018-01-16 22:07
0

Własnie to return w void tez mnie trochę dziwi, ale tutaj chodzi o to, że zawsze średnią rzutuję na float chyba i sama funkcja tez jest float.
Takie podejscie będzie najlepsze?

Pozostało 580 znaków

2018-01-16 22:18
0

Ew. możesz zwracać void* i kazać użytkownikowi wyłuskiwać wartość zależnie od typu.

Zwracanie floata jako tako też nie będzie złe.


Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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