Соответствие между набором букв и числами. Кодирование информации. Упорядочение структур данных

Пользователи информации

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

Кодирование информации

Считается, что впервые кодирование появилось в V веке до н.э. в Греции. Издавна о возникновении опасности человек сообщал разными действиями: рисунком, криком, огнём и жестами. Затем он стал использовать доступные технические средства: азбуку Морзе, телеграф, радио, телефон и другие виды сигнализации. В любом случае получатель этой информации должен знать правила её формирования и отображения. Такие правила принято называть «кодом».

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

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

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

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

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

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

Компьютеры работают с числами, представленными двоичной системой счисления. С целью унификации приёмов и методов работы применяется универсальная система кодирования данных – двоичный код. Двоичный код представляет совокупность двоичных знаков, принимающих значение нуля или единицы. Он получил название «бит». Термин «бит » происходит от английского словосочетания « binary digit », что означает «двоичный разряд ». Для кодирования одного символа нужно восемь бит. Восемь последовательных бит составляют один байт , являющийся единицей представления данных или единицей информации (количества информации , объёма памяти и ёмкости запоминающего устройства). Байт является основой следующих производных единиц измерения информации:

1 килобайт (Кб) = 1024 байтам,

1 мегабайт (Мб) = 1024 Кб,

1 гигабайт (Гб) = 1024 Мб,

1 терабайт (Тб) = 1024 Гб,

1 петабайт (Пб) = 1024 Тб

Средством кодирования служит таблица соответствия , устанавливающая взаимно однозначное соответствие между знаками или группами знаков двух различных знаковых систем (байтами и символами). Существует несколько видов специальных таблиц кодов. Наибольшее распространение получили кодовые таблицы: ASCII (American Standard Code for Information Interchange – американский стандартный код обмена информацией), двоичный код обмена информацией (ДКОИ) и КОИ-8 (код обмена информацией длиной 8 бит).

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

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

Чтобы перевести в числовую форму музыкальный звук, нужно через одинаковые небольшие промежутки времени измерять его интенсивность и представлять результаты каждого измерения в числовой форме (тема 7).

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

Кодирование ― процесс представления информации в виде кода, т.е. набора условных обозначений для представления информации.
Человек выражает свои мысли в виде предложений, составленных из слов. Они являются алфавитным представлением информации. Основу любого языка составляет алфавит - конечный набор различных знаков (символов) любой природы, из которых складывается сообщение.
Кодирование сводиться к использованию совокупности символов по строго определенным правилам и имеет два основных значения:
■ Способ изложения информации в виде, приемлемом и понимаемым объектом (например ЭВМ),
■ Способ защиты информации от нежелаемого доступа или распространения.
Возможно объединение этих функций, ввиду универсальности удобства, и/или же, ввиду естественных особенностей местоположения группы людей (язык определенного народа).

История возникновения
Согласно данным, раздобытым и приведенным Дэвидом Каном в своей книге "The Codebreackers" ("Раскодировщики"), которая была написана им еще в 1967 г., но служит и по сей день наиболее богатым источником информации по криптографии, первыми известными "шифрователями" данных на планете были египтяне, еще в 1900 г. до н. э. приступившие к исписыванию стен своих жилищ странными иероглифами. Их последователями стали месопотамцы, чьи глиняные тарелки украшали своеобразные картинки, заключающие в себе какой-то определенный смысл. Искусству их оформления они стали обучаться примерно в 1500 г. до н. э. Спустя тысячу лет жители иудейского царства изобрели для написания книг своеобразный простейший шифр, ATBASH, принцип записи которого основывался на алфавите, только в обратном порядке. На этом "языке" древние евреи писали некоторые книги. А позже ими было изобретено еще несколько способов кодирования записанной информации.
В 487 г. до н. э. греки по некоторым данным создали первое "устройство" для шифрования данных (принцип его действия до сих пор не раскрыт), представляющее из себя нечто неопределенное, на что наматывали тонкую кожаную ленту. Затем исписанную полоску материала снимали с, условно говоря, "барабана" и одевали на себя, как пояс. Предполагают, что получатель закодированного "сообщения", носил "дешифратор" все время с собой, и мог прочесть текст послания где угодно. Но подлинность именно этой истории в 1998 г. была оспорена, и теперь многие полагают, что это всего лишь миф.
Следующим поклонником зарождающейся криптографии стал Юлий Цезарь (100-44 гг. до н.э.). Примерно в пятидесятом году до нашей эры он освоил способ кодирования важных документов путем замены некоторых букв нормального алфавита и применял его для тайной правительственной переписки. Шифр Цезаря был проще ATBASH, но, принимая во внимание то, что большинство людей в то время были неграмотными и читать - то толком не умели, для передачи ценных данных пришелся в самый раз. Помимо подстановки "собственных" букв алфавита некоторые отдельные слова Цезарь писал на латинском, а некоторые - на греческом, чтобы окончательно сбить с толку любопытных злоумышленников.
Где-то в 200 г. уже н. э. по данным опять же Кана шифр применяли для записи на каком-то "Ляйденском папирусе" "волшебных" рецептов. В середине 70-х гг. в свет вышла первая книга о криптографии, написанная, судя по длине имени ее автора, арабом, воодушевленным тем решением, которое пришло ему в голову при создании системы кодирования греческих слов для византийского императора. А в 855 г. н. э. его коллега представил сразу несколько новых алфавитов, из знаков которых в последствии составляли свои записи всякие колдуны и колдуньи.
Многие послания Венецианского правительства в 1226 г. были зашифрованы довольно оригинальным образом - гласные буквы многих слов заменялись точками и крестиками. Как их получателям удавалось прочесть написанное - неясным осталось до сих пор. Но то, что речь опять идет о криптографии - очевидно.
1412-м г. датируют четырнадцати томную энциклопедию на арабском языке, один из довольно внушительных разделов которой был посвящен криптографии и криптологии. В нем приводились данные о принципе кодирования и раскодирования текстовых сообщений, а также описывались первые информационные "таблицы-ключи" с разъяснениями, как правильно трактовать написанное. Уже тогда предусматривались случаи, при которых одна и та же буква в слове употреблялась дважды и более. С целью запутывания возможного похитителя зашифрованного письма, знаки, ее заменяющие, каждый раз использовались разные.
В 18-м г. шестнадцатого столетия Йоханнес Тритемиус опубликовал первое печатное издание по криптологии. Он изобрел метод замены каждого слова одной буквой, взятой из последовательности столбцов. Кроме того, он продемонстрировал идею представления лишь одного знака вместо сразу всех букв алфавита.
В последующие годы и века криптографы разных стран совершенствовали свое мастерство, периодически удивляя окружающих новыми шифрами и способами кодирования целых сочинений. Лишь в 1917 г. произошло событие, возможно, действительно заслуживающее внимания. В Америке появился первый криптоаналитик. Им стал Вильям Фредерик Фридман, "отец американского криптоанализа". Сначала вместе с женой Фридман работал в специальной лаборатории при правительстве США, а спустя некоторое время открыл свою школу в Ривербэнке. В функции первого криптоаналитика входило изучение различных вариантов кодирования информации на предмет их взлома. Известно, что системы иногда оказывались не совершенными, и задачей Вильяма ставилось определение этих самых недостатков.
В том же 1917 г. Гилберт С. Вернам, сотрудник компании AT&T, представил первый реально действующий и максимально "безопасный" аппарат для кодирования данных. Данные ключа (таблицы последовательно записанных инструкций по расшифровке) брались произвольно и никогда более не использовались. Ключ представлял собой одноразовую кассету с пленкой. Устройство собирались использовать во времена Первой Мировой Войны, однако широкое применение "машинка" получила лишь в двадцатые годы.

