Задание С4
Говоря неформально, 4 балла ставится за эффективную и правильно работающую программу, которая, возможно, содержит до трех синтаксических ошибок (описок). 3 балла ставится в случае, когда фактически задача решена, но количество описок более трех (но не более пяти) и допущено не более одной содержательной ошибки, не позволяющей усомниться в том, что экзаменуемый правильно придумал алгоритм (список допустимых ошибок приведен ниже). 2 балла ставится, если в дополнение к неточностям, которые перечислены выше, программа работает неэффективно по времени и/или допущено до трех упомянутых выше содержательных ошибок. Количество допустимых описок — до семи. 1 балл ставится, если программа написана неверно, но из описания алгоритма и общей структуры программы видно, что экзаменуемый в целом правильно представляет путь решения задачи. Далее сказанное уточнено.
Критерии оценивания выполнения задания | Баллы |
Программа правильно работает для любых входных данных произвольного размера. Используемая память не зависит от количества прочитанных чисел, а время работы пропорционально этому количеству. Допускается наличие в тексте программы до трех синтаксических ошибок одного из следующих видов: 1) пропущен или неверно указан знак пунктуации; 2) неверно написано или пропущено зарезервированное слово языка программирования; 3) не описана или неверно описана переменная; 4) применяется операция, недопустимая для соответствующего типа данных. Если одна и та же ошибка встречается несколько раз, это считается за одну ошибку. | |
Не выполнены условия, позволяющие поставить 4 балла. Программа в целом работает правильно для любых входных данных произвольного размера. Время работы пропорционально количеству введённых чисел, правильно указано, какие величины должны вычисляться по ходу чтения элементов последовательности чисел. Количество синтаксических ошибок (описок) указанных выше видов — не более пяти. Используемая память, возможно, зависит от количества прочитанных чисел (например, входные данные запоминаются в массиве, контейнере STL в C++ или другой аналогичной структуре данных). Допускается ошибка при вводе данных, неверный или неполный вывод результатов или неверная работа программы в «экзотических» ситуациях. Кроме того, допускается наличие одной ошибки, принадлежащей к одному из следующих видов ошибок: 1) ошибка при инициализации максимумов; 2) неверно обрабатывается ситуация, когда один или несколько максимумов не определены (все или все, кроме одного, элементы исходных данных имеют одинаковую чётность); 3) допущен выход за границу массива; 4) используется знак < вместо <=, or вместо and и т. п. | |
Не выполнены условия, позволяющие поставить 3 или 4 балла. Программа работает в целом верно, эффективно или нет, но в реализации алгоритма есть до трёх содержательных ошибок, допустимые виды ошибок перечислены в критериях на 3 балла. Количество синтаксических «описок» не должно быть более девяти. Программа может быть неэффективна по времени. Например, все числа запоминаются в массиве, и перебираются все возможные пары элементов последовательности: max := 0; for i := 1 to N - 1 do begin for j := i + 1 to N do begin if ((a[i]+a[j]) mod 2 = 0) and (a[i]+a[j] > max) then max := a[i]+a[j]; end end; | |
Не выполнены условия, позволяющие поставить 2, 3 или 4 балла. Из описания алгоритма или общей структуры программы видно, что экзаменуемый в целом правильно представляет путь решения задачи независимо от эффективности. При этом программа может отсутствовать или быть представленной отдельными фрагментами, без ограничений на количество ошибок. | |
Не выполнены критерии, позволяющие поставить 1, 2, 3 или 4 балла | |
Максимальный балл |
По каналу связи передаются положительные целые числа, не превышающие 1000, — результаты измерений, полученных в ходе эксперимента (количество измерений N известно заранее, гарантируется, что N > 2). После окончания эксперимента передаётся контрольное значение — наибольшее число R, удовлетворяющее следующим условиям:
1) R — сумма двух различных переданных элементов последовательности («различные» означает, что нельзя просто удваивать переданные числа, суммы различных, но равных по величине элементов допускаются);
2) R — чётное число. В результате помех при передаче как сами числа, так и контрольное значение могут быть искажены.
Напишите программу (укажите используемую версию языка программирования, например Free Pascal 2.6.4), которая будет проверять правильность контрольного значения. Программа должна напечатать отчёт по следующей форме:
Вычисленное контрольное значение:
…
Контроль пройден (или Контроль не пройден)
Постарайтесь, чтобы программа была эффективной. Программа считается эффективной по времени, если время работы программы пропорционально количеству полученных показаний прибора N, то есть при увеличении N в k раз время работы программы должно увеличиваться не более чем в k раз. Программа считается эффективной по памяти, если размер памяти, использованной в программе для хранения данных, не зависит от числа N и не превышает 1 килобайта.
Перед текстом программы кратко опишите используемый Вами алгоритм решения.
На вход программе в первой строке подаётся количество чисел N (N > 2). В каждой из последующих N строк записано одно натуральное число, не превышающее 1000. В последней строке записано контрольное значение. Пример входных данных:
Пример выходных данных для приведённого выше примера входных данных: Вычисленное контрольное значение: 184.
Пояснение.
Сумма двух чисел чётна, если они имеют одинаковую чётность (оба чётные или оба нечётные). Программа, вычисляющая контрольное значение, читает все входные данные один раз, не запоминая их в массиве. Для прочитанного фрагмента входной последовательности программа хранит значения двух самых больших чётных и двух самых больших нечётных чисел:
М01 — самое большое чётное число;
return false">ссылка скрытаМ02 — второе по величине чётное число;
M11 — самое большое нечётное число.
М12 — второе по величине нечетное число;
После того как все данные прочитаны, искомое контрольное значение вычисляется, как большая из сумм M01+M02 и M11+M12.
Поскольку N > 2, обязательно найдётся хотя бы одна пара чисел одинаковой четности и контрольное значение всегда будет вычислено, но надо отдельно обработать случаи, когда среди данных нет пары чётных или пары нечётных элементов. Эту проверку следует делать очень аккуратно. Например, следующий очень похожий на правильный фрагмент на самом деле ошибочен:
if (M12=0) or (M01+M02 > M11+M12) then res:=M01+M02 else res := M11+M12
Этот фрагмент даст неверный результат, например, при M01=100, M02=0, M11=25, M12=13.
Ниже приведены правильно реализующие описанный алгоритм программы на языке Паскаль, а также на алгоритмическом языке. Допускаются решения, записанные на других языках программирования.
Пример правильной и эффективной программы на языке Паскаль
var M01,M02,M11,M12,res,i,N,x: longint;
begin
M01 := 0; M02:=0;
M11 := 0; M12:=0;
readln(N);
for i := 1 to N do
begin
readln(x);
if x mod 2 = 0 then begin
if x > M01 then begin
M02:=M01; M01:=x
end
else if x > M02 then M02:=x;
end
else begin
if x > M11 then begin
M12:=M11; M11:=x
end
else if x > M12 then M12:=x;
end
end;
if M02=0 then res:=M11+M12
else if M12=0 then res:=M01+M02
else if M01+M02 > M11+M12 then res := M01+M02
else res := M11+M12
writeln('Вычисленное контрольное значение: ',res);
readln(R);
if R = res
then writeln('Контроль пройден')
else writeln('Контроль не пройден');
end.
Пример правильной и эффективной программы на алгоритмическом языке
алг
нач
цел N | количество чисел на входе
цел x | исходные данные
цел m01=0
цел m02=0
цел m11=0
цел m12=0
цел R | введенное контрольное значение
цел res | вычисленное контрольное значение
ввод N
нц N раз
ввод x
если mod(x,2) = 0 то
выбор
при x > m01:
m02:=m01; m01:=x
при x > m02:
m02:=x
все
иначе
выбор
при x > m11:
m12:=m11; m11:=x
при x > m12:
m12:=x
все
кц
выбор
при m02=0: res:=m11+m12
при m12=0: res:=m01+m02
при m01+m02 > m11+m12: res:=m01+m02
иначе res:=m11+m12
все
вывод нс, 'Вычисленное контрольное значение: ',res
ввод R
если R=res
то вывод нс, "Контроль пройден"
иначе вывод нс, "Контроль не пройден"
все
кон
1.Для кодирования некоторой последовательности, состоящей из букв К, Л, М, Н, решили использовать неравномерный двоичный код, удовлетворяющий условию Фано. Для буквы Н использовали кодовое слово 0, для буквы К — кодовое слово 110. Какова наименьшая возможная суммарная длина всех четырёх кодовых слов?
1) 7
2) 8
3) 9
4) 10
Примечание. Условие Фано означает, что никакое кодовое слово не является началом другого кодового слова. Это обеспечивает возможность однозначной расшифровки закодированных сообщений.
2.Для таблицы истинности функции F известны значения только некоторых ячеек.
x1 | x2 | x3 | x4 | x5 | x6 | x7 | F |
Каким выражением может быть F?
1) x1 ∧ x2 ∧ x3 ∧ x4 ∧ x5 ∧ x6 ∧ x7
2) x1 ∨ x2 ∨ x3 ∨ x4 ∨ x5 ∨ x6 ∨ x7
3) x1 ∧ x2 ∧ x3 ∧ x4 ∧ x5 ∧ x6 ∧ x7
4) x1 ∨ x2 ∨ x3 ∨ x4 ∨ x5 ∨ x6 ∨ x7
3.Для групповых операций с файлами используются маски имён файлов. Маска представляет собой последовательность букв, цифр и прочих допустимых в именах файлов символов, в которой также могут встречаться символы.
Символ «?» (вопросительный знак) означает ровно один произвольный символ.
Символ «*» (звёздочка) означает любую последовательность символов произвольной длины, в том числе «*» может задавать и пустую последовательность.
В каталоге находится 6 файлов:
chifera.dat
chifera.doc
ferrum.doc
deLafer.doc
oferta.doc
tokoferol.docx
Определите, по какой из масок из каталога будет отобрано ровно 2 файла.
1) *fer?*.d*
2) ?*fer*.doc
3) *?fer*?.doс*
4) ?*fer?*.doc
4.Укажите наименьшее четырёхзначное восьмеричное число, двоичная запись которого содержит ровно 5 нулей. В ответе запишите только само восьмеричное число, основание системы счисления указывать не нужно.
5.Между населёнными пунктами A, B, C, D, E, F построены дороги, протяжённость которых приведена в таблице. Отсутствие числа в таблице значает, что прямой дороги между пунктами нет.
A | B | C | D | E | F | |
A | ||||||
B | ||||||
C | ||||||
D | ||||||
E | ||||||
F |
Определите длину кратчайшего пути между пунктами A и F, проходящего через пункт E и не проходящего через пункт B. Передвигаться можно только по указанным дорогам.
6.Автомат получает на вход трёхзначное число. По этому числу строится новое число по следующим правилам.
1. Складываются первая и вторая, а также вторая и третья цифры исходного числа.
2. Полученные два числа записываются друг за другом в порядке возрастания (без разделителей).
Пример. Исходное число: 348. Суммы: 3+4 = 7; 4+8 = 12. Результат: 712.
Укажите наименьшее число, в результате обработки которого автомат выдаст число 1115.
7. Дан фрагмент электронной таблицы. Из ячейки B2 в одну из ячеек диапазона A1:A4 была скопирована формула. При копировании адреса ячеек в формуле автоматически изменились, и числовое значение в этой ячейке стало равным 8. В какую ячейку была скопирована формула? В ответе укажите только одно число — номер строки, в которой расположена ячейка.
A | B | C | D | E | |
= D$3 + $C2 | |||||
Примечание. Знак $ обозначает абсолютную адресацию.
8.Запишите число, которое будет напечатано в результате выполнения программы. Для Вашего удобства программа представлена на пяти языках программирования.
Паскаль |
var n, s: integer; begin n := 1; s := 0; while n <= 100 do begin s := s + 30; n := n * 3 end; write(s) end. |
9.Производилась двухканальная (стерео) звукозапись с частотой дискретизации 64 кГц и 24-битным разрешением. В результате был получен файл размером 72 Мбайт, сжатие данных не производилось. Определите приблизительно, сколько времени (в минутах) проводилась запись. В качестве ответа укажите ближайшее к времени записи целое число.
10.Сколько слов длины 6, начинающихся с согласной буквы, можно составить из букв Г, О, Д? Каждая буква может входить в слово несколько раз. Слова не обязательно должны быть осмысленными словами русского языка.
11.Ниже на пяти языках программирования записан рекурсивный алгоритм F.
Паскаль |
function F(n: integer): integer; begin if n > 2 then F := F(n - 1) + F(n - 2) else F := n; end; |
Чему будет равно значение, вычисленное алгоритмом при выполнении вызова F(5)?
12.В терминологии сетей TCP/IP маска сети — это двоичное число, меньшее 232; в маске сначала (в старших разрядах) стоят единицы, а затем с некоторого места нули. Маска определяет, какая часть IP-адреса узла сети относится к адресу сети, а какая — к адресу самого узла в этой сети. Обычно маска записывается по тем же правилам, что и IP-адрес — в виде четырёх байт, причём каждый байт записывается в виде десятичного числа. Адрес сети получается в результате применения поразрядной конъюнкции к заданному IP-адресу узла и маске. Например, если IP-адрес узла равен 231.32.255.131, а маска равна 255.255.240.0, то адрес сети равен 231.32. 240.0.
Для узла с IP-адресом 224.128.114.142 адрес сети равен 224.128.64.0. Чему равен третий слева байт маски? Ответ запишите в виде десятичного числа.
13.При регистрации в компьютерной системе каждому пользователю выдаётся пароль, состоящий из 12 символов и содержащий только символы А, Б, В, Г, Д, Е. Каждый такой пароль в компьютерной программе записывается минимально возможным и одинаковым целым количеством байт, при этом используют посимвольное кодирование и все символы кодируются одинаковым и минимально возможным количеством бит. Определите, сколько байт необходимо для хранения 20 паролей.
14.Исполнитель Чертёжник перемещается на координатной плоскости, оставляя след в виде линии. Чертёжник может выполнять команду сместиться на (a, b), где a, b — целые числа. Эта команда перемещает Чертёжника из точки с координатами (x, y) в точку с координатами (x + a, y + b). Например, если Чертёжник находится в точке с координатами (4, 2), то команда сместиться на (2, −3) переместит Чертёжника в точку (6, −1).
Цикл
ПОВТОРИ число РАЗ
последовательность команд
КОНЕЦ ПОВТОРИ
означает, что последовательность команд будет выполнена указанное число раз (число должно быть натуральным).
Чертёжнику был дан для исполнения следующий алгоритм (количество повторений и смещения в первой из повторяемых команд неизвестны):
НАЧАЛО
сместиться на (5, 2)
ПОВТОРИ … РАЗ
сместиться на (…, …)
сместиться на (−1, −2)
КОНЕЦ ПОВТОРИ
сместиться на (−25, −12)
КОНЕЦ
После выполнения этого алгоритма Чертёжник возвращается в исходную точку. Какое наибольшее число повторений могло быть указано в конструкции «ПОВТОРИ … РАЗ»?.
15.На рисунке изображена схема дорог, связывающих города А, Б, В, Г, Д, Е, К, Л, М, Н, П, Р, Т. По каждой дороге можно двигаться только в одном направлении, указанном стрелкой. Сколько существует различных путей из города А в город Т?
16.Решите уравнение 121x + 110 = 1019.
17.В языке запросов поискового сервера для обозначения логической операции «ИЛИ» используется символ «|», а для логической операции «И» — символ «&». В таблице приведены запросы и количество найденных по ним страниц некоторого сегмента сети Интернет.
Запрос | Найдено страниц, тыс. |
Новосибирск & (Красноярск & Хабаровск | Норильск) | |
Новосибирск & Норильск | |
Новосибирск & Красноярск & Хабаровск & Норильск |
Какое количество страниц (в тыс.) будет найдено по запросу
Новосибирск & Красноярск & Хабаровск?
Считается, что все запросы выполнялись практически одновременно, так что набор страниц, содержащих все искомые слова, не изменялся за время выполнения запросов.
18.Элементами множеств А, P, Q являются натуральные числа, причём P = {2, 4, 6, 8, 10, 12, 14, 16, 18, 20}, Q = {3, 6, 9, 12, 15, 18, 21, 24, 27, 30}. Известно, что выражение
( (x ∈ A) → (x ∈ P) ) ∧ ( (x ∈ Q) → (x ∈ A) )
истинно (то есть принимает значение 1) при любом значении переменной х. Определите наибольшее возможное количество элементов в множестве A.
19.В программе описан одномерный целочисленный массив с индексами от 0 до 10. Ниже представлен записанный на разных языках программирования фрагмент одной и той же программы, обрабатывающей данный массив.
Паскаль |
s:=27; n:=10; for i:=0 to n-1 do begin s:=s+A[i]-A[i+1] end; |
Известно, что в начале выполнения этого фрагмента в массиве находилась убывающая последовательность чисел, то есть A[0] > A[1] >…> A[10]. Какое наименьшее значение может иметь переменная s после выполнения данной программы?
20.Ниже на пяти языках записан алгоритм. Получив на вход число x, этот алгоритм печатает два числа a и b. Укажите наименьшее из таких чисел x, при вводе которого алгоритм печатает сначала 2, а потом 7.
Паскаль |
var x, a, b: integer; begin readln(x); a := 0; b := 1; while x > 0 do begin a := a+1; b := b*(x mod 100); x := x div 100; end; writeln(a); write(b); end. |
21.При каком наименьшем значении входной переменной k программа выдаёт тот же ответ, что и при входном значении k = 64? Для Вашего удобства программа приведена на пяти языках программирования.
Паскаль |
var k, i : longint; function f(n: longint) : longint; begin f := n * n - 20 end; begin readln(k); i := 12; while (i>0) and (f(i)> k) do i := i-1; writeln(i) end. |
22.Исполнитель А22 преобразует целое число, записанное на экране. У исполнителя три команды, каждой команде присвоен номер:
1) Прибавь 1
2) Прибавь 2
3) Прибавь предыдущее
Первая команда увеличивает число на экране на 1, вторая увеличивает это число на 2, третья прибавляет к числу на экране число, меньшее на 1 (к числу 3 прибавляется 2, к числу 11 прибавляется 10 и т. д.). Программа для исполнителя А22 — это последовательность команд. Сколько существует программ, которые число 2 преобразуют в число 9?
23.Сколько существует различных наборов значений логических переменных x1, x2, ..., x6, y1, y2, ..., y6, z1, z2, ..., z6, которые удовлетворяют всем перечисленным ниже условиям?
(x1 → x2) ∧ (x2 → x3) ∧ (x3 → x4) ∧ (x4 → x5) ∧ (x5→ x6) = 1
(y1 → y2) ∧ (y2 → y3) ∧ (y3 → y4) ∧ (y4 → y5) ∧ (y5 → y6) = 1
(z1 → z2) ∧ (z2→ z3) ∧ (z3 → z4) ∧ (z4→ z5) ∧ (z5 → z6) = 1
x6 ∧ y6 ∧ z6 = 0
В ответе не нужно перечислять все различные наборы значений переменных x1, x2, ..., x6, y1, y2, ..., y6, z1, z2, ..., z6, при которых выполнена данная система равенств. В качестве ответа Вам нужно указать количество таких наборов.
24.Для заданного положительного вещественного числа A необходимо найти минимальное целое число K, при котором выполняется неравенство Для решения этой задачи ученик написал такую программу.
Паскаль |
var a, s: real; k: integer; begin read(a); k := 0; s := 1; while s>=a do begin k := k + 1; s := s + 1.0/k; end; write(k); end. |
Последовательно выполните следующее.
1. Напишите, что выведет эта программа при вводе числа 1.4.
2. Сколько существует натуральных чисел А, при вводе которых программа выведет ответ 1?
3. Найдите в программе все ошибки (их может быть одна или несколько).
Для каждой ошибки выпишите строку, в которой она допущена, и приведите эту же строку в исправленном виде. Обратите внимание: Вам нужно исправить приведённую программу, а не написать свою. Вы можете только заменять ошибочные строки, но не можете удалять строки или добавлять новые. Заменять следует только ошибочные строки: за исправления, внесённые в строки, не содержащие ошибок, баллы будут снижаться.
25. Дан массив, содержащий неотрицательные целые числа. Необходимо вывести:
- максимальный чётный элемент, если количество чётных элементов не меньше, чем нечётных;
- максимальный нечётный элемент, если количество нечётных элементов больше, чем чётных.
Например, для массива из шести элементов, равных соответственно 4, 6, 12, 17, 3, 8, ответом будет 12 — наибольшее чётное число, поскольку чётных чисел в этом массиве больше.
Напишите на одном из языков программирования программу для решения этой задачи. Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать часть из описанных переменных.
Паскаль |
const N=2000; var a: array [1..N] of integer; i, j, k, m: integer; begin for i:=1 to N do readln(a[i]); … end. |
В качестве ответа Вам необходимо привести фрагмент программы, который должен находиться на месте многоточия. Вы можете записать решение также на другом языке программирования (укажите название и используемую версию языка программирования, например, Free Pascal 2.6). В этом случае Вы должны использовать те же самые исходные данные и переменные, какие были предложены в приведённых фрагментах.
26.Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может: добавить в кучу один камень (действие А) или утроить количество камней в куче, а затем убрать из кучи один камень (действие Б). Например, имея кучу из 10 камней, за один ход можно получить кучу из 11 или 29 камней. У каждого игрока, чтобы делать ходы, есть неограниченное количество камней. Игра завершается в тот момент, когда количество камней в куче становится более 32. Победителем считается игрок, сделавший последний ход, то есть первым получивший кучу, в которой будет 33 или больше камней. В начальный момент в куче было S камней, 1 ≤ S ≤ 32.
Говорят, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника. Описать стратегию игрока — значит описать, какой ход он должен сделать в любой ситуации, которая ему может встретиться при различной игре противника.
Выполните следующие задания. Во всех случаях обосновывайте свой ответ.
1. а) При каких значениях числа S Петя может выиграть первым ходом? Укажите все такие значения и выигрывающий ход Пети.
б) Укажите такое значение S, при котором Петя не может выиграть за один ход, но при любом ходе Пети Ваня может выиграть своим первым ходом. Опишите выигрышную стратегию Вани.
2. Укажите два значения S, при которых у Пети есть выигрышная стратегия, причём Петя не может выиграть первым ходом, но Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня. Для указанных значений S опишите выигрышную стратегию Пети.
3. Укажите такое значение S, при котором
– у Вани есть выигрышная стратегия, позволяющая ему выиграть первым или вторым ходом при любой игре Пети, и при этом
– у Вани нет стратегии, которая позволит ему гарантированно выиграть первым ходом.
Для указанного значения S опишите выигрышную стратегию Вани. Постройте дерево всех партий, возможных при этой выигрышной стратегии Вани (в виде рисунка или таблицы). На рёбрах дерева указывайте, кто делает ход, в узлах — количество камней в позиции.
27.По каналу связи передаются положительные целые числа, не превышающие 1000, — результаты измерений, полученных в ходе эксперимента (количество измерений N известно заранее, гарантируется, что N > 2). После окончания эксперимента передаётся контрольное значение — наибольшее число R, удовлетворяющее следующим условиям:
1) R — сумма двух различных переданных элементов последовательности («различные» означает, что нельзя просто удваивать переданные числа, суммы различных, но равных по величине элементов допускаются);
2) R — чётное число. В результате помех при передаче как сами числа, так и контрольное значение могут быть искажены.
Напишите программу (укажите используемую версию языка программирования, например Free Pascal 2.6.4), которая будет проверять правильность контрольного значения. Программа должна напечатать отчёт по следующей форме:
Вычисленное контрольное значение:
…
Контроль пройден (или Контроль не пройден)
Постарайтесь, чтобы программа была эффективной. Программа считается эффективной по времени, если время работы программы пропорционально количеству полученных показаний прибора N, то есть при увеличении N в k раз время работы программы должно увеличиваться не более чем в k раз. Программа считается эффективной по памяти, если размер памяти, использованной в программе для хранения данных, не зависит от числа N и не превышает 1 килобайта.
Перед текстом программы кратко опишите используемый Вами алгоритм решения.
На вход про превышает 1 килобайта.
Перед текстом программы кратко опишите используемый Вами алгоритм решения.
На вход программе в первой строке подаётся количество чисел N (N > 2). В каждой из последующих N строк записано одно натуральное число, не превышающее 1000. В последней строке записано контрольное значение. Пример входных данных:
Пример выходных данных для приведённого выше примера входных данных: Вычисленное контрольное значение: 184.