Создание собственных блоков
Процедуры с параметрами в NXT-G
В подпрограммы, реализуемые на NXT-G, можно передавать параметры, что значительно увеличивает гибкость кода. Параметры могут быть как входными, так и выходными. Входные параметры подпрограмма получает, чтобы использовать их в своей работе. Выходные параметры являются результатом выполнения подпрограммы; они могут быть использованы при дальнейшей работе.
Пример 6.2. Написать процедуру движения робота по квадрату. Входной параметр - длина стороны квадрата - задаётся случайным числом в диапазоне от 1 до 5 оборотов мотора.
Вначале самостоятельно напишите простую программу движения робота по квадрату со стороной в 1 оборот мотора (без использования процедуры).
Добавьте в программу новый блок Random (случайное) из меню Data (данные) полной палитры.
Разместите этот блок до основного цикла программы:
В настройках блока Random задайте диапазон генерируемого случайного числа от 1 до 5.
Для того, чтобы заставить робота проезжать столько оборотов, сколько выпадет в блоке Random, нужно передать это число на разъём Duration (длительность) блока Move (при наведении указателя мыши на разъём появляется всплывающая подсказка).
Обратите внимание на следующее:
- При передаче данных на разъём Duration в настройках блока Move можно указывать только Degrees, Rotations или Seconds, но не Unlimited. При этом варианты Degrees и Rotations обрабатываются одинаково - как Degrees. Поэтому выберите Degrees.
- Число оборотов, которое должен произвести мотор, следует перевести в градусы из расчёта: один оборот мотора 360°.
- Поместите в цикл блок Math (Математика) из меню Data, и настройте его на умножение (Multiplication) на 360°.
В блоке Math доступны шесть операций:
- Addition - сложение;
- Substraction - вычитание;
- Multiplication - умножение;
- Division - деление;
- Absolute Value - абсолютная величина;
- Square Root - квадратный корень.
Соедините шиной данных выходной разъём блока Random и входной разъём A блока Math.
Затем соедините шиной выходной разъём Result блока Math (числовые выходные разъёмы помечаются символом "#") и входной разъём Duration блока Move, который "соответствует" длине стороны квадрата.
Проверьте работу программы.
Оформим часть программы в виде процедуры (подпрограммы) с параметром. Для этого следует выделить всё, что по смыслу должно попадать в процедуру, кроме параметра (в данном случае - кроме блока Random),
и нажать кнопку Create My Block (создать блок) на панели инструментов или воспользоваться меню Edit \ Make A New My Block.
В появившемся окне введите в соответствующие поля имя подпрограммы (например, sq_param) и описание подпрограммы по-русски, а затем создайте иконку блока. В конце нажмите на кнопку Finish.
Обратите внимание на то, что у нового блока появились входной и выходной разъёмы для передачи данных:
Выполните двойной щелчок на блоке sq_param - в новой вкладке открылось содержимое процедуры. Измените название входного параметра на более подходящее - "Длина стороны квадрата":
Сохраните файл процедуры и закройте его.
Удалите блок sq_param из программы, а затем снова добавьте его из палитры My Blocks. Обратите внимание на изменение всплывающей подсказки при наведении указателя мыши на разъём блока sq_param:
Выведем на экран блока NXT текущую длину стороны квадрата, измеряемую в оборотах двигателя. После блока Random "вытяните" мышкой ещё одну направляющую для блоков (начать создание новой направляющей - щелчок левой кнопкой мыши; завершить - двойной щелчок мыши):
Вывод числовой информации на экран NXT был подробно рассмотрен в примере 4.3.
После добавления всех нужных блоков и их соединения получим следующую программу:
Рис. 6.15. Движение робота по квадрату с использованием подпрограммы с входным параметром и выводом информации на экран
Настройки блока Display тоже посмотрите в примере 4.3 главы 4.
Задание 6.7. Написать программу движения робота по "квадратной" спирали: один шаг, поворот, два шага, поворот и т. д. (Рис. 6.16).
Задание 6.8. Написать программу движения робота по "квадратной" спирали: две ветки длиной 1 шаг, затем две ветки длиной 2 шага и т. д. (Рис. 6.16). Организовать вывод на экран длину очередной ветки (в шагах).
Задание 6.9. Написать процедуру движения робота по сторонам правильного N-угольника. В качестве параметров передаются (1) число сторон правильного N-угольника и (2) длина его стороны. Параметры должны генерироваться случайно и выводиться на экран блока NXT в разных строчках.
Рассмотрим процесс создания собственного блока с входным и выходным параметрами.
Пример 6.3. Разработать блок для перевода градусов в радианы.
Для решения этой задачи мы должны не только составить программу вычисления радиан, но и предусмотреть два момента: (1) в наш код данные должны откуда-то поступать и (2) результат должен куда-то выводиться. Это необходимо сделать с той целью, чтобы в программе явно присутствовали входная и выходная шины данных. Договоримся, что данные (градусы) будут поступать из генератора случайных чисел, а результат (радианы) будет выводиться на экран. Получим следующую программу, из которой для нас наиболее интересны математические блоки умножения и деления; их настройки показаны на Рис. 6.17:
Построим из блоков умножения и деления собственный блок. Для этого выделим два названных блока и нажмём на панели инструментов кнопку Create My Block.
Введём имя блока и его описание (Рис. 6.18). Обратите внимание на то, что в теле блока появился выходной параметр (Result).
Окончательно после изменения имён входных и выходных переменных блок примет вид (Рис. 6.19):