Tutorial de Programación HP User RPL en Modo Algebraico v1.2

Tutorial de Programación HP User RPL en Modo Algebraico v1.2

(Parte 1 de 2)

Versión 1.2 Por David Enrique Torres

INTRODUCCIÓN3
ENTRADA4
INPUT4
INFORM5
CHOOSE7
WAIT8
SALIDA8
TEXT10
CLLCD10
DISP10
MSGBOX1
→TAG12
COMPARACIONES12
AND12
OR12
XOR12
NOT13
SAME13
TYPE13
SF13
CF13
FS? y FC?13
BIFURCACIONES E ITERACIONES13
IF – THEN – ELSE13
IFT e IFTE15
FOR – NEXT15
FOR – STEP15
START – NEXT y START – STEP16
DO – UNTIL16
WHILE – REPEAT17
CASE17
SEQ18
EDICIÓN DE PROGRAMAS18
PROGRAMAS MISCELÁNEOS18
MATEMÁTICA18
MÉTODOS NUMÉRICOS o ANÁLISIS NUMÉRICO18
ELECTRO2

ÍNDICE ECONOMÍA..................................................25

Programar en modo algebraico no se parece a otra forma de programación. La diferencia entre el modo RPN y el algebraico es que en modo algebraico las funciones o comandos se escriben primero y después, los argumentos; y en el modo RPN, al revés. Ésta es una ventaja del modo algebraico si se tiene que escribir una operación tremendamente complicada, pues se escribiría como en papel. Es indispensable saber manejar las listas, dado que si un comando o función proporciona varias respuestas, éstas aparecen agrupadas en una lista, la cual a veces contiene a otra lista.

La manera en que fluye un programa es la siguiente:

Salida

Proceso Entrada

Lo último que se escribe es la salida. Los comentarios se escriben con una arroba (@), pero al compilar el programa los comentarios desaparecen.

Ejemplo: Programa que eleva un número a la quinta potencia. « → X

« X^5; 5+“ DOLARES” »

Para ejecutar el programa se escribe su nombre y entre paréntesis se escriben los argumentos de entrada. Si se quiere elevar 2 a la quinta potencia:

QUINTA(2) [ENTER]

siempre será la cadena “5 DOLARES”

Al ejecutar el programa QUINTA se eleva el número introducido a la quinta potencia, pero como lo que se escribió por último fue el 5 más la cadena “ DOLARES”, el resultado El punto y coma (o sólo coma) se usa para separar las instrucciones del programa. Lo último que se escribe no necesita tener punto y coma después. Para tener una respuesta numérica no hay que escribir nada más después de X^5 en el código fuente del programa.

Un programa podría no tener entradas. También podría no tener una salida en forma numérica o una expresión matemática o un texto. En tal caso aparece la palabra NOVAL. Ejemplo: Programa que hace sonar la bocina a 1000 hertz durante 2 segundos.

« BEEP(1000,2) » ► SONIDO

Los anteriores han sido programas de tipo función, pero también es posible hacer programas de tipo guión. Para ello hay dos comandos: INPUT e INFORM. CHOOSE es un comando que sirve para crear cuadros de selección. No hay necesidad de escribir los datos de entrada entre paréntesis cuando se ejecuta un programa de tipo guión. Sólo se escribe el nombre del programa y se presiona la tecla [ENTER]

INPUT La sintaxis es la siguiente: INPUT(“Texto”,“Texto opcional”) La salida de INPUT es una cadena conteniendo lo que se ha introducido.

Ejemplo: INPUT(“ESCRIBA DOS NÚMEROS:”,“”) [ENTER]

Los datos introducidos se separan por comas o espacios. Suponiendo que se introducen el 10 y el 20 se haría así:

10,20 [ENTER]

La salida sería una cadena conteniendo al 10 y al 20. “10,20”

Como esto es inútil se hace uso del comando OBJ→. Ejemplo:

Si se introducen el 10 y el 20 la salida será una lista conteniendo al 10 y al 20: {10,20}

También es posible agregar texto opcional para mejorar la estética y evitar errores. Ejemplo:

