sunsetting
Niedawno zacząłem zabawe z C++ (ucze sie z "szkoła programowania" s.prata) i mam problem w pewnym zadaniu. Jesli ma ktos ta ksiazke to jest to zadanie 2 z rodzialu 7. Ale do rzeczy.
Otóż zadanie polega na tym aby napisac 3 funkcje.
1) Funkcje wprowadzajaca dane do tablicy o rozmiarze maximum 10 liczb ale musi byc tez możliwosc wczesniejszego zakonczenia wprowadzania danych np: Podajemy rozmiar tablicy 10, wpisujemy 1,2,3,X
- przy wartosci X wprowadzanie jest przerywane.To zrobiłem;]
2)Napisac funkcje wyswietlajaca dane (To tez mi sie udało przy pomocy wskaźników na funkcje)
3) Napisac funkcje licząca srednia podanych liczb
I przy tej ostatniej leże ;/ Nie wiem jak taka funkcje napisac , jakie argumenty powinna miec ani tez jak ja wywołać. Próbowałem to zrobić w analogiczny sposob jak funkcje wyswietlająca dane (przy użyciu wskaźników na funkcje ) ale nic mi z tego nie wychodziło Dlatego też zwracam sie z tym do Was ;]
O to moj aktualny kod :
Kod:
#include <iostream>
using namespace std;
//funkcja wypelniajaca tablice , przy podaniu danych nieliczbowych,wprowadzanie zostaje przerwane
int wypelnij(int tab[], int r)
{
int i=0;
cout<<"podaj npierwsza wartosc :";
while (i<r && cin>>tab[i])
{
if (++i < r)
{
cout<<"podaj nastepna wartosc :";
}
}
cin.clear();
return i;
}
//tutaj użylem wskaźnika na funkcje aby pobrać ilość poprawnie wprowadzonych elementów
// za pomoca funkcji wypelnij
int wypisz(int tab[],int s,int (*p)(int*,int))
{
int rozmiar = p(tab,s);
cout<<"wprowadzono : "<<endl;
for (int i=0;i<rozmiar;i++)
{
cout<<tab[i]<<endl;
}
}
int main(int argc, char** argv)
{
int s;
cout<<"Rozmiar tab :\n";
cin>>s;
int tab[s];
wypisz(tab,s,wypelnij);
return 0;
}
Trochę to dziwnie robisz. Bowiem np rozmiar faktyczny tabeli nie jest dostępny z maina bo od razu go przekazujesz jako parametr. I teraz jak np chciał bym dodać nowa funkcję to muszę sobie to policzyć... Co do policzenia średniej to w czym problem? Sumujesz wszystkie elementy i dzielisz przez średnia:
Kod:
double srednia(int *tab, int size)
{
double sr=0;
for(int x=0;x<size;x++) sr=sr+tab[x];
return sr/size;
}
Takie ogólne pytanie - dlaczego nie używasz std::vector i algorytmów? Za ich pomocą większość tych funkcji skraca się znacznie. Np.: średnia to:
Kod: double srednia(const std::vector<int>& v)
{
return static_cast<double>(std::accumulate(v.begin(), v.end(), 0)) / v.size();
}