next up previous
Next: /dev/random Up: Generare de numere aleatoare Previous: Generare de numere aleatoare

Apeluri POSIX

Apelurile POSIX sunt folosite pentru generare de numere pseudo-aleatoare. Denumirea de numere pseudo-aleatoare provine din faptul ca numerele sunt generate conform unor algoritmi care genereaza numere ``aleatoare'' prin probabilitatea lor de aparitie in cadrul unui interval dat. Intotdeauna se porneste de la o samanta (seed) care va constitui pasul de inceput de unde se aplica algoritmul. Sintaxa de apel pentru cele doua functii utilizate pentru obtinerea de numere pseudo-aleatoare este:

#include <stdlib.h>

int rand (void);
void srand (unsigned int seed);

Functia rand genereaza unui numar pseudo-aleator in intervalul [0, RAND_MAX].

Functia srand are ca parametru samanta folosita pentru a genera o noua secventa de numere aleatoare. Deoarece algoritmul de obtinere are pasi bine precizati, apelurile repetate ale srand pentru aceeasi samanta vor genera aceeasi secventa de numere. De aceea, daca in cadrul aceluiasi program dorim ca la rulari repetate sa generam secvente diferite de numere aleatoare, va trebui sa utilizam o valoare diferita pentru seed. Acest lucru se realizeaza foarte simplu prin obtinerea timpului curent in format intreg. Prin urmare, un apel obisnuit al functiei srand va fi

#include <stdlib.h>
#include <time.h>
...
        srand (time (NULL));
...

Functia time intoarce timpul de la inceputul erei UNIX (1 ianuarie 1970) pana acum, in secunde ($ man 2 time). Intrucat acesta va fi diferit de la apel la apel, va genera secvente diferite de fiecare data.

In continuare este prezentat codul pentru doua fisiere (unul header) pentru generarea de numere aleatoare intr-un interval dat.

/*
 * myrand.h
 * fisier header cu prototipuri de functii pentru generare de numere
 * aleatoare
 */

#ifndef _MYRAND_H
#define _MYRAND_H      1

void init_seed (void);
int get_rand (unsigned int max);

#endif

/*
 * myrand_rand.c
 * fisier ce contine funtii de lucru cu numere aleatoare generate
 * prin intermediul apelurilor rand si srand
 */

#include <stdlib.h>
#include <time.h>

/* initializare seed */
void init_seed (void)
{
        srand (time (NULL));
}

/* obtinere numar pseudo-aleator in intervalul [0, max) */
int get_rand (unsigned int max)
{
        return rand () % max;
}


next up previous
Next: /dev/random Up: Generare de numere aleatoare Previous: Generare de numere aleatoare
Razvan Adrian Deaconescu 2005-10-01