[ Foro de Pascal ]
Hola, ya conseguí hacer el objeto árbol ahora tengo que hacer el programa de las torres de Hanoi, tengo todo solo me falta el procedure que hace mover los discos el código es el siguiente:
Program TorresDeHanoi;
uses crt;
const max = 9;
type torres = array[1..3,1..max] of byte;
var mov : integer;
procedure pintavacio;
begin
textbackground(blue);
textcolor(white);
clrscr; clrscr; write(' ');
write('Movimiento número: ',mov);
textbackground(green );
window (16,3,16,21); clrscr;
window (41,3,41,21); clrscr;
window (66,3,66,21); clrscr;
window (6,22,77,22); clrscr;
textbackground(blue);
end;
procedure pintaTorres(t:torres);
var i,j,inix,iniy,inc : byte;
begin
pintavacio;
textbackground(red);
for i := 1 to 3 do
for j := 1 to max do
if t[i,j] > 0 then begin
inix := 16+25*(i-1)-t[i,j];
iniy := 22-2*j;
inc := t[i,j] * 2 + 1;
window(inix,iniy,inix+inc,iniy);
clrscr;
end;
textbackground(blue);
window(1,1,80,25); gotoxy(1,1);
gotoxy(6,23); write('Pulsa una tecla para continuar...');
readkey;
end;
procedure mueve(var t:torres;ori,fin:byte);
var aux,top : byte;
begin
inc(mov);
top:=max;
end;
PROCEDURE Hanoi (n,A,B,C : byte;var t:torres);
BEGIN
IF n = 1 THEN mueve(t,A,C)
ELSE BEGIN
Hanoi(n-1,A,C,B,t);
mueve(t,A,C);
Hanoi(n-1,B,A,C,t);
END;
END;
procedure initorres(var t:torres;n:byte);
var i : byte;
begin
for i := 1 to max do
begin
if i <= n then t[1,i] := n+1-i
else t[1,i] := 0;
t[2,i] := 0;
t[3,i] := 0;
end;
end;
var num : byte;
var t : torres;
begin
mov := 0;
clrscr;
write('Dime cuantos discos tienes: '); readln(num);
iniTorres(t,num);
pintatorres(t);
Hanoi(num,1,2,3,t);
end.
Un saludo y gracias.
Te falta justo lo importante. Tienes los "adornos", pero no la función que resuelve el programa de las torres de Hanoi, que es típicamente una función que recursiva, que mueve de una columna a otro usando una tercera columna auxiliar.
Lee con cuidado el algoritmo, que puedes encontrar incluso en la wikipedia: el truco está en que entre una llamada y la siguiente intercambias la columna que actúa como origen y la auxiliar:
http://es.wikipedia.org/wiki/Torres_de_Han%C3%B3i
(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)