Процедуры с параметрами в NXT-G
В подпрограммы, реализуемые на NXT-G, можно передавать параметры, что значительно увеличивает гибкость кода. Параметры могут быть как входными, так и выходными. Входные параметры подпрограмма получает, чтобы использовать их в своей работе. Выходные параметры являются результатом выполнения подпрограммы; они могут быть использованы при дальнейшей работе.

Разместите этот блок до основного цикла программы:

В настройках блока 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 - в новой вкладке открылось содержимое процедуры. Измените название входного параметра на более подходящее - "Длина стороны квадрата":

Сохраните файл процедуры и закройте его.

Выведем на экран блока NXT текущую длину стороны квадрата, измеряемую в оборотах двигателя. После блока Random "вытяните" мышкой ещё одну направляющую для блоков (начать создание новой направляющей - щелчок левой кнопкой мыши; завершить - двойной щелчок мыши):

Вывод числовой информации на экран NXT был подробно рассмотрен в примере 4.3.


Задание 6.9. Написать процедуру движения робота по сторонам правильного N-угольника. В качестве параметров передаются (1) число сторон правильного N-угольника и (2) длина его стороны. Параметры должны генерироваться случайно и выводиться на экран блока NXT в разных строчках.

Построим из блоков умножения и деления собственный блок. Для этого выделим два названных блока и нажмём на панели инструментов кнопку Create My Block.

Окончательно после изменения имён входных и выходных переменных блок примет вид:
