You are on page 1of 21

Programando la HP Prime

Tras un cuatrimestre duro he aprendido a programar un poquito la HP Prime. Su lenguaje
de programación es HPBASIC, muy similar al C. No tengáis miedo porque no hay que ser
un genio de esto para poder usarla porque yo sólo sé programar en C (y tampoco mucho) y
la verdad es no es nada complicado.

Voy a dejar aquí dos programas míos que son los que mas he usado estos últimos meses en
la universidad. El primero es un simple programa de interpolación lineal, sólo tienes que
introducir las coordenadas de dos puntos y luego la abscisa del punto a interpolar. El
segundo programa es más simple que el otro, en este introduces dos vectores y te calcula el
producto escalar, el producto vectorial y los módulos de los vectores que has introducido.

He subido una nueva entrada llamada Programando la HP Prime II en la que trato más
temas sobre la programación de la calculadora HP Prime.
¡Si esta entrada te ha gustado la nueva que acabo de subir te encantará! Puedes encontrarla
en mayo 2016.

PROGRAMA 1:

PROGRAMA 2:

Hay muchas modificaciones que se pueden hacer en ambos programas pero eso ya lo dejo
para otra entrada ;)

Programando la HP Prime II

En esta entrada quiero mostraros algunos ejemplos de como se programa en la
HP PRIME con argumentos.

 Primer programa:

Este programa es una versión del típico programa que hace todo el mundo cuando
empieza a programar, estoy hablando del famoso "Hello World!".

Para concatenar hay que usar +. Para que los interprete como strings hay que ponerlos entre comillas (" . Eso se conoce como argumento de una función. Si ejecutamos el programa: Una cosa importante es que una vez que escribamos nuestro nombre como argumento del programa hay que ponerlo entre comillas para que lo interprete como un string. El código es: . Esta es otra forma que el programa nos muestre algún dato o algo que queramos que se lo de a otro programa. Si usamos argumentos en el programa.. pudiendo ejecutarlo directamente. Lo que vamos a hacer es calcular el paralelo de dos resistencias que se dan en forma de argumentos.En la linea 1 se puede ver que ahora tras el EXPORT viene el nombre del programa. El comando MSGBOX va a mostrar en un mensaje lo que haya entre sus paréntesis. Todos los programas por defecto al ejecutarse correctamente devuelven el valor 1.. lo sé. ") como por ejemplo "Hola " o "!"... en este caso es Nombre (sí. Si usamos el comando RETURN vamos a obligar al programa que nos devuelva su argumento.  Segundo programa: El siguiente programa tiene mucha más utilidad que el anterior.Pero la gran diferencia con los otros programas es que ahora tenemos algo entre los paréntesis. muy original). lo vamos a poder ejecutar directamente sin tener que ir al menú de programas. Lo que vamos a hacer es concatenar (unir) los strings . Así nos ahorramos tener que entrar en el menú de los programas.

. Sólo hay que introducir los valores de las resistencias entre { . Una en la que se calcule el paralelo de varias resistencias.  Tercer programa: Hablando con un amigo sobre el anterior programa me dijo que por que no hacía otra variante más de éste. } separadas por comas. El código es: .. Lo bueno de este programa es que podemos poner tantas resistencias como queramos.

Vamos a usar el comando truncate para que nos trunque el resultado con un número de decimales que seleccionamos nosotros con la variable decimales. su módulo con Mod y la fase de ésta con Fase. En la linea 19 tenemos el bucle FOR que calcula el valor de las resistencias en paralelo. Las ejecuciones de los dos programas son: ... cuando sólo introducimos el valor de una única resistencia. jeje En la linea 14 hay un IF que lo que nos advierte si hay un error.Este código es un poquito más complejo pero tampoco mucho. Esto se debe a que también podemos usar números complejos y por lo tanto cualquier tipo de impedancias. En las siguientes lineas de código lo que vamos a hacer es calcular el valor de las resistencias con la variable R.

Segundo programa Tercer programa .

