![]() | Lancer des dés |
On veut simuler le lancement de deux dés et étudier la fréquence d'apparition de chaque somme possible (de 2 à 12). Les résultats seront affichés sous forme numérique et sous forme graphique de la façon suivante.
2 [ 3.30] : xxx 3 [ 5.00] : xxxxx 4 [ 6.60] : xxxxxxx 5 [10.10] : xxxxxxxxxx 6 [13.60] : xxxxxxxxxxxxxx 7 [18.20] : xxxxxxxxxxxxxxxxxx 8 [15.60] : xxxxxxxxxxxxxxxx 9 [12.40] : xxxxxxxxxxxx 10 [ 7.00] : xxxxxxx 11 [ 5.40] : xxxxx 12 [ 2.80] : xxx
Chaque symbole 'x' représente 1%.
Nous allons d'une part déterminer la façon de garder les données nécessaires en mémoire et d'autre part décomposer les diverses opérations à effectuer en opérations simples qui seront des fonctions ou des procédures.
Nous aurons à conserver en mémoire le nombre de tirages correspondant à chaque résultat possible. Cela se fera dans un tableau d'entiers dont les indices iront de 2 à 12. De même nous aurons à calculer les fréquences correspondantes qui seront conservées dans un autre tableau contenant des nombres de type Real.
Nous définissons deux variables globales destinées à contenir ces tableaux.
var eff : array[2..12] of Integer; { tableau des effectifs } freq : array[2..12] of Real; { tableau des fréquences }
Le travail effectué par le programme peut se diviser en deux parties :
On peut donc prévoir les procédures et fonctions suivantes :
procedure initEff; { mise à 0 du tableau des effectifs } function effectifTotal:Integer; { renvoie l'effectif total } function unTirage:Integer; { tirage de 2 dés et renvoi de la somme } procedure tirages(n:Integer); { n tirages consécutifs et inscription des résultats dans le tableau des effectifs } procedure calcFreq; { remplissage du tableau des fréquences } procedure afficheLigne(n:Integer); { affichage de la ligne correspondant au total n } procedure afficheTout; { affichage de toutes les lignes de résultats }
Le programme final aura la forme suivante :
var nbTirages:Integer; BEGIN randomize; repeat write('Nombre de tirages : '); readln(nbTirages); if nbTirages>0 then begin initEff; tirages(nbTirages); calcFreq; afficheTout; end; until nbTirages<=0; END.
Il reste donc à écrire toutes les procédures et fonctions prévues.