+- HP Forums (https://www.hpmuseum.org/forum)
+-- Forum: HP Calculators (and very old HP Computers) (/forum-3.html)
+--- Forum: HP Prime (/forum-5.html)
+--- Thread: Challenge: bi-directional terminal view. (I/O) (/thread-15332.html)
Hello, the vast majority of graphics terminals are (I / O). You can simulate this feature by replicating keyboard input by printing the value on the output.
print( ">"+radius );
print( ">" + base );
for the student to switch to a language like c ++, see a functional similarity between hp-prime and c ++ code
Examples
Therefore, hp-prime team requires a command to read the data from the terminal view, the challenge is to make the terminal view bi-directional input and output of data.
PHP Code:
export Area_of_Circle() begin local radius, area; print(); print( "please enter the radius of a circle" ); wait; input( radius ); print( ">"+radius ); area := 3.14 * radius ^ 2; print( "the area is :" + area ); return "done"; end;
PHP Code:
export area, base, height, answer; //export area, base:=3, height:=4, answer; const const1:= '1/2'; export Area_of_Triangle() begin // local area, base, height, answer; print(); area := const1*'(base * height)'; print2d( 'area'=area ); // FIRMWARE )2021 print( "Please enter the base of the triangle " ); wait; input( base ); print( ">" + base ); print( "Please enter the height of the triangle " ); wait; input( height ); print( ">" + height ); answer := eval(area); print( "The area of the triangle is: " + answer ); return { 'base'=base, 'height'=height, area=answer }; end;
(07-12-2020 08:26 PM)DrD Wrote: As subject matter expert, a trivial exercise for you is to make a "bi-directional terminal view." Imagine, you could rotate text, or make feature-rich fonts! Don't wait for "hp-prime team," realize your own challenge, bring your dream to life!
hp-prime team made BLIT_P, GETPIX_P, PIXON_P, PIXOFF_P, RECT_P, and TEXTOUT_P. The tools are already there, require yourself to show us the way, sir.
I can do it. Also, I already did that on the hp50. Explore the following RPL-encoded application.
This interface emulates the I/O of the TIvoyage200/TI89 calculator, it also contains a bidirectional terminal. https://www.hpcalc.org/details/7282
The point is, I'm teaching algorithmic logic to high school students. We need a platform that provides a simple I/O data interface embeded, not a INFORM, that confuses them.
statement to read string data
Input( { { name, [ 2 ] } } ) ;
Hp-prime numerical code (Home)
PHP Code:
export split_string() begin local name, n; print(); print( " Please enter your name " ); wait; input( { {name, [ 2 ] } } ); // =( print( ">" + name ); for n from 1 to dim(name) step 1 do print( mid( name, n, 1 ) ) ; end; return "Done"; end;
Comparison of inform versus input cmd.
Inform command tutorial.
PHP Code:
// versión 0.0.9e - mar 23/2017 by: CompSystems
// Los primeros ejemplos es un demostración general del uso de la orden INPUT, luego se muestran desde el caso mas simple hasta el mas complejo
//Global for this file //xx := 0; //yy := 0;
//Global and visible variables for all files export xx := 7; export yy := 6; export zz := 5; export inputv0() BEGIN // request xx, yy, zz data //xx := 5; print( ); print( "input cmd with a variable" ); wait; input( xx ); print( "foo1()" ); wait; //foo1(); input( yy ); print( "foo2()" ); wait; //foo2(); input( zz ); print( "foo3()" ); wait; //foo3(); return { "xx: "+xx, "yy: "+yy, "zz: "+zz }; END;
export inputDemo() begin local r; local resetVAL_r; local initVAL_r; initVAL_r := 1; initVAL_r := 5; local ObjectType_Real := 0; local ObjectType := ObjectType_Real; local title := "input cmd, demo"; local ok := true; local cancel := false; local keyPressedOnMenu := cancel; keyPressedOnMenu := input ( { { r, [ ObjectType ] } }, title, { "Radious:" }, { "Entre radious" }, { resetVAL_r }, { initVAL_r } ); if keyPressedOnMenu == ok then return( "Area: " + pi*r^2 +"u²" ); else return "Done"; end; end;
export inputv01() BEGIN // I: La forma más simple de INPUT CMD, requiere un solo argumento, el nombre de la variable a modificar
// ARGUMENTO#1 variable(s) obligatoria(s): por ejemplo xx // ARGUMENTO#2 etiqueta opcional: si no se incluye este argumento, se agrega automáticamente a la caja de dialogo // el mismo nombre de la variable más ":" , en este caso "xx:" // ARGUMENTO#3 titulo opcional de la caja de dialogo: por defecto coloca el nombre "Input" // ARGUMENTO#4 ayuda opcional: agrega la cadena "Enter value for" + nombre de la variable, en este caso // "Enter value for xx" si la calculadora está en language/English // ARGUMENTO#5 valores opcionales de restablecimiento de cada variable // ARGUMENTO#6 valores iniciales que se muestran en cada variable (opcionales) local xx; xx := 4; // valor inicial constante de la variable de almacenamiento siempre que se llame a la orden de usuario inputv01() input( xx ); // un solo argumento // [enter] ó [ok] ejecuta los campos de la caja de dialogo // [esc] ó [cancel] sale de la caja de dialogo sin modificar los campos de entrada.
return "xx: "+xx; END;
//Código anterior sin comentarios export inputv1() BEGIN local xx; xx := 4; input( xx ); return "xx: "+xx; END;
export inputFX() BEGIN F1:= 'X^2'; input( F1 ); return "F1: "+F1; END;
export unitVar, strVar; export inputTypes() BEGIN X:=0; Y:=0;
//export xx := 7; export inputv1a() BEGIN // RECUPERARANDO EL ULTIMO VALOR ASIGNADO, se debe crear xx como // variable global "export xx := 7;" antes de la definición de la función input( xx ); return "xx: "+xx; END;
export inputv1b() BEGIN // RECUPERARANDO EL ULTIMO VALOR ASIGNADO sin usar el EXPORT CMD, //también puede usarse variables de almacenamiento de números reales [A,B,...,Z, THETA] (EN MAYÚSCULAS) // conocidas como "USER VARIABLES"
input( X ); return "X: "+X; END;
export CheckingKeystrokesInput() begin local ok := true; local cancel := false; local keyPressedOnMenu := cancel; keyPressedOnMenu := input(X); if keyPressedOnMenu == ok then return X; else return "Done"; end; end;
//export xx := 7; export inputv1c() BEGIN // Agregando TÍTULO PERSONALIZADO, argumento #2 input( xx, "titulo» Modificando xx" ); return "xx: "+xx; END;
//export xx := 7; export inputv1d() BEGIN // Agregando TÍTULO Y NOMBRE DE LA ETIQUETA PERSONALIZADA, argumentos #2-3 input( xx, "titulo» Modificando xx", "etiqueta» xx:" ); // note que la ayuda automáticamente elimina los dos puntos si los hay al final de la etiqueta // mostrando solo "Enter value for etiqueta X" yy no "Enter value for etiqueta X:" return "xx: "+xx; END;
//export xx := 7; export inputv1e() BEGIN // Agregando TÍTULO, ETIQUETA Y AYUDA PERSONALIZADA, argumentos #2-4 input( xx, "titulo» Modificando xx","etiqueta» xx:","Ayuda» Ingrese valor para la etiqueta xx" ); return "xx: "+xx; END;
//export xx := 7; export inputv1f() BEGIN // agregando TITULO, ETIQUETA, AYUDA, Y VALOR DE REINICIO PERSONALIZADO, argumentos #2-5 local valorDeReinicio := 5.1; input( xx, "titulo» Modificando xx", "etiqueta» xx:", "Ayuda» Ingrese valor para la etiqueta xx", valorDeReinicio ); // el valor de reinicio se coloca con la secuencia [shift]+[esc] ó solo [backspace] //Resetting all the fields oprima [shift]+[clear] return "xx: "+xx; END;
//export xx := 7; export inputv1g() BEGIN // agregando TÍTULO, ETIQUETA, AYUDA, VALOR DE REINICIO E INICIAL PERSONALIZADO, argumentos #2-5 //xx := 5.2; // ya no es necesario definir un valor inicial en esta forma local valorDeReinicio := 5.1234; local valorInicial := 5.2; input( xx, "titulo» Modificando xx", "etiqueta» xx:", "Ayuda» Ingrese valor para la etiqueta xx", valorDeReinicio, valorInicial ); return "xx: "+xx; END;
//export xx := 7; export inputv1h() BEGIN // ARGUMENTOS POR DEFECTO se agrega {} y para campo vacío "" // {} para nombre de etiqueta por defecto yy ayuda vacía o sin texto input( xx, "titulo» Modificando xx", {}, "" ); return "xx: "+xx; END;
// II: INPUT con varias variables
//export xx := 7; export yy := 0; export zz := 0; export inputv02() BEGIN // para un CONJUNTO DE VARIABLES se abarcan entre {} input( { xx, yy, zz }, "titulo» Modificando xx, yy, zz", "etiqueta» xx:", "Ayuda» Ingrese valor para la etiqueta xx" ); // note que las cadenas de texto para etiqueta yy ayuda solo afectan a la primera variable return { "xx: "+xx, "yy: "+yy, "zz: "+zz }; END;
//export xx := 7; export yy := 0; export zz := 0; export inputv2a() BEGIN // para un CONJUNTO DE ETIQUETAS Y AYUDAS SE ABARCAN ENTRE {} input( { xx, yy, zz }, "titulo» Modificando xx, yy, zz", { "etiqueta» xx:", "etiqueta» zz:", "etiqueta» zz:" }, { "Ayuda» Ingrese valor para la etiqueta xx", "Ayuda» Ingrese valor para la etiqueta yy", "Ayuda» Ingrese valor para la etiqueta zz" } ); return { "xx: "+xx, "yy: "+yy, "zz: "+zz }; END;
//export xx := 7; export yy := 0; export zz := 0; export a := 4, b := 3, c := 2, d := 1, e1 := 0; export f := 10; export inputv2b() BEGIN // Si hay más de 7 variables LOS CAMPOS SE MUESTRAN EN N PANTALLAS input( { xx, yy, zz, a, b, c, d, e1, f }, "titulo» modificando n variables", { "etiqueta» xx:", "etiqueta» yy:", "etiqueta» zz:" }, { "Ayuda» Ingrese valor para la etiqueta xx", "Ayuda» Ingrese valor para la etiqueta yy", "Ayuda» Ingrese valor para la etiqueta zz" } ); // puede completar las cadenas de texto para las etiquetas yy ayuda para A,B,C,D,EE // con la tecla virtual [page #/#] se avanza ó REGRESA entre pantallas return { xx, yy, zz, a, b, c, d, e1, f }; END;
//export xx := 7; export yy := 0; export zz := 0; //export a := 4, b := 3, c := 2, d := 1, e1 := 0; //export f := 10; export inputv2c() BEGIN // para un CONJUNTO DE TÍTULOS se abarcan entre {} input( { xx, yy, zz, a, b, c, d, e1, f }, { "Titulo» modificando variables xx, yy, ... d", "titulo» modificando variable ee, f" }, { "etiqueta» xx:", "etiqueta» yy:", "etiqueta» zz:" }, { "Ayuda» Ingrese valor para la etiqueta xx", "Ayuda» Ingrese valor para la etiqueta yy", "Ayuda» Ingrese valor para la etiqueta zz" } ); return { xx, yy, zz, a, b, c, d, e1, f }; END;
// III: Variable con n elementos
export inputv03() BEGIN // Variable con n elementos tipo LISTA local list1 := { 5, 4, 3, 2}; input( {list1[ 1 ], list1[ 2 ], list1[ 3 ], list1[ 4 ]}, "T» Mod los elementos de una lista", { "list[1]:", "list[2]:", "list[3]:", "list[4]:" } ); return list1; END;
export inputv3a() BEGIN // Variable con n elementos tipo ARRAY local array1 := [[1,2],[3,4]]; input( { array1[ 1,1 ], array1[ 1,2 ], array1[ 2,1 ], array1[ 1,2 ] }, "T» Mod los elementos de un arreglo", { "M[1,1]:", "M[1,2]:", "M[2,1]:", "M[2,1]:" } ); return array1; END;
export inputv3b() BEGIN // Variable con n elementos tipo CADENA DE CARACTERES local str1 := "abcdefgh"; input( { str1[ 1 ], str1[ 2 ], str1[ 3 ], str1[ 4 ], str1[ 5 ], str1[ 6 ], str1[ 7 ] }, "T» Mod los elementos de una cadena" ); return str1; END;
export inputv3c() BEGIN // POSICIONANDO LOS CAMPOS DE ENTRADA ó // desfasadolos xx% hacia la derecha, con x1% de ancho // tercer argumento entre llaves local offsetField0 := 0; //0% local offsetField5 := 5; //10% local offsetField10 := 10; //% local offsetField15 := 15; //% local offsetField20 := 20; //% local offsetField25 := 25; //% local offsetField30 := 30; //% local offsetField40 := 40; //% local offsetField45 := 45; //% local offsetField50 := 50; //% //... local offsetField100 := 100; //100% local widthField0 := 0; //0% local widthField10 := 10; //% local widthField15 := 15; //% local widthField20 := 20; //% local widthField25 := 25; //% local widthField30 := 30; //% local widthField40 := 40; //% local widthField50 := 50; //% // ...
// page 1 local lineField0 := 0; local lineField1 := 1; local lineField2 := 2; local lineField3 := 3; local lineField4 := 4; local lineField5 := 5; local lineField6 := 6; // page 2 local lineField7 := 7; local lineField8 := 8; // ...
export inputcheckv04() BEGIN // Seleccion de una dato por local checkbox := 0; local checkbox_true := true; local checkbox_false := false; input( { { X, checkbox }, { Y, checkbox } } ); return [ X, Y ]; // las teclas [±] ó [enter] ó [CHECK] cambian el estado de la casilla END;
export inputcheckv4a() BEGIN // AGRUPANDO CAMPOS, solo un campo se puede chulear local checkbox := 0; local checkbox_true := true; local checkbox_false := false; local group2_checkbox := 2; local group3_checkbox := 3; local group4_checkbox := 4; input( { { X,group2_checkbox }, { Y,checkbox }, { Z,checkbox }, { W,checkbox } } ); return [ X, Y, Z, W ]; END;
export posList := 2; // global export inputDropDownv05() BEGIN // Selección de una dato por menú desplegable local list1 := { 1, 2, 3, 4 }; input( { { posList, list1 } }, "Titulo» menú desplegable", "list" ); return "opcion "+posList+": "+list1[posList]; END;
export inputIntroduction() BEGIN // truco para mostrar una introducción
local offsetField0 := 0; //0% local offsetField5 := 5; //10% local offsetField10 := 10; //% local offsetField15 := 15; //% local offsetField20 := 20; //% local offsetField25 := 25; //% local offsetField30 := 30; //% local offsetField40 := 40; //% local offsetField45 := 45; //% local offsetField50 := 50; //% //... local offsetField100 := 100; //100% local widthField0 := 0; //0% local widthField10 := 10; //% local widthField15 := 15; //% local widthField20 := 20; //% local widthField25 := 25; //% local widthField30 := 30; //% local widthField40 := 40; //% local widthField50 := 50; //% // ...
// page 1 local lineField0 := 0; local lineField1 := 1; local lineField2 := 2; local lineField3 := 3; local lineField4 := 4; local lineField5 := 5; local lineField6 := 6; // page 2 local lineField7 := 7; local lineField8 := 8; // ...
export testInputList2() begin // usando las variables de USUARIO L0, ... L9 //local L0, L1, ..., L9; // NO SE REQUIEREN ESTAS VARIABLES DEFINIRLAS COMO LOCALES local resetVAL_L1, resetVAL_L2; local initVAL_L1, initVAL_L2;
local ObjectType_List :=6; local ObjectType := ObjectType_List ; local title := "Type Allow: List "; local ok := true; local cancel := false; local keyPressedOnMenu := cancel;
local ObjectType_Symbolic := 8; local ObjectType := ObjectType_Symbolic; local title := "Type Allow: Symbolic"; local ok := true; local cancel := false; local keyPressedOnMenu := cancel;
//USER VARS A := 1; B:=2; X := 5.9; L1 := {1,{2},"HELLO"}; M1 := [[1,2,3],[4,5,6]]; Z1 := 3+4*i;
// APP VARS PRINT( "F(X) Function app user symbolic variables" ); Function.F1 := 'X^3-6*X^2+11*X-6'; // OR F1 := 'X^3-6*X^2+11*X-6'; OR CAS("F3(X):=X^3-6*X^2+11*X-6"); or sto('X^3-6*X^2+11*X-6',F1); F2 := 'X^2-3*X+2'; F0 := 'X^3-0*X^2+X'; CAS("F3(X):=X^3"); CAS("F4(X):=X^3-2"); sto('X+5',F5);
Another even more difficult challenge, not only for hp-prime developers but also for experts in graphical interfaces, is printing in pretty-print (2D), I think the ti89 and ti-nspire series calculators are the only ones that print in 2D. This facilitates the visualization of results mathematical expressions.
HP-Prime 2015 firmware print versus TI-Basic print2D 1994 firmware