:LARGO:”,{1,0}}))) » ►CUBO

Las variables se deben escribir como objetos etiquetados (con dos puntos a la izq. y dos puntos a la der.). La lista {1,0} indica que se posicionará el cursor inicialmente en la primera variable, y el 0 es un margen. Después de escribir cada dato se presiona [▼] para bajar. Después de escribir el último número se presiona [ENTER]. El comando ∏LIST se usa para multiplicar todos los elementos contenidos en una lista. ◄┘ ( [R-Shift] [.] ) sirve para pasar al renglón siguiente y es como presionar [ENTER] al escribir un archivo de texto en WORD o en bloc de notas.

Ejemplo: Ídem, pero mostrando las variables en forma horizontal. « ∏LIST(OBJ→(INPUT(“VOLUMEN DE UN CUBO”,

{“:ALTO: :ANCHO: :LARGO:”,{1,0}}))) » ►CUBO

INFORM La sintaxis de INFORM es la siguiente: INFORM(“Título”,{{“Variable 1:”,“Ayuda opcional”,tipo de variable}, {“Variable 2:”, “Ayuda opcional”, tipo de variable},

{“Variable N:”, “Ayuda opcional”, tipo de variable}},

{Número de columnas, margen}, {Valores de reset},{valores iniciales})

[RESET] [CALC] [TYPE] [] [CANCL] [ OK ]

Una variable podría ser de varios tipos. En dado caso se separarían por comas los tipos. Un número típico para el margen podría ser 0, 1 ó 2. Los valores de reset se escriben (opcionalmente) uno por cada variable. Si se presiona el botón [NXT] cuando aparece el cuadro de diálogo, aparece el menú Los valores iniciales se escriben (opcionalmente) uno por cada variable. Dichos valores aparecen al inicio en el cuadro de diálogo. Si se presiona [TYPE] aparece la lista de tipos al que puede pertenecer el objeto que se digitará.

La salida de INFORM es una lista que contiene la lista de lo que se introdujo y el número 1 (indicando que se escribió algo).

Ejemplo: Cuadro de diálogo que tiene una columna, tres variables, valores iniciales (0, 0, 0) y valores de reset (1, 2, 3).

INFORM(“TÍTULO”,{{“X:”,“DIGITE UN NÚMERO”,0,9},

{“Y:”,“DIGITE UN NÚMERO”,0,9},

{“Z:”,“DIGITE UN NÚMERO”,0,9}},

{1,0},{1,2,3},{0,0,0})

Ejemplo: Ídem, pero con tres columnas, margen más grande (2), sin valores iniciales ni de reset.

INFORM(“TITULO”,{{“X:”,“DIGITE UN NUMERO”,0,9},

{“Y:”,“DIGITE UN NÚMERO”,0,9},

{“Z:”,“DIGITE UN NÚMERO”,0,9}},

{3,2},{ },{ })

La ayuda se escribe si es realmente necesaria. Entre más pequeño sea un programa, más rápido correrá (aunque es una diferencia de pocos segundos).

Suponiendo que se digitan 10 para X, 20 para Y, y 30 para Z, la salida del último ejemplo es: {{10,20,30},1}

Como sólo interesa la lista interior se hace uso del comando HEAD, el cual obtiene el primer valor de una lista. Ejemplo: El mismo ejemplo anterior usando HEAD.

HEAD(INFORM(“TÍTULO”,{{“X:”,“DIGITE UN NÚMERO”,0,9},

{“Y:”,“DIGITE UN NÚMERO”,0,9},

{“Z:”,“DIGITE UN NÚMERO”,0,9}},

{1,0},{1,2,3},{0,0,0}))

La salida será: {10,20,30}

El tipo de variable aparece en la página 18 de la Guía de HP 49G Pocket. A continuación se presentan algunos tipos de variables.

0Número real-1.025 1 Número complejo 5+2*i 2Cadena"HP 49G" 3Sistema de números reales[[1,2],[3,4]] 4Sistema de números complejos[[1,2*i],[3+i,-5-10i]] 5 Lista {1,2,3,4,5} 6Nombre globalX 9Objeto algebraico 'pi' 18 Función incorporada SIN 19 Comando incorporado INPUT 28 Entero 3

