El algoritmo recursivo sería:
Hanoi (N , columna A, columna B , columna C)
N, origen, destino , auxiliar
Si N == 1
Imprimir : Pasar disco de A a B
else
Hanoi(N-1 , A , C, B)
Imprimir : Pasar disco de A a B
Hanoi(N-1 , C , B , A)
Veamos paso a paso como procede el algoritmo en el caso de tres discos:
Hanoi(3,1,2,3)
Hanoi(1,1,2,3) --> Cambia de 1 a 2
Hanoi(2,1,3,2) --> Cambia de 1 a 3 --> Cambia de 1 a 3
Hanoi(1,2,3,1) --> Cambia de 2 a 3
Cambia de 1 a 2 --> Cambia de 1 a 2 ---> Cambia de 1 a 2
Hanoi(1,3,1,2) --> Cambia de 3 a 1
Hanoi(2,3,2,1) --> Cambia de 3 a 2 --> Cambia de 3 a 2
Hanoi(1,1,2,3) --> Cambia de 1 a 2
FORMA RECURSIVA
hanoi ( N, origen, destino, auxiliar )
{
si N mayor a 0 entonces
hanoi(N - 1, origen, auxiliar, destino)
pasar disco N de origen a destino
hanoi(N - 1, auxiliar, destino, origen)
fin-si
}
PROGRAMACION EN JAVA
import java.io.*;
/**
* Imprime un sistema de posiciones para resolver
* las torres de hanoi tomando como referencia
* el elemento mas a la izquierda
*/
public class hanoi
{
static int moves=0; //cantidad de movimientos
static int getInt()
{
String line;
BufferedReader in =
new BufferedReader(new InputStreamReader(System.in));
try
{
line = in.readLine();
int i = Integer.valueOf(line).intValue();
return i;
}
catch (Exception e)
{
System.err.println("Digite un numero valido.\n" +
"se asume como el valor de 1");
return 1;
}
}
*/Funcion para mover disco de torre a torre*/
static void hanoi(int altura, char deTorre, char aTorre, char conTorre)
{
if (altura >= 1)
{
hanoi(altura-1, deTorre, conTorre, aTorre);
moverDisco(deTorre, aTorre);
hanoi(altura-1, conTorre, aTorre, deTorre);
}
}
/*funcion para imprimir el movimiento del disco*/
static void moverDisco(char deTorre, char aTorre)
{
moves++;
System.out.print(deTorre);
System.out.print(aTorre);
System.out.print(((moves % 20)==0) ? '\n' : ' ');
}
*/Funcion para Ingresar la cantidad de discos*/
public static void main(String[] args)
{
int AlturaTorre;
char deTorre='A', aTorre='B', conTorre='C';
System.out.println("Digite Cantidad de discos");
System.out.print("y presione Enter");
System.out.print (" ");
AlturaTorre = getInt();
hanoi(AlturaTorre, deTorre, aTorre, conTorre);
System.out.println();
}
}
martes, 24 de febrero de 2009
Factorial
Inicio
leer(n)
factorial ← 1
desde i ← 1 hasta n
factorial ← factorial * i
fin_desde
escribir(factorial)
Fin
PROGRAMACION EN JAVA
import java.io.*;
/**
* Calcula el Factorial de un numero dado
*
*/
public class factorial {
static void main(String[] args) {
try{
BufferedReader object = new BufferedReader(new InputStreamReader(System.in));
System.out.println("Digite el numero");
int a= Integer.parseInt(object.readLine());
int fact= 1;
System.out.println("El Factorial de " +a+ " es :");
for (int i= 1; i<=a; i++){
fact=fact*i;
}
System.out.println(fact);
}
catch (Exception e){}
}
}
leer(n)
factorial ← 1
desde i ← 1 hasta n
factorial ← factorial * i
fin_desde
escribir(factorial)
Fin
PROGRAMACION EN JAVA
import java.io.*;
/**
* Calcula el Factorial de un numero dado
*
*/
public class factorial {
static void main(String[] args) {
try{
BufferedReader object = new BufferedReader(new InputStreamReader(System.in));
System.out.println("Digite el numero");
int a= Integer.parseInt(object.readLine());
int fact= 1;
System.out.println("El Factorial de " +a+ " es :");
for (int i= 1; i<=a; i++){
fact=fact*i;
}
System.out.println(fact);
}
catch (Exception e){}
}
}
Fibonacci
SEUDOCODIGO
Inicio
Entrada= i,n,fib,fib1,fib2,fibx
Mensaje="Un numero entero:";
Leer n;
fib1=2; fib2=1; i=3;
si((n==1)(n==2))
fib=1;
sino{
haga{
fib = fib1 + fib2;
fibx = fib1; i++;
fib1 = fib; fib2 = fibx;
}mientras(i}
Fin si
escriba "El " n "-esimo numero de la serie Fibonacci es: " fib;
retorne 0;
}
Fin
Entrada: n
PROGRAMACION EN JAVA
import java.io.*;
/**
* Calcula la serie de fibonacci
*
*/
public class fibonacci
{
public static void main(String args[])throws IOException
{
int[]
f = new int[10]; //Crea un arreglo de longitud 10
f[0] = 1; //Primer item del arreglo
f[1] = 1; //Segundo item del arreglo
int x; //Declara x del tipo int (integer)
System.out.print(f[0] + "\n" + f[1] + "\n"); //Da la salida de los 2 primeros elementos en el arreglo f
for(x=2; x<=9; x++) //Como 'x<=10' no es 10 tiene que ser 9 si es mayor el arreglo se cuelga
{
f[x] = f[x-1] + f[x-2];//Calcula el siguiente elemento del arreglo
System.out.println(f[x]); //Imprime los siguientes elementos en el arreglo
}
}
}
Inicio
Entrada= i,n,fib,fib1,fib2,fibx
Mensaje="Un numero entero:";
Leer n;
fib1=2; fib2=1; i=3;
si((n==1)(n==2))
fib=1;
sino{
haga{
fib = fib1 + fib2;
fibx = fib1; i++;
fib1 = fib; fib2 = fibx;
}mientras(i
Fin si
escriba "El " n "-esimo numero de la serie Fibonacci es: " fib;
retorne 0;
}
Fin
Entrada: n
PROGRAMACION EN JAVA
import java.io.*;
/**
* Calcula la serie de fibonacci
*
*/
public class fibonacci
{
public static void main(String args[])throws IOException
{
int[]
f = new int[10]; //Crea un arreglo de longitud 10
f[0] = 1; //Primer item del arreglo
f[1] = 1; //Segundo item del arreglo
int x; //Declara x del tipo int (integer)
System.out.print(f[0] + "\n" + f[1] + "\n"); //Da la salida de los 2 primeros elementos en el arreglo f
for(x=2; x<=9; x++) //Como 'x<=10' no es 10 tiene que ser 9 si es mayor el arreglo se cuelga
{
f[x] = f[x-1] + f[x-2];//Calcula el siguiente elemento del arreglo
System.out.println(f[x]); //Imprime los siguientes elementos en el arreglo
}
}
}
Definiciónes mas cortas
Niveles
· Abstracción: Es la lógica con la cual se modela la realidad.
· Implementación: Es la codificación en el lenguaje de programación.
· Aplicación: Hace referencia a la interfaz de usuario y la maquina.
· Implementación: Es la codificación en el lenguaje de programación.
· Aplicación: Hace referencia a la interfaz de usuario y la maquina.
Estructura de datos

Partamos del concepto de programacion en esta ecuacion para identificar la importacia de el concepto estructuras de datos.
PROGRAMACION = ESTRUCTURAS DE DATOS + ALGORITMOS
Una estructura de datos es una coleccion de datos que se caracterizan por su organizacion y las operaciones que se definen en ellos. por tanto una estructura de datos vendra caracterizada tanto por unas ciertas relaciones entre datos que las constituyen, como por las operacionales posibles en ella . esto supone que podamos expresar formalmente, mediante un conjunto de reglas, las relaciones y operaciones posibles (tales como insertar nuevos elementos o como eliminar los ya los existentes..
Entonces cabe aclarar que es dato de tipo estructurado a una entidad, con un solo identificador, constituida por datos de otro tipo, de acuerdo con las reglas que la definen cada una de las estructuras de datos.
Suscribirse a:
Entradas (Atom)