≡ информатика
сайты - меню - вход - новости




Школа экспертов
Вернуться на основную страницу «Школы экспертов»

Ниже представлены ученические решения экзаменационных заданий. Оцените каждое из них в соответствии с критериями проверки заданий ЕГЭ. После нажатия кнопки «Проверить» вы узнаете правильный балл за каждое из решений. В конце будут подведены итоги.

Задание 3787
Задание 5436
Задание 5980
Задание 12440


Задание № 3787

Требовалось написать программу, при выполнении которой с клавиатуры считываются координаты точки на плоскости (х, у — действительные числа) и определяется принадлежность этой точки заданной закрашенной области (включая границы). Программист торопился и написал программу неправильно.

 

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

INPUT х, у

IF x*x + у*у <= 49 THEN

IF x*x + у*у >= 16 THEN

PRINT "принадлежит"

ELSE

PRINT "не принадлежит"

ENDIF

END IF

END

var x, у: real;

begin

readln(x,y);

if x*x + y*y <= 49 then

if x*x + y*y >= 16 then

write('принадлежит')

else

write('не принадлежит')

end.

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

#include <iostream>

using namespace std;

int main (void) {

float x,y;

cin >> x >> y;

if (x*x + y*y <= 49)

if (x*x + y*y >= 16)

cout << "принадлежит";

else

cout << "не принадлежит";

}

алг

нач

вещ х,у

ввод х,у

если х*х + у*у <= 49 то

если х*х + у* у >= 16 то

вывод 'принадлежит'

иначе

вывод 'не принадлежит'

все

все

кон

Python

x,y = float(input())

if x*x + у*у <= 49:

    if x*x + у*у >= 16:

        print("принадлежит")

    else:

        print("не принадлежит")

 

 

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

1. Перерисуйте и заполните таблицу, которая показывает, как работает программа при аргументах, принадлежащих различным областям (A, B, C, D). Точки, лежащие на границах областей, отдельно не рассматривать. В столбцах условий укажите "да", если условие выполнится, "нет", если условие не выполнится, "—" (прочерк), если условие не будет проверяться, "не изв.", если программа ведет себя по-разному для разных значений, принадлежащих данной области. В столбце "Программа выведет" укажите, что программа выведет на экран. Если программа ничего не выводит, напишите "—" (прочерк). Если для разных значений, принадлежащих области, будут выведены разные тексты, напишите "не изв". В последнем столбце укажите "да" или "нет".

2. Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы. (Это можно сделать несколькими способами, достаточно указать любой способ доработки исходной программы.)

 

ОбластьУсловие 1

(х*х+у*у <= 49)

Условие 2

(х*х+у*у >= 16)

Программа выведетОбласть

обрабатывается верно

A
В
С
D

Пояснение

1.Таблица:

 

ОбластьУсловие 1

(х*х+у*у <= 49)

Условие 2

(х*х+у*у >= 16)

Программа выведетОбласть

обрабатывается верно

Aданетне принадлежитнет
Вданетне принадлежитда
Сдадапринадлежитда
Dнетнет

 

 

2. Возможная доработка (Паскаль):

 

if (х*х+у*у >= 16) and (х*х+у*у <= 49) or (x*x+y*y <= 1) then

write('принадлежит') else

write('не принадлежит')

 

Возможны и другие способы доработки. Пример:

 

if х*х + у*у >= 16 then if x*x + у*у <= 49 then write('принадлежит') else

write{'не принадлежит') else

if x*x + у*у <= 1

write('принадлежит')

else

write{'не принадлежит')



Указания по оцениванию.

 

Об­ра­ти­те вни­ма­ние! В задаче требовалось выполнить три действия: указать для каждой области, как будет работать программа, что она выведет на экран и правильно ли это (в виде таблицы), и исправить две ошибки. Баллы за данное задание начисляются как сумма баллов за верное выполнение каждого действия.

1. Верное заполнение предложенной таблицы.

2. Неправильное использование условного оператора, в результате чего при невыполнении первого условия программа не выдавала ничего (отсутствует ветвь ELSE). Исправлением этой ошибки может быть либо добавление ветви ELSE к каждому условию IF, либо объединение всех условий IF в одно при помощи конъюнкции.

