Погода
Календарь
Март 2019
Пн Вт Ср Чт Пт Сб Вс
« Сен    
 123
45678910
11121314151617
18192021222324
25262728293031
Страницы сайта

Поиск и исправление ошибок в программе.

Для решения задания потребуется вспомнить следующие темы:

  • Условный оператор 
  • Логические операции
  • Цикл с постусловием 
  • Цикл с предусловием 
  • Цикл со счетчиком 

Решение заданий

Задание 1. Дано целое положительное число N, не превосходящее 1000. Необходимо определить, является ли это число степенью числа 3. То есть требуется определить, существует ли такое целое число K, что 3K = N, и вывести это число либо сообщение, что такого числа не существует. Для решения этой задачи ученик написал программу, но, к сожалению, его программа оказалась неверной.

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 <= 3 then

    writeln(k)

  else

    writeln(‘Не существует’)

end.

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

1. Напишите, что выведет эта программа при вводе числа 27.

2. Приведите пример числа, при вводе которого приведённая программа напечатает корректное существующее значение K.

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

Достаточно указать ошибки и способ их исправления для одного языка программирования.

Задание 2. На обработку поступает натуральное число, не превышающее 109. Нужно написать программу, которая выводит на экран сумму нечётных цифр числа. Если в числе нет нечётных цифр, требуется на экран вывести «NO». Программист написал программу неправильно.

var  N, digit, sum: longint;

begin

  readln(N);

  sum := N mod 10;

  while N > 0 do

  begin

    digit := N mod 10;

    if digit mod 2 <> 0 then

      sum := digit;

    N := N div 10;

  end;

  if sum > 0 then

    writeln(sum)

  else

    writeln(‘NO’)

end.

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

Задание 3. Дано целое положительное число N, не превосходящее 1000. Необходимо определить, является ли это число степенью числа 4. То есть требуется определить, существует ли такое целое число K, что 4K = N, и вывести это число либо сообщение, что такого числа не существует.
Для решения этой задачи ученик написал программу, но, к сожалению, его программа оказалась неверной. Ниже эта написанная им программа для Вашего удобства приведена на пяти языках программирования.

var n, k: integer;

begin

  read(n);

  k := 0;

  while k mod 4 = 0 do begin

    k := k + 1;

    n := n div 4;

  end;

  if n > 0 then

    writeln(k)

  else

    writeln(‘Не существует’)

end.

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

1. Напишите, что выведет эта программа при вводе числа 16.

2. Приведите пример числа, при вводе которого приведённая программа напечатает то, что требуется.

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

Задание 4. (Демонстрационный вариант ЕГЭ 2018 г.) На обработку поступает натуральное число, не превышающее 109. Нужно написать программу, которая выводит на экран максимальную цифру числа, кратную 5. Если в числе нет цифр, кратных 5, требуется на экран вывести «NO». Программист написал программу неправильно.
Напоминание: 0 делится на любое натуральное число.

var N,digit,maxDigit: longint;
begin
readln(N);
maxDigit := N mod 10;
while N > 0 do
begin
digit := N mod 10;
if digit mod 5 = 0 then
if digit > maxDigit then
maxDigit := digit;
N := N div 10
end;
if maxDigit = 0 then
writeln(‘NO’)
else
writeln(maxDigit)
end.

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

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

Решение использует запись программы на Паскале. Допускается
использование программы на любом из четырёх других языков.

  1. Программа выведет число 2.
  2. Программа выдаёт правильный ответ, например, для числа 135.
  3. В программе есть две ошибки.
    Первая ошибка. Неверная инициализация ответа (переменная maxDigit).
    Строка с ошибкой: maxDigit := N mod 10;
    Верное исправление: maxDigit := -1;
    Вместо -1 может быть использовано любое число, меньшее 0.
    Вторая ошибка. Неверная проверка отсутствия цифр, кратных 5.
    Строка с ошибкой: ifmaxDigit = 0 then
    Верное исправление: ifmaxDigit = -1 then
    Вместо -1 может быть другое число, меньшее 0, которое было положено в maxDigit при исправлении первой ошибки, или проверка, что maxDigit< 0.

Замечание для проверяющего. Программа работает неправильно из-за неверной начальной инициализации и неверной проверки отсутствия цифр, кратных 5. Соответственно, программа будет выдавать верный ответ, если вводимое число содержит хотя бы одну цифру, кратную 5, и наибольшая цифра числа, кратная 5, не равна 0 и не меньше младшей (крайней правой) цифры числа (или просто стоит последней).

Top