RPN : Reverse Polish Notation - Utilice Notepad para ver las tildes y eñes de este archivo en forma correcta - BREVE EXPLICACION DE RPN ------------------------ Escrito por: Alvaro Gerardo Suárez. Las calculadoras HP41,HP67,HP65,HP25 como todas las Hewlett Packard, tienen una manera diferente para hacer operaciones. Primero que todo, no existe la tecla igual. Para sumar 4 + 5 se debe digitar: [4] [ENTER] [5] [+] Como podemos ver, la tecla más se oprime al final y hay una tecla Enter que debe oprimirse para separar los dos números a sumar. Si queremos hacer la siguiente operación: (4+5)*2 en la HP41 las teclas a digitar son: [4] [ENTER] [5] [+] [2] [*] En una calculadora normal tendríamos que digitar: [4] [+] [5] [=] [*] [2] [=] En el primer caso se presionaron 6 teclas, en la calculadora normal fueron 7 teclas. Ahorro: 1 tecla. Para hacer la siguiente operacion: 3+6 ---- 11+7 En una calculadora normal se digitará: [1] [1] [+] [7] [=] [M+] [3] [+] [6] [=] [/] [MR] [=] : Total, 13 teclas siendo [M+] guardar a memoria y [MR] traer memoria. En la Hewlett Packard: [3] [ENTER] [6] [+] [1] [1] [ENTER] [7] [+] [/] : Total, 10 teclas Ahorro: 3 teclas. Aunque al comienzo puede parecer un poco extraña la manera de ejecutar operaciones, con el tiempo se encuentra que operar de esta forma una calculadora es muy ventajoso: Se ahorran muchas teclas en cálculos grandes. Internamente existe un conjunto de 4 registros llamados el "Stack" que permiten hacer este tipo de operaciones. Los registros se llaman X, Y, Z, T . El registro X siempre se muestra en la pantalla. Cuando se oprime la tecla [ENTER] internamente el contenido del registro X es copiado al registro Y. Cuando se ejecuta una operación cómo por ejemplo [+], se suman los registros X (pantalla) y Y y el resultado se deja en la pantalla (Registro X). Se puede pensar que los 4 registros están en una pila de 4 niveles siendo el nivel más bajo el X, el segundo nivel el Y, Z el tercer nivel y T el cuarto nivel. ------------------ | Registro T | Nivel 4 ------------------ | Registro Z | Nivel 3 ------------------ | Registro Y | Nivel 2 ------------------ | Registro X | Nivel 1 (Mostrado en la pantalla de la calculadora) ------------------ La tecla [ENTER] copia el contenido del registro X al Y como deciamos antes, pero también ocurre que el valor de Y es copiado o "sube" al registro "Z" y el valor de Z sube al registro T. El valor anterior que tenía T se pierde porque no hay a donde copiarlo. Cuando se ejecuta una operación, por ejemplo [*] el contenido de todos los registros baja en la pila o "stack" de tal forma que T se copia en Z, Z en Y y Y con X en este caso se multiplican dejando el resultado en X. Esta secuencia de operaciones obedece a unas reclas denominadas RPN que significa "Reverse Polish Notation" o Notación Polaca Reversa en honor a un matemático polaco que la inventó . En la notación polaca para sumar 4 y 5 se coloca + 4 5 con el operador antecediendo a los números que se operan. En la notación polaca reversa se escribe: 4 5 + Para indicarle a la calculadora que no estamos escribiendo cuarenta y cinco, sino 4 y 5 se usa [ENTER] como separador. Cuando se oprime [+] la operación queda realizada. Ejemplos de RPN: 1.Ejecutar (4+6) * (3+2) [4] [ENTER] [6] [+] [3] [ENTER] [2] [+] [*] 2. Calcular 9 / (2+1) [9] [ENTER] [2] [ENTER] [1] [+] [/] También, usando la función 1/x que calcula el recíproco de un número se podría resolver este ejemplo de la forma: [2] [ENTER] [1] [+] [1/x] [9] [*] 3. Calcular 3+5 6-2 --- + --- 2 3+1 [3] [ENTER] [5] [+] [2] [/] [6] [ENTER] [2] [-] [3] [ENTER] [1] [+] [/] [+] También es posible: [2] [1/x] [3] [ENTER] [5] [+] [*] [3] [ENTER] [1] [+] [1/X] [6] [ENTER] [2] [-] [*] [+] 4. Sumar 1+2+3+4. Todas las siguientes posibilidades son soluciones: [1] [ENTER] [2] [+] [3] [+] [4] [+] [1] [ENTER] [2] [ENTER] [3] [ENTER] [4] [+] [+] [+] [1] [ENTER] [2] [+] [3] [ENTER] [4] [+] [+] [1] [ENTER] [2] [ENTER] [3] [+] [+] [4] [+] En todas las anteriores el "stack" (la pila) almacena dinámicamente los valores intermedios. La función [Y^X] eleva el valor que hay en el registro y al exponente que hay en el registro x ( pantalla). Para calcular 4^2 = 16 procedemos de la siguiente forma: [4] [ENTER] [2] [Y^X] Esto significa que primero "subimos" el "4" al registro Y usando "Enter", luego digitamos un 2 en la pantalla y entonces oprimimos la tecla con la función. Ejemplo 5. Calcular 3* 2^4 + 5 [3] [ENTER] [2] [ENTER] [4] [Y^X] [*] [5] [+] También: [2] [ENTER] [4] [Y^X] [3] [*] [5] [+] Digitando el 5 adelante: [5] [ENTER] [2] [ENTER] [4] [Y^X] [3] [*] [+] Digitando el 5 y el 3 primero: [5] [ENTER] [3] [ENTER] [2] [ENTER] [4] [Y^X] [*] [+] Ejemplo 6: Analizar cuantos niveles del "stack" requiere cada una de las formas de sumar 1+2+3+4 del ejemplo 4. [1] [ENTER] [2] [+] [3] [+] [4] [+] requiere dos niveles X y Y [1] [ENTER] [2] [ENTER] [3] [ENTER] [4] [+] [+] [+] requiere 4 niveles X,Y,Z,T [1] [ENTER] [2] [+] [3] [ENTER] [4] [+] [+] requiere 3 niveles X,Y,Z [1] [ENTER] [2] [ENTER] [3] [+] [+] [4] [+] rquiere 3 niveles X,Y,Z Para solucionar este ejemplo recordemos que cada [ENTER] sube el registro X a Y pero también sube los restantes registros Z a T y Y a Z Un solo [ENTER] requiere dos registros de almacenamiento, dos [ENTER] requieren 3 registros de almacenamiento y tres [ENTER], 4 registros de almacenamiento. Los límites de la primera generación de calculadoras Hewlett Packard son 4 registros, o sea, 4 niveles de stack, por lo cual sólo podemos usar [ENTER] 3 veces seguidas. Si usamos [ENTER] 4 O más veces perdemos los primeros datos. Ejemplo 7: En la siguiente secuencia que dato se pierde: [1] [ENTER] [2] [ENTER] [3] [ENTER] [4] [ENTER] [5] Se pierde el número 1 porque el límite del stack son 4 niveles y estamos subiendo el 1 hasta el quinto nivel , el cual no existe. En este ejemplo luego de estas operaciones: el 1 se pierde, el 2 queda en el cuarto nivel del stack, o sea en el registro T, el 3 queda en el tercer nivel: registro Z, el 4 queda en el segundo nivel: Registro Y . Por último, el 5 queda en el primer nivel: Registro X, que es la pantalla de la calculadora. En resumen, cualquier dato que suba por encima del registro T, cuarto nivel, es desechado por la calculadora porque no tiene más en donde almacenar. Las operaciones que requieren 2 valores cómo [+] [-] [*] [/] [Y^X] toman los dos valores de los registros X y Y dejando el resultado en el registro X (Pantalla) Adicionalmente bajan el stack, o sea, el registro Z baja a Y y el regitro T baja a Z. Que queda en el registro T despues de que éste ha bajado a Z?: El mismo valor de T, o sea, el registro T, con cada operación se va copiando hacia abajo sin experimentar cambios él mismo. Este comportamiento nos sirve para colocar una constante. Por ejemplo, queremos que cada vez que oprimimos la tecla [+] sume 3 al valor de la pantalla. La forma de hacerlo es: [3] [ENTER] [ENTER] [ENTER] A continuación digitemos por ejemplo un [5] y luego [+] la pantalla muestra 8 [+] la pantalla muestra 11 [+] la pantalla muestra 14 y así sucesivamente. Ejemplo 8: Colocar la calculadora de tal forma que cada vez que se oprime la tecla [*] ocurre una multiplicación por 2. [2] [ENTER] [ENTER] [ENTER] La calculadora queda lista con la constante deseada. Ahora digitemos por ejemplo 10 y luego: [*] la pantalla muestra 20 [*] la pantalla muestra 40 [*] la pantalla muestra 80 [*] la pantalla muestra 160 y así sucesivamente. Si el stack de la calculadora está lleno con una constante podemos también mezclar operadores. Ejemplo 9: [2] [ENTER] [ENTER] [ENTER] "LLenamos" el stack con la constante 2. Ahora: [2] [*] [*] [*] [*] produce 32 [x<>y][/][x<>y][/] y obtenemos 8, [+][*] y se obtiene 20, [-][*] y llegamos a -36, [x<>y][/][-] y hemos obtenido 20 . Nota: [x<>y] Permite intercambiar los registros X y Y. Otros ejemplos de [x<>y]: Es lo mismo: [8][ENTER][2][/] Resultado: 4 [2][ENTER][8][X<>Y][/] Resultado: 4 Recordemos que [/] no es una operación conmutativa. [2][ENTER][8][/] Resultado: 0.25 Por eso es necesario usar [X<>Y] para colocar los números [8] y [2] en forma correcta antes de ejecutar la operación. Ejemplo 10: Resolver 4+5 usando [x<>y] --- 2+1 [2][ENTER][1][+][4][ENTER][5][+][X<>Y][/] Otras posibilidades son: [4][ENTER][5][+][2][ENTER][1][+][/] [4][ENTER][5][ENTER][2][ENTER][1][+][+][/] [2][ENTER][1][+][1/X][4][ENTER][5][+][*] [2][ENTER][1][ENTER][4][ENTER][5][+][+][X<>Y][/]