Кодирование целых и действительных чисел 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Кодирование целых и действительных чисел



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

19:2 = 9+1

9:2=4+1

4:2=2+0

2:2 = 1

Таким образом, 19(10) ~ 1011(2). Для кодирования целых чисел от О до 255 достаточно иметь 8 разрядов двоичного кода (8 бит). Шестнадцать бит позволяют закодировать целые числа от О до 65535, а 24 бита — уже более 16,5 миллионов разных значений. Для кодирования действительных чисел используют 80-разрядное кодирование. При этом число предварительно преобразуется в нормализованную форму:

3,1415926 = 0,31415926-10^1

300 000 = 0,3-10^6

123 456 789 = 0,123456789 • 10^10

Первая часть числа называется мантиссой, а вторая характеристикой. Большую часть из 80 бит отводят для хранения мантиссы (вместе со знаком) и некоторое фиксированное количество разрядов отводят для хранения характеристики (тоже со знаком).

 

Кодирование звуковой информации

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

далеки от стандартизации. Множество отдельных компаний разработали свои корпоративные стандарты, но если говорить обобщенно, то можно выделить два основных

направления. Метод FM (Frequency Modulation) основан на том, что теоретически любой сложный звук можно разложить на последовательность простейших гармонических сигналов

разных частот, каждый из которых представляет собой правильную синусоиду, а следовательно, может быть описан числовыми параметрами, то есть кодом. В природе звуковые сигналы имеют непрерывный спектр, то есть являются аналоговыми. Их

разложение в гармонические ряды и представление в виде дискретных цифровых сигналов выполняют специальные устройства — аналогово-цифровые преобразователи (АЦП). Обратное преобразование для воспроизведения звука, закодированного

числовым кодом, выполняют цифро-аналоговые преобразователи (ЦАП). При таких преобразованиях неизбежны потери информации, связанные с методом кодирования, поэтому качество звукозациси обычно получается не вполне удовлетворительным и соответствует качеству звучания простейших электромузыкальных инструментов с окрасом, характерным для электронной музыки. В то же время,

данный метод кодирования обеспечивает весьма компактный код, и потому он нашел применение еще в те годы, когда ресурсы средств вычислительной техники были явно недостаточны.

Метод таблично-волнового (Wave-Table) синтеза лучше соответствует современному уровню развития техники. Если говорить упрощенно, то можно сказать, что где-то в заранее подготовленных таблицах хранятся образцы звуков для множества различных музыкальных инструментов (хотя не только для них). В технике такие образцы называют сэмплами. Числовые коды выражают тип инструмента, номер его модели, высоту тона, продолжительность и интенсивность звука, динамику его изменения,

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

Кодирование графических данных

Если рассмотреть с помощью увеличительного стекла черно-белое графическое изображение, напечатанное в газете или книге, то можно увидеть, что оно состоит из мельчайших точек, образующих характерный узор, называемый/рдс/тгрол/ (рис. 1.3).

Рис. 1.3. Растр — это метод кодирования графической информации, издавна принятый в полиграфии

Поскольку линейные координаты и индивидуальные свойства каждой точки (яркость) можно выразить с помощью целых чисел, то можно сказать, что растровое кодирование позволяет использовать двоичный код для представления графических данных. Общепринятым на сегодняшний день считается представление черно-белых иллюстраций в виде комбинации точек с 256 градациями серого цвета, и, таким образом, для кодирования яркости любой точки обычно достаточно восьмиразрядного

двоичного числа. Для кодирования цветных графических изображений применяется принцип декомпозиции

произвольного цвета на основные составляющие. В качестве таких составляющих используют три основные цвета: красный {Red, К), зеленый {Green, G) и синий {Blue, В). На практике считается (хотя теоретически это не совсем так), что любой цвет, видимый человеческим глазом, можно получить путем механического

смешения этих трех основных цветов. Такая система кодирования называется системой RGB по первым буквам названий основных цветов. Если для кодирования яркости каждой из основных составляющих использовать по 256 значений (восемь двоичных разрядов), как это принято для полутоновых черно-белы х изображений, то на кодирование цвета одной точки надо затратить

24 разряда. При этом система кодирования обеспечивает однозначное определение 16,5 млн различных цветов, что на самом деле близко к чувствительности человеческого глаза. Режим представления цветной графики с использованием 24 двоичных

разрядов называется полноцветным {True Color). Каждому из основных цветов можно поставить в соответствие дополнительный

цвет, то есть цвет, дополняющий основной цвет до белого. Нетрудно заметить, что

для любого из основных цветов дополнительным будет цвет, образованный суммой пары остальных основных цветов. Соответственно, дополнительными цветами являются: голубой {Cyan, С), пурпурный {Magenta, М) и желтый (Yellow, У). Принцип

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

Такой метод кодирования цвета принят в полиграфии, но в полиграфии используется еще и четвертая краска — черная {Black, К). Поэтому данная система кодирования обозначается четырьмя буквами СМЖ (черный цвет обозначается буквой К, потому,

что буква В уже занята синим цветом), и для представления цветной графики в этой системе надо иметь 32 двоичных разряда. Т^кой режим тоже называется полноцветным { True Color). Если уменьшить количество двоичных разрядов, используемых для кодирования цвета каждой точки, то можно сократить объем данных, но при этом диапазон кодируемых цветов заметно сокращается. Кодирование цветной графики 16-разрядными

двоичными числами называется режимом High Color. При кодировании информации о цвете с помощью восьми бит данных можно передатьтолько 256 цветовых оттенков. Такой метод кодирования цвета называется индексным. Смысл названия в том, что, поскольку 256 значений совершенно недостаточно,

чтобы передать весь диапазон цветов, доступный человеческому глазу, код каждой точки растра выражает не цвет сам по себе, а только его номер {индекс) в некоей справочной таблице, называемой палитрой. Разумеется, эта палитра должна прикладываться к графическим данным — без нее нельзя воспользоваться методами

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

Основные структуры данных

Работа с большими наборами данных автоматизируется проще, когда дднные упорядочены, то есть образуют заданную структуру. Существует три основных типа структур данных: линейная, иерархическая и табличная. Их можно рассмотреть на примере

обычной книги. Если разобрать книгу на отдельные листы и перемешать их, книга потеряет свое назначение. Она по-прежнему будет представлять набор данных, но подобрать адекватный

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

что не всегда удобно. Для быстрого поиска данных существует иерархическая структура. Так, например, книги разбивают на части, разделы, главы, параграфы и т. п. Элементы структуры более низкого уровня входят в элементы структуры более высокого уровня: разделы состоят из глав, главы из параграфов и т. д.

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

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

а в книгах со сложной структурой, допускающей выборочное чтение, ее называют -содержанием.

Линейные структуры (списки данных, векторы данных). Линейные структуры — это хорошо знакомые нам списки. Список — это простейшая структура данных, отличающаяся тем, что каждый элемент данных однозначно определяется своим номером в массиве. Проставляя номера на отдельных страницах рассыпанной книги, мы создаем структуру списка. Обычный журнал посещаемости занятий, например, имеет структуру списка, поскольку все студенты группы зарегистрированы в нем под своими уникальными номерами. Мы называем номера уникальными потому, что в одной группе не могут быть зарегистрированы два студента с одним и тем же номером.

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

 

В журнале посещаемости, например, это решается так: каждый новый элемент списка заносится с новой строки, то есть разделителем является конец строки. Тогда нужный

элемент можно разыскать по номеру строки.

N п/п Фамилия, Имя, Отчество

1 Аистов Александр Алексеевич

2 Бобров Борис Борисович

3 Воробьева Валентина Владиславовна

27 Сорокин Сергей Семенович

28 Глава 1. Информация и информатика

Разделителем может быть и какой-нибудь специальный символ. Нам хорошо известны разделители между словами — это пробелы. В русском и во многих европейских языках общепринятым разделителем предложений является точка. В рассмотренном

нами классном журнале в качестве разделителя можно использовать

любой символ, который не встречается в самих данных, например символ «*». Тогда список выглядел бы так:

Аистов Александр Алексеевич * Бобров Борис Борисович * Воробьева Валентина

Владиславовна *... * Сорокин Сергей Семенович

В этом случае для розыска элемента с номером п надо просмотреть список начиная с самого начала и пересчитать встретившиеся разделители. Когда будет отсчитано n-i разделителей, начнется нужный элемент. Он закончится, когда будет встречен

следующий разделитель. Еще проще можно действовать, если все элементы списка имеют равную длину. В этом случае разделители в списке вообще не нужны. Для розыска элемента с номером п надо просмотреть список с самого начала и отсчитать а{п-\) символ, где

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

с ними особенно удобно. Таким образом, линейные структуры данных (списки) — это упорядоченные структуры, в которых адрес элемента однозначно определяется его номером. Табличные структуры (таблицы данных, матрицы данных) С таблицами данных мы тоже хорошо знакомы, достаточно вспомнить всем известную

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

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

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

и горизонтальной разметки (рис. 1.4). Если нужно сохранить таблицу в виде длинной символьной строки, используют

один символ-разделитель между Элементами, принадлежащими одной строке, и другой разделитель для отделения строк, например так: Меркурий*0,39*0,056*0#Венера*0,67*0,88*0#Земля*1,0М,0*1#Марс*1,5Г0,Г2#...

Для розыска элемента, имеющего адрес ячейки (т, гг), надо просмотреть набор данных с самого начала и пересчитать внешние разделители. Когда будет отсчитан т-1 разделитель, надо пересчитывать внутренние разделители. После того как будет

найден п-\ разделитель, начнется нужный элемент. Он закончится, когда будет встречен любой очередной разделитель.

Планета

Меркурий

Венера

Земля

Марс

Юпитер

Расстояние

до Солнца, а.е.

0,39

0,67

1.0

1,51

5,2

Относительная

масса

0,056

0,88

1.0

0,1

Количество

спутников

Рис. 1.4. В двумерных таблицах, которые печатают в книгах, применяется два типа разделителейвертикальные и горизонтальные. Еще проще можно действовать, если все элементы таблицы имеют равную длину.Такие таблицы называют матрицами. В данном случае разделители не нужны,

поскольку все элементы имеют равную длину и количество их известно. Для розыска элемента с адресом (т, п) в матрице, имеющей М строк и N столбцов, надо просмотреть ее с самого начала и отсчитать а [Л^(т - 1) + (гг - 1)] символ, где а — длина

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

Многомерные таблицы. Выше мы рассмотрели пример таблицы, имеющей два измерения (строка и столбец), но в жизни нередко приходится иметь дело с таблицами, у которых количество измерений больше. Вот пример таблицы, с помощью

которой может быть организован учет учащихся.

Номер факультета: 3

Номер курса (на факультете): 2

Номер специальности (на курсе): 2

Номер группы в потоке одной специальности: 1

Номер учащегося в группе: 19

Размерность такой таблицы равна пяти, и для однозначного отыскания данных об учащемся в подобной структуре надо знать все пять параметров (координат).



Поделиться:


Последнее изменение этой страницы: 2016-04-20; просмотров: 1127; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.216.94.152 (0.044 с.)