В сложных случаях это действие считается выполненным, если программа выдает одно из двух сообщений «принадлежит» или «не принадлежит» для любых пар (x,y), при этом программа не стала работать хуже, чем раньше, то есть для всех точек, для которых программа ранее выдавала верный ответ, доработанная программа также должна выдавать верный ответ.

3. Приведенных трех ограничений не достаточно для описания двух областей (потеряно условие x*x + y*y <= 1). Исправлением этой ошибки может быть использование одного условия с логическими операциями конъюнкции и дизъюнкции, либо использование вложенных условий с ветвями ELSE. В сложных случаях это действие считается выполненным, если верно определены закрашенные области, то есть программа выводит сообщение «принадлежит» для всех точек закрашенных областей и только для них, для точек вне закрашенных областей программа выводит «не принадлежит» или не выводит ничего. В работе (во фрагментах программ) допускается наличие отдельных синтаксических ошибок, не искажающих замысла автора решения.

 

Критерии оценивания выполнения заданияБаллы
Правильно выполнены оба пункта задания. Исправлены две ошибки. Программа для всех пар (x,y) верно определяет принадлежность точки заштрихованной области. Допускается наличие ошибок в одной из строк таблицы.3
1. Правильно выполнены два действия из трех (исправлены обе ошибки, но в первом пункте задания не приведена таблица (либо таблица содержит ошибки в двух и более строках), либо приведена таблица (которая содержит ошибки не более чем в одной строке), но исправлена только одна ошибка программы). При написании операций сравнения допускается одно неправильное использование строгих/нестрогих неравенств (считается несущественной ошибкой, погрешностью записи). Например, вместо «x*x + y*y <= 1» используется «x*x + y*y< 1».

2. Или выполнены все три действия, но при этом в логическом выражении неверно учтены приоритеты логических операций (не расставлены или неправильно расставлены скобки в выражениях).

2
Правильно выполнено только одно действие из трех, то есть, либо только приведена таблица, которая содержит ошибки в не более чем одной строке, либо таблица не приведена (или приведена и содержит ошибки более чем в одной строке), но исправлена одна ошибка программы. При оценивании этого задания на 1 балл допускается не учитывать корректность работы программ на точках границ областей (вместо нестрогих неравенств в решении были использованы строгие неравенства или наоборот).1
Все пункты задания выполнены неверно (таблица анализа правильности алгоритма не приведена, либо содержит ошибки в двух и более строках, программа не приведена, либо ни одна из двух ошибок не исправлена).0

Максимальный балл

3


Пример 1.

 

 

Оцените это решение в баллах:

Пример 2.

 

Оцените это решение в баллах:

Пример 3.

 

Оцените это решение в баллах:

Пример 4.

 

Оцените это решение в баллах:



Задание № 5436

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

 

 

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

DIM N AS LONG

INPUT N

sum = 0

WHILE N >= 9

N = N \ 10

sum = sum + 1

WEND

PRINT sum

END

var N: longint;

sum: integer;

begin

readln(N);

sum := 0;

while N >= 9 do

begin

N := N div 10;

sum := sum + 1;

end;

writeln(sum);

end.

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

#include <iostream>

using namespace std;

int main()

{

long int N;

int sum;

cin >> N;

sum = 0;

while (N >= 9)

{

N = N / 10;

sum = sum + 1;

}

cout « sum « endl;

}

алг

нач

цел N, sum

ввод N

sum := 0

нц пока N >= 9

N := div(N, 10)

sum := sum + 1

кц

вывод sum

кон

Python

n = int(input())

sum = 0

while N >= 9:

    N //= 10

    sum += 1

print(sum)

 

 

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

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

2. Укажите одно число для которого эта программа будет работать верно.

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

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


Пояснение

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

2. Программа работает верно для всех чисел, начинающихся на 9. в том числе для числа 9. (Достаточно указать любое такое число).

3. В качестве ответа для остальных чисел программа выдаёт число на 1 меньшее, чем нужно. Возможные (не все) варианты исправления для языка Паскаль:

1) исправление условия продолжения цикла на while (N >= 1) do или while (N > 0) do. При этом замена на while (N >= 0) do корректной не является.

2) исправление инициализации на sum := 1, а условие продолжения цикла на while (N > 9) do или while (N >= 10) do.



Указания по оцениванию.

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

1. Верно указано, что именно выведет программа при указанных в условии входных данных.

2. Указано число, при котором программа работает верно.

