retour vers le sommaire du cours
On souhaite simuler le jeu de dés appelé 421.
Règle du jeu simplifiée : On utilise 3 dés (faces numérotées de 1 à 6) que l'on peut lancer jusqu'à 3 fois. L'objectif est de former le nombre 421 avec les 3 dés. Lorsque l'un (ou plusieurs) des chiffres sort, on met le dé correspondant de côté et on relance les autres dés.
Dans un premier temps, vous écrirez une procédure Tirage définie comme suit :
procedure Tirage (entrée : NbDesLances est un entier
sortie : De1, De2, De3 sont entiers)Les valeurs fournies en sortie sont toujours données dans l'ordre décroissant. C'est à dire que si le tirage donne les 3 valeurs suivantes : 2 5 3, les valeurs renvoyées seront 5, 3 et 2.
NbDesLances représente le nombre de dés à lancer (0, 1, 2 ou 3 !). Lorsqu'il y a moins de 3 dés de lancés, les valeurs renvoyées en sortie seront 0 pour les dés non joués. Par exemple pour le tirage d'un seul dé donnant 5, les valeurs renvoyées seront 5, 0 et 0.
Ensuite, vous rédigerez une procédure Tester421 définie comme suit :
procedure Tester421 (sortie : nbEssais est entier)Cela permettra d'appeler la procédure tirage autant de fois que nécessaire pour obtenir le 421. La données NbEssais fournira le nombre de lancers qui auront été nécessaires.
Eventuellement, vous pouvez utiliser les algorithmes suivants :
fonction NbAlea (entrée : Taille est entier) retourne un entier
où l'entier retourné est compris entre 0 et Taille-1fonction Max (entrée : Nb1, Nb2 sont entiers) retourne un entier
où l'entier retourné est la plus grande valeur de Nb1 et Nb2fonction Min (entrée : Nb1, Nb2 sont entiers) retourne un entier
où l'entier retourné est la plus petite valeur de Nb1 et Nb2procedure Tirage (entrée : NbDesLances est un entier
sortie : De1, De2, De3 sont entiers)
données : Nb1, Nb2, Nb3 sont entiers
début
Nb1 <-- 0
Nb2 <-- 0
Nb3 <-- 0si (NbDesLances > 0) alors
Nb1 <-- NbAlea(6) + 1
fin sisi (NbDesLances > 1) alors
Nb2 <-- NbAlea(6) + 1
fin sisi (NbDesLances > 2) alors
Nb3 <-- NbAlea(6) + 1
fin siDe1 <-- max (max (Nb1, Nb2), Nb3)
De3 <-- min (min (Nb1, Nb2), Nb3)
De2 <-- (Nb1 + Nb2 + Nb3) - (De1 + De3)
finprocedure Tester421 (sortie : NbEssais est entier)
données
NbDes est entier
Resultat est une chaine de 3 car
De1, De2, De3 sont entiersdébut
Resultat <-- 'xxx'
NbEssais <-- 0
NbDes <-- 3répéter
Tirage (NbDes, De1, De2, De3)
NbEssais <-- NbEssais + 1si (Resultat[1] <> '4') ET ((De1 = 4) OU (De2 = 4) OU (De3 = 4)) alors
NbDes <-- NbDes - 1
Resultat[1] <-- '4'
fin sisi (Resultat[2] <> '2') ET ((De1 = 2) OU (De2 = 2) OU (De3 = 2)) alors
NbDes <-- NbDes - 1
Resultat[2] <-- '2'
fin sisi (Resultat[3] <> '1') ET ((De1 = 1) OU (De2 = 1) OU (De3 = 1)) alors
NbDes <-- NbDes - 1
Resultat[3] <-- '1'
fin si
jusqu'a (Resultat = '421')
fin