0% encontró este documento útil (0 votos)
255 vistas39 páginas

Programar HP

Este documento proporciona definiciones de términos relacionados con la programación en lenguaje RPL de calculadoras HP como instrucciones, variables, bucles, operadores lógicos. Explica conceptos como RPN, LISP y las diferencias entre User RPL y System RPL. Además, incluye ejemplos de comandos básicos y secciones sobre manipulación de datos, variables, bucles e instrucciones condicionales.
Derechos de autor
© Attribution Non-Commercial (BY-NC)
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
255 vistas39 páginas

Programar HP

Este documento proporciona definiciones de términos relacionados con la programación en lenguaje RPL de calculadoras HP como instrucciones, variables, bucles, operadores lógicos. Explica conceptos como RPN, LISP y las diferencias entre User RPL y System RPL. Además, incluye ejemplos de comandos básicos y secciones sobre manipulación de datos, variables, bucles e instrucciones condicionales.
Derechos de autor
© Attribution Non-Commercial (BY-NC)
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Mayo 2006 (revisado en julio de 2007).

En lenguaje User-RPL y en modo RPN

macdenaif 1
Mayo 2006 (revisado en julio de 2007).

ÍNDICE pag.

Definiciones 5
Instrucción o comando. 5
Programa. 5
Variable. 5
Bucle. 5
Instrucciones de prueba. 5
Operadores lógicos. 5
Delimitadores. 5
RPN. 6
Lisp. 7
RPL. 7
User RPL. 7
System RPL. 7

Tres instrucciones básicas 9


STO 9
EVAL 9
PURGE 9

Algunas teclas 10
MODE 10
VAR 10
TOOL 10
NEXT 10

Introducción a la programación 11
Trabajando con un dato de la pila. 11
Manipulando datos en la pila. Comandos del menú STACK. 11
SWAP, DUP, DROP, ROLL, ROLLD.
Variables locales. 13
Variables globales. 15
STO, STO+, STO½.
Pidiendo datos. 15
INPUT, OBJt
Presentación de resultados. 18
TAGt, MSGBOX.
Bucles. 19
FOR-NEXT-STEP, WHILE-REPEAT-END, DO-UNTIL-END.
Instrucciones de prueba o condición. Submenú TEST. 22
IF-THEN-ELSE-END.

macdenaif 2
Mayo 2006 (revisado en julio de 2007).

Operadores lógicos. 24
AND, OR, NOT.
Ventana de selección 26
CHOOSE.
Listas. 27
tLIST, OBJt, DEPTH.
Flags. 29
SF, CF.

Ejemplos 31
Fórmula de Friis. 31
Orientación de antenas parabólicas. 34
Conversión de decimal a sexagesimal. 36
Método de Ruffini. 36

HP-12-C (1981)

macdenaif 3
Mayo 2006 (revisado en julio de 2007).

ÍNDICE DE COMANDOS pag.

1. tLIST 27, 33
2. ADD 28
3. AND 5, 24
4. CF 29
5. CLEAR 33
6. CHOOSE 26
7. DEPTH 27, 33
8. DO 22
9. DROP 12, 26
10. DUP 12, 21
11. ELSE 22
12. END 21, 22, 23
13. EVAL 9, 18, 19
14. FOR 19, 20, 33
15. GET 33
16. HEAD 33
17. IF 22
18. INPUT 15, 16...
19. MSGBOX 19
20. NEXT 19, 20, 33
21. NOT 5
22. OBJt 15, 27
23. OR 5, 24
24. PURGE 9, 18
25. REPEAT 21
26. RND 17
27. ROLL 12
28. ROLLD 12
29. SF 29
30. SIZE 33
31. STEP 21
32. STO 9, 11
33. STO½ 14, 20
34. STO+ 14
35. SQ 12, 13, 21
36. SWAP 11, 12
37. TAGt 18
38. TAIL 33
39. THEN 22, 35
40. UNTIL 22
41. WHILE 21

macdenaif 4
Mayo 2006 (revisado en julio de 2007).

DEFINICIONES.

Instrucción o comando.
Expresión formada por números y/o letras que indica a una computadora la
operación que debe realizar.
Programa
Conjunto de instrucciones que permiten a la computadora realizar una tarea más o
menos compleja.
Variable
En matemáticas, se llama variable a una magnitud que puede tener un valor
cualquiera. En informática, el concepto es básicamente el mismo, es una memoria
en la que podemos guardar un valor numérico, pero también una cadena de
caracteres, una función, un programa, etc. En ese caso se habla de “objetos” más
que de variables. A su vez, una variable es también un tipo de objeto.
Bucle
Repetición, cierto número de veces, de una parte del programa.
Instrucciones de prueba o condición.
Instrucciones que permiten comprobar si una determinada condición se cumple o
no, ejecutando un conjunto de instrucciones en el caso de que se cumpla y
saltándolas, o ejecutando otras, en el caso contrario.
Operadores lógicos
Los operadores lógicos NOT, AND, OR y XOR se utilizan normalmente en
combinación con las instrucciones de prueba para determinar, por ejemplo, si se
cumplen dos condiciones a la vez (AND) o si se cumple tal condición y no (AND
NOT) tal otra.
Delimitadores
Son caracteres que permiten a la computadora identificar un tipo de objeto.
Ejemplos de delimitadores en las calculadoras hp:

Delimitador Tipo de objeto


“” Cadena de caracteres
‘’ Variable o expresión algebraica
() Número complejo
{} Lista
« » Programa
[ ] Vector

macdenaif 5
Mayo 2006 (revisado en julio de 2007).

RPN.
Del inglés Reverse Polish Notation.
En 1920, el matemático polaco Jan Lukasiewicz ideó un
método para escribir expresiones matemáticas sin usar
paréntesis, conocido como notación polaca. Basándose en
este método, Hewlett-Packard incorporó en 1972 la
notación polaca inversa en su primera calculadora
científica de bolsillo (o de mano), la HP35.
La RPN se basa en el concepto de pila de datos. Primero
se introducen los datos y luego se indica la operación a
realizar entre los niveles 2 y 1 de la pila, quedando el
resultado en el nivel 1. Veamos algunos ejemplos.
Jan Lukasiewicz

