/* * Aplicacion para evaluar expresion y convertir a postfija */ // Clase

Anuncio
/*
* 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
Descargar