Algoritmo de Infijo A Postfijo

Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
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