UTNianos

Versión completa: [Aporte] Final 19/02 Algoritmos
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Buenas, ayer rendi este final y por suerte pude aprobarlo con 8, paso la imagen y subo mi resolucion.

Final Algos

Resolución:

Spoiler: Mostrar


1) #Define N = 20; (Este numero era opcional, podias poner el que quieras)

char Vector[N];

struct NodoCola {
char Letra;
NodoCola* sgte;
}

NodoCola* frente = null;
NodoCola* fin = null;

Precondiciones: - No se pueden ingresar mas de N valores por cada ejecucion del programa.
- El " " simboliza el espacio
- En la funcion esPalindromo, como se llenan al mismo tiempo con la misma cantidad de elementos el vector y la cola, con que se vacie uno de los dos alcanza para saber que ambos se vaciaron.



2) char pop(char &Vector[N]){
char aux = 'a'; // Siempre que se inicie la funcion pop es porque hay elementos en la pila, asi que siempre devuelve un char de la pila
for(int i =0;i<N;i++){
if(Vector[i] != NULL){
aux = Vector[i];
Vector[i] = NULL;
return aux;
}
}
return aux;
}

void push(char &Vector[N], char x){
if(x != " "){ // Esto simboliza el espacio entre palabras, el cual lo saco pq cuando comparemos palabras no lo necesitamos
for(int i =0; i<N ; i++){
if(Vector[i] != NULL){
Vector[i-1] = x;
return;
}
Vector[N-1] = x; // Si no hay nada en la pila lo pongo en la última posición
}
}


3) Encolar y Desencolar son las definicioens textuales del machete oficial de Oscar Bruno, asi que no hace falta copiarlas. (Los parametros de esta funcion se pasan por referencia)

4) void AgregarCaracteres(char &Vector[N] , NodoCola* &frente, NodoCola* &fin){
// Yo puse que se corte el flujo de entrada cuando se ingresa un '.' , Esto era a eleccion de cada uno en el final

char c = getC();
while(c != '.'){
encolar(frente,fin,c);
push(Vector,c);
c = getC();
}
}

5) bool esPalindromo(char &Vector[N], NodoCola* &frente, NodoCola* &fin){
AgregarCaracteres(Vector, frente,fin);

while(frente != NULL){
if(desencolar(frente,fin) != pop(Vector)){
return false; // Cuando solo uno de los elementos sea distinto, ya es falso.
}
}
return true; // Si nunca salio por el If, entonces todas las letras son iguales y es palindroma la palabra u oracion.
}

6) Invocaciones:

AgregarCaracteres(VectorDePalabras,unFrente, unFin);

return esPalindromo(VectorDePalabras, unFrente, unFin);

URLs de referencia