26022321-Convertir-de-Infijo-a-Posfijo
-
Upload
alethia-zalapa -
Category
Documents
-
view
223 -
download
1
Transcript of 26022321-Convertir-de-Infijo-a-Posfijo
-
8/7/2019 26022321-Convertir-de-Infijo-a-Posfijo
1/10
Una manera de perder el tiempo
Infijo a Posfijo
leave a comment
Bueno, ya despus del programa de pilas que puse hace poco (es el articulo pasado), sigue lo pasar una expresin infija a posfija (luego pongo la de posfija a infija) que tambin se hacemediante pilas, pero en esta se hace manualmente (es decir, lpiz y papel). Aqu estn los paso(algoritmo) que hay que seguir:
ALGORITMO: POLACA(Q,P). Suponemos que Q es una expresin aritmtica escrita ennotacin infija. Este algoritmo encuentra su expresin postfija P.
1.- Meter ( en PILA y aadir ) al final de Q.2.- Examinar Q de izquierda a derecha y repetir los pasos 3 a 6 para cada elemento de Q hastaque la PILA est vaca.3.- Si se encuentra PARNTESIS IZQ., meterlo en PILA.4.- Si se encuentra un OPERADOR entonces:(a) Repetidamente sacar de PILA y aadir a P cada operador (de la cima de PILA) que tenga lmisma precedencia o mayor que el operador.(b) Aadir OPERADOR a PILA.[FIN de condicional]5.- Si se encuentra un PARNTESIS DER., entonces:(a) Repetidamente sacar de PILA y aadir a P cada operador (de la cima de PILA) hasta que sencuentre un parntesis izquierdo.(b) Eliminar el PARNTESIS IZQ.(no aadir el parntesis izquierdo a P).[Fin de condicional]6.- Si se encuentra un OPERANDO, aadirlo a P.
[Fin del Bucle]7.- Salir.
Los operadores siguen la siguiente jerarqua (El de arriba es el que tiene mayor jerarqua hastabajo el que tiene la menor):^* /+ -(
Ejemplo:
http://linkcode.wordpress.com/2008/04/14/infijo-a-posfijo/http://linkcode.wordpress.com/2008/04/14/infijo-a-posfijo/#commentshttp://linkcode.wordpress.com/2008/04/14/infijo-a-posfijo/#commentshttp://linkcode.wordpress.com/2008/04/14/infijo-a-posfijo/ -
8/7/2019 26022321-Convertir-de-Infijo-a-Posfijo
2/10
A+(X/Y)*B^C
Este es un ejemplo demasiado sencillo, pero explica los pasos a seguir, y como se puede ver eultima fila de la tabla esta el resultado.
class converpostultima {
public static void main (String args[])
{
String expr = new String("");
String exprpost = new String("");
char ch;
int max;
System.out.print("Dame la Expresion en Infijo: ");
expr =Leer.dato();
max=expr.length();
operapilaschar obj1 = new operapilaschar(max);
System.out.println();System.out.println();
System.out.println("La Expresion en Postfijo es :");
obj1.push('('); // inserta '(' a la PILA
expr+=')'; // inserta ')' al final de Q
http://linkcode.files.wordpress.com/2008/04/cuadro.png -
8/7/2019 26022321-Convertir-de-Infijo-a-Posfijo
3/10
for (int i=0;i=precedencia(ch) && obj1.pila[obj1.tope]!='('))
{
obj1.pop();
exprpost+=obj1.dret;
}
obj1.push(ch);
break;
case ')': while (obj1.pila[obj1.tope] != '(')
{
obj1.pop();exprpost+=obj1.dret;
}
obj1.pop();
break;
default : exprpost+=ch;
}
}
while (!(obj1.pila_Vacia(obj1.tope)))
{
obj1.pop();
if (obj1.dret!= '(')
exprpost+=obj1.dret;
}
System.out.println(exprpost);
}
-
8/7/2019 26022321-Convertir-de-Infijo-a-Posfijo
4/10
public static int precedencia(char ch)
{
int aux = 0;
switch (ch)
{
case '^' : aux = 4;
break;
case '*' : case '/' : aux = 3;
break;case '+' : case '-' : aux = 2;
break;
case '(' : aux = 1;
break;
}
return aux;
}
}
class operapilaschar
{
-
8/7/2019 26022321-Convertir-de-Infijo-a-Posfijo
5/10
public static char dret;
public static int max;
public static char pila[];
public static int tope = -1;
public operapilaschar()
{
max=20;
pila=new char [max];
}
public operapilaschar(int n)
{
max=n-1;
pila = new char [max];
-
8/7/2019 26022321-Convertir-de-Infijo-a-Posfijo
6/10
}
public static boolean pila_Llena(int tope,int max)
{
boolean llena;
if (tope==max)
llena=true;
else
llena=false;
return llena;
}
public static boolean pila_Vacia(int tope)
{
boolean vacia;
-
8/7/2019 26022321-Convertir-de-Infijo-a-Posfijo
7/10
if (tope == -1)
vacia=true;
else
vacia=false;
return vacia;
}
public static void push(char dato)
{
if(pila_Llena(tope,max))
System.out.println("!Cuidado!, Desbordamiento!!!!!");
else
{
tope++;
-
8/7/2019 26022321-Convertir-de-Infijo-a-Posfijo
8/10
pila[tope]=dato;// pone el nuevo dato en la pila
}
}
public static void pop()
{
if (pila_Vacia(tope))
System.out.println("!Cuidado!, Subdesbordamiento!!!!!");
else {
dret=pila[tope];
tope--;
}// actualiza tope y se elimina elemento en el tope
}
public static boolean compara(int dret,int ch)
-
8/7/2019 26022321-Convertir-de-Infijo-a-Posfijo
9/10
{
if (dret=='(' && ch==')' || dret=='{' && ch=='}' ||dret=='[' && ch==']')
return true;
else
return false;
}
public static void estado()
{
int i;
System.out.println(" El estado de la pila es : ");
System.out.println(" --------------------------");
for(i=0;i