Тренировка задания 24 ЕГЭ (24.3), вторая часть ЕГЭ про поиск числа

24_3

Дано натуральное число 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.

Последовательно выполните следующее:

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

✍ Решение:
 

  1. При вводе числа 2 программа выведет число 3.
  2. Например, число 1.
  3. Программа будет выдавать верный ответ «Не существует» для всех чисел, которые нельзя представить в виде М2 — 1, где М — натуральное число.
  4. Программа содержит две ошибки:
  5. 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