Много 5)На бесконечном поле имеется стена, состоящая из 5 последовательных отрезков, расположенных змейкой:
вправо, вниз, влево, вниз, вправо, все отрезки неизвестной длины. Робот находится в клетке,
расположенной снизу от левого края первой горизонтальной стены.
На рисунке указан один из возможных расположения стен и Робота (Робот обозначен буквой «Р») .
Напишите для Робота алгоритм, закрашивающий все клетки, расположенные
ниже первого и левее второго отрезков стены и левее четвертого и ниже пятого отрезков
стены и угловую клетку. Робот должен закрасить только клетки, удовлетворяющие
данному условию. Например, для приведённого выше рисунка Робот должен закрасить
следующие клетки (см. рисунок)
Конечное расположение Робота может быть произвольным. Алгоритм должен
решать задачу для произвольного размера поля и любого допустимого расположения
стен внутри прямоугольного поля. При исполнении алгоритма Робот не должен
разрушиться.
Алгоритм может быть, записан в любом текстовом редакторе или письменно.
Решение.
15.1 Следующий алгоритм выполнит требуемую задачу.
нц
пока справа свободно
закрасить
вправо
кц
нц
пока снизу свободно
закрасить
вниз
кц
закрасить
нц
пока не (снизу свободно)
влево
кц
вниз
нц
пока не (справа свободно)
закрасить
вниз
кц
закрасить
вправо
нц
пока не (сверху свободно)
закрасить
вправо
кц
15.2 Решение
var a, s: integer;
begin
s: = 0;
readln(a);
while a<>0 do begin
if (a mod 8=0) and (a mod 10 = 6) then
s : = s + a;
readln(a);
end;
writeln(s)
end.
Для проверки правильности работы программы необходимо использовать следующие тесты:
Входные данные Выходные данные
1
8
6
10
0
0
2
16
0
16
3
16
96
5
0
112
Спрятать критерии
Критерии проверки:
Критерии оценивания выполнения задания 15.
Алгоритм правильно работает при всех допустимых исходных данных 2
При всех допустимых исходных данных верно следующее:
1) выполнение алгоритма завершается, и при этом Робот не разбивается;
2) закрашено не более 10 лишних клеток;
3) остались незакрашенными не более 10 клеток из числа тех, которые должны были быть закрашены
1
Задание выполнено неверно, т. е. не выполнены условия, позволяющие поставить 1 или 0
Максимальный 2
Критерии оценивания выполнения задания 15.
Предложено верное решение. Программа правильно работает на всех приведённых выше тестах. Программа может быть записана на любом языке программирования 2
Программа выдаёт неверный ответ на одном из тестов, приведённых выше. Например, решение, в котором неверно задано условие отбора чисел: (a mod 8=0)or(a mod 10=6), выдаст неправильный ответ на тесте № 1. 1
Программа выдаёт на тестах неверные ответы, отличные от описанных в критерии на 0
Максимальный 2
Для решения данной задачи, Роботу необходимо будет перемещаться по полю, пока не выполнены заданные условия.
Вот алгоритм, который Робот может использовать:
1. Начать с позиции ниже первого отрезка стены и слева от второго отрезка стены.
2. Проверить, что текущая позиция Робота удовлетворяет условиям задачи (то есть позиция находится ниже первого отрезка стены, левее второго отрезка стены, левее четвертого отрезка стены и ниже пятого отрезка стены, а также в угловой клетке).
3. Если текущая позиция Робота удовлетворяет условиям, закрасить текущую клетку и перейти к шагу 5.
4. Если текущая позиция Робота не удовлетворяет условиям, выполнить следующие шаги:
а) Проверить, есть ли возможность двигаться вправо. Если возможно, перейти к следующей клетке справа и перейти к шагу 2.
б) Если невозможно двигаться вправо, проверить, есть ли возможность двигаться вниз. Если возможно, перейти к следующей клетке вниз и перейти к шагу 2.
в) Если невозможно двигаться вниз, проверить, есть ли возможность двигаться влево. Если возможно, перейти к следующей клетке слева и перейти к шагу 2.
г) Если невозможно двигаться влево, проверить, есть ли возможность двигаться вверх. Если возможно, перейти к следующей клетке вверх и перейти к шагу 2.
д) Если невозможно двигаться ни в одном из направлений (вверх, вниз, влево, вправо), значит задача неразрешима и Робот не сможет закрасить нужные клетки.
5. После закрашивания текущей клетки, проверить, можно ли двигаться вниз. Если возможно, перейти к следующей клетке вниз и вернуться к шагу 2.
6. Если невозможно двигаться вниз, проверить, можно ли двигаться вправо. Если возможно, перейти к следующей клетке справа и вернуться к шагу 2.
7. Если невозможно двигаться ни вниз, ни вправо, значит задача выполнена, и Робот закрасил все необходимые клетки.
Важно заметить, что данное решение будет работать для любых размеров поля и произвольного расположения стен внутри прямоугольного поля.
Надеюсь, алгоритм был понятен. Если у вас есть дополнительные вопросы, не стесняйтесь задавать.