Кодирование используется для представление информации в компьютере.
Компьютер может обрабатывать только информацию, представленную в числовой форме. Вся другая информация (например, звуки, изображения, показания приборов и т.д.) для обработки на компьютере должна быть преобразована в числовую форму. Например, чтобы перевести в числовую форму музыкальный звук, можно через небольшие промежутки времени измерять интенсивность звука на определенных частотах, представляя результаты каждого измерения в числовой форме. С помощью программ для компьютера можно выполнить преобразования полученной информации, например "наложить" друг на друга звуки от разных источников. Аналогичным образом на компьютере можно обрабатывать текстовую информацию. При вводе в компьютер каждая буква кодируется определенным числом, а при выводе на внешние устройства (экран или печать) для восприятия человеком по этим числам строятся изображения букв. Соответствие между набором букв и числами называется кодировкой символов.
Как правило, все числа в компьютере представляются с помощью нулей и единиц. Т.е., компьютеры обычно работают в двоичной системе счисления, поскольку при этом устройства для их обработки получаются значительно более простыми. Ввод чисел в компьютер и вывод их для чтения человеком может осуществляться в привычной десятичной форме, а все необходимые преобразования выполняют программы, работающие на компьютере.
Системой счисления называется совокупность приемов наименования и записи чисел.
В любой системе счисления для представления чисел выбираются некоторые символы (их называют цифрами), а остальные числа получаются в результате каких-либо операций над цифрами данной системы счисления.
Арифметические действия над числами в любой позиционной системе счисления производятся по тем же правилам, что и десятичной системе, так как все они основываются на правилах выполнения действий над соответствующими многочленами. При этом нужно только пользоваться теми таблицами сложения и умножения, которые соответствуют данному основанию P системы счисления.
1. При переводе чисел из десятичной системы счисления в систему с основанием P > 1 обычно используют следующий алгоритм:
если переводится целая часть числа, то она делится на P, после чего запоминается остаток от деления. Полученное частное вновь делится на P, остаток запоминается. Процедура продолжается до тех пор, пока частное не станет равным нулю. Остатки от деления на P выписываются в порядке, обратном их получению;
если переводится дробная часть числа, то она умножается на P, после чего целая часть запоминается и отбрасывается. Вновь полученная дробная часть умножается на P и т.д. Процедура продолжается до тех пор, пока дробная часть не станет равной нулю. Целые части выписываются после двоичной запятой в порядке их получения. Результатом может быть либо конечная, либо периодическая двоичная дробь. Поэтому, когда дробь является периодической, приходится обрывать умножение на каком-либо шаге и довольствоваться приближенной записью исходного числа в системе с основанием P.
, .
2. При переводе чисел из системы счисления с основанием P в десятичную систему счисления необходимо пронумеровать разряды целой части справа налево, начиная с нулевого, и в дробной части, начиная с разряда сразу после запятой слева направо (начальный номер -1). Затем вычислить сумму произведений соответствующих значений разрядов на основание системы счисления в степени, равной номеру разряда. Это и есть представление исходного числа в десятичной системе счисления.


По мере развития техники появлялись разные способы кодирования информации. Во второй половине XIX в. американский изобретатель Сэмюэль Морзе изобрел код, применяющийся до настоящего времени. Информация кодируется тремя символами: длинный сигнал (тире), короткий сигнал (точка), нет сигнала (пауза) - для разделения букв.
В вычислительной технике существует своя система - она называется двоичным кодированием и основана на представлении данных последовательностью всего двух знаков: 0 и 1. Эти знаки называются двоичными цифрами, по-английски - binary digit или сокращенно bit (бит).
Одним битом могут быть выражены два понятия: 0 или 1 (да или нет, черное или белое, истина или ложь и т.п.). Если количество битов увеличить до двух, то уже можно выразить четыре различных понятия: 00 01 10 11. Тремя - соответственно восемь.
Увеличивая на единицу количество разрядов в системе двоичного кодирования, увеличивается в два раза количество значений, которое может быть выражено в данной системе, по формуле N=2 в степени m, где N - количество независимых кодируемых значений, m - разрядность двоичного кодирования.

Кодирование данных двоичным кодом.
Существуют два основных формата представления чисел в памяти компьютера. Один из них используется для кодирования целых чисел, второй (так называемое представление числа в формате с плавающей точкой) используется для задания некоторого подмножества действительных чисел.
Множество целых чисел, представимых в памяти ЭВМ, ограничено. Диапазон значений зависит от размера области памяти, используемой для размещения чисел. В k-разрядной ячейке может храниться 2k различных значений целых чисел.
Чтобы получить внутреннее представление целого положительного числа N, хранящегося в k-разрядном машинном слове, необходимо перевести число N в двоичную систему счисления, а полученный результат дополнить слева незначащими нулями до k разрядов.
Наример, чтобы получить внутреннее представление целого числа 1607 в 2-х байтовой ячейке,нужно перевести число в двоичную систему: 160710 = 11001000111(2). Внутреннее представление этого числа в ячейке будет следующим: 0000 0110 0100 0111.
Для записи внутреннего представления целого отрицательного числа (-N) необходимо получить внутреннее представление положительного числа N, получить обратный код этого числа заменой 0 на 1 и 1 на 0 и к полученному числу прибавить 1.
Кодирование вещественного числа по Формату с плавающей точкой использует иные алгоритмы.

