Beruflich Dokumente
Kultur Dokumente
Fundamentos de User Rpl guía al lector desde sus primeros pasos en el mundo del
User Rpl, conduciéndolo por los aspectos básicos e indicándole el camino a seguir
para lograr un buen dominio de este divertido lenguaje.
El Autor
1
Fundamentos de User Rpl
figura 1.5
2
Fundamentos de User Rpl
3
Fundamentos de User Rpl
4
Fundamentos de User Rpl
5
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 ultimo se puede (f) Utilizando el apéndice G del Manual
ahorrar memoria si programamos de Usuario, investigue para que sirven los
para: (x-y)^2 siguientes comandos:
8
CAPITULO II. Variables y Subrutinas
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 mas
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
Segunda subrutina (SUB2) iniciarse si al presionar DBUG, el
programa se encuentra en el nivel 1:
<< X Y - >> 2:
1: <<programa>>
2.5 El Debuguer.
La Hp48 posee una herramienta que Para depurar el programa ya
sirve para encontrar errores en nuestros cargado, solo tienes que presionar SST
programas. Si escribimos un programa sucesivamente para ir ejecutando el
y no esta dando los resultados programa paso a paso. Una instrucción
esperados, podemos utilizar el será ejecutada por cada vez que
Debuguer para encontrar en que parte presiones SST..
del código se produce el error.
Esto es importante, ya que los errores
son frecuentes durantes el desarrollo de La opción NEXT muestra la próxima
programas y sin el Debuguer puede instrucción, pero, sin ejecutarla
resultar una tarea difícil su localización.
Para depurar nuestro programa, lo Ejercicio: Carga el siguiente
primero es colocar su nombre en la pila programa en el Debuger y ejecútalo
(‘NOMBRE’) paso a paso:
Luego presionamos las teclas PRG y << 2 1 + 5 * 7 / >>
NXT y elegimos la opción de menú
RUN.
La opción SST sirve para
Ahora solo tenemos que presionar
introducirse en el código de una
DBUG para iniciar la depuración.
subrutina. Y la opción KILL cancela el
proceso de depuración.
Si usted ha seguidos las instrucciones
anteriores al pie de la letra, verá como En el Ejercicio anterior, también se
se activa el indicador HALT, el cual
pudo iniciar el proceso de depuración
indica que el programa ya esta cargado escribiendo el comando HALT dentro
en memoria, listo para ser depurado. del programa:
<< HALT 2 1 + 5 * 7 />>
12
Fundamentos de User Rpl
13
CAPITULO III. Cadenas y Listas
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
porque siempre están entre comillas un numero de la pila y nos diga cual es
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 este
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 guardado la cadena como variable
espacio entre las dos cadenas, para local.
esto podríamos sustituir “Versión”
por “Versión “.
ÆSTR : Toma un objeto del nivel 1: y lo
convierte en una cadena.
14
Fundamentos de User Rpl
HEAD : Extrae el primer objeto de una Si, por el contrario, tenemos el numero
cadena. y queremos el carácter correspondiente,
ejecutamos el comando CHR.
TAIL: Elimina el primer caracter de una
cadena.
POS: devuelve la posición en que
(a) Investigue los caracteres
aparece por primera vez un carácter.
correspondientes a los siguientes
Si tenemos: números:
2: “REPUBLICA DOMINICANA” 48____ 88____ 120____
1: “A” 49____ 89____ 121____
57____ 90____ 135____
A cada caracter de la HP 48 le
corresponde un numero único. El REPL : Toma una cadena de 3: y
numero del carácter “A”, por ejemplo remplaza el carácter cuya posición es
es el 65, el de “B” es 66 y el numero de dada en 2: por un carácter dado en 1:
“7” es 55.
Para aclarar esto, veamos un ejemplo.
Si tenemos un carácter en la pila Escribamos un programa que remplace
(entre comillas dobles) y ejecutamos el el tercer carácter de una cadena
comando NUM, obtendremos el cualquiera por la letra M. El código
numero de dicho carácter. será:
<< 3 “M” REPL >>
15
Fundamentos de User Rpl
16
Fundamentos de User Rpl
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
CAPITULO IV . Estructuras Condicionales
3.1 Estructuras Condicionales
En este capitulo 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 numero 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 código será:
<< 18 IF > THEN 1000 .5 BEEP END
>> (Presione la tecla PRG y luego entre
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 numero 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
CAPITULO V. Entrada y Salida de Datos.
Los programas reciben información Córrelo en tu hp para que veas como
suministrada por el usuario y luego la funciona. Utiliza el DEBUGER.
procesan y producen ciertos resultados.
Como veras, lo primero es el texto del
encabezado y luego las etiquetas para
cada dato solicitado.
El numero 8 indica la posición del
cursor. Si lo sustituyes por un numero
mayor, el cursor aparcera mas a la
La HP 48 ofrece gran cantidad de
derecha y si lo remplazas por uno
formas para solicitar datos a los
menor, aparecerá mas 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 quieres que el cursor sea de
en que debe introducirlos. Por suerte
reemplazo, solo tienes que sustituir
existen métodos mas eficientes.
el 8 por -8
Comenzaremos estudiando los mas
simples:
{“:LARGO”: (A+B)/(A-C)
“:ANCHO:” 8}
INPUT OBJ-> *
>>
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.
>>
26
CAPITULO VI. Bucles
6.1 La Recursividad. Ejercicio: Utiliza recursividad para
En esta sección crearemos un crear un programa que calcule el
programa que realice un conteo factorial de un numero dado.
regresiva. Si, por ejemplo, pones un 500
en la pila, el programa contara 499, 498,
6.2 Estructuras de Bucle.
497,...,1. El código será:
Las estructuras iterativas o de bucle
<< DUP 0 IF >
son un tipo muy especial de estructuras
THEN 1 - DUP 3 DISP que permiten que un programa ejecute
RECX END >> una serie de comandos varias veces.
Existen dos tipos de estructuras de
bucle: Las definidas y las Indefinidas.
Para que funcione, el programa debe En esta sección conoceremos los
ser guardado con el nombre RECX. bucles definidos, los cuales se usan
Luego coloca un numero en la pila (por cuando queremos que las instrucciones
ej. 500) y ejecútalo. se repitan una cantidad especificada de
veces.
ANÁLISIS
EL programa verifica si el numero 6.2.1 Estructura START...NEXT
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 continua
hasta que el numero en la pila se vuelve Para aclarar esto, veamos un ejemplo:
cero. Escribamos un programa que
multiplique cuatro números dados en
La Recursividad es un método que se la pila. Para esto, podríamos escribir:
puede 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, ¿que pasaría
cuidado de no caer en un proceso que se si necesitáramos un programa que
repita indefinidamente. multiplique 50 numero?
27
Fundamentos de User Rpl
28
Fundamentos de User Rpl
<<
Decrementos
100 1000 FOR FREC ¿Como seria el programa anterior si
FREC .5 BEEP quisiéramos que la frecuencia se fuera
reduciendo desde 1000 hasta 100?
100 STEP
Una solución seria:
>>
<<
El cambio en los valores inicial y final
100 1000 FOR FREC
no debe sorprendernos ya que ahora el
contador ira desde cien hasta mil. 1100 FREC - .5 BEEP
100 STEP
>>
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
TEMA VII. Vectores y Matrices
6.1 Trabajando con Sistemas. COLÆ: Es similar al comando
Cuando hablamos de sistemas, nos anterior, solo que los vectores son
referimos tanto a vectores como a tomados como columnas.
matrices. La HP 48 ofrece un extenso
repertorio de comandos para trabajar DET: devuelve el determinante de
con sistemas. En este capitulo una matriz cuadrada.
conoceremos algunos de estos
comandos. TRN: transpone una matriz dada
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
CAPITULO VIII. Cero y Uno.
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
Vimos, por ejemplo, que la función > utiliza un solo valor lógico.
prueba si un numero en el nivel 2: es
mayor que otro en 1:. En caso de que la
prueba sea verdadera, se enviara un 1 a
la pila; pero si es falsa se enviara un 0. AND: Esta operación toma dos
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 para
negar el valor lógico de una prueba. O 1 0 0
sea, si el resultado es verdadero lo 1 1 1
convierte en falso y si es falso, lo
convierte en verdadero.
Si evaluamos por ejemplo
La operación AND es también
<< 3 5 < >>
conocida como producto lógico
el resultado será verdadero (1). A*B
34
Fundamentos de User Rpl
OR: Toma dos valores lógicos de la pila Es importante mencionar que las
y si alguno de ellos es verdadero, da operaciones lógicas toman cualquier
como resultado un 1. Dicho de otra numero diferente de cero como valor
forma, la operación OR solo será falsa lógico verdadero
cundo los dos valores dados sean falsos. Solo el cero es considerado como
A B A B OR falso.
0 0 1
0 1 1 7.2 Los Indicadores o Flags.
35
Fundamentos de User Rpl
36
Fundamentos de User Rpl
37
CAPITULO IX Bucles (Ultima parte)
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
8.1 Bucle DO UNTIL END como varia:
En este, las instrucciones a repetir se << DO 2 – DUP 3 DISP
colocan entre los comandos DO y UNTIL DUP 0 < END >>
UNTIL. La prueba debe ser colocada
entre UNTIL y END:
<< Veamos otro ejemplo: Escribamos un
programa que tome un numero de la
DO instrucciones UNTIL prueba END pila y le sume 1 hasta que el usuario
>> presione CANCEL:
<<
Lo que hace este bucle es repetir las DO 1 + DUP 3 DISP UNTIL 0 END
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 numero de la pila y le reste 2
repetidas veces, hasta que el numero
sea menor que 0.
<< DO 2 – UNTIL DUP 0 < END >>
38
Fundamentos de User Rpl
39
CAPITULO X. Mas Sobre Salida y Entrada de datos
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 pedirle 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 opcion 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
43
CAPITULO XI Manejo Avanzado de Gráficos.
10.1 La utilidad de los dibujos .
Los dibujos pueden ser usados como
apoyo para hacer mas comprensible la
entrada o salida de datos.
44
Fundamentos de User Rpl
10.2 Coordenadas.
45
Fundamentos de User Rpl
46
Fundamentos de User Rpl
47
Fundamentos de User Rpl
48
CAPITULO XIII. Representaciones Graficas Bidimensionales.
La Hp 48 dispone de un conjunto de Lo primero que hace el programa es
comandos para representaciones una limpieza de PICT.
graficas. En esta sección se mostrara
Junto a PICT, se elimina también la
como hacer programas para graficar
variable PPAR. Esto hace que el grafico
funciones con coordenadas cartesianas. se genere con los parámetros por
13.1 Funciones. defecto (ver pagina 22-14 del Manual de
Lo primero es seleccionar el tipo de Usuario.)
representación grafica con el comando Luego se almacena la función de X en
FUNTION El comando DRAW sirve la variable EQ (STEQ), se fija el modo
para crear representaciones graficas. Radianes (RAD) y se trazan los ejes
Este comando requiere la variable EQ (DRAX)
que contendrá la función a ser
Finalmente se traza el grafico
graficada.
(DRAW) y pasamos a PICT para ver el
Existe además el comando STEQ, el resultado (PICTURE)
cual toma la función de la pila y la
almacena en EQ.
El programa anterior pudo también
El comando DRAX traza los ejes
escribirse como:
cartesianos.
<<
Ej.:
{ PICT PPAR } PURGE
Escribamos un programa que
‘SIN(X)’ STEQ
construya el grafico de la función y =
sin (x). El código será: RAD DRAX DRAW
<< PICTURE
{ PICT PPAR } PURGE >>
‘Y=SIN(X)’ STEQ
RAD DRAX DRAW o‘ como:
PICTURE <<
>> { PICT PPAR } PURGE
<< X SIN >> STEQ
RAD DRAX DRAW
PICTURE
>>
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 numero de la pila y lo LABEL ...
usa para fija el espaciado de los puntos >>
de la representación grafica.
51
Fundamentos de User Rpl
52
Fundamentos de User Rpl
53
CAPITULO XII Asuntos Diversos
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 hp 48:
RAD: Fija el modo angular en DUP: Duplica el objeto del nivel 1:
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 numero de horas
La HP 48 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
esta 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 seria:
El formato para la hora es controlado
por el indicador 41. Si esta desactivado 1.5
tendremos formato de 12 horas, pero si
esta activado tendremos formato de 24
horas. ÆHMS : convierte de decimal a HMS.
59
Fundamentos de User Rpl
12.9 Alarma.
Retos:
ACK: Reconoce la ultima alarma mostrada
(a) Escribe un programa que
(ver pagina 26-4 del Manual de Usuario)
muestre la hora como un reloj
ACKALL: Reconoce todas las alarmas análogo:
producidas.
El indicador -44 controla el alma-
cenamiento 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