ОГЭ · Информатика · Алгоритмы, исполнитель Робот и основы программирования (задания 5, 6, 15, 16)
Алгоритм и его свойства. Трассировка циклов
Что такое алгоритм, какими свойствами он обязан обладать, как его записывают и — главное — как вручную проследить работу цикла и не ошибиться в числе повторений.
Алгоритм и его свойства
Определение
Алгоритм — точное предписание, задающее конечную последовательность действий, которая приводит от исходных данных к результату
| Дискретность | алгоритм состоит из отдельных шагов, выполняемых один за другим |
|---|---|
| Детерминированность (точность) | каждый шаг определён однозначно, разночтений быть не может |
| Понятность | все команды входят в систему команд исполнителя |
| Результативность (конечность) | алгоритм заканчивается за конечное число шагов и даёт результат |
| Массовость | алгоритм применим к целому классу однотипных задач, а не к одной |
| Словесный | обычным языком, по пунктам |
|---|---|
| Блок-схема | графическая запись: прямоугольник — действие, ромб — условие |
| Алгоритмический язык | школьный язык с командами нц / кц, если / то / иначе |
| Программа | запись на языке программирования (Python, Паскаль, С++) |
Три базовые конструкции и как их трассировать
Любой алгоритм собирается из трёх конструкций. Следование — команды идут подряд. Ветвление — выполняется одна из двух ветвей в зависимости от условия. Цикл — блок команд повторяется. Циклов в ОГЭ два вида: цикл со счётчиком (for, «для i от 1 до n») и цикл с условием (while, «пока условие»). Разбирать их надёжнее всего таблицей трассировки: колонки — переменные, строки — шаги. На каждом шаге выписывай новые значения всех переменных, которые изменились. Два места, где чаще всего теряют балл. Первое: в цикле «для i от 1 до 5» тело выполняется 5 раз, а не 4 — крайние значения включаются. Второе: в цикле «пока условие» проверка идёт перед выполнением тела, поэтому если условие ложно сразу, тело не выполнится ни разу. Чтобы посчитать, сколько раз сработал цикл, заведи отдельный счётчик и увеличивай его в каждой строке трассировки.
Как считать число повторений цикла
• Цикл for i in range(a, b): тело выполнится b − a раз (правая граница не входит).
• Школьное «для i от a до b»: тело выполнится b − a + 1 раз (обе границы входят).
• Цикл while: выпиши значения переменной по шагам, пока условие истинно.
• Отдельно следи, когда переменная меняется — до проверки или после.
• Если условие ложно с самого начала — тело не выполнится ни разу.
Разбор примера
Разбор: трассировка цикла со счётчиком
Чему будет равно s после выполнения фрагмента: s = 0; для i от 1 до 5: s = s + i · i?
Показать решение по шагам
- 1. Цикл выполняется для i = 1, 2, 3, 4, 5 — пять раз.
- 2. i = 1: s = 0 + 1 = 1. i = 2: s = 1 + 4 = 5. i = 3: s = 5 + 9 = 14.
- 3. i = 4: s = 14 + 16 = 30. i = 5: s = 30 + 25 = 55.
- 4. Ответ: s = 55.
Ответ: 55
Разбор примера
Разбор: сколько раз сработает цикл с условием
n = 100; k = 0; пока n > 1: n = n div 2; k = k + 1. Чему равно k в конце?
Показать решение по шагам
- 1. Выписываем n по шагам: 100 → 50 → 25 → 12 → 6 → 3 → 1.
- 2. Каждый переход — одно выполнение тела; переходов 6.
- 3. Как только n стало равно 1, условие n > 1 ложно, цикл останавливается.
- 4. Значит, k = 6.
Ответ: 6
Ловушка: в школьной записи «для i от 1 до n» границы включаются, а в Python range(1, n) правая граница не включается. Разница в одно повторение.
Вопрос на проверку
Какое свойство алгоритма означает, что он применим не к одному набору данных, а к целому классу однотипных задач?
Ответить и проверить себя — после бесплатной регистрации.
Разбор примера
Задание 5: из 3 получить 84 не более чем за 5 команд
У исполнителя Квадратор две команды: 1) возведи в квадрат; 2) прибавь 1. Составьте алгоритм получения из числа 3 числа 84, содержащий не более 5 команд.
Показать решение по шагам
- 1. Идём от конца: 84 не квадрат целого числа (9² = 81, 10² = 100), значит, последней была команда 2, а до неё было 83.
- 2. 83 тоже не квадрат → снова команда 2, было 82. И 82 не квадрат → команда 2, было 81.
- 3. 81 = 9², значит, перед этим команда 1 из числа 9. А 9 = 3², то есть ещё раньше команда 1 из числа 3 — это и есть начало.
- 4. Прямой ход: 3 →¹ 9 →¹ 81 →² 82 →² 83 →² 84. Номера команд: 11222, пять команд — ровно лимит.
- 5. Проверка: 3² = 9; 9² = 81; 81 + 1 + 1 + 1 = 84. Верно. Обратный ход надёжнее прямого: на каждом шаге всего две возможности, и «не квадрат» отсекает одну из них сразу.
Ответ: 11222
Разбор примера
Задание 6: трассировка цикла со счётчиком
Что напечатает программа? s = 0 / for i in range(1, 6): / s = s + i * i / print(s)
Показать решение по шагам
- 1. Что делает цикл: переменная i принимает значения от 1 до 5 (правая граница в range не включается — самая частая ошибка чтения такого кода).
- 2. Ведём трассировку по шагам: i = 1 → s = 0 + 1 = 1; i = 2 → s = 1 + 4 = 5; i = 3 → s = 5 + 9 = 14.
- 3. i = 4 → s = 14 + 16 = 30; i = 5 → s = 30 + 25 = 55.
- 4. Печатается 55 — сумма квадратов первых пяти натуральных чисел.
- 5. Как проверить себя: если бы range был (1, 6) включительно, добавилось бы 36 и вышло 91. Разница между 55 и 91 и есть цена одной невнимательности с границей.
Ответ: 55
Разбор примера
Задание 15: закрасить ряд, длина которого неизвестна
Робот стоит в левой клетке горизонтального коридора, справа от последней клетки стена. Напишите алгоритм, закрашивающий все клетки коридора.
Показать решение по шагам
- 1. Длина неизвестна → нужен цикл с условием, а не фиксированное число команд. Решение «вправо; закрасить; вправо; закрасить…» критерий не засчитывает.
- 2. Алгоритм:
нц пока справа свободно/закрасить/вправо/кц/закрасить. - 3. Почему закраска в теле идёт до шага: тогда закрашивается клетка, в которой Робот стоит сейчас, включая стартовую. Если поменять команды местами, стартовая клетка останется пустой.
- 4. Почему нужна закраска после цикла: у последней клетки условие «справа свободно» ложно, цикл не выполнится, а клетка ещё не закрашена. Без заключительной команды ровно одна клетка останется белой при любой длине.
- 5. Проверка на крайнем случае: коридор из одной клетки — цикл не выполняется, работает только заключительная закраска. Верно.
Ответ: нц пока справа свободно / закрасить / вправо / кц / закрасить
Разбор примера
Задание 16: количество чётных чисел последовательности
На вход подаётся последовательность натуральных чисел, оканчивающаяся числом 0 (0 в последовательность не входит). Выведите количество чётных чисел последовательности.
Показать решение по шагам
- 1. Накопитель: счётчик, начальное значение 0.
- 2. Условие отбора: чётность — это x % 2 == 0.
- 3. Схема ввода: первое число читаем до цикла, очередное — в конце тела. Иначе ноль пройдёт проверку на чётность (он делится на 2) и завысит счётчик на единицу.
- 4. Программа целиком (Python):
count = 0/x = int(input())/while x != 0:/if x % 2 == 0:/count = count + 1/x = int(input())/print(count). - 5. Трассировка на входе 4, 7, 10, 3, 0: 4 — да (1), 7 — нет, 10 — да (2), 3 — нет, 0 — конец. Печатается 2.
- 6. Проверка на пустом входе: если сразу подать 0, цикл не выполнится, напечатается 0 — это и есть «обработан случай, когда подходящих чисел нет».
Ответ: 2 (count = 0, условие x % 2 == 0, один вывод после цикла)
Разбор примера
Файл-ответ alg.py (формат задания 16): готовый файл со счётчиком и трассировкой
Соберите файл с программой из четвёртого разбора и сохраните как alg.py.
Показать решение по шагам
- 1. Содержимое файла целиком:
count = 0/x = int(input())/while x != 0:/if x % 2 == 0:/count = count + 1/x = int(input())/print(count). - 2. Четыре пункта самопроверки: ноль не обработан; условие отбора совпадает с требуемым; счётчик начат с нуля; пустой случай даёт 0. Это ровно те четыре точки, по которым идёт проверка задания 16.
- 3. Как проверить первый пункт: подать на вход единственный ноль. Должно напечататься 0 без ошибок.
- 4. Как переделать под другое условие: меняется одна строка с
if. Для кратных 3 —x % 3 == 0, для двузначных —10 <= x <= 99, для оканчивающихся на 5 —x % 10 == 5. Остальной каркас остаётся тем же, и это полезно помнить: задание 16 всегда один и тот же каркас плюс своё условие. - 5. Как сохранять: текстовый файл с расширением .py; язык любой, важен читаемый алгоритм.
Ответ: alg.py: каркас «чтение до цикла, условие, чтение в конце тела, один вывод» — меняется только строка с if
ℹ️ Критерии задания 15 (наш разбор, check_requirements_data/oge_informatics/line-15.md): «Проверяется, что алгоритм отработает на любом допустимом поле, подходящем под описание, а не только на одном частном случае». Решение «в лоб» из фиксированного числа команд там, где длина ряда не задана, не засчитывают.
Задание №6 в формате экзамена
Ответить и проверить себя — после бесплатной регистрации.
Задание №6 в формате экзамена
Ответить и проверить себя — после бесплатной регистрации.
Задание №6 в формате экзамена
Ответить и проверить себя — после бесплатной регистрации.