
1) Дано целое положительное число N, не превосходящее 1000. Необходимо определить, является ли это число степенью числа 7. То есть требуется определить, существует ли такое целое число К, что 7K =N, и вывести это число либо сообщение, что такого числа не существует. Для решения этой задачи ученик написал программу, но, к сожалению, его программа оказалась неверной.
var n, k: integer;
begin
read(n);
k := 0;
while n mod 7 = 0 do begin
k := k + n div 7;
n := n div 7;
end;
if n <= 7 then
writeln(k)
else
writeln('He существует')
end.
Последовательно выполните следующее.
1. Напишите, что выведет эта программа при вводе числа 49.
2. Приведите пример числа, при вводе которого приведённая программа напечатает то, что требуется.
3. Найдите в программе все ошибки (их может быть одна или несколько). Для каждой ошибки выпишите строку, в которой она допущена, и приведите эту же строку в исправленном виде.
Ответы на вопрос

Давайте подробно разберем задачу.
Что выведет эта программа при вводе числа 49?
При вводе числа
49
программа выполнит следующие действия:- Инициализирует
k := 0
. - Проверит условие
n mod 7 = 0
(оно истинно, так как49 mod 7 = 0
). - В теле цикла выполнит
k := k + n div 7
(то естьk := 0 + 49 div 7 = 0 + 7 = 7
) и затемn := n div 7
(теперьn = 49 div 7 = 7
). - Повторит цикл, так как
7 mod 7 = 0
. Снова выполнитk := k + n div 7
(теперьk := 7 + 7 div 7 = 7 + 1 = 8
) иn := n div 7
(теперьn = 7 div 7 = 1
). - После этого
n mod 7 = 1
, цикл завершится. - Теперь
n <= 7
, поэтому программа выведет значениеk
, которое равно8
.
Таким образом, при вводе числа
49
программа выведет8
, что неверно.- Инициализирует
Пример числа, при котором программа выведет корректный ответ.
Для числа
7
программа должна вывести1
, так как . В этом случае программа отработает корректно:k := 0
.- Условие
n mod 7 = 0
истинно. - Выполняется
k := k + n div 7
(то естьk := 0 + 7 div 7 = 0 + 1 = 1
), затемn := n div 7
(теперьn = 7 div 7 = 1
). - Условие
n mod 7 = 0
теперь ложно (так как1 mod 7 ≠ 0
), цикл завершится. - Поскольку
n <= 7
, программа выведет значениеk
, которое равно1
.
Таким образом, при вводе числа
7
программа выдаст правильный результат.Ошибки в программе и их исправления:
Разберем ошибки в программе по строкам.
Ошибка в строке:
k := k + n div 7;
- Проблема: в данной строке происходит накопление значения
k
через добавлениеn div 7
, что приводит к некорректному результату, особенно для степеней выше первой. - Исправленная строка:
k := k + 1;
- Пояснение: Каждое деление на
7
соответствует увеличению степениk
на 1, поэтому правильнее просто увеличиватьk
на 1 при каждом делении.
- Проблема: в данной строке происходит накопление значения
Ошибка в условии завершения программы:
if n <= 7 then writeln(k) else writeln('He существует')
- Проблема: условие
n <= 7
некорректно, так как в случае, еслиn
станет равным1
после делений, это значит, чтоn
является степенью числа7
. Но еслиn
станет другим числом (не равным1
), это значит, чтоn
не является степенью числа7
. - Исправленная строка:
if n = 1 then writeln(k) else writeln('He существует')
- Пояснение: Чтобы определить, является ли исходное число
N
степенью7
, необходимо, чтобы после всех деленийn
стало равно1
. Только в этом случаеN
можно представить как .
- Проблема: условие
Исправленный код:
Теперь программа будет корректно определять, является ли число степенью 7
, и выводить правильное значение k
или сообщение 'Не существует'
, если N
нельзя представить как степень 7
.
Похожие вопросы









Топ вопросов за вчера в категории Информатика









Последние заданные вопросы в категории Информатика
-
Математика
-
Литература
-
Алгебра
-
Русский язык
-
Геометрия
-
Английский язык
-
Химия
-
Физика
-
Биология
-
Другие предметы
-
История
-
Обществознание
-
Окружающий мир
-
География
-
Українська мова
-
Информатика
-
Українська література
-
Қазақ тiлi
-
Экономика
-
Музыка
-
Право
-
Беларуская мова
-
Французский язык
-
Немецкий язык
-
МХК
-
ОБЖ
-
Психология
-
Физкультура и спорт
-
Астрономия
-
Кыргыз тили
-
Оʻzbek tili