Foros del Web » Programación para mayores de 30 ;) » Java »

Problema con un programa en java

Estas en el tema de Problema con un programa en java en el foro de Java en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 20/10/2008, 04:36
 
Fecha de Ingreso: octubre-2007
Mensajes: 7
Antigüedad: 16 años, 6 meses
Puntos: 0
Problema con un programa en java

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. Habría alguna manera de hacerlo recursivo?

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<char[]> cargacola (){

ColaVectorImpl <char[]> res = new ColaVectorImpl <char[]> ();

//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<char[]> inviertecola (ColaVectorImpl <char[]> c) {

ColaVectorImpl <char[]> invertida = new ColaVectorImpl <char[]>();
PilaVectorImpl <char[]> temp = new PilaVectorImpl <char[]> ();
int i = 0;

if (c.estaVacio())
return c;

if (c.numElems() == 1)
return c;


//para invertir la cola la meto en una pila y posteriormente la devuelvo
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 <char[]> c1;

int i = 0;
String tira;


c1 = cargacola();

tira = c1.toString();
System.out.println(tira);

ColaVectorImpl <char[]> aux1 = new ColaVectorImpl <char[]> ();
ColaVectorImpl <char[]> aux2 = new ColaVectorImpl <char[]> ();
ColaVectorImpl <char[]> aux3 = new ColaVectorImpl <char[]> ();
ColaVectorImpl <char[]> aux4 = new ColaVectorImpl <char[]> ();
ColaVectorImpl <char[]> fin = new ColaVectorImpl <char[]> ();

//Si el núm. de elementos de la cola es par, creo dos trozos iguales
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 {

//Si no, creo una pate con un carácter menos que la otra

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);
}
}
  #2 (permalink)  
Antiguo 20/10/2008, 16:54
 
Fecha de Ingreso: septiembre-2008
Ubicación: Córdoba
Mensajes: 67
Antigüedad: 15 años, 7 meses
Puntos: 0
Respuesta: Problema con un programa en java

La mecánica de tu algoritmo es muy similar al algoritmo de ordenación Merge. Es un algoritmo muy conocido, te puedes guíar de él.
Saludos...
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:15.