Red de conocimiento informático - Conocimiento del nombre de dominio - ¡Urgente! ! ! ¡Buscando un programa de demostración de animación en lenguaje C para la Torre de Hanoi! ! !

¡Urgente! ! ! ¡Buscando un programa de demostración de animación en lenguaje C para la Torre de Hanoi! ! !

#include lt;graphics.hgt;

struct H

{

int data[15];/*almacenar cada nombre clave del disco */

int top; /*La altura específica de cada torre*/

}num[3] /*Tres torres*/

;

void move(char x, char y, struct H num[3]); /*El proceso específico de moverse*/

void hanoi(char x, char y, char z, int n , struct H num[3]); /*recursión*/

void Init(void); /*inicialización*/

void Close(void /*cierre gráfico*); /

int computer=1; /*Banderas de control automático y control manual*/

int speed=0; /*La velocidad variable global es principalmente la velocidad del proceso de demostración. */

void main(void)

{

Init(); /*Estado inicial*/

Close(); /*Cierre gráfico* /

exit(0);

}

void Init(void)/*Inicialización*/

{

int gd=DETECT, gm;

int i, n, color;

clrscr();

printf(" ingrese n(nlt ;=10): ");/*Ingrese el número de placas que se mostrarán*/

scanf("d",&n);

printf( "Por favor ingrese 1 o 2:\n1.computadora 2.personas\n");

scanf("d",amp;i);

if(i==2 )/*Seleccionar manual El indicador de control es 0*/

computer=0;

if(nlt;1||ngt;10)

n= 10;/*Si está fuera de los límites nCuando se procesa 10*/

if(computadora)/*Si se controla automáticamente, la velocidad de entrada*/

{

printf("ingrese velocidad: "); /*Ingrese velocidad*/

scanf("d", amp; velocidad

}

initgraph(amp; gd, amp; gm, "D:\\tc");

cleardevice();

for(i=0;ilt;3 ;i)

num[ i].top=-1;/*Las alturas de los tres lugares comienzan en -1*/

for(i=0;ilt;n ;i)/*Dibuja la torre inicial A La placa en la parte superior*/

{

num[0].top /*La altura de la pila se incrementa en 1*; /

num[0].data[ num[0].top]=i; /*El código de placa más grande es 0, seguido de 1, 2,...n-1*/

color=num[0].data[num[0 ].top] 1; /*El código de color de la placa es el código de la placa en la parte superior de la pila más 1*/

setfillstyle(SOLID_FILL, color);

bar(100-(33-3 *num[0]

.datos[núm[0].top]), 400-20*i-8, 100

(33-3*núm[0].datos[núm[0].top]), 400 -20*i 8); /*Dibujar un rectángulo*/

}

setcolor(YELLOW);

outtextxy(180, 450, "cualquier clave continuar");

settextstyle(0, 0, 2);

outtextxy(90, 420, "A"); /*Logotipo de la torre*/

outtextxy(240, 420, "B");

outtextxy(390, 420, "C");

getch() /*Ejecutar recursividad después de recibir caracteres */

hanoi('a', 'b', 'c', n, num

}

movimiento vacío(char x, char); y, struct H num[3])/*El proceso específico de movimiento*/

{

int i;

char num1[3], num2 [3];

sprintf(num1, "c", x-32); /*Convertir minúsculas a mayúsculas y convertirlas en salida de cadena*/

sprintf(num2 , " c", y-32);

setfillstyle(SOLID_FILL, BLACK); /*Eliminar el lugar original y ennegrecerlo*/

bar(0, 0, 640, 60) ;

setcolor(RED);

outtextxy(150, 30, num1); /*Proceso de movimiento de salida*/

outtextxy(200, 30, " ---gt;");

outtextxy(310, 30, num2);

settextstyle(0, 0, 2);

setfillstyle(SOLID_FILL , BLACK); /*Eliminar el lugar original y ennegrecerlo*/

bar(100 150*(x-97)-(33-3*num[x-97].data [num[x]. -97].top]),

400-20*num[x-97].top-8, 100 150*(x-97) (33-3*

num[x-97].data[num[x-97].top]), 400-20*num[x-97].top 8);

num[y- 97].top ;/*Empuje hacia la pila, agregue 1 a la parte superior del punto objetivo*/

num[y-97].data[num[y-97].top]=num[x-97 ] .data[num[x-97].top];/*El número de código de la placa en el punto de destino es el mismo que el número de código de la placa en el punto de origen*/

num [x-97].top--;/* Pop la pila y la parte superior en el lugar original se reduce en 1*/

setfillstyle(SOLID_FILL, num[y-97].data[num [y-97].top] 1); /*El código de color de la placa es la pila Add 1*/

bar(100 150*(y-97)-(33-3*num). [y-97].data[num[y-97].top]) al código de la placa superior,

400-20*num[y-97].top-8, 100 150*( y-97)

(33-3*núm[y-97].datos [n

um[y-97].top]), 400-20*num[y-97].top 8);

if (computadora)/*Para control automático, use retardo*/

delay(speed);/*función de retardo*/

else

getch();/*Si quieres controlarlo manualmente, simplemente presiona el teclado para controlar hágalo usted mismo*/

}

void hanoi(char one, char two, char three, int n, struct H num[3])/*recursion n es el número de placas , num es la pila*/

{

if(n==1)

move(one, three, num); es 1, mueve la placa de la torre A Ve a la base de la torre C*/

else

{

hanoi(uno, tres, dos, n-1 , num);/*Mover a la base de la torre A Mover las primeras n-1 placas de la torre B*/

move(one, three, num /*Mover la enésima placa de la torre A a la torre); C*/

hanoi(two, one, three, n-1, num); /*Mover n-1 placas de la Torre B a la Torre C*/

}

}

void Close(void)/*graph close*/

{

getch();

cerrar gráfico ();

}