Оренбургский государственный педагогический университет
Опубликован: 10.09.2014 | Доступ: свободный | Студентов: 1998 / 461 | Длительность: 05:42:00
ISBN: 978-5-9556-0164-9
Лекция 5:

Ветвление в NXT-G

< Лекция 4 || Лекция 5 || Лекция 6 >
Аннотация: Цель: изучить способы организации ветвлений в языке NXT-G.

Кроме последовательного и циклического исполнения команд язык NXT-G предусматривает ветвление. Его можно осуществить при помощи оператора Switch, который проверяет логическое условие и пускает программу по одной из двух (или более) ветвей.

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

Пример 5.1. Робот должен начать движение после нажатия на оранжевую кнопку Start. Если датчик цвета оказывается над красным объектом, то робот должен сказать "Red" и остановиться, а программа - завершиться. Иначе робот должен перемещаться и говорить: "Detect".

Решение выглядит примерно так (обратите внимание на настройку блока Switch).

Программа к примеру 5.1

увеличить изображение
Рис. 5.1. Программа к примеру 5.1

Самый первый блок Wait в этой программе позволяет запустить робот кнопкой Start на блоке.

Робот может говорить при помощи блока Sound. Его настройки приведены на Рис. 5.2. Блок Sound во второй ветке настраивается аналогично.

Настройки блока Sound из примера 5.1

увеличить изображение
Рис. 5.2. Настройки блока Sound из примера 5.1

В настройке блока Sound обратите внимание на флажок Wait for completion. Если он установлен, то вначале проигрывается заданный звук, и только потом управление переходит к следующему блоку. Если же флажок снять, то включается звук, после чего управление немедленно переходит к следующему блоку.

В конце бесконечного цикла стоит задержка на 0,1 с.

Итак, в поле Control блока Switch может быть один из двух вариантов:

  • Sensor - поведение робота зависит от логического условия, связанного с текущими значениями сенсора;
  • Value - поведение робота зависит от результата сравнения числового, текстового или логического значения, поступившего извне, с заданным значением.

В поле Display флажок Flat view позволяет включить полное отображение блока Switch (с двумя ветвями) или отключить его. В последнем случае обе ветви отображаются в виде вкладок, причём в данный момент видна только одна из них (Рис. 5.3). Вкладка, помеченная "птичкой", соответствует ветке, по которой пойдёт программа в случае, если проверяемое условие истинно, а вкладка с крестом - ложному значению проверяемого условия.

Компактное отображение блока Switch

Рис. 5.3. Компактное отображение блока Switch

Пример 5.2. Робот говорит "No", если датчик касания не нажат, и "Yes" - если нажат. Обратите внимание на настройки блока Switch: в поле Condition можно поменять сравниваемое значение. В блоке Touch Sensor в поле Action выбрано Pressed.

Пример использования логического типа данных в блоке Switch

Рис. 5.4. Пример использования логического типа данных в блоке Switch

Пример 5.3. На экране NXT последовательно сменяются пять изображений часов в зависимости от счётчика цикла. Для изображения часов использованы файлы Time00 - Time04. Дополнительные вкладки значений блока Switch можно добавить нажатием на кнопку "+" в поле Condition. Эта возможность доступна только при выключенном флажке Flat view. Вкладки, соответствующие различным значениям, имеют подписи (появляются при наведении на них указателя мыши). Если обрабатываемых значений больше пяти, то для того, чтобы увидеть все добавленные вкладки, нужно "растянуть" блок Switch. Для этого нужно навести указатель мыши на балку Lego внутри блока, прижать левую кнопку мыши и потянуть вправо.

Подобное использование блока Switch с множественными вкладками соответствует оператору выбора Case (Switch) в текстовых языках программирования.
Пример использования блока Switch со множественным ветвлением

Рис. 5.5. Пример использования блока Switch со множественным ветвлением

При обработке сложных логических условий может возникнуть необходимость в использовании вложенных ветвлений.

Пример 5.4. Доработаем пример 5.1 так, чтобы робот останавливался ещё и при обнаружении зелёного цвета.

Программа к примеру 5.4

увеличить изображение
Рис. 5.6. Программа к примеру 5.4

Задание 5.1. Напишите программу управления роботом одной кнопкой (датчиком касания). При запуске программы машина должна ожидать нажатия на кнопку Start, после чего начать движение вперёд. При нажатии на датчик касания она должна двигаться назад, при отпускании опять двигаться вперёд.

Задание 5.2. Напишите программу управления роботом двумя кнопками (два датчика касания, служащие пультом управления). Машина должна ехать вперёд при нажатии на обе кнопки. Если нажата только правая кнопка, то машина поворачивает направо; если только левая налево. Если кнопки отпущены, то машина останавливается.

Задание 5.3. Используя блок Switch в качестве оператора выбора, напишите программу для исследовательского робота, который перемещается по разноцветному полю и произносит название цвета, над которым проезжает (только основные цвета, для которых в роботе имеется соответствующий звуковой файл). Робот должен остановиться, когда доберётся до красного цвета. Подсказка: вспомните, что все основные цвета закодированы числами 0-5 .

Задание 5.4. Напишите программу, которая позволяет роботу оставаться на заданном расстоянии от подвижной стены. Робот оснащён двумя моторами и датчиком ультразвука, направленным вперёд. Перед роботом размещается подвижная стена (журнал, книга, свёрнутый полигон). Робот должен, постоянно двигаясь, сохранять расстояние до стены ≈ 30 см. Подсказка: вспомните задание 4.4 и пример 4.1 .

< Лекция 4 || Лекция 5 || Лекция 6 >