Cuando se escriben programas en un lenguaje convencional de programa-ción, que tienen que ver con la evaluación de expresiones, se tiene el problema que la expresión a evaluar desde la entrada no siempre es la misma o del mismo tipo. Por ello el programador debe escribir el código necesario para que la entrada de sus programas sea lo más general posible, permitiendo un comportamiento adecuado frente a expresiones y/ofunciones en la entrada.
TIPOS DE EXPRESIONES
En esta parte vamos a evidenciar cuales son las expresiones que se utilizan para porder realizar las evaluaciones.
- Notación infija.- operando-operador-operando. Ejemplo: A + B
- Notación prefija.- operador-operando-operando. Ejemplo: + A B
- Notación postfija.- operando-operando-operador. Ejemplo: A B +
JERARQUIA EN LA EVALUACION DE EXPRESIONES
A continuacion en la siguiente tabla se podra evidenciar como es el nivel de importancia que adquiere los operadores al momento de hacer cualquier evaluacion de las expresiones.
A continuacion en la siguiente tabla se podra evidenciar como es el nivel de importancia que adquiere los operadores al momento de hacer cualquier evaluacion de las expresiones.
Programa de Evaluacion de Expresiones
import java.util.Scanner; import java.util.Stack; /** * * @author Administrador */ public class Expresiones { /** * @param args the command line arguments */ public static void main(String[] args) { System.out.println("*Escribe una expresión algebraica:"); Scanner leer = new Scanner(System.in); //Depurar la expresion algebraica String expr = depurar(leer.nextLine()); String[] arrayInfix = expr.split(" "); //Declaración de las pilas Stack < String > E = new Stack < String > (); //Pilaentrada Stack < String > P = new Stack < String > (); //Pilatemporal para operadores Stack < String > S = new Stack < String > (); //Pilasalida //Añadir la array a la Pila de entrada (E) for (int i = arrayInfix.length - 1; i >= 0; i--) { E.push(arrayInfix[i]); }try { //Algoritmo Infijo a Postfijo while (!E.isEmpty()) { switch (pref(E.peek())){ case 1: P.push(E.pop()); break; case 4: while(pref(P.peek()) >= pref(E.peek())) { S.push(P.pop()); } P.push(E.pop()); break;case 2: while(!P.peek().equals("(")) { S.push(P.pop()); } P.pop(); E.pop(); break;default: S.push(E.pop());} } //Eliminacion de `impurezas´ en la expresionesalgebraicas String infix = expr.replace(" ", ""); String postfix = S.toString().replaceAll("[\\]\\[,]",""); //Mostrar resultados: System.out.println("Expresion Infija: " + infix); System.out.println("Expresion Postfija: " + postfix); }catch(Exception ex){System.out.println("Error en la expresión algebraica"); System.err.println(ex); } }//Depurar expresión algebraica private static String depurar(String s) { s = s.replaceAll("\\s+", "");//Elimina espacios enblanco s = "(" + s + ")"; String simbols = "+-*/()"; String str = ""; //Deja espacios entre operadores for (int i = 0; i < s.length(); i++) { if (simbols.contains("" + s.charAt(i))) { str += " " + s.charAt(i) + " "; }else str += s.charAt(i); } return str.replaceAll("\\s+", " ").trim(); }//Jerarquia de los operadores private static int pref(String op) { int prf = 99; if (op.equals("^")) prf = 5; if (op.equals("*") || op.equals("/")) prf = 4; if (op.equals("+") || op.equals("-")) prf = 3; if (op.equals(")")) prf = 2; if (op.equals("(")) prf = 1; return prf; // TODO code application logic here } }
no funciona para potencia
ResponderBorrar