domingo, 12 de octubre de 2008

Uso de variables globales y locales en HP

Autor: Chicho

Hola a todos, en este artículo les enseñaré como se usan las variables locales y globales dentro de un programa. Para no andar perdidos deben saber como grabar programas en la calculadora (leer aquí) y el uso del teclado de la calculadora. Recuerden que (al menos) todos los tutoriales que hago están hechos para ser aplicados en modo RPN, así que quedan avisados.

Para los que están siguiendo los tutoriales que ando haciendo, se habrán dado cuenta que con el tipo de programas que hasta ahora hemos desarrollado sólo podiamos operar linealmente los valores de la pila. Por ejemplo, podiamos restarle al número superior de la pila la suma de los dos últimos números de la pila con el programa:

«+ -» ...(1)

Sin embargo, si tenemos en mente hacer un programa que nos devuelva la diferencia entre el producto del primer y tercer elemento de la pila con el producto del segundo y cuarto elemento de la pila (vista de arriba hacia abajo), nos damos cuenta que con lo visto anteriormente no nos alcanza ya que para realizar esta operación debemos insertar los operadores entre los números que vamos a operar. Aquí es donde entra el uso de variables.

En la HP existen dos tipos de variables (hasta donde se). Las variables globales y las locales. De estas dos yo prefiero usar las variables locales, pero para que tomen su decisión, les enseñaré a usar ambas.

Los comandos que normalmente se usan con las variables gloables son:

- 'variable' STO: Guarda el valor inferior de la pila en "variable" y lo quita de la pila.

- 'variable' PURGE: Libera la variable (osea la deja sin valor).

- variable: Si el nombre de variable se escribe directamente, el valor que tenga la variable será puesto en pila, si la variable no tiene valor, se escribe como cadena de caracteres.

Con estas breves indicaciones ya podemos crear el programa que teníamos en mente. Quedaría así:

«
'D' STO
'C' STO
'B' STO
'A' STO
A C * B D * -
'D' PURGE
'C' PURGE
'B' PURGE
'A' PURGE
» ...(2)

Para los que son "observadores" se deben haber dado cuenta que coloqué las variables que uso en orden inverso, esto es porque el cuarto valor se leerá primero; el tercero, segundo; el segundo, tercero y el primero, cuarto (los últimos serán los primero :P).
Luego, mando las variables A y C a la pila, las multiplico, mando a pila B y D, las multiplico y luego resto los valores inferiores que estan en la pila (osea A*C y B*D); el resultado quedará en la pila.
Finalmente, libero las variables.

Los comandos que se usan con las variables locales son los siguientes:

- -> variable1 variable2 ... variableN: Copia las N posiciones inferiores de la pila en las N variables comenando de arriba hacia abajo y las elimina de la pila.

- « operaciones con las variables »: Toda operación con las variables locales se deberá hacer después de haberlas leido y solo dentro de «»; una vez que se cierre las variables locales habrán perdido su valor, pero los valores en la pila se mantendran (osea, todos los que se fueron agregando en la pila gracias a las operaciones hechas).

Por ejemplo, el programa que teníamos en mente también lo podemos hacer de la siguiente manera:

«
-> A B C D
«A C * B D * -»
» ...(3)

Primero, enviamos los 4 valores inferiores de la pila a las variables. Luego, enviamos a pila A y C, las multiplico, enviamos a pila B y D, las multiplico y luego resto los valores inferiores que estan en pila (osea A*C y B*D); el resultado quedará en la pila.
Como podemos ver, al terminar las operaciones, las variables son liberadas automaticamente.

Aquí les listo algunas ventajas y desventajas de los tipos de variables:

Globales:
- Su principal ventaja es que no si se desean utilizar para varias operaciones mantienen su valor. Inclusive, puede mantener su valor para ser usadas en otras funciones y al final del primer uso no se purgan y al inicio del segundo uso no se STOean.
- Su principal desventaja es que se tienen que purgar cuando ya no van a ser usadas, además que debes leer variables por variable y que a veces puede que escribas el valor encima de algún programa (ya que en realidad los programas son solo variables).

Locales:
- Su principal ventaja es que se pueden leer varios valores directamente (sin tener que repetir el mismo código acada rato), además de que no se deben estar purgando cuando se acaban de usar y no tienes el riesgo de sobreescribir algún programa.
- Su principal desventaja es que solo se pueden usar las variables en la subsección que se creó, si se quiere usar el valor más adelante se debe considerar en el programa para que se quede en alguna parte de la pila.

Ahora que saben como usar las variables, saquen sus propias conclusiones. Por lo general yo usaré variables locales a no ser que considere que sea más fácil o necesario usar variables globales.

Gracias y cualquier duda, sugerencia u otra cosa dejen su comentario.

P.D.: Para los que llegaron hasta aquí, les aviso que las variables puede guardar "cualquier cosa", así que no se queden cortos con usar solo escalares ya que también pueden guardar vectores, matrices, listas, cadenas y hasta programas.

1 comentario:

Smailliw dijo...

Chevere la información Chicho, para los que no entiendan muy bien los manuales del post anterior las dejo uno que es aplicativo y muy entendible, bueno este manual es para comenzar cuando quieran programar cosas más complejas habra que buscar otro XD Ver archivo