РУҚА
24

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

ЕГЭ · Информатика · Задание 24 · Основы программирования
ВысокаяФИПИC629FBРазвёрнутое решение≈ 15 минут

На обработку поступает натуральное число, не превышающее $10^9$. Нужно написать программу, которая выводит на экран минимальную цифру числа, делящуюся на 3. Если в числе нет цифр, делящихся на 3, на экран требуется вывести «NO». Напоминание: 0 делится на любое натуральное число.

Программа на языке Python:

N = int(input())
minDigit = 9
while N > 0:
digit = N % 10
if digit % 3 == 0:
if digit < minDigit:
digit = minDigit
N = N // 10
if minDigit <= 9:
print(minDigit)
else:
print("NO")

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

Условие как в банке ФИПИ — открыть и сверить
Дайте развернутый ответ.

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

Напоминание: 0 делится на любое натуральное число.

Бейсик

Python

DIM N, DIGIT, MINDIGIT AS LONG

INPUT N

MINDIGIT = 9

WHILE N > 0

DIGIT = N MOD 10

IF DIGIT MOD 3 = 0 THEN

IF DIGIT < MINDIGIT THEN

DIGIT = MINDIGIT

END IF

END IF

N = N \ 10

WEND

IF MINDIGIT <= 9 THEN

PRINT MINDIGIT

ELSE

PRINT "NO"

END IF

N = int(input())

minDigit = 9

while N > 0:

digit = N % 10

if digit % 3 == 0:

if digit < minDigit:

digit = minDigit

N = N // 10

if minDigit <= 9:

print(minDigit)

else:

print("NO")

Алгоритмический язык

Паскаль

алг

нач

цел N, digit, minDigit

ввод N

minDigit := 9

нц пока N > 0

digit := mod(N,10)

если mod(digit, 3) = 0 то

если digit < minDigit то

digit := minDigit

все

все

N := div(N,10)

кц

если minDigit <= 9 то

вывод minDigit

иначе

вывод "NO"

все

кон

var N,digit,minDigit: longint;

begin

readln(N);

minDigit := 9;

while N > 0 do

begin

digit := N mod 10;

if digit mod 3 = 0 then

if digit < minDigit then

digit := minDigit;

N := N div 10;

end;

if minDigit <= 9 then

writeln(minDigit)

else

writeln('NO')

end.


С++

#include <iostream>

using namespace std;

int main()

{

int N, digit, minDigit;

cin >> N;

minDigit = 9;

while (N > 0)

{

digit = N % 10;

if (digit % 3 == 0)

if (digit < minDigit)

digit = minDigit;

N = N / 10;

}

if (minDigit <= 9)

cout << minDigit << endl;

else

cout << "NO" << endl;

return 0;

}

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

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

2. Приведите пример такого трёхзначного числа, при вводе которого программа выдаёт верный ответ.

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

1) выпишите строку, в которой сделана ошибка;

2) укажите, как исправить ошибку, т.е. приведите правильный вариант строки.

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

Обратите внимание на то, что требуется найти ошибки в имеющейся программе, а не написать свою, возможно, использующую другой алгоритм решения. Исправление ошибки должно затрагивать только строку, в которой находится ошибка.



Ответ

Это задание с развёрнутым решением: ответом считается запись хода решения, а не строка. Напишите решение на бумаге и сравните с разбором — там каждый шаг с обоснованием.

Открыть разбор
!
3 уровня: от лёгкого толчка до почти готового решения. Следующий открывается, когда прочитан предыдущий, — чтобы не перепрыгнуть сразу к ответу.
1Мягкая — с чего смотретьуровень 1 из 3

Проследите отдельно за значениями переменных digit и minDigit при обработке цифр числа 143.

2Наводящая — какие числа считатьуровень 2 из 3

Если найдена подходящая цифра, переменная minDigit должна получить значение этой цифры: minDigit = digit.

3Прямая — фактически решениеуровень 3 из 3

Для числа 143 программа сначала получает digit = 3, но из-за ошибочного присваивания digit = minDigit значение minDigit остаётся равным 9. Поэтому выводится 9. Ошибочная строка: digit = minDigit. Правильная строка: minDigit = digit.

Всё равно не складывается?Полное решение с обоснованием каждого шага — на отдельной странице.
Открыть решение

Задание 24 ЕГЭ, информатика

Задача из темы «Основы программирования»: в ней 160 задач с ответом и разбором по шагам. В 24-м номере бланка — 80 задач.

Ответ можно проверить здесь же, а если не выходит — открыть подсказку или разбор. Регистрация не нужна.