[C con Clase] Notación infija a postfija

Davidson, Steven srd4121 en njit.edu
Dom Nov 4 01:34:21 CET 2012


Hola Eloísa,

2012/10/28 Elois@ Guevara <elo_mentemaestra en hotmail.com>:
> Hola buen día, he estado tratando de convertir una operación infija a
> posfija. Me dieron escritos los requisitos e hice mi algoritmo pero la
> expresión me quedaba con paréntesis abiertos. Buscando en su página encontré
> que mi algoritmo tenía un error en la evaluacion de la prioridad de
> operadores, lo cambié y ahora el programa no corre.
> Estoy segura que mis funciones de pila y lista doblemente enlazada(donde
> guardo la expresión postfija) son correctas, ya las he probado. Este es el
> código del algoritmo, muchas gracias de antemano.
>

Aparte de que deberías usar 'if/else' en lugar de realizar todas las
comprobaciones de 'if', el único posible problema, que veo, puede
estar en 'PrioridadOperador()'. Nos interesa que esta comprobación sea
verdadera cuando el operador que tenemos entre manos - en 'e' - es de
menor prioridad que el operador que está en la pila. Por eso sacamos
operadores de la pila, antes de meter el operador de la expresión
infija. Por ejemplo,

Expresión Infija : "a+b*c"
Procesamos: '*'

Expresión Posfija : "ab"
Pila : "+"

La comprobación:

PrioridadOperador(Tope(pila)) >= PrioridadOperador(e)

debería ser "falsa", porque '*' (multiplicación) tiene mayor prioridad
que '+' (suma). Revisa esta función.


Espero que esto te oriente.

Steven




Más información sobre la lista de distribución Cconclase