| 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.