Академический Документы
Профессиональный Документы
Культура Документы
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 : () Mayor prioridad
• Potencia : ^
• Multiplicación/división: *,/
• Suma/Resta : +,-* Menor Prioridad
A+B*C
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
A es un
El operador de
mayor
operando, es precedencia es
POSFIJA
añadido
directamente a la
el primero en
aparecer en la
nueva expresión expresión
en postfija
El operador de mayor
precedencia en la expresión
A+B*C- será el primero en aparecer
ABC*+D-
D en la conversión
*Comparado
Es+ un
Pero
es aun
un con el continuar.
operador.
no podemos
operador, de
Si mayor
se
Aquí
prioridad terminamos
hastaelahora(elde revisar
el – con el *),
comparala
con
Seguimos comparando
pero, hasta
expresión, lo ultimo
que
símbolo
de
por
el prioridad
mayor
recordado, – no tiene hastamayor
el ahora, el +.
* tiene
vamos revisando,
símbolo.
Como el – no prioridad. no esque
tiene mayor prioridad
mayor prioridad. Pero
A B C*+ D elelde
Ahora
no
Ensi lapodemos
+, elmayor
+ ya
sabemos
pila,
puede
quedan
decir,aun
prioridad,
ser añadido
si
operadores. tiene
aque
la *
el *mejor,
es elComo guardarlo
operador de mas
mayor
-
expresion.
Todos
“la” mayor
ya no queda
seprioridad
sacan y
prioridad
pila,
se
en la
añaden +
-
de
El
a
todos
Podemos
– es
la nueva
aun.
añadir
definitivamente
expresión
Mejor
el *ahora,
hasta a la el
Así
denueva
termina
guardarlo
“mayor
la
expresion,
prioridad”,
conversión
y
debemos
“olvidarnos”
recordarlo de el
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
}