Vous êtes sur la page 1sur 2

Cours POO C++ : Les exceptions

Atelier Exceptions - Tours de Hanoi


Objectifs
Se familiariser avec :
• utiliser des exceptions dans un programme C++
• écrire sa propre classe d’exception

Énoncé
Les tours de Hanoï sont un jeu de réflexion imaginé par le mathématicien français Édouard Lucas,
et consistant à déplacer des disques de diamètres différents d'une tour de « départ » à une tour d'«
arrivée » en passant par une tour « intermédiaire », et ceci en un minimum de coups, tout en
respectant les règles suivantes :
• on ne peut déplacer plus d'un disque à la fois ;
• on ne peut placer un disque que sur un autre disque plus grand que lui ou sur un
emplacement vide.
On suppose que cette dernière règle est également respectée dans la configuration de départ.1

Illustration 1: Modèle d'une tour de Hanoï avec huit disques [1]

Travail demandé
Écrivez une classe de conteneur simple contenant des valeurs représentant la tour de Hanoï. Pour
simplifier votre tâche, écrivez une version qui initialise le 1 er tige avec trois (3) disques seulement.
Ajoutez du code d’entrée simple pour vérifier que lorsque l’utilisateur écrit 12, il s’agit d’une

1 https://fr.wikipedia.org/wiki/Tours_de_Hanoï

1/2
Cours POO C++ : Les exceptions

commande permettant de déplacer un disque du 1er au 2eme tour. Ajoutez trois classes d’exception,
toutes pour informer l’utilisateur que la saisie n’est pas correcte:
• le premier lorsque l’une ou les deux tours ne se trouvent pas dans la gamme 1-3;
• la seconde pour informer l'utilisateur que la taille du disque déplacé est incorrecte (plus
grande que celle dans la tige cible);
• le troisième pour informer l'utilisateur qu'il n'y a pas de disques au niveau de la tige source.

Relevez ces exceptions lorsque la situation appropriée se présente. À noter que lorsque l’utilisateur
entre 11, 22 ou 33, il s’agit d’un mouvement vide. Un mouvement vide est incorrecte uniquement si
la tige est vide. Écrivez une fonction pour imprimer le contenu de toutes les tours dans un format
simple. La position de départ est comme suit:
tower_1: 3 2 1;
tower_2: empty;
tower_3: empty.

Le programme principale aura un menu avec les actions suivantes : saisir un mouvement, afficher ,
quitter.

Exemple input
13
12
32
13
21
23
13

Exemple output
tower_1: empty
tower_2: empty
tower_3: 3 2 1

Critères d’évaluations :
1. Le programme compile et s’exécute avec le menu demandé.
2. lors de la saisie d’un input correcte le mouvement correspondant est fait proprement.
3. Lors de la saisie d’un input incorrecte selon les trois scénarios décrit une exception est levé.
4. Présence et utilisation de trois classes d’exceptions comme indiqué dans le sujet.
5. Initialisation correcte par un constructeur des trois tiges.

2/2

Vous aimerez peut-être aussi