nuestras visitas

jueves, 12 de septiembre de 2013

Torres de Hanoi

 EL JUEGO DE LAS TORRES DE HANOI

Es un problema clásico de recursión, ya que pertenece a la clase de problemas cuya solución se simplifica notablemente al utilizar recursión.
Se tienen 3 torres y un conjunto de N discos de diferentes tamaños.
Cada uno de los mismos tiene una perforación en el centro que le permite deslizarse a cualquiera de las torres. Inicialmente, los N discos están ordenados de mayor a menor en una de las torres.
Se debe pasar los discos a otra torre, utilizando la tercera torre como auxiliar. Este movimiento debe hacerse respetando las siguientes:
1.    En cada movimiento solo puede intervenir un disco, por lo tanto siempre será el disco superior el que pueda moverse.
2.    No puede quedar un disco sobre uno de menor tamaño. Supongamos que la torre se identifica con los nombres A, B y C. Los discos están inicialmente en la torre A (origen) que se quiere transferir.     A continuación se presentara el estado inicial y el final respectivamente del problema de la torre de Hanói para tres discos. Como debe respetarse las reglas enunciadas anteriormente, la única manera de mover el disco inferior será moviendo los primeros (N-1) discos superiores. Dado de que se requiere llevar el disco inferior a la torre destino B, deben colocarse primero los (N-1) discos en la torre auxiliar C. estas operaciones pueden hacerse generalmente para todos los discos, distinguiéndose básicamente tres subtareas.
3.    Transferir (N-1) discos de la torre A, a la torre C.
4.    Mover un disco de la torre A, a la torre C.

5.    Transferir (N-1) discos de la torre C, a la torre B…



A continuación
 te presentaremos un problema ya resuelto









Problema a resolver
hacer un problema donde se demuestre el juego de torres de hanoi

Diagrama UML


Solución en JAVA

import javax.swing.JOptionPane;
public class TorresHanoi {
   
    private int numdiscos;
    private int nummovimientos;


    public int getNumdiscos() {
        return numdiscos;
    }

   
    public void setNumdiscos(int numdiscos) {
        this.numdiscos = numdiscos;
    }


    public int getNummovimientos() {
        return nummovimientos;
    }

  
    public void setNummovimientos(int nummovimientos) {
        this.nummovimientos = nummovimientos;
    }
    public void intercambio( int numdiscos,char A,char B,char C){
        
      if(numdiscos==1){
          setNummovimientos(getNummovimientos() +1);
          JOptionPane.showMessageDialog(null,"mover disco del poste A al poste B  "+"\n"+"numeros de movimientos "+nummovimientos);  
      }  
      else{
          intercambio(numdiscos-1,A,B,C);
          setNummovimientos(getNummovimientos()+1);
          JOptionPane.showMessageDialog(null,"mover disco del poste A al poste C "+"\n"+"numeros de movimientos "+nummovimientos); 
          intercambio(numdiscos-1,A,B,C);
      }
    }
    public void jugar(){
    JOptionPane.showMessageDialog(null,"el total de movimientos efectuados fueron  "+ nummovimientos);    
    }
}


public class Torres {
    public static void main(String []largs){
        
        TorresHanoi x;
        x=new TorresHanoi();
        
        x.intercambio(3, 'A' ,'B', 'C');
        x.jugar();
    }
    
}
CONCLUSIÓN
En este programa llegue ala conclusión que este juego aplica la recursion cuya solución se simplifica notablemente al utilizar recursion para mi fue el programa mas confuso pero imposible de hacer.



Recursividad

Factorial de un numero 





Problema a resolver
Hacer un programa que lea un número y calcule las factoriales de hasta el número leído.



Solución en JAVA

package Suquey;
import javax.swing.JOptionPane;
public class Recursion_factorial
{
private int numero;
    private int fact;

    public int getNumero()
    {
        return numero;
    }

