Закрасить; вверх; закрасить; вверх

Все

Здесь условие – одна из команд проверки условия наличия или отсутствия стен, результат которой является логической переменной со значением «Истина» или «Ложь».

В одном условии можно использовать несколько команд проверки условий, применяя логические связки и, или, не, например:

Если (справа свободно) и (не снизу свободно) то

Вправо

Все

Для повторения последовательности команд можно использовать цикл «пока», имеющий следующий вид:

нц пока условие

последовательность команд

кц

Пример1.На бесконечном поле есть горизонтальная и вертикальная стены. Левый конец горизонтальной стены соединён с нижним концом вертикальной стены. Длины стен неизвестны. В вертикальной стене есть ровно один проход, точное место прохода и его ширина неизвестны. Робот находится в клетке, расположенной непосредственно над горизонтальной стеной у её правого конца.

На рисунке указан один из возможных способов расположения стен и Робота (Робот обозначен буквой «Р»).

Напишите для Робота алгоритм, закрашивающий все клетки, расположены непосредственно левее и правее вертикальной стены. Проход должен остаться незакрашенным. Робот должен закрасить только клетки, удовлетворяющие данному условию. Например, для приведённого выше рисунка Робот должен закрасить следующие клетки (см. рисунок).

При исполнении алгоритма Робот не должен разрушиться, выполнение алгоритма должно завершиться. Конечное расположение Робота может быть произвольным.

Решение. Задание можно выполнить двумя способами: неоптимальным и оптимальным.

В неоптимальном варианте необходимо записать все команды Робота по решению поставленной задачи. Линейный алгоритм позволяет убедиться в важности правильного подсчета ходов в нужном направлении. Однако, следует напомнить о таком свойстве алгоритма, как массовость. Пошаговый алгоритм не обладает массовостью, т.к. укоротив стену всего на одну клетку, мы не сможем использовать тот же алгоритм.

Доказав нарушение свойств алгоритма, мы подводим вас к пониманию оптимального (эффективного) алгоритма, в котором используются условия, циклы и выбор. Робот «вслепую» проходит вдоль стен, красит нужные участки и останавливается, когда все задание выполнено. Так как поле бесконечно, Робот не может нащупывать внешние границы. Он ориентируется только на близлежащие стены.

Команды исполнителя будем записывать жирным шрифтом, а комментарии – курсивом. Начало комментария будем обозначать символом «|».

|Двигаемся влево, пока не дойдём до вертикальной стены.

Нц пока слева свободно

Влево

кц

|Двигаемся вверх, пока не дойдём до прохода в стене, и закрашиваем клетки.

Нц пока не слева свободно

Закрасить

Вверх

кц

|Двигаемся дальше до вертикальной стены.

Нц пока слева свободно

Вверх

кц

|Двигаемся вверх до конца стены и закрашиваем клетки.

Нц пока не слева свободно

Закрасить

Вверх

кц

|Обходим стену.

Влево

Вниз

|Двигаемся вниз, пока не дойдём до прохода в стене, и закрашиваем клетки.

Нц пока не справа свободно

Закрасить

Вниз

кц

|Двигаемся дальше до вертикальной стены.

Нц пока справа свободно

Вниз

кц

Рекомендуется самостоятельно формально выполнить получившийся алгоритм на бумаге, не прибегая к возможностям среды КУМИР. При этом размер стен может быть любым, неизменным остается ширина коридора между стенами – 1 клетка. Алгоритм должен успешно выполняться на однотипных обстановках разного размера.

Примечание. При компьютерном тестировании получившегося алгоритма, необходимо опробовать выполнение на трех различных обстановках: когда размеры стен меньше предложенных (вплоть до размера стены в одну клетку), совпадают с предложенными в условии и больше предложенных.

Особое внимание следует уделить изучению лабиринтам в виде ступеней.

Пример 2.

На бесконечном поле имеются две горизонтальных стены, соединенных лестницей. Верхняя стена бесконечно продолжается влево, нижняя - вправо. Количество ступеней лестницы неизвестно. Высота каждой ступени 2 клетки, ширина - 3 клетки. Робот находится на нижней горизонтальной стене, правее лестницы.

На рисунке указан один из возможных способов расположения лестницы, стен и Робота (Робот обозначен буквой «Р»).

Напишите для Робота алгоритм, закрашивающий клетки, расположенные рядом с вертикальной частью каждой ступени. Требуется закрасить только клетки, удовлетворяющие данному условию. Например, для приведённого выше рисунка Робот должен закрасить следующие клетки (см. рисунок).

Конечное расположение Робота может быть произвольным. Алгоритм должен решать задачу для произвольного размера поля и любого количества ступеней.

При исполнении алгоритма Робот не должен разрушиться, выполнение алгоритма должно завершиться.

Решение. В условии дается только конкретная длина и высота ступеньки. Количество ступеней, а также первоначальное расстояние Робота до ступеньки произвольно. Основная часть алгоритма - это прохождение ступеней. Но цикл, подводящий Робота к ступеням также играет важную роль - он определяет, где окажется Робот перед началом подъема. При разработке алгоритма следует выделить последовательность действий, которая будет многократно повторяться и выяснить, при каком условии она повторяться перестанет.

В приведенном примере перед подъемом по ступеням слева от Робота находится стена. Это и будет условие для повторения действий (пока не слева свободно), так как на верхней части лестницы вертикальная стена отсутствует.

Примечание. В программной среде КуМИР у Робота имеются еще четыре команды проверки условий:

сверху стена снизу стена слева стена справа стена

Они являются альтернативами командам, приведенным выше.

Запишем алгоритм, добавляя комментарии

|Двигаемся влево, пока не дойдём до вертикальной стены.

Нц пока слева свободно

Влево

кц

|Двигаемся вдоль вертикальной стены и красим клетки, передвигаемся по горизонтальной части следующей ступеньки.

Нц пока не слева свободно

закрасить; вверх; закрасить; вверх

Влево; влево; влево

кц

В случае, когда высота или(и) длина ступенек неизвестна проход вдоль ступеньки также необходимо организовать с помощью циклов. Однако, в большинстве заданий на перемещение Робота по лестнице длина и высота ступеньки заданы числами.

 


Дата добавления: 2020-11-15; просмотров: 494; Мы поможем в написании вашей работы!

Поделиться с друзьями:




Мы поможем в написании ваших работ!