a) 36/9 = 4

36 9

En realidad el segundo [ENTER] no es necesario, la secuencia podría ser esta:


36 [ENTER] 9 [ / ]

b) (8+2)/(5-3) = 5

8 2

5 3

macdenaif 6
Mayo 2006 (revisado en julio de 2007).

De nuevo hay pulsaciones de más, que se han


puesto para facilitar la comprensión. En este
caso la secuencia más corta sería la siguiente:
8 [ENTER] 2 [ + ] 5 [ENTER] 3 [ - ] [ / ]

Esta última operación se ha realizado con tan solo nueve pulsaciones. Con la
notación algebraica harían falta doce.

Además, con la RPN vemos todos los resultados parciales.

c) 1/(1/4+1/7+1/9)

Esta operación requiere hasta dieciséis pulsaciones, contando el “=”, en algunas


calculadoras algebraicas. En RPN sólo nueve.

4 7 9

macdenaif 7
Mayo 2006 (revisado en julio de 2007).

LISP
Acrónimo de LISt Processing. Lenguaje de programación basado en listas. Fue
creado por John McCarthy y sus colaboradores en el MIT (Instituto Tecnológico de
Massachusetts) a finales de los cincuenta.
RPL
Siglas de Reverse Polish LISP. Lenguaje de programación de las calculadoras hp.
User RPL
Es la forma más fácil de programar la calculadora y el único lenguaje al que hace
referencia la guía de usuario. Las calculadoras hp (49-50) disponen de una amplia
colección de comandos para poderlas programar. Algunos de esos comandos
llevan asociados nombres. Es decir, la calculadora dispone de un repertorio de
comandos que su microprocesador reconoce y de una lista (menor) de nombres
asociados a algunos de esos comandos. Esos comandos con nombre son los que
podemos usar para programar directamente la calculadora. Son los que conforman
el lenguaje User RPL.
System RPL
¿Qué ocurre con el resto de comandos? ¿Cómo podemos usarlos si no tienen
nombre? Pues bien, esos otros comandos sí tienen nombre, pero no está
disponible en la calculadora. Para poderlos usar debemos recurrir a un software
externo. Podríamos decir que User RPL es un subconjunto de un lenguaje con un
vocabulario más amplio, llamado System RPL.

Hp35 (1972) Hp 9100 (1968)

Bill Hewlett y Dave Packard

macdenaif 8
Mayo 2006 (revisado en julio de 2007).

Tres instrucciones básicas.

STO
Del inglés store: almacenar, guardar, archivar.
Como cabe esperar, se utiliza para guardar variables, programas y objetos en
general. Por ejemplo, para guardar el valor 33 en la variable H:
33
‘H’
STO
Aunque es más rápido hacerlo así:
33
‘H’
O incluso, si la variable H no ha sido declarada con anterioridad, podemos teclear:
33
H
 Esto es lo que se llama una variable global. Más adelante se hablará de sus
propiedades.
 Los delimitadores ‘ ’ están en la tecla de la letra O.

EVAL
Evaluate: evaluar.
Devuelve el valor de una función. Por ejemplo, si guardamos la función 3*H en la
variable F,
‘3*H’
‘F’
al llamar a F, lo que obtenemos en la pantalla es 3*H. Para conseguir el valor de
3*H, es decir 99, debemos pulsar .

PURGE
En inglés: purgar, limpiar. Permite borrar variables, programas, etc. Por ejemplo:

‘F’
PURGE

Otra forma de hacerlo sería usando la tecla F5 desde el menú de herramientas.

‘F’

También se puede borrar un grupo de variables de la siguiente manera:


{a b c} PURGE

macdenaif 9
Mayo 2006 (revisado en julio de 2007).

Algunas teclas.

MODE

Con ella se accede al menú MODE, donde podemos configurar los modos de
funcionamiento de la calculadora. La herramienta CHOOSE despliega una ventana
de opciones.

En el directorio CAS (Computer Algebra System) podemos, por ejemplo, cambiar


el nombre de la variable independiente o la forma de presentación de resultados y
constantes. Para más detalles véase el apéndice C del manual de instrucciones.

VAR

Da acceso al menú de variables, donde encontraremos los programas y variables


que hayamos creado. Estos aparecerán sobre las teclas F1 a F6.

TOOL

Muestra el menú de herramientas.

NEXT

Permite rotar los elementos presentados sobre las teclas F1 a F6 cuando éstos son
más de seis.

macdenaif 10
Mayo 2006 (revisado en julio de 2007).

INTRODUCCIÓN A LA PROGRAMACIÓN

Trabajando con un dato de la pila.


Supongamos que queremos calcular la longitud de una circunferencia.
L = 2 π R.
Vamos a hacer un pequeño programa que tome de la pila el valor de R y nos
devuelva el valor de L. Para ello escribiremos, dentro de los delimitadores de
programa « » la misma secuencia de operaciones que usaríamos si ya tuviéramos
el valor de R en la pila.
«» 2 * π *
«2*π*»

Después pulsamos para salir del modo de edición. Para guardar el programa
le daremos un nombre que nos permita identificarlo cuando lo queramos usar, por
ejemplo Lcir.

‘Lcir’

Una vez guardado, podemos ejecutarlo llamándolo por su nombre, es decir


escribiendo Lcir y pulsando , o de manera mucho más práctica desde el menú
de variables . Primero escribimos el valor de R y luego pulsamos la tecla de
función que se encuentra debajo de Lcir (F1) e inmediatamente se nos muestra el
resultado, como ocurriría si usáramos una tecla de función cualquiera, por ejemplo
LOG para calcular un logaritmo.

Las variables y programas que


aparecen en estas imágenes
no tienen porqué coincidir
con las que puedan haber en
tu calculadora.

Para recuperar el menú de herramientas pulsaremos .

Manipulando datos en la pila. Comandos del menú STACK.