Кодирование текста.
Множество символов, используемых при записи текста, называется алфавитом. Количество символов в алфавите называется его мощностью.
Для представления текстовой информации в компьютере чаще всего используется алфавит мощностью 256 символов. Один символ из такого алфавита несет 8 бит информации, т. к. 28 = 256. Двоичный код каждого символа(8 бит) занимает 1 байт памяти ЭВМ.
Все символы такого алфавита пронумерованы от 0 до 255, а каждому номеру соответствует 8-разрядный двоичный код от 00000000 до 11111111. Этот код является порядковым номером символа в двоичной системе счисления.
Для разных типов ЭВМ и операционных систем используются различные таблицы кодировки, отличающиеся порядком размещения символов алфавита в кодовой таблице. Международным стандартом на персональных компьютерах является уже упоминавшаяся таблица кодировки ASCII.
Принцип последовательного кодирования алфавита заключается в том, что в кодовой таблице ASCII латинские буквы (прописные и строчные) располагаются в алфавитном порядке. Расположение цифр также упорядочено по возрастанию значений.
Стандартными в этой таблице являются только первые 128 символов, т. е. символы с номерами от нуля (двоичный код 00000000) до 127 (01111111). Сюда входят буквы латинского алфавита, цифры, знаки препинания, скобки и некоторые другие символы. Остальные 128 кодов, начиная со 128 (двоичный код 10000000) и кончая 255 (11111111), используются для кодировки букв национальных алфавитов, символов псевдографики и научных символов.

Кодирование графической информации.
В видеопамяти находится двоичная информация об изображении, выводимом на экран. Почти все создаваемые, обрабатываемые или просматриваемые с помощью компьютера изображения можно разделить на две большие части - растровую и векторную графику.
изображения представляют собой однослойную сетку точек, называемых пикселами (pixel, от англ. picture element). Код пиксела содержит информации о его цвете. Для черно-белого изображения (без полутонов) пиксел может принимать только два значения: белый и черный (светится - не светится), а для его кодирования достаточно одного бита памяти: 1 - белый, 0 - черный.
Пиксел на цветном дисплее может иметь различную окраску, для кодирования 2 в степени n-цветного изображения требуются т бит на пиксел, поскольку они могут принимать 2 в степени n различных состояний. Если иметь возможность управлять интенсивностью (яркостью) свечения базовых цветов, то количество различных вариантов их сочетаний, порождающих разнообразные оттенки, увеличивается. Как пример, может использоваться такой вариант кодировки цветов: 00 - черный, 10 - зеленый, 01 - красный, 11 - коричневый.
На RGB-мониторах разнообразие цветов получается сочетанием базовых цветов - красного (Red), зеленого (Green), синего (Blue), из которых можно получить 8 комбинаций.
- модель. - модель.
Существуют и таблицы цветов, зависящие от количества разрядов.
Векторное изображение ― это графический объект, состоящий из элементарных отрезков и дуг. В противоположность растровой графике векторное изображение многослойно. Каждый элемент векторного изображения - линия, прямоугольник, окружность или фрагмент текста - располагается в своем собственном слое, пикселы которого устанавливаются независимо от других слоев. Каждый элемент векторного изображения является объектом, который описывается с помощью специального языка (математических уравнения линий, дуг, окружностей и т. д.). Сложные объекты (ломаные линии, различные геометрические фигуры) представляются в виде совокупности элементарных графических объектов. Объекты векторного изображения, в отличии от растровой графики, могут изменять свои размеры без потери качества (при увеличении растрового изображения увеличивается зернистость). Базовым элементом изображения является линия. Как и любой объект, она обладает свойствами: формой (прямая, кривая), толщиной., цветом, начертанием (пунктирная, сплошная). Замкнутые линии имеют свойство заполнения (или другими объектами, или выбранным цветом). Все прочие объекты векторной графики составляются из линий.
Также существует фрактальная графика, основываеющаяся на математических вычислениях, как и векторная. Но в отличии от векторной ее базовым элементом является сама математическая формула. Это приводит к тому, что в памяти компьютера не хранится никаких объектов и изображение строится только по уравнениям. При помощи этого способа можно строить простейшие регулярные структуры, а также сложные иллюстрации, которые имитируют ландшафты.

Кодирование звука.
Звук ― это колебания воздуха. Если преобразовать звук в электрический сигнал (например, с помощью микрофона), можно видеть плавно изменяющееся с течением времени напряжение. Для компьютерной обработки такой - аналоговый - сигнал преобразовывается в последовательность двоичных чисел.
Измеряется напряжение через равные промежутки времени и полученные значения записываются в память компьютера. Этот процесс называется дискретизацией (или оцифровкой), а устройство, выполняющее его - аналого-цифровым преобразователем (АЦП).
Для того чтобы воспроизвести закодированный таким образом звук, нужно выполнить обратное преобразование (для него служит цифро-аналоговый преобразователь - ЦАП), а затем сгладить получившийся ступенчатый сигнал.
Чем выше частота дискретизации (т. е. количество отсчетов за секунду) и чем больше разрядов отводится для каждого отсчета, тем точнее будет представлен звук. Но при этом увеличивается и размер звукового файла. Поэтому в зависимости от характера звука, требований, предъявляемых к его качеству и объему занимаемой памяти, выбирают некоторые компромиссные значения. Этот способ кодирования звуковой информации достаточно универсален, позволяет представить любой звук и преобразовывать его различными способами.
Человек издавна использует довольно компактный способ представления музыки - нотную запись. В ней специальными символами указывается, какой высоты звук, на каком инструменте и как сыграть. Ее можно считать алгоритмом для музыканта, записанным на особом формальном языке. В 1983 г. ведущие производители компьютеров и музыкальных синтезаторов разработали стандарт, определивший такую систему кодов. Он получил название MIDI.
Такая система кодирования не позволяет записывать все звуки, она годится только для инструментальной музыки, но имеет преимущества: чрезвычайно компактная запись, естественность для музыканта (практически любой MIDI-редактор позволяет работать с музыкой в виде обычных нот), легкость замены инструментов, изменения темпа и тональности мелодии.
Существуют и другие, чисто компьютерные, форматы записи музыки. Среди них следует отметить формат MP3, позволяющий с очень большим качеством и степенью сжатия кодировать музыку. При этом вместо 18-20 музыкальных композиций на стандартный компакт-диск (CDROM) помещается около 200. Одна песня занимает примерно 3,5 Mb, что позволяет пользователям сети Интернет легко обмениваться музыкальными композициями.

