🏠 Главная
/
Задание 15
/
Задача 5A1212
Задача: 5A1212
×
Исполнитель Робот умеет перемещаться по лабиринту, начерченному на плоскости, разбитой на клетки. Между соседними (по сторонам) клетками может стоять стена, через которую Робот пройти не может. У Робота есть девять команд. Четыре команды – это команды-приказы: **вверх вниз влево вправо** При выполнении любой из этих команд Робот перемещается на одну клетку соответственно: вверх ↑, вниз ↓, влево ←, вправо →. Если Робот получит команду передвижения сквозь стену, то он разрушится. Также у Робота есть команда **закрасить**,при которойзакрашивается клетка, в которой Робот находится в настоящий момент. Ещё четыре команды – это команды проверки условий. Эти команды проверяют, свободен ли путь для Робота в каждом из четырёх возможных направлений: **сверху свободно снизу свободно слева свободно справа свободно** Эти команды можно использовать вместе с условием «**eсли**», имеющим следующий вид: **если***условие***то** *последовательность команд* **все** Здесь *условие*– одна из команд проверки условия. *Последовательность**команд* – это одна или несколько любых команд-приказов. Например, для передвижения на одну клетку вправо, если справа нет стенки и закрашивания клетки, можно использовать такой алгоритм: **если справа свободно то** **вправо** **закрасить** **все** В одном условии можно использовать несколько команд проверки условий, применяя логические связки **и**, **или**, **не**, например: **если (справа свободно) и (не снизу свободно) то** **вправо** **все** Для повторения последовательности команд можно использовать цикл «**пока**», имеющий следующий вид: **нц пока***условие* *последовательность команд* **кц** Например, для движения вправо, пока это возможно, можно использовать следующий алгоритм: **нц пока справа свободно** **вправо** **кц** ***Выполните задание.*** На бесконечном поле имеются две горизонтальные стены одинаковой длины, расположенные точно одна над другой. **Длина стен неизвестна**. **Расстояние между стенами неизвестно**. Робот находится над нижней стеной в клетке, расположенной у её левого края. На рисункеуказан один из возможных способов расположения стен и Робота (Робот обозначен буквой «Р»):  Напишите для Робота алгоритм, закрашивающий все клетки, расположенные выше нижней стены и ниже верхней стены и прилегающие к ним. Робот должен закрасить только клетки, удовлетворяющие данному условию. Например, для приведённого выше рисунка Робот должен закрасить следующие клетки (см. рисунок):  Конечное расположение Робота может быть произвольным. Алгоритм должен решать задачу для произвольного размера и любого допустимого расположения стен. При исполнении алгоритма Робот не должен разрушиться, выполнение алгоритма должно завершиться. Алгоритм может быть выполнен в среде формального исполнителя или записан в текстовом редакторе. Сохраните алгоритм в формате программы Кумир или в текстовом файле. Название файла и каталог для сохранения Вам сообщат организаторы экзамена. --- Номер задачи: 5A1212
Ваш ответ:
Сохранить
Правильный ответ:
Объяснить решение
📚 Теория
⭐
×
Объяснение решения
📚
×
📚 Теория
# Тема 15. Создание алгоритмов (Робот или Python) На ОГЭ это задание на выбор: написать алгоритм для исполнителя "Робот" (15.1) или программу на Python (15.2). Можно выбрать то, что умеете лучше. --- ## Часть 15.1: Исполнитель "Робот" (Кумир/КуМир) ### Что такое Робот Робот перемещается по клеточному полю, может закрашивать клетки и проверять, есть ли стена рядом. ### Основные команды: | Команда | Действие | |---------|---------| | `вверх` | Переместиться вверх | | `вниз` | Переместиться вниз | | `влево` | Переместиться влево | | `вправо` | Переместиться вправо | | `закрасить` | Закрасить текущую клетку | ### Проверки (используются в условиях): | Проверка | Что означает | |---------|-------------| | `сверху свободно` | Нет стены сверху | | `снизу свободно` | Нет стены снизу | | `слева свободно` | Нет стены слева | | `справа свободно` | Нет стены справа | | `сверху стена` | Есть стена сверху | --- ### Структуры управления в КуМир: **Цикл с условием (пока):** ``` нц пока справа свободно вправо закрасить кц ``` **Условный оператор:** ``` если сверху свободно то вверх иначе вправо все ``` **Цикл с количеством повторений:** ``` нц 5 раз вправо кц ``` --- ### Секреты успешного решения: > **Совет:** Пишите алгоритм так, чтобы он работал для поля **любого** размера. Не считайте конкретное число клеток — используйте цикл "пока". > **Совет:** Перед написанием кода нарисуйте на бумаге путь робота стрелками. Это поможет спланировать алгоритм. ### Пример: закрасить весь нижний ряд ``` нц пока справа свободно закрасить вправо кц закрасить ``` ### Пример: закрасить L-образную фигуру ``` нц пока справа свободно вправо кц нц пока снизу свободно вниз закрасить кц ``` --- ## Часть 15.2: Программирование на Python ### Типичная задача: Обработать последовательность чисел (ввод до нуля или до N чисел), подсчитать количество или сумму чисел по условию. --- ### Шаблон 1: Ввод до нуля ```python count = 0 # счётчик подходящих чисел total = 0 # сумма подходящих чисел while True: n = int(input()) if n == 0: # признак конца ввода break if n > 0: # ваше условие count += 1 total += n print(count) print(total) ``` ### Шаблон 2: Ввод N чисел ```python n = int(input()) # количество чисел count = 0 for i in range(n): x = int(input()) if x % 2 == 0: # ваше условие count += 1 print(count) ``` ### Шаблон 3: Поиск максимума с условием ```python max_val = None while True: n = int(input()) if n == 0: break if n % 3 == 0: # подходит по условию if max_val is None or n > max_val: max_val = n if max_val is not None: print(max_val) else: print("Таких чисел нет") ``` --- ### Полезные операции Python: | Операция | Описание | Пример | |----------|---------|--------| | `n % 2 == 0` | n чётное | | | `n % 2 != 0` | n нечётное | | | `n % k == 0` | n кратно k | `n % 5 == 0` | | `n // k` | Целочисленное деление | `7 // 2 = 3` | | `n % k` | Остаток от деления | `7 % 2 = 1` | | `abs(n)` | Модуль числа | `abs(-5) = 5` | | `n ** 2` | Возведение в степень | `3 ** 2 = 9` | --- ### Условия с числами: ```python # Кратность нескольким числам одновременно if n % 3 == 0 and n % 5 == 0: print(n) # кратно 15 # Принадлежит диапазону if 10 <= n <= 99: print("двузначное") # Первая цифра = 1 if str(n)[0] == '1': print("начинается с 1") ``` --- ### Что выбрать — Робот или Python? | Критерий | Робот (15.1) | Python (15.2) | |----------|-------------|---------------| | Нужно знать | Команды КуМир | Синтаксис Python | | Сложность | Визуальная логика | Программирование | | Время | Среднее | Быстро для знающих | | Ошибки | Можно проверить в КуМир | Нужно проверять вручную | > **Совет:** Если знаете Python и умеете писать циклы — выбирайте 15.2, это быстрее. Если нет уверенности — выбирайте 15.1 (Робота легче представить наглядно). --- ### Типичные ошибки в 15.2: - **Читать n как строку.** Всегда `int(input())` для чисел. - **Счётчик не сбрасывается.** Если несколько тест-кейсов — не забывайте обнулять переменные. - **Ошибка в условии break.** `if n == 0: break` должен стоять до обработки. - **Деление на ноль.** Если делите, проверьте что делитель ≠ 0.
« Предыдущая
К списку задач
Следующая »
☰
OGE
Pro