Sortiranje

6. Generiranje slučajnih brojeva

Kad trebamo više podataka, njihovo nam učitavanje može oduzeti mnogo vremena. Tada se za provjeravanje ispravnosti algoritama koristimo generatorom slučajnih brojeva.

Za korištenje generatorom slučajnih brojeva potrebno je uključiti biblioteku stdlib.h. Funkcija rand() generira slučajan broj iz intervala [0, RAND_MAX]. Broj RAND_MAX je najveći slučajni broj koji se može generirati. Ovisi o računalu, a lako ga je provjeriti naredbom printf("%d", RAND_MAX);.

Vrijednost RAND_MAX je obično 327687, no to nije pravilo.

Isprobajmo generator slučajnih brojeva s pomoću jednostavnog programa:

#include<stdlib.h>
#include<stdio.h>
int main()
{
     printf("%d", rand());
     return 0;
}

Prepišite ga i pokrenite nekoliko puta. Uočit ćete da program svaki put ispisuje isti broj. Da bismo to izbjegli, trebamo inicijalizirati generator slučajnih brojeva srand(). Kako bismo izbjegli da srand() vraća uvijek jednak niz slučajnih brojeva, možemo iskoristiti funkciju time() koja vraća broj sekundi proteklih od 1. siječnja 1970. Ta se funkcija nalazi u biblioteci time.h.

Isprobajte sada sljedeći program i uočite razliku.

#include<stdlib.h>
#include<stdio.h>
#include<time.h>
int main()
{
     srand(time(NULL));  
     printf("%d", rand());
     return 0;
}

 

Vrlo često trebamo generirati slučajne brojeve iz točno određenog intervala brojeva. Naredba rand()%10  generirat će broj iz intervala od 0 do 9 (uključujući i rubne brojeve), naredba rand()%101 broj iz intervala od 0 do 100, a naredba rand()%401+100 ispisat će slučajni broj iz intervala [100, 500]. Općenito, želimo li generirati slučajne brojeve iz intervala [min,max] možemo to učiniti sljedećom formulom:

rand()%(max + 1 - min) + min