ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 26.10.2023
Просмотров: 47
Скачиваний: 1
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
Информатика. 11 класс. Вариант ИН10103 1
© СтатГрад 2018−2019 уч. г. Публикация в Интернете или печатных изданиях без письменного согласия СтатГрад запрещена
Критерии оценивания заданий с развёрнутым ответом
Факториалом натурального числа n (обозначается n!) называется произведение всех натуральных чисел от 1 до n. Например, 4! = 1·2·3·4 = 24.
Дано целое положительное число A. Необходимо найти ближайшее к A число, которое является точным факториалом какого-либо натурального числа. Если два точных факториала одинаково близки к A, нужно выбрать меньший из них.
Например, для A = 15 нужно получить ответ 6, а для A = 20 – ответ 24.
Для решения этой задачи ученик написал программу, но, к сожалению, его программа неправильная.
Ниже эта программа для Вашего удобства приведена на пяти языках программирования.
Бейсик
Python
DIM A, K, F AS INTEGER
INPUT A
K = 0
F = 1
WHILE F <= A
K = K + 1
F = F * K
WEND
IF F - A > A - F\K THEN
F = F\K
K = K - 1
END IF
PRINT K
END a = int(input()) k = 0 f = 1 while f <= a: k += 1 f *= k if f - a > a - f//k: f //= k k -= 1 print(k)
Алгоритмический язык
Паскаль
алг нач цел a, k, f ввод a k := 0 f := 1 нц пока f <= a k := k + 1 f := f * k кц если f-a > a - div(f,k) то f := div(f,k) k := k - 1 все вывод k кон var a, k, f: integer; begin read(a); k := 0; f := 1; while f <= a do begin k := k + 1; f := f * k end; if f-a > a - f div k then begin f := f div k; k := k - 1 end; writeln(k) end.
24
Информатика. 11 класс. Вариант ИН10103 2
© СтатГрад 2018−2019 уч. г. Публикация в Интернете или печатных изданиях без письменного согласия СтатГрад запрещена
C++
#include
++k; f *= k;
} if (f-a > a - f/k - a) { f /= k;
--k;
} cout << k; return 0;
}
Последовательно выполните следующее.
1.
Напишите, что выведет эта программа при вводе A = 7.
2.
Приведите пример числа A, при котором программа выведет верный ответ. Укажите этот ответ.
3.
Найдите в программе все ошибки (известно, что их не больше двух) и исправьте их. Для каждой ошибки выпишите строку, в которой она допущена, и приведите эту же строку в исправленном виде.
Достаточно указать ошибки и способ их исправления для одного языка программирования.
Обратите внимание: Вам нужно исправить приведённую программу, а не написать свою. Вы можете только заменять ошибочные строки, но не можете удалять строки или добавлять новые. Заменять следует только ошибочные строки: за исправления, внесённые в строки, не содержащие ошибок, баллы будут снижаться.
Содержание верного ответа
(допускаются иные формулировки ответа, не искажающие его смысла)
1.
При вводе A = 7 программа выведет число 3.
2.
Программа выводит верный ответ при вводе A = 1 (ответ 1), A = 2 (ответ 2) и A = 3 (ответ 2).
3.
Программа содержит две ошибки.
Первая ошибка. Ошибочная проверка. По условию при равном удалении A от двух точных факториалов нужно выбрать меньший из них. Для этого нужно строгое сравнение заменить на нестрогое.
Вторая ошибка. Ошибочный вывод. Вместо значения факториала F выводится «основание» факториала K.
Информатика. 11 класс. Вариант ИН10103 3
© СтатГрад 2018−2019 уч. г. Публикация в Интернете или печатных изданиях без письменного согласия СтатГрад запрещена
Пример исправления для языка Паскаль
Первая ошибка:
if f-a > a - f div k
Исправленная строка: if f-a >= a - f div k
Допускается использование функции abs (модуль числа). Это ничего не меняет по сути, так как обе части сравнения часть заведомо неотрицательны, но такое использование нельзя считать ошибкой: if abs(f-a) >= abs(a - f div k)
При использовании функции модуля на алгоритмическом языке следует использовать функцию iabs (модуль для целых чисел): если iabs(f-a) >= iabs(div(f,k)-a)
Использование в алгоритмическом языке функции abs вместо iabs отмечается как ошибка, но не влияет на оценку работы.
Вторая ошибка:
writeln(k)
Исправленная строка: writeln(f)
В программах на других языках ошибочные строки и их исправления аналогичны.
Незначительной опиской, не влияющей на оценку, следует считать отсутствие служебных слов и знаков после содержательной части исправления (например, слова THEN в Бейсике или точки с запятой в C++).
Указания по оцениванию
Баллы
В задаче требуется выполнить
четыре действия.
1. Указать ответ программы при данном вводе.
2. Указать пример входного числа, при котором программа выдаёт верный ответ, и ответ программы в этом случае.
3. Исправить первую ошибку в программе.
4. Исправить вторую ошибку в программе.
Действие 1 считается выполненным, если указан верный результат работы программы при заданном входном значении.
Действие 2 считается выполненным, если указаны входное значение и ответ, при выполнении программы с этим входным значением получается этот ответ и этот ответ совпадает с ответом, который выдаёт для данного входного значения правильная программа.
Для действий 1 и 2 экзаменуемый не обязан объяснять, как получен результат, достаточно указать верные числа.
Каждое из действий 3 и 4 считается выполненным при одновременном выполнении двух условий: а) правильно указана строка с ошибкой; б) указан такой новый вариант строки, что при исправлении другой ошибки получается правильная программа.
Информатика. 11 класс. Вариант ИН10103 4
© СтатГрад 2018−2019 уч. г. Публикация в Интернете или печатных изданиях без письменного согласия СтатГрад запрещена
В исправленной строке допускаются незначительные синтакси- ческие ошибки (лишние или пропущенные знаки препинания, неточные написания служебных слов языка).
Выполнены все четыре необходимых действия, ни одна верная строка не указана в качестве ошибочной.
3
Не выполнены условия, позволяющие поставить 3 балла. Имеет место одна из следующих ситуаций.
1.
Выполнены три из четырёх необходимых действий, ни одна верная строка не названа ошибочной.
2.
Выполнены все четыре необходимых действия, одна верная строка названа ошибочной.
2
Не выполнены условия, позволяющие поставить 2 или 3 балла.
Выполнены два из четырёх необходимых действий.
1
Не выполнены условия, позволяющие поставить 1, 2 или 3 балла.
0
Максимальный балл
3
Дан массив, содержащий 2018 положительных целых чисел, не превыша- ющих 15 000. Необходимо уменьшить на удвоенное значение минимального элемента массива те элементы, которые более чем вдвое превышают этот минимум, и вывести изменённый массив по одному элементу в строке.
Например, для исходного массива из 5 элементов 40 100 27 90 54 программа должна вывести числа 40 46 27 36 54 по одному числу в строке
(минимальный элемент исходного массива равен 27, элементы, бόльшие 54, уменьшены на 54).
Напишите на одном из языков программирования программу для решения этой задачи.
Исходные данные объявлены так, как показано ниже. Запрещается исполь- зовать переменные, не описанные ниже, но разрешается не использовать часть из описанных переменных.
Бейсик
Python
CONST N=2018
DIM A(N) AS INTEGER
DIM I, K, M AS INTEGER
FOR I = 1 TO N
INPUT A(I)
NEXT I
…
END
# кроме уже указанных
# допускается использование
# целочисленных переменных
# k, m a = []
N = 2018 for i in range(0, n): a.append(int(input()))
…
25
Информатика. 11 класс. Вариант ИН10103 5
© СтатГрад 2018−2019 уч. г. Публикация в Интернете или печатных изданиях без письменного согласия СтатГрад запрещена
Алгоритмический язык
Паскаль
алг нач цел N=2018 целтаб a[1:N] цел i, k, m нц для i от 1 до N ввод a[i] кц
…
Кон const
N=2018; var a: array [1..N] of integer; i, k, m: integer; begin for i:=1 to N do readln(a[i]);
… end.
C++
#include
… return 0;
}
В качестве ответа Вам необходимо привести фрагмент программы, который должен находиться на месте многоточия. Вы можете записать решение также на другом языке программирования (укажите название и используемую версию языка программирования, например Free Pascal 2.6). В этом случае
Вы должны использовать те же самые исходные данные и переменные, какие были предложены в условии.
Содержание верного ответа
(допускаются иные формулировки ответа, не искажающие его смысла)
Задача решается в два прохода: на первом проходе определяется минимальный элемент, на втором производится корректировка и вывод элементов.
Возможно решение в три прохода, когда на втором проходе выполняется только замена значений, а на третьем – вывод.
Информатика. 11 класс. Вариант ИН10103 6
© СтатГрад 2018−2019 уч. г. Публикация в Интернете или печатных изданиях без письменного согласия СтатГрад запрещена
Пример правильной программы на языке Паскаль m := 15001; for i:=1 to N do begin if a[i] < m then m := a[i] end; for i:=1 to N do begin if a[i] > 2*m then a[i] := a[i] – 2*m; writeln(a[i]) end;
При использовании языка Python первый проход можно записать в одну строку, используя функцию min.
Пример правильной программы на языке Python
m = min(a) for i in range(0,n): if a[i] > 2*m: a[i] -= 2*m print(a[i])
Использовать описанную выше возможность не обязательно, на языке
Python допустимо описывать развёрнутый алгоритм решения, аналогичный приведённой выше программе на языке Паскаль.
Указания по оцениванию
Баллы
В программе допускается наличие отдельных синтаксических ошибок, не искажающих замысла автора.
Эффективность не имеет значения и не оценивается.
Допускается запись программы на языке, не входящем в список языков из условия. В этом случае должны использоваться переменные, аналогичные описанным в условии. Если выбранный язык программирования использует типизированные переменные, описания переменных должны быть аналогичны описаниям переменных на языках, использованных в задании.
Использование нетипизированных или необъявленных переменных возможно только в случае, если это допускается языком программирования, при этом количество переменных и их идентификаторы должны соответствовать условию задачи.
Допускается изменение указанного в условии формата вывода, например вывод всех элементов массива в одну строку.
Предложена правильная программа, которая изменяет исходный массив в соответствии с условием и выводит изменённый массив.
2
Не выполнены условия, позволяющие поставить 2 балла.
Предложено в целом верное решение, содержащее не более одной ошибки из числа следующих (если одинаковая ошибка повторяется несколько раз, она считается за одну ошибку):
1) отсутствие инициализации или неверная инициализация минимума;
1
Информатика. 11 класс. Вариант ИН10103 7
© СтатГрад 2018−2019 уч. г. Публикация в Интернете или печатных изданиях без письменного согласия СтатГрад запрещена
2) неверное определение минимума (например, поиск максимума вместо минимума);
3) выход за границы массива;
4) исходный массив не изменяется;
5) изменяются не все элементы, которые должны измениться, или изменяются элементы, которые не должны измениться;
6) неверное изменение (например, уменьшение на минимум, а не на удвоенный минимум);
7) полученный массив не выводится или выводится не полностью
(например, выводится только первый элемент или только изменённые элементы);
8) используется переменная, не объявленная в разделе описания переменных;
9) индексная переменная в цикле не меняется (например, в цикле while
) или меняется неверно.
Не выполнены условия, позволяющие поставить 1 или 2 балла.
0
Максимальный балл
2
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежат две кучи камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может
добавить в одну из куч один камень или увеличить
количество камней в куче в два раза. Например, пусть в одной куче
6 камней, а в другой 9 камней; такую позицию мы будем обозначать (6, 9). За один ход из позиции (6, 9) можно получить любую из четырёх позиций:
(7,
9), (12, 9), (6, 10), (6, 18). Чтобы делать ходы, у каждого игрока есть неограниченное количество камней.
Игра завершается в тот момент, когда суммарное количество камней в кучах становится не менее 62. Победителем считается игрок, сделавший последний ход, то есть первым получивший позицию, в которой в кучах будет 62 или больше камней.
В начальный момент в первой куче было 10 камней, во второй куче –
S камней, 1 ≤ S ≤ 51.
Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника. Описать стратегию игрока – значит описать, какой ход он должен сделать в любой ситуации, которая ему может встретиться при различной игре противника. В описание выигрышной стратегии не следует включать ходы играющего по ней игрока, которые не являются для него безусловно выигрышными, то есть не гарантируют выигрыш независимо от игры противника.
Выполните следующие задания.
Задание 1.
а) Назовите все значения S, при которых Петя может выиграть первым ходом, причём у Пети есть ровно один выигрывающий ход.
26
Информатика. 11 класс. Вариант ИН10103 8
© СтатГрад 2018−2019 уч. г. Публикация в Интернете или печатных изданиях без письменного согласия СтатГрад запрещена б) Назовите минимальное значение S, при котором Ваня может выиграть первым ходом в случае неудачного первого хода Пети.
Задание 2.
Укажите такое значение S, при котором у Пети есть выигрышная стратегия, причём Петя не может выиграть первым ходом, но может выиграть своим вторым ходом независимо от того, как будет ходить Ваня. Для указанного значения S опишите выигрышную стратегию Пети.
Задание 3.
Укажите такое значение S, при котором у Вани есть выигрышная стратегия, позволяющая ему выиграть первым или вторым ходом при любой игре Пети, и при этом у Вани нет стратегии, которая позволит ему гарантированно выиграть первым ходом.
Для указанного значения S опишите выигрышную стратегию Вани.
Постройте дерево всех партий, возможных при этой выигрышной стратегии
Вани (в виде рисунка или таблицы). В узлах дерева указывайте игровые позиции. Дерево не должно содержать партий, невозможных при реализации выигрывающим игроком своей выигрышной стратегии. Например, полное дерево игры не будет верным ответом на это задание.
Содержание верного ответа
(допускаются иные формулировки ответа, не искажающие его смысла)
Задание 1. а) Петя может выиграть единственным способом (увеличив количество камней во второй куче в два раза), если S = 26, …, 41. При меньших значениях S за один ход нельзя получить 62 или более камней в двух кучах.
При S ≥ 42 у Пети есть более одного выигрывающего хода (можно удвоить количество камней в любой куче). б) Минимальное значение: S = 13. Петя может получить позицию (10, 26), в которой Ваня может выиграть ходом (10, 52). При меньших значениях S ни при каком ходе Пети Ваня не сможет выиграть первым ходом.
Задание 2.
Возможные значения S: 20, 25. В этих случаях Петя, очевидно, не может выиграть первым ходом. Однако при S = 20 Петя может получить позицию
(20, 20), а при S = 25 – позицию (11, 25).
В первом случае после хода Вани возникнет одна из позиций (21, 20),
(40,
20), (20, 21), (20, 40), во втором случае – одна из позиций (12, 25),
(22,
25), (11 26), (11, 50). В любой из перечисленных позиций Петя может выиграть, удвоив количество камней в большей куче.
Задание 3.
Возможное значение S: 24. После первого хода Пети возможны позиции
(11,
24), (20, 24), (10, 25), (10, 48). В позициях (20, 24) и (10, 48) Ваня может выиграть первым ходом, удвоив количество камней в любой куче. Из позиций (11, 24) и (10, 25) Ваня может получить позицию (11, 25), разобранную в задании 2. Игрок, после хода которого возникла эта позиция