Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*Escribir un programa que permita calcular el valor de una expresión matemática (cadena ingresada por el
- usuario) escrita en notación posfija . Por ejemplo: 75+ da como resultado 12. La notación posfija tiene la
- ventaja que el orden en que se realizan las operaciones está completamente determinada por las
- posiciones de los operadores y los operandos, nunca es necesario el uso de paréntesis. El mecanismo para
- resolver una expresión en notación posfija necesita de una pila en la que se almacenan los operandos
- (números) de la misma. Entonces, se recorre la cadena de izquierda a derecha analizando cada símbolo de
- ella, si el símbolo es un operando (número) se guarda en la pila, caso contrario se trata de un operador y en
- consecuencia deberían estar dos operandos en la pila los que deben retirarse de la misma para realizar el
- cálculo correspondiente, el resultado de dicho cálculo se almacena en la pila para que pueda utilizarse en
- siguientes operaciones; finalmente el resultado debería estar en la pila y ser el único valor almacenado en
- ella.*/
- public class Ej_5 {
- public static void Ejecutar() {
- do {
- System.out.println("Ingrese una expresión posfija: ");
- String expresionPosfija = Helper.sc.nextLine();
- try {
- System.out.println("Resultado: " + expresionPosfija + " = " + resuelvePosfija(expresionPosfija));
- break;
- }catch (Exception exception) {
- System.out.println("!!! " + exception.getMessage());
- }
- }while(true);
- Helper.sc.close();
- }
- public static Integer resuelvePosfija(String expresionPosfija) {
- Pila<Integer> operandos = new Pila<>(50);
- Integer operador1=0;
- Integer operador2=0;
- Character simbolo = ' ';
- for (int i = 0; i < expresionPosfija.length(); ++i) {
- simbolo = expresionPosfija.charAt(i);
- if (Character.isDigit(simbolo)) {
- operandos.push(Integer.parseInt(simbolo.toString()));
- } else {
- if(operandos.size() < 2) {
- throw new RuntimeException("Error... la expresión posfija esta mal escrita");
- }
- operador2 = operandos.pop();
- operador1 = operandos.pop();
- operandos.push(calcular(operador1, operador2, simbolo));
- }
- }
- if (operandos.size() != 1) {
- throw new RuntimeException("Error... la expresion posfija esta mal escrita");
- }
- if ((simbolo =='/') & (operador2==0)) {
- throw new RuntimeException("Error... División por 0");
- }
- return operandos.pop();
- }
- private static Integer calcular(Integer operador1, Integer operador2, Character operator) {
- switch (operator) {
- case '+' :
- return operador1 + operador2;
- case '-' :
- return operador1 - operador2;
- case '*' :
- return operador1 * operador2;
- case '/' :
- try {
- return operador1 / operador2;
- }catch (Exception exception) {
- System.out.println(" ");
- }
- }
- return 0;
- }
- }
Add Comment
Please, Sign In to add comment