СДАМ ГИА: РЕШУ ЕГЭ
Образовательный портал для подготовки к экзаменам
Информатика
≡ информатика
сайты - меню - вход - новости




Задания
Версия для печати и копирования в MS Word
Задание 24 № 13370

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

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

 

БейсикPython

DIM N, DIGIT, SUM AS LONG

INPUT N

SUM = N MOD 10

WHILE N > 0

    DIGIT = N MOD 10

    IF DIGIT MOD 3 > 0 THEN

        SUM = DIGIT

    END IF

    N = N \ 10

WEND

IF SUM > 0 THEN

    PRINT SUM

ELSE

    PRINT "NO"

END IF

N = int(input())

sum = N % 10

while N > 0:

    digit = N % 10

    if digit % 3 > 0:

        sum = digit

    N = N // 10

if sum > 0:

    print(sum)

else:

    print("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 3 > 0 then

            sum := digit;

        N := N div 10;

    end;

    if sum > 0 then

        writeln(sum)

    else

        writeln('NO')

end.

алг

нач

    цел N, digit, sum

    ввод N

    sum := mod(N,10)

    нц пока N > 0

        digit := mod(N,10)

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

            sum := digit

        все

        N := div(N,10)

    кц

    если sum > 0 то

        вывод sum

    иначе

        вывод "NO"

    все

кон

Си++

#include <iostream>

using namespace std;

int main()

{

    int N, digit, sum;

    cin >> N;

    sum = N % 10;

    while (N > 0)

    {

        digit = N % 10;

        if (digit % 3 > 0)

            sum = digit;

        N = N / 10;

    }

    if (sum > 0)

        cout << sum << endl;

    else

        cout << "NO"<< endl;

    return 0;

}

 

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

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

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

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

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

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

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

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

Решение.

1) При вводе числа 645 программа выдает 4. Поскольку:

в первый раз сумм=645 mod 10 =5.

Далее:

сумм= 5(т.к. 5 mod 3 >0)

сумм=4(т.к. 4 mod 3>0)

Т.е. 6 mod 3 = 0 — ответ не изменится.

2) При вводе числа 103. Cначала сумм станет равно 3, потом в цикле происходит переприсвоение этого значения на 1, а сумма цифр, которые не кратны трем в числе 103, как раз равна 1.

3.1) В начале не нужна строчка sum := N mod 10; т.к. в 1 раз мы сделаем тоже самое в цикле, а sum изначально сделаем 0, как и должно быть.

3.2) Нам нужно заменить sum := digit; на sum := sum + digit; т.к. иначе, мы не складываем наши цифры, а обновляем их.

Источник: ЕГЭ — 2017. До­сроч­ная волна по информатике