Решение: Исправление программы степени 4
Дано целое положительное число $N$, не превосходящее 1000. Нужно написать программу, которая определяет, является ли это число степенью числа 4: выводит на экран либо такое целое число $K$, что $4^K=N$, либо сообщение «NO», если такого числа не существует.
Программист написал программу неправильно. Ниже приведена написанная им программа на языке Python.
Последовательно выполните следующее.
1. Напишите, что выведет эта программа при вводе числа 64.
2. Приведите пример числа, при вводе которого приведённая программа, несмотря на ошибки, выведет правильный ответ.
3. Найдите допущенные программистом ошибки и исправьте их. Исправление ошибки должно затрагивать только строку, в которой находится ошибка. Для каждой ошибки выпишите строку, в которой сделана ошибка, и правильный вариант этой строки.
Известно, что в тексте программы можно исправить ровно две строки так, чтобы она стала работать правильно. Достаточно указать ошибки и способ их исправления для языка Python. Требуется найти ошибки в имеющейся программе, а не написать другую программу, использующую иной алгоритм решения.
Решение по шагам
5 шаговПри вводе $N=64$ цикл выполняется три раза. Значения переменной $n$: $64 \to 16 \to 4 \to 1$. При этом исходная программа увеличивает $k$ на $n/4$: $16$, затем $4$, затем $1$.
$$k=0+16+4+1=21$$После завершения цикла выполняется условие $n>0$. Так как $n=1$, программа выводит число 21.
$$64=4^3,\quad 21\ne3$$Например, при $N=4$ цикл выполняется один раз: $k$ становится равным 1, а $n$ — равным 1. Программа выводит 1, что является правильным ответом, поскольку $4^1=4$.
Первая ошибка находится в строке, где к переменной $k$ прибавляется значение $n/4$. Нужно увеличивать показатель степени на единицу при каждом делении числа на 4.
$$k = k + 1$$Вторая ошибка находится в условии вывода результата. После цикла корректное число должно иметь значение $n=1$, а не просто быть положительным.
$$if n == 1:$$1) При вводе 64 программа выведет 21. 2) Например, при вводе 4 программа выведет 1, что является правильным ответом. 3) Исправления в Python: строку «k = k + n // 4» заменить на «k = k + 1»; строку «if n > 0:» заменить на «if n == 1:».
Этот ответ получен в разборе, но не сверен с официальным ключом из банка — проверьте выкладки, прежде чем заучивать результат.
Где здесь ошибаются
Указывать для числа 64 ответ 3, не вычислив вывод именно ошибочной программы.
Исправлять строку «n = n // 4», хотя деление выполнено правильно.
Использовать условие «if n > 0:», которое принимает любое положительное ненулевое значение, например $n=2$.
Предлагать новую программу вместо исправления ровно двух строк исходной.