|
|
|
§ 3.3. Управление исполнителем Робот Простые и составные условия (окончание)Робот находится в коридоре, пока слева стена и справа стена. В СКИ нашего исполнителя такие условия не предусмотрены. Там есть противоположные условия: слева свободно, справа свободно. Используем служебное слово НЕ: слева стена → НЕ слева свободно справа стена → НЕ справа свободно Нужное условие примет вид: НЕ слева свободно И НЕ справа свободно. Представим план действий Робота укрупненными шагами (рис. 3.18).
Для простоты предположим, что над коридором и под коридором есть хотя бы по одной клетке без стен (иначе придется делать дополнительные проверки сверху свободно, снизу свободно). 1. Чтобы закрасить все клетки коридора, находящиеся выше Робота, прикажем Роботу шагнуть вверх и выполним цикл «пока»: вверх
Под управлением этого алгоритма Робот закрасит все клетки коридора, находящиеся выше от него, и окажется на клетке рядом с верхней границей коридора. При каком исходном положении Робота этот цикл не выполнится ни разу? 2. Командой вниз вернем Робота в коридор. Наша задача — вернуть его в исходную точку. Эта точка имеет единственный отличительный признак — она не закрашена. Поэтому пока занимаемая Роботом клетка оказывается закрашенной, будем перемещать его вниз: вниз
Под управлением этого алгоритма Робот окажется в исходной клетке. 3. Выполнив команду вниз, Робот пройдет исходную клетку и займет первую клетку, расположенную ниже исходной. Теперь можно закрашивать клетки коридора, расположенные ниже исходной: вниз
Возможна ли ситуация, что этот цикл не выполнится ни разу? 4. Так как, выполнив предыдущий алгоритм, Робот окажется под коридором, командой вверх вернем его в коридор. Возвращение в исходную точку обеспечивается алгоритмом: вверх
5. По команде закрась Робот закрашивает исходную точку. Полностью программа управления Роботом выглядит так: вверх
|
|
|