[ 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.)