
- •160001, Г. Вологда, ул. Челюскинцев, 3.
- •Предисловие
- •Введение
- •Раздел 1. Теория информации
- •Глава 1. Исходные понятия информатики
- •1.1. Начальные определения
- •1.2. Формы представления информации
- •1.3. Преобразование сообщений
- •Контрольные вопросы и задания
- •Глава 2. Понятие информации в теории Шеннона
- •2.1. Понятие энтропии
- •2.1.1. Энтропия как мера неопределенности
- •2.1.2. Свойства энтропии
- •2.1.3. Условная энтропия
- •2.2. Энтропия и информация
- •2.3. Информация и алфавит
- •Контрольные вопросы и задания
- •Глава 3. Кодирование символьной информации
- •3.1. Постановка задачи кодирования, Первая теорема Шеннона
- •3.2. Способы построения двоичных кодов
- •3.2.1. Алфавитное неравномерное двоичное кодирование сигналами равной длительности. Префиксные коды
- •3.2.2. Равномерное алфавитное двоичное кодирование. Байтовый код
- •3.2.3. Алфавитное кодирование с неравной длительностью элементарных сигналов. Код Морзе
- •3.2.4. Блочное двоичное кодирование
- •Контрольные вопросы и задания
- •Глава 4. Представление и обработка чисел в компьютере
- •4.1. Системы счисления
- •4.2. Представление чисел в различных системах счисления
- •4.2.1. Перевод целых чисел из одной системы счисления в другую
- •4.2.2. Перевод дробных чисел из одной системы счисления в другую
- •4.2.3. Понятие экономичности системы счисления
- •4.2.4. Перевод чисел между системами счисления 2 ↔ 8 ↔ 16
- •4.2.5. Преобразование нормализованных чисел
- •4.3. Кодирование чисел в компьютере и действия над ними
- •4.3.1. Кодирование и обработка в компьютере целых чисел без знака
- •4.3.2. Кодирование и обработка в компьютере целых чисел со знаком
- •4.3.3. Кодирование и обработка в компьютере вещественных чисел
- •Контрольные вопросы и задания
- •Глава 5. Передача информации
- •5.1. Общая схема передачи информации в линии связи
- •5.2. Характеристики канала связи
- •5.3. Влияние шумов на пропускную способность канала
- •5.4. Обеспечение надежности передачи и хранения информации
- •5.4.1. Постановка задачи
- •5.4.2. Коды, обнаруживающие ошибку
- •5.4.3. Коды, исправляющие одиночную ошибку
- •5.5. Способы передачи информации в компьютерных линиях связи
- •5.5.1. Канал параллельной передачи
- •5.5.2. Последовательная передача данных
- •5.5.3. Связь компьютеров по телефонным линиям
- •Контрольные вопросы и задания
- •Глава 6. Хранение информации
- •6.1. Классификация данных. Проблемы представления данных
- •6.2. Представление элементарных данных в озу
- •6.3. Структуры данных и их представление в озу
- •6.3.1. Классификация и примеры структур данных
- •6.3.2. Понятие логической записи
- •6.3.3. Организация структур данных в озу
- •6.4. Представление данных на внешних носителях
- •6.4.1. Иерархия структур данных на внешних носителях
- •6.4.2. Особенности устройств хранения информации
- •Контрольные вопросы и задания
- •Раздел 2. Алгоритмы. Модели. Системы
- •Глава 7. Элементы теории алгоритмов
- •7.1. Нестрогое определение алгоритма
- •7.2. Рекурсивные функции
- •7.3. Алгоритм как абстрактная машина
- •7.3.1. Общие подходы
- •7.3.2. Алгоритмическая машина Поста
- •7.3.3. Алгоритмическая машина Тьюринга
- •7.4. Нормальные алгоритмы Маркова
- •7.5. Сопоставление алгоритмических моделей
- •7.6. Проблема алгоритмической разрешимости
- •7.7. Сложность алгоритма
- •Контрольные вопросы и задания
- •Глава 8. Формализация представления алгоритмов
- •8.1. Формальные языки
- •8.1.1. Формальная грамматика
- •8.1.2. Способы описания формальных языков
- •8.2. Способы представления алгоритмов
- •8.2.1. Исполнитель алгоритма
- •8.2.2. Строчная словесная запись алгоритма
- •8.2.3. Графическая форма записи
- •8.2.4. Классификация способов представления алгоритмов
- •8.3. Структурная теорема
- •Контрольные вопросы и задания
- •Глава 9. Представление о конечном автомате
- •9.1. Общие подходы к описанию устройств, предназначенных для обработки дискретной информации
- •9.2. Дискретные устройства без памяти
- •9.3. Конечные автоматы
- •9.3.1. Способы задания конечного автомата
- •9.3.2. Схемы из логических элементов и задержек
- •9.3.3. Эквивалентные автоматы
- •Контрольные вопросы и задания
- •Глава 10. Модели и системы
- •10.1. Понятие модели
- •10.1.1. Общая идея моделирования
- •10.1.2. Классификация моделей
- •Модели структурные и функциональные
- •Модели натурные и информационные
- •Модели проверяемые и непроверяемые
- •Модели по назначению
- •10.1.3. Понятие математической модели
- •10.2. Понятие системы
- •10.2.1. Определение объекта
- •10.2.2. Определение системы
- •10.2.3. Формальная система
- •10.2.4. Значение формализации
- •10.3. Этапы решения задачи посредством компьютера
- •10.4. Об объектном подходе в прикладной информатике
- •Контрольные вопросы и задания
- •Заключение
- •Приложение а. Элементы теории вероятностей
- •А.1. Понятие вероятности
- •А.2. Сложение и умножение вероятностей
- •A.3. Условная вероятность
- •Контрольные вопросы и задания
- •Приложение б. Некоторые соотношения логики
- •Глоссарий
- •Список литературы
- •Содержание
- •Глава 4. Представление и обработка чисел в компьютере 45
- •Глава 5. Передача информации 69
- •Глава 6. Хранение информации 83
- •Раздел 2. Алгоритмы. Модели. Системы 98
- •Глава 7. Элементы теории алгоритмов 99
- •Глава 8. Формализация представления алгоритмов 120
- •Глава 9. Представление о конечном автомате 134
- •Глава 10. Модели и системы 147
4.2.5. Преобразование нормализованных чисел
Вещественное число X может быть представлено в двух формах - естественной и нормализованной. В естественной форме у X имеется целая и дробная части, между которыми помещается разделитель (запятая или точка), например 123,4567. Однако такая запись неудобна для слишком больших или, наоборот, слишком малых чисел. Кроме того, использование такой формы (она называется также «представление числа с фиксированной запятой») в компьютере вызвало бы снижение точности вычислений из-за необходимости приведения в соответствие разрядов обрабатываемых чисел и связанных с этим округлений или могло бы породить ситуацию, называемую переполнением, когда старший разряд числа не умещается в отведенной разрядной сетке. По указанным причинам вещественные числа в компьютере представляются в нормализованном виде (другое название - «представление числа с плавающей запятой»), главным достоинством которой является автоматическое масштабирование числа на каждом этапе обработки, что, с одной стороны, обеспечивает максимально возможную точность вычислений, а с другой - избавляет от необходимости принимать меры по предотвращению переполнения (за исключением достаточно экзотических ситуаций с выходом числа за отведенную разрядную сетку). По сути, это универсальная форма записи всех чисел, кроме определенных как «тип: целые» (например, Integer, Word или Byte в PASCAL'e).
Сначала познакомимся с необходимыми понятиями применительно к 10-ной системе счисления.
Число Х10 называется нормализованным, если оно представлено в виде Х10 = ± M10 ∙ 10±k10.
В этой записи М10 называется мантиссой нормализованного числа; значения мантиссы лежат в интервале 0,1 ≤ М10 ≤ 1. k10 называется порядком нормализованного числа - это целое положительное десятичное число. Примеры: -123410 = -0,1234∙104; 0,0345610 = 0,3456∙10-1.
Понятие нормализованного числа следует отличать от понятия числа в нормальной форме; данная форма достаточно часто используется при записи чисел в математике, физике, технических дисциплинах и отличается от нормализованного представления тем, что мантисса лежит в интервале 1 ≤ M10 < 10, например, kБ = 1,38∙10-23.
При нормализации происходит расчленение «составляющих» числа с выделением знака числа, мантиссы, знака порядка и порядка - как будет показано ниже, это создает определенные удобства при хранении и обработке чисел в компьютере.
Аналогично нормализации десятичного числа можно в нормализованной форме представить и число в произвольной системе счисления р:
При этом значения мантиссы лежат в интервале р-1 ≤ Мр < 1 (т.е. первая значащая цифра мантиссы всегда ненулевая), а показатель степени представляется в системе р (kp). Например, для р = 2:
Мантисса располагается в промежутке 0,12 ≤ М2 < 1, что соответствует десятичному интервалу 0,510 ≤ M10 < 1.
Подобно задаче о преобразовании целых и дробных чисел, можно поставить задачу о преобразовании представления числа в нормализованной форме в системе счисления р к нормализованному представлению в системе q. Практическое значение такого преобразование состоит в том, что, как было сказано, в компьютере все вещественные числа хранятся и обрабатываются в нормализованном двоичном представлении и, следовательно, при их вводе осуществляется перевод Х10 → Х2, а при выводе - обратный перевод Х2 → Х10. Однако прежде, чем обсуждать такой перевод, необходимо рассмотреть, как производится преобразование вещественного числа из естественной формы к нормализованному виду.
При нормализации различаются ситуации Хр > 1 и Хр < р-1. В первом случае для нормализации необходимо перемещать разделитель разрядов влево по числу до тех пор, пока не исчезнет целая часть числа, но первая цифра после разделителя будет ненулевой; каждое перемещение разделителя на 1 разряд влево эквивалентно делению числа на р и, чтобы число не менялось, показатель должен возрастать на единицу при каждом сдвиге. Если обозначить эту операцию N← (будем называть ее «нормализация влево»), то N←[(123,45)10] = 0,1234510∙103; N←[(23,4∙105)10] = 0,23410∙107; N←[(1212,2)3] = 0,121223∙311. Аналогично можно ввести операцию «нормализация вправо» (N→), обеспечивающая нормализацию чисел меньших р-1; очевидно, такие числа необходимо умножать на р с одновременным уменьшением показателя на 1 до тех пор, пока первая цифра после разделителя станет ненулевой. Например, N→[(0,000101∙2-101)2] = 0,101∙2-1000; N→[(0,000987)10] = 0,98710∙10-3. Общий алгоритм нормализации можно изобразить в виде блок-«нормализация вправо» (N→), обеспечивающая нормализацию чисел меньших р-1; очевидно, такие числа необходимо умножать на р с одновременным уменьшением показателя на 1 до тех пор, пока первая цифра после разделителя станет ненулевой. Например, N→[(0,000101∙2-101)2] = 0,101∙2-1000; N→[(0,000987)10] = 0,98710∙10-3. Общий алгоритм нормализации можно изобразить в виде блок-схемы на рис. 4.4.
При практической реализации данного алгоритма не следует забывать, что изменение значения kp на 1 должно производиться по правилам арифметики системы счисления р. В дальнейшем при необходимости проведения нормализации в ходе каких-либо преобразований будем просто ссылаться на приведенный алгоритм как готовый модуль.
Вернемся к задаче перевода нормализованного числа из одной сиcтемы счисления в другую. Пусть, имеется число Хр = ±Мр ∙ р±kp для которого необходимо найти соответствующее ему Xq = ±Mq ∙ р±kq . Представляется достаточно очевидным, что преобразование не затронет знаков мантиссы и показателя степени. Таким образом, для осуществления преобразования необходимо установить соответствие между (Мр, kp) и (Mq, kq). Оно получается достаточно просто, исходя из того, что Хр = Xq, откуда следует:
Из (4.13) вытекает, что для осуществления преобразования можно Мр умножить на рkp , т.е. перейти к естественной форме числа в системе р, перевести его в систему q, а затем нормализовать. Однако в таком варианте действий теряется точность числа и возможно переполнение на промежуточных этапах преобразования. Во избежание этого необходимо чередовать умножение (или деление) на р и нормализацию по основанию q. При этом, поскольку все операции выполняются по правилам арифметики в системе р, будут получены не (Mq, kq) в окончательном варианте, а их представления в системе р - обозначим их (Mq)p и (kq)p, которые затем нужно будет перевести в систему q. Различаются также ситуации kp ≥ 0 и kp < 0 - в первом случае необходимо умножать начальное и промежуточные значения мантиссы на р и для нормализации делить на q, во втором - наоборот. Каждый раз при умножении или делении на р показатель kp будет менять свой значение на 1; продолжать действия следует до тех пор, пока не выполнится условие kp = 0. Алгоритм действий для ситуации kp ≥ 0 представлен на рис.4.5.
Пример 4.8
Выполнить преобразование Х10 =16,510 → X2.
Перевод можно осуществить отдельно для целой и дробной части, а затем их объединить - этот результат послужит эталоном для проверки нового алгоритма. Легко получить, что 1610 = 100002, а 0,510 = 0,12; следовательно, 16,510 = 10000,12 = (0,100001∙2101)2.
Алгоритм Rеаl_1 начинает функционировать после нормализации исходного числа; для этой цели можно воспользоваться алгоритмом Normа, в результате начальными значениями будут М10 = 0,165; k10 = 2. Результаты операций будем заносить в таблицу:
Окончательно имеем: Х2 = (0,100001∙2101)2.
Подобным же будет алгоритм преобразования Х10 → Х2 и при kp < 0.
Последовательность действий при обратном переводе Х2 → Х10 отчасти противоположна только что рассмотренной; для kp ≥ 0 она представлена в виде блок-схемы на рис.4.6. Нормализация в конце (после k = 0) производится при необходимости.
Пример 4.9
Выполнить преобразование: Х2 = (0,11∙2110)2 → Х10
Для контроля результата: 0,112 = 0,7510; (2110)2 = (26)10 = 64; следовательно, (0,11∙2110)2 = 0,75∙64 = 4810. Для преобразования воспользуемся построенным алгоритмом Real_2. (рис. 4.6). Промежуточные результаты снова будем заносить в таблицу:
Таким образом, получаем: (0,11∙2110)2 = 0,48∙102 = 48.
Как и в предыдущем преобразовании, алгоритм в случае kp < 0 будет отличаться только тем, что число в процессе перевода необходимо делить на q и умножать на р.