Проверки обстановки: стены, закрашенность, измерители
Чтобы Робот не врезался в стену, он должен «видеть» обстановку. Разбираем все его проверки.
Условия Робота — это логические выражения вида «слева стена» или «клетка закрашена». Они дают
даилинети управляют ветвлениями и циклами.
Проверки стен
Робот умеет проверять, есть ли стена с каждой из четырёх сторон. Для каждой стороны есть две парные проверки — «стена» и «свободно»:
| Есть стена | Свободно (стены нет) |
слева стена | слева свободно |
справа стена | справа свободно |
сверху стена | сверху свободно |
снизу стена | снизу свободно |
Каждая проверка возвращает логическое значение. справа свободно равно да, когда Робот может шагнуть вправо. По сути справа свободно — это то же самое, что не справа стена.
Проверки клетки
клетка закрашена—да, если текущая клетка уже закрашена.клетка чистая—да, если текущая клетка не закрашена.
Функции-измерители
В некоторых обстановках клетки имеют числовые характеристики, и Робот их измеряет:
температура— число (температура текущей клетки).радиация— число (уровень радиации).
Эти функции возвращают вещ-значение, его можно сравнивать: температура > 0. На 15.1 ОГЭ они встречаются реже, чем проверки стен, но знать их полезно.
Логические операции: и, или, не
Проверки можно комбинировать. В КуМире логические операции — русские слова:
| Операция | Смысл | Пример |
и | оба условия верны | справа стена и снизу стена |
или | хотя бы одно верно | слева стена или справа стена |
не | отрицание | не сверху стена |
Например, условие «Робот в тупике-кармане, открытом только снизу» можно записать так:
слева стена и справа стена и сверху стена
Зачем это нужно: безопасный шаг
Главный смысл проверок — не дать Роботу разбиться. Перед движением проверяем, свободно ли:
использовать Робот
алг
нач
если справа свободно
то вправо
всё
кон
Робот шагнёт вправо, только если справа нет стены. Это основа всех «умных» алгоритмов.
Имитация проверок на Python
Смоделируем поле и проверку «справа стена». Стену между клетками изобразим как границу поля: если Робот в крайнем правом столбце, справа — стена (край мира):
cols = 4
c = 3 # Робот в крайнем правом столбце (индексы 0..3)
def sprava_stena():
return c == cols - 1 # справа край поля = стена
def sprava_svobodno():
return not sprava_stena()
print("справа стена:", sprava_stena())
print("справа свободно:", sprava_svobodno())
c = 1 # переставим Робота в середину
print("теперь справа свободно:", not (c == cols - 1))
Вывод:
справа стена: True справа свободно: False теперь справа свободно: True
В крайнем правом столбце «справа стена» истинно, «справа свободно» ложно — ровно так же ведёт себя Робот у стены КуМира.
Попробуй сам
Запишите словами условие «вокруг Робота стены со всех сторон, кроме верха» через проверки и операции и/не. Ответ: слева стена и справа стена и снизу стена и не сверху стена (или … и сверху свободно).
Частые ошибки
- Перепутать «стена» и «свободно» — и Робот пойдёт прямо в стену.
- Забыть, что
справа свободно=не справа стена— и написать двойное отрицание. - Сравнивать измеритель неправильным типом (
температура— число, а не логическое значение).
Итог
- Робот проверяет стены с четырёх сторон:
… стенаи… свободно. - Проверки клетки:
клетка закрашена,клетка чистая. - Измерители:
температура,радиация(числа). - Условия комбинируются операциями
и,или,не.