Funkcja uzupełniająca tablicę liczbami, sumująca je i wyświetlająca wynik

0

Witam. Potrzebuje pomocy. Chodzi o to że mam napisać program który w jednej funkcji losuje liczby i zapisuje do talicy, w drugiej wypisuje liczby a w 3 sumuje (bez użycia wskaźników). Sam byłem w stanie napisać 80% kodu az się pojawił problem :

#include <iostream>
#include <ctime>
#include <cstdlib>
 
using namespace std;
 
void wylosujLiczby(int tab[],int rozmiar, int st, int stp)
{

srand ( time (0) );
int a = 0,c = 0;
c  = stp - st;
do
{
tab[a] = ((rand() % (c+1) ) + st );
} while (a < rozmiar);

}


void wypiszLiczby (int tab[], int rozmiar)
{

	int a = 0;
	do
	{
		cout << tab[a] <<endl;
		a++;
	} while (a < rozmiar);

}

int obliczSume (int tab[], int rozmiar)
{
	int a = 0, suma = 0;
	do
	{
		suma += tab[a];
		a ++;

	} while (a < rozmiar);

	return suma;
} 


int main ()
  {
	int tablica[ 999 ];
    wylosujLiczby( tablica, 999, 4, 10 );
    wypiszLiczby( tablica, 999 );
    int iSuma = obliczSume( tablica, 999 );
    cout << "Suma liczb wynosi: " << iSuma << endl;


   system ("pause");
   return 0;
  }  

Pierwsza funkcja to raczej void nie będzie ( a na int nie bardzo wiem jak to zrobić). Czyli tak nie wiem w jaki sposób z tej pierwszej funkcji zwrócić uzupełnioną tablicę aby w 2 następnych móc z tej uzupełnionej już korzystać. Pomoże ktoś?

0

Zamień te bezsensowne while na for i zacznie działać.
Policz ile razy występuje a w każdej z twoich funkcji.

2
#include <iostream>
#include <algorithm>
#include <numeric>
#include <iterator>
#include <vector>
#include <chrono>
#include <random>
using namespace std;
using namespace std::chrono;

vector<int> gen(size_t size, int max) {
	unsigned seed = system_clock::now().time_since_epoch().count();
	minstd_rand0 generator(seed);
	vector<int> result(size);
	generate(result.begin(), result.end(), [&]() { return generator() % max; });
	return result;
}

void displ(const vector<int>& vec) {
	copy(vec.begin(), vec.end(), ostream_iterator<int>(cout, ", "));
}

int sum(const vector<int>& vec) {
	return accumulate(vec.begin(), vec.end(), 0);
}

int main() {
	vector<int> numbers = gen(10, 100);
	displ(numbers);
	int s = sum(numbers);
	cout << "Suma liczb wynosi: " << s << "\n";
	return 0;
}
0

Dobra, błąd znalazłem ( w pierwszej funkcji brakuje a++;). Czy mógłby mi ktoś powiedzieć jak to możliwe ze funkcja void zwraca tablice zapisaną ( skoro funkcja void z definicji nie zwraca nic? ). Na jakiej zasadzie to działa? Że uzupełnia mi tą tablice (skoro skoro zmienna tab[] jest żywotna tylko w tej jednej funkcji a poza nią nie ma się do niej dostępu)?

3

Nie nie zwracasz tu tablicy tylko przekazujesz adres jej pierwszego elementu.
Aby napuścić na każde mieszkanie twego bloku Świadków Jehowy wystarczy podać im adres jednego z mieszkań.

0

Czyli poprzez ten fragment kodu

    wylosujLiczby( tablica, 999, 4, 10 ); 

Co trafia do funkcji main?? Adres jednej komórki tablicy i liczba wylosowana przyporządkowana do niej?

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