- •7. Алгоритмы управления исполнителями.
- •7.1. Исполнитель Робот
- •7.2. Программное управление исполнителем
- •7.3. Общий вид алгоритма
- •7.4. Комментарии в алгоритмическом языке
- •7.5. Исполнение алгоритма
- •7.6. Ошибки в алгоритмах
- •7.7. Запись нескольких команд в одной строке
- •8. Вспомогательные алгоритмы
- •8.1. Понятие о вспомогательном алгоритме
- •Основные и вспомогательные алгоритмы
- •8.3. Пример использования вспомогательных алгоритмов
- •8.4. Метод последовательного уточнения
- •8.5. Заголовки вспомогательных алгоритмов
- •8.6. Разделение труда между компьютером и исполнителями
- •9 Цикл n раз
- •9.1. Пример алгоритма с циклом n раз
- •9.2. Общий вид цикла n раз
- •9.3. Короткие алгоритмы могут описывать длинные последовательности действий
- •9 А15 .4. Внутри цикла можно вызывать вспомогательные алгоритмы
- •9.5. Внутри цикла могут быть другие циклы
- •10. Цикл пока
- •10.1. Команды-вопросы Робота
- •10.2. Цикл пока
- •10.3. Диалог Компьютер — Робот при выполнении цикла пока
- •10.4. Общий вид цикла пока
- •10.5. Цикл n раз и цикл пока
- •10.6. Условия в цикле пока
- •10.7. Свойства цикла пока
- •1. Тело цикла может не выполниться ни разу
- •2. Выполнение цикла может не завершиться
- •3. Условие цикла не проверяется в процессе выполнения тела цикла
- •4. Перед каждым выполнением тела цикла условие обязательно выполняется.
- •5. Сразу после окончания цикла условие не выполняется
- •10.8. Составление алгоритмов с циклом пока
- •10.9. Примеры построения алгоритмов
- •1. Закрашивание ряда
- •2. Закрашивание коридора произвольной длины
- •3. Выход в левый верхний угол в лабиринте
- •11. Команды ветвления и контроля
- •11.1. Пример алгоритма с командой если
- •11.2. Общий вид команды если
- •11.3. Команды контроля
- •11.4. Пример алгоритма с командой утв
- •11.5. Выбор из многих вариантов
- •11.6 Общий вид команды выбор
- •12 Анализ и тестирование алгоритмов
- •12.1. Результаты труда программиста
- •12.2. Что такое правильный алгоритм
- •12.3. Пример рассуждения, подтверждающего правильность алгоритма
- •12.4. Тестирование алгоритмов
10. Цикл пока
10.1. Команды-вопросы Робота
До сих пор все составленные нами алгоритмы управления Роботом приводили к выполнению определенной, заранее известной последовательности действий. Компьютер лишь приказывал Роботу выполнить какие-то действия, но никак не анализировал их результаты и обстановку на поле Робота.
Представьте себе начальника, который отдает приказы, но не получает никаких донесений о результатах их выполнения; повара, который не имеет возможности попробовать блюдо; шофера, ведущего автомобиль с закрытыми глазами. Понятно, что так далеко не уедешь; если мы хотим составлять алгоритмы для решения сложных задач, то надо уметь не только командовать исполнителем, но и анализировать обстановку, в которой он оказался.
У Робота для этого есть 12 команд-вопросов, отвечая на которые он сообщает информацию об обстановке вокруг себя. В этом параграфе мы рассмотрим 10 из них. Вот они:
сверху стена сверху свободно
снизу стена снизу свободно
справа стена справа свободно
слева стена слева свободно
клетка закрашена клетка чистая
Смысл этих вопросов ясен из их названий. Получив команду-вопрос, Робот проверяет соответствующее условие и отвечает да или нет.
10.2. Цикл пока
Задача. Где-то ниже Робота на неизвестном расстоянии есть стена. Нужно подвести Робота к ней вплотную.
Спросим у Робота снизу свободно?. Если Робот ответит, нет, значит, он уже у стены и задача решена. Если же Робот ответит да, то можно скомандовать вниз и опять спросить снизу свободно?. Если Робот ответит да — снова скомандовать вниз, спросить снизу свободно? и т. д., пока Робот не ответит, нет. Скомандуем ли мы при этом вниз 0, 3, 8 или 2000 раз, заранее неизвестно — это зависит от начального расположения Робота относительно стены
Наша цель, однако, не ручное управление Роботом, а составление алгоритма для компьютера. Поэтому приведенную выше последовательность действий надо описать на алгоритмическом языке. Алгоритм должен быть универсальным, т. е. не должен зависеть от расстояния между Роботом и стеной. Для этого в алгоритмическом языке есть специальная составная команда — цикл пока:
а
А17
нач
нц пока снизу свободно
вниз
кц
кон
Аналогично можно составить алгоритмы "влево до стены", "вправо до стены", "вверх до стены", которыми мы далее часто будем пользоваться как вспомогательными.
10.3. Диалог Компьютер — Робот при выполнении цикла пока
Пусть в начальный момент Робот находится в клетке А (рис. 10). Тогда при выполнении алгоритма "вниз до стены" (А18) диалог Компьютер (ЭВМ) — Робот будет таким:
Э ВМ: снизу свободно? Робот: да
ЭВМ: вниз Робот: смещается вниз (в клетку Б) ЭВМ: снизу свободно? Робот: да ЭВМ: вниз Робот: смещается вниз (в клетку В)
ЭВМ: снизу свободно? Робот: нет
Рис. 10
Поскольку Робот ответил нет, т. е. записанное после пока условие не соблюдается, то на этом выполнение цикла пока и алгоритма "вниз до стены" заканчивается.