Foro: Dudas y Consultas

tp5_p7_posfija

tp5_p7_posfija

de Usuario eliminado -
Número de respuestas: 1

Profe nose cual es el error en mi codigo, me arroja basura de memoria :(

#include <iostream>
#include <stdio.h>
#include <string.h>
//posfija

using namespace std;
#include "pilas_listas_simples.hpp"

typedef char tcad[30];
int prioridad(char n);
void posfija(tcad cadena,tcad &pf);
main(){
tcad cadena;
tcad pf;
cout<<"ingrese expresion "<<endl;
fflush(stdin);
gets(cadena);
posfija(cadena,pf);
cout<< " expresion interfija : " << cadena<<endl;
cout<<" expresion posfija : "<< pf <<endl;
}
void posfija(tcad cadena,tcad &pf){
int i=0,j=-1;// i indece de la interfija, j indice de la posfija
ppila p;
iniciar_pila(p);
int tope,entrante;//para los signos
while(i<strlen(cadena)){
if(cadena[i]>='1' && cadena[i]>='9'){ // el símbolo de menor  está mal if(cadena[i]>='1' && cadena[i]<='9'){
j++;
pf[j]=cadena[i];
}
else{
if(pila_vacia(p)){
agregar_pila(p,cadena[i]);
}
else{
tope=prioridad(tope_pila(p));//prioridad del tope pila/cima
entrante=prioridad(cadena[i]);//prioridad del signo entrante
if(entrante>tope)
agregar_pila(p,cadena[i]);
else{
while(entrante<tope && pila_vacia(p)!=true){
j++;//incrementa el indice de pf para agg
pf[j]=quitar_pila(p);//asignamos el caracter a la cade pf
tope=prioridad(quitar_pila(p));//sacamos la prioridad de la nueva cima
}
if(pila_vacia(p))// si la pila está vacia o no igual agrega, entonces no hace falta el condicional, directamente te conviene llamar el agragar
agregar_pila(p,cadena[i]);
else
agregar_pila(p,cadena[i]);
}
}
}
i++;
}
while(pila_vacia(p)!=true){
j++;
pf[j]=quitar_pila(p);
}
pf[j]='\0';//como tu j se incrementa antes de guardar si haces esto estarías sobre escribiendo el último caracter, aquí deberías incrementar una vez mas j o bien colocar j+1
}

int prioridad(char n){
if(n=='^')
return 3;
else
if(n=='*' || n=='/')
return 2;
else
return 1;
}

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

En respuesta a Usuario eliminado

Re: tp5_p7_posfija

de Verónica Torres -
Hola Javier, Por lo que puedo observar del código que mandaste tienes 3 cosas a considerar, la primera es la que te genera el error más grande