Happy Easter!
Happy 4/20 Day!
Happy Sunday!
These two programs for the HP Prime illustrate the use of DRAWMENU and MOUSE.
EC
Using DRAWMENU to draw a customized menu.
Functions featured:
head: 1st element of a list
tail: all elements of a list except the 1st
l2norm: L-2 norm of a vector
ker: kernel of a matrix
SPECRAD: spectral radius of a matrix
even: is the number even?
Input: EC(argument)
The argument needs to be appropriate type of what you want to do.
For head and tail: the argument needs to be a list.
For l2norm: the argument needs to be a vector.
For ker and SPECRAD: the argument needs to be matrix
For even: we need an integer
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.
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
S = size of the square blotch
D = size of each box in the blotch. Each box is a randomized color.
To draw a square blotch, just touch the screen outside the menu.
Input: BLOTCH( )
Program:
EXPORT BLOTCH( )
BEGIN
// EWS 04-20-2014
// 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;
As always, thank you for your comments, compliments, and questions. Happy Sunday everyone!
I will be heading to Seattle later this week - hope to blog from the Original Starbucks when I am there.
This blog is property of Edward Shore. 2014