Сегодня ты научишься:
- анализировать обстановку Робота;
- разрабатывать циклические алгоритмы с неизвестным заранее числом повторений;
- составлять сложные условия.
Команда если позволяет выбрать один из двух вариантов. В качестве примера работы команды если рассмотрим задачу из урока 6. Но немного изменим условие.
Задача. Робот стоит в левом конце горизонтального коридора, нижняя стена которого сплошная, а в верхней имеются несколько выходов:
Надо отметить выходы из коридора, то есть, составить алгоритм, который переводит Робота из клетки А в Клетку Б и закрашивает те клетки коридора, из которых есть выход вверх:
Решение. Длина коридора, количество выходов и их точное расположение заранее неизвестны. Отличие от задачи из предыдущего урока состоит в том, что красить надо не все клетки коридора, а лишь те, где есть выход вверх. Другими словами, если сверху свободно, то клетку надо закрасить, иначе - красить не надо. Для записи таких действий в алгоритмическом языке есть специальная составная команда если:
если сверху свободно то
. закрасить
все
При выполнении этой команды Роботу задается вопрос "сверху свободно?". Если Робот ответит да, то ему нужно будет выполнить команду "закрасить". Если же Робот ответит нет, то команда "закрасить" будет пропущена.
Создай стартовую обстановку, соответствующую условиям задачи и набери программный код:
Измени длину коридора, положение выходов и проверь работу программы в новой обстановке.
Общий вид команды если таков:
если условие
· то серия1
· иначе серия2
все |
или |
если условие
· то серия1
все |
Служебные слова если, то, иначе имеют обычный смысл. Слово все означае конец команды. Это слово пишется строго под словом если. Между то и иначе - в одной или нескольких строках - записывается последовательность командалгоритмического языка (серия1). Между иначе и все записывается другая последовательность команд (серия2). Серия2 вместе со служебным словом иначе может отсутствовать.
При выполнении команды если система сначала проверяет условие, записанное между если и то (задает Роботу вопрос). В результате проверки получается либо да, либо нет. Если получилось да, то выполняется серия1, а если нет - то серия2 (если она есть). Если условие не соблюдается, (Робот ответил нет), а серия2 вместе с иначе отсутствует, то система сразу переходит к выполнению команд, записанных после слова все.
Условия в алгоритмическом языке могут быть простыми и составными. К простым условиям относятся команды-вопросы "снизу стена", "слева свободно" и др. Из простых условий можно получить составные, используя служебные слова и, или, не и скобки для указания порядка проверки условий.
Примеры составных условий:
-
сверху свободно или слева свободно
-
сверху свободно и снизу стена
-
клетка закрашена и сверху стена
-
сверху стена или снизу стена
Результатом проверки любого условия является либо да (если условие соблюдается), либо нет (если условие не соблюдается).
Рассмотрим как работает связка и
условие А |
условие Б |
А и Б |
да |
да |
да |
да |
нет |
нет |
нет |
да |
нет |
нет |
нет |
нет |
Например, в данном положении Робота:
условие «сверху стена и слева стена» соблюдается (Робот ответит да), так как условие А – «сверху стена» соблюдается (да) и условие Б – «слева стена» соблюдается (да). А условие «сверху стена и снизу стена» не соблюдается (нет), так как на условие Б – «снизу стена» Робот ответит нет.
Таким образом, составное условие, содержащее связку и, соблюдается только тогда, когда соблюдаются оба простых условия, входящих в данное составное условие.
О том, как работают связки или и не в составных условиях, узнай из справочных материалов к уроку 7.
Разберем задачу, в решении которой применим простые и составные условия.
Задача. Необходимо провести Робота по коридору шириной в одну клетку из начального положения (отмечено ромбиком) до конца коридора, закрашивая при этом все клетки коридора, которые имеют выход. Выходы размером в одну клетку располагаются произвольно по всей длине коридора. Коридор заканчивается тупиком. Коридор имеет два горизонтальных и диагональный участки в форме . Пример коридора показан на рисунке:
Создай обстановку для решения этой задачи. Следуя описаниям в решении, проверяй выполнение каждого этапа разработки программного кода.
Решение.
Для начала составим алгоритм прохождения лабиринта без закрашивания клеток, обозначающих выходы.
Чтобы пройти верхний горизонтальный коридор, нужно двигать Робота вправо до стены, затем пройти диагональный ступенчатый коридор и после этого снова двигать Робота вправо до стены по нижнему коридору.
Укрупненный алгоритм выглядит так:
Детализируем каждое действие, добавив вспомогательные алгоритмы. Вспомогаельный алгоритм "вниз_до_стены" ебе знаком из предыдущего урока:
А вот алгоритм "диагональ" требует особого внимания. Условием окончания прохождения диагонального коридора будет положение Робота в левой нижней клетке лабиринта (отмечена зеленым кружком):
Пока Робот не достиг этой позиции, то есть пока не (слева стена и справа стена) исполнитель будет двигаться ступенчато. Для прохождение каждой ступени можно применить алгоритмы "вниз до стены" и "влево до стены".
Таким образом, дополняем программный код:
Теперь приступим к разметке клеток, которые имеют выход.
В горизонтальных коридорах выходы расположены сверху и снизу. Значит, если справа свободно и сверху или снизу есть выход, то клетка должна быть закрашена.
Дополни первый вспомогательный алгоритм "вправо_до_стены" составным условием:
Подумай, что произойдет, если в составном условии убрать "справа свободно и". Проверь свое предположение.
Осталось разметить клетки диагонального коридора. В вертикальной части каждой ступени выходы находятся справа или слева, а в горизонтальной - сверху или снизу:
Итог работы составленного алгоритма:
Для отработки навыков разработки алгоритмов со сложными условиями выполни задания к уроку 7 из задачника.