Alamir, Eu fiz este código há muito tempo, mas talvez ainda funcione. Hehehe program TorreDeHanoi; uses crt,extra,EXGRAPH,zentimer; const Max=31; type tpinos = array[1..Max,1..3] of integer; var Pinos : tpinos; ndiscos : word; NTrocas : longint; Procedure InicializaHanoi(npinos : word); var i,j : integer; begin clrscr; for i:=1 to Max do for j:=1 to 3 do pinos[i,j]:=0; for i:=1 to npinos do pinos[npinos-i+1,1]:=i; end; procedure MostraHanoi; var i,j : integer; x,y : integer; Largura : integer; begin ClearPage(Vscreen,0); for i:=1 to Max do for j:=1 to 3 do begin Largura:=Pinos[i,j]*2; x:=((j-1)*100+50)-(largura div 2); y:=190-i*5; DrawButton(x,y,largura,4,false,'',Vscreen); end; setcolor(15); Font(100,1,'Torre de Hanoi',DefFont,Vscreen); Font(1,5,'Trocas: '+IntToStr(NTrocas),DefFont,Vscreen); Font(1,15,LZTimeToStr(LZTimerLap),DefFont,Vscreen); Font(150,190,'By [K]co - www.loopz.cjb.net',DefFont,Vscreen); Flip(Vscreen,VGA); {sound(8000+random(100)); delay(5); nosound;} end; procedure Hanoi(num, origem, dest, trab : integer); var porigem, pdest : integer; i : integer; begin if num<>0 then begin hanoi(num-1,origem,trab,dest); { move o pino } porigem:=1; while pinos[porigem,origem]<>0 do inc(porigem); Dec(porigem); pdest:=1; while pinos[pdest,dest]<>0 do inc(pdest); pinos[pdest,dest]:=pinos[porigem,origem]; pinos[porigem,origem]:=0; Inc(Ntrocas); {if (pdest=1) then for i:=1 to 20 do begin sound(8000+random(100)); delay(5); nosound; end;} mostrahanoi; if not keypressed then hanoi(num-1,trab,dest,origem); end; end; var R,g,b : byte; begin repeat clrscr; Write('N£mero de Discos: (Max 30) '); repeat Readln(ndiscos); until ndiscos<31; Init(true); inicializahanoi(ndiscos); mostrahanoi; NTrocas:=0; LZTimerOn; Hanoi(ndiscos,1,3,2); mostrahanoi; setcolor(14); Font(1,190,'ESC sai',DefFont,VGA); getpal(14,r,g,b); repeat r:=(r+1) mod 64; setpal(14,r,r,0); until keypressed; Finish; until Port[$60]=1; end. Alamir Rodrigues wrote: ========================================================================= Instruções para entrar na lista, sair da lista e usar a lista em http://www.mat.puc-rio.br/~nicolau/olimp/obm-l.html ========================================================================= |