Разбор решений заданий 24 и 25 ЕГЭ по информатике и ИКТ

Разбор решений заданий 24 и 25 ЕГЭ по информатике и ИКТ

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

4 Указания по оцениванию Обратите внимание! В задаче требовалось выполнить четыре действия: 1) указать, что выведет программа при конкретном входном числе; 2) указать пример входного числа, при котором программа выдаёт верный ответ; 3) исправить первую ошибку; 4) исправить вторую ошибку. Для проверки правильности выполнения п. 2) нужно формально выполнить исходную (ошибочную) программу с входными данными, которые указал экзаменуемый, и убедиться в том, что результат, выданный программой, будет таким же, как и для правильной программы. Для действий 3) и 4) ошибка считается исправленной, если выполнены оба следующих условия: а) правильно указана строка с ошибкой; б) указан такой новый вариант строки, что при исправлении другой ошибки получается правильная программа Баллы Выполнены все четыре необходимых действия, и ни одна верная строка не указана в качестве ошибочной Не выполнены условия, позволяющие поставить 3 балла. Имеет место одна из следующих ситуаций: а) выполнены три из четырёх необходимых действий. Ни одна верная строка не указана в качестве ошибочной; б) выполнены все четыре необходимых действия. Указано в качестве ошибочной не более одной верной строки Не выполнены условия, позволяющие поставить 2 или 3 балла. Выполнены два необходимых действия из четырёх Не выполнены условия, позволяющие поставить 1, 2 или 3 балла 0 Максимальный балл

5 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. Последовательно выполните следующее. 1. Напишите, что выведет эта программа при вводе числа Приведите пример такого трёхзначного числа, при вводе которого программа выдаёт верный ответ. 3. Найдите все ошибки в этой программе (их может быть одна или несколько). Известно, что каждая ошибка затрагивает только одну строку и может быть исправлена без изменения других строк. Для каждой ошибки: 1) выпишите строку, в которой сделана ошибка; 2) укажите, как исправить ошибку, т.е. приведите правильный вариант строки. Достаточно указать ошибки и способ их исправления для одного языка программирования. Обратите внимание, что требуется найти ошибки в имеющейся программе, а не написать свою, возможно, использующую другой алгоритм решения. Исправление ошибки должно затрагивать только строку, в которой находится ошибка.

6 While N>0 do N digit If digit mod 5 = 0 count Да 16 4 Нет Да 1 6 Нет Да 0 1 Нет Нет

7 Решение использует запись программы на Паскале. Допускается использование программы на любом из четырёх других языков. 1. Программа выведет число Программа выдаёт правильный ответ, например, для числа 160. Замечание для проверяющего. Программа работает неправильно из-за неверного задания начального значения счётчика и неверного увеличения счётчика. Соответственно, программа будет работать верно, если в числе есть ровно один значащий 0 и нет других цифр, кратных В программе есть две ошибки. Первая ошибка. Неверное начальное значение счётчика. Строка с ошибкой: count := 1; Верное исправление: count := 0; Вторая ошибка. Неверное изменение счётчика. Строка с ошибкой: count := count + digit; Верное исправление: count := count + 1;

8 Даны целые положительные числа M и N. Необходимо определить количество таких целых чисел K, для которых выполняется неравенство M K 2 N. Для решения этой задачи ученик написал программу, но, к сожалению, его программа неправильная. Ниже эта программа для Вашего удобства приведена на пяти языках программирования. var m, n, k, t: integer; begin read(m, n); k := 1; t := 1; while k*k < n do begin if k*k >= m then t := t+1; k := k + 1; end; writeln(t) end.

9 1. При вводе M = 10 и N = 40 программа выведет число Примеры чисел, при вводе которых программа выводит верный ответ: M и N Верный ответ Ответ программы 5, , Программа содержит две ошибки: 1) неверная инициализация; 2) неверное условие цикла. Пример исправления для языка Паскаль Первая ошибка: t := 1; Исправленная строка: t := 0; Вторая ошибка: while k*k < n do begin Исправленная строка: while k*k <= n do begin

10 Разбор заданий 25 Умения написать короткую (10 15) строк простую программу на языке программирования или записать алгоритм на естественном языке

