Модуль 1. Нормативные основы работы эксперта предметной комиссии
ИНФОРМАТИКА и ИКТ
Оглавление
Входной контроль. 4
Модуль 1. Нормативные основы работы эксперта предметной комиссии. 5
Модуль 2. Методические рекомендации по оцениванию выполнения заданий с развернутым ответом. 20
Оценивание задания 24. 20
Оценивание задания 25. 21
Оценивание задания 26. 22
Оценивание задания 27. 27
Модуль 3. Решение типичных проблемных ситуаций оценивания. 59
Общие рекомендации. 59
Рекомендации по отдельным заданиям. 59
Разбор некоторых сложных для оценивания ситуаций. 62
Задание 24. 62
Задание 25. 62
Задание 26. 64
Задание 27. 64
Модуль 4. Тренинги. 67
Итоговый контроль. 151
Входной контроль
1. В каком порядке участник экзамена может выполнять задания 2-й части экзаменационной работы?
2. В каком случае считается, что участник экзамена не приступал к выполнению того или иного задания с развернутым ответом?
3. Что должно быть проставлено экспертом в протоколе оценивания работ для задания, к выполнению которого участник экзамена не приступал?
4. В каком случае назначается третья проверка экзаменационной работы участника экзамена?
5. Какие действия должен предпринять эксперт в случае, если у него возникли сомнения в самостоятельности выполнения участником экзаменационной работы (например, работа написана разными почерками, имеются большие дословные совпадения с примерами из критериев оценивания и т.д.)?
6. Сколько заданий с развернутым ответом содержится в обобщенном плане экзаменационной работы, представленном в спецификации работы?
7. Сколько заданий с развернутым ответом относится к высокому уровню сложности?
8. Какое максимальное количество первичных баллов участник экзамена может набрать за выполнение 2-й части экзаменационной работы (задания с развернутым ответом)?
9. Может ли участник экзамена в верном ответе на задания 25 и 27 использовать какие-либо языки программирования, кроме тех, примеры на которых приводятся в экзаменационной работе?
10. Может ли участник экзамена в верном ответе в задании 25 не использовать языки программирования, ограничившись развернутым ответом на русском языке?
Пошаговая инструкция для эксперта.
1. Сравнить ответ на первый пункт задания с эталонным ответом из критериев оценивания.
2. Проверить, что ответ на второй пункт задания удовлетворяет математическим условиям, сформулированным в критериях оценивания.
3. Сравнить исправления, внесенные в программу участником экзамена с приведенными в критериях оценивания эталонными исправлениями.
4. Убедиться, что в работе в качестве неверных не указаны верные строки программ
5. Выставить оценку в соответствии с критериями оценивания
Примеры оценивания с комментариями
Вариант 1[1]. Задание 24. Пример 1.
Оценка: 3
Комментарий: Верно выполнены все 4 необходимых действия (указаны 2 числа и 2 ошибки), за синтаксические ошибки, не искажающие смысл ответа, в данном случае отсутствие «;» в конце команды, оценка не снижается.
Задание 24. Пример 2.
Оценка: 2
Комментарий: Верно выполнены три действия из четырех, второе действие выполнено неверно.
Практическое задание
В приведенной ниже последовательности отметьте те числа, которые являются верным ответом ко второму пункту задания 24 варианта 530.
220, 100, 803, 509, 30, 777, 104, 0, 235, 1260, 013.
Оценивание задания 25
Примеры оценивания с комментариями
Задание 25. Пример 1.
Оценка: 1
Комментарий: Начальное значение переменной цикла не задано, что подпадает под пункт «Не выполнены условия, позволяющие поставить 2 балла. Предложено в целом верное решение, содержащее не более одной ошибки из числа следующих: … индексная переменная в цикле не меняется … или меняется неверно»
Задание 25. Пример 2.
Оценка: 0
Комментарий: Отсутствует инициализация счетчика и вывод результата.
Практическое задание
В приведенной ниже последовательности операторов ветвления отметьте те, в которых корректно проверятся делимость пары соседних чисел на 13 в контексте задания 25 варианта 530.
1) if (a[i] mod 13=0) or (a[i+1] mod 13=0) then inc(k);
2) if a[i] * a[i+1] mod 13 = 0 then k:=k+1;
3) IF ((A(I) + (A(I+1) MOD 13 = 0) THEN K = K+1
4) if ( !(a[i]%13) || !(a[i+1]%13)) k++;
5) if a[i] mod 13=0 then inc(k);
if a[i+1] mod 13=0 then inc(k);
6) if (a[i] mod 13=0) and (a[i+1] mod 13=0) then dec(k);
Оценивание задания 26
Примеры оценивания с комментариями
Задание 26. Пример 1.
Оценка: 3
Комментарий: Для всех пунктов задания приведены верные выигрышные стратегии, представленные в графической форме выигрышными ходами выигрывающего игрока для всех ходов проигрывающего. Ответ можно было бы записать более кратко, но это не снижает оценки.
Задание 26. Пример 2.
Оценка: 2
Комментарий: Для 1-го и 2-го пунктов задания приведены верные выигрышные стратегии, представленные в графической форме выигрышными ходами выигрывающего игрока для всех ходов проигрывающего. З-й пункт выполнен неверно.
Практическое задание
В приведенной ниже последовательности позиций описанной в задании 26 варианта 530 игры, укажите те, в которых выигрышную стратегию имеет игрок, ходящий первым.
1) (15,30)
2) (34,10)
3) (36,4)
4) (12,32)
Придумайте по одной выигрышной позиции для первого и для второго игрока с гарантированным выигрышем его вторым и первым ходом соответственно, кроме тех, которые были уже рассмотрены в данном задании и в условии задания 26 варианта 530.
Оценивание задания 27
Примеры оценивания с комментариями
Задание 27. Пример 1.
Оценка: 1
Комментарий: Выполнение задания А оценивается в 1 балл, т.к. в программе допущены ошибки, не входящие в перечень допустимых на 2 балла, а именно отсутствие чтения количества элементов и неверное указание числа итераций во внешнем цикле обработки массива. Выполнение задания Б оценивается в 0 баллов, поскольку из представленного участником экзамена ответа нельзя сделать вывод, что он верно представляет путь решения задачи, поскольку количество и характер логических и синтаксических ошибок в записи алгоритма не позволяют его однозначно интерпретировать как прототип верного решения. Итоговая оценка max( 1; 0 ) = 1.
Задание 27. Пример 2.
Оценка: 0
Комментарий: Задание Б не выполнялось. Выполнение задания А оценивается в 0 баллов, т.к. автор программы пытается (и тоже неудачно) решить другую задачу, а именно поиск четного минимума среди произведений элементов массива, находящихся на одинаковом расстоянии.
Практическое задание
Ниже приведены два заведомо неверных решения задания 27. Приведите контрпримеры, показывающие неверность этих решений.
1)
const s = 7; {требуемое расстояние между показаниями}
amax = 1001; {больше максимально возможного показания}
var
N: integer;
a: array[1..s] of integer; {хранение s показаний прибора}
a_: integer; {ввод очередного показания}
ma: integer; {минимальное число без s последних}
mp: integer; {минимальное значение произведения}
p: integer;
i, j: integer;
begin
readln(N);
{Ввод первых s чисел}
for i:=1 to s do readln(a[i]);
{Ввод остальных значений, поиск минимального произведения}
ma := amax;
mp :=amax*amax;
for i := s + 1 to N do begin
readln(a_);
if a[1] < ma then ma := a[1];
if a_ mod 2 = 0 then p := a_ * ma
else p := amax* amax;
if (p < mp) then mp := p;
{сдвигаем элементы вспомогательного массива влево}
for j := 1 to s - 1 do
a[j] := a[j + 1];
a[s] := a_
end;
if mp = amax*amax then mp:=-1;
writeln(mp)
end.
2)
const s = 7; {требуемое расстояние между показаниями}
amax = 1001; {больше максимально возможного показания}
var
N: integer;
a: array[1..s] of integer; {хранение s показаний прибора}
a_: integer; {ввод очередного показания}
ma: integer; {минимальное число без s последних}
me: integer; {минимальное чётное число без s последних}
mp: integer; {минимальное значение произведения}
p: integer;
i, j: integer;
begin
readln(N);
{Ввод первых s чисел}
for i:=1 to s do readln(a[i]);
{Ввод остальных значений, поиск минимального произведения}
ma := amax; me := amax;
mp :=amax*amax;
for i := s + 1 to N do begin
readln(a_);
if a[1] < ma then ma := a[1];
if (a[1] mod 2 = 0) and (a[1] < me) then me := a[1];
if a_ mod 2 = 0 then p := a_ * ma
else p := a_ * me;
if (p < mp) then mp := p;
{сдвигаем элементы вспомогательного массива влево}
for j := 1 to s - 1 do
a[j] := a[j + 1];
a[s] := a_
end;
if mp = amax*amax then mp:=-1;
writeln(mp)
end.
Контрольные вопросы
1. Как поступить в ситуации, если экзаменуемый не указал какое задание, А или Б он выполняет?
2. Как поступить в ситуации, если экзаменуемый допустил логическую ошибку, не перечисленную в критериях оценивания в списке допустимых на 3 или 2 балла?
3. Как поступить, если экзаменуемый дал ответ на редко используемом языке программирования?
Практическое задание
Ниже приведены два заведомо неверных решения задания 27 варианта 1. Приведите контрпримеры, показывающие неверность этих решений.
1)
const s = 7; {требуемое расстояние между показаниями}
amax = 1001; {больше максимально возможного показания}
var
N: integer;
a: array[1..s] of integer; {хранение s показаний прибора}
a_: integer; {ввод очередного показания}
ma: integer; {минимальное число без s последних}
mp: integer; {минимальное значение произведения}
p: integer;
i, j: integer;
begin
readln(N);
{Ввод первых s чисел}
for i:=1 to s do readln(a[i]);
{Ввод остальных значений, поиск минимального произведения}
ma := amax;
mp :=amax*amax;
for i := s + 1 to N do begin
readln(a_);
if a[1] < ma then ma := a[1];
if a_ mod 2 = 0 then p := a_ * ma
else p := amax* amax;
if (p < mp) then mp := p;
{сдвигаем элементы вспомогательного массива влево}
for j := 1 to s - 1 do
a[j] := a[j + 1];
a[s] := a_
end;
if mp = amax*amax then mp:=-1;
writeln(mp)
end.
2)
const s = 7; {требуемое расстояние между показаниями}
amax = 1001; {больше максимально возможного показания}
var
N: integer;
a: array[1..s] of integer; {хранение s показаний прибора}
a_: integer; {ввод очередного показания}
ma: integer; {минимальное число без s последних}
me: integer; {минимальное чётное число без s последних}
mp: integer; {минимальное значение произведения}
p: integer;
i, j: integer;
begin
readln(N);
{Ввод первых s чисел}
for i:=1 to s do readln(a[i]);
{Ввод остальных значений, поиск минимального произведения}
ma := amax; me := amax;
mp :=amax*amax;
for i := s + 1 to N do begin
readln(a_);
if a[1] < ma then ma := a[1];
if (a[1] mod 2 = 0) and (a[1] < me) then me := a[1];
if a_ mod 2 = 0 then p := a_ * ma
else p := a_ * me;
if (p < mp) then mp := p;
{сдвигаем элементы вспомогательного массива влево}
for j := 1 to s - 1 do
a[j] := a[j + 1];
a[s] := a_
end;
if mp = amax*amax then mp:=-1;
writeln(mp)
end.
Задание 24
При проверке задания 24 следует последовательно проверить, насколько выполнены следующие четыре действия:
1) указано, что выведет программа при конкретной входной последовательности;
2) указан пример последовательности, при которой программа работает правильно;
3) исправлена первая ошибка;
4) исправлена вторая ошибка.
ВНИМАНИЕ! Экзаменуемому достаточно указать один пример таких входных данных. Указывать полное описание всех таких данных не требуется. Описания, приведенные в критериях по оцениванию (см. «Замечания для проверяющего»), предназначены только для проверяющего. Если при выполнении второго задания экзаменуемый указал несколько вариантов входных данных, то задание считается выполненным, если для ВСЕХ указанных входных данных программа дает нужный результат.
При проверке каждого из заданий на исправление ошибок (третье и четвертое действия) следует убедиться, что:
а) каждое внесенное исправление затрагивает только одну строку в программе;
б) указан такой новый вариант строки, что при исправлении другой ошибки получается правильная программа.
Каждое из этих действий оценивается отдельно. Обратите внимание: исправления, указанные экзаменуемым, могут отличаться от приведенных в критериях, но тем не менее быть верными.
Задание 25
1. Определите, на каком языке записан алгоритм в проверяемой работе, и при необходимости наведите справки о синтаксисе избранного экзаменуемым языка программирования.
2. Сравните описание алгоритма с имеющимися образцами и в случае совпадения оцените его в соответствии с рекомендациями.
3. Если описание алгоритма не совпадает с образцами, а ошибки в описании алгоритма с первого взгляда не видны, осуществите формальное исполнение алгоритма с тестовыми примерами исходных данных. Длину тестового массива следует сократить до четырех–шести элементов. При составлении тестов необходимо особенно тщательно проверять «критические» случаи, например когда элементы массива одинаковы или изначально упорядочены. Оцените правильность полученных результатов.
4. В случае алгоритма, представленного на русском языке или в виде блок-схемы, необходимо оценить возможность выполнения этого алгоритма человеком и уровень детализации алгоритма (должны выполняться требования дискретности, детерминированности и результативности).
5. Обратите внимание на правильность инициализации переменных. Учтите, что приведенное в решении значение может не быть единственно возможным.
6. Обязательно проверьте, присутствует ли вывод ответа.
7. Отдельно проверьте, обрабатывается ли случай, что искомого числа в данном массиве может и не быть (если иное не сказано в условии задачи).
8. При оценке алгоритма отметьте все ошибки, упомянутые в критериях оценивания. В случае, если таких ошибок две или более, сразу снижайте оценку до 0 баллов.
9. Не допускайте произвольного ужесточения критериев оценивания. Не вводите дополнительных ограничений. Не оценивайте синтаксические ошибки, «стиль» программирования, аккуратность записи, наличие комментариев и прочие важные, но не проверяемые данной задачей вещи.
10. Не забывайте, что эффективность алгоритмов в данной задаче не оценивается, поэтому не следует снижать оценку за решение,
в котором, например, для поиска максимума используется сортировка.
Задание 26
1. При описании стратегии выигрывающего игрока должно быть указано, каким будет ход этого игрока при любой игре противника. Это может быть сделано по-разному: в виде словесного описания (как это сделано в решении из критериев оценивания для заданий 1 и 2), в виде таблицы ходов или дерева всех возможных партий (см. решение для задания 3). Наличие слов «указываем ход при любом ответе противника» или тому подобных не обязательно. Важно, чтобы из решения точно следовало, как именно должен ходить выигрывающий игрок в любой возможной ситуации.
2. Обозначения на рисунке могут отличаться от использованых
в примере решения, например, не обязательно использовать пунктирные линии.
Задание 27
I. Особенности задания 27.
1. В задаче есть два задания (А и Б). Соответственно, ученик может представить две программы. В каждой из программ должно быть указано, решением какого из заданий она является.
Если в работе представлена одна программа, то в ней также должно быть указано, решением какого из заданий она является.
Если ученик не указал, к какому заданию относится программа, или можно предположить, что ученик ошибся в идентификации программ, следуйте приведенным ниже инструкциям.
2. Ученик представил только одну программу. Программа рассматривается как решение задания Б и оценивается по соответствующим критериям.
3. Ученик представил две программы, но указание задания есть только для одной из программ. Вторая программа рассматривается, как ответ на оставшееся задание.
4. НАПОМИНАЕМ: Итоговый балл за задачу - это больший из баллов, полученных учеником за каждое из заданий А и Б
II. Проверка отдельной программы.
Рекомендуем выполнять проверку программы в следующей последовательности.
1. Определите язык программирования, на котором написана программа. Программы, написанные на языках программирования, отличных от Паскаля, Алгоритмического языка, Бейсика и Си, тоже должны быть оценены. При необходимости эксперт может воспользоваться справочной литературой, а также обратиться к консультанту или председателю предметной комиссии Подсчитайте количество таких синтаксических ошибок в программе, которые не мешают понять ее логику. Систематически встречающаяся ошибка считается за одну. Так, например, если вместо круглых скобок ученик в записи условий использовал везде квадратные, то это считается за одну ошибку.
2. Рассмотрите реализацию алгоритма и определите, верна ли она в целом. Если верна, определите, есть ли в ней легко диагностируемые и исправляемые алгоритмические ошибки (см. критерии для выставления 3 баллов прри выполнении задания Б). Определите количество таких алгоритмических ошибок (если они есть).
3. Если ошибок мало, то оцените эффективность предложенного решения по времени выполнения и использованию памяти.
4. Далее руководствуйтесь указаниями по оцениванию.
Задание 24
№ | Типичная проблемная ситуация | Решение |
Участником экзамена указаны в качестве ошибочных верные строки, содержащие, по его мнению, синтаксические ошибки или неверный тип переменных. | Констатируется, что верная строка указана учащимся как ошибочная, и этот факт учитывается при оценивании по критериям. | |
При выполнении первого и/или второго элемента задания экзаменуемый привел несколько числовых ответов, часть из которых верна, а часть нет. | Соответствующий пункт задания признается выполненным неверно. | |
В исправленной строке допущены синтаксические ошибки, не искажающие замысел автора. | Соответствующий пункт задания признается выполненным верно. | |
Строка с ошибкой не выписана, как требуется в задании, а указана иным образом, например, номером. | Если способ, которым учащийся указал строку, позволяет её однозначно идентифицировать, приравниваем эту ситуацию к выписыванию строки. | |
Учащийся заново переписал текст программы или её фрагменты из нескольких строк, внеся исправления. | Если исправления касались только строк с ошибками, засчитываем этот элемент как выполненный. В противном случае, считаем, что элемент не выполнен. |
Задание 25
Основная сложность при оценивании задания 25 состоит в том, что в условии не установлено четко, каким образом алгоритм обработки массива может быть записан. Разрешение использовать естественный язык автоматически приводит к употреблению неточных и расплывчатых формулировок, оборотов «аналогично ищем максимальный элемент», «производим подсчет этих чисел, выводим результат» и т.д. При оценке алгоритмов, записанных на естественном языке, основным критерием должна быть возможность их формального исполнения, т.е. описание должно быть максимально приближено к записи команд, соответствующих основным операторам языков программирования: должно быть указано, в какой последовательности выполняются инструкции, каково условие завершения цикла и т.д. При этом, например, фраза «Для каждого элемента массива мы выполняем сравнение его с переменной…» может рассматриваться как вполне приемлемое описание цикла с параметром.
При рассмотрении записей алгоритмов на естественном языке следует очень внимательно проследить, как экзаменуемый описывает операцию присваивания. Наряду с формулой «Присваиваем переменной m значение очередного элемента массива» может употребляться и конструкция «Присваиваем значение очередного элемента массива переменной m» (часто употребляется конструкция «записываем в …»). Не стоит снижать оценку за некоторую нечеткость терминологии, если из описания алгоритма видно, что экзаменуемый ясно представляет себе его выполнение. Если же алгоритм не может быть формально исполнен без каких-либо особых разъяснений (формально можно описать это как вызов процедуры или вспомогательного алгоритма), то такой алгоритм должен быть оценен 0 баллов. Пример такого описания: «Сначала находим максимальное значение элементов массива, а затем…». Иногда экзаменуемые пытаются отделаться только общими указаниями, что может быть оценено только в 0 баллов. Например, фраза «Находим максимальные элементы массива и подсчитываем их число» должна быть оценена в 0 баллов как недостаточная для формального исполнения.
№ | Типичная проблемная ситуация | Решение |
Отсутствует в явном виде инициализация счетчика или сумматора найденных элементов (пар, троек и т.д.) массива. При этом могут быть комментарии, указывающие на возможность автоматической инициализации счетчика нулевым значением. | В соответствии с критериями оценивания отсутствие инициализации в тексте программы считается ошибкой. | |
Вместо того, чтобы написать фрагмент программы соответствующий многоточию в условию, учащийся пишет программу целиком. | В случае верной программы оценка не снижается. При наличии алгоритмических ошибок (в том числе допущенных при переписывании части программы из условия) оценка снижается в соответствии с критериями оценивания. | |
Формат вывода результата несколько отличается от предписанного в задании, например, добавляется слово «ответ:» или при нулевом количестве искомых элементов печатается «нет» вместо 0. | Оценка не снижается |
Задание 26
При описании выигрышной стратегии для определенной позиции указан один из возможных выигрывающих ходов, но не указаны другие возможные выигрывающие ходы. Это не является ошибкой.
№ | Типичная проблемная ситуация | Решение |
При описании стратегии учащийся пропускает простые арифметические выкладки, например, вместо «Ваня удвоит количество камней во второй куче, при этом он получит в обеих кучах 10+25×2=60 > 55 камней и выиграет» пишет «Ваня удвоит количество камней во второй куче и выиграет». | Оценка не снижается. | |
Учащийся описывает верную стратегию, но обосновывает её утверждениями, содержащими логические ошибки, например, «При любом ходе Пети, Ване следует удвоить количество камней во второй куче, потому что, игрок, который удваивает, всегда выигрывает». | Ответ не засчитывается как верный. |
Задание 27
1. В решении может присутствовать опечатка, в результате которой оно становится синтаксически неверным ( (i+j) = 0 вместо (i+j) == 0, m = a(i) вместо m := a[i] и т.п.). Если из анализа решения видно, что это именно опечатка (например, из комментариев или если
в большинстве аналогичных случаев автор программы не ошибся), то ее НЕ следует рассматривать как синтаксическую ошибку.
2. Программа может быть написана на языке программирования, отличном от тех, которые используются а приводимых в КИМах примерах программ, например на языках С++, С#, Java, Perl, PHP и т.д. При этом допускается использование библиотек, описанных в стандартах соответствующего языка. Например, при использовании языка C++ допускается использование средств стандартных библиотек (библиотеки STL). Могут использоваться, например, версии языков Паскаль и Бейсик, отличные от использованных в примерах решений. Во всех таких случаях экзаменуемый обязан явно указать, какой именно версией какого языка он пользуется. Если например, в решении не указана версия языка, а использованное экзаменуемым средство доступно не во всех версиях языка, считается, что экзаменуемый допуcтил ошибку.
Подключение стандартных библиотек должно быть правильно описано в программе (если это требуется правилами языка). Вызовы библиотечных подпрограмм также должны быть корректно оформлены, т.е. не должно быть ошибок в названии подпрограммы, количестве, порядке и типе аргументов.
Чтобы разобраться в подобных ситуациях эксперт может воспользоваться справочной литературой, а также обратиться к консультанту или председателю предметной комиссии.
3. В тексте задания есть фраза «Перед текстом программы кратко опишите используемый вами алгоритм решения задачи». Отсутствие такого описания (при наличии правильной программы) не является основанием для снижения оценки, задание НЕ контролирует умение экзаменующегося составлять описания. Назначение описания – облегчить работу проверяющего эксперта. Согласно указаниям по оцениванию эксперт должен решать, являются ли ошибки, допущенные экзаменуемым, случайными описками или они показывают некомпетентность экзаменуемого. Описание может помочь проверяющему понять текст программы, зная, что именно собирается в ней делать экзаменуемый. Хорошее описание может быть основанием для выставления 1 балла в случае плохой реализации. В критериях оценивания на 1 балл указано: «Программа, возможно, неверно работает при некоторых входных данных, но по приведенному тексту решения ясно, что экзаменуемый понимает, из каких этапов должно состоять решение задачи». Здесь «текст решения» включает в себя и описание, о котором идет речь.
№ | Типичная проблемная ситуация | Решение |
Учащийся допускает в программе алгоритмическую ошибку, которая не входит в приведенный в критериях оценивания перечень допустимых ошибок на два или три балла. | В соответствии с критериями оценивания программа оценивается не более, чем в 1 балл, независимо от её возможных остальных достоинств. |
Модуль 4. Тренинги
Вариант 2. Критерии оценивания заданий с развёрнутым ответом
24 |
На обработку поступает натуральное число, не превышающее 109. Нужно написать программу, которая выводит на экран сумму нечётных цифр числа. Если в числе нет нечётных цифр, требуется на экран вывести «NO». Программист написал программу неправильно. Ниже эта программа для Вашего удобства приведена на пяти языках программирования.
Бейсик | Python |
DIM N, DIGIT, SUM AS LONG INPUT N SUM = N MOD 10 WHILE N > 0 DIGIT = N MOD 10 IF DIGIT MOD 2 <> 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 % 2 != 0: sum = digit N = N // 10 if sum > 0: print(sum) else: print("NO") |
Алгоритмический язык | Паскаль |
алг нач цел N, digit, sum ввод N sum := mod(N,10) нцпока N > 0 digit := mod(N,10) если mod(digit, 2) <> 0 то sum := digit все N := div(N,10) кц если sum > 0 то вывод sum иначе вывод "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 2 <> 0 then sum := digit; N := N div 10; end; if sum > 0 then writeln(sum) else writeln('NO') end. |
Си |
#include <stdio.h> int main() { int N, digit, sum; scanf("%d", &N); sum = N % 10; while (N > 0) { digit = N % 10; if (digit % 2 != 0) sum = digit; N = N / 10; } if (sum > 0) printf("%d",sum); else printf("NO"); return 0; } |
Последовательно выполните следующее.
1. Напишите, что выведет эта программа при вводе числа 246.
2. Приведите пример такого трёхзначного числа, при вводе которого программа выдаёт верный ответ.
3. Найдите все ошибки в этой программе (их может быть одна или несколько). Известно, что каждая ошибка затрагивает только одну строку
и может быть исправлена без изменения других строк. Для каждой ошибки:
1) выпишите строку, в которой сделана ошибка;
2) укажите, как исправить ошибку, т.е. приведите правильный вариант строки.
Достаточно указать ошибки и способ их исправления для одного языка программирования.
Обратите внимание, что требуется найти ошибки в имеющейся программе,
а не написать свою, возможно, использующую другой алгоритм решения. Исправление ошибки должно затрагивать только строку, в которой находится ошибка.
Содержание верного ответа и указания по оцениванию (допускаются иные формулировки ответа, не искажающие его смысла) |
Решение использует запись программы на Паскале. Допускается использование программы на любом из четырёх других языков. 1. Программа выведет число 6. 2. Программа выдаёт правильный ответ, например, для числа 254. Замечание для проверяющего. Программа работает неправильно из-за неверной начальной инициализации суммы и неверного увеличения суммы. Соответственно, программа будет работать верно, если в числе ровно одна нечётная цифра или таких цифр вообще нет и при этом число заканчивается на 0. 3. В программе есть две ошибки. Первая ошибка. Неверная инициализация суммы (переменная sum). Строка с ошибкой: sum := N mod 10; Верное исправление: sum := 0; Вторая ошибка. Неверное увеличение суммы. Строка с ошибкой: sum := digit; Верное исправление: sum := sum + digit; |
Указания по оцениванию | Баллы |
Обратите внимание! В задаче требовалось выполнить четыре действия: 1) указать, что выведет программа при конкретном входном числе; 2) указать пример входного числа, при котором программа выдаёт верный ответ; 3) исправить первую ошибку; 4) исправить вторую ошибку. Для проверки правильности выполнения п. 2) нужно формально выполнить исходную (ошибочную) программу с входными данными, которые указал экзаменуемый, и убедиться в том, что результат, выданный программой, будет таким же, как и для правильной программы. Для действий 3) и 4) ошибка считается исправленной, если выполнены оба следующих условия: а) правильно указана строка с ошибкой; б) указан такой новый вариант строки, что при исправлении другой ошибки получается правильная программа | |
Выполнены все четыре необходимых действия, и ни одна верная строка не указана в качестве ошибочной | |
Не выполнены условия, позволяющие поставить 3 балла. Имеет место одна из следующих ситуаций: а) выполнены три из четырёх необходимых действий. Ни одна верная строка не указана в качестве ошибочной; б) выполнены все четыре необходимых действия. Указано в качестве ошибочной не более одной верной строки | |
Не выполнены условия, позволяющие поставить 2 или 3 балла. Выполнены два необходимых действия из четырёх | |
Не выполнены условия, позволяющие поставить 1, 2 или 3 балла | |
Максимальный балл | 3 |
25 |
Дан целочисленный массив из 20 элементов. Элементы массива могут принимать целые значения от –10 000 до 10 000 включительно. Опишите
на естественном языке или на одном из языков программирования алгоритм, позволяющий найти и вывести количество пар элементов массива, в которых хотя бы одно число делится на 3. В данной задаче под парой подразумевается два подряд идущих элемента массива.
Например, для массива из пяти элементов: 6; 2; 9; –3; 6 – ответ: 4.
Исходные данные объявлены так, как показано ниже на примерах для некоторых языков программирования и естественного языка. Запрещается использовать переменные, не описанные ниже, но разрешается
не использовать некоторые из описанных переменных.
Бейсик | Python |
CONST N AS INTEGER = 20 DIM A (1 TO N) AS INTEGER DIM I AS INTEGER, J AS INTEGER, K AS INTEGER FOR I = 1 TO N INPUT A(I) NEXT I ... END | # допускается также # использовать две # целочисленные переменные j и k a = [] n = 20 for i in range(0, n): a.append(int(input())) ... |
Алгоритмический язык | Паскаль |
алг нач цел N = 20 целтаб a[1:N] цел i, j, k нцдля i от 1 до N ввод a[i] кц ... кон | 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. |
Си | Естественный язык |
#include <stdio.h> #define N 20 int main() { int a[N]; int i, j, k; for (i = 0; i<N; i++) scanf("%d", &a[i]); ... return 0; } | Объявляем массив A из 20 элементов. Объявляем целочисленные переменные I, J, K. В цикле от 1 до 20 вводим элементы массива A с 1-го по 20-й. … |
В качестве ответа Вам необходимо привести фрагмент программы (или описание алгоритма на естественном языке), который должен находиться
на месте многоточия. Вы можете записать решение также на другом языке программирования (укажите название и используемую версию языка программирования, например Free Pascal 2.6) или в виде блок-схемы. В этом случае Вы должны использовать те же самые исходные данные
и переменные, какие были предложены в условии (например, в образце, записанном на естественном языке).
Содержание верного ответа и указания по оцениванию (допускаются иные формулировки решений, приводящие к правильному результату) | |
На языке Паскаль | |
k := 0; for i := 1 to N-1 do if (a[i] mod 3=0) or (a[i+1] mod 3=0) then inc(k); writeln(k); | |
На алгоритмическом языке | |
k := 0; нцдля i от 1 до N-1 если mod(a[i],3)=0 или mod(a[i+1],3)=0 то k := k+1 все кц вывод k | |
На языке Бейсик | |
K = 0 FOR I = 1 TO N-1 IF (A(I) MOD 3 = 0) OR (A(I + 1) MOD 3 = 0) THEN K = K+1 END IF NEXT I PRINT K | |
На языке Си | |
k = 0; for (i = 0; i<N-1; i++) if (a[i]%3 == 0 || a[i+1]%3 == 0) k++; printf("%d", k); | |
На языке Python | |
k = 0 for i in range(0, n – 1): if (a[i] % 3 == 0 or a[i + 1] % 3 == 0): k += 1 print(k) | |
На естественном языке | |
Записываем в переменную K начальное значение, равное 0. В цикле от первого элемента до предпоследнего находим остаток от деления текущего и следующего элемента массива на 3. Если первый или второй из полученных остатков равен 0, увеличиваем переменную K на единицу. После завершения цикла выводим значение переменной K | |
Указания по оцениванию | Баллы |
Общие указания. 1. В алгоритме, записанном на языке программирования, допускается наличие отдельных синтаксических ошибок, не искажающих замысла автора программы. 2. Эффективность алгоритма не имеет значения и не оценивается. 3. Допускается запись алгоритма на языке программирования, отличном от языков, перечисленных в условии. В этом случае должны использоваться переменные, аналогичные описанным в условии. Если язык программирования использует типизированные переменные, описания переменных должны быть аналогичны описаниям переменных на естественном языке. Использование нетипизированных или необъявленных переменных возможно только в случае, ес |