Кодирование информации -- это процесс формирования определенного представления информации.

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

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

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

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

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

Разнообразные системы счисления, которые существовали раньше и которые используются в наше время, можно разделить на непозиционные и позиционные. Знаки, используемые при записи чисел, называются цифрами .

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

Например, VI = 5 + 1 = 6, а IX = 10 -- 1 = 9.

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

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

Основание системы счисления, в которой записано число, обычно обозначается нижним индексом. Например, 5557 -- число, записанное в семеричной системе счисления. Если число записано в десятичной системе, то основание, как правило, не указывается. Основание системы -- это тоже число, и его мы будем указывать в обычной десятичной системе. Вообще, число x может быть представлено в системе с основанием p, как x=an*pn+an-1*pn-1+ a1*p1+a0*p0, где an...a0 -- цифры в представлении данного числа. Так, например,

103510=1*103+0*102+3*101+5*100;
10102 = 1*23+0*22+1*21+0*20 = 10.

Наибольший интерес при работе на ЭВМ представляют системы счисления с основаниями 2, 8 и 16. Вообще говоря, этих систем счисления обычно хватает для полноценной работы как человека, так и вычислительной машины. Однако иногда в силу различных обстоятельств все-таки приходится обращаться к другим системам счисления, например к троичной, семеричной или системе счисления по основанию 32.

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

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

Часто в информатике используют шестнадцатеричную систему, так как запись чисел в ней значительно короче записи чисел в двоичной системе. Может возникнуть вопрос: почему бы не использовать для записи очень больших чисел систему счисления, например по основанию 50? Для такой системы счисления необходимы 10 обычных цифр плюс 40 знаков, которые соответствовали бы числам от 10 до 49 и вряд ли кому-нибудь понравится работать с этими сорока знаками. Поэтому в реальной жизни системы счисления по основанию, большему 16, практически не используются.

Двоичная система счисления

Люди предпочитают десятичную систему, вероятно, потому, что с древних времен считали по пальцам. Но, не всегда и не везде люди пользовались десятичной системой счисления. В Китае, например, долгое время применялась пятеричная система счисления. В ЭВМ используют двоичную систему потому, что она имеет ряд преимуществ перед другими:

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

В двоичной системе счисления всего две цифры, называемые двоичными (binary digits). Сокращение этого наименования привело к появлению термина бит , ставшего названием разряда двоичного числа. Веса разрядов в двоичной системе изменяются по степеням двойки. Поскольку вес каждого разряда умножается либо на 0, либо на 1, то в результате значение числа определяется как сумма соответствующих значений степеней двойки. Если какой-либо разряд двоичного числа равен 1, то он называется значащим разрядом. Запись числа в двоичном виде намного длиннее записи в десятичной системе счисления.

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

Рассмотрим подробнее, как происходит процесс умножения двоичных чисел. Пусть надо умножить число 1101 на 101 (оба числа в двоичной системе счисления). Машина делает это следующим образом: она берет число 1101 и, если первый элемент второго множителя равен 1, то она заносит его в сумму. Затем сдвигает число 1101 влево на одну позицию, получая тем самым 11010, и если, второй элемент второго множителя равен единице, то тоже заносит его в сумму. Если элемент второго множителя равен нулю, то сумма не изменяется.

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

Следует отметить, что большинство калькуляторов, реализованных на ЭВМ (в том числе и KCalc) позволяют осуществлять работу в системах счисления с основаниями 2, 8, 16 и, конечно, 10.

Перевод чисел из одной системы счисления в другую

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

Пусть требуется перевести число 567 из десятичной в двоичную систему. Сначала определим максимальную степень двойки, такую, чтобы два в этой степени было меньше или равно исходному числу. В нашем случае это 9, т. к. 29=512, а 210=1024, что больше начального числа. Таким образом, мы получим число разрядов результата. Оно равно 9+1=10. Поэтому результат будет иметь вид 1ххххххххх, где вместо х могут стоять любые двоичные цифры. Найдем вторую цифру результата. Возведем двойку в степень 9 и вычтем из исходного числа: 567-29=55. Остаток сравним с числом 28=256. Так как 55 меньше 256, то девятый разряд будет нулем, т. е. результат примет вид 10хххххххх. Рассмотрим восьмой разряд. Так как 27=128>55, то и он будет нулевым.

Седьмой разряд также оказывается нулевым. Искомая двоичная запись числа принимает вид 1000хххххх. 25=32<55, поэтому шестой разряд равен 1 (результат 10001ххххх). Для остатка 55-32=23 справедливо неравенство 24=16<23, что означает равенство единице пятого разряда. Действуя аналогично, получаем в результате число. Мы разложили данное число по степеням двойки:

567=1*29+0*28+0*27+0*26+1*25+1*24+0*23+1*22 +1*21+1*20

При другом способом перевода чисел используется операция деления в столбик. Рассмотрим то же самое число 567. Разделив его на 2, получим частное 283 и остаток 1. Проведем ту же самую операцию с числом 283. Получим частное 141, остаток 1. Опять делим полученное частное на 2, и так до тех пор, пока частное не станет меньше делителя. Теперь для того, чтобы получить число в двоичной системе счисления, достаточно записать последнее частное, то есть 1, и приписать к нему в обратном порядке все полученные в процессе деления остатки.



Результат, естественно, не изменился: 567 в двоичной системе счисления записывается как.

Эти два способа применимы при переводе числа из десятичной системы в систему с любым основанием. Для закрепления навыков рассмотрим перевод числа 567 в систему счисления с основанием 16.

