(495)240-8280ПН-СБ с 12:00 до 20:00
We speak English

Урок 4.1. Команды CHOOSE, CASE

Добро пожаловать. Это 4-ый урок из курса обучения программированию на графическом калькуляторе HP Prime. Сегодня мы разберем примеры использования команд CHOOSE и CASE.

Сначала совет

Используйте структуру IF THEN ELSE с командой INPUT, чтобы выполнить несколько инструкций по умолчанию, если пользователь нажимает кнопку отмены (cancel). Команда INPUT выдает значение 0, если нажата кнопка или Cancel, и значение 1, если введено значение.

IF INPUT(...) THEN
  Команды, IF если введены значения
  ELSE
  Команды, IF если нажата кнопка Cancel
END;

Значения по умолчанию могут быть присвоены значениям в качестве дополнительного пятого аргумента для INPUT.

INPUT(var, "Title", "Prompt", "Help", default value)

Можно установить любой тип переменной помимо действительных чисел. Не забудьте сохранить нужный тип перед использованием команды INPUT. Например, если вы хотите, чтобы переменная var была строкой, сохраните пустую строку:

var := " ";

Команды CHOOSE, CASE

Команда CHOOSE: Создает всплывающее окно выбора подобное тому, которое вы видите, когда кликаете на виртуальное меню.

Существует два типа синтаксиса для команды CHOOSE:

Простой синтаксис (до 14 вариантов):
CHOOSE(var, "title string", "item 1", "item 2", ... , "item n");

Списковый синтаксис (бесконечный набор единиц):
CHOOSE(var, "title string", {"item 1", "item 2"});

Выбор элемента 1 присваивает значение 1 переменной var, выбор элемента 2 присваивает переменной var значение 2.

Доступ: (I/O)(CHOOSE)

Команда CASE: Позволяет одной переменной иметь разные тестовые примеры. Также включает в себя сценарий по умолчанию (по желанию).

CASE IF test 1 THEN DO
  IF true END;
  IF test 2 THEN DO IF true END;
  ...
DEFAULT commands END;

Доступ: (Branch)(CASE)

Давайте взглянем на две программы, чтобы увидеть команды CHOOSE и CASE в действии.

Программа TERMVEL - Конечная скорость объекта

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, "Type of Object", "Sphere", "Cube",
  "Cylinder", "Tear-Shaped");

  INPUT({M, A}, "Object",
  {"M = ", "A = "}, {"Mass", "Surface Area"});

  T := √((2*M*L0(C)) / (L1(C) * A*L2(K)));

  MSGBOX("Terminal Velocity = "+T);
  RETURN T;
END;

Примеры:

Сфера, Единицы СИ, M = .05 кг, A = .0028 м^2
Terminal Velocity: T = 24.6640475387 m/s

Куб, Единицы СИ, M = 1.2 фунта, A = .3403 фут^2
Terminal Velocity: T = 53.149821209 ft/s

Программа AREAC - Площадь круга, кольца и секторы

EXPORT AREAC()
BEGIN
  LOCAL C, R, S, θ, A;
  CHOOSE(C, "Areas", "1. Circle", "2. Ring", "3. Sector");
  INPUT(R, "Input Radius", "R = ");
  CASE
    IF C == 1 THEN A := π*R^2; END;
    IF C == 2 THEN
      INPUT(S, "Small Radius", "r = ");
      A := π * (R^2-S^2);
    END;
    IF C == 3 THEN
      INPUT(θ, "Angle", "θ = ");
      // Предположим, что у вас выбран верный режим единицы угла
      IF HAngle == 1 THEN
        // Проверка режима единицы угла
        θ := θ*π/180;
      END;
      A := θ*R^2/2;
    END;
  END;
  MSGBOX("Area is " + A);
  RETURN A;
END;

Примеры:

R = 2.5, r = 1.5, θ = π/4 радиан или 45°

Circle: 19.6349540849
Ring: 12.5663706144
Sector: 2.45436926062

Именно так, в целом, работают команды CHOOSE и CASE. Спасибо вам за внимание. Приятно осознавать, что мы все же понемногу вместе разбираемся с тонкостями программирования.