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

advertisement
Томский государственный университет
Факультет информатики
И. Л. Фукс
ИНФОРМАТИКА: ПОДГОТОВКА К ЕГЭ – 2012
Методические указания
Томск – 2012
Методические указания предназначены для учащихся 11-х классов, собирающихся сдавать ЕГЭ по предмету «Информатика и ИКТ» с
целью поступления на физико-математические и технические факультеты университетов. Материал базируется на демонстрационном варианте ЕГЭ 2012 года, адрес электронного ресурса –
http://www.fipi.ru/view/sections/222/docs/578.html - Информатика.
Задания ЕГЭ сгруппированы по темам, каждая тема предваряется
кратким описанием соответствующего раздела теоретической части
школьного курса информатики. Для каждого задания приводится подробный разбор решения.
Почтовый адрес:
634050, г. Томск, пр. Ленина, 36, ТГУ,
приемная комиссия
Телефон:
(382-2) 52-96-72
http://www.tsu.ru
Информационные сайты ТГУ:
http://abiturient.tsu.ru
Информационный сайт факультета
http://www.inf.tsu.ru
информатики ТГУ:
Электронная почта:
fooxil@sibmail.com
© Фукс И. Л., 2012
3
1. АЛГОРИТМЫ НА ЕСТЕСТВЕННОМ ЯЗЫКЕ
Для решения этих задач нужно уметь устанавливать причинноследственные связи между данными.
A2 (2 мин)
Между населёнными пунктами A, B, C, D, E, F построены дороги, протяжённость которых приведена в таблице. (Отсутствие числа в таблице
означает, что прямой дороги между пунктами нет.)
A
A
B
C
D
E
F
B
2
2
4
C
4
1
1
7
3
4
D
E
3
7
4
3
F
3
2
2
Определите длину кратчайшего пути между пунктами A и F (при условии, что передвигаться можно только по построенным дорогам).
1) 9
2) 10
3) 11
4) 12
РЕШЕНИЕ
Выпишем все возможные пути из пункта А в пункт F и вычислим их
длины:
ABCDEF
2+1+3+3+2
11
ABCEF
2+1+4+2
9
ABEF
2+7+2
11
ACDEF
4+3+3+2
12
ACEF
4+4+2
10
Ответ: 1.
4
A5 (2 мин)
Автомат получает на вход два трехзначных числа. По этим числам
строится новое число по следующим правилам.
1. Вычисляются три числа – сумма старших разрядов заданных трехзначных чисел, сумма средних разрядов этих чисел, сумма младших разрядов.
2. Полученные три числа записываются друг за другом в порядке убывания
(без разделителей).
Пример. Исходные трехзначные числа: 835, 196.
Поразрядные суммы: 9, 12, 11.
Результат: 12119
Определите, какое из следующих чисел может быть результатом работы автомата.
1) 151303
2) 161410
3) 191615
4) 121613
РЕШЕНИЕ
1. Все ответы шестизначные, значит каждая сумма двузначная. В ответе 1) последняя сумма 03, но незначащий 0 не пишется, следовательно, этот ответ неверный.
2. Ответ 3) неверный, т.к. 19 больше максимально возможной суммы
двух цифр – 9+9=18.
3. Ответ 4) неверный, т.к. суммы не упорядочены.
Ответ: 2.
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 мин)
X
0
0
1
Дан фрагмент таблицы истинности выражения F:
Y
Z
0
0
0
1
1
1
F
0
0
1
Каким выражением может быть F?
1) X /\ Y /\ Z
2) ¬X \/ ¬Y \/ Z
3) X \/ Y \/ Z
4) ¬X /\ ¬Y /\ ¬Z
РЕШЕНИЕ
Поскольку в ответах присутствуют выражения с операцией конъюнкции, удобнее начать проверку именно с них.
Ответ 1): выражение будет истинным, если истинны X, Y и Z. Это соответствует последней строке таблицы истинности. В первой и второй
строках таблицы выражение ложно, и, действительно, в этих строках есть
ложные значения операндов.
Ответ 4): выражение будет истинным, если все операнды ложны. Это
не соответствует первой строке таблицы.
Ответ 2): выражение будет истинным, если Z истинно, или X ложно,
или Y ложно. Это соответствует только третьей строке таблицы.
Ответ 3) выражение будет истинным, если хотя бы одни из операндов
истинный. Это не соответствует второй строке таблице.
Ответ: 1.
A10 (2 мин)
Какое из приведённых имён удовлетворяет логическому условию:
(первая буква согласная → вторая буква согласная) /\ (предпоследняя буква гласная → последняя буква гласная)?
1) КРИСТИНА
2) МАКСИМ
3) СТЕПАН
4) МАРИЯ
РЕШЕНИЕ
Введем обозначения: A = (первая буква согласная); B = (вторая буква
согласная); C = (предпоследняя буква гласная); D = (последняя буква глас-
8
ная). Тогда высказывание примет вид (A → B) Λ (C → D). Во всех ответах
первая буква согласная, следовательно, достаточно составить часть таблицы истинности для высказывания:
A
1
1
1
1
1
1
1
1
B
0
0
0
0
1
1
1
1
A→B
0
0
0
0
1
1
1
1
C
0
0
1
1
0
0
1
1
D
0
1
0
1
0
1
0
1
C→D
1
1
0
1
1
1
0
1
Исходное высказывание будет истинным, если A → B и C → D истинны. Из таблицы видно, что для этого, в свою очередь, A и B должны быть
истинны. Значит, вторая буква в имени должна быть согласной. Ответы 2)
и 4) неверные.
Для истинности C → D нужно:
– либо С ложно. Это означает, предпоследняя буква в имени не гласная. Подходит ответ 1);
– либо С и D были истинными. Значит, предпоследняя и последняя
буквы в имени гласные. Такое имя содержится в ответе 4), но он неверный.
Ответ: 1.
B15 (10 мин)
Сколько существует различных наборов значений логических переменных x1, x2, ... x9, x10, которые удовлетворяют всем перечисленным ниже
условиям?
((x1 ≡ x2) \/ (x3 ≡ x4)) /\ (¬(x1 ≡ x2) \/ ¬(x3 ≡ x4)) =1
((x3 ≡ x4) \/ (x5 ≡ x6)) /\ (¬(x3 ≡ x4) \/ ¬(x5 ≡ x6)) =1
((x5 ≡ x6) \/ (x7 ≡ x8)) /\ (¬(x5 ≡ x6) \/ ¬(x7 ≡ x8)) =1
((x7 ≡ x8) \/ (x9 ≡ x10)) /\ (¬(x7 ≡ x8) \/ ¬(x9 ≡ x10)) =1
В ответе не нужно перечислять все различные наборы значений x1, x2, ... x9,
9
x10, при которых выполнена данная система равенств. В качестве ответа
вам нужно указать количество таких наборов.
Ответ: ___________________________.
РЕШЕНИЕ
Если логическое выражение содержит p переменных, то таблица истинности для него состоит из S = 2p строк. В приведенном примере p =10,
следовательно, S = 1024. Нужно выяснить, в скольких строках значения
выражений равны 1.
Введем обозначения:
A = (x1 ≡ x2); B = (x3 ≡ x4); C = (x5 ≡ x6); D = (x7 ≡ x8); E = (x9 ≡ x10).
Поскольку условия по форме похожи друг на друга, рассмотрим сначала только первое. Условие можно переписать:
(A V B) Λ (¬A V¬B) = A  B = 1.
Операция исключающее ИЛИ дает истинное значение, если операнды
не равны друг другу, т.е. либо A = 1, B = 0, либо A = 0, B = 1. Получаем 2
набора значений A и B.
Такие же выводы можно сделать относительно оставшихся трех условий. Воспользуемся фрагментом таблицы истинности для совмещения всех
условий:
A
B
C
D
E
все
0
1
0
1
0
1
1
0
1
0
1
1
Получилось 2 набора значений A, B, C, D, E. Теперь нужно вернуться к
исходным переменным.
Рассматриваем первую строку таблицы истинности. A = 0 при x1=0,
x2=1, либо x1=1, x2=0. Таким образом, получаем 2 набора значений исходных переменных. Для каждого из этих наборов будет 2 набора для B = 1.
Количество наборов значений исходных переменных будет увеличиваться
в 2 раза при подключении очередной заменяющей переменной. Следовательно, для первой строки таблицы истинности получим 25 = 32 набора
значений исходных переменных.
Очевидно, что для второй строки таблицы истинности получится такой
же результат. Значит, общее число наборов равно 32 + 32 = 64.
Ответ: 64
10
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. Задача перевода заключается в вычислении этих цифр.
11
Из записи полинома видно, что младшая из искомых цифр может быть
вычислена как остаток от целочисленного деления заданного числа на основание 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.
12
Номер разряда
Вес разряда
Заполнение
ницами
еди-
Двоичное число
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
13
Пример 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 мин)
Сколько единиц в двоичной записи числа 1025?
1) 1
2) 2
4) 11
3) 10
РЕШЕНИЕ
Воспользуемся таблицей с весами двоичных разрядов, выраженных в
десятичной системе счисления:
Номер разряда
10
9
8
7
6
5
4
3
2
1
0
Вес разряда
1024
512
256
128
64
32
16
8
4
2
1
Заполнение
единицами
1
Двоичное число
1
Ответ: 2.
1
0
0
0
0
0
0
0
0
0
1
14
В8 (2 мин)
Запись числа 6710 в системе счисления с основанием N оканчивается на 1 и
содержит 4 цифры. Чему равно основание этой системы счисления N?
Ответ: ___________________________.
РЕШЕНИЕ
Запишем число в системе с основанием N в виде многочлена:
a3 * N3 + a2 * N2 + a1 * N + 1 = 67;
a3 * N3 + a2 * N2 + a1 * N = 66;
(a3 * N2 + a2 * N + a1) * N = 66.
Пусть N = 2. Тогда должно выполняться (a3 * N2 + a2 * N + a1) = 33. Но
это невозможно, т.к. максимальное значение этого выражения
1 * 22 + 1 * 2 + 1 = 7.
Пусть N = 3. Тогда должно выполняться (a3 * N2 + a2 * N + a1) = 22.
Максимальное значение этого выражения 2 * 32 + 2 * 3 + 2 = 26, т.е. при
определенных значениях a1, a2, a3 может выполниться равенство 22.
Пусть N = 6. Тогда должно выполняться (a3 * N2 + a2 * N + a1) = 11. Но
это невозможно, т.к. минимальное значение этого выражения
1 * 62 + 0 * 6 + 0 = 36.
Ответ: 3
15
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.
16
A9 (2 мин)
Для кодирования некоторой последовательности, состоящей из букв А,
Б, В, Г и Д, решили использовать неравномерный двоичный код, позволяющий однозначно декодировать двоичную последовательность, появляющуюся на приёмной стороне канала связи. Использовали код: А–1, Б–000,
В–001, Г–011.
Укажите, каким кодовым словом может быть закодирована буква Д.
Код должен удовлетворять свойству однозначного декодирования.
1) 00
2) 01
3) 11
4) 010
РЕШЕНИЕ
1. Пусть код буквы Д равен 00. Тогда двоичную последовательность
001 можно декодировать как В или ДА. Ответ 1) неверный.
2. Пусть код буквы Д равен 01. Тогда двоичную последовательность
011 можно декодировать как Г или ДА. Ответ 2) неверный
3. Пусть код буквы Д равен 11. Тогда двоичную последовательность
111 можно декодировать как ДА или АД. Ответ 3) неверный.
4. Пусть код буквы Д равен 010. Тогда только код буквы А имеет
длину 1 бит, а все остальные – по 3 бита, и первый из них всегда 0.
Значит, алгоритм декодирования можно представить таким:
а) обозначим f номер очередного бита двоичной последовательности; f := 1;
б) если очередной бит равен 1, то это А. f := f + 1;
в) если очередной бит равен 0, то 3 последовательных бита образуют код соответствующей буквы. f := f + 3;
г) если двоичная последовательность не закончилась, то повторить
от пункта б).
Ответ: 4.
A11 (3 мин)
Для регистрации на сайте некоторой страны пользователю требуется
придумать пароль. Длина пароля – ровно 11 символов. В качестве символов используются десятичные цифры и 12 различных букв местного алфавита, причём все буквы используются в двух начертаниях: как строчные,
так и заглавные (регистр буквы имеет значение!). Под хранение каждого
такого пароля на компьютере отводится минимально возможное и одина-
17
ковое целое количество байтов, при этом используется посимвольное кодирование и все символы кодируются одинаковым и минимально возможным количеством битов.
Определите объём памяти, который занимает хранение 60 паролей.
1) 540 байт
2) 600 байт
3) 660 байт
4) 720 байт
РЕШЕНИЕ
1. Для составления пароля используются 10 + 12 * 2 = 34 разных символа. Каждый символ кодируется двоичным кодом. Применим соотношение: N = SD. Здесь N = 34, S=2. Следовательно, D = 6, т.е.
длина кода каждого символа пароля равна 6.
2. Пароль содержит 11 символов, значит длина двоичного кода пароля 6 * 11 = 66 бит. Поскольку номер записывается целым количеством байтов, то вычисляем 66 div 8 = 8 и еще один не полностью
заполненный байт. Итак, для записи одного пароля требуется 9
байт, а для 60 паролей – 9 * 60 = 540 байт.
Ответ: 1.
B1 (1 мин)
Автоматическое устройство осуществило перекодировку информационного сообщения на русском языке длиной в 20 символов, первоначально
записанного в 2-байтном коде Unicode, в 8-битную кодировку КОИ-8. На
сколько бит уменьшилась длина сообщения? В ответе запишите только
число.
Ответ: ___________________________.
РЕШЕНИЕ
16-битный код информационного сообщения в 2 раза больше 8битного кода того же сообщения. Значит, после перекодировки размер кода сообщения уменьшился в 2 раза. 20 символов, закодированных 8битным кодом, занимают 20 байт. Следовательно, на такое же количество
байт уменьшилась длина кода сообщения. В ответе нужно указать количество бит.
Ответ: 160.
18
B4 (2 мин)
Все 5-буквенные слова, составленные из букв А, О, У, записаны в алфавитном порядке.
Вот начало списка:
1. ААААА
2. ААААО
3. ААААУ
4. АААОА
……
Запишите слово, которое стоит на 240-м месте от начала списка.
Ответ: ___________________________.
РЕШЕНИЕ
Выясним, сколько 5-буквенных слов можно составить, используя 3
разные буквы. Применим соотношение: N = SD. В задаче S=3, количество
разных букв. Слово состоит из 5-и букв, значит D=5. Следовательно, N = 35
= 243.
Если эти слова упорядочить по алфавиту, то в конце списка окажутся:
Номер слова
243
242
241
240
Ответ: УУУОУ.
УУУУУ
УУУУО
УУУУА
УУУОУ
19
5. ИНФОРМАЦИОННЫЕ ТЕХНОЛОГИИ
В заданиях, относящихся к этой теме, требуется умение работать в
приложениях операционной системы с электронными таблицами, базами
данных, электронными изображениями и звуками, создавать Webстраницы, выполнять операции с файлами.
A4 (1 мин)
Для групповых операций с файлами используются маски имён файлов. Маска представляет собой последовательность букв, цифр и прочих
допустимых в именах файлов символов, в которой также могут встречаться следующие символы.
Символ «?» (вопросительный знак) означает ровно один произвольный
символ.
Символ «*» (звёздочка) означает любую последовательность символов
произвольной длины, в том числе «*» может задавать и пустую последовательность.
В каталоге находятся пять файлов:
fort.docx
ford.docx
lord.doc
orsk.dat
port.doc
Определите, по какой из масок из них будет отобрана указанная группа
файлов:
fort.docx
ford.docx
lord.doc
port.doc
1) *o?*.d?*
2) ?o*?.d*
3) *or*.doc?
4) ?or?.doc?
РЕШЕНИЕ
1. Символ «?» в конце маски означает, что после символов «doc» должен быть один и только один символ. Значит, ответы 3) и 4) неверны.
2. Символ «*» в начале маски означает, что перед символом «о» могут
отсутствовать символы. Значит, ответ 1) неверный.
20
3. Несмотря на то, что остался один вариант ответа, убедимся, что он
верный. Символ «?» в начале маски означает, что перед символом «о»
должен быть один символ. Именно по этому признаку будут отобраны указанные файлы.
Ответ: 2.
A6 (3 мин)
В фрагменте базы данных представлены сведения о родственных отношениях. Определите на основании приведенных данных фамилию и инициалы бабушки Ивановой А.И.
Таблица 1
Таблица 2
ID Фамилия_И.О. Пол
ID_Родителя ID_Ребенка
71
Иванов Т.М.
М
23
71
85
Петренко И.Т. М
13
23
13
Черных И.А.
Ж
85
23
42
Петренко А.И. Ж
82
13
23
Иванова А.И.
Ж
95
13
96
Петренко Н.Н. Ж
85
42
82
Черных А.Н.
M
82
10
95
Цейс Т.Н.
Ж
95
10
10
Цейс Н.А.
М
...
...
...
1)Петренко А.И.
2) Черных И.А.
3) Цейс Т.Н.
4) Петренко Н.Н.
РЕШЕНИЕ
По таблице 1 определяем ID Ивановой - 23.
Из таблицы 2 узнаем, что родители Ивановой имеют ID 13 и 85.
Из таблицы 2 узнаем, что у ID 13 родители имеют ID 82 и 95.
По таблице 1 определяем, что ID 82 – мужчина, а ID 95 – женщина.
Это бабушка Ивановой, ее фамилия Цейс Т.Н.
5. Информация о родителях ID 85, т.е. о других дедушке и бабушке
Ивановой, в таблице 2 отсутствует.
1.
2.
3.
4.
Ответ: 3.
21
A7 (3 мин)
В ячейке B4 электронной таблицы записана формула = $C3*2. Какой вид
приобретет формула, после того как ячейку B4 скопируют в ячейку B6?
Примечание: знак $ используется для обозначения абсолютной адресации.
1) = $C5 *4
2) = $C5 *2
3) = $C3 *4
4) = $C1 *2
РЕШЕНИЕ
Адрес ячейки электронной таблицы записывается в виде
ИмястолбцаНомерстроки
Такая адресация называется относительной. При копировании формул
из одной ячейки в другую относительные адреса в формулах пересчитываются, т.е. настраиваются на новую ячейку относительно старой.
Например, при копировании формулы =D5 из ячейки A6 в ячейку C2
произойдут 2 пересчета.
1. От столбца A до столбца C расстояние равно +2 столбцам. Значит,
в формуле имя столбца D заменится на F.
2. От строки 6 до строки 2 расстояние равно (-4). Значит, в формуле 5
заменится на 1.
Итак, формула в ячейке C2 будет иметь вид =F1.
Для записи формулы, в которой не следует изменять адрес ячейки при
копировании, применяется абсолютная адресация
$Имястолбца$Номерстроки
И, наконец, возможно смешение относительной и абсолютной адресации. Например, в формуле =$E2 при копировании будет пересчитываться
только номер строки, а в формуле =E$2 – только имя столбца.
РЕШЕНИЕ
В задании формула = $C3*2 содержит абсолютный адрес столбца и относительный адрес строки. Следовательно, при копировании имя столбца
останется C. Номер строки будет пересчитан на расстояние (6-4), т.е. станет равным 5. Отсюда видно, что верный ответ 2). Заметим также, что при
копировании формул константы не изменяются.
Ответ: 2.
22
A8 (2 мин)
Производится одноканальная (моно) звукозапись с частотой дискретизации 16 кГц и 24-битным разрешением. Запись длится 1 минуту, ее результаты записываются в файл, сжатие данных не производится.
Какая из приведенных ниже величин наиболее близка к размеру полученного файла?
1) 0.2 Мбайт
2) 2 Мбайт
3) 3 Мбайт
4) 4 Мбайт
Частота дискретизации (или частота семплирования, англ. sample
rate) — частота взятия отсчетов непрерывного во времени сигнала при его
дискретизации (Википедия).
Разрешение звукового сигнала – длина кода звука, длина кода одного
отсчета сигнала.
РЕШЕНИЕ
При звукозаписи 16000 раз в секунду (16 кГц) поступают 3 байта (24
бита) информации. Следовательно, размер файла с записью звука можно
рассчитать по формуле:
16000 * 3 * 60 = 2 880 000 = 2,75 Мб
Учитывая правила округления, можно сказать, что наиболее близок ответ 3).
Ответ: 3.
В5 (2 мин)
Дан фрагмент электронной таблицы:
A
B
3
1
=(C1+A1)/2
=C1–D1
2
C
3
=A1–D1
D
2
=B1/2
23
Какое число должно быть записано в
ячейке B1, чтобы построенная после
выполнения вычислений диаграмма по
значениям диапазона ячеек A2:D2 соответствовала рисунку?
Ответ: ___________________________.
РЕШЕНИЕ
Судя по диаграмме, в трех клетках указанного диапазона должны
находиться одинаковые значения. В четвертой клетке значение должно
быть равно сумме значений первых трех клеток.
В клетках А2, В2 и С2 заданы формулы, в которых указаны адреса ячеек с известными значениями. Вычисление этих формул дает следующие
результаты: А2 = 3; В2 = 1; С2 = 1. Значит, в ячейке D2 должно получиться
значение 1. Таким образом, становится понятным, что в ячейке В1 должно
быть записано число 2.
Ответ: 2.
В9 (3 мин)
На рисунке – схема дорог, связывающих города А, Б, В, Г, Д, Е, Ж, И, К.
По каждой дороге можно двигаться только в одном направлении, указанном стрелкой. Сколько существует различных путей из города А в город К?
Б
Д
И
А
В
Г
Ж
Е
Ответ: ___________________________.
К
24
РЕШЕНИЕ
Различные пути:
АБДИК
АБДК
АБВЖК
АВДИК
АГВДИК
АГВДК
АГЕК
АБВДИК
АВДК
АГВЖК
АБВДК
АВЖК
АГЕЖК
Ответ: 13.
B10 (4 мин)
У Кати есть доступ в Интернет по высокоскоростному одностороннему
радиоканалу, обеспечивающему скорость получения информации 220 бит в
секунду. У Сергея нет скоростного доступа в Интернет, но есть возможность получать информацию от Кати по телефонному каналу со средней
скоростью 213 бит в секунду. Сергей договорился с Катей, что она скачает
для него данные объёмом 9 Мбайт по высокоскоростному каналу и ретранслирует их Сергею по низкоскоростному каналу.
Компьютер Кати может начать ретрансляцию данных не раньше, чем
им будут получены первые 1024 Кбайт этих данных. Каков минимально
возможный промежуток времени (в секундах) с момента начала скачивания Катей данных до полного их получения Сергеем?
В ответе укажите только число, слово «секунд» или букву «с» добавлять не нужно.
Ответ: ___________________________.
РЕШЕНИЕ
Время с начала скачивания данных Катей до полного получения их
Сергеем состоит из двух промежутков:
1) время на скачивание 1024 Кбайт по высокоскоростному каналу;
2) время ретрансляции 9 Мбайт по низкоскоростному каналу.
Все величины нужно привести к одинаковым единицам измерения –
биты и секунды.
(1024 * 210 * 8) / 220 = 210 * 210 *23 / 220 = 23 = 8 (секунд).
(9 * 220 * 23)/ 213 = 9 * 210 = 9 * 1024 = 9216 (секунд).
Ответ: 9224
25
B11 (2 мин)
В терминологии сетей TCP/IP маской сети называется двоичное число,
определяющее, какая часть IP-адреса узла сети относится к адресу сети, а
какая — к адресу самого узла в этой сети. Обычно маска записывается по
тем же правилам, что и IP-адрес. Адрес сети получается в результате применения поразрядной конъюнкции к заданному IP-адресу узла и маске.
По заданным IP-адресу узла и маске определите адрес сети.
IP –адрес узла: 217.233.232.3
Маска: 255.255.252.0
При записи ответа выберите из приведенных в таблице чисел четыре
элемента IP-адреса и запишите в нужном порядке соответствующие им
буквы. Точки писать не нужно.
A
0
B
3
C
217
D
233
E
232
F
244
G
252
H
255
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 и 233.
2. Последнее число 0.
3. Третье число – результат поразрядной конъюнкции 232 и 252:
128
232
252
232
1
1
1
Веса разрядов
64
32
16
8
4
Двоичное представление чисел
1
1
0
1
0
1
1
1
1
1
1
1
0
1
0
2
1
0
0
0
0
0
0
26
Ответ: CDEA
B12 (2 мин)
В языке запросов поискового сервера для обозначения логической операции «ИЛИ» используется символ «|», а для логической операции «И» –
символ «&».
В таблице приведены запросы и количество найденных по ним страниц
некоторого сегмента сети Интернет.
Запрос
Шахматы | Теннис
Теннис
Шахматы & Теннис
Найдено страниц
(в тысячах)
7770
5500
1000
Какое количество страниц (в тысячах) будет найдено по запросу Шахматы?
Считается, что все запросы выполнялись практически одновременно,
так что набор страниц, содержащих все искомые слова, не изменялся за
время
выполнения запросов.
Ответ: ___________________________.
РЕШЕНИЕ
Проиллюстрируем идею решения с помощью диаграмм Венна:
Шахматы
Теннис
27
Овальная область, заштрихованная горизонтальными линиями, относится к множеству документов, содержащих сведения о шахматах. Область, заштрихованная вертикальными линиями, относится к множеству
документов, содержащих сведения о теннисе. Всего документов о шахматах или о теннисе 7770. Область, заштрихованная пересекающимися линиями, относится к множеству документов, содержащих сведения и о
шахматах, и о теннисе, таких документов 1000. Если из 7770 вычесть количество документов о теннисе и добавить к разности количество документов со сведениями и о шахматах, и о теннисе, то получится количество
документов о шахматах: 7770 – 5500 + 1000 = 3270.
Ответ: 3270
28
6. АНАЛИЗ АЛГОРИТМОВ
В заданиях предложены фрагменты программ для конкретных исполнителей: компьютера или некоего робота. Для ответа на тестовый вопрос
требуется выполнить эти программы, так сказать, вручную. Рекомендуется
начертить таблицу, в которой будут фиксироваться постепенно изменяющиеся значения переменных, или сделать поясняющий рисунок.
A12 (5 мин)
В программе используется одномерный целочисленный массив A с индексами от 0 до 9. Ниже представлен фрагмент программы, записанный на
разных языках программирования, в котором значения элементов сначала
задаются, а затем меняются.
Бейсик
FOR i=0 TO 9
A(i) = 9-i
NEXT i
FOR i = 0 TO 4
k = A(i)
A(i) = A(9-i)
A(9-i) = k
NEXT i
Си
for (i=0;i<=9;i++)
A[i] = 9-i;
for (i=0;i<=4;i++)
{
k = A[i];
A[i] = A[9-i];
A[9-i] = k;
}
Паскаль
for i:=0 to 9 do
A[i] := 9-i;
for i:=0 to 4 do
begin
k := A[i];
A[i] := A[9-i];
A[9-i] := k;
end;
Алгоритмический язык
нц для i от 0 до 9
A[i]:= 9-i
кц
нц для i от 0 до 4
k := A[i]
A[i] := A[9-i]
A[9-i] := k
кц
29
Чему будут равны элементы этого массива после выполнения фрагмента
программы?
1) 9 8 7 6 5 4 3 2 1 0
2) 0 1 2 3 4 5 6 7 8 9
3) 9 8 7 6 5 5 6 7 8 9
4) 0 1 2 3 4 4 3 2 1 0
РЕШЕНИЕ
В первом цикле массив заполняется значениями от 9 до 0.
Работу второго цикла проиллюстрируем на таблице с последовательностью преобразований:
i
0
1
2
3
4
9
0
8
7
6
Массив
5
4
3
2
1
7
3
1
0
9
8
2
0
1
2
3
6
4
4
5
5
6
7
8
9
Ответ: 2.
A13 (6 мин)
Система команд исполнителя РОБОТ, «живущего» в прямоугольном
лабиринте на клетчатой плоскости:
вверх
вниз
влево
вправо
При выполнении любой из этих команд РОБОТ перемещается на одну
клетку соответственно: вверх ↑, вниз ↓, влево ←, вправо →.
Четыре команды проверяют истинность условия отсутствия стены у
каждой стороны той клетки, где находится РОБОТ:
сверху свободно снизу свободно
слева свободно
справа свободно
30
Цикл
ПОКА < условие > команда
выполняется, пока условие истинно, иначе происходит переход на следующую строку.
Если РОБОТ начнёт движение в сторону находящейся рядом с ним стены,
то он разрушится и программа прервётся.
Сколько клеток лабиринта соответствуют требованию, что, выполнив
предложенную программу, РОБОТ уцелеет и остановится в той же клетке,
с которой он начал движение?
НАЧАЛО
ПОКА < справа свободно > вниз
ПОКА < снизу свободно > влево
ПОКА < слева свободно > вверх
ПОКА < сверху свободно > вправо
КОНЕЦ
1
2
3
4
5
6
A
1) 1
2) 3
3) 5
B
C
D
E
F
4) 7
РЕШЕНИЕ
Проанализируем, каким условиям должна удовлетворять клетка, с которой начнется и в которой закончится движение. Будем обозначать номера строк числами от 1 до 6, а столбцы – буквами от А до F.
1. Первые передвижения робота – вниз. Начальная клетка может быть
свободна справа, и робот начнет перемещаться. С другой стороны, в этой
клетке справа может оказаться стена, и первый цикл ПОКА не выполнит
ни одного перемещения. Но это не является причиной для выбрасывания
таких клеток из рассмотрения. Например, в лабиринте, изображенном на
рисунке ниже, клетка удовлетворяет условию задачи:
2. После всех перемещений робот должен остановиться в начальной
клетке. Последний цикл ПОКА перемещает робота вправо, робот остановится, попав в клетку с верхней стеной. Следовательно, в качестве началь-
31
ных нужно рассматривать только те клетки, у которых есть верхняя стена.
Это вся строка 1, Е2, A3, B3, A5, F5, C6, F6.
3. Три клетки, удовлетворяющие условию задачи – B1, Е2, F5.
Ответ: 3.
B3 (3 мин)
Определите, что будет напечатано в результате работы следующего
фрагмента программы:
Бейсик
DIM k, s AS INTEGER
s=0
k=0
WHILE s < 1024
s = s + 10
k=k+1
WEND
PRINT k
Си
{
int k, s;
s = 0;
k = 0;
while (s<1024) {
s = s+10;
k = k+1;
}
printf("%d", k);
}
Паскаль
Var k, s : integer;
BEGIN
s := 0;
k := 0;
while s<1024 do
begin
s := s+10;
k := k+1;
end;
write(k);
END.
Алгоритмический язык
нач
цел k, s
s := 0
k := 0
нц пока s < 1024
s := s+10
k := k+1
кц
вывод k
кон
Ответ: ___________________________.
РЕШЕНИЕ
32
Отобразим в таблице последовательные изменения значений переменных и выражений:
k
0
1
2
3
…
100
101
102
103
s
0
10
20
30
…
1000
1010
1020
1030
s<1024
да
да
да
да
…
да
да
да
нет
Ответ: 103
В6 (2 мин)
Определите значение переменной c после выполнения следующего
фрагмента программы (записанного ниже на разных языках программирования).
Бейсик
Паскаль
a = 40
a := 40;
b = 80
b := 80;
b=-a-2*b
b := - a - 2 * b;
IF a < b THEN
if a < b then
c=b-a
c := b - a
ELSE
else
c=a-2*b
c := a - 2 * b;
END IF
Си
Алгоритмический язык
a = 40;
a := 40
b = 80;
b := 80
b = - a - 2 * b;
b := - a - 2 * b
if (a < b)
если a < b
c = b – a;
то c := b - a
else
иначе c := a - 2 * b
c = a - 2 * b;
все
33
Ответ: ___________________________.
РЕШЕНИЕ
Отобразим в таблице последовательные изменения значений переменных:
a
b
c
40
80
-200
440
Ответ: 440
В7 (6 мин)
Ниже на 4-х языках записан алгоритм. Получив на вход число x, этот
алгоритм печатает два числа L и M. Укажите наибольшее из таких чисел x,
при вводе которых алгоритм печатает сначала 3, а потом 7.
Бейсик
DIM X, L, M AS INTEGER
INPUT X
L=0: M=0
WHILE X > 0
L = L+1
IF M < (X MOD 10)
THEN
M = X MOD 10
ENDIF
X = X \ 10
WEND
PRINT L
PRINT M
Си
#include<stdio.h>
void main()
{
Паскаль
var x, L, M: integer;
begin
readln(x);
L := 0; M := 0;
while x>0 do
begin
L := L+1;
if M < (x mod 10) then
begin
M := x mod 10;
end;
x := x div 10;
end;
writeln(L); write(M);
end.
Алгоритмический язык
алг
нач
цел x, L, M
34
int x, L, M;
scanf("%d", &x);
L=0; M=0;
while (x>0){
L=L+1;
if M < x % 10 {
M = x % 10
}
x= x/10;
}
printf("%d\n%d", L, M);
}
ввод x
L := 0; M := 0
нц пока x>0
L := L+1
если M < mod(x,10)
то
M := mod(x,10)
все
x := div(x,10)
кц
вывод L, нс, M
кон
Ответ: ___________________________.
РЕШЕНИЕ
1. Для того чтобы L стало равным 3, цикл должен проработать 3 раза.
2. На каждом шаге цикла выполняется оператор x := x div 10,
x уменьшается в 10 раз.
3. Последнее значение x должно получиться равным 0, чтобы цикл завершился. Значит, исходное значение x должно быть трехзначным
числом.
4. По завершении цикла переменная М должна стать равной 7. Значение М вычисляется как остаток от деления на 10 или не изменяется,
т.е. в M записывается цифра числа x. Если хотя бы на одном шаге
цикла М станет равным 8 или 9, то далее M не сможет стать равным
7, потому что условие M < mod(x,10) будет всегда ложным. Следовательно, цифры числа x не могут быть больше 7.
5. В задании требуется указать наибольшее из возможных значений x
– это 777.
Ответ: 777
В13 (7 мин)
У исполнителя Кузнечик две команды:
1. прибавь 3,
2. вычти 2.
35
Первая из них увеличивает число на экране на 3, вторая – уменьшает его
на 2 (отрицательные числа допускаются).
Программа для Кузнечика – это последовательность команд. Сколько различных чисел можно получить из числа 1 с помощью программы, которая
содержит ровно 5 команд?
Ответ: ___________________________.
РЕШЕНИЕ
1. Поскольку используются только команды сложения и вычитания,
порядок следования их в программе не имеет значения.
2. 2 разных числа получаются по программам 11111 и 22222.
3. Далее отмечаем, что команды 1 и 2, расположенные в любом месте программы, можно рассматривать как одну команду, потому
что в совокупности они производят увеличение на 1. Обозначим
такую пару команд [12].
4. Запишем программы, которые вычисляют разные числа:
111[12]
222[12]
1[12] [12]
2[12] [12]
Ответ: 6
В14 (6 мин)
Определите, какое число будет напечатано в результате выполнения
следующего алгоритма (для Вашего удобства алгоритм представлен на
четырех языках):
Бейсик
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
Паскаль
var a,b,t,M,R :integer;
Function F(x:integer):integer;
begin
F := 4*(x-1)*(x-3);
end;
BEGIN
a := -20; b := 20;
M := a; R := F(a);
for t := a to b do
begin
36
FUNCTION F (x)
F = 4 * (x - 1) * (x - 3)
END FUNCTION
Си
int F(int x)
{
return 4*(x-1)*(x-3);
}
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);
}
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)
нач
знач := 4*(x-1)*(x-3)
кон
Ответ: ___________________________.
РЕШЕНИЕ
Любой алгоритм может быть представлен как основная программа со
вспомогательными алгоритмами.
Вспомогательный алгоритм оформляется в виде ПРОЦЕДУРЫ или
ФУНКЦИИ. Он может располагаться в одном файле с основной программой или в отдельном файле.
Если результатом работы вспомогательного алгоритма является ОДНО
значение, то такой вспомогательный алгорим можно оформить как
ФУНКЦИЮ. ЛЮБОЙ вспомогательный алгоритм можно оформить как
ПРОЦЕДУРУ.
37
Для того чтобы вспомогательный алгоримт выполнился, к нему нужно
обратиться, его нужно вызвать.
Для передачи информации из основной программы в процедуру или
функцию и для возвращения результатов в основную программу используются ПАРАМЕТРЫ.
Переменные, которые описываются в заголовке вспомогательного алгоритма, называются ФОРМАЛЬНЫМИ параметрами. Переменные, которые
указываются при вызове вспомогательного алгоритма, называются
ФАКТИЧЕСКИМИ параметрами. Фактические параметры – это переменные, описанные в основной программе.
В задании используется вспомогательный алгоритм – функция. Ее имя
F, один параметр x. Функция получает на вход значение (оно обозначено
формальным параметром x) и вычисляет величину F = 4*(x-1)*(x-3). Это
запись квадратичной зависимости результата от входной величины.
В основной программе обращение к этой функции выполняется однократно в операторе R := F(a) и многократно в цикле в операторе R := F(t).
При каждом обращении к функции происходит замена формального
параметра на фактический параметр, и, таким образом, вычисления производятся с использованием конкретных значений. Например, в операторе
R := F(a) будет вычислено значение функции 4 * (–20 – 1) * (–20 – 4).
Значения, вычисляемые в цикле в операторе R := F(t), будут разными,
поскольку изменятся значение фактического параметра t. Переменная t
является параметром цикла for с границами от –20 до 20. На рисунке показаны некоторые точки графика заданной квадратичной зависимости.
38
Отобразим в таблице последовательные изменения значений переменных и выражений. Значения функции можно не вычислять, а проводить
сравнения с помощью графика:
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 станет ложным, когда функция начнет возрастать.
Минимум функции в точке 2.
F(1)
2
F(2)
2
3
Ответ: 2
да
F(2)
F(3)
нет
39
C1 (30 мин)
Требовалось написать программу, при выполнении которой с клавиатуры считываются координаты точки на плоскости (x, y –
действительные числа) и определяется принадлежность этой точки заданной закрашенной области (включая границы).
Программист торопился и написал программу неправильно.
Бейсик
INPUT x, y
IF y>=x THEN
IF y>=0 THEN
IF y<=2-x*x THEN
PRINT "принадлежит"
ELSE
PRINT "не принадлежит"
ENDIF
ENDIF
ENDIF
END
Си
void main(void){
float x,y;
scanf("% f % f",&x,&y);
if (y>=x)
if (y>=0)
if (y<=2-x*x)
printf("принадлежит");
else
printf("не принадлежит");
}
Паскаль
var x,y: real;
begin
readln(x,y);
if y>=x then
if y>=0 then
if y<=2-x*x then
write('принадлежит')
else
write('не принадлежит')
end.
Алгоритмический язык
алг
нач
вещ x,y
ввод x,y
если y>=x то
если y>=0 то
если y<=2-x*x то
вывод 'принадлежит'
иначе
вывод 'не принадлежит'
все
все
40
все
кон
Последовательно выполните следующее.
1. Перерисуйте и заполните таблицу, которая показывает, как работает программа при
аргументах, принадлежащих различным областям (A, B, C, D, E, F, G и H).
Точки, лежащие на границах областей, отдельно не рассматривать.
Область
Условие 1
(y>=x)
Условие 2
(y>=0)
Условие 3
(y<=2–x*x)
Программа
выведет
Область обрабатывается
верно
A
B
C
D
E
F
G
H
В столбцах условий укажите "да", если условие выполнится, "нет" если
условие не выполнится, "—" (прочерк), если условие не будет проверяться,
«не изв.», если программа ведет себя по-разному для разных значений,
принадлежащих данной области. В столбце "Программа выведет" укажите,
что программа выведет на экран. Если программа ничего не выводит,
напишите "—" (прочерк). Если для разных значений, принадлежащих области, будут выведены разные тексты, напишите «не изв». В последнем
столбце укажите "да" или "нет".
2. Укажите, как нужно доработать программу, чтобы не было случаев ее
неправильной работы. (Это можно сделать несколькими способами, достаточно указать любой способ доработки исходной программы.)
41
РЕШЕНИЕ
1. Заполнение таблицы предполагает выполнение программы в уме для
точек, принадлежащих каждой отдельной области. Задано 8 областей, значит, нужно «выполнить» программу для 8 точек.
Область
A
B
C
D
E
F
G
H
Условие 1
(y>=x)
Условие 2
(y>=0)
Условие 3
(y<=2–x*x)
Программа
выведет
да
да
нет
нет
да
да
нет
нет
да
нет
_
_
да
нет
_
_
нет
_
_
_
да
_
_
_
не прин
_
_
_
принадл
_
_
_
Область обрабатывается
верно
да
нет
нет
нет
да
нет
нет
нет
2. Лучший способ доработки программы – написать ее заново самостоятельно. Выделенная область ограничена сверху параболой, поэтому лучше сначала проверить именно это условие. Ограничение снизу задается
двумя отрезками прямых, y >= x и y >= 0. Выполнение любого из этих
условий вместе с верхним ограничением говорит о принадлежности точки
заданной области.
Один из вариантов правильной программы:
var x,y: real;
begin
readln(x,y);
if (y<= 2 – x*x) and ((y>= x)) or (y>= 0)) then
write('принадлежит')
else write('не принадлежит')
end.
42
7. РАЗРАБОТКА АЛГОРИТМОВ
Процесс разработки алгоритма и составления программы для компьютера может быть достаточно сложным. Рекомендуется выполнять его планомерно, придерживаясь определенной последовательности действий.
0. Математическая модель. Определение соотношений между величинами, существенных для поставленной задачи, и математическая запись
этих соотношений.
1. Входные данные: отдельные переменные и массивы, типы данных,
наличие особенностей в значениях. Описание и комментирование, ввод.
2. Результаты: переменные и массивы, типы, связь между количеством входных значений и количеством результатов. Описание и комментирование, вывод.
3. Тесты: наборы входных значений, для которых известны результаты. Учет возможных особенностей во входных значениях.
4. Разработка алгоритма: создание общей схемы алгоритма как системы взаимодействующих или последовательных блоков действий, детальная проработка каждого из этих блоков. Разрешается использование
любых форм записи алгоритма. Рекомендуется там, где можно, сразу использовать алгоритмическую нотацию, т.е. операторы языка программирования.
5. Запись программы: на основе разработанного алгоритма программа
собирается из отдельных готовых фрагментов.
В задачах повышенной сложности требуется написать как можно более
эффективную программу.
Эффективность программы оценивается по уровню использования ею
ресурсов компьютера: процессорного времени и оперативной памяти.
Например, из двух программ, написанных для решения одной и той же задачи, более эффективной будет та, которая формирует результат путем
выполнения меньшего количества элементарных действий. Говорят, что
эта программа имеет большее быстродействие. Для оценки эффективности
программы определяется функция зависимости количества элементарных
действий от размера входных данных. Эту функцию называют трудоемкостью. Более эффективной является программа, обладающая меньшей
трудоемкостью.
43
Если говорить об использовании оперативной памяти, то более эффективной считается программа, хранящая в памяти только безусловно необходимую информацию.
Итак, наиболее эффективная программа потребляет меньше ресурсов.
Но обычно сэкономить одновременно на всех ресурсах не удается, поэтому нужен разумный компромисс между быстродействием и потреблением
памяти.
B2 (4 мин)
У исполнителя Утроитель две команды, которым присвоены номера:
1. прибавь 1,
2. умножь на 3.
Первая из них увеличивает число на экране на 1, вторая – утраивает его.
Запишите порядок команд в программе преобразования числа 1 в число 22,
содержащей не более 5 команд, указывая лишь номера команд. (Например,
21211 – это программа
умножь на 3
прибавь 1
умножь на 3
прибавь 1
прибавь 1,
которая преобразует число 1 в 14.)
(Если таких программ более одной, то запишите любую из них.)
Ответ: ___________________________.
РЕШЕНИЕ
Задачу удобнее решать от конца к началу. Получить в конце 22 можно
только после выполнения команды прибавь 1. Значит, предыдущее значение будет 22–1 = 21. 21 делится на 3, следовательно, может получиться
после выполнения умножь на 3. 21 / 3 = 7. Число 7 может получиться
только после выполнения прибавь 1. 7–1 = 6. 6 делится на 3, следовательно, может получиться после выполнения умножь на 3. 6 / 3 = 2. Первой
командой должна быть прибавь 1.
Итак, нужно выполнить такую последовательность действий:
+ 1 * 3 + 1 * 3 + 1 . Их всего 5.
Ответ: 12121
44
C2 (30 мин)
Дан целочисленный массив из 20 элементов. Элементы массива могут
принимать целые значения от 0 до. 1000. Опишите на русском языке или
на одном из языков программирования алгоритм, позволяющий найти и
вывести минимальное значение среди элементов массива, которые имеют
чётное значение и не делятся на три. Гарантируется, что в исходном массиве есть хотя бы один элемент, значение которого чётно и не кратно трем.
Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но использовать все описанные
переменные не обязательно.
Паскаль
const
N = 20;
var
a: array [1..N] of integer;
i, j, min: integer;
begin
for i := 1 to N do
readln(a[i]);
…
end.
Бейсик
N = 20
DIM A(N) AS INTEGER
DIM I, J, MIN AS INTEGER
FOR I = 1 TO N
INPUT A(I)
NEXT I
…
END
Алгоритмический язык
алг
нач
цел N = 20
целтаб a[1:N]
цел i, j, MIN
нц для i от 1 до N
ввод a[i]
кц
...
кон
СИ
#include <stdio.h>
#define N 20
void main(void){
int a[N];
int i, j, min;
for (i=0; i<N; i++)
scanf("% d", &a[i]);
…
}
Русский (естественный) язык
Объявляем массив A из 20 элементов.
Объявляем целочисленные переменные I, J, MIN.
В цикле от 1 до 20 вводим элементы массива A с 1-го по 20-й.
…
45
В качестве ответа Вам необходимо привести фрагмент программы (или
описание алгоритма на естественном языке), который должен находиться
на месте многоточия. Вы можете записать решение также на другом языке
программирования (укажите название и используемую версию языка программирования, например, Borland Pascal 7.0) или в виде блок-схемы. В
этом случае Вы должны использовать те же самые исходные данные и переменные, какие были предложены в условии (например, в образце, записанном на естественном языке).
РЕШЕНИЕ
Основа алгоритма – определение минимального значения среди элементов массива, которые имеют четное значение и не делятся на 3. Следовательно, в стандартную программу поиска минимума в массиве нужно
добавить проверку каждого элемента на соответствие условию задачи.
Программа на Паскале:
const
N = 20;
var
a: array[1..N] of integer;
i, j, min: integer;
begin
for i:=1 to N do readln(a[i]);
min:= 1000; {начальное значение для минимума}
for i:=1 to N do
if (a[i] mod 2 = 0) and (a[i] mod 3 <> 0) and (a[i] < min)
then min:=a[i];
writeln(min);
end.
Переменная j не понадобилась.
C3 (30 мин)
У исполнителя Утроитель две команды, которым присвоены номера:
1. прибавь 1,
2. умножь на 3.
Первая из них увеличивает число на экране на 1, вторая – утраивает его.
46
Программа для Утроителя – это последовательность команд.
Сколько есть программ, которые число 1 преобразуют в число 29?
Ответ обоснуйте.
РЕШЕНИЕ
Число 29 не делится на 3, поэтому все программы будут заканчиваться
двумя командами 11.
Разные варианты программ получаются за счет разных последовательностей вычисления значений, кратных 3. К таким значениям относятся 3, 6,
9, 12, 15, 18, 21, 24, 27. Например, 3 из 1 получается либо программой 11,
либо командой 2.
Рассмотрим сначала, какими способами из 1 можно получить небольшое число, например, 9. Изобразим последовательности команд на графе,
обозначив команду +1 знаком «–», а команду *3 знаком «|».
1
–
2
–
3
|
1
–
4
–
5
–
6
|
21
–
7
–
8
–
9
|
32
Нижними индексами указано количество последовательностей команд,
с помощью которых можно из 1 получить соответствующее число.
Замечаем, что дополнительные варианты программ появляются для чисел, кратных 3 (3, 6, 9), а между этими значениями количество вариантов
программ остается неизменным. Учитывая это, не будем обозначать на
графе числа, для которых количество вариантов программ не меняется по
сравнению с предыдущим числом.
1 – 32
|
1
– 62+1=3 – 93+2=5 – 127 – 159 – 1812 – 2115 –
|
|
|
|
|
|
21
32
42
52
63
73
– 2418 – 2723
|
|
83
95
Ответ: 23.
– 2823
– 2923
47
Ниже приводятся пояснения к решению, опубликованные в демонстрационном варианте ЕГЭ. Они выделены курсивом.
Обозначим R(n) – количество программ, которые преобразуют число 1 в
число n. Обозначим t(n) наибольшее кратное трем, не превосходящее n.
Обе команды исполнителя увеличивают исходное число, поэтому общее
количество команд в программе не может превосходить 28.
Верны следующие соотношения:
1. Если n не делится на 3, то тогда R(n) = R(t(n)), так как существует
единственный способ получения n из t(n) – прибавлением единиц.
2. Пусть n делится на 3.
Тогда R(n) = R(n/3)+R(n-1)= R(n/3)+R(n-3) (если n>3).
При n=3 R(n) = 2 (два способа: прибавлением двух единиц или однократным умножением на 3).
Поэтому достаточно постепенно вычислить значения R(n) для всех чисел,
кратных трем и не превосходящих 29: сначала вычисляем R(1), затем
R(3), R(6) и т.д.
Имеем:
R(2)=1
R(3) = 2 = R(4)=R(5)
R(6) = R(2)+R(3) =1+2 = 3 = R(7)=R(8)
R(9) = R(3)+R(6) =2+3 =5 = R(10)=R(11)
R(12) = R(4)+R(9) = 2+5 = 7 = R(13)=R(14)
R(15) = R(5)+R(12) =2+7 =9 = R(16)=R(17)
R(18) = R(6)+R(15) = 3+9 = 12 = R(19)=R(20)
R(21) = R(7)+R(18) = 3+12 = 15 = R(22)=R(23)
R(24) = R(8)+R(21) = 3+ 15 = 18 = R(25)=R(26)
R(27) = R(9)+R(24) = 5 + 18 = 23 = R(28)=R(29)
Ответ: 23
Другая форма решения
Будем решать поставленную задачу последовательно для чисел 1, 2, 3, …,
29 (то есть для каждого из чисел определим, сколько программ исполнителя существует для его получения). Количество программ, которые преобразуют число 1 в число n, будем обозначать через R(n). Число 1 у нас
уже есть, значит, его можно получить с помощью “пустой” программы.
Любая непустая программа увеличит исходное число, т.е. даст число,
больше 1.
48
Значит, R(1) = 1. Для каждого следующего числа рассмотрим, из какого
числа оно может быть получено за одну команду исполнителя. Если число
не делится на три, то оно может быть получено только из предыдущего
с помощью команды прибавь 1. Значит, количество искомых программ
для такого числа равно количеству программ для предыдущего числа: R(i)
= R(i-1). Если число на 3 делится, то вариантов последней команды два:
прибавь 1 и умножь на 3, тогда R(i) = R(i-1) + R(i/3). Заполним соответствующую таблицу по приведенным формулам слева направо:
1
1
16
9
2
1
17
9
3
2
18
12
4
2
19
12
5
2
20
12
6
3
21
15
7
3
22
15
8
3
23
15
9
5
24
18
10
5
25
18
11
5
26
18
12
7
27
23
13
7
28
23
14
7
29
23
15
9
При этом ячейки, относящиеся к числам, которые не делятся на 3, можно
в решении и опустить (за исключением первого и последнего чисел):
1
1
3
2
6
3
9
5
12
7
15
9
18
12
21
15
24
18
27
23
30
28
31
28
C4 (60 мин)
В командных олимпиадах по программированию для решения предлагается не больше 11 задач. Команда может решать предложенные задачи в
любом порядке. Подготовленные решения команда посылает в единую
проверяющую систему соревнований. Вам предлагается написать эффективную, в том числе по используемой памяти, программу, которая будет
статистически обрабатывать пришедшие запросы, чтобы определить
наиболее популярные задачи. Следует учитывать, что количество запросов
в списке может быть очень велико, так как многие соревнования проходят
с использованием Интернет.
Перед текстом программы кратко опишите используемый вами алгоритм решения задачи.
На вход программе в первой строке подаётся количество пришедших
запросов N. В каждой из последующих N строк записано название задачи в
виде текстовой строки. Длина строки не превосходит 100 символов, название может содержать буквы, цифры, пробелы и знаки препинания.
49
Пример входных данных:
6
А+B
Крестики-Нолики
Прямоугольник
Простой делитель
А+В
Простой делитель
Программа должна вывести список из трёх наиболее популярных задач
с указанием количества запросов по ним. Если в запросах упоминаются
менее трех задач, то выведите информацию об имеющихся задачах. Если
несколько задач имеют ту же частоту встречаемости, что и третья по частоте встречаемости задача, их тоже нужно вывести.
Пример выходных данных для приведённого выше примера входных данных:
А+В 2
Простой делитель 2
Крестики-Нолики 1
Прямоугольник 1
РЕШЕНИЕ
Задача, предложенная в этом задании, сложная, поэтому будет решать
ее, придерживаясь рекомендованного плана действий.
1. Входные данные. Значения входных данных находятся в строках
символов. Размещать все строки в памяти, скорее всего, не нужно. Для
ввода понадобится символьная переменная (char).
Важные для решения сведения о входных данных – сколько раз встретилось каждое отдельное название задачи. Подсчитывать эти величины
можно (и нужно) сразу при вводе. Для этого понадобится целочисленный
массив. Эффективное решение получится, если для подсчетов использовать массив, в котором каждый элемент связан с определенным названием.
Длина этого массива будет равна 11, по количеству разных задач.
Описание переменных:
var stroka : string;
50
N, i : integer;
count : array[1..11] of integer;
Можно оформить ввод:
readln(N);
for i := 1 to N do begin
readln(stroka);
отметить название в массиве count;
end;
2. Результаты.
Информация, на основе которой будут выводиться результаты, сохраняется в массиве count. Нужно знать три самых больших значения счетчиков.
С одной стороны, для этого можно будет упорядочить массив. Трудоемкость простого алгоритма упорядочения n * (n – 1) / 2. Для рассматриваемой задачи понадобится выполнить порядка 60 сравнений и перестановок
значений.
С другой стороны, можно обойтись без упорядочения. Ищем максимальное значение счетчика, выводим все названия, которым соответствует
найденное значение, и сразу обнуляем эти счетчики. Так поступаем еще 2
раза. Трудоемкость предлагаемой последовательности практически не отличается от упорядочения из-за того, что массив очень короткий, но запись алгоритма может оказаться проще.
flag := 1; k := 1;
while (flag = 1) and (k <= 3) do begin
max := count[ 1 ];
for i := 2 to 11 do
if count[ i ] > max then max := count[ i ];
if max > 0 then begin
for i := 1 to 11 do
if count[ i ] = max then begin
вывод соответствующего названия;
writeln(count[ i ]);
count[ i ] := 0;
end
else flag : = 0;
k := k + 1;
end;
51
Дополнительные переменные нужно описать:
flag, k, max : integer;
4. Тесты.
1
2
3
12
Ответ
A
А 4
Н
Ы 4
Н
Щ
Н 2
Н
A
Щ 1
Н
Ы
Ц 1
Н
1
Ответ
A
А 1
5
Ответ
Н
Н 5
Н
Ц
A
A
Ы
Ы
Ы
4. Разработка алгоритма.
Общая схема алгоритма имеет следующий вид:
начальные значения;
ввод данных;
вывод результатов;
Проведем детализацию отдельных блоков алгоритма. Блок ввода данных
уже оформлен, за исключением одного действия:
52
отметить название в массиве count
Для установления соответствия между названием и счетчиком опишем
массив длиной 11, в котором во время ввода будем размещать разные
названия. Количество уже известных названий обозначим kol.
Описание переменных:
name : array [1..11] of string;
kol : integer;
Заполнение массивов названий и счетчиков:
k := 1;
while (k <= kol) and (stroka <> name[k]) do k := k + 1;
if k > kol then begin
kol := kol + 1;
{новое название}
name[ kol ] := stroka;
end;
count[ k ] := count[ k ] + 1;
Блок вывода данных уже оформлен, за исключением одного действия:
вывод соответствующего названия
write(name[ i ]);
начальные значения
kol := 0;
for i := 1 to 11 do count[ i ] := 0;
На этом разработка алгоритма закончена.
53
5. Запись программы.
program nazv;
var stroka : string;
N, i : integer;
count : array[1..11] of integer;
name : array [1..11] of string;
kol, k, flag : integer;
begin
readln(N);
for i := 1 to N do begin
readln(stroka);
k := 1;
while (k <= kol) and (stroka <> name[k]) do k := k + 1;
if k > kol then begin
kol := kol + 1;
name[ kol ] := stroka;
end;
count[ k ] := count[ k ] + 1;
end;
flag := 1; k := 1;
while (flag = 1) and (k <= 3) do begin
max := count[ 1 ];
for i := 2 to 11 do
if count[ i ] > max then max := count[ i ];
if max > 0 then begin
for i := 1 to 11 do begin
if count[ i ] = max then begin
write(name[ i ]);
writeln(count[ i ]);
count[ i ] := 0;
end
end
else flag : = 0;
k := k + 1;
end;
end.
54
ЛИТЕРАТУРА
Задания, разобранные в методических указаниях, опубликованы в [1].
Пояснения, с которых начинается каждая глава методических указаний,
взяты из [2]. Дополнительные задачи высокого уровня сложности можно
найти в [3].
1. Демонстрационный вариант ЕГЭ по информатике 2012 г. –
http://www.fipi.ru/view/sections/222/docs/578.html – Информатика.
2. Материалы для подготовки к ЕГЭ по информатике: методические
указания / Ю.Л. Костюк, И.Л. Фукс. –
http://inf.tsu.ru/WebDesign/finf2.nsf/structurl/abitur_programma
3. Основы разработки алгоритмов: учебное пособие / Ю.Л. Костюк,
И.Л. Фукс. – М.: БИНОМ. Лаборатория знаний, 2010. – 286 с. –
(Элективный курс. Информатика).
ОГЛАВЛЕНИЕ
1.
АЛГОРИТМЫ НА ЕСТЕСТВЕННОМ ЯЗЫКЕ .......................... 3
2.
ОСНОВЫ ЛОГИКИ ....................................................................... 5
3.
СИСТЕМЫ СЧИСЛЕНИЯ .......................................................... 10
4.
КОДИРОВАНИЕ ИНФОРМАЦИИ ........................................... 15
5.
ИНФОРМАЦИОННЫЕ ТЕХНОЛОГИИ................................... 19
6.
АНАЛИЗ АЛГОРИТМОВ ........................................................... 28
7.
РАЗРАБОТКА АЛГОРИТМОВ .................................................. 42
Download