En el menú STACK (pila en inglés) encontramos un grupo de comandos que
permiten manipular los datos de la pila. A continuación veremos un ejemplo de su
uso. Supongamos ahora que queremos calcular la hipotenusa de un triángulo
rectángulo.
H = √(A2 + B2)
Siguiendo en la línea del programa anterior, si tuviéramos en la pila los valores de
A y B, para calcular el cuadrado de B solo tendríamos que pulsar [x2] pero para
calcular el cuadrado de A deberíamos intercambiar la posición de los datos en la
pila (instrucción SWAP), pasando B2 arriba y A abajo, para después volver a pulsar
[x2] calculando así A2.

macdenaif 11
Mayo 2006 (revisado en julio de 2007).

3 4 (SWAP)

Luego, sumaríamos ambos valores pulsando [+] y finalmente calcularíamos la raíz


cuadrada [√x]. El programa quedaría así:
« SQ SWAP SQ + √ »
 El comando SWAP (trocar, permutar) se encuentra en el menú de
programación (teclas [] ) dentro del submenú STACK, o también en el
catálogo de comandos (excepto hp49g) pulsando [] . El catálogo tiene
opción de búsqueda por inicial, pulsando y la letra correspondiente.
Para guardar el programa haremos lo mismo que antes:
‘HIP’

Y para usarlo pondremos los valores de A y B en la pila y desde la barra de


variables ejecutaremos HIP. En el ejemplo: 3 4 HIP.
 El submenú STACK se encuentra también en el menú de herramientas TOOL.
 El comando SWAP se puede usar manualmente mediante la tecla .

Otros comandos del menú STACK:


DUP duplica el contenido del primer nivel de la pila.
DROP borra el contenido del primer nivel de la pila.
ROLL hace rodar los n primeros niveles de la pila, previa introducción del
argumento n, pasando el contenido del nivel n al nivel 1.
ROLLD hace rodar los n primeros niveles de la pila, previa introducción del
argumento n, pasando el contenido del nivel 1 al nivel n.

El siguiente programa convierte grados, minutos y segundos a su equivalente en


grados. De sexagesimal a decimal.

« 3600 /
3 ROLLD
60 /
++»

macdenaif 12
Mayo 2006 (revisado en julio de 2007).

También podría usarse el comando SWAP, que intercambia los niveles 1 y 2.


« 3600 / SWAP 60 / + + »

Variables locales.
Conforme va aumentando el número de datos de entrada y la complejidad de las
operaciones, se hace más engorroso el uso de los comandos de la pila. Para
ahorrar trabajo y facilitar la comprensión del programa podemos emplear variables
locales. Estas solo existen durante la ejecución del programa y no aparecen en el
menú de variables.
A continuación haremos un programa para calcular una de las raíces de una
ecuación de segundo grado, usando variables locales.
ax2 + bx + c = 0
X1 = (-b + √(b2 – 4·a·c)) / (2·a) X2 = (-b - √(b2 – 4·a·c)) / (2·a)

El programa para calcular X1 podría ser este:

« → a b c ‘(-b + √(b^2 – 4*a*c))/2/a’ »


 a, b y c deben ir separadas por un espacio. Obsérvese que entre los apóstrofes la
notación es algebraica.

Partes del programa:


« ............ comienzo de programa.
→abc ............ guarda los datos de la pila en las variables a, b y c.
‘(-b + √(b^2 – 4*a*c))/2/a’ ............ función a calcular con dichas variables.
» ............ fin de programa

También podríamos hacerlo de la siguiente forma, usando un subprograma y


notación RPN:
« → a b c « b NEG b SQ 4 a c * * - √ + 2 a * / » »

Partes del programa:


« ............ comienzo de programa.
→abc ............ guarda los datos de la pila en las variables a, b y c.
« ............ comienzo del subprograma.
b NEG ............ b [+/-] presenta el valor de b y le cambia el signo.
b SQ ............ b [x2] presenta el valor de b y lo eleva al cuadrado.
4ac** ............ presenta los valores 4, a y c y los multiplica.
- ............ resta el último valor calculado (4*a*c) al anterior (b^2).
√ ............ halla la raíz cuadrada.
+ ............ suma este último resultado al primero (-b).
2a* ............ presenta los valores 2 y a, y los multiplica.
/ ............ divide el valor de (-b + √(b^2 – 4*a*c)) entre 2*a
» ............ fin del subprograma.
» ............ fin del programa.

Lo podemos guardar como X1.


‘X1’

macdenaif 13
Mayo 2006 (revisado en julio de 2007).

Este programa, en cualquiera de las dos versiones, se usa igual que los anteriores,
poniendo primero los valores de a, b y c (por ese orden) en la pila, y ejecutando
después el programa.
Por ejemplo, para la ecuación: 3x2 + 6x - 5 = 0

3 6 -5 X1

COMANDOS

STO+ almacena un valor en una variable, sumándolo al que ésta ya contenía.


STO* multiplica por un valor dado el contenido de una variable.

Como ejemplo de STO+ haremos un programa que calcule el siguiente sumatorio:


Σ [Ci · (Ai – Bi)2]
C1 * (A1 – B1)2 + C2 * (A2 – B2)2 + C3 * (A3 – B3)2 + ...
Ai, Bi y Ci se introducirán en la pila por ese orden.

« t A B C ‘(A-B)^2*C ’ EVAL ‘SUMA’ STO+ »


‘INDAT’

Podríamos crear un subdirectorio con el nombre que queramos darle al programa,


guardar allí el programa anterior como INDAT (entrada de datos) y el siguiente
como BORRA para poner a cero la variable SUMA.
« 0 ‘SUMA’ STO »
‘BORRA’
Para que STO+ funcione, la variable SUMA debe ser declarada previamente, por
lo que antes de usar INDAT por primera vez tendremos que usar BORRA. Cómo
crear subdirectorios se explica en el capítulo 2 de la guía de usuario.
Para hacer los cálculos introducimos un grupo de tres datos en la pila

A1
B1
C1

y pulsamos INDAT.

macdenaif 14
Mayo 2006 (revisado en julio de 2007).

Después,

A2
B2
C2
INDAT

y así las veces que queramos. Cuando se quiera saber el valor del sumatorio,
pulsar SUMA.

Variables globales.
En el ejemplo anterior, la variable SUMA es una variable global. Así como las
variables locales (A, B y C) solo existen durante la ejecución del programa, las
variables globales permanecen, pueden verse en el menú de variables y ser
llamadas, cambiadas o purgadas desde otros programas.