11 Дан целочисленный массив из 20 элементов. Элементы массива могут принимать целые значения от до включительно. Опишите на естественном языке или на одном из языков программирования алгоритм, позволяющий найти и вывести количество пар элементов массива, в которых хотя бы одно число делится на 13. В данной задаче под парой подразумевается два подряд идущих элемента массива. Например, для массива из пяти элементов: 6; 2; 13; 26; 14 ответ: 3. Исходные данные объявлены так, как показано ниже на примерах для некоторых языков программирования и естественного языка. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать некоторые из описанных переменных.

12 const N = 20; var a: array [1..N] of integer; i, j, k: integer; begin for i := 1 to N do readln(a[i]);. end. В качестве ответа Вам необходимо привести фрагмент программы (или описание алгоритма на естественном языке), который должен находиться на месте многоточия. Вы можете записать решение также на другом языке программирования (укажите название и используемую версию языка программирования, например Free Pascal 2.6) или в виде блок-схемы. В этом случае Вы должны использовать те же самые исходные данные и переменные, какие были предложены в условии (например, в образце, записанном на естественном языке).

13 Указания по оцениванию Баллы Общие указания. 1. В алгоритме, записанном на языке программирования, допускается наличие отдельных синтаксических ошибок, не искажающих замысла автора программы. 2. Эффективность алгоритма не имеет значения и не оценивается. 3. Допускается запись алгоритма на языке программирования, отличном от языков, перечисленных в условии. В этом случае должны использоваться переменные, аналогичные описанным в условии. Если язык программирования использует типизированные переменные, описания переменных должны быть аналогичны описаниям переменных на естественном языке. Использование нетипизированных или необъявленных переменных возможно только в случае, если это допускается языком программирования; при этом количество переменных и их идентификаторы должны соответствовать условию задачи Предложен правильный алгоритм, выдающий в качестве результата верное значение 2 Не выполнены условия, позволяющие поставить 2 балла. Предложено в целом верное решение, содержащее не более одной ошибки из числа следующих: 1)в цикле происходит выход за границу массива (например, используется цикл от 1 до N); 2)не инициализируется или неверно инициализируется счётчик количества найденных пар; 3)счётчик количества пар в цикле не изменяется или изменяется неверно; 4)неверно проверяется делимость на 13; 5)на делимость проверяются не сами элементы, а их индексы; 6)при проверке выполнения условия для пары элементов используются неверные индексы; 7)в сложном логическом условии простые проверки верны, но условие в целом построено неверно (например, перепутаны операции «И» и «ИЛИ», неверно расставлены скобки в логическом выражении); 8)отсутствует вывод ответа; 9)используется переменная, не объявленная в разделе описания переменных; 10)не указано или неверно указано условие завершения цикла; 11)индексная переменная в цикле не меняется (например, в цикле while) или меняется неверно; 12)неверно расставлены операторные скобки 1 Ошибок, перечисленных в п. 1 12, две или больше, или алгоритм сформулирован неверно (в том числе при отсутствии цикла в явном или неявном виде) 0 Максимальный балл 2

14 k := 0; for i := 1 to N-1 do if (a[i] mod 13=0) or (a[i+1] mod 13=0) then inc(k); writeln(k);

15 Дан массив, содержащий 2016 неотрицательных целых чисел. Необходимо найти в этом массиве количество таких элементов, которые равны среднему арифметическому двух элементов, расположенных сразу после него. Например, в массиве из 6 элементов, равных соответственно 2, 3, 1, 5, 6, 4, есть три таких элемента, они расположены на первом, втором и четвёртом месте и равны 2, 3 и 5. Напишите на одном из языков программирования программу для решения этой задачи. Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать часть из описанных переменных.

16 const N=2016; var a: array [1..N] of integer; i, k: integer; begin for i:=1 to N do readln(a[i]); end. В качестве ответа Вам необходимо привести фрагмент программы, который должен находиться на месте многоточия. Вы можете записать решение также на другом языке программирования (укажите название и используемую версию языка программирования, например Free Pascal 2.4). В этом случае Вы должны использовать те же самые исходные данные и переменные, какие были предложены в условии.

17 1 способ k:=0; for i:=1 to N-2 do begin if 2*a[i] = a[i+1] + a[i+2] then k := k+1; end; writeln(k)

18 1 способ k:=0; for i:=1 to N-2 do begin if ((a[i+1] + a[i+2]) mod 2 = 0) and ((a[i+1] + a[i+2]) div 2 = a[i]) then k := k+1; end; writeln(k)

📎📎📎📎📎📎📎📎📎📎