Vous êtes sur la page 1sur 9

Nombres

pseudo-aléatoires
(rand et srand)

1
Nombres pseudo-aléatoires

#include <iostream> Il faut ajouter


using namespace std; #include <stdlib.h>
#include <stdlib.h> #include <time.h>
#include <time.h> au début du programme.

int main(int argc, char ** argv) Il faut appeler la fonction srand


{ une fois, avant d'utiliser la
srand( time(0) ); fonction rand pour la première
fois.
cout << rand() << endl;
cout << rand() << endl; La fonction rand renvoie un
nouveau nombre à chaque fois
return 0; qu'elle est utilisée.
}

donnera par exemple:


1481765933
1085377743

2
rand()

La fonction rand() retourne un nombre entier (de type int) apparemment tiré
au hasard.

Ce nombre est compris entre 0 et RAND_MAX, qui est une valeur définie dans le
fichier stdlib.h

La fonction rand() n'a pas d'argument, les parenthèses doivent néanmoins


être présentes.

3
srand( ... )
La fonction srand() doit être appelée une fois, avant d'utiliser la fonction rand pour la
première fois. Elle permet d'initialiser le "générateur de nombres pseudo-aléatoires".

Par exemple, si on fait:

srand(0);
cout << rand() << endl;
cout << rand() << endl;

le générateur est initialisé avec la valeur 0, et les deux valeurs obtenues avec la fonction
rand() seront les mêmes à chaque fois que le programme est exécuté. Si on initialise le
générateur avec la valeur 1:

srand(1);
cout << rand() << endl;
cout << rand() << endl;

on obtiendra des valeurs différentes, mais ce seront toujours les mêmes à chaque fois
que le programme sera exécuté.

4
srand( ... )
Pour obtenir des nombres différents à chaque exécution du programme, il faut initialiser
le générateur avec une valeur différente à chaque exécution.

Un moyen pratique pour cela est d'utiliser la fonction time(), qui renvoie le nombre de
secondes écoulée depuis une certaine date (précisément le 1er Janvier 1970 à 00h00
UTC):

srand( time(0) );
cout << rand() << endl;
cout << rand() << endl;

Pour pouvoir utiliser la fonction time(), il faut ajouter au début du programme:


#include <time.h>

5
Exemples

Comment obtenir un nombre au hasard entre 0 et 9 ?

à  il suffit de prendre le reste de la division par 10:

int n(rand() % 10);

6
Exemples

Comment obtenir un nombre au hasard entre 0 et 9 ?

à  il suffit de prendre le reste de la division par 10:

int n(rand() % 10);

Comment obtenir un nombre au hasard entre 1 et 10 ?

à  il suffit de prendre le reste de la division par 10, et d'ajouter 1:

int n(rand() % 10 + 1);

7
Exemples
Comment obtenir un nombre décimal au hasard entre 0 et 1 ?

à rand() est entre 0 et RAND_MAX, il suffit de diviser rand() par RAND_MAX.

Attention au piège de la division entière ! Si on fait:

double x(rand() / RAND_MAX);

x vaudra toujours 0, puisque:


rand() et RAND_MAX sont tous les deux de type int, il s'agit donc de la division entière.
Comme rand() est toujours plus petit que RAND_MAX, rand() / RAND_MAX vaut toujours 0.

Il faut utiliser un cast explicit:


double x(double(rand()) / RAND_MAX);

8
Exemples
Comment obtenir un nombre décimal au hasard entre 0 et 1 ?
à double x(double(rand()) / RAND_MAX);

Comment obtenir un nombre décimal au hasard entre -1 et 1 ?


à double(rand()) / RAND_MAX; est entre 0 et 1
donc 2 * double(rand()) / RAND_MAX; est entre 0 et 2
donc 2 * double(rand()) / RAND_MAX – 1; est entre -1 et 1

à double x(2 * double(rand()) / RAND_MAX – 1);

Vous aimerez peut-être aussi