Foro de elhacker.net

Programación => Java => Mensaje iniciado por: BTO911 en 23 Octubre 2013, 23:04 pm



Título: evaluacion postfija
Publicado por: BTO911 en 23 Octubre 2013, 23:04 pm
hola a todos se que es algo facil  :-X pero no consigo sacarlo  :-\ espero y me puedan ayudar mi codigo
para evaluar una expresion en postfijo

Código
  1. public static void main(String arg[]){
  2. String expres = "362*4/+";  //Resultado debe ser 6
  3.        System.out.println("Evaluacion de una expresion en posfijo");
  4.        System.out.println("\n Exp posfija:"+expres+"\n");
  5.        //convertir array expresion
  6.        char[]expresiion = expre.toCharArray();
  7.        //Pila de salida y pila de entrada
  8.        char simboloEntrada,op1,op2,valor=0;
  9.        MyFirstStack pilita = new MyFirstStack(expresiion.length);
  10.  
  11.  
  12.  
  13.        for(int a=0;a<expresiion.length;a++){
  14.            simboloEntrada = expre.charAt(a);
  15.            if(simboloEntrada != '+' && simboloEntrada != '-' && simboloEntrada != '*' && simboloEntrada != '/'){
  16.                pilita.push(simboloEntrada);
  17.            }
  18.            else {
  19.  
  20.                op1= pilita.pop();
  21.                op2= pilita.pop();
  22.                valor=(char)evaluate(simboloEntrada,op1,op2);
  23.  
  24.                pilita.push(valor);
  25.            }
  26.        }
  27.  
  28.  
  29.        System.out.print("El valor:"+valor);
  30.  
  31.    }
  32. static int evaluate (char cad, char a, char b ){
  33.  
  34.    int op1=a-48;
  35.    int op2=b-48;
  36.  
  37.    if(cad== '-')
  38.        return op1-op2;
  39.  
  40.    if(cad== '+')
  41.        return op1+op2;
  42.  
  43.    if(cad== '/')
  44.        return op1/op2;
  45.  
  46.    if(cad== '*')
  47.        return op1*op2;
  48.  
  49.  
  50.    return 0;
  51.    }
  52. }

Muchas gracias.


Título: Re: evaluacion postfija
Publicado por: egyware en 29 Octubre 2013, 19:37 pm
¿Intentaste intercambiar el orden de las instrucciones?

Código
  1. op1 = pilita.pop();
  2. op2 = pilita.pop();
  3.  

Creo que por ahí anda el error.

Suponte tu que tienes esto en tu pila.
12/4
[12][4][/]

Luego haces
operator = pop() devuelve el '/'
op1 = pop() devuelve '4'
op2 = pop() devuelve '12'

Finalmente
resultado = op1 / op2 ( osea 4 / 12)


Saludos!