C.BOUTAMMINE 2
Travail demandé — découpage en sous-programmes
Pour suivre le modèle d’atelier (petites étapes testables), implémentez les sous-programmes suivants et
testez-les séparément avant d’intégrer la récursion.
1. Ecrire un sous-programme SaisirVec() qui permet d’initialiser un vecteur d’entier avec n valeurs saisies
par l’utilisateur.
2. Ecrire un sous-programme TrierVec() qui permet de trier un vecteur d’entier par ordre décroissant.
3. Ecrire un sous-programme InitTour() qui permet d’initialiser une tour avec n disques empilés du plus
grand au plus petit.
4. Écrire un sous-programme qui affiche une tour dans un format lisible, et une autre fonction qui affiche
les trois tours dans l’ordre : TourA, TourB puis TourC :
5. Écrire une fonction afficherTour(const std::vector<int>& tour, char nom) qui affiche le
contenu d’une tour sous la forme A: [5 4 3].
6. Écrire une fonction afficherTours() qui affiche les trois tours dans l’ordre A, B, C sous la forme :
Remarque : la fonction afficherTours() ne prend aucun paramètre en entrée car elle doit utiliser les variables globales
tourA, tourB, tourC pour garantir l’ordre d’affichage lors des appels récursifs de la question 8).
7. Écrire un sous-programme deplacerDernierDisque() qui déplace le dernier élément (sommet) d’une tour
de départ vers une tour destination. La fonction doit vérifier que la tour de départ n’est pas vide et que
la règle d’empilement est respectée. Retourner true si déplacement effectué, false sinon
8. Ecrire un sous-programme hanoi() qui permet de déplacer n disque d’une tour de départ A vers une
tour d’arrivée C en utilisant une tour auxiliaire B qui doit respecter les règles suivantes :
• On ne peut déplacer qu’un disque à la fois.
• On ne peut jamais placer un disque plus grand sur un disque plus petit.
void hanoi(int n, vector<int> &A, vector<int> &B, vector<int> &C)
Indication : Pour déplacer n disques de A vers C en utilisant B
a) Déplacer n-1 disques de A vers B en utilisant C.
b) Déplacer le disque restant (le plus grand) de A vers C.
c) Déplacer n-1 disques de B vers C en utilisant A.
9. Compléter le programme principal ci-dessous pour qu’il :
• Initialise TourA avec n=4 disques
• Afficher l’état initial des tours avec afficherTours()
• Déplace les 4 disques de TourA vers TourC en utilisant TourB comme tour auxiliaire.
• Vérifier que le nombre de déplacement est bien égal à 2𝑛− 1.