RafaelFascio

TP2 Ej5

May 24th, 2021 (edited)
122
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.81 KB | None | 0 0
  1. /*Escribir un programa que permita calcular el valor de una expresión matemática (cadena ingresada por el
  2. usuario) escrita en notación posfija . Por ejemplo: 75+ da como resultado 12. La notación posfija tiene la
  3. ventaja que el orden en que se realizan las operaciones está completamente determinada por las
  4. posiciones de los operadores y los operandos, nunca es necesario el uso de paréntesis. El mecanismo para
  5. resolver una expresión en notación posfija necesita de una pila en la que se almacenan los operandos
  6. (números) de la misma. Entonces, se recorre la cadena de izquierda a derecha analizando cada símbolo de
  7. ella, si el símbolo es un operando (número) se guarda en la pila, caso contrario se trata de un operador y en
  8. consecuencia deberían estar dos operandos en la pila los que deben retirarse de la misma para realizar el
  9. cálculo correspondiente, el resultado de dicho cálculo se almacena en la pila para que pueda utilizarse en
  10. siguientes operaciones; finalmente el resultado debería estar en la pila y ser el único valor almacenado en
  11. ella.*/
  12.  
  13. public class Ej_5 {
  14.  
  15.     public static void Ejecutar() {
  16.         do {
  17.         System.out.println("Ingrese una expresión posfija: ");
  18.         String expresionPosfija = Helper.sc.nextLine();
  19.        
  20.         try {
  21.         System.out.println("Resultado: " + expresionPosfija + " = " + resuelvePosfija(expresionPosfija));
  22.         break;
  23.     }catch (Exception exception) {
  24.         System.out.println("!!! " + exception.getMessage());
  25.     }
  26.         }while(true);
  27.         Helper.sc.close();
  28.     }
  29.    
  30.    
  31.     public static Integer resuelvePosfija(String expresionPosfija) {
  32.        
  33.         Pila<Integer> operandos = new Pila<>(50);
  34.         Integer operador1=0;
  35.         Integer operador2=0;
  36.         Character simbolo = ' ';
  37.        
  38.         for (int i = 0; i < expresionPosfija.length(); ++i) {
  39.             simbolo = expresionPosfija.charAt(i);
  40.             if (Character.isDigit(simbolo)) {
  41.                 operandos.push(Integer.parseInt(simbolo.toString()));
  42.             } else {
  43.                 if(operandos.size() < 2) {
  44.                     throw new RuntimeException("Error... la expresión posfija esta mal escrita");
  45.                 }
  46.                 operador2 = operandos.pop();
  47.                 operador1 = operandos.pop();
  48.                 operandos.push(calcular(operador1, operador2, simbolo));
  49.  
  50.             }
  51.         }
  52.         if (operandos.size() != 1) {
  53.             throw new RuntimeException("Error... la expresion posfija esta mal escrita");
  54.         }
  55.         if ((simbolo =='/') & (operador2==0)) {
  56.             throw new RuntimeException("Error... División por 0");
  57.         }
  58.         return operandos.pop();
  59.  
  60.     }
  61.    
  62.     private static Integer calcular(Integer operador1, Integer operador2, Character operator) {
  63.         switch (operator) {
  64.         case '+' :
  65.             return operador1 + operador2;
  66.         case '-' :
  67.             return operador1 - operador2;
  68.         case '*' :
  69.             return operador1 * operador2;
  70.         case '/' :
  71.             try {
  72.             return operador1 / operador2;
  73.             }catch (Exception exception) {
  74.                 System.out.println(" ");
  75.             }
  76.         }
  77.         return 0;
  78.     }
  79. }
  80.  
Add Comment
Please, Sign In to add comment