los tipos de datos a asignar. Declaración e Iniciación de variables Expresión combinada. por lo que en esta nota se trata de dar información resumida que se considera importante para los que se encuentran en práctica o deseen comparar ideas. por lo tanto cada lenguaje es especial en cierto aspecto. habrás notado ciertas particularidades que están incluidas en el Manual de usuario. pero también conceptos adicionales a éste. es por esta razón. entonces la variable queda definida como tipo Real.HP Prime . se presenta un resumen de puntos relevantes al lenguaje.I PROGRAMAS I Como programador de la calculadora HP Prime. Para evitar ésto.1° Parte Consideraciones importantes para programadores en PPL. Si estamos trabajando y vemos que de repente nos aparece un 0. . Para declarar variables usamos el comando LOCAL seguido de los identificadores de la variable. por lo que se precisa indicar que estas consideraciones pueden llegar a ser exclusivas de PPL. Cada lenguaje aprovecha sus recursos de diversas formas. Antes de empezar Las diferencias. Para los que no lo tengan presente. también le asigna un valor inicial aún si no se indicó ninguno.Consideraciones del Lenguaje PPL . Consideraciones del Lenguaje PPL . el valor predeterminado es 0. este lenguaje esta orientado a secuencias y permite el manejo de datos de una forma muy aprovechable. podemos iniciar de buena vez si es necesario. esta acción no solo declara la variable (Reserva de espacio en memoria). primera parte donde se hace mención algunas pautas a tener en cuenta para el manejo de programas.

que pueden ser unidimensionales (Vectores) o bidimensionales. incluso resulta de más utilidad en ciertos casos: Matrices (reales y complejos) y Listas (cualquier tipo de dato almacenable). en una variable cuyo dato actual sea un tipo distinto. sólo pueden contener datos del tipo real y complejo. pero en este lenguaje aprovecha esto para colocar cualquier tipo de dato. y luego asignar un tipo de dato diferente como "2015 un año muy soleado"▶Variable. Este lenguaje no dispone de esta estructura de datos. puesto que su longitud es indeterminada. pero existen 2 tipos de datos que pueden reemplazarlo. de tamaño (m x n) no necesariamente definidas con anterioridad.Tipo de dato no restringido Reserva variable de memoria. Estamos confirmando entonces la destrucción tanto del dato y del tipo con los métodos de entrada y asignación que existan en este lenguaje. Arreglos (Arrays) Carencia imperceptible. Comúnmente este caso es usado para las colecciones de datos y cadenas. no siendo esto un caso de excepción. Vectores y Matrices Las Matrices.3]▶Variable. . Por lo que es válido asignar un valor inicial como [2.

respetándose la sintaxis de sólo contener datos tipo real.2) ó Variable(4. las posiciones no iniciadas se completan con 0. puesto que este es el valor que se define por defecto a datos no iniciados. Variable(-5) para columnas y Variable(1. veamos el siguiente caso: Las variables tipo matriz pueden tener una longitud variable. se sabe que se usan estas formas para llamar y asignar datos.5) para un solo dato. se permite la asignación de valores en posiciones no iniciadas.Tanto para vectores y matrices. Variable(3) para filas. Variable(-3). . Las variables tipo matriz se manipulan con parámetros reales como Variable(1).

Este caso es exclusivo para la salida de datos. no es funcional para la asignación de datos. . en ambos casos obteniéndose una matriz bidimensional aun si sólo se hace referencia a un dato. siendo el caso de obtener un intervalo de vectores o un intervalo de sub-índices.Pero existe una forma especial para retirar datos con el uso de una lista como parámetro.

2. siendo esto un recurso de mucha utilidad para la agrupación de datos. el valor será colocado al final de la lista creando la siguiente posición a la actual. etc. tanto como multiplicación. Listas Las listas pueden contener al mismo tiempo diversos tipos de datos. etc. Por lo tanto si se usa el llamado Lista(0). retornará el último valor de la lista. inversa.).[5. incluso una lista puede contener otra lista y así sucesivamente.Los vectores y matrices están orientados a cálculos matemáticos. una cadena. .−1]."Hola". debido a que su estructura usa referencias a elementos (como referencia a un real.{1.0}}▶Variable Si a una lista se le asigna un valor en la posición 0. y PPL puede usar las expresiones comunes entre estos elementos. suma. {4.

pero es posible. esto normalmente sería una excepción puesto que la posición 1 no existe. se puede iniciar como una lista vacía {}. Por lo que podemos asumir que a las variables tipo lista se les puede asignar valores en posiciones no iniciadas al igual que las matrices. .Una variable tipo lista. y los valores no definidos serán ocupados por 0 (Valor por defecto para la creación de espacios de dato no existentes). y para poder agregar un primer valor podemos usar Lista(1). como se ha visto anteriormente.

Al igual que las matrices (o mejor dicho. Siendo posible el caso de unir parámetros tipo reales y tipo lista según se requiera. se pueden usar parámetros de tipo lista para la salida de datos de listas. exactamente igual que a vectores). .

Otra acotación sobre las listas. es que permiten crear con facilidad listas de listas dentro de estas. debido a que éstos pueden ser eliminados sin ninguna advertencia. En resumen. y asignamos a un anidado de posiciones. puede ser convertido a lista al asignar una lista de lista en esa posición. y la creación de listas de listas es simplificada. las variables tipo lista pueden contener todo tipo de dato. si un valor no existe este se crea como 0. se debe manejar con cuidado la asignación de datos en listas. . por lo que se creará por defecto listas de listas (los datos de matrices también se llaman de esta manera pero la creación permanece sobre el tipo lista). como por ejemplo el dato 10 en la posición Lista(2). Esta forma mencionada puede ser motivo de un problema de conservación de datos. usamos una lista vacía. si un valor en la lista ya existe puede ser fácil reemplazado por otro debido a que el tipo de dato no es restringido.

estos son algunos casos: Boolean? .Tipo inferido y Débilmente tipado Tipo inferido. puede resultar ventajoso. Al no requerir líneas de código como Definir X como Real. Se permite la operación de diversos tipos de datos sin conversión. o similar. la única forma de distinguir el tipo de dato contenido en una variable. es darle el dato de por sí (formas mostradas en Declaración e Iniciación de variables) Débilmente tipado.

Se muestran los resultados de las operadores relacionales. no existe datos lógicos específicos. . ambos valores reales. También es posible usar cualquier tipo de valor real distinto de 0 para representar Verdadero. siendo estos simples datos del tipo real. sea en las familias IF o en bucles. podemos usar el valor 1:Verdadero o 0:Falso.Tipo no definido. siendo true=1 y false=0. por lo tanto en las siguientes operaciones lógicas se obtiene: Es decir. En cualquier instrucción donde se requiera el valor lógico de verdadero o falso.

por lo que la llamada a un identificador (variable de usuario. etc) recorrerá de acuerdo a un indizado todo este grupo en conjunto. variable TEXTOUT (Reservado como comando). . matrices. por lo que Definir una función con Define (Desde INICIO.Identificadores o nombres Se debe entender que una variable puede usarse siempre y cuando se halla creado tanto en INICIO o en un programa (No considerando el entorno CAS). Se aclara que el motivo por el cual todos los identificadores se encuentran no clasificados. listas. es debido a que todas las variables pueden tener cualquier tipo al cual se le reasigne. En consecuencia. Para variables LOCALES no hay interferencia. G1. variable de inicio. Los identificadores en HP Prime no están clasificados. puesto que estas se priorizan sobre las referencias exteriores dentro de la función donde fue creada. programa. no es PPL) no permitirá usar variables que no hallan sido creadas con anterioridad. variable A (Variable de usuario tipo Real predefinido). función. y no de variables locales a la función definida. puesto que este tipo de implemento obtiene valores de variables externas. L1 (Reservado para matriz. comando. Por lo que en INICIO. por lo que no es posible crear una variable tipo real 5▶M1. gráfico y lista respectivamente). desde un programa no podremos EXPORTAR variables con identificadores iguales a los casos mencionados anteriormente. variable M1. puesto que estaríamos haciendo referencia a la misma variable matriz reservada por la calculadora (las variables reservadas no pueden ser modificadas en tipo). e identificadores de variables que traten de usar cualquiera de los reservados según indica el manual de usuario. no podremos crear variables como F1 (Reservado para App Función).

Identificadores CAS Al programar y revisar el menú de ayuda o el manual. . La función debe contener por lo menos una variable de llegada para poder usarla. Si deseas más información respecto al uso de CAS ingresa a Consideraciones 4°parte PPL-CAS. se presenta algunos valores retornados de comandos conocidos. Existen 4 formas de usar estos comandos:  Usando simplemente el Comando( ). podremos identificar aproximadamente si un comando puede ser utilizado directamente en el programa o si requiere de un ambiente CAS.  Usando CAS(Expresión CAS). en todos ellos no podremos enviarle parámetros simbólicos como se usa normalmente. en ocasiones que no se intertepreta correctamente como CAS. retorna el valor residual de la línea que contiene el comando y termina la ejecución de la función.  Creando una función CAS con #cas #end. Sin embargo. se deberá usar cadenas o expresiones para lograrlo. identificando si el comando esta en minúscula (CAS) o no. Una función que ejecuta el comando RETURN. De forma similar funcionan los comandos de HP Prime. similar al anterior. Una función que contiene instrucciones retorna el valor residual de la última instrucción ejecutada. Toda función o comando retorna valor Una función vacía devuelve por defecto el valor de 0.  Usando CAS.Comando( ).

se ejecuta de adentro hacia afuera y de acuerdo al orden horizontal. función o similar. puede colocarse de forma individual en una instrucción.Esta característica en el lenguaje permite anidar o usar cualquier tipo de función en diversas partes de una instrucción mientras la sintaxis básica sea correcta. todo comando. ya que las instrucciones pueden solo emitir un valor sin necesidad de asignar o ejecutar algo como estos casos: . A razón de esto.

FREEZE y PRINT Malentendido concurrente. se requiere usar un comando que permita pausar la ejecución del código y visualizar los cambios en pantalla en el punto deseado. pero FREEZE no es el comando útil en esta ocasión. ya que el programa se ejecuta sin descanso. no actualizando la pantalla hasta . el programa nos estará mostrando un resultado casi al mismo tiempo que presionamos Ejecutar. pero cuando trabajamos con funciones y gráficos propios. esto puede llegar a ser un problema si es que no se entiende este concepto. esto debido a que los lenguajes están preparados para ejecutarse al 100%. son interfaces de interacción usuario que permiten el llenado de datos y por lo tanto su manipulación. En cuanto a INPUT. CHOOSE y MSGBOX. si el contenido resulta corto y las instrucciones meramente operativas. por lo que podemos afirmar que la ejecución del código se retiene en estas instrucciones hasta que confirmemos o cancelemos con los medios que brindan. y además es importante que el método usado no genere consumo de recursos innecesarios. FREEZE solo hace efecto al finalizar la ejecución del programa. será necesario crear funciones a cuenta propia que simulen esa pausa en el código y que permitan la visualización de datos y manipulación en el tiempo adecuado.Los comandos de entrada y salida Sobreentendido. Bien sabemos que al escribir código. a menos que esto se restrinja (se intenta). Esto puede ser obviamente básico. En razón al uso de gráficos para el caso mencionado en el punto preliminar.

pasará más rápido que un parpadeo y no podremos verlo. . Su objetivo es mostrar la terminal con los datos acumulados en este. esto puede causar mucha confusión si el programa es corto y no se tiene idea de lo que esta pasando. por lo que puede ser llamado en cualquier punto del programa. no pausa la ejecución. El comando PRINT esta desarrollado para mostrarse al final de la ejecución al igual que FREEZE (Usar los 2 comandos al mismo tiempo puede ocasionar aún más enredo). logra mostrar la terminal en la pantalla. En cuanto a PRINT. se presiona cualquier tecla para salir de la terminal. tampoco es un comando que pause la ejecución al ser ejecutado. y solo tendrá efecto al final de todo. la pantalla será posiblemente re-dibujada con un comando posterior. pero si no se pausa manualmente la ejecución. siendo posible desplazar la pantalla de ser necesario.presionar alguna tecla.