Nombres aléatoires
Vous implémenterez les fonction de cet exercice dans le fichier nombre-aléatoires.c
.
- Toutes les fonctions sont à écrire dans le programme principal, en dehors de la fonctions main.
- Le programme main doit permettre de tester chaque fonction demandée
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 fonctionmain
, 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é
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
etaleatoire.h
)
Créez un fichier Makefile
pour gérer la compilation de ce projet.