29Vector, matriz simbólica[X,8,Z]

CHOOSE La sintaxis es la siguiente: CHOOSE(“Título”,{Variable 1, Variable 2, Variable N}, Número de posición inicial) La salida de CHOOSE es una lista conteniendo lo que se seleccionó y el número 1 (indicando que se seleccionó algo).

Ejemplo: Cuadro de selección de funciones trigonométricas. Al inicio está seleccionada la segunda opción.

{“1. SENO”,“2. COSENO”,“3. TANGENTE”},2)

Suponiendo que se elige la tercera opción, la salida será: {“3. TANGENTE”, 1}

Para obtener sólo lo que se ha seleccionado se usa el comando GET. La sintaxis de GET es: GET(Lista o vector o matriz, Número de elemento seleccionado). Luego se usa el comando OBJ→.

OBJ→(GET(CHOOSE(“TRIGONOMETRÍA”,{“1. SENO”, “2. COSENO”, “3. TANGENTE”},2),1))

Primero se selecciona el primer elemento de la lista de salida de CHOOSE, el cual es de tipo cadena (“3. Tangente”). Luego se aplica el comando OBJ→ y se obtiene una lista que contiene el número seleccionado y el nombre en forma simbólica (como si fuera una variable). Como lo que realmente importa es el número seleccionado, se vuelve a aplicar el comando GET.

GET(OBJ→(GET(CHOOSE(“TRIGONOMETRÍA”,{“1. SENO”, “2.

COSENO”, “3. TANGENTE”},2),1)),1)

También es posible utilizar el comando HEAD en lugar de GET. HEAD(OBJ→(HEAD(CHOOSE(“TRIGONOMETRÍA”,{“1. SENO”, “2.

COSENO”, “3. TANGENTE”},2))))

La salida es ahora el número 3. Luego se aplicaría una bifurcación o una iteración para realizar alguna acción.

WAIT Sirve para hacer una pausa. La sintaxis es: WAIT(Número de segundos) No tiene salida. Si el argumento es 0 ó un número negativo, la pausa se extiende un tiempo indefinido hasta que se presione cualquier tecla (excepto R-Shift, L-Shift, ALPHA y ON), y la salida de WAIT es la posición de la tecla presionada.

Para obtener en la salida dos o más valores se usan listas o vectores, principalmente las listas porque permiten el uso de cadenas. Ejemplo: Programa que eleva un número al cubo, a la cuarta y quinta potencia.

« {X+“^3= ”+X^3,“ X+“^4= ”+X^4,“ X+“^5= ”+X^5} »

Suponiendo que se introduce el 5, la salida será: {“5^3= 125”,“5^4= 625”,“5^5= 3125”}

Ejemplo: Ídem, usando INPUT. « OBJ→(INPUT(“Digite un número:”,“”)) → X

« {X+“^3= ”+X^3, X+“^4= ”+X^4, X+“^5= ”+X^5}

Ejemplo: Programa que calcula el volumen y la superficie de un paralelepípedo. Para obtener el n-ésimo elemento de una lista se escribe el nombre de la lista y entre paréntesis se escribe el n-ésimo elemento que se desea, y así se evita el uso del comando GET.

{{“ALTO:”,“”,0,9},

{“ANCHO:”,“”,0,9},{“LARGO:”,“”,0,9}},

{1,0},{ },{ })) → L « L(1) → AL

« L(2) → AN

« L(3) → LA

« AL*AN*2+AL*LA*2+AN*LA*2 → SUP

» ►VOLySUP

Ejemplo: Ídem, pero haciendo los cálculos dentro de la lista. Son necesarios los paréntesis cuando hay sumas y restas.

{{“ALTO:”,“”,0,9},

{“ANCHO:”,“”,0,9},{“LARGO:”,“”,0,9}},

{1,0},{ },{ })) → L « L(1) → AL

« L(2) → AN

« L(3) → LA

