Символьное кодирование
Надеемся, вы еще помните о том, что информатика -- наука о получении, преобразовании, сохранении и передаче информации.
Информация Без нее буквально как без воды. Недаром марафонский бегун пожертвовал жизнью всего лишь ради пары слов. Говоря научным, прозаическим языком, он обеспечивал информационную инфраструктуру государства. Давайте же уделим свое внимание тому, ради чего не жалели жизни, -- передаче информации.
Многие африканские племена до сих пор используют специальные барабаны -- тамтамы, обмениваясь сообщениями со скоростью звука.
На Руси, где леса гасили звук, использовали другой метод. Ни один гонец с пограничной заставы не успел бы вовремя предупредить горожан о набеге кочевников -- их кони были не менее быстрыми. И для передачи срочных сообщений использовался дым костров.
До сих пор на флоте используется семафорная азбука, когда каждой букве соответствует определенное положение рук сигнальщика, подчеркиваемое флажками.
Но удары барабана, столбы дыма, поднятые вверх руки -- это вовсе не то же самое, что звуки человеческой речи или знакомые с первого класса буквы. Но, подумав, можно обнаружить между ними много общего. Ведь речь идет фактически о том, что каждое сообщение, несущее нам информацию, представляет собой последовательность сигналов. А для того, чтобы сообщение было не только принято, но и понято, нужно предварительно договориться, что означают, например, два столба дыма или последовательность из трех быстрых ударов, или разведенные в стороны руки.
Итак, кроме самого сообщения и способа его передачи, появился еще один компонент -- кодирование.
По мере развития цивилизации появлялись новые возможности передачи сообщений, а значит, и новые способы кодирования. Мы остановимся только на одном из них.
Майкл Фарадей в 1831 году сделал открытие, буквально перевернувшее мир: он изобрел способ получения электрического тока. И чуть ли не сразу же электрический ток был использован для передачи сообщений -- американский изобретатель Сэмюэл Морзе создает и широко внедряет в практику телеграфные аппараты и линии связи.
В какой-то степени Морзе пришлось решать проблему, аналогичную проб-леме передачи сообщений по африканскому барабанному телеграфу. И электрический ток, и барабан имеют весьма небогатые выразительные -возможности. По барабану можно либо стучать, либо нет. Электрический ток или идет, или нет. Поэтому и кодировка, предложенная Морзе, использовала всего три своеобразные буквы: длинный сигнал (тире), короткий сигнал (точка), нет сигнала (пауза) -- для разделения букв.
Код Морзе вот уже полтора века служит человечеству. Его до сих пор используют на радиостанциях, потому что его сигналы пробиваются сквозь такие атмосферные помехи, которые глушат любую членораздельную речь.
С течением времени телеграф превратился в массовое средство передачи сообщений, доступное (в принципе) любому желающему. Но все же до-статочно дорогое. Требовался хорошо обученный оператор, виртуозно владеющий специальным ключом, замыкающим и размыкающим электрическую цепь. И тем не менее его скорость передачи сообщений не шла ни в какое сравнение со скоростью работы машинисток, набивающих текст с помощью клавиатуры, -- ведь, чтобы передать одну букву, скажем, О, надо трижды нажать на ключ, а машинистке один раз ударить по клавише.
Вот бы совместить пишущую машинку с телеграфным аппаратом! Но для этого нужно автоматизировать процесс кодирования-декодирования информации. К сожалению, все попытки сделать машину, понимающую код Морзе, оказались безуспешными. Предложенные варианты оказывались излишне громоздкими, ненадежными и дорогими.
Конечно, техника начала века была еще не столь совершенна, как сейчас, но свою роль сыграло и то, что сам по себе код Морзе был весьма сложен для распознавания его автоматами. Более удачный код был предложен немецким изобретателем Бодо.
Во-первых, в нем использовались только два сигнала (например, точка и тире без паузы), а во-вторых, чтобы не возникала проблема отделения одной буквы от другой, все буквы кодировались последовательностями сигналов одинаковой длины. Аппараты Бодо были просты в производстве и надежны. С их помощью удалось сделать телеграф на самом деле массовым средством передачи срочных сообщений.
Давайте теперь встанем на место Бодо и подумаем, сколько же нужно сигналов, чтобы закодировать все буквы.
Для удобства записи будем обозначать сигнал одного типа нулем (0), а другого типа -- единицей (1). Конечно, можно было бы договориться обозначать сигналы и какими-нибудь другими знаками., но, как вы позже увидите (в 9-м классе), это менее удобно. Итак, последовательностью из одного сигнала можно закодировать всего две буквы. Например:
0 |
А |
1 |
Ы |
Если бы наш язык состоял всего лишь из этих двух букв, нам бы этого и хватило.
К сожалению, в русском языке букв несколько больше. Поэтому продолжим исследование.
Последовательностью из двух сигналов можно закодировать уже четыре буквы. Например:
0 |
0 |
А |
0 |
1 |
Ы |
1 |
0 |
В |
1 |
1 |
Р |
В общем, получше, но изъясняться на таком языке тоже не слишком удобно.
Трехсигнальной последовательностью можно закодировать уже восемь букв:
0 |
0 |
0 |
А |
0 |
0 |
1 |
Ы |
0 |
1 |
0 |
В |
0 |
1 |
1 |
Р |
1 |
0 |
0 |
Б |
1 |
0 |
1 |
У |
1 |
1 |
0 |
З |
1 |
1 |
1 |
Ш |
Это уже совсем хорошо. Можно послать сверхсрочное сообщение "ВЫРВУАРБУЗ". Но всегда хочется лучшего.
Думается, вы уже догадались, что с помощью последовательности из четырех сигналов можно закодировать шестнадцать букв, а пятисигнальной -- тридцать две.
Попросите у родителей какую-нибудь старую телеграмму. Вы увидите, что буквы там только заглавные. А вместо точек и запятых стоят слова "ТЧК" и "ЗПТ". Поэтому, хотя вроде бы пятисигнальной последовательности вполне достаточно, чтобы изъясняться на вполне русском языке, мы будем ее наращивать.
С помощью последовательности из шести знаков (нулей и единиц) можно закодировать уже 64 символа. Но если мы хотим, чтобы в сообщении были заглавные и строчные буквы, а также цифры, этого недостаточно.
На цифре семь можно и остановиться. Этого хватает для того, чтобы закодировать все символы, необходимые для посылки сообщений на хорошем русском языке. Именно таков отечественный код КОИ-7. Сокращение КОИ родилось из первых букв словосочетания "код обмена информацией".
Чтобы не употреблять длинный оборот "последовательность из стольких-то знаков, каждый из которых нуль или единица", люди договорились появление одного такого знака в последовательности называть битом (от английского BInary digiT -- двоичная цифра). Теперь можно сказать, что последовательность из шести нулей или единиц -- это шестибитная последовательность, а КОИ-7 -- это семибитное кодирование русскоязычных сообщений.
Когда в середине нашего века на сцене появились компьютеры с их убогим языком нулей и единиц (ток, сами понимаете, либо есть, либо его нет, кусочек поверхности либо намагничен, либо нет, конденсатор либо разряжен, либо заряжен), все было готово к тому, чтобы обрабатывать с их помощью буквы и цифры, иными словами, символьную информацию.
Впервые, по всей видимости, это было сделано под руководством Алана Тьюринга в местечке Блетчли-Парк неподалеку от Лондона. Именно там в 1943 году был создан специализированный компьютер, расшифровывающий немецкие военные коды. Машина называлась "Колосс". Тысячи перехваченных за день неприятельских сообщений вводились в память "Кол осса", после чего в поисках соответствия машина перебирала сотни тысяч вариантов, расшифровывая самые сложные коды.
Как говорил один из участников этой работы И. Дж. Гуд: "Я не хочу сказать, что мы выиграли войну благодаря Тьюрингу, но беру на себя смелость сказать, что без него мы могли бы ее проиграть".
Уже в 1950 году в Англии компьютер LEO (Lyon s Electronic Office) начислял зарплату работникам чайных магазинов.
В большинстве первых компьютеров использовался именно семибитный код. Но с развитием техники это стало довольно неудобно. Новый код был уже восьмибитным и основывался на американском стандартном коде информационного обмена (ASCII -- American Standard Code for Information Interchange). В частности, именно благодаря восьмибитному кодированию мы без всяких проблем используем в тексте большие и маленькие буквы и русского, и латинского алфавитов, знаки препинания, цифры, специальные символы вроде N и, конечно же, пробел. Это очень важный символ -- ведьбезнегочитатьтекстпростопротивно.
Последовательность восьми битов договорились называть словом байт. Вот и получается, что один символ занимает в памяти компьютера ровно один байт.
Но и одного байта окажется маловато, если потребуется оценить, сколько места в памяти компьютера занимает, скажем, десяток-другой страниц текста. Поэтому были введены более крупные единицы -- килобайт (обозначение К), мегабайт (М), гигабайт (Г) Соотношения между ними таковы:
1 К = 1024 байтам,
1 М = 1024 К,
1 Г = 1024 М.
Конечно, в современном мире, опутанном компьютерными сетями, даже восьмибитного кодирования недостаточно: есть же арабский алфавит, два японских, хинди, математическая символика и т.д. Поэтому не так давно был предложен новый стандарт символьного кодирования UNICODE, где каждый символ кодируется уже двумя байтами.
Вопросы и задания
· 1. Посчитайте, сколько байт содержит одна страница вашего учебника. Выразите полученное число в килобайтах.
· 2. "Сколькобитное" кодирование вы бы предложили для языка племени мумбо-юмбо, в алфавите которого целых 16 букв и все большие, а цифр и знаков препинания и вовсе нет?
· 3. Если в предыдущем задании ваш ответ -- 4, то найдите ошибку. Без какого символа нельзя обойтись?
· 4. Сколько символов можно закодировать, используя UNICODE?