Está en la página 1de 3

Algoritmo de infijo a postfijo

1. Insertar un parntesis izquierdo '(' en la pila.


2. Agregar un parntesis derecho ')' al final de la expresin infija.
3. En tanto la pila no est vaca, leer la expresin infija de izquierda a derecha y hacer los
siguiente:
Si el carcter actual en la expresin infija es un dgito, copiarlo en el siguiente
elemento de la expresin postfija.
Si el carcter actual en la expresin infija es un parntesis izquierdo, insertarlo en
la pila.
Si el carcter actual en la expresin infija es un operador
- Retirar los operadores de la parte superior de la pila, en tanto tengan
precedencia
igual o mayor que el operador actual, e insertarlos en la expresin postfija.
- Insertar el carcter actual de la expresin infija en la pila.
Si el carcter actual en la expresin infija es un parntesis derecho
- Retirar los operadores de la parte superior de la pila e insertarlos en la expresin
postfija hasta que en la parte superior de la pila quede un parntesis izquierdo.
- Retirar y descartar el parntesis izquierdo de la pila

Segn prioridad

+ adicin
- sustraccin
* multiplicacin
/ divisin
^ exponencial
% mdulo





POSTFIJAL( PREFIJA).
* Dada la expresin A+B se dice que est en notacin INFIJA, y su nombre se
debe a que el operador (+) esta entre los operadores (A y B).
* Dada la expresin AB+ se dice que est en notacin POSTFIJA, y su nombre
se debe a que el operador (+) esta despus entre los operadores (A y B)
* Dada la expresin +AB se dice que est en notacin PREFIJA, y su nombre se
debe a que el operador (+) esta antes de los operadores
(A y B).
La ventaja de usar expresiones en notacin polaca POSTFIJA PREFIJA radica
en que no son necesarios los parntesis para indicar orden de operacin, ya que
este queda establecido por ubicacin de los operadores con respecto a los
operandos.
Para convertir una expresin dada en notacin INFIJA a una notacin POSTFIJA
( PREFIJA), debern establecerse previamente ciertas condiciones:
--
operadores (Estan dados ordenadamente de mayor a menor segn su prioridad
de ejecusin):
^ (potencia)
* / (multiplicacin y divisin)
+ - (suma y resta)
-- Los operadores de mas alta prioridad se ejecutan primero
-- Si hubiera en una expresin dos o mas operadores de igual prioridad,
entonces se procesarn de izquierda a derecha.
-- Las subexpresiones parentizadas tendrn ms prioridad que cualquier
operador.

Ejemplo:

Se presenta 2 casos de traduccin de notacin INFIJA a POSTFIJA. El primero
de ellos es una expresin simple, mientras que el segundo presenta un mayor
grado de complejidad.

a) expresin infija :X+Z*W b)Expresin INFIJA:( X+Z )*W / T ^ Y - V

a)Expresin POSTFIJA: XZW*+ b) Expresin POSTFIJA: XZ + W * T Y ^ / V -

A) El primer operador que se procesa durante la traduccin de la expresin es
la multiplicacin, Se coloca el operador de tal manera de que los operandos
afectados por l lo precedan. Para el operador de suma se sigue el mismo
criterio, los dos operandos los preceden. En este caso el primer operando es X y
el segundo es ZW*
B) En el paso 1 se convierte la subexpresin parentizada por ser la de mas alta
prioridad. Luego se sigue con el operador de potencia, asi con los dems segn
su jerarqua. Como la multiplicacin y la divisin tienen igual prioridad se
procesa primero la multiplicacin por encontrarse ms a la izquierda en la
expresin. El operador de la resta es el ultimo que se mueve.

Algoritmo Conversin POSTFIJA.

CONV-POSTFIJA(EL,EPOS)
//Este algoritmo traduce una expresin infija EL a postfija EPOS, haciendo uso
de una pila PILA
//TOPE es una variable de tipo entero
TOPE = 0
Repetir mientras EL sea diferente de la cadena vacia.
Tomar el simbolo mas a la izquierda de EL, recortando luego la expresin.
Si simbolo es parentesis izquierdo entonces
{ poner simbolo en PILA}
TOPE = TOPE +1
PILA [TOPE] = simbolo
Si no
Si simbolo es parentesis Derecho entonces
Repetir mientras PILA [TOPE] <> parentesis Izquierdo
EPOS = PILA[TOPE]
TOPE = TOPE -1
fin -mientras
//Sacamos el parentesis izquierdo de PILA y no lo agregamos a EPOS.
TOPE = TOPE -1
Si no
Si simbolo es un operando entonces
agregar simbolo a EPOS
Si no {Es un operador}
Repetir mientras TOPE >0 y prioridad del operador <= prioridad del operador
de la
cima de la PILA
EPOS=EPOS + PILA[TOPE]
TOPE = TOPE - 1
Fin-mientras
TOPE =TOPE +1
PILA[TOPE]=Simbolo
fin si
finsi
finsi
fin-mientras
Repetir mientras TOPE > 0
EPOS=EPOS + PILA[TOPE]
TOPE = TOPE -1
Fin mientras
Escribir EPOS.

También podría gustarte