Programación General > Java

 Muchas dudas

(1/4) > >>

thepunishercadiz:
Buenos días a todos.

Tras dar muchas vueltas y estrujarme el coco, acudo aquí a ver si podéis echarme una mano porque no doy pie con bola.

Muchas gracias por adelantado.

El problema es el siguiente:

El algoritmo que desean crear recibe la secuencia de caracteres en un contenedor de tipo Cola. Una vez ejecutado retorna también una cola con el resultado obtenido.
El algoritmo de encriptación es un algoritmo recursivo que actúa de la siguiente manera:
La secuencia de caracteres que se desea encriptar se divide en dos partes. Cada una de las partes tendrá un número de elementos igual si la secuencia fuera de orden par. En caso contrario, la segunda parte tendrá un elemento más que la primera. Se dará la vuelta (invertir el orden de los caracteres) a cada una de las partes. Se repetirá el proceso de división e inversión para cada una de las partes obtenidas hasta que éste sean tanto pequeñas que la inversión no tenga sentido. Como resultado, el algoritmo devolverá la concatenación de las dos partes alteradas.

Y esto es lo que he hecho:

public class Ejercicio3 {
   
   public static ColaVectorImpl<String> cargacola (){
      
      ColaVectorImpl <String> res = new ColaVectorImpl <String> ();
      
      //meter caracteres en la cola
      res.encolar("H");
      res.encolar("o");
      res.encolar("l");
      res.encolar("a");
      res.encolar(" ");
      res.encolar("a");
      res.encolar("m");
      res.encolar("i");
      res.encolar("g");
      res.encolar("o");
      
      return res;
   }
   
   public static ColaVectorImpl<String> inviertecola (ColaVectorImpl <String> c) {
      
      ColaVectorImpl <String> invertida = new ColaVectorImpl <String>();
      PilaVectorImpl <String> temp = new PilaVectorImpl <String> ();
      int i = 0;
      
      if (c.estaVacio())
         return c;
      
      if (c.numElems() == 1)
         return c;
      
      else
         for (i = 0; i < c.numElems(); i ++)
            temp.apilar(c.desencolar());
      
      
      for (i = 0; i < temp.numElems(); i ++)
         invertida.encolar(temp.desapilar());
      
      
      return invertida;
         
   }
   
   public static void main (String [] args){
      
      ColaVectorImpl <String> c1;
      
      int i = 0;
      String tira;
      
      
      c1 = cargacola();
      
      tira = c1.toString();
      System.out.println(tira);

      ColaVectorImpl <String> aux1 = new ColaVectorImpl <String> ();
      ColaVectorImpl <String> aux2 = new ColaVectorImpl <String> ();
      ColaVectorImpl <String> aux3 = new ColaVectorImpl <String> ();
      ColaVectorImpl <String> aux4 = new ColaVectorImpl <String> ();
      ColaVectorImpl <String> fin = new ColaVectorImpl <String> ();
      
      if ((c1.numElems()% 2) == 0) {
         
         for (i = 0; i < c1.numElems()/2 ; i++){
            aux1.encolar(c1.desencolar());
         }
         for (i = (c1.numElems()/2); i < c1.numElems(); i++){
            aux2.encolar(c1.desencolar());
         }
         
      }
      
      else {
         
         for (i = 0; i < (c1.numElems()/2)-1 ; i++){
            aux1.encolar(c1.desencolar());
         }
         for (i = (c1.numElems()/2); i < c1.numElems(); i++){
            aux2.encolar(c1.desencolar());
         }
      }
      
      aux3 = inviertecola(aux1);
      aux4 = inviertecola(aux2);
      
      for (i=0; i < aux3.numElems(); i++)
         fin.encolar(aux3.desencolar());
      
      for (i=0; i < aux4.numElems(); i++)
         fin.encolar(aux4.desencolar());

      
      tira = aux1.toString();
      System.out.println(tira);
   }
}

m0skit0:
Es un algoritmo perfecto para hacerlo con recursividad. La condición de parada sería que la longitud de la cadena sea 1 (que es cuando la inversión no tiene sentido). Cualquier duda vemos un poco de código.

thepunishercadiz:

--- Cita de: "m0skit0" ---Es un algoritmo perfecto para hacerlo con recursividad. La condición de parada sería que la longitud de la cadena sea 1 (que es cuando la inversión no tiene sentido). Cualquier duda vemos un poco de código.
--- Fin de la cita ---

Muchas gracias por tu respuesta moskito podríamos ver un poco de código? Estoy desesperao!!

m0skit0:
La clase ColaVectorImpl , ¿tiene más métodos aparte de encolar(), desencolar(), numElems() y estaVacio()? ¿Hay atributos accesibles (públicos)?

thepunishercadiz:

--- Cita de: "m0skit0" ---La clase ColaVectorImpl , ¿tiene más métodos aparte de encolar(), desencolar(), numElems() y estaVacio()? ¿Hay atributos accesibles (públicos)?
--- Fin de la cita ---

pues aparte tiene el constructor predeterminado y el sobrecargado con un número máximo de eltos. para el vector, un estaLLeno, primero() que devuelve sin extraer la cabeza de la cola y un iterador para ir recorriendo la estructura.

Gracias de nuevo!!

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa