Cómo evaluar expresiones matemáticas ... |
||||
|
Inicio 1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
Traducción a notación postfija Para la traducción a notación postfija se utilizarán dos pilas, una en donde se guardarán los números y otra para los operadores y los paréntesis5. Aunque se dice que una de las pilas maneja números, esto no es muy cierto, en realidad las dos pilas se trabajarán con texto (String), esto permite concatenar varias tiras fácilmente y se pueden manejar expresiones que no son números como si lo fueran. Para la traducción del lenguaje natural a notación postfija es fundamental manejar la prioridad de las operaciones y el uso de paréntesis. Como se dijo al inicio del artículo, para evaluar una expresión matemática se deben seguir las siguientes reglas:
Por esto, para la prioridad se les dará a las operaciones los siguientes valores:
Por lo que en nuestro programa ocupamos una función como la que sigue:
private int prioridad(char s) { if (s=='+' || s=='-') return 0; else if (s=='*' || s=='/' || s=='%') return 1; else if (s=='^') return 2; return -1; } //Fin de la funcion prioridad Esta función recibe un caracter s, dependiendo de la operación que represente este caracter se devuelve el valor de la prioridad correspondiente, si recibe un operador que no corresponde con las operaciones se devuelve -1. Otro punto importante es que todas las funciones que reciben un parámetro (seno, coseno, tangente,...) se manejan como un paréntesis que abre "('', el usuario debe digitarlas con ese paréntesis, es decir: "sen('', "cos('', "tan('', ... Se manejan así porque cuando se digita el paréntesis que cierra ")'', este paréntesis saca todo lo que hay en la pila hasta que encuentra el de apertura o una función (lo que quiere decir que en términos prácticos funcionan igual con una ligera diferencia que luego se verá). A continuación se muestran varios ejemplos para observar el algoritmo que se debe seguir para traducir una expresión de notación infija a postfija.
Cidse - Revista virtual Matemática, Educación e Internet - ITCR
|