    public void setNumero(int numero) 
    {
        //set para que guarde el valor
        this.numero = numero;
    }

   
    public int getFact()
    {
        //get para que devuelva el valor
        return fact;
    }

    public void setFact(int fact)
    {
        this.fact = fact;
    }
    public void captura()
    {
        numero=Integer.parseInt(JOptionPane.showInputDialog(null,"Numero:"));
    }
    public int calcularfactorial(int n)
    {

        if(n==1 || n==0)
        {
            return 1;
        }
        else
        {
            fact= n* calcularfactorial(n-1);
            return fact;
        }
    }
    public void imprimirfactorial()
    {
        JOptionPane.showMessageDialog(null,"El factorial es:"+fact);
    }
}


SOLUCIÓN

import javax.swing.JOptionPane;

public class Imprimir_factorial
{
public static void main(String[]arg)
{
    Recursion_factorial n;
    n= new Recursion_factorial();
    int numveces;
    numveces=Integer.parseInt(JOptionPane.showInputDialog(null,"numero de veces a calcular"));
for(int i=1; i<=numveces;i++)
{
    n.captura();
    n.calcularfactorial(n.getNumero());
    n.imprimirfactorial();
}
}

}

CONCLUSIÓN

Aprendimos a diferenciar las palabras get y set donde get retorna el valor y set guarda el valor, también aprendimos que un constructor es una característica que nos ofrece java y que tienen que llamarse iguales al momento de crearlos y únicamente lo que cambia son los parámetros.


Rectangulo

EL  ÁREA Y PERÍMETRO DE UN RECTÁNGULO




Problema a resolver:
Elaborar un programa que calcule el área y el perímetro de 3 rectángulos y 1 triangulo


Diagramas UML









Solución en JAVA

Solución Rectángulo

package Suquey;
import javax.swing.JOptionPane;
public class Rectángulos
{
// atributos
  private int base;
  private int altura;
  private int área;
  private int perímetro;

    public int getBase()
    {
        return base;
    }

    public void setBase(int base)
    {
        this.base = base;
    }

    public int getAltura()
    {
        return altura;
    }

    public void setAltura(int altura)
    {
        this.altura = altura;
    }

    public int getArea()
    {
        return área;
    }

    public void setArea(int área)
    {
        this.area = area;
    }

    public int getPerimetro()
    {
        return perimetro;
    }

  
    public void setPerimetro(int perimetro) {
        this.perimetro = perimetro;
    }
    //metodos del UML
    public  void captura()
    {
    base=Integer.parseInt(JOptionPane.showInputDialog("base"));
    altura= Integer.parseInt(JOptionPane.showInputDialog("altura"));
    }
    public void calculararea()
    {
        area=base*altura;
    }
    public void calculaperimetro()
    {
        perimetro=base+base+altura+altura;
    }
    public void imprimir()
    {
        JOptionPane.showMessageDialog(null,"El area del rectangulo es:"+area);
        JOptionPane.showMessageDialog(null,"El perimetro del rectangulo es:"+perimetro);
    }

}

SolucionTriangulo

package Suquey;
import javax.swing.JOptionPane;
public class Triangulo
{
    private int base;
    private int altura;
    private float area;
    private int perimetro;

    public int getBase() 
    {
        return base;
    }
    public void setBase(int base) 
    {
        this.base = base;
    }

    public int getAltura()
    {
        return altura;
    }
    public void setAltura(int altura) 
    {
        this.altura = altura;
    }

    public float getArea() 
    {
        return area;
    }

    public void setArea(float area) 
    {
        this.area = area;
    }

    public int getPerimetro()
    {
        return perimetro;
    }
    public void setPerimetro(int perimetro) 
    {
        this.perimetro = perimetro;
    }
    
    public void captura()
    {
        base=Integer.parseInt(JOptionPane.showInputDialog("base"));
        altura=Integer.parseInt(JOptionPane.showInputDialog("altura"));
    }

