1
« en: Lunes 20 de Octubre de 2008, 12:10 »
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);
}
}