1. Evaluación de expresiones aritméticas mediante pilas Una expresión aritmética está formada por operandos y operadores. Así la expresión x *y-(a+b) consta de los operadores *, -, + y de los operandos x, y, a, b. Los operandos pueden ser valores constantes, variables o incluso, otra expresión. Los operadores son los símbolos conocidos de las operaciones matemáticas. La evaluación de una expresión aritmética da lugar a un valor numérico, se realiza sustituyendo los operandos que son variables por valores concretos y ejecutando las operaciones aritméticas representadas por los operadores.
2. Así, si los operandos de la expresión anterior toman los valores: x=5, y=2, a=3, b=4, el resultado de la evaluación es: 5*2 – (3+4) = 5*2 – 7 = 10 – 7 = 3 La forma habitual de escribir expresiones matemáticas es aquella en la que el operador está entre dos operandos. La expresión anterior escrita de esa forma, recibe el nombre de notación infija. Esta forma de escribir las expresiones exige, en algunas ocaciones, el uso de paréntesis para encerrar subexpresiones con mayor prioridad, sin olvidar los niveles de prioridad y la asociatividad.
3. Notación prefija y notación postfija de una expresión aritmética Para nuestro problema una expresión aritmética será un medio que permite indicar el orden en que se deben realizar una serie de operaciones para obtener un resultado. Las operaciones se indican mediante operadores, que en nuestro caso representan las operaciones suma, resta, producto, división e igualdad, todas ellas operaciones binarias (necesitan exactamente dos argumentos para poderse evaluar).
4. Existen varias notaciones para representar expresiones aritméticas, que se diferencian en el orden en que se escriben los argumentos (operandos) de los operadores. Las más relevantes son: Notación infija : La notación habitual. El orden es primer operando, operador, segundo operando. Notación prefija : El orden es operador, primer operando, segundo operando. Notación postfija : El orden es primer operando, segundo operando, operador. Notación funcional : Se escribe el operador/función y despues, entre paréntesis, los operadores separados por comas.
5. La notación infija tiene el problema de que en expresiones con más de un operador existe ambiguedad sobre cual es el orden de evaluación. Por ejemplo, la expresión 8/4/2 se puede interpretar como (8/4)/2 o bien como 8/(4/2). Las otras notaciones no sufren este problema. Un problema interesante en computación es poder convertir expresiones en notación INFIJA a su equivalente en notacion POSTFIJA. Dada la expresión A+B se dice que está en notación INFIJA, y su nombre se debe a que el operador (+) esta entre los operadores (A y B).
6. Dada la expresión AB+ se dice que está en notación POSTFIJA, y su nombre se debe a que el operador (+) esta después entre los operadores (A y B). La ventaja de usar expresiones en notación polaca POSTFIJA radica en que no son necesarios los paréntesis para indicar orden de operación, ya que este queda establecido por ubicación de los operadores con respecto a los operandos. Para convertir una expresión dada en notación INFIJA a una notación POSTFIJA, deberán establecerse previamente ciertas condiciones
7. Solamente se manejarán los siguientes operadores (Están dados ordenadamente de mayor a menor según su prioridad de ejecución): operador prioridad dentro prioridad fuera de la pila de la pila ^ (potencia) 3 3 * , / 2 2 +, - 1 1 ( 0 4 Los operadores de mas alta prioridad se ejecutan primero. Si hubiera en una expresión dos o mas operadores de igual prioridad, entonces se procesarán de izquierda a derecha.
8. Las subexpresiones parentizadas tendrán más prioridad que cualquier operador. Obsérvese que no se trata el paréntesis derecho ya que este provoca sacar operadores de la pila hasta el paréntesis izquierdo.
9.
10.
11. Transformación de expresión infija a postfija Se parte de una expresión en notación infija que tiene operandos, operadores y puede tener paréntesis. Los operandos vienen representados pos letras y los operadores son: ^, *, /, *, - La transformación se realiza utilizando una pila en la cual se almacenan los operadores y los paréntesis izquierdos. La expresión aritmética se va leyendo desde el teclado de izquierda a derecha, carácter a carácter, los operandos pasan directamente a formar parte de la expresión en postfija la cual se guarda en un arreglo.
12. Los operadores se meten en la pila siempre que ésta esté vacía, o bien siempre que tengan mayor prioridad que el operador de la cima de la pila (o bien si es la máxima prioridad). Si la prioridad es menor o igual se saca el elemento cima de la pila y se vuelve a hacer la comparación con el nuevo elemento cima. Los paréntesis izquierdos siempre se meten en la pila; dentro de la pila se les considera de mínima prioridad para que todo operador que se encuentra dentro del paréntesis entre en la pila.
13. Cuando se lee un paréntesis derecho hay que sacar todos los operadores de la pila pasando a formar parte de la expresión postfija, hasta llegar a un paréntesis izquierdo, el cual se elimina ya que los paréntesis no forman parte de la expresión postfija. El proceso termina cuando no hay más elementos de la expresión y la pila esté vacía.
14.
15.
16. Evaluación de la expresión en notación postfija. Se almacena la expresión aritmética transformada a notación postfija en un vector, en la que los operandos están representados por variables de una sola letra. Antes de evaluar la expresión se requiere dar valores numéricos a los operandos. Una vez que se tiene los valores de los operandos, la expresión es evaluada. El algoritmo de evaluación utiliza una pila de operandos, en definitiva de números reales.