el orden que se debería seguir, según la prioridad de los operadores (que se
especificarán más adelante) y el uso de los paréntesis, sería el indicado con las flechas. Esto implica una dificultad que ya se comentó en la introducción. Para eliminar esta dificultad, se hace una traducción preliminar de las expresiones aritméticas que se llama notación de cadena polaca (denominada así en honor del matemático polaco Lukasiewicsz, que la originó). Esta notación tiene la ventaja de que las operaciones aparecen en el orden en que se efectúan realmente la evaluación. La idea básica detrás de la notación de cadenas polacas es que los operadores se escriben al final y no en medio de las expresiones. De manera que A + B se escribiría como A B +. En esta forma, el operador + se considera como una orden para sumar los valores de las dos variables que lo preceden inmediatamente. Un ejemplo un poco más complejo podría ser:
La clave de la traducción de notación infija a posfija es la prioridad de los
operadores. A continuación se muestra la prioridad de los operadores utilizados así como el de las funciones que también se consideran operadores, además de los pasos a seguir para realizar la traducción, para ello recorreremos la expr. aritmética infija desde la izquierda hasta el final:
1. Cuando el elemento localizado es
una variable, se coloca inmediatamente en el extremo Operadores Prioridad derecho de la expresión posfija que se está creando. Log, Exp, Sqrt 6
2. Cuando el elemento localizado es - (unario) 5
un operador o función, se coloca ^ 4 en el extremo superior de una pila *, / 3 siempre y cuando la prioridad de este sea menor que el que está en +, - 2 la cima de la pila. En caso ( 1 contrario se quitará dicho ) 0 operador de la pila y se colocará en la parte derecha de la expresión posfija y a continuación se vuelve a intentar colocar el operador en la pila. 3. Cuando el elemento es un ‘(‘ se coloca directamente en la cima de la pila. 4. Cuando el elemento es un ‘)’, los operadores de la pila se transfieren uno a uno, al extremo derecho de la expresión posfija hasta llegar a un ‘(‘. Llegado a este punto, este par de paréntesis de eliminan.
Evaluación de una expresión aritmética en notación polaca
Para su evaluación nos apoyaremos en una pila, donde dejaremos tanto los resultados intermedios como el final. Se recorrerá la expr. aritmética de izquierda a derecha, de forma que cuando nos encontremos un operando (variable o constante) se incluirá en la pila y si nos encontramos un operador podremos hacer dos cosas: a) a) Si el operador es unario (-, log, exp o sqrt) solo se aplicará sobre primer operando de la pila. b) b) Si el operador es binario (+, -, *, / y ^) se aplicará sobre los dos primeros operandos de la pila. Tanto en un caso como en el otro, el resultado se dejará en la cima de la pila.
ALGORITMO PARA CONVERTIR EXPRESIONES INFIJAS EN
POSTFIJAS (RPN) 1. Incrementar la pila 2. Inicializar el conjunto de operaciones 3. Mientras no ocurra error y no sea fin de la expresión infija haz o Si el carácter es: 1. PARENTESIS IZQUIERDO. Colocarlo en la pila 2. PARENTESIS DERECHO. Extraer y desplegar los valores hasta encontrar paréntesis izquierdo. Pero NO desplegarlo. 3. UN OPERADOR. Si la pila esta vacía o el carácter tiene más alta prioridad que el elemento del tope de la pila insertar el carácter en la pila. En caso contrario extraer y desplegar el elemento del tope de la pila y repetir la comparación con el nuevo tope. 4. OPERANDO. Desplegarlo. 4. Al final de la expresión extraer y desplegar los elementos de la pila hasta que se vacíe.
ALGORITMO PARA EVALUAR UNA EXPRESION RPN
1. Incrementar la pila 2. Repetir o Tomar un caracter. o Si el caracter es un operando colocarlo en la pila. o Si el caracter es un operador entonces tomar los dos valores del tope de la pila, aplicar el operador y colocar el resultado en el nuevo tope de la pila. (Se produce un error en caso de no tener los 2 valores) 3. Hasta encontrar el fin de la expresión RPN.