Exercice langage C: Génération de nombres aléatoires

Créez un programme avec le code suivant:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    #include 
    #include 

    using namespace std;

    int main(int argc, char **argv)
    {
      srand(0);

      cout << rand() << endl;
      cout << rand() << endl;
      cout << rand() << endl;

      return 0;
    }

 



Lancez l'exécutable plusieurs fois pour vérifier que les mêmes nombres sont affichés.

Changez l'instruction srand(0); par srand(time(0)); et vérifiez que cette fois les nombres sont différents à chaque exécution.

N'oubliez pas d'ajouter #include  au début du programme pour pouvoir utiliser la fonction time().

  1. Modifiez le programme pour que les nombres soient des nombres entiers compris entre 0 et 9.
  2. Modifiez le programme pour que les nombres soient des nombres entiers compris entre 1 et 10.
  3. Modifiez le programme pour que les nombres soient des nombres flottants (réels) compris entre 0 et 10.
  4. Modifiez le programme pour que les nombres soient des nombres flottants (réels) compris entre -1 et +1.

  1. La fonction rand() retourne un entier entre 0 et RAND_MAX, où RAND_MAX est un très grand nombre entier. La manière la plus simple d'obtenir un nombre aléatoire entre 0 et 9, consiste à prendre le reste de la division entière par 10 de l'entier retournè par rand(). Comme vous le savez, le reste de la division entière par  donne un nombre entre 0 et n -1 .
  2. Pour obtenir un nombre aléatoire entre 1 et 10, il suffit d'ajouter 1 au résultat obtenu au point précédent.
  3. Commençons par obtenir un nombre flottant entre 0 et 1. Si l'on convertit le résultat de rand() en float et qu'on le divise par RAND_MAX (i.e. la plus grande valeur possible), le résultat sera un nombre flottant compris entre 0 et 1. Pour obtenir un flottant entre 0 et 10, il suffit simplement de multiplier ce résultat par 10.
  4. Appliquons la méthode du point précédent afin d'obtenir un nombre flottant entre 0 et 2. En lui soustrayant 1, on obtient à présent un flottant entre -1 et 1.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include 
#include 

using namespace std;

int main(int argc, char **argv)
{
  srand(time(NULL));

  // entiers entre 0 et 9
  cout << rand() % 10 << endl;

  // entiers entre 1 et 10
  cout << 1 + (rand() % 10) << endl;

  // flottants entre 0 et 10
  //      rand(): entier entre 0 et RAND_MAX
  //      float(rand()): flottant entre 0 et RAND_MAX
  //      float(rand()) / RAND_MAX: flottant entre 0 et 1
  cout << float(rand()) / RAND_MAX * 10 << endl;

  // flottants entre -1 et 1
  cout << (float(rand()) / RAND_MAX * 2) - 1 << endl;

  return 0;
}