Язык NXT-G позволяет программисту создавать собственные блоки, наподобие блока Move. При этом видимый программный код значительно сокращается, что в случае NXT-G очень важно, так как на экране умещается только небольшая часть кода и часто приходится прибегать к прокрутке.
Собственные блоки можно использовать в программе многократно, а также создавать с их участием новые блоки.
В этом разделе мы рассмотрим простейший вариант блоков: без входных и выходных параметров. В дальнейшем мы изучим более сложные случаи.
Задание 6.1. Записать в тетрадь на сколько градусов нужно повернуть колёса робота, чтобы сам робот повернулся на 90°.
Задание 6.2. Написать программу движения робота по квадрату по следующей схеме:
Задание 6.3. Написать программу "Восьмёрка", в которой робот двигается по следующей траектории [4]:
Начало движения - в центре фигуры; цифрами обозначен порядок прохождения сторон. Схема программы:
Пример 6.1. Написать ту же самую программу, используя подпрограмму (My block). Для этого:
Edit \ Make A New My Block (Редактирование \ Создать новый блок);
My Block Builder (Конструктор блоков) в поле Block Name ввести имя блока Square (только английскими буквами) и описание блока в поле Block Description (можно по-русски), например "Процедура движения по квадрату";
Next (Далее);
Finish (Конец);
Square. Если выполнить на нём двойной щелчок, то на соседней вкладке (на новом листе) откроется содержимое блока, которое при необходимости можно отредактировать. Выбирать свои блоки можно из палитры Custom palette (Моя палитра);Тогда программа движения по восьмёрке может выглядеть, например, так
(рис 6.1) Движение робота по квадрату с использованием подпрограммы
или так
(рис 6.2) Движение робота по квадрату с использованием подпрограммы и цикла
Задание 6.4. Сравните работу двух вариантов программ.
Обратите внимание, доступ к конструктору блоков можно получить и через панель инструментов (Рис. 6.3):
(рис 6.3) Кнопка Create My Block на панели инструментов
Задание 6.5. Написать программу движения робота по правильному треугольнику. Подсказка: для вычисления угла поворота используйте пропорцию.
Задание 6.6. (Из [4]). Написать программу для движения робота, который, используя программу из задания 6.5, при своём движении "рисует" мозаику (Рис. 6.4). Для того, чтобы сделать движение робота более наглядным, закрепите на робот маркер острием вниз и подложите на стол бумагу.
(рис 6.4) Пример траектории движения робота к заданию 6.6
В подпрограммы, реализуемые на NXT-G, можно передавать параметры, что значительно увеличивает гибкость кода. Параметры могут быть как входными, так и выходными. Входные параметры подпрограмма получает, чтобы использовать их в своей работе. Выходные параметры являются результатом выполнения подпрограммы; они могут быть использованы при дальнейшей работе.
Пример 6.2. Написать процедуру движения робота по квадрату. Входной параметр - длина стороны квадрата - задаётся случайным числом в диапазоне от 1 до 5 оборотов мотора.
Вначале самостоятельно напишите простую программу движения робота по квадрату со стороной в 1 оборот мотора (без использования процедуры).
Добавьте в программу новый блок Random (случайное) из меню Data (данные) полной палитры.
(рис 6.5) Блок генерации случайного числа из меню Data
Разместите этот блок до основного цикла программы:
(рис 6.6) Создание процедуры с входным параметром: шаг 1
В настройках блока Random задайте диапазон генерируемого случайного числа от 1 до 5.
(рис 6.7) Настройки блока Random
Для того, чтобы заставить робота проезжать столько оборотов, сколько выпадет в блоке Random, нужно передать это число на разъём Duration (длительность) блока Move (при наведении указателя мыши на разъём появляется всплывающая подсказка).
Обратите внимание на следующее:
Duration в настройках блока Move можно указывать только Degrees, Rotations или Seconds, но не Unlimited. При этом варианты Degrees и Rotations обрабатываются одинаково - как Degrees. Поэтому выберите Degrees.
Math (Математика) из меню Data, и настройте его на умножение (Multiplication) на 360°.
(рис 6.8) Настройки блока Math
В блоке Math доступны шесть операций:
Соедините шиной данных выходной разъём блока Random и входной разъём A блока Math.
Затем соедините шиной выходной разъём Result блока Math (числовые выходные разъёмы помечаются символом "#") и входной разъём Duration блока Move, который "соответствует" длине стороны квадрата.
(рис 6.9) Создание процедуры с входным параметром: шаг 2
Проверьте работу программы.
Оформим часть программы в виде процедуры (подпрограммы) с параметром. Для этого следует выделить всё, что по смыслу должно попадать в процедуру, кроме параметра (в данном случае - кроме блока Random),
(рис 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.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) Блок для перевода градусов в радианы
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.