Pidiendo datos
Hasta ahora hemos trabajado con datos que previamente se habían puesto en la
pila. Para evitar tener que recordar el orden en que deben introducirse los datos o
el tipo de dato requerido, lo mejor es que el propio programa los pida, los
almacene en variables locales o globales, realice los cálculos y nos devuelva los
resultados.
COMANDOS
INPUT suspende la ejecución de un programa a la espera de un dato de entrada.
OBJt descompone un objeto en sus partes.
Para apreciar la función que realizan ambos comandos, haremos un programa que
nos pida dos números.

«
"INTRODUZCA NUMERO A"
""INPUT
"INTRODUZCA NUMERO B"
""INPUT
»

macdenaif 15
Mayo 2006 (revisado en julio de 2007).

Al introducir los dos números, vemos que aparecen entre delimitadores “ ”, o sea
que la calculadora los toma como cadenas de caracteres. Si ahora sumamos
ambos “numeros” el resultado es la suma de las cadenas.

Veamos qué ocurre al añadir el comando OBJt


«
"INTRODUZCA NUMERO A"
""INPUT OBJt
"INTRODUZCA NUMERO B"
""INPUT OBJt
»
En este caso la suma será 951. Para que el programa nos dé directamente el valor
de la suma basta con añadirle el signo +.
«
"INTRODUZCA NUMERO A"
" " INPUT OBJt
"INTRODUZCA NUMERO B"
" " INPUT OBJt
+
»

El siguiente programa calcula la tensión en cada elemento de un circuito de


corriente alterna RLC serie, la intensidad de corriente I, las tres componentes de
potencia (P, Q y S), el factor de potencia o cosϕ, el senϕ, la impedancia Z, la
reactancia inductiva XL, la reactancia capacitiva XC y la pulsación ω. Los datos de
entrada son la tensión V, la frecuencia f, R, L y C. Los cálculos a realizar son los
siguientes:

ω = 2*π*f XL = ω*L XC = 1/(ω*C)

Z = √R2 + (XL-XC)2

cosϕ = R/Z senϕ = (XL-XC)/Z I = V/Z

S = V*I P = S* cosϕ Q = S* senϕ

VR = I*R VL = I*XL VC = I*XC

macdenaif 16
Mayo 2006 (revisado en julio de 2007).

COMANDOS
RND redondea un número a la cantidad de decimales indicada. 2 RND redondea a
las centésimas, 3 RND redondea a las milésimas, etc.

Programa.
«
“V = ?” “ ” INPUT OBJ→ ‘V’ STO
“f = ?” “ ” INPUT OBJ→ ‘f’ STO
“R = ?” “ ” INPUT OBJ→ ‘R’ STO
“L = ?” “ ” INPUT OBJ→ ‘L’ STO
“C = ?” “ ” INPUT OBJ→ ‘C’ STO
« f 2. * π * 3. RND » ‘ω’ STO
« ω L * 3. RND » ‘XL’ STO
« ω C * INV 3. RND » ‘XC’ STO
« XL XC – SQ R SQ + √ 3. RND » ‘Z’ STO
« R Z / 3. RND » ‘coθ’ STO
« XL XC – Z / 3. RND » ‘seθ’ STO
« V Z / 3. RND » ‘I’ STO
« V I * 3. RND » ‘S’ STO
« S coθ * 3. RND » ‘P’ STO
« S seθ * 3. RND » ‘Q’ STO
« I R * 3. RND » ‘VR’ STO
« I XL * 3. RND » ‘VL’ STO Ejemplo de circuito.
« I XC * 3. RND » ‘VC’ STO
»

Una vez guardado el programa (yo le he dado el nombre


RLC) pulsamos RLC y se nos piden los datos de tensión V,
frecuencia f, resistencia R, autoinducción L y capacidad C.
Después de introducir los datos no aparece ningún resultado
en la pantalla, pero los tenemos todos en el menú de
variables. Solo hay que usar las teclas F1 a F6 y la tecla
[NXT].

Obsérvese que las variables ω, XL, XC, y siguientes no contienen solo el valor
calculado sino pequeños programas que realizan ese cálculo. Eso significa que
cada vez que la variable ω es requerida, se ejecuta el programa « f 2. * π * 3.
RND », lo cual nos permite cambiar cualquier valor de entrada sin tener que
reiniciar el programa. Si, por ejemplo, queremos cambiar el valor de C, solo
tenemos que escribir el nuevo valor y pulsar ‘C’ STO (o también [] C ) y todos
los cálculos en los que intervenga la variable C se verán modificados.

macdenaif 17
Mayo 2006 (revisado en julio de 2007).

Se completa con este otro, que yo he llamado LIMPIA, y que borra todas las
variables creadas por el programa RLC.

« { VC VL VR V Q P S I seθ coθ Z XL XC ω R L C f } PURGE »

 Si queremos calcular un circuito LC haremos R = 0


 Si queremos calcular un circuito RC haremos L = 0
 Y si queremos calcular un circuito RL haremos C = ∞

Presentación de resultados.
Para ver las formas en que se pueden presentar los resultados, haremos un
sencillo programa que calcule el volumen y la superficie de una esfera, conocido el
radio.
«
V = 4/3*π*R3 "radio="
" " INPUT OBJt
S = 4*π*R2 'R' STO
'4/3*π*R^3' EVAL
'4*π*R^2' EVAL
‘R’ PURGE
»

¿Cuál es el volumen y cuál la superficie? En la cuarta línea del programa vemos


que primero se presenta '4/3*π*R^3' y después '4*π*R^2', por eso sabemos que
el volumen es el resultado que aparece en el segundo nivel de la pila (268,08) y la
superficie el resultado que aparece en el primer nivel de la pila. Si invirtiésemos
esas líneas de programa los resultados aparecerían al revés.
A continuación añadiremos una etiqueta a cada resultado para saber cuál es cual.

COMANDOS

TAGt pone una etiqueta frente a un resultado presentado en la pila.

«
"radio="
" " INPUT OBJt
'R' STO
'4/3*π*R^3' EVAL 2 RND
"Volumen" tTAG

