Había una vez...
Algoritmos
En Delphi
| Volver | |
Arbol | |
Archivo | |
Agenda |
Base de Datos | |
Básico |
| Editor | |
Editor2 | |
Fibonacci | |
Hanoi | |
Listas | |
Matriz |
| Modelo 1 | |
Modelo | |
Polimorfismo |
Punteros | |
Sobrecarga | |
Vectores |
Colega virtual, en esta page podrás observar una de las aplicaciones más tradicionales de la función recursiva, que te permite ahorrar muchas lineas de código repetitivo para lograr la misma acción.
En todos los lenguajes la recursividad permite a autoconvocarse a una función, todas las veces que sea necesario, hasta generar resultado esperado.
donde reina el dios Brama ...
Esta historia se atribuye al matemático francés Édouard Lucasd'Amiens, que lo publicó en 1883 en París bajo el pseudónimo de "N. Claus de Siam".
ALGORITMO
El algoritmo que resuelve el problema de las torres de Hanoi es:
Procedimiento Hanoi(n, i, j) Si n=1 entonces mover disco de i a j Si no entonces Hanoi(n-1,i,6-i-j) mover disco de i a j Hanoi(n-1,6-i-j,j) Fin Si Fin Hanoi
//------------------------------------------------- //-PROCEDIMIENTO PARA CARGAR LA GRILLA void TForm1::MoverDisco(int desde,int hasta) { grilla->Cells[0][0]="Desde el poste"; grilla->Cells[1][0]="Hasta el poste"; i++; grilla->Cells[0][i]=desde; grilla->Cells[1][i]=hasta; } //-------------------------------------------------- //-PROCEDIMIENTO PARA LA SOLUCION DE LAS TORRES void TForm1::MoverTorre(int disco,int uno,int dos,int tres) { if (disco==1) MoverDisco(uno,tres); else { MoverTorre(disco-1,uno,tres,dos); MoverDisco(uno,tres); MoverTorre(disco-1,dos,uno,tres); } } //------------------------------------------------- //--PROCEDIMIENTO PARA VER LA SOLUCION EN LA GRILLA void __fastcall TForm1::botonsolucionClick(TObject *Sender) { contegrilla->Visible=true; MoverTorre(boxdiscos->Text.ToInt(),1,2,3); } //-------------------------------------------------
ALGORITMOS en DELPHI
//------------------------------------------------ procedure Tparcialhanoi.moverdisco(desde,hasta:integer); begin grilla.Cells[0,0]:='Desde el Poste'; grilla.Cells[1,0]:='Hasta el Poste'; i:=i+1; grilla.Cells[0,i]:=IntToStr(desde); grilla.Cells[1,i]:=IntToStr(hasta); end; //---------------------------------------------------- procedure Tparcialhanoi.movertorre(disco,uno,dos,tres:integer); begin if(disco=1)then moverdisco(uno,tres) else begin movertorre(disco-1,uno,tres,dos); moverdisco(uno,tres); movertorre(disco-1,dos,uno,tres); end; end; //------------------------------------------------ procedure Tparcialhanoi.botonsolucionClick(Sender: TObject); begin contegrilla.Visible:=true; movertorre(StrToInt(boxdiscos.Text),1,2,3); end; //---------------------------------------------------
Ahora que llegaste hasta aquí ya podrás comprender que..
..la mujer es una auténtica paradigma..!!
José Gastón dice:
Las Torres de Hanoi son un problema matemático que ha divertido a muchos por mucho tiempo. Más que un problema, es realmente un juego.
Este juego que como dice la leyenda llevaría muchos años resolverlo, pero a través de la computación se puede resolver fácilmente. Se resuelve a través de una solución algoritmica que es recursiva.
Por ejemplo yo lo realicé pero en distintos lenguajes 'BUILDER C++' y 'DELPHI' que son muy buenos y que son del mismo padre 'BORLAND' pero con varias diferencias entre los dos que no son aceptables para mi, es el caso de la sintaxis de Builder que con su sensibilidad al tipo de letra tengo que estar alerta de una letra mayúscula o minúscula, y escribir las flechitas me cansa, pero esto es sólo una opinión en contra que BORLAND debería tener en cuenta y fuera de esto te digo que el lenguaje es muy bueno.
Así que si quieres convertirte en un monje y resolver la solución de las torres te recomiendo estos dos lenguajes.
06/12/02