Опубликован: 10.09.2014 | Уровень: для всех | Доступ: платный | ВУЗ: Оренбургский государственный педагогический университет
Лекция 6:

Создание собственных блоков

< Лекция 5 || Лекция 6: 12 || Лекция 7 >

Процедуры с параметрами в NXT-G

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

Пример 6.2. Написать процедуру движения робота по квадрату. Входной параметр - длина стороны квадрата - задаётся случайным числом в диапазоне от 1 до 5 оборотов мотора.

Вначале самостоятельно напишите простую программу движения робота по квадрату со стороной в 1 оборот мотора (без использования процедуры).

Добавьте в программу новый блок Random (случайное) из меню Data (данные) полной палитры.

Блок генерации случайного числа из меню Data

Рис. 6.5. Блок генерации случайного числа из меню Data

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

Создание процедуры с входным параметром: шаг 1

Рис. 6.6. Создание процедуры с входным параметром: шаг 1

В настройках блока Random задайте диапазон генерируемого случайного числа от 1 до 5.

Настройки блока Random

Рис. 6.7. Настройки блока Random

Для того, чтобы заставить робота проезжать столько оборотов, сколько выпадет в блоке Random, нужно передать это число на разъём Duration (длительность) блока Move (при наведении указателя мыши на разъём появляется всплывающая подсказка).

Обратите внимание на следующее:

  • При передаче данных на разъём Duration в настройках блока Move можно указывать только Degrees, Rotations или Seconds, но не Unlimited. При этом варианты Degrees и Rotations обрабатываются одинаково - как Degrees. Поэтому выберите Degrees.
  • Число оборотов, которое должен произвести мотор, следует перевести в градусы из расчёта: один оборот мотора 360°.
  • Поместите в цикл блок Math (Математика) из меню Data, и настройте его на умножение (Multiplication) на 360°.
Настройки блока Math

Рис. 6.8. Настройки блока Math

В блоке Math доступны шесть операций:

  • Addition - сложение;
  • Substraction - вычитание;
  • Multiplication - умножение;
  • Division - деление;
  • Absolute Value - абсолютная величина;
  • Square Root - квадратный корень.

Соедините шиной данных выходной разъём блока Random и входной разъём A блока Math.

Затем соедините шиной выходной разъём Result блока Math (числовые выходные разъёмы помечаются символом "#") и входной разъём Duration блока Move, который "соответствует" длине стороны квадрата.

Создание процедуры с входным параметром: шаг 2

Рис. 6.9. Создание процедуры с входным параметром: шаг 2

Проверьте работу программы.

Оформим часть программы в виде процедуры (подпрограммы) с параметром. Для этого следует выделить всё, что по смыслу должно попадать в процедуру, кроме параметра (в данном случае - кроме блока Random),

Создание процедуры с входным параметром: шаг 3

Рис. 6.10. Создание процедуры с входным параметром: шаг 3

и нажать кнопку Create My Block (создать блок) на панели инструментов или воспользоваться меню Edit \ Make A New My Block.

В появившемся окне введите в соответствующие поля имя подпрограммы (например, sq_param) и описание подпрограммы по-русски, а затем создайте иконку блока. В конце нажмите на кнопку Finish.

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

Входной и выходной разъёмы подпрограммы

Рис. 6.11. Входной и выходной разъёмы подпрограммы

Выполните двойной щелчок на блоке sq_param - в новой вкладке открылось содержимое процедуры. Измените название входного параметра на более подходящее - "Длина стороны квадрата":

Изменение названия входного параметра подпрограммы

Рис. 6.12. Изменение названия входного параметра подпрограммы

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

Удалите блок sq_param из программы, а затем снова добавьте его из палитры My Blocks. Обратите внимание на изменение всплывающей подсказки при наведении указателя мыши на разъём блока sq_param:

Всплывающая подсказка входного параметра подпрограммы

Рис. 6.13. Всплывающая подсказка входного параметра подпрограммы

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

Создание новой направляющей для блоков

Рис. 6.14. Создание новой направляющей для блоков

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

После добавления всех нужных блоков и их соединения получим следующую программу:

Движение робота по квадрату с использованием подпрограммы с входным параметром и выводом информации на экран

Рис. 6.15. Движение робота по квадрату с использованием подпрограммы с входным параметром и выводом информации на экран

Настройки блока Display тоже посмотрите в примере 4.3 главы 4.

Задание 6.7. Написать программу движения робота по "квадратной" спирали: один шаг, поворот, два шага, поворот и т. д. (Рис. 6.16).

Задание 6.8. Написать программу движения робота по "квадратной" спирали: две ветки длиной 1 шаг, затем две ветки длиной 2 шага и т. д. (Рис. 6.16). Организовать вывод на экран длину очередной ветки (в шагах).

Квадратная спираль к заданию 6.7 (слева) и к заданию 6.8 (справа)

Рис. 6.16. Квадратная спираль к заданию 6.7 (слева) и к заданию 6.8 (справа)

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

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

Пример 6.3. Разработать блок для перевода градусов в радианы.

Для решения этой задачи мы должны не только составить программу вычисления радиан, но и предусмотреть два момента: (1) в наш код данные должны откуда-то поступать и (2) результат должен куда-то выводиться. Это необходимо сделать с той целью, чтобы в программе явно присутствовали входная и выходная шины данных. Договоримся, что данные (градусы) будут поступать из генератора случайных чисел, а результат (радианы) будет выводиться на экран. Получим следующую программу, из которой для нас наиболее интересны математические блоки умножения и деления; их настройки показаны на Рис. 6.17:

Программа для перевода градусов в радианы

Рис. 6.17. Программа для перевода градусов в радианы

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

Введём имя блока и его описание (Рис. 6.18). Обратите внимание на то, что в теле блока появился выходной параметр (Result).

Первый шаг создания блока для перевода градусов в радианы

Рис. 6.18. Первый шаг создания блока для перевода градусов в радианы

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

Блок для перевода градусов в радианы

Рис. 6.19. Блок для перевода градусов в радианы
< Лекция 5 || Лекция 6: 12 || Лекция 7 >
Павел Ужакин
Павел Ужакин
Беларусь, Минск, БГПУ им. М.Танка