Информатика: подготовка к ЕГЭ

advertisement
Томский государственный университет
Факультет информатики
И. Л. Фукс
ИНФОРМАТИКА: ПОДГОТОВКА К ЕГЭ – 2013
Методические указания
Томск – 2013
Методические указания предназначены для учащихся 11-х классов, собирающихся сдавать ЕГЭ по предмету «Информатика и ИКТ» с
целью поступления на физико-математические и технические факультеты университетов. Материал базируется на демонстрационном варианте ЕГЭ 2013 года, адрес электронного ресурса –
http://www.fipi.ru/view/sections/226/docs/627.html - Информатика.
Задания ЕГЭ сгруппированы по темам, каждая тема предваряется
кратким описанием соответствующего раздела теоретической части
школьного курса информатики. Для каждого задания приводится подробный разбор решения.
Почтовый адрес:
634050, г. Томск, пр. Ленина, 36, ТГУ,
приемная комиссия
Телефон:
(382-2) 52-96-72
http://www.tsu.ru
Информационные сайты ТГУ:
http://abiturient.tsu.ru
Информационный сайт факультета
http://www.inf.tsu.ru
информатики ТГУ:
Электронная почта:
fooxil@sibmail.com
© Фукс И. Л., 2013
3
1. АЛГОРИТМЫ НА ЕСТЕСТВЕННОМ ЯЗЫКЕ
Для решения этих задач нужно уметь устанавливать причинноследственные связи между данными.
A2 (2 мин)
Между населёнными пунктами A, B, C, D, E, F построены дороги, протяжённость которых приведена в таблице. (Отсутствие числа в таблице
означает, что прямой дороги между пунктами нет.)
A
A
B
C
D
E
F
B
3
3
7
4
7
C
D
E
7
4
7
5
2
5
2
F
3
3
Определите длину кратчайшего пути между пунктами A и F (при условии,
что передвигаться можно только по построенным дорогам).
1) 11
2) 12
3) 13
4) 18
РЕШЕНИЕ
Выпишем все возможные пути из пункта А в пункт F и вычислим их
длины:
ABCEF
3+7+5+3
18
ABDEF
3+4+2+3
12
ABEF
3+7+3
13
Ответ: 2.
A5 (2 мин)
4
Автомат получает на вход два двузначных шестнадцатеричных числа. В
этих числах все цифры не превосходят цифру 6 (если в числе есть цифра
больше 6, автомат отказывается работать). По этим числам строится новое
шестнадцатеричное число по следующим правилам.
1. Вычисляются два шестнадцатеричных числа – сумма старших разрядов
полученных чисел и сумма младших разрядов этих чисел.
2. Полученные два шестнадцатеричных числа записываются друг за другом в порядке возрастания (без разделителей).
Пример. Исходные числа: 66, 43. Поразрядные суммы: A, 9. Результат: 9A.
Определите, какое из предложенных чисел может быть результатом работы автомата.
1) 9F
2) 911
3) 42
4) 7A
РЕШЕНИЕ
1. Правильный ответ должен быть двузначным, поскольку максимальная сумма цифр 6+6=С, нет переноса в старший разряд. Следовательно, ответы 1) и 2) неверные.
2. Ответ 3) неверный, т.к. цифры следуют в порядке убывания.
Ответ: 4.
5
2. ОСНОВЫ ЛОГИКИ
Математическая логика – одна из базовых математических дисциплин
информатики. Элементарными объектами в логике являются высказывания, например: «Луна – спутник Земли», «6 < 3», «6 > 3». Значением (величиной) конкретного высказывания может быть истина или ложь. Приведенные примеры высказываний являются константами, их значения неизменны.
Высказывание может зависеть от чего-либо, тогда его значение иногда
может быть истинным, а иногда – ложным, например: «Сегодня солнечная
погода», «x >7». Первое высказывание зависит от погоды в момент его
чтения, а второе – от текущего значения переменной x.
Для логических данных используют специальные операции, которые
тоже называются логическими. В выражениях эти операции могут обозначаться разными способами.
Название операции
Альтернативные названия
Знаки
Конъюнкция
Логическое умножение,
Логическое И
Λ &
and
Дизъюнкция
Логическое сложение,
Логическое ИЛИ
V |
or
Отрицание
Инверсия
Следование
Эквивалентность
Исключающее ИЛИ
Импликация
Тождество
¬
not
→
≡

