Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
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
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!".
En la linea 1 se puede ver que ahora tras el EXPORT viene el nombre del
programa, en este caso es Nombre (sí, lo sé... muy original).Pero la gran
diferencia con los otros programas es que ahora tenemos algo entre los
paréntesis. Eso se conoce como argumento de una función. Si usamos
argumentos en el programa, lo vamos a poder ejecutar directamente sin tener que
ir al menú de programas.
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.
Segundo programa:
El siguiente programa tiene mucha más utilidad que el anterior. Lo que vamos a
hacer es calcular el paralelo de dos resistencias que se dan en forma de
argumentos. Así nos ahorramos tener que entrar en el menú de los programas,
pudiendo ejecutarlo directamente.
El código es:
Tercer programa:
Hablando con un amigo sobre el anterior programa me dijo que por que no hacía
otra variante más de éste. Una en la que se calcule el paralelo de varias
resistencias. Sólo hay que introducir los valores de las resistencias entre { ... }
separadas por comas.
El código es:
Este código es un poquito más complejo pero tampoco mucho... jeje
En la linea 14 hay un IF que lo que nos advierte si hay un error, cuando sólo
introducimos el valor de una única resistencia. En la linea 19 tenemos el bucle FOR
que calcula el valor de las resistencias en paralelo. En las siguientes lineas de
código lo que vamos a hacer es calcular el valor de las resistencias con la variable
R, su módulo con Mod y la fase de ésta con Fase. Esto se debe a que también
podemos usar números complejos y por lo tanto cualquier tipo de impedancias.
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.
Tercer programa
HP Prime - Consideraciones del Lenguaje PPL - 1° Parte
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.
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 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.
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).
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 4°parte PPL-CAS.
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.