Torre de hanoi

Disponível somente no TrabalhosFeitos
  • Páginas : 2 (362 palavras )
  • Download(s) : 0
  • Publicado : 26 de janeiro de 2013
Ler documento completo
Amostra do texto
#include <stdio.h>
#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\nVoceconseguiu! 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...
tracking img