dynamiczna tablica zapis losowych liczb

0

Witam,

Napisałem program który ma wpisywać do tablic losowe liczby, operuje na wskaźnikach, lecz przy wpisywaniu wartosci losowej do indeksu tablicy następuje problem.
Druga sprawa to wypisywanie jak uzyskać w następnej funkcji wypisz() ilość elementów tablicy?

#include <iostream>
#include <ctime>
using namespace std;

int *losuj(){
	int size;
	cout << "Podaj ile elementow ma zawierac tablica: ";
	cin >> size;
	int *tab = new int[size];
	for(int i=0 ; i<size ; i++){
		srand(time(NULL));
		*tab = rand()% 100; //TUTAJ WPSIUJE NIE TO CO MA
		tab++;
	}
	return tab;
}

void wypisz(int *tab){
	int i=1;
	while(*tab !=NULL){
		cout <<"Element tablicy nr. "<< i << " to: "<< *tab <<endl;
		i++;
		tab++;
	}
	delete [] tab;
}
void main(){
	wypisz(losuj());
	getchar();

} 
0

Powinno być tak:

for(int i=0 ; i<size -1 ; i++)

,bo size przechowuje ilosc elementów talbicy a my w pętli for potrzebujemy indeksu tablicy
czyli jak elementów jest 10 to ostatni element bedzie miał indeks 9.

0

I dlaczego nie podajesz indeksu tablicy?

0

Wydaje mi się że tu akurat błędu nie ma ponieważ:

  1. Podaje rozmiar np. 2.
  2. To pętla wykona się dokładnie 2 razy i=0 oraz i=1 więcej nie bo miałem deklarację i<size a nie i<=size.
1

Myślę, że ten link wyjaśni wszystko.

Tablice

1

W losuj() przesuwasz sobie wskaźnik tab dlatego zwracasz go, gdy wskazuje już na sam koniec tablicy.
W wypisz() porównujesz zawartość komórek tablicy do NULL, a wcale w ten sposób nie oznaczasz końca tej tablicy. Zresztą NULL = 0 więc może się tam pojawić gdziekolwiek skoro losujesz te liczby, albo - co gorsza - wcale ;)
Możesz przecież przekazywać sobie dodatkowo rozmiar.

0

Dziękuję za odpowiedzi! :)

0

Jeszcze jedno, to: srand(time(0)); zrób tylko raz na początku main()

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