Está en la página 1de 2

REPASO PARCIAL 4 LÓGICA

2. posfijo a PREFIJO

posToPre(hilera S)
stack pilaPos, pilaTra, pilaPre
hilera x,y
x = S.siguienteToken()
while(x != null)do
pilaPos.apilar(x)
x = S.siguienteToken()
end(while)
while(no pilaPos.esVacia())do
x = pilaPos.desapilar()
casos de x
in operador:
pilaTra.apilar(x)
else:
pilaPre.apilar(x)
if(!pilaPos.esVacia())then
x = pilaPos.desapilar()
if(no x in operadores)then
pilaPre.apilar(x)
y = pilaTra.desapilar()
pilaPre.apilar(y)
Else
pilaTra.apilar(x)
end(if)
end(if)
fin(casos)
end(while)
while(!pilaTra.esVacia())do
y = pilaTra.desapilar()
pilaPre.apilar(y)
end(while)
while(!pilaPre.esVacia())do
y = pilaPre.desapilar()
escriba(y)
end(while)
end(posToPre)

4. Elabore un algoritmo para convertir una expresión prefijo a INFIJO

preToIn(hilera S)
stack pila = new Stack()
hilera x , y
x = S.siguienteToken()
while(x != null)do
casos de x
in operador:
pila.apilar(x)
else:
escribir(x)
y = pila.desapilar()
escribir(y)
fin(casos)
x = S.siguienteToken()
fin(while)
fin(preToIn)

6. Elabore un algoritmo para evaluar una expresión en infijo.

float evaInfi(hilera S)
stack pila1,pila2
hilera x, opdor
int op1, op2
boolean bandera = true
x = S.siguienteToken()
while(x != null)
if(x in operadores)then
pila2.apilar(x)
else
pila1.apilar(x)
x = S.siguienteToken()
if(!pila2.esVacia()) then
while(bandera && x != null)do
if(x in operadores)then
if(pfp(x) >= pfp(pila2.cima()))
pila2.apilar(x)
Else
bandera = false
end(if)
Else
pila1.apilar(x)
end(if)
x = S.siguienteToken()
end(while)
while(!pila2.esVacia())do
op1 = pila1.desapilar()
op2 = pila1.desapilar()
opdor = pila2.desapilar()
casos de opdor:
"^": res = op2 ^ op1
"*": res = op2 * op1
"/": res = op2 / op1
"%": res = op2 % op1
"-": res = op2 - op1
"+": res = op2 + op1
fin(casos)
pila1.apilar(res)
end(while)
pila2.apilar(x)
end(if)
end(if)
x = S.siguienteToken()
end(while)
return pila1.cima()
fin(evaInfi)

También podría gustarte