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

Тре­бо­ва­лось на­пи­сать про­грам­му, при вы­пол­не­нии ко­то­рой с кла­ви­а­ту­ры счи­ты­ва­ет­ся на­ту­раль­ное число 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. Од­на­ко из­вест­но, что чётность числа все­гда сов­па­да­ет с чётно­стью его по­след­ней цифры, по­это­му при­ведённая в про­грам­ме про­вер­ка не может счи­тать­ся ошиб­кой.

Спрятать критерии
Критерии проверки:

Кри­те­рии оце­ни­ва­ния вы­пол­не­ния за­да­нияБаллы
Пра­виль­но вы­пол­не­ны все пунк­ты за­да­ния. Про­грам­ма после ис­прав­ле­ний для всех на­ту­раль­ных чисел N, не пре­вос­хо­дя­щих 109, верно опре­де­ля­ет ми­ни­маль­ную цифру. В ра­бо­те (во фраг­мен­тах про­грамм) до­пус­ка­ет­ся на­ли­чие от­дель­ных син­так­си­че­ских оши­бок, не ис­ка­жа­ю­щих за­мыс­ла ав­то­ра ре­ше­ния.3
1. Пра­виль­но вы­пол­не­ны два дей­ствия из трёх (ис­прав­ле­ны обе ошиб­ки, но в п. 1 за­да­ния ответ не при­ведён или при­ведён не­вер­но, или вы­пол­нен п. 1, и верно ис­прав­ле­на толь­ко одна ошиб­ка). Вер­ное ука­за­ние на ошиб­ку при её не­вер­ном ис­прав­ле­нии при этом не за­счи­ты­ва­ет­ся.

 

2. Или вы­пол­нен п. 1, а вме­сто ука­за­ния на ошиб­ки в про­грам­ме и их ис­прав­ле­ния при­ведён новый вер­ный текст ре­ше­ния, воз­мож­но, со­вер­шен­но не­по­хо­жий на ис­ход­ный.

 

3. Или пра­виль­но вы­пол­не­ны все дей­ствия (при­ведён вер­ный ответ на во­прос 1, и ис­прав­ле­ны обе ошиб­ки), но в текст про­грам­мы вне­се­ны и дру­гие из­ме­не­ния, при­во­дя­щие к её не­вер­ной ра­бо­те.

2
Пра­виль­но вы­пол­не­но толь­ко одно дей­ствие из трёх, то есть либо толь­ко вы­пол­нен п. 1, либо он не вы­пол­нен или вы­пол­нен не­вер­но и верно ис­прав­ле­на толь­ко одна ошиб­ка про­грам­мы путём её яв­но­го ука­за­ния и ис­прав­ле­ния.1
Все пунк­ты за­да­ния вы­пол­не­ны не­вер­но (ответ на п. 1 не при­ведён или при­ведён не­вер­но; ошиб­ки не най­де­ны или най­де­ны, но не ис­прав­ле­ны или ис­прав­ле­ны не­вер­но).0
Мак­си­маль­ный балл3
Павел Гудим 25.02.2019 20:07

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