/* * Aplicacion para evaluar expresion y convertir a postfija */ // Clase PosApp tiene los metodos para ingresar, evaluar y mostrar // una expresión matematica y convertir a postfija. package postfija; /** * * @author Kelly Zarco */ import java.util.Scanner; public class PosApp { Pila cara; Pila aux; char exp[]; int c;int j=0; Scanner ingreso; public PosApp() { c=10; cara= new Pila(); aux=new Pila(); exp= new char [c]; ingreso= new Scanner(System.in); } public void Generar() { String exp=" "; char op='S'; Scanner ingreso= new Scanner(System.in); while (op!='N' && op!='n'){ System.out.println("Ingrese una expresion: "); exp= ingreso.next(); postfija(exp); System.out.println("¿Desea Continuar? S/N"); String opcion= ingreso.next(); op = opcion.isEmpty()? 's': opcion.charAt(0); }} public void postfija(String l) { int i=0; char x=' '; while (i< l.length())//analiza caracter por caracter { x= l.charAt(i); aux.insertar(x); i++; } retornar(aux,cara); Procesar(cara); } public void retornar(Pila origen, Pila destino){ Nodo x; while(!origen.pilaVacia()){ x=origen.quitar(); destino.insertar(x); } } //empieza el metodo para evaluar caracter por caracter public void Procesar(Pila P){ char y=' ';Nodo x;char e=' '; while(!cara.pilaVacia()){ x=cara.quitar(); e=x.getDato(); if ((e!='*')&&(e!='^') &&(e!='/')&&(e!='+')&&(e!='-')&&(e!='(')&&(e!=')')) //1 { exp[j]=x.getDato(); j++; } else//2 { if(aux.pilaVacia())//4 { aux.insertar(x.getDato()); } else { if(x.getDato()=='(')//3 { aux.insertar(x.getDato()); } else { if(x.getDato()==')')//2 { CicloQuitar( aux); } else { Nodo z=aux.quitar(); y=z.getDato(); if(y=='('){ aux.insertar(y); aux.insertar(x.getDato()); } else CompararPrioridad(y,x.getDato()); }//2 } //3 }//4 }//1 } while(!aux.pilaVacia()){ Nodo n=aux.quitar(); exp[j]=n.getDato(); j=j+1; } } public void CicloQuitar(Pila P) { Nodo x; x=P.quitar(); while(x.getDato()!='(') { exp[j]=x.getDato(); j++; x=P.quitar(); } } public void CompararPrioridad (char x, char y) { if(x<=y) { exp[j]=y; j++; aux.insertar(x); } else { exp[j]=x; aux.insertar(y); j++;} } //termina el metodo para evaluar caracter por caracter public void Imprimir () { int i; for(i=0; i<exp.length; i++){ System.out.println("La expresion es: "+exp[i]); } } public void menu() { System.out.println("-------------------MENU-------------------"); System.out.println("1- ingresar una cadena de caracteres"); System.out.println("2- imprimir"); System.out.println("3- salir"); } public void Opciones() { int op=9; do { switch (op) { case 1: Generar(); break; case 2: Imprimir(); break; case 3: break; } menu(); System.out.println("Ingrese una opcion: "); op=ingreso.nextInt(); }while(op!=3); } }// fin de la clase