extracted_text:
А. С.
Есипов

Санкт-Петербург

«БХВ-Петербург»

2010
УДК
681.3.06(07)
ББК    32.973.26-018.2я7

             Е83

Есипов
  А. С.

             Е83

      Трудные
  темы информатики. Сдаем ЕГЭ и сессию. — СПб.:

БХВ-Петербург,
  2010. — 208 с.: ил. — (ИиИКТ) ISBN 978-5-9775-0603-8
Рассмотрены темы
  школьного курса информатики, которые из-за повышенного внимания к
  программированию и алгоритмизации, преобладающего в экзаменационных вопросах,
  отходят на второй план: кодирование, представление и обработка информации;
  системы счисления; булева алгебра и алгебра логики; машинная арифметика и
  функциональные элементы компьютера. Содержится материал по программированию в
  Microsoft Office — создание макросов и программ на VB и VBA. Материал
  подкреплен разобранными примерами и заданиями для самостоятельного решения,
  обращается внимание на формальные подходы, обеспечивающие наиболее быстрые
  решения.
Для студентов и преподавателей
  профильных вузов и учащихся и учителей школ
УДК 681.3.06(07)
ББК
  32.973.26-018.2я7
Группа подготовки
  издания:

                  Главный
  редактор                   Екатерина Кондукова
                   Зам.
  главного редактора         Людмила Еремеевская
                   Зав.
  редакцией                         Григорий Добин
                  Редактор
                                   Анна Кузьмина
                   Компьютерная
  верстка           Ольги Сергиенко
                  Корректор
                                 Зинаида Дмитриева
                   Дизайн
  серии                           Инны Тачиной
                  Оформление
  обложки             Елены Беляевой
                  Зав.
  производством                 Николай Тверских

Лицензия ИД № 02429 от 24.07.00. Подписано в
  печать 31.05.10.
Формат
  70 1001/16.  Печать офсетная. Усл. печ. л.
  16,77.
Тираж 2000 экз. Заказ
  №
"БХВ-Петербург", 190005, Санкт-Петербург,
  Измайловский пр., 29.
Санитарно-эпидемиологическое
  заключение на продукцию
№
  77.99.60.953.Д.005770.05.09 от 26.05.2009 г. выдано Федеральной службой  по
  надзору в сфере защиты прав потребителей и благополучия человека.
Отпечатано
  с готовых диапозитивов  в ГУП "Типография "Наука"
199034, Санкт-Петербург, 9
  линия, 12

ISBN
978-5-9775-0603-8                                                  ©
Есипов А. С., 2010
© Оформление, издательство "БХВ-Петербург",
2010

Оглавление
Предисловие
..............................................................................................................................
8
Благодарности
............................................................................................................................................
9
Глава 1. Информация. Кодирование информации
.......................................................... 10
1.1.
Общие сведения об информации
.....................................................................................................
10 Информация
......................................................................................................................................
10 Информационные системы
..............................................................................................................
11
Свойства
информации
......................................................................................................................
13
1.2.
Кодирование и единицы информации .............................................................................................
14 Языки и
алфавиты.............................................................................................................................
14
Двоичный
алфавит ............................................................................................................................
15 Двоичное слово. Байт
.......................................................................................................................
16 Код ASCII
..........................................................................................................................................
16 Unicode
..............................................................................................................................................
17
Единицы
информации
......................................................................................................................
19
1.3.
Кодирование графики и звука ..........................................................................................................
20 Кодирование растровой
графики
....................................................................................................
20
Кодирование
векторной графики ....................................................................................................
21
Кодирование
звука
............................................................................................................................
22
1.4. Задания
для самостоятельной работы
.............................................................................................
24
1.5.
Примеры и задачи из архива ЕГЭ
....................................................................................................
24
Глава
2. Алфавитный и вероятностный подходы
........................................................... 29 2.1. Содержательный и алфавитный
подходы
.......................................................................................
29
Формула
Хартли
...............................................................................................................................
30
2.2.
Вероятностный подход
.....................................................................................................................
31 Свойство аддитивности
информации .............................................................................................
33
2.3.
События равновероятны
...................................................................................................................
33 Использование
калькулятора ...........................................................................................................
34
2.4.
События не равновероятны
..............................................................................................................
40 Формула Шеннона
............................................................................................................................
40
2.5.
Общие сведения о сжатии информации
..........................................................................................
41 Алгоритм Хаффмана
........................................................................................................................
42 Формула Шеннона и
формула Хартли
............................................................................................
46
Алгоритмы
Зива, Лемпеля, Велча (ZLW) .......................................................................................
47
2.6.
Определение частотных характеристик
..........................................................................................
48
2.7.
Задания для самостоятельной работы .............................................................................................
52
2.8.
Примеры и задачи из архива ЕГЭ
....................................................................................................
53
Глава 3. Системы счисления ...............................................................................................
55
3.1. Общие сведения о системах счисления
...........................................................................................
55 3.2. Десятичная
система ..........................................................................................................................
56 Формула разложения
числа по степеням основания
..................................................................... 56

3.3. Системы счисления в компьютерах
.................................................................................................
57 Двоичная система
счисления
...........................................................................................................
57 Восьмеричная и
шестнадцатеричная системы
...............................................................................
58
4
Оглавление
3.4.  Перевод чисел из одной системы в
другую
....................................................................................
59 Перевод с
использованием формулы разложения
......................................................................... 59
Задания для самостоятельной
работы (часть Ι)
..............................................................................
61 Перевод целых чисел
делением на основание новой системы
..................................................... 63 Перевод правильных дробей умножением
на основание .............................................................. 64
Поразрядные способы перевода
......................................................................................................
66 Быстрый способ
перевода, использующий устный счет
............................................................... 68
Задания
для самостоятельной работы (часть ΙΙ)
............................................................................ 69

3.5.  Арифметические действия в двоичной
системе
.............................................................................
69
3.6.  Системы счисления в задачах ЕГЭ
..................................................................................................
71
Глава 4. Машинная арифметика ........................................................................................
75
4.1.  Способы представления чисел в
компьютере
.................................................................................
75 Прямой код
........................................................................................................................................
76 Обратный код
....................................................................................................................................
76 Дополнительный код
........................................................................................................................
77 Выполнение
арифметических операций в кодах
........................................................................... 77

Переполнение
и машинные
нули.....................................................................................................
78
4.2.  Формы представления чисел в
компьютере....................................................................................
80 Естественная
форма..........................................................................................................................
80 Нормальная
форма............................................................................................................................
81 Сравнение диапазонов
представления чисел .................................................................................
82 Действия над числами в
нормальной форме
..................................................................................
82
Задания
для самостоятельной работы
.............................................................................................
84
4.3.  Примеры использования других систем
.........................................................................................
85 Двоично-десятичная
система ...........................................................................................................
85 Троичная система
.............................................................................................................................
86 Система остаточных
классов ...........................................................................................................
86 Римская система
счисления
.............................................................................................................
88
Задания
для самостоятельной работы .............................................................................................
88
Глава 5. Булева алгебра
.......................................................................................................
89
5.1.  От логики Древнего мира до наших дней
.......................................................................................
89 Платон и Сократ
...............................................................................................................................
89 Аристотель
........................................................................................................................................
89 Готфрид Лейбниц
.............................................................................................................................
90
Джордж
Буль
.....................................................................................................................................
91
5.2.  Булева алгебра
...................................................................................................................................
91 Булевы переменные и
функции
.......................................................................................................
91
Булевы
функции одного аргумента
.................................................................................................
93
Инверсия
(отрицание)
...........................................................................................................
93
Булевы
функции двух аргументов
...................................................................................................
94 Конъюнкция (логическое
умножение)
................................................................................
95 Дизъюнкция (логическое
сложение)....................................................................................
95 Инверсия конъюнкции.
Функция
Шеффера........................................................................
96 Инверсия дизъюнкции.
Функция Пирса
..............................................................................
97 Импликация
(следование)
.....................................................................................................
98 Неравнозначность
(сумма по модулю 2) .............................................................................
98 Равнозначность (эквивалентность)
......................................................................................
99
Функции
запрета....................................................................................................................
99 Оглавление
Существенная и фиктивная зависимость функций от аргументов
............................................... 99 Алгебры. Сравнение по набору операций
....................................................................................
100 Основные законы и
тождества булевой алгебры
......................................................................... 100

Правила
преобразования формул ..................................................................................................
103 Правило отрицания
.............................................................................................................
103 Правило свертки
..................................................................................................................
104
Правило
обобщенного склеивания (теорема русского математика П. С. Порецкого) .. 104

Задания
для самостоятельной работы
...........................................................................................
104
5.3.
Канонические формы булевых функций
.......................................................................................
105 Совершенная
дизъюнктивная нормальная форма
....................................................................... 105
Задания для самостоятельной
работы
...........................................................................................
108 Совершенная
конъюнктивная нормальная форма
....................................................................... 109
Основные соотношения
.................................................................................................................
112
Булева
алгебра и ЕГЭ
.....................................................................................................................
113
Глава 6. Функциональные элементы компьютеров
..................................................... 118
6.1. Построение логических схем. Общие
сведения
........................................................................... 118
Переход от схемы к формуле
функции
.........................................................................................
119 Минимизация сложности
формул
.................................................................................................
119
Задания
для самостоятельной работы
...........................................................................................
121
Пример
построения схемы сумматора
..........................................................................................
122
6.2.
Схемы с памятью
............................................................................................................................
123 Триггеры
..........................................................................................................................................
123
Регистры
и счетчики.......................................................................................................................
124
6.3.
Пример построения сложной схемы
.............................................................................................
125 Дешифраторы..................................................................................................................................
125
Шифраторы
.....................................................................................................................................
126
6.4.
Моделирование логических функций
...........................................................................................
128
Задания
для самостоятельной работы
...........................................................................................
129
Глава 7. Алгебра логики
....................................................................................................
132
7.1.
Логические высказывания и действия с ними
..............................................................................
132
7.2.
Логические операции и функции
...................................................................................................
133 Замечание о записи
формул функций
................................................................................
134
Замечание об
очередности выполнения операций
........................................................... 135
7.3.
Логические операции в программировании
.................................................................................
136 Задания для самостоятельной
работы
...........................................................................................
139
7.4.
Логические операции над
высказываниями..................................................................................
139 Конъюнкция
(логическое умножение)
..........................................................................................
139 Дизъюнкция
(логическое сложение)
.............................................................................................
139 Инверсия (отрицание)
....................................................................................................................
140 Импликация
(следование)
..............................................................................................................
140 Эквивалентность
(равнозначность)
...............................................................................................
141
Неравнозначность
(сумма по модулю 2)
......................................................................................
141
7.5. Формализация высказываний
........................................................................................................
141 Логические функции и
высказывания
...........................................................................................
141 Примеры формализации
высказываний
........................................................................................
143
Задания
для самостоятельной работы
...........................................................................................
146
7.6.
Решение текстовых логических задач
...........................................................................................
149 Задания для
самостоятельной работы
...........................................................................................
156
7.7.
Алгебра логики в заданиях ЕГЭ
....................................................................................................
158
Варианты
решения одной текстовой задачи
................................................................................
158
6                                                                                Оглавление

Глава 8. Программирование в MS Office
........................................................................ 162

8.1.
Общие сведения о макросах
...........................................................................................................
162
8.2. Создание,
изменение, удаление, размещение макросов ..............................................................
163 Макрос
Таблица_Unicode...............................................................................................................
163
Макрос
Выч_колич_инф
.................................................................................................................
164
Запуск
макросов
..............................................................................................................................
167
Организация
запуска макроса нажатием комбинации клавиш
........................................ 167
Запуск макроса
нажатием кнопки на панели инструментов
............................................ 167 Редактирование кода макроса ........................................................................................................
168 Удаление макросов
.........................................................................................................................
168 Размещение кодов
макросов
..........................................................................................................
168
Создание
макроса Информация_для_всех с помощью
макрорекордера.................................... 168
Запуск
макроса на выполнение ..........................................................................................
170
Просмотр
кода макроса
......................................................................................................
170
8.3.
Примеры макросов ..........................................................................................................................
171 Макрос
Проверка_текста_на_палиндром
...................................................................................
171
Первая проверка
правильности работы макроса
.............................................................. 172 Макрос Число_пробелов
................................................................................................................
172
Макрос
Один_пробел
......................................................................................................................
173
Макрос
Латиница_Кириллица
......................................................................................................
174
Макрос
СС1 — перевод числа из двоичной системы счисления в десятичную
....................... 175
Макрос
CC2 — перевод числа из десятичной системы счисления в двоичную
....................... 175
Макрос
ШкольныеОценки ..............................................................................................................
176
Макрос
ТекстАсимволамиТекстаВ
..............................................................................................
176
8.4. Операторы
VBA
..............................................................................................................................
177 Оператор
If...Then...Else
.................................................................................................................
177
Оператор
Select Case
......................................................................................................................
178
Операторы
цикла ............................................................................................................................
179 Оператор For...Next
.............................................................................................................
180
Оператор
Do Loop ...............................................................................................................
180
Массивы
..........................................................................................................................................
181 Статические массивы
..........................................................................................................
181 Динамические массивы
.......................................................................................................
181 Ввод массива присваиванием
значений.............................................................................
182
Ввод массива и
функция InputBox
.....................................................................................
182 Ввод динамического
массива .............................................................................................
182
Использование
функции Array
...........................................................................................
182
Использование
случайных чисел .......................................................................................
183
Приложение. Решения и ответы к заданиям
.................................................................. 184
К ГЛАВЕ 1
..............................................................................................................................................
184 Задание 1.1
...........................................................................................................................
184
Задание
1.2 ...........................................................................................................................
184
Задание
1.3
...........................................................................................................................
184
Задание
1.4
...........................................................................................................................
185
К ГЛАВЕ 2
..............................................................................................................................................
185 Задание 2.2
...........................................................................................................................
185
Задание
2.3 ...........................................................................................................................
185
Задание
2.4
...........................................................................................................................
185
К ГЛАВЕ
3 ..............................................................................................................................................
185
Задание
3.1
...........................................................................................................................
185
Задание
3.2
...........................................................................................................................
185
Оглавление

Задание
3.3
...........................................................................................................................
186 Дополнительные задачи
к заданию 3.3
..............................................................................
186 Задание 3.4
...........................................................................................................................
186
Задание
3.5
...........................................................................................................................
186 Дополнительные задачи
к заданиям 3.4 и 3.5
................................................................... 187 Задание 3.6
...........................................................................................................................
187
Задание
3.7
...........................................................................................................................
187
Задание
3.8
...........................................................................................................................
187
Задание 3.9
...........................................................................................................................
187 Задание 3.10
.........................................................................................................................
188
Задание
3.11
.........................................................................................................................
188
Задание
3.12 .........................................................................................................................
188
Задание
3.13
.........................................................................................................................
188
Задание
3.14 .........................................................................................................................
188
Задание
3.15
.........................................................................................................................
189
Задание
3.16
.........................................................................................................................
189
К
ГЛАВЕ 5
..............................................................................................................................................
189 Задание 5.1
...........................................................................................................................
189
Задание
5.2
...........................................................................................................................
189
Задание
5.3 ...........................................................................................................................
189
Задание
5.4
...........................................................................................................................
190
Задание
5.5 ...........................................................................................................................
190
Задание
5.6
...........................................................................................................................
190
Задание
5.7
...........................................................................................................................
191
Задание
5.8
...........................................................................................................................
191
Задание 5.9
...........................................................................................................................
191 Задание 5.10
.........................................................................................................................
192
Задание
5.11
.........................................................................................................................
192
Задание
5.12 .........................................................................................................................
192
Задание
5.13
.........................................................................................................................
193
Задание
5.14 .........................................................................................................................
194
Задание
5.15
.........................................................................................................................
194 К ГЛАВЕ 6 ..............................................................................................................................................
194
К
ГЛАВЕ 7
..............................................................................................................................................
195 Задание 7.1
...........................................................................................................................
195
Задание
7.2 ...........................................................................................................................
195
Задание
7.3
...........................................................................................................................
195
Задание
7.4
...........................................................................................................................
196
Задание
7.5
...........................................................................................................................
197
Задание
7.6
...........................................................................................................................
197
Задание
7.7
...........................................................................................................................
198
Задание
7.8
...........................................................................................................................
199
Задание 7.9
...........................................................................................................................
200 Задание 7.10
.........................................................................................................................
202
Задание
7.11
.........................................................................................................................
203
Задание
7.12 .........................................................................................................................
203
Задание
7.13
.........................................................................................................................
204
Задание
7.14 .........................................................................................................................
205
Список литературы
.............................................................................................................
206
Предметный указатель
.......................................................................................................
207

Предисловие

Результаты проведения Единого государственного экзамена
(ЕГЭ) по информатике показывают изменение отношения к предмету со стороны как
преподавателей, так и учащихся. Пришлось согласиться, что только твердые знания
теории выносимых на экзамен вопросов, а также свободное владение эффективными
моделями (способами, методами, приемами) решения задач позволяют гарантировать
успешную сдачу экзамена.
При обучении и в период подготовки к сдаче экзамена
естественно учитывать, что ассортимент заданий в основном известен.
Формулировки задач от года  к году изменяются несущественно. Если и добавляются
новые задачи, то количество их небольшое. Все это позволяет заранее обращать
внимание на формальные подходы, обеспечивающие наиболее быстрые решения. Многие
из этих подходов рассмотрены в книге достаточно подробно.
Если задачи кодирования решаются без особых затруднений
(см. главу 1), то появление задач, связанных с вероятностным подходом к
информации (см. главу 2), требуют особого внимания. Умение быстро решать
наиболее простые задачи по системам счисления (см. главы 3 и 4) может
освободить время для решения более сложных задач.
В книге много внимания уделяется булевой алгебре (см.
главу 5) и алгебре логики (см. главу 6). Каждое решение типовой задачи в этих
главах желательно брать как инструмент для решения подобных задач. Рене Декарт
по этому поводу сказал следующее: "Каждая задача, которую я решал,
становилась правилом, служившим впоследствии для решения других задач".
Книга содержит учебный материал с заданиями в различных
вариантах:
 во-первых,
это примеры, в которых рассматриваются и обсуждаются алгоритмы, приемы решения
задач. Примеры, как правило, доводятся до ответов;
 во-вторых,
это задания, где формулируется задача, а решение и ответ, как правило,
выносятся в приложение;
 в-третьих,
различной постановки задания, которые предлагается решать самостоятельно и на
которые ответы не даются. Это задания для тренировки.
Предисловие
Желательно свободно владеть понятиями о таких объектах
булевой алгебры, как наборы значений аргументов, таблицы истинности, нормальные
и совершенные формы, дизъюнктивные и конъюнктивные формы и т. д. Наиболее часто
в заданиях ЕГЭ встречается функция импликация. Полезно запомнить ее код в
таблице истинности и ее запись в булевой алгебре.
Материал по решению текстовых логических задач в книге
изложен достаточно полно. Рассмотрены различные варианты решений.
Небольшое количество листингов дано в Visual Basic 6.0
(VB) или в Visual Basic for Applications (VBA). Последняя глава содержит
материал, связанный с построением макросов. Показано, что для создания программ
на VB и VBA и работы с ними достаточно иметь одно из приложений Microsoft
Office, например, Word.
В настоящее время Microsoft Visual Basic (VB) — самый
популярный в мире инструмент разработки приложений. Более того, знание его
основ необходимо для всех программистов, какими бы средствами они ни
пользовались. Visual Basic for Applications (VBA) является диалектом VB и
практически почти ничем от него не отличается.
Во всемирном рейтинге популярности языков
программирования на конец 2009 года первые три места занимают Java, C и Visual
Basic (Pascal на 18-м).
Почетное третье место языка Visual Basic в списке
популярности объясняется также тем, что операционные системы от Microsoft
работают почти на 97% компьютеров всего мира. За ними следуют ОС Apple — 2,3%,
Linux — 0,36% (данные опроса 50 тыс. клиентов из более чем 100 стран мира).
Интересно заметить, что из 97% доля ОС Windows XP составляет 86,8%, Windows
2000 — 6,9%, Windows 98 — 2,68%.
В будущем Microsoft VBA — это Visual Studio Tools
Applications (VSAA) —  основанный на Microsoft .NET инструментарий расширения
функциональности. Десять лет назад во всем мире было не более двух миллионов
программистов. Сегодня их насчитывается около десяти миллионов, из них не менее
70% используют хотя бы один из инструментов — VB или VBA.
Благодарности
Автор рад возможности выразить искреннюю благодарность
Горюновой Марине Александровне — кандидату педагогических наук, доценту, зав.
УМЦ дистанционных и мультимедийных технологий в образовании (ЛОИРО) за большую
помощь в апробации материала пособия на занятиях с учителями школ Ленинградской
области, и Паньгиной Нине Николаевне — учителю информатики,  директору Центра
информационных технологий г. Сосновый Бор за доверие и помощь в привлечении автора
к занятиям в Ленинградском областном центре одаренных школьников
"Интеллект" (ГОУ "Интеллект", пос. Лисий Нос).

ГЛАВА 1

Информация.
Кодирование информации
1.1. Общие сведения об информации
Информация
Информацией называют
сведения о предметах, процессах и явлениях окружающего нас мира. Это простое
определение, которое будет в дальнейшем уточняться, не исчерпывает всю глубину
понятия информации.
Информацию человек
воспринимает с помощью органов чувств. Зрение, слух, обоняние, вкус и осязание
позволяют нам, например, получить информацию о размере, форме, цвете,
твердости, аромате и вкусе яблока.
Информацию человек не только
воспринимает, но и сам является ее источником с помощью речи, жестов, письма,
графики. Сам образ человека несет информацию, по которой его узнают, отличают
от других людей.
Источниками информации для
человека служат окружающие его предметы и явления. Много информации он получает
по телевидению, радио, печати, читая книги, просматривая фильмы, в разговорах с
другими людьми.
Со второй половины ХХ века
наблюдается "информационный взрыв". Развитие науки и техники,
литературы и искусства привели к значительному увеличению количества
информации. Одновременно существенно увеличились темп жизни и цена времени.
Человек не в силах одновременно слушать и смотреть сотни и тысячи теле- и
радиопередач, читать сотни и тысячи издаваемых ежедневно книг, газет и
журналов. Остро встала проблема сортировки и выбора информации, разработки
средств передачи и переработки информации. На помощь пришли новейшие средства
телекоммуникаций, важными элементами которых служат компьютеры.
В соответствии с
увеличившимся значением информации и средств телекоммуникаций, а также
углубленным пониманием роли информации и информацион-

ных процессов не только в
жизни человечества, но и во вселенском масштабе меняется взгляд на научную
картину мира.
Известны два поля дальнего
взаимодействия — электромагнитное, осуществляющее взаимодействие между
электрически заряженными частицами, и гравитационное (поле тяготения),
осуществляющее взаимодействие между массами.  В настоящее время ученые к этим
полям добавляют информационное поле. Современная научная картина мира строится
на трех основополагающих понятиях: вещества, энергии и информации.
Информацию выдают,
воспринимают, используют, перерабатывают все представители животного и
растительного мира, все автоматически работающие механизмы, устройства.
Важно отметить, что
информационные процессы в живой природе, обществе,  в различных механизмах и
устройствах имеют много общего и подчиняются одним и тем же законам. Это
позволяет рассматривать и изучать их с одинаковых позиций, строить единую для
них теорию информации.
Информационные системы
Информация не может
существовать без выдающих ее объектов, передаваться без соответствующих
объектов, способных ее переносить, и восприниматься без объектов, способных ее
принимать, понимать и использовать. Простейшая информационная система состоит
из источника информации, канала связи и приемника информации (рис. 1.1).

Рис. 1.1. Простейшая информационная
система
Примерами информационных
систем могут служить: книга и читатель, светофор и водитель (зрительные каналы
связи), передающая радиостанция и радиоприемник (канал связи — радиоволны),
радиоприемник и слушатель (звуковой канал связи) и т. п.
Информатика тесно связана с
кибернетикой. Кибернетика — это наука о процессах управления в машинах, живых
организмах, обществе. Она также занимается изучением общих законов получения,
хранения, передачи и переработки информации в управляющих системах.
В кибернетике
рассматриваются более сложные информационные управляющие системы, включающие
управляющий объект, канал связи и управляемый объект (рис. 1.2). При этом
управляющий и управляемый объекты могут представляться в виде "черного
ящика", что предполагает изучение работы системы независимо от внутреннего
содержания и структуры этих объектов. Они могут быть любой природы:
механическими, электрическими, биологическими, общественными структурами и т.
д.

Рис. 1.2. Информационная управляющая
система

Кроме понятия черного ящика
в кибернетике используют важное понятие обратной связи. Функционирование
управляющей системы рассматривается с разомкнутой и замкнутой обратной связью,
которая может быть положительной или отрицательной.
Положительная обратная связь
усиливает результаты работы управляемого объекта. Как правило, положительная
обратная связь приводит к усилению управляющих сигналов, что ведет к
перевозбуждению и неустойчивой работе системы. Отрицательная обратная связь
ослабляет управляющие воздействия на управляемый объект.
Для стабильной, устойчивой,
без излишних колебаний работы системы необходимо, чтобы управляющие сигналы в
каждый момент времени имели соответствующую величину и знак. Это обеспечивается
работой устройства сравнения. Оно находится на входе управляющего объекта,
сравнивает передаваемые по обратной связи реальные результаты работы
управляемого объекта с требуемыми результатами и вырабатывает сигнал ошибки
соответствующего знака и величины. Это корректирует в нужном направлении управляющие
сигналы и работу управляемого объекта.
Пусть управляющий объект —
шофер автомашины, управляемый объект — автомашина. Управляющие сигналы — это
воздействия шофера на рулевое управление. Обратная связь — зрительная.
Качественная работа такой системы может определяться плавным, без колебаний
вписыванием автомобиля в виражи дороги. Без обратной связи такая система не
работоспособна.
Примером управляющей системы
может служить система "учитель — ученик". Управляющие сигналы в такой
системе — это информация, передаваемая ученику на учебных занятиях. Качество
функционирования системы оценивается уровнем знаний и умений ученика, которые
существенно зависят от работы обратной связи — различных видов контроля
усвоения учебного материала.
Свойства информации
К свойствам информации можно
отнести ее важность (ценность, полезность), достоверность (истинность,
правильность), полноту, оперативность (своевременность), понятность
(доступность) и некоторые другие качества.
 Важность.
Полученная в разговоре по телефону информация может быть
новой и важной для собеседников или сообщающей известные им сведения.
Информация о возможных заморозках имеет различную важность для огородника,
шофера и водителя трамвая. В этом проявляется субъективность в оценке инфор-
мации.
Можно сказать, что цена информации определяется
связанными с ней материальными или духовными приобретениями или потерями. Более
ценной информации соответствует и больший выигрыш или меньший проигрыш.
 Достоверность.
Это свойство связано с истинностью и ложностью
информации. Известно, что истина объективна по содержанию (не зависит от
человека), но субъективна по форме, т. к. является результатом деятельности
человека.
Истина относительна. Она отражает предмет не полностью ввиду
ограниченности человеческих знаний. В процессе познания человека она стремится
к истине абсолютной, полностью исчерпывающей предмет познания.
Например, великий Пифагор считал, что молнии мечет на
Землю разгневанный Зевс. Теперь же каждый школьник знаком с электричеством.
Долгое время за истину принималась геоцентрическая система Птолемея. В
настоящее время истинность, достоверность информации о гелеоцентричности
Солнечной системы бесспорна.
 Полнота.
Полнота информации о предмете, процессе, явлении зависит
от ее количества, подробности, всесторонности. Понятие полноты информации о
предмете так же субъективно и относительно, как и понятие истины. Информацию
даже о простейшем предмете невозможно исчерпать полностью. Всегда можно что-то
добавить, уточнить.
 Оперативность.
Оперативность — это своевременность информации. С этой
характеристикой информации мы встречаемся практически ежедневно. Все средства
массовой информации стремятся оперативно получать информацию и передавать ее
зрителям, слушателям, читателям. Устаревшая информация нас, как правило, мало
интересует.
 Доступность.
Это свойство информации связано с возможностью ее
воспринимать, понимать и использовать. Сообщение, передаваемое вам, например,
азбукой Морзе, если вы ее не знаете, не несет никакой информации.
Можно заметить, что все перечисленные характеристики
информации взаимосвязаны, взаимозависимы. Например, ценность информации
определяется ее достоверностью, полнотой и оперативностью.

1.2. Кодирование и единицы информации
Языки и алфавиты
Различают естественные и
искусственные (формальные) языки. Естественные языки развивались веками и
служат для общения людей между собой. Формальные языки разрабатываются для
специальных применений. Примером формальных языков могут служить языки
программирования, языки кодирования информации для ее передачи, хранения и т.
п.
Каждый язык имеет свой
алфавит. Под алфавитом языка понимают набор используемых символов. Под
мощностью алфавита понимают количество составляющих алфавит символов.
Кодом называют совокупность
знаков (символов), предназначенных для представления информации в соответствии
с определенными правилами. Такое представление называют кодированием. Кодируют
информацию с целью ее передачи, хранения, преобразования.
Одно и то же понятие на
различных языках может кодироваться различными способами. Например, слово
"стол" — это код в русском алфавите всем известного предмета мебели.
В других языках, в других алфавитах этот предмет кодируется иначе.
Звук а, издаваемый
человеком, кодируется в некоторых языках буквой А. Буква А в азбуке Морзе
кодируется так: "• —" (точка, тире). В компьютере буква А латинского
алфавита в привычной для нас десятичной системе кодируется числом 65. В свою
очередь, число 65 в "привычной" для компьютера двоичной системе
(цифры только 0 и 1) кодируется так: 01000001.
В естественных языках
традиционно сложились некоторые неоднозначности. Например, под словом
"коса" понимается и девичья коса, и речная отмель, и инструмент для
скашивания травы. Подобные неоднозначности в формальных языках, как правило,
недопустимы.
Различны и алфавиты языков
кодирования. Это буквы A, B, C, D, ... и буквы А, Б, В, Г, Д, ... в латинском и
русском алфавитах; точка и тире в азбуке Морзе; арабские цифры 0, 1, 2, 3, ...,
9, с помощью которых записываются числа, кодирующие различные количества;
красный, желтый и зеленый цвета в светофоре; цифры 0 и 1 в компьютере и т. п.
Количество и графическое
изображение символов в алфавитах естественных языков определяется характерными
особенностями языка, историей его развития, традициями. Например, русский
алфавит имеет 33 буквы, латинский — 26, итальянский — 21, армянский — 39,
арабский — 28, китайский — несколько тысяч иероглифов. Количество и изображение
знаков в формальных языках могут также существенно различаться.
Наименьший по числу знаков
алфавит имеет только один знак. Пусть этот знак 1 (единица). Тогда три цвета
светофора можно закодировать, например, так: красный — 1, желтый — 11, зеленый
— 111. Такой алфавит — самый неэкономичный по записи кодов. В этом легко
убедиться, если попытаться записать в этом алфавите, например, число десять:
1111111111.
Двоичный алфавит
В информатике и
вычислительной технике широко используется алфавит, имеющий два знака — 0 и 1.
Этим знакам в логике и технике приводят в соответствие понятия —
"нет" и "да", ложь и истина, выключено и включено. Такой
алфавит называют двоичным или бинарным. От бинарного алфавита и пошло название
наименьшей целой единицы информации — бит (bit, от англ. binary — двоичный и
digit — знак). Клод Шеннон, американский ученый, много сделал для разработки
теории информации. Он определил бит как сообщение, представляющее один из двух
вариантов: например, "орел" — "решка", или "да" —
"нет".
Одного бита информации
достаточно, чтобы закодировать, например, состояние электрической лампочки.
Кстати, на некоторых выключателях пишут 1 — включено и 0 — выключено. Взгляд на
выключатель снимает для нас неопределенность в его состоянии. При этом мы
получаем количество информации равное одному биту.
ПРИМЕР 1.1
Пусть требуется отгадать
задуманное число из набора натуральных чисел от 1  до 8, задавая вопрос:
"В первой половине находится задуманное число?" и получая в ответ
"Да" или "Нет".
Задав первый вопрос и
услышав первый ответ, получаем один бит информации. При этом неопределенность
уменьшается в два раза (из 8 чисел остается только 4). После второго вопроса
получаем еще один бит информации, уменьшающий неопределенность еще в два раза
(из 4 чисел осталось только 2). Последний, третий вопрос позволяет отгадать
число.
Для отгадывания
потребовалось получить три ответа, три бита информации. Столько же бит
требуется для оптимального кодирования двоичными кодами каждого из восьми
чисел: bbb1 2 3 = {000, 001, 010, 011, 100, 101, 110, 111}?

Рис. 1.3. Пример процедуры отгадывания
числа
На рис. 1.3 показана
последовательность шагов отгадывания числа 6. На вопрос "В какой половине
находится число?" дается ответ в виде жирной линии. При решении задачи
использован оптимальный по числу попыток прием деления пополам. Метод половинного
деления находит широкое применение в математике, информатике и других науках.
Двоичное слово. Байт
Если нужно закодировать в
двоичном алфавите красный, желтый и зеленый цвета светофора, то требуются уже
два бита. Закодировать три цвета можно, например, так: 00, 01 и 10. Сообщение о
том, что включен, например, красный цвет светофора, содержит информации больше
одного бита.
Для кодирования четырех
сторон света (север, восток, юг и запад) требуются также два бита: 00, 01, 10,
11. Поэтому сообщение о том, какая выбрана сторона света, содержит ровно два
бита информации.
При кодировании восьми углов
куба потребуются три бита: 000, 001, 010, 011, 100, 101, 110, 111. При
кодировании от 9 до 16 объектов потребуются уже четыре бита, от 17 до 32 — 5
бит, от 33 до 64 — 6 бит и т. д.
Последовательность символов
называют словом. Можно сделать вывод: чем больше требуется закодировать
объектов, тем длиннее будет двоичное слово. Восьмибитовое двоичное слово
называется байтом. С помощью байта можно закодировать 256 различных объектов (2
2568 = ).

Код ASCII
До недавнего времени байта
было достаточно, чтобы закодировать все символы текста в русском и латинском
алфавитах: буквы, цифры, знаки препинания, управляющие сигналы — все то, что
передавалось компьютеру с клавиатуры. Для этого использовался код ASCII
(American Standard Coding for Information Interchange, американский стандартный
код для обмена информацией).
Далее показана табл. 1.1 с
примерами кодирования символов в коде ASCII.
Таблица 1.1.
Примеры кодирования в ASCII

Символ

Двоичное слово

Десятичный код

Пробел

00100000

32

, (запятая)

00101100

44

. (точка)

00101110

46

...

...

...

A

01000001

65

B

01000010

66

C

01000011

67

D

01000100

68

...

...

...

А

10000000

128

Б

10000001

129

В

10000010

130

Г

10000011

131

...

...

...

Unicode
С развитием информатики байт
начал сдерживать возможность увеличения количества используемых символов. В
настоящее время завершен переход на двухбайтовое кодирование символов с
использованием кода Unicode. Этот код используется в двух вариантах. Первый вариант
с длиной кода в 31 бит имеет для кодирования символов, слов и команд такой
запас кодов, который трудно преодолеть. Второй вариант отводит для кодирования
два байта (16 бит), что дает возможность кодировать до 65 536 объектов. Этот
вариант используется в операционных системах и приложениях современных
компьютеров.
На рис. 1.4 показана таблица
кодирования символов в Unicode. Таблицу выводит на экран макрос, код которого
представлен в листинге 1.1. О создании макроса рассказано в разд. 8.2.

Sub Таблица_Unicode()
  ' Таблица_Unicode Макрос
  ' Макрос создан 02.01.2010 BLACK
  For i = 33 To 255
    Debug.Print " "; i; "  ";
Chr(i),
    If i Mod 8 = 0 Then Debug.Print
  Next
End Sub
Начало таблицы двухбайтового
Unicode совпадает с первой половиной таблицы кода ASCII. Кодирование русского
алфавита отличается от кодирования в ASCII.
Из таблицы можно получить
числа, которыми кодируются в Unicode буквы русского алфавита. Прописные буквы от
А до Я, включая букву Й, последовательно кодируются числами от 192 до 223.
Буква Ё кодируется числом 168. Строчные буквы от а до я, включая букву й,
кодируются последовательно числами от 224 до 255. Буква ё закодирована числом
184.

Рис. 1.4. Таблица кодирования символов
в Unicode
Единицы информации
На практике используются
более объемные, производные единицы количества информации:
 1 байт = 8 бит = 23 бит;
 1 килобайт (Кбайт) = 210 байтов = 1024
байтов = 2 210 ⋅
3 бит = 213 бит;
 1 мегабайт (Мбайт) = 210 килобайтов = 1024
килобайтов = 223 бит;
 1 гигабайт (Гбайт) = 210 мегабайтов = 1024
мегабайтов = 233 бит;
 1 терабайт (Тбайт) = 210 гигабайтов = 1024 гигабайтов
= 243 бит и т. д.

ПРИМЕР 1.2
При
работе с текстовым редактором Microsoft Word командой Сервис | Статистика можно
вывести на экран диалоговое окно Статистика (рис. 1.5). В окне отображаются
характеристики документа, загруженного в рабочее поле редактора.

Подсчитаем объем памяти,
требуемый для записи и хранения в памяти компьютера текстового документа с
показанными в окне данными.
Всего знаков с пробелами 30
496. В коде ASCII требуется память 30 496 байтов или 30496/1024 = 29,78125
≈ 30 Кбайт.
В Unicode, где каждый знак
кодируется двумя байтами, потребуется память в два раза большего объема.
1.3. Кодирование графики и звука
С помощью компьютера рисуют,
сочиняют музыку, компьютер понимает человеческий голос и сам может отвечать
пользователю. Так как вся информация в компьютере обрабатывается и сохраняется
в цифровом виде, то и графическая и звуковая информация должна быть
представлена в цифровой форме. С этой  целью ее кодируют числами. Различают
растровую и векторную графику.
Кодирование растровой графики
Весь экран дисплея делится
на точки — пикселы (pixel, от англ. picture element — элемент рисунка),
подсвечивание которых создает видимое отображение текста и рисунков (рис. 1.6).

Рис. 1.6. Растровый способ отображения
графики
При работе с растровыми
изображениями приходится иметь дело со всеми точками рисунка. Например, если
цветная фотография, полученная с помощью цифровой фотокамеры, имеет размеры
1600×1200 точек, то в памяти компью- тера необходимо хранить информацию
(цвет, яркость) о каждой из N (N = 1600×1200) точек фотографии.
Информационный
объем растрового изображения (Q) определяется как произведение числа входящих в
изображение точек (N) на информационный объем одной точки (q), который зависит
от количества возможных цветов, т. е. Q = N×q.
При черно-белом изображении
q = 1 бит (например, 1 — точка подсвечивается и 0 — точка не подсвечивается).
Поэтому для хранения черно-белого (без оттенков) изображения размером
100×100 точек требуется 10 000 бит. Если между черным и белым цветами
имеется еще шесть оттенков серого (всего 8), то информационный объем точки
равен 3 бита (log 82
= 3 ). Информационный объем
такого изображения увеличивается в три раза: Q = 30 000 бит.
Цветное изображение
получается за счет различной яркости трех основных цветов — красного, синего и
зеленого. Цветные изображения могут отображаться  в различных режимах,
соответственно изменяется и информационный объем точки (табл. 1.2).
Таблица 1.2.
Информационный объем точки

Режим

Информационный объем точки

2 цвета

q = 1 бит, черно-белое изображение

16 цветов

q = log216 = 4 бита

256 цветов

q = log2256 = 8 бит = 1
  байт

65 536 цветов

q = log265536 = 16 бит =
  2 байта

16 777 216 цветов

q = log216777216 = 24 бит
  = 3 байта

Умножение информационного
объема точки на количество точек дает значительную величину. Поэтому актуальной
становится задача расчета объема памяти (видеопамяти), необходимой для хранения
изображения (битовой карты) со всего экрана монитора. Рассмотрим два примера.
ПРИМЕР 1.3
При размерах экрана
(разрешении) 640×480 точек и количестве цветов 256  (q = 1 байт, см.
табл. 1.1) объем видеопамяти должен быть не менее Q = 640×480×1 = = 307200 = 300×1024 байт ≈ 300 Кбайт.
ПРИМЕР 1.4
Для экрана размером
1280×1024 точки и количестве цветов 167 77 216 (q = 3) имеем Q =
1280×1024×3 = 3 932 160 байт, Q = 3932160/1024 = 3840 Кбайт, Q =
3840/1024 = 3,75 Мбайт.
Современные
компьютеры имеют объем видеопамяти 8, 16 и более мегабайт, что позволяет
хранить несколько графических изображений размером во весь
экран.
Кодирование векторной графики
Векторное изображение
состоит из набора элементарных деталей — графических примитивов. Это линии,
прямоугольники, окружности, дуги и т. п. Положение этих элементов на экране
определяются координатами точек. Например, отрезок прямой задается координатами
концов, окружность — координатами центра и радиусом и т. д. Кроме координат
задаются цвет отображаемых деталей, толщина линий и другие характеристики.
Информация о векторном
рисунке кодируется обычным способом, как хранятся тексты, формулы, числа, т. е.
хранится не графическое изображение, а только координаты и характеристики
изображения его деталей. Поэтому для хранения векторных изображений требуется
существенно меньше памяти, чем растровых изображений.
При запуске программы с
векторным рисунком он создается каждый раз вновь, после чего в растровом виде
может сохраняться в видеопамяти. При просмотре графических изображений они
считываются компьютером из видеопамяти на экран дисплея с частотой 50—60 и
более раз в секунду.
Кодирование звука
Человек слышит звук с
частотами от 16 Гц (колебаний в секунду) до 20 кГц. До недавнего времени
звуковые сигналы передавались, записывались на граммофонных пластинках и
магнитных лентах и воспроизводились в виде амплитудных колебаний. При передаче
радио- и телевизионных программ использовалась амплитудная или частотная
модуляция так называемой несущей частоты радиосигнала низкочастотными звуковыми
сигналами. На приемных устройствах звуковые сигналы усиливались и подавались на
репродукторы и динамики. В процессе передачи по каналам связи на звуковые
сигналы могут накладываться различной природы внешние электромагнитные
воздействия, которые могут существенно эти сигналы искажать.
Значительное увеличение
быстродействия компьютеров и других цифровых устройств, увеличение памяти
компьютеров позволили перейти на цифровую передачу и воспроизведение аудио- и
телевизионных передач, сохранять их в памяти компьютера, хранить на лазерных
CD- и DVD-дисках. При этом существенно повышается надежность и качество
воспроизведения.
Процесс перевода звуковых
сигналов от непрерывной формы представления  к дискретной, цифровой форме
называют оцифровкой. Оцифровка звуковых сигналов заключается в их временной
дискретизации и амплитудном квантовании (рис. 1.7).
Временная дискретизация
состоит в том, что амплитуда звуковых сигналов измеряется только через
небольшие равные промежутки времени (дискреты). Величина этих промежутков
выбирается из соображений наименьших допустимых искажений звука.
Амплитудное квантование
заключается в определении в цифровом виде значений амплитуды звукового сигнала
в определяемые временной дискретизацией моменты времени. При этом, ввиду
ограниченной точности также возможны искажения звука, которые минимизируются
выбором шага квантования амплитуды.
Преобразование сигналов из
непрерывной (аналоговой) формы в цифровую выполняют аналого-цифровые
преобразователи (АЦП). Преобразование сигналов из цифровой формы в аналоговую
выполняют устройства, называемые цифроаналоговыми преобразователями (ЦАП).
Например, место ЦАП и АЦП в цепочке преобразований и передаче сигнала может
быть следующим:

микрофон — АЦП — компьютер — канал связи —
компьютер —  ЦАП — звуковые колонки.

Рис. 1.7. Процесс оцифровки звуковых
сигналов
1.4. Задания  для самостоятельной работы
1.
Придумать примеры: а) информации, имеющей различную ценность для
различных людей, что подтверждает субъективность в оценках важности информации;
б) информации, ценность которой существенно зависит от ее оперативности; в)
информации, ценность которой зависит от ее полноты.
2.
Определить число бит (длину двоичного слова), потребное для кодирования
в двоичном алфавите: а) всех пальцев на руках и ногах; б) всех квартир
150-квартирного дома.
3.
Сколько бит информации нужно получить, чтобы отгадать загаданное число
из 16 последовательно расположенных чисел натурального ряда, из 32 чисел.
4.
Выбрать любую книгу и подсчитать потребный для ее записи объем памяти.

1.5. Примеры и задачи из архива ЕГЭ
ПРИМЕР 1.5
Считая, что каждый символ кодируется в
Unicode двумя байтами, определите, чему равен информационный объем следующего
высказывания Исаака Ньютона: "При изучении наук примеры полезнее, чем
правила".
Решение
Высказывание содержит,
включая знаки препинания и пробелы, 47 символов. При кодировании каждого
символа двумя байтами получаем, что информационный объем высказывания равен:
47×2 байта = 47×16 бит = 752 бита.
Ответ: 752 бита.
Следующие три примера — на
"путь" (S), "время" (t) и "скорость" (V), под
которыми соответственно понимаются информационный объем сообщения, время
передачи сообщения и скорость передачи данных. Используя знакомые обозначения,
будем применять и известные формулы: S = V×t, V = S/t, t = S/V.
ПРИМЕР 1.6
При скорости модема 56 Кбит/с передача
текстового файла заняла 12 секунд. Требуется определить, сколько символов
содержал переданный текст, если известно, что он закодирован в Unicode.
Решение
Известны скорость (V) и
время (t). Определим информационный объем файла в битах: S = V×t =
56×1024×12 = 688 128 бит. В Unicode каждый символ кодируется            16-битовым
     словом.               Определим       количество                 символов           в
            тексте:
S/16 = 688128/16 = 43 008
символов.
Ответ: 43 008 символов.

ПРИМЕР 1.7
Скорость передачи данных
через ADSL-соединение равна 5 120 000 бит/с. Через данное соединение передают
файл размером 5000 Кбайт. Определите время передачи файла в секундах.
Решение
Известны скорость (V) и
размер файла (S). Заданную скорость удобно представить в единицах Кбайт/с: V =
(5120000/1024)/8 = 625. Определим время передачи t = S/V = 5000/625 = 8 секунд.

Ответ: 8 секунд.

ПРИМЕР 1.8
Текстовый файл объемом 8000
байт передан за 20 секунд. Скорость передачи при этом составляла 200 символов в
секунду. Требуется определить, сколько бит на один символ отведено при
кодировании передаваемого сообщения.
Решение
Определим, сколько символов
в заданном текстовом файле: S = V×t = 200×20 = = 4000 символов.
Число бит на символ получим при делении объема файла в битах на количество
символов: 8000×8/4000 = 16 бит. Полученный ответ позволяет предположить,
что текст файла закодирован в Unicode — 2 байта на символ.

ПРИМЕР 1.9
Обычный дорожный светофор
без дополнительных секций подает шесть видов сигналов (непрерывные красный,
желтый и зеленый, мигающие желтый и зеленый, красный и желтый одновременно).
Электронное устройство управления светофором последовательно воспроизводит
записанные сигналы. Подряд записано 100 сигналов светофора. Сколько байт для
этого потребуется?
Решение
Для кодирования шести
вариантов сигналов требуется три бита (2 42 = — мало,
23 =8
— достаточно). 100 сигналов в сумме потребуют 300 бит памяти. Один байт равен
8-ми битам. Поэтому 300/8 = 36,5 байта, что с небольшим избытком в 0,5 бита
равно 37 байт.
Ответ: 37 байт.
ПРИМЕР 1.10
Для хранения растрового
изображения размером 128×128 пикселов отвели 4 Кбайт памяти. Каково максимально
возможное число цветов в палитре изо-
бражения?
Решение
Всего
количество пикселов в изображении равно: 128 128 2 2 2× = 7 × 7 = 14 . Все свыше числа
пикселов отводятся для обеспечения цветности:
4 Кбайт = 2 22 × × = ×10 2
23 14 21. Получили, что для хранения палитры цветов
остался один бит — два цвета.
Ответ: 2 цвета.
ПРИМЕР 1.11
Сколько секунд потребуется
модему, передающему сообщения со ско- ростью 28 800 бит/с, чтобы передать
цветное растровое изображение размером
640×480 пикселов, при
условии, что цвет каждого пиксела кодируется тремя байтами?
Решение
Определим информационный
объем сообщения: S = 640×480×3×8 = 7 372 800 бит.
Для передачи требуется t =
S/V = 7372800/28800 = 256 секунд.
Ответ: 256 секунд.
ПРИМЕР 1.12
Укажите минимальный объем
памяти (в килобайтах), достаточный для хранения любого растрового изображения
размером 64×64 пиксела, если известно, что в изображении используется
палитра из 256 цветов. Саму палитру хранить не нужно.
1) 128;           2) 2;             3) 256;              4)
4.
Решение
Всего пикселов: 64 64 2 2 2× = × =6 6 12 .
Для задания цвета в одном пикселе  требуется: 8 бит = 1 байт (2 2568 = цветов). Всего
требуется памяти:
2 112 × байт = 2 2 12 × ×10     байт = 4 1024×   байта = 4
Кбайт.
Ответ: 4 Кбайт.
ПРИМЕР 1.13
Для составления цепочек
используются бусины, помеченные буквами A, B, C, D и E. На первом месте в
цепочке стоит одна из бусин А, С, Е. На втором — любая гласная, если первая
буква согласная, и любая согласная, если первая буква гласная. На третьем месте
— одна из бусин C, D, E, не стоящая в цепочке на первом месте.
Какая из перечисленных
цепочек создана по этому правилу?
1) CBE;                  2)
ADD;                 3) ECE;                    4) EAD.
Решение
Переборы не гарантируют
быстрое получение правильного решения. Простой и наглядный подход —
вспомогательная таблица. Строки таблицы — заданные варианты решения, столбцы —
требования к бусинам цепочки.

Варианты ответа

1) A, C, E

2) Гласная,  если 1-я согласная;
  согласная,  если 1-я гласная

3) C, D, E, не стоит  на 1-м месте

Решение

CBE

+

–

−

Нет

ADD

+

+

+

Да

ECE

+

+

–

Нет

EAD

+

–

+

Нет

Заполняется таблица по
столбцам. Если ответ удовлетворяет условию построения цепочки, то ставится
плюс, если не удовлетворяет — минус. После заполнения таблицы просматриваются
строки. Из таблицы видно, что только цепочка ADD (вторая строка) удовлетворяет
всем трем правилам.
Ответ: ADD.
ЗАДАНИЕ 1.1
Для составления цепочек
используются бусины, помеченные буквами M, N, O, P, S. В середине цепочки стоит
одна из бусин: M, O, S. На третьем месте — любая гласная, если первая буква
согласная, и любая согласная, если первая буква гласная. На первом месте — одна
из бусин O, P, S, не стоящая в середине цепочки.
Какая из перечисленных
цепочек создана по этому правилу?
1) SMP;                            2) MSO;                          3)
SNO;                           4) OSN.
Заполнение и анализ таблицы см.
в примере 1.13.
ЗАДАНИЕ 1.2
Для составления цепочек
разрешается использовать бусины 5 типов, обозначаемые буквами А, Б, В, И.
Каждая цепочка должна состоять из трех бусин, при этом необходимо соблюдать
следующие правила:
1.
На первом месте стоит одна из букв: А, Е, И.
2.
После гласной буквы в цепочке не может стоять гласная, а после согласной
— согласная.
3.
Последней буквой не может быть А.
Какая из цепочек построена
по этим правилам?
1) АИБ;                            2) ЕБА;                            3)
БИВ;                           4) ИБИ.
ЗАДАНИЕ 1.3
При переводе в дискретную
форму аналогового сигнала длительностью 2 минуты 8 секунд использовались
частота дискретизации V = 32 Гц и 16 уровней дискретизации. Размер полученного
кода равен:
1) 512 байт;                  2) 8 Кбайт;                    3)
2 Кбайт;                   4) 128 байт.
ЗАДАНИЕ 1.4
В кодовой таблице ASCII
символы — заглавные буквы латинского алфавита — располагаются один за другим, в
алфавитном порядке.
Латинский алфавит (для
справки):
ABCDEFGHIJKLMNOPQRSTUVWXYZ.
Символ "А" имеет
код 4116.
Какое слово, закодированное
последовательностью: 4216, 5816 , 5416 , 4516
?
Варианты ответов: 1) BSNE;
2) HYTO;  3) BSNE;  4) BYTE.

ГЛАВА 2

Алфавитный и вероятностный
подходы
Приведенное в начале главы 1 определение
далеко не исчерпывает понятие информации, которое используется практически во
всех отраслях науки и техники. В числе первых, кто занимался вопросами теории
кодирования и передачи сообщений, был американский ученый Клод Шеннон. Он
показал, что информацию можно измерять. Шеннону принадлежит следующее
определение информации:
Информация — это снятая неопределенность.
2.1. Содержательный  и алфавитный
подходы
Величина неопределенности, снимаемой
некоторым сообщением, и представляет собой содержащееся в сообщении количество
информации.
Такой подход к определению информации
называют содержательным. Он различает сообщения по той пользе, которую
сообщение приносит его получателю. При этом количество информации в сообщении
зависит от его содержания. Содержательный подход делит сообщения на
информативные и сообщения, не несущие новой, полезной информации. Если в
сообщении отсутствует новая, полезная, снимающая неопределенность информация,
то такое сообщение несет количество информации, равное нулю. Содержательный
подход можно еще назвать субъективным, при нем трудно организовать формальную,
общую для всех получателей систему определения количества информации в сообщениях.

Алфавитный подход к определению информации,
в отличие от содержательного подхода, абстрагируется от содержания сообщений.
Сторонник этого подхода российский ученый А. Н. Колмогоров рассматривает
сообщение как слово, записанное символами некоторого алфавита. При этом
количество информации в сообщении определяется не его содержанием, а
количеством битов, потребных для кодирования данного сообщения. Алфавитный
подход хорошо формализуется, его также называют объективным.

Формула Хартли

Было показано, что сообщение о состоянии
выключателя несет один бит информации (2 2= 1, log
22 =1). Сообщение о выборе одной
из четырех сторон света несет два бита информации (4 = 22 , log 42 = 2 ). Сообщение о выборе одного из восьми углов
куба связано с получением информации объемом в три бита
(8 2= 3, log
82 = 3 ),
и т. д.
Рассмотренные примеры показывают, что для
кодирования в двоичном алфавите
N альтернатив (объектов, событий, сообщений,
состояний и т. п.) требуется
I = log2
N бит информации. Можно сделать вывод: чем больше требуется закодировать
объектов, тем длиннее требуется двоичное слово. Его длина определяется по
формуле Хартли, названной по имени предложившего ее американского инженера:
                                                                            I
= log2 N.                                                                   (2.1)

Эта формула определяет количество информации
(I), которое имеем в случае получения одного из N равновероятных сообщений.
Напомним, что логарифмом называют показатель
степени (I), в которую нужно возвести основание логарифма (в нашем случае — 2),
чтобы получить заданное число (N). При I = log2
N получаем N = 2I
.
Обозначим р — вероятность того, что
произошло одно из N равновероятных событий. Так как p=1/ N, то N=1/ p, и формулу Хартли
можно записать так:
                                                                         I
= log 1/2   p.                                                                (2.2)

Для определения целых значений величины I,
как функции от N, можно воспользоваться следующей табл. 2.1.
Таблица 2.1. I = f(N)

N (сообщений)

2

4

8

16

32

64

128

256

512

1024

I (бит)

1

2

3

4

5

6

7

8

9

10

2.2. Вероятностный подход
В рассмотренных выше примерах число
вариантов (объектов) равнялось степени числа 2 (2, 4, 8, 16, ...). В этих
случаях для кодирования требовались целые количества бит. Если же требовалось
кодировать, например, три цвета светофора, то выбиралось двухбитовое слово (bb1
2 = {00, 01, 10, 11}) и сообщалось об избыточности такого кодирования.
Вероятностный подход позволяет определять
точные, возможно, дробные значения количества информации в битах. На таком
подходе строятся практически все алгоритмы сжатия информации.
Вероятностный подход рассмотрим для случая,
когда вероятности событий равны, и более общего случая, когда вероятности
событий различны.
Рассмотрим примеры, связанные с
использованием формул (2.1) и (2.2).
ПРИМЕР 2.1
Сколько бит информации (I) нужно получить,
чтобы отгадать загаданное число из 32 случайно расположенных чисел натурального
ряда?
Решение
Для решения используем формулу (2.1): I = log 322 . Для
наглядности представим эту формулу в следующем виде: 2I = 32
.
Ответ: I = 5 бит.
ПРИМЕР 2.2
В составе поезда N = 16 вагонов. Среди них
есть вагоны купейные и плацкартные. Сообщение о том, что ваш знакомый приезжает
в купейном вагоне, несет I = 2 бита информации. Определить, сколько в поезде
купейных вагонов?
Решение
Обозначим k — искомое число купейных
вагонов. Вероятность того, что знакомый приезжает в купейном вагоне, равна р =
k/N = k/16. Для решения используем формулу (2.2): I = log (1/2 p) . Для нашего примера имеем: I = log (16 / )2 k .
Величина I по условию задачи равна 2.
Подставим значения: 22
=16 / k , откуда получаем k =
16/4 = 4, т. е. в поезде 4 купейных вагона.
Ответ: 4 вагона.
ПРИМЕР 2.3
Решим задачу, обратную задаче из примера
2.2. Будем вычислять количество информации (I) в зависимости от количества в
поезде купейных вагонов (k).
Решение
Заполним табл. 2.2 функции I = log2 N при N = 16 и k = 1, 2, 4, 8,
16.
Рассматривая результаты решения, сделаем
выводы. Чем меньше купейных вагонов в поезде, тем больше информации несет
сообщение о том, что ваш знакомый приезжает в купейном вагоне. И чем больше
купейных вагонов в поезде, тем меньше получаем количество информации. Когда все
вагоны поезда купейные, количество получаемой информации равно нулю.
Действительно, с учетом, что N = k и 2 10 = , имеем I = log (2 N k/ ) = log 12 = 0 .
Ответ: см. табл. 2.2.
Таблица  2.2. Функция  I = log2(N/k)

N

k

I = log2(N/k)

16

1

4

16

2

3

16

4

2

16

8

1

16

16

0

ПРИМЕР 2.4
В мешке находятся 16 фруктов: 8 яблок, 4
груши, 2 лимона и 2 ананаса. Какое количество информации содержится в
сообщениях о том, что из мешка случайным образом были последовательно взяты с
возвратом яблоко ( I1), груша ( I2 ), лимон ( I3 )
и ананас ( I4 ).
Решение
Воспользуемся формулой (2.2) I = log (1/2 p) . Определим вероятности утверждения
"взять из мешка один фрукт": яблоко — p1 = 8/16 =1/ 2 , грушу — p2 = 4 /16 =1/ 4 , лимон — p3 =
2 /16 =1/ 8, ананас — p4 = 2/16 =1/8. После подстановки в
формулу получаем: I1 =1 бит, I2 = 2
бита, I3 = =I4
3 бита.
Ответ: I1 =1 бит, I2 = 2 бита, I3 = =I4 3 бита.
Свойство аддитивности информации
Суммировать количества информации позволяет
ее свойство аддитивности. Оно вытекает из свойства логарифмов — логарифм
произведения равен сумме логарифмов сомножителей:
                             I
= log (2 N1× × ×N2 ...
NN ) = log2 1N + log2 N2 + +...    log2 NN.
                 (2.3)
Для демонстрации использования свойства
аддитивности рассмотрим следующий пример.
ПРИМЕР 2.5
Документация некоторого учреждения размещена
в 4-х комнатах. В каждой комнате находится 16 шкафов. Каждый шкаф имеет 8
полок. Определите количество информации, которое несет сообщение о том, что
нужный документ находится в третьей комнате, в тринадцатом шкафу на пятой
полке.
Решение
Решим задачу двумя способами. Во втором
случае будем использовать свойство аддитивности информации.
Первый способ решения. Задача состоит в
определении длины двоичного слова, однозначно кодирующего все количество полок
с документами. Всего полок:
S = 4×16×8 = 512. Длина
двоичного кода (количество информации) равна
I = log
5122 = 9
бит. Столько бит информации содержит сообщение о месте нахождения нужного
документа.
Второй способ решения. Используем показанное
выше свойство логарифмов (2.3). Раздельно определяем количество информации,
полученной в сообщении о номере комнаты, номере шкафа в этой комнате и номере
полки в этом шкафу. Вычисленные значения суммируем и получаем искомый результат:

                                              I
= log 42 +log 162 +log 82 = + + =2 4       3 9 бит.
В обоих случаях получен одинаковый ответ.
2.3. События равновероятны
Напомним, что вероятность — это числовая
характеристика возможности появления какого-либо случайного события. При
подбрасывании монеты появление орла или решки — события равновероятные.
Вероятность появления каждой из сторон монеты равна 1/2. При подбрасывании
игральной кости вероятность выпадения каждого конкретного числа равна 1/6 (у
кубика 6 граней). Вероятность того, что ваш гость приедет в пятом вагоне
поезда, в составе которого 17 вагонов, равна 1/17 и т. д.
Для пояснения вероятностного подхода к
определению количества информации формулу Хартли запишем в следующем виде:
                                                     I
= log2 N = log (1/2       p) =−log2 p,                                             (2.4)

где I — количество информации в битах, N —
число равновероятных событий, p — вероятность появления события. Поясним
полученную формулу. Так как вероятности появления событий равны, то можно
записать p=1/
N, откуда N=1/
p. Последнее преобразование основано на свойстве логарифмов: log (1/2 p) =−log2
p
(логарифмы чисел больших единицы — положительны,
меньших единицы — отрицательны).
Проверим равенство для простейшего случая
двух равновероятных событий:
I =−log
(1/ 2)2 =−− =(
1) 1 бит
информации. Для рассмотренного в главе 1 примера 1.1 с отгадыванием числа,
вероятность с первой попытки отгадать одно число из восьми равна 1/8.
Подставляя р = 1/8 в формулу, получаем правильный результат: I =−log (1/8)2 =−− =( 3) 3 бита.
Алфавитный подход ограничивал подсчет
количеств информации целыми значениями (см. табл. 2.1). Вероятностный подход
снимает это ограничение и позволяет определять количество информации (I),
которое имеем в случае получения одного из N сообщений при любом целом N. Эти задачи
удобно решать с помощью калькулятора.

Использование калькулятора
Калькулятор имеет кнопки для работы с
натуральными логарифмами (основание е = 2,73) и десятичными логарифмами
(основание 10). Вычисления количества информации требуют работы с двоичными
логарифмами (основание 2). Из элементарной математики известна формула перехода
от натуральных логарифмов к двоичным:
                                                                    log2 p= ln p / ln2.                                                            (2.5)

Воспользуемся этой формулой при решении
задачи из следующего примера.
ПРИМЕР 2.6
Определить количество информации в сообщении
о том, что случился второй из трех возможных равновероятных исходов дела.
Решение
Вероятность каждого из трех исходов равна
1/3. Для решения используем формулу Хартли в следующей записи: I =−log (1/ 3)2 .
При вычислении количества информации
используем формулу (2.6):
ln
(2.6)
                                                                            I
=−  .
ln2
Будем действовать так. Сначала получим
значение натурального логарифма числа <2> (кнопка <ln>) и запишем
его в память (кнопка <MS>). Затем вы- числим частное от деления <1>
на <3> (кнопка </>) и получим значение натурального логарифма
полученного частного (снова кнопка <ln>). Результат получим после деления
логарифма частного (числителя формулы) на число из памяти — знаменатель формулы
(кнопка <MR>). В результате получили ответ: I = 1,585 бит. По такой схеме
можно легко и быстро вычислять точные значения количества информации.
Ответ: I = 1,585 бит.
Последовательность действий с калькулятором
показана в табл. 2.3. Напомним, что приложение Калькулятор запускается командой
Пуск | Программы | Стандартные | Калькулятор. Для вычислений логарифмов
калькулятор следует переключить в меню Вид на вариант Инженерный.
Таблица 2.3. Вычисление количества
информации

Шаг

Кнопка

Результат

1

<2>

2

2

<ln>

0,693147

3

<MS> (в память)

0,693147

4

<1>

1

5

</>

1

6

<3>

3

7

<=>

0,333333

8

<ln>

–1,098612

9

</>

–1,098612

10

<MR> (из памяти)

0,693147

11

<=>

–1,584962

В результате получен с округлением ответ: I
= 1,585 бит.
При решении простых задач (N ≤ 16)
удобно пользоваться табл. 2.4 значений количества информации (I), как функции
вероятности (р) появления события.
Таблица 2.4. I = log2(p)

p

I

p

I

p

I

p

I

p

I

1/2

1,000

2/12

2,585

4/11

1,459

6/14

1,222

9/14

0,637

1/3

1,585

2/13

2,700

4/12

1,585

6/15

1,322

9/15

0,737

1/4

2,000

2/14

2,807

4/13

1,700

6/16

1,415

9/16

0,830

1/5

2,322

2/15

2,907

4/14

1,807

7/8

0,193

10/11

0,138

1/6

2,585

2/16

3,000

4/15

1,907

7/9

0,363

10/12

0,263

1/7

2,807

3/4

0,415

4/16

2,000

7/10

0,515

10/13

0,379

1/8

3,000

3/5

0,737

5/6

0,263

7/11

0,652

10/14

0,485

1/9

3,170

3/6

1,000

5/7

0,485

7/12

0,778

10/15

0,585

1/10

3,322

3/7

1,222

5/8

0,678

7/13

0,893

10/16

0,678

1/11

3,459

3/8

1,415

5/9

1,848

7/14

1,000

11/12

0,126

1/12

3,585

3/9

1,585

5/10

1,000

7/15

1,100

11/13

0,241

1/13

3,700

3/10

1,737

5/11

1,138

7/16

1,193

11/14

0,348

1/14

3,807

3/11

1,874

5/12

1,263

8/9

0,170

11/15

0,447

1/15

3,907

3/12

2,000

5/13

1,379

8/10

0,322

11/16

0,541

1/16

4,000

3/13

2,115

5/14

1,485

8/11

0,459

12/13

0,115

2/3

0,585

3/14

2,222

5/15

1,585

8/12

0,585

12/14

0,222

2/4

1,000

3/15

2,322

5/16

1,678

8/13

0,700

12/15

0,322

2/5

1,322

3/16

2,415

6/7

0,222

8/14

0,807

12/16

0,415

2/6

1,585

4/5

0,322

6/8

0,415

8/15

0,907

13/14

0,107

2/7

1,807

4/6

0,585

6/9

0,585

8/16

1,000

13/15

0,206

2/8

2,000

4/7

0,807

6/10

0,737

9/10

0,152

13/16

0,300

2/9

2,170

4/8

1,000

6/11

0,874

9/11

0,290

14/15

0,100

2/10

2,322

4/9

1,170

6/12

1,000

9/12

0,415

14/16

0,193

2/11

2,459

4/10

1,322

6/13

1,115

9/13

0,531

15/16

0,093

В листинге 2.1 приведен код программы на
VBA, вычисляющей количество информации, как функции вероятности появления
события (см. разд. 8.2).

Sub Вычисление_количества_информации()
  '   a = InputBox("Введите
количество событий всех", , , , 2)   b = InputBox("Введите количество
событий выборки", , , , 3)   p = b / a   c = Log(p) / Log(2)
  Debug.Print "При p = "; Format(p,
"#.###")
  Debug.Print "  Количество информации = ";
Format(-c, "#.###"); " бит" End Sub
ПРИМЕР 2.7
При отгадывании одного задуманного числа из
восьми случайно расположенных чисел натурального ряда воспользуемся той же
методикой, что и в примере 1.1, но делить числа будем на две неравные части. В
процессе отгадывания задаются вопросы, например: "В первой части находится
задуманное число?" На эти вопросы получаем ответы "Да" или
"Нет", которые снимают неопределенность и несут соответствующее количество
информации.
Разделим все восемь чисел на две группы — 5
чисел и 3 числа. Вероятности нахождения задуманного числа в группах различны.
Чем больше чисел в группе, тем больше эта вероятность. Для первой группы она
равна p1 = 5/ 8. Для второй — p2 = 3/8.
Можно ожидать, что и количество информации,
содержащейся в ответе на вопрос "В какой группе находится загаданное
число?", будет различным для первой и второй групп. Можно также
предположить, что чем меньше вероятность нахождения числа в группе, тем большее
количество информации содержится в сообщении, что число находится в этой
группе.
Определим количество информации. Вычисления
можно выполнять с помощью калькулятора или воспользоваться табл. 2.3. Сообщение
о нахождении числа в первой группе содержит I1 =−log 5/ 82 = 0,678 бита. Сообщение о нахождении числа во
второй группе содержит I2 =−log
3/ 82 =1,415 бита. Предположения
подтвердились.
Пусть получен первый ответ — число находится
во второй группе. В этой группе три числа (рис. 2.1). Разделим ее на две группы
— два числа и одно число. Вычислим количество информации, содержащейся в
ожидаемых сообщениях  о нахождении числа в группах: I3 =−log 2
/ 32 = 0,585 бита и
I4 =−log 1/ 32         =1,585
бита.
Если на второй вопрос получен ответ о
нахождении числа во второй группе (в ней одно число), то число отгадано за две
попытки. Для определения общего количества информации, которое было получено
при отгадывании числа, используем свойство аддитивности информации (2.3): I = +
=I2 I4 1,415+1,585 = 3 = 3 бита.

Рис. 2.1. Вариант схемы отгадывания числа при
вероятностном подходе
Если же на второй вопрос получен ответ о
нахождении числа в первой группе (см. рис. 2.1, в ней два числа), то требуется
задавать еще один вопрос и получать ответ, который будет содержать I5 =−log 1/ 22 =1 бит информации. Третий вопрос приводит к
отгадке числа.
Снова, используя свойство
аддитивности, получаем:
              I = + + =I2 I3                    I5                  log (3/ 8)2   + log (2 / 3)2             +
log (1/ 2)2 =1,415+ 0,585+ =1        3 бита.
Это объясняется тем, что события, состоящие
в отгадывании с первой попытки любого из восьми чисел, имеют одинаковую
вероятность, равную 1/8.
ПРИМЕР 2.8
В колоде 36 карт. Из них 12 карт с
"портретами" валетов, дам и королей. Какое количество информации
содержит сообщение о том, что из колоды была взята  с возвратом карта с
портретом ( I1), туз ( I2 ), любая карта от шестерки до
десятки ( I3 ), туз пик ( I4 )?
Решение
Все четыре события имеют разную вероятность
выполнения. Эти вероятности соответственно равны: p1 =12/ 36 =1/ 3, p2 = 4 / 36 =1/
9, p3 = 20 / 36 = 5/ 9 , p4 =1/ 36. Для вычисления
количеств информации используем формулу
                                                              I
= log (1/2     p) =−log2 p.
Вычисления дают следующие
результаты:
I1 =−log 12 / 362           =1,585, I2 =−log 4 / 362     = 3,17 ,
I3 =−log 20 / 362            = 0,848, I4 =−log 1/ 362     = 5,17 .
Последний результат показывает, что для
кодирования всех 36 карт требуется
5,17 бита или шестибитовое двоичное слово (2
325 =
— мало, т. к. 32 < 36, 26 = 64 , 64 > 36 — достаточно).
Ответ: I1 =1,585 бита, I2 = 3,17 бита, I3 =
0,848 бита, I4 =
5,17 бита.
ПРИМЕР 2.9
В примере 2.4 решалась задача с выборкой
фруктов из мешка с возвратом. Решим задачу с выборкой без возврата. Упростим
задачу. Пусть в мешке будет  6 фруктов: 3 яблока, 2 груши и 1 лимон. Количество
информации, получаемое при каждой выборке, возьмем из табл. 2.4. Для
наглядности будем записывать результаты в табл. 2.5.
В первом столбце уменьшающееся с каждой
выборкой количество фруктов в мешке. Во втором столбце — какой фрукт был
случайно выбран из мешка при каждой выборке. Третий столбец — вероятности
результатов выборки. В четвертом столбце — количество информации, получаемое
при каждой случайной выборке.
Таблица 2.5

Осталось
  фруктов

Выборки

Вероятность
  (выбрано / всего)

Количество
  информации, бит

6

Груша

р1 = 2 / 6

I1 = 1,585

5

Лимон

р2 = 1 / 5

I2 = 2,322

4

Яблоко

р3 = 3 / 4

I3 = 0,415

3

Яблоко

р4 = 2 / 3

I4 = 0,585

2

Груша

р5 = 1 / 2

I5 = 1,000

1

Яблоко

р6 = 1 / 1

I6 = 0

ПРИМЕР 2.10 (из архива ЕГЭ)
Зрительный зал имеет 110 мест. Используется
автоматизированная система продажи билетов. Каждый билет кодируется минимально
возможным количеством битов, одинаковым для каждого места. Каков минимально
возможный объем сообщения, содержащего в закодированном виде номера 30-ти
забронированных мест?
Решение
Для решения используем формулу (2.4): I = log2 N . Получить
точное значение количества информации можно c помощью формулы (2.5):
                                           I
=−log2 p =−log (1/2         N)
=−ln(1/110) / ln2 .
В результате вычислений имеем: I = 6,781,
что после округления дает 7 бит. Общее количество информации для 30 билетов
получаем, умножив 7 бит на 30.
Ответ: 210 бит.

2.4. События не равновероятны
Сообщения с различными вероятностями
появления символов — это более реальная картина в системах передачи и хранении
информации. С ней мы встречаемся, например, при передаче и архивации текстов, в
которых частота появления символов различна.
Использование вероятностного подхода
открывает возможности по разработке алгоритмов оптимального кодирования
информации, многократно сжимающих коды хранения и передачи сообщений.

Формула Шеннона
Пусть имеется алфавит, мощность которого
равна N. Обозначим pi
(i = 1, 2, ...,
N) — вероятность появления в системе
передачи информации i-го символа. Сумма этих вероятностей равна 1.
Рассматриваем случай, когда вероятности появления символов могут быть различны.
Для определения среднего информационного веса одного символа заданного алфавита
Шеннон предложил следующую формулу:
                                                    1                       1                               1         N                           1
                                H
p= 1log2 +p2 log2 + +...
pn log2             =∑pi log2      .                (2.7)

                                                   p1                                p2                                            pN          i=1                        pi
Формула устанавливает величину максимальной
пропускной способности канала передачи сообщений. Путем оптимального
кодирования к этому максимуму приблизиться можно, но превзойти нельзя. Этот
максимум называют пределом Шеннона.

ПРИМЕР 2.11
Из формулы Шеннона видно, что величина Н
является функцией вероятностей появления в сообщениях символов заданного
алфавита. Рассмотрим простейший пример влияния на величину Н отношений
вероятностей появления символов  в алфавите, состоящем из двух символов.
Обозначим эти вероятности p1
и p2.
Напомним, что p p1 + =2 1. Программа на VBA
(листинг 2.2) заполняет таблицу значений Н, как функции вероятностей p1 и p2 (рис. 2.3).

Sub
Вычисление_Н()
  '
Вычисление значений функции Н
  Debug.Print "  p1", "  p2", "  p2/p1",
"  H"   For x = 2 To 10     p1 = 1 / x: p2 = 1 — p1
    H =
p1 * Log(1 / p1) / Log(2) + p2 * Log(1 / p2) / Log(2)

Debug.Print "p1 = "; Format(p1, "0.###"), "p2 =
"; _

Format(p2, "0.###"), "p2/p1 = "; Format(p2 / p1,
"##.##"), _

"H = "; Format(H, "0.###")
  Next
End Sub
Из таблицы видно, что в случае равных
вероятностей ( p p1 = =2 0,5)
каждый символ сообщения несет один бит информации и средний информационный вес
символа Н = 1. С ростом отношения p p2 / 1 величина Н порога Шеннона
уменьшается.
Показанное снижение предела Шеннона
теоретически обосновывает возможность разработки и применения вариантов
оптимального кодирования, существенно уменьшающих объем информации при
сохранении ее количества.
2.5. Общие сведения о сжатии информации
Информация, как правило, обладает некоторой
долей избыточности. Клод Шеннон определил, что избыточность английского языка
составляет около 50%. Близкие к этому оценки можно ожидать и для русского
языка. Это означает, что если исключить из текста каждый второй символ, то
текст с большой долей вероятности можно прочитать и восстановить:
А_е_с_н_р_С_р_е_в_ч_П_ш_и_
— в_л_к_й_р_с_к_й_п_э_
Степень избыточности аудио- и
видеоинформации во много раз больше, чем избыточность текстовой информации. Чем
больше степень избыточности информации, тем больше допускается степень ее
сжатия.
Из методов сжатия информации можно выделить
JPEG — метод сжатия статических (например, фотографических) изображений, MPEG —
методы сжатия видеоданных, МР3 — метод сжатия аудиоинформации (звуковых
данных). Многие методы сжатия информации используют рассматриваемый далее
алгоритм Хаффмана.
Алгоритм Хаффмана
Под оптимальным кодированием будем понимать
такое кодирование символов в сообщении, которое приводит к минимально возможной
длине кода этого сообщения. Оптимальному кодированию, как правило,
соответствует минимальное время передачи сообщения и минимальный объем памяти
для его хранения.
При решении задачи оптимального кодирования
применяют кодирование символов кодами различной длины. Чем меньше вероятность
появления символа в сообщениях, тем длиннее его код. И чем чаще появляется
символ в сообщениях, тем короче соответствующий ему код. Это позволяет
существенно сокращать длину кодовой последовательности сообщений.
При таком кодировании возникает проблема
определения при передаче конца кода одного символа и начала кода другого
символа. Проблема решается просто при кодировании символов алфавита префиксными
кодами, у которых код каждого символа не является началом кода другого символа
заданного алфавита.  В этом случае последовательное побитовое считывание
сообщения приводит  к однозначному определению закодированных символов и
полному восстановлению переданного сообщения.
Среди множества алгоритмов, кодирующих
каждый символ отдельно от других символов, наилучшее сжатие дает алгоритм
Хаффмана.
ПРИМЕР 2.12
Пусть задан алфавит из четырех символов (a,
b, c и d) с частотой повторения  в сообщениях соответственно 8, 6, 2 и 1. Для
оптимального кодирования этих символов в двоичном алфавите применяют алгоритм
Хаффмана, работу которого поясним рис. 2.3.
В выделенных кружках записаны заданные
частоты появления в сообщениях четырех символов заданного алфавита. После
записи этих четырех вершин начинают строить граф (дерево), который определит
искомые коды. Сначала рисуется вершина графа, отмеченная суммой двух наименьших
частот символов (3 = 2 + 1). Вершина 3 соединяется дугами с вершинами 1 и 2.
Верхние дуги отмечаются нулем, нижние — единицей. Аналогично строится вершина
9, затем вершина 17. Проводятся и отмечаются дуги. Путь от вершины 17 к каждой
из четырех заданных вершин отмечен кодом, которым кодируется соответствующий
символ. Коды записаны справа от вершин.

Рис. 2.3. Пример кодирования по
Хаффману
При использовании метода Хаффмана процесс
передачи сообщения делится на два этапа. Сначала сообщение просматривается с
целью определения частотных характеристик символов. В соответствии с
результатом анализа выполняется кодирование символов. После этого сообщение
передается по каналу связи. На приемном конце канала связи с помощью дерева
Хаффмана выполняется восстановление закодированных данных.
Например, пусть требуется закодировать в
заданном четырехбуквенном алфавите (a, b, c, d) слово cabca. Для этого, подавая
в вершину 17 дерева Хаффмана  букву за буквой и записывая коды букв, получим
1100101100. При раскодировании действуем в обратном порядке. В вершину 17
подаем кодирующий слово код и записываем буквы слова: cabca.
ПРИМЕР 2.13
Пусть задано следующее сообщение:
"У_пня_опять_пять_опят". Выполним кодирование этого сообщения
префиксными кодами с помощью алгоритма Хаффмана.
Длина сообщения равна L = 21 символ (включая
пробелы). Мощность алфавита равна M = 8 символов (включая пробелы).
Все исходные и вычисляемые данные сведены в
табл. 2.6.
Первый столбец таблицы заняли символы
сообщения.
Во втором столбце записаны данные о числе
вхождений каждого символа в заданное сообщение: пробелов — 4, букв
"п" — 4, "я" — 4, "т" — 3, "о" — 2,
"ь" — 2, "н" — 1, "у" — 1.
В третий и четвертый столбцы таблицы вписаны
соответственно коды, кодирующие символы, и их длина.
В пятом столбце таблицы записаны
вычисленные по формуле p k Li = i / значения вероятности появления
символа в сообщении.
Таблица 2.6. Таблица кодирования к
примеру 2.13

Символ

Число
  вхождений,
Wi

Код символа

Длина кода,
  Di

Вероятность появления, рi
  = Wi/L

1/рi

log2(1/pi)

pi × log2(1/pi)

Пробел

4

00

2

0,19

5,26

2,39

0,45

п

4

01

2

0,19

5,26

2,39

0,45

я

4

100

3

0,19

5,26

2,39

0,45

т

3

101

3

0,14

7,14

2,83

0,4

о

2

1100

4

0,10

10,0

3,32

0,33

ь

2

1101

4

0,10

10,0

3,32

0,33

н

1

1110

4

0,05

20,0

4,32

0,22

у

1

1111

4

0,05

20,0

4,32

0,22

Создание дерева Хаффмана поясним рис. 2.4.
В столбце из восьми кружков записаны частоты
появления символов в заданном сообщении. Это исходные вершины графа. Они
отмечены соответствующими символами. После записи этих вершин начинают строить
граф, который определит искомые коды. Сначала рисуется вершина графа,
отмеченная суммой двух символов с наименьшей частотой (2 = 1 + 1). Вершина 2
соединяется дугами  с вершинами 1 и 1. Верхние дуги отмечаются нулем, нижние —
единицей. Аналогично строятся вершины 4, 7 и 8, затем вершины 6, 13 и 21.
Проводятся и отмечаются дуги. Путь от вершины 21 к каждой из восьми заданных
вершин отмечен кодом, которым кодируется соответствующий символ.
Определим длину передаваемого сообщения. Она
равна сумме произведений количества вхождений символа в сообщение на длину
кодирующего этот символ кода:
8
Lкода =∑(W Di ×
i )=
                                 i=1

                                                =
4× + × + × + × + × + × + × + ×2      4                    2  4             3             3             3              2             4                                                                              2     4  1
4 1 4 = 61 бит.
Результат кодирования заданного сообщения
следующий:
1111 00 01 1110 100 00 1100 01 100 101 1101
00 10 100 101 1101 00 1100 01 100 101.

Рис. 2.4. Пример кодирования по
Хаффману
Для удобства чтения коды отдельных символов
разделены пробелами. Подавая полученный код в вершину 21 дерева Хаффмана
поразрядно, старшим разрядом вперед, полностью восстанавливаем заданное
сообщение.
Определим степень сжатия сообщения по
сравнению с кодировкой его Unicode. Для этого информационный объем сообщения
при кодировке его в Unicode разделим на результат кодирования ( Lкода ):
                                                Kсж
=L×16 / Lкода = 21 16/61×   = 5,5 раз.
В последних трех колонках вписаны
вычисленные данные, позволяющие определить по формуле Шеннона предельный
средний информационный вес одного символа заданного алфавита:
                                                                       n                           1
H=∑pi log2 = 2,85.
                                                                      i=1                         pi
Значение предела Шеннона не превышает трех
бит на символ сообщения. Кодирование восьми символов заданного алфавита при
алфавитном подходе требует трех бит на символ. Но при добавлении в алфавит хотя
бы одного, девятого символа при алфавитном подходе потребуется уже четыре бита
на символ.
Определим средний информационный вес одного
символа, полученный при использовании алгоритма Хаффмана. Для этого разделим
полученную длину кода ( Lкода ) на число символов в заданном
сообщении (L):
S L=
кода / L= 61/21= 2,9.
Полученное значение среднего информационного
веса одного символа близко к предельному, что подтверждает эффективность
алгоритма Хаффмана.

ПРИМЕР 2.14
Рассмотрим другой вариант построения дерева
Хаффмана, поясняющий процесс кодирования. Исходные данные возьмем из примера
2.13.
После подсчета частоты вхождения символов в
сообщение имеем набор символов:
[пробел
(4), п (4), я (4), т (3), о (2), ь (2), н (1), у (1)]
Делим набор на две группы. Первой группе
присваиваем код 0, второй — код 1.
                        [пробел
(4), п (4)],                                [я (4), т (3), о (2), ь (2), н (1),
у (1)]
                                          0
                                                                                1

Каждую группу делим на две подгруппы,
которым присваиваем коды 0 и 1, приписывая их справа к кодам, полученным при
первом делении.
[пробел (4)],                     [п
(4)],                   [я (4), т (3)],            [о (2), ь (2), н (1), у (1)]

              00
                                01                                 10                                          11

Продолжаем делить группы на подгруппы до тех
пор, пока во всех подгруппах не останется по одному символу.
[пробел (4)],          [п (4)],          [я
(4)],            [т (3)],          [о (2), ь (2)],       [н (1), у (1)]
            00                       01
                100                 101                     110                        111

 [пробел (4)],       [п (4)],      [я (4)],       [т
(3)],        [о (2),      [ь (2)],      [н (1)],     [у (1)]
            00                     01
            100             101            1100         1101         1110        1111

Рассмотренный пример сообщения допускает
многие другие варианты кодирования. Например, символ "пробел (4)"
можно было сгруппировать не с символом "п (4)", а с символом "я
(4)" и т. п.
В результате кодирования получен уже
известный нам код сообщения длиной в 61 бит:
1111 00 011110 100 00 1100 01 100 101 1101
00 10 100 101 1101 00 1100 01 100 101.
У  —  п  н  я  —  о   п   я  т   ь   —  п  я   т   ь   —
о   п   я   т

Формула Шеннона и формула Хартли
Формула Шеннона согласуется с формулой
Хартли. Так, если принять равную вероятность появления символов в сообщениях,
то pi =1/ n, откуда 1/ p ni = и после подстановки в
формулу получаем формулу Хартли:
                                                  1                  1                          1
H= log2 n+ log2 n+ +...      log2 n= log2 n. n              n             n
Зная вероятности использования в сообщениях
символов алфавита, можно определять количество информации в получаемом
сообщении. При этом результат будет более точным, чем при алфавитном подходе.
Алгоритмы Зива, Лемпеля, Велча (ZLW)
Эти алгоритмы явились дальнейшим развитием
эффективных методов сжатия текстовой информации. Если алгоритм Хаффмана
кодирует отдельные символы алфавита текста, то в алгоритмах ZLW просматриваются
и кодируются повторяющиеся слоги, слова и т. д. При этом сжатие происходит тем
лучше, чем больше размер входного массива. В настоящее время алгоритмы ZLW
считаются одними из наиболее эффективных и перспективных.
ПРИМЕР 2.15
Пусть требуется определить, сколько битов
информации несет каждое из слов ОКНО и ШЛЮЗ при различных вариантах подсчета
количества информации. Обозначим количество информации, которое несут слова
ОКНО и ШЛЮЗ, соответственно, I1 и I2 .
Unicode — каждый символ кодируется двумя
байтами (16 бит). Всего информационная емкость каждого слова равна 2×4 =
8 байт (64 бита). В результате получили I1 = =I2 64 бита.

ASCII — каждый символ кодируется одним
байтом (8 бит). Всего имеем для  каждого слова: I1 = =I2 4
(32 бита).
Алфавитный подход — не учитывает содержание
сообщений и оценивает количество информации в нем по потребному для кодирования
сообщения количеству битов. Алфавит, который использовался при кодировании
сообщения, содержит 32 символа (пробел не учитываем, е и ё считаем за один
символ). В этом случае каждый символ алфавита может быть однозначно представлен
пятибитовым двоичным словом (2 325 = ). Всего символов в сообщении 4. Поэтому в
итоге имеем, что каждое из слов содержит при алфавитном подходе 5×4 = 20
бит
информации.
Вероятностный подход — при различных
вероятностях появления символов в сообщении подсчет количества информации
требует знания этих вероятностей. В табл. 2.7 приведены частотные
характеристики букв русского алфавита. При анализе не учитывались знаки
препинаний и пробелы. Заметим, что от текста  к тексту частотные характеристики
могут меняться. Влияет так же и объем анализируемого текста.
Таблица 2.7. Частотные характеристики
букв

о — 0,090

м — 0,032

й — 0,010

е, е — 0,079

д — 0,025

х — 0,009

а, и — 0,068

п — 0,023

ж — 0,007

т, н — 0,064

у — 0,021

ю, ш — 0,006

с — 0,052

я — 0,019

ц — 0,004

р — 0,050

з, ы — 0,017

щ, э — 0,003

в — 0,039

б, ь, ъ. — 0,014

ф — 0,002

л — 0,037

г — 0,013

к — 0,036

ч — 0,012

Для подсчета количества информации в словах
ОКНО и ШЛЮЗ используем известные формулы и при расчетах прибегаем к помощи
калькулятора.
I1 = + + + = −Iо Iк         Iн                                                                                Iо                     ( log2 pо) +
−( log2 pк) +
−( log2 pн) +
−( log2 pо) =

= 3,473 + 4,796 + 3,966 +3,473 = 15,708 бита.

I2 = + + + = −Iш   Iл         Iю                                                                                Iз                 ( log2 pш) + −( log2 pл)
+ −( log2 pю)+ −( log2 pз) =
= 7,380 + 4,756 + 7,380 + 5,878 = 25,394
бита.
При использовании символов с различной
вероятностью их появления в сообщениях снова встречаемся с известной
закономерностью — чем меньше вероятность появления символа, тем больше битов
информации он вносит в сообщение и наоборот. Так появление в сообщении наиболее
часто встречающейся буквы "о" вносит в сообщение только 3,474 бита, в
то время как появление буквы "ш" вносит в два раза больше — 7,380
бит.
Выполните анализ полученных при решении
примера результатов.
2.6. Определение частотных характеристик
Рассмотренные примеры на алгоритм Хаффмана
несколько отличаются от реальной картины кодирования и передачи сообщений.
Определять частотные характеристики алфавита каждого сообщения, кодировать
сообщение по Хаффману, передавать на приемный конец сообщение и декодирующее
дерево может быть невыгодно ввиду затрат времени.
Для кодирования обычных текстовых сообщений
требуются ориентировочно символы: 33 (кириллица), 26 (латиница), 10 (цифры), 10
(знаки препинания) и 20 (специальные символы). Всего получается около 100
символов. Частотные характеристики символов можно вычислять заранее и иметь
дерево кодирования на передающем и приемном концах канала связи.
С текстами удобно работать в редакторе MS
Word. Вычисление частотных характеристик при этом можно поручить макросу
(листинг 2.3). Поручим макросу не только определять частотные характеристики
кириллицы, но и сортировать символы в порядке убывания их частоты появления в
сообщениях.
Макрос можно записать в отдельный модуль,
открыв его командами (работаем  в MS Word): Сервис
| Макрос | Редактор Visual Basic | Insert | Module. После записи в
модуль кода следует проверить, что его имя появилось в списке макросов,
открываемом командами Сервис
| Макрос | Макросы.
Перед запуском макроса надо выделить (сверху
вниз) подготовленный для анализа текст, открыть окно Макросы командой Сервис
| Макрос | Макросы, выделить макрос ЧастотныйСловарьКириллицы
и запустить его кнопкой Выполнить.

Листинг 2.3. Код макроса определения
частотных характеристик алфавита
Sub ЧастотныйСловарьКириллицы()
  '
  Dim x(1 To 34) As Integer, y(1 To
34) As Integer   Dim q As Double   a = Selection.Text   For i = 1 To Len(a)
b = Mid(a, i, 1)     b = LCase(b)     c = Asc(b)
    If c > = 224 And c < = 255
Then  ' кириллица       x(c — 223) = x(c — 223) + 1     ElseIf c = 184
Then          ' ё       x(33) = x(33) + 1
    ElseIf c = 32 Then           '
пробел       x(34) = x(34) + 1
    End If
  Next
  For i = 1 To 34     sum = sum + x(i)

  Next
  For i = 1 To 32     y(i) = i + 223
Next
  y(33) = 184: y(34) = 32
  For i = 1 To 33      ' сортировка символов по
убыванию частоты
    For j = i + 1 To 34       If x(i)
< x(j) Then         d = x(i): x(i) = x(j): x(j) = d         d = y(i): y(i) =
y(j): y(j) = d
      End If
  Next j, i
  Selection.TypeText Text: = a
  For i = 1 To 34
    Selection.TypeParagraph     p =
Chr(y(i))
    q = (Int((100 * x(i) / sum) * 100)) / 100
    Selection.TypeText Text: = x(i) & "
" & p & "   " & q
  Next
  Selection.TypeParagraph
  Selection.TypeParagraph
  Selection.TypeText Text: = sum
End Sub
Далее приведены первые и последние строки
результата работы макроса по определению частотных характеристик алфавита
кириллицы. Анализировалась одна страница текста.
В первой строке распечатаны количество
пробелов (317) и процент в тексте пробелов (10,1). Во второй и последующих
строках — аналогичные данные 33 букв кириллицы. В последней строке выведено
количество букв заданного текста (2526).
317    10,1
248  о  9,81 217  и  8,59
...............
7  щ  0,27
1  ъ  0,03
0   ё  0

2526
Можно отметить, что для небольших текстовых
массивов частотные характеристики могут заметно различаться.
Решим еще один демонстрационный пример и
предложим задания для самостоятельной работы по применению алгоритма Хаффмана.
ПРИМЕР 2.16
Сообщение "КОЛОКОЛЬЧИК"
закодировать префиксными кодами, используя алгоритм Хаффмана.
Решение

В заданном сообщении L = 11 символов. Из них
число различных символов М = 6.
Построим дерево кодирования Хаффмана (рис.
2.5). Принцип построения рассмотрен в примерах 2.12 и 2.13.

Рис. 2.5. Дерево кодирования к примеру
2.16
Заполним табл. 2.8:
1.
Порядковые номера символов в алфавите сообщения.
2.
Столбец символов.
3.
Число вхождений каждого символа (Wi ).
4.
Код символа.
5.
Длина кода символа ( Di ).
6.
Величина W Di × i .
7.
Вероятность появления символа в сообщении ( p W Li = i /               ).
8.
Число бит на символ ( Ii = log
(1/2       pi )).

9.
Значение Hi =pi ×log (1/2           pi ) .
После заполнения таблицы определим длину
полученного кода в битах ( D=∑(W
Di × i ) ), коэффициент сжатия сообщения по
сравнению с Unicode.
Вычислим предельный информационный вес
одного символа заданного алфавита (предел Шеннона — H=∑Hi ) и сравним с ним значение
среднего информационного веса одного символа заданного алфавита (S).
Таблица 2.8. Расчеты для примера 2.16

№

Сим- вол

Число вхожде- ний, Wi

Код сим- вола

Длина кода,
Di

Wi
  × Di

Вероятность, рi = Wi/L

log2(1/pi)

Hi =  = pi × log2(1/pi)

1

О

3

00

2

6

0,273

1,87

0,51

2

К

3

01

2

6

0,273

1,87

0,51

3

Л

2

10

2

4

0,182

2,46

0,45

4

Ь

1

110

3

3

0,090

3,47

0,31

5

Ч

1

1110

4

4

0,090

3,47

0,31

6

И

1

1111

5

4

0,090

3,47

0,31

Запишем полученный код сообщения:
010010000100101101110111101. Его длина Lкода =∑(W Di ×
i ) = 27 символов.
Определим коэффициент сжатия полученного
кода по сравнению с кодированием исходного сообщения в Unicode: Kсж = (11
16)/27× = 6,5
раз.
Вычислим, сколько символов в полученном коде
приходится на одну букву исходного сообщения: S L= кода / L= 27 /11= 2,45.
Вычислим предельный средний информационный
вес одного символа (предел Шеннона): H=∑(pi
×log (1/2
pi )) =
2,4. Сравним значения
Н и S. Близкие значения S = 2,45 и Н = 2,4 вновь показывают на эффективность
алгоритма Хаффмана.

2.7. Задания  для самостоятельной
работы
ЗАДАНИЕ 2.1
По схеме решения примера 2.16, используя
алгоритм Хаффмана, закодировать префиксными кодами сообщения:
ВОДОВОРОТ, ПЕРЕПЕЛКА, ПЕРЕПОЛОХ,
ГОЛОВОЛОМКА,
КАРРИКАТУРА, ТАРАТАЙКА, НА КОЛОКОЛЬНЕ
КОЛОКОЛА,
КАРЛ У КЛАРЫ УКРАЛ КОРАЛЛЫ, КЛАРА У КАРЛА
УКРАЛА КЛАРНЕТ.
2.8. Примеры и задачи из архива ЕГЭ
ЕГЭ предлагает для решения три варианта
заданий на префиксные коды.

ПРИМЕР 2.17 (из архива ЕГЭ)
Для 5 букв латинского алфавита заданы их
двоичные коды (для некоторых букв — из двух бит, для других — из трех). Эти
коды представлены в таблице:

a

b

c

d

e

000

110

01

001

10

Определите, какой набор букв закодирован
двоичной строкой 1100000100110:
1) baade;  2) badde;  3) bacde;  4) bacdb.
Решение
В задаче задано кодирование символов
префиксным кодом (по алгоритму Хаффмана). Заданная двоичная строка
расшифровывается однозначно. Приступать к декодированию следует с начала
строки, сравнивая заданные двоичные коды букв со значениями битов двоичной строки.
110 • 000 • 01 • 001 • 10 — bacde
Ответ: 3) bacde.

ЗАДАНИЕ 2.2 (из архива ЕГЭ)
Для 5 букв русского алфавита заданы их
двоичные коды (для некоторых букв — из двух бит, для некоторых — из трех). Эти
коды представлены в таблице:

В

К

А

Р

Д

000

11

01

001

10

Из четырех полученных сообщений в этой
кодировке только одно прошло без ошибки и может быть корректно декодировано.
Найдите его:
1)
110100000100110011;
2)
111010000010010011;
3)
110100001001100111; 4) 110110000100110010.
ЗАДАНИЕ 2.3 (из архива ЕГЭ)
Для 5 букв латинского алфавита заданы их
двоичные коды (для некоторых букв — из двух бит, для других — из трех). Эти
коды представлены в таблице:

a

b

c

d

e

000

01

100

10

011

Определите, какой набор букв закодирован
двоичной строкой 0110100011000:
1) ebcea;  2) bddea;  3) bdcea;  4) ebaea.
Найдите решение.

ЗАДАНИЕ 2.4 (из архива ЕГЭ)
В ящике находятся 32 теннисных мяча, среди
которых есть мяч желтого цвета. Наудачу вынимается один мяч. Сообщение
"извлечен мяч НЕ желтого цвета" несет 4 бита информации. Сколько в
ящике мячей желтого цвета?

ГЛАВА 3

Системы счисления

3.1. Общие сведения о системах счисления
Вся информация в компьютере кодируется числами.
Кодируются данные вычислительных задач и буквы алфавитов, рисунки и музыка,
кодируются управляющие сигналы и вся другая информация, с которой работает
компьютер. Числа кодируются двоичными кодами, использующими символы 1 и 0.
Такой способ представления чисел называют двоичной системой счисления.
Системой счисления называют совокупность приемов
построения, записи и наименования чисел.
История развития способов счета насчитывает
тысячелетия. Менялись и средства счета: пальцы, камешки, узелки, счеты,
арифмометры, компьютеры. Естественно было желание ученых и инженеров
проектировать вычислительные устройства, работающие в привычной для нас
десятичной системе. Так и происходило, пока эти устройства были механическими.
Первые электронные вычислительные машины на реле уже
строились на основе двоично-десятичной системы, в которой каждая десятичная
цифра кодировалась в двоичной системе.
В настоящее время компьютеры работают с информацией,
представленной, как правило, в двоичной системе, имеющей перед другими
системами большие преимущества, которые заключаются в следующем.
При хранении и передаче информации каждую цифру
необходимо представлять некоторой физической величиной — например, амплитудой
напряжения, тока, направлением намагниченности магнитного материала и т. п. В
условиях помех, чем больше число градаций этих физических величин (для
десятичной системы их десять), тем больше вероятность перехода от одной
градации к другой и появления ошибок. Возможность появления таких ошибок
минимальна при использовании двоичной системы.
Вторым важным преимуществом двоичной системы является
сравнительная простота технологической реализации электронных схем, выполняющих
операции над числами (транзистор открыт или закрыт, участок поверхности
магнитного диска намагничен или размагничен).
К недостаткам двоичной системы следует отнести
необходимость переводов при вводе данных в компьютер и выводе результатов. К
тому же двоичная система неэкономична по записи чисел.
Кроме двоичной системы при работе с компьютером
используется десятичная система, а также близкие к двоичной системе по простоте
перевода восьмеричная и шестнадцатеричная системы. В следующей главе
рассматриваются системы счисления, которые также использовались для построения
компьютеров: троичная система, двоично-десятичная система и система остаточных
классов.
3.2. Десятичная система
Наиболее известна широко применяемая на практике
десятичная система. Это позиционная система счисления. Количество, определяемое
цифрой числа, зависит от позиции этой цифры в записи числа. Например, в записи
числа A10 = 333 одна и та же цифра 3 определяет различные
количества: триста, тридцать и три.
К непозиционным системам относят римскую систему
счисления. Например,  в числе ХХII количество, определяемое цифрами X и I, не
зависит от их положения (позиции) в записи числа.
Десятичная система имеет 10 цифр (0, 1, 2, ..., 9), что
и определило название системы и ее важнейшую характеристику — основание
системы. Обозначим ее буквой p . Для десятичной системы p=10 .
Формула разложения числа  по степеням
основания
Пусть в десятичной системе задано некоторое число A10
= 247,35 . Каждая позиция, занимаемая цифрами, называется разрядом числа.
Разряды имеют названия и номера: разряд единиц, разряд десятков, разряд
десятых, разряд сотых и т. д. Названия разрядов определяют их вес: единицы,
десятки, десятые, сотые, тысячные и т. п.
Заданное число, не изменяя его количества, можно
записать следующими способами:
A10 = 247,35 ;
A10 = 200+ + +40 7      3/10
+ 5/100;
A10 = 2 100⋅  + 4 10⋅ + 7 + 3 1⋅ /10+
5 1/100⋅ ;
A10 = 2 10⋅  2 + 4 10⋅ 1 + 7 10⋅ 0 +3 10⋅  −1 + 5 10 .⋅    −2
Последнюю запись называют разложением числа по степеням
основания.
Запишем десятичное число, имеющее по три разряда в
целой и дробной частях, и формулу его разложения в общем виде:
A10 = a
aa a a a2 1 0, − − −1 2 3 =
                                              2                        1                         0                           −1                            −2                            −3
                                   =
a ⋅10 + a1 ⋅10
+ a0 ⋅10 + a−1 ⋅10         + a−2 ⋅10      + a−3 ⋅10 .
2
Для числа в позиционной системе с основанием p , имеющего n разрядов
в целой и m разрядов в дробной части, несколько упрощенная формула записывается
так:
A a ap = n−1
n−2...a aa a a a a2
1 0, − −
−1 2 3... − +
−m 1a m =
                                            =
an−1 ⋅ pn−1 + an−2 ⋅ pn−2 +...+ a p a p a2 ⋅ 2 + 1 ⋅ + 0 +
−1 −2 − +m 1 −m
+a p−1 + a p−2 +...+ a− +m 1p + a p−m .
В этой записи каждая степень основания pi определяет
вес своего (i-го) разряда.
Влево и вправо от запятой он соответственно
увеличивается и уменьшается  в число раз, равное основанию системы p . Произведение цифры
разряда числа на вес своего разряда определяет количественный эквивалент цифры a pi ⋅ i. Как видно из формулы,
сумма всех количественных эквивалентов числа определяет его величину.
3.3. Системы счисления в компьютерах
Ввод информации в компьютер с клавиатуры и вывод из
него результатов вычислений на экран дисплея и принтер производится, как
правило, в привычной для нас десятичной системе. Хранение и преобразование
информации современные компьютеры выполняют в двоичной системе ( p=2). В качестве
вспомогательных используются восьмеричная ( p=8 ) и шестнадцатеричная ( p=16 ) системы.
Двоичная система счисления
Основание двоичной системы p=2 определяет и число цифр: 0 и 1. Формула
разложения целого четырехразрядного числа для двоичной системы следующая:
A aa aa=       = 2                3 2 1 0
                                          3                      2                     1                      0
=
a ⋅2 + a ⋅2 + a ⋅2 + a ⋅2 = a ⋅8+ a ⋅4 + a
⋅2 + a ⋅1.
                                   3                      2                      1                     0                       3                  2                  1                   0
При первом знакомстве с двоичной, восьмеричной и
шестнадцатеричной системами хорошо помогает табл. 3.1 соответствия записей
числа в различных системах.
Таблица 3.1. Запись чисел в различных системах счисления

р = 10

р = 2

р = 8

р = 16

0

0

0

0

1

1

1

1

2

10

2

2

3

11

3

3

4

100

4

4

5

101

5

5

6

110

6

6

7

111

7

7

8

1000

10

8

9

1001

11

9

10

1010

12

A

11

1011

13

B

12

1100

14

C

13

1101

15

D

14

1110

16

E

15

1111

17

F

16

10000

20

10

Восьмеричная и шестнадцатеричная системы
Основание восьмеричной системы p=8 . Цифры: 0, 1, 2, 3,
4, 5, 6 и 7. Основание шестнадцатеричной системы p=16 . Цифры: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B,
C, D, E, F.
Формулы разложения целых четырехразрядных чисел в этих
системах следующие:
A8 = a3 ⋅83 + a2 ⋅82 + a1 ⋅81 + a0 ⋅80 = a3 ⋅512+ a2 ⋅64+ a1 ⋅ +8 a0 ⋅1, A16 = a3 ⋅163 + a2 ⋅162 + a1 ⋅161 + a0 ⋅160 = a3 ⋅4096+ a2 ⋅256+ a1 ⋅16+ a0 ⋅1.
3.4. Перевод чисел  из одной системы в
другую
Перевод
с использованием формулы разложения
В основе способа лежит использование значений веса
разрядов чисел. При переводе чисел полезно пользоваться значениями весов
разрядов (табл. 3.2).
Таблица 3.2. Веса разрядов чисел

n

4
n

3
n

2
n

1
n

0
n

–1
n

–2
n

–3
n

–4
n

p = 10

10000

1000

100

10

1

1/10

1/100

1/1000

1/10000

p = 2

16

8

4

2

1

1/2

1/4

1/8

1/16

p = 8

4096

512

64

8

1

1/8

1/64

1/512

1/4096

p = 16

65536

4096

256

16

1

126

1/256

1/4096

1/65536

Действия при переводе выполняются в новой системе,
поэтому способ удобно использовать для перевода чисел в десятичную систему. В
дальнейшем будем применять его при проверках правильности перевода чисел
другими способами. Начнем с простых примеров перевода целых чисел.
ПРИМЕР 3.1
Дано: A2 =1101.
Решение

Записываем формулу разложения двоичного числа:
A2 = a a aa3 2 1 0 = a3 ⋅8+ a2 ⋅4+ a1 ⋅2+ a0 ⋅1.
Подставляем в формулу значения разрядов заданного
двоичного числа и выполняем действия:
                                                               A10
=1 8 1 4 0 2 11 13⋅       + ⋅       +             ⋅              +
⋅ =       .
Заглянув в табл. 3.1, убедимся, что получен правильный
результат. Двоичному числу 11012 соответствует десятичное число 1310
.
Ответ: A10 =13.

Заметим,      что
    решение    примера     3.1     можно     было      записать     проще:
A10 = + + =8 4 1 13.
Действительно, при переводе достаточно суммировать только вес разрядов числа,
где стоят единицы. Поэтому сколько единиц в двоичной  записи числа — столько
слагаемых. Будем использовать это при решении других примеров.

ПРИМЕР 3.2
Дано: A2 =100111. Найти: A10 .
Решение

Запишем формулу разложения двоичного числа:
A aa aa aa a2 = 5 4 3 2 1 0 = 5 ⋅32+ a4 ⋅16+ a3 ⋅8+
a2 ⋅4+ a1 ⋅2+ a0 ⋅1.
Запишем сумму степеней основания разрядов, в которых
стоят единицы, и выполним действия:
A10 = + + + =32 4 2 1 39.
Ответ: A10 = 39.
При переводе чисел в десятичную систему из
восьмеричной и шестнадцатеричной систем приходится суммировать не веса
разрядов, а произведения веса разрядов на цифры числа в этих разрядах.

ПРИМЕР 3.3
Дано: B8 =135 . Найти: B10 .
Решение

Формула разложения числа в восьмеричной системе
следующая:
B8 = bbb2 1 0 = b2 ⋅64+ b1 ⋅8+ b0 .

Подставляем в формулу значения разрядов заданного
восьмеричного числа:
                                                                   B10
=1 64 3 8 5 93⋅      +               ⋅              +             =             .

Ответ: B10 = 93.

ПРИМЕР 3.4
Дано: C16 = 2A. Найти: C10.
Решение

Формула разложения числа в шестнадцатеричной системе:
C16 = cc1 0 = c1 ⋅16+ c0 .

Подставляем значения разрядов заданного числа:
                                                                     C10 = 2 16 10 42⋅    +   =             .

Ответ: C10 =42.

Задания для
самостоятельной работы (часть Ι)
Перевести числа, используя формулу разложения:
1.
Дано: A2 =10101.
Найти: A10 .
2.
Дано: B2 =11111.
Найти: B10 .
3.
Дано: C2 =100000.
Найти: C10.
4.
Дано: D2 =1110111.
Найти: D10 .
5.
Дано: E8 =135.
Найти: E10.
6.
Дано: F8 =
77 . Найти: F10.
7.
Дано: G8 =206
. Найти: G10 .
8.
Дано: H8 =345.
Найти: H10.
9.
Дано: K16 =2F . Найти: K10.
10.
Дано: L C16 = 5. Найти: L10.
11.
Дано: M16 =10D . Найти: M10 .
12.
Дано: N16 =2 0A . Найти: N10 .
13.
Дано: P3 =1202.
Найти: P10.
14.
Дано: Q4 =
2031. Найти: Q10.
15.
Дано: R5 =1403.
Найти: R10 .
16.
Дано: S7 =1052.
Найти: S10.
ПРИМЕР 3.5
Дано: A2 =10111,1101. Найти: A10 .
Решение
Запишем формулу разложения двоичного числа:
                                                                                1              1              1               1
                   A
a2 = 4 ⋅16+ a3 ⋅8+ a2 ⋅4+ a1 ⋅2+ a0 + a−1 ⋅     + a−2 ⋅  + a−3 ⋅  + а−4 ⋅ .
                                                                                2              4              8              16
Подставляем в формулу значения двоичных разрядов и
выполняем действия:
                                                                                1          1          1          1
                               A
=1 16⋅  +0 8⋅ + ⋅1 4 +1 2⋅ + +1 1⋅     +1⋅      +0⋅      +1⋅       =
10
                                                                                2          4          8         16

13
Ответ: A10 =23
 .

16

ПРИМЕР 3.6
Дано: B8 = 217,42. Найти: B10 .
Решение
Формула разложения числа в восьмеричной системе
следующая:
B b8 = 2 ⋅82 +b1 ⋅8+b b0 + −1 ⋅8−1 + b−2 ⋅8 .−2

Подставляем в формулу значения разрядов заданного
восьмеричного числа:
                                      B 2
64          1 8          7             4             2              143         .

                                                                                8          64             64
34 Ответ: В10 =143      .
64

ПРИМЕР 3.7
Дано: C16 = 2B E,3      . Найти: C10.

Решение
Формула разложения числа в шестнадцатеричной системе:
                                      С сс
с с,              с 16 с с с              .
Подставляем значения разрядов заданного числа:
                                       С 2
16            11           3             14           43           .
62
Ответ: С10 = 43     .
256
При переводе чисел с использованием формулы разложения
числа все действия выполняются в новой системе. В компьютерах этот метод
находит применение при переводе чисел из десятичной системы в
"привычную" для компьютера двоичную систему.
Перевод целых чисел
делением на основание новой системы
Алгоритм перевода чисел заключается в следующем.
Сначала исходное число, затем получающиеся частные делим на основание новой
системы. Действия выполняем в старой системе. Записываем последнее частное и
остатки в порядке, обратном получению. Полученное число является записью
заданного числа в новой системе.
ПРИМЕР 3.8
Дано: A10 = 35. Найти: A2.
Решение

ПРИМЕР 3.9
Покажем другой способ записи при переводе целых чисел
способом деления на основание новой системы.
Дано: A10 = 23. Найти: A2.
Решение
            23                                   11                                  5                                   2
 =11, остаток 1; =5 , остаток 1; =2 , остаток 1; =1, остаток 0.
             2                                      2                                   2                                   2
Ответ: A2 =10111.
Проверку правильности полученного результата удобно
выполнить, используя формулу разложения числа по степеням основания. Так как
действия выполняются в старой системе, рассматриваемое правило удобно
использовать при переводе чисел из десятичной системы.
ПРИМЕР 3.10
Дано: A10 = 92. Найти: A8 .
Решение
                                                92                                   11
 =11, остаток 4; =1, остаток 3.
                                                  8                                      8
Ответ: A8 =134 .

ПРИМЕР 3.11
Дано: A10 = 78. Найти: A16 .
Решение
78
 = 4 , остаток 14.
16
Ответ: A16 = 4E .

Перевод правильных дробей  умножением на основание
Алгоритм перевода следующий.
Последовательно умножаем сначала исходное число, затем дробные части получаемых
произведений на основание новой системы. При этом в целую часть будут выходить
цифры записи числа в новой системе. Действия выполняются в старой системе.

ПРИМЕР 3.12
Дано: A10 = 0,375. Найти: A2.
Решение
0,375

Ответ: A2 = 0,011.
В примере 3.12 в целые части произведений вышли цифры
011. Можно предположить, что результат равен A2 = 0,011. Проверим
полученный результат обратным переводом:
0,0112 = + = = 0,375 .10
В рассмотренном примере перевод заканчивается на
третьем шаге, т. к. дробная часть становится равной нулю. Это бывает далеко не
всегда.
Поставим вопросы. Когда нужно заканчивать умножение на
основание новой системы? Сколько нужно получать значащих разрядов результата
перевода?
Можно принять естественное правило: точность записи
числа в новой системе должна быть не ниже точности числа в старой системе.
Например, если задано число C10 = 0,6 , т. е. с точностью до 1/10, то запись
этого числа в двоичной системе должна иметь четыре разряда дробной части. Это
обеспечит точность до 1/16 (три разряда мало, т. к. третий разряд имеет вес 1/8
< 1/10). Если же исходное десятичное число задано, например, с точностью до
1/100, то принятое правило требует получения в двоичной системе семи разрядов
после запятой (2−7 =1/128), в восьмеричной системе — трех разрядов
(8−3 =1/
512), в шестнадцатеричной системе — двух разрядов (16−2 =1/ 256 ). При
вычислениях следует использовать правила округления результатов. Другим
ограничением может служить заранее заданное количество разрядов для записи
числа в новой сис-
теме.
ПРИМЕР 3.13
При решении примера рассмотрим другой способ записи
действий при переводе числа.
Дано: B10 = 0,67 . Найти: B2.
Решение

0,67
×
  2
1,34

1,34
× 2

0,68

0,68
× 2

1,36

1,36
× 2

0,72

0,72
× 2

1,44

1,44
× 2

0,88

1,88
× 2

1,76

1,76
× 2

1,52

B = 0,10101011.
2
Ответ: B2 = 0,10101011.
В примере 3.13, записав последовательно целые части
произведений (они подчеркнуты), получаем следующий результат: B2 = 0,10101011. Вычислено
восемь двоичных разрядов. Так как исходное число задано с точностью 1/100, а
2−8 =1/ 256, то получен один лишний разряд, который
используем для округления результата.
Выполним проверку. Переведем полученный результат в
десятичную систему:
                                                       1     1       1        1       43
В10 =
+ + + = = 0,672 ≈ 0,67. 2
8 32 64 64
Лишние 0,002 получены в результате округления в большую
сторону.
В заключение рассмотрим схему перевода
правильной дроби. Будем использовать рассмотренное ранее правило умножения
дробных частей получающихся произведений на основание новой системы. Получающиеся
в каждом шаге цифры записи числа в двоичной системе в примере 3.14 подчеркнуты.

ПРИМЕР 3.14
9
Дано: С10 =  . Найти: C2 .
11
Решение

Ответ: C2 = 0,1101.
Выписав подчеркнутые цифры, получаем результат C2 = 0,1101 с недостатком.
Это число С10 =13/16. Перевод исходного числа (9/11) и
результата (13/16) в десятичную дробь дает результаты: 0,818 и 0,813.
Смешанная дробь переводится в новую систему
счисления по частям: целая часть — методом деления, дробная часть — методом
умножения на основание новой системы.

Поразрядные способы перевода
Перевод чисел существенно упрощается, если основания
старой (р) и новой (q) систем связаны соотношением p q= k или p qk = , где k — целое число. Это, например,
системы восьмеричная и двоичная (k = 3), шестнадцатеричная и двоичная (k = 4),
девятеричная и троичная (k = 3) и т. д.
Рассмотрим на примерах переводы чисел из восьмеричной и
шестнадцатеричной систем в двоичную и обратно.
ПРИМЕР 3.15
Дано: A8 =132,52. Найти: A2.
Решение
Для получения результата нужно каждую восьмеричную
цифру заданного числа записать тремя двоичными разрядами — триадой (k = 3):
A8 = 1   3   2  ,   5   2;
A2 = 001 011 010 , 101 010;

Ответ: A2 =1011010,10101.
ПРИМЕР 3.16
Дано: B16 = 20E B,     8. Найти: B2.

Решение
В этом примере каждая шестнадцатеричная цифра
записывается четырьмя двоичными разрядами — тетрадой (k = 4):
B16 = 2     0     E,    B
8;
B2 = 0001
0000  1110 , 1011 1000; Ответ: B2 =100001110,10111.
ПРИМЕР 3.17
Дано: C2 =11001111,00011. Найти: C8, C16.

Решение
Для перевода нужно разбить заданное двоичное число
влево и вправо от запятой на триады (тетрады), при необходимости дополняя их
нулями. Затем каждую триаду (тетраду) записать цифрами восьмеричной
(шестнадцатеричной) сис- темы:

C =11001111, 00011;
2
C = 011  001  111,  000  110;
2
C = 3    1    7,    0    6;
8
Ответ: C8 = 317,06.

C =11001111,00011;
2
C =
  1100  1111,  0001  1000;
2
C =  B    F,     1      8;
16
Ответ: C
  BF16 = ,18.

Поразрядные способы перевода чисел можно использовать
для сокращения действий при переводе числа, например, из десятичной системы в
двоичную. Для этого целое число делением (дробное — умножением) сначала
переводят в восьмеричную систему, а затем из восьмеричной системы поразрядно в
двоичную систему.
Если в качестве промежуточной системы использовать
двоичную, то существенно упрощается перевод из восьмеричной системы в
шестнадцатеричную и обратно. Это показано в следующем примере.
ПРИМЕР 3.18
Дано: A8 = 275,034. Найти: A16 .
Решение
A8 = 2   7   5 ,   0
3    4;
A2 = 010 111 101 , 000
011  100;
A2 = 1011  1101, 0000
1110;
A16 = B    D,    0    E;
Ответ: A BD E16 = ,0     .
Быстрый способ перевода,  использующий
устный счет
Записав единицу, приписываем к ней справа нули (1, 10,
100, 1000, 10000, ...) и переводим в десятичную систему. Получаем числа 1, 2,
4, 8, 16, ... С приписыванием справа нуля двоичное число увеличивается вдвое.
Если же приписать единицу, то число увеличится вдвое плюс единица.
ПРИМЕР 3.19
Дано: A2 =1010011,100101. Найти: A10 .
Решение
Последовательно открывая разряды целой части числа,
получаем:
1,
2, 4 + 1 = 5, 10, 20, 40 + 1 = 41, 82 + 1 = 83.
С дробной частью поступаем так же:
1,
2, 4, 8 + 1 = 9, 18, 36 + 1 = 37.
Шестой разряд после запятой имеет вес 26 = 64 . Поэтому дробная
часть
37
равна  .
64
37
Ответ: А10 =83      .
64
Задания  для самостоятельной работы
(часть ΙΙ)
Перевести числа, результат проверить обратным
переводом:
1.
Дано: A2 =101011,000111.
Найти: A8 , A10 , A16 .
2.
Дано: B8 =150,74
. Найти: B2, B10 , B16 .
3.
Дано: C10 =87,29 . Найти: C2 , C8, C16.

4.
Дано: D16 =A F0,         8. Найти: D2, D8 , D10
.
5.
Дано: E10 = 7 /11. Найти: E2, Е8, Е16.

6.
Дано: F5 =
304,12 . Найти: F10.
7.
Дано: G10 = 47,8. Найти: G3.
8.
Дано: Hp.c.c.
=MDCCCXII
. Найти: H10.

Выполнить действия:
1.
Дано: A2 =10101, B2 =111. Найти: C A B2 = +2 2 .
2.
Дано: D2 =1101, E2 =1011. Найти: F2 =D E2 × 2 .

3.5. Арифметические действия  в двоичной
системе
Все правила выполнения арифметических действий в любой
позиционной системе совпадают с правилами для десятичной системы. Рассмотрим
сложение и умножение чисел в двоичной системе. Таблицы сложения (табл. 3.3) и
умножения (табл. 3.4) для двоичной системы предельно просты.
Таблица 3.3.
Сложение чисел

a

b

a + b

0

0

0

0

1

1

1

0

1

1

1

10

Таблица 3.4.
Умножение чисел

a

b

a × b

0

0

0

0

1

0

1

0

0

1

1

1

Рассмотрим простейшие примеры сложения и
умножения двоичных чисел. Параллельно будем выполнять те же действия в
десятичной системе. Это поможет контролировать правильность результата.

ПРИМЕР 3.20
Дано: A=1010 102 = 10 ;
B=111 72 = 10.
Найти: C A B2 = +2        2 .
Решение
                                                       A2 =            1010                            A10 =         10
                                                    + =B2               111                         +
=B10            7

                                                       C =            10001
2
Ответ: C2 =10001.

ПРИМЕР 3.21
Дано: A=1101 132 = 10 .
  B=1011 112 = 10.
Найти: C A B2 = 2 × 2.
Решение

C =
10

17

                                                      A2 =         1101

A =
10

13

                                                     × =B         1011

2

× =B 10

11

                                                                       1101
                         C10 =       143
                                                                       1101

                                                                       0000

                                                                   +
1101

                                                C
=       10001111
2
При сложении чисел необходимо правильно
формировать переносы в старшие разряды с учетом переносов из младших разрядов
чисел. При умножении суммируются частичные произведения (произведения множимого
на цифры разрядов множителя). Заметим, что в двоичной системе частичные
произведения формируются очень просто: они равны или сдвинутому влево
множимому, если цифра множителя равна единице, или нулю, если цифра множимого
равна нулю.

3.6. Системы счисления в задачах ЕГЭ
В разделе показаны типовые задачи по системам
счисления, использованные в вариантах Единого государственного экзамена.
Большинство задач экзамена требуют знания различных
способов перевода чисел из одной системы в другую. Полезно знать быстрые
способы перевода, уверенно оперировать с формулами разложения чисел по степеням
основания, не забывать о необходимости проверки полученных результатов,
например, обратными переводами чисел.
ЗАДАНИЕ 3.1
Как представлено число 2510 в двоичной
системе счисления?
Варианты ответов: 1) 10012 ; 2) 110012 ;
3) 100112 ; 4) 110102 .

ЗАДАНИЕ 3.2
Вычислите значение суммы 10 10 102 + 8 +
16 в двоичной системе счисления.
Варианты ответов:
1) 10100010; 2) 11110; 3) 11010; 4) 10100.

ЗАДАНИЕ 3.3
Укажите через запятую в порядке возрастания
все основания систем счисления, в которых запись числа 23 оканчивается на 2.

ДОПОЛНИТЕЛЬНЫЕ ЗАДАЧИ К ЗАДАНИЮ 3.3
1.
Укажите через запятую в порядке возрастания все основания системы
счисления, в которых запись числа 2210 заканчивается на 4.
2.
Укажите через запятую в порядке возрастания все основания системы
счисления, в которых запись числа 4810 заканчивается на 3.
3.
Укажите через запятую в порядке возрастания все основания системы
счисления, в которых запись числа 2910 заканчивается на 5.
4.
Укажите через запятую в порядке возрастания все основания системы
счисления, в которых запись числа 2710 заканчивается на 3.
5.
Укажите через запятую в порядке возрастания все основания системы
счисления, в которых запись числа 3210 заканчивается на 2.
6.
Укажите через запятую в порядке возрастания все основания системы
счисления, в которых запись числа 3810 заканчивается на 5.
7.
Укажите через запятую в порядке возрастания все основания системы
счисления, в которых запись числа 3110 заканчивается на 7.
8.
Укажите через запятую в порядке возрастания все основания системы
счисления, в которых запись числа 3810 заканчивается на 6.
ЗАДАНИЕ 3.4
В системе счисления с некоторым основанием число 1210
записывается в виде 110. Укажите это основание.
ЗАДАНИЕ 3.5
В системе счисления с некоторым основанием число 17
записывается в виде 101. Укажите это основание.
ДОПОЛНИТЕЛЬНЫЕ ЗАДАЧИ К ЗАДАНИЯМ 3.4 И 3.5
1.
Укажите основание, при котором число 10110 записывается в виде 10101.
2.
Укажите основание, при котором число 10010 записывается в виде 244.
3.
Укажите основание, при котором число 1510 записывается в виде 120.
4.
Укажите основание, при котором число 11110 записывается в виде 421.
5.
Укажите основание, при котором число 12910 записывается в виде 333.
6.
Укажите основание, при котором число 4010 записывается в виде 55.
7.
Укажите основание, при котором число 2110 записывается в виде 111.
8.
Укажите основание, при котором число 2110 записывается в виде 210.
ЗАДАНИЕ 3.6
Как представлено число 8310 в двоичной
системе счисления?
Варианты ответов:
1) 10010112 ;              2) 11001012 ;        3) 10100112 ;            4) 1010012 .
ЗАДАНИЕ 3.7
Вычислите сумму двоичных чисел x и y, если:
x=10101012 , y=10100112.
Варианты ответов:
1) 101000102;             2) 101010002;       3) 101001002;          4) 101110002.
ЗАДАНИЕ 3.8
Количество значащих нулей в двоичной записи десятичного
числа 126 равно ...?
Варианты ответов:
1) 1;  2) 2;  3) 3;  4) 0.
ЗАДАНИЕ 3.9
Вычислите сумму чисел x и y, при x=1D16 , y=728.
Результат представьте в двоичной системе счисления.
Варианты ответа:
1) 100011112 ;            2) 11001012 ;         3) 1010112 ;              4) 10101112 .
ЗАДАНИЕ 3.10
Дано: N C= 716 , M =3158.

Какое из чисел Х, записанных в двоичной системе,
отвечает условию N < X < M?
Варианты ответов:
1) 1100101012 ;          2) 110001102;       3) 110011102;          4) 110010102.
ЗАДАНИЕ 3.11
Дано: N B= 916 , M =2758 .

Какое из чисел Х, записанных в двоичной системе
счисления, отвечает условию N < X < M?
Варианты ответов:
1) 101100112 ;            2) 101110112 ;      3) 111110112 ;         4) 10110112 .
ЗАДАНИЕ 3.12
За праздничным столом собрались четыре поколения одной
семьи: дед, отец, сын и внук. Их возраст, представленный в некоторых системах
счисления, записывается соответственно так: 99 лет, 77 лет, 55 лет и 22 года.
Сколько им было  в действительности лет, если через год их возраст в тех же
системах можно будет записать одинаково — 100 лет.
ЗАДАНИЕ 3.13
За тем же праздничным столом (см. задачу 3.12)
собралась и женская половина большой семьи. Определить, чему равен возраст и в
каких системах записан возраст бабушки (88 лет), матери (66 лет), дочки (44
года) и внучки (11 лет),  если их возраст через год в этих же системах может
быть записан числом 100.
ЗАДАНИЕ 3.14
Для кодирования букв А, Б, В, Г решили использовать
двухразрядные последовательные двоичные числа (от 00 до 11 соответственно).
Необходимо таким способом закодировать последовательность символов БГАВ и
записать результат в шестнадцатеричной системе счисления.
Варианты ответов:
1) Е2;   2) 2Е;   3) 27;   4) 72.
ЗАДАНИЕ 3.15
Для передачи по каналу связи сообщения, состоящего
только из символов А, Б, В и Г, используется посимвольное кодирование А — 0, Б
— 1, В — 10, Г — 11. Через канал связи передается сообщение: ВГБАВ. Закодируйте
сообщение данным кодом. Полученную двоичную последовательность переведите в
шестнадцатеричный вид.
Варианты ответов:
1) 1011;  2) 1110;  3) АВ;  4) ВА.
ЗАДАНИЕ 3.16
На доске записаны подряд все натуральные числа от 1 до
30. Сначала стирают все четные числа. Потом из оставшихся стирают все числа,
стоящие на нечетных местах. Затем снова из оставшихся стирают все числа,
стоящие на четных местах. И так далее, пока не останется одно число. Какое это
число?
Варианты ответов:
1) 1;   2) 2;   3) 11;   4) 31.

ГЛАВА 4

Машинная арифметика

4.1. Способы представления чисел в
компьютере
Начиная с первых ЭВМ,
арифметическо-логическое устройство (АЛУ — процессор) являлось одним из
важнейших устройств машины. Центральным функциональным узлом АЛУ был сумматор —
"мельница", "перемалывающая" числа. Сумматор во многом
определял быстродействие ЭВМ. В худшем случае при сложении чисел перенос должен
был пройти через все разряды сумматора, от младшего разряда к старшему разряду:

0111111111111111111111111
+
Снижение стоимости и повышение надежности
элементной базы позволили разрабатывать и реализовывать схемы сумматоров со
"сквозным" переносом,  с "групповым" переносом. Однако
полностью вопрос стоимости и надежности был решен только с внедрением больших
интегральных схем.
Уже на заре разработки первых компьютеров
желание обойтись в процессоре только сумматором привело к замене вычитания
чисел сложением специальных кодов чисел. Поясним это простейшим примером
действий с числами в десятичной системе.
Пусть требуется выполнить действие 74 — 48.
Код положительного числа равен самому числу. Код отрицательного числа
формируется как дополнение этого числа до 100: 100 — 48 = 52. В компьютере это
выполняется очень просто, без применения вычитания.
При сложении кодов чисел получаем результат
74 + 52 = 126. При этом возникает перенос (одна сотня) из старшего разряда
чисел (переполнение). Этот перенос отбрасывается, устраняется схемным путем.
Результат вычитания правильный, он равен 26.
В качестве кодов чисел используют прямой,
обратный и дополнительный коды. Машинный код числа состоит из знакового разряда
и цифровых разрядов. Принято кодировать знак "плюс" цифрой 0, знак
"минус" — цифрой 1. Для отличия машинных кодов от других записей чисел
используют квадратные скобки. Знаковый разряд от цифровых разрядов будем
отделять точкой.
Примем для простоты примеров разрядность
чисел равной пяти разрядам: один разряд для записи знака и четыре разряда для
записи цифровых разрядов числа. Рассмотрим примеры записи чисел в виде машинных
кодов. В качестве чисел будем брать числа 1 > A ≥ 1/16, т. е.
правильные дроби. Это упростит контроль за выполнением операции умножения
чисел, т. к. произведения также будут  оставаться в диапазоне правильных
дробей.

Прямой код
Формируется записью в знаковый разряд знака
числа, в цифровые разряды — значений цифровых разрядов числа.
ПРИМЕР 4.1
                         12                     5
Дано: А10 =  , В10 =−  .
                         16                   16
Найти: запись А и В в прямом коде.
Решение
А2
=+0.1100, В2 =−0.0101.
Ответ: [ ]A пк = 0.1100, [ ]В пк =1.0101.
Обратный код
Обратный код положительных чисел равен их
прямому коду. Обратный код отрицательных чисел формируется из прямого и прямой
код из обратного инверсией (изменением на обратное, противоположное значение)
цифровых разрядов числа.
ПРИМЕР 4.2
                           5                    13
Дано: А10 =  , В10 =−  .
                         16                   16
Найти: запись А и В в прямом и обратном
кодах.
Решение
А2 =+0.0101, В2 =−0.1101.

Ответ: [ ]A пк = 0.0101, [ ]B пк =1.1101;
[ ]A ок = 0.0101, [ ]B ок =1.0010 .
Дополнительный код
Дополнительный код положительных чисел равен
их прямому коду. Дополнительный код отрицательных чисел формируется как
дополнение заданного числа до единицы. Дополнительный код удобно получать из
обратного кода прибавлением единицы к младшему цифровому разряду.
ПРИМЕР 4.3
                           5                    13
Дано: A10 =  , B10 =−  .
                         16                   16
Найти: [ ]A пк, [ ]
, [ ] , [ ] ,A ок A дк B пк [ ] , [ ] .B ок
B дк
Решение
A2 =+0.0101,
B2 =−0.1101. Ответ: [ ]A пк = 0.0101, [ ]A ок = 0.0101, [ ]A дк = 0.0101;  [ ]B пк =1.1101, [ ]B ок =1.0010 , [ ]B дк =1.0011.
Выполнение арифметических операций в кодах
При выполнении операций со знаковыми
разрядами кодов чисел действуют как с цифровыми. При действиях в обратном коде
перенос из знакового разряда циклически переносится к младшему цифровому
разряду и суммируется с ним, а в дополнительном коде перенос из знакового
разряда отбрасывается, не учитывается.
Результаты выполнения действий в примерах
будем переводить в прямой код. При положительном результате [ ]A ок =[ ]A дк =[ ]A пк.
Прямой код отрицательных чисел из обратного кода получаем инверсией цифровых
разрядов. Прямой код отрицательных чисел из дополнительного получаем инверсией
значений цифровых разрядов и прибавлением единицы младшего разряда.
ПРИМЕР 4.4
                           5                    12
Дано: А10 =  , В10 =−  .
                         16                   16
Найти: С = А + В, действия выполнить в
кодах.
Решение А =
0.0101; В2 =−0.1100;

2
[ ]А пк =
0.0101; [ ]В пк =1.1100;
                                            [
]A ок = 0.0101                               [ ]A дк =
0.0101
                                         +
[ ]B ок =1.0011                            + [ ]B дк =1.0100

Ответ:

[ ]C ок =1.1000

[
  ]C дк =1.1001

[ ]С пк =1.0111

[
  ]C пк =1.0111

C =−0,0111
2

C =−0,0111
2

ПРИМЕР 4.5

7
C =−
10
16

7
C =−
10
16

11

3

Дано: А10 =  , В10 =  .
                         16                16
Найти: C = A — B, действия выполнить в
обратном и дополнительном кодах.
Решение
[ ]A пк = 0.1011                        [ ]A ок
= 0.1011                     [ ]A дк = 0.1011
[−B]пк =1.0011                    +
−[ B]ок =1.1100                  + −[ B]дк =1.1101

                                                                  10.0111                                  10.1000
                                                              +                1

Ответ:

[
  ]C ок = 0.1000

[ ]C дк = 0.1000

8
С
  =
10
16

8
С =
10
16

Для получения ответа в обратном коде перенос
из старшего разряда суммируется с младшим разрядом результата. В дополнительном
коде такой перенос отбрасывается.
Примеры показывают, что действия над числами
в кодах приводят к получению правильных результатов, т. е. сумма кодов дает код
суммы.
Переполнение и машинные нули
Одна из важнейших характеристик компьютера —
разрядность обрабатываемых им двоичных чисел. Количество разрядов, отводимых в
компьютере для хранения, передачи и обработки двоичных чисел, называют
разрядной сеткой компьютера. Первые процессоры на интегральных схемах были
четырехразрядными.
В настоящее время широко распространены 16-
и 32-разрядные процессоры. Появились 64-разрядные процессоры. Чем больше
разрядность, тем больше диапазон обрабатываемых чисел, тем выше точность
вычислений.
Если результат выполнения операции выходит
за диапазон представления чисел и не может быть записан в заданном числе
разрядов, то такую ситуацию называют переполнением разрядной сетки. С
переполнением (overflow) нередко имеем дело при решении на компьютере задач
вычислительного характера.
Если же результат настолько мал, что не
может быть представлен в заданной разрядной сетке, то компьютером в дальнейшем
он принимается равным нулю. Ситуацию, когда число не равно нулю, но принимается
компьютером за нуль, называют появлением машинного нуля.
Рассмотрим примеры.
ПРИМЕР 4.6
                         11                 9
Дано: А10 =  , В10 =  .
                         16                16
Найти: C = A + B. Действия выполнить в
обратном коде.
Решение
А2 = 0,1011, [ ]A пк = 0.1011, B2 = 0,1001, [ ]B пк = 0.1001.
а) [ ]A ок =
0.1011 б) [ ]A мок = 00.1011  + [ ]B ок = 0.1001 + [ ]B мок =
00.1001

                                            [
]C ок =1.0100                                     [ ]C мок = 01.0100
Оценим результат решения примера 4.6, а.
Суммировали два положительных числа, а получили отрицательный результат.
Перенос из старшего цифрового разряда занял знаковый разряд и исказил знак
результата. Произошло переполнение разрядной сетки, сумма заданных чисел больше
единицы.
Для выявления подобных переполнений
применяют модифицированные коды, отличающиеся тем, что имеют по два знаковых
разряда, как показано в примере 4.6, б. Положительные числа в модифицированных
кодах имеют в знаковых разрядах два нуля (00.), отрицательные — две единицы (11.).
Признаком переполнения служит различие значений знаковых разрядов (01. или
10.). При этом первый знак указывает на знак результата.
ПРИМЕР 4.7
                           2                  5
Дано: А10 =  , В10 =  .
                         16                16
Найти: С А В= × .
Решение
При умножении чисел знак результата
определяется по знакам сомножителей логическим путем по известным правилам.
Цифровые разряды произведения определяются перемножением цифровых разрядов
сомножителей.
                                                    А2 = 0,0010;                              0,0010
                                                    В2 = 0,0101;                          ×
0,0101

                                                                                0010
                                                                                +
0010

                                                                                0,0000101
Ответ: С2 = 0,0000.
В результате умножения получили результат,
значащие цифры которого не вписываются в разрядную сетку.
Произведение равно 0,000010102 =10 / 25610 .
В разрядную сетку записывается С2 = 0,0000, т. е. машинный нуль.
Для уменьшения возможности появления
машинных нулей нужно или увеличивать число разрядов в разрядной сетке
компьютера, или вводить некоторые масштабные множители. Например, результат в
примере 4.7 можно записать так:
С2 = 0,1010 2⋅ −4.
Использование масштабных коэффициентов реализовано в нормальной форме
представления чисел.
4.2. Формы представления чисел в
компьютере
Различают естественную (с фиксированной
точкой) и нормальную, экспоненциальную (с плавающей точкой) формы представления
чисел.
Естественная форма
При естественной форме представления чисел
точка, отделяющая разряды целой части числа от дробной части, фиксируется в
определенном месте разрядной сетки, например, перед старшим цифровым разрядом,
непосредственно после знакового разряда. В этом случае процессор оперирует
правильными дробями, что исключает переполнение при умножении и облегчает
подбор масштабных коэффициентов.
32-разрядная сетка позволяет получить 232
различных чисел без знака. Знак занимает один разряд разрядной сетки. При
выполнении действий над числами возможно получение результата в виде +0
(0.0000) и –0 (1.0000). Последнее представление нуля в компьютере изменяется на
+0. Двойное кодирование нуля уменьшает общее количество представляемых чисел на
одно число.
Нормальная форма
Нормальную форму также называют
экспоненциальной формой, формой с плавающей точкой. Нормальная форма позволяет
при одинаковой разрядности получать существенно больший диапазон представления
чисел. Это приводит к уменьшению вероятности переполнения разрядной сетки и
появления машинных нулей. Кроме того, нормальная форма просто решает вопрос
изменения значений сопровождающих числа масштабных коэффициентов.
До недавнего времени процессоры обрабатывали
числа в форме с плавающей точкой по специальным микропрограммам. Затем к
обычным процессорам в помощь стали добавлять так называемые математические
процессоры, работающие с числами с плавающей точкой в 5—15 раз быстрее обычных
процессоров. Современные процессоры обрабатывают числа как в естественной, так
и в нормальной форме.
В нормальной, экспоненциальной форме числа
представляются в виде
A=Ma
p× La,
где Ма — мантисса числа, Lа — порядок, р —
основание системы счисления. Например, десятичное число 372 в такой форме может
быть записано в следующих вариантах:
                                         372
= 0,372 10⋅ 3 = 37200 10⋅ −2 = 0,0372 10⋅ 4
и т. п.
Варианты записи в экспоненциальной форме
некоторого числа в двоичной системе такие:
                              1101=110100
10⋅ −10 =
0,0001101 10⋅ +111 =
0,1101 10⋅ +100
и т. п.
Последняя запись числа, когда число
представляется дробью с первой значащей цифрой непосредственно после запятой,
называется нормализованной. В нормализованном виде число представляется с
максимально возможной точностью. Нормализованный вид представления чисел
существенно исключает появление машинных нулей при умножении.
Каждое число в нормальной форме записывается
четырьмя элементами: "знак мантиссы, он же знак числа + мантисса + знак
порядка + порядок". На рис. 4.1 показан вариант записи нормализованного
двоичного числа при соотношении разрядов: 1 + 5 + 1 + 3 = 10.

Рис. 4.1. Примерная схема разрядной
сетки
В современных компьютерах примерное
соотношение числа разрядов между этими элементами следующее: 1 + 23 + 1 + 7 =
32 — для вещественных чисел одинарной точности и 1 + 52 + 1 + 10 = 64 — для
чисел двойной точности.
Сравнение диапазонов представления чисел
Сравним диапазоны представления чисел для
естественной и нормальной форм. Для простоты и наглядности возьмем 16-разрядные
числа без знака числа и знака порядка. В этом случае в естественной форме имеем
диапазон чисел от 0 до 2 116 −
.
В нормальной форме отведем 10 разрядов под
мантиссу и 6 разрядов под порядок. В этом случае максимальное значение мантиссы
равно 2 110 −
, а максимальный порядок равен 2 1 636 − = , поэтому
диапазон представления чисел равен от 0 до (210 −1)×263 .

Сравнение показывает, что при одинаковой
разрядности диапазон чисел в экспоненциальной форме значительно больше, чем в
естественной форме. Заметим, что с увеличением разрядности это различие в
диапазонах увеличивается по экспоненте.
Можно ошибочно предположить, что с
увеличением диапазона увеличивается и количество представляемых различных
чисел. Но при заданной разрядности количество различных комбинаций нулей и
единиц увеличить невозможно. Количество чисел при представлении в нормальной
форме меньше, чем в естественной форме. Сказывается двойственное представление
нуля (+0 и –0), но теперь в значениях порядка.
Если в естественной форме шаг изменения
чисел постоянный и равен единице младшего разряда чисел, то экспоненциальная
форма приводит к неравномерному шагу, существенно увеличивающемуся к краям
диапазона.
Действия над числами в нормальной форме
Как правило, все операнды поступают из
памяти для выполнения операций, и результаты отправляются для хранения в память
в нормализованном виде, т. е. старший значащий разряд мантиссы записан
непосредственно после знакового разряда числа. Нормализованное число представляется
с максимально возможной точностью.
ПРИМЕР 4.8
Дано: A2 =11,1; B2 = 0,01; C2 =−0,1011.
Найти запись А, В и С в экспоненциальной
форме, в нормализованном виде,  в прямом коде; разрядность: 6 разрядов для
мантиссы со знаком, 4 разряда для порядка.
Решение
             A2 =11,1= +0,111 10⋅  +010
; B2 = 0,01= +0,10 10⋅   −001 ; C2
= −0,1011
10⋅ +000 .

Ответ: [ ]A пк = 0.11100.0.010; [ ]B пк
= 0.10000.1.001; [ ]С пк =1.10110.0.000.
Сложение. При выполнении операций сложения и
вычитания чисел с плавающей точкой необходимо предварительно выровнять порядки.
При этом сдвигается вправо число, имеющее меньший порядок на количество разрядов,
равное разности порядков. Рассмотрим примеры.
ПРИМЕР 4.9
                             1                                            3
Дано: А10 =2  , А2 =10,01, В10 =−  , В2 =−0,011.
                             4                                            8
Найти: С = А + В. Сложение выполнить в
нормальной форме, в обратном коде.
Решение А =10,01,
[ ]A пк =[
]A ок = 0.10010.0.010;

2
B2 =−0,011, [ ]B =1.11000.1.001, [ ]B =1.00111.1.110.
Определяем разность порядков:
                                   [Pa]ок
= 0.010
       [Рb]ок =1.110               [−Pb]ок = 0.001
                                   [Pa]ок
= 0.010

                           +
−[ Pb]ок = 0.001

                                     [
]R ок = 0.011

Положительный результат разности порядков R
указывает на то, что меньший порядок у второго слагаемого, у числа В. Величина
разности показывает, на сколько разрядов необходимо для выравнивая порядков
сдвинуть вправо мантиссу числа В.
Сдвинутая на три разряда вправо мантисса
равна [Mb]ок =1.11100
. При сдвиге учитываем, что в обратном коде отрицательного числа значения
разрядов инвертированы, поэтому при сдвиге освобождающиеся разряды заполняются
единицами (в прямом коде — нулями).
Порядки выровнены, поэтому можно выполнить
сложение мантисс и приписать им больший, теперь общий для обоих слагаемых
порядок. Мантиссы складываем в модифицированном коде (два знаковых разряда
числа), что позволяет выявлять переполнение разрядной сетки.
[Ma]мок
= 00.10010
+
[Mb]мок =11.11100

100.01110
                                                                                +                        1

[Mc]мок
= 00.01111
Результат сложения мантисс положителен и
ненормализован. Переполнение отсутствует. Для нормализации нужно сдвинуть
мантиссу результата на один разряд влево. При этом, чтобы не исказить величину
числа в целом, необходимо уменьшить на единицу порядок.
Получили результат: [ ]C мок = 00.01111.0.010. После
нормализации имеем:
[ ]C мок = 0.1111.0.001
(увеличиваем мантиссу — уменьшаем порядок).
Ответ: [ ]C ок =[ ]C пк = 0.1111.0.001; C2
=1.111; C .

УМНОЖЕНИЕ И ДЕЛЕНИЕ. В нормальной форме
числа А и В можно записать в следующем виде: A Ma= ⋅2Pa и B Mb= ⋅2Pb .
При умножении и делении чисел А и В справедливы следующие формулы:
                                              A
B Ma⋅                          =          ⋅2Pa ⋅Mb⋅2Pb = Ma Mb⋅               ⋅2Pa Pb+ ,
Ma
                                                                         Pa                        Pb                            Pa
Pb−
                                                 A
B Ma/    =           ⋅2     /
Mb⋅2 =          ⋅2            .
Mb
Для выполнения умножения (деления) чисел в
экспоненциальной форме, форме с плавающей точкой нужно перемножить (разделить)
мантиссы и приписать результату порядок равный сумме (разности) порядков
исходных чисел.
Задания для самостоятельной работы
ЗАДАНИЕ 4.1
Заданные числа перевести в
двоичную систему и записать в прямом, обратном и дополнительном кодах (1 разряд
знаковый и 4 цифровых). Выполнить сложение и вычитание чисел в обратном и
дополнительном кодах. Проверить правильность полученных результатов.

а) A10
  =11/16,
  B10 =−4 /16 ;

в) E10 =−9/16, F10 = 5/16 ;

б) C10 =−6 /16, D10 =−7 /16;

г) G10 =13/16, H10 = 2 /16.

ЗАДАНИЕ 4.2
Заданные числа перевести в двоичную систему
и записать в прямом коде в нормальной форме в нормализованном виде. Для записи
мантиссы со знаком отвести 6 разрядов, для записи порядка со знаком — 4
разряда. Выполнить сложение и вычитание чисел в модифицированных обратном и
дополнительном кодах. Результат нормализовать и проверить на правильность
получения.

а) A10 = 7,5, B10 = 2,5;

в) E10 = 5,25 , F10 = −6,25;

б) C10
  = 3,25
  , D10 =−9,5;

г) G10
  = 6,5
  , H10 =8,25
  .

4.3. Примеры использования  других систем
Двоично-десятичная система
Имеется множество задач, в которых
ввод/вывод информации в компьютере занимает большую часть времени его работы.
При низкой надежности первых компьютеров и высокой стоимости их рабочего
времени разработчиков пугала необходимость больших затрат времени на перевод
чисел из десятичной системы в двоичную систему и обратно. Поэтому большое число
первых компьютеров проектировалось для работы с двоично-десятичной системой.
В двоично-десятичной системе каждый
десятичный разряд числа кодируется двоичным кодом. Например, четырехразрядное
десятичное число A10 = 7409 в двоично-десятичной системе запишется так:
                                                    A2
10− = 0111    0100    0000     1001.

Перевод чисел из десятичной системы в
двоично-десятичную и обратно выполняется очень просто, схемным путем.
При работе с числами в двоично-десятичной
системе возникает проблема переноса из одного десятичного разряда в соседний,
старший разряд. Вот когда разработчики жалели, что у человека 5 пальцев. Было
бы четыре, тогда человечество пользовалось бы восьмеричной системой счисления.
А переход от двоичной системы в восьмеричную систему и обратно, как было
показано, не вызывает затруднений.
В чем заключается проблема переноса? При
сложении двух десятичных чисел вес переноса равен 10, например, 5 + 7 = 10 + 2.
При сложении двоичнодесятичных разрядов (тетрад) суммирование этих же чисел не
приводит к появлению переноса: 0101 + 0111 = 1100. Вес переноса из тетрады
равен не 10, а 16.
Поэтому разработчики придумали
двоично-десятичный код "с избытком 3".
В этом случае добавленные в каждую тетраду
тройки доводят перенос 10 до 16. Рассмотренный выше пример выполняется теперь
так:
(0101
+ 0011) + (0111 + 0011) = (1000) + (1010) = (0001) + (0010).
Ответ получился правильный: 5 + 7 = 12.
Осталось выполнить коррекцию результата — добавить число 3. При сложении
многоразрядных двоичнодесятичных чисел если в тетраде был перенос, то
прибавляется число 3, если переноса не было, то число 3 вычитается.
Троичная система
Теоретически было доказано, что самой
экономичной по затратам оборудования для построения компьютеров является
троичная система. Когда вопросы экономии оборудования стояли очень остро
(компьютеры первого и второго поколения), была построена единственная в своем
роде вычислительная машина  "Сетунь", в которой использовалась
троичная система.
Система остаточных классов
Быстродействие компьютера зависит от
скорости работы в процессоре сумматора чисел. В худшем случае, при сложении
чисел перенос должен пройти через все разряды сумматора. Имеются системы, в
которых переносы из разряда в разряд отсутствуют. К ним относится система
счисления в остаточных классах (СОК). Ее еще называют системой вычетов,
китайской системой (вычетами занимались математики конфуцианской школы),
чешской системой (профессор Свобода первый рассматривал возможность
использования СОК для построения компьютеров).
СОК — непозиционная система. Основаниями
системы служат взаимно простые числа, например, p1 = 3, p2 =5, p3 =7. Диапазон
представления чисел равен
произведению оснований: D p p p= 1 ⋅ 2 ⋅ 3 = 3 5 7 105⋅ ⋅ = , т. е.
при этих основаниях можно однозначно представлять числа от 0 до 104. Любое
число в этом диапазоне записывается остатками от деления этого числа на выбранные
основания:
AСОК = (a
a a1, 2, 3), где a A1 = modp1, a A2
= modp2
, a A3 = modp3.
Например, число A10 =13 запишется в СОК с выбранными основаниями так: AСОК = (1,3, 6) . В табл. 4.1
показана часть чисел в СОК с основаниями 3, 5 и 7 диапазона 0—104.
Таблица 4.1. Числа в СОК

А (10)

А = (3,  5,  7) СОК

0

(0, 0, 0)

1

(1, 1, 1)

2

(2, 2, 2)

3

(0, 3, 3)

4

(1, 4, 4)

5

(2, 0, 5)

6

(0, 1, 6)

7

(1, 2, 0)

8

(2, 3, 1)

9

(0, 4, 2)

10

(1, 0, 3)

11

(2, 1, 4)

12

(0, 2, 5)

...

...

104

(2, 4, 6)

105

(0, 0, 0)

Действия сложение, вычитание и умножение
выполняются в СОК поразрядно, по модулю оснований. Это позволяет выбирать
результаты из таблиц, получать схемным путем. Рассмотрим пример сложения и
умножения чисел.
ПРИМЕР 4.10
Дано: A10 =12 , B10 = 8 . Основная СОК: 3, 5
и 7.
Найти: C = A + B, D = A ⋅ B.
Решение

A =
СОК

(0, 2, 5)

A =
СОК

(0, 2, 5)

+

B =
СОК

(2, 3, 1)

×

B =
СОК

(2, 3, 1)

                                                 CСОК = (2, 0, 6)                              DСОК
= (0, 1, 5)
Правильность результата можно проверить
переводом чисел 12 + 8 = 20 и 12 ⋅ 8 = 96 в СОК.
Ответ: CСОК = (2, 0, 6), DСОК = (0, 1, 5).
К сожалению, деление в системе остатков
затруднено, что и определило малое распространение ее при построении
компьютеров. Была построена быстродействующая специализированная ЭВМ, успешно
решавшая задачи идентификации объектов при обзоре космического пространства.
Римская система счисления
Древние римляне для записи чисел употребляли
следующие знаки:
I =
1, V = 5, X = 10, L = 50, C = 100, D = 500, M = 1000.
Чтобы исключить четырехкратные повторения
одной и той же цифры, меньшая цифра может стоять перед большей цифрой. В этом
случае число, определяемое меньшей цифрой, вычитается из числа, определяемого
большей цифрой. Например, пишут IV вместо IIII, IX вместо VIIII, XL вместо
ХХХХ, CM вместо DCCCC. Римские цифры I, X, C ставятся соответственно перед X, C,
M для обозначения 9, 90, 900 или перед V, L, D для обозначения 4, 40, 400.
Задания для самостоятельной работы

1. Дано: Aр.с.с. =CDIX .

Найти: A10
  .

2. Дано: B10 =1999 .

Найти: Bр.с.с. .

3. Дано: Cр.с.с.
  =DCXLIV
  .

Найти: C10.

4. Дано: D10
  =1242
  .

Найти: Dр.с.с. .

5. Дано: Eр.с.с. =CMXCIV .

Найти: E10.

6. Дано: F10 =1703.

Найти: Fр.с.с. .

7. Дано: Gр.с.с.
  =MCCXIX
  .

Найти: G10
  .

8. Дано: H10
  =1494.

Найти: Hр.с.с. .

ГЛАВА 5

Булева алгебра

5.1. От логики Древнего мира  до наших дней
Платон и Сократ
Создателем логики считают Аристотеля. Но
элементы логики просматриваются уже в сочинениях Платона, созданных задолго до
Аристотеля. Так главный герой "Диалогов" Платона (427—347 гг. до н.
э.) его учитель Сократ (ок. 469— 399 гг. до н. э.) в своих беседах и
рассуждениях выстраивает стройные и логически обоснованные последовательности
аргументаций, подводя слушателей к желаемому выводу. От этих логических
построений до формальной логики оставался один шаг, который и сделал
Аристотель.
Аристотель
Величайший мудрец древности, ученик Платона
и учитель Александра Македонского Аристотель (384—322 гг. до н. э.) обобщил все
сделанное до него в построении суждений и умозаключений, систематизировал
правила рассуждений и описал их в своем знаменитом труде, который назвал
"Органон" (метод). Важнейшая составляющая "Органона" — это
"Первая аналитика", в которой была изложена силлогистика (от греч.
Syllogistikos — выводящий умозаключение) — учение о логической дедукции.
Энциклопедический словарь так определяет
понятие силлогизма. Силлогизм — это рассуждение, в котором два высказывания
(посылки), связывающие субъекты (подлежащие) и предикаты (сказуемые),
объединены общим (средним) термином, обеспечивающим "замыкание"
понятий (терминов) в заключении силлогизма. При этом истинность заключения
зависит от истинности посылок.
Рассмотрим пример конкретного силлогизма:
"Все металлы — электропроводны.
Медь — металл        :
Значит, медь — электропроводна."
Аристотель ввел обозначение буквами
составных элементов силлогизма и отделил форму силлогизма от конкретного его
содержания. Это позволило записать силлогизм в обобщенном виде, формально,
например, так:
"Если свойство А приписывается всем В,
а В приписывается С,          :
то свойство А необходимо приписывается
С."
Традиционно в средних школах и тем более в
гимназиях изучались латынь и логика. В одном из последних предвоенных учебников
по логике приводился такой шуточный запоминающийся пример силлогизма с ложной
первой посылкой, которая приводит к ложному заключению: первая посылка —
"То, что вы не потеряли, вы имеете"; вторая посылка — "Вы не
потеряли рога"; заключение (вывод) — "Поэтому вы их имеете".
Родоначальник немецкой классической
философии Иммануил Кант (1724— 1804) сказал, что всякая наука настолько наука,
насколько в ней заключено математики. Введение Аристотелем буквенных
обозначений элементов логики позволило ему построить первую в истории науки
формальную систему. Это оказало большое влияние на развитие математики. Однако
до появления булевой алгебры логики было еще далеко.
Готфрид Лейбниц
Средние века проходили то с повышением, то
с падением интереса к логике. Изобретались и демонстрировались логические
машины. Так испанец Раймунд Луллий (1235—1315) создал машину, которая
перебирала и комбинировала  различные понятия, оставляя анализ их сочетаний и
вывод заключения за человеком.
Следующая попытка использовать логические
построения в решении гениальной по замыслу и грандиозной по масштабу задачи
была предпринята Готфридом Лейбницем (1646—1716), человеком энциклопедических
знаний, с большим диапазоном интересов. Лейбниц был одним из создателей
дифференциального и интегрального исчисления, был прославленным юристом,
философом, занимался историей, был литератором и государственным деятелем. Но
главной своей задачей Лейбниц считал придание Аристотелевой логике
алгебраической формы. Он хотел создать искусственный язык науки, который должен
был стать средством выражения любых мыслей, средством анализа и решения любых
проблем. Заметим, что попутно Лейбниц интересовался созданием вычислительных
машин, использованием для вычислений двоичной системы счисления.
Джордж Буль
Следующий этап математизации логики связан
с именем английского логика Дж. Буля (1815—1864). Буль родился в бедной семье.
Не учился ни в одном учебном заведении, кроме начальных классов школы для
бедных. Самостоятельно изучив латынь и древнегреческий, девятнадцатилетний Буль
печатает в местных изданиях свои переводы Горация. После долгих поисков работы,
которая оставляла время для самообразования, Буль открыл маленькую школу, в
которой был единственным преподавателем. К счастью, два влиятельных математика
— Д. Грегори, издававший математический журнал, и О. де Морган, профессор
Кембриджского университета — оценили глубину первых работ Буля.  В 1849 г. он
стал профессором математики в колледже г. Корка в Ирландии.  В 1854 г. Буль
опубликовал работу "Исследования законов мышления". В ней была
изложена алгебра логики высказываний, основанная на трех операциях: And (и), Or (или) и Not (не). Эту алгебру Буля,
включающую три операции, и называют булевой алгеброй. Булеву алгебру
традиционно рассматривают как  математическую систему, позволяющую описывать
принципы построения и работы релейных схем и схем компьютеров, использующих
двоичную систему счисления.
Множество входящих в алгебру операций
называют базисом. Базис булевой  алгебры расширялся, к нему добавлялись новые
операции: импликация, равнозначность, сумма по модулю 2. Так образовался базис
алгебры логики, занимающейся вопросами исчисления высказываний.
Булева алгебра и алгебра логики — алгебры
двоичных переменных, констант и функций, принимающих только два значения:
истина и ложь. Для упрощения записей в булевой алгебре и в алгебре логики
вместо значений истина и ложь часто используют соответственно цифры — единицу и
ноль.
5.2. Булева алгебра
Булевы переменные и функции
Булевы переменные способны принимать только
два значения: 0 и 1. Булевы функции (БФ) — это функции булевых переменных. Они
также принимают только два значения — 0 и 1. Область определения БФ n
аргументов составляют:
 при n = 1 — значения 0 и 1 этого аргумента (2 2n = );
 при n = 2 — комбинации значений (наборы значений) 00,
01, 10 и 11 — 4 набора значений аргументов (2 4n = );
 при n = 3 — наборы 000, 001, 010, 011, 100, 101, 110
и 111 — 8 наборов (2n = 8) и т. д.
Можно сделать вывод, что область
определения БФ n аргументов состоит из 2n наборов. Область значений
БФ — это множество всего из двух значений: 0 и 1.
Конечность области определения и области
значений БФ позволяют задавать эти функции не только формулами, но и таблично
(табл. 5.1). В виде таблицы БФ задают значениями 0 или 1 на каждом из наборов
значений ее аргументов. Такие таблицы называют таблицами истинности (в алгебре
логики в таких таблицах вместо "0" часто пишут Л — ложь, вместо
"1" пишут И — истина).
Таблица 5.1. Таблица истинности

а

х1

х2

fm(x1, x2)

f13(х1, х2)

0

0

0

f(0, 0)

1

1

0

1

f(0, 1)

1

2

1

0

f(1, 0)

0

3

1

1

f(1, 1)

1

Таблица 5.1 представляет собой пример
таблицы истинности функций fm(x x1, 2) и f13
1(x x, 2) двух аргументов ( x1 и x2 ).
Величина а обозначает номер набора значений
аргументов, m — номер функции.
Функция fm(x x1, 2)
— это задание в общем виде любой из 16 функций двух аргументов. f (0, 0) —
значение функции при подстановке в ее формулу значений x1 =0 и x2 = 0, т. е. на нулевом
наборе аргументов. f (0,1) — значение функции
на первом наборе аргументов и т. д.
Значение булевой функции на всех наборах
своих аргументов образует двоичное число, называемое кодом функции. Перевод
кода функции в десятичную систему дает номер функции. В табл. 5.1 записана
функция f13 1(x x, 2), с кодом 1101 и номером 13.
С ростом числа аргументов n число различных
функций резко возрастает. Если число наборов определяется формулой Kн =2n, то число
функций вычисляется по формуле Kф
=2Kн . При n=1 Kн = 2, Kф =4; при n=2 Kн = 4, Kф
=16; при n=4
Kн =16 , Kф =65536 и т. д. При n=10 Kф сравнимо с
числом элементарных частиц во Вселенной.
Все функции изучить невозможно. Поэтому,
как и в обычной школьной алгебре, выбирают некоторое количество функций малого
числа (один, два) аргументов и применяют их в качестве операций для построения
формул функций любой сложности.
Рассмотрим булевы функции одного и двух
аргументов и подробно остановимся на функциях, входящих в базис булевой
алгебры, базис алгебры логики, базисы других двоичных алгебр.

Булевы функции одного аргумента
Все четыре функции на двух наборах одного
аргумента показаны в табл. 5.2.
Таблица 5.2. Функции одного аргумента

х

f0(x)

f1(x)

f2(x)

f3(x)

0

0

0

1

1

1

0

1

0

1

Функция f0( )x называется
константой "нуль". Она независимо от значений аргумента равна нулю.
Функция f3( )x называется
константой "единица". Она независимо от значений аргумента равна
единице.
Функция f1( )x — это переменная
х. Она повторяет значения переменной.
Функция f2( )x называется инверсией
(отрицанием х). Она входит в базис булевой алгебры и алгебры логики. Рассмотрим
ее подробнее.

Инверсия (отрицание)
Инверсия — функция одного аргумента.
Логическая операция над аргументом — отрицание. Часто отождествляют функцию с
операцией и говорят: "функция отрицание" или "операция
инверсия". Однако при строгом формальном подходе не следует отождествлять
результат с действием.
Знак операции — черта над аргументом,
например, x или знак инверсии перед аргументом ¬х.
Такая запись читается: "не х" или "отрицание х". В языках
программирования инверсия логической переменной х записывается так: Not x.
Функцию инверсия в схемах компьютера
реализует логический элемент инвертор (элемент НЕ). Схема инвертора показана на
рис. 5.1. Работает инвертор так: если на входе 0, то на выходе 1, если на входе
1, то на выходе 0.

Рис. 5.1.
Условное обозначение инвертора
Булевы функции двух аргументов
Двум аргументам соответствуют четыре набора
их значений, что приводит  к шестнадцати различным кодам функций (n=2 , Kн = =2 4n , Kф =2Kн =16). Все 16 функций
двух аргументов записаны в табл. 5.3.
Таблица 5.3. Булевы функции двух
аргументов

а

х1

х2

f0

f1

f2

f3

f4

f5

f6

f7

f8

f9

f10

f11

f12

f13

f14

f15

0

0

0

0

0

0

0

0

0

0

0

1

1

1

1

1

1

1

1

1

0

1

0

0

0

0

1

1

1

1

0

0

0

0

1

1

1

1

2

1

0

0

0

1

1

0

0

1

1

0

0

1

1

0

0

1

1

3

1

1

0

1

0

1

0

1

0

1

0

1

0

1

0

1

0

1

Среди функций двух аргументов имеются уже
знакомые по функциям одного аргумента:
 f0 и f15 — соответственно
функция константа 0 и ее инверсия — константа 1;
 f3 и f12 — переменная x1
и ее инверсия x;
 f5 и
f10 — переменная x2 и ее инверсия x2 .
Функции f0 и f15
фиктивно зависят от обоих аргументов. Изменения значений аргументов не влияют
на значение этих функций. Функции f3 , f5 , f10
и f12 фиктивно зависят от одного аргумента и существенно зависят от
другого аргумента. Из оставшихся десяти функций также можно выделить пять пар —
пять функций и их инверсий: f1 и f14 , f2 и f13
, f4 и f11, f6 и f9 , f7
и f8 .
Из всех функций одного и двух аргументов
только три функции соответствуют операциям, составляющим базис булевой алгебры.
Это функции инверсия (операция отрицание), конъюнкция (логическое умножение) и
дизъюнкция (логическое сложение). Далее будут рассмотрены также функции,
определяющие базисы других двоичных алгебр.
Конъюнкция (логическое умножение)
Булева функция f1 1(x x, 2)
c кодом 0001 называется конъюнкцией. Конъюнкция — это такая булева функция,
которая равна единице тогда и только тогда, когда все аргументы функции равны
единице. Другое определение — это такая функция, которая равна нулю, если хотя
бы один аргумент функции равен нулю.
Таблица истинности функции конъюнкция —
табл. 5.4.
Функцию конъюнкция получаем как результат
операции логическое умножение. Как видно из определения, логическое умножение
совпадает с умножением арифметическим. Знак операции: &. В формулах, как и
в обычной алгебре, знак чаще всего опускается:
f (x x1, 2) = x1
& x2 = x1 ⋅ x2 = x1 ∧ x2 = x x1
2.
Запись в языках программирования: x1 And x2. Читается формула так: " x1 и
x2 ".
Таблица 5.4. Таблица истинности
функции "конъюнкция"

а

x1

x2

f1(x1, x2)

0

0

0

0

1

0

1

0

2

1

0

0

3

1

1

1

Функцию конъюнкция реализует логический
элемент конъюнктор (элемент И).
Условное обозначение конъюнктора в
логических схемах показано на рис. 5.2.

Рис. 5.2.
Обозначение конъюнктора
Используя принцип суперпозиции (подстановку
функции в качестве аргументов в другую функцию), функцию конъюнкция можно
обобщить на n аргументов:
f (x x1, 2,...,
xn) = x
x1 2...xn .
Дизъюнкция (логическое сложение)
Булева функция f7 1(x x, 2)
с кодом функции 0111 называется дизъюнкцией. Дизъюнкция — это такая двоичная
функция, которая равна нулю тогда и только тогда, когда все аргументы функции
равны нулю. Другое определение: дизъюнкция — это такая функция, которая равна
единице, если хотя бы один аргумент равен единице.
Таблица истинности функции дизъюнкция —
табл. 5.5.
Функции дизъюнкция соответствует операция
логическое сложение. Знак операции: ∨. Пример записи формулы функции
дизъюнкция:
f (x x1, 2)
= x1∨ x2.
Читается формула так: " x1 или
x2 ".
Запись на языках программирования: x1 Or x2.
Таблица 5.5. Таблица истинности
функции дизъюнкция

a

x1

x2

f1(x1,
  x2)

0

0

0

0

1

0

1

1

2

1

0

1

3

1

1

1

Функцию дизъюнкция реализует логический
элемент дизъюнктор (элемент ИЛИ). Условное обозначение дизъюнктора показано на
рис. 5.3.
 Рис. 5.3. Обозначение дизъюнктора
Функция дизъюнкция обобщается на n
аргументов:
                                                          f
(x x1, 2,..., xn) = x1∨ ∨ ∨x2          ...        xn
.
Инверсия конъюнкции. Функция Шеффера
В таблице истинности функций двух
аргументов (табл. 5.3) эта функция f14 1(x x, 2). Она
имеет код функции 1110. Варианты записи формулы функции следующие:

f
x x( 1, 2) = ¬(x1 ∧ x2) = x1
∧ x2 = x1 & x2 = x1 ⋅ x2 = x x1
2 .
Инверсия конъюнкции, как видно из ее
формулы, образована из двух более простых функций: конъюнкции и инверсии. Эта
функция замечательна тем, что она в единственном числе образует базис одной из
двоичных алгебр — алгебры Шеффера, позволяющей записать в виде формулы любую
двоичную логическую функцию.
В алгебре Шеффера единственная функция —
функция Шеффера. Знак операции: | — штрих Шеффера. В алгебре Шеффера функция
инверсия конъюнкции записывается так:
f (x x1, 2)
= x1 |
x2.
Логический элемент, реализующий функцию
Шеффера, называется элементом Шеффера или элементом И-НЕ. Условное обозначение
элемента И-НЕ показано на рис. 5.4. Функция Шеффера также обобщается на n
аргументов.

Рис. 5.4.
Обозначение элемента И-НЕ
Инверсия дизъюнкции. Функция Пирса
В табл. 5.3 она под номером 8 и имеет код
функции 1000. Это функция

f x x( 1, 2) = x1∨
x2.
Функцию "инверсия дизъюнкции" еще
называют функцией Пирса. Она, как и функция Шеффера, универсальна в том смысле,
что в единственном числе составляет базис алгебры Пирса и позволяет записать
формулой любую двоичную функцию. Знак операции: ↓ — стрелка Пирса. Запись
функции Пирса:
f (x x1, 2) = x1
↓ x2.
Логический элемент, реализующий функцию
Пирса, называют элементом Пирса или элементом ИЛИ-НЕ. Условное обозначение
элемента приведено на рис. 5.5. Функция Пирса также обобщается на n аргументов.

Рис. 5.5.
Обозначение элемента ИЛИ-НЕ
Импликация (следование)
Это логическая функция двух двоичных
логических переменных x1 и x2 . Различают импликацию от x1
к x2 (функция f13 c кодом 1101) и импликацию от x2
к x1 (функция f11 c кодом 1011). Обе функции приведены в
табл. 5.6. Операцию, соответствующую функции импликация, также называют
импликацией и обозначают стрелкой от одной логической переменной к другой.
Таблица 5.6. Функции импликация

х1

х2

х1
  → х2

х2 → х1

0

0

1

1

0

1

1

0

1

0

0

1

1

1

1

1

Операция импликация входит в базис алгебры
логики, где оперирует истинными и ложными высказываниями. Об этом подробнее
будет рассказано в следующей главе.
Запись формул функций импликация в булевой
алгебре и в алгебре логики следующая:
f13 1(x x, 2) =¬ ∨ = ∨ =
→x1 x2 x1 x2 x1 x2; f11
1(x x, 2) = x1 ∨¬ = ∨ = →x2 x1 x2 x2 x1 .
Логическая операция Imp (импликация) используется в языках
программирования. Запись следующая: х1 Imp x2.
Неравнозначность (сумма по модулю 2)
Эту логическую функцию двух аргументов еще
называют исключающим ИЛИ (или один, или другой, но не оба), а также суммой по
модулю 2. Код функции — 0110, номер — 6 (см. табл. 5.3). Функция
неравнозначность многоместная, ей соответствует логическая операция сумма по
модулю 2. Функция принимает единичное значение только на тех наборах значений
аргументов, в которых нечетное число единичных значений: (01, 10), (001, 010,
100, 111) и т. д. Операция входит в базис алгебры Жегалкина и имеет знак
операции: ⊕. Часто ее включают в базис алгебры логики. Запись формулы
функции неравнозначность в булевой алгебре, алгебре Жегалкина и в языках
программирования следующая:

                                                   f6 1(x x, 2) =¬ ∧ ∨ ¬x1                         x2 x1 x2 =
x x1 2 ∨ x x1 2,
f6 1(x x, 2) = x1 ⊕ x2,
х1 Xor x2.
Равнозначность (эквивалентность)
Является обратной функцией к
неравнозначности. Функция равнозначность (код функции 1001, номер функции 9)
принимает значение 1 только на наборах с одинаковыми значениями аргументов (00
и 11). В качестве операции двойной импликации функция равнозначность включается
в базис алгебры логики (знак операции: ↔). Функцию
"равнозначность" также называют эквивалентностью.
Запись формулы функции равнозначность в
булевой алгебре, алгебре логики и в языках программирования следующая:

                                                 f9 1(x x, 2) =¬ ∧¬ ∨x1                               x2                      x x1 2 = x x1 2 ∨ x x1 2,
f9 1(x x, 2)
= x1 ↔ x2, х1 Eqv х2. Полезно помнить, что
x1 ↔ x2 = (x1 → x2) (⋅ x2 → x1) и x1 Eqv x2 = Not(x1 Xor x2).
Функции запрета
Это функции f2 и f4 .
Они являются обратными функциями к функциям импликации, широко использовались
при проектировании и описании работы логических элементов ЭВМ 1-го и 2-го
поколений.

Существенная и фиктивная зависимость функций  от
аргументов
Различают существенную и фиктивную
зависимость функций от своих аргументов. Функция f (x x1, 2,...,
xn) существенно зависит от аргумента xi , если при
изменении его значения изменяет значение и сама функция:
f (x1,...,
xi−1, 0, xi+1,..., xn ) ≠ f x( 1,...,
xi−1,1, xi+1,..., xn).
В противном случае говорят, что функция не
зависит от аргумента xi или зависит от него фиктивно. Введение
понятия фиктивной зависимости позволяет рассматривать все функции, как
зависящие от одних и тех же аргументов. Например, функции двух аргументов константа
1 и константа 0 (( x1, x2 ) = 1 и ( x1, x2
) = 0) фиктивно зависят от своих аргументов, а функции конъюнкция и
дизъюнкция зависят существенно. Функции двух аргументов инверсия x1
и инверсия x2 существенно зависят от одного аргумента и фиктивно от
другого.
Алгебры. Сравнение по набору операций
Из перечисленных в табл. 5.7 двоичных
алгебр широко используются на практике только две — алгебра Буля и алгебра
логики. Алгебры Шеффера и Пирса  активно изучались на предмет возможности
построения компьютера из однотипных элементов. К тому же, ввиду технологических
особенностей, наиболее просто в интегральном исполнении реализуются именно
логические элементы Шеффера (И-НЕ) и Пирса (ИЛИ-НЕ).
Таблица 5.7. Школьная и двоичные
алгебры

Алгебра

Множество переменных  и констант

Базис алгебры  (набор операций)

Школьная

Вещественные числа

+, –, ×, /, √, степень

Булева

0 и 1 (наборы)

∧,
  ∨, ¬

Шеффера

– " –

| — штрих Шеффера

Пирса

– " –

↓ — стрелка Пирса

Жегалкина

– " –

& , ⊕, 1

Алгебра логики

– " –

&,
  ∨, ¬, →, ↔

При выборе базиса (набора операций)
двоичной алгебры встает вопрос о его функциональной полноте — возможности
задать формулами все, любой сложности двоичные функции. Доказано, что
функционально полными являются базисы ¬, & и ¬, ∨. Базис булевой
алгебры (&, ∨, ¬) избыточен. Он остается функционально полным при
исключении одной из логических операций — сложения или умножения.
Функции конъюнкция и
инверсия позволяют получить дизъюнкцию: x y x y⋅ = ∨ . С помощью функций
дизъюнкция и инверсия получаем конъюнк-
цию: x y x y∨ =         ⋅
. В базисе,
например, алгебры Шеффера инверсию и конъюнк-

цию получаем так: x x x= | , xy= (x y x y| ) | ( | ).
Имея эти функции, получаем и дизъюнкцию. В алгебре Жегалкина инверсию двоичной
переменной получают так: x x= ⊕1 (сумма по модулю 2 переменной и
функции константа 1).
Основные законы и тождества булевой алгебры
Многие законы и правила преобразования формул
булевой алгебры совпадают с законами в школьной алгебре. Но среди них есть
тождества, присущие только булевой алгебре. Перечислим все законы булевой
алгебры. Это тождества, используемые для преобразования формул логических
функций.
1.
Переместительные законы (коммутативность): xy yx= ; x y y x∨ = ∨ .
2.
Сочетательные законы (ассоциативность):
x
yz(          ) = (xy
z) ;
                 x∨ ∨ = ∨ ∨(y
z) (x y) z.
3.
Распределительные законы (дистрибутивность):
x      y z(
∨ = ∨)
xy xz ; x yz∨ =
∨(x y x z)( ∨ ).
4.
Законы тавтологии (идемпотентность):
xx x=
;
x      x
x∨ = .
5.
Законы выполнения операций над константами:
x⋅ =1 x ;
x∨ =0 x ;
x⋅0 0= ;
x∨ =1 1.
6.
Законы инверсии:
•
для
конъюнкции: x x⋅= 0
;
•
для дизъюнкции: x x∨ =1.
7.
Законы де Моргана:
xy
x y= ∨ ;

x
y x y∨    =             ⋅              .

8.
Законы
склеивания: xy xy x∨
= ;
x
y x y∨ )(
∨ ) = x.
9.
Законы поглощения: x xy x∨ = ; x x y( ∨ =) x.
10.
Закон снятия двойной инверсии:

x
x=           .

Обратим внимание на то, что большинство
законов записано в две строки. При этом вторая строка образуется из первой
заменой конъюнкции на дизъюнкцию, дизъюнкции на конъюнкцию и заменой констант 1
на 0 и 0 на 1. В этом выражается двойственный характер функций конъюнкция и
дизъюнкция. Это замечательное свойство двойственности позволяет, например,
сделать следующее. Если в логической схеме заменить все конъюнкторы на
дизъюнкторы, дизъюнкторы на конъюнкторы, единичные сигналы на нулевые и нулевые
на единичные, то схема будет реализовывать ту же исходную функцию.
Докажем справедливость некоторых тождеств.
Из способов доказательства выберем два. Первый способ заключается в приведении
путем преобразования одной части равенства к другой части. Если это удается
сделать, то тождество можно считать доказанным. Второй способ состоит в
определении кодов функций левой и правой части равенства. Если коды равны, то и
функции равны, что также доказывает справедливость тождества.
ПРИМЕР 5.1
Применение первого способа доказательства
тождества. Первая строка распределительного закона не вызывает сомнений.
Докажем справедливость второй строки:
x yz∨ = ∨(x y x
z)( ∨ ).

Правую часть равенства преобразуем к виду
левой части. Справа будем записывать используемые при преобразовании законы и
правила:
 (x y
x z∨ )(
∨ = ∨ ∨
∨ =) xx xy xz yz
         Раскрываем
скобки: x x x⋅   =          .

 x xy
xz yz∨ ∨ ∨ =
Выносим x за скобки.
 x(1∨ y
z∨ )∨ yz =
Используем x∨ =1 1 и x⋅ =1 x.
 Результат преобразований: x yz∨ .
Справедливость тождества доказана.
ПРИМЕР 5.2
Применение второго способа доказательства
тождества. Докажем справедливость правила де Моргана. Словами его можно
сформулировать так: 1) инверсия конъюнкции равна дизъюнкции инверсий и 2)
инверсия дизъюнкции равна конъюнкции инверсий. Докажем первую часть правила:

                                                                              x
y x y⋅     =           ∨             .

Для доказательства используем табл. 5.8,
строки которой соответствуют наборам значений аргументов x и y .
Таблица 5.8. Доказательство тождества

x

y

 ∨

0

0

              0 0 0 1⋅    =                   =

0 0 1 1 1∨ = ∨ =

0

1

             0 1 0 1⋅ = =

0 1 1 0 1∨ = ∨ =

1

0

              1 0 0 1⋅   = =

1 0 0 1 1∨ = ∨ =

1

1

             11 1 0⋅ =  =

1 1 0 0 0∨ = ∨ =

Подставляя значения аргументов в формулы
левой и правой частей равенства, вычисляем значения функций. В итоге получили,
что коды обеих функций совпали. Тождество доказано.
Выполненный пример показывает возможность
перехода от записи функции формулой к записи ее в таблице истинности. Для этого
достаточно, подставляя в формулу функции все наборы значений аргументов,
определить значение функции на этих наборах — получить код функции.
Правила преобразования формул
Кроме перечисленных выше законов, для
преобразования и упрощения формул булевых функций используются тождества,
получившие название правил или операций. Перечислим их.
Правило отрицания

                                                      f
x y( , ,...,z)           f x y( , ,...,z)      .
Правило утверждает, что для получения
отрицания некоторого выражения достаточно заменить в нем знаки дизъюнкции
знаками конъюнкции, знаки конъюнкции знаками дизъюнкции, а все аргументы — их
отрицаниями. Если в выражении имеются константы 0 и 1, то их также нужно
заменить противоположными значениями.
ПРИМЕР 5.3
∨ x ));
x x x1 ∨
2 3 ∨ 0 = x x1 ⋅( 2 ∨ x3)
1⋅ .

Правило свертки
х
ху х у∨ = ∨ ;

х х у( ∨
=) ху.

Правило обобщенного склеивания
(теорема русского математика П. С.
Порецкого)

xy yz xz xy yz∨ ∨ = ∨ ;

                                                    (x
y y z x z∨ )(
∨ )( ∨ = ∨) (x y
y z)( ∨ ).
Справедливость тождеств можно доказать
показанными выше способами.

Задания для самостоятельной работы
Применяя законы и правила преобразования
формул булевой алгебры, упростить выражения. В целях подготовки к решению задач
по булевой алгебре и алгебре логики на ЕГЭ (Едином государственном экзамене)
перед преобразованием запишите задания с использованием знаков операций
∧, ∨, ¬.
1.
1
2.
2
3.
3
4.
4
5.
f5 = y z⋅
6.
6
7.
7
8.
f8 = (x y⋅      ∨ z)⋅ y ∨ z .
Доказать тождества:

1.
x xy x y∨ =
∨ .
2.
x
y xy xy xy∨ =
∨ ∨ .
3.
xy xz yz xy yz∨
∨ = ∨ .
4.
x↔ = →y
(x               y y)( →x)
.
При
проверке справедливости тождеств и упрощении формул функции полезно
использовать логическое умножение на единицу — x y y⋅( ∨ ) , добавление
в формулу уже имеющегося члена — x x x= ∨ или x x x= ⋅ и логическое сложение с нулем —
x∨ y y⋅ . Все три приема не нарушают истинность функции. Покажем
применение первых двух приемов при доказательстве тождества 2.
ПРИМЕР 5.4

x
y x y y∨ = (
∨ ∨)
y x x( ∨ = ∨
∨ ∨ = ∨ ∨) xy xy xy xy xy xy xy;

xy
xy xy xy xy xy xy x y y∨
∨ = ∨ ∨ ∨ = ( ∨ ∨) y x x( ∨ = ∨) x y.

5.3.
Канонические формы булевых функций
Совершенная
дизъюнктивная нормальная форма
Одна и та же функция может быть задана
множеством различных формул. Поэтому функции трудно сравнивать. Канонические
формы функций — это запись функций по единым правилам. Такие формы еще называют
совершенными. Различают дизъюнктивную и конъюнктивную совершенные нормальные
формы. Сначала рассмотрим дизъюнктивную форму.
Элементарной конъюнкцией называют
логическое произведение отрицаемых или неотрицаемых аргументов.
Правильной элементарной конъюнкцией
называют такую, в которой каждый аргумент входит не более одного раза.
Вырожденной элементарной конъюнкцией
называют такую, которая состоит из одного аргумента.
Примеры правильных
элементарных конъюнкций: x , xz , xyz .
Дизъюнктивной нормальной формой (ДНФ)
булевой функции называют дизъюнкцию правильных элементарных конъюнкций
(логическую сумму логических произведений). Формула функции в ДНФ не имеет
скобок и общих для нескольких аргументов отрицаний.
Пример ДНФ функции: f x y z(
, , ) = f x y z( , , ) = x ∨ yz ∨ xz ∨ xyz .
Конституентой единицы называют полную (все
аргументы) правильную элементарную конъюнкцию отрицаемых или неотрицаемых
аргументов. Обозначают ее — K(а), где а — номер того единственного набора, на
котором K(а) = 1.
Пример: K(5) = xyz . K(5) равна 1 только на 5-м наборе значений
аргументов (101).
Совершенной дизъюнктивной
нормальной формой (СДНФ) функции называют дизъюнкцию конституент единицы,
равных единице на тех же наборах, что и функция.
Таблица 5.9. Примеры функций трех
аргументов

а

x

y

z

f(x, y, z)

v(x, y, z)

w(x, y, z)

0

0

0

0

0

1

0

1

0

0

1

1

0

1

2

0

1

0

1

0

0

3

0

1

1

0

0

1

4

1

0

0

1

1

0

5

1

0

1

0

0

1

6

1

1

0

0

1

1

7

1

1

1

1

0

0

Пусть заданы три булевы функции 3-х
аргументов с помощью таблицы истинности (табл. 5.9). Функции v(x, y, z) и w(x,
y, z) используем для следующих построений.
ПРИМЕР 5.5. Переход от таблицы истинности
функции к СДНФ
По определению СДНФ функцию f(x, y, z) (см.
табл. 5.9) запишем в виде дизъюнкции конституент единицы:
f(x,
y, z) = K(1, 2, 4, 7) = K(1) ∨ K(2) ∨ K(4) ∨ K(7).
Далее переход можно выполнить так:
1.
Записать дизъюнкцию полных конъюнкций по числу единиц в коде функции (в
примере — 4 единицы):
xyz ∨ xyz
∨ xyz ∨ xyz = .
2.
Подписать под ними наборы, на которых функция равна единице:
001
010 100 111.
3.
И поставить отрицания аргументов, соответствующих нулям в этих наборах:

                                                                     x
yz x yz xyz xyz∨        ∨             ∨             .

В результате получена формула функции f(x,
y, z), записанная в СДНФ.
ПРИМЕР 5.6. Переход от СДНФ функции к
таблице истинности
При переходе от СДНФ к таблице истинности
требуется выполнить следующее. Для каждой конституенты единицы в записи функции
определить тот единственный набор значений аргументов, на котором эта
конституента равна единице. В таблице истинности в коде функции в
соответствующих этим наборам строках записать единицы. В остальных строках кода
записать нули.

Задана СДНФ функции v x y z( , , ) =xyz xyz
xyz∨ ∨ . Записать функцию в таблицу истинности.
v x y z( , , ) =
xyz ∨xyz ∨xyz = K(0) ∨K(4) ∨K(6) = K(0, 4, 6).

                                             000     100      110
Функция v(x, y, z) записана в табл. 5.9.
Она принимает значение 1 на наборах с номерами 0, 4 и 6. На остальных наборах
функция равна 0.
ПРИМЕР 5.7. Переход от ДНФ к СДНФ
При переходе от ДНФ к СДНФ используют
умножение неполных конъюнкций на выражения в скобках вида (x x∨ =) 1, которые
содержат отсутствующие в конъюнкциях аргументы. Умножение на единицу не
искажает значение функции.
Пусть задана функция в ДНФ:
s(x y z, , ) =x xz xyz∨ ∨ . Получим ее запись в СДНФ:
                                                            s
x y z( , , ) =x
xz xyz∨ ∨  = .

Умножаем на выражения в скобках (добавляем
отсутствующие аргументы):

                                                  x
y y z z( ∨ )(
∨ ∨)
x y y z xyz( ∨ )
∨   =.
Раскрываем скобки:
                                                        xyz
xyz xyz xyz xyz xyz xyz∨     ∨           ∨          ∨             ∨             ∨             =.

Применяем правило x x x∨ = (две равные
конъюнкции подчеркнуты):
                                                              xyz
xyz xyz xyz xyz xyz∨ ∨         ∨  ∨             ∨             .

Получили запись функции в СДНФ. Заданная
функция в таблице истинности имеет 6 единиц на наборах 7, 6, 5, 4, 3 и 1. Можно
записать:
s x y z( , , )
=K(1)∨K(3)∨K(4)∨K(5)∨K(6)∨K(7) =K(1,3, 4,5, 6,
7).
ПРИМЕР 5.8. Переход от произвольной
формы к СДНФ  и таблице истинности
Такой переход можно сделать, выполнив
следующие действия:
1.
При наличии общих отрицаний для нескольких переменных используем правило
де Моргана, опускаем отрицания на переменные. При наличии двойных отрицаний
убираем их:

w   x
y z( , , ) =xyz
xy z∨ ∨ =
∨(x y z xyz) ∨ = (x y z xyz∨ ) ∨ .
2.
Раскрываем все скобки и добавляем недостающие переменные умножением
членов полученной ДНФ на скобки, равные единице:
w   x y
z( , , ) =xy
yz xyz x y y z∨
∨               = ( ∨ ) ∨ ∨(x x yz xyz) ∨  .
3.
Раскрываем скобки и оставляем в формуле только по одной из повторяющихся
конституент (используем правило x ∨ x = x).
В результате получим СДНФ функции:
w(x, y,z) =xyz∨ xyz∨ xyz∨xyz∨ xyz =xyz∨xyz∨ xyz∨ xyz.
4.
Осталось определить номера наборов, на которых полученные конституенты
единицы равны единице. Это соответственно наборы: 011, 001, 101 и 110 (наборы
3, 1, 5 и 6). Записываем в таблице истинности на этих наборах значение функции
1, на остальных наборах 0. Функция w(x, y,
z) записана в
табл. 5.9.
Задания
для самостоятельной работы
Задания выполнять в двух вариантах записи
знаков операций в формулах функций.
Заданные в ДНФ формулы функций дополнить до
СДНФ.
1.     t x y1(
, ) =¬y = y.
2.
t2(x y, ) =¬ ∨ = ∨x      y             x             y.
3.
t3(x
y z, , ) =¬ ∧
∨ ∧¬ = ∨y      z              x             z              yz            xz.

4.     t4(x
y z, , ) =¬ ∧¬
∨ ∧ ∧ = ∨x  y             x             y             z              x
y          xyz.

5.
t5(x y z, , ) = z ∨ ∧ ∨¬ ∧ ∧¬ =
∨ ∨x      y             x             y              z              z              xy           xyz.

6.
t6(x y z, , ) = x ∨ ∨y   z.
7.
t
a b c d7( , , , ) = a
∧ ∨ ∧¬ ∨¬ ∧¬ ∧ ∧¬ = ∨ ∨c b             c              a             b             c              d             ac            bc           abcd.

8.
t
a b c d8( , , , ) =
a∨ ∧ ∨¬ ∧¬ ∧ = ∨ ∨b              c              b             c              d             a             bc           bcd.

Заданы функции в
СДНФ. Записать их в таблицы истинности. s x y z1( , , ) = xyz
∨ x yz. s x y z2( , , ) = xyz ∨xyz.
3
5
7
8. s x y z8( , , ) = xyz
∨ x yz ∨ xyz ∨ x yz ∨ xyz.
Произвольную форму задания функции
преобразовать в ДНФ — дизъюнкцию конъюнкций, в каждой из которых нет одинаковых
переменных и нет общих для нескольких переменных отрицаний.
1.
u x y z1( , , ) =
¬ ¬ ¬ ∧( ( y z) ∧¬ ∨ ¬ ∨ ¬x          y             z))∨
¬ ∧x z yz x y z=         (              ∨             ∨             )∨
xz .
2.
u
x y z2( , , ) = ¬(x
y∨ )∨ ¬ ¬( (x y z∧    ∧ ) ∧(x ∨ ¬z)) = x y
x y z x z∨        ∨             ⋅              ⋅              ⋅(
∨         ).
3.
u x y z3( , , ) =¬¬ ∧ ¬ ∨ ∨¬ ∨¬( y ( x
z))               (x            z) = y x z( ∨ ∨ ∨) x z.
4.
u x y z4( , , ) =¬ ¬ ∨¬ ∧ ∨¬ ∧ ∨ = ∨((
x y)            (y            z)            (x z))      (x y y z x z)( ∨
)( ∨ ).
5.
u a b c d5( , , , ) =a∨¬ ¬ ∨¬ ∧ ∨ ∨(( b  d)           (b
c d)) =a b d b c d∨
∨( )( ∨ ∨ ).
6.
u a b c d6( , , , ) = (abd bd c∨ ) ∨ ∨(a b
a c)( ∨ ).
7.
u
a b c d7( , , , ) =c a bc d∨ ( ∨ ∨ ∨)    (a c a c)(
∨ ).
8.
u a b c d8( , , ,
) = (bc ad cd ac∨
∨ ) ∨ (ab abc d∨         ) .
Совершенная конъюнктивная нормальная форма
Элементарной дизъюнкцией называют
логическую сумму отрицаемых или не отрицаемых аргументов.
Правильной элементарной дизъюнкцией
называют такую, в которой каждый  аргумент входит не более одного раза.
Вырожденной элементарной дизъюнкцией
называют такую, которая состоит из одного аргумента.

Примеры правильных элементарных дизъюнкций:
x x z x y z, ∨ , ∨ ∨ .
Конъюнктивной нормальной формой (КНФ)
булевой функции называют конъюнкцию правильных элементарных дизъюнкций
(логическое произведение  логических сумм). Формула функции в КНФ не имеет
общих для нескольких аргументов отрицаний.
Пример КНФ функции:
F(x, y, z) = x y z x z x y z( ∨ )( ∨ )( ∨ ∨ ).
Конституентой нуля называют полную (все
аргументы) правильную элементарную дизъюнкцию отрицаемых или неотрицаемых
аргументов. Обозначают — R(а), где а — номер того единственного набора, на
котором R(а) = 0.
Пример: R(5) = (x y z∨
∨ ). R(5) равна 0 только на 5-м наборе значений аргументов (101).
Совершенной конъюнктивной нормальной формой
(СКНФ) функции называют конъюнкцию конституент нуля, равных нулю на тех же
наборах, что и функция.
ПРИМЕР 5.9. Переход от таблицы истинности
функции к СКНФ
В табл. 5.10 задана та же булева функция
3-х аргументов f(x, y, z), что и в табл. 5.9. Запишем эту функцию в СКНФ.

Таблица 5.10. Примеры функций трех аргументов

а

x

y

z

f(x, y, z)

u(x, y, z)

0

0

0

0

0

0

1

0

0

1

1

1

2

0

1

0

1

0

3

0

1

1

0

1

4

1

0

0

1

1

5

1

0

1

0

1

6

1

1

0

0

0

7

1

1

1

1

1

По определению СКНФ функции представляет
собой конъюнкцию конституент нуля для наборов, на которых функция равна 0.
Для перехода от таблицы к формуле функции в
СКНФ можно использовать следующее правило:
f(x,
y, z) = R(0, 3, 5, 6) = R(0) ∨ R(3) ∨ R(5) ∨ R(6).
1.
Записать конъюнкцию полных дизъюнкций по числу нулей в коде функции (в
примере — 4 нуля):
                                         (x
y z x y z x y z x y z∨
∨ )( ∨
∨ )( ∨
∨ )( ∨
∨ =) .
2.
Подписать под ними наборы, на которых функция равна нулю:
000
011  101  110.
3.
Поставить отрицания аргументов, соответствующих единицам в этих на-
борах:
(x
y z x y z x y z x y z∨
∨ )( ∨
∨ )( ∨
∨ )( ∨
∨ ).
Если подставлять в полученную формулу
функции последовательно все наборы значений аргументов x, y и z, то на наборах
000, 011, 101 и 110 функция будет равна нулю, т. к. становится равным нулю один
из соответствующих членов конъюнкции.
ПРИМЕР 5.10.
Переход от произвольной формы  к СКНФ и таблице истинности

Пусть задана функция трех аргументов u x y
z( , , ) =x y z∨ ∨ . Выполним следующие преобразования. Сначала
получим ДНФ функции, ДНФ преобразуем в КНФ, от КНФ перейдем к СКНФ и от СКНФ
перейдем к таблице истинности.
                              u
x y z( , , ) = x y z xy z∨ ∨    =         ∨             =
                                             =
(x z y z∨ )( ∨ ) =

                                                         =
(x y z x y z x y z∨ ∨ )( ∨                 ∨ )(              ∨             ∨
) = R(0)⋅R(2)⋅R(6).
                                                000               010              110
При преобразованиях формулы
функции u(x, y, z) использованы: закон де Моргана — a b ab∨ = , второй
распределительный закон — ab c∨ = ∨(a c b c)( ∨ ),
а также тождества a a⋅ = 0 и a a a⋅ = . В результате получили
СКНФ функции u(x, y, z), состоящую из трех конституент нуля: R(0), R(2) и R(6).
Функция равна нулю на наборах 000, 010 и 110. На остальных пяти наборах функция
u(x, y, z) равна единице.
Код функции u(x, y, z) записан в таблице
истинности — табл. 5.10.
ПРИМЕР 5.11
В таблице истинности двух аргументов (табл.
5.11) записаны пять функций:  F1, F2, F3, F4 и F5.
Таблица 5.11. Функции к примеру

X

Y

F1 = XY

F2 = X ∨ Y

F3 = X→Y

F4 = Y→X

F5 = X↔Y

0

0

0

0

1

1

1

0

1

0

1

1

0

0

1

0

0

1

0

1

0

1

1

1

1

1

1

1

Записать эти функции в СДНФ и СКНФ.

F1СДНФ =XY
F;             1СКНФ = (X Y X Y X Y∨ )( ∨ )( ∨ ).

F2СДНФ =XY
XY XY F∨      ∨ ;              2СКНФ =X Y∨ .
F3СДНФ =XY XY XY
F∨      ∨ ;              3СКНФ =X Y∨ .
F4СДНФ =XY XY XY
F∨       ∨ ;               4СКНФ =X Y∨ .
F5СДНФ =XY XY
F∨ ;                 5СКНФ = (X Y X Y∨ )( ∨ ).
Как видно из табл. 5.11 и
записи формул функций, это функции: конъюнкция, дизъюнкция, две импликации (от
X к Y и от Y к X) и эквивалентность (равнозначность).
Для каждой функции справедливо равенство ее
СДНФ и СКНФ, т. е.
FСДНФ =FСКНФ . Докажем это, например,
для функции F1. Для доказательства будем использовать первый способ — путем
тождественных преобразований приводить одну часть равенства к другой его части.
Приведем формулу функции в СДНФ к формуле этой функции в СКНФ.
F1СДНФ =XY
X YY Y XX= ( ∨)( ∨

                                          =
(X∨Y X
Y Y X Y X)( ∨ )( ∨ )( ∨ = ∨) (X Y X Y X Y)( ∨ )(
∨ ).
Утверждение о равенстве СДНФ и СКНФ функции
доказано. В преобразованиях использованы следующие законы и правила (назовите
их):

           X
X= ∨ 0;                                       0
=YY X YY X Y X Y Y X X Y XX X;                             ∨             = ( ∨ )( ∨
);          ∨ = ∨ ;   = .
Докажите равенство совершенных форм для
остальных функций из табл. 5.11.
Основные соотношения
1.
Количество различных наборов в таблице истинности (ТИ) для функций n
аргументов Kн =
2 .n
2.
Количество различных функций n аргументов Kф = 2Kн = 2 .2n
3.
Запись конституенты единицы ( K( )i ) и конституенты нуля ( R i( ) ) на
наборах. Правило простое. При записи конституенты единицы K(i) любим в наборах
единицы и не любим (отрицаем) нули, при записи конституенты нуля R(i) любим в
наборах нули и отрицаем единицы (табл. 5.12).
Таблица 5.12. Запись конституент
единицы и нуля на наборах

№ набора i

Наборы

K(i)

R(i)

0

000

K(0)= x y z

R(0) =x y z∨ ∨

1

001

K(1)= x y z

R(1)= x y z∨ ∨

Таблица 5.12 (окончание)

№ набора i

Наборы

K(i)

R(i)

2

010

K(2)= x y z

R(2)= x y z∨ ∨

...

...

...

7

111

K(7)= x y z

R(7)= x y z∨ ∨

4.
Суммарное количество K( )i и R i( ) булевой функции равно Kн. Если
известны номера наборов, на которых функция равна 1, то на остальных наборах
функция равна нулю. Например, если получены для функции F(x, y, z) ее
конституенты единицы K(3, 5, 6), то можем записать для F(x, y, z) ее
конституенты нуля — R(0, 1, 2, 4, 7).
5.
Для
каждой булевой функции F справедливо равенство FСДНФ =FСКНФ .
Например, для конъюнкции имеем: x y⋅ = (x ∨ y) (⋅ x ∨ y) (⋅ x
∨ y).
6.
Инверсия заданной функции F(x, y) приводит к получению функции, обратной
к заданной. Обратная функция имеет в таблице истинности на каждом наборе
значения противоположные значениям заданной функции. Например, если код
дизъюнкции F(x y, ) = x ∨ y равен 0111, то код инверсии дизъюнк-

ции F(x y, ) =xy равен 1000.
7.
Конституенты единицы и нуля одного и того же набора относятся друг к
дру-

гу как обратные функции, т. е. K( )i = R i( ). Например, K(0)
= x y z⋅ ⋅ =
=x y z R∨ ∨ = (0)
и так по всем номерам наборов.
Булева алгебра и ЕГЭ
В разделе показаны варианты постановки
задач по алгебре логики в демонстрационных вариантах ЕГЭ за 2004—2010 гг. и их
решения.
ЗАДАНИЕ 5.1
Какое логическое выражение
равносильно выражению (А∨В)
?
Варианты
ответа: 1) A∨ B;        2)
A B⋅ ;     3)
A B∨ ;     4)
A B⋅ .
ЗАДАНИЕ 5.2
Символом F обозначено одно из указанных
ниже логических выражений от трех аргументов: X, Y, Z.
Дан фрагмент таблицы истинности выражения
F:

X

Y

Z

F

0

0

0

1

0

0

1

0

0

1

0

1

Какое выражение соответствует F?

Варианты
ответа: 1) X Y Z⋅ ⋅    ;       2) X ∨Y ∨ Z;        3) X
∨Y ∨ Z;        4) X ∨Y ∨ Z.
ЗАДАНИЕ 5.3
Укажите значения переменных K, L, M, N, при
которых логическое выражение

(K∨ → ∨ ∨M) (L M N)
ложно. Ответ запишите в виде строки из четырех символов: значений переменных K,
L, М и N (в указанном порядке). Так, например, строка 1101 соответствует тому,
что K = 1, L = 1, М = 0, N = 1.

ЗАДАНИЕ 5.4
Для какого числа X высказывание X > 1
∧ ((X < 5) → (X < 3)) принимает значение "истина"?
Варианты ответа: 1) 1;  2) 2;  3) 3;  4) 4.

ЗАДАНИЕ 5.5
Символом F обозначено одно из указанных
ниже логических выражений от трех аргументов: X, Y, Z. Дан фрагмент таблицы
истинности выражения F:

X

Y

Z

F

0

0

0

1

0

0

1

0

0

1

0

0

Чему равно F?
Варианты ответа:

1) X Y
Z⋅ ⋅   ;             2) X ∨Y ∨ Z;

                                                                       3)
X Y Z⋅  ⋅                      ;
 4) X Y Z⋅          ⋅              .

ЗАДАНИЕ 5.6
Сколько различных решений имеет уравнение
(K
∧ L ∧ M) ∨ (¬L ∧ ¬M ∧ N) = 1,
где K, L, M, N — логические переменные?
В ответе не нужно перечислять все различные
наборы значений K, L, M и N, при которых выполнено данное равенство. В качестве
ответа вам нужно указать только количество таких наборов.

ЗАДАНИЕ 5.7
Для какого из указанных значений числа X
истинно высказывание:
(X
> 4) ∨ ((X > 1) → (X > 4))?
Варианты ответа: 1) 1;  2) 2;  3) 3;  4) 4.

ЗАДАНИЕ 5.8
Символом F обозначено одно из указанных
ниже логических выражений от трех аргументов: X, Y, Z.
Дан фрагмент таблицы истинности выражения
F:

X

Y

Z

F

0

0

0

0

1

1

0

1

1

0

1

1

Какое выражение из указанных далее
соответствует F?
Варианты ответа:
1) ¬
∧¬ ∨X   Y Z;            2) ¬X ∧Y ∧¬Z;           3) X
∨Y ∨ Z;         4) X Y Z∧ ∧ .

ЗАДАНИЕ 5.9
Для какого из перечисленных далее имен
следующее высказывание примет истинное значение:
¬
(Первая буква согласная → Третья буква гласная)?
Варианты ответа: 1) Егор;  2) Николай;  3)
Юрий;  4) Григорий.
ЗАДАНИЕ 5.10
Символом F обозначено одно из указанных
далее логических выражений от трех аргументов: X, Y, Z. Дан фрагмент таблицы
истинности выражения F:

X

Y

Z

F

1

0

0

0

0

0

1

1

0

1

0

0

Варианты ответа:
1) ¬ ∧¬ ∧X   Y Z;            2)
X ∧¬Y ∧ Z;               3) X∨¬ ∨¬Y    Z;            4)¬
∨¬ ∨X Y Z.
ЗАДАНИЕ 5.11
Для какого из заданных значений переменной
х будет истинным следующее высказывание:
((х
> 2) ∨ (x > 5)) → (x < 3)?
Варианты ответа: 1) 5;  2) 4;  3) 3;  4) 2.

ЗАДАНИЕ 5.12
Укажите значения логических переменных K,
L, M, N, при которых логическое выражение
(K ∨ M) → (M ∨ ¬L ∨ N)
ложно.
Ответ запишите в виде строки из четырех
символов: значений переменных K, L, M и N (в указанном порядке). Так, например,
строка 0101 соответствует тому, что K = 0, L = 1, M = 0, N = 1.

ЗАДАНИЕ 5.13
Сколько различных решений имеет уравнение
(A
∨ B) ⋅ (C ∨ D) = 0,
где A, B, C и D являются логическими
переменными?

ЗАДАНИЕ 5.14
Приведенное логическое условие
¬
(на небе тучи → идет дождь) ∧ ¬ (холодно)
соответствует погоде:
1.
На небе тучи, идет дождь, холодно.
2.
На небе нет туч, не идет дождь, холодно.
3.
На небе тучи, не идет дождь, не холодно.
4.
На небе тучи, идет дождь, не холодно.

ЗАДАНИЕ 5.15
Логическому выражению
¬ (¬А ∧ ¬В) ∨
А ∧ С
равносильно выражение:
1) (¬А ∧ ¬В) ∨ ¬(А ∧ С);
2) А ∧ В ∨ С;  3) А ∨ В.

ГЛАВА 6

Функциональные элементы компьютеров
6.1. Построение логических схем.  Общие сведения
Логические схемы (ЛС) строятся из логических
элементов в соответствии со структурными формулами функций, которые эти схемы
реализуют. Переход от алгоритма работы к ЛС выполняется в такой
последовательности:
задача
— алгоритм — таблица истинности — формулы функций —  логическая схема.
В схемах компьютера на входах и выходах
логических элементов действуют электрические сигналы. Этими сигналами
кодируются логические значения 0 и 1. Например, за 0 принимают сигнал
напряжением 0 вольт (0 В), за 1 принимают сигнал напряжением +3 В. Элемент НЕ
(инвертор) при таком кодировании работает так: если на входе 0 В, то на выходе
+3 В, если на входе +3 В, то на выходе 0 В.
Замечательно то, что за логические значения
0 и 1 можно принимать значения 0 и 1 чисел в двоичной системе счисления и
строить ЛС, выполняющие различные операции над двоичными числами.
Сложность ЛС оценивается обычно суммарным
числом входов элементов, из которых построена схема. Чем меньше число входов,
тем дешевле схема, тем выше ее надежность. Важным параметром ЛС также служит ее
глубина — количество элементов от входов ЛС до ее выходов. От глубины схемы
зависит ее быстродействие. Например, показанная на рис. 6.1 схема имеет
суммарное число входов 8 и глубину 3.
Так как сложность ЛС существенно зависит от
сложности формул, то важным при построении ЛС этапом выступает этап минимизации
сложности формул.
Переход
от схемы к формуле функции
Переход от логической схемы (ЛС),
построенной из логических элементов (ЛЭ), к формуле булевой функции требует
знания булевых функций, реализуемых ЛЭ. Начиная от входов ЛС, используя принцип
суперпозиции (подстановки функций в качестве аргументов в другие функции),
получаем на выходе функцию, реализуемую всей ЛС.

Рис. 6.1.
Переход от логической схемы к формуле функции

Выполнив этот переход для ЛС, показанной на
рис. 6.1, получим следующую функцию (6.1):

                                                                        W
XYZ XY Z=   ∨                                                               ∨
.  (6.1)
Запишем формулу функции в ДНФ и немного ее
упростим:

                                             W
XYZ XY Z X Y Z XYZ XZ YZ XYZ XYZ XYZ=    ∨       ∨ = ∨(    )
∨            =             ∨
∨         =             ∨                                                                                .

Минимизация сложности формул
Сложность формул булевых функций влияет на
сложность реализующих эти формулы логических схем. Сложность формул
оценивается, например, по количеству входящих в нее букв — символов переменных.
Минимальные по сложности формулы ищутся, как правило, среди ДНФ и КНФ. Из
множества методов минимизации сложности формул булевых функций рассмотрим
простейший — метод таблиц Вейча.
Метод основан на представлении таблицы
истинности в таком виде, в котором склеивающиеся конституенты располагаются в
соседних клетках (рис. 6.2). Напомним, что склеиваются конъюнкции,
различающиеся инверсией только одного аргумента:
                                            xy
xy x∨ = , xyz
xyz xy∨    = , abcd
abcd acd∨       =
и т. п.
Склеивающиеся конституенты (единицы) в
таблицах Вейча разделяет линия, которая определяет, по какой переменной
выполняется склеивание. При этом в таблице трех аргументов соседними также
являются и крайние (левые и правые) клетки, а в таблице четырех аргументов как
левые и правые, так и верхние и нижние.

y

x

x

11
    xy

01

x y

y

10 xy

00

xy

Рис. 6.2.
Таблицы Вейча двух, трех и четырех аргументов
После записи в таблицу кода функции
начинается процесс объединения склеивающихся единиц. Каждая единица может
объединяться с соседними единицами многократно. Желательно начинать объединение
с наибольшего числа единиц, образующих линию, квадрат, прямоугольник. При этом
число объединяемых единиц должно быть равно степени числа 2 (2, 4, 8, 16).
Следует учитывать, что начальное объединение наибольшего числа единиц может
привести к появлению в результате лишнего члена (см. на рис. 6.3 функцию f3
и на рис. 6.4 функцию f6 ).
На рис. 6.3 показаны варианты минимизации
сложности формул функции двух аргументов и трех функций трех аргументов.
Функция f1 имеет в коде функции три единицы и один нуль. Эта функция
— дизъюнкция. Функция f2 в следующем разделе будет получена при
построении двоичного сумматора как функция переноса. Уменьшение сложности этой
функции сокращает число необходимых для построения сумматора логических
элементов. Функцию f4 можно было не упрощать, а выписать
конституенту нуля (в коде функции один нуль).
На рис. 6.4 показаны варианты минимизации
сложности формул булевых функций четырех аргументов. Первый пример (функция f5
) показывает возможность склеивания четырех единиц по углам таблицы.
Второй пример (функция f6 ) демонстрирует случай, когда начальное
склеивание наибольшего числа единиц (квадрат в центре таблицы) приводит к
появлению лишнего члена x x3 4 .

Рис. 6.3.
Минимизация сложности формул с помощью таблиц Вейча

a

       a                       f6           x1

      x1                                  f7           x1

x1

1

0

1

d d d

x2

0

1

0

0

x4 x4
x4

x2

1

0

1

1

0

0

1

0

0

1

1

1

1

1

1

1

1

1

0

0

x2

1

1

1

0

x2

1

1

1

1

1

1

0

1

0

0

1

0

1

1

0

1

f5
x4 b
x4
x4
                                                                                x3           x3            x3
5
f7 = x3 ∨ x4 ∨
x1x2 ∨ x1x2.

Рис. 6.4.
Минимизация сложности формул с помощью таблиц Вейча
Задания для самостоятельной работы
Заданы функции трех и четырех аргументов.
Минимизировать сложность их формул с помощью таблиц Вейча. Функции задаются
номерами конституент единицы (K) или номерами конституент нуля (M).
1.
f1 1(x x, 2, x3) = K(0, 2, 3, 4, 5, 7)
= M(1, 6).
2.
f2 1(x x, 2, x3) = K(0, 4, 6, 7).
3.
f3 1(x x, 2, x3) = K(0, 2, 3, 4, 5, 6)
= M(1, 7).
4.
f4 1(x x, 2, x3) = K(0, 3, 4, 5, 6).
5.
f5 1(x x, 2, x3) = K(0, 1, 2, 3, 4, 5,
6) = M(7).
6.
f6 1(x x, 2, x3) = K(1, 2, 3, 4, 5, 7)
= M(0, 6).
7.
f7 1(x x, 2, x3, x4) = M(0,
1, 4, 5, 6, 11). 8. f8 1(x x, 2, x3, x4)
= M(2, 7, 10, 14, 15).
9.
f9 1(x x, 2, x3, x4) = K(2,
3, 8, 9, 10, 11, 13).
10.
f10 1(x x, 2, x3, x4) = M(2,
4, 5, 6, 7, 12, 13).
11.
f11 1(x x, 2, x3, x4) = M(2,
5, 9, 14).
12.
f12 1(x x, 2, x3, x4) = M(3,
6, 8, 9).
Пример построения схемы сумматора
Построим двоичный сумматор на три входа. Из
таких сумматоров можно построить многоразрядный сумматор. На входы сумматора
поступают значения А и В одноименных разрядов двух двоичных чисел и перенос Р
из предыдущего, младшего разряда. Схема сумматора вырабатывает сумму S и
перенос Q в следующий разряд многоразрядного сумматора.
Зная двоичную арифметику и используя модель
работы такого сумматора (рис. 6.5, а), заполняем таблицу истинности (табл.
6.1). Условное обозначение сумматора показано на рис. 6.5, б.
Таблица 6.1. Функции суммы и переноса

a

АВР

S

Q

0

000

0

0

1

001

1

0

2

010

1

0

3

011

0

1

4

100

1

0

5

101

0

1

6

110

0

1

7

111

1

1

                                                  а                                                                  б

Рис. 6.5.
Модель сумматора на три входа
Из таблицы истинности
выписываем формулы функций S и Q в виде дизъюнкции конституент единицы. Как
видно из таблицы, каждая формула будет содержать по четыре дизъюнктивных члена
— по числу единиц в кодах функций:

                              S
ABP ABP ABP ABP=                                           ∨      ∨           ∨ ;
Q ABP ABP ABP ABP=    ∨             ∨             ∨                                                  .
Вторую формулу можно упростить. Упрощение
формул уменьшает потребное для их реализации количество логических элементов. В
упрощенном виде формула переноса запишется так: Q AB AP BP= ∨ ∨ .
Упростить формулу переноса легко с помощью таблицы Вейча. Убедиться в
справедливости полученной формулы также можно обратным переходом к СДНФ функции
Q.
Задача минимизации сложности логических
формул была актуальна при построении схем компьютеров первого и второго
поколения, когда стоимость каждого логического элемента была высока.
Еще раз обратим внимание на важный момент
построения логической схемы.  В качестве булевых переменных выступают цифровые
разряды двоичного числа. Пример показывает применение булевой алгебры для
построения всех логических схем компьютера, преобразующего информацию,
представленную в двоичной системе счисления.
Постройте самостоятельно логические схемы,
реализующие полученные формулы работы одноразрядного сумматора на три входа.
6.2. Схемы с
памятью
Триггеры
Самый низкий уровень памяти занимают
элементы, способные находиться только в двух устойчивых состояниях и хранить
значение одной двоичной единицы информации — один бит. Это триггеры (рис. 6.6).
Триггеры строятся соответствующим соединением логических элементов ИЛИ-НЕ (как
показано на рис. 6.6) или аналогичным соединением элементов И-НЕ.

Рис. 6.6.
Схема, условное обозначение и графическая схема переходов триггера
Триггер имеет два входа: R-вход — вход
установки схемы в нулевое состояние,
S-вход — запись единицы, установка в
единичное состояние. При нулевом со-

стоянии триггера на выходе Q нулевой сигнал
(Q=0 ), на
выходе Q — единич-

ный (Q=1). Это прямой и инверсный выходы триггера.
Рассмотрим работу триггера.
Вспомним, что если хотя бы на одном входе элемента ИЛИ-НЕ единичный сигнал (1),
то на его выходе нулевой сигнал (0).

Пусть триггер находится в нулевом
состоянии: R S= = 0,
Q= 0, Q=1. Это устойчивое
состояние обеспечивается обратными связями элементов триггера.
При поступлении на S-вход сигнала S=1 на выходе первого
(нижнего в схеме

на рис. 6.6) элемента сигнал Q=1 меняется на Q=0 . Поэтому на входе
второго

(верхнего) элемента оказываются два сигнала,
равные нулю ( R=0
и Q=0 ), что
приводит к изменению сигнала на прямом выходе триггера с Q=0 на Q=1. Сигнал Q=1 по цепи обратной связи
поступает на вход первого элемента и поддерживает нулевой сигнал на его выходе.
Триггер перешел в единичное устойчивое состояние. Аналогично происходит
переключение триггера в нулевое состояние.
Показанная схема триггера служит основой для
построения более сложных схем элементов памяти и схем с памятью. Триггеры
служат основными элементами памяти быстродействующих запоминающих устройств,
реализованных в интегральном исполнении. С выключением питания содержимое такой
памяти теряется.
Регистры и счетчики
Следующий после триггеров
уровень памяти занимают элементы, способные хранить многоразрядные двоичные
числа. Это регистры и счетчики. Для их по-

Рис. 6.7.
Трехразрядный регистр и его условное обозначение
строения используются триггеры. Так для
построения регистра, способного хранить один байт информации, требуется 8
триггеров. В регистрах хранятся данные, поступающие в процессор для выполнения
с ними различных операций. Регистры и счетчики способны не только хранить, но и
преобразовывать двоичную информацию, например, сдвигать числа, инвертировать их
разряды, подсчитывать количество поступивших на вход сигналов и т. д. На рис.
6.7 показан трехразрядный регистр и его условное обозначение.

6.3. Пример построения сложной схемы
Дешифраторы
Кроме двоичного позиционного кода в системах
автоматики, телемеханики и вычислительной техники используется множество
специальных двоичных кодов. Имеются коды с защитой от искажений при передаче по
каналам связи, коды, управляющие работой различных устройств, и т. п. Среди
кодов широко используется распределительный код. Это многоразрядный двоичный
код, у которого одновременно значение 1 может принимать только один из
разрядов. Обычно распределительный код действует на выходах дешифратора.
Например, дешифратор на 2 входа и четыре выхода преобразует позиционный
двоичный код (00, 01, 10, 11) в распределительный (0001, 0010, 0100, 1000).
Представим себе структуру миниатюрного
запоминающего устройства (ЗУ)  с памятью всего на четыре n-разрядных двоичных
числа. Каждое число записано в своей ячейке. Каждая ячейка имеет свой адрес.
Для чтения числа из ячейки ее адрес поступает в двоичном коде на регистр адреса
RGa. Для преобразования адреса в сигнал чтения служит дешифратор.
Логическая схема такого
дешифратора имеет два входа (a1, a0 — по числу разрядов
кода адреса) и четыре выхода (v0 , v1, v2 , v3
— по числу ячеек памяти).
На входы поступает двоичный код адреса. На
выходе вырабатывается двоичный распределительный код, выбирающий ячейку памяти
с заданным адресом.
Таблица 6.2. Таблица работы
дешифратора на 2 входа

№

а1а0

v0

v1

v2

v3

0

00

1

0

0

0

1

01

0

1

0

0

2

10

0

0

1

0

3

11

0

0

0

1

Из табл. 6.2 работы дешифратора выпишем
формулы функций на его выходах:
                                          v0 = a a1 0,    v1 = a a1
0,    v2 = a a1 0,    v3 = a a1 0.
Схема дешифратора, его условное обозначение
и место при работе с памятью на 4 числа показаны на рис. 6.8.

Рис. 6.8.
Схема и условное обозначение дешифратора
Шифраторы
Шифраторами в информатике обычно называют
логические элементы, преобразующие распределительный код в некоторый другой,
например, в двоичный позиционный, двоично-десятичный и т. п. Шифраторы решают
задачи, обратные тем, что решают дешифраторы.
Рассмотрим принцип построения логической
схемы шифратора, преобразующего десятиразрядный распределительный код в код
подсветки сегментов цифрового индикатора. На рис. 6.9 показаны внешний вид
цифрового индикатора и нумерация его сегментов.

Рис. 6.9.
Принцип работы цифрового индикатора
В табл. 6.3 записан алгоритм
работы шифратора. На рис. 6.10 показана логическая схема шифратора и его
условное обозначение. Шифратор имеет 10 входов и 7 выходов. Строки таблицы и
входы логической схемы шифратора помечены цифрами от 0 до 9. Столбцы таблицы
помечены номерами сегментов. Выходы

Рис. 6.10.
Логическая схема шифратора для семисегментного цифрового индикатора
семи дизъюнкторов схемы шифратора подключены
к соответствующим сегментам цифрового индикатора.
Таблица 6.3. Таблица работы шифратора

1

2

3

4

5

6

7

0

1

1

1

1

1

1

0

1

1

1

0

0

0

0

0

2

1

0

1

1

0

1

1

3

0

0

1

1

1

1

1

4

0

1

0

1

1

0

1

5

0

1

1

0

1

1

1

6

1

1

1

0

1

1

1

7

0

0

1

1

1

0

0

Таблица 6.3 (окончание)

1

2

3

4

5

6

7

8

1

1

1

1

1

1

1

9

0

1

1

1

1

1

1

Каждая семиразрядная строка кода в таблице
состоит из нулей и единиц. Например, строка, соответствующая цифре 1, имеет
единицы в столбцах 1 и 2. Это означает, что для отображения индикатором цифры 1
следует подсветить (или затенить, как в мобильных телефонах) сегменты 1 и 2.
Аналогично отображаются остальные цифры.
6.4. Моделирование логических функций
Некоторые из
рассмотренных выше задач связаны с преобразованиями формул булевых выражений,
вычислением их значений на различных наборах значений аргументов. К таким
задачам можно отнести доказательства справедливости основных законов и тождеств
булевой алгебры, переход от произвольной формулы функции к таблице ее
истинности, определение наборов значений переменных, на которых функция,
например, принимает значение ноль, и многие другие задачи. Заметим, что
подобные тождественные преобразования даже несложных функций вызывают
затруднения, требуют внимательности, связаны с возможными ошибками. В таких
случаях следует привлекать компьютер.
Программа, показанная в листинге 6.1, строит
и заполняет таблицу истинности. Она последовательно вырабатывает все наборы значений
аргументов и вычисляет значения функции на этих наборах. Программа легко
дополняется для генерации наборов 4-х, 5-ти и более аргументов. В рассмотренном
примере программа работает с формулой функции из пункта "Переход от
формулы к СДНФ и таб-
лице истинности":
W XYZ XY Z=           ∨ ∨
.

Sub Таблица_истинности()
  Debug.Print " x"; "  y"; "
z", " w"
  For x = 0 To 1
    For y = 0 To 1       For z = 0 To
1
        w = Not (x And y) And z Or Not (Not (x And y)
Or z)
        Debug.Print x; y; z, w
  Next z, y, x
End Sub
В результате работы программы будет выведена
на экран монитора таблица истинности функции W(x, y, z) — рис. 6.11, которая
была показана в табл. 6.3 и реализована схемой на рис. 6.10.

Рис. 6.11. Таблица
истинности функции W(x, y, z)

При моделировании логических функций
возможно получение в коде функций значений –1 вместо 1 и –2 вместо 0. Это легко
изменить программным путем перед выводом результатов.

Задания для самостоятельной работы
ЗАДАНИЕ 6.1
В таблице истинности заданы четыре булевы
функции f1, f2 , f3 и f4 трех
переменных (табл. 6.4).
Таблица 6.4. Данные к заданию 6.1

a

x1x2x3

f1

f2

f3

f4

0

0 0 0

1

0

1

1

1

0 0 1

0

1

0

1

2

0 1 0

0

0

0

0

3

0 1 1

1

1

0

0

4

1 0 0

1

1

1

1

5

1 0 1

0

0

1

1

6

1 0 1

0

1

1

0

7

1 1 1

1

0

1

1

Для каждой из этих функций выполнить
следующее:
 перейти от таблицы истинности к записи функции в СДНФ и СКНФ;
 используя законы и правила преобразования формул булевых функций,
в частности операции склеивания и поглощения, упростить запись функции
(уменьшить в формуле число вхождений переменных и их отрицаний);
 реализовать полученную запись функции логической схемой на
элементах И, ИЛИ и НЕ.
ЗАДАНИЕ 6.2
Для заданной на рис. 6.12 логической схемы,
реализующей функции 3-х аргументов, выполнить следующие действия:  записать формулу реализуемой
функции;
 перейти от произвольной формы записи формулы функции к записи в
СДНФ и СКНФ;
 перейти от СДНФ функции к записи ее в таблице истинности;
 подать на входы схемы набор значений двоичных переменных, например
101, и проследить значения сигналов на выходах логических элементов и на
выходах логической схемы; сравнить полученные значения со значениями функции на
этом наборе в таблице истинности.

Рис. 6.12.
Логическая схема к заданию 6.2 самостоятельной работы
ЗАДАНИЕ 6.3
Построить ЛС на три входа, которая выдает на
выходе единичный сигнал лишь  в случае появления единичного сигнала только на
одном входе.
ЗАДАНИЕ 6.4
Построить ЛС на три входа, которая выдает на
выходе единичный сигнал только в случае появления на входах четного количества
единиц.
ЗАДАНИЕ 6.5
Построить ЛС на три входа, которая выдает на
выходе единичный сигнал только в случае появления на входах трех единиц или
трех нулей.

ЗАДАНИЕ 6.6
Построить логическую схему для кнопочного
замка, который открывается при нажатии любых двух кнопок из четырех.

ГЛАВА 7

Алгебра логики

7.1. Логические высказывания  и действия с ними
Высказыванием или суждением называют повествовательное
предложение,  в отношении содержания которого можно сказать, что оно истинно
или ложно. В более широком смысле под высказыванием понимается выражение не
только на разговорном языке, например, на языке математическом или алгоритми-
ческом.
Примеры истинных высказываний: "Вода —
жидкость", "10 – 3 = 7" и т. п.
Примеры ложных высказываний: "Кошка —
насекомое", "3 > 4" и т. п.
В качестве примера высказывания, о котором ничего нельзя
сказать о его истинности или ложности, можно привести высказывание "Я
всегда лгу". Если допустить, что оно истинно, то истинно то, что оно
утверждает, следовательно, оно ложно. И наоборот, если оно ложно, то ложно его
утверждение, следовательно, оно истинно.
Высказывание "Река Нева вытекает из Ладожского
озера" всегда истинное. Высказывание "Три больше четырех" всегда
ложное. Такие высказывания — константы.
Истинность или ложность высказываний "Дождь
идет", "Светит солнце" зависит от конкретной ситуации, месте и
времени действия. То же самое можно сказать о высказываниях "х >
5", "x < y". Об их значениях (истина или ложь) можно будет
сказать только тогда, когда по ходу решения задачи переменным х и у будут
присвоены конкретные значения.
При решении задач на компьютере высказывания используются
в качестве условий, истинность или ложность которых определяет дальнейшую
последовательность выполняемых действий. Рассмотрим пример.
Пусть в задаче используются числа x, a, b, с и требуется
выполнить следующее действие. Если x > 0 = истина, то вычислить с = a + b.
Если же х > 0 = ложь, то вычислить с = a — b. Здесь высказывание x > 0
выступает в качестве условия, истинность или ложность которого изменяет ход
решения задачи. Для значений x = 5, a = 10, b = 7 имеем с = a + b = 17. В
случае если x = –2, то получим с = a — b = 3.
Значения "ложь" (False) и "истина"
(True) часто заменяют соответственно словами "нет" и "да"
(есть), буквами Л и И, а также цифрами 0 и 1 (табл. 7.1).  В дальнейшем будем
пользоваться в основном двоичным алфавитом: истина — 1, ложь — 0.
Таблица 7.1. Значения логических переменных

Ложь

False

Нет

Л

0

Истина

True

Да (Есть)

И

1

Уже древними философами была замечена важная роль в
разговорном языке таких логических связок, как "И", "ИЛИ",
отрицания "НЕ" и т. п. Эти связки выступают в качестве логических
операций над высказываниями. Одни операции объединяют простые высказывания в сложные.
Другие изменяют истинность высказываний. При этом истинность сложных
высказываний зависит от истинности или ложности входящих в него простых
высказываний.
7.2. Логические операции и функции
Набор используемых в алгебре операций называют базисом алгебры.
Логические операции определяют соответствующие логические функции. Базис
алгебры логики содержит шесть функций:
 инверсия
(отрицание);
 конъюнкция
(логическое умножение);
 дизъюнкция
(логическое сложение);
 импликация
(операция импликация, следование);
 эквивалентность
(равнозначность);
 сумма
по модулю 2 (неравнозначность, отрицание равнозначности).
Подробное определение перечисленных логических функций с
многочисленными примерами дано в предыдущей главе. Кратко напомним особенности
их  записи и чтения.
Операция отрицание (НЕ) определяет функцию инверсия.
Варианты записи в

булевой алгебре и алгебре логики отрицания переменной Х
следующие: Х
или ¬X. В языках программирования отрицание логической переменной Х записывают так: Not X. Читаются такие записи так: "Не Х",
"Не верно, что Х".
С помощью связки И выполняется операция логическое
умножение, которая определяет функцию конъюнкция. Варианты записи в булевой
алгебре и алгебре логики конъюнкции логических переменных Х и Y следующие: X
& Y, X ⋅ Y, XY и X ∧ Y. На языках программирования запись
следующая: X And Y.
Читаются такие записи так: "X и Y".
С помощью связки ИЛИ выполняется операция логическое
сложение, которая определяет функцию дизъюнкция. Логическая сумма двух
переменных X и Y записывается в булевой алгебре и алгебре логики так: X ∨
Y. На алгоритмическом языке запись функции следующая: X Or Y. Читаются такие записи так: "X или
Y".
Операции импликация (следование) соответствует
одноименная функция импликация. Знак операции импликации — стрелка (→). В
алгебре логики импликация переменных X и Y записывается так: X → Y. В
базисе булевой алгебры функцию

импликации      записывают      такой          формулой:
X Y∨ .          Можно
      записать

X Y X Y→ = ∨ . Такую запись называют
тождеством. Элементы тождества обладают свойством равносильности. На
алгоритмическом языке запись функции импликация следующая: X Imp Y. Читаются эти записи
так: "Импликация от X к Y" или "Если X, то Y". Одно из
полезных свойств импликации следующее:

X Y Y X→ = → .
Операция равнозначность определяет логическую функцию
эквивалентность. В алгебре логики знак операции равнозначность — двойная
стрелка (↔). Функция эквивалентность формулой записывается так: X ↔
Y. В булевой алгебре

функция записывается следующими формулами: XY XY∨
или XY∨¬ ¬X Y . На алгоритмическом языке запись функции следующая: X Eqv Y. Одно из полезных
свойств равнозначности таково: X Y X Y Y X↔ = →( )( → ) .
Логической операции сумма по модулю 2
соответствует функция неравнозначность. Используя функции булевого базиса
(дизъюнкцию, конъюнкцию и ин-

версию), функцию неравнозначность можно записать так: XY
XY∨ . На алгоритмическом языке функция неравнозначность записывается
следующим образом: X Xor Y.

Замечание
о записи формул функций
Не все исторически сложившиеся варианты знаков логических
операций удобны в использовании, не все приводят к простым и наглядным записям
функций. Но с этим приходится мириться, т. к. многие тестовые задания для
обучаемых,  в том числе и задачи из ЕГЭ, содержат самые разнообразные варианты
записи функций.
Например, функция неравнозначность может быть записана в
следующих ва- риантах:
 F1(X Y,           ) = не X и Y или X и не Y;
 F2(X Y,             ) = ¬X
∧ Y ∨ X ∧ ¬Y;
 F3(X Y,             ) = ¬X & Y ∨ X & ¬Y;

 F4(X Y,              ) = XY XY∨     ;
 F5(X Y,                    ) = (Not (X) And Y) Or (X And Not(Y));
 F6(X Y,                  ) = Not X And Y Or X And Not y;
 F7(X Y,             ) = X Xor Y.
Заметим, что это далеко не все варианты записей. Из них
наибольшей простотой и наглядностью обладает запись F4 . Вариант
записи F2 используется в задачах по булевой алгебре и алгебре логики
в ЕГЭ. Предпоследняя строка вариантов записей получена из предыдущей строки
исключением скобок. В них нет необходимости, но они подчеркивали структуру
формулы.
Замечание
об очередности выполнения операций
Очередность выполнения логических операций: Not, And, Or, Xor и Eqv, Imp. Напомним также, что в сложных выражениях
последовательность выполнения операций следующая: арифметические и строковые,
отношения, логические.
Все шесть функций алгебры логики сведены в табл. 7.2.
Таблица.
7.2. Таблица функций алгебры логики

Функции (операции)

Разговорный
  язык

Алгебра
  логики

Булева
  алгебра

Бейсик

Инверсия

Не А

А А¬
,

А А¬
,

Not А

Конъюнкция

А и В

A B AB∧
  , , A B A B&
  , ⋅

A B AB∧ , , A B A
  B& , ⋅

A And B

Дизъюнкция

А или В

A B∨

A B∨

А Or B

Импликация  (следование)

Если А, то В

A B→

А B∨

А Imp B

Эквивалентность (равнозначность)

А тогда и
  только тогда, когда В

A B↔

       АB АB∨

А Eqv B

Отрицание равнозначности (сумма по
  модулю 2)

Или А, или В,
но не вместе

A B↔

AB AB∨

A Xor B

Логику работы логических функций принято задавать и
пояснять таблицами истинности, которые связывают значение функции со значениями
ее аргументов. Таблица 7.3 задает таблицу истинности функции инверсия.
Таблица 7.3. Таблица истинности
инверсии

X

Not (X)

0

1

1

0

В таблицу истинности (табл. 7.4) сведены все функции
алгебры логики. К ним добавлен второй вариант функции импликации — импликация
от Y к X.
Таблица 7.4.
Таблица истинности функций алгебры логики

X

Y

X

XY

X          Y

X→Y

Y→X

X↔Y

X↔Y

0

0

1

0

0

1

1

1

0

0

1

1

0

1

1

0

0

1

1

0

0

0

1

0

1

0

1

1

1

0

1

1

1

1

1

0

7.3. Логические операции  в программировании
Логические операции широко применяются в языках
программирования. При записи программ они используются для записи логических
условий.
Результаты операций отношения (знаки операций: =, <>, >, <, >=, <=) принимают значение "истина" (True), если условие выполняется,
и "ложь" (False),
если условие не выполняется. Отношения можно интерпретировать как простые
высказывания, которые могут быть истинными или ложными.
При работе с отношениями следует учитывать, что, как
правило, имеем дело  с тремя альтернативами: больше (>), меньше (<) и равно (=). Например, если
(Х > 0) = True, то Not (X > 0) = (Х <= 0) = (X < 0) Or (X = 0) =
False.
С помощью логических операций And, Or, Not, Xor, Eqv и Imp из простых отношений можно строить сложные, составные
конструкции и использовать их в ка- честве условий, например, в условных
операторах (If),
операторах цикла (Do...Loop).

Программа, показанная в листинге 7.1, печатает результаты
операций отношения величин чисел a,
b и с (рис. 7.1).

Sub Логика_1() 'Логика_1 Макрос a = 5:
b = 3: c = 1   f1 = a > b                        'f1 = True   f2 = a <
b                        'f2 = False   f3 = a < b Or b > c               'f3
= True   f4 = a > b And Not (b > c)        'f4 = False
  Debug.Print "f1 = "; f1,
"f2 = "; f2, "f3 = "; f3, "f4 = "; f4 End Sub

Рис. 7.1.
Моделирование результатов отношений
ПРИМЕР 7.1
Пусть условие состоит из двух отношений, из которых может
одновременно выполняться только одно. Если эти отношения х = а и y > b, то условие можно записать так:
(x = a) And (y < = b) Or (x <
> a) And (y > b) или так:
((x = a) And Not(y > b)) Or (Not (x = a) And (y >
b))
Последняя запись представляет собой функцию
неравнозначность (сумму по модулю 2). Более компактно это условие записывается
с помощью логического оператора Xor:

(x = a) Xor (y > b)
Заметим, что скобки в формулах примера не обязательны. Но
они часто подчеркивают структуру формул, делают их более наглядными.
ПРИМЕР 7.2
Если условие для отношений из предыдущего примера должно
быть истинным, когда оба отношения истинны или оба отношения ложны, то в этом случае
удобно воспользоваться оператором Eqv (равнозначность):
(x = a) And (y > b) Or Not (x = a) And (y > b)
(x = a) Eqv (y > b)
ПРИМЕР 7.3
Рассмотрим пример использования сложного логического
условия. Пусть требуется табулировать функцию, заданную графиком на рис. 7.2.
Это можно сделать с помощью программы, показанной в листинге 7.2.

Рис. 7.2.
График функции
Листинг 7.2. Табуляция функции,
заданной рис. 7.2 (макрос)
Sub Логика_2() ' Логика_2 Макрос   x =
InputBox("Введите х")   x = Val(x)
  If x < -2 Or x > -1 And x <
1 Or x > 2 Then y = 0 Else y = 1 ' Эту же функцию можно задать так:
'If x > = -2 And x < = -1 Or x > = 1 And x
< = 2 Then y = 1 Else y = 0
  Debug.Print "При х = "; x, "y =
"; y
End Sub
ПРИМЕР 7.4
Заданы не равные нулю длины трех отрезков прямой: a, b, c.
Записать логическое условие проверки: можно ли построить треугольник со
сторонами a, b, c.
Решение
Известно, что всякая сторона треугольника меньше суммы и
больше разности двух других сторон. Поэтому треугольник можно построить, если
истинным является, например, следующее логическое выражение:
(a + b > c) And (a + c > b) And (b + c > a)
Инверсия этого выражения будет принимать значение
"истина" только в случае, если треугольник построить нельзя:
(a + b < = c) Or (a + c < = b) Or (b + c < =
a)
Задания для самостоятельной работы
ЗАДАНИЕ 7.1
Заданы стороны треугольника a, b,
c. Записать логическое
условие проверки:
1.
Является ли треугольник равносторонним.
2.
Является ли треугольник равнобедренным.
3.
Является ли треугольник прямоугольным.
4.
Является ли треугольник тупоугольным.
5.
Является ли треугольник остроугольным.

ЗАДАНИЕ 7.2
Заданы не равные нулю длины четырех отрезков прямой: a, b, c,
d. Записать логическое
условие проверки: могут ли эти отрезки быть сторонами квадрата или ромба?

7.4. Логические операции  над высказываниями
Простые высказывания, в отношении которых можно сказать,
что они истинны или ложны, в алгебре логики играют роль логических переменных.
Простые высказывания с помощью логических операций связываются в сложные
высказывания.
Рассмотрим функции алгебры логики применительно к
конкретным высказываниям. Обозначим высказывания "Дождь идет" буквой
D, "На небе тучи" буквой T. Можно записать: D = "Дождь
идет" и T = "На небе тучи".

Конъюнкция (логическое умножение)
Сложное высказывание "D и T"
понимается в том смысле, что "Дождь идет и на небе тучи". Обозначим
это высказывание буквой A. Используя знаки операций булевой алгебры, можно
записать: A D T= ⋅ .
На языке программирования это запишется так: A = D And T.

Дизъюнкция (логическое сложение)
Сложное высказывание "D или T" читается так:
"Дождь идет или на небе тучи".
Обозначим его буквой B. Можно записать: B = D ∨ T и
B = D Or T.
Инверсия (отрицание)
Одноместную операцию отрицание можно
применить как к простому, так и сложному высказыванию. Высказывание "не
D" читается "Не верно, что дождь

идет" или "Дождь не идет". Это
записывается формулами так: D или Not D.

Если A D T= ⋅ , то под высказыванием "не A" понимается следующее:
"Не верно, что дождь идет и на небе тучи". Соответственно, их можно
записать так:

A =
D T⋅
или Not A = Not (D And T) = Not D
Or Not T. Последнее выражение можно прочитать, например, так:
"Дождь не идет или нет на небе туч". К последнему выражению приводит
применение правила де Моргана (инверсия конъюнкции равна дизъюнкции инверсий).
Импликация (следование)
Операция импликация эквивалентна выражению на разговорном
языке "Если D, то T", где D и T — некоторые высказывания. Допустим,
что D и T — это те же введенные ранее высказывания: D = "Идет дождь"
и T = "На небе тучи". Рассмотрим функцию D → T.
Напомним, что если D = 1, то дождь идет, если же D = 0,
то дождя нет. Аналогично с тучей на небе. В пятом столбце таблицы истинности
(см. табл. 7.4) записано значение функции импликация на всех наборах значений
аргументов. Построчно эту функцию в отношении высказываний D и Т можно
интерпретировать так:
 1-я
строка. 0 → 0 = 1. "Если дождь не идет, то на небе нет тучи" —
высказывание истинно;
 2-я
строка. 0 → 1 = 1. "Если дождь не идет, то на небе тучи" —
высказывание истинно;
 3-я
строка. 1 → 0 = 0. "Если дождь идет, то на небе нет тучи" —
высказывание ложно;
 4-я
строка. 1 → 1 = 1. "Если дождь идет, то на небе тучи" —
высказывание истинно.
Некоторые из строк, например вторая строка, могут вызвать
вопросы. Но следует учитывать, что в алгебрах царствует формальный подход. А в
алгебре логики, предназначенной для формализации богатого различными нюансами
разговорного языка, отразить операциями все смысловые тонкости речи практически
невозможно. Расширение базиса алгебры (набора операций) усложняет ее, что
нежелательно. Но и принятый базис позволяет находить решения сложных логических
задач, которые с помощью содержательных рассуждений, без использования аппарата
алгебры логики, решать трудно.
Эквивалентность (равнозначность)
В принятых ранее обозначениях (D — дождь, T —
тучи) эта функция записывается в булевой алгебре, алгебре логики и на языке
программирования следую-

щими формулами: C D T D T= ⋅ ∨ ⋅ , C D T= ↔
и С = D Eqv T, т. е.
сложное высказывание С истинно в случаях, если простые высказывания D и T оба
истинны или оба ложны. Формулу равнозначности в булевой алгебре можно
прочитать, например, так: "Идет дождь и на небе тучи или не идет дождь и
нет на небе туч".
Неравнозначность (сумма по модулю 2)
Эта функция в отношении дождя и туч может быть записана
формулой так:

D⋅T
D T∨ ⋅ ,
т. е. "Дождь идет и на небе нет туч или дождя нет и на небе тучи" —
или одно, или другое, но не оба. Неравнозначность — инверсия эквивалентности.
На языке программирования неравнозначность записывается так:
С = D Xor T.
7.5. Формализация высказываний
Логические функции и высказывания
Естественный язык не поддается полной формализации ввиду
неоднозначности слов, выражений, множества трудноуловимых оттенков, передающих
эмоциональную сторону высказываний. Поэтому операции в алгебре логики носят
собирательный характер в том смысле, что каждая операция формализует некоторое
количество тождественных или близких по смыслу выражений разговорной речи.
Рассмотрим примеры.
 Конъюнкция:
"А и В", "как А, так и В", "не только А, но и В",
"А вместе с В", "А, несмотря на В", "А, в то время как
В" и т. п.
 Дизъюнкция:
"А или В", "А, или В, или оба" и т. п.
Если встречается связка "либо",
например, "А либо В", то это означает "или А, или В, но не
оба", "только А или только В", что формализуется формулой

           A B
A B⋅                                                                 ∨               ⋅               ,
т. е. операцией Xor,
которая равна инверсии операции Eqv.

 Инверсия:
"не А", "неверно, что А", "А не имеет места".
 Импликация:
следующие выражения записываются формулой А → В: "если А, то
В", "В, если А", "когда А, тогда В", "А только,
если В", "А достаточно для В", "для А необходимо В",
"А только тогда, когда В" и т. п.
Следующие высказывания записываются формулой В → А:
"если В, то А", "А, если В", "А тогда, когда В",
"для А достаточно В" и т. п.
К импликации приводят выражения, содержащие слова
"необходимо" и "достаточно". Например, обозначим А =
"пошел дождь", В = "на небе тучи". Рассмотрим высказывание
"Чтобы пошел дождь, необходимо наличие на небе туч". Левая часть
этого высказывания — посылка, правая — заключение. Правило следующее. Если об
утверждении говорится, что оно необходимо, то это утверждение записывается
справа от знака импликации, в качестве заключения. Формулой это записывается
так: А → В. Эту формулу  можно прочитать: "Для А необходимо В".

Рассмотрим высказывание "Чтобы пошел дождь,
достаточно на небе туч".  В нем говорится, что утверждение является
достаточным условием. Оно записывается слева от знака импликации, формулой В
→ А и читается "В достаточно для А". Можно сделать вывод, что
необходимые условия записываются в качестве заключения справа, а достаточные
условия записываются в формуле слева, в качестве посылки.
При решении задач полезно помнить запись импликации в
булевой алгебре:

                                       A
B A B→ = ∨ ,
                                  B A A B→ = ∨ .
Некоторые выражения разговорного языка по форме
напоминают импликацию, а по содержанию требуют запись в виде конъюнкции.
Например: "Если Петр любитель ходить по гостям, то Павел домосед".
"Если в планиметрии изучают плоские фигуры, то в стереометрии изучают
трехмерные геометрические тела".
 Неравнозначность:
"А или В, но не оба", "А либо В", "либо А, либо
В", либо не А, либо не В".
 Эквивалентность (равнозначность): "А эквивалентно В",
"А тогда и только тогда, когда В", "А необходимо и достаточно
для В". Напомним, что в булевой алгебре, алгебре логики и на языке
программирования эквивалентность (равнозначность) записывается так:

                                              C
A B A B= ⋅                                ∨       ⋅               ,
C A B= ↔ ,   С = A
Eqv B.
В алгебре логики справедливы все законы и правила
преобразования формул булевой алгебры. Напомним, что включение в базис алгебры
логики функций импликация и эквивалентность добавляет несколько полезных
тождеств, например:
A→ = ∨B A B,
А В В А→ = → ,

                                                  (А
↔ В А В В А A B B A А В А В) = (   →   )(    → ) = (        ∨             )(            ∨             )
=          ⋅                                                                                ∨      ⋅      .

Примеры формализации высказываний
ПРИМЕР 7.5
Введем и обозначим несколько простых высказываний:

 A = "Цветок
  ароматный";

 O = " Цветок
  осенний";

 В = "Цветок
  белый";

 P = "Цветок
  полевой";

 С = "Цветок
  синий";

 R = "Цветок
  красный";

 G = "Цветок
  желтый";

 S = "Цветок
  садовый";

 K = "Цветок
  комнатный";

 V = "Цветок
  весенний";

 L = " Цветок
  луковичный";

 W = "Цветок
  крупный";

 M = "Цветок
  красивый";

 Z = "Цветок загадочный".

Пользуясь логическими операциями, составим из этих
высказываний несколько сложных высказываний и запишем их формулами в алгебре
логики и на языке программирования.
 X1 = "Цветок белый и ароматный".
      X B A  ,
X1 = B And A.
 X2 = "Цветок садовый или полевой".
X2 =S P∨ ,  X2 = S Or P.
 X3 = "Цветок, хотя и не садовый, но
крупный и красивый".

           X S
W K3 =                              ⋅ ⋅              ,
X3 = Not S And W And K.
 X4 = "Цветок желтый, весенний или
осенний".
X GV O4 = ( ∨ ),  X4 = G And (V Or O).
 X5 = "Цветок полевой или садовый, но
некрупный и некрасивый".

            X5 = (P S W M∨                                           )⋅       ⋅              ,
X5 = (P Or S) And Not W
And Not M.
 X6 = "Не верно, что
если цветок луковичный, то он полевой или комнатный".

X L6 = → ∨(P K),  X6 = Not (L Imp (P Or K)).

 X7 = "Если цветок весенний, то он
красный и не ароматный".

            X7 =V K A→                                 ⋅           ,
X7 = V Imp (K And Not A).

 X8 = "Цветок осенний и загадочный, если
он комнатный или желтый".
          X8 = (K G∨    ) →O
Z⋅          ,  X8 =
(K Or G) Imp (O And Z).
 X9 = "Если цветок садовый, то он должен быть
крупным и ароматным, и все это только в случае, если цветок не
луковичный".

           X9 = L → (S W A→                                        ⋅       ),
X9 = Not L Imp (S Imp W And A).

 X10 = "Чтобы цветок был осенним,
необходимо, чтобы он был загадочным".
X10 =O Z→ , X10 = O Imp Z.
 X11 = "Чтобы цветок не был крупным,
достаточно, чтобы он был полевым".

X11 =P W→ ,  Х11 = P Imp Not W.
 X12 = "Чтобы цветок был красивым,
необходимо и достаточно, чтобы он был комнатным".
X M K12 = ↔ ,  X12 = M Eqv K.
 X13 = "Чтобы цветок не
был луковичным и был синим, необходимо и достаточно, чтобы он был весенним и не
был полевым".

              X13 = L C V P⋅ ↔                                       ⋅         ,
X13 = Not L And C Eqv V And Not
P.
 X14 = "Цветок ароматный тогда и только
тогда, когда он садовый и желтый".
          X14 = A S G↔                         ⋅ ,
X14 = A Eqv S And G.

Напомним очередность выполнения операций: Not, And, Or, Xor и Eqv, Imp. Для объединения аргументов отдельных функций
вводят скобки (см. например, функцию X8 ). Скобки вводятся в формулы также
с целью изменить эту очередность, т. к. сначала выполняются действия в скобках
(см. функцию X9
). Часто необязательные скобки добавляют, чтобы подчеркнуть структуру
формулы,  сделать ее более наглядной, обозначить последовательность выполнения
опе- раций.

ПРИМЕР 7.6
Рассмотрим решение обратной задачи. Пусть заданы и
обозначены простые высказывания и формулы логических функций, содержащих эти
простые высказывания в качестве логических переменных. Требуется записать заданные
логические формулы словами, содержательными предложениями.
Дано:
Z = "Яблоко зеленое", K = "Яблоко
красное", V = "Яблоко вкусное",
S = "Яблоко сладкое", G =
"Яблоко кислое", W = "Яблоко крупное", L = "Яблоко
мелкое", Т = "Яблоко твердое", М = "Яблоко мягкое".

Y KV=        =
  K And V
1

Y =(M
  Z∨ → =) T (M Or Z)
  Imp T
8

Y Z M=
  ∨ = Z Or M

2

Y KM=      →
  (W V∨          ) = K And
  M Imp W Or V
9

Y WS=      =
  W And S
3

Y Z=
  → →(L T)= Z Imp (L
  Imp T)
10

Y KGV=          =
  K And G And V
4

Y = S
  → K = S Imp K
11

Y SV=         =
  S And Not V
5

Y = K
  → S = K Imp S
12

Y = (Z Or K) And T
6

Y
  =S↔K= S Eqv K
13

Y W=
  →S= Not(W Imp S)
7

Y
  =G↔Z= G Eqv L And Z

14

Решение:
 Y1 = "Яблоко красное и
вкусное";
 Y2 = "Яблоко зеленое или мягкое";
 Y3 = "Яблоко не только
крупное, но и сладкое";
 Y4 = "Яблоко красное, хотя и кислое, но
вкусное";
 Y5 = "Яблоко сладкое, но
невкусное";
 Y6 = "Яблоко зеленое или красное, но
твердое";
 Y7 = "Не верно, что если яблоко крупное,
то оно сладкое";
 Y8 = "Если яблоко мелкое или
зеленое, то оно твердое";
 Y9 = "Яблоко крупное или вкусное, если
оно красное и мягкое";
 Y10 = "Если яблоко мелкое, то оно должно
быть твердым, и все это только в случае, если яблоко зеленое";
 Y11 = "Чтобы яблоко было
сладким, необходимо, чтобы оно было красным";
 Y12 = "Чтобы яблоко было сладким,
достаточно, чтобы оно было красным";
 Y13 = "Чтобы яблоко было
сладким, необходимо и достаточно, чтобы оно было красным";
 Y14 = "Яблоко кислое тогда и только
тогда, когда оно мелкое и зеленое".
Для проверки правильности записей иногда полезно
рассмотреть таблицу истинности записываемых функций. Например, могут вызвать
сомнения функции Y11 и Y12
. Представим их таблицей истинности 7.5.
Рассмотрим функцию Y11 = S → K . Первая
строка говорит о том, что несладкое яблоко может быть не красным. Это
высказывание истинно. Вторая строка указывает на то, что несладкое яблоко может
быть красным. Это высказывание также истинно. Четвертая строка также
соответствует истинному высказыванию: сладкое яблоко должно быть также и
красным. И только третья строка говорит, что не может быть, чтобы сладкое
яблоко не было красным. Необходимо, чтобы оно было красным. Высказывание
"Яблоко сладкое, но не красное" — ложное и противоречит смыслу исходной
формулы: "Если яблоко сладкое,  то оно красное", "Чтобы яблоко
было сладким, необходимо, чтобы оно было красным".
Таблица 7.5. Таблица истинности функций импликация

S

K

S → K

K → S

0

0

1

1

0

1

1

0

1

0

0

1

1

1

1

1

Аналогично рассматривается функция Y12 =K→S
. Она принимает значение 0
(ложь) только на наборе SK= 01, который соответствует тому, что
красное  яблоко оказалось несладким. Чтобы яблоко было сладким, достаточно,
чтобы оно было красным. Но, как видно из таблицы, сладкое яблоко может быть и
не красным. Видим, что требование достаточности менее жесткое, чем требование
необходимости.

Задания для самостоятельной работы
ЗАДАНИЕ 7.3
Задано несколько простых высказываний о погоде. Из них
составлены сложные высказывания. Записать эти высказывания формулами алгебры
логики и на языке программирования.
Простые высказывания:

 C = "Идет снег";

 О = "На улице
  оттепель";

 D = "Идет дождь";

 P = "Небо
  пасмурное";

 G = "На дорогах
  гололедица";

 S = "Ветер
  южный";

 I = "На деревьях
  иней";

 Т = "Температура плюсовая";

 М = "На улице
  мороз";

 U = "На улице
  туман".

 N = "Ветер
  северный";

Сложные высказывания:
 X1 = "На улице мороз, идет
снег, но гололедицы нет";
 X2 = "На улице оттепель и на
деревьях иней или на улице туман";
 X3 = "Если северный ветер
или идет снег, то на улице мороз";
 X4 = "На дорогах нет
гололедицы, на деревьях нет инея и на улице нет тумана, если дует северный
ветер при морозе";
 X5 = "На улице оттепель или
на деревьях иней, если температура плюсовая";
 X6 = "Для того чтобы шел
дождь или снег, необходимо наличие пасмурного неба";
 X7 = "Для появления на
деревьях инея достаточно пасмурного неба и оттепели";
 X8 = "Для гололедицы на
дорогах необходимо и достаточно наличие плюсовой температуры при северном ветре
и тумане";
 X9 = "Чтобы не было ни
снега, ни дождя, необходимо, чтобы небо не было пасмурным";
 X10 = "На улице туман или на
деревьях иней может быть тогда и только тогда, когда на улице оттепель";
 X11 = "При южном ветре на
улице оттепель только тогда, когда пасмурное небо и плюсовая температура";

 X12 = "На деревьях иней, на
улице туман и на дорогах гололедица тогда,  когда дует южный ветер и на улице
оттепель".
ЗАДАНИЕ 7.4
Заданы простые высказывания и логические формулы, в
качестве аргументов которых использованы идентификаторы простых высказываний.
Записать эти формулы на разговорном языке содержательными предложениями и на
языке программирования.
Простые высказывания:

 B = "Гриб
  боровик";

 J = "Ядовитый
  гриб";

 C = "Съедобный
  гриб";

 K = "Шляпка
  красная";

 D = "Гриб
  трубчатый";

 L = "Гриб
  лисичка";

E = "Гриб пластинчатый";

 M = "Гриб
  млечник";

G = "Гриб груздь";

 P = "Гриб подосиновик";

 R = "Шляпка
  коричневая";

 W = "Гриб сыроежка";

 T = "Шляпка белая";
 U = "Шляпка
  зеленая"; Логические формулы:

 Z = "Шляпка желтая".

 Y K D   ;                                                  Y G W7 =             ⋅  → J C⋅ ;

 Y D W G3 = →     ⋅    ;

                            Y E M G W L9 =        ⋅             ↔                                         ⋅   ⋅
  ;

 Y4 = (P B∨          ) → D C⋅ ;

                                   Y L Z B R P K C= ⋅       ∨       ⋅                                                ∨ ⋅    →    ;

10

 Y P L2 = ∨ ;                                                         Y C J8 = ⋅        ↔ B L G∨  ∨ ;

 Y5 = (K R Z U∨ ∨
∨ ↔) W;  Y11 =C↔J;
 Y T G B L6 = ↔  ⋅      ⋅ ;                                        Y U B P G W12 =  →   ⋅   ⋅              ⋅              .
ЗАДАНИЕ 7.5
Задано несколько простых высказываний о цветах. Из них
составлены сложные высказывания. Запишите эти сложные высказывания формулами
функций  алгебры логики и на языке программирования.
Простые высказывания:

 А = "Цветок
  ароматный";

 P = "Цветок полевой";

 B = "Цветок
  белый";

 R = "Цветок красный";

 C = "Средней
  величины";

 S = "Цветок
  астра";

 D = "Цветок
  домашний";

 Т = "Цветок тюльпан";

 G = "Цветок
  желтый";

 V = "Цветок садовый";

 K = "Цветок
  крупный";

 Z = "Цветок
  роза".

 М = "Цветок мелкий"; Сложные высказывания:
 Y1 = "Цветок крупный,
ароматный, полевой или садовый";
 Y2
= "Цветок крупный или мелкий, белый и не домашний";
 Y3
= "Если цветок садовый, то он крупный или ароматный";
 Y4
= "Для того чтобы цветок был ароматным и крупным, необходимо и достаточно,
чтобы он был домашним или садовым";
 Y5
= "Чтобы цветок был полевым тюльпаном, необходимо, чтобы он был желтым или
красным";
 Y6
= "Чтобы цветок был крупным или ароматным, достаточно, чтобы он был не
астрой, а розой";
 Y7
= "Не верно, что если цветок полевой, то он ароматный, также не
соответствует действительности, что если цветок садовый, то он мелкий";
 Y8
= "Не верно, что если цветок крупный и белый или желтый и ароматный, то
это астра или роза".
7.6. Решение текстовых логических задач
Структура логических задач может быть различной. Также
различными бывают и подходы к их решению. Рассмотрим некоторые из приемов,
которые можно использовать, чтобы получить решение задачи.
При решении логических задач наиболее интересен и важен
этап формализации высказываний. На этом этапе желательно по возможности не
вводить лишних переменных, которые будут увеличивать длину наборов значений
логических переменных, и усложнять формулы функций. Например, каждую пару
высказываний: тепло и холодно, большой и маленький остров, острый и тупой угол
и тому подобных можно закодировать одной переменной и ее инверсией.
В условии логической задачи может быть задано или
получено в процессе решения несколько простых или сложных высказываний f1,
f2 , ..., fn , адекватно отображающих логическую суть
задачи и обладающих известной истинностью. В этом случае обычно достаточно
взять конъюнкцию этих высказываний
F f f fn и определить набор
значений простых высказываний, на котором это сложное высказывание принимает
значение "истина". Этот набор и будет решением задачи. Возможно, что
таких наборов будет несколько, что укажет на наличие множества решений.
Возможен также вариант отсутствия решения. Начнем с примеров простых задач.
ПРИМЕР 7.7
Школьник попросил троих друзей отгадать, какое он задумал
число из набора: положительное, отрицательное, четное, нечетное, целое и
дробное. Первый сказал, что если это число четное, то оно положительное. Второй
предположил, что задуманное число четное или целое и положительное. Третий был
уверен, что если это число не отрицательное, то оно нечетное. Оказалось, что
все три друга правы. Их высказывания истинны. Какое было задумано число?
Формализация и
решение задачи Введем обозначения:

 A= "Число
положительное", А=
"Число отрицательное";
B= "Число
четное", В=
"Число нечетное"; C= "Число целое", С= "Число дробное".
Используя введенные обозначения, запишем высказывания
всех трех отгад- чиков.
F = B A→
                                                                         1                            ,
                                                                          F2 = B C A∨   ⋅           ,

F = A B→
                                                                          3                            .
Итоговая функция равна логическому произведению функций F1,
F2 и F3:

                                                F
= F F F B A B C A A B1 ⋅
2 ⋅ 3 = ( → ) (⋅     ∨              ⋅
) (⋅        → ) .

Пользуясь тождествами X Y X Y→ = ∨ ,
переводим формулу функции в базис булевой алгебры, раскрываем скобки и получаем
результат решения задачи:
 .
Получили выражение, которое принимает значение
"истина" только на одном наборе 101, т. е. A=1, B=0 и C=1, а это означает, что
было задумано положительное нечетное целое число.
Преобразования более сложных логических выражений, чем в
рассмотренном примере, связано с возможными ошибками. Языки программирования
позволяют работать с логическими функциями, как в базисе булевой алгебры, так и
в базисе алгебры логики. Это существенно облегчает решение подобных задач.
Далее приведена программа решения задачи из примера 7.7 (листинг 7.3). На рис.
7.3 показан результат решения задачи.

Sub Логика_3()
' Логика_3 Макрос
  Debug.Print " A"; "  B"; "  C", "
F"
  For a = 0 To 1
    For b = 0 To 1
      For c = 0 To 1
        F1 = b Imp a
        F2 = b Or c And a
        F3 = a Imp Not b
        F = F1 And F2 And F3
    Debug.Print a; b; c, F
  Next c, b, a
End Sub

Рис. 7.3. Результат решения задачи из примера 7.7
При
решении более сложных задач может быть задано в постановке задачи или получено
при ее решении несколько высказываний, о которых сказано, что из них только
некоторое количество истинно. В этом случае организуется перебор вариантов.
Например, заданы высказывания a и b, о которых известно, что из них только одно
истинно. В этом случае записывают следующую функцию: F=ab ab∨ . Такая запись
показывает, что значение "истина" принимает или высказывание a или
высказывание b, но не оба.
Если заданы высказывания a, b, c, d, из которых только
одно истинно, то это соответствует следующей формуле:
                                                           F
=abcd abcd
abcd abcd∨       ∨       ∨             .

Если сказано, что из этих высказываний истинны лишь
какие-то два, то имеем следующую формулу:
                                                 F
=abcd abcd
abcd abcd abcd abcd∨           ∨       ∨             ∨             ∨

и т. д.
ПРИМЕР 7.8
Друзья Андрея (А), Владимира (В) и Сергея (С) обсуждали
их шансы на победу  в шахматном турнире. Первый сказал, что победит А или С,
второй заявил, что ни А, ни В победы не видать. Третий был уверен, что победит
А или В. В итоге оказалось, что угадал один из них. Кто из трех шахматистов
победил?
Формализация и решение задачи Обозначим
высказывания:
А = "Победил Андрей". Если А = 1, то это
высказывание истинно, если А = 0, то ложно. Аналогично для других участников: В
= "Победил Владимир"; С = "Победил Сергей".
Запишем высказывания болельщиков в виде логических
формул:
 1-й
болельщик: F1 =A C∨ ;

 2-й
болельщик: F2 = A
B⋅ ;
 3-й
болельщик: F3 =A B∨ .
К этим трем предположениям болельщиков
необходимо добавить функцию, которая введет естественное ограничение победы
только одного из шахматистов:

                                                               F4 = A B C A B C A B C⋅ ⋅    ∨   ⋅        ⋅              ∨             ⋅              ⋅              .

Формула F4 показывает, что функция F4
может быть равна 1 только на одном из трех наборов значений аргументов A, В и
С: 100, 010 и 001, т. е. при победе только одного из шахматистов.
Аналогичная
ситуация сложилась и для болельщиков. По условию задачи прав оказался только
один из них. Поэтому должно быть истинно следующее выражение:

F1 2 3FF FFF FFF∨ 1 2 3 ∨ 1 2 3.
Эта функция, как и функция F4 , может быть
истинной только на трех наборах своих аргументов F1, F2 и
F3: 100, 010 и 001, т. е. одновременно, как и требуется, может быть
истинным высказывание только одного из болельщиков.
Запишем итоговое выражение функции, которое
приведет к решению задачи. Оно получается как результат логического
произведения сформированных выше условий:

F = (FFF FFF FFF F1 2 3 ∨ 1 2 3 ∨ 1 2 3)⋅ 4.
Формулы      инверсных     значений           функций
F1,
F2               и
F3        следующие:

F1 = A C A C∨ = ⋅ , F2 = A B A B⋅ = ∨ , F3 = A B A B∨ = ⋅ .
Они получены опусканием общих для выражения инверсий на переменные по закону де
Моргана.
Подставим в формулу F формулы прямых и инверсных значений
функций F1,

F2 и
F3 и упростим полученное выражение, пользуясь правилами
тождественных преобразований булевых функций:

                                                     F
= ((A C A B A
B A C A B A B∨     )
(⋅    ∨     )⋅      ⋅              ∨             ⋅              ⋅(             ⋅              )
(⋅                                                                                ⋅ )∨

                                                    ∨A
C A B A B F⋅        ⋅(  ∨             )
(⋅          ∨             ))⋅
4.
Второй и третий члены дизъюнкции имеют одинаковые
сомножители. По  правилу Х ⋅
Х = Х опускаем по одному из равных сомножителей и раскрываем скобки:

F
= (A A A B A B A B C A A B C B A B⋅           ⋅               ⋅              ∨             ⋅              ⋅              ⋅               ∨   ⋅               ⋅              ⋅              ∨             ⋅              ⋅               ⋅              ∨

                                                ∨A
C A B A C A A C B F⋅ ⋅        ⋅     ∨             ⋅              ⋅              ∨             ⋅              ⋅               )⋅
4.
Используем
тождества X X⋅       =
0, X ⋅0
0=          и
X∨ =0
X. В соответствии с этими тождествами первые четыре и шестой члены дизъюнкции
равны нулю. Раскрываем формулу F4 . Упорядочим переменные в
конъюнкциях. В результате получаем:

                                                   F
= (A B C A B C A B C A B C A B C⋅  ⋅     ∨    ⋅     ⋅  )
(⋅          ⋅              ⋅              ∨             ⋅              ⋅                                                                                ∨ ⋅     ⋅     ).

Раскрываем скобки, опускаем равные нулю члены
дизъюнкции и получаем ответ:

                                                                           F
= A B C⋅  ⋅            .

Полученное логическое выражение истинно только на одном
наборе значений составляющих его простых выражений: А — ложно, В — истинно и C
— ложно, т. е. победил Владимир.
Упрощение сложных логических формул требует
внимательности, связано с затратами времени. Для упрощения сложных формул
следует привлекать компьютер. В листинге 7.4 приведена программа решения задачи
о шахматистах. На рис. 7.4 показан результат решения задачи — таблица
истинности с кодом результирующей функции.

Sub Логика_4()
  Debug.Print " A"; "
B"; "  C", " F"
  For A = 0 To 1
    For B = 0 To 1
      For C = 0 To 1
        F1 = A Or C: F2 = Not A And
Not B: F3 = A Or B
        F4 = A And Not B And Not C Or
Not A And B And Not C Or _
             Not A And Not B And C
        F = (F1 And Not F2 And Not F3
Or Not F1 And F2 And Not F3 Or _
             Not F1 And Not F2 And F3)
And F4
        Debug.Print A;B;C,F
  Next C, B, A
End Sub
В результате работы программы будет отпечатана таблица
истинности функции F (рис. 7.4). Для этого программа последовательно формирует
наборы значений аргументов A, В и C (000, 001, 010, ..., 111), подставляет их в
функцию F и вычисляет ее значение на этих наборах. В таблице истинности только
одна единица — против набора 010. Это и есть решение задачи — победил Владимир.

Рис. 7.4. Решение примера 7.8 о шахматистах
Напомним, что некоторые задачи могут иметь неоднозначное
решение. В этом случае итоговая функция может быть истинной не на одном наборе
значений аргументов (код функции содержит несколько единиц). Возможен вариант,
когда решения задачи нет — в коде функции нет единиц.
ПРИМЕР 7.9
В соревнованиях по гимнастике участвуют Алла, Валя, Сима
и Даша. Болельщики высказали предположения о возможных победителях:
 1-е место займет
Сима (С1), Валя будет 2-й (В2);  2-й
будет Сима (С2), Даша займет 3-е место (Д3);  у Аллы 2-е место (А2), у Даши 4-е (Д4).
По окончании соревнований оказалось, что в каждом из
предположений только одно высказывание истинно, другое — ложно. Как
распределились места, если все девушки заняли разные места?
Решение задачи
Каждое из трех предположений содержит по два
высказывания, которым уже  в постановке задачи присвоены идентификаторы С1, В2,
С2, Д3, А2 и Д4.
Учет того, что в каждом предположении только одно из двух
высказываний истинно, выполняется введением следующих трех функций неравнозначности
(суммы по модулю 2):
                                                                f1
= С1 В2⋅ ∨ С1 В2;⋅
                                                                 f2
= С2 Д3⋅  ∨ С2 Д3;⋅
                                                                 f3
= А2 Д4⋅   ∨ А2 Д4.⋅
Функции f1, f2 и f3
принимают значение 1 только на наборах значений своих аргументов 10 и 01, т. е.
при истинности только одного из них, что и требуется в постановке задачи.
Рассматривая все три предположения болельщиков, видим,
что имеются нарушения корректности в предполагаемых итогах соревнований.
Во-первых, каждая гимнастка может занять только одно
место. Поэтому Сима не может занять одновременно 1-е и 2-е места (С1 и С2), а
Даша не может занять 3-е и 4-е места (Д3 и Д4). Учесть это позволяет ввод в
итоговую функцию в качестве сомножителей функций f4 и (инверсий
конъюнкций), которые принимают значение 0 на наборах значений своих аргументов
11:
f4 = Not(C1And C2); f5 = Not(Д3And Д4).
Во-вторых, следует внести естественные
ограничения, что каждое место может занять только одна гимнастка. По
предположениям болельщиков на второе место претендуют одновременно три
спортсменки: Валя ( x2 ), Сима ( x3) и Алла ( x5).
Учесть это ограничение позволяет следующая функция:

             f6 = В2 С2 А2⋅                ⋅ ∨
В2 С2 А2⋅   ⋅ ∨
В2 С2 А2⋅                     ⋅            =
В2 And Not С2 And Not А2∨

∨Not В2 And С2 And Not А2∨ Not В2 And Not
С2 And А2.
Заметим, что при отказе от этих ограничений возможно
получение других от- ветов.
Итоговый функционал (функция, в качестве аргументов
которой выступают другие функции) представляет собой конъюнкцию всех полученных
функций: f = f1 And f2 And f3
And f4 And f5 And f6
После подстановки в итоговый функционал соответствующих
всем шести функциям выражений начинается требующая внимательности и терпения
работа по преобразованию и упрощению логических выражений. В результате будет
получено выражение, из которого станет ясно, что Сима займет 1-е место, Алла —
2-е, Даша — 3-е и Валя — 4-е. Для тренировки можно выполнить эту работу, но
полезнее предложить это сделать компьютеру.
Задачу решает программа из листинга 7.5.

Sub Логика_5()
' Логика_5 Макрос
  Debug.Print " С1"; "
В2"; " С2"; " Д3"; " А2"; " Д4",
" f"
For С1 = 0 To 1: For В2 = 0 To 1: For
С2 = 0 To 1   For Д3 = 0 To 1: For А2 = 0 To 1: For Д4 = 0 To 1     f1 = С1 Xor
В2
    f2 = С2 Xor Д3     f3 = А2 Xor
Д4     f4 = Not (С1 And С2)     f5 = Not (Д3 And Д4)
    f6 = В2 And Not С2 And Not А2 Or
Not В2 And С2 And Not А2 Or _          Not В2 And Not С2 And А2
    f = f1 And f2 And f3 And f4 And f5
And f6
    If f = 1 Then Debug.Print С1; В2;
С2; Д3; А2; Д4, f
  Next Д4, А2, Д3, С2, В2, С1
End Sub
Распечатка итоговой таблицы истинности не умещается
полностью на экране монитора ввиду большого числа логических переменных. В
таких случаях достаточно выводить только строки таблицы, в которых итоговая
логическая функция принимает единичные значения. Напомним, что в коде функций
могут выводиться –1 вместо 1 и –2 вместо 0.
В результате работы программы получен следующий
результат: 100110 1, т. е. Сима заняла 1-е место, Даша — 3-е место, у Аллы —
2-е место, а Вале досталось 4-е место (рис. 7.5).

ЗАМЕЧАНИЕ

Задача из
примера 7.9 имеет логическую структуру, позволяющую существенно упростить ее
решение. Подобные текстовые задачи начали предлагать в последних вариантах
задач ЕГЭ. Простое решение этой задачи показано далее, в примере 7.10.
Задания для самостоятельной работы
ЗАДАНИЕ 7.6
Решите задачу. На вопрос "Какая будет завтра
погода?" синоптик ответил:
1.
Если будет мороз, то снег выпадет только при пасмурной погоде.
2.
Если не будет мороза, но пойдет снег, то погода будет пасмурной.
3.
Не будет ни снега, ни дождя, если погода будет пасмурной.
4.
Неверно, что если не будет мороза, то для выпадения снега или дождя
достаточно наличие пасмурного неба.
Какую погоду предсказал синоптик?

ЗАДАНИЕ 7.7
Решите задачу. Четверо школьников, наблюдая за движущимся
на большой высоте объектом, высказали свои предположения. Первый сказал:
"Высота объекта больше 10 тысяч метров или это перехватчик ПВО
(противовоздушной обороны) и скорость его превышает скорость звука".
Второй предположил: "Если высота объекта больше 10 км, то это не
перехватчик ПВО и скорость объекта ниже скорости звука". Третий заявил:
"Это НЛО или скорость объекта больше скорости звука". Четвертый
частично поддержал третьего, предположив: "Если скорость объекта больше
скорости звука, то это НЛО". Если высказывания всех четырех школьников
истинны, то, что это был за объект и на какой высоте и с какой скоростью он
летел?

ЗАДАНИЕ 7.8
Решите задачу. Показания свидетелей правонарушения
значительно различались. Первый свидетель сказал, что преступник был брюнетом с
усами. Второй заявил, что это был блондин без усов. Третий свидетель
подтвердил, что преступник был блондином, но без портфеля. Четвертый был
уверен, что преступник был шатеном с портфелем.
В действительности оказалось, что каждый из свидетелей
ошибся в одном из своих показаний. Каким был правонарушитель?

ЗАДАНИЕ 7.9
Решите задачу (автор — В. Н. Касаткин[1]). Алеша, Боря и Гриша нашли в
земле сосуд. Рассматривая удивительную находку, каждый высказал по два
предположения:
 Алеша: "Это сосуд греческий и изготовлен в V
в.";  Борис:
"Это сосуд финикийский и изготовлен в III в.";
 Гриша:
"Это сосуд не греческий и изготовлен в IV в.".
Учитель истории сказал ребятам, что каждый из них прав только
в одном из двух предположений. Где и в каком веке изготовлен сосуд?
ЗАДАНИЕ 7.10
Решите задачу. Три грибника, рассматривая найденный гриб,
высказали свои предположения. Первый грибник сказал: "Не верно, что если
это не опенок, то этот гриб съедобный". Второй грибник также был осторожен
и сказал: "Не верно, что этот гриб или ядовитый, или опенок, или не
сыроежка". Третий грибник заявил: "Это гриб не ядовитый, но я
отрицаю, что если это сыроежка, то она съедобна". В итоге оказалось, что
все три грибника были правы и их суждения оказались истинными. Какой гриб нашли
грибники?
ЗАДАНИЕ 7.11
Решите задачу (автор — В. В. Мадер[2]). Андрей, Ваня и Саша собрались
в поход. Учитель, хорошо знавший этих ребят, высказал следующие предположения:
1.
Андрей пойдет в поход только тогда, когда пойдут Ваня и Саша.
2.
Андрей и Саша — друзья, а это значит, что они пойдут в поход вместе или
же оба останутся  дома.
3.
Чтобы Саша пошел в поход, необходимо, чтобы пошел Ваня.
Когда ребята пошли в поход, оказалось, что учитель
немного ошибся: из трех его утверждений истинными оказались только два. Кто из
названных ребят пошел в поход?
7.7. Алгебра логики в заданиях ЕГЭ
Варианты решения одной текстовой задачи
Интерес к текстовым логическим задачам возрос с введением
ЕГЭ (Единого государственного экзамена). Несложные по постановке и формализации
эти задачи при решении их формальными методами без использования компьютера
требуют значительных затрат времени на преобразования формул логических
выражений. Поэтому актуальным становится вопрос о применении наряду  с
формальными методами также и некоторых визуальных, эвристических приемов,
способных в ряде случаев существенно сократить время решения. Важно отметить,
что возможность применения этих приемов существенно зависит от характера
задачи, структуры ее системы логических выражений.
Дадим краткую характеристику четырем вариантам решения
одной текстовой задачи.
Первый вариант решения направлен на использования
компьютера. После формализации все логические уравнения, в том числе и
ограничения, представляются в базисе алгебры логики — наиболее компактном и
удобном при решении задач на компьютере виде записи логических уравнений.
Записывается код программы решения задачи. Показывается результат решения. Это
быстрый и  надежный, исключающий ошибки преобразования логических формул способ
решения текстовых задач. Но для решения требуется компьютер.
Второй вариант, без использования компьютера заключается
в том, что все преобразования выполняются вручную. Все логические уравнения
постановки задачи и уравнения ограничений представляются, как правило, в более
удобном для работы вручную базисе булевой алгебры. Объем преобразований может
быть значительным. Он существенно зависит от числа логических переменных, что
налагает определенные требования на этап формализации. При дефиците времени, в
условиях, например, экзаменов применение этого варианта возможно при решении
задач небольшой сложности.
Третий вариант использует возможность ограничить
преобразования логических формул только формулами постановки задачи.
Ограничения при этом  учитываются визуальным анализом получаемых в процессе
преобразований результатов. Такой подход освобождает решающего задачу от
большого объема "лишних" преобразований логических формул, формально
учитывающих эти ограничения.
ЗАМЕЧАНИЕ

Следует
заметить, что только первый и второй варианты являются универсальными.
Возможность использования третьего варианта зависит от характера задачи. Это
задачи типа "составление расписания", "спортивные
соревнования" и подобные им.
Далее рассмотрен третий вариант решения задачи из примера
7.9.
ПРИМЕР 7.10
В соревнованиях по гимнастике участвуют Алла, Валя, Сима
и Даша. Болельщики высказали предположения о возможных победителях:
 1-е место займет
Сима (С1), Валя будет 2-й (В2);  2-й
будет Сима (С2), Даша займет 3-е место (Д3);  у Аллы 2-е место (А2), у Даши 4-е (Д4).
По окончании соревнований оказалось, что в каждом из
предположений только одно высказывание истинно, другое — ложно. Как
распределились места, если все девушки заняли разные места?
Решение
Как правило, на соревнованиях естественны следующие
ограничения: каждый спортсмен может занять только одно место, и каждое место
может быть занято только одним спортсменом. Кроме того, выяснилось, что в
каждом из предположений только одно высказывание истинно, другое — ложно. Все
эти ограничения обычно вводятся в постановку задачи в виде логических
уравнений.
Откажемся от ввода формул ограничений, которые будем
учитывать по ходу решения задачи, и представим систему логических уравнений в
следующем  виде:
 F1 = С1∨ В2;  F2 =
С2∨ Д3;
 F3 =
А2∨ Д4.
Для решения полученной системы возьмем конъюнкцию
логических уравнений и раскроем скобки.
                  F F F F= 1 ⋅ 2 ⋅ 3 = (С1∨ В2) (С2⋅   ∨
Д3) (А2⋅  ∨ Д4) =
                  = С1 С2 А2⋅              ⋅ ∨
С1 С2 Д4⋅   ⋅ ∨С1 Д3 А2⋅   ⋅ ∨ С1 Д3 Д4⋅ ⋅ ∨
В2 С2 А2⋅             ⋅              ∨
                  ∨В2
С2 Д4⋅               ⋅ ∨ В2 Д3 А2⋅  ⋅ ∨ В2
Д3 Д4⋅  ⋅ = С1 Д3 А2.⋅      ⋅
В результате получена дизъюнкция восьми конъюнкций, из
которых только  третья не противоречит естественным ограничениям (каждая
спортсменка может занять только одно место, и каждое место может быть занято
только одной спортсменкой). Эта конъюнкция принимает значение
"истина".
Все остальные (они подчеркнуты) принимают значение
"ложь". Например, первая и вторая конъюнкции содержат аргументы С1 и
С2, которые предполагают, что Сима может занять одновременно первое и второе
места. Четвертая конъюнкция содержит значения Д3 и Д4, и т. д.
Важно отметить, что и последнее ограничение (что в каждом
из предположений только одно высказывание истинно, другое — ложно)
удовлетворяется самой структурой системы уравнений. Можно проверить, что каждая
пара переменных в скобках при раскрывании скобок не входит в одну и ту же
конъюнкцию трех переменных.
В результате, Сима заняла 1-е место, Алла — 2-е, Даша —
3-е и Валя — 4-е.
ЗАМЕЧАНИЕ

После
решения задачи из примера 7.10 о соревновании по гимнастике следующие две
задачи покажутся очень простыми. Действительно, на их решение уходит не более
двух минут.
ЗАДАНИЕ 7.12
В школьном первенстве по настольному теннису в четверку
лучших вошли девушки: Наташа, Маша, Люда и Рита. Самые горячие болельщики
высказали свои предположения о распределении мест в дальнейших состязаниях.
Один считает, что первой будет Наташа, а Маша будет
второй.
Другой болельщик на второе место прочит Люду, а Рита, по
его мнению, займет четвертое место.
Третий любитель тенниса с ними не согласился. Он считает,
что Рита займет третье место, а Наташа будет второй.
Когда соревнования закончились, оказалось, что каждый из
болельщиков был прав только в одном из своих прогнозов.
Какое место на чемпионате заняли Наташа, Маша, Люда,
Рита?
(В ответе перечислите подряд без пробелов числа,
соответствующие местам  девочек в указанном порядке имен.)
ЗАДАНИЕ 7.13
Перед началом "Турнира Четырех" болельщики
высказали следующие предположения по поводу своих кумиров:  Макс победит, Билл — второй;
 Билл
— третий, Ник — первый;
 Макс
— последний, а первый — Джон.
Когда соревнования закончились, оказалось, что каждый из
болельщиков был прав только в одном из своих прогнозов.
Какое место на турнире заняли Джон, Ник, Билл, Макс?
ЗАДАНИЕ 7.14
В нарушении правил обмена валюты подозреваются четыре
работника банка — Антипов (А), Борисов (В), Цветков (С) и Дмитриев (D).
Известно, что:
 если
А нарушил правила обмена, то и В нарушил;
 если
В нарушил, то и С нарушил или А не нарушал;
 если D не нарушил, то А нарушил, а С не нарушал;  если D нарушил, то и А
нарушил.
Кто из подозреваемых нарушил правила обмена валюты?

ГЛАВА 8

Программирование в MS Office

8.1. Общие сведения о макросах
Макрос (сокращение от слова макрокоманда) — это особый
вид программы, записанной на языке программирования Visual Basic for
Applications (VBA). VBA встроен во все приложения Microsoft Office (Word,
Excel, Access и т. д.) и др.
Макросы дают возможность автоматизировать и упростить
многие операции, потребность в которых нередко возникает при работе с объектами
приложений. Они создаются и хранятся в отдельных от документов модулях и
доступны для различных документов приложений.
Макросы в MS Word служат для быстрой коррекции
документов, ведомостей, отчетов, накладных и т. п. Макросы также используют для
форматирования структуры, стиля документов, для решения многих других
вспомогательных задач. Простейшие варианты применения — это быстрые вычисления
по сложным формулам и простым программам.
VBA — это версия языка Visual Basic (VB), мощного и
самого популярного в мире инструмента разработки приложений. VBA имеет простой
и понятный синтаксис, позволяющий легко и быстро освоить язык. К тому же, этот
язык всегда рядом с вами, т. к. по статистике 97% компьютеров мира работают с
операционными системами Microsoft Windows и приложениями Microsoft Office.
Рассмотрим на примерах, как создаются макросы и как они
выполняются. После этого вы сможете самостоятельно создавать программы для
решения сначала простых, затем все более сложных задач. В конце главы (см.
разд. 8.4) можно получить краткую справку о некоторых основных операторах VBA.
Макросы можно создавать тремя способами:
1.
Создание макроса с помощью макрорекордера сводится к выполнению
пользователем действий, которые желательно автоматизировать. Эти действия
записываются редактором VBA в виде кода макроса. По окончании записи макрос
можно многократно запускать на выполнение. Знание VBA при этом не обязательно.
2.
Код макроса может записываться пользователем непосредственно в окно
модуля, где макрос будет храниться.
3.
Макрос сначала создается с помощью макрорекордера, затем корректируется
и дописывается средствами VBA.
Применим способ 2 для создания двух простых макросов. В
третьем примере создадим макрос с помощью макрорекордера
8.2. Создание, изменение, удаление, размещение макросов
Макрос Таблица_Unicode
Выполним следующие действия:
1.
Загрузим текстовый редактор MS Word.
2.
Выполним команду Сервис | Макрос | Макросы. Откроется диалоговое окно
Макрос (которое также можно вызвать нажатием комбинации клавиш
<Alt>+<F8>).
3.
В текстовое окно Имя впишем имя макроса без пробелов, которые можно
заменить символом подчеркивания: Таблица_Unicode, и нажмем кнопку Создать.
4.
Откроется окно Microsoft Visual Basic — Normal с документом Normal — New
Macros (Code). В модуле подготовлено место для записи кода процедуры нового
макроса Таблица_Unicode. Дописываем код макроса (листинг 8.1).

Sub Таблица_Unicode()
  ' Таблица_Unicode Макрос
  For i = 33 To 255
    Debug.Print " "; i;
"  "; Chr(i),
    If i Mod 8 = 0 Then Debug.Print
  Next
End Sub
Использованные в макросе операторы, функции, команды:
 Оператор
цикла For...Next
генерирует номера (коды) символов.
 Строковая
функция Chr(i) возвращает
символ с заданным кодом.
 Метод
Debug.Print служит для
распечатки текстовых данных в окне непосредственного вывода (Immediate).
Окно Immediate вызывается в редакторе VBA командой View
| Immediate Window или нажатием комбинации клавиш <Ctrl>+<G>.
Редактор VBA вызывается из MS Word командой Сервис |
Макрос | Редактор Visual Basic или нажатием комбинации клавиш
<Alt>+<F11>.
Выход из редактора VBA в MS Word осуществляется нажатием
комбинации клавиш <Alt>+<F11>.
Первая проверка правильности работы
макроса
При записи в модуль кода макроса интеллектуальный
редактор VBA немедленно сообщает о синтаксических ошибках, выделяет их цветом,
помогает записи, корректирует прописные буквы в ключевых словах, вставляет
пробелы и делает много другой полезной работы.
После записи кода, находясь в редакторе VBA, откройте
окно Immediate, выделите первую строку кода макроса и нажмите кнопку запуска
Run Sub/UserForm  на панели инструментов редактора.
Запустив макрос, проверьте правильность получения результата. Чтобы таблица
поместилась в окне, возможно, придется перемещать границы окна Immediate.
Макрос можно запустить из окна Macros. Из окна редактора
VBA в окно Macros можно перейти, выбрав команду Tools | Macros. В окне следует
выделить код нужного макроса. Запускается макрос нажатием кнопки Run
(Выполнить).
При обнаружении ошибок в работе макроса
устраните их. Результат работы макроса можно увидеть на рис. 1.4.

Макрос Выч_колич_инф
Без этого макроса не обойтись при решении задач,
связанных с вероятностным подходом к работе с информацией. При запуске макроса
запрашивается и вводится количество всех событий (а), количество событий выборки (b). Вычисляется вероятность события (p=b/a) и количество битов (с), которое приносит это
событие.
В коде макроса предусмотрен выбор из двух вариантов
вывода результата.
 В
первом варианте с помощью метода Debug.Print
результат выводится в окно непосредственного вывода (Immediate), открываемого в
редакторе Microsoft Visual Basic командой View | Immediate Window
(<Ctrl>+<G>). Окно показано на рис. 8.1.

 Во
втором варианте (в показанном далее коде макроса он выключен постановкой
апострофа) результат выводится в местоположение указателя или в выделенное
место документа редактора MS Word в следующем виде:
При a = 29;  b = 3; p = 0,103;  Колич.
информации = 3,273 бит
Выбор варианта вывода выполняется подключением нужных
строк кода мак- роса.
Приступим к созданию макроса.
1.
Загрузим текстовый редактор MS Word.
2.
Выполним команду Сервис | Макрос | Макросы. Откроется диалоговое окно
Макрос.
3.
В текстовое окно Имя впишем имя макроса без пробелов, которые можно
заменить символом подчеркивания: Выч_колич_инф, и нажмем кнопку Создать.
4.
Откроется окно Microsoft Visual Basic — Normal с документом Normal — New
Macros (Code). В модуле подготовлено место для записи кода процедуры нового
макроса Выч_колич_инф. Дописываем код макроса (листинг 8.2).

Sub Выч_колич_инф()
  ' Выч_колич_инф Макрос
  ' Макрос создан 10.01.2010 BLACK   a
= InputBox("Введите колич. событий всех", , , , 3)   b =
InputBox("Введите колич. событий выборки", , , , 2)   p = b / a   c =
Log(p) / Log(2)
  Debug.Print "При a = "; a;
";  b = "; b; ";  p = "; Format(p, "0.###")
  Debug.Print "  Колич.
информации = "; Format(-c, "#.###"); " бит"
  ' Selection.Text = "При a =
" & a & ";  b = " & b & "; p = " &
Format (p, "0.###") & ";  Колич. информации = " &
Format(-c, "#.###") & " бит" End Sub
Использованные в макросе операторы,
функции, команды
Данные с клавиатуры можно вводить в диалоговом окне,
открываемым с по- мощью функции InputBox
(рис. 8.2).

Сокращенный синтаксис функции InputBox таков: а = InputBox("Текст 1", "Текст 2",
"Текст 3", xpos, ypos) где:
 Текст 1 — информация о том, что
предлагается вводить;
 Текст 2 — информация о
приложении, в котором создан макрос;
 Текст 3 — предлагаемая величина
вводимой переменной;
 xpos и ypos — координаты позиции вывода окна функции на
экран.
Для вывода данных в выделенное место или положение
курсора в документе (MS Word) используется объект Selection с синтаксисом Selection[.Text] [=Text] (см. примеры макросов).
Первая проверка правильности работы
макроса
При записи в модуль кода макроса интеллектуальный
редактор VBA немедленно сообщает о синтаксических ошибках, помогает записи,
корректирует заглавные буквы в ключевых словах, вставляет пробелы и делает
много другой полезной работы.
Помните, что этот макрос имеет два варианта вывода
результата.
 При
использовании метода Debug.Print
результат выводится в окно Immediate. Поэтому после записи кода, находясь в
редакторе VBA, командой View | Immediate Window откройте окно Immediate,
выделите первую строку кода и нажмите кнопку запуска Run Sub/UserForm  на
панели инструментов редактора.
 При
использовании объекта Selection
с синтаксисом Selection[.Text][=Text]
вывод выполняется в документ MS Word в выделенное место или в место нахождения
указателя. Макрос можно запустить из окна Macros нажатием кнопки Run
(Выполнить). Из окна редактора VBA в окно Macros можно перейти, выполнив
команду Tools | Macros.
Работа с макросом существенно упрощается при организации
запуска сочетанием клавиш или выводом на панель инструментов редактора Word
кнопки за- пуска.
Запустив макрос, проверьте правильность получения
результата. При обнаружении ошибок в работе макроса устраните их.

Запуск макросов
Организация запуска макроса  нажатием комбинации
клавиш
1.
Выполните команду Сервис | Настройка. В открывшемся окне нажмите кнопку
Клавиатура.
2.
В окне Настройка клавиатуры две вкладки: Категории и Макросы. В списке Категории
выберите строку Макросы, в списке Макросы — строку с именем нужного макроса (в
нашем случае — Выч_колич_инф).
3.
Курсор переместите в текстовое окно Новое сочетание клавиш. Нажмите
комбинацию клавиш, например, <Alt>+<K>. Нажмите кнопку Назначить.
4.
Проверьте правильность работы макроса. Нажатие назначенной комбинации
клавиш запускает макрос.

ЗАМЕЧАНИЕ

Некоторое количество букв
клавиатуры занято для подачи служебных команд (<Ctrl>+<A> —
выделить, <Ctrl>+<P> — печать и т. д.). Требуется поиск свободных
вариантов.

Запуск макроса  нажатием кнопки на панели
инструментов
1.
Выполните команду Сервис | Настройка. Раскрывается окно с тремя
вкладками. Выберите среднюю — Команды.
2.
В списке Категории выберите строку Макросы, в списке Команды выделите
строку с именем нужного макроса. Мышью перетащите выделенный макрос на правый
край панели инструментов.
3.
Щелчок правой кнопкой мыши на кнопке макроса на панели инструментов
открывает окно со средствами дизайна кнопки. В открывшемся списке выберите
Основной стиль. При этом на кнопке стирается текст с названием макроса.
4.
При повторном щелчке правой кнопкой мыши щелкните на строке Выбрать
значок для кнопки. Выберите щелчком внешний вид кнопки.
5.
Проверьте работу макроса.
Редактирование кода макроса
При необходимости ввести в код макроса исправления,
перейти на другой вариант вывода результатов, создать копию кода макроса и т.
п. нужно этот код открыть. Вариантов несколько.
 Из
приложения MS Word командой Сервис | Макрос | Редактор Visual Basic (<Alt>+<F11>)
открываем модуль редактора, где находим код нужного макроса.
 Из
приложения MS Word командой Сервис | Макрос | Макросы
(<Alt>+<F8>) открываем окно Макрос, в списке
макросов которого находим и выделяем нужный макрос. Для редактирования кода
макроса нажимаем кнопку Изменить (Edit).
Удаление макросов
Макросы могут устаревать, становиться ненужными после
экспериментов с ними или при создании более совершенного варианта. Удалить
макрос можно  двумя способами:
 во-первых,
макрос можно удалить в модуле, где он сохранен. Для этого нужно выделить код
макроса и нажать клавишу <Delete>.
 во-вторых,
в диалоговом окне Макрос нужно выбрать имя макроса и нажать кнопку Удалить.
Размещение кодов макросов
Коды макросов удобно размещать в общем для них модуле.
При желании макрос можно разместить в отдельном модуле. Для этого в редакторе
VBA выполните команду Insert | Module.
Создание макроса Информация_для_всех с помощью
макрорекордера
Создадим макрос Информация_для_всех.

1.
В приложении Word откроем новый документ и выполним команду Сервис |
Макрос | Начать запись. С этой команды началась запись макроса.
2.
В окне Запись макроса (рис. 8.3) в текстовое поле Имя макроса введем имя
Информация_для_всех.
3.
В группе Назначить макрос нажмем для начала кнопку клавишам. При этом
откроется диалоговое окно Настройка клавиатуры (рис. 8.4).

4.
В текстовое окно Новое сочетание клавиш поместим текстовый курсор и
нажмем, например, комбинацию клавиш <Alt>+<W>. После появления
сочетания клавиш в окне нажмем кнопку Назначить. Сочетание клавиш переместится
в список Текущие сочетания. Закроем окно кнопкой Закрыть.
5.
В окне документа редактора Word увеличим будущий шрифт до 14 пунктов и
оформим его полужирным курсивом. Затем введем текст:
Мы изучаем Visual Basic for
Applications!
6.
Нажмем кнопку Остановить запись в маленьком окне на рабочем поле
редактора или выполним команду Сервис | Макрос | Остановить запись. Макрос
создан.
Запуск макроса на выполнение
Запустить макрос на выполнение можно тремя основными
способами:
 наиболее
просто использовать "горячие" (быстрые) клавиши. Для макроса
Информация_для_всех было назначено сочетание <Alt>+<W>;
 выполнить
команду Сервис | Макрос | Макросы. В окне Макрос выбрать нужный макрос и нажать
кнопку Выполнить;
 использовать
созданную заранее кнопку на панели инструментов. Создание кнопки было
рассмотрено ранее.
Перед запуском макроса выполняются требуемые для работы
макроса действия: выделение фрагментов текста, установка указателя в требуемую
позицию и т. п.
Просмотр кода макроса
Для просмотра кода созданного макроса
Информация_для_всех выполним  команду Сервис | Макрос | Макросы. В окне Макрос
выберем имя макроса и нажмем кнопку Изменить. Код макроса может иметь вид,
представленный в листинге 8.3.

Sub Информация_для_всех()
' Информация_для_всех Макрос
'
  Application.Keyboard (1049)
  Selection.TypeText Text:="Мы
изучаем "
  Application.Keyboard (1033)
  Selection.TypeText
Text:="Visual Basic for Application"
  Selection.MoveLeft
Unit:=wdCharacter, Count:=39, Extend:=wdExtend
  Selection.Font.Size = 14
  Selection.Font.Bold = wdToggle
  Selection.Font.Italic = wdToggle
End Sub
Макрорекордер записывает все действия пользователя:
исправления, возвраты  и т. п. Поэтому возможны отличия созданного кода от
кода, показанного выше. Они, как правило, объясняются непоследовательной,
нечеткой работой пользователя.
Из кода макроса можно получить много полезной
информации. В частности, видно, как переключается клавиатура приложения сначала
на кириллицу, затем на латиницу. Видно, как форматируется код сообщения. Можно
сказать, что  каждый макрос, созданный макрорекордером, служит пользователю
примером для создания макросов записью на VBA непосредственно в модуль.
8.3. Примеры макросов
Макрос Проверка_текста_на_палиндром
Палиндром (перевертень) — это редкий и очень
древний жанр стиха. Палиндромом называют стихотворение в одну строку, которое
читается одинаково с начала в конец и с конца в начало. В старину палиндромами
украшали чаши: как ни верти — прочтешь одно и то же. В листинге 8.4 приведен
текст программы, проверяющей вводимый текст на палиндром.

Sub Проверка_текста_на_палиндром()
  ' Палиндром. Макрос

  ' Ввод текста   t$ =
InputBox("Введите текст", "Проверка текста на палиндром")
p$ = ""                     ' Ввод "пустого" текста
  For i = 1 To Len(t$)        ' Счет
от 1-го до последнего символа     p$ = Mid$(t$, i, 1) + p$  ' Изменение
последовательности символов
  Next                        ' во
входном тексте
  If p$ = t$ Then             '
Проверка на палиндром     MsgBox ("Текст — палиндром")   ' Вывод
результата
  Else
    MsgBox ("Текст не
палиндром")  ' Вывод результата
  End If
End Sub
Для вывода результатов работы макроса используется
многофункциональное информационное окно MsgBox, настраиваемое на различные комбинации кнопок
OK, Cancel, Abort, Retry, Ignore, Yes, No, Help, а также на разные комбинации
значков "Запрет", "Вопрос", "Предупреждение",
"Информация" (рис. 8.5).
В коде макроса использованы операторы и функции:
 Len(t$) — возвращает длину
строки;
 Mid$(t$, i, 1) — возвращает i-й
символ строки.
"+"
— знак операции конкатенации (склеивания), может быть заменен знаком &.

Рис. 8.5. Информационное окно MsgBox
Первая проверка правильности работы макроса
При записи в модуль кода макроса интеллектуальный
редактор VBA немедленно сообщает о синтаксических ошибках, помогает записи,
корректирует прописные буквы в ключевых словах, вставляет пробелы и делает
много другой полезной работы.
После записи кода, находясь в редакторе VBA, выделите
первую строку кода и нажмите кнопку запуска Run Sub/UserForm  на панели
инструментов редактора. Запустив макрос, проверьте правильность получения
результата.
Макрос можно запустить из окна Macros, в которое можно
перейти из окна редактора VBA, выполнив команду Tools | Macros. Запускается
макрос нажатием кнопки Run (Выполнить).
При обнаружении ошибок в работе макроса устраните их.
Макрос Число_пробелов
Пусть требуется определить количество пробелов в
выделенном текстовом документе. Проверить работу макроса можно будет, сравнив
результат с данными, которые можно получить в редакторе Word командой Сервис |
Статистика.
Напомним последовательность действий при создании
макроса. Загружаем
MS Word (пригодится при проверке работы макроса) и
выполняем команду Сервис | Макрос | Макросы. Откроется диалоговое окно Макросы,
где введем имя макроса Число_пробелов и нажмем кнопку Создать.
Откроется окно Microsoft Visual Basic — Normal с
документом Normal — New Macros (Code). В модуле подготовлено место для записи
кода процедуры нового макроса Число_пробелов. Дописываем код макроса (листинг
8.5).

Sub Число_пробелов()
  ' Оставляем две строки сообщения об
имени,
  ' Времени создания и авторе макроса
  Dim a As String, c As String, k As
Integer   a = Selection.Text      ' Выделенный текст   b = "": k = 0
  For i = 1 To Len(a)     ' Перебор
номеров символов     c = Mid(a, i, 1)      ' Выделение из текста i-го символа
    If Asc(c) = 32 Then k = k + 1
  Next
  Selection.Text = a & "k =
" & k
End Sub
После записи кода работаем с системой запуска макроса.
Для этого назначьте макросу комбинацию клавиш, нажатие которой приведет к его
запуску. Как это сделать, показано для макроса Выч_колич_инф.
Проверьте работу макроса. Для этого в документе
редактора Word наберите текст с пробелами, выделите его (сверху вниз) и
запустите макрос. Ниже текста макрос выведет число пробелов. Выберите и
реализуйте один из способов запуска макроса.
Макрос Один_пробел
Создадим макрос для текстового редактора Word,
оставляющий в выделенном тексте между словами только по одному пробелу.
Необходимость в этом возникает при подготовке рукописи к публикации. Именно по
этой причине рекомендуется набор документов выполнять с включенной на панели
инструментов кнопкой Непечатаемые знаки, разделяющей слова приподнятыми
точками.
Выполним команду Сервис | Макрос | Макросы.
Откроется диалоговое окно Макросы. В текстовое поле Имя введем имя макроса,
задаваемое по всем правилам Visual Basic: Один_пробел, и нажмем кнопку Создать.
Откроется окно Microsoft Visual Basic. В модуле подготовлено место для записи
кода процедуры нового макроса Один_пробел. Вписываем код макроса (листинг 8.6).

Sub Один_пробел()
  ' Оставляем две строки сообщения об
имени,
  ' сроке создания и авторе макроса
x = Selection.Text
  z = ""    ' В конце работы
это будет текст без лишних пробелов   For i = 1 To Len (x)
    y = Mid (x, i, 1)       '
Последовательно выделяемые символы текста     If Asc (y) < > 32 Then  '
Проверка: символ — не пробел?
      f = 0      ' Если не пробел, то
обнулить флажок и       z = z & y  ' подклеить символ к итоговому
тексту     ElseIf f = 0 Then       f = 1      ' Первый пробел поставить,
остальные пропустить       z = z & y
    End If
  Next
  Selection. Text = z
End Sub
Выбираем и реализуем один из способов запуска макроса.
В окне редактора MS Word с нажатой кнопкой Непечатаемые
знаки записываем предложение с различным количеством пробелов между словами.
Выделяем текст предложения. После запуска макроса Один_пробел между словами
остается по одному пробелу.
Макрос Латиница_Кириллица
Для инверсии случайно записанного в другом
регистре текста достаточно его выделить и запустить этот макрос (листинг 8.7).
При этом все буквы кириллицы выделенного текста будут записаны латиницей, а все
буквы латиницы будут записаны кириллицей. Этот макрос полезен для рассеянных.

Sub Латиница_Кириллица()
  ' Латиница_Кириллица Макрос создан
30.01.2004
  Lat$ =
"qwertyuiop[]asdfghjkl;'zxcvbnm,./QWERTYUIOP[]ASDFGHJKL:" & _
         Chr$(34) &
"ZXCVBNM<>"
  Cyr$ = _

"йцукенгшщзхъфывапролджэячсмитьбю.ЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ"
nCyr = Len(Cyr$)   sel$ = Selection.Text
  Change$ = ""
  For i = 1 To Len(sel$)     z =
Asc(Mid(sel$, i, 1))
    Flag = 0
    For j = 1 To nCyr       c1 =
Asc(Mid(Lat$, j, 1))       c2 = Asc(Mid(Cyr$, j, 1))       If c1 = z Then z =
c2: Exit For
      If c2 = z Then z = c1: Exit For
    Next j
    Change$ = Change$ & Chr$(z)
  Next i
  Selection.Text = Change$
End Sub
Для проверки работоспособности макроса достаточно
выделить записанный в редакторе Word текст и запустить макрос.
Макрос СС1 — перевод числа  из двоичной системы
счисления в десятичную
Напишем макрос, позволяющий выполнить
перевод введенного двоичного числа в десятичное и вывести результат
пользователю (листинг 8.8).

Sub СС1()
  'Перевод a(2) в b(10)
  ' СС1 Макрос
  ' Макрос создан 13.02.2010 BLACK   a
= InputBox("Введи двоичное целое")
  Debug.Print "a(2)="; a,
Do     b = b + (a Mod 10) * 2 ^ k ' Формирование результата     k = k + 1
    a = a \ 10                 '
Отбрасывание учтенных разрядов
  Loop While a > 0
  Debug.Print "b(10)="; b
End Sub
Макрос CC2 — перевод числа  из десятичной системы
счисления в двоичную
Напишем макрос, позволяющий выполнить
перевод введенного десятичного числа в двоичное и вывести результат
пользователю (листинг 8.9).

Sub CC2()
  ' Перевод a(10) в b(2)
  ' CC2 Макрос
  ' Макрос создан 13.02.2010 BLACK   a
= InputBox("Введи десятичное целое")
  Debug.Print "a(10)="; a,
Do     c = a Mod 2          ' Определение остатков     a = a \ 2            '
Определение частных     b = c * 10 ^ k + b   ' Формирование результата     k =
k + 1   '
  Loop While a > 0
  Debug.Print "b(2)="; b
End Sub
Макрос ШкольныеОценки
Макрос ШкольныеОценки предлагает ввести пользователю
некоторую оценку и выводит ее словесный эквивалент (листинг 8.10).

Sub ШкольныеОценки()
  ' ШкольныеОценки Макрос
  ' Макрос создан 19.02.2010 BLACK
For i = 1 To 5
    c = InputBox("Введите
оценку")
    Select Case c
      Case 2: MsgBox ("Это оценка
плохо")
      Case 3: MsgBox ("Это оценка
удовлетворительно")
      Case 4: MsgBox ("Это оценка
хорошо")
      Case 5: MsgBox ("Это оценка
отлично")
      Case Else: MsgBox ("Такой
оценки нет")
    End Select
  Next
End Sub
Макрос ТекстАсимволамиТекстаВ
Макрос ТекстАсимволамиТекстаВ выполняет проверку
возможности записать текст А символами текста В, т. е. строка текста B — это
некий алфавит. Например:
A
=
"привет"
B
=
"веипрт"
В этом случае текст А можно записать
символами текста B. А при
A = "привет" B = "веипрф" нельзя, т. к. в
строке B нет символа "т".

Sub ТекстАсимволамиТекстаВ()
  ' ТекстАсимволамиТекстаВ Макрос   '
Макрос создан 20.02.2010 BLACK   a$ = InputBox("Введите текст А")
b$ = InputBox("Введите текст B")
  For i = 1 To Len(a$)
    For j = 1 To Len(b$)
      If Mid$(a$, i, 1) = Mid$(b$, j,
1) Then flag = 1
    Next j
    If flag = 0 Then
      MsgBox("Текст А нельзя
записать символами текста В"): End     Else       flag = 0
    End If
  Next i
  MsgBox("Текст А можно записать
символами текста В") End Sub
8.4. Операторы VBA
Оператор If...Then...Else
Этот оператор изменяет ход выполнения программы в
зависимости от резуль- тата проверки условий. Он имеет два варианта записи:
однострочный и бло- ковый.
Синтаксис 1 (однострочный):
If <выражение> Then
<операторы–then> [Else <операторы–else>] Синтаксис 2
(блоковый):
If <выражение 1> Then
    [<операторы1>]
[ElseIf <выражение 2> Then
    [<операторы 2>]       ...
[Else
     [<операторы n>] ]
End If
Параметры <выражение>,
<выражение 1>, <выражение 2> — логические
условия. Это логические константы, переменные и выражения, принимающие значения
True (истина) или False (ложь).
Параметры <операторы
1>, <операторы 2>,
... представляют собой один или более операторов в одной или нескольких
строках. Операторы в одной строке разделяются двоеточиями.
При выполнении условного блокового оператора проверяется
первое выражение и при его истинности выполняется первый блок операторов. Иначе
проверяются все логические условия, следующие за словом ElseIf до тех пор, пока не будет найдено условие,
принимающее значение "истина". В этом случае выполняется блок
операторов за словом Then,
иначе выполняется блок операторов за словом Else. Блоки ElseIf и Else
необязательны.
Любые блоки в операторе могут содержать вложенные блоковые
операторы If. Оператор If должен быть первым в строке
программы.
Условный однострочный оператор отличается от блокового
наличием операторов после слова Then
в этой же строке. Однострочный оператор более подходит для кратких условий и
простых действий, приводящих к записи строк небольшой длины.
Блочный оператор If...End If
хотя и требует больше строк для записи, но более нагляден, понятен, лучше
показывает структуру ветвления. Поэтому он более предпочтителен на начальных
этапах знакомства с программированием ветв- лений.
Примеры на ветвление:
 однострочный
оператор
x = InputBox("Введите целое
число")
If x Mod 2 = 0 Then Print "Это
число четное" Else Debug.Print _ "Это число нечетное"
 блочный
оператор
x = InputBox("Введите натуральное
из диапазона от 1 до 10")
If x < 1 Or x > 10 Then
  MsgBox "Введено число вне
диапазона"
ElseIf x Mod 2 = 0 Then
  MsgBox "Введено четное
число"
ElseIf x Mod 2 = 1 Then
  MsgBox "Введено нечетное
число"
Else
  MsgBox "Внимательнее при
вводе" End If
Оператор Select Case
Оператор Select
Case соответствует
рассмотренным при знакомстве с алгоритмическим языком операторам
"выбор" и "выбор — иначе". Он позволяет упростить запись
кода программ при большом числе ветвлений. Рассмотрим его синтаксис.
Select Case <выражение для
проверки>
  Case <список 1>
    <блок операторов 1>   Case
<список 2>
    <блок операторов 2>
...
  Case Else
    <блок операторов n>
End Select
Параметр <выражение
для проверки> — любое числовое или строковое выражение, в зависимости
от значения которого выполняется соответствующий <блок операторов>. Параметры <список 1>, <список 2> и т. д. — это
списки выражений, записанных в следующих формах:
 выражение [,выражение...], например, Case 1, 3, 5, 7, 9; Case a, b, c, d;
 выражение Тo выражение,
например, Case 5 To 13; Case a To d;
 Is операция отношения, например, Case Is<20; Case Is<>a.
В списках могут быть использованы различные формы
записи, например,
Case 2, 5, 8 Тo 15, 18, 25 Тo 30, Is
>50
Далее показан пример с различными вариантами записи
выражений для про- верки:
k = InputBox("Введи целое число
из диапазона 1...10")
Select Case k
  Case 1, 3, 5, 7, 9
    Debug.Print "Число "; k;
" нечетное"
  Case 2, 4, 6, 8, 10
    Debug.Print "Число "; k;
" четное"
  Case Is>10
    Debug.Print "Введено число
большее, чем требуется"
  Case Is<1
    Debug.Print "Введено число
меньшее, чем требуется" End Select
Операторы цикла
Различают циклические алгоритмы с заранее известным
(цикл типа "для") и неизвестным (цикл типа "пока") числом
повторений.
Оператор For...Next
Оператор For...Next
организует в программе выполнение группы операторов заданное число раз (число
повторений известно). Его синтаксис:
For счетчик = начало To конец [Step
шаг]     [операторы] [Exit For]
Next [счетчик][, счетчик...]
Параметр счетчик
— числовая переменная. Это параметр цикла. Его значения изменяются от
задаваемого пользователем параметра начало и до параметра конец. Значение счетчика при прохождении цикла каждый раз
увеличивается на величину параметра шаг. Если параметр шаг
не указан, то по умолчанию он принимается равным единице. Шаг может быть
отрицательным числом. В этом случае начальное значение счетчика должно
превышать конечное.
Оператор Exit...For
позволяет выйти из цикла при выполнении заданного  условия.
Пример задачи с циклом For...Next:
Print "Сумма нечетных натуральных
от 1 до 99 равна "; For a = 1 To 100 Step 2   s = s + a Next
Debug.Print s
Оператор Do Loop
Организует циклический процесс без счетчика. Управляет
ходом выполнения программы по указанным условиям.
Синтаксис 1 (цикл с предусловием):
Do [{While | Until} выражение]
  [операторы] [Exit Do]
Loop
Синтаксис 2 (цикл с постусловием):
Do
  [операторы] [Exit Do]
Loop[{While | Until} выражение]
Параметр выражение
представляет собой логическое условие, которое может быть истинным и ложным.
Блок операторов, заключенный между ключевыми словами Do и Loop, является телом цикла.
Блок операторов
циклически выполняется до тех пор, пока условие, определяемое параметром выражение, истинно (при
использовании ключевого слова While)
или до тех пор, пока условие не станет истинным (при использовании Until).
Другими словами
это можно записать так: "Делай" (Do) "петлю" (Loop) до тех пор, "пока" (While) условие выполняется, или
"пока" (Until)
условие не будет выполнено.
Рассмотрим пример задачи с оператором Do Loop.
В следующей программе вычисляется количество натуральных
чисел, кратных числу 3, сумма которых не превосходит заданную величину.
Dim s As Integer, a As Integer, k As
Integer
s = InputBox("Введите
максимальное натуральное кратное числу 3") Do While a <= s   a = a +
3   k = k + 1
Loop
Debug.Print "k= "; k — 1
Массивы
Статические массивы
Параметры массивов этого типа задаются в процессе
проектирования и не могут изменяться во время выполнения программы. При задании
массивов им присваиваются имена. Например, массив w(16) или w(0 To 16) — одномерный массив, имеет одно измерение, 17 элементов.

Определяются массивы, как и переменные, но не могут
определяться внутри процедур. Максимальное число размерностей в массиве 60.
Максимальный размер (число элементов) каждой размерности 32 767.
{Dim | Static | Public} <Имя
(границы)> As <тип>
Динамические массивы
Массивы этого типа могут изменять границы своих индексов
в процессе работы программы. Так как предельные значения индексов заранее не
известны, то динамические массивы определяются с пустыми скобками, например:
Dim ИмяМассива() As String
Коррекция границ массива производится с помощью
оператора ReDim внутри
процедуры, в которой требуется изменить число элементов массива или его
размерность. Если начальное определение массива определяет его тип как Variant, то оператором ReDim можно задать и тип
массива. Чтобы при изменении размеров или размерности массива исключить потери
информации, в строку определения после оператора ReDim записывают ключевое слово Preserve. Один оператор ReDim может доопределить несколько массивов:
ReDim [Preserve] Имя1(границы) [As
тип] [, Имя2(границы) [As тип]] . . .
Ввод массива присваиванием значений
Далее показан фрагмент программы, в которой определяется
массив из пяти целых чисел. Ввод массива выполнен простейшим способом —
присваиванием значений элементам массива. Вывод массива производится в одну
колонку. Выводится имя элемента с номером и его значение.
Часть кода макроса с вариантом ввода и вывода массива:
Dim a(4) As Integer
a(0) = 7: a(1) = 5: a(2) = 8: a(3) =
12: a(4) = 3
For i = 0 To 4
  Debug.Print "a("; i;
") = "; a(i)
Next
Ввод массива и функция InputBox
Приведенный далее фрагмент программы определяет массив
фиксированной длины с явно заданной нижней границей номеров элементов. Все пять
элементов массива строкового типа. Они вводятся в цикле по запросам функции InputBox. Вывод массива
организован в одну строку.
Dim b(1 To 5) As String For i = 1 To 5

  b(i) = InputBox("Введите
элемент массива с номером  " & i)
Next
For i = 1 To 5: Debug.Print "
b("; i; ")="; b(i),: Next
Ввод динамического массива
С помощью функций InputBox вводятся размер массива и значения элементов.
Как правило, программы пишут для наиболее общих случаев. Это согласуется с
возможностью ввода размера массива с клавиатуры.
Dim с() As Integer
n = InputBox("Введите размер
массива")
ReDim c(n)
For i = 0 To n: c(i) =
InputBox("Введите значение элемента " & i): Next
For i = 0 To n: Print "c(";
i; ") = "; c(i): Next
Использование функции Array
Функция Array(список
аргументов) позволяет задавать список не обязательно одного типа
величин, с которыми можно выполнять различные действия. В этом случае по
умолчанию элементам массива присваивается тип Variant.
a = Array("CO", 4,
"LOR", 25) b = a(0) + a(2): Debug.Print "b = "; b    '
Печатается b = COLOR c = a(1) * a(3): Debug.Print "c = "; c    '
Печатается c = 100
Функцию удобно использовать для задания тестов при
проверках функционирования программ обработки массивов.
a = Array(5, -7, 0, 4, 0, 9, -6, 4)
For i = 0 To 7   Debug.Print a(i);   s
= s + a(i)
Next
Debug.Print: Debug.Print "s =
"; s
Использование случайных чисел
Случайными называют числа, значение которых заранее
неизвестно. При отладке программ удобен ввод массивов случайных чисел,
генерируемых с помощью функции Rnd.
Такие массивы служат простейшими тестами, проверяющими  работоспособность
создаваемых программ решения задач. Чтобы функция Rnd генерировала с каждым запуском различные
последовательности чисел, она  используется совместно с оператором Randomize.
Dim d(1 To 7) As Integer
Randomize For i = 1 To 7
  d(i) = Int((Rnd * 10) + 1)
  Print d(i);
Next
Далее приведены варианты присваивания элементам массива
различных последовательностей случайных чисел.
a(i)=INT(RND*100+1)          '
натуральные числа [1,100] b(i)=INT(RND*100 — 50)       ' целые числа из
интервала [–50,49] c(i)=INT(RND*100 — 50) / 10  ' дроби из интервала [–5.0,4.9]
d(i)=INT(RND*100 — 30)       ' целые, больше положительных e(i)=INT(RND*180 +
50)       ' рост человека f(i)=INT(RND*40 + 740)       ' атмосферное давление

ПРИЛОЖЕНИЕ

Решения и ответы к заданиям
К ГЛАВЕ 1

Задание 1.1

Варианты ответа

1) O, P, S,
  не стоящая в середине

2) М, О, S

3) Согласная, если
1-я гласная, и наоборот

Решение

SMP

+

+

–

Нет

MSO

–

+

+

Нет

SNO

+

–

+

Нет

OSN

+

+

+

Да

Задание 1.2

Варианты ответа

1) А, Е, И

2) После
  гласной — согласная, после согласной — гласная

3) Не А

Решение

АИБ

+

–

+

Нет

ЕБА

+

+

–

Нет

БИВ

–

+

+

Нет

ИБИ

+

+

+

Да

Задание 1.3
Объем звукового фрагмента равен:
16 бит × 32 Гц × 128 сек / 8 = 8 байт.
Ответ: 8 байт.
Задание 1.4
4) BSNE .
К ГЛАВЕ 2

Задание 2.2
3) КАВАРДАК.
Задание 2.3
3) bdcea.
Задание 2.4
Обозначим x — количество мячей НЕ желтого цвета.
Вероятность извлечь такой мяч равна p x= / 32. При этом известно I =4 бита информации. В
известную формулу I = log (1/2 p) подставим значения p и I. Получили равенство 4 = log (32/ )2 x ,
из которого вычисляем количество мячей НЕ желтого цвета:
24 = 32/ x , 16 = 32/ x, x=2 . Остальные 30 мячей желтые.
Ответ: 30.
К ГЛАВЕ 3

Задание 3.1
Проще всего, используя способы быстрого перевода,
перевести ответы. Можно перевести и исходное число в двоичную систему,
например, методом деления на основание новой системы. Получив результат,
желательно проверить его правильность обратным переводом.
Ответ: 2) 110012 .
Задание 3.2
В любой позиционной системе счисления с целочисленным,
положительным основанием основание системы ( p ) записывается так: p( )p =10( )p .
Например, 210 =10 , 310 =103, 810 =108 и т.
д.
2
Сумма равна 2 8 16 26+ + = 10 =110102 .
Ответ: 11010.
Задание 3.3
При переводе десятичного числа в новую систему
счисления методом деления на основание р новой системы первый остаток от деления
является младшей цифрой записи числа в новой системе. В соответствии с заданием
этот остаток должен быть равен 2. Поэтому требуется определить такие значения
основания р, которые приводят к выполнению равенства 23 Mod p = 2. Равенство
выполняется при р
= 3, 7, 21. Заметим, что эти числа являются делителями числа 21 (21 = 23 – 2).
При решении подобных задач еще раз убеждаемся в полезности
представления чисел в виде разложения по степеням основания:
                           2310 = a p a p a2 2
+ 1 + 0 =1 21⋅ + 2 = 3 7⋅ + 2 = 2 3⋅ 2 +1 3⋅ + 2,
откуда имеем 2310 =1221 = 327 = 2123 .
Ответ: 3, 7, 21.
Дополнительные задачи к заданию 3.3
(6, 9, 18), (5, 15, 45), (6. 12, 24), (6, 12, 24), (5,
6, 15, 30), (11, 33), (8, 12, 24), (8, 16, 32).
Задание 3.4
Формула разложения числа по степеням основания: a p a p
a2 2 + 1 + 0 . Подставим заданные
значения цифр разрядов: 1⋅ p2 +1⋅ p +0 = p2 + p +0.
Уравнение p2 + p =12 решается просто: p = 3.
Ответ: p = 3.
Задание 3.5
Разложение числа по основанию p записывается так:
                                                                    A( )p = a p a p a2 ⋅ 2 + 1 ⋅               + 0 .
Для нашей задачи подходит такая запись:
                                                          A( )p =1 4 0 4 1 16 0 1
17⋅ 2 +         ⋅    + =         +             + =         .

Как и в предыдущей задаче, поиск результата сводится к
решению квадратного уравнения:
                                                                  1⋅
p2 + 0⋅ p + =1 17.
Ответ: 4.
Дополнительные задачи к заданиям 3.4 и 3.5
3, 6, 3, 5, 6, 7, 4, 3.

Задание 3.6
Существуют два варианта решения. Первый вариант —
перевести число 83, например, методом последовательного деления в двоичную
систему и сравнить результат с заданными в таблице.
Второй вариант. Для перевода заданных ответов
используем один из спосо- бов быстрого перевода двоичных чисел (поразрядный
просмотр числа слева  с удвоением результатов).
Ответ: 10100112 .

Задание 3.7
2) 101010002.

Задание 3.8
Переводим любым способом число 126 в двоичную систему и
считаем количество нулей в двоичном коде числа: 12610 =11111102 .
При решении подобных задач полезно знать быстрые
способы перевода и степени числа 2:
27 =12810 =100000002, 12710 =11111112
, 12610 =11111102 .
Ответ: 1 ноль.

Задание 3.9
Два варианта:
 первый
вариант: переводим числа в десятичную систему, в ней же их суммируем, сумму
переводим в двоичную систему.
x
a= 1 ⋅16+ a0 =116 13 29⋅  +             =             ,

y
a= 1 ⋅8+ a0 = 7 8 2 58⋅       +             =             ,
z= + =29 58 87 ,

z=8710 =10101112;
 второй
вариант: переводим числа в двоичную систему поразрядно и получаем их сумму.
x=111012 , y=1110102
, z x y= + =1010111.
Ответ: 4) 10101112 .
Задание 3.10
Переведем все числа в шестнадцатеричную систему: N C= 716 , M CD= 16 .
1)
19516 ;   3) CE16 ;
2)
C616 ;   4) CA16 .
Условию задачи удовлетворяет вариант ответов номер 4.
Ответ: C716 <CA16 <CD16.
Задание 3.11
101110112

Задание 3.12
9910 =9
10 9 99× + = 10,
778 = 7×8+ =7      6310,
556 = 5×6+ =5    3510 , 22 2 3 2 83 = × + = 10 .
Задание 3.13
88 8 9 8 809 =
× + = 10 ,
66 6 7 6 487 = × + = 10 ,
44 4 5 4 245 = × + = 10 , 11 1 2 1 32 = × + = 10.
Задание 3.14
Результат кодирования следующий: А — 00, Б — 01, В —
10; Г — 11.
Слово БГАВ кодируется так: 01110010 2, что
при переводе дает: 7216.
Задание 3.15
4) ВА.
Задание 3.16
3) 11.

К ГЛАВЕ 5

Задание 5.1
По закону де Моргана (инверсия дизъюнкции равна
конъюнкции инверсий) имеем:

                                                                         (А∨ В А В) =   ⋅         .

Ответ: А В⋅    .
Задание 5.2
Выпишем из таблицы конституенты единицы и нуля функции
F:

                                                                     X
Y Z X Y Z X Y Z⋅     ⋅    ,   ∨        ∨             ,              ⋅              ⋅              .

Конституента нуля, равная нулю на наборе 001, совпадает
с третьим вариантом из предложенных ответов.

Ответ: X Y Z∨
∨ .
Задание 5.3
Исходное логическое выражение — импликация
(следование). Импликация принимает значение 0 (ложь) только на одном наборе
значений своих аргументов — 10 (истина, ложь).
Посылка
импликации (K ∨ M) равна 1 на наборах KМ = 00, 01 и 11.
Заключение импликации (L∨ M N∨ ) равно 0
только на наборе LMN = 100, который однозначно, без вариантов определяет
значения переменных L, M и N. Поэтому истинность (равенство единице) посылки
импликации определяет переменная K = 0.
Ответ: KLMN = 0100.
Задание 5.4
Первый вариант. Высказывание (X > 1) ⋅ ((X
< 5) → (X < 3)) — конъюнкция (логическое произведение) истинна,
когда истинны оба сомножителя:
(Х > 1) = истина, для вариантов ответов 2, 3 и 4.
Импликация (X < 5) → (X < 3) принимает
значение "истина" на наборах значений аргументов в скобках: ложь —
ложь, ложь — истина и истина — истина. Из всех вариантов ответов подходит
только вариант 2, при котором выражение (2 < 5) → (2 < 3) = истина,
т. к. обе скобки содержат истинные высказывания.
Второй вариант. Будем последовательно подставлять
значения аргумента Х и вычислять значения высказывания.
X > 1 ∧ ((X < 5) → (X < 3))

Х = 1

0 ∧ (1 → 1) = 0 ∧ 1 =
  0

Х = 2

1 ∧ (1 → 1) = 1 ∧ 1 =
  1

Х = 3

1 ∧ (1 → 0) = 1 ∧ 0 =
  0

Х = 4

1 ∧ (1 → 0) = 1 ∧ 0 =
  0

Ответ: 2) Х = 2.
Задание 5.5
Выписываем из таблицы конституенты единицы и нуля
функции F (полные конъюнкции и дизъюнкции переменных X, Y, Z, равные нулю и
единицам на приведенных в таблице наборах):

                                           X
Y Z⋅                  ⋅ =1, X Y Z∨           ∨ = 0, X Y
Z∨              ∨             = 0.
Первая конституента единицы совпадает с четвертым
вариантом ответа.

Ответ: 4) X Y Z⋅   ⋅    .
Задание 5.6
Подбором и перебором решать такую задачу опасно, т. к.
возможно появление ошибок. Наиболее целесообразно получить путем преобразований
каноническую форму заданной функции. Число конституент единицы будет равно
искомому количеству наборов.
Будем использовать более наглядные способы записи:

                                           (K
∧ L ∧ M) ∨ (¬L ∧ ¬M ∧ N) = KLM LMN∨        .
Рассмотренным в разделе о канонических формах булевых
функций приемом получим СДНФ заданной функции:
F(K LM N KLM LMN
KLM N N, ,               ,              ) =           ∨             =             (
∨ ∨ ∨) (K K LMN)            =
                                                            =KLMN
KLMN KLMN KLMN∨           ∨           ∨             .
Получили 4 конституенты единицы. Заданное в задаче
равенство выполняется на наборах 1111, 1110, 1001 и 0001.
Ответ: 4 набора.
Задание 5.7
Решение
Первый вариант. Левый член дизъюнкции — выражение (X
> 4) для всех четырех указанных значений ответов ложно. Чтобы заданное
высказывание было истинным, необходимо, чтобы правый член дизъюнкции
(импликация) был истинным выражением.
Импликация принимает значение 1 (истина) на наборах
значений своих аргументов 00, 01 и 11. Второй и третий наборы исключаются, т. к.
из указанных значений нет такого, чтобы выражение (Х > 4) было истинным.
Остается набор 00, при котором оба аргумента импликации должны быть равны нулю
(быть ложными). Это выполняется только при значении Х = 1.
Второй вариант более наглядный. Последовательно
подставляя в формулу значения Х, вычисляем значения заданного высказывания.
(X > 4) ∨ ((X > 1) → (X
> 4))? Х = 1 0 ∨ 0 → 0 = 1
Х = 2 0 ∨ 1 → 0 = 0
Х = 3 0 ∨ 1 → 0 = 0
Х = 4 0 ∨ 1 → 0 = 0 Ответ: Х =
1.
Задание 5.8
В таблицу вписаны одна конституента нуля R(0) и две
конституенты единицы K(6) и K(5). Из заданных выражений две конституенты нуля
(R(7) и R(0)) и две конституенты единицы (K(2) и K(7)).
Ответ: F соответствует R(0) — выражение 3.
Задание 5.9
Так как инверсия импликации должна быть истинным
выражением, то сама импликация должна быть выражением ложным. Это может быть
только в случае, когда посылка (левая часть импликации) является истинным
выражением, а заключение — ложным.
Посылка истинна для имен 2 и 4, а заключение ложно
только для имени 2 (Николай).
Ответ: 2) Николай.
Задание 5.10
Из четырех выражений две конституенты единицы и две
конституенты нуля: K(1), K(5) и R(3), R(6). В таблицу вписаны одна конституента
единицы и две конституенты нуля: R(4), K(1), R(2). Совпадает с таблицей первый
вариант.
Ответ: 1)¬ ∧¬ ∧X      Y Z .
Задание 5.11
((х > 2) ∨ (x > 5)) → (x < 3)

x = 5

(1 ∨ 0) → 0 = 0

х = 4

(1 ∨ 0) → 0 = 0

х = 3

(1 ∨ 0) → 0 = 0

х = 2

(0 ∨ 0) → 1 = 1

Ответ: х = 2.
Задание 5.12
Первый вариант. Задано уравнение (K ∨ M) →
(M ∨ ¬L ∨ N) = 0. В скобках два выражения — логические переменные
импликации. Импликация принимает значение "ложь" только на одном
наборе значений своих аргументов: 1 (истина) и 0 (ложь), т. е. (истина) →
(ложь) = (ложь). Это равенство имеет глубокий смысл: то, что за истиной следует
ложь (истина является причиной лжи) — высказывание ложное.
Выражение слева, которое должно принять значение
"истина", представляет собой дизъюнкцию переменных K и М. Чтобы эта
дизъюнкция приняла значение "истина", достаточно, чтобы хотя бы одна
из ее переменных была истинной.
Но выражение справа, которое должно принять значение
"ложь", также представляет собой дизъюнкцию, все члены которой должны
обеспечить ей значение "ложь". Это получим, если М = ложь, L =
истина, N = ложь. Поэтому для истинности левого аргумента импликации необходимо
принять K = истина.
В результате имеем: K = истина, L = истина, M = ложь, N
= ложь.
Второй вариант. Заданное выражение переведем в СКНФ,
что позволит определить набор переменных, на которых выражение равно нулю.
Используем тождества:

                    x
→ y x y x y x y x y z= ∨ ;  ∨                         =              ⋅
;              ⋅                   ∨  = (x z∨ ) (⋅ y z
x x∨ );        ∨             =1; x ∨ =1                           1;
x⋅ =1 x.
                                 (K
M∨ ) → (M L N KM M L N∨ ∨ =) ∨ ∨ ∨ =

                                              =
(K∨ ∨ ∨M L N M M L N K L M N)( ∨ ∨ ∨ =
∨ ∨ ∨)     .
Получили, что выражение принимает значение
"ложь" на наборе KLMN = 1100.
Ответ: KLMN = 1100.
Задание 5.13
Преобразования выражения начинаем с введения в скобки
конъюнкций прямого

и инверсного значений недостающих аргументов (С
С⋅ ) и (А⋅ А)
. После этого применяем второй распределительный закон и получаем четыре
дизъюнкции трех аргументов. Затем снова вводим в скобки конъюнкции недостающих
аргу-

ментов (D⋅D) и (B B⋅ ) . Новое применение распределительного
закона дает
8 дизъюнкций четырех аргументов (8 конституент нуля
заданной функции),  в числе которых имеются две равные (подчеркнуты). Применяем
закон:
Х Х Х⋅  =      .

= (A B C D A B C D A B C D A
B C D∨         ∨             ∨             )
(⋅          ∨             ∨             ∨             )
(⋅          ∨             ∨               ∨             )
(⋅          ∨             ∨             ∨             )&
= (A B C D A B C D A B C D A B C D∨    ∨             ∨             )
(⋅               ∨             ∨             ∨             )
(⋅          ∨             ∨             ∨             )
(⋅          ∨             ∨             ∨             ).
В результате получили, что заданное выражение (СКНФ
заданной функции) принимает значение "ложь" на семи наборах значений
своих переменных (подчеркнуты две конституенты нуля, из которых оставили одну).

Имея небольшие навыки преобразований логических
выражений, можно существенно сократить выкладки по определению искомых
конституент нуля, если из каждой заданной дизъюнкции двух аргументов получать
четыре дизъюнкции четырех аргументов за один прием, например, так:
(x
x1 ∨ 2) = (x x1 ∨ 2     3
= (x1
∨ x2 ∨ x3 ∨ x4)
(⋅ x x1 ∨ 2 ∨ x3 ∨ x4)
(⋅ x x1 ∨ 2 ∨ x3 ∨ x4)
(⋅ x x1 ∨ 2 ∨ x3 ∨ x4).
Аналогично поступаем со второй парой переменных, что
дает еще четыре конституенты нуля. После этого удаляем одну из равных
конституент нуля. В итоге имеем 7 решений.
Задание 5.14
Упростим
запись условия. Воспользуемся свойством импликации и законом  де Моргана:
a→ = ∨b a b , x y x y∨ = ∧ .

X→ ∧ = ∨ ∧ = ∧ ∧Y Z X Y Z X Y Z .
Ответ: выражение соответствует строке 3.
Задание 5.15
3) А ∨ В.

К ГЛАВЕ 6
Ответы
к заданиям по минимизации сложности формул с помощью таблиц Вейча:
1.
x x1 2 ∨xx1 3 ∨x x1 3,  xx1 3 ∨xx1 2 ∨x x2 3 .
2.
xx1 2 ∨x x2 3 .
3.
x3
∨ x x2 ∨
x x1
4.
x x1 3 ∨ x x1 2 ∨ x x2 3 ∨ x x x1
2 3 .
5.      x1 ∨ ∨x2 x3 .
7.
x x1 4
8.      x3 ∨
9.
x x1 2
1 3
К ГЛАВЕ 7

Задание 7.1
Положительный ответ — при истинности соответствующих
логических выражений:
1.    a = b And b = c.
2.    a = b And a<>c And b<>c Or
b = c And a<>b And a<>c Or a = c And a<>b And b<>c.

3.    a2 = b2 + c2
Or b2 = a2 +c2 Or c2 = a2
+ b2.
4.    a2 < b2 + c2
Or b2 < a2 + c2 Or c2 < a2
+ b2.
5.    a2 > b2 + c2
Or b2 > a2 + c2 Or c2 > a2
+ b2.
Задание 7.2
Положительный ответ — при истинности логического
выражения:
a = b And b = c And c = d
Задание 7.3

 X M C G1 =  ⋅     ⋅         =
M And C And Not G;
 X2 = O I⋅( ∨U) = O And (I Or U);
 X3 =(N C M∨ →)                   = (N Or C) Imp M;

 X4 = N
M⋅            →G I U⋅ ⋅           = N And M Imp Not G And Not I And Not U;

 X5 =(D C∨ →) P= (D
Or C) Imp P;
 X7 = P
O⋅                → I = P And O Imp I;
 X G T N U8 = ↔  ⋅     ⋅           =
G Eqv T And N And U;

 X С D P9 =   ⋅      →            =
Not C And Not D Imp Not P;

 X10 = (U ∨ I) ↔ O = (U
Or I) Eqv O;
 X11 = S
O⋅          ↔ P T⋅       = S And O Eqv P And T;
 X12 = I U
G⋅       ⋅      → S O⋅        = I And U And G Imp S And U.

Задание 7.4
На разговорном языке:
 Y1 = "Шляпка гриба красная
и гриб трубчатый";
 Y2 = "Гриб подосиновик или
лисичка";
 Y3 = "Если гриб трубчатый,
то это не сыроежка и не груздь";
 Y4 = "Если гриб подосиновик или
боровик, то он трубчатый и съедобный";
 Y5 = "У гриба шляпка красная, или коричневая,
или желтая, или зеленая тогда и только тогда, когда этот гриб — сыроежка";

 Y6 = "Чтобы у гриба была шляпка белая,
необходимо и достаточно, чтобы он был груздем, а не боровиком и тем более не
лисичкой";
 Y7 = "Если гриб груздь и сыроежка, то
он не ядовитый и съедобный";
 Y8 = "Чтобы гриб был
съедобный и не ядовитый, необходимо и достаточно, чтобы это был или боровик,
или лисичка, или груздь";
 Y9
=
"Гриб пластинчатый и млечник тогда и только тогда, когда он груздь, а не
сыроежка и не лисичка";
 Y10
=
"Чтобы грибы были съедобные, достаточно, чтобы это были или лисичка с
желтой шляпкой, или боровик с коричневой шляпкой, или подосиновик с красной
шляпкой";
 Y11
= "Чтобы гриб был съедобным, необходимо и достаточно, чтобы он не
был ядовитым";
 Y12
=
"Чтобы гриб был с зеленой шляпкой, необходимо, чтобы он не был  боровиком,
не был подосиновиком, не был груздем, а был сыроежкой".
На языке программирования:
 Y1 = K And D;
 Y2 = P Or L;
 Y3 = D Imp Not W And Not G;
 Y4 = P Or B Imp D And C;
 Y5 = (K Or R Or Z Or U) Eqv W;
 Y6 = T Eqv G And Not B And Not L;  Y7 = G And W Imp Not J And C;
 Y8 = C And Not J Eqv B Or L Or G;

 Y9 = E And M Eqv G And Not W And Not L;  Y10 = L And Z Or B And R Or P And K Imp C;
 Y11 = C Eqv Not J;
 Y12 = U Imp Not B And Not P And Not G
And W.
Задание 7.5
 Y K A P V1 =                                    ⋅  ⋅(
∨ ) = K And A And (P
Or V).

 Y2 = (K M B
D∨   )⋅     ⋅            = (K
Or M) And B And Not D.
 Y3 =V → (A∨ K) = V Imp (A Or K).
 Y A K4 =     ⋅           ⋅
↔ (D V∨ ) = (A And
K) Eqv (D Or V).

 Y T P5 =     ⋅             →
(R G∨ ) = (T And P) Imp (R
Or G).

 Y SZ6 =
→ ∨(K А)= Not
S And Z Imp (K Or А).
 Y7 = (P A V
M→ ) (⋅    →               ) = Not (P Imp A) And Not (V Imp A).
 Y8 =(KB GA∨ )→ ∨ =(S Z) Not (K And B Or G And A Imp S Or Z).

Задание 7.6
Если при формализации
задачи простые высказывания обозначить так: С = "снег", D =
"дождь", М = "мороз", Р = "пасмурно", то все
четыре ответа синоптика могут быть записаны следующими формулами:
 F1 =M→
→(C P) ,                                      F1 = M Imp (P Imp C);
          2                                                                                F2 = (Not M And C) Imp P;
 3                                                                                F3 = P Imp (Not C And Not D);
 F4 =M→
→ ∨(P C D),                                   F4 = Not (Not M Imp (P Imp C Or D).
Итоговая функция равна: F = F F F F1 ⋅ 2 ⋅ 3 ⋅ 4 .
После подстановки переменных и упрощения логического
выражения получаем:

F =
C D M P⋅
⋅ ⋅ , что означает "ни мороза, ни снега, ни
дождя, но пасмурно" ( F=1 на наборе 0001).
Макрос представлен в листинге П1.

Sub Задание_7_6()
  Debug.Print "
C"; "  D"; "  M"; "  P", " F"
  For C = 0 To 1: For D =
0 To 1: For M = 0 To 1
  For P = 0 To 1
    F1 = M Imp (P Imp C)
    F2 = (Not M And C) Imp
P
    F3 = P Imp (Not C And
Not D)
    F4 = Not (Not M Imp (P
Imp C Or D))
    F = F1 And F2 And F3
And F4
    If F = 1 Then
Debug.Print C; D; M; P, F
  Next P, M, D, C
End Sub
Результат решения задачи показан на рис. П1.

Рис. П1. Результат решения задания 7.6

Задание
7.7
Введем обозначения использованных в высказываниях
элементарных поня- тий:
 P
= "Объект — перехватчик ПВО";
 H = "Высота
полета объекта больше 10 км";  V = "Скорость объекта превышает скорость звука";  N = "Объект — НЛО".

Инверсии этих высказываний понимаются так:
 P
= "Объект не перехватчик ПВО";
 H = "Высота полета меньше 10 км";  V = "Скорость меньше
скорости звука";
 N
= "Объект не НЛО".
Запишем высказывания школьников:
                                                                       f1 = H ∨ P V⋅  ,

                                                                        f2 = H → P V⋅   ,

f3 = N ∨V,
f4 =V → N.
Ограничение на то, что объект не может быть
одновременно и перехватчиком, и НЛО, записывается так:

                                                                      f5 = P N⋅   ∨ P
N⋅ .
Логическое произведение всех пяти истинных выражений
дает функцию, равную единице, только на одном наборе значений аргументов P, H,
V и N. Этот набор равен 0101, что указывает на то, что объект не перехватчик,
летит на высоте выше 10 км, скорость его ниже скорости звука и этот объект —
НЛО.
Задание
7.8
Введем обозначения: a = "С усами", b =
"Брюнет", c = "Блондин", d = "С портфелем" и e =
"Шатен".
Выпишем высказывания свидетелей пока без учета их
ошибок.

 Первый свидетель:

"b И
  a",    b a⋅   .

 Второй свидетель:
 Третий свидетель:

"c И НЕ a", c a⋅.
"c И
  НЕ d", c d⋅      .

 Четвертый свидетель:

"e И
  d",    e d⋅   .

С учетом того, что каждый из свидетелей ошибся в одном
из своих показаний, запишем их показания следующими формулами:
 f1 = a b⋅          ∨ a b⋅    = a Xor b;
 f2 = c a⋅ ∨ c a⋅ = c Xor Not a;  f3 = c d⋅ ∨ c d⋅ = c Xor Not d;
 f4 = e d⋅          ∨ e d⋅    = e Xor d.
Ограничение на то, что правонарушитель может быть
одновременно только или блондином, или брюнетом, или шатеном, записывается
следующей формулой:
                                                          f5 = b c e⋅          ⋅         ∨b
c e⋅ ⋅             ∨b c e⋅  ⋅ .
Логическое произведение всех пяти функций и упрощение
полученной формулы приводят к решению задачи:
                                                         f
= f1 ⋅ f2 ⋅ f3 ⋅ f4 ⋅ f5 = a b c d e⋅  ⋅
⋅       ⋅ .
Функция f принимает значение 1 (истина) на наборе
10110, т. е. правонарушитель блондин с усами и с портфелем.
Решение задачи программным способом приведено в
листинге П2, а результат представлен на рис. П2.

Sub Задание_7_8()
  Debug.Print "a
"; "b  "; "c  "; "d  "; " e",
" f"
  For a = 0 To 1: For b = 0 To 1: For
c = 0 To 1   For d = 0 To 1: For e = 0 To 1    f1 = a Xor b    f2 = Not a Xor
c    f3 = Not d Xor c    f4 = d Xor e
   f5 = (b And Not c And Not e) Or
(Not b And c And Not e) _          Or (Not b And Not c And e)    f = f1 And f2
And f3 And f4 And f5
   If f <> 0 Then
Debug.Print a; b; c; d; e, f
  Next e, d, c, b, a
End Sub

Задание
7.9
Определим и обозначим высказывания:
 a
= "Сосуд греческий";
 b
= "Сосуд финикийский";
 c
= "Сосуд изготовлен в V веке";
 d = "Сосуд изготовлен в III веке";  e = "Сосуд изготовлен в
IV веке".
Высказывания школьников:
f1
= a And c, f2
= b And d, f3
= Not a And e.
С учетом того, что каждый из школьников был прав только
в одном из двух предположений, имеем:
f1
= a Xor c, f2
= b Xor d, f3
= Not a Xor e.
Добавим функцию, которая введет в решение задачи
ограничение на то, что сосуд мог быть изготовлен или в Греции, или в Финикии,
но не в обеих странах:
f4
= a Xor b.
Вторая функция ограничит время изготовления сосуда
только одним из высказанных в предположениях временем:
f5 = c And Not d And Not e Or Not c And d And Not e Or Not c And
Not d And d. Итоговый функционал получаем в виде логического
произведения полученных функций: f = f1 And f2 And f3 And f4 And f5 .
После
упрощения формулы получаем: f (a b c d e, , , , ) = a b c d e⋅ ⋅ ⋅ ⋅ . Это
означает, что сосуд финикийский и изготовлен в V веке.
В листинге П3 представлена программа решения задачи, а
на рис. П3 — результат ее работы.

Sub Задание_7_9()
  Debug.Print "
a"; "  b"; "  c"; "  d"; "  e",
"  f"
  For a = 0 To 1: For b = 0 To 1: For
c = 0 To 1   For d = 0 To 1: For e = 0 To 1     f1 = a Xor c     f2 = b Xor
d     f3 = Not a Xor e     f4 = a Xor b
    f5 = c And Not d And Not e Or Not
c And d And Not e _          Or Not c And Not d And d     f = f1 And f2 And f3
And f4 And f5
    If f <> 0 Then
Debug.Print a; b; c; d; e, f
  Next e, d, c, b, a
End Sub

Рис. П3. Результат решения задания 7.9

Задание
7.10
Выпишем и обозначим элементарные высказывания:
 a
= "Гриб опенок";
 b
= "Гриб сыроежка";
 c = "Гриб съедобный";  d = "Гриб ядовитый".
Высказывания грибников обозначим f1, f2
и f3 . Выписываем формулы:
f1 = a →c = Not (Not a Imp c),
                                         2                                        b
= Not(d Or a Or Not b),
                                        f3 = d b⋅        → c
= Not d And Not(b Imp c).

Так как высказывания всех трех грибников истинны, то
итоговая функция равна их конъюнкции: F f f              f .
Используем
тождество: х → у = х ∨ у . Поэтому инверсия импликации равна:

х → у = х ∨ у = х у⋅ . Используя законы и
правила преобразования формул, по-
лучаем:

Произведение трех функций дает:
                                             F
= f1 ⋅ f2 ⋅ f3 = a c a b d d b c⋅    ⋅               ⋅ ⋅    ⋅    ⋅        ⋅              =
a b c d⋅             ⋅               ⋅              .
Функция принимает единичное значение только на одном
наборе значений аргументов, в котором a = 0, b = 1, c = 0 и d = 0 (набор 0100),
т. е. найденный гриб — сыроежка.
В листинге П4 представлена программа решения задачи, а
на рис. П4 — результат ее работы.

Sub Задание_7_10()
  Debug.Print "
a"; "  b"; "  c"; "  d", "  f"
  For a = 0 To 1: For b =
0 To 1
  For c = 0 To 1: For d =
0 To 1
    f1 = Not (Not a Imp c)     f2 =
Not (d Or a Or Not b)     f3 = Not d And Not (b Imp c)     f = f1 And f2 And f3

    If f = 1 Then
Debug.Print a; b; c; d, f
  Next d, c, b, a
End Sub

Рис. П4. Результат решения задания 7.10
Программа последовательно формирует наборы значений
аргументов, значения функции на этих наборах и выводит на экран дисплея таблицу
истинности итоговой функции.
Задание 7.11
Введем обозначения: А = "Пойдет Андрей", В =
"Пойдет Ваня", С = "Пойдет Саша".
Предположения учителя:
F1 =A BC A BC→ = ∨ ;
F1 =AB AC∨
; F2 =AC AC∨ ; F2 =AC
AC∨ ;
                                           F
=C B C B→ = ∨ ;                    F3 =CB.
3
С учетом того, что оказались истинными только два
предположения из трех, имеем следующую формулу:

F=FFF FFF FFF1 2 3 ∨ 1 2 3 ∨ 1 2 3.

Подставляем значения и после преобразований получаем: F=ABC, а это означает,
что в поход пошли Ваня и Саша.
Задание
7.12
Три первые функции задания представим в виде дизъюнкций
переменных. Это исключает из формул заданное ограничение об истинности у
каждого болельщика только одного высказывания. Однако это ограничение будет
учитываться путем последующих построений.
f1 = H1∨ M2; f2 =
Л2∨ P4; f3 = P3∨ H2.
Логическое произведение функций при раскрывании скобок
приводит к восьми логическим произведениям, которые следует анализировать на
учет ограни- чений.
                                  f
= f1 ⋅ f2 ⋅ f3 = (Н1∨ М2)
(Л2⋅     ∨ Р4) (Р3⋅ ∨ Н2) =
=
Н1Л2Р3∨ Н1Л2Н2∨ Н1Р4Р3∨ Н1Р4Н2∨
∨М2Л2Р3∨ М2Л2Н2∨ М2Р4Р3∨ М2Р4Н2
= Н1Л2Р3.
Простой визуальный анализ произведений показывает, что
только одно из них истинно (первое). Остальные произведения (они подчеркнуты)
равны нулю (принимают значение "ложь").
Ограничение об истинности у каждого болельщика только
одного высказывания из двух удовлетворяется тем, что высказывания каждой пары
при раскрывании скобок становятся сомножителями разных логических произведений.
Появление в ответе, например, двух истинных произведений, каждое из которых
содержит одно из высказываний одного болельщика, укажет, что задача имеет
больше  одного решения.
Результат Н1Л2Р3 указывает на то, что Наташа заняла 1-е
место, Люда — 2-е, Рита — 3-е, у Маши — 4-е место, что соответствует записи
1423.
Ответ: 1423.
Задание
7.13
Выберем простейший эвристический метод решения, когда
ограничения, накладываемые на логические выражения, учитываются путем
визуального анализа выражений. В качестве ограничений выступают требования:
каждый участник соревнований может занять только одно место, каждое место может
быть занято только одним участником. Пренебрегаем также и утверждением, что
каждый из болельщиков был прав только в одном из своих прогнозов (об этом
говорилось в решении предыдущей задачи).
Решение
Запишем систему уравнений:
F1 = М1∨ Б2;
F2 = Б3∨ Н1;
F3 = М4∨ Д1.
                             F
F F F= 1 ⋅ 2 ⋅ 3 = (М1∨ Б2) (Б3⋅  ∨
Н1) (М4⋅ ∨ Д1) =
                             =
М1 Б3 М4⋅               ⋅ ∨ М1 Н1 М4⋅ ⋅ ∨
Б2 Б3 М4⋅  ⋅ ∨ Б2 Н1 М4⋅       ⋅              ∨

                            ∨М1
Б3 Д1⋅             ⋅ ∨ М1 Н1 Д1⋅     ⋅        ∨
Б2 Б3 Д1⋅           ⋅              ∨ Б2 Н2 Д1.⋅      ⋅
Из восьми полученных конъюнкций только одна
(подчеркнута) не противоречит с ограничениями и принимает значение
"истина". Остальные конъюнкции принимают значение "ложь".
(В ответе перечислите подряд без пробелов места
участников в указанном порядке имен: Джон, Ник, Билл, Макс.) Ответ: 3124.
Задание
7.14
Программа представлена в листинге П5, а результат ее
работы — на рис. П5.
Листинг П5. Нарушения правил обмена
валюты (макрос)
Sub Задание_7_14()
  Debug.Print " a"; a;
"  b"; b; "  c"; c; "  d"; d, " f"; f
For a = 0 To 1: For b = 0 To 1: For c = 0 To 1: For d = 0 To 1     f1 = a Imp
b     f2 = b Imp (c Or Not a)     f3 = Not d Imp a And Not c     f4 = d Imp a
    f = f1 And f2 And f3 And f4
    If f = 1 Then Debug.Print a; b; c;
d, f
  Next d, c, b, a
End Sub

Рис. П5. Обмен валюты

Список литературы
1.
Visual Basic 6.0: Пер. с англ. — СПб.: БХВ-Петербург, 2000. — 992 с.:
ил.
2.
Андреева Е. В. Математические основы информатики. Элективный курс:
Учебное пособие / Е. В. Андреева, Л. Л. Босова, И. Н. Фалина. — М.: БИНОМ.
Лаборатория знаний, 2005. — 328 с.: ил.
3.
Бирюков Б. В., Тростников В. Н. Жар холодных чисел и пафос бесстрастной
логики. Формализация мышления от античных времен до эпохи кибернетики. — М.:
Знание, 1997. — 192 с.
4.
Есипов А. С. Информатика и информационные технологии для учащихся школ и
колледжей. — СПб.: БХВ-Петербург, 2004. — 480 с.: ил.
5.
Есипов А. С. Информатика. Учебник по базовому курсу общеобразовательных
учебных заведений. Изд. 3-е, перераб. и доп. — СПб.: Наука и Техника, 2003. —
400 с.: ил.
6.
Есипов А. С., Паньгина Н. Н., Громада М. И. Информатика. Сборник задач и
решений для общеобразовательных учебных заведений. — СПб.: Наука и Техника,
2001. — 386 с.: ил.
7.
Карпов Б. VBA: специальный справочник. — СПб.: Питер, 2002. — 416 с.:
ил.
8.
Касаткин В. Н. Информация, алгоритмы, ЭВМ: Пособие для учителя. — М.:
Просвещение, 1991. — 192 с.: ил.
9.
Кузнецов А. А., Бешенков С. А., Ракитина Е. А., Матвеева Н. В., Милохина
Л. В.  Непрерывный курс информатики (концепция, система модулей, типовая
программа) // Информатика и образование. — 2005. — № 2, 3.
10.
Мадер В. В. Школьнику об алгебре логики: Книга для внеклассного чтения
учащихся 10—11 кл. средней школы. — М.: Просвещение, 1993. — 128 с.: ил.
11.
Угринович Н. Д. Информатика. Базовый курс. — М.: БИНОМ. Лаборатория
знаний, 2004. — 304 с.: ил.
12.
Формальная логика. Коллектив авторов. Учебник. — Л.: Изд-во
Ленинградского университета, 1977. — 357 с.

Предметный
указатель

A                                                                  U

ASCII 16                                                                            Unicode
17

*  *  *

А                                                                  И

Алгебра:                                                                          Импликация
98, 134
◊
базис 133          Инверсия
93, 133
◊
Буля 100            Инвертор
93
◊
логики 100        Информационная
система 11
Информационная
управляющая система 11
Алгоритм
Хаффмана 42
Информация
10, 29
Алфавит 14                                                                      Исключающее
ИЛИ 98
◊
бинарный 15
◊
двоичный 15
◊
мощность 14    К
Код 14
Б                                                                  ◊ ASCII 16
◊
Unicode 17
Байт 16                                                                             ◊
дополнительный 77
Бит 15                                                                               ◊
обратный 76
Булева
алгебра 91                                                           ◊
префиксный 42
◊
прямой 76
В                                                        ◊◊  функции 92
распределительный 125
Высказывание
132                                                         Кодирование 14
◊
звука 22
◊
оптимальное 42
Г                                                                 Конституента:
◊
единицы 105
Графика 20
◊
нуля 109
◊
векторная 21    Конъюнктивная
нормальная форма (КНФ) 109
◊
растровая 20    Конъюнктор
95
Конъюнкция 95

Д                                                                ◊ элементарная 105
 вырожденная 105
Деление 84                                                                             правильная 105
Дешифратор 125
Дизъюнктивная нормальная форма (ДНФ)
105             Л
Дизъюнкция 95, 134
◊
элементарная 109           Логарифм
30
        вырожденная 109                                                  Логическая
схема 118
        правильная 109                                                      Логическое
сложение 134
208                                                                                Предметный
указатель

М
Макрос 162
Метод таблиц Вейча 119
Н
Неравнозначность 98, 134 Номер функции
92
О
Обратная связь 12
Отрицание 93, 133 Оцифровка 22
П
Правила преобразования формул 103
◊
обобщенного
склеивания 104
◊
отрицание 103
◊
свертки 104
Предел Шеннона 40
Проявление машинного нуля 79
Р
Равнозначность 99, 134
Разряд числа 56
Разрядная сетка компьютера 78
◊
переполнение 79
Регистр 125
С
Сжатие информации 41
Система счисления 55
◊
в остаточных
классах 86
◊
восьмеричная 58
◊
двоичная 55, 57
◊
двоично-десятичная
55, 85
◊
десятичная 56
◊
основание 56
◊
перевод чисел 59
◊
римская 88
◊
троичная 86
◊
шестнадцатеричная
58
Слово 16
Сложение 83

Совершенная дизъюнктивная нормальная
форма (СДНФ) 105
Совершенная конъюнктивная нормальная
форма (СКНФ) 109
Сумма по модулю 2 98, 134
Сумматор 122 Счетчик 125
Т
Таблица истинности 92
Тождество 134 Триггер 123
У
Умножение 84
Ф
Формула Хартли 30, 46 Функция:
◊
запрета 99
◊
Пирса 97 ◊
Шеффера 97
Ч
"Черный" ящик 12 Число:
◊
естественная форма
представления 80
◊
нормальная форма
представления 81
Ш
Шифратор 126
Штрих Шеффера 97
Э
Эквивалентность 99 Элемент Пирса 97
Я
Язык:
◊
естественный 14
◊
формальный 14

[1] Это автор замечательного пособия
для учителей, в котором дано несколько текстовых логических задач, и некоторые
из них попали в ЕГЭ. См. [8] в списке литературы.

[2] См. [10]
в списке литературы.

file_name: Трудные темы информатики. Сдаем ЕГЭ и сессию_Есипов А.С_2010 -208с.pdf

alt: А. С. Есипов

alt: Санкт-Петербург «БХВ-Петербург» 2010

alt: БХВ-Петербург, 2010. — 208 с.: ил

alt: БХВ-Петербург, 2010. — 208 с

alt: Оглавление Предисловие ...

alt: События равновероятны .......

alt: Переполнение и машинные нули.

alt: Логические операции в программировании

alt: Просмотр кода макроса .......

alt: Предисловие Результаты проведения

alt: ОС Windows XP составляет 86,8%,

alt: Кодирование информации 1.1.

alt: If i Mod 8 = 0 Then Debug.Print

alt: Мбайт) = 2 10 килобайтов = 1024 килобайтов = 2 23 бит; 1 гигабайт (Гбайт) = 2 10 мегабайтов = 1024 мегабайтов = 2 33…

alt: С этой целью ее кодируют числами

alt: Таблица 1.2. Информационный объем точки

alt: Определим количество символов в тексте:

alt: Решение Для кодирования шести вариантов сигналов требуется три бита (2 4 2 = — мало, 2 3 = 8 — достаточно)

alt: Заполняется таблица по столбцам

alt: ГЛАВА 2

alt: Для решения используем формулу (2