    public  void calculararea()
    {
        area=base*altura/2;
       
    }
    
    public void calculaperimetro()
    {
        perimetro=base+base+base;
    }
    public void imprimir()
    {
        JOptionPane.showMessageDialog(null,"area");
        JOptionPane.showMessageDialog(null,"perimetro");
    }

}

Solución ambos

import javax.swing.JOptionPane;
public class Solución
{
public static void main (String []arg)
{
    //declarando objetos
    Rectangulos r1,r2,r3;
    Triangulo t1;
    //creando objetos
    r1=new Rectangulos();
    r2=new Rectangulos();
    r3=new Rectangulos();
    t1=new Triangulo();

    r1.captura();
    r1.calculararea();
    r1.calculaperimetro();
    r1.imprimir();
    
    r2.captura();
    r2.calculararea();
    r2.calculaperimetro();
    r2.imprimir();

    r3.captura();
    r3.calculararea();
    r3.calculaperimetro();
    r3.imprimir();

    t1.captura();
    t1.calculararea();
    t1.calculaperimetro();
    t1.imprimir();

}

}

Conclusión
en este primer programa aprendimos a utilizar los diagramas UML,
a encapsular atributos, llamar dos clases desde un  método principal
y se nos hizo mas fácil programar utilizando los diagramas de UML.

miércoles, 4 de septiembre de 2013

TIPOS DE DATOS ABSTRACTOS

TIPOS DE DATOS ABSTRACTOS
 
 
Un Tipo de Datos Abstracto es un tipo de dato definido por el programador que se puede manipular de un modo similar a los tipos de datos definidos por el sistema.
Esta formado por un conjunto valido de elementos y un numero de operaciones primitivas que se pueden realizar sobre ellos.
 
Un TDA es el elemento básico de la abstracción de datos. Su desarrollo es independiente del lenguaje de programación utilizado, aunque este puede aportar mecanismos que faciliten su realización.
 
Los tipos de datos abstractos se Clasifican en: Lineal y no lineal.
LINEAL: Una definición muy sencilla es que los lineales tienen un sucesor y un antecesor, por ejemplo, un numero 5, su sucesor es 6 y su antecesor es 4. Los lineales se clasifican en pila, cola y lista.
NO LINEAL: son elementos que tienen varios sucesores y antecesores, por ejemplo, 5 sus sucesores son 6, 7, 8, en adelante, y lo mismo sucede en los antecesores. Los no lineales se clasifican en grafos y arboles, mientras que los arboles se clasifican en binario y avl.  
 
 
MODULARIDAD
 
Se basa en la descomposición de un problema en una serie de subproblemas: dividiendo en módulos que resultan de segmentar el problema en funciones lógicas que son perfectamente diferenciados.
 
Esta división exige la presencia de un modulo denominado modulo de base o principal objeto que controle y se relacione con los demás.
Los objetivos principales  de la modularidad son:
1. capacidad de descomponer un sistema complejo.
2. capacidad de componerlo a partir de módulos existentes.

BIENVENIDA

 HOLA!!
CHICOS
BIENVENIDOS A NUESTRO
BLOGGER
      Donde encontraras información basada a la informática, sus conceptos y algunas palabras  especificadas para que el uso de la información sea entendible. Espero a que le sirva de ayuda la información que se encuentra en este blogger.
Se hizo con la finalidad de brindarle apoyo e información confiable, en este blogger se darán  a conocer los  temas de Estructuras de Datos, el objetivo es identificar la importancia de programar. Este blogger cuenta con un glosario donde puedes acceder a buscar las palabras que tu  aun no sabes la definición y otros temas de mucha importancia que se irán anexando más adelante, como introducción:      
El objetivo principal es identificar, seleccionar y aplicar eficientemente los tipos de datos abstractos, método de ordenamiento y búsqueda para optimizar el rendimiento de soluciones de problemas del mundo real, aplicando la sintaxis de un lenguaje orientado a objetos.