3. Указаны все строки (одна или более), в которые нужно внести исправления, и эти исправления внесены: при этом получена верно работающая программа.

При выполнении действия 3 верное указание на ошибку при неверном её исправлении не засчитывается.

Обратите внимание! Выбор ошибочных строк может быть выполнен не единственным способом.

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

 

 

Критерии оценивания выполнения заданияБаллы
Правильно выполнены все три действия.3
Правильно выполнены два действия из трёх.2
Не выполнены условия, позволяющие поставить 2 или 3 балла, однако выполнено одно из следующих условий.

1. Выполнено одно действие из трёх.

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

1
Все пункты задания выполнены неверно или отсутствуют.0
Максимальный балл3


Пример 1.

 

Оцените это решение в баллах:

Пример 2.

 

Оцените это решение в баллах:

Пример 3.

 

Оцените это решение в баллах:



Задание № 5980

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

 

 

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

DIM N AS LONG

INPUT N

min_digit = 9

WHILE N >= 10

digit = N MOD 10

IF digit < min_digit THEN

min_digit = digit

END IF

N = N \ 10

WEND

PRINT digit

END

var N: longint;

digit, min_digit: integer;

begin

readln(N);

min_digit := 9;

while N >= 10 do

begin

digit := N mod 10;

if digit < min_digit then

min_digit := digit;

N := N div 10;

end;

writeln(digit);

end.

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

#include <iostream>

using namespace std;

int main()

{

long int N;

int digit, min_digit;

cin >> N;

min_digit = 9;

while (N >= 10)

{

digit = N % 10;

if (digit < min_digit)

min_digit = digit;

N = N / 10;

}

cout « digit « endl;

}

алг

нач

цел N, digit, min_digit

ввод N

min_digit := 9

нц пока N >= 10

digit := mod(N, 10)

если digit < min_digit то

min_digit := digit

все

N := div(N, 10)

кц

вывод digit

кон

Python

n = int(input())

min_digit = 9

while n >= 10:

    digit = N % 10

    if digit < min_digit:

        min_digit = digit

    N //= 10;

print(digit)

 

 

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

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

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

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

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

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


Пояснение

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

2. Первая ошибка. Неверное условие окончания цикла. Программа не будет рассматривать старшую цифру числа. Строка с ошибкой: «while N >= 10» do Возможные варианты исправления: «while (N >= 1)» или «while (N > 0)» При этом замены на «while (N > 1)» или «while (N >= 0)» корректными не являются.

3. Вторая ошибка. Программа выводит значение переменной «digit», а не «min digit». В результате программа всегда выводит вторую слева цифру числа. Строка с ошибкой: «writeln(digit);». Необходимо в строке с выводом результата заменить «digit» на «min digit».



Указания по оцениванию.

 

Обратите внимание! В задаче требовалось выполнить четыре действия:

1) указать, что выведет программа при конкретной входной последовательности;

2) указать пример последовательности, при которой программа работает правильно;

3) исправить первую ошибку;

4) исправить вторую ошибку.

 

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

Для действий 3) и 4) ошибка считается исправленной, если выполнены оба следующих условия:

а) правильно указана строка с ошибкой;

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

 

Критерии оце­ни­ва­ния выполнения заданияБаллы
Выполнены все четыре необходимых действия, и ни одна верная строка не указана в качестве ошибочной.3
Не выполнены условия, позволяющие поставить 3 балла. Имеет место одна из следующих ситуаций:

а) выполнены три из четырёх необходимых действий. Ни одна верная строка не указана в качестве ошибочной;

б) выполнены все четыре необходимых действия. Указано в качестве ошибочной не более одной верной строки.

2
Не выполнены условия, позволяющие поставить 2 или 3 балла. Выполнены два необходимых действия из четырёх.1
Не выполнены условия, позволяющие поставить 1, 2 или 3 балла.0
Максимальный балл3


Пример 1.

 

1)Программа вы­ве­дет ­чис­ло 4.

2) 5

Оцените это решение в баллах:

Пример 2.

 

1) 4.

2) 77

3) стро­ку while N >= 10 do за­ме­нить на while N >= 1

4)строку var N: longint; за­ме­нить на var N: intеger;

Оцените это решение в баллах:

Пример 3.

 

1) 4.

2) 218

3) стро­ку while N >= 10 do за­ме­нить на while N >= 1 do

4) в строке

Оцените это решение в баллах:

