Département d'Informatique
IUP1 GMI 2002/2003
Algorithmique & Programmation
Contrôle Continu
Mardi 17 décembre
(durée : 1h30, tout document autorisé)






Quelques généralités : Les définitions demandées dans ce sujet sont à écrire en C. Lorsque le sujet indique un nom de type ou de fonction, vous devez utiliser le même nom de type ou de fonction. Votre note dépendra en partie de la lisibilité de votre code.
Rappels : Pour chaque définition de fonction vous devez donner en commentaire une brève description, les pré- et post-conditions éventuelles et la signification de chaque variable locale. N'oubliez pas d'indenter le texte afin de faire clairement apparaître les différents blocs d'instructions.


I   Dominos (définition)

Le jeu des dominos comporte 28 pièces répertoriées dans la table ci-dessous.


Chaque pièce, appelé domino, a une forme rectangulaire et est divisé en deux moitiés blanches marquées de points noirs. Le nombre de points noirs dans chaque moitié est compris entre 0 et 6 et indique une des 2 valeurs du domino. Un domino est donc défini par 2 valeurs entre 0 et 6 (par exemple (2-3)). A noter qu'un domino est réversible (autrement dît, (2-3) et (3-2) définissent le même domino).
Définir le type domino des dominos (faire en sorte que chaque domino ait une seule représentation possible) et les opérations associées suivantes :

- cons_domino
qui construit un domino à partir de 2 valeurs
- val_inf
qui détermine la plus petite des 2 valeurs d'un domino
- val_sup
qui détermine la plus grande des 2 valeurs d'un domino
- points_domino
qui détermine le nombre total de points noirs sur un domino donné
- prem_domino
qui, étant donné un entier n, détermine le premier domino ayant un total de n points noirs, dans la table ci-dessus (dans cette table, les dominos sont ordonnés dans le sens de la lecture de gauche à droite et de haut en bas : le premier est en haut à gauche, le dernier est en bas à droite)
- suiv_domino
qui détermine le domino suivant d'un domino donné, dans la table ci-dessus
- compte_domino
qui, étant donné un entier n, compte le nombre de dominos
ayant un total de n points noirs

II   Dominos (utilisation)

Dans la variante classique du jeu de dominos, on forme des chaînes linéaires de dominos en réunissant des moitiés ayant la même valeur. Ci-dessous 3 exemples de chaînes linéaires avec (de bas en haut) 2, 3 et 4 dominos :


Définir les fonctions suivantes :
- chainable2
qui détermine s'il est possible de former une chaîne linéaire avec 2 dominos donnés
(ex: c'est possible avec (2-3) et (1-3), impossible avec (2-3) et (1-4))
- chainable3
qui détermine s'il est possible de former une chaîne linéaire avec 3 dominos donnés
(ex: c'est possible avec (2-3), (2-4) et (1-3), impossible avec (2-3), (2-4) et (1-2))
Indication : rechercher parmi les 3 dominos, 2 dominos qui peuvent former un début de chaîne, si le domino restant ne peut pas être ajouté à la chaîne, alors aucune chaîne ne peut être formée avec ces 3 dominos. Attention au cas particulier où le domino restant a ses 2 valeurs identiques.

This document was translated from LATEX by HEVEA.