HP Prime for All

English  Русский 

Author: Edward Shore (original article)

These two programs for the HP Prime illustrate the use of DRAWMENU and MOUSE.

EC

Using DRAWMENU to draw a customized menu.

Functions featured:

Input: EC(argument)

The argument needs to be appropriate type of what you want to do.

Examples:

EC({7,8,9}), choosing head will return {7} while tail returns {8,9}.
EC([7,2,6,9]) while choosing l2norm returns √170.
EC([[1,4],[-3,-12]]) while choosing ker returns [[4, -1]].
EC([[1, 4],[-3, -12]]) while choosing SPECRAD returns 13.0384048104 (approximately)

For even, a result of 1 indicates that the number is even and 0 if the number is odd.

Screen Left Screen


Program

EXPORT EC(x)
BEGIN // CAS Custom Menu
// EWS 2014-04-20

LOCAL m, m1, mx, my;
WHILE MOUSE(1) ≥ 0 DO END; RECT;
TEXTOUT_P("Choose the function.", 1, 1, 4);
TEXTOUT_P("head: 1st element of a list", 1, 18, 4);
TEXTOUT_P("tail: all elements of a list except the 1st", 1, 35, 4);
TEXTOUT_P("l2norm: L-2 norm of a vector", 1, 52, 4);
TEXTOUT_P("ker: kernel of a matrix", 1, 69, 4);
TEXTOUT_P("SPECRAD: spectral radius of a matrix", 1, 86, 4);
TEXTOUT_P("even: is the number even?", 1, 103, 4);

DRAWMENU("head", "tail", "l2norm", "ker", "SPECRAD", "even");

REPEAT m := MOUSE;
m1 := m(1);
UNTIL SIZE(m1) > 0;
mx := m1(1);
my := m1(2);

IF my ≥ 220 AND my ≤ 239 THEN 
IF mx ≥ 0 AND mx ≤ 51 THEN RETURN SUB(x, 1, 1);
END;

IF mx ≥ 53 AND mx ≤ 104 THEN RETURN SUB(x, 2, SIZE(x));
END;

IF mx ≥ 106 AND mx ≤ 157 THEN RETURN exact(ABS(x));
END;

IF mx ≥ 159 AND mx ≤ 210 THEN RETURN ker(x);
END;

IF mx ≥ 212 AND mx ≤ 263 THEN RETURN CAS.SPECNORM(x);
END;

IF mx ≥ 265 AND mx ≤ 319 THEN RETURN even(x);
END;

END;

END;

BLOTCH

Blotch Drawing Program.

To draw a square blotch, just touch the screen outside the menu.

Input: BLOTCH()

Screen

Program:

// EWS 04-20-2014
EXPORT BLOTCH()
BEGIN 
// Initialize
LOCAL m, m1, mx, my, j, k, r;
WHILE MOUSE(1) ≥ 0 DO END; 
// Clear Canvas
RECT;
LOCAL s := 50, d := 4;

// Menu - to be redrawn
DRAWMENU("Clear", "S+5", "S-5", "D+2", "D-2", "Exit");

// Start main loop
REPEAT 
// Get mouse data
REPEAT m := MOUSE; m1 := m(1);
UNTIL SIZE(m1) > 0;
mx := m1(1); my := m1(2);

DRAWMENU("Clear", "S+5", "S-5", "D+2", "D-2", "Exit");

// Clear Screen
IF (my ≥ 220 AND my ≤ 319) AND (mx ≥ 0 AND mx ≤ 51) THEN RECT;
END;

// Change Size
IF (my ≥ 220 AND my ≤ 319) AND (mx ≥ 53 AND mx ≤ 104) THEN IF s < 80 THEN s := s+5; END;
END;

IF (my ≥ 220 AND my ≤ 319) AND (mx ≥ 106 AND mx ≤ 157) THEN IF s > 5 THEN s := s-5; END;
END;

// Change Depth
IF (my ≥ 220 AND my ≤ 319) AND (mx ≥ 159 AND mx ≤ 210) THEN IF d < 8 THEN d := d+2; END;
END;

IF (my ≥ 220 AND my ≤ 319) AND (mx ≥ 212 AND mx ≤ 263) THEN IF d > 2 THEN d := d-2; END;
END;

// Exit Key
IF (my ≥ 220 AND my ≤ 319) AND (mx ≥ 256 AND mx ≤ 319) THEN BREAK;
END;

// Draw Blotch
FOR j FROM mx-s/2 TO mx+s/2 STEP d DO FOR k FROM my-s/2 TO my+s/2 STEP d DO r := RANDINT(1677215);
RECT_P(j, k, j+d-1, k+d-1, r);
END; END;

// Close main loop
UNTIL (my ≥ 220 AND my ≤ 319) AND (mx ≥ 256 AND mx ≤ 319);

RECT_P(0, 220, 319, 239);
TEXTOUT_P("DONE!", 146, 220, 4, #FF0000h);
WAIT(-1);
END;

Comments