Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 4 odgovora
  • 5.592 pregleda

Najnovija ↓

rand() funkcija u c-u? 10.10.2011. u 21:12 · pre 183 meseca #1
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?
Potpis
Eureka!

MILAN DJUKIC
D J U K A
Re: rand() funkcija u c-u? 10.10.2011. u 22:24 · pre 183 meseca #2
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.
Re: rand() funkcija u c-u? 11.10.2011. u 10:53 · pre 183 meseca #3
To je to :)

Hvala!

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

MILAN DJUKIC
D J U K A
Re: rand() funkcija u c-u? 11.10.2011. u 11:26 · pre 183 meseca #4
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.
Sviđa mi se2
Re: rand() funkcija u c-u? 11.10.2011. u 11:49 · pre 183 meseca #5
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.
Sviđa mi se1
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme