Notacion Infija-posfija Moo Mex

  • Uploaded by: jazzman89
  • 0
  • 0
  • July 2020
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View Notacion Infija-posfija Moo Mex as PDF for free.

More details

  • Words: 1,075
  • Pages: 12
Instituto Tecnológico Superior de Escarcega Carrera: Ingeniería en sistemas Computacionales. Prof.: Ing. francisco salvador Ballina. Tema: algoritmo de conversión de notación infija-posfija. integrantes: Isai Cuj Catzin. Rolando Lopez Tzab. Cindy Camara martinez. Ramiro A. Magaña Rodriguez.

Conversión de notación infija-posfija • Tópicos selectos de programación

EXPRESIONES • Una expresión aritmética: – Conjunto de operadores, variables y paréntesis. Ejemplo: • A+B • Esta forma de escribir las expresiones: NOTACION INFIJA • El operador siempre va en medio de los operandos

• En una expresión, las operaciones se “ejecutan” en un cierto orden – A+B*C no es igual que (A+B)*C – Cada operador tiene su nivel de precedencia, recordemos: • • • •

Paréntesis : () Potencia : ^ Multiplicación/división: Suma/Resta : +,-*

Mayor prioridad *,/ Menor Prioridad

A+B*C

NOTACIONES 

Agrupar como establece la precedencia 

• La notación infija es la mas popular • No es la única forma, hay dos mas



• +AB Aquí el operador va antes que los operandos

• No son nada difíciles, pero – Siempre tener en cuenta la precedencia de los operadores

• Ejemplo. Pasar a postfija las siguientes expresiones:



 

(A+B)*

(A+B)*C

Convertir operación por operación La de mayor precedencia primero 



(AB+)*C

La que le sigue en precedencia 



A(BC*)+

Remover Paréntesis C  ABC*+ Agrupar como establece la precedencia 



A+(BC*)

La que le sigue en precedencia 



Ya no se necesitan paréntesis En postfija, el orden de los operadores es el verdadero orden de ejecución

La de mayor precedencia primero 

– NOTACION POSFIJA(POLACA INVERSA) • AB+ Aquí el operador va después que los operandos

Convertir operación por operación 

– NOTACION PREFIJA(POLACA)

A+(B*C)

(AB+)C*

Remover Paréntesis

EVALUACION DE EXPRESIONES POSFIJAS • Dadas – – – – –

AB+C* ABC*+ Evaluelas, cuando A = 3, B = 4 y C = 5 La primera, resultado : 35 La segunda, resultado: 23

• Que algoritmo siguió para evaluar estas expresiones? ABC*+ A20+ AB+C* 7C* A+B -> 7 7*C -> 35

B*C -> 20 -> 20+A 23

EVALUACION: ALGORITMO Podría ser un una • Con lo anterior, ya tenemos una idea de pilaque hacer

– Deberíamos poder “recordar” c/operando de la2 veces Pop expresion – Si encontramos un operador • Los dos últimos operandos recordados son los usados y del Push “olvidados” resultado en la pila • El resultado de la operación, debe ser también “recordado”

– Así, hastaABC*+ C * B +A que la expresión termine C B C*B A

EN PSEUDOCODIGO Pila s; PilaVacia(s); while(no hayamos revisados toda la expresion) { simbolo = siguiente elemento if(simbolo es un operando) Push(s,simbolo); else{ operando1 = Pop(s); operando2 = Pop(s); valor = resultado de operación simbolo entre operando1 y operando2 Push(s,valor); } } return(Pop(s));

CONVERSION DE INFIJA A POSFIJA El operador de mayor precedencia es el primero en aparecer en la expresión

A es un operando, es añadido directamente a la nueva expresión en postfija

A+B*CD

A B C*+ D -

El operador de mayor precedencia en la expresión será el primero en aparecer en la conversión

con el continuar. de Pero aun no podemos *Comparado Es un operador. Si mayor se + es un operador, Aquí terminamos de revisar prioridad hastaelahora(el Seguimos comparando el – con el *), de compara con ultimo pero, hasta lo que la expresión, símbolo por el prioridad – no tiene mayor hastamayor ahora, el +. recordado, el * tiene símbolo. vamos revisando, no esque Como el – no prioridad. tiene mayor prioridad mayor prioridad. Pero Ensi lapodemos pila, quedan el prioridad, Ahora decir,aun elde +, elmayor + ya puede ser añadido aque la no sabemos si tiene operadores. el *mejor, es elComo operador de mas mayor guardarlo expresion. ya no queda en la Todos seprioridad sacan y se añaden “la” mayor prioridad pila, a la nueva expresión de todos aun. Mejor Podemos añadir el *ahora, a la el El – es definitivamente hasta Así termina la conversión expresion, y denueva “mayor prioridad”, debemos guardarlo “olvidarnos” recordarlo de el

ABC*+D-

* + -

CONVERSION: ALGORITMO • •

Cada símbolo de la expresión es revisado Si el símbolo es un operando, – Se añade a la expresión



Si el símbolo es un operador – El símbolo es evaluado con respecto a su prioridad – Si tiene mayor prioridad que el ultimo operador almacenado • Aun no se puede decir nada, y se recuerda, es decir, se almacena en un pila

– Si tiene menor prioridad que el ultimo operador almacenado • Quiere decir, que el ultimo operador almacenado es el de mayor prioridad sin lugar a dudas • El ultimo operador almacenado, se saca y se añade a la nueva expresión • Esto sigue hasta que el operador que estamos revisando sea el de mayor prioridad de todos los almacenados en la pila



Una vez revisados todos los símbolos de la expresión – Si hay algo almacenado en la pila, se saca y se añade a la nueva expresión

EN PSEUDOCODIGO Pila s; PilaVacia(&s); while(no termine la expresion en infija) { simbolo = siguiente carácter de entrada; if(simbolo es un operando) añadir simbolo a la nueva expresion posfija else{ while(simbolo tenga menor o igual precedencia que el tope de la pila) { simb_tope = pop(s); añadir simb_tope a la nueva exp. } push(s,simbolo) } } /*le da salida a los operadores restantes*/ while(!EstaVacia(s)){ simb_tope = pop(s); añadir simb_tope a la nueva exp. posfija }

Y CON PARENTESIS • Lo anterior, es valido para conversión de expresiones sin paréntesis • Para resolver este problema, podemos seguir las siguientes reglas: – Los paréntesis izquierdos ( • Siempre van a ser añadidos a la pila, pase lo que pase

– Los paréntesis derechos ) • Significa que un ambiente de () ha sido terminado, • Todos los operadores de la pila, se sacan, hasta encontrar un (

CON PARENTESIS: ALGORITMO Pila s; PilaVacia(s); while(no termine la expresion en infija){ simbolo = siguiente carácter de entrada; if(simbolo es un operando) añadir simbolo a la nueva expresion posfija else{ if(simbolo == ‘)’){ while(TRUE){ simb_tope = pop(s); if (simb_tope == ‘)’ || EstaVacia(s)) break; añadir simb_tope a la nueva exp. } } else if(simbolo != ‘(‘){ while(simbolo tenga menor o igual precedencia que el tope de la pila) simb_tope = pop(s); añadir simb_tope a la nueva exp. } } push(s,simbolo) } } /*le da salida a los operadores restantes*/ while(!EstaVacia(s)){ simb_tope = pop(s); añadir simb_tope a la nueva exp. posfija }

Related Documents

Notacion
November 2019 12
Moo
November 2019 9
?moo
November 2019 65
Mex
October 2019 17

More Documents from ""

July 2020 4
Romanos
July 2020 14