Generare aleatoare de numere in C
Scris de Valentin Popescu
Am avut nevoie de generare aleatoare de numere in C sub Ubuntu si nu am stiut cum se face asa ca m-am documentat putin si cum nu am gasit niciun site romanesc in care sa fie explicat, m-am gandit ca ar fi bine sa explic eu.
Numerele aleatoare sunt folosite de obicei pentru a genera evenimente aleator, ca de exemplu in jocurile de noroc, experimente, s.a.m.d. In practica nu exista o functie care sa genereze date aleator, defapt se generaza numere pseudo-aleatoare. Deci se va folosi o formula pentru a genera aceste numere, iar secventele de numere se pot repeta. Pentru a putea face acest lucru, trebuie setat o “sursa” (seed) de unde sa se plece cu generarea secventelor asa ca, setand mereu acelasi seed vom avea mereu aceeasi secventa.
Una dintre cele mai la indemana solutii pentru a seta o “sursa”(seed) este aceea de a folosi ora si data curenta a sistemului (pentru ca aceastea se schimba continuu). Exista multe functii care genereaza secvente pseudo-aleator insa toate functioneaza dupa aceleasi principii.
Cea mai simpla este:
void srand(unsigned seed); rand(); |
Unde
void srand(unsigned seed); |
este declaratia functiei care seteaza “sursa”.
Ea va fi apelata astfel:
srand(time(NULL)); |
Iar
rand(); |
va genera numarul aleator de la 0 la 215-1.
Pentru a fi cat mai usor de inteles, am sa ilustrez modul in care aceste functii pot fi folosite intr-un mic program.
#include #include #include //includem time.h pentru a putea folosi functia time(); void srand (unsigned seed); int main(void) { int a; srand(time(NULL)); //setare "sursa"(seed) a = rand(); //genereaza continut aleator printf("\nNumarul generat aleator este: %d \n", a); return 0; } |
Pentru a genera si numere negative puteti folosi una din functiile:
mrand48(); //sau jrand48(); |
care genereaza numere intre -231 si 231.
La final, daca ati compilat programul, ati putut observa ca numerele generate sunt destul de mari. Pentru a limita superior generarea acestora folositi:
a = rand()%n; |
unde n este valoarea maxima (fara ea) pana la care se vor genera numere.










26 October, 2009 la 22:17
Bun, corect, bine de stiut