[C con Clase] Notación infija a postfija

Elois@ Guevara elo_mentemaestra en hotmail.com
Dom Oct 28 22:07:16 CET 2012


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.

Pila *pila = CrearPila();
Lista *posfija = CrearLista();
char e; // Caracter de la operacion infija
char* expresion="(a+b)/(c*d)";// Use esta porque conozco el resultado:
ab+cd*/

int i=0;
while(expresion[i])
{
e=expresion[i];
 i++;

if(isalpha(e)) // Si es un caracter (operando)
 {
Insertar(posfija, e); // Pasa a la expresion postfija
 }
 if(EsOperadorValido(e))// Es un operador
{
 *while(!EsVacia(pila) && (Tope(pila)!='(') &&
(PrioridadOperador(Tope(pila) >= PrioridadOperador(e)) // esto es lo que le
cambié*
 {
Insertar(posfija, Pop(pila));
 }
Push(e, pila);
 }
if(e=='(') // Es un (
 {
Push(e,pila); // Agregar a la pila
 }
if(e==')') // Es un )
 {
while(Tope(pila) != '(') // Sacar elemntos de la pila hasta encontrar un
parentesis que abre
 {
Insertar(posfija, Pop(pila));
 }
Pop(pila);
 }
}
 // Sacar los operadores restantes
 while(!EsVacia(pila))
 {
 Insertar(posfija, Pop(pila));
 }
 cout <<"Expresion en notacion postfija: ";
 Mostrar(posfija);
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20121028/2a4f257c/attachment.html>


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