```/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        R E S O L U T I O N   D U   P R O B L E M E   D E S   T O U R S   D E   H A N O I  :                                       */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Author of '\$xtc/ToursDeHanoi.02\$c' :                                                                                       */
/*                                                                                                                                   */
/*                    Jean-Francois Colonna (LACTAMME, 20150915173154).                                                              */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

#include  "INCLUDES.01.I"

extern    double    log10();

#define   N_DISQUES                                                                                                                     \
4
#define   N_CHIFFRES                                                                                                                    \
(((int)log10(N_DISQUES))+1)

#define   N_PLOTS                                                                                                                       \
3
#define   A                                                                                                                             \
(0)
#define   B                                                                                                                             \
((A)+1)
#define   C                                                                                                                             \
((B)+1)

#define   CHAINE(x)                                                                                                                     \
('A'+x)

int       disque[N_DISQUES];
/* Ce vecteur indique sur quel plot se situe chaque disque (de 1 a D) a l'instant present,   */
/* le disque 'INDEX0' etant le plus gros et 'NombreVersIndex(D)' le plus petit...            */
int       hauteur[N_PLOTS];
/* Ce vecteur indique le nombre de disques ("hauteur") sur chaque plot...                    */

void      deplacement(int n,int a,int c,int b)
{
if        (n == 1)
{
int       index;
int       iterer=VRAI;

printf("%c --> %c",CHAINE(a),CHAINE(c));
/* Indication du mouvement courant : le disque du haut du plot 'a' est mis en haut du        */
/* plot 'c'.                                                                                 */

printf(" : ");

for       (index=INDEX0 ; index<=NombreVersIndex(N_DISQUES) ; index++)
{
printf("%c",CHAINE(disque[index]));
/* Indication de la localisation (sur quel plot ?) de chaque disque avant le mouvement       */
/* precedent (a --> c) en mettant le plus grand a gauche et le plus petit a droite...        */
}

printf(" {%0*d,%0*d,%0*d} ",N_CHIFFRES,hauteur[A],N_CHIFFRES,hauteur[B],N_CHIFFRES,hauteur[C]);
/* Edition des "hauteurs" avant le mouvement precedent...                                    */

printf(" --> ");

index=NombreVersIndex(N_DISQUES);

while     (iterer == VRAI)
{
if        (disque[index] == a)
{
disque[index]=c;
/* On recherche le numero du disque situe en haut du plot 'a', puis on le deplace en         */
/* haut du plot 'c' (a --> c).                                                               */
iterer=FAUX;
}
else
{
index--;
}
}

hauteur[a]--;
hauteur[c]++;
/* La hauteur du plot 'a' diminue quand celle de 'c' augmente...                             */

for       (index=INDEX0 ; index<=NombreVersIndex(N_DISQUES) ; index++)
{
printf("%c",CHAINE(disque[index]));
/* Indication de la localisation (sur quel plot ?) de chaque disque apres le mouvement       */
/* precedent (a --> c) en mettant le plus grand a gauche et le plus petit a droite...        */
}

printf(" {%0*d,%0*d,%0*d} ",N_CHIFFRES,hauteur[A],N_CHIFFRES,hauteur[B],N_CHIFFRES,hauteur[C]);
/* Edition des "hauteurs" apres le mouvement precedent...                                    */

printf("\n");

if        ((hauteur[A]+hauteur[B]+hauteur[C]) != N_DISQUES)
{
printf("ERREUR de comptage\n");
}
else
{
}
}
else
{
deplacement(n-1,a,b,c);
deplacement(1,a,c,b);
deplacement(n-1,b,c,a);
}
}

main()
{
int       index;

for       (index=INDEX0 ; index<=NombreVersIndex(N_DISQUES) ; index++)
{
disque[index]=A;
/* Tous les disques sont initialement sur le plot 'A'.                                       */
}

hauteur[A]=N_DISQUES;
hauteur[B]=0;
hauteur[C]=0;

deplacement(N_DISQUES,A,C,B);
}
```