24

Решение: Исправление программы для степеней 7

ЕГЭ · Информатика · Задание 24 · Основы программирования
ПовышеннаяФИПИ195D33Развёрнутое решение≈ 10 минутРазбор в 6 шагов
Условие

Дано целое положительное число $N$, не превосходящее 1000. Нужно написать программу, которая определяет, является ли это число степенью числа 7: выводит на экран либо такое целое число $K$, что $7^K = N$, либо сообщение «NO», если такого числа не существует.

Программист написал программу неправильно. Ниже приведена эта программа на языке Python:

n = int(input())
k = 0
while k % 7 == 0:
k = k + 1
n = n // 7
if n > 0:
print(k)
else:
print("NO")

Последовательно выполните следующие действия:
1. Напишите, что выведет эта программа при вводе числа 49.
2. Приведите пример числа, при вводе которого приведённая программа, несмотря на ошибки, выведет корректное существующее значение $K$.
3. Найдите допущенные программистом ошибки и исправьте их. Исправление ошибки должно затрагивать только строку, в которой находится ошибка. Для каждой ошибки выпишите строку, в которой сделана ошибка, и правильный вариант этой строки.

Известно, что в тексте программы можно исправить ровно две строки так, чтобы она стала работать правильно. Достаточно указать ошибки и способ их исправления для одного языка программирования. Требуется найти ошибки в имеющейся программе, а не написать другую программу, использующую иной алгоритм решения.

Открыть задачу и решить самому
Дальше ответЕсли ещё решаете — начните с подсказок: они ведут к ответу, но не выдают его.
К подсказкам

Решение по шагам

6 шагов
1

При вводе $N = 49$ начальные значения: $n = 49$, $k = 0$. Условие цикла истинно, так как $0 \bmod 7 = 0$.

2

После первой итерации получаем $k = 1$ и $n = 49 // 7 = 7$. Условие цикла становится ложным, так как $1 \bmod 7 \ne 0$.

3

Так как $n > 0$, программа выводит число $1$.

4

Пример числа, для которого ошибочная программа выдаёт правильный результат: $N = 7$. После единственного деления получаются $n = 1$ и $k = 1$, поэтому программа выводит правильное значение $K = 1$.

5

Первая ошибка находится в условии цикла: проверяется остаток от деления переменной $k$, хотя нужно проверять остаток от деления текущего значения $n$.

Вторая ошибка находится в условии после цикла: положительное значение $n$ ещё не означает, что исходное число является степенью 7. Для корректного завершения всех делений остаток должен быть равен 1.

Ответ

Для $N = 49$ программа выведет 1. Подходящий пример — $N = 7$, при котором выводится правильное значение $K = 1$. Исправления на Python: `while n % 7 == 0:` вместо `while k % 7 == 0:`; `if n == 1:` вместо `if n > 0:`.

Этот ответ получен в разборе, но не сверен с официальным ключом из банка — проверьте выкладки, прежде чем заучивать результат.

Где здесь ошибаются

Указывать для числа 49 вывод 2, не учитывая, что условие цикла проверяет переменную k.

Заменять только условие цикла и не исправлять проверку n после завершения цикла.

Использовать условие `if n == 0`, хотя при полном разложении степени 7 остаток равен 1.

Записывать новую программу вместо исправления ровно двух строк исходной программы.

Закрепить приёмВ теме «Основы программирования» ещё 159 задач — с ответом и таким же разбором.
Тренироваться

Как решать задание 24 ЕГЭ, информатика

Разбор этой задачи разложен на 6 шагов: видно, откуда берётся каждое число и где теряется балл. Ответ приведён рядом с выкладками, а не вместо них.

Задача из темы «Основы программирования»: в ней 160 задач, и у каждой есть такой же разбор. Регистрация не нужна.