ďťż

sunsetting

photo

Witam wszystkich
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();
}

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • kazimierz.htw.pl