Сначала осуществим разложение данного числа по степеням основания. Искомое число будет состоять из трех цифр, т. к. 162=256 < 567 < 163=4096. Определим цифру старшего разряда. 2*162=512<567<3*162=768, следовательно искомое число имеет вид 2хх, где вместо х могут стоять любые шестнадцатеричные цифры. Остается распределить по следующим разрядам число*16=48<55<4*16=64, значит во втором разряде находится цифра 3. Последняя цифра равна 7 (55-48). Искомое шестнадцатеричное число равно 237.

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

Операция перевода в десятичную систему выглядит гораздо проще, так как любое десятичное число можно представить в виде x = a0*pn + a1*pn-1 + ... + an-1*p1 + an*p0, где a0 ... an -- это цифры данного числа в системе счисления с основанием p.

Кодирование информации - это процесс формирования определенного представления информации.

Кодирование информации – это очень распространенный способ представления информации.

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

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

КодМорзе

Код Брайля

Код морской сигнальный

Рис. 1.2. Примеры различных систем кодирования

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

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

Познакомимся с некоторыми способами кодирования этих типов информации в ЭВМ.

Кодирование чисел

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

Множество целых чисел, представимых в памяти ЭВМ, ограничено. Диапазон значений зависит от размера области памяти, используемой для размещения чисел. В k-разрядной ячейке может храниться 2k различных значений целых чисел.

Чтобы получить внутреннее представление целого положительного числа N, хранящегося в k-разрядном машинном слове, необходимо:

1) перевести число N в двоичную систему счисления;

2) полученный результат дополнить слева незначащими нулями до k разрядов.

Пример
Получить внутреннее представление целого числа 1607 в 2-х байтовой ячейке.
Переведем число в двоичную систему: 160710 = . Внутреннее представление этого числа в ячейке будет следующим: 011.

Для записи внутреннего представления целого отрицательного числа (-N) необходимо:

1) получить внутреннее представление положительного числа N;

2) обратный код этого числа заменой 0 на 1 и 1 на 0;

3) полученному числу прибавить 1.

Пример
Получим внутреннее представление целого отрицательного числа -1607. Воспользуемся результатом предыдущего примера и запишем внутреннее представление положительного числа 1607: 011. Инвертированием получим обратный код: 100. Добавим единицу: 101 -- это и есть внутреннее двоичное представление числа -1607.

Формат с плавающей точкой использует представление вещественного числа R в виде произведения мантиссы m на основание системы счисления n в некоторой целой степени p , которую называют порядком : R = m * n p .

Представление числа в форме с плавающей точкой неоднозначно. Например, справедливы следующие равенства:
12.345 = 0.0012345 x 104 = 1234.5 x 10-2 = 0.12345 x 102

Чаще всего в ЭВМ используют нормализованное представление числа в форме с плавающей точкой. Мантисса в таком представлении должна удовлетворять условию: 0.1p <= m < 1p. Иначе говоря, мантисса меньше 1 и первая значащая цифра -- не ноль (p -- основание системы счисления).

В памяти компьютера мантисса представляется как целое число, содержащее только значащие цифры (0 целых и запятая не хранятся), так для числа 12.345 в ячейке памяти, отведенной для хранения мантиссы, будет сохранено число 12345. Для однозначного восстановления исходного числа остается сохранить только его порядок, в данном примере -- это 2.

Единицы представления данных

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

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

десятичное число

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

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

Выше мы видели, что во многих случаях целесообразно использовать не восьми­разрядное кодирование, а 16-разрядное, 24-разрядное, 32-разрядное и более. Группа из 16 взаимосвязанных бит (двух взаимосвязанных байтов) в информатике называ­ется словом. Соответственно, группы из четырех взаимосвязанных байтов (32 разряда) называются удвоенным словом, а группы из восьми байтов (64 разряда) - учетверенным ] словом. Пока, на сегодняшний день, такой системы обозначения достаточно.

Кодирование текста

Множество символов, используемых при записи текста, называется алфавитом . Количество символов в алфавите называется его мощностью .

Для представления текстовой информации в компьютере чаще всего используется алфавит мощностью 256 символов. Один символ из такого алфавита несет 8 бит информации, т. к. 28 = 256. Но 8 бит составляют один байт, следовательно, двоичный код каждого символа занимает 1 байт памяти ЭВМ.

Все символы такого алфавита пронумерованы от 0 до 255, а каждому номеру соответствует 8-разрядный двоичный код от до. Этот код является порядковым номером символа в двоичной системе счисления.

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

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

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

Исторически сложилось так, что для представления печатных символов (кодирования текста) в первых ЭВМ отвели 7 бит. 27=128. Этого количества вполне хватало для кодирования всех строчных и прописных букв латинского алфавита, десяти цифр и различных знаков и скобок. Именно такой, 7-битной, является таблица символов ASCII. Когда возникла необходимость кодировать национальные алфавиты, то 128 символов стало недостаточно. Было решено перейти на кодирование с помощью 8 бит (т. е. одного байта). В результате количество символов, которые можно закодировать таким образом стало равно 28=256. При этом символы национальных алфавитов располагались во второй половине кодовой таблицы, т. е. содержали единицу в старшем разряде байта, отведенного для кодирования символа. Так появился стандарт ISO 8859, содержащий множество кодировок для наиболее распространенных языков.

Кодирование русского текста

Среди них была и одна из первых таблиц для кодировки русских букв -- ISO 8859-5 .


Задачи передачи текстовой информации по сети вынудили разработать еще одну кодировку для русских букв, названную Koi8-R (код отображения информации 8-битный, русифицированный). Рассмотрим ситуацию, когда письмо, содержащее русский текст, отправлено по электронной почте. Случалось, что в процессе путешествия по сетям письмо обрабатывалось программой, которая работала с 7-битной кодировкой и обнуляла восьмой бит. В результате такого преобразования код символа уменьшался на 128, превращаясь в код символа латинского алфавита. Возникла необходимость повысить устойчивость передаваемой текстовой информации к обнулению 8 бита.

К счастью, значительное число букв кириллицы имеет фонетические аналоги в латинском алфавите. Например, Ф и F, Р и R. Есть несколько букв, совпадающих даже по начертанию. Расположив русские буквы в кодовой таблице таким образом, чтобы их код превышал код аналогичных латинских на число 128, добились того, что потеря 8-го бита превращала текст хотя и в состоящий из одной латиницы, но все равно понимаемый русскоязычным пользователем.

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

Далее наступила эра персональных компьютеров и операционной системы MS DOS. Как выяснилось, кодировка Koi8-R для нее не подходила (так же, как и ISO 8859-5), в ее таблице некоторые русские буквы находились на тех местах, которые многие программы предполагали заполненными псевдографикой (горизонтальные и вертикальные черточки, уголки и т. д.). Поэтому была придумана еще одна кодировка кириллицы, в таблице которой русские буквы "обтекали" со всех сторон графические символы. Назвали эту кодировку альтернативной (alt), поскольку она была альтернативой официальному стандарту -- кодировке ISO-8859-5. Неоспоримым достоинством этой кодировки является то, что русские буквы в ней расположены в алфавитном порядке.

После появления ОС Windows от фирмы Microsoft выяснилось, что альтернативная кодировка по некоторым причинам для нее не подходит. Снова передвинув русские буквы в таблице (появилась возможность -- ведь псевдографика в Windows не требуется), получили кодировку Windows 1251 (Win-1251).

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

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

Наряду с байтами для измерения количества информации используются более крупные единицы:

Условно можно считать, что 1 Кбайт примерно равен 1000 байт. Условность связана с тем, что для вычислитель­ной техники, работающей с двоичными числами, более удобно представление чисел в виде степени двойки, и потому на самом деле 1 Кбайт равен 210 байт (1024 байт). Однако всюду, где это не принципиально, с инженерной погрешностью (до 3 %) «забывают» о «лишних» байтах.
Пример
Книга содержит 100 страниц; на каждой странице -- 35 строк, в каждой строке -- 50 символов. Рассчитаем объем информации, содержащийся в книге.

Страница содержит 35 x 50 = 1750 байт информации. В килобайтах измеряют сравнительно небольшие объемы данных. Условно можно считать, что одна страница неформатированного машинописного текста составляет около 2 Кбайт.

Объем всей информации в книге (в разных единицах):

1750 x 100 = 175000 байт.

175000 / 1024 = 170,8984 Кбайт.

170,8984 / 1024 = 0,166893 Мбайт.

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

1 Мбайт = 1024 Кбайт = 1020 байт

1 Гбайт = 1024 Мбайт = 1030 байт

1 Тбайт = 1024 Гбайт = 1040 байт

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

Кодирование графической информации

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

Растровые изображения представляют собой однослойную сетку точек, называемых пикселами (pixel, от англ. picture element). Для черно-белого изображения (без полутонов) пиксел может принимать только два значения: белый и черный (светится -- не светится), а для его кодирования достаточно одного бита памяти: 1 -- белый, 0 -- черный.

Пиксел на цветном дисплее может иметь различную окраску, поэтому одного бита на пиксел недостаточно. Для кодирования 4-цветного изображения требуются два бита на пиксел, поскольку два бита могут принимать 4 различных состояния. Может использоваться, например, такой вариант кодировки цветов: 00 -- черный, 10 -- зеленый, 01 -- красный, 11 -- коричневый.

На RGB-мониторах все разнообразие цветов получается сочетанием базовых цветов -- красного (Red), зеленого (Green), синего (Blue), из которых можно получить 8 основных комбинаций:

цвет

цвет

коричневый

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

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

Объекты векторного изображения, в отличии от растровой графики, могут изменять свои размеры без потери качества (при увеличении растрового изображения увеличивается зернистость).

Кодирование звука

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

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


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

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

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

Человек издавна использует довольно компактный способ представления музыки -- нотную запись. В ней специальными символами указывается, какой высоты звук, на каком инструменте и как сыграть. Фактически, ее можно считать алгоритмом для музыканта, записанным на особом формальном языке. В 1983 г. ведущие производители компьютеров и музыкальных синтезаторов разработали стандарт, определивший такую систему кодов. Он получил название MIDI.

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

Заметим, что существуют и другие, чисто компьютерные, форматы записи музыки. Среди них следует отметить формат MP3, позволяющий с очень большим качеством и степенью сжатия кодировать музыку. При этом вместо 18--20 музыкальных композиций на стандартный компакт-диск (CDROM) помещается около 200. Одна песня занимает примерно 3,5 Mb, что позволяет пользователям сети Интернет легко обмениваться музыкальными композициями.

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

Примеры векторов и матриц в Матсаd

Форматы файлов

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

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

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

Unix оказал очень большое влияние на другие операционные системы персональных компьютеров. Почти все они поддерживают идею Unix о том, что файл -- это просто последовательность байтов. Файлы, представляющие собой поток данных, стали использоваться при обмене информацией между компьютерными системами. Если используется более сложная структура файла (как в операционных системах OS/2 и Macintosh), она всегда может быть преобразована в поток байтов, передана и на другом конце канала связи воссоздана в исходном виде.

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

Способ, которым данные организованы в байты, называется форматом файла.

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

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

Все файлы условно можно разделить на две части -- текстовые и двоичные.

Текстовые файлы -- наиболее распространенный тип данных во всем компьютерном мире. Для хранения каждого символа чаще всего отводится один байт, а кодирование текстовых файлов выполняют с помощью специальных таблиц, в которых каждому символу соответствует определенное число, не превышающее 255. Файл, для кодировки которого используется только 127 первых чисел, называется ASCII-файлом (сокращение от American Standard Code for Information Intercange -- американский стандартный код для обмена информацией), но в таком файле не могут быть представлены буквы, отличные от латиницы (в том числе и русские). Большинство национальных алфавитов можно закодировать с помощью восьмибитной таблицы. Такие языки, как китайский, содержат значительно больше 256 символов, поэтому для кодирования каждого из них используют несколько байтов. Для экономии места зачастую применяется следующий прием: некоторые символы кодируются с помощью одного байта, в то время как для других используются два или более байтов. Одной из попыток обобщения такого подхода является стандарт Unicode, в котором для кодирования символов используется диапазон чисел от нуля до 65 536. Такой широкий диапазон позволяет представлять в численном виде символы языка людей из любого уголка планеты.

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

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

Единицы хранения данных

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

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

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

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

Рис. 1.5. Пример иерархической структуры данных


Рис. 1.6. Пример, поясняющий принцип действия метода дихотомии

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

