Дано целое положительное число N, не превосходящее 1000. Необходимо определить, является ли это число степенью числа 3. То есть требуется определить, существует ли такое целое число K, что 3K = N, и вывести это число либо сообщение, что такого числа не существует.
Для решения этой задачи ученик написал программу, но, к сожалению, его программа оказалась неверной. Ниже эта написанная им программа для Вашего удобства приведена на пяти языках программирования.
| Бейсик | Python |
|---|---|
DIM N, K AS INTEGER INPUT N K = 0 WHILE K MOD 3 = 0 K = K + 1 N = N \ 3 WEND IF N > 0 THEN PRINT K ELSE PRINT "Не существует" END IF END
| n = int(input()) k = 0 while k%3 == 0: k = k + 1 n = n // 3 if n > 0: print(k) else: print("Не существует")
|
| Паскаль | Алгоритмический язык |
var n, k: integer; begin read(n); k := 0; while k mod 3 = 0 do begin k := k + 1; n := n div 3; end; if n > 0 then writeln(k) else writeln('Не существует') end.
| алг нач цел n, k ввод n k := 0 нц пока mod(k, 3)=0 k := k + 1 n := div(n,3) кц если n > 0 то вывод k иначе вывод "Не существует" все кон |
| Си++ | |
#include <iostream> using namespace std; int main(){ int n, k; cin >> n; k = 0; while (k%3 == 0) { k = k + 1; n = n / 3; } if (n > 0) cout « k « endl; else cout << "Не существует"; return 0; }
| |
Последовательно выполните следующее.
1. Напишите, что выведет эта программа при вводе числа 9.
2. Приведите пример числа, при вводе которого приведённая программа напечатает то, что требуется.
3. Найдите в программе все ошибки (их может быть одна или несколько).
Для каждой ошибки выпишите строку, в которой она допущена, и приведите эту же строку в исправленном виде.
Достаточно указать ошибки и способ их исправления для одного языка программирования.
Обратите внимание: Вам нужно исправить приведённую программу, а не написать свою. Вы можете только заменять ошибочные строки, но не можете удалять строки или добавлять новые. Заменять следует только ошибочные строки: за исправления, внесённые в строки, не содержащие ошибок, баллы будут снижаться.
1. При вводе числа 9 программа выведет число 1.
2. Примеры чисел, при вводе которых программа выводит корректный ответ: 2, 3. Других чисел нет.
Комментарий для экспертов. После выполнения программы при любом введённом n значение k будет равно 1 (тело цикла выполнится ровно 1 раз).
В результате программа напечатает либо 1 (если n ≥ 3), либо «Не существует» (в противном случае). Таким образом, программа выводит корректный ответ, только если введено 2 или 3. Экзаменуемому достаточно указать любое из этих чисел. Отметим, что при n=1 программа напечатает «Не существует», что неверно (должно быть напечатано «0»).
3. Программа содержит две ошибки:
1) неверное условие цикла;
2) неверное условие при печати результата.
Пример исправления для языка Паскаль:
Первая ошибка:
while k mod 3 = 0 do begin
Исправленная строка:
while n mod 3 = 0 do begin
Вторая ошибка:
if n>0 then
Исправленная строка:
if n=1 then
Пояснение для эксперта
После исправления первой ошибки в результате выполнения цикла значение переменной n будет равно n0/(3k), где n0 — введённое пользователем значение; k — максимальный показатель степени, при котором 3k является делителем числа n0. Число n0 является степенью числа 3, если n0 = 3k, т. е. n0/(3k) = 1.
В программах на других языках ошибочные строки и их исправления аналогичны.
Незначительной опиской, не влияющей на оценку, следует считать отсутствие служебных слов и знаков после содержательной части исправления.

