import javax.swing.JOptionPane;
/** * * @author user Estefanny_G. */
public class Prueba_InfixPostfix {
public static String LeerDato()
{
String sdato;
sdato=JOptionPane.showInputDialog(null,"Ingrese la expresion :","(x+z)*w/t^y-v");
return sdato;
}
public static void main(String[] args) {
Conversion e;
String dato;
dato=LeerDato();
e=new Conversion(dato);
e.infixToPostfix();
JOptionPane.showMessageDialog(null,"Expresion infija = "+e.infix()+"\nExpresion posfija ="+e.postfix(),"Salida de datos",JOptionPane.DEFAULT_OPTION);
}
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
package prueba_infixpostfix;
import javax.swing.JOptionPane;
public class Pila {
private Object []pila;
private int tope;
private int max;
public Pila(){
max=50;
pila=new Object [max];
tope=0;
//this(101);
}
public Pila(int max){
tope=0;//quitar
this.max=max;
pila=new Object[max+1];
}
public void meterPila(Object item){
//PONER tope++;
try{
pila[++tope]=item;
}catch(ArrayIndexOutOfBoundsException s){tope--;s.getMessage();}
}
public void SacarPila(){
if(PilaVacia())JOptionPane.showMessageDialog(null,"La pila esta llena");
else{
pila[tope]=null;
tope--;
}
}
public Object top(){
if(PilaVacia()){
JOptionPane.showMessageDialog(null,"La pila esta vacia");
return null;
}
else
return pila[tope];
//return null;
}
public boolean PilaLlena()
{
if(tope+1==max)
{
return true;
}
else
{
return false;
}
}
public boolean PilaVacia(){return tope==0;}
public int size(){
return tope;
}
public void VaciarPila(){tope=0;}
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
package prueba_infixpostfix;
public class Conversion {
private String infix,postfix;
public Conversion(String infix) {
this.infix = infix.trim().toLowerCase();
}
public void infixToPostfix(){
char ch,topSymbol;
Pila miPila=new Pila();
postfix="";
for(int infixIndex=0;infixIndex<infix.length();infixIndex++){
ch=infix.charAt(infixIndex);//convierte la cadena de caracteres a caracter
if(ch>='a'&&ch<='z'){//si el caracter en ciclo es igual a cualquier letra del abecedario
postfix+=ch;//guarda el caracter en la cadena
}
if(ch=='+'||ch=='-'||ch=='*'||ch=='/'||ch=='('||ch==')'||ch=='^'){//si el caracter es un operador
if(miPila.size()>0){//Tope debe ser mayor a cero
while(precedence(((Character)miPila.top()).charValue(),ch)==true){//Mientras evaluar la jerarquia
if(((Character)miPila.top()).charValue()!='('){//Si encuentra un parentesis sacar los datos de la pila
postfix+=((Character)miPila.top()).charValue();//agrega caracteres de la pila a la cadena
}
miPila.SacarPila();//sacando datos d ela pila
if(miPila.PilaVacia()){break;};//si la pila ya se vacio romper ciclo
}
}
if(ch!=')'){//Si encuentra un parentesis derecho
miPila.meterPila(new Character(ch));//meter dato a la pila
}
else{//Si no, si el caracter no sea ")"va a sacar los datos de la pila
char c;//caracter auxiliar
do{//hacer
c=((Character)miPila.top()).charValue();//evaluacion d ecaracteres en la pila
if(c!='(')//si el caracter auxiliar NO es (
postfix+=c;//agregar caracter a la cadena
miPila.SacarPila();//sacar dato d ela pila
}while(c!='(');//mientras el caracter auxiliar sea diferente de (
}
}
}
while(miPila.size()>0){//Si no existen parentesis en la expresion sacara los datos de la pila
if(((Character)miPila.top()).charValue()!='(')
postfix+=((Character)miPila.top()).charValue();
miPila.SacarPila();
}
}
public String postfix(){//Imprime expresion posfija
return postfix;
}
public String infix(){//Imprime Expresion infija
return infix;
}
private boolean precedence(char topsymbols,char charac){// Evalua los operadores
boolean resp=false;
if((charac=='*'||charac=='/'||charac=='+'||charac=='-')&&(topsymbols=='^')){
resp= true;
}
else{
if((charac=='+'||charac=='-')&&(topsymbols=='*'||topsymbols=='/')){
resp= true;
}
else{
if((topsymbols=='^')&&(charac=='^')){
resp= true;
}
else{
if((topsymbols=='*'||topsymbols=='/')&&(charac=='*'||charac=='/')){
resp= true;
}
else{
if((topsymbols=='+'||topsymbols=='-')&&(charac=='+'||charac=='-')){
resp=true;
}
}
}
}
}
return resp;
}
}
No hay comentarios:
Publicar un comentario