Урок 3.1. Программа EC: команда DRAWMENU
Данные две программы для калькулятора HP Prime иллюстрируют использование команд DRAWMENU и MOUSE.
Программа EC
С помощью команды DRAWMENU можно нарисовать пользовательское меню.
Какие понадобятся функции:
- head: 1-ый элемент списка
- tail: все элементы списка кроме 1-ого
- l2norm: L-2 норма вектора
- ker: ядро матрицы SPECRAD: спектральный радиус матрицы
- even: проверяет, является ли число четным
Ввод: EC(argument)
Аргумент должен быть подходящего типа для той операции, которую вы хотите выполнить:
- Для head и tail аргумент должен быть списком.
- Для l2norm аргумент должен быть вектором.
- Для ker и SPECRAD аргумент должен быть матрицей.
- Для even нужно целое число.
Примеры:
EC({7,8,9}), выбор head выдает {7}, а выбор tail выдает {8,9}.
EC([7,2,6,9]) выбор l2norm выдает √170.
EC() выбор ker выдает .
EC() выбор SPECRAD выдает 13.0384048104 (приблизительно)
В функции even результат в виде 1 означает, что число четное, а результат в виде 0, что число нечетное.
Программа
EXPORT EC(x)
BEGIN
// Настраиваемое меню CAS
// EWS 2021-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;