Está en la página 1de 23

Consideraciones del Lenguaje PPL - I

PROGRAMAS I
Como programador de la calculadora HP Prime, habrás notado ciertas
particularidades que están incluidas en el Manual de usuario, pero también
conceptos adicionales a éste, 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.

Antes de empezar

Las diferencias. Cada lenguaje aprovecha sus recursos de diversas formas, por lo
tanto cada lenguaje es especial en cierto aspecto. Para los que no lo tengan presente,
este lenguaje esta orientado a secuencias y permite el manejo de datos de una forma
muy aprovechable, por lo que se precisa indicar que estas consideraciones pueden
llegar a ser exclusivas de PPL.

Declaración e Iniciación de variables

Expresión combinada. Para declarar variables usamos el comando LOCAL seguido de


los identificadores de la variable, esta acción no solo declara la variable (Reserva de
espacio en memoria), también le asigna un valor inicial aún si no se indicó ninguno, el
valor predeterminado es 0, entonces la variable queda definida como tipo Real.
Si estamos trabajando y vemos que de repente nos aparece un 0, es por esta razón.

Para evitar ésto, podemos iniciar de buena vez si es necesario, los tipos de datos a
asignar.
Tipo de dato no restringido

Reserva variable de memoria. Comúnmente este caso es usado para las colecciones
de datos y cadenas, puesto que su longitud es indeterminada, pero en este lenguaje
aprovecha esto para colocar cualquier tipo de dato, en una variable cuyo dato actual
sea un tipo distinto.

Por lo que es válido asignar un valor inicial como [2,3]▶Variable, y luego asignar un
tipo de dato diferente como "2015 un año muy soleado"▶Variable, no siendo esto un
caso de excepción.

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. Este lenguaje no dispone de esta estructura de datos, pero


existen 2 tipos de datos que pueden reemplazarlo, incluso resulta de más utilidad en
ciertos casos: Matrices (reales y complejos) y Listas (cualquier tipo de dato
almacenable).
Vectores y Matrices

Las Matrices, que pueden ser unidimensionales (Vectores) o bidimensionales, de


tamaño (m x n) no necesariamente definidas con anterioridad, sólo pueden contener
datos del tipo real y complejo.

Tanto para vectores y matrices, se permite la asignación de valores en posiciones no


iniciadas, veamos el siguiente caso:

Las variables tipo matriz pueden tener una longitud variable, las posiciones no
iniciadas se completan con 0, puesto que este es el valor que se define por defecto a
datos no iniciados, respetándose la sintaxis de sólo contener datos tipo real.

Las variables tipo matriz se manipulan con parámetros reales como Variable(1),
Variable(3) para filas, Variable(-3), Variable(-5) para columnas y Variable(1,2) ó
Variable(4,5) para un solo dato, se sabe que se usan estas formas
para llamar y asignar datos.

Pero existe una forma especial para retirar datos con el uso de una lista como
parámetro, siendo el caso de obtener un intervalo de vectores o un intervalo de sub-
índices, en ambos casos obteniéndose una matriz bidimensional aun si sólo se hace
referencia a un dato. Este caso es exclusivo para la salida de datos, no es funcional
para la asignación de datos.
Los vectores y matrices están orientados a cálculos matemáticos, y PPL puede usar
las expresiones comunes entre estos elementos, tanto como multiplicación, suma,
inversa, etc.

Listas

Las listas pueden contener al mismo tiempo diversos tipos de datos, debido a que su
estructura usa referencias a elementos (como referencia a un real, una cadena, etc.),
incluso una lista puede contener otra lista y así sucesivamente, siendo esto un recurso
de mucha utilidad para la agrupación de datos.
{4,"Hola",[5,2,−1],{1,0}}▶Variable

Si a una lista se le asigna un valor en la posición 0, el valor será colocado al final de la


lista creando la siguiente posición a la actual. Por lo tanto si se usa el llamado Lista(0),
retornará el último valor de la lista.
Una variable tipo lista, como se ha visto anteriormente, se puede iniciar como una lista
vacía {}, y para poder agregar un primer valor podemos usar Lista(1), esto
normalmente sería una excepción puesto que la posición 1 no existe, pero es posible.

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, y los valores no definidos serán
ocupados por 0 (Valor por defecto para la creación de espacios de dato no
existentes).
Al igual que las matrices (o mejor dicho, exactamente igual que a vectores), se
pueden usar parámetros de tipo lista para la salida de datos de listas.

