[c++] Losowanie bez powtórzeń - program się nie zeruje?


(adao1003) #1

Mam taki program :

#include 

#include 

#include 

using namespace std;

bool pentla;

int main()

{

	int a, b, llos;

	cout << "Podaj zakres od: ";

	cin >> a;

	cout << "do:";

	cin >> b;

	cout << endl << "Liczba losowań:";

	cin >> llos;

	int* tab = new int [llos];

	int war = llos;

	llos = 0;

	for (int i=0; i
	{

	skok:

	srand( time( NULL ) );

	int liczba = (rand() % a) + b;

	int wa = llos;

	while (wa >= 0)

	{

    if (liczba == tab[wa])

    {

		goto skok;

	}

	wa--;

}

	cout << liczba;

	tab[llos] = liczba;

    llos++;

    }


}

Co jest w nim nie tak nie zeruje się??


(Sebastianp88) #2

jeśli się nie mylę, srand powinno się raz wywoływać, Ty zaś wywołujesz go w każdym przebiegu pętli - umieść go przed pętlą


(adao1003) #3

nadal to samo.


(system) #4
cout << "Podaj zakres od: ";

cin >> a;

cout << "do:";

cin >> b;

srand( time( NULL ) );

int liczba;

for(unsigned int i = 0; i < 100; ++i){

     liczba = (rand() % b) + a;

     cout << liczba << endl;             

}

Chyba o takie coś się Tobie rozchodzi. Raczej powstrzymałbym się od używania instrukcji skoku. Dalej już na pewno sobie poradzisz :slight_smile:


(adao1003) #5

Próbowałem dawać przed pętle i chobym tam wpisał 10000 też wszystkie liczby są takie same. a wogule to ma losować kilka liczb bez powtórzeń Co można wpisać w srand zamiast time (NULL) i co to robi??


(system) #6

Moim zdaniem trochę dziwnie to robisz. Masz zadeklarowaną dynamiczną tablicę natomiast wolisz wczytywać int liczba;


(adao1003) #7

Dobra już działa pomytiłem w rand że najpierw na być zakres górny a potem dolny. Dzieki