/* titel: turm.c, turm von hanoi */
#include <stdio.h>

typedef enum { links, mitte, rechts } turm;

void print_turm ( turm welcher ) {
  switch (welcher) {
    case links  : printf ("LINKS "); break;
    case mitte  : printf ("MITTE "); break;
    case rechts : printf ("RECHTS"); break;
  }
}

void bewege_scheibe ( turm von, turm nach ) {
  printf ("Scheibe von "); print_turm (von);
  printf (" nach ");       print_turm (nach);
  printf ("\n");
}

void bewege (int anzahl, turm von, turm mittels, turm nach) {
  if ( anzahl == 1 )
    bewege_scheibe (von, nach);
  else {
    bewege ( anzahl - 1, von, nach, mittels);
    bewege_scheibe ( von, nach );
    bewege ( anzahl - 1, mittels, von, nach);
  }
}

int main() {
  int scheibenzahl;
  printf("Scheibenzahl: ");
  while ( scanf("%d", &scheibenzahl) == 0 ) {
    getchar(); printf("\nFalsche Eingabe, bitte Zahl >= 0 eingeben: ");
  }
  if (scheibenzahl <= 0)
    return 0;
  printf ("%d %s\n",scheibenzahl,"Scheiben erfordern folgende Bewegungen:");
  bewege (scheibenzahl, links, mitte, rechts);
}