xor
Примеры
AΛB
A&B
A and B
AVB
A|B
A or B
¬A
A
not A
A →B
A≡B
A B
A xor B
Логические операции удобно определять с помощью таблиц истинности, в которых для конкретных значений аргументов приводятся значения
выражений.
6
Таблицы истинности для указанных логических операций:
A
0
0
1
1
B
0
1
0
1
AΛB
0
0
0
1
AVB
0
1
1
1
¬A
1
1
0
0
A →B
1
1
0
1
A≡B
1
0
0
1
A B
0
1
1
0
Три операции – конъюнкция, дизъюнкция и отрицание – являются базовыми. Все остальные операции могут быть выражены через базовые.
Например,
исключающее ИЛИ:
a  b = (a V b) Λ (¬a V ¬b);
следование:
a → b = (¬a V b);
эквивалентность:
(a ≡ b) = ( a Λ b) V (¬a Λ ¬b).
Частью математической логики является булева алгебра, в которой выведены законы преобразования логических выражений.
1. Выражения с константами:
0 V A = A, 1 V A = 1, 0 Λ A = 0, 1 Λ A = A.
2. Выражения с одной переменной:
A V A = A, A Λ A = A, A V ¬ A = 1, A Λ ¬ A = 0.
3. Выражения со скобками и одинаковыми операциями (ассоциативность):
(A Λ B) Λ C = A Λ (B Λ C), (A V B) V C = A V (B V C).
4. Выражения со скобками и разными операциями (дистрибутивность):
A Λ (B V C) = (A Λ B) V (A Λ C), A V (B Λ C) = (A V B) Λ (A V C).
5. Перестановка операндов в выражениях (коммутативность):
A Λ B = B Λ A, A V B = B V A.
6. Выражения с операцией отрицания (законы де Моргана):
¬(A Λ B) = ¬A V ¬B, ¬(A V B) = ¬A Λ ¬B.
7. Двойное отрицание (закон отрицания отрицания):
¬¬A = ¬(¬A) = A.
7
A3 (2 мин)
Дан фрагмент таблицы истинности выражения F:
x1
1
1
0
x2
1
0
1
x3
0
1
0
x4
1
0
1
x5
1
1
1
x6
1
1
0
x7
1
0
0
F
0
0
1
Каким из приведенных ниже выражений может быть 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
РЕШЕНИЕ
Поскольку в ответах присутствуют выражения с операцией конъюнкции, удобнее начать проверку именно с них.
Ответ 1): выражение будет истинным, если истинны x2, x4 и x5, а
остальные операнды – ложны. Во всех остальных случаях выражение будет ложным. Это соответствует каждой строке таблицы истинности.
Ответ 3): выражение будет истинным, если истинны x1, x3, x5 и x6, а
остальные операнды – ложны. Это не соответствует последней строке таблицы.
Ответ 2): выражение будет ложным, если ложны x2, x4 и x7, а остальные операнды – истинны. Это не соответствует первой строке таблицы.
Ответ 4): выражение будет ложным, если ложны x1, x3 и x6, а остальные операнды – истинны. Это не соответствует второй строке таблицы.
Ответ: 1.
A10 (2 мин)
На числовой прямой даны два отрезка: P = [2, 10] и Q = [6, 14].
Выберите такой отрезок A, что формула
( (x  А) → (x  P) ) \/ (x  Q)
8
тождественно истинна, то есть принимает значение 1 при любом значении
переменной х.
1) [0, 3]
2) [3, 11]
3) [11, 15]
4) [15, 17]
РЕШЕНИЕ
Введем обозначения: XA = (x  А); XP = (x  P); XQ = (x  Q). Тогда
высказывание примет вид ((XA → XP)) \/ XQ. Составим таблицу истинности для высказывания:
XA
XP
XA → XP
XQ
0
0
1
0
1
0
0
1
1
1
0
1
1
0
1
0
1
1
1
1
0
1
0
0
0
1
0
0
1
1
1
1
1
0
1
1
1
1
1
1
Исходное высказывание будет ложным, только если XA истинно, а XP
и XQ ложны, т.е., (x  P) и (x  Q). Отсюда следует, что если x  [2, 14],
то исходное высказывание будет ложным, только если (x  A). Этому условию удовлетворяет ответ 4), значит, он неверный.
Исходное высказывание будет истинным, если XA ложно, вне зависимости от XP и XQ. Этому условию удовлетворяют все ответы. Поэтому
дальнейшие размышления нужно проводить для истинного значения XA.
Пусть x  [0,3]. Тогда XQ всегда ложно, а XP будет ложным для некоторых значений x. Следовательно, ответ 1) неверный.
Пусть x  [3,11]. Тогда либо XP, либо XQ, либо оба условия вместе будут истинными. Следовательно, ответ 2) верный.
Пусть x  [11,15]. Тогда XP всегда ложно, а XQ будет ложным для некоторых значений x. Следовательно, ответ 3) неверный.
Ответ: 2.
B15 (10 мин)
9
Сколько существует различных наборов значений логических переменных
x1, x2, x3, x4, y1, y2 y3, y4, которые удовлетворяют всем перечисленным
ниже условиям?
(x1 → x2) /\ (x2 → x3) /\ (x3 → x4) = 1
(¬y1 \/ y2) /\ (¬y2 \/ y3) /\ (¬y3 \/ y4) = 1
(y1 → x1) /\ (y2 → x2) /\ (y3 → x3) /\ (y4 → x4) = 1
В ответе не нужно перечислять все различные наборы значений переменных x1, x2, x3, x4, y1, y2 y3, y4, при которых выполнена данная система равенств. В качестве ответа Вам нужно указать количество таких наборов.
Ответ: ___________________________.
РЕШЕНИЕ
Перепишем второе равенство в виде:
(y1 → y2) /\ (y2 →y3) /\ (y3 →y4) = 1
Для того чтобы три равенства выполнялись, все 10 выражений, стоящих в скобках, должны быть истинными. Эти выражения связывают попарно друг с другом все переменные. Очевидно, нужно найти закономерности в этих связях.
Рассмотрим первое равенство. Результат операции следования равен 1
при нулевом (ложном) значении первого операнда и любом значении второго операнда или при истинных (равных 1) значениях обоих операндов.
Следовательно, каждая скобка дает 3 варианта решения. Во второй и третьей скобках первый операнд совпадает со вторым операндом в предыдущей скобке. Если значение этого операнда равно 0, то следующая переменная может быть равна как 0, так и 1. Но если значение операнда равно
1, то следующая переменная может быть равна только 1. Значит, как только очередная переменная становится равной 1, все следующие переменные
могут быть равны только 1. Занесем возможные наборы значений переменных во фрагмент таблицы истинности для x-переменных:
1.
2.
3.
x1
0
0
0
x2
0
0
0
x3
0
0
1
x4
0
1
1
10
4.
5.
0
1
1
1
1
1
1
1
Получаем 5 вариантов решений для первого равенства.
Второе равенство тоже дает подобные 5 вариантов решений для yпеременных:
1.
2.
3.
4.
5.
y1
0
0
0
0
1
y2
0
0
0
1
1
y3
0
0
1
1
1
y4
0
1
1
1
1
Общее число решений можно вычислить, сопоставляя друг с другом
решения для первого и второго равенства и проверяя их соответствие третьему равенству. Первому решению для x-переменных соответствует только первое решение для y-переменных. Во втором решении для yпеременных y4=1, значит, должно быть x4=1. Подобная закономерность
прослеживается в других решениях для y-переменных. Получаем 1 вариант
общего решения.
Второму решению для x-переменных соответствует первое и второе
решение для y-переменных – 2 варианта общего решения. Итак, каждому
следующему решению для x-переменных соответствует все большее число
решений для y-переменных. Всего получается 1+2+3+4+5=15 общих решений.
Ответ: 15
11
3. СИСТЕМЫ СЧИСЛЕНИЯ
Система счисления задает правила записи чисел. Из истории известно
много примеров использования разных систем счисления или нумерации.
Все виды нумерации можно разделить на две группы: непозиционные и
позиционные. В позиционной системе вклад каждой цифры в число зависит от позиции (разряда), в которой эта цифра находится. Количество разных цифр, которые можно использовать для записи чисел в позиционной
системе, называется основанием системы счисления.
Величину любого числа, заданного в позиционной системе счисления с основанием p, можно представить в виде полинома относительно p
S ( p)  a n p n  a n 1 p n 1  a n  2 p n  2    a1 p 1  a 0 p 0 ,
i  0, n – отдельные цифры заданного числа, для которых выполняется условие 0  ai  p. Если p  10 , то для записи можно исгде ai ,
пользовать десятичные цифры. Например, 3415  3 * 5  4 * 5  1. При
возрастании p приходится добавлять специальные знаки, обозначающие
2
величины больше 9: 5 A916  5 * 16  A * 16  9.
Перевод чисел из системы с основанием p в систему с основанием
10. Если вычислить значение полинома по правилам десятичной арифметики, то получится величина того же числа в десятичной системе счисления.
Например, 3415 = 3*52 + 4*5 +1 = 3*25 + 20 + 1 = 9610;
5А916 = 5*162 + А*16 + 9 = 5*256 + 10*16 + 9 = 1449.
Полином можно преобразовать, используя формулу Горнера:
2
S ( p)  ((( an p  an1 ) p  an2 ) p    a1 ) p  a0 .
Такое представление полинома удобно использовать для составления
алгоритма перевода числа из заданной системы счисления в десятичную.
Перевод чисел из системы с основанием 10 в систему с основанием
q. Пусть T(10) – значение числа в десятичной системе счисления. Эту величину можно представить в системе с основанием q в виде полинома,
преобразованного по формуле Горнера:
T(10) = (∙∙∙((bm q + bm-1) q + bm-2) q + ∙∙∙ +b1) q + b0,
где bi , i  0, m – цифры числа в системе с основанием q. Задача перевода заключается в вычислении этих цифр.
12
Из записи полинома видно, что младшая из искомых цифр может быть
вычислена как остаток от целочисленного деления заданного числа на основание q, поскольку это число и искомые цифры являются целочисленными величинами. В то же время частное от этого деления – коэффициент
перед q, заключенный во внешние скобки. Вычислив остаток от целочисленного деления частного на q, получаем следующую цифру числа и т.д.
Вычисления продолжаются до тех пор, пока очередное частное не станет
равно 0.
Например, перевод числа 9610 в систему с основанием 5:
96 | 5
5
19 | 5
46 15 3
45
4
1 (младшая цифра)
Простой способ перевода чисел из системы с основанием 10 в систему с основанием 2. Идея этого способа заключается в использовании
весов двоичных разрядов, выраженных в десятичной системе счисления.
Вес разряда равен основанию системы счисления, т.е. 2, возведенному в
степень, равную номеру разряда. Заполним вспомогательную таблицу:
Номер
разряда
8
7
6
5
4
3
2
1
0
Вес
разряда
256
128
64
32
16
8
4
2
1
Допустим, требуется перевести некоторое десятичное число в двоичную систему. Находим в таблице наибольший вес, значение которого
меньше или равно заданному числу. В соответствующий разряд двоичного
числа помещаем 1. Вычитаем из исходного числа выбранный вес, для разности повторяем те же действия. И так до тех пор, пока очередное значение разности не станет равно 0. В незаполненные единицами разряды двоичного представления записываем 0. Перевод завершен.
Например, перевести 34510 в двоичную систему счисления. Первый
подходящий вес – 256. В 8-й разряд записываем 1, вычисляем разность 345
– 256 = 89. Следующий подходящий вес – 64. В 6-й разряд – 1, разность 25.
Далее вес – 16, разряд – 4, разность – 9. Следующий вес – 8, разряд – 3,
разность – 1. Последний вес – 1, разряд – 0, разность – 0.
13
Номер разряда
Вес разряда
Заполнение
ницами
еди-
Двоичное число
8
7
6
5
4
3
2
1
0
256
128
64
32
16
8
4
2
1
1
1
1
1
1
1
1
0
1
0
1
0
0
1
счисления
с
основаниями,
равными
2 , где d  2  целое . Целые положительные числа хранятся в памяти компьютера в двоичном формате, полностью совпадающим с представлением числа в двоичной системе счисления. Для перевода числа из
d
двоичной системы в систему с основанием 2 достаточно разбить последовательность двоичных разрядов на группы по d двоичных цифр и обозначить каждую группу соответствующей цифрой новой системы счисления. Разбиение производится в направлении от младших разрядов к старd
шим. Перевод из системы с основанием 2 в двоичную заключается в последовательной записи групп двоичных разрядов для каждой 16-ричной
цифры. Ниже приведена таблица соответствия для 8- и 16-ричной систем
счисления:
d
Системы
Группа двоичных
разрядов
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
1101
1110
1111
8-ричная цифра
(число)
0
1
2
3
4
5
6
7
10
11
12
13
14
15
16
17
16-ричная
цифра
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
Десятичное
число
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
14
Пример 1. Пусть задано число 011100101000100100 2 . Его нужно
перевести в систему с основанием 16  2 . Разобьем последовательность
двоичных разрядов на группы по 4 и обозначим каждую группу соответствующей цифрой 16-ричной системы счисления:
4
01 1100 1010 0010 0100
1
C
A
2
4
Получили 011100101000100100 2  1CA2416 .
Пример 2. Число 365708 перевести в двоичную систему счисления. Поскольку 8 = 23, для каждой цифры исходного числа запишем соответствующую последовательность из трех двоичных цифр:
3
011
6
110
5
101
7
111
0
000
Получили 365708 = 111101011110002, 0 в старшем разряде является
незначащим.
A1 (1 мин)
Сколько единиц в двоичной записи числа 255?
1) 1
2) 2
3) 7
4) 8
РЕШЕНИЕ
Воспользуемся таблицей с весами двоичных разрядов, выраженных в
десятичной системе счисления:
Номер разряда
Вес разряда
Заполнение
единицами
Двоичное число
Ответ: 4.
В7 (2 мин)
7
128
6
64
5
32
4
16
3
8
2
4
1
2
0
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
15
Запись десятичного числа в системах счисления с основаниями 3 и 5 в
обоих случаях имеет последней цифрой 0. Какое минимальное натуральное десятичное число удовлетворяет этому требованию?
Ответ: ___________________________.
РЕШЕНИЕ
Последняя цифра числа в позиционной системе счисления с основанием p вычисляется как остаток от деления десятичного эквивалента этого
числа на p. По условию требуется, чтобы при делении десятичного числа
на 3 и на 5 получался остаток 0. Другими словами, десятичное число
должно быть кратно 3 и 5. Минимальное число, удовлетворяющее этим
условиям – 15.
Ответ: 15
16
4. КОДИРОВАНИЕ ИНФОРМАЦИИ
Оперативная память компьютера состоит из элементов, которые могут
находиться только в одном из двух состояний: включено – выключено,
да – нет, 1 – 0. Поэтому информацию, которую требуется сохранить в памяти, предварительно нужно закодировать двоичным кодом. Для каждого
вида информации (числа, символы, команды) применяются свои правила
кодирования.
В зависимости от применяемого способа кодирования внутреннее (в
оперативной памяти) представление информации может иметь разную
длину.
Может потребоваться кодировать информацию не двоичным, а какимлибо другим кодом, который используется в памяти вычислительного
устройства.
Нужно уметь определять длину закодированного сообщения или вычислять минимальную длину кода для одного элемента данных. Эти вычисления базируются на определенном соотношении.
Введем обозначения:
S – число возможных состояний одного разряда кода. Для памяти компьютера S=2;
D – минимальная длина кода, достаточное количество разрядов кода
для кодирования некоторого набора значений данных. Например,
для кодирования символов в памяти компьютера применяются
значения D, равные 8 (набор кодов ASCII) или 16 (набор
кодов Unicode);
N – количество разных кодов, которые можно получить при заданных
S и D.
Между этими величинами выполняется соотношение: N = SD. Оно является основой для вычислений.
Например, нужно закодировать набор из 100 разных значений с помощью устройств, которые могут находиться в трех разных состояниях. Значит, известно, что N=100, S=3. Требуется найти такое D, чтобы общая длина закодированного сообщения была минимальной.
Преобразуем соотношение таким образом, чтобы выразить неизвестную величину: D = logS N. Поскольку количество разрядов должно быть
целым, следует округлить вычисленное значение до ближайшего целого
сверху. Итак, D = log3 100 → 5.
17
A9 (2 мин)
Для кодирования некоторой последовательности, состоящей из букв А, Б,
В, Г и Д, используется неравномерный двоичный код, позволяющий однозначно декодировать двоичную последовательность. Вот этот код: А – 00,
Б – 01, В – 100, Г – 101, Д – 110. Можно ли сократить для одной из букв
длину кодового слова так, чтобы код по-прежнему можно было декодировать однозначно? Коды остальных букв меняться не должны.
Выберите правильный вариант ответа.
1) для буквы Д – 11
2) это невозможно
3) для буквы Г – 10
4) для буквы Д – 10
РЕШЕНИЕ
При неравномерном кодировании важную роль играет первый символ
кода – по его значению может быть вычислена длина кода. Например, в
данном задании код, начинающийся с 0, имеет длину 2, что позволяет однозначно декодировать последовательность.
Допустим, что первый символ кода, равный 1, позволяет использовать
как код длиной 3, так и код длиной 2. Можно ли будет определить при декодировании, какую длину кода следует использовать?
Для решения этого вопроса рассмотрим второй символ кода. Заметим,
что если второй символ кода равен 0, то длина кода должна быть равна 3,
иначе буквы В и Г невозможно однозначно декодировать. Если второй
символ кода равен 1, то длину кода можно считать равной 2. Коды будут
различными, что позволит выполнить однозначное декодирование.
Ответ: 1.
A11 (3 мин)
В некоторой стране автомобильный номер длиной 5 символов составляют
из заглавных букв (задействовано 30 различных букв) и любых десятичных
цифр в любом порядке. Каждый такой номер в компьютерной программе
записывается минимально возможным и одинаковым целым количеством
байт (при этом используют посимвольное кодирование и все символы кодируются одинаковым и минимально возможным количеством бит).
18
Определите объём памяти, отводимый этой программой для записи 50 номеров.
1) 100 байт
2) 150 байт
3) 200 байт
4) 250 байт
РЕШЕНИЕ
1. Для составления номера используются 30 + 10 = 40 разных символов. Каждый символ кодируется двоичным кодом. Применим соотношение: N = SD. Здесь N = 40, S=2. Следовательно, D = 6, т.е.
длина кода каждого символа номера равна 6.
2. Номер содержит 5 символов, значит длина двоичного кода номера
6 * 5 = 30 бит. Поскольку номер записывается целым количеством
байтов, то вычисляем 30 div 8 = 3 и еще один не полностью заполненный байт. Итак, для записи одного номера требуется 4 байта, а
для 50 номеров – 4 * 50 = 200 байт.
Ответ: 3.
B4 (2 мин)
Азбука Морзе позволяет кодировать символы для сообщений по радиосвязи, задавая комбинацию точек и тире. Сколько различных символов (цифр,
букв, знаков пунктуации и т. д.) можно закодировать, используя код азбуки
Морзе длиной не менее четырёх и не более пяти сигналов (точек и тире)?
Ответ: ___________________________.
РЕШЕНИЕ
Применим соотношение N = SD. Здесь S=2 (точка и тире), D=4 и D=5.
Вычислим N = 24 + 25 = 48.
Ответ: 48.
19
5. ИНФОРМАЦИОННЫЕ ТЕХНОЛОГИИ
В заданиях, относящихся к этой теме, требуется умение работать в
приложениях операционной системы с электронными таблицами, базами
данных, электронными изображениями и звуками, создавать Webстраницы, выполнять операции с файлами.
A4 (1 мин)
Для групповых операций с файлами используются маски имён файлов. Маска представляет собой последовательность букв, цифр и прочих
допустимых в именах файлов символов, в которой также могут встречаться следующие символы.
Символ «?» (вопросительный знак) означает ровно один произвольный
символ.
Символ «*» (звёздочка) означает любую последовательность символов
произвольной длины, в том числе «*» может задавать и пустую последовательность.
В каталоге находятся 6 файлов:
asc.wma
casting.wmv
last.wma
pasta.wmvx
pasta.wri
vast.wma
Определите, по какой из перечисленных масок из этих 6 файлов будет
отобрана указанная группа файлов:
casting.wmv
last.wma
pasta.wmvx
vast.wma
1) ?as*.wm?
2) *as?.wm*
3) ?as*.wm*
4) ?as*.w*
РЕШЕНИЕ
1. Символ «?» в конце маски означает, что после символов «wm» должен быть один и только один символ. Значит, ответ 1) неверный.
20
2. Символ «*» в начале маски означает, что перед символом «a» может
быть любая, в том числе, пустая последовательность символов. Значит,
ответ 2) неверный.
3. Символ «?» в начале маски означает, что перед символом «a» должен быть один символ. Символ «*» перед точкой означает, что в имени
файла после «as» может быть любая последовательность символов. Символ «*» в конце маски означает, что после «wm» может быть любая последовательность символов. По совокупности этих признаков будут отобраны
указанные файлы. Ответ 3) верный.
4. Символ «*» в конце маски означает, что после «w» может быть любая последовательность символов. Ответ 4) неверный.
Ответ: 3.
A6 (3 мин)
Ниже представлены две таблицы из базы данных. Каждая строка таблицы 2 содержит информацию о ребёнке и об одном из его родителей. Информация представлена значением поля ID в соответствующей строке таблицы 1. Определите на основании приведённых данных фамилию и инициалы внучки Петровой С.М.
Таблица 1
ID Фамилия_И.О.
25
Жвания К.Г.
49
Черняк А.П.
62
Петрова М.Н.
76
Ильченко Т.В.
82
Петрова С.М.
96
Басис В.В.
102 Ильченко В.И.
123 Павлыш Н.П.
134 Черняк П.Р.
...
1) Басис В.В.
РЕШЕНИЕ
Пол
Ж
М
Ж
Ж
Ж
Ж
М
Ж
М
Таблица 2
ID_Родителя
25
76
76
82
82
102
102
134
134
...
2) Ильченко Т.В.
3) Павлыш Н.П.
ID_Ребенка
134
49
123
76
96
76
96
49
123
...
4) Петрова М.Н.
21
По таблице 1 определяем ID Петровой С.М. – 82.
Из таблицы 2 узнаем, что дети Петровой С.М. имеют ID 76 и 96.
Из таблицы 2 узнаем, что у ID 76 дети имеют ID 49 и 123.
По таблице 1 определяем, что ID 49 – мужчина, а ID 123 – женщина. Это внучка Петровой С.М., ее фамилия Павлыш Н.П.
5. Информация о детях ID 123, т.е. о других внуках Петровой С.М.,
в таблице 2 отсутствует.
1.
2.
3.
4.
Ответ: 3.
A7 (3 мин)
Дан фрагмент электронной таблицы.
A
B
1
1
2
2
5
4
3
6
7
C
3
=$A$2+B$3
=A3+B3
D
Чему станет равным значение ячейки D1, если в нее скопировать формулу
из ячейки C2?
Примечание: знак $ используется для обозначения абсолютной адресации.
1) 18
2) 12
3) 14
4) 17
РЕШЕНИЕ
Адрес ячейки электронной таблицы записывается в виде
ИмястолбцаНомерстроки
Такая адресация называется относительной. При копировании формул
из одной ячейки в другую относительные адреса в формулах пересчитываются, т.е. настраиваются на новую ячейку относительно старой.
Например, если бы выполнялось копирование формулы =A3+B3 из ячейки
C3 в ячейку D1, то были бы произведены 2 пересчета.
1. От столбца C до столбца D расстояние равно +1 столбцу. Значит, в
формуле имена столбцов A и B заменились бы на B и C, соответственно.
2. От строки 3 до строки 1 расстояние равно (-2). Значит, в формуле 3
заменилось бы на 1.
22
Для записи формулы, в которой не следует изменять адрес ячейки при
копировании, применяется абсолютная адресация
$Имястолбца$Номерстроки
И, наконец, возможно смешение относительной и абсолютной адресации. Например, в формуле =$E2 при копировании будет пересчитываться
только номер строки, а в формуле =E$2 – только имя столбца.
В задании формула =$A$2+B$3 содержит абсолютный адрес столбца A,
относительный адрес столбца B и абсолютные адреса строк. Следовательно, после копирования формула примет вид =$A$2+С$3. Числовое значение в ячейке D1 будет равно 5+6+7=18. Отсюда видно, что верный ответ 1).
Ответ: 1.
A8 (2 мин)
Производится одноканальная (моно) цифровая звукозапись. Значение сигнала фиксируется 48 000 раз в секунду, для записи каждого значения используется 32 бит. Запись длится 4 минуты, её результаты записываются в
файл, сжатия данных не производится. Какая из приведённых ниже величин наиболее близка к размеру полученного файла?
1) 44 Мбайт
2) 87 Мбайт
3) 125 Мбайт
4) 175 Мбайт
Частота дискретизации (или частота семплирования, англ. sample
rate) — частота взятия отсчетов непрерывного во времени сигнала при его
дискретизации (Википедия).
Разрешение звукового сигнала – длина кода звука, длина кода одного
отсчета сигнала.
РЕШЕНИЕ
При звукозаписи 48000 раз в секунду поступают 32 бита (4 байта) информации. Следовательно, размер файла в Мбайтах с 4-минутной записью
звука можно рассчитать по формуле:
4 * 48000 * 60 * 4 / 220 = 22 * 24 * 3 * 103 * 2 * 3 *10 * 22 / 220 =
= 32 * 104 / 211 = 9 * 10000 / 2048 ≈ 100000 / 2000 = 50.
Наиболее близок ответ 1).
23
Ответ: 1.
В3 (2 мин)
Дан фрагмент электронной таблицы:
A
B
2
4
1
= (B1-A1)/2
= 2 – A1/2
2
C
3
= (C1 – A1)*2 – 4
Какое целое число должно быть записано в ячейке C1, чтобы построенная
после выполнения вычислений диаграмма по значениям диапазона ячеек
A2 : C2 соответствовала рисунку?
Известно, что все значения диапазона,
по которым построена диаграмма,
имеют один и тот же знак.
Ответ: ___________________________.
РЕШЕНИЕ
Судя по диаграмме, в двух клетках указанного диапазона должны
находиться одинаковые значения. В третьей клетке значение должно быть
равно сумме значений этих двух клеток.
В клетках А2, В2 и С2 заданы формулы, в которых указаны адреса ячеек с известными значениями. Вычисление этих формул дает следующие
результаты: А2 = 1; В2 = 1; С2 = –2. Судя по диаграмме, С2 должно быть
равно 2. Значит, значение в ячейке C1 можно вычислить из соотношения
(C1 – A1)*2 – 4 =2, т.е. C1 = (2 + 4)/2 +2 = 5.
Ответ: 5.
В9 (3 мин)
На рисунке – схема дорог, связывающих города А, Б, В, Г, Д, Е, Ж, И, К, Л.
По каждой дороге можно двигаться только в одном направлении, указан-
24
ном стрелкой. Сколько существует различных путей из города А в город Л?
Ответ: ___________________________.
РЕШЕНИЕ
Вариант 1. Выпишем различные пути:
АБДИЛ
АБДЖЛ
АБВЖЛ
АВДИЛ
АГВДИЛ
АГВДЖЛ
АГЕКЛ
Всего 13 путей.
АБВДИЛ
АВДЖЛ
АГВЖЛ
АБВДЖЛ
АВЖЛ
АГЕЖЛ
Вариант 2. Определим количество путей для каждой вершины, двигаясь от конечного города пути к начальному городу.
2+3=5
2
1
1
2+1=3
5+3+5=15
3+2=5
2
1
25
Ответ: 13.
B10 (4 мин)
Документ объёмом 20 Мбайт можно передать с одного компьютера на другой двумя способами.
А. Сжать архиватором, передать архив по каналу связи, распаковать.
Б. Передать по каналу связи без использования архиватора.
Какой способ быстрее и насколько, если:
 средняя скорость передачи данных по каналу связи составляет 220
бит в секунду;
 объём сжатого архиватором документа равен 20% исходного;
 время, требуемое на сжатие документа, – 5 секунд, на распаковку –
1 секунда?
В ответе напишите букву А, если быстрее способ А, или Б, если быстрее
способ Б. Сразу после буквы напишите число, обозначающее, на сколько
секунд один способ быстрее другого.
Так, например, если способ Б быстрее способа А на 23 секунды, в ответе
нужно написать Б23.
Единиц измерения «секунд», «сек.», «с.» к ответу добавлять не нужно.
Ответ: ___________________________.
РЕШЕНИЕ
Рассчитаем время передачи документа способом А.
 Объем заархивированного документа: 20 * 20 / 100 = 4 Мб.
 Время
передачи
заархивированного
документа:
20
20
4 * 2 * 8 / 2 = 32 сек.
 Общее время передачи документа способом А: 5 + 32 + 1 = 38 сек.
Время передачи документа способом Б: 20 * 220 * 8 / 220 = 160 сек.
Итак, передача документа способом А быстрее на 122 секунды.
Ответ: А122
B11 (2 мин)
26
В терминологии сетей TCP/IP маской сети называется двоичное число,
определяющее, какая часть IP-адреса узла сети относится к адресу сети, а
какая — к адресу самого узла в этой сети. Обычно маска записывается по
тем же правилам, что и IP-адрес. Адрес сети получается в результате применения поразрядной конъюнкции к заданному IP-адресу узла и маске.
По заданным IP-адресу узла и маске определите адрес сети.
IP –адрес узла: 217.19.128.131
Маска: 255.255.192.0
При записи ответа выберите из приведенных в таблице чисел четыре
элемента IP-адреса и запишите в нужном порядке соответствующие им
буквы, без использования точек.
A
0
B
16
C
19
D
64
E
128
F
131
G
192
H
217
G
17
H
192
Пример.
Пусть искомый IP-адрес 192.168.128.0, и дана таблица
A
128
B
168
C
255
D
8
E
127
F
0
В этом случае правильный ответ будет записан в виде: HBAF
Ответ: ___________________________.
РЕШЕНИЕ
1. Первые 2 числа в IP-адресе сети 217 и 19.
2. Последнее число 0.
3. Третье число – результат поразрядной конъюнкции 128 и 192:
128
128
192
128
1
1
1
Ответ: HCEA
B12 (2 мин)
Веса разрядов
64
32
16
8
4
Двоичное представление чисел
0
0
0
0
0
1
0
0
0
0
0
0
0
0
0
2
1
0
0
0
0
0
0
27
В языке запросов поискового сервера для обозначения логической операции «ИЛИ» используется символ «|», а для логической операции «И» –
символ «&».
В таблице приведены запросы и количество найденных по ним страниц
некоторого сегмента сети Интернет.
Запрос
Фрегат | Эсминец
Фрегат & Эсминец
Фрегат
Найдено страниц
(в тысячах)
3400
900
2100
Какое количество страниц (в тысячах) будет найдено по запросу Эсминец?
Считается, что все запросы выполнялись практически одновременно, так
что набор страниц, содержащих все искомые слова, не изменялся за время
выполнения запросов.
Ответ: ___________________________.
РЕШЕНИЕ
Проиллюстрируем идею решения с помощью диаграмм Венна:
Фрегат
Эсминец
Овальная область, заштрихованная горизонтальными линиями, относится к множеству документов, содержащих сведения о фрегате. Область,
заштрихованная вертикальными линиями, относится к множеству документов, содержащих сведения об эсминце. Всего документов о фрегате или
об эсминце 3400. Область, заштрихованная пересекающимися линиями,
относится к множеству документов, содержащих сведения и о фрегате, и
28
об эсминце, таких документов 900. Если из 3400 вычесть количество документов о фрегате и добавить к разности количество документов со сведениями и о фрегате, и об эсминце, то получится количество документов об
эсминце: 3400 – 2100 + 900 = 2200.
Ответ: 2200
29
6. АНАЛИЗ АЛГОРИТМОВ
В заданиях предложены фрагменты программ для конкретных исполнителей: компьютера или некоего робота. Для ответа на тестовый вопрос
требуется выполнить эти программы, так сказать, вручную. Рекомендуется
начертить таблицу, в которой будут фиксироваться постепенно изменяющиеся значения переменных, или сделать поясняющий рисунок.
A12 (5 мин)
В программе описан одномерный целочисленный массив A с индексами от
0 до 10. Ниже представлен фрагмент этой программы, записанный на разных языках программирования, в котором значения элементов сначала задаются, а затем меняются.
Бейсик
FOR i=0 TO 10
A(i) = i-1
NEXT i
FOR i = 1 TO 10
A(i-1) = A(i)
NEXT i
A(10) = 10
Си
for (i=0;i<=10;i++)
A[i] = i-1;
for (i=1;i<=10;i++)
A[i-1] = A[i];
A[10] = 10;
Паскаль
for i:=0 to 10 do
A[i] := i-1;
for i:=1 to 10 do
A[i-1] := A[i];
A[10] := 10;
Алгоритмический язык
нц для i от 0 до 10
A[i]:= i-1
кц
нц для i от 1 до 10
A[i-1] := A[i]
A[10] := 10
Как изменятся элементы этого массива после выполнения фрагмента
программы?
30
1) все элементы, кроме последнего, окажутся равны между собой
2) все элементы окажутся равны своим индексам
3) все элементы, кроме последнего, будут сдвинуты на один элемент вправо
4) все элементы, кроме последнего, уменьшатся на единицу
РЕШЕНИЕ
В первом цикле массив заполняется значениями от -1 до 9.
Работу второго цикла проиллюстрируем на таблице с последовательностью преобразований:
i
номер
1
2
3
4
…
10
0
-1
0
1
0
2
1
3
2
4
3
Массив
5
6
4
5
7
6
8
7
9
8
10
9
8
…
9
9
10
1
2
3
…
…
0
1
2
3
…
4
5
6
7
Ответ: 2.
A13 (6 мин)
Система команд исполнителя РОБОТ, «живущего» в прямоугольном лабиринте на клетчатой плоскости, включает в себя 4 команды-приказа и 4 команды проверки условия.
Команды-приказы:
вверх
вниз
влево
вправо
При выполнении любой из этих команд РОБОТ перемещается на одну
клетку соответственно: вверх ↑, вниз ↓, влево ←, вправо →.
Если РОБОТ начнёт движение в сторону находящейся рядом с ним стены,
то он разрушится, и программа прервётся.
Другие четыре команды проверяют истинность условия отсутствия стены у
каждой стороны той клетки, где находится РОБОТ:
31
сверху свободно снизу свободно
слева свободно
справа свободно
Цикл
ПОКА < условие >
последовательность команд
КОНЕЦ ПОКА
выполняется, пока условие истинно.
В конструкции
ЕСЛИ условие
ТО команда1
ИНАЧЕ команда2
КОНЕЦ ЕСЛИ
выполняется команда1 (если условие истинно) или команда2 (если условие
ложно).
Сколько клеток лабиринта соответствуют требованию, что, начав движение в ней и выполнив предложенную программу, РОБОТ уцелеет и остановится в закрашенной клетке (клетка А1)?
НАЧАЛО
ПОКА слева свободно ИЛИ сверху свободно
ЕСЛИ слева свободно
ТО влево
ИНАЧЕ вверх
КОНЕЦ ЕСЛИ
КОНЕЦ ПОКА
КОНЕЦ
1
2
3
4
5
6
A B C D E F
1) 8
2) 12
3) 17
4) 21
РЕШЕНИЕ
1. Цикл завершается, когда РОБОТ попадает в клетку с левой и верхней стеной. В частности, если он начинает проход с клетки А1, то в
ней сразу и остановится. Таким образом, одна клетка найдена.
32
По той же причине попадание РОБОТА в клетки E1 или B3 не позволит ему дальше двигаться.
х
1
2
3
4
5
6
х
A B C D E F
2. По последовательности клеток с левой стеной РОБОТ может двигаться только вверх. Следовательно, из B4 и B5 он неминуемо попадет в запрещенную клетку.
х
1
2
3
4
5
6
х
х
х
A B C D E F
3. В соответствии с условным оператором движение РОБОТА может
происходить только влево или вверх, причем направление движения изменяется только при возникновении или исчезновении левой
стены в очередной клетке по сравнению с предыдущей клеткой.
Проверим такие клетки.
Из F1, C3, C4 и C5 РОБОТ сразу попадет в запрещенную клетку.
Следовательно, и клетки D3, D4, E4, F4 и D5 тоже запрещены.
х х
1
2
3
4
5
6
х х х
х х х х х
х х х
A B C D E F
33
4. Из E5 РОБОТ попадет в запрещенную клетку. Следовательно, и
клетка F5 тоже запрещена.
х х
1
2
3
4
5
6
х х х
х х х х х
х х х х х
A B C D E F
Итак, найдено 15 запрещенных клеток. Значит, можно начинать движение РОБОТА с 36 –15=21 клетки. Правильный ответ 4).
Ответ: 4.
B2 (2 мин)
Определите значение переменной c после выполнения следующего
фрагмента программы (записанного ниже на разных языках программирования). Ответ запишите в виде целого числа.
Бейсик
a = 30
b = 14
a= a-2*b
IF a > b THEN
c=b+2*a
ELSE
c=b-2*a
END IF
Си
a = 30;
b = 14;
b = a - 2 * b;
if (a > b)
c = b + 2 * a;
else
c = b - 2 * a;
Паскаль
a := 30;
b := 14;
b := a - 2 * b;
if a > b then
c := b + 2 * a
else
c := b - 2 * a;
Алгоритмический язык
a := 30
b := 14
b := a - 2 * b
если a > b
то c := b + 2 * a
иначе c := b - 2 * a
все
34
Ответ: ___________________________.
РЕШЕНИЕ
Отобразим в таблице последовательные изменения значений переменных:
a
b
c
30
14
2
10
Ответ: 10
B5 (3 мин)
Определите, что будет напечатано в результате выполнения программы
(записанной ниже на разных языках программирования):
Бейсик
DIM N, S AS INTEGER
N=0
S=0
WHILE s <= 35
N=N+1
S=S+4
WEND
PRINT N
Си
#include<stdio.h>
void main()
{
int n, s;
n = 0;
s = 0;
Паскаль
Var n, s : integer;
BEGIN
n := 0;
s := 0;
while s<=35 do
begin
n := n+1;
s := s+1;
end;
write(n);
END.
Алгоритмический язык
нач
цел n, s
n := 0
s := 0
нц пока s <= 35
n := n+1
35
while (s<=35) {
n = n+1;
s = s+4;
}
printf("%d", n);
s := s+4
кц
вывод n
кон
}
Ответ: ___________________________.
РЕШЕНИЕ
Отобразим в таблице последовательные изменения значений переменных и выражений:
n
0
1
2
3
4
5
6
7
8
9
s
0
4
8
12
16
20
24
28
32
36
s<=35
да
да
да
да
да
да
да
да
да
нет
Ответ: 9
В6 (2 мин)
Алгоритм вычисления значения функции F(n), где n – натуральное число,
задан следующими соотношениями:
F(1) = 1
F(n) = F(n–1) * n, при n >1
Чему равно значение функции F(5)?
В ответе запишите только натуральное число.
Ответ: ___________________________.
36
РЕШЕНИЕ
Отобразим в таблице последовательность вычислений:
n
1
2
3
4
5
F(n)
1
2
6
24
120
Ответ: 120
В8 (5 мин)
Ниже на 4-х языках записан алгоритм. Получив на вход число x, этот
алгоритм печатает два числа a и b. Укажите наименьшее из таких чисел x,
при вводе которых алгоритм печатает сначала 2, а потом 21.
Бейсик
DIM X, A, B AS INTEGER
INPUT X
A=0: B=1
WHILE X > 0
A = A+1
B = B * (X MOD 10)
X = X \ 10
WEND
PRINT A
PRINT B
Си
#include<stdio.h>
void main()
{
int x, a, b;
scanf("%d", &x);
a=0; b=1;
Паскаль
var x, a, b: integer;
begin
readln(x);
a := 0; b := 1;
while x>0 do
begin
a := a+1;
b := b * (x mod 10);
x := x div 10;
end;
writeln(a); write(b);
end.
Алгоритмический язык
алг
нач
цел x, a, b
ввод x
a := 0; b := 1
нц пока x>0
37
while (x>0) {
a=a+1;
b = b * (x % 10);
x= x/10;
}
printf("%d\n%d", a, b);
a := a+1
b := b * mod(x,10)
x := div(x,10)
кц
вывод a, нс, b
кон
}
Ответ: ___________________________.
РЕШЕНИЕ
1. Для того чтобы a стало равным 2, цикл должен проработать 2 раза.
2. На каждом шаге цикла выполняется оператор x := x div 10,
x уменьшается в 10 раз.
3. Последнее значение x должно получиться равным 0, чтобы цикл завершился. Значит, исходное значение x должно быть двухзначным
числом.
4. По завершении цикла переменная b должна стать равной 21. Значение b вычисляется как произведение предыдущего значения и
остатка от деления x на 10. На первом шаге цикла b равна последней цифре в x, на втором шаге b умножается на предпоследнюю
цифру x.
5. У числа 21 имеется 2 простых делителя: 3 и 7. Наименьшее число,
составленное из этих цифр – 37.
Ответ: 37
В13 (7 мин)
У исполнителя Удвоитель две команды:
1. прибавь 1,
2. умножь на 2.
Первая из них увеличивает на 1 число на экране, вторая – удваивает его.
Программа для Удвоителя – это последовательность команд.
Сколько есть программ, которые число 3 преобразуют в число 23?
Ответ: ___________________________.
РЕШЕНИЕ
38
Пусть T(n) – число программ, с помощью которых можно получить
значение n из числа 3. Очевидно, T(3) = 0; T(4) = T(5) = 1. Число 6 можно
получить уже двумя способами за счет использования команды умножь на
2.
Заметим, что для нечетных значений n>6 выполняется равенство
T(n) = T(n-1), поскольку от n-1 до n в программах можно добраться только
с помощью команды прибавь 1.
Если n>6 четное, то появляются дополнительные варианты программ,
основанные на том, что до значения n можно добраться и командой
умножь на 2. Следовательно, будет выполняться равенство
T(n) = T(n-1) + T(n div 2)
Мы получили рекуррентное соотношение, которое позволит вычислить
число нужных нам программ для n = 23.
C(7) = C(6) = 2;
C(8) = C(7) + C(4) = 3;
C(9) = C(8) = 3;
C(10) = C(9) + C(5) = 4;
C(11) = C(10) = 4;
C(12) = C(11) + C(6) = 6;
C(13) = C(12) = 6;
C(14) = C(13) + C(7) = 8;
C(15) = C(14) = 8;
C(16) = C(15) + C(8) = 11;
C(17) = C(16) = 11;
C(18) = C(17) + C(9) = 14;
C(19) = C(18) = 14;
C(20) = C(19) + C(10) = 18;
C(21) = C(20) = 18;
C(22) = C(21) + C(11) = 22;
C(23) = C(22) = 22.
Ответ: 22
В14 (6 мин)
Определите, какое число будет напечатано в результате выполнения
следующего алгоритма (для Вашего удобства алгоритм представлен на
четырех языках):
39
Бейсик
DIM A, B, T, M, R AS INTEGER
A = -20: B = 20
M = A: R = F(A)
FOR T = A TO B
IF F(T) < R THEN
M=T
R = F(T)
END IF
NEXT T
PRINT M
FUNCTION F (x)
F = 3 * (x - 8) * (x - 8)
END FUNCTION
Си
int F(int x)
{
return 3*(x-8)*(x-8);
}
void main()
{
int a, b, t, M, R;
a = -20; b = 20;
M = a; R = F(a);
for (t=a; t<=b; t++){
if ( F(t)<R ) {
M = t; R = F(t);
}
}
printf("%d", M);
}
Паскаль
var a,b,t,M,R :integer;
Function F(x:integer):integer;
begin
F := 3*(x-8)*(x-8);
end;
BEGIN
a := -20; b := 20;
M := a; R := F(a);
for t := a to b do
begin
if (F(t)<R)then begin
M := t;
R := F(t);
end;
end;
write(M);
END.
Алгоритмический язык
алг
нач
цел a, b, t, M, R
a := -20; b := 20
M := a; R:= F(a)
нц для t от a до b
если F(t)< R
то
M := t; R := F(t)
все
кц
вывод M
кон
алг цел F(цел x)
нач
знач := 3*(x-8)*(x-8)
кон
40
Ответ: ___________________________.
РЕШЕНИЕ
Любой алгоритм может быть представлен как основная программа со
вспомогательными алгоритмами.
Вспомогательный алгоритм оформляется в виде ПРОЦЕДУРЫ или
ФУНКЦИИ. Он может располагаться в одном файле с основной программой или в отдельном файле.
Если результатом работы вспомогательного алгоритма является ОДНО
значение, то такой вспомогательный алгорим можно оформить как
ФУНКЦИЮ. ЛЮБОЙ вспомогательный алгоритм можно оформить как
ПРОЦЕДУРУ.
Для того чтобы вспомогательный алгоримт выполнился, к нему нужно
обратиться, его нужно вызвать.
Для передачи информации из основной программы в процедуру или
функцию и для возвращения результатов в основную программу используются ПАРАМЕТРЫ.
Переменные, которые описываются в заголовке вспомогательного алгоритма, называются ФОРМАЛЬНЫМИ параметрами. Переменные, которые
указываются при вызове вспомогательного алгоритма, называются
ФАКТИЧЕСКИМИ параметрами. Фактические параметры – это переменные, описанные в основной программе.
В задании используется вспомогательный алгоритм – функция. Ее имя
F, один параметр x. Функция получает на вход значение (оно обозначено
формальным параметром x) и вычисляет величину F = 3*(x-8)*(x-8). Это
запись квадратичной зависимости результата от входной величины.
В основной программе обращение к этой функции выполняется однократно в операторе R := F(a) и многократно в цикле в операторе R := F(t).
При каждом обращении к функции происходит замена формального
параметра на фактический параметр, и, таким образом, вычисления производятся с использованием конкретных значений. Например, в операторе
R := F(a) будет вычислено значение функции 3 * (–20 – 8) * (–20 – 8).
Значения, вычисляемые в цикле в операторе R := F(t), будут разными,
поскольку изменяется значение фактического параметра t. Переменная t
является параметром цикла for с границами от –20 до 20. На рисунке показаны некоторые точки графика заданной квадратичной зависимости:
41
Отобразим в таблице последовательные изменения значений переменных и выражений. Значения функции можно не вычислять, а проводить
сравнения с помощью графика:
M
–20
t
F(t)
–20
–19
F(–20)
F(–19)
–18
F(–18)
–19
R
F(–20)
F(t) < R
нет
да
F(–19)
–18
да
F(–18)
Условие F(t) < R станет ложным, когда функция начнет возрастать.
Минимум функции в точке 8.
F(7)
8
да
F(8)
F(8)
8
9
F(9)
нет
42
Ответ: 8
C1 (30 мин)
Требовалось написать программу, при выполнении которой с клавиатуры считывается координата точки на прямой (x – действительное число) и определяется принадлежность этой точки одному из выделенных
отрезков B и D (включая границы).
Программист торопился и написал программу неправильно.
Бейсик
INPUT x
IF x >= -3 THEN
IF x <= 9 THEN
IF x>1 THEN
PRINT "не принадлежит"
ELSE
PRINT "принадлежит"
ENDIF
ENDIF
ENDIF
END
Си
void main(void){
float x;
scanf("% f ",&x);
if (x>= -3)
if (x<= 9)
if (x>1)
printf("не принадлежит");
else
printf("принадлежит");
}
Паскаль
var x: real;
begin
readln(x);
if x>= -3 then
if x<= 9 then
if x>1 then
write('не принадлежит')
else
write('принадлежит')
end.
Алгоритмический язык
алг
нач
вещ x
ввод x
если x>= -3 то
если x>= 9 то
если x>1 то
вывод 'не принадлежит'
иначе
43
вывод 'принадлежит'
все
все
все
кон
Последовательно выполните следующее.
1. Перерисуйте и заполните таблицу, которая показывает, как работает
программа при аргументах, принадлежащих различным областям (A, B, C,
D и E). Границы (точки –3, 1, 5 и 9) принадлежат заштрихованным областям (B и D соответственно).
Область
Условие 1
(x >= -3)
Условие 2
(x <= 9)
Условие 3
(x > 1)
Программа
выведет
Область обрабатывается
верно
A
B
C
D
E
В столбцах условий укажите "Да", если условие выполнится; "Нет" если
условие не выполнится; "—" (прочерк), если условие не будет проверяться;
«не изв.», если программа ведет себя по-разному для разных значений,
принадлежащих данной области. В столбце "Программа выведет" укажите,
что программа выведет на экран. Если программа ничего не выводит,
напишите "—" (прочерк). Если для разных значений, принадлежащих области, будут выведены разные тексты, напишите «не изв». В последнем
столбце укажите "Да" или "Нет".
2. Укажите, как нужно доработать программу, чтобы не было случаев ее
неправильной работы. (Это можно сделать несколькими способами, достаточно указать любой способ доработки исходной программы.)
РЕШЕНИЕ
44
1. Заполнение таблицы предполагает выполнение программы в уме для
точек, принадлежащих каждой отдельной области. Задано 5 областей, значит, нужно «выполнить» программу для 5 точек.
Область
A
B
C
D
E
Условие 1
(x >= -3)
Условие 2
(x <= 9)
Условие 3
(x > 1)
Программа выведет
Нет
Да
Да
Да
Да
–
Да
Да
Да
Нет
–
Нет
Да
Да
–
принадлежит
не принадлежит
не принадлежит
–
–
Область обрабатывается
верно
Нет
Да
Да
Нет
Нет
2. Лучший способ доработки программы – написать ее заново самостоятельно. Области на числовой оси лучше проверять последовательно от
меньших значений к большим.
Один из вариантов правильной программы:
var x: real;
begin
readln(x);
if ((x>= -3) and (x<=1)) or ((x>=5) and (x<=9)) then
write('принадлежит')
else write('не принадлежит')
end.
45
7. РАЗРАБОТКА АЛГОРИТМОВ
Процесс разработки алгоритма и составления программы для компьютера может быть достаточно сложным. Рекомендуется выполнять его планомерно, придерживаясь определенной последовательности действий.
0. Математическая модель. Определение соотношений между величинами, существенных для поставленной задачи, и математическая запись
этих соотношений.
1. Входные данные: отдельные переменные и массивы, типы данных,
наличие особенностей в значениях. Описание и комментирование, ввод.
2. Результаты: переменные и массивы, типы, связь между количеством входных значений и количеством результатов. Описание и комментирование, вывод.
3. Тесты: наборы входных значений, для которых известны результаты. Учет возможных особенностей во входных значениях.
4. Разработка алгоритма: создание общей схемы алгоритма как системы взаимодействующих или последовательных блоков действий, детальная проработка каждого из этих блоков. Разрешается использование
любых форм записи алгоритма. Рекомендуется там, где можно, сразу использовать алгоритмическую нотацию, т.е. операторы языка программирования.
5. Запись программы: на основе разработанного алгоритма программа
собирается из отдельных готовых фрагментов.
В задачах повышенной сложности требуется написать как можно более
эффективную программу.
Эффективность программы оценивается по уровню использования ею
ресурсов компьютера: процессорного времени и оперативной памяти.
Например, из двух программ, написанных для решения одной и той же задачи, более эффективной будет та, которая формирует результат путем
выполнения меньшего количества элементарных действий. Говорят, что
эта программа имеет большее быстродействие. Для оценки эффективности
программы определяется функция зависимости количества элементарных
действий от размера входных данных. Эту функцию называют трудоемкостью. Более эффективной является программа, обладающая меньшей
трудоемкостью.
46
Если говорить об использовании оперативной памяти, то более эффективной считается программа, хранящая в памяти только безусловно необходимую информацию.
Итак, наиболее эффективная программа потребляет меньше ресурсов.
Но обычно сэкономить одновременно на всех ресурсах не удается, поэтому нужен разумный компромисс между быстродействием и потреблением
памяти.
B2 (4 мин)
У исполнителя Арифметик две команды, которым присвоены номера:
1. прибавь 2,
2. умножь на 3.
Первая из них увеличивает число на экране на 2, вторая утраивает его.
Например, 21211 – это программа
умножь на 3
прибавь 2
умножь на 3
прибавь 2
прибавь 2,
которая преобразует число 1 в число 19.
Запишите порядок команд в программе преобразования числа 3 в число
69, содержащей не более 5 команд, указывая лишь номера команд. Если
таких программ более одной, то запишите любую из них.
Ответ: ___________________________.
РЕШЕНИЕ
Задачу удобнее решать от конца к началу. Получить в конце 69 можно
после выполнения любой из двух команд. Поскольку разрешенное количество команд ограничено, нужно выбрать ту, которая обеспечит большее
изменение: умножь на 3. Значит, предыдущее значение будет 69 / 3 = 23.
23 может получиться только после выполнения прибавь 2. 23 – 2 = 21.
Число 21 может получиться после выполнения умножь на 3. 21 / 3 = 7.
7 может получиться только после выполнения прибавь 2. 7 – 2 = 5. Первой командой должна быть прибавь 2.
Итак, нужно выполнить такую последовательность действий:
+ 2 + 2 * 3 + 2 * 3 . Их всего 5.
47
Ответ: 11212
C2 (30 мин)
Дан целочисленный массив из 30 элементов. Элементы массива могут
принимать целые значения от 0 до 100. Опишите на русском языке или на
одном из языков программирования алгоритм, позволяющий найти и вывести произведение элементов массива, которые имеют нечётное значение
и делятся на три. Гарантируется, что в исходном массиве есть хотя бы
один элемент, значение которого нечётно и кратно трем.
Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать
часть из них. Исходные данные всегда подобраны так, что результат произведения не выходит за пределы объявленных типов данных.
Паскаль
const
N = 30;
var
a: array [1..N] of longint;
i, j, p: longint;
begin
for i := 1 to N do
readln(a[i]);
…
end.
Бейсик
N = 30
DIM A(N) AS LONG
DIM I, J, P AS LONG
FOR I = 1 TO N
INPUT A(I)
NEXT I
…
END
Алгоритмический язык
алг
нач
цел N = 30
целтаб a[1:N]
цел i, j, p
нц для i от 1 до N
ввод a[i]
кц
...
кон
СИ
#include <stdio.h>
#define N 30
void main (void){
long a[N];
long i, j, p;
for (i=0; i<N; i++)
scanf("% d", &a[i]);
…
}
Русский (естественный) язык
48
Объявляем массив A из 30 элементов.
Объявляем целочисленные переменные I, J, P.
В цикле от 1 до 30 вводим элементы массива A с 1-го по 30-й.
…
В качестве ответа Вам необходимо привести фрагмент программы (или
описание алгоритма на естественном языке), который должен находиться
на месте многоточия. Вы можете записать решение также на другом языке
программирования (укажите название и используемую версию языка программирования, например, Free Pascal 2.4) или в виде блок-схемы. В этом
случае Вы должны использовать те же самые исходные данные и переменные, какие были предложены в условии (например, в образце, записанном
на естественном языке).
РЕШЕНИЕ
Основа алгоритма – определение тех элементов массива, которые имеют нечетное значение и делятся на 3. Проверка на нечетность значения:
a[i] mod 2 =1. Проверка делимости на 3: a[i] mod 3 =0. В таком случае окажется, что значение 0 делится на 3 без остатка. Однако проверка на нечетность покажет, что 0 – четное число. Следовательно, нулевые значения не
будут участвовать в умножении.
Программа на Паскале:
const
N = 30;
var
a: array[1..N] of integer;
i, j, p: integer;
begin
for i:=1 to N do readln(a[i]);
p:= 1; {начальное значение для произведения}
for i:=1 to N do
if (a[i] mod 2 = 1) and (a[i] mod 3 = 0)
then p:=p * a[i];
writeln(p);
end.
Переменная j не понадобилась.
49
C4 (55 мин)
На вход программе подаются сведения о пассажирах, желающих сдать
свой багаж в камеру хранения на заранее известное время до полуночи. В
первой строке сообщается число пассажиров N, которое не меньше 3, но не
превосходит 1000; во второй строке – количество ячеек в камере хранения
K, которое не меньше 10, но не превосходит 1000. Каждая из следующих N
строк имеет следующий формат:
<Фамилия> <время сдачи багажа> <время освобождения ячейки>,
где <Фамилия> – строка, состоящая не более чем из 20 непробельных символов;
<время сдачи багажа> – через двоеточие два целых числа, соответствующие часам (от 00 до 23 – ровно 2 символа) и минутам (от 00 до 59 – ровно
2 символа);
<время освобождения ячейки> имеет тот же формат.
<Фамилия> и <время сдачи багажа>, а также <время сдачи багажа> и
<время освобождения ячейки> разделены одним пробелом. Время освобождения больше времени сдачи.
Сведения отсортированы в порядке времени сдачи багажа. Каждому из
пассажиров в камере хранения выделяется свободная ячейка с минимальным номером. Если в момент сдачи багажа свободных ячеек нет, то пассажир уходит, не дожидаясь освобождения одной из них.
Требуется написать программу (укажите используемую версию языка программирования, например Borland Pascal 7.0), которая будет выводить на
экран для каждого пассажира номер ему предоставленной ячейки (можно
сразу после ввода данных очередного пассажира). Если ячейка пассажиру
не предоставлена, то его фамилия не печатается.
Пример входных данных:
3
10
Иванов 09:45 12:00
Петров 10:00 11:00
Сидоров 12:00 13:12
Результат работы программы на этих входных данных:
Иванов 1
Петров 2
50
Сидоров 1
РЕШЕНИЕ
Задача, предложенная в этом задании, сложная, поэтому будет решать
ее, придерживаясь рекомендованного плана действий.
1. Входные данные. Значения входных данных находятся в строках
символов. Значит, для ввода понадобится символьная (char) или строковая (string) переменная.
Все строки, кроме первых двух, имеют одинаковый формат: фамилия
пассажира, время сдачи багажа и время освобождения ячейки. Возникает
вопрос, нужно ли хранить все эти сведения в памяти до конца решения
задачи?
Важная для решения задачи информация – до какого срока заняты
ячейки камеры хранения. Если время освобождения сохранять для каждой
занятой ячейки, то понадобится массив. В этом массиве каждый элемент
должен соответствовать определенной ячейке, естественно считать номер
элемента номером ячейки. Исходные значения элементов массива равны 0
– ячейки не выделялись пассажирам.
Считывая очередную строку ввода, можно сразу узнать, имеется ли
свободная или освободившаяся ячейка, и выводить фамилию пассажира,
если ячейка может быть ему предоставлена. Использование массива ячеек
позволит разработать эффективный алгоритм, использующий хранение
только необходимых данных.
Описание переменных:
var sym : char;
fam : string;
N, K : integer;
cell : array[1..1000] of integer;
Можно оформить ввод:
readln(N); readln(K);
for i := 1 to N do begin
чтение очередной строки;
выделение ячейки пассажиру;
end;
2. Результаты.
51
Информация, на основе которой будут выводиться результаты, сохраняется в массиве cell.
3. Тест.
Исходные данные (K=3)
Результаты
Соколов
12:30
15:10
Соколов
1
Микитов
14:10
18:00
Микитов
2
Золотов
15:15
18:40
Золотов
1
Серебров
15:20
19:00
Серебров
3
Сибиряков
17:50
20:40
Югов
2
Югов
18:35
23:55
Закатов
1
Востоков
18:35
22:35
Закатов
20:45
21:55
4. Разработка алгоритма.
Общая схема алгоритма имеет следующий вид:
начальные значения;
for i := 1 to N do begin
чтение очередной строки;
выделение ячейки пассажиру;
end;
Проведем детализацию отдельных блоков алгоритма.
чтение очередной строки
В начале строки находится фамилия пассажира. Далее через пробел следуют 2 последовательности символов в формате ЧЧ:ММ. При вводе строку нужно разделить на смысловые части. Время удобнее сразу пересчитывать в минуты, чтобы облегчить последующее сравнение.
fam:=’’;
sym := ’!’; {этот символ не может быть в начале фамилии}
52
while sym <> ’ ’ do begin {чтение фамилии}
read(sym); fam:= fam+sym;
end;
hour:=’’; minute:=’’;
read(sym); hour := hour+sym; {чтение часов}
read(sym); hour := hour+sym;
read(sym);
{чтение двоеточия}
read(sym); minute :=minute +sym; {чтение минут}
read(sym); minute :=minute +sym;
val(hour, inthour, code1); {процедура преобразования строки в число}
val(minute, intminute, code2);
if (code1=0) and (code2=0)
then minute_in:= inthour*60+ intminute
else begin writeln(’Ошибка в данных’); halt; end;
hour:=’’; minute:=’’;
read(sym);
{чтение пробела}
read(sym); hour := hour+sym; {чтение часов}
read(sym); hour := hour+sym;
read(sym);
{чтение двоеточия}
read(sym); minute :=minute +sym; {чтение минут}
readln(sym); minute :=minute +sym;
val(hour, inthour, code1); {процедура преобразования строки в число}
val(minute, intminute, code2);
if (code1=0) and (code2=0)
then minute_out:= inthour*60+ intminute
else begin writeln(’Ошибка в данных’); halt; end;
выделение ячейки пассажиру
j := 1;
while (j <= K) and (cell [ j ] > minute_in) do j := j + 1;
if j <= K then begin
writeln(fam, ’ ’,j);
{выделение ячейки пассажиру}
cell [ j ] := minute_out;
end;
начальные значения
53
for i := 1 to K do cell [ i ] := 0;
На этом разработка алгоритма закончена.
54
5. Запись программы.
program nazv;
var fam : string;
sym : char;
N, K : integer;
cell : array[1..1000] of integer;
i, j : integer;
begin
readln(N); readln(K);
for i := 1 to K do cell [ i ] := 0;
for i := 1 to N do begin
fam:=’’;
sym := ’!’; {этот символ не может быть в начале фамилии}
while sym <> ’ ’ do begin {чтение фамилии}
read(sym); fam:= fam+sym;
end;
hour:=’’; minute:=’’;
read(sym); hour := hour+sym; {чтение часов}
read(sym); hour := hour+sym;
read(sym);
{чтение двоеточия}
read(sym); minute :=minute +sym; {чтение минут}
read(sym); minute :=minute +sym;
val(hour, inthour, code1); {процедура преобразования строки в число}
val(minute, intminute, code2);
if (code1=0) and (code2=0)
then minute_in:= inthour*60+ intminute
else begin writeln(’Ошибка в данных’); halt; end;
hour:=’’; minute:=’’;
read(sym);
{чтение пробела}
read(sym); hour := hour+sym; {чтение часов}
read(sym); hour := hour+sym;
read(sym);
{чтение двоеточия}
read(sym); minute :=minute +sym; {чтение минут}
readln(sym); minute :=minute +sym;
val(hour, inthour, code1); {процедура преобразования строки в число}
val(minute, intminute, code2);
if (code1=0) and (code2=0)
then minute_out:= inthour*60+ intminute
55
else begin writeln(’Ошибка в данных’); halt; end;
j := 1;
while (j <= K) and (cell [ j ] > minute_in) do j := j + 1;
if j <= K then begin
writeln(fam, ’ ’,j);
{выделение ячейки пассажиру}
cell [ j ] := minute_out;
end;
end;
end.
56
8. ИГРЫ ДВУХ ПРОТИВНИКОВ
В этих играх игроки выполняют ходы поочередно, при этом обоим игрокам доступна вся информация о текущем состоянии игры. В таких играх
выигрыш одного игрока означает проигрыш другого. В теории игр доказано существование оптимальной (наилучшей) стратегии для каждого из игроков. Игрок, придерживающийся этой стратегии, гарантированно получит
выигрыш не меньше, чем заранее рассчитанный, как бы хорошо ни играл
его противник. Если же игрок будет отклоняться от этой стратегии, то он
может получить и меньший выигрыш, все зависит от ходов противника.
Для рассматриваемых игр оптимальной является минимаксная стратегия,
при которой на очередном ходе игроку нужно действовать так, чтобы минимизировать максимально возможный выигрыш противника.
Выполняя анализ игры, нужно иметь в виду, что каждый игрок придерживается наилучшей стратегии. Чтобы выполнить анализ игры и найти
минимаксную стратегию, можно построить схему, называемую деревом
игры (дерево растет сверху вниз или слева направо). Рассмотрим пример
игры с построением дерева решений.
Двое игроков имеют неограниченное число камней. По правилам игры игроки поочередно кладут по нескольку камней в общую кучу. За
один ход можно положить один камень или удвоить число камней в
куче. Первоначально в куче имеется 2 камня. Выигрывает тот игрок,
после хода которого в куче окажется более 10 камней.
Построим дерево решений, обозначая числами количество камней в
куче после очередного хода. Поскольку игрок может сделать любой из
двух возможных ходов, нужно проверять оба варианта. Если из некоторого
состояния игрок может сделать выигрывающий ход, то другие ходы из
этого состояния рассматривать не нужно.
Удобнее начинать проверку с ходов, которые приводят к бóльшим изменениям кучи. Знаком «+» будем обозначать выигрышный ход игрока, а
знаком «–» – проигрышный.
57
Начальное 1-й
состояние игрок
кучи
2
2*2=4
2+1=3
2-й
игрок
1-й
игрок
4*2=8
4+1=5
8*2=16 +
5*2=10
5+1=6
6*2=12 +
4*2=8
4+1=5
3*2=6
3+1=4
2-й
игрок
1-й
игрок
10*2=20 +
6*2=12 +
8*2=16 +
5*2=10
5+1=6
10*2=20 +
6*2=12 +
Понятно, что выигрышный ход игрока делает предыдущий ход противника проигрышным.
Начальное 1-й
состояние игрок
кучи
2
2*2=4
2+1=3
2-й
игрок
1-й
игрок
4*2=8 –
4+1=5
8*2=16 +
5*2=10 –
5+1=6 –
6*2=12 +
4*2=8 –
4+1=5
3*2=6 –
3+1=4
2-й
игрок
1-й
игрок
10*2=20 +
6*2=12 +
8*2=16 +
5*2=10 –
5+1=6 –
10*2=20 +
6*2=12 +
Если все возможные ходы игрока в определенный момент игры оказались проигрышными, то предыдущий ход противника был выигрышным.
58
Начальное 1-й
состояние игрок
кучи
2
2*2=4
2+1=3
2-й
игрок
1-й
игрок
4*2=8 – 8*2=16 +
4+1=5 + 5*2=10 –
5+1=6 –
3*2=6 – 6*2=12 +
3+1=4
4*2=8 –
4+1=5 +
2-й
игрок
1-й
игрок
10*2=20 +
6*2=12 +
8*2=16 +
5*2=10 –
5+1=6 –
10*2=20 +
6*2=12 +
Если среди возможных ходов игрока в определенный момент игры есть
хотя бы один выигрышный, то предыдущий ход противника был проигрышным.
Начальное 1-й
2-й
состояние игрок
игрок
кучи
2
2*2=4 – 4*2=8 –
4+1=5 +
2+1=3 + 3*2=6 –
3+1=4 –
1-й
игрок
8*2=16 +
5*2=10 –
5+1=6 –
6*2=12 +
4*2=8 –
4+1=5 +
2-й
игрок
1-й
игрок
10*2=20 +
6*2=12 +
8*2=16 +
5*2=10 –
5+1=6 –
10*2=20 +
6*2=12 +
Вывод: выигрывает первый игрок, его первый ход должен быть +1.
C3 (30 мин)
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За
один ход игрок может добавить в кучу один камень или увеличить количество камней в куче в два раза. Например, имея кучу из 15 камней, за один
ход можно получить кучу из 16 или 30 камней. У каждого игрока, чтобы
делать ходы, есть неограниченное количество камней.
59
Игра завершается в тот момент, когда количество камней в куче становится не менее 22. Победителем считается игрок, сделавший последний ход,
то есть первым получивший кучу, в которой будет 22 или больше камней.
В начальный момент в куче было S камней, 1 ≤ S ≤ 21.
Будем говорить, что игрок имеет выигрышную стратегию, если он
может выиграть при любых ходах противника. Описать стратегию
игрока – значит описать, какой ход он должен сделать в любой ситуации, которая ему может встретиться при различной игре противника.
Выполните следующие задания. Во всех случаях обосновывайте свой ответ.
1. а) Укажите все такие значения числа S, при которых Петя может выиграть в один ход. Обоснуйте, что найдены все нужные значения S, и
укажите выигрывающий ход для каждого указанного значения S.
б) Укажите такое значение S, при котором Петя не может выиграть за
один ход, но при любом ходе Пети Ваня может выиграть своим первым
ходом. Опишите выигрышную стратегию Вани.
2. Укажите два таких значения S, при которых у Пети есть выигрышная
стратегия, причём
– Петя не может выиграть за один ход, и
– Петя может выиграть своим вторым ходом, независимо от того,
как будет ходить Ваня.
Для каждого указанного значения S опишите выигрышную стратегию Пети.
3. Укажите значение S, при котором:
– у Вани есть выигрышная стратегия, позволяющая ему выиграть
первым или вторым ходом при любой игре Пети, и
– у Вани нет стратегии, которая позволит ему гарантированно выиграть первым ходом.
Для указанного значения S опишите выигрышную стратегию Вани. Постройте дерево всех партий, возможных при этой выигрышной стратегии
Вани (в виде рисунка или таблицы). На рёбрах дерева указывайте, кто делает ход, в узлах – количество камней в куче.
РЕШЕНИЕ
60
Задачу удобнее решать, ориентируясь на номер хода в игре, а не на
конкретного игрока. Из условия ясно, что все нечетные ходы делает Петя,
а четные – Ваня.
Построим дерево решений для ответа на вопрос 1а). Для выигрыша за
один ход размер кучи нужно довести до 22 или более камней.
S
S
1-й ход в игре
S*2>=22; S>=11 +
S+1>=22; S>=21 +
Поскольку первоначально в куче не может быть 22 или более камней,
получаем решение 11<=S<=21. Эти значения дают выигрыш игроку, делающему первый ход в игре, т.е. Пете.
Отвечая на вопрос 1б), учтем полученное неравенство. Для выигрыша
на втором ходу игры (его делает Ваня) нужно, чтобы количество камней в
куче после первого хода удовлетворяло неравенству 11<=S<=21. Построим
дерево решений для ответа на вопрос 1б).
S
S
1-й ход в игре
S*2>=11; S>=6
S*2<=21; S<=10
S+1>=11; S>=10
S+1<=21; S<=20
2-й ход в игре
S*2*2 +
(S*2)+1 –
(S+1)*2 +
(S+1)+1 –
При S<10 игра может не завершиться на втором ходу. Например, при
S=9: (9+1)*2<22. Следовательно, S=10. Это значение дает выигрыш игроку, делающему второй ход в игре, т.е. Ване. Выигрышная стратегия Вани –
увеличить вдвое количество камней в куче.
Отвечая на вопрос 2), учтем предыдущий результат. Третий ход в игре
(его делает Петя) можно рассматривать как первый ход в игре и еще 2 хода. Для того чтобы второй из этих двух ходов был выигрышным, количество камней в куче должно стать равным 10 после первого хода в игре:
S
S
1-й ход в игре
S*2=10; S=5
S+1=10; S=9
61
Построим дерево решений для каждого из полученных значений S.
S
5
1-й ход в игре
5*2=10 +
5+1=6 –
S
9
1-й ход в игре
9*2=18 –
9+1=10 +
2-й ход в игре
10*2=20 –
10+1=11 –
6*2=12 –
6+1=7 +
3-й ход в игре
20*2=40 +
11*2=22 +
12*2=24 +
7*2=14 –
7+1=8 –
2-й ход в игре
18*2=36 +
18+1=19 –
10*2=20 –
10+1=11 –
3-й ход в игре
19*2=38 +
20*2=40 +
11*2=22 +
Для выигрыша Пети на его втором ходу исходно в куче должно быть 5
камней (первый ход Пети 5*2) или 9 камней (первый ход Пети 9+1).
Отвечая на вопрос 3), учтем предыдущий результат. Четвертый ход в
игре (его делает Ваня) можно рассматривать как первый ход в игре и еще 3
хода. Для того чтобы третий из этих трех ходов был выигрышным, количество камней в куче должно стать равным 5 или 9 после первого хода в игре:
S
S
1-й ход в игре
S*2=5; S вещественное
S+1=5; S=4
S*2=9; S вещественное
S+1=9; S=8
Построим дерево решений для каждого из полученных значений S.
S 1-й ход в игре 2-й ход в игре 3-й ход в игре 4-й ход в игре
4 4*2=8 +
8*2=16 –
16*2=32 +
8+1=9 –
9*2=18 –
18*2=36 +
9+1=10 +
10*2=20 –
10+1=11 –
4+1=5 +
5*2=10 +
10*2=20 –
20*2=40 +
10+1=11 –
11*2=22 +
5+1=6 –
6*2=12 –
6+1=7 +
12*2=24 +
7*2=14 –
7+1=8 –
При S=4 Ваня не может выиграть первым ходом. В то же время, у Вани нет гарантированного выигрыша вторым ходом.
S
8
1-й ход в игре 2-й ход в игре
8*2=16 –
16*2=32 +
16+1=17 –
8+1=9 –
9*2=18 –
9+1=10 +
3-й ход в игре 4-й ход в игре
17*2=34 +
18*2=36 +
10*2=20 –
20*2=40 +
10+1=11 –
11*2=22 +
При S=8 у Вани есть выигрышная стратегия, позволяющая ему выиграть первым или вторым ходом при любой игре Пети. Но у Вани нет стратегии, которая позволит ему гарантированно выиграть первым ходом.
63
ЛИТЕРАТУРА
Задания, разобранные в методических указаниях, опубликованы в [1].
Пояснения, с которых начинается каждая глава методических указаний,
взяты из [2]. Дополнительные задачи высокого уровня сложности можно
найти в [3].
1. Демонстрационный вариант ЕГЭ по информатике 2013 г. –
http://www.fipi.ru/view/sections/226/docs/627.html – Информатика.
2. Материалы для подготовки к ЕГЭ по информатике: методические
указания / Ю.Л. Костюк, И.Л. Фукс. –
http://inf.tsu.ru/WebDesign/finf2.nsf/structurl/abitur_programma
3. Основы разработки алгоритмов: учебное пособие / Ю.Л. Костюк,
И.Л. Фукс. – М.: БИНОМ. Лаборатория знаний, 2010. – 286 с. –
(Элективный курс. Информатика).
ОГЛАВЛЕНИЕ
1.
АЛГОРИТМЫ НА ЕСТЕСТВЕННОМ ЯЗЫКЕ .......................... 3
2.
ОСНОВЫ ЛОГИКИ ....................................................................... 5
3.
СИСТЕМЫ СЧИСЛЕНИЯ .......................................................... 11
4.
КОДИРОВАНИЕ ИНФОРМАЦИИ ........................................... 16
5.
ИНФОРМАЦИОННЫЕ ТЕХНОЛОГИИ................................... 19
6.
АНАЛИЗ АЛГОРИТМОВ ........................................................... 29
7.
РАЗРАБОТКА АЛГОРИТМОВ .................................................. 45
8.
ИГРЫ ДВУХ ПРОТИВНИКОВ.................................................. 56
Download