Foro de elhacker.net

Programación => Java => Mensaje iniciado por: XxArCaNgElxX en 26 Junio 2011, 19:30 pm



Título: Impementar un metodo ordenar!!!
Publicado por: XxArCaNgElxX en 26 Junio 2011, 19:30 pm
Buenas a todos!!!
Hace dias q ue estoy tratando de resolver este problema y no le doy solucion aun es por eso q recurro aca!!!

mi problema es este   Pila1(3 elementos)+Pila2(5elementos)=PIla3(8elementos aca el detalle que me vote los elemntos ordenados en una tercera pila)
Mi codigo:
la parte combinar busque manera de hacerlo esa parte no sta bien q digamos.
Código
  1. package tad_pila;
  2.  
  3.  
  4. /**
  5.  *
  6.  * @author Administrador//algoritmo 3.3
  7.  * apilar = cuando almacenamos valores
  8.  * lalalalalalala gracias
  9.  * desapliar=cuando retiramos los valores
  10.  */
  11. public class TADPila{
  12.  
  13.    private int TOPE;
  14.    private int MAX=10;
  15.    private int [] Datos;
  16.    private int bandera;
  17.  
  18.  
  19.    //contructor
  20.    public TADPila(){
  21.        Datos= new int[MAX];//crear la pila
  22.  
  23.  
  24.    }
  25.  
  26.    public boolean pilaVacia() {
  27.        //throw new UnsupportedOperationException("Not supported yet.");
  28.        if(TOPE==0)
  29.            return true;
  30.        else
  31.            return false;
  32.    }
  33.  
  34.    public boolean pilaLlena() {
  35.        //throw new UnsupportedOperationException("Not supported yet.");
  36.        if(TOPE==MAX)
  37.            return true;
  38.        else
  39.            return false;
  40.    }
  41.  
  42.    public void apilar(int dato) {
  43.        //throw new UnsupportedOperationException("Not supported yet.");
  44.        if(pilaLlena()){
  45.            System.out.println("Desbordamiento..... Pila Llena:");
  46.        }else{
  47.            TOPE+=1;
  48.            Datos[TOPE]=dato;
  49.        }
  50.    }
  51.  
  52.    public int desapilar() {
  53.        //throw new UnsupportedOperationException("Not supported yet.");
  54.        int dato=-999;
  55.        if(pilaVacia()){
  56.            System.out.println("Underflow.. Pila Vacia:");
  57.        }else{
  58.            dato= Datos[TOPE];
  59.            TOPE-=1;
  60.        }
  61.        return dato;
  62.  
  63.    }
  64.  
  65.      public void escribirPila2 (TADPila pila)
  66.      {
  67.            int elem;
  68.            if (!pila.pilaVacia ())
  69.            {
  70.  
  71.                elem = pila.desapilar ();
  72.                System.out.println(elem);
  73.                escribirPila2 (pila);
  74.                pila.apilar (elem);
  75.            }
  76.  
  77.        }
  78.      public void imprimirPila()
  79.    {
  80.  
  81.            int dato=0;
  82.  
  83.        for(int i=TOPE; i>0;i--){
  84.  
  85.            dato= Datos[i];
  86.            System.out.println(dato);
  87.        }
  88.  
  89.    }
  90.  
  91.  
  92.    public void combinar(TADPila p1,TADPila p2)
  93.    {
  94.  
  95.        int f,t;
  96.  
  97.        for(int i=TOPE; i>0;i--){
  98.  
  99.  
  100.        System.out.println(   f= p1.desapilar());
  101.             System.out.println(   t= p2.desapilar());
  102.  
  103.             if(f<t)
  104.                 p1.apilar(t);
  105.             else if(t>t)
  106.                 p1.apilar(t);
  107.  
  108.             System.out.println(p1);
  109.  
  110.  
  111.        }
  112.  
  113.  
  114.  
  115.     }
Mi main donde llamo mis metodos
Código
  1. public class Main {
  2.  
  3.    /**
  4.      * @param args the command line arguments
  5.      */
  6.    public static void main(String[] args) {
  7.  
  8.       TADPila p1= new TADPila();
  9.        TADPila p2= new TADPila();
  10.        TADPila p3= new TADPila();
  11.  
  12.        p1.apilar(9);
  13.        p1.apilar(1);
  14.        p1.apilar(3);  //3
  15.        p1.apilar(5); //1
  16.        p1.apilar(-1);
  17.        p2.apilar(2);
  18.        p2.apilar(8);
  19.        p2.apilar(77);
  20.  
  21.       p1.imprimirPila();
  22.       p1.combinar(p1, p2);


Título: Re: Impementar un metodo ordenar!!!
Publicado por: bengy en 27 Junio 2011, 04:39 am
quieres hacer una estructura de DATOS????????????
 si lo q digo es cierto tu code esta muy MAL


Título: Re: Impementar un metodo ordenar!!!
Publicado por: Valkyr en 28 Junio 2011, 17:20 pm
Sí, lo cierto y verdad es que el código está algo mal. Por ejemplo el método escribirPila2 no se que utilidad podrías darle, ya que cada pila tiene su propio método imprimir  :-\

Por otro lado el método combinar tienes varios fallos:

Código
  1. public void combinar(TADPila p1,TADPila p2)
  2. {
  3.        int f,t
  4.        for(int i=TOPE; i>0;i--){
  5.                System.out.println(   f= p1.desapilar());
  6.                System.out.println(   t= p2.desapilar());
  7.                if(f<t)
  8.                     p1.apilar(t);
  9.                 else if(t>t)
  10.                     p1.apilar(t);
  11.  
  12.                  System.out.println(p1);
  13.        }
  14. }

Por un lado estás suponiendo que P1 y P2 van a tener el mismo TOPE que la pila con la que realizas la llamada, cosa que no es ni por asomo segura.

Yo lo que haría sería pasar tan solo un argumento, y combinar la pila con la que se realiza la llamada al método, y la pila que se pasa como parámetro. Dentro del método tendría que construir una nueva pila vacía, e ir llenandola con los elementos correspondientes, podría ser algo así:

Código
  1. public TADPila combinar(TADPila p1){
  2.        TADPila resul = new TADPila();
  3.        while(!p1.pilaVacia() && !pilaVacia()){
  4.                int a, b;
  5.                a = p1.desapilar();
  6.                b = desapilar();
  7.                if(a<b){
  8.                        resul.apilar(a);
  9.                        apilar(b);
  10.                }
  11.                else if(a>=b){
  12.                        resul.apilar(b);
  13.                        p1.apilar(a);
  14.                }
  15.        }
  16.        //Aquí tendrías que comprobar si se han sacado todos los elementos de las dos pilas, si no, quedará alguna con elementos, los metes de golpe y ya está.
  17. }

El método que te he puesto supone que la insercción de los elementos en cada pila se ha hecho en orden, es decir, antes de llamar al método combinar se han insertado elementos en ambas pilas y se ha hecho de forma ordenada (ascendente). Si no habría que hacerlo de otra forma.

Saludos.


Título: Re: Impementar un metodo ordenar!!!
Publicado por: XxArCaNgElxX en 28 Junio 2011, 17:37 pm
Bueno sabes los elementos apilados debe ser diferentes no deben star ordenados y de ahi unir y ordenar en una 3era pila usando un cualquier metodo de ordenamiento pero trabjando todo con las pilas!!!


Título: Re: Impementar un metodo ordenar!!!
Publicado por: [Case] en 1 Julio 2011, 15:05 pm
Revisando tu codigo me di cuenta de que nunca inicias el int TOPE, no te da error esa variable?.


Título: Re: Impementar un metodo ordenar!!!
Publicado por: Valkyr en 1 Julio 2011, 15:30 pm
Si no me equivoco, las variables de tipo entero, si no las inicializas a ningún valor toman valor 0 de forma predeterminada, igual que los objetos toman null, los de tipo real 0.0 y los booleanos false.


Título: Re: Impementar un metodo ordenar!!!
Publicado por: ShotgunLogic en 1 Julio 2011, 15:41 pm
Si no me equivoco, las variables de tipo entero, si no las inicializas a ningún valor toman valor 0 de forma predeterminada, igual que los objetos toman null, los de tipo real 0.0 y los booleanos false.
Si pero creo que eso depende de la versión de java que uses, y por eso no suele ser muy buena práctica dejarlo sin inicializar.