Tutorial de programación HP Prime #1: LOCAL, RETORNO Durante el próximo mes, tal vez mes y medio, planeo publicar tutoriales de programación para HP (Hewlett Packard) Prime. Si ha programado con HP 38G, 39g o 39gii, este lenguaje será similar a esos. El lenguaje de programación para Prime se llama HP Prime Programming Language (HPPP). A lo largo de este tutorial, voy a utilizar la última versión del software. Cómo empezar a escribir un programa: 1. Presione Mayús + 1 (Programa). 2. Pulse Nuevo. Es la segunda tecla táctil. 3. Introduzca el nombre del programa. Presionando el botón ALPHA la tecla dos veces se activará UPPERCASE ΑLPHA-LOCK. Al presionar ALPHA, Mayús, ALPHA se activará el bloqueo alfa en minúsculas. Para salir de cualquier bloqueo, presione la tecla ALPHA una vez más. Cuando esté satisfecho con el nombre, presione Entrar. Reglas para nombres de programas: 1. Solo letras, números y el carácter de subrayado (_). 2. El nombre del programa debe comenzar con una letra. Estructura de un programa HP Prime Un programa HPPP está encapsulado en una estructura EXPORT - BEGIN - END. El diseño es generalmente así: EXPORT program_name(arguments) BEGIN comandos y comentarios van aquí END; Cada línea que contiene un comando generalmente debe terminar con un punto y coma (;). Un punto y coma puede escribir presionando ALPHA y luego la tecla Más ( + ). Los comentarios se pueden escribir. Se designan mediante dos barras diagonales. Las barras diagonales se escriben pulsando la tecla Dividir ( ÷ ). Cualquier cosa en la línea que sigue a las dos barras diagonales se ignora al ejecutar el programa. SQIN Nuestro primer programa es SQIN, porque los programas "Hello World" son tan 2000s. SQIN toma un número, lo eleva al cuadrado y luego calcula el recíproco. En resumen, estamos definiendo una función personalizada :SQIN(x) = 1/x^2 Comandos: RETURN: devuelve un resultado a la pila (página de inicio). Puede devolver números, listas, vectores, matrices, cadenas o una combinación de estos tiempos. Acceso: Tmplt, 1. Bloquear, 2. DEVOLVER Todo el código del programa en esta serie de tutoriales se mostrará en fuente Courier. EXPORT SQIN(X)BEGINRETURN 1/X^2; FIN; Consejo: Puede verificar la sintaxis del programa simplemente presionando la tecla programable Check en el editor del programa. HP Prime le informará si hay un error de sintaxis e intentará señalarle el error. Si no hay errores de sintaxis, el Prime indica "No hay errores en el programa". Utilizo el comando Check todo el tiempo. Cómo ejecutar los programas:Modo de inicio Entrada de libro de texto,Modo de inicio - Entrada algebraica,Modo CAS: Escriba el nombre del programa. Siga el nombre entre paréntesis y incluya los argumentos necesarios. O use la Caja de herramientas (fila superior de teclas blancas, 2ª tecla desde la izquierda, parece una caja de herramientas), seleccione la tecla táctil Usuario, seleccione el programa e ingrese los argumentos requeridos. Modo de inicio - Entrada RPN: Ingrese cada argumento, separe cada entrada presionando la tecla Enter. Escriba el nombre y, entre paréntesis, indique el número de argumentos. Por ejemplo, si el programa TEST tiene cuatro argumentos, la pila RPN desea esto:4: argument_13: argument_22: argument_31: argument_4TEST(4) para ejecutar el programa. Ejemplos para probar con SQIN:SQIN(5) devuelve .04SQIN(36) devuelve .000771604938 El siguiente programa demostrará el concepto de variables locales. MOPMT LOCAL: Declara que cualquier variable es local para el programa. En otras palabras, las variables se crean, se utilizan, posiblemente se muestran durante la ejecución del programa y se eliminan al finalizar el programa. Acceso: Tmplt, 4. Variable, 1. LOCAL Consejo: Puede declarar variables locales y asignar un valor inicial al mismo tiempo. Por ejemplo: LOCAL K:=1; almacena 1 en K y convierte a K en una variable local. MOPMT calcula el pago mensual de un préstamo. Los argumentos son: el monto del préstamo (L), la tasa de interés (R) y el número de meses (M). EXPORT MOPMT(L,R,M)BEGINLOCAL K:=R/1200; K:=L*K/(1-(1+K)^-M); RETURN "Pago ="+K; FIN; Consejo: Utilice RETURN, TEXTOUT_P e PRINT para devolver cadenas personalizadas, que combinan resultados, mensajes y cálculos. Las piezas están conectadas con un signo más. Ejemplos:MOPMT(4000, 9.5, 30) devuelve 150.317437565MOPMT(370000, 3.5, 360) devuelve 1661.46534383 Prueba esto y la próxima vez en la serie destacaré otras cosas que podemos hacer con HPPP. ¡Gracias! Eddie Este blog es propiedad de Edward Shore. 2013 Tutorial de programación HP Prime #2: MSGBOX, IFTHEN-ELSE, PRINT, FOR Bienvenido a otro tutorial de programación para HP Prime. En esta sesión, cubriremos MSGBOX, IF-THEN-ELSE, PRINT y el bucle FOR. MSGBOX MSGBOX: MSGOX toma una cadena y crea un cuadro de mensaje emergente. La ejecución del programa se detiene hasta que presione una tecla para confirmar el mensaje. Acceso: Cmds, 6. E/S, 8. MSGBOX El programa COMLOCK: Imagina que estás a cargo de configurar las combinaciones para los buenos bloqueos de combinación de la vieja escuela. Este programa proporciona combinaciones de tres dígitos mediante el uso de MSGBOX. EXPORT COMLOCK()BEGINLOCAL L0; L0:=RANDINT(3,0,39);**MSGBOX("SECRET: "+L0(1)+","+L0(2)+","+L0(3)); FIN; ** Gracias a Thomas Lake por señalar mi error tipográfico. Disculpas por cualquier inconveniente - Eddie (3/21/2014) Otros comandos que se destacan: RANDINT(n, a, b) genera una lista de n enteros entre a y b. Puede omitir n si desea un solo entero aleatorio. Las selecciones pueden repetirse. Las variables de lista predeterminadas de HP Prime se designan de L0 a L9. Aquí hay una salida de ejemplo para COMLOCK: IF-THEN-ELSE IF-THEN-ELSE: Estructura del programa: IF condition THEN do si la condición es verdadera; ELSE hacer si la condición es falsa; FIN; Acceso: Tmplt, 2. Rama, 2. SI ENTONCES MÁS Consejo: Puede omitir la parte ELSE si solo desea probar para ver si una condición es verdadera. Acceda a la estructura simple IF-THEN presionando Tmplt, 2. Sucursal, 1. SI ENTONCES. Acceda a <, ≤, ==, etc. presionando Mayús, 6. Tenga en cuenta que el doble es igual es necesario para comprobar la igualdad. IMPRIMIR IMPRIMIR : El comando IMPRIMIR imprime una picadura, un resultado o una combinación de ambos en la pantalla Terminal de Prime. Si se utiliza PRINT, el programa finalizará en la pantalla del terminal (salida de texto). Pulse un botón para salir. Puede acceder a la pantalla del terminal en cualquier momento pulsando el botón ON, manteniéndolo pulsado y, a continuación, pulsando el botón Dividir ( ÷ ). Acceso: Cmds, 6. E/S, 9. IMPRIMIR Consejo: Para borrar la pantalla del terminal, escriba PRINT(). Esta es una buena manera de borrar la pantalla del terminal y normalmente uso esto al principio de cualquier programa si PRINT se va a usar más adelante. El programa QROOTS (un solucionador cuadrático más, perdón por no ser chicos y chicas originales), demuestra el uso de IF-THEN-ELSE e PRINT. Aquí establecí la variable de configuración HComplex en 1, lo que permite resultados de números complejos. EXPORT QROOTS(A,B,C)BEGINLOCAL D;PRINT(); HComplex:=1;D:=B^2-4*A*C;IF D≥0 THENPRINT("Las raíces son reales."); ELSEPRINT("Las raíces son complejas."); FIN; IMPRIMIR((-B+√D)/(2*A)); IMPRIMIR((-B-√D)/(2*A)); FIN; Ejemplos:QROOTS(1,5,8) returns:Las raíces son complejas. -2.5+1.32287565553*i-2.51.32287565553*i QROOTS(2,-4,-8) returns: Las raíces son reales. 3.2360679775-1.2360679775 FOR Esta sección explorará los comandos básicos FOR structure:FOR variable FROM start TO end DO ; FIN; Todos los comandos del bucle se ejecutarán un número determinado de veces. Cada vez que termina un bucle, la variable aumenta en uno. El bucle termina cuando variable=end. Acceso: Tmplt, 3. LOOP, 1. FOR El programa SUMDIV toma cualquier entero y suma la suma de sus divisores. Por ejemplo, los divisores de 12 son 1, 12, 2, 3, 4 y 6. La suma es 28. Comandos destacados en SUMDIV :idivis: idivis(integer) devuelve una secuencia de todos los divisores if integer. Acceso: Caja de herramientas, CAS, 5. Entero, 1. Divisores Cualquier comando CAS utilizado en la programación estará precedido por "CAS". No todos los comandos CAS se pueden utilizar en la programación de HP Prime en este momento. DIM: devuelve las dimensiones de una secuencia, cadena o matriz. Se debe usar DIM en lugar de SIZE para evitar un error de argumento incorrecto. Para secuencias o vectores, DIM devuelve la longitud de una lista {length}. Para las cadenas, DIM devuelve la longitud como un número. Para las matrices, DIM devuelve la lista {número de filas, número de columnas}. Acceso: cmds, 1. cadenas, 9. DIM El programa: EXPORT SUMDIV(N)BEGINLOCAL S:=0,K,mdiv,ldiv;mdiv:=CAS.idivis(N);ldiv:=DIM(mdiv); PARA K DE 1 A LDIV(1) DOS:=S+mdiv(K); FIN; RETORNO S; FIN; ** Gracias a Thomas Lake por señalar que la variable "mat", que tenía en este programa era innecesaria. - Eddie 21/03/2013 Ejemplos:SUMDIV(12) devuelve 28. SUMDIV(24) devuelve 60. SUMDIV(85) devuelve 108. Esto concluye esta parte del tutorial de programación de HP Prime. Tutorial de programación HP Prime #3: WHILE, INPUT, KILL, REPEAT, GETKEY Este tutorial cubrirá mucho, cada uno con algunos nuevos comandos de programación en esta serie. Espero que estés listo para la intensidad. :) MIENTRAS, ENTRADA, MATA HP Prime Program: TARGET. TARGET es un juego en el que proporcionas una suposición para obtener un número deseado. Si falla, la calculadora le dirá si el número es mayor y menor. Al final del juego, la calculadora te da cómo puedes elegir lo que necesitabas para obtener el número objetivo. WHILE: Repita una serie de comandos mientras se prueba una condición específica. WHILE condition es true DOcommandsEND; Acceso: Tmplt, 3. Bucle, 5. WHILE Precaución: ¡Vigile sus ENDs! Asegúrese de que haya un FIN con cada bucle y el programa en sí. Pulse la tecla programable Check para comprobar su trabajo. INPUT: Crea una pantalla de entrada para variables. En HP Prime, la entrada puede solicitar más de una entrada. TARGET muestra INPUT con un mensaje. Una variable:INPUT(variable, "title", "label", "help text") Multi-Variable :INPUT( lista de variables, "title", lista de "etiquetas", lista de "texto de ayuda") Nota: Al pulsar Cancelar se almacenará un 0 en variable. Puede incluir código de qué hacer si el usuario presiona Cancelar, pero no es obligatorio. Acceso: Cmds, 6. E/S, 5. INPUT KILL: Finaliza la ejecución del programa. Nada muere, lo prometo. Acceso: Tmplt. 1. Bloque, 3. MATAR Programa: EXPORT TARGET()BEGINLOCAL C:=0, N:=RANDINT(1,20), G:=-1; WHILE G≠N DOC:=C+1;INPUT(G,"¿Adivina?","GUESS:","1 - 20"); SI G==0 ENTONCESMATAR; FIN; IF G < N THENMSGBOX("Superior"); FIN; IF G > N THENMSGBOX("Inferior"); FIN; FIN; MSGBOX("¡Correcto! Puntuación: "+C); FIN; Pruébalo y, por supuesto, puedes ajustar el límite más alto. Aquí hay algo para que pruebes con TARGET: 1. Agregue una cantidad limitada de conjeturas. 2. ¿Puedes mostrar la lista de conjeturas? REPEAT ULAM Algoritmo: tome un entero n. Si n es par, divídalo por 2. Si n es impar, multiplícalo por 3 y suma 1. ULAM cuenta cuántos pasos se necesitan para llegar de n a 1. REPEAT:Acceso: Tmplt, 3. Bucle, 6. REPETIR Featured: CONCAT(list1, list2) : Combina list1 y list2 en uno. Acceso: Caja de herramientas, Matemáticas, 6. Lista, 4. Concatenar EXPORT ULAM(N)BEGINLOCAL C:=1, L0:={N}; REPETIR SI FP(N/2)==0 THENN:=N/2; ELSEN:=3*N+1; FIN; C:=C+1; L0:=CONCAT(L0,{N}); HASTA N==1; MSGBOX("NO. DE PASOS="+C); RETORNO L0; FIN; Ejemplos:ULAM(5) devuelve: Cuadro de mensaje: "NO. DE PASOS=6"Lista: {5, 16, 8, 4, 2, 1} ULAM(22) devuelve:Cuadro de mensaje: " NO. DE PASOS=16"Lista: {22, 11, 34, 17, 52, 26, 13, 40, 20, 10, 5, 16, 8, 4, 2, 1} GETKEY La siguiente sección presentará un comando súper importante, GETKEY. Trabajaremos con GETKEY durante toda la serie. El programa KEYNO: La persona presiona las pulsaciones de teclas. Que cada tecla pulsa, el código vuelve a la pantalla del terminal. El programa finaliza cuando se presiona la tecla Intro. GETKEY: Devuelve el código de tecla de la última tecla presionada. El mapa clave de Prime está abajo. (La imagen es de la Guía del usuario de HP Prime) Acceso: Cmds, 6. E/S, 4. GETKEY EXPORT KEYNO()BEGINLOCAL K; IMPRIMIR(); PRINT("Presione cualquier tecla para obtener su código."); PRINT("Pulse Intro para salir."); REPEATK:=GETKEY;IF K ≥ 0 THENPRINT(K); FIN; HASTA K==30; FIN; Códigos clave de ejemplo:33: 8 tecla2: arriba 7: izquierda8: derecha12: abajo50: más45: menos Con esto concluye la Parte 3. Una vez más, no se puede decir lo suficiente, gracias por todos los comentarios y cumplidos. Y hasta la próxima, Tutorial de programación HP Prime #4: CHOOSE y CASE, Consejo sobre INPUT Bienvenido a la Parte 4 de nuestra serie de programación para Prime. La sesión de hoy cubrirá CHOOSE y CASE. Primero un consejo de Han del Foro MoHPC, que se encuentra en http://www.hpmuseum.org/cgi-sys/cgiwrap/hpmuseum/forum.cgi#255084. Gracias Han por permitirme compartir esto. Utilice la estructura IF THEN ELSE con INPUT para ejecutar un conjunto de instrucciones predeterminadas si el usuario presiona cancelar. INPUT devuelve un valor de 0 si se presiona ESC o cancelar, y 1 si se introduce un valor. SI ENTRADA(...) THEN si se introducen valoresELSE si se presiona CancelarEND; Los valores predeterminados se pueden asignar a los valores como un quinto argumento opcional para INPUT. INPUT(var, "Título", "Aviso", "Ayuda", valor predeterminado) El tipo de variable puede establecerse en números distintos de los reales. Solo recuerde almacenar dicho tipo antes del comando INPUT. Por ejemplo, si desea que var sea una cadena, almacene una cadena vacía :var:=" "; Una vez más, muchas gracias a Han. ELEGIR Y ELEGIR MAYÚSCULAS Y MINÚSCULAS : Crea un cuadro de elección emergente, similar al que se ve cuando se hace clic en un menú suave. Hay dos sintaxis para CHOOSE: Simple Syntax (hasta 14 opciones):CHOOSE(var, "title string", "item 1", "item 2", ... , "item n"); Sintaxis de lista (cantidad infinita de elementos):CHOOSE(var, "title string", {"item 1", "item 2"}); Al elegir el elemento 1 se asigna el valor de 1 a var, al elegir el elemento 2 se asigna el valor de 2 a var. Acceso: cmds, 6. E/S, 1. ELEGIR CASE: Permite diferentes casos de prueba para una variable. También incluye un escenario predeterminado (opcional). CASEIF prueba 1 ENTONCES hacer si verdadero FIN;SI prueba 2 ENTONCES hacer si verdadero FIN;... DEFAULT comandos END; Acceso: Cmds, 2. Rama, 3. CASO Veamos dos programas para demostrar tanto CHOOSE como CASE. TERMVEL - Velocidad terminal de un objeto EXPORT TERMVEL()BEGIN LOCAL L0:={9.80665,32.174},L1:={1.225,.0765},L2:={.47,1.05,1.15,.04},C,K,M,A ,T; CHOOSE(C ,"Units","SI","English");CHOOSE(K,"Tipo de objeto","Esfera","Cubo","Cilindro","En forma de lágrima"); INPUT({M,A},"Objeto",{"M=","A="},{"Masa","Área de superficie"}); T:=√((2*M*L0(C))/(L1(C)*A*L2(K))); MSGBOX("Velocidad terminal="+T); RETORNO T; FIN; Ejemplos: esfera, unidades SI, M = .05 kg, A = .0028 m ^ 2Velocidad terminal: T = 24.6640475387 m / s Cubo, US Units, M = 1.2 lb, A = .3403 ft ^ 2Velocidad terminal: T = 53.149821209 ft / s AREAC - Área de círculos, anillos y sectores ÁREA DE EXPORTACIÓNC()BEGINLOCAL C,R,S,θ,A; CHOOSE(C,"Áreas","1. Círculo","2. Anillo","3. Sector"); INPUT(R, "Radio de entrada", "R ="); CASEIF C==1 THEN A:=π*R^2; FIN; IF C==2 THEN INPUT(S,"Small Radius","r="); A:=π*(R^2-S^2); FIN;IF C== 3INPUT(θ, "Angle", "θ=");\\ Suponga que está en el modo de ángulo correctoIF HAngle==1 THEN\\ Test Angle Modeθ:=θ*π/180; FIN; A:=θ*R^2/2; FIN; FIN; MSGBOX("El área es "+A); RETORNO A; FIN; Ejemplos R = 2.5, r = 1.5, θ = π/4 radianes o 45° Círculo: 19.6349540849Anillo: 12.5663706144Sector: 2.45436926062 Así es como, en general, funcionan CHOOSE y CASE. Les doy las gracias como siempre. Es tan bueno finalmente deshacerse de un resfriado y disparar en todos los cilindros nuevamente.