Wątek przeniesiony 2015-01-19 13:10 z C/C++ przez ŁF.

Funkcja sredniej tablice

0

Napisz funkcje obliczajaca srednia wartosc elementow w tablicy jednowymiarowej. Argumenty wejsciowe to tablica jednowymiarowa, liczba wierszy n. Wartosc zwracana to srednia wartosc wszystkich elementow tablicy.

float funkcja(int tab[], int n)
{
int suma = 0;
for (int i = 0; i <= n; i++)
{
cout << "podaj liczbe n" << endl;
cin >> tab[n];
}

for (int i = 0; i <= n; i++)
{
    suma += tab[n];
}

return suma / n;
system("pause");

}

Co w tym programie jest nie tak? Jestem poczatkujacy, prosze o wyrozumialosc

1
  1. Wepchnięcie wszystkiego do jednej funkcji
  2. int n - czyżby spodziewasz się ujemnego rozmiaru
  3. i<=n - przeważnie przekazywany jest rozmiar, zaś przy indeksacji od zera ma być ostry warunek
  4. i++) - nie używaj i++ kiedy możesz użyć ++i - http://4programmers.net/Forum/1101404
  5. cout < "podaj liczbe n" < endl; - mylący komunikat
  6. i<=n - j.w.
  7. i++) - j.w.
  8. suma += tab[n]; - tab[n] - to element poza zakresem tablicy
  9. return suma / n; - masz tu dzielenie na całość a później konwersja na float
  10. system("pause"); - bo po return
void inp(int tab[],size_t n)
  {
   for(size_t i=0;i<n;cin>>tab[i++]) cout<<"podaj liczbe "<<(i+1)<<": ";
  }

double avg(int tab[],size_t n)
  {
   int suma=0;
   for(size_t i=0;i<n;++i) suma+=tab[i];
   return suma/(double)n;
  }
0

Czyli wszystko mam rozumiec. Ale nie jestem w stanie wpasc na to, jak powinno to wygladac. Moze jakas wieksza podpowiedz?

3

Już rozpisałem wszystko jak dla ... (na tym forum nie mogę użyć właściwego słowa)

1

Funkcja licząca średnią powinna liczyć średnią, nic więcej, nic mniej. Nie powinna o nic pytać użytkownika, nie powinna nic wyświetlać (ew. komunikat błędu).

2

Funkcja powinna wykonywać jedno określone zadanie i zwracać wynik. Tym zadaniem może być pobranie danych od użytkownika, obliczenie średniej, cokolwiek. Wiadomo, że czasem zadania są złożone w takim wypadku funkcja wywołuje inne funkcje. Jedna funkcja = jedno zadanie. Koniec. Kropka.

0

Czyli mam rozumiec, ze odpowiedz do zadania jest nastepujaca?

double avg(int tab[],size_t n)
{
int suma=0;
for(size_t i=0;i<n;++i) suma+=tab[i];
return suma/(double)n;
}

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