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

advertisement
Томский государственный университет
Факультет информатики
И. Л. Фукс
ИНФОРМАТИКА: ПОДГОТОВКА К ЕГЭ – 2011
Методические указания
Томск – 2011
Методические указания предназначены для учащихся 11-х классов, собирающихся сдавать ЕГЭ по предмету «Информатика и ИКТ» с
целью поступления на физико-математические и технические факультеты университетов. Материал базируется на демонстрационном варианте ЕГЭ 2011 года, адрес электронного ресурса –
http://www1.ege.edu.ru/files/demo/demo_2011/inf_demo_2011.pdf
Задания ЕГЭ сгруппированы по темам, каждая тема предваряется
кратким описанием соответствующего раздела теоретической части
школьного курса информатики. Для каждого задания приводится подробный разбор решения.
Почтовый адрес:
634050, г. Томск, пр. Ленина, 36, ТГУ,
приемная комиссия
Телефон:
(382-2) 52-96-72
http://www.tsu.ru
Информационные сайты ТГУ:
http://abiturient.tsu.ru
Информационный сайт факультета
http://www.inf.tsu.ru
информатики ТГУ:
Электронная почта:
fooxil@sibmail.com
© Фукс И. Л., 2011
3
1. АЛГОРИТМЫ НА ЕСТЕСТВЕННОМ ЯЗЫКЕ
Для решения этих задач нужно уметь устанавливать причинноследственные связи между данными.
A6 (2 мин)
Путешественник пришел к 08:00 на автостанцию населенного пункта
ЛИСЬЕ и обнаружил следующее расписание автобусов:
Пункт
отправления
ЛИСЬЕ
СОБОЛЕВО
ЕЖОВО
ЗАЙЦЕВО
ЛИСЬЕ
ЛИСЬЕ
ЗАЙЦЕВО
СОБОЛЕВО
ЕЖОВО
ЗАЙЦЕВО
Пункт
прибытия
ЗАЙЦЕВО
ЛИСЬЕ
ЛИСЬЕ
ЕЖОВО
СОБОЛЕВО
ЕЖОВО
ЛИСЬЕ
ЗАЙЦЕВО
ЗАЙЦЕВО
СОБОЛЕВО
Время
отправления
07:50
08:55
09:05
10:00
10:15
10:45
11:05
11:10
12:15
12:45
Время
прибытия
09:05
10:05
10:15
11:10
11:30
12:00
12:15
12:25
13:25
13:55
Определите самое раннее время, когда путешественник сможет оказаться в пункте ЗАЙЦЕВО согласно этому расписанию.
1) 09:05
2) 12:15
3) 12:25
4) 13:25
РЕШЕНИЕ
При составлении маршрута следует иметь в виду, что из одного пункта
можно попасть в другой как прямым рейсом, так и с пересадкой.
Рассмотрим два варианта решения задачи.
Решение А: от времени отправления ко времени прибытия.
Находясь на автовокзале с 08:00, в соответствии с расписанием из
ЛИСЬЕ можно выехать в 10:15 или 10:45. Вывод 1: прямым рейсом на
07:50 с прибытием в 09:05 удастся выехать только на следующий день.
4
Рейс до СОБОЛЕВО прибывает в 11:30, а отправление из СОБОЛЕВО
в ЗАЙЦЕВО – в 11:10. Вывод 2: поездка с пересадкой в СОБОЛЕВО завершится в 12:25 на следующий день.
Рейс до ЕЖОВО прибывает в 12:00, а отправление из ЕЖОВО в
ЗАЙЦЕВО – в 12:15. Вывод 3: поездка с пересадкой в ЕЖОВО завершится
в 13:25. Окончательный вывод: ехать через ЕЖОВО. Ответ: 4.
Решение Б: от времени прибытия ко времени отправления.
В соответствии с расписанием в ЗАЙЦЕВО можно попасть в 09:05,
12:25 или 13:25. Вывод 1: ответ 2) неверен.
Чтобы попасть в ЗАЙЦЕВО в 09:05, нужно выехать из ЛИСЬЕ в 07:50,
а путешественник оказывается на станции позже. Значит, он сможет приехать в ЗАЙЦЕВО только на следующий день.
Чтобы попасть в ЗАЙЦЕВО в 12:25, нужно ехать через СОБОЛЕВО.
Из ЛИСЬЕ до СОБОЛЕВО автобус отправляется в 10:15, путешественник
в это время уже находится на автовокзале. Прибытие в СОБОЛЕВО в
11:30. До ЗАЙЦЕВО можно уехать только на следующий день рейсом в
11:10.
Чтобы попасть в ЗАЙЦЕВО в 13:25, нужно ехать через ЕЖОВО. Из
ЛИСЬЕ до ЕЖОВО автобус отправляется в 10:45, путешественник в это
время уже находится на автовокзале. Прибытие в ЕЖОВО в 12:00, а отправление до ЗАЙЦЕВО в 12:15.
Вывод 2: ответы 1) и 3) неверны.
Окончательный вывод: ехать через ЕЖОВО. Ответ: 4.
A7 (2 мин)
Лена забыла пароль для входа в Windows XP, но помнила алгоритм его
получения из символов «A153B42FB4» в строке подсказки. Если последовательность символов «В4» заменить на «B52» и из получившейся строки
удалить все трехзначные числа, то полученная последовательность и будет
паролем:
1) ABFB52
2) AB42FB52
3) ABFB4
4) AB52FB
РЕШЕНИЕ
Последовательно проверяем выполнение каждого правила для каждого
кода, отсеивая неправильные ответы.
5
В конце пароля должны быть символы «В52», значит ответы 3) и 4) неверны.
После удаления трехзначных чисел «153» и «522» между буквами «F»
и «В» не останется цифр. Следовательно, ответ 2) неверный.
Ответ: 1.
B8 (10 мин)
Строки (цепочки символов латинских букв) создаются по следующему
правилу.
Первая строка состоит из одного символа – латинской буквы «А».
Каждая из последующих цепочек создается такими действиями: в очередную строку сначала записывается буква, чей порядковый номер в алфавите
соответствует номеру строки (на i-м шаге пишется i-я буква алфавита), к
ней слева дважды подряд приписывается предыдущая строка.
Вот первые 4 строки, созданные по этому правилу:
(1)
(2)
(3)
(4)
A
AAB
AABAABC
AABAABCAABAABCD
Латинский алфавит (для справки):
ABCDEFGHIJKLMNOPQRSTUVWXYZ
Имеется задание:
«Определить символ, стоящий в n-й строке на позиции 2n-1 –5, считая
от левого края цепочки».
Выполните это задание для n=8.
РЕШЕНИЕ
Номер указанной позиции равен 123.
Подсчитаем последовательно длины цепочек для того, чтобы определить, в каком месте появляется нужный нам символ. Длина каждой следующей цепочки равна удвоенной длине предыдущей цепочки +1.
(1)
(2)
A
AAB
1
3
6
(3)
AABAABC
(4) AABAABCAABAABCD
(5)
(4)(4)E
(6)
(5)(5)F
(7)
(6)(6)G
Ответ: С
7
15
31
63
127 – нужный символ находится в
этой цепочке. 127–123+1=5, отсчитываем 5 символов от конца этой цепочки. На 123-м месте находится предпоследний символ из цепочки (4) – С.
7
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
Логические операции удобно определять с помощью таблиц истинности, в которых для конкретных значений аргументов приводятся значения
выражений.
8
Таблицы истинности для указанных логических операций:
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.
9
A9 (2 мин)
Дан фрагмент таблицы истинности выражения F:
X
0
1
0
Y
1
1
0
Z
1
1
1
F
0
1
1
Какое выражение соответствует F?
1) X /\ ¬Y /\ ¬Z
2) ¬X /\ ¬Y /\ Z
3) ¬X \/ ¬Y \/ Z
4) X \/ ¬Y \/¬Z
РЕШЕНИЕ
Поскольку в ответах присутствуют выражения с операцией конъюнкции, удобнее начать проверку именно с них.
Ответ 1): выражение будет истинным, если X истинно, а Y и Z ложны.
Это соответствует первой строке таблицы истинности, но не подходит для
второй и третьей строк.
Ответ 2): выражение будет истинным, если Z истинно, а X и Y ложны.
Это соответствует только третьй строке таблицы.
Ответ 3): выражение будет истинным, если Z истинно, или X ложно,
или Y ложно. Это не выполняется в первой строке таблицы.
Ответ 4) выражение будет истинным, если X истинно, или Y ложно,
или Z ложно. Это полностью соответствует таблице.
Ответ: 4.
A10 (1 мин)
Какое логическое выражение равносильно выражению
A \/¬(¬B \/¬C)
1) ¬A \/ B \/ ¬C
2) A \/( B /\ C)
3) A \/ B \/ C
4) A \/ ¬B \/ ¬C
РЕШЕНИЕ
10
Преобразуем исходное выражение, раскрывая скобки:
A \/¬ ¬(B /\C) = { закон де Моргана ¬( A Λ B) = ¬ A \/¬ B }
A \/(B /\C) = {двойное отрицание ¬¬A = A}.
Отсюда видно, что ответ: 2.
Замечание. Подобные задачи можно решать, составляя таблицы истинности для заданных выражений и сравнивая соответствующие столбцы друг с
другом.
A15 (3 мин)
Какое из приведенных имен удовлетворяет логическому условию
¬ (последняя буква гласная → первая буква согласная) Λ вторая буква
согласная
1) ИРИНА
2) АРТЕМ
3) СТЕПАН
4) МАРИЯ
РЕШЕНИЕ
Введем обозначения: A = (последняя буква гласная); B = (первая буква
согласная); C = (вторая буква согласная). Тогда высказывание примет вид
¬ (A → B) Λ C. Составим таблицу истинности для части высказывания:
A
0
0
1
1
B
0
1
0
1
A→B
1
1
0
1
¬ (A → B)
0
0
1
0
Исходное высказывание будет истинным, если ¬ (A → B) и C истинны.
Для этого, в свою очередь, A должно быть истинным, а B – ложным. Значит, имя должно закачиваться гласной буквой, первая буква – не согласная, вторая – согласная. Следовательно, ответ: 1.
B7 (8 мин)
Девять школьников, остававшихся в классе на перемене, были вызваны
к директору. Один из них разбил окно в кабинете. На вопрос директора,
кто это сделал, были получены следующие ответы:
Володя: «Это сделал Саша».
11
Аня: «Володя лжет!»
Егор: «Маша разбила».
Саша: «Аня говорит неправду!»
Рома: «Разбила либо Маша, либо Нина…»
Маша: «Это я разбила!»
Нина: «Маша не разбивала!»
Коля: «Ни Маша, ни Нина этого не делали».
Олег: «Нина не разбивала!»
Кто разбил окно, если известно, что из этих девяти высказываний истинны только три?
Ответ запишите в виде первой буквы имени.
РЕШЕНИЕ
Приведенные в условии задачи сведения являются высказываниями.
Для решения подобных задач удобно использовать таблицу, в клетках которой отображены значения этих высказываний или значения переменных,
входящих в высказывание. Создадим таблицу для отображения значений
высказываний. Будем заносить в клетку таблицы «1», если высказывание
истинно, и «0», если высказывание ложно. В верхней строке таблицы укажем имена школьников, дававших ответа на вопрос директора. В левом
столбце перечислим имена школьников, о которых говорилось в ответах.
Пусть Володя сказал правду. Тогда все другие ответы, содержащие
указание на ребят, разбивших окно, ложны. Ответы, содержащие указание
на ребят, не разбивавших окно, истинны.
Володя
Володя
Аня
Саша
Маша
Нина
Аня
Егор
Саша
Рома
Маша
Нина
Коля
Олег
0
0
0
1
1
1
1
1
0
Из таблицы видно, что истинными получаются высказывания четырех
человек, что противоречит условию задачи.
Пусть Володя сказал неправду. Тогда истинно высказывание Ани и
ложно высказывание Саши.
Володя Аня Егор Саша Рома Маша Нина Коля Олег
Володя
1
12
Аня
Саша
Маша
Нина
0
0
Пусть истинно высказывание Егора. Тогда истинны высказывания Ромы и Маши.
Володя Аня Егор Саша Рома Маша Нина Коля Олег
Володя
1
Аня
0
Саша
0
Маша
1
1
1
Нина
0
Из таблицы видно, что истинными получаются высказывания четырех
человек, что противоречит условию задачи.
Пусть высказывание Егора ложно. Тогда ложно высказывание Маши,
ложно указание Ромы на Машу, а Нина сказала правду.
Володя Аня Егор Саша Рома Маша Нина Коля Олег
Володя
1
Аня
0
Саша
0
Маша
0
0
1
0
Нина
Пусть Рома сказал правду про Нину. Значит, Коля и Олег дали ложные
ответы.
Володя Аня Егор Саша Рома Маша Нина Коля Олег
Володя
1
Аня
0
Саша
0
Маша
0
0
0
0
1
Нина
1
0
0
В таблице отмечены три истинных высказывания, остальные ложны.
Значит, окно разбила Нина.
Ответ: Н
B10 (10 мин)
13
Сколько различных решений имеет уравнение
((J → K) → ( M /\ N/\ L)) /\ (( J /\¬ K) → ¬( M /\ N/\ L)) /\ (M → J ) =1,
где J, K, L, M, N – логические переменные?
В ответе не нужно перечислять все различные наборы значений J, K,
L, M и N, при которых выполнено данное равенство. В качестве ответа
нужно указать количество таких наборов.
РЕШЕНИЕ
Если логическое выражение содержит p переменных, то таблица истинности для него состоит из S = 2p строк. В приведенном примере p =5,
следовательно, S = 32. Нужно выяснить, в скольких строках значение выражения равно 1.
Заданное в уравнении выражение представляет собой логическое произведение (конъюнкцию) трех выражений. Каждое из них должно быть
истинным, для того чтобы исходное выражение было истинным.
((J → K) → ( M /\ N/\ L)) = 1;
(1)
(( J /\¬ K) → ¬( M /\ N/\ L)) = 1;
(2)
M → J = 1.
(3)
По определению операции следования J → K = ¬ J \/ K.
Выполним преобразование, воспользовавшись законом де Моргана
¬(a \/ b) = ¬a/\¬ b:
J /\¬ K = ¬(¬J \/ K) = ¬( J → K).
Введем обозначения:
A = J → K; B = M /\ N/\ L.
Получаем A → B = 1;
(1а)
¬ A → ¬B = 1.
(2а)
Условие (1а) выполняется, если A = 0 или A = 1, B = 1.
Условие (2а) выполняется, если A = 1 или A = 0, B = 0.
Условия (1а) и (2а) выполняются одновременно, если A = 0, B = 0 или
A = 1, B = 1.
Выясним, при каких значениях исходных переменных выполняется A =
0, B = 0. Результат операции следования равен 0, только если J = 1, K = 0.
Результат операции логического умножения равен 0, если хотя бы один из
операндов M, N, L равен 0. Получаем 7 вариантов одновременного выполнения условий (1а) и (2а).
14
Выясним, при каких значениях исходных переменных выполняется A =
1, B = 1. Результат операции следования равен 1, если J = 0 или J = 1, K =
1. Значение J = 0 является недопустимым для выполнения условия (1а).
Результат операции логического умножения равен 1, если каждый из операндов M, N, L равен 1. Получаем 1 вариант одновременного выполнения
условий (1а) и (2а).
Перейдем к рассмотрению условия (3). Результат операции следования
равен 1, если M = 0 или M = 1, J = 1. Значения других переменных могут
быть любыми. Для одновременного выполнения условий (1а), (2а) и (3)
подходят все 8 вариантов одновременного выполнения условий (1а) и (2а).
Ответ: 8
15
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. Задача перевода заключается в вычислении этих цифр.
16
Из записи полинома видно, что младшая из искомых цифр может быть
вычислена как остаток от целочисленного деления заданного числа на основание 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.
17
Номер разряда
Вес разряда
Заполнение
ницами
еди-
Двоичное число
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
18
Пример 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 мин)
Дано A = A716, B = 2518. Какое из чисел C, записанных в двоичной системе, отвечает условию A < C < B ?
1) 101011002
2) 101010102
3) 101010112
4) 101010002
РЕШЕНИЕ
1. Заданные числа переведем в двоичную систему. Каждую цифру числа A заменим последовательностью из 4-х двоичных цифр, для цифр числа
B – по 3 двоичные цифры:
A = 10100111;
B = 010101001 = 10101001.
2. Количество цифр в числах одинаково, следовательно, нужно сравнивать сами цифры от старших разрядов к младшим. Старшие 4 разряда в
числах A и B и всех ответах не отличаются друг от друга, поэтому будем
анализировать младшие 4 разряда.
3-й разряд в числе А равен 0, этот же разряд в числе В и во всех ответах равен 1. Значит, любой из ответов удовлетворяет условию A < C .
19
2-й разряд в числе В равен 0, а в ответе 1) он равен 1, т.е. ответ 1) неправильный.
1-й разряд в числе В равен 0, а в ответах 2) и 3) он равен 1, эти ответы
неправильные.
3. Ответ 4) удовлетворяет условию C < B, значит он правильный.
Ответ: 4.
A4 (2 мин)
Чему равна сумма чисел 578 и 4616?
1) 3518
2) 1258
3) 5516
4) 7516
РЕШЕНИЕ
1. Заданные числа перевести в двоичную систему. Каждую цифру
восьмеричного числа заменить последовательностью из 3-х двоичных
цифр, для цифр шестнадцатеричного числа – по 4 двоичные цифры:
578 = 1011112;
4616 = 010001102 = 10001102;
3518 = 0111010012 = 111010012;
1258 = 0010101012 = 10101012;
5516 = 010101012 = 1010102;
7516 = 011101012 = 11101012.
2. Количество цифр в ответе 3) меньше, чем в одном из слагаемых,
следовательно, этот ответ неправильный.
3. Выполним сложение в двоичной системе счисления:
578
1
0
1
1
1
1
4616
1 0
0
0
1
1
0
сумма
0
1
0
1
1 1
1
Единицы в старших разрядах суммы показывают, что ответ 2) неправильный. Количество цифр в ответе 1) больше, чем в сумме. Значит, ответ
1) неправильный.
Ответ: 4.
B5 (5 мин)
В системе счисления с некоторым основанием десятичное число 18 записывается в виде 30. Укажите это основание.
20
РЕШЕНИЕ
Обозначим неизвестное основание x. Тогда, используя правило перевода чисел из системы с основанием x в десятичную, можно записать:
3 * x + 0 = 18. Отсюда x = 6.
Ответ: 6
21
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.
22
A2 (3 мин)
Автоматическое устройство осуществило перекодировку информационного сообщения на русском языке длиной в 20 символов, первоначально записанного в 16-битном коде Unicode, в 8-битную кодировку КОИ-8. При
этом информационное сообщение уменьшилось на
1) 320 бит 2) 20 бит 3) 160 байт 4) 20 байт
РЕШЕНИЕ
16-битный код информационного сообщения в 2 раза больше 8битного кода того же сообщения. Значит, после перекодировки размер кода сообщения уменьшился в 2 раза. 20 символов, закодированных 8битным кодом, занимают 20 байт. Следовательно, на такое же количество
байт уменьшилась длина кода сообщения.
Ответ: 4.
A5 (1 мин)
Для передачи по каналу связи сообщения, состоящего только из символов А, Б, В и Г, используется неравномерный (по длине) код: А-00, Б-11,
В-10, Г-011. Через канал связи передается сообщение: ГБВАВГ. Закодируйте сообщение данным кодом. Полученную двоичную последовательность переведите в шестнадцатеричную систему счисления. Какой вид будет иметь это сообщение?
1) 71013
2) DBCACD
3) 7A13
4) 31A7
РЕШЕНИЕ
Приведем 2 варианта решения.
Решение I: выполнение перевода.
1. Запишем таблицу кодов:
А 00
Б 11
В 010
Г 011
2. Сформируем двоичный код последовательности символов ГБВАВГ:
011 11 010 00 010 011.
23
3. Переведем полученный код в 16-ричное представление, используя
соотношение 16 = 24. Разделим код на четверки разрядов и каждую четверку заменим соответствующей ей 16-ричной цифрой: 7 А 1 3.
Ответ: 3.
Решение II: вычисление длины кода.
1. Длина двоичного кода равна 2 * 2 + 3 * 4 = 16. Следовательно, в 16ричном представлении получится 4 цифры. Отсюда ответы 1) и 2) неверны.
2. Код последней буквы 011, а 716 = 01112. Значит, ответ 4) неверен.
Ответ: 3.
A16 (1 мин)
В некоторой стране автомобильный номер длиной 7 символов составляют из заглавных букв (используются только 22 различные буквы) и десятичных цифр в любом порядке. Каждый такой номер в компьютерной
программе записывается минимально возможным и одинаковым целым
количеством байт (при этом используют посимвольное кодирование и все
символы кодируются одинаковым и минимально возможным количеством
бит). Определите объем памяти, отводимый этой программой для записи
50 номеров.
1) 350 байт
2) 300 байт
3) 250 байт
4) 200 байт
РЕШЕНИЕ
1. Для составления номера используются 22 + 10 = 32 разных символа. Каждый символ кодируется двоичным кодом. Применим соотношение: N = SD. Здесь N = 32, S=2. Следовательно, D = 5, т.е. код
каждого символа номера равен 5.
2. Номер содержит 7 символов, значит длина двоичного кода номера
5 * 7 = 35 бит. Поскольку номер записывается целым количеством
байт, то вычисляем 35 div 8 = 4 и еще один не полностью заполненный байт. Итак, для записи одного номера требуется 5 байт, а
для 50 номеров – 5 * 50 = 250 байт.
Ответ: 3.
B1 (1 мин)
24
Для передачи сигналов на флоте используют специальные сигнальные
флаги, вывешиваемые в одну линию (последовательность важна). Какое
количество различных сигналов может передать корабль при помощи четырех сигнальных флагов, если на корабле имеются флаги трех различных
видов (флагов каждого вида неограниченное количество)?
РЕШЕНИЕ
Применим соотношение: N = SD. В задаче S=3, число видов флагов.
Сигнал подается при помощи 4 флагов, т.е. он состоит из 4-х символов,
значит D=4. Следовательно, N = 34 = 81.
Ответ: 81
25
5. ИНФОРМАЦИОННЫЕ ТЕХНОЛОГИИ
В заданиях, относящихся к этой теме, требуется умение работать в
приложениях операционной системы с электронными таблицами, базами
данных и электронными изображениями, создавать Web-страницы, выполнять операции с файлами.
A3 (1 мин)
Для групповых операций с файлами используются маски имен файлов. Маска представляет собой последовательность букв, цифр и прочих
допустимых в именах файлов символов, в которых также могут встречаться следующие символы:
Символ «?» (вопросительный знак) означает ровно один произвольный
символ.
Символ «*» (звездочка) означает любую последовательность символов
произвольной длины, в том числе «*» может задавать и пустую последовательность.
Определите, по какой из масок будет выбрана указанная группа файлов:
1234.xls
23.xml
234.xls
23.xml
1) *23*.?x*
2) ?23?.x??
3) ?23?.x*
4) *23*.???
РЕШЕНИЕ
1. Символ «?» в начале маски означает, что перед символами «23»
должен быть один и только один символ. Значит, ответы 2) и 3) неверны.
2. Символ «?» после точки означает, что перед символом «x» должен
быть один и только один символ. Значит, ответ 1) неверный.
3. Несмотря на то, что остался один вариант ответа, убедимся, что он
верный. Символ «*» означает любую последовательность, в том числе и
пустую. Три символа «???» означают обязательное наличие любых трех
символов в расширении файла.
Ответ: 4.
26
A11 (1 мин)
В динамической (электронной) таблице приведены значения посевных
площадей (в га) и урожая (в центнерах) четырех зерновых культур в четырех хозяйствах одного района. В каком из хозяйств достигнута максимальная урожайность зерновых (по валовому сбору)? (Урожайность измеряется
в центнерах с гектара.)
Название хозяйства
ЗерноЗаря
Первомайское
Победа
вые
культу- Посевы Урожай ПосеУроПосеУроры
вы
жай
вы
жай
Рассвет
Посевы
Урожай
Пшеница
600
15300
900
23800
300
7500
1200
31200
Рожь
100
2150
500
12000
50
1100
250
5500
Овес
100
2350
400
10000
50
1200
200
4800
Ячмень
200
6000
200
6300
100
3100
350
10500
Всего
зерновые
1000
25800
2000
52100
500
12900
2000
52000
1) Заря
2) Первомайское
3) Победа
4) Рассвет
РЕШЕНИЕ
Валовой сбор для отдельного хозяйства вычисляется по формуле:
(Всего зерновые Урожай) / (Всего зерновые Посевы).
По каждому хозяйству эти значения равны:
Заря
Первомайское
Победа
Рассвет
Ответ: 2.
25,8
26,05
25,2
26
27
A12 (3 мин)
Торговое предприятие владеет тремя магазинами (I, II и III), каждый из
которых реализует периферийные компьютерные устройства: мониторы
(М), принтеры (П), сканеры (С) или клавиатуры (К). На диаграмме 1 показано количество проданных товаров каждого вида за месяц. На диаграмме
2 показано, как за тот же период соотносятся продажи товаров (в штуках) в
трех магазинах предприятия.
1)
2)
Какое из приведенных ниже утверждений следует из анализа обеих диаграмм?
А) Все сканеры могли быть проданы через магазин III
Б) Все принтеры и сканеры могли быть проданы через магазин II
В) Все мониторы могли быть проданы через магазин I
Г) Ни один принтер не был продан через магазин II
1) А
2) Б
3) В
4) Г
РЕШЕНИЕ
По столбчатой диаграмме можно определить общее количество товаров: 30 + 20 + 10 + 40 = 100.
По круговой диаграмме определяется количество товаров, проданных в
каждом магазине:
(I) = 100 / 10 = 10; (1/10 часть дает деление с нулевым остатком);
(II) = 100 / 4 = 25;
28
(III) = 100 – 10 – 25 = 65.
Сравнение полученных трех чисел с информацией из столбчатой диаграммы позволит найти правильный ответ.
Магазин III продал 65 товаров, среди них могли быть все 10 сканеров.
Ответ А) верен.
Магазин II продал 25 товаров, а принтеров и сканеров вместе было
продано 30 штук. Ответ Б) неверен.
Магазин I продал 10 товаров, а мониторов продано 30 штук. Ответ В)
неверен.
Магазин II продал 25 товаров, среди них могли быть и принтеры. Ответ
Г) неверен.
Ответ: 1.
A13 (3 мин)
База данных о торговых операциях дистрибутора состоит из трех связанных таблиц. Ниже даны фрагменты этих таблиц.
Таблица зарегистрированных дилеров
Наименование
организации
ID
дилера
ООО «Вектор»
D01
АО «Луч»
D02
АОЗТ «Прямая»
D03
ООО «Окружность» D04
ИЧП Скаляр
D05
Регион
Адрес
Башкортостан
Татарстан
Адыгея
Дагестан
Дагестан
АО «Ромб»
Татарстан
г. Уфа, ул. Школьная, 15
г. Казань, ул. Прямая, 17
г. Майкоп, просп. Мира, 8
г. Дербент, ул. Замковая, 6
г. Махачкала, ул. Широкая,
28
г. Набережные Челны, ул.
Заводская, 4
D06
Таблица отгрузки товара
Номер
накладной
001
002
003
Отгружено
дилеру
D01
D02
D06
Артикул
товара
01002
01002
01002
Отгружено
упаковок
300
100
200
Дата
отгрузки
5/01/2009 г.
5/01/2009 г.
5/01/2009 г.
29
004
005
006
D01
D02
D02
02002
02002
01003
20
30
20
5/01/2009 г.
5/01/2009 г.
6/01/2009 г.
Таблица товаров
Наименование
товара
Фломастеры,
пачка 24 шт.
Бумага
А4,
пачка 500 листов
Скрепки металлические
1000 шт.
Розетки трехфазные
Лампа накаливания
Выключатель
2-клавишный
Артикул
Отдел
01001
Канцтовары
Количество
единиц в
упаковке
24
01002
Канцтовары
5
10
Канцтовары
48
20
02001
Электротовары
12
2
02002
Электротовары
100
8
02003
Электротовары
48
7
Брутто вес
упаковки
5
Сколько пачек бумаги было отгружено в Татарстан 5 января 2009 г.?
1) 100
2) 200
3) 500
4) 1500
РЕШЕНИЕ
1. Из таблицы зарегистрированных дилеров выбираем коды дилеров,
зарегистрированных в Татарстане: D02, D06.
2. Из таблицы товаров выбираем артикул бумаги: 01002.
3. В таблице отгрузки товара находим сведения о количестве упаковок бумаги (01002), отгруженных дилерам (D02, D06) 5/01/2009:
100 + 200 =300.
4. По таблице товаров определяем количество пачек бумаги, отгруженных в Татарстан 5 января 2009 г.: 5 * 300 = 1500.
Ответ: 4.
30
A14 (2 мин)
Для кодирования цвета фона web-страницы используется атрибут
bgcolor="#ХХХХХХ", где в кавычках задаются шестнадцатеричные значения интенсивности цветовых компонент в 24-битной RGB-модели следующим образом:
К какому цвету будет близок цвет страницы, заданной тэгом
<body bgcolor="#747474">?
1) серый
2) белый
3) фиолетовый
4) черный
РЕШЕНИЕ
1. В 24-битной цветовой модели RGB код цвета определяется вкладом
каждого из трех базовых цветов. Код базового цвета занимает 8 бит, т.е. 1
байт. Минимальное значение кода базового цвета – 00000000, максимальное 11111111. Первый байт – код красной (R) составляющей цвета точки,
второй байт – код зеленой составляющей (G), третий байт – код синей составляющей (B).
2. В графических приложениях принято обозначать код цвета с помощью 16-ричных чисел. Следовательно, каждый базовый цвет в коде отображается двумя 16-ричными цифрами. Минимальное значение кода базового цвета – 00, максимальное значение FF. Символ «#» указывает на то,
что это шестнадцатеричный код.
3. В задании приводится код цвета, в котором присутствуют все базовые цвета в одинаковой пропорции. Таким способом задаются оттенки серого цвета.
Ответ: 1.
B4 (3 мин)
На месте преступления были обнаружены четыре обрывка бумаги.
Следствие установило, что на них записаны фрагменты одного IP-адреса.
Криминалисты обозначили эти фрагменты буквами А, Б, В и Г. Восстановите IP-адрес.
31
В ответе укажите последовательность букв, обозначающих фрагменты,
в порядке, соответствующем IP-адресу.
РЕШЕНИЕ
IP-адрес не может начинать с точки, значит Б не первая часть. За Б не
могут идти никакие части, потому что получатся слишком большие значения (> 255), следовательно, это последняя часть. В не может следовать ни
за какой частью, потому что получатся слишком большие значения, следовательно, это начало. Г и А следуют друг за другом.
Ответ: ВГАБ
B6 (3 мин)
У Толи есть доступ к сети Интернет по высокоскоростному одностороннему радиоканалу, обеспечивающему скорость получения информации
219 бит в секунду. У Миши нет скоростного доступа в Интернет, но есть
возможность получать информацию от Толи по низкоскоростному телефонному каналу со средней скоростью 215 бит в секунду. Миша договорился с Толей, что тот будет скачивать для него данные объемом 5 Мбайт
по высокоскоростному каналу и ретранслировать их Мише по низкоскоростному каналу.
Компьютер Толи может начать ретрансляцию данных не раньше, чем
им будут получены первые 512 Кбайт этих данных. Каков минимально
возможный промежуток времени (в секундах), с момента начала скачивания Толей данных до полного их получения Мишей?
В ответе укажите только число, слово «секунд» или букву «с» добавлять не нужно.
РЕШЕНИЕ
Время с начала скачивания данных Толей до полного получения их Мишей
состоит из двух промежутков:
1) время на скачивание 512 Кбайт по высокоскоростному каналу;
2) время ретрансляции 5 Мбайт по низкоскоростному каналу.
Все величины нужно привести к одинаковым единицам измерения – биты
и секунды.
32
(512 * 210 * 8) / 219 = 29 * 210 *23 / 219 = 23 = 8 (секунд).
(5 * 220 * 23)/ 215 = 5 * 28 = 5 * 256 = 1280 (секунд).
Ответ: 1288
B9 (5 мин)
В языке запросов поискового сервера для обозначения логической операции «ИЛИ» используется символ «|», а для логической операции «И» –
символ «&».
В таблице приведены запросы и количество найденных по ним страниц
некоторого сегмента сети Интернет.
Запрос
Крейсер | Линкор
Крейсер
Линкор
Найдено страниц (в тысячах)
7000
4800
4500
Какое количество страниц (в тысячах) будет найдено по запросу
Крейсер & Линкор ?
Считается, что все запросы выполнялись практически одновременно,
так что набор страниц, содержащих все искомые слова, не изменялся за
время выполнения запросов.
РЕШЕНИЕ
Проиллюстрируем идею решения с помощью диаграмм Венна:
Крейсеры
Линкоры
Овальная область, заштрихованная горизонтальными линиями, относится к множеству документов, содержащих сведения о крейсерах. Область, заштрихованная вертикальными линиями, относится к множеству
33
документов, содержащих сведения о линкорах. В сумме, документов о
крейсерах и о линкорах (4800+4500=9300) больше, чем документов, полученных на запрос Крейсер | Линкор (7000). Область, заштрихованная пересекающимися линиями, относится к множеству документов, содержащих
сведения и о крейсерах, и о линкорах. В сумме 9300 эти документы учитывались дважды. Следовательно, количество документов, содержащих сведения и о крейсерах, и о линкорах, равно 9300–7000=2300.
Ответ: 2300
34
6. АНАЛИЗ АЛГОРИТМОВ
В заданиях предложены фрагменты программ для конкретных исполнителей: компьютера или некоего робота. Для ответа на тестовый вопрос
требуется выполнить эти программы, так сказать, вручную. Рекомендуется
начертить таблицу, в которой будут фиксироваться постепенно изменяющиеся значения переменных, или сделать поясняющий рисунок.
A8 (2 мин)
Определите значение переменной c после выполнения следующего
фрагмента программы, в котором a, b и с – переменные вещественного
(действительного) типа.
Бейсик
a = 120
b = 100
a=a+b/2
IF b < a / 2 THEN
c=b+a
ELSE
c=b+a/2
ENDIF
Си
a = 120;
b = 100;
a = a + b / 2;
if (b < a / 2)
c = b + a;
else
c = b + a / 2;
1) c = 105
2) c = 160
Паскаль
a := 120;
b := 100;
a := a + b / 2;
if b < a / 2
then
c := b + a
else
c := b + a / 2;
Алгоритмический язык
a := 120
b := 100
a := a + b / 2
если b < a / 2
то c := b + a
иначе c := b + a / 2
все
3) c = 185
4) c = 270
35
РЕШЕНИЕ
a
120
170
b
100
c
185
Ответ: 3.
A17 (4 мин)
В программе описан одномерный целочисленный массив А с индексами от 0 до 10. Ниже представлен фрагмент программы, записанный на разных языках программирования, в котором значения элементов сначала задаются, а затем меняются.
Бейсик
FOR i = 0 TO 10
A(i) = i-1
NEXT i
FOR i = 10 TO 1 STEP -1
A(i-1) = A(i)
NEXT i
Си
for (i = 0; i <= 10; i++)
A[i] := i-1;
for (i = 10; i >= 1; i--)
A[i-1] = A[i];
Паскаль
for i := 0 to 10 do
A[i] := i-1;
for i := 10 downto 1 do
A[i-1] := A[i];
Алгоритмический язык
нц для i от 0 до 10
A[i] := i-1
кц
нц для i от 10 до 1 шаг -1
A[i-1] := A[i]
кц
Чему окажутся равны элементы этого массива?
1)
2)
3)
4)
9
0
0
-1
9
1
1
-1
9
2
2
0
9
3
3
1
9
4
4
2
9
5
5
3
9
6
6
4
9
7
7
5
9
8
8
6
9
9
9
7
9
9
10
8
РЕШЕНИЕ
В первом цикле массив заполняется значениями от -1 до 9.
Работу второго цикла проиллюстрируем на таблице с последовательностью преобразований:
36
i
10
9
8
7
0
0
0
0
0
1
1
1
1
1
2
2
2
2
2
3
3
3
3
3
4
4
4
4
4
5
5
5
5
5
6
6
6
6
9
7
7
7
9
9
8
8
9
9
9
9
9
9
9
9
10
9
9
9
9
Видно, что значение последнего элемента последовательно заполняет
весь массив.
Ответ: 1.
A18 (5 мин)
Система команд исполнителя РОБОТ, «живущего» в клетках прямоугольного лабиринта на плоскости:
вверх
вниз
влево
вправо
При выполнении любой из этих команд РОБОТ перемещается на одну
клетку соответственно: вверх ↑, вниз ↓, влево ←, вправо →.
Четыре условия позволяют проверить отсутствие преград у каждой из
сторон той клетки, где находится РОБОТ:
сверху свободно снизу свободно
слева свободно
справа свободно
В цикле
ПОКА < условие > команда
Команда выполняется, пока условие истинно, иначе происходит переход
на следующую строку программы.
Если РОБОТ начнет движение в сторону стены, то он разрушится и выполнение программы прервется.
Сколько клеток лабиринта соответствуют требованию, что, выполнив
предложенную программу, РОБОТ уцелеет и остановится в той же клетке,
с которой он начал движение?
37
НАЧАЛО
ПОКА < справа свободно > вниз
ПОКА < снизу свободно > влево
ПОКА < слева свободно > вверх
ПОКА < сверху свободно > вправо
КОНЕЦ
1) 1
2) 2
3) 3
4) 4
РЕШЕНИЕ
Проанализируем, каким условиям должна удовлетворять клетка, с которой начнется и в которой закончится движение. Будем обозначать номера строк числами от 1 до 6, а столбцы – буквами от А до F.
1. Первые передвижения робота – вниз. Начальная клетка может быть
свободна справа, и робот начнет перемещаться. С другой стороны, в этой
клетке справа может оказаться стена, и первый цикл ПОКА не выполнит
ни одного перемещения. Но это не является причиной для выбрасывания
таких клеток из рассмотрения. Например, в лабиринте, изображенном на
рисунке ниже, клетка удовлетворяет условию задачи:
2. После всех перемещений робот должен остановиться в начальной
клетке. Последний цикл ПОКА перемещает робота вправо, значит, робот
остановится, попав в клетку с верхней стеной. Следовательно, в качестве
начальных нужно рассматривать только те клетки, у которых есть верхняя
стена. Это вся строка 1, Е2, В3, D4, A5, F5, C6.
3. Три клетки, удовлетворяющие условию задачи – B1, Е2, D4.
Ответ: 3.
B2 (1 мин)
Запишите значение переменной a после выполнения фрагмента
алгоритма:
38
Примечание: знаком « :=» обозначена операция присваивания.
В бланк ответов впишите только число.
РЕШЕНИЕ
a
56
56
35
14
14
7
Ответ: 7
C1 (30 мин)
b
77
21
21
21
7
7
a= b
нет
нет
нет
нет
нет
да
a> b
нет
да
да
нет
да
39
Требовалось написать программу, при
выполнении которой с клавиатуры считываются координаты точки на плоскости (x,y
– действительные числа) и определяется
принадлежность этой точки заданной заштрихованной области (включая границы).
Программист торопился и написал программу неправильно.
ПРОГРАММА НА
ПАСКАЛЕ
var x,y: real;
begin
readln(x,y);
if y<=x then
if y<= –x then
if y>=x*x–2 then
write('принадлежит')
else
write('не принадлежит')
end.
ПРОГРАММА НА
БЕЙСИКЕ
INPUT x, y
IF y<=x THEN
IF y<= –x THEN
IF y>=x*x–2 THEN
PRINT "принадлежит"
ELSE
PRINT"не принадлежит"
ENDIF
ENDIF
ENDIF
END
ПРОГРАММА НА СИ
void main(void)
{ float x,y;
scanf("%f%f",&x,&y);
if (y<=x)
if (y<= –x)
if (y>=x*x–2)
printf("принадлежит");
else
printf("не принадлежит");
}
Последовательно выполните следующее:
1) Приведите пример таких чисел x, y, при которых программа неправильно решает поставленную задачу.
2) Укажите, как нужно доработать программу, чтобы не было случаев
ее неправильной работы. (Это можно сделать несколькими способами, достаточно указать любой правильный способ доработки исходной программы.)
РЕШЕНИЕ
1. Рекомендуется переписать на черновик программу так, чтобы хорошо была видна вложенность операторов:
var x,y: real;
40
begin
readln(x,y);
if y<=x then
if y<= –x then
if y>=x*x–2 then
write('принадлежит')
else
write('не принадлежит')
end.
Из этой записи сразу видно, что при y>x программа вообще ничего не
выводит. Один из правильных ответов на первый вопрос: x = 0, y = 2.
2. Лучший способ доработки программы – написать ее заново самостоятельно.
Отобразим на чертеже влияние условий, приведенных в решении:
(y>=x*x–2) and (y<= –x) – часть
нужной области
(y>=x*x–2) and (y<= x) – часть
нужной области
Полностью выделение нужной области достигается объединением отдельных частей, возникающее при этом частичное перекрытие частей не
приводит к ошибке.
Один из вариантов правильной программы:
var x,y: real;
begin
readln(x,y);
if (y>=x*x–2) and ((y<= –x)) or (y<= x)) then
41
write('принадлежит')
else write('не принадлежит')
end.
42
7. РАЗРАБОТКА АЛГОРИТМОВ
Процесс разработки алгоритма и составления программы для компьютера может быть достаточно сложным. Рекомендуется выполнять его планомерно, придерживаясь определенной последовательности действий.
0. Математическая модель. Определение соотношений между величинами, существенных для поставленной задачи, и математическая запись
этих соотношений.
1. Входные данные: отдельные переменные и массивы, типы данных,
наличие особенностей в значениях. Описание и комментирование, ввод.
2. Результаты: переменные и массивы, типы, связь между количеством входных значений и количеством результатов. Описание и комментирование, вывод.
3. Тесты: наборы входных значений, для которых известны результаты. Учет возможных особенностей во входных значениях.
4. Разработка алгоритма: создание общей схемы алгоритма как системы взаимодействующих или последовательных блоков действий, детальная проработка каждого из этих блоков. Разрешается использование
любых форм записи алгоритма. Рекомендуется там, где можно, сразу использовать алгоритмическую нотацию, т.е. операторы языка программирования.
5. Запись программы: на основе разработанного алгоритма программа
собирается из отдельных готовых фрагментов.
В задачах повышенной сложности требуется написать как можно более
эффективную программу.
Эффективность программы оценивается по уровню использования ею
ресурсов компьютера: процессорного времени и оперативной памяти.
Например, из двух программ, написанных для решения одной и той же задачи, более эффективной будет та, которая формирует результат путем
выполнения меньшего количества элементарных действий. Говорят, что
эта программа имеет большее быстродействие. Для оценки эффективности
программы определяется функция зависимости количества элементарных
действий от размера входных данных. Эту функцию называют трудоемкостью. Более эффективной является программа, обладающая меньшей
трудоемкостью.
43
Если говорить об использовании оперативной памяти, то более эффективной считается программа, хранящая в памяти только безусловно необходимую информацию.
Итак, наиболее эффективная программа потребляет меньше ресурсов.
Но обычно сэкономить одновременно на всех ресурсах не удается, поэтому нужен разумный компромисс между быстродействием и потреблением
памяти.
B3 (6 мин)
У исполнителя Калькулятор две команды, которым присвоены номера:
1. прибавь 1
2. умножь на 3
Выполняя первую из них, Калькулятор прибавляет к числу на экране 1,
а выполняя вторую, утраивает его. Запишите порядок команд в программе
получения из 2 числа 26, содержащий не более 6 команд, указывая лишь
номера команд.
(Например, программа 21211 – это программа
умножь на 3
прибавь 1
умножь на 3
прибавь 1
прибавь 1
которая преобразует число 1 в 14.)
РЕШЕНИЕ
Задачу удобнее решать от конца к началу. Получить в конце 26 можно
только после выполнения команды прибавь 1. Значит, предыдущее значение будет 26–1 = 25. Это значение не делится на 3, значит, тоже получается
после команды прибавь 1. 25–1 =24. 24 делится на 3, следовательно, может получиться после выполнения умножь на 3. 24 / 3 = 8. Число 8 может
получиться только после выполнения прибавь 1. 8–1 = 7. Число 7 может
получиться только после выполнения прибавь 1. 7–1 = 6. 6 делится на 3,
следовательно, может получиться после выполнения умножь на 3. 6 / 3 =
2.
Итак, нужно выполнить такую последовательность команд:
(2*3+1+1)*3+1+1=26. Их всего 6.
44
Ответ: 211211
C2 (30 мин)
Дан целочисленный массив из 30 элементов. Элементы массива могут
принимать целые значения от 0 до. Опишите на русском языке или на одном из языков программирования алгоритм, который позволяет подсчитать
и вывести среднее арифметическое элементов массива, имеющих нечетное
значение. Гарантируется, что в исходном массиве хотя бы один элемент
имеет нечетное значение.
Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать часть из них.
Паскаль
const
N = 30;
var
a: array[1..N] of integer;
i, x, y: integer;
s: real;
begin
for i:=1 to N do readln(a[i]);
…
end.
Си
#include <stdio.h>
#define N 30
void main (void)
{int a[N];
int i, x, y;
float s;
for (i=0; i<N; i++)
scanf(“%d, &a[i]);
…
Бейсик
N=30
DIM A(N) AS INTEGER
DIM I, X, Y AS INTEGER
DIM S AS SINGLE
FOR I =1 TO N
INPUT A(I)
NEXT I
…..
END
Естественный язык
Объявляем массив А из 30 элементов.
Объявляем целочисленные переменные
I, X, Y.
В цикле от 1 до 10 вводим элементы
массива А с 1-го по 30-й.
…
}
В качестве ответа Вам необходимо привести фрагмент программы (или
описание алгоритма на естественном языке), который должен находиться
45
на месте многоточия. Вы можете записать решение также на другом языке
программирования (укажите название и используемую версию языка программирования, например, Borland Pascal 7.0) или в виде блок-схемы. В
этом случае Вы должны использовать переменные, аналогичные переменным, используемым в алгоритме, записанном на естественном языке, с
учетом синтаксиса и особенностей используемого вами языка программирования.
РЕШЕНИЕ
Основа алгоритма – вычисление суммы и количества элементов массива с нечетными значениями. Среднее арифметическое вычисляется путем
деления полученной суммы на количество нечетных значений.
Программа на Паскале:
const
N = 30;
var
a: array[1..N] of integer;
i, x: integer;
s: real;
begin
for i:=1 to N do readln(a[i]);
s:= 0; {начальное значение для суммы}
x:=0; {начальное значение для количества}
for i:=1 to N do
if (a[i] mod 2 =1)
then begin s:=s+a[i];
x:=x+1;
end;
writeln(s/x);
end.
Переменная y не понадобилась.
C4 (60 мин)
На вход программе подается набор символов, заканчивающийся точкой
(в программе на языке Бейсик символы можно вводить по одному в строке,
46
пока не будет введена точка, или считывать данные из файла). Напишите
эффективную, в том числе и по используемой памяти, программу (укажите
используемую версию языка программирования, например, Borland Pascal
7.0), которая сначала будет определять, есть ли в этом наборе символы,
соответствующие десятичным цифрам. Если такие символы есть, то можно
ли переставить их так, чтобы полученное число было симметричным (читалось одинаково как слева направо, так и справа налево). Ведущих нулей
в числе быть на должно, исключение – число 0, запись которого содержит
ровно один ноль.
Если требуемое число составить невозможно, то программа должна вывести на экран слово «NO». А если возможно, то в первой строке следует
вывести слово «YES», а во второй – искомое симметричное число. Если
таких чисел несколько, то программа должна выводить максимальное из
них. Например, пусть на вход подаются следующие символы:
Do not 911 to 09 do.
В данном случае программа должна вывести
YES
91019
РЕШЕНИЕ
Задача, предложенная в этом задании, сложная, поэтому будет решать
ее, придерживаясь рекомендованного плана действий.
0. Математическая модель. Определим, каким условиям должен удовлетворять набор цифр, из которых можно построить симметричное число.
Приведем примеры симметричных чисел и наборов цифр, из которых они
получены:
7749477
4477779
3200023
0002233
70707
00777
865118811568
111155668888
44
44
333
333
0
0
В симметричном числе либо количество каждой из всех цифр четно,
либо количество только одной цифры нечетно.
1. Входные данные. Значения входных данных находятся в строке
символов. Размещать всю строку в памяти не нужно, достаточно проанализировать каждый отдельный символ и сохранить в памяти общие сведения
47
о цифрах, встретившихся во входной строке. Для ввода понадобится символьная переменная (char).
Важные для решения сведения о входных данных – количество каждой
из цифр, встретившихся в строке ввода. Подсчитывать эти величины можно (и нужно) сразу при вводе. Для этого понадобится целочисленный массив. Эффективное решение получится, если для подсчетов использовать
массив, в котором каждый элемент связан с определенным символом из
таблицы кодирования. При 8-битном кодировании символов (ASCII) длина
этого массива должна быть равна 28 = 256. Если выбрать диапазон номеров
элементов от 0 до 255, то связь между элементом массива и символом будет задаваться правилом: номер любого элемента массива равен коду некоторого символа. Зная символ, можно по его коду обратиться к определенному элементу массива.
Описание переменных:
var sym : char;
t:array[0..255] of integer;
Можно оформить ввод:
read(sym);
while sym<>'.' do begin
отметить символ в массиве t;
read(sym);
end;
2. Результаты.
Симметричное число будет выводиться как последовательность цифр.
Пока что не ясно, в каком виде информация о цифрах из строки ввода будет отображаться в памяти. Поэтому рано говорить о специальных переменных для хранения результатов.
3. Тесты.
4477779.
111155668888.
44.
333.
0.
0002233.
00777.
YES
YES
YES
YES
YES
YES
YES
7749477
886511115688
44
333
0
3200023
70707
48
000044.
YES 400004
5533388811.
NO
0000.
NO
5000.
NO
50000.
NO
QWERTY.
NO
4. Разработка алгоритма.
Общая схема алгоритма может иметь следующий вид:
начальные значения;
ввод данных;
подсчет цифр;
проверка на возможную симметричность;
Проведем детализацию отдельных блоков алгоритма. Блок ввода данных уже оформлен, за исключением одного действия:
отметить символ в массиве t
Для обращения к нужному элементу массива будем использовать
функцию ord(символ), которая вычисляет 8-битный код символа.
t[ord(sym)]:=t[ord(sym)]+1;
подсчет цифр
Эти действия подготовят сведения для проверки на возможную симметричность. Самое главное узнать, сколько цифр встретилось во входной
строке нечетное число раз. Если таких цифр больше одной, то симметричность невозможна. Особое внимание нужно обратить на нули, поскольку в
условии задачи сказано, что незначащих нулей в числе не должно быть.
Например, если во входной строке оказалось несколько нулей, а других
цифр нет, то построить симметричное число нельзя.
В сложившейся ситуации довольно затруднительно сразу понять, какие
именно подсчеты нужно будет выполнить и сколько дополнительных переменных может понадобиться для этого. Пока ясно, что нужно знать количество цифр, встретившихся во входной строке нечетное число раз, ко-
49
личество разных цифр и количество нулей. Количество нулей будет подсчитано в элементе t[ord(‘0’)], для других данных понадобятся 2 целочисленные переменные, назовем их, соответственно, kol_nechet и kol_razn.
for i:=ord('0') to ord('9') do begin
if t[i]>0 then kol_razn:=kol_razn+1;
if t[i] mod 2=1
then kol_nechet:=kol_nechet+1;
end;
проверка на возможную симметричность
Порядок проверки удобнее построить, перечисляя условия, при выполнении которых симметричности достичь нельзя. Таких условий несколько, и они не всегда связаны друг с другом.
if симметричность невозможна
then writeln('NO')
else begin
writeln('YES');
вывод последовательности символов в виде симметричного числа
end;
симметричность невозможна
(нет цифр) or
(kol_nechet>1) or {более одной цифры встретилось нечетное число раз}
((kol_razn=1) and (t[ord('0')]>1)) or {нет других цифр, кроме 0, и он
встретился несколько раз}
((kol_razn=2) and (t[ord('0')]>1) and (не 0 встретилась один раз))
{во входной строке 2 разных цифры, одна из них 0, а другая встретилась один раз}
Отсюда становится понятно, что нужно знать, сколько всего цифр
встретилось во входном наборе символов, и ту цифру, которая встречается
50
нечетное число раз. Эти величины можно запоминать при подсчете цифр.
Следовательно, нужно вернуться к подсчету цифр и добавить действия.
подсчет цифр
Назовем переменную для подсчета общего количества цифр kol_cifr.
Назовем переменную, в которой будем запоминать цифру, встретившуюся
нечетное число раз, nechet. Ее тип – char. Поскольку в цикле мы перебираем коды цифр, для преобразования кода в символ будем использовать
функцию chr(код).
for i:=ord('0') to ord('9') do begin
kol_cifr:=kol_cifr+t[i];
if t[i]>0 then kol_razn:=kol_razn+1;
if t[i] mod 2=1
then begin kol_nechet:=kol_nechet+1;
nechet:=chr(i)
end;
end;
не 0 встретилась один раз
(nechet<>'0')and(t[ord(nechet)]=1)
вывод последовательности символов в виде симметричного числа
В условии задачи говорится, что симметричное число должно быть самым большим из возможных. Значит, вывод левой части числа нужно выполнять от бóльших цифр к меньшим, печатая половину из количества
каждой цифры. Затем выводится цифра, встретившаяся нечетное число
раз, если таковая была. Правая часть числа печатается в порядке от меньших цифр к бóльшим.
for i:=ord('9') downto ord('0') do
for j:=1 to t[i] div 2 do write(chr(i));
if kol_nechet=1
then write(nechet);
for i:=ord('0') to ord('9') do
for j:=1 to t[i] div 2 do write(chr(i));
51
начальные значения
kol_razn:=0; kol_nechet:=0; kol_cifr:=0; nechet:=’0’;
На этом разработка алгоритма закончена.
5. Запись программы.
var sym:char;
t:array[0..255] of integer;
i, j, kol_razn, kol_nechet, kol_cifr :integer;
nechet:char;
begin
for i:=0 to 255 do t[i]:=0;
read(sym);
while sym<>'.' do begin
t[ord(sym)]:=t[ord(sym)]+1;
read(sym);
end;
kol_razn:=0; kol_nechet:=0; kol_cifr:=0; nechet:=’0’;
for i:=ord('0') to ord('9') do begin
kol_cifr:=kol_cifr+t[i];
if t[i]>0 then kol_razn:=kol_razn+1;
if t[i] mod 2=1
then begin kol_nechet:=kol_nechet+1;
nechet:=chr(i)
end
end;
if
(kol_cifr=0) or
(kol_nechet>1) or
((kol_razn=1) and (t[ord('0')]>1)) or
((kol_razn=2)and(t[ord('0')]>1)and
(nechet<>'0')and(t[ord(nechet)]=1))
then writeln('NO')
else
begin
52
writeln('YES');
for i:=ord('9') downto ord('0') do
for j:=1 to t[i] div 2 do write(chr(i));
if kol_nechet=1
then write(nechet);
for i:=ord('0') to ord('9') do
for j:=1 to t[i] div 2 do write(chr(i));
end;
end.
53
8. ИГРЫ ДВУХ ПРОТИВНИКОВ
В этих играх игроки выполняют ходы поочередно, при этом обоим игрокам доступна вся информация о текущем состоянии игры. В таких играх
выигрыш одного игрока означает проигрыш другого. В теории игр доказано существование оптимальной (наилучшей) стратегии для каждого из игроков. Игрок, придерживающийся этой стратегии, гарантированно получит
выигрыш не меньше, чем заранее рассчитанный, как бы хорошо ни играл
его противник. Если же игрок будет отклоняться от этой стратегии, то он
может получить и меньший выигрыш, все зависит от ходов противника.
Для рассматриваемых игр оптимальной является минимаксная стратегия,
при которой на очередном ходе игроку нужно действовать так, чтобы минимизировать максимально возможный выигрыш противника.
Выполняя анализ игры, нужно иметь в виду, что каждый игрок придерживается наилучшей стратегии. Чтобы выполнить анализ игры и найти
минимаксную стратегию, можно построить схему, называемую деревом
игры (дерево растет сверху вниз или слева направо). Рассмотрим пример
игры с построением дерева решений.
Двое игроков имеют неограниченное число камней. По правилам игры игроки поочередно кладут по нескольку камней в общую кучу. За
один ход можно положить один камень или удвоить число камней в
куче. Первоначально в куче имеется 2 камня. Выигрывает тот игрок,
после хода которого в куче окажется более 10 камней.
Построим дерево решений, обозначая числами количество камней в
куче после очередного хода. Поскольку игрок может сделать любой из
двух возможных ходов, нужно проверять оба варианта. Если из некоторого
состояния игрок может сделать выигрывающий ход, то другие ходы из
этого состояния рассматривать не нужно.
Удобнее начинать проверку с ходов, которые приводят к бóльшим изменениям кучи. Буквой «в» будем обозначать выигрышный ход игрока, а
буквой «п» – проигрышный.
Начальное 1-й
состояние игрок
кучи
2
2*2=4
2-й
игрок
1-й
игрок
4*2=8
8*2=16
в
5*2=10
4+1=5
2+1=3
3*2=6
3+1=4
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-й
состояние игрок
кучи
2
2*2=4
2-й
игрок
1-й
игрок
4*2=8 п
8*2=16
в
5*2=10
п
5+1=6 п
6*2=12
в
4*2=8 п
4+1=5
4+1=5
2+1=3
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 в
Если все возможные ходы игрока в определенный момент игры оказались проигрышными, то предыдущий ход противника был выигрышным.
55
Начальное 1-й
состояние игрок
кучи
2
2*2=4
2-й
игрок
1-й
игрок
4*2=8 п
8*2=16
в
5*2=10
п
5+1=6 п
6*2=12
в
4*2=8 п
4+1=5 в
4+1=5 в
2+1=3
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-й
игрок
4*2=8 п
8*2=16
в
5*2=10
п
5+1=6 п
6*2=12
в
4*2=8 п
4+1=5 в
2+1=3 в
3*2=6 п
3+1=4
п
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 мин)
Два игрока играют в следующую игру. Перед ними лежат две кучки камней, в первой из которых 3, а во второй 4 камня. У каждого игрока неограниченно много камней. Игроки ходят по очереди. Ход состоит в том, что
игрок или удваивает число камней в какой-то кучке или добавляет 4 камня
в какую-то кучку. Игрок, после хода которого общее число камней в двух
кучках становится больше 25, проигрывает. Кто выигрывает при безошибочной игре обоих игроков – игрок, делающий первый ход, или игрок, делающий второй ход? Каким должен быть первый ход выигрывающего игрока? Ответ обоснуйте.
РЕШЕНИЕ
Ответ считается обоснованным, если построено полное дерево игры.
Дерево игры строится последовательно. Состояния игры могут повторяться на разных ветвях дерева, известные состояния повторно не расписываются.
3,4
1
6,4 п
2
12,4 в
1
24,4 п
12,8 п
16,4 п
3,8 п
6,8 п
12,8 п
12,8 п
6,16 в
3,16 п
7,8 п
6,16 в
14,8 в
3,12 в
6,12 п
2
1
24,8 п
12,16 п
16,8 в п
32,4 п
16,8 в
12,16 п
6,32 п
10,16 п
6,20 п
28,8 п
14,16 п
18,8 п
14,12 п
10,12 п 20,12 п
10,24 п
14,12 п
2
57
10,14 в п
6,24 п
10,12 п
6,16 в
3,24 п
7,12 п
7,4 п
14,4 п
7,8 п
11,4 в
14,12 п
7,24 п
11,12 в п
3,16 п
28,4 п
14,8 в
22,4 п
11,8 п
15,5 п
22,8 п
11,16 п
15,8 в п
30,5 п
15,10 в п
Выигрывает 2-й игрок. Его первый ход зависит от первого хода первого игрока.
Если первый игрок начнет с удвоения первой кучки, то второй игрок
должен тоже удвоить первую кучку.
Если первый игрок начнет с удвоения второй кучки или добавления к
ней 4 камней, то второй игрок должен добавить 4 камня ко второй кучке.
Если первый игрок начнет с добавления 4 камней в первую кучку, то
второй игрок должен тоже добавить 4 камня в первую кучку.
ЛИТЕРАТУРА
Задания, разобранные в методических указаниях, опубликованы в [1].
Пояснения, с которых начинается каждая глава методических указаний,
взяты из [2]. Дополнительные задачи высокого уровня сложности можно
найти в [3].
1. Демонстрационный вариант ЕГЭ по информатике 2011 г. –
http://www1.ege.edu.ru/files/demo/demo_2011/inf_demo_2011.pdf
2. Материалы для подготовки к ЕГЭ по информатике: методические
указания / Ю.Л. Костюк, И.Л. Фукс. – ТГУ, приемная комиссия,
2009. – 66 с.
3. Основы разработки алгоритмов: учебное пособие / Ю.Л. Костюк,
И.Л. Фукс. – М.: БИНОМ. Лаборатория знаний, 2010. – 286 с. –
(Элективный курс. Информатика).
ОГЛАВЛЕНИЕ
1.
АЛГОРИТМЫ НА ЕСТЕСТВЕННОМ ЯЗЫКЕ .......................... 3
2.
ОСНОВЫ ЛОГИКИ ....................................................................... 7
3.
СИСТЕМЫ СЧИСЛЕНИЯ .......................................................... 15
4.
КОДИРОВАНИЕ ИНФОРМАЦИИ ........................................... 21
5.
ИНФОРМАЦИОННЫЕ ТЕХНОЛОГИИ................................... 25
6.
АНАЛИЗ АЛГОРИТМОВ ........................................................... 34
7.
РАЗРАБОТКА АЛГОРИТМОВ .................................................. 42
8.
ИГРЫ ДВУХ ПРОТИВНИКОВ.................................................. 53
Download