Foro: Dudas y Consultas

TP5 consulta

TP5 consulta

de Usuario eliminado -
Número de respuestas: 1

Buenas profe, estaba haciendo el punto 7 (conversión de una expresión interfija a posfija) pero no se en que me equivoque  por que me devuelve datos basura. (tambien le agrege lo de parentesis )

void conversor(tcad &nuevo){
int i=0,j=0;
char car;
tcad aux;
tpila pil;
iniciar_pila(pil);
while(i<strlen(nuevo)){
if( nuevo[i]>='0' && nuevo[i]<='9' ){
aux[j]=nuevo[i];
}else{
if(pila_vacia(pil)==true){
agregar_pila(pil,nuevo[i]);
}else{
switch(nuevo[i]){
case '(': agregar_pila(pil,nuevo[i]);
break;
case ')': while(tope_pila(pil)!='('){
            car=tope_pila(pil);
             quitar_pila(pil);
            aux[j]=car;

//falta incrementar j para que pase a la siguiente posición e ir guardando los elementos de la pila
}
quitar_pila(pil);
break;
case '^':
case '*':
case '/':
case '+'://si no hay una acción por esas opciones no tiene sentido el según, además prioridad se encarga de ver cuál corresponde
case '-': while( prioridad(nuevo[i]) <= prioridad(tope_pila(pil)) ){
          car=tope_pila(pil);
          quitar_pila(pil);
          aux[j]=car;

//tienes un bucle falta cambiar la variable j de lo contrario siempre se queda en la primera posición
}
agregar_pila(pil,nuevo[i]);
break;
}
}
}
i++;
j++;//el incremento te conviene tenerlo donde lo requieres para guardar datos
}
cout<<aux<<endl;
}
int prioridad(char c){//con condicional doble y operadores lógicos esto se reduce
switch(c){
case '^': return 3;
break;
case '/':
case '*': return 2;
break;
case '+':
case '-': return 1;
break;
default: return 0;
}
}

En el punto 2_c, :

void iniciar_pila(tpila &pil){
pil.datos2[MAX-1]=-1; // como tendria que hacer para que sea el -1 del primer arreglo?
}

pil.datos2[MAX-1]++; //pasa a cero y si quieres que acceda al contenedor uno sólo debes incicar el contenedor

if(pil.datos2[MAX-1]<MAX) //estas en el primer contenedor

pil.datos1[pil.datos2[MAX-1]=valor //guardas en el primer contenedor en la posición de cima el nuevo valor

Y en el punto 4, queria saber si adapte bien las listas:

el "TDApilaListasS.hpp" es con inserción/eliminación por el final de la lista. ok

 el "TDApilaListasS_Ini.hpp" es con inserción/eliminación por el inicio de la lista.

//el tope pila es incorrecto muestra el último en lugar del primero

Saludos.

(Editado por Verónica Torres - envío original viernes, 22 de septiembre de 2023, 18:38)