Torre de hanoi
#include <stdlib.h>
#define VAZIO 0
#define VENCE 1
#define OK 1
#define NO 0
char codigo[3] = {'A', 'B', 'C'}; int pos[3][9]; int discos;
// Prototipos das funcoes
void imprime_torre(void); void ini_torres(void); void troca_valores(int , int); void limpa_entrada(void); void limpatela(void); void interface(void); void venceu(void); void checa_termino(void);
int checa_integridade(int , int);
void limpatela (void)
{
system("cls");
}
void limpa_entrada (void)
{
fflush(stdin);
}
void checa_termino (void)
{
int i;
for (i = 0; i < discos; i++) if(pos[2][i] == VAZIO ) return ; venceu();
}
void venceu (void)
{
limpatela(); imprime_torre();
printf("\n\nVoce conseguiu! Parabens. \n\n"); exit(0);
}
void interface (void)
{
int orig, dest;
do { limpatela(); imprime_torre();
printf("\n\n>> Movimento (digite na forma \"origem destino\" (1,2,3): "); limpa_entrada(); scanf("%d %d", &orig, &dest); } while ((orig < 1) || (orig > 3) || (dest < 1) || (dest > 3));
troca_valores(orig-1, dest-1); checa_termino(); interface();
}
int checa_integridade (int orig, int dest)
{
int i=0, j=0;
while (pos[orig][i] == VAZIO) i++;
while ((pos[dest][j] == VAZIO) && (j < discos)) j++;
// if ((orig < 0) || (orig > 2)) return NO; // if ((dest < 0) || (dest > 2)) return NO; if (pos[dest][j] == VAZIO) return OK; return (pos[orig][i] > pos[dest][j]) ? NO : OK;
}
void troca_valores (int orig, int dest)
{
int i=0, j=0;
if(checa_integridade(orig ,dest) == NO) return ; while (pos[orig][i] == VAZIO) i++;
while ((pos[dest][j] == VAZIO) && (j < discos)) j++;
j -= 1;
pos[dest][j] = pos[orig][i]; pos[orig][i] = VAZIO;
return ;
}
void