macdenaif 18
Mayo 2006 (revisado en julio de 2007).

'4*π*R^2' EVAL 2 RND


"Superficie" tTAG
‘R’ PURGE
»

COMANDOS

MSGBOX (message box) abre un cuadro de texto.

«
"radio="
" " INPUT OBJt
'R' STO
'4/3*π*R^3' EVAL 2 RND
'V' STO
'4*π*R^2' EVAL 2 RND
'S' STO
"Vol.=" V + MSGBOX
"Sup.=" S + MSGBOX
{ R S V } PURGE
»

Bucles

COMANDOS

FOR - NEXT
Se utilizan para crear un bucle de repetición en un programa.

Estos comandos permiten asignar a una variable (X) diferentes valores


comprendidos entre dos números o dos variables (m y n). Inicialmente, X = m. En
cada ciclo se incrementa el valor de X y se repiten las instrucciones que están
entre FOR y NEXT hasta que X = n.
El siguiente programa pide un número N y presenta el cuadrado de todos los
enteros consecutivos comprendidos entre 1 y N.

«
"N=" .......... Pide un valor de N.
" " INPUT OBJt 'N' STO .......... Lo guarda en la variable N.
1 N FOR A .......... Para valores de A entre 1 y N.
'A^2' EVAL .......... Calcula A2.
NEXT .......... Retorna al comando FOR, incrementando A
» hasta que A = N.

macdenaif 19
Mayo 2006 (revisado en julio de 2007).

También puede escribirse así:

«
"N="
" " INPUT OBJt 'N' STO
1 N FOR A
A SQ
NEXT
»

Este otro programa calcula el factorial de un número N.

«
1 'FA' STO
"N="
" " INPUT OBJt 'N' STO
1 N FOR A
A 'FA' STO*
NEXT
FA
{ N FA } PURGE
»

Secuencia de ejecución del programa anterior para N=3.

PASOS VARIABLES PILA


N A FA
1 1
'FA' STO 1
"N=" 1 N=
" " INPUT 1 3 ENTER
OBJt 'N' STO 3 1
1 N FOR A 3 1 1
1 A 3 1 1 1
'FA' STO* 3 1 1
NEXT 3 1 1
1 N FOR A 3 2 1
2 A 3 2 1 2
'FA' STO* 3 2 2
NEXT 3 2 2
1 N FOR A 3 3 2
3 A 3 3 2 3
'FA' STO* 3 3 6
FA 3 6 6
{ N FA } PURGE 6

macdenaif 20
Mayo 2006 (revisado en julio de 2007).

COMANDOS

STEP permite establecer el “paso” del incremento en un bucle FOR-NEXT.

El siguiente programa calcula el cuadrado de A desde 1 hasta N, aumentando el


valor de A con incrementos de 0,5. Para N = 3, nos dará 12, 1.52, 22, 2.52, 32.

«
"N="
" " INPUT OBJt 'N' STO
1 N FOR A
A SQ
.5 STEP
»

COMANDOS
WHILE – REPEAT – END

La estructura es esta:
Mientras (WHILE) se cumple una o varias condiciones
Repite (REPEAT) una o varias instrucciones
Fin (END)

Se repite un conjunto de instrucciones mientras se cumpla un conjunto de


condiciones. El comando END determina dónde acaban las instrucciones a repetir.
Para ver cómo funcionan, haremos un programa que partiendo de un valor dado,
calcula la potencia de 2 igual o inmediatamente superior a dicho valor. Por
ejemplo, la potencia de 2 inmediatamente superior a 1000 es 210 = 1024.

«
“N =” .............. Pide un valor para N
“ ” INPUT OBJt
‘N’ STO .............. Lo guarda en la variable N
2 .............. Pone 2 en la pila
WHILE .............. Mientras...
DUP N < .............. ... el valor de la pila sea menor que N... ()
REPEAT .............. ... repite...
2* .............. ... multiplicar por 2
END .............. Fin del bucle.
‘N’ PURGE
»

 El uso del comando DUP se debe a que el valor del nivel 1 de la pila
desaparece tras compararlo con N, por lo que es necesario duplicarlo antes de
realizar la comparación.

macdenaif 21
Mayo 2006 (revisado en julio de 2007).

COMANDOS
DO – UNTIL – END

Estructura similar a la anterior:


Hacer (DO) instrucciones
Hasta (UNTIL) condiciones
Fin (END)

Se repite un conjunto de instrucciones hasta que se cumpla un conjunto de


condiciones.
«
“N =” .............. Pide un valor para N
“ ” INPUT OBJt
‘N’ STO .............. Lo guarda en la variable N
2 .............. Pone 2 en la pila
DO .............. Hacer...
2* .............. ... multiplicación por 2...
UNTIL .............. ... hasta...
DUP N ≥ .............. ... que el valor de la pila sea ≥ N
END .............. Fin del bucle.
‘N’ PURGE
»

Instrucciones de prueba o condición. Submenú TEST.

COMANDOS
IF – THEN – END
IF – THEN – ELSE – END

IF comprueba si una determinada condición se cumple, ejecutando entonces


(THEN) un conjunto de instrucciones. Si la condición no se cumple, las
instrucciones comprendidas entre THEN y END no se ejecutan.
Para ver un ejemplo de su uso haremos un programa que nos dirá si un número
depositado en el nivel 1 de la pila es par.

macdenaif 22
Mayo 2006 (revisado en julio de 2007).

«
2/ ......... Divide entre 2 el dato del nivel 1 de la pila
FP ......... extrae la parte fraccional del resultado
0 == IF ......... si ésta es igual a cero
THEN ......... entonces...
"PAR" MSGBOX ......... muestra el mensaje PAR
END ......... fin
»

ELSE permite ejecutar instrucciones alternativas en caso de no cumplirse la


condición evaluada por el comando IF.
Ahora el programa nos dirá si un número es par o impar.
«
2/ ......... Divide entre 2 el dato del nivel 1 de la pila
FP ......... extrae la parte fraccional del resultado
0 == IF ......... si ésta es igual a cero
THEN ......... entonces...
"PAR" MSGBOX ......... muestra el mensaje PAR
ELSE ......... en otro caso...
"IMPAR" MSGBOX ......... muestra el mensaje IMPAR
END ......... fin
»