« {“VOLUMEN:”+AL*LA*AN, “SUPERFICIE:”+2*(AL*AN+AL*LA+AN*LA)} »

» ►VOLySUP

Ejemplo: Ídem, pero simplificando el algoritmo. Dado que sólo hay tres variables no hay gran complejidad, pero si hay más variables no sería aconsejable reducir tanto el algoritmo porque se dificulta la detección de errores. Para una mejor visualización de la respuesta, se ha seleccionado el indicador de sistema -97 (ver listas en forma vertical).

{{“ALTO:”,“”,0,9},

« {“VOLUMEN:”+L(1)*L(2)*L(3)+“_m^3”,“SUPERFICIE: ”

{“ANCHO:”,“EN METROS”,0,9},{“LARGO:”,“”,0,9}}, {1,0},{ },{ })) → L +2*(L(1)*L(2)+L(1)*L(3)+L(2)*L(3))+“_m^2”} »

» ►VOLySUP

A continuación se presentan algunos comandos de salida.

TEXT Sirve para escribir texto. La sintaxis es: TEXT(“Texto”). No es un comando muy útil.

CLLCD Sirve para limpiar la pantalla. No tiene argumentos de entrada ni de salida. La pantalla queda en blanco hasta que se presione alguna tecla.

DISP Sirve para desplegar en pantalla momentáneamente lo que se desea en donde se desea. Se combina con WAIT si se quiere que dure más tiempo. La sintaxis es: DISP(“Texto”,Número de línea donde se desea ver). No tiene argumentos de salida. En la HP49G hay siete líneas. La número 1 es la superior y la 7, la inferior.

Ejemplo: Se ve “HOLA” en la esquina superior izquierda durante 5 segundos. DISP(“HOLA”,1),WAIT(5) [ENTER]

Ejemplo: Se ve “HOLA” en las líneas pares. DISP(“HOLA”,{2,4,6}),WAIT(5) [ENTER]

Ejemplo: Ídem, pero limpiando primero la pantalla. CLLCD,DISP(“HOLA”,{2,4,6}),WAIT(5) [ENTER]

Ejemplo: Fondo. Se escribe cualquier letra o símbolo 2 veces. DISP(“X”,{1,2,3,4,5,6,7}),

WAIT(5) [ENTER]

También es posible escribir cosas diferentes en líneas diferentes. Ejemplo:

”},{1,2,3,4,5,6,7}); WAIT(5) [ENTER]

MSGBOX Sirve para hacer cuadros de texto que parecen estar sobre la pantalla. La sintaxis es: MSGBOX(“Texto”). El mensaje aparece por tiempo indefinido hasta que se presione ON, ENTER o F6. Sólo se pueden escribir 14 caracteres en una línea.

Ejemplo: MSGBOX(“MENSAJE DE TEXTO”) [ENTER]

con una cadena

→TAG Sirve para etiquetar objetos. Sintaxis: →TAG(Objeto,“Nombre”). La ventaja de usar un número etiquetado es que se puede operar posteriormente, mientras que no es posible hacerlo Ejemplo: Programa que calcula el volumen de un cubo.

Si se necesita sumar este valor (6000) con 500 sólo se presiona +500 [ENTER]. La respuesta sería 6500 (sin etiqueta).

Los operadores lógicos sirven para hacer comparaciones. Una expresión es verdadera si su valor es diferente de 0, y es falsa sólo si su valor es 0. Los operadores lógicos son AND, OR XOR y NOT.

AND Su resultado es verdadero (1 lógico) si todas las expresiones que se comparan son verdaderas. En caso contrario el resultado es falso (0 lógico). Ejemplo: 5 AND 3 da como resultado 1. 2 AND -3 AND 1 da como resultado 1. 0 AND 7 da como resultado 0.

OR Su resultado es verdadero si al menos una de las expresiones que se compara es verdadera. Su resultado es falso únicamente si todas las expresiones son falsas. Ejemplo: 5 OR 3 da como resultado 1. 2 OR -3 OR 1 da como resultado 1. 0 OR 7 OR 0 da como resultado 1. 0 OR 0 da como resultado 0.