Пример 4.

 

1) 4.

2) 9078

3) N >= 10 за­ме­нить на N >= 1

4) стро­ку writeln(digit) за­ме­нить на writeln(min_digit)

Оцените это решение в баллах:

Пример 5.

 

1) 4.

2) 32

3) N >= 10 за­ме­нить на N >= 1

4) в стро­ках 2,8,9,13 digit за­ме­нить на min_digit

Оцените это решение в баллах:



Задание № 12440

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

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

 

 

БейсикPython

DIM N, DIGIT, COUNT AS LONG

INPUT N

COUNT = 1

WHILE N > 0

    DIGIT = N MOD 10

    IF DIGIT MOD 5 = 0 THEN

        COUNT = COUNT + DIGIT

    END IF

    N = N \ 10

WEND

IF COUNT = 0 THEN

    PRINT "NO"

ELSE

    PRINT COUNT

END IF

N = int(input())

count = 1

while N > 0:

    digit = N % 10

    if digit % 5 == 0:

        count = count + digit

    N = N // 10

if count == 0:

    print("NO")

else:

    print(count)

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

var N, digit, count: longint;

begin

    readln(N);

    count := 1;

    while N > 0 do

    begin

        digit := N mod 10;

        if digit mod 5 = 0 then

            count := count + digit;

        N := N div 10;

    end;

    if count = 0 then

        writeln('NO')

    else

        writeln(count)

end.

 

алг

нач

    цел N, digit, count

    ввод N

    count := 1

    нц пока N > 0

        digit := mod(N,10)

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

            count := count + digit

        все

        N := div(N,10)

    кц

    если count = 0 то

        вывод "NO"

    иначе

        вывод count

    все

кон

 

Си++

#include <iostream>

using namespace std;

int main()

{

    int N, digit, count;

    cin >> N;

    count = 1;

    while (N > 0)

    {

        digit = N % 10;

        if (digit % 5 == 0)

            count = count + digit;

        N = N / 10;

    }

    if (count == 0)

        cout << "NO";

    else

        cout << count << endl;

    return 0;

}

 

 

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

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

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

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

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

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

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

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

Обратите внимание, что требуется найти ошибки в имеющейся программе,

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


Пояснение

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

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

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

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

3. В программе есть две ошибки.

 

Первая ошибка. Неверное начальное значение счётчика.

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

count := 1;

Верное исправление:

count := 0;

 

Вторая ошибка. Неверное изменение счётчика.

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

count := count + digit;

Верное исправление:

count := count + 1;



Обратите внимание! В за­да­че тре­бо­ва­лось вы­пол­нить че­ты­ре действия:

 

1) указать, что вы­ве­дет про­грам­ма при кон­крет­ной вход­ной последовательности;

2) ука­зать при­мер последовательности, при ко­то­рой про­грам­ма ра­бо­та­ет правильно;

3) ис­пра­вить первую ошибку;

4) ис­пра­вить вто­рую ошибку.

 

 

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

а) пра­виль­но ука­за­на стро­ка с ошибкой;

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

 

 

Критерии оце­ни­ва­ния вы­пол­не­ния заданияБаллы
Выполнены все че­ты­ре не­об­хо­ди­мых действия, и ни одна вер­ная стро­ка не ука­за­на в ка­че­стве ошибочной3
Не вы­пол­не­ны условия, поз­во­ля­ю­щие по­ста­вить 3 балла. Имеет место одна из сле­ду­ю­щих ситуаций:

а) вы­пол­не­ны три из четырёх не­об­хо­ди­мых действий. Ни одна вер­ная стро­ка не ука­за­на в ка­че­стве ошибочной;

б) вы­пол­не­ны все че­ты­ре не­об­хо­ди­мых действия. Ука­за­но в ка­че­стве оши­боч­ной не более одной вер­ной строки.

2
Не вы­пол­не­ны условия, поз­во­ля­ю­щие по­ста­вить 2 или 3 балла. Вы­пол­не­ны два не­об­хо­ди­мых дей­ствия из четырёх.1
Не вы­пол­не­ны условия, поз­во­ля­ю­щие по­ста­вить 1, 2 или 3 балла. 0
Максимальный балл3


Пример 1.

Оцените это решение в баллах:

Пример 2.

Оцените это решение в баллах:



Наверх
Вернуться на основную страницу «Школы экспертов»