Esta sería otra forma de hacerlo:


«
2/
FP
'A' STO
IF 'A≠0' THEN
"IMPAR" MSGBOX
ELSE
"PAR" MSGBOX
END
'A' PURGE
»

macdenaif 23
Mayo 2006 (revisado en julio de 2007).

Operadores lógicos.
Los operadores lógicos son muy utilizados en programación y en la electrónica
digital. Comprueban el estado de unas variables de entrada (A y B en las tablas
inferiores) y en función de éstas producen una respuesta o función de salida (F).
Tanto las entradas como la salida son binarias (o booleanas), es decir que sólo
tienen dos estados posibles, verdadero (1) o falso (0). Para ver la respuesta de un
operador lógico (o de una combinación de ellos) se emplea lo que se conoce como
“tablas de verdad”, en las que se muestran todos los estados posibles de las
entradas y el estado de la salida en cada caso.

AND
El operador AND produce un 1 en la salida cuando todas las entradas son 1.

Entradas Salida
A B F
0 0 0
A
& F
0 1 0
1 0 0
B
1 1 1

OR
Produce un 1 en la salida cuando al menos una entrada es 1.

Entradas Salida
A B F
0 0 0
A
0 1 1 =1 F
1 0 1
B
1 1 1

XOR (OR exclusiva)


Produce un resultado verdadero cuando una y sólo una de las entradas es 1.

Entradas Salida
A B F
0 0 0 A
0 1 1 =1 F
1 0 1 B
1 1 0

NOT
El operador NOT niega el estado de una variable binaria.

A F (NOT A)
0 1
1 0 A 1 F

macdenaif 24
Mayo 2006 (revisado en julio de 2007).

Dicho de otro modo, y trasladándolo a la programación, un operador AND


(combinado con los comandos IF – THEN) producirá una respuesta positiva si se
cumplen todas las condiciones exigidas, un operador OR producirá una respuesta
positiva cuando se cumpla al menos una de las condiciones y un operador XOR
dará una respuesta positiva cuando únicamente se cumpla una de las condiciones.
Por ejemplo, vamos a hacer un programa que tome tres números de la pila (A, B y
C) y muestre el mensaje “OK” cuando A>B y B<C.

« t A B C « IF ‘A>B’ ‘B<C’ AND THEN “OK” MSGBOX END » »

HP-41-C (1979)

macdenaif 25
Mayo 2006 (revisado en julio de 2007).

Supongamos que hemos linealizado una función (respuesta de un sistema) en dos


tramos rectos, tal como se muestra en la figura.

Sabemos que en el intervalo [–50, 0] la ecuación de la recta es

(a) y = 0.2125 x + 25

en el intervalo [0, 32] es

(b) y = 0.7812 x + 25

Y fuera de esos intervalos no tiene sentido calcular la función por este método.
A continuación haremos un programa que nos pedirá un valor de x. Si –50 ≤ x < 0
aplicará la fórmula (a), si 0 ≤ x ≤ 32 aplicará la fórmula (b) y si x < -50 ó x > 32
mostrará el mensaje “entrada no válida”.

«
"x=" " " INPUT OBJt
'A' STO
IF 'A ≥ -50' 'A < 0' AND ............. Si A ≥ -50 y A<0
THEN
.2125 A * 25 +
END
IF 'A ≥ 0' 'A ≤ 32' AND ............. Si A ≥ 0 y A ≤ 32
THEN
.7812 A * 25 +
END
IF 'A < -50' 'A > 32' OR ............. Si A<-50 ó A>32
THEN
"ENTRADA NO VALIDA"
MSGBOX
END
»

macdenaif 26
Mayo 2006 (revisado en julio de 2007).

Ventana de selección.

COMANDOS

CHOOSE abre una ventana de selección con opciones para elegir.

A cada opción se le asigna un número que será depositado en la pila.


«
"SELECCIONE OPCION"
{{"NORTE"1} {"SUR"2}}1
CHOOSE
»
En este ejemplo, la opción NORTE deja en la pila el valor 1 y la opción SUR el
valor 2. El número que está fuera de las llaves (1 en el ejemplo) determina cuál de
las opciones vendrá seleccionada por defecto. El propio comando deposita
también una “huella” (puede verse como 1. en la imagen superior derecha) que, si
no se va a usar, conviene eliminar con el comando DROP.

«
"SELECCIONE OPCION"
{{"NORTE"1} {"SUR"2}}1
CHOOSE DROP
»

A continuación haremos un programa para convertir litros a galones (Reino Unido)


o a galones (EE.UU).

«
"De litros a..."
{ { "Galones(RU)" .21996 }
{ "Galones(EEUU)" .26417 }} 1
CHOOSE DROP
*
»

Introducimos un valor en litros, por ejemplo 5, llamamos al programa, elegimos


una opción y pulsamos OK.

macdenaif 27
Mayo 2006 (revisado en julio de 2007).

Listas.
Una lista es un conjunto de objetos (números, letras, cadenas, variables,
programas, otras listas, etc.) entre delimitadores { } y separados por espacios.
Ejemplos:
{1 2 3 4 5}
{A B C}
{“uno” “dos” “tres”}

Cómo crear una lista.


Existen diferentes formas de crear una lista. La más inmediata es escribirla
directamente tal como se ha visto en los ejemplos anteriores. Se puede guardar
como cualquier otro objeto, dándole un nombre y pulsando .
También se puede crear una lista a partir de un grupo de datos de la pila, para
ello debemos indicar el número de elementos que la componen y después usar el
comando tLIST. La operación inversa la realiza el comando OBJt.

Si queremos hacer una lista con todos los elementos que hay en la pila pero no
sabemos cuántos son, podemos usar el comando DEPTH, que los contará y
volcará en la pila dicha cantidad.

macdenaif 28
Mayo 2006 (revisado en julio de 2007).

Operaciones con listas.

Producto de una lista por una constante.

{123}*2={246}

Producto de una lista por una variable.

{ 1 2 3 } * A = { A 2·A 3·A }

Producto de una lista por una lista.

{ 1 2 3 } * { 2 3 4 } = { 2 6 12 }

Adición de una constante a una lista. Comando ADD.

{123}
2
ADD

Adición de dos listas. Comando ADD.

{345}
{423}
ADD

Suma de una lista y una constante o una variable.

{123}+4={1234}
{123}+P={123P}

Suma de dos listas.

{1 2 3 } + { 4 5 6 } = { 1 2 3 4 5 6 }

Aplicación de funciones a una lista.

√ { 4 9 16 } = { 2 3 4 }

COS { 0 60 90 } = { 1 ½ 0 }

macdenaif 29
Mayo 2006 (revisado en julio de 2007).

Flags.
Los flags (banderas o señales) son indicadores de estado de las variables del
sistema. La bandera es un valor booleano, sólo admite dos estados: activada o
desactivada. Las banderas proporcionan cierto control sobre cómo funciona la
calculadora y cómo muestra la información. Por ejemplo, si la señal –117 está
desactivada, los menús se muestran en una ventana de selección, pero si está
activada las opciones aparecen sobre las teclas F1 a F6.

Existen 256 banderas, numeradas desde –128 hasta 128. Las negativas son
banderas del sistema, las positivas están disponibles para el usuario y se usan en
la programación para ayudar a controlar el flujo de programa.

Cómo ver el estado de las banderas del sistema. Menú System Flags.
1. Pulsar la tecla
2. Pulsar F1 .

Menú System Flags Bandera –40. Activación del reloj desde


Muestra el reloj. menú Display Modes
El menú System Flags sólo muestra las banderas del sistema y sólo muestra el
valor absoluto de éstas.

Cómo activar y desactivar banderas.


Método 1. Desde el menú System Flags, seleccionar la bandera deseada, pulsar
3CHK y después OK o .

Método 2. Desde la pila o desde un programa. Escribir el número de la bandera y


pulsar . Escribir el comando SF (Set Flag) para activar o el comando CF (Clear
Flag) para desactivar y pulsar de nuevo. También puede escribirse el número
de la bandera seguido de un espacio y el comando, y después pulsar .

macdenaif 30
Mayo 2006 (revisado en julio de 2007).

Método 3. Algunas banderas pueden ser cambiadas desde ciertos menús, por
ejemplo la señal –40 que muestra el reloj en la pantalla, puede cambiarse también
desde el menú Display Modes DISP.

Para más información consultar la guía de usuario, capítulos 1, 2, 24 y apéndices.

HP-65 (1974)

macdenaif 31
Mayo 2006 (revisado en julio de 2007).

EJEMPLOS

Programa ejemplo de manejo de listas y bucle FOR-NEXT.


Fórmula de Friis.

Este programa calcula el factor y la figura de ruido total de un sistema de


recepción de TV mediante la fórmula de Friis, tomando como datos de entrada la
figura de ruido F y la ganancia G de cada tramo, expresadas en decibelios.

La fórmula de Friis es la que se ve en


( f2 − 1) ( f3 − 1) ( f4 − 1) el cuadro de la izquierda, donde:
f := f1 + + + + ....
g1 g1 ⋅ g2 g1 ⋅ g2 ⋅ g3 f = factor de ruido.
g = ganancia.

Supongamos que queremos calcular la figura de ruido F (F = 10*log f ) del


sistema que se muestra a continuación.

En el caso del amplificador (elemento activo) F y G vienen indicados por el


fabricante.
Para los elementos pasivos, se considera que la figura de ruido F es igual a la
atenuación. Además, ganancia y atenuación son conceptos inversos, por lo tanto:

F = At
⇒ G = -F
At = -G

La siguiente tabla muestra los valores de F (figura de ruido) y G (ganancia) en


decibelios para cada tramo de la instalación.

Tramo Tipo de elemento Elemento Fn Gn


1 pasivo Cable de bajada 2 -2
2 activo Amplificador 5 38
3 pasivo Distribución 22 -22

macdenaif 32
Mayo 2006 (revisado en julio de 2007).

Pero la fórmula de Friis no trabaja con F y G en decibelios (escala logarítmica),


sino con valores lineales de f y g. Así pues, antes de aplicar la fórmula debemos
hacer la siguiente conversión:

F = 10*log f ⇒ f = 10^(F/10)

G = 10*log g ⇒ g = 10^(G/10)

Fn fn Gn gn
2 1,58489319 -2 0,63095734
5 3,16227766 38 6309,57344
22 158,489319 -22 0,00630957

Aplicando la fórmula, tendremos:

f = 1,58 + (3,16 – 1)/0,63 + (158,49 – 1)/(0,63 * 6309,57) = 5,05


F = 10 * log f = 7,03 dB

Pues bien, lo que pretendemos al hacer un programa es ahorrarnos todo este


trabajo, dar a la calculadora los valores de Fn y de Gn y que ella haga todos los
cálculos.

 Obsérvese que los datos de entrada se escriben separados por espacios. El


comando OBJt los apilará.

Alexander Graham Bell

macdenaif 33
Mayo 2006 (revisado en julio de 2007).

Listado del programa. Comentarios

«
CLEAR ................ Limpia la pantalla
1.'g' STO ................ Valor inicial de g = 1
"Entra 
F1 F2 F3... F(n)" ................ Pide los valores de Fn.
"" INPUT OBJt ................ Los toma del nivel 1 de la pila y los pone en
columna (los apila).
DEPTH tLIST ................ Los cuenta y crea una lista.
10/ ALOG ................ Convierte lista de Fn en lista de fn.
'EFES' STO ................ Guarda la lista como EFES.
EFES HEAD 'f' STO ................ Toma el 1º de la lista y lo guarda en la variable f.
EFES TAIL 'EFES' STO ................ Elimina ese 1er elemento de la lista.
EFES SIZE 'N' STO ................ Cuenta los elementos de la lista y guarda el valor
en N.
"Entra 
G1 G2... G(n-1)" ................ Pide los valores de Gn.
"" INPUT OBJt ................ Los toma del nivel 1 de la pila y los pone en
columna.
DEPTH tLIST ................ Los cuenta y crea una lista.
10/ ALOG ................ Convierte lista de Gn en lista de gn.
'GES' STO ................ Guarda la lista como GES.
1 N FOR M ................ Para valores de M desde 1 hasta N
EFES M GET 'F' STO ................ Toma el elemento M-ésimo de la lista
EFES y lo guarda en F.
GES M GET 'g' STO* ................ Multiplica g por el elemento M-ésimo de la
lista GES.
'(F-1)/g' EVAL 'f' STO+ ................ Calcula ‘(F-1)/g’ y lo acumula en f.
NEXT ................ Vuelve al comando FOR hasta que M = N
f 2.RND ................ Presenta f y lo redondea a dos decimales.
"f" tTAG ................ Le pone la etiqueta “f :”
f LOG 10* 2 RND ................ Calcula F en decibelios con dos decimales.
"F(dB)" tTAG ................ Le pone la etiqueta “F(dB) :”
{ N F f g EFES GES } PURGE ................ Borra los objetos creados por el programa.
»

COMANDOS

HEAD extrae el primer elemento de una lista.


TAIL elimina el primer elemento de una lista.
SIZE proporciona el número de elementos que contiene la lista.
GET extrae el elemento n-ésimo de una lista, previa introducción de n.

macdenaif 34
Mayo 2006 (revisado en julio de 2007).

Programa ejemplo de ventanas de selección e instrucciones IF-THEN.

Orientación de antenas parabólicas


Este programa calcula la orientación (respecto al norte magnético), la elevación y
el desplazamiento de la polarización de antenas parabólicas en el hemisferio norte.

Acimut Elevación Polarización

Definiciones:
• Acimut: ángulo que hay que girar la antena con respecto a la dirección del
norte (o sur) geográfico.
• Elevación: ángulo que hay que elevar la antena con respecto al plano
horizontal.
• Desplazamiento de la polarización: ángulo que hay que girar el dipolo con
respecto al eje vertical para recibir correctamente la señal del satélite.
• Declinación magnética: diferencia entre la dirección del norte geográfico y
la del norte magnético. Cambia según la zona y varía con el tiempo. En
Internet se pueden encontrar calculadoras de la declinación magnética.
• Orientación: ángulo que hay que girar la antena con respecto al norte (o sur)
indicado por la brújula.
• Distancia al satélite: los satélites de comunicaciones se hallan en una órbita
situada en el plano del ecuador, con un radio de aproximadamente 42000 Km,
36000 sobre la superficie de la tierra, llamada órbita geoestacionaria o cinturón
de Clarke. La distancia entre el satélite y la antena varía según la ubicación de
ambos.

Arthur C. Clarke

macdenaif 35
Mayo 2006 (revisado en julio de 2007).

Listado Pantallas
«
CLEAR DEG
"Latitud N" " " INPUT OBJt 'LA' STO
"Longitud" " " INPUT OBJt 'LO' STO
LO 0 ≠ IF THEN
"OPCION"{{"ESTE"1} {"OESTE"-1}}1
CHOOSE DROP 'LO' STO*
END
"Posición sat." " " INPUT OBJt 'LS' STO
LS 0 ≠ IF THEN
"OPCION"{{"ESTE"1} {"OESTE"-1}}1
CHOOSE DROP 'LS' STO*
END
"Declinación mag." " " INPUT OBJt 'DM' STO
DM 0 ≠ IF THEN
"OPCION"{{"ESTE"-1} {"OESTE"1}}1
CHOOSE DROP 'DM' STO*
END
"Angulo offset" " " INPUT OBJt 'AO' STO
« LO LS - » 'FI' STO
« FI TAN LA SIN / ATAN 180 DM + + » 'ORI' STO
« LA COS FI COS * ACOS » 'b' STO
« b COS .151269 - b SIN / ATAN AO - » 'EL' STO
« FI NEG SIN LA AO + TAN / ATAN » 'PO' STO
« 1. b COS - .42 * 1 + √ 35786 * » 'DIS' STO
ORI 1. RND 1_º * "Orient" tTAG
EL 1. RND 1_º * "Elev" tTAG
PO 1. RND 1_º * "Pol" tTAG
DIS 3. RND 1_km * "Dist" tTAG
{LO LA PO EL ORI FI AO DM LS b DIS} PURGE
»

macdenaif 36
Mayo 2006 (revisado en julio de 2007).

Conversión de grados a gg-mm-ss

«
DUP IP 1_º * 'G' STO
FP 60 *
DUP IP 1_arcmin * 'M' STO
FP 60 * 2 RND 1_arcs * 'S' STO
G M S { G M S } PURGE
»

Ruffini
Este programa calcula la división de un polinomio por el método de Ruffini.
(x4 – 4x3 – x2 + 16x – 12) / (x-1)

1 -4 -1 16 -12
1 1 -3 -4 12
1 -3 -4 12 0

1. Introduce coeficientes. 2. Introduce posible raíz. 3. Muestra el cociente.

Si el último término del cociente es cero, significa que la raíz es válida. Si no lo es,
el programa lo indica antes de dar el cociente.

«
CLEAR
"COEFICIENTES"
" " INPUT OBJt
DEPTH 'N' STO
N tLIST
'COE' STO
"RAIZ"
" " INPUT OBJt
'A' STO 1 2
COE HEAD DUP

macdenaif 37
Mayo 2006 (revisado en julio de 2007).

2 N FOR M
A*
COE M GET
+ DUP
NEXT
0 ≠ IF
THEN N tLIST
"NO RAIZ" MSGBOX
ELSE
N tLIST
END
{ A COE N } PURGE 3 4
»

Paolo Ruffini

macdenaif 38
Mayo 2006 (revisado en julio de 2007).

Cualquier duda que pueda surgir sobre el manejo de la calculadora, relacionada


con este texto o no, puedes exponerla en el foro Dudas sobre calculadoras hp en
miarroba.com.

Enlaces:
http://www.sinewton.org/elrincon/

http://www.hpmuseum.org/

http://www.educalc.net/149032.page

http://www.managementsoftware.hp.com/

http://hpuser.8m.com/download.htm

http://directorio.adfound.com/Hardware/Calculadoras/Hewlett-Packard/

Reglas de cálculo 1

Reglas de cálculo 2.

Museo de la calculadora.

macdenaif 39

También podría gustarte