Diferencia entre revisiones de «Torres de Hanói»

Contenido eliminado Contenido añadido
Sin resumen de edición
m Revertidos los cambios de 190.172.134.46 (disc.) a la última edición de HUB
Línea 33:
# hanoi (auxiliar, origen, destino)          //mover todas las fichas restantes, {0...n-1}, encima de la ficha grande (n)
# terminar
 
==== C++ ====
<source lang="cpp">/*
{Pre: discos > 1 ^ discos = número de discos ^ ini,dest,aux = caracteres que identifiquen las torres}
{Post: Se escribe por el canal estándar de salida los movimientos a realizar, indicados a partir de
los caracteres que identifican las torres, para llevar todos los discos desde la torre inicial
a la de destino}
*/
void hanoi(int discos, char ini, char dest, char aux) {
if (discos == 1) cout << ini << " --> " << dest << endl;
else {
hanoi(discos - 1, ini, aux, dest);
cout << ini << " --> " << dest << endl;
hanoi(discos - 1, aux, dest, ini);
}
}
 
/*
Ejemplo de función que llama automáticamente a hanoi(int, char, char, char) solo dándole el número de discos
{Pre: discos > 1}
{Post: Se escribe por el canal estándar de salida los movimientos a realizar para llevar todos los discos
desde la torre de inicio hasta la de destino. Las torres serán identificadascomo A B C siendo la inicial A
y la de destino C}
*/
void hanoi(int discos) {
hanoi(discos, 'A', 'C', 'B');
}</source>
 
==== Java ====
<source lang="cpp">
import java.util.*;
 
public class Hanoi {
 
public static void main(String args[]){
int n;
Scanner sc=new Scanner(System.in);
System.out.print("Escriba el número de discos en la torre de hanoi: ");
n=sc.nextInt();
while(n<0){
System.out.print("Error, reescriba el número de discos en la torre: ");
n=sc.nextInt();
}
algoritmoHanoi(n,"Primera Torre","Segunda Torre","Tercera Torre");
}
public static void algoritmoHanoi(int n, String from, String temp, String to) {
if (n == 0) return;
algoritmoHanoi(n-1, from, to, temp);
System.out.println("Mover disco " + n + " de " + from + " a " + to);
algoritmoHanoi(n-1, temp, from, to);
}
 
}
</source>
 
 
==== Prolog ====
<source lang="prolog">
%Hanoi usando recursividad en lenguaje Prolog
 
hanoi(N):- move(N,'A','C','B').
 
move(0,_,_,_):-!.
 
move(N, Src, Dest, Spare):- M is N-1, move(M, Src, Spare, Dest), primitive(Src, Dest), move(M, Spare, Dest, Src).
 
primitive(X, Y):- writelist([mueve, un, disco, desde, X, hasta, Y]), nl.
 
writelist([]).
 
writelist([H|T]):- write(H), write(' '), writelist(T).
 
%
</source>
 
==== Modula-2 ====
<source lang="modula3">
%Hanoi usando recursividad en lenguaje Modula-2
 
FROM SWholeIO IMPORT WriteCard;
FROM STextIO IMPORT WriteChar,WriteString,WriteLn;
 
PROCEDURE hanoi(x:CARDINAL;ini,aux,dest:CHAR);
 
BEGIN
IF x = 1 THEN
WriteString("MOVER DISCO ");
WriteCard(x,1);
WriteString(" DEL cilindro ");
WriteChar(ini);
WriteString(" AL cilindro ");
WriteChar(dest);
WriteLn;
ELSE
hanoi(x-1,ini,dest,aux);
WriteString("MOVER DISCO ");
WriteCard(x,1);
WriteString(" DEL cilindro ");
WriteChar(ini);
WriteString(" AL cilindro ");
WriteChar(dest);
WriteLn;
hanoi(x-1,aux,ini,dest);
END;
END hanoi;
 
%
</source>
 
=== Iterativa ===