PDA

Prikaži potpunu verziju : Problem oko generisanja pseudoslucajnih brojeva


NIx Car
10.6.2013, 17:57
Da i ovde postavim pitanje... :D

Pravim sad neku igru, i treba da generisem pseudoslucajne brojeve tako da mi se brojevi u nizu ne smeju ponavljati i moraju biti poredjani u rastucem redosledu.


napravio sam funkciju koja to sve regulise.
U samom mainu sam stavio srand(time(NULL));

void numDif(std::vector<struct krug>&a, int n)
{
for(int i = 0; i <n;i++)
{
for(int j = i + 1; j < n;j++)
{
if(a[i].broj >= a[j].broj)
{
while(a[i].broj >= a[j].broj)
a[j].broj = rand() % 100;
}
}
}
}

problem je u tome sto program upadne u beskonacnu while petlju, i to kada je i-ti element jednak sa j-tim elementom... Kako resiti ovaj problem? Da opet napomenem srand(time(NULL)) se vec nalazi na pocetku main-a

water wizard
10.6.2013, 18:00
stavi samo random da ne koči igra... :dedica:

NIx Car
10.6.2013, 18:03
Pojasni. Gde da stavim random?

water wizard
10.6.2013, 18:07
eh.. naterao si me da čitam programski kod.. kao prvo ja nisam nešto stručan.. :)
ali mislim da se u ovom delu zaglavi..


while(a[i].broj >= a[j].broj) a[j].broj = rand() % 100;

Sun Tzu
10.6.2013, 18:26
for(int i = 0; i <n;i++)
for(int j = i + 1; j < n;j++)
i dođe do n, j dođe do n, oba su n. I onda
while(a[i].broj >= a[j].broj)
a[j].broj = rand() % 100;ti na a[n] upišeš novi broj, ali to je i a[i], uvek su jednaki.
Valjda. :D

NIx Car
10.6.2013, 18:37
for(int j = i + 1; j < n;j++)

on ovu petlju nece izvrsiti ukoliko je i = n - 1.
water wizard je u pravu, tamo zabode kod. I to samo kada su brojevi jednaki...

Belphegor
10.6.2013, 19:04
Ja imam drugaciji predlog ako ti odgovara?
Uzmes niz brojeva od minimalnog do maximalnog koji moze da se izvuce.
Onda pozoves random_shuffle (http://www.cplusplus.com/reference/algorithm/random_shuffle/) na taj niz i pokupis prvih N brojeva koliko ti treba i posle ih samo sortiras kako ti odgovara.

NIx Car
10.6.2013, 19:14
Predlog je super. Mada mi deluje way more complicated. :D

Probacu da ga implementiram...

Belphegor
10.6.2013, 19:41
Malo sam googlao i koliko vidim 90% njih predlaze isto ovaj shuffle fazon. :D

NIx Car
10.6.2013, 20:42
Savrseno radi. Hvala :)

NIx Car
10.6.2013, 22:25
A jel postoji neka mogucnost da taj random_shuffle razbaca elemente da je svaki sledeci za neki odredjeni broj veci ili manji od prethodnog ? To kada bi postojalo bilo bi super, za jos jedan problem sa kojim se suocavam :)

Posto radim sa grafikom, i iscrtao sam neke krugove. E sad krugovi trebaju da mi budu razbacani nasumicno po ekranu, i ne smeju da se dodiruju, seku ili tako nesto. Moraju da budu na nekoj distanci :)

Belphegor
10.6.2013, 22:34
Meni je trebao taj algoritam jednom, pa mi je MG-RAY pomogao sa implementacijom, ne secam se u kojoj je temi bilo (a pretraga na ovom forumu nije nizasta :D ) pa ne mogu da nadjem.
Evo ti src (Win32 app) sto sam sacuvao na hardu, pa iskopaj sta ti odgovara.

http://www.dodaj.rs/f/W/Qc/29UL894T/placer.jpg

EDIT: Nasao temu: http://www.sk.rs/forum/showthread.php?t=63800&highlight=random&page=3

Teva
20.6.2013, 10:29
A jel postoji neka mogucnost da taj random_shuffle razbaca elemente da je svaki sledeci za neki odredjeni broj veci ili manji od prethodnog ? To kada bi postojalo bilo bi super, za jos jedan problem sa kojim se suocavam :)


Ako sam te dobro razumeo to mu dodje sortiranje xD

NIx Car
20.6.2013, 12:04
Pa da, ali sam uvideo da mi taj nacin sortiranja moze napraviti problem, tako da sam profesoru samo predao onaj kod, i covek se zaprepastio kad je video random_shuffle :D