XOR Su resultado es falso si las expresiones son iguales, y es verdadero si las expresiones son diferentes. Ejemplo: 1 XOR 3 da como resultado 0.

1 XOR -1 da como resultado 0. 0 XOR 7 da como resultado 1. 0 XOR 0 da como resultado 0.

NOT Cambia el valor lógico de un valor. Ejemplo: NOT 0 da como resultado 1. NOT 1 da como resultado 0. NOT -32 da como resultado 0.

SAME Compara dos expresiones, pero es más riguroso que = =. Ejemplo: 1 SAME 1 da como resultado 1. 1 SAME 5 da como resultado 0. 1 SAME 1.0 da como resultado 0.

TYPE Su resultado es el tipo de objeto al que pertenece el argumento. Algunos tipos son presentados en la página 7. Ejemplo: TYPE(3) da como resultado 28 (número entero). TYPE(X) da como resultado 6 (variable global). TYPE(1.35) da como resultado 0 (número real).

SF Establece un indicador del sistema (flag). Si se verifica en [MODE] [FLAGS] el indicador de sistema deseado aparece con un cheque. Ejemplo: SF(-97) pone un cheque al indicador de sistema -97, haciendo que las listas se vean en forma vertical.

CF Hace lo contrario que SF. Ejemplo: CF(-97) quita un cheque al indicador de sistema -97, haciendo que las listas se vean en forma horizontal.

FS? y FC? Verifican si un indicador de sistema ha sido establecido o no, es decir que verifican si tienen cheque (FS?) o no tiene cheque (CF?).

IF – THEN – ELSE Sirve para tomar decisiones. Sintaxis: IF Condición THEN Proceso ELSE Proceso Alternativo END. Si se cumple la condición, se ejecuta el proceso de THEN, de lo contrario se ejecuta el de ELSE.

Ejemplo: Graficar x2 si x>1, de lo contrario graficar seno(x). « IF X >1 THEN X^2 ELSE SIN(X) END »

Ejemplo: Juego de adivinanza. RAND produce un número real aleatorio mayor que cero y menor que 1. CEIL redondea un número real al entero mayor más próximo. Primero se introduce un valor (que se llamará X), el cual es comparado con el número secreto aleatorio de la calculadora (que se llamará X), y aparece un mensaje que dice si son iguales o diferentes y muestra el número secreto.

entero entre 1 y 10:”,“”)) → X « CEIL(10*RAND) → X

« IF X == X THEN DISP(“X”,{1,2,3,4,5,6,7}), WAIT(1),MSGBOX(“GANASTE: ”+X) ELSE DISP(“▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓”,{1,2,3,4,5,6,7}), WAIT(1),MSGBOX(“PERDISTE: ”+X) END »

Ejemplo: Programa que verifica si un número es impar negativo. MOD obtiene el residuo de la división de X entre 2. Si el residuo es 0, significa que X es par. Para que un número sea impar negativo debe cumplir dos condiciones: que sea menor que cero y que sea impar (en otras palabras, que no sea par)

« IF X<0 AND X MOD 2 ≠ 0 THEN X+“ ES IMPAR NEGATIVO” ELSE X+“ NO ES IMPAR NEGATIVO” END »

15 » ►IMPNEG

IFT e IFTE Hacen exactamente lo mismo que IF – THEN – ELSE. Sintaxis: IFT(Condición, Proceso) IFTE(Condición, Proceso, Proceso Alternativo)

Ejemplo: Si x<0 se grafica x^2. De lo contrario no hay gráfica. « IFT(X<0,X^2) »

Los siguientes comandos sirven para hacer iteraciones.

FOR – NEXT Sintaxis: FOR(Variable, Inicio, Fin) Proceso NEXT. La variable va aumentando de uno en uno y se ejecuta el proceso (o procesos) hasta que la variable (a veces llamada bandera o contador) toma el último valor especificado. La salida es una lista conteniendo los resultados de la iteración.

Ejemplo: Elevar desde 1 hasta 5 a la cuarta potencia. FOR (X,1,5) X4 NEXT [ENTER]

(Parte 1 de 2)

Comentários