§ 3.3.Управление исполнителем Робот Простые и составные условия Часть 2
Простые условия У Робота есть датчики, которые позволяют определять, что находится в той клетке, где он сейчас находится, и в соседних клетках. Датчики определяют, например, есть ли стена в каком-то направлении. Логические команды Робота справа_стенасправа_клумбасправа_свободно слева_стенаслева_клумбаслева_свободно впереди_стенавпереди_клумбавпереди_свободно сзади_стенасзади_клумбасзади_свободно грядкабаза Команды грядка и база определяют, есть ли грядка (или база) в клетке, где сейчас находится Робот. В СКИ Робота есть специальные логические команды. 2(17)2(17) В цикле «пока» могут использоваться простые и составные условия.
Рассмотрим составное условие А И В, где А, В простые условия. Условие А И В выполнено, когда выполнено каждое из двух входящих в него простых условий. Пусть А - простое условие справа свободно, В простое условие справа свободно. Рассмотрим подробно проверку составного условия А И В - сверху свободно.
Составное условие НЕ А выполнено, когда не выполнено условие А.
Известно, что Робот находится где-то в вертикальном коридоре. Ни одна из клеток коридора не закрашена.
Составим Алгоритм, под управлением которого Робот закрасит все клетки этого коридора и вернется в исходное положение.
Так как Роботу предстоит закрасить только клетки коридора, мы должны «научить» его их распознавать. Чем же клетки коридора отличаются от всех прочих клеток поля? Из рисунка видно, что каждая клетка коридора слева и справа ограничена стеной.
Робот находится в коридоре, пока слева стена и справа стена. В СКИ нашего исполнителя такие условия не предусмотрены. Там есть противоположные условия: слева свободно, справа свободно. Используем служебное слово НЕ: слева стена > НЕ слева свободно справа стена > НЕ справа свободно Нужное условие примет вид: НЕ слева свободно И НЕ справа свободно.
1. Чтобы закрасить все клетки коридора, находящиеся выше Робота, прикажем Роботу шагнуть вверх и выполним цикл «пока»: вверх ПОКА НЕ слева свободно И НЕ справа свободно ДЕЛАТЬ закрась вверх КОНЕЦ Под управлением этого алгоритма Робот закрасит все клетки коридора, находящиеся выше от него, и окажется на клетке рядом с верхней границей коридора.
2. Командой вниз вернем Робота в коридор. Наша задача вернуть его в исходную точку. Эта точка имеет единственный отличительный признак она не закрашена. Поэтому пока занимаемая Роботом клетка оказывается закрашенной, будем перемещать его вниз: вниз ПОКА закрашено ДЕЛАТЬ вниз КОНЕЦ Под управлением этого алгоритма Робот окажется в исходной клетке.
3. Выполнив команду вниз, Робот пройдет исходную клетку и займет первую клетку, расположенную ниже исходной. Теперь можно закрашивать клетки коридора, расположенные ниже исходной: вниз ПОКА НЕ слева свободно И НЕ справа свободно ДЕЛАТЬ закрась вниз КОНЕЦ
4. Так как, выполнив предыдущий алгоритм, Робот окажется под коридором, командой вверх вернем его в коридор. Возвращение в исходную точку обеспечивается алгоритмом: вверх ПОКА закрашено ДЕЛАТЬ вверх КОНЕЦ
5. По команде закрась Робот закрашивает исходную точку. Полностью программа управления Роботом выглядит так:
Команда ветвления Графически ветвление можно представить в виде: полная форма ветвлениясокращенная форма ветвления
Спасибо за внимание!