Siendo posible el caso de unir parámetros tipo reales y tipo lista según se requiera.
Otra acotación sobre las listas, es que permiten crear con facilidad listas de listas
dentro de estas, usamos una lista vacía, y asignamos a un anidado de posiciones, 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).

En resumen, las variables tipo lista pueden contener todo tipo de dato, y la creación
de listas de listas es simplificada, si un valor no existe este se crea como 0, 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.

Esta forma mencionada puede ser motivo de un problema de conservación de datos,


se debe manejar con cuidado la asignación de datos en listas, debido a que éstos
pueden ser eliminados sin ninguna advertencia, como por ejemplo el dato 10 en la
posición Lista(2), puede ser convertido a lista al asignar una lista de lista en esa
posición.

Tipo inferido y Débilmente tipado

Tipo inferido. Al no requerir líneas de código como Definir X como Real; 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 permite la operación de diversos tipos de datos sin


conversión, puede resultar ventajoso, estos son algunos casos:
Boolean?

Tipo no definido. En cualquier instrucción donde se requiera el valor lógico de


verdadero o falso, sea en las familias IF o en bucles, podemos usar el
valor 1:Verdadero o 0:Falso, siendo estos simples datos del tipo real. Se muestran los
resultados de las operadores relacionales.

También es posible usar cualquier tipo de valor real distinto de 0 para representar
Verdadero, por lo tanto en las siguientes operaciones lógicas se obtiene:
Es decir, no existe datos lógicos específicos, siendo true=1 y false=0, ambos valores
reales.

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), por lo que
Definir una función con Define (Desde INICIO, no es PPL) no permitirá usar variables
que no hallan sido creadas con anterioridad, puesto que este tipo de implemento
obtiene valores de variables externas, y no de variables locales a la función definida.
Los identificadores en HP Prime no están clasificados, por lo que la llamada a un
identificador (variable de usuario, programa, comando, función, variable de inicio,
listas, matrices, etc) recorrerá de acuerdo a un indizado todo este grupo en conjunto.
Por lo que en INICIO, no podremos crear variables como F1 (Reservado para App
Función), variable TEXTOUT (Reservado como comando), variable A (Variable de
usuario tipo Real predefinido), variable M1, G1, L1 (Reservado para matriz, gráfico y
lista respectivamente), e identificadores de variables que traten de usar cualquiera de
los reservados según indica el manual de usuario.

Se aclara que el motivo por el cual todos los identificadores se encuentran no


clasificados, es debido a que todas las variables pueden tener cualquier tipo al cual se
le reasigne, por lo que no es posible crear una variable tipo real 5▶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).

En consecuencia, desde un programa no podremos EXPORTAR variables con


identificadores iguales a los casos mencionados anteriormente. Para
variables LOCALES no hay interferencia, puesto que estas se priorizan sobre las
referencias exteriores dentro de la función donde fue creada.

Identificadores CAS

Al programar y revisar el menú de ayuda o el manual, podremos identificar


aproximadamente si un comando puede ser utilizado directamente en el programa o si
requiere de un ambiente CAS, identificando si el comando esta en minúscula (CAS) o
no.

Existen 4 formas de usar estos comandos:

 Usando simplemente el Comando( ).


 Usando CAS.Comando( ), en ocasiones que no se intertepreta correctamente
como CAS.
 Usando CAS(Expresión CAS), similar al anterior.
 Creando una función CAS con #cas #end. La función debe contener por lo
menos una variable de llegada para poder usarla.

Sin embargo, en todos ellos no podremos enviarle parámetros simbólicos como se


usa normalmente, se deberá usar cadenas o expresiones para lograrlo. Si deseas
más información respecto al uso de CAS ingresa a Consideraciones 5°parte PPL-
CAS.

Toda función o comando retorna valor

Una función vacía devuelve por defecto el valor de 0.


Una función que contiene instrucciones retorna el valor residual de la última
instrucción ejecutada.
Una función que ejecuta el comando RETURN, retorna el valor residual de la línea
que contiene el comando y termina la ejecución de la función.

De forma similar funcionan los comandos de HP Prime, se presenta algunos valores


retornados de comandos conocidos.

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, se ejecuta
de adentro hacia afuera y de acuerdo al orden horizontal.

A razón de esto, todo comando, función o similar, puede colocarse de forma individual
en una instrucción, ya que las instrucciones pueden solo emitir un valor sin necesidad
de asignar o ejecutar algo como estos casos:

Los comandos de entrada y salida

Sobreentendido. Bien sabemos que al escribir código, si el contenido resulta corto y


las instrucciones meramente operativas, el programa nos estará mostrando un
resultado casi al mismo tiempo que presionamos Ejecutar, esto debido a que los
lenguajes están preparados para ejecutarse al 100%, a menos que esto se restrinja
(se intenta).

En cuanto a INPUT, CHOOSE y MSGBOX, son interfaces de interacción usuario que


permiten el llenado de datos y por lo tanto su manipulación, 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.

Esto puede ser obviamente básico, pero cuando trabajamos con funciones y gráficos
propios, esto puede llegar a ser un problema si es que no se entiende este concepto,
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, y
además es importante que el método usado no genere consumo de recursos
innecesarios.

FREEZE y PRINT

Malentendido concurrente. En razón al uso de gráficos para el caso mencionado en el


punto preliminar, se requiere usar un comando que permita pausar la ejecución del
código y visualizar los cambios en pantalla en el punto deseado, ya que el programa
se ejecuta sin descanso, pero FREEZE no es el comando útil en esta ocasión.

FREEZE solo hace efecto al finalizar la ejecución del programa, no actualizando la


pantalla hasta presionar alguna tecla, esto puede causar mucha confusión si el
programa es corto y no se tiene idea de lo que esta pasando; no pausa la ejecución,
por lo que puede ser llamado en cualquier punto del programa, y solo tendrá efecto al
final de todo.

En cuanto a PRINT, tampoco es un comando que pause la ejecución al ser ejecutado,


logra mostrar la terminal en la pantalla, pero si no se pausa manualmente la
ejecución, la pantalla será posiblemente re-dibujada con un comando posterior,
pasará más rápido que un parpadeo y no podremos verlo.
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). Su objetivo es mostrar la terminal con los datos acumulados en este, siendo
posible desplazar la pantalla de ser necesario, se presiona cualquier tecla para salir
de la terminal.

Continúa a Consideraciones en Programas II

HP Prime Programación PPL

Comentarios

1.

Ivan Contreras9/2/16 14:07

Buen aporte tu trabajo para difundir el conocimiento sobre la HP Prime ... lo que descubrí
programando es que esta por debajo de la ti nspire cx cas..pero supongo que estarán
trabajando en actualizaciones...habrá que enviarles algunos bugs que encontremos....luego
te comento mas......

RESPONDER

1.

Carlos Ismael Campos Guerra10/2/16 12:40

En este foro (hpmuseum.org) se pueden publicar los bugs, hay 2 miembros activos de HP
Prime que suelen revisar temas de este aspecto, suelen decir que atenderán lo señalado para
el próximo firmware.

2.

German Gonzalez13/2/16 18:33

Buenas tardes Carlos, los programas creados en la hp prime se pueden proteger mediante
alguna clave?
RESPONDER

1.

Carlos Ismael Campos Guerra14/2/16 01:14

Por ahora en para PPL no es posible su protección, tal vez en un futuro se libere formatos
codificados no legibles, varios lo han solicitado en foros donde participan algunos
miembros de hp.

3.

Daniel Sanchez15/2/16 18:40

Muy buen aporte Ing, esperando cada dia mas el programa VIGA C.

RESPONDER

1. Anónimo25/4/16 11:03

Excelente Aporte Ingeniero! Gracias por compartir.

4.

Rubén Espinoza21/6/16 16:15

Que buen aporte. Hay que aprender a programar de una buena manera y aqui explicas
detalles interesantes. Gracias

RESPONDER

5.Anónimo5/10/16 14:11

Soy Ingeniero Civil que calculadora me recomendas la Hp 50g o la Hp Prime?

RESPONDER

6.

Roland Espinoza22/11/16 17:49

Hola Carlos, espero tu ayuda, tengo una matriz el mismo que le saco la inversa, pero los
valores como : 3.125E-7 lo asume como "0" absoluto.....
Gracias.
Roland

RESPONDER

7.Anónimo15/12/16 09:10

ALGUIEN ME PUEDE AYUDAR..... A QUE SE DEBE QUE CUANDO INTRODUZCO


UNA FUNCIÓN F(X) EN UN PROGRAMA LO RECONOCE COMO SI FUERA UNA
CONSTANTE Y ME IMPRIME LA INTEGRAL COMO LA F(X) MULTIPLICADA
POR EL ULTIMO VALOR DE X
AQUÍ LOS PASO LA SINTAXIS

EXPORT GUIDE()
BEGIN
LOCAL Fx:='X';
LOCAL X1:=0,X2:=9,INF,DF;
PRINT;
INPUT({{Fx,[8],{35,45,2}},{X1,[0],{50,20,3}},{X2,[0],{50,20,4}}},"INTEGRALES",{"
F(x) =","Xinicial =","Xfinal ="},{"Ingrese la F(x) en funcion de X","Ingrese Limite
Inferior de Integracion","Ingrese Limite Superior de Integracion"});

INF:=CAS.int(Fx,X, X1,X2);
DF:=diff(Fx,X);
PRINT(INF);
PRINT(DF);
WAIT(-1);
END;

RESPONDER

1.

ElAmigoCarlos15/12/16 18:59

los comandos int() y diff() pueden ser usados en Inicio o en PPL, pero estan destinados para
CAS.
Para evitar posibles errores al operar en Inicio o PPL, se puede usar:
∫() -> ∫(X,X,0,5)
∂() -> ∂((1/X)-X,X=5)
El comando para derivadas tiene conflictos al usarse con variables tipo función.

8.
Hector Davalos24/2/17 16:17

HOLA MI NOMBRE ES ERNESTO Y ME GUSTARIA SER MIEMBRO DEL GRUPO


SE PODRA ?

RESPONDER

1.

ElAmigoCarlos24/2/17 23:18

Esta página solo es un Blog que pronto actualizaré y pondré contenido nuevo.
Si deseas entrar a un grupo relacionado al de la calculadora te sugiero ingreses a este grupo
de fb: CALCULADORA HP PRIME

9.

Hector Davalos24/2/17 16:20

ME PODRIAN AYUDAR CON ALGUN PROGRAMA SENCILLO PARA VERIFICAR


QUE LA ACTUALIZACION 2016 08 29 ME ESTE FUNCIONANDO SE AGRADECE

RESPONDER

1.

ElAmigoCarlos24/2/17 23:17

Es una forma extraña de pedir programas, puedes enviar a tu calculadora esto Programas y
Apps publicados para que pruebes si tu calculadora misteriosamente no funciona como
debe ser usual.

10.

eeeee7/3/17 09:21

Cordiales Saludos, excelente tu trabajo y gracias por hacerlo, mi consulta seria de como
ingresar GGGMMSS (grados minutos y segundos) para realizar operaciones en la
programacion de PPL, hasta ahora no he podido hacerlo, espero puedas ayudarme mi
correo es cefe.huayta@hotmail.com

RESPONDER
1.

ElAmigoCarlos7/3/17 09:39

Depende de cómo quieras trabajarlo, un dato expresado en hexadecimal es igual a un dato


real, solo es un tipo de formato o tipo de visualización, por esta razón es que se pueden
operar ambos sin problemas (Permanece el formato del primer valor):
5°06′36+5 → 10°06′36″
5+5°06′36 → 10.11

Si deseas declararlo con este formato puedes darle un valor inicial, esto te ayudará para
ingresarlo al comando INPUT:
X=5°06′36;
En INPUT deberás usar la tecla Shift + a b/c para insertar los superíndices.

Como luego de operar un valor puede no prevalecer el formato que deseas (hexadecimal o
decimal), existen 2 comandos para asignárselos:
→HMS(8.5) → 8°30′00″

Por último recuerda que los superíndices de minutos y segundos no se pueden insertar por
teclado, tienen un código Unicode distinto, así que insértalos solo con ayuda de la tecla de
la calculadora.
HMS→(8°30) → 8.5

2.

ElAmigoCarlos7/3/17 10:21

Si usas INPUT, para evitarte problemas y hacer más eficiente el ingreso y edición de
valores, es recomendable para estos casos crear 3 campos de entrada, el proceso de los
datos los deberás hacer por interno.

Ejemplo:
INPUT({
{X1,[0],{35,12,1}},
{X2,[0],{49,12,1}},
{X3,[0],{63,12,1}}
},
"GGMMSS",
{"Dato:","",""},
{"Grados","Minutos","Segundos"}
)

11.
eeeee7/3/17 11:41

Gracias amigo por responderme, , tambien tengo un inconveniente


al usar el comando input, este es un codigo que he copiado de internet en la muestra
se ejecuta sin problemas pero cuando lo paso a mi calculadora me manda errores (he
copiado al detalle el codigo), al comprobar la sintaxis no tengo ningun error, pero al
ejecutar este codigo me sale el error de "FRICCION Error: entrada no valida", le
agradeceria muchismo si me ayuda para corregir este error.
Tambien deseo ingresar valores angulares para realizar operaciones de sumas y restas en el
programa (XX°XX'XX") hasta el momento no he podido hacerlo tambien recurro a uds. si
me podria ayudar.

EXPORT FRICCION()
BEGIN
IF INPUT({{Q,[0],{10,30,0}},
{D,[0],{50,30,0}},
{K,[0],{10,30,1}},
{V,[0],{50,30,1}}},
"CALCULO DE FRICCION",
{"Q:","D:","K:","V:"},
{"Ingrese caudal (m3/s)","Ingrese diametro (pulg)",
"Ingrese rugosidad (m)", "Ingrese viscosidad(m2/s)"}
) THEN
print("ok");
END;
END;

RESPONDER

1.

ElAmigoCarlos7/3/17 12:27

Qué tipo de datos ingresas? no es normal que muestre "entrada no válida" a menos que sea
un error de firmware.
Respecto a ingresar valores hexadecimales, es como mencioné en el comentario anterior, se
debe ingresar los superíndices con la tecla Shift+ab/c.
Si deseas más información para usar INPUT puedes ver estos VIDEOS.
O puedes revisar la ayuda de la calculadora.

12.

eeeee7/3/17 12:33
Eso es amigo en todos los input cuando le doy el formato para ingresar el formato de
numero {D,[0],{50,30,0}} me sale este error de "ENTRADA NO VALIDA" es por eso que
no puedo ejecutar el ejemplo que me has dado del inputo ingresar por separado los
GGMMSS, hasta no he podido resolverlo espero puedas ayudarmen gracias

RESPONDER

1.

ElAmigoCarlos7/3/17 18:42

No quería creer que era un error de sintaxis por firmware desactualizado, debes
actualizarlo, de esa manera poder usar los programas que se han desarrollado hasta ahora
poder usar las funciones que se adicionaron en su momento, aquí los VIDEOS DE INPUT.

13.

eeeee7/3/17 12:36

amigo me olvidaba hasta en el simulador de la calculadora me sale este error tengo el


simulador Version 2013 11 25.Rev 5447

RESPONDER

1.

ElAmigoCarlos7/3/17 18:39

Ese es practicamente lo que debes solucionar, debes actualizar tu calculadora, un firmware


hasta antes del 2015 se puede confirmar como un firmware con errores complejos y
desfasado.
Actualiza al firmware actual con ayuda de estas INDICACIONES.
Puedes también buscar en youtube cómo actualizar, contacta a mi página si tienes
inconvenientes.

14.

eeeee8/3/17 12:24

Cordiales Saludos

Mi estimado amigo muchisimas gracias por tus indicaciones, ya resolvi el problema de


"ENTRADA NO VALIDA", le confirmo que el error era el firmware estaba
desactualizado, ahora lo he actuallizado y los programas que no podia correr, los corre sin
problemas, de nuevo gracias amigo por tu ayuda.

RESPONDER

15.

Gabriel Herrera29/5/17 17:20

Quisiera saber si alguno tiene idea de como hacer posible que al momento de crear un
programa en la hp prime esta sea capaz de reconocer los números complejos. Pues al
momento de hacer un input, si se ingresa una variabe compleja no lo recononce. Gracias

RESPONDER

1.

ElAmigoCarlos29/5/17 17:57

Tienes 2 modos para log

También podría gustarte