Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
P r o g r a m a c i ó n d e H P 4 8 p a ra P r i n c i p i a n t e s
POR
M ARCOS A. N AVARRO
FFUUNNDDAAMMEENNTTOOSS DDEE UUSSEERR RRPPLL
Edición Revisada y Corregida
Enero 4, 2011
CO N TE N ID O
INTRODUCCIÓN
C A P Í T UL O I . ¡Come nce mos Ya! 1
C A P Í T UL O I I . Va ri a bl e s y S ub rut i n a s 9
C A P Í T UL O I I I . Cade nas y Listas 14
C A P Í T UL O I V. E st ruc t ura s C on d i c i on a l e s 19
C A P Í T UL O V. E n t ra d a y S a l i d a de D a t o s 24
C A P Í T UL O VI . B uc l e s 27
C A P Í T UL O VI I . Ve c t ore s y M a t ri c e s 31
C A P Í T UL O VI I I . C e ro y U n o 34
C A P Í T UL O I X . B uc l e s ( Ú l t i ma pa rt e ) 38
C A P Í T UL O X . M á s S o bre S a l i d a y E n t ra d a de D a t o s 40
C A P Í T UL O X I . M a n e j o Av a n z a d o d e Grá f i c o s 44
C A P Í T UL O X I I . R e p r e s e n t a c i o n e s G r á f i c a s B i d i me n s i o n a l e s 49
C A P Í T UL O X I I I . A sun t os D i v e rsos 54
INTRODUCCIÓN
Las calculadoras HP han sido las preferidas de muchos estudiantes, técnicos y
profesionales alrededor del mundo. Pueden ser programadas en varios lenguajes y
en el presente manual se da a conocer el más amigable de todos ellos: ¡El Lenguaje
User Rpl!
Este manual aspira servir de apoyo a aquellas personas que se inician en el mundo
de la programación en User Rpl. Aquí son expuestos temas fundamentales de dicho
lenguaje de una forma gradual y mediante el empleo de diversos elementos
didácticos.
Quiero agradecer a todas las personas que han leído el manual, a quienes les
dedico esta edición.
Marcos A. Navarro
ing.mnavarro@hotmail.com
1
Fundamentos de User Rpl
Con el texto en el nivel 1: de la pila,
escriba el comando MSGBOX y
presione ENTER (ver figura 1.2).
figura 1.4
En el Apéndice G de la Guía de
Usuario de la HP48 se encuentra la lista
de comandos.
figura 1.3
Usando el Apéndice G de la Guía de
Usuario , investigue qué hacen los
Otro comandos que podemos citar es siguientes comandos:
el comando BEEP, el cual produce un
0 OFF 5 SQ 10 SIN
pitido, dada la frecuencia (en hertz), en
1 MEM 6 FP 11 STO
el nivel 2: ; y el tiempo de duración (en
2 DUP 7 + 12 VARS
segundos), en el nivel 1: 3 SWAP 8 ABS 13 PGDIR
El ejemplo de la figura siguiente 4 DROP 9 DEG 14 TRN
produce un pitido de 1500 hertz,
durante 1 segundo:
2
Fundamentos de User Rpl
figura 1.5
¿Cómo sería, si quisiéramos que el
pitido se produjera antes del mensaje?
Ahora, dentro de los delimitadores, En este caso escribimos:
escriba un texto cualquiera (entre
<< 1500 1 BEEP “BIENVENIDOS
comillas dobles) seguido por el
AL USER RPL” MSGBOX >>
comando MSGBOX.
3
Fundamentos de User Rpl
4
Fundamentos de User Rpl
5
Fundamentos de User Rpl
luego, el comando + suma el 3 con el Otra forma sería: << - DUP * >>
número dado:
2: Los comandos de pila pueden llegar a
1: (número dado + 3) ser muy útiles a veces.
6
Fundamentos de User Rpl
7
Ejercicios: Dados tres números x, y, z, en (d) Escriba programas para calcular el
la pila: volumen de:
3: z 1) un cilindro.
2: y 2) una esfera.
3) un cono.
1: x 4) una pirámide.
(a) Escriba programas que calculen:
(e) Utilice el comando para programas
1) (x+y) / z
2) y/x que calculen:
3) y+z 1) (x+y)
4) (x-z) *y
5) (x^y)^z 2) 1/ x
6) [(x^2)-(Y^2)]/z
7) (x*y)+(x*z) 3) [(x^2)+(y^2)]
8) (2*x+3*y)/z
9) x^z
10) (x^2)-2xy+(y^2)
nota: en este último se puede (f) Utilizando el apéndice G de la Guí a
ahorrar memoria si programamos de Usuario , investigue para qué sirven
para: (x-y)^2 los siguientes comandos:
8
C A P Í TU L O I I. V a r i a b l e s y S u b r u t i n a s
2.1 Usando variables en nuestros Al final, las variables son eliminada
programas. de la memoria con { N1 N2} PURGE.
2.1.1 Variables Globales. El programa anterior, tiene la
En ejemplos anteriores, guardamos desventaja de que produce error
nuestros programas como variables cuando los nombres N1 o N2 ya están
globales utilizando la tecla STO. siendo usados por otras variables.
9
Fundamentos de User Rpl
10
Fundamentos de User Rpl
Ejemplo:
Una subrutina puede ser sencilla o Programa Principal:
puede seguir dividiéndose en otras más
pequeñas. Esto permite tener << X Y <<SUB1 SUB2 />>
subrutinas relativamente sencillas, >>
incluso si el programa principal es de
gran tamaño
11
Fundamentos de User Rpl
Primera subrutina(SUB1)
<< X Y + >> El Debuger también puede iniciarse si al
presionar DBUG, el programa se encuentra
Segunda subrutina (SUB2) en el nivel 1:
2:
<< X Y - >>
1: <<programa>>
2.5 El Debuguer.
Para depurar el programa ya cargado
La HP48 posee una herramienta que
solo debemos presionar SST
sirve para encontrar errores en nuestros
sucesivamente para ir ejecutando el
programas. Si escribimos un programa
programa paso a paso. Una instrucción
y no está dando los resultados
será ejecutada por cada vez que
esperados, podemos utilizar el
presiones SST..
Debuguer para encontrar en qué parte
del código se produce el error.
Esto es importante, ya que los errores La opción NEXT muestra la próxima
son frecuentes durantes el desarrollo de instrucción, pero, sin ejecutarla
programas y sin el Debuguer puede
resultar una tarea difícil su localización.
Ejercicio: Cargue el siguiente programa
Para depurar nuestro programa, lo en el Debuger y ejecútelo paso a paso:
primero es colocar su nombre en la pila << 2 1 + 5 * 7 / >>
(‘NOMBRE’)
Luego presionamos las teclas PRG y
La opción SST sirve para
NXT y elegimos la opción de menú
introducirse en el código de una
RUN.
subrutina. Y la opción KILL cancela el
Ahora solo debemos presionar DBUG proceso de depuración.
para iniciar la depuración.
Si usted ha seguidos las
En el Ejercicio anterior, también se
instrucciones anteriores al pie de la
pudo iniciar el proceso de depuración
letra, verá como se activa el indicador
escribiendo el comando HALT dentro
HALT, el cual indica que el programa
del programa:
ya esta cargado en memoria, listo para
ser depurado. << HALT 2 1 + 5 * 7 />>
12
Fundamentos de User Rpl
13
C A P Í TU L O I II. C a d e n a s y L i s t a s
3.1 Trabajando con Textos El comando + funciona también
En esta sección, aprenderemos a crear cuando tenemos una cadena y algunos
programas que trabajen con cadenas de otros tipos de objeto. Aprovechando
caracteres. Las cadenas se conocen esto, escribamos un programa que tome
un número de la pila y nos diga cual es
porque siempre están entre comillas
dobles. Los siguientes son ejemplos de el resultado de sumarle 17:
cadenas: << 17 + “ El Resultado es ” SWAP +
1) “HOLA” MSGBOX >>
2) “1 2 3”
3) “Esto es una Cadena”
OBJ : Divide una cadena en las
palabras que la componen. Si tenemos
El lector ya conoce el comando en la pila el texto “ HOY ES SABADO”
MSGBOX, el cual toma una cadena de y ejecutamos OBJ, el resultado será:
la pila y la presenta en un recuadro. A
3: ‘HOY’
continuación veremos otros comandos
2: ‘ES’
que sirven para manipular cadenas:
1: ‘SABADO’
SIZE : Toma una cadena del nivel 1: y Hagamos un programa que nos diga
devuelve la cantidad de caracteres y la cantidad de palabras de una cadena:
espacios que la forman. <<
CADENA << CLEAR CADENA
+ : Toma dos cadenas de la pila y las OBJ DEPTH “PALABRAS” + MSGBOX
une. Si tenemos por ejemplo : CLEAR >>
2: “Version ” >>
1: “HP48R” Debe tenerse mucho cuidado al usar
al ejecutar << + >> resultara: el comando CLEAR, ya que éste
1: “VersionHP48R” elimina todos los elementos que haya
en la pila. Por eso, en el programa
anterior, antes del CLEAR hemos
Nótese que el comando + no agrega espacio guardado la cadena como variable
entre las dos cadenas, para esto podemos
local.
sustituir “Versión” por “Versión “.
14
Fundamentos de User Rpl
HEAD : Extrae el primer objeto de una Si, por el contrario, tenemos el número
cadena. y queremos el carácter correspondiente,
ejecutamos el comando CHR.
TAIL : Elimina el primer caracter de
una cadena.
(a) Investigue los caracteres
POS : devuelve la posición en que correspondientes a los siguientes
aparece por primera vez un carácter. números:
Si tenemos: 48___ 88___ 120___ 135___
2: “REPUBLICA DOMINICANA” 49___ 89___ 121___ 140___
1: “A” 57___ 90___ 122___ 223___
15
Fundamentos de User Rpl
16
Fundamentos de User Rpl
2: { 1 3 5 3 7 } Ej1:
1: 3 1: { 2 3 5 }
Ej2:
1: { 5 T }
3.2.2 otros comandos para listas.
SORT : Clasifica los elementos de una ADD : Suma los elementos corres-
lista en orden ascendente. pondientes de dos listas.
Ej: Ej:
1: { 1 3 2 7 5} 2: { 5 8 0 }
1: { 1 3 27 }
17
Fundamentos de User Rpl
18
C A P Í TU L O IV . E s tru c tu ras Con d i ci on al es
3.1 Estructuras Condicionales
En este capítulo aprenderemos a Otras pruebas que podemos usar en
hacer que nuestros programas tomen nuestros programas son:
algunos tipos de decisiones. Igual que
Escribamos un programa que tome Diferente de
un número de la pila y si es mayor de Menor que
18 haga un beep. Para esto usaremos la Menor o igual que
estructura IF...THEN...END (si... Mayor o igual que
entonces...fin). El programa será:
<< 18 IF > THEN 1000 .5 BEEP END
>> (Presionar PRG y luego entra al
menú TEST )
Estas pruebas toman dos números de
la pila. Si el resultado de la prueba es
verdadero, se envía un 1 a la pila; si es
falso, se envía un 0.
Si el comando THEN encuentra un 1,
se ejecutan las instrucciones entre
THEN y END. Pero, si encuentra un 0,
las salta.
Diagrama de Flujo para una Estructura
IF...THEN...END Nota: Cualquier número real diferente de
0 es considerado como verdadero.
19
Fundamentos de User Rpl
20
Fundamentos de User Rpl
21
Fundamentos de User Rpl
22
Fundamentos de User Rpl
23
C A P Í TU L O V . E n t ra d a y S a l id a d e D a t o s
Los programas reciben información Córralo en su HP48 para que vea
suministrada por el usuario y luego la cómo funciona. Utilice el DEBUGER.
procesan y producen ciertos resultados. Como verá, lo primero es el texto del
encabezado y luego las etiquetas para
cada dato solicitado.
El número 8 indica la posición del
cursor. Si lo sustituyes por un número
mayor, el cursor aparcera más a la
La HP48 ofrece gran cantidad de
derecha y si lo remplazas por uno
formas para solicitar datos a los
menor, aparecerá más a la izquierda.
usuarios. También ofrecen muchas
otras formas de presentar los resultados Si queremos que se active el teclado
de procesar esos datos. alfabético, solo hay que escribir después
del 8. Esto es importante cuando se requiera
la introducción de textos.
4.1 Entrada de datos. El OBJ separa los datos
Hasta ahora nuestros programas introducidos para que pueda entrar en
toman los datos directamente de la pila. acción el *
Esto puede ocasionar problemas
cuando el usuario no recuerda el orden Si queremos que el cursor sea el de
en que debe introducirlos. Por suerte reemplazo, solo debemos sustituir el 8 por -
existen métodos más eficientes. 8
Comenzaremos estudiando los más
simples:
24
Fundamentos de User Rpl
25
Fundamentos de User Rpl
<<
“CREADO POR MARK ” Caracteres de Fondo.
2 DISP 3 FREEZE Escribamos un programa que
produzca la siguiente presentación.
>>
{1 2 3} DISP
3 FREEZE Gráfico de la pila y lo muestre:
<< LCD 3 FREEZE >>
>>
26
C A P Í TU L O V I. B u cl es
6.1 La Recursividad. Ejercicio: Escriba un programa que calcule el
factorial de un número dado utilizando
Vamos a crear un programa que haga recursividad.
conteo regresivo. O sea que si pones,
por ejemplo, un 500 en la pila, el
programa contara 499, 498, 497,...,1. El 6.2 Estructuras de Bucle.
código será: Las estructuras iterativas o de bucle
<< DUP 0 IF > son un tipo muy especial de estructuras
que permiten que un programa ejecute
THEN 1 - DUP 3 DISP
una serie de comandos varias veces.
RECX END >> Existen dos tipos de estructuras de
bucle: Las definidas y las Indefinidas.
ANÁLISIS
6.2.1 Estructura START...NEXT
EL programa verifica si el número
dado es mayor que cero. En caso Toma dos números (inicio y final) de
afirmativo le resta 1 y muestra el la pila y ejecuta todas las instrucciones
resultado en la pantalla. Luego el que estén entre START y NEXT, una
programa se llama a si mismo por su cantidad de veces igual a la diferencia
nombre (RECX), por lo que la prueba entre los dos números dados.
vuelve a repetirse. El proceso continúa Para aclarar esto, veamos un ejemplo:
hasta que el número en la pila se vuelve Escribamos un programa que
cero. multiplique cuatro números dados en
La Recursividad es un método que se puede la pila. Para esto, podemos escribir:
utilizar para resolver problemas que << * * * >>
implican la realización de muchos pasos
idénticos en sucesión. y efectivamente obtendríamos el
Al utilizar Recursividad se debe tener resultado esperado. Pero, ¿qué pasaría
cuidado de no caer en un proceso que se si necesitáramos un programa que
repita indefinidamente. multiplique 50 números?
27
Fundamentos de User Rpl
28
Fundamentos de User Rpl
29
Fundamentos de User Rpl
Ejercicios
(a) Escriba un programa que calcule:
1) 1 + 1/2 + 1/3 + ... + 1/99
2) 2^1 + 2^2 + 2^3 + ... + 2^50
3) 1/99 + 2/98 + 3/97 + ... + 99/1
30
TE M A V I I. V e c t o r e s y M a t r i c e s
6.1 Trabajando con Sistemas. COL : Es similar al comando
anterior, solo que los vectores son
Cuando hablamos de sistemas, nos
referimos tanto a vectores como a tomados como columnas.
matrices. La HP48 ofrece un extenso
repertorio de comandos para trabajar DET : devuelve el determinante de
con sistemas. En este capítulo una matriz cuadrada.
conoceremos algunos.
TRN : transpone una matriz dada
OBJ : descompone una matriz en
sus elementos. También devuelve las
dimensiones de la matriz en una lista ABS : dado una matriz o un vector,
{filas Columnas} devuelve la raíz cuadrada de la suma
de los cuadrados de sus elementos.
31
Fundamentos de User Rpl
COL+ : Similar al anterior, pero con RE : extrae la parte real de una matriz
columnas. compleja.
32
Fundamentos de User Rpl
cuando x = -7
33
C A P Í TU L O V I I I. Ce ro y Un o
7.1 Operaciones Lógicas. Pero si evaluamos:
Como se pudo ver en capítulos << 3 5 < NOT >>
anteriores, la HP48 puede hacer el resultado será falso (0)
comprobaciones o tests utilizando las
funciones siguientes:
Igual que A A NOT
Diferente de
0 1
< Menor que
> Mayor que 1 0
Menor o igual que
Mayor o igual que
NOT es la única operación que utiliza un
solo valor lógico.
Vimos, por ejemplo, que la función >
prueba si un número en el nivel 2: es
mayor que otro en 1:. En caso de que la
prueba sea verdadera, se enviará un 1 a
AND : Esta operación toma dos
la pila; pero si es falsa se enviará un 0.
valores lógicos de la pila y si alguno de
Se dice que verdadero y falso son ellos es falso, da como resultado un
valores lógicos. cero. Dicho de otra forma, la operación
La HP48 ofrece una serie de AND solo será verdadera cuando los
operaciones para que los dos valores dados sean verdaderos.
programadores puedan trabajar con A B A B AND
valores lógicos:
0 0 0
0 1 0
NOT : Es una operación que sirve
1 0 0
para negar el valor lógico de una
prueba. O sea, si el resultado es 1 1 1
verdadero lo convierte en falso y si es
falso, lo convierte en verdadero.
Si evaluamos por ejemplo
La operación AND es también conocida
<< 3 5 < >> como producto lógico
A*B
el resultado será verdadero (1).
34
Fundamentos de User Rpl
35
Fundamentos de User Rpl
36
Fundamentos de User Rpl
37
C A P Í T U L O I X . B u c l e s ( Ú l t i ma p a r t e )
En capítulos anteriores, estudiamos
los bucles definidos, los cuales se
ejecutan una cantidad de veces
determinada por sus valores inicial y
final.
Ahora vamos a conocer los bucles
indefinidos. Estos se diferencian de los
otros en que pueden decidir por si
mismos si deben repetirse o no. Esta
decisión es tomada por el propio bucle Diagrama reflujo para una Estructura
en base a una prueba que se realiza en DO...UNTIL...END
cada ciclo.
Veamos esto con mas detalle: Mejor utilicemos un 3 DISP para ver
como varia:
8.1 Bucle DO UNTIL END << DO 2 – DUP 3 DISP
En éste, las instrucciones a repetir se UNTIL DUP 0 < END >>
colocan entre los comandos DO y
UNTIL. La prueba debe ser colocada
entre UNTIL y END: Veamos otro ejemplo: Escribamos un
programa que tome un número de la
<< pila y le sume 1 hasta que el usuario
DO instrucciones UNTIL prueba END presione CANCEL:
>> <<
DO 1 + DUP 3 DISP UNTIL 0 END
Lo que hace este bucle es repetir las >>.
instrucciones, seguidas por las pruebas,
hasta que la prueba deje de ser falsa, o
sea, hasta que su resultado sea diferente
de cero. Veamos un ejemplo simple:
Escribamos un programa que tome
un número de la pila y le reste 2
repetidas veces, hasta que el número
sea menor que 0.
<< DO 2 – UNTIL DUP 0 < END >>
38
Fundamentos de User Rpl
39
C A P Í TU L O X . Má s S o b re S a l i d a y En tra d a d e D a to s
9.1 El menú CHOOSE. El cero y el uno pueden ser usados
Este menú ofrece una forma elegante para determinar la evaluación o no del
de pedir a los usuarios que elijan entre programa:
varias opciones. << “TITULO”
Veamos el código para un menú de { { “opcion 1” << programa 1 >> }
este tipo: { “opcion 2” << programa 2 >> }
{ “opcion 3” << programa 3 >> }
<< “TITULO” } 1 CHOOSE
{ { “opcion 1” << programa1 >> } << EVAL >> IFT
{ “opcion 2” << programa2 >> } >>
{ “opcion 3” << programa3 >> }
} 1 CHOOSE >> Como se puede apreciar, el código
para crear un menú CHOOSE es muy
simple: Tenemos una cadena de
El menú creado se muestra a
caracteres para el titulo. Luego, las
continuación:
opciones del menú y al final un 1 que
indica la posición del cursor al
desplegar el menú.
Aunque solo hemos usado tres
opciones para el ejemplo anterior, lo
cierto es que se puede tener todas las
opciones que se necesiten.
Al elegir una opción, el programa Los programas correspondientes a
correspondiente es enviado a la pila sin cada opción pueden ser sustituidos por
evaluar. También es enviado un 1 que cualquier otro objeto.
indica que una opción fue elegida.
Otra cosa que se debe mencionar es
Si se presiona la tecla ON, y esto se que podemos crear menús con opciones
hace cuando se quiere salir del menú que desplieguen otros menús, o sea que
sin elegir ninguna opción, simplemente los menús CHOOSE se pueden anidar.
aparecerá un 0 en la pila.
40
Fundamentos de User Rpl
41
Fundamentos de User Rpl
42
Fundamentos de User Rpl
<<
El Análisis del ejemplo anterior queda
“Programa Ejemplo” 3 DISP 2 WAIT
en manos del lector.
>>
43
C A P Í TU L O X I. M a n e j o A v a n z a d o d e G r á f i c o s
10.1 La utilidad de los dibujos.
Los dibujos pueden ser usados como
apoyo para hacer más comprensible la
entrada o salida de datos.
44
Fundamentos de User Rpl
10.2 Coordenadas.
{#X#Y}
45
Fundamentos de User Rpl
46
Fundamentos de User Rpl
47
Fundamentos de User Rpl
48
C A P Í T U L O X I I . R e p r e s e nt a c i o n e s G r á f i c as B i di m e n s i o n a l es
49
Fundamentos de User Rpl
>> INDEP
<< 4 * COS 2 * >> STEQ
DRAX DRAW PICTURE
>>
50
Fundamentos de User Rpl
>> << …
{ “h-etiqueta” “v-etiqueta”}
13.4 Otros comandos útiles. AXES
RES : Toma un número de la pila y lo LABEL ...
usa para fija el espaciado de los puntos >>
de la representación gráfica.
51
Fundamentos de User Rpl
52
Fundamentos de User Rpl
53
C A P Í TU L O X I I I. A s u n t o s D i v e r s o s
12.1 Programando los modos. 12.2 Otros comandos de Pila.
Existe una serie de comandos que En capítulos anteriores vimos los
sirven para controlar los modo de comandos siguientes:
funcionamiento de la HP48:
DUP : Duplica el objeto del nivel 1:
RAD : Fija el modo angular en
Radianes
DUP2 : Duplica los objetos de los
DEG : Fija el modo angular en grados niveles 1 y 2:
sexagesimales.
GRAD : Fija el modo angular en grados SWAP : Invierte los niveles 1: y 2:
centesimales.
DROP : Elimina el objeto del nivel 1:
54
Fundamentos de User Rpl
ROLL : Mueve el objeto en el nivel n+1 CLUSR : Borra todas las variables de
al nivel 1:. usuario.
55
Fundamentos de User Rpl
56
Fundamentos de User Rpl
57
Fundamentos de User Rpl
58
Fundamentos de User Rpl
12.8 Trabajando con Fechas y Horas. HMS+ : toma dos números de horas
La HP48 dispone de una gran de la pila (en formato HMS) y las suma
cantidad de comandos para trabajar con HMS- : resta dos números de horas
fechas y horas. en formato HMS.
El formato para la fecha es controlado La HP también maneja el tiempo en
por el indicador 42. Si el indicador 42 formato decimal. Una hora y treinta
está activado la fecha se presentara en minutos, por ejemplo, que es una hora y
formato dd.mmaa (día, mes y año) ; en media, puede expresarse en HMS como:
caso contrario la fecha aparecerá en
1.300000.
formato mm.ddaa (mes, día y año)
pero, en formato decimal sería:
El formato para la hora es controlado
por el indicador 41. Si está desactivado 1.5
tendremos formato de 12 horas, pero si
está activado tendremos formato de 24
horas. HMS : convierte de decimal a HMS.
59
Fundamentos de User Rpl
12.9 Alarma.
Retos:
ACK : Reconoce la última alarma mostrada
(a) Escriba un programa que muestre
(ver pagina 26-4 de la Guía de Us uar io )
la hora como un reloj análogo:
ACKALL : Reconoce todas las alarmas
producidas.
El indicador -44 controla el almacenamiento
de las alarmas repetitivas que se reconocen.
60
Fundamentos de User Rpl
61
Fundamentos de User Rpl
62
Fundamentos de User Rpl
63
Fundamentos de User Rpl
64
Fundamentos de User Rpl
65