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




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

Требовалось написать программу, при выполнении которой с клавиатуры считывается натуральное число N, не превосходящее 109, и выводится сумма чётных цифр в десятичной записи этого числа или 0, если чётных цифр в записи нет. Ученик написал такую программу:

 

БейсикПаскаль

DIM N AS LONG

INPUT N

S = 0

WHILE N > 1

IF N MOD 2 = 0

S = N MOD 10

END IF

N = N \ 10

WEND

PRINT S

END

var N: longint;

s: integer;

begin

readln(N);

s := 0;

while N > 1 do begin

if N mod 2 = 0 then begin

s := N mod 10;

end;

N := N div 10;

end;

write(s);

end.

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

#include <iostream>

using namespace std;

int main()

{

long int N;

int s;

cin >> N;

s = 0;

while (N > 1) {

if (N%2 == 0) {

s = N % 10;

}

N = N / 10;

}

cout « s « endl;

}

алг

нач

цел N, s

ввод N

s := 0

нц пока N > 1

если mod(N,2) = 0 то

s := mod(N,10)

все

N := div(N,10)

кц

вывод s

кон

Python

N = int(input())

s = 0

while N > 1:

    if N % 2 == 0:

        s = N % 10

    N //= 10

print(s)

 

 

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

 

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

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

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

 

Для каждой ошибки выпишите строку, в которой она допущена, и приведите эту же строку в исправленном виде. Обратите внимание: вам нужно исправить приведённую программу, а не написать свою. Вы можете только заменять ошибочные строки, но не можете удалять строки или добавлять новые. Заменять следует только ошибочные строки: за исправления, внесённые в строки, не содержащие ошибок, баллы будут снижаться.

Решение.

1. При вводе числа 1984 программа выведет 8.

 

Комментарий для экспертов. Приведённая программа вместо подсчёта суммы чётных цифр запоминает очередную чётную цифру, забывая при этом предыдущие. Поскольку цифры в записи числа обрабатываются с конца (справа налево), программа запоминает и выводит первую чётную цифру в десятичной записи или 0, если чётных цифр нет.

 

2. Примеры чисел, для которых программа даёт верный ответ: 1975, 1961, 30051,2013.

 

Комментарий для экспертов. Программа выдает верный ответ в следующих случаях:

 

1. В числе вообще нет чётных цифр.

2. В числе ровно одна чётная цифра.

3. Все чётные цифры числа-нули.

4. В числе есть нули и ровно одна ненулевая чётная цифра, причём все нули расположены правее ненулевой четной цифры.

 

3. Ошибка содержится ровно в одной строке программы: вместо присваивания переменной s значения найденной чётной цифры нужно увеличить s на значение этой цифры.

 

БейсикПаскаль

Строка с ошибкой:

S = N MOD 10

 

Возможные варианты исправления:

S = S + N MOD 10

S = N MOD 10 + S

Строка с ошибкой:

S := N mod 10;

 

Возможные варианты исправления:

s := s + N mod 10;

s := N mod 10 + s;

Точка с запятой в конце строки не обязательна.

СиАлгоритмический

Строка с ошибкой:

S = N % 10;

 

Возможные варианты исправления:

s = s + N % 10;

s = N % 10 + s;

s += N % 10;

Строка с ошибкой:

s := mod(N,10)

 

Возможные варианты исправления:

s := s + mod(N,10)

s := mod(N,10) + s

Python

Строка с ошибкой:

s = N % 10

 

Возможные варианты исправления:

s += N % 10

s = s + N % 10

s = N % 10 + s

 

В любом варианте допустимы избыточные скобки, не изменяющие правильный порядок действий.

Некоторые строки программы могут показаться ошибочными, но в действительности ошибок не содержат. В первую очередь, к ним относятся строки с условиями.

Условие цикла (N > 1) может показаться неправильным. Действительно в стандартной схеме решения подобных задач используется условие N>0. Условие N > 1 приводит к тому, что, если старшая цифра числа равна 1, она не будет обрабатываться. Однако, поскольку 1 — нечётная цифра, ее обработка никак не влияет на результат, поэтому в данном случае такое условие допустимо.

Проверка чётности (N mod 2 = 0) может показаться неправильной, так как проверяется чётность не последней цифры, а числа в целом. Для проверки последней цифры следовало бы написать N mod 10 mod 2 = 0. Однако известно, что чётность числа всегда совпадает с чётностью его последней цифры, поэтому приведённая в программе проверка не может считаться ошибкой.

Спрятать решение · ·
Павел Гудим 25.02.2019 20:07

в Python регистр важен. n и N - это разные переменные