Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

rand() funkcija u c-u?

[es] :: C/C++ programiranje :: C/C++ za početnike :: rand() funkcija u c-u?

[ Pregleda: 4903 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

RMAN
Milan Đukić
student
Knićanin

Član broj: 32492
Poruke: 1166
*.static.zrlocal.net.



+5 Profil

icon rand() funkcija u c-u?10.10.2011. u 20:12 - pre 152 meseci
Nije mi jasno kako radi funkcija rand u c-u. Odnosno, ja dobijam random vrednosti, ali svaki put kad pokrenem program dobijem iste vrednosti.

Radim igricu snake, i svaki put mi je hrana na istom mestu

Na primer dobijem koordinate hrane (1,1) (10,15) (22,26). Kada ponovo pokrenem program dobijam iste koordinate.

U cemu je fora?
Eureka!

MILAN DJUKIC
D J U K A
 
Odgovor na temu

Mihajlo Cvetanović
Beograd

Moderator
Član broj: 37636
Poruke: 1249



+96 Profil

icon Re: rand() funkcija u c-u?10.10.2011. u 21:24 - pre 152 meseci
Na početku rada programa izvrši sledeći kod:

Code (c):
srand(time(NULL));
rand();
rand();


Prva linija postavlja takozvani seed na vrednost trenutnog vremena, što će biti različito svaki put kad se izvršava program. Druge dve linije služe da se slučajni brojevi bolje promešaju. Možda ti poslednje dve linije ne trebaju, ali prva ti sigurno treba.
 
Odgovor na temu

RMAN
Milan Đukić
student
Knićanin

Član broj: 32492
Poruke: 1166
*.static.zrlocal.net.



+5 Profil

icon Re: rand() funkcija u c-u?11.10.2011. u 09:53 - pre 152 meseci
To je to

Hvala!

Nego, kako radi rand funkcija? Na osnovu vremena?
Eureka!

MILAN DJUKIC
D J U K A
 
Odgovor na temu

Mihajlo Cvetanović
Beograd

Moderator
Član broj: 37636
Poruke: 1249



+96 Profil

icon Re: rand() funkcija u c-u?11.10.2011. u 10:26 - pre 152 meseci
Funkcija čuva interno neki broj, i taj broj se menja svaki put kad se pozove funkcija. Povratna vrednost funkcije je izvedena iz tog broja koji se menja. Taj broj se postavlja sa ovom funkcijom srand. Ako se ne postavi onda se računa kao da je postavljen na neku uvek istu vrednost (mislim da je 1).

Evo implementacija funkcija rand i srand u Visual Studiu 2008:

Code (c):
int rand (void)
{
        _ptiddata ptd = _getptd();

        return( ((ptd->_holdrand = ptd->_holdrand * 214013L + 2531011L) >> 16) & 0x7fff );
}

void srand (unsigned int seed)
{
        _getptd()->_holdrand = (unsigned long)seed;
}
 


Kao što vidiš slučajni brojevi dobijeni funkcijom rand nisu zaista slučajni. Čitav niz slučajnih brojeva definisan je početnim brojem. Pošto su brojevi samo naizgled slučajni, ali nisu zaista, zovu se pseudo-slučajni brojevi.
 
Odgovor na temu

djoka_l
Beograd

Član broj: 56075
Poruke: 3453

Jabber: djoka_l


+1462 Profil

icon Re: rand() funkcija u c-u?11.10.2011. u 10:49 - pre 152 meseci
Inače, ovaj generator slučajnih brojeva se zove linearni kongruentni generator.
Neprevaziđene knjgie Donalda Knutha The Art of Computer Programming daju za ovaj algoritam (i druge) način kako izabrati brojeve kojima se množi i sabira pseudoslučajan broj, da bi se dobila što bolja uniformnost.
 
Odgovor na temu

[es] :: C/C++ programiranje :: C/C++ za početnike :: rand() funkcija u c-u?

[ Pregleda: 4903 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.