retour vers le sommaire du cours

Algorithmique - Travaux Dirigés - Séance n°2
Elements de correction

Algorithme 2 - Une partie de 421 (énoncé - programmeRetour en haut de page

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

fonction Max (entrée : Nb1, Nb2 sont entiers) retourne un entier
où l'entier retourné est la plus grande valeur de Nb1 et Nb2

fonction Min (entrée : Nb1, Nb2 sont entiers) retourne un entier
où l'entier retourné est la plus petite valeur de Nb1 et Nb2

procedure 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 <-- 0

  si (NbDesLances > 0) alors
    Nb1 <-- NbAlea(6) + 1
  fin si

  si (NbDesLances > 1) alors
    Nb2 <-- NbAlea(6) + 1
  fin si

  si (NbDesLances > 2) alors
    Nb3 <-- NbAlea(6) + 1
  fin si

  De1 <-- max (max (Nb1, Nb2), Nb3)
  De3 <-- min (min (Nb1, Nb2), Nb3)
  De2 <-- (Nb1 + Nb2 + Nb3) - (De1 + De3)
fin

procedure Tester421 (sortie : NbEssais est entier)
données
  NbDes est entier
  Resultat est une chaine de 3 car
  De1, De2, De3 sont entiers

début
  Resultat <-- 'xxx'
  NbEssais <-- 0
  NbDes <-- 3

  répéter
    Tirage (NbDes, De1, De2, De3)
    NbEssais <-- NbEssais + 1

    si (Resultat[1] <> '4') ET ((De1 = 4) OU (De2 = 4) OU (De3 = 4)) alors
      NbDes <-- NbDes - 1
      Resultat[1] <-- '4'
    fin si

    si (Resultat[2] <> '2') ET ((De1 = 2) OU (De2 = 2) OU (De3 = 2)) alors
      NbDes <-- NbDes - 1
      Resultat[2] <-- '2'
    fin si

    si (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


Page créée en novembre 2003
Auteur : Jean HENRI