24_3
Дано натуральное число N, не превосходящее 1000. Необходимо определить, существует ли такое натуральное число М, что N можно представить в виде произведения (М-1)(М+1). Если это возможно, то следует напечатать число М, в противном случае вывести сообщение, что такого числа не существует.
Для решения этой задачи ученик написал программу, но, к сожалению, его программа оказалась неверной.
Дано натуральное число N, не превосходящее 1000. Необходимо определить, существует ли такое натуральное число М, что N можно представить в виде произведения (М-1)(М+1). Если это возможно, то следует напечатать число М, в противном случае вывести сообщение, что такого числа не существует.
Для решения этой задачи ученик написал программу, но, к сожалению, его программа оказалась неверной.
1 2 3 4 5 6 7 8 9 10 11 | var n, m: integer; begin read(n); m:=2; while ((m-1)*(m+1) <> n) and (m=n) do m:=m+1; if m > n then writeln(m) else writeln('Не существует') end. |
Последовательно выполните следующее:
- Напишите, что выведет эта программа при вводе числа 2.
- Приведите пример натурального числа, при вводе которого приведённая программа напечатает то, что требуется.
- Найдите в программе все ошибки (их может быть одна или несколько). Для каждой ошибки выпишите строку, в которой она допущена, и приведите эту же строку в исправленном виде.
✍ Решение:
- При вводе числа 2 программа выведет число 3.
- Например, число 1.
- Программа содержит две ошибки:
Программа будет выдавать верный ответ «Не существует» для всех чисел, которые нельзя представить в виде М2 — 1, где М — натуральное число.
1) неверное условие цикла;
2) неверное условие при печати результата.
Пример исправления для языка Паскаль:
Первая ошибка:
while (m-l)*(m+l) <> n n and m = n;
Исправленная строка:
while (m-l)*(m+l) <> n and m < n;
Вторая ошибка:
if m > n then
Исправленная строка:
if m < n then
Возможны и другие варианты исправления второй ошибки, например,
if (m - 1)*(m + 1)= n then