Nombres aléatoires

Vous implémenterez les fonction de cet exercice dans le fichier nombre-aléatoires.c.

Entier aléatoire

Créez une fonction de signature :

int aleatoire_int(int min, int max);

permettant de rendre un entier aléatoire entre min et max inclus (les deux paramètres de la fonction).

Pour cela, vous pourrez utiliser les fonctions (de la libc) suivantes définis dans <stdlib.h> :

  • srand dont le but est d'initialiser l'algorithme de nombres aléatoire avec ue seed. Attention cette fonction n'est à n'utiliser qu'une fois par programme, dans la fonction main, au tout début.
  • rand qui rend un entier aléatoire entre 0 et et RAND_MAX
  • le modulo (%) qui permet de conserver l'équiprobabilité.

Testez la fonction précédente dans la fonction main en faisant la moyenne de 100 tirages de nombres entre -50 et +50 (vous devez trouver quelque chose proche de 0).

Liste d'entiers aléatoires

Créez une fonction de signature :

int *aleatoire_tab(int max, size_t nombre);

Qui tire nombre nombres aléatoires entre 0 et max (exclu) et les rend dans un tableau de taille nombre. Vous créerez un tableau de nombre entiers int avec une allocation dans le tas.

Testez la fonction précédente avec int *t = aleatoire_tab(10, 100) et en remplissant un autre tableau int n[10] tel que n[i] contienne le nombre de fois où le nombre i est présent dans t.

Pourquoi faire l'allocation avec un malloc ?

corrigé

Toute variable déclarée dans une fonction est placée dans la pile et disparaît à la fin de l'exécution de la fonction. Pour rendre un pointeur par une fonction il faut que l'objet pointé reste valide à la fin de son exécution.

Probabilité

Créez une fonction de signature :

double aleatoire_01();

permettant de rendre un réel aléatoire entre 0 et 1.

Utilisez la fonction précédente pour créer une fonction de signature :

void aleatoire_01_liste(double proba, size_t nombre, int *t);

Cette fonction doit remplir nombre cases d'un tableau t passé en paramètre valant chacun 1 avec une probabilité proba et 0 sinon.

Testez la fonction précédente en tirant une liste de taille 100 avec une probabilité de .5.

Compilation séparée

En utilisant la partie sur la gestion du code source :

Décomposez le code en deux unités fonctionnelles :

  • le programme principal (fichier main.c)
  • le module aléatoire (deux fichiers aleatoire.c et aleatoire.h)

Créez un fichier Makefile pour gérer la compilation de ce projet.