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

Funkcja sredniej tablice

2015-01-18 19:03
hertz
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

Pozostało 580 znaków

2015-01-18 19:04
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;
  }

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
edytowany 3x, ostatnio: _13th_Dragon, 2015-01-18 19:12
Pokaż pozostałe 7 komentarzy
Coś nie bardzo rozumiem, skoro wiesz że postinkrementacja może napsocić to po kiego bronisz nadmiernego jej użycia? Poza tym znajdź mi wiersz w standardzie gwarantujący że kompilator sobie zamieni postinkrtementacje na pretinkrtementacje, nie masz gwarancji. Czyżby słowo kompilator rozumiałeś w znaczeniu "jedyny słuszny kompilator" ? - _13th_Dragon 2015-01-18 20:12
Rzecz w tym, że ja nie bronię jej nadmiernego użycia, a twierdze, że nie zawsze jest to nadmierne używanie. Na "jedynym słusznym kompilatorze" robiłem testy (kompilacja do asm) i inkrementacja jest optymalizowana. Nie pamiętam już, czy robiłem test na gcc, ale na 99% też to optymalizuje. To nie kwestia standardu to jest jak javascript dla przeglądarki. Nie musi być, ale bez tego jest bezużyteczna. - Ola Nordmann 2015-01-18 22:46
Lepiej wyrobić sobie nawyk używania ++foo, a postinkrementacji tylko wtedy gdy jest faktycznie używana niż odwrotnie. Dla nowicjusza jedno i drugie to czarna magia, więc po co uczyć go (potencjalnie) źle? - kq 2015-01-18 23:43
@kq, dokleiłem twoją wypowiedź do http://4programmers.net/Forum/1101404 jeżeli masz coś przeciwko - to powiedz. - _13th_Dragon 2015-01-19 00:16

Pozostało 580 znaków

2015-01-18 19:08
hertz
0

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

Pozostało 580 znaków

2015-01-18 19:15
3

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


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Pozostało 580 znaków

2015-01-18 19:38
kq
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).


Pozostało 580 znaków

2015-01-18 19:46
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.


Pozostało 580 znaków

2015-01-18 19:51
hertz
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;
}

Z reguły jak liczysz sumę to starasz się używać większego typu, inaczej łatwo wypaść poza zakres. Poza tym wygląda ok. - kq 2015-01-18 19:57
Brakuje pobierania danych od użytkownika, oczywiście to nie w tej funkcji. - _13th_Dragon 2015-01-18 20:22
Jeśli zadanie jest takie jak w pierwszym poście to już wszystko jest. - kq 2015-01-18 20:24
No tak, racja. - _13th_Dragon 2015-01-18 20:26

Pozostało 580 znaków

Liczba odpowiedzi na stronę

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