martes, 24 de febrero de 2009

Las Torres de Hanoi - Recursivo

0 comentarios
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();

}

}

Factorial

0 comentarios
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){}
}
}

Fibonacci

0 comentarios
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
}
}
}

Definiciónes mas cortas

0 comentarios
Dato: Unidad mínima que compone cualquier información.

Estructura de Datos: Es una colección de datos que pueden ser caracterizados por su organización y las operaciones que se definen en ella.

Niveles

0 comentarios
· 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.

Estructura de datos

0 comentarios

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.