Его суть понятна из примера, представленного на рис. 1.6. В иерархической структуре, построенной методом дихотомии, путь доступа к любому элементу можно представить как путь через рациональный лабиринт с поворотами налево (0) или направо (1) и, таким образом, выразить путь доступа в виде компактной двоичной записи. В нашем примере путь доступа к текстовому процессору Word 2000 выразится следующим двоичным числом: 1010.

Упорядочение структур данных

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

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

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


Основы логики высказываний

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

Слово логика означает систематический метод рассуждений. Мы познакомимся с одним из разделов этой науки - исчислением высказываний . Исчисление высказываний - совокупность правил, используемых для определения истинности или ложности логических предложений. Логике высказываний можно "научить" вычислительную машину, которая таким образом получает возможность "рассуждать", хотя и на весьма примитивном уровне.

Математик Джордж Буль () описал алгебру, основанную на операторах И, ИЛИ и НЕ и булевых переменных, которые принимают только два значения, например, 0 или 1.

Буль (Boole) Джордж (2 ноября 1815, Линкольн, Великобритания - 8 декабря 1864, Баллинтемпль, Ирландия), английский математик и логик, один из основоположников математической логики. Разработал алгебру логики (булеву алгебру) («Исследование законов мышления», 1854), основу функционирования цифровых компьютеров.

Джордж Буль родился в бедной рабочей семье. Первые уроки математики получил у отца и, хотя посещал местную школу, в общем его можно считать самоучкой. В 12 лет он уже знал латынь, затем овладел греческим, французским, немецким и итальянским языками . В 16 лет уже преподавал в деревенской школе, а в 20 открыл собственную школу в Линкольне. В редкие часы досуга зачитывался математическими журналами Механического института, интересовался работами математиков прошлого - Ньютона, Лапласа, Лагранжа, проблемами современной алгебры.

Начиная с 1839 года, Буль стал посылать свои работы в новый Кембриджский математический журнал. Его первая работа «Исследования по теории аналитических преобразований» касалась дифференциальных уравнений, алгебраических проблем линейной трансформации и концепции инвариантности. В своем исследовании 1844 года, опубликованном в «Философских трудах Королевского общества», он коснулся проблемы взаимодействия алгебры и исчисления. В том же году молодой ученый был награжден медалью Королевского общества за вклад в математический анализ.

Вскоре после того, как Буль убедился, что его алгебра вполне применима к логике, в 1847 году он опубликовал памфлет «Математический анализ логики», в котором высказал идею, что логика более близка к математике, чем к философии. Эта работа была чрезвычайно высоко оценена английским математиком Августом де Морганом. Благодаря этой работе Буль в 1849 году получил пост профессора математики Куинз-колледжа в графстве Корк, несмотря на то что он даже не имел университетского образования.

В 1854 году он опубликовал работу «Исследование законов мышления, базирующихся на математической логике и теории вероятностей». Работы 1847 и 1854 годов дали рождение алгебре логики, или булевой алгебре. Буль первым показал, что существует аналогия между алгебраическими и логическими действиями, так как и те, и другие предполагают лишь два варианта ответов - истина или ложь, нуль или единица. Он придумал систему обозначений и правил, пользуясь которыми можно было закодировать любые высказывания, а затем манипулировать ими как обычными числами. Булева алгебра располагала тремя основными операциями - И, ИЛИ, НЕ, которые позволяли производить сложение, вычитание, умножение, деление и сравнение символов и чисел. Таким образом, Булю удалось подробно описать двоичную систему счисления. В своей работе «Законы мышления» (1854) Буль окончательно сформулировал основы математической логики. Он также попытался сформулировать общий метод вероятностей, с помощью которого из заданной системы вероятных событий можно было бы определить вероятность последующего события, логически связанного с ними.

В 1857 году Буль был избран членом Королевского общества. Его работы «Трактат о дифференциальных уравнениях» (1859) и «Трактат о вычислении предельных разностей» (1860) оказали колоссальное влияние на развитие математики. В них нашли свое отражение наиболее важные открытия Буля. Идеи Буля нашли применение в использующих двоичный код цифровых компьютерах.

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

Высказывание или предложение - это просто утверждение, которое может быть истинно или ложно. Примерами могут служить следующие утверждения: "Сидорову 20 лет", "Сидоров - студент". Такие высказывания называются атомарными. Примером составного предложения может служить высказывание "Сидорову 20 лет и он студент", которое содержит два отдельных атомарных предложения (атома), каждое из которых может быть истинно или ложно. Если, например, Сидорову 19 лет, то высказывание "Сидорову 20 лет" ложно. Составные и атомарные предложения называются в логике формулами.

В исчислении высказываний не рассматриваются утверждения, имеющие значения, отличные от "истинно" и "ложно". Используется двузначная логика: ответ, отличный от "Да", есть "Нет". Древние философы назвали этот принцип "законом исключенного третьего". Существуют другие логики, правила которых отличаются от правил исчисления высказываний, например, трехзначная логика со значениями "Да", "Нет", "Не знаю" или так называемая нечеткая логика, где можно оперировать утверждениями типа "С вероятностью 90% величина А больше 3".

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

Связка

Законы булевой алгебры

Составные предложения

Для построения составных предложений чаще всего используются связки - И (&& , конъюнкция) и ИЛИ (|| , дизъюнкция). Смысл связки И - тот же, что и в разговорной речи: конъюнкция двух предложений истинна тогда и только тогда, когда они оба истинны. Связка ИЛИ "двойственна" связке И: дизъюнкция двух предложений ложна только если они оба ложны.

Дизъюнкция (ИЛИ) нескольких предложений ложна тогда, когда все они ложны. Рассмотрим, например, утверждение "Плата за проживание снижена для студентов, лиц моложе 21 года и безработных ". Согласно ему приходится платить полную цену, только если все три исключения нарушены.

Аналогичное обобщение верно и для связки И. Конъюнкция нескольких предложений истинна, только если все они истинны.

Кроме И и ИЛИ, имеется еще модификатор НЕ (! , отрицание) результат применения которого противоположен его аргументу: !T = F, !F = T. В математической литературе для обозначения отрицания выражения проводят горизонтальную черту над ним.

Значения логических выражений, содержащих связки И, ИЛИ и модификатор НЕ, вычисляются с помощью так называемой таблицы истинности:

A

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

Пример
Вычислить значение логической формулы!X && Y || X && Z
при следующих значениях переменных: X = F, Y = T, Z = T.

Решение
Отметим цифрами порядок выполнения операций:

Используя таблицу истинности, вычислим формулу по шагам:

Итак, формула при данных значениях аргументов принимает значение T.

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

Законы
коммутативности

А && В = B && A
A || B = B || A

Законы
ассоциативности

A && (B && C) = (A && B) && C
A || (B|| C) = (A || B) || C

Законы
дистрибутивности

A && (B || C) = (A && B) || (A && C)
A || (B && C) = (A || B) && (A || C)

Свойства операций
И, ИЛИ

A && T = A; A && F = F
A || F = A; A || T = T

Свойства отрицания

A && !A = F; A || !A = T

Закон коммутативности утверждает, что можно переставлять операнды при использовании конъюнкции или дизъюнкции. Это может показаться очевидным, но имеются операторы вроде арифметического минуса, для которых это неверно: A - B отлично от B - A. Закон ассоциативности позволяет расставлять скобки произвольным образом, если в логическом выражении используется лишь одна из связок && и ||. В таких случаях можно вообще обойтись без скобок, так как закон ассоциативности гарантирует получение одного и того же результата независимо от того, как сгруппированы предложения.

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

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

{ свойство операции ИЛИ }

(A || F) && (A || B) =

{ дистрибутивность }

{ коммутативность }

{ свойство операции И }

{ свойство операции ИЛИ }

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


Импликация и эквивалентность

Известно, что любая логическая формула может быть выражена через три ранее рассмотренные логические операции, однако на практике часто используют еще две логические связки. Первая из них называется импликацией и служит для задания так называемых условных высказываний. В русском языке этой логической операции соответствуют фразы если..., то... или когда..., тогда... Импликация - двухместная операция: часть формулы до импликации называют основанием условного высказывания, а часть, расположенную за ней - следствием. В логических формулах импликация обозначается знаком ->. Операция A -> B определяет логическую функцию, тождественно совпадающую с функцией! A || B.

Пример
Дано сложное высказывание: "Если выглянет солнце, то станет тепло". Требуется записать его в виде логической формулы.
Обозначим через А простое высказывание "выглянет солнце", а через В - "станет тепло". Тогда логической формулой этого сложного высказывания будет импликация: A -> B.

Другой распространенной операцией является эквивалентность. Ее аналог в разговорной речи - фразы, подобные словосочетанию тогда и только тогда, когда... или если и только если... Для ее обозначения используется символ <-> или просто =. Мы будем использовать для обозначения эквивалентности обе эти формы. Отметим, что логическая формула A <-> B эквивалентна формуле (A -> B) && (B -> A).

Пример
Дано сложное высказывание: "В зачетную книжку выставляется оценка за экзамен тогда и только тогда, когда он сдан". Нужно преобразовать высказывание к логической формуле. Обозначим через А простое высказывание "В зачетную книжку выставляется оценка за экзамен", а через В - "Экзамен сдан". Тогда логическая формула сложного высказывания запишется в виде A <-> B.

Приведем таблицу истинности, задающую операции импликации и эквивалентности:

A -> B

A <-> B

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

Код - это набор условных обозначений (или сигналов) для записи (или передачи) некоторых заранее определенных понятий.

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

Обычно каждый образ при кодировании (иногда говорят - шифровке) представлении отдельным знаком.

Знак - это элемент конечного множества отличных друг от друга элементов.

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

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

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

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

Способы кодирования информации.

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

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

Кодирование символьной (текстовой) информации.

Основная операция, производимая над отдельными символами текста - сравнение символов.

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

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

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

Наиболее популярные таблицы перекодировки: ДКОИ-8, ASCII, CP1251, Unicode.

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

Различных комбинаций из 0 и 1 при длине кода 8 бит может быть 28 = 256, поэтому с помощью одной таблицы перекодировки можно закодировать не более 256 символов. При длине кода в 2 байта (16 бит) можно закодировать 65536 символов.

Кодирование числовой информации.

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

Основной системой счисления для представления чисел в компьютере является двоичная позиционная система счисления.

Кодирование текстовой информации

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

10 цифр, 12 знаков препинания, 15 знаков арифметических действий, буквы русского и латинского алфавита, ВСЕГО: 155 символов, что соответствует 8 бит информации.

Единицы измерения информации.

1 байт = 8 бит

1 Кбайт = 1024 байтам

1 Мбайт = 1024 Кбайтам

1 Гбайт = 1024 Мбайтам

1 Тбайт = 1024 Гбайтам

Суть кодирования заключается в том, что каждому символу ставят в соответствие двоичный код от 00000000 до 11111111 или соответствующий ему десятичный код от 0 до 255.

Необходимо помнить, что в настоящее время для кодировки русских букв используют пять различных кодовых таблиц (КОИ - 8, СР1251, СР866, Мас, ISO), причем тексты, закодированные при помощи одной таблицы не будут правильно отображаться в другой

Основным отображением кодирования символов является код ASCII - American Standard Code for Information Interchange- американский стандартный код обмена информацией, который представляет из себя таблицу 16 на 16, где символы закодированы в шестнадцатеричной системе счисления.

Кодирование графической информации.

Важным этапом кодирования графического изображения является разбиение его на дискретные элементы (дискретизация).

Основными способами представления графики для ее хранения и обработки с помощью компьютера являются растровые и векторные изображения

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

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

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

Pixel (picture element - элемент рисунка) - минимальная единица изображения, цвет и яркость которой можно задать независимо от остального изображения.

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

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

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

Если рисунок цветной, то для каждой точки задается двоичный код ее цвета.

Поскольку и цвета кодируются в двоичном коде, то если, например, вы хотите использовать 16-цветный рисунок, то для кодирования каждого пикселя вам потребуется 4 бита (16=24), а если есть возможность использовать 16 бит (2 байта) для кодирования цвета одного пикселя, то вы можете передать тогда 216 = 65536 различных цветов. Использование трех байтов (24 битов) для кодирования цвета одной точки позволяет отразить 16777216 (или около 17 миллионов) различных оттенков цвета - так называемый режим “истинного цвета” (True Color). Заметим, что это используемые в настоящее время, но далеко не предельные возможности современных компьютеров.

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

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

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

Можно поступить следующим образом: измерять амплитуду сигнала через равные промежутки времени и записывать полученные числовые значения в память компьютера.

Обслуживание