Префиксный код — Википедия
Материал из Википедии — свободной энциклопедии
Текущая версия страницы пока не проверялась опытными участниками и может значительно отличаться от версии, проверенной 17 ноября 2018; проверки требуют 4 правки. Текущая версия страницы пока не проверялась опытными участниками и может значительно отличаться от версии, проверенной 17 ноября 2018; проверки требуют 4 правки.Пре́фиксный код в теории кодирования — код со словом переменной длины, имеющий такое свойство (выполнение условия Фано): если в код входит слово a, то для любой непустой строки b слова ab в коде не существует. Хотя префиксный код состоит из слов разной длины, эти слова можно записывать без разделительного символа.
Например, код, состоящий из слов 0, 10 и 11, является префиксным, и сообщение 01001101110 можно разбить на слова единственным образом:
0 10 0 11 0 11 10
Код, состоящий из слов 0, 10, 11 и 100, префиксным не является, и то же сообщение можно трактовать несколькими способами.
0 10 0 11 0 11 10 0 100 11 0 11 10
Так называемые «префиксы» могут быть получены путём последовательного отбрасывания последнего знака кодовой комбинации. Например, для кодовой комбинации 11101101 префиксами будут 11101101, 1110110, 111011, 11101, 1110, 111, 11, 1.
Либо так:
Пишем все комбинации кодов, без нулей спереди: 0 //префикс //1 //10 <- комментируем (исключаем) те, которые являются началом других //11 100 //префикс 101 //незакомментированные коды - префиксы префиксного кода. 110 111 ... //пусть это будут все трехбитные комбинации.
Полученная последовательность кодов (0, 100, 101, 110, 111) — эквивалентна последовательности префиксного кода Хаффмана.
Если промежутков или других знаков препинания между кодовыми комбинациями нет, то для однозначного декодирования комбинации 111011101 ни одна из кодовых комбинаций не может быть представлена перечисленными вариантами (префиксами). Код называется префиксным, если ни одна из его комбинаций не является префиксом другой комбинации того же кода. Часть кодовой комбинации, которая дополняет префикс до самой комбинации, называется суффиксом. Префиксные коды наглядно могут быть представлены с помощью кодовых деревьев. Если ни один узел кодового дерева не является вершиной данного кода, то он обладает свойствами префикса. Узлы дерева, которые не соединяются с другими, называются конечными. Комбинации, которые им соответствуют, являются кодовыми комбинациями префиксного кода.
Любой код со словом фиксированной длины, очевидно, является префиксным. Рассмотрим несколько нетривиальных примеров.
- Телефонные номера в стационарных сетях.
- UTF-8.
- Код Хаффмана, применяемый для сжатия данных.
- Синтаксис Паскаля и других языков с LL(1)-синтаксисом (если считать символом лексему, а словом — оператор). Поэтому для определения типа оператора транслятору Паскаля не приходится возвращать считанные символы в поток либо запоминать их в стеке.
Код Морзе не является префиксным. В него, кроме точки и тире, входит также символ-разделитель — пауза длиной в тире.
Код (значения) — Википедия
Материал из Википедии — свободной энциклопедии
Код (фр. code, от лат. codex):
- Код — правило (алгоритм) сопоставления каждому конкретному сообщению строго определённой комбинации символов (знаков) (или сигналов).
- Код (городское ориентирование) — последовательность букв и цифр, подтверждающая выполнение задания.
- Q-код — трёхбуквенный код, используемый в радиосвязи.
- Штриховой код — последовательность чёрных и белых полос, представляющая некоторую информацию в удобном для считывания техническими средствами виде.
- Генетический код — свойственный всем живым организмам способ кодирования аминокислотной последовательности белков при помощи последовательности нуклеотидов.
- Программирование
- Машинный код — система команд вычислительной машины, интерпретируемая непосредственно процессором.
- Байт-код, псевдокод — машинно-независимый код низкого уровня, генерируемый транслятором и исполняемый интерпретатором.
- Шелл-код — исполняемый код, который обычно передаёт управление командному процессору ОС. Может быть использован как нагрузка эксплойта, обеспечивающая взломщику доступ к командной оболочке.
- Исходный код, исходный текст — текст компьютерной программы на каком-либо языке программирования, который может быть прочтён человеком. В обобщённом смысле — любые входные данные для транслятора.
- Кейп-Код (англ. Cape Cod — «мыс трески») — полуостров на северо-востоке США в 120 км от Бостона.
- Регистрационный номер — последовательность цифр и букв, обозначающая некоторый объект для отличия его от других подобных объектов.
- Шифр — система преобразования текста с секретом (ключом) для обеспечения секретности передаваемой информации.
- Кодирование (значения)
Код Бодо — Википедия
Материал из Википедии — свободной энциклопедии
Код Бодо́ — цифровой, первоначально синхронный 5-битный код. Позже он стал международным стандартом CCITT-1 (ITA-1). На его основе был разработан код CCITT-2, ставший стандартом в телеграфии.
Управляющие символы | |||||||||||
o. … | пробел, перейти к таблице букв | ||||||||||
.o … | пробел, перейти к таблице цифр | ||||||||||
oo … | удалить последний знак | ||||||||||
таблица букв | таблица цифр | ||||||||||
.. o.. | A | oo o.. | K | .. o.. | 1 | o. o.. | . | ||||
.. oo. | É | oo oo. | L | .. .o. | 2 | o. .o. | 9/ | ||||
.. .o. | E | oo .o. | M | .. ..o | 3 | o. ..o | 7/ | ||||
.. .oo | I | oo .oo | N | .. o.o | 4 | o. o.o | 2/ | ||||
.. ooo | O | oo ooo | P | .. ooo | 5 | o. ooo | ‘ | ||||
.. o.o | U | oo o.o | Q | .. oo. | 1/ | o. oo. | : | ||||
.. ..o | Y | oo ..o | R | .. .oo | 3/ | o. .oo | ? | ||||
.o ..o | B | o. ..o | S | .o o.. | oo o.. | ( | |||||
.o o.o | C | o. o.o | T | .o .o. | 7 | oo .o. | ) | ||||
.o ooo | D | o. ooo | V | .o ..o | 8 | oo ..o | — | ||||
.o .oo | F | o. .oo | W | .o o.o | 9 | oo o.o | / | ||||
.o .o. | G | o. .o. | X | .o ooo | 0 | oo ooo | + | ||||
.o oo. | H | o. oo. | Z | .o oo. | 4/ | oo oo. | = | ||||
.o o.. | J | o. o.. | — | .o .oo | 5/ | oo .oo | £ |
Код разработал Эмиль Бодо в 1870 году для своего телеграфа. Код вводился прямо клавиатурой, состоящей из пяти клавиш, нажатие или ненажатие клавиши соответствовало передаче или непередаче одного бита в пятибитном коде. Максимальная скорость передачи — чуть больше 190 знаков в минуту (примерно 16 бит или 3 бода в секунду).
Кодировка CCITT-2В 1901 Дональд Мюррей переработал код, изменил порядок знаков и добавил некоторые дополнительные знаки. Это было связано с изобретением клавиатуры для телеграфного аппарата. Теперь порядок кодов был не связан с требованиями удобства оператора и позволял минимизировать износ оборудования при переключениях. Общие принципы — 5-битная кодировка и использование буквенного и цифрового регистров — остались неизменными. Модификация нового кода была принята в 1932 году как стандарт ITA-2 (CCITT-2).
Перфолента на коде БодоВ СССР была принята модификация CCITT-2 с дополнительным регистром для кириллицы — МТК-2.
Машинный код — Википедия
Эта статья о системе команд в целом; об инструкциях см. Код операции. Памятка программиста, 1960-е годы. Цифровой (машинный) код «Минск-22»Маши́нный код (платфо́рменно-ориенти́рованный код), маши́нный язы́к — система команд (набор кодов операций) конкретной вычислительной машины, которая интерпретируется непосредственно процессором или микропрограммами этой вычислительной машины.[1]
Компьютерная программа, записанная на машинном языке, состоит из машинных инструкций, каждая из которых представлена в машинном коде в виде т. н. опкода — двоичного кода отдельной операции из системы команд машины. Для удобства программирования вместо числовых опкодов, которые только и понимает процессор, обычно используют их условные буквенные мнемоники. Набор таких мнемоник, вместе с некоторыми дополнительными возможностями (например, некоторыми макрокомандами, директивами), называется языком ассемблера.
Каждая модель процессора имеет свой собственный набор команд, хотя во многих моделях эти наборы команд сильно перекрываются. Говорят, что процессор A совместим с процессором B, если процессор A полностью «понимает» машинный код процессора B. Если процессоры A и B имеют некоторое подмножество инструкций, по которым они взаимно совместимы, то говорят, что они одной «архитектуры» (имеют одинаковую архитектуру набора команд).
Каждая машинная инструкция выполняет определённое действие, такое как операция с данными (например, сложение или копирование машинного слова в регистре или в памяти) или переход к другому участку кода (изменение порядка исполнения; при этом переход может быть безусловным или условным, зависящим от результатов предыдущих инструкций). Любая исполнимая программа состоит из последовательности таких атомарных машинных операций.
Операции, записываемые в виде одной машинной инструкции, можно разделить на «простые» (элементарные операции) и «сложные». Кроме того, большинство современных процессоров состоит из отдельных «исполнительных устройств» — вычислительных блоков, которые умеют исполнять лишь ограниченный набор простейших операций. При исполнении очередной инструкции специальный блок процессора — декодер — транслирует (декодирует) её в последовательность элементарных операций, понимаемых конкретными исполнительными устройствами.
Архитектура набора команд процессора определяет, какие операции он способен выполнять, и какой машинной инструкции какие числовые коды операций (опкоды) соответствуют. Опкоды бывают постоянной длины (у RISC-, MISC-архитектур) и диапазонной (у CISC-архитектур; например: для архитектуры x86 команда имеет длину от 8 до 120 битов).
Современные суперскалярные процессоры способны выполнять несколько машинных инструкций за один такт.
Машинный код как язык программирования[править | править код]
Машинный код можно рассматривать как примитивный язык программирования или как самый низкий уровень представления скомпилированных или ассемблированных компьютерных программ. Хотя вполне возможно создавать программы прямо в машинном коде, сейчас это делается редко в силу громоздкости кода и трудоёмкости ручного управления ресурсами процессора, за исключением ситуаций, когда требуется экстремальная оптимизация. Поэтому подавляющее большинство программ пишется на языках более высокого уровня и транслируется в машинный код компиляторами. Машинный код иногда называют нативным кодом (также собственным или родным кодом — от англ. native code), когда говорят о платформенно-зависимых частях языка или библиотек.[2]
Программы на интерпретируемых языках (таких как Basic или Python) не транслируются в машинный код; вместо этого они либо исполняются непосредственно интерпретатором языка, либо транслируются в псевдокод (байт-код). Однако интерпретаторы этих языков (которые сами можно рассматривать как процессоры), как правило, представлены в машинном коде.
В некоторых компьютерных архитектурах поддержка машинного кода реализуется ещё более низкоуровневым слоем программ, называемых микропрограммами. Это позволяет обеспечить единый интерфейс машинного языка у всей линейки или семейства компьютеров, которые могут иметь значительные структурные отличия между собой, и облегчает перенос программ в машинном коде между разными моделями компьютеров. Примером такого подхода является семейство компьютеров IBM System/360 и их преемников: несмотря на разные шины шириной от 8 до 64 бит и выше, тем не менее, у них общая архитектура на уровне машинного языка.
Использование слоя микрокода для реализации эмулятора позволяет компьютеру представлять архитектуру совершенно другого компьютера. В линейке System/360 это использовалось для переноса программ с более ранних машин IBM на новое семейство — например, эмулятор IBM 1401/1440/1460 на IBM S/360 model 40.
Абсолютный и позиционно-независимый код[править | править код]
Абсолютный код (англ. absolute code) — программный код, пригодный для прямого выполнения процессором[1], то есть код, не требующий дополнительной обработки (например, разрешения ссылок между различными частями кода или привязки к адресам в памяти, обычно выполняемой загрузчиком программ). Примерами абсолютного кода являются исполнимые файлы в формате .COM и загрузчик ОС, располагаемый в MBR. Часто абсолютный код понимается в более узком смысле как позиционно-зависимый код (то есть код, привязанный к определённым адресам памяти).
Позиционно-независимый код (англ. position-independent code) — программа, которая может быть размещена в любой области памяти, так как все ссылки на ячейки памяти в ней относительные (например, относительно счётчика команд). Такую программу можно переместить в другую область памяти в любой момент, в отличие от перемещаемой программы, которая хотя и может быть загружена в любую область памяти, но после загрузки должна оставаться на том же месте.[1]
Возможность создания позиционно-независимого кода зависит от архитектуры и системы команд целевой платформы. Например, если во всех инструкциях перехода в системе команд должны указываться абсолютные адреса, то код, требующий переходов, практически невозможно сделать позиционно-независимым. В архитектуре x86 непосредственная адресация в инструкциях работы с данными представлена только абсолютными адресами, но поскольку адреса данных считаются относительно сегментного регистра, который можно поменять в любой момент, это позволяет создавать позиционно-независимый код со своими ячейками памяти для данных. Кроме того, некоторые ограничения набора команд могут сниматься с помощью самомодифицирующегося кода или нетривиальных последовательностей инструкций.
Программа «Hello, world!» для процессора архитектуры x86 (ОС MS DOS, вывод при помощи BIOS прерывания int 10h) выглядит следующим образом (в шестнадцатеричном представлении):
- BB 11 01 B9 0D 00 B4 0E 8A 07 43 CD 10 E2 F9 CD 20 48 65 6C 6C 6F 2C 20 57 6F 72 6C 64 21
Комментарии к программе
Данная программа работает при её размещении по смещению 10016. Отдельные инструкции выделены цветом:
- BB 11 01, B9 0D 00, B4 0E, 8A 07 — команды присвоения значений регистрам.
- 43 — инкремент регистра BX.
- CD 10, CD 20 — вызов программных прерываний 1016 и 2016.
- E2 F9 — команда для организации цикла.
- Малиновым показаны данные (строка «Hello, world!»).
Тот же код ассемблерными командами:
XXXX:0100 mov bx, 0111h ; поместить в bx смещение строки HW XXXX:0103 mov cx, 000Dh ; поместить в cx длину строки HW XXXX:0106 mov ah, 0Eh ; поместить в ah номер функции прерывания 10h XXXX:0108 mov al, [bx] ; поместить в al значение ячейки памяти, адрес которой находится в bx XXXX:010A inc bx ; перейти к следующему байту строки (увеличить смещение на 1) XXXX:010B int 10h ; вызов прерывания 10h XXXX:010D loop 0108 ; если cx≠0, то уменьшить cx на 1 и перейти по адресу 0108 XXXX:010F int 20h ; прерывание 20h: завершить программу XXXX:0111 HW db 'Hello, World!' ; строка, которую требуется напечатать
- ↑ 1 2 3 Толковый словарь по вычислительным системам = Dictionary of Computing / Под ред. В. Иллингуорта и др.: Пер. с англ. А. К. Белоцкого и др.; Под ред. Е. К. Масловского. — М.: Машиностроение, 1990. — 560 с. — 70 000 (доп,) экз. — ISBN 5-217-00617-X (СССР), ISBN 0-19-853913-4 (Великобритания).
- ↑ Kate Gregory. Managed, Unmanaged, Native: What Kind of Code Is This? (неопр.) (28 апреля 2003). Дата обращения 27 марта 2012. Архивировано 30 мая 2012 года.
Код — это… Что такое Код?
система условных знаков (символов) для передачи, обработки и хранения (запоминания) различной информации. Конечная последовательность кодовых знаков называется словом. Число различных символов, которые используются в словах данного К., называется его основанием; например, К. с основанием 2 называется двоичным. Если все слова имеют одинаковую длину, или количество элементов, — n, то это равномерный n-значный К. (см. Код телеграфный). Если слова имеют переменную длину, то К. называется неравномерным, например Морзе код. К. называется полным, когда к нему без нарушения его различимости нельзя добавить ни одной новой кодовой комбинации. Полный равномерный n-значный К. содержит тnслов, где т — основание кода. К., содержащий кодовые комбинации, служащие для отделения одного сообщения от другого, называется К. с разделительными знаками; К., в котором все без исключения кодовые комбинации символов служат лишь для обозначения элементов сообщения, является К. без разделительных знаков. Кодовые комбинации, являющиеся разделительными знаками, могут конструироваться либо из специальных кодовых символов, либо из тех же кодовых символов, которые образуют кодовые комбинации, соответствующие определенным элементам сообщения. Иногда бывает удобно разбить элементы сообщения на несколько групп и для каждой из этих групп построить свой К.; сигнал о переходе от одного К. к другому подается специальными кодовыми комбинациями (адресами). Совокупность К. для каждой из групп элементов сообщения вместе с адресными кодовыми комбинациями называется многоадресным, или многопрограммным К.Для записи К. чаще всего используют либо цифры и числа (0, 1, 2,… 57, 9276 и т.п.), либо знаки, например + (плюс), — (минус), • (точка), — (тире) и т.д. В технике каждый кодовый знак является условным обозначением некоторого элементарного сигнала, обладающего какими-либо физическими параметрами (сигнальными признаками), которые могут принимать несколько различных значений. Для электрических сигналов такими признаками могут служить амплитуда тока или напряжения, полярность или длительность электрических импульсов (посылок), периодичность их следования и др.
К., применяемые в телемеханике, в системах связи и автоматического управления, в вычислительной технике, представляют собой набор комбинаций из электрических импульсов и пауз между ними, что эквивалентно изображению значений кодируемой величины в виде двоичных чисел — наборов, состоящих из 0 и 1 (см. Код в телемеханике, Код в ЦВМ). Количество импульсов в комбинации или разрядов в эквивалентном двоичном числе определяет значность К. Выбор К. определяется условиями передачи, обработки или хранения информации и связан главным образом с наиболее эффективным использованием каналов связи (См. Канал связи), обеспечением необходимой помехоустойчивости передачи и т.п. (см. Кодирование). С целью улучшения помехоустойчивости К. усложняются: к так называемым информационным знакам добавляются дополнительные — контрольные (проверочные). По такому принципу строятся К. обнаружения и исправления ошибок (см. Корректирующие коды). в телемеханике, система электрических или пневматических сигналов для передачи сообщений двоичным или двоично-десятичным кодом по каналу связи. Для представления и передачи отдельных элементов К. используются сигналы с различными признаками по амплитуде, частоте, полярности, фазе, длительности и др. Так, в двоичном коде при полярных признаках элемент «0» кодируется импульсом отрицательной, а «1» — положительной полярности; широтные признаки означают различие в длительности импульсов либо в паузах между ними и так далее. Если для передачи сообщений используются не все возможные комбинации элементов К., то применяют специальные методы, позволяющие при приеме обнаруживать и исправлять искажения (ошибки) в переданных элементах К., что повышает достоверность передачи информации (см. Корректирующие коды).Выбор системы кодирования сообщения, способа его передачи и методов повышения достоверности передаваемой информации определяется конкретными условиями работы телемеханической системы, важностью объектов, свойствами каналов связи, применяемой аппаратурой и др.
Лит.: Шастова Г. А., Кодирование и помехоустойчивость передачи телемеханической информации, М. — Л., 1966; Ильин В. А., Телеконтроль и телеуправление, М., 1969.
М. М. Гельман.
в ЦВМ, условная система знаков для представления информации в ЦВМ. Каждый К. использует знаки своего алфавита. Для большинства К. алфавиты двухсимвольные либо состоят из букв двухсимвольного алфавита. Физическая форма К. зависит от характера используемого носителя информации (См. Носитель информации) и даже для одной ЦВМ может допускать несколько вариантов. Например, на письменных документах К. представляется в виде цифр и (или) букв русского либо латинского алфавита, на перфокартах — сочетанием пробитых и непробитых участков, на магнитных лентах, магнитных барабанах и магнитных дисках — в виде конфигураций из намагниченных участков, в ячейках оперативной памяти — в виде групп магнитных сердечников, каждый из которых находится в одном из двух возможных для него состояний. Основные символы, используемые в ЦВМ, 0 и 1. Обычно в ЦВМ используются: К. символьный (цифро-буквенный) для представления текстовой информации и программ, записанных на алгоритмических языках; К. команд для представления программ на машинном языке (См. Машинный язык); К. чисел для представления числовой информации. Схема К., в которой указаны все его основные части и количества двоичных знаков, входящих в каждую из частей, называется форматом К. Символьный К. — последовательность групп, состоящих из одинакового количества двоичных знаков (в большинстве современных ЦВМ из 8). Каждая группа обозначает один символ (букву, условный знак, цифру). Число групп в К. зависит от длины закодированного текста. К. команды в основной части содержит так называемые К. операций, определяющий действия ЦВМ по данной команде, и структуру остальной части команды, куда могут входить К. адресов (операндов) и искомых результатов, иногда К. самих операндов и К. др. частей команды (см. Команд система). К. чисел зависит от формы представления чисел в ЦВМ. Число в форме с запятой фиксированной (См. Запятая фиксированная) представляется с помощью одного из трёх К.: прямого, обратного и дополнительного. К. числа, представленного в форме с запятой плавающей (См. Запятая плавающая), записывается в виде упорядоченной пары К. мантиссы и К. порядка; при этом как мантисса, так и порядок могут быть представлены в одном из указанных трёх К. Прямой К. обычно используется при хранении чисел в запоминающем устройстве (См. Запоминающее устройство), а обратный и дополнительный К. — при выполнении над числами арифметических и некоторых др. операций. При пересылках из запоминающего устройства в арифметическое и обратно числа перекодируются. Все три К. состоят из К. знака (число отведённых разрядов l), К. целой части (m) и К. дробной части (n) числа. Сумма d =l+т+n называется длиной кода. Как правило, в ЦВМ или в её устройствах /, т и n фиксированы. В случае целых чисел n=0, для правильных дробей обычно т=0, когда все числа одного знака, l=0.Для положительных чисел К. знака обозначается последовательностью нулей, для отрицательных — последовательностью единиц. Для положительных чисел прямой, обратный и дополнительный К. совпадают. В прямом К. отрицательных чисел меняется только К. знака; в обратном К. цифры числа заменяются их дополнениями до 1 (т. е. 0 заменяется на 1, а 1 на 0). Дополнительный К. отрицательного числа отличается от обратного К. тем, что после замены цифр производится сложение результата с d-paзрядным числом, все разряды которого, кроме младшего, содержат нули, причём перенос из старшего разряда при сложении не выполняется. Например, число в двоичной системе счисления равно +11,01. Пусть задано l=2, т=3, n=4; дополняя целую и дробную части нулями, запишем число в виде +011,0100. Прямой обратный и дополнительный К. заданного числа одинаковы — 00 011 0100. Для отрицательного числа —11,01 прямой К. имеет вид 11011 0100, обратный К.— 11 100 1011 и дополнительный — 11 100 1100. Выбор между обратным и дополнительным К. обусловливается конструкцией и логикой ЦВМ.
Лит.: Китов А. И., Криницкий Н. А., Электронные цифровые машины и программирование, 2 изд., М., 1961; Краницкий Н. А., Миронов Г. А., Фролов Г. Д., Программирование, 2 изд., М., 1966.
Н. А. Криницкий.
Информатика — Википедия
Информáтика (фр. Informatique; англ. Computer science) — наука о методах и процессах сбора, хранения, обработки, передачи, анализа и оценки информации с применением компьютерных технологий, обеспечивающих возможность её использования для принятия решений[1].
Информатика включает дисциплины, относящиеся к обработке информации в вычислительных машинах и вычислительных сетях: как абстрактные, вроде анализа алгоритмов, так и конкретные, например разработка языков программирования и протоколов передачи данных.
Темами исследований в информатике являются вопросы: что можно, а что нельзя реализовать в программах и базах данных (теория вычислимости и искусственный интеллект), каким образом можно решать специфические вычислительные и информационные задачи с максимальной эффективностью (теория сложности вычислений), в каком виде следует хранить и восстанавливать информацию специфического вида (структуры и базы данных), как программы и люди должны взаимодействовать друг с другом (пользовательский интерфейс и языки программирования и представление знаний) и т. п.
Информатика занимается теоретическими основами информации и вычислений, а также практическими методами для реализации и применения этих основ
Термин нем. Informatik ввёл немецкий специалист Карл Штейнбух в статье Informatik: Automatische Informationsverarbeitung (Информатика: Автоматическая обработка информации) 1957 года[2].
Термин «Computer science» («Компьютерная наука») появился в 1959 году в научном журнале Communications of the ACM[3], в котором Луи Фейн (Louis Fein) выступал за создание Graduate School in Computer Sciences (Высшей школы в области информатики) аналогичной Гарвардской бизнес-школе, созданной в 1921 году[4][уточнить]. Обосновывая такое название школы, Луи Фейн ссылался на Management science («Наука управления»), которая так же как и информатика имеет прикладной и междисциплинарный характер, при этом имеет признаки характерные для научной дисциплины. Усилия Луи Фейна, численного аналитика Джорджа Форсайта[en] и других увенчались успехом: университеты пошли на создание программ, связанных с информатикой, начиная с Университета Пердью в 1962[5].
Французский термин «informatique» введён в 1962 году Филиппом Дрейфусом, который также предложил перевод на ряд других европейских языков.
Термины «информология» и «информатика» предложены в 1962 году членом-корреспондентом АН СССР Александром Харкевичем. Основы информатики как науки были изложены в книге «Основы научной информации» 1965 года, которая была переиздана в 1968 году, под названием «Основы информатики»[6].
Несмотря на своё англоязычное название (англ. Computer Science — компьютерная наука), большая часть научных направлений, связанных с информатикой, не включает изучение самих компьютеров. Вследствие этого были предложены несколько альтернативных названий[7]. Некоторые факультеты крупных университетов предпочитают термин вычислительная наука (computing science), чтобы подчеркнуть разницу между терминами. Датский учёный Питер Наур предложил термин даталогия (datalogy)[8], чтобы отразить тот факт, что научная дисциплина оперирует данными и занимается обработкой данных, хотя и не обязательно с применением компьютеров. Первым научным учреждением, включившим в название этот термин, был Департамент Даталогии (Datalogy) в Университете Копенгагена, основанный в 1969 году, где работал Питер Наур, ставший первым профессором в даталогии (datalogy). Этот термин используется в основном в скандинавских странах. В остальной же Европе часто используются термины, производные от сокращённого перевода фраз «автоматическая информация» (automatic information) (к примеру informazione automatica по-итальянски) и «информация и математика» (information and mathematics), например, informatique (Франция), Informatik (Германия), informatica (Италия, Нидерланды), informática (Испания, Португалия), informatika (в славянских языках) или pliroforiki (πληροφορική, что означает информатика) — в Греции. Подобные слова также были приняты в Великобритании, например, Школа информатики в Университете Эдинбурга[9].
В русском, английском, французском и немецком языках в 1960-х годах была тенденция к замене термина «документация» терминами, имеющими в своей основе слово «информация»[10]. В русском языке производной от термина «документация» стала документалистика и получили распространение термины научная и научно-техническая информация.
Во Франции термин официально вошёл в употребление в 1966 году[11]. В немецком языке термин нем. Informatik имел вначале двойственное значение. Так, в ФРГ[10] и Великобритании[1] он был в значении «computer science», то есть означал всё, что связано с применением ЭВМ, а в ГДР, как и в основном по Европе, обозначал науку по французской и русской модели.
Эквиваленты в английском языке[править | править код]
Считается, что под терминами «informatics» в европейских странах и «информатика» в русском языке понимается направление, именуемое в английском языке «computer science». К другому направлению, посвящённому изучению структуры и общих свойств объективной (научной) информации, иногда называемому документалистикой (документальной информатикой) или автоматическим анализом документов[1], близок термин «information science».
Принято считать, что в английский язык термин «informatics» независимо от остальных ввёл Уолтер Ф. Бауэр, основатель «Informatics Inc.». В США в настоящее время термин англ. informatics связан с прикладными вычислениями или обработкой данных в контексте другой области[12], например в биоинформатике («bioinformatics») и геоинформатике («geoinformatics»).
Во многих словарях informatics и computer science приравниваются к информатике. В тезаурусе ЮНЕСКО «Информатика — Informatics» даётся как синоним к переводу «Computer science — Компьютерные науки»[13].
Полисемия[править | править код]
Ряд учёных (специалистов в области информатики) утверждали, что в информатике существуют три отдельные парадигмы. Например, Питер Вегнер[en] выделял науку, технологию и математику[14]. Рабочая группа Питера Деннинга[en] утверждала, что это теория, абстракция (моделирование) и дизайн[15]. Амнон Х. Эден описывал эти парадигмы, как[16]:
- рационалистическую парадигму, где информатика — это раздел математики, математика доминирует в теоретической информатике и в основном использует логический вывод,
- технократическую парадигму, используемую в инженерных подходах, наиболее важных в программной инженерии,
- и научную парадигму, где информатика — это ветвь естественных (эмпирических) наук, но информатика отличается тем, что в ней эксперименты проводятся над искусственными объектами (программами и компьютерами).
Полисемия в русском языке[править | править код]
В разные периоды развития информатики в СССР и России в понятие «информатика» вкладывался различный смысл. Информатика — это[17]:
- Теория научно-информационной деятельности. В рамках библиотечного дела под термином «научно-информационная деятельность» понимается «практическая работа по сбору, аналитико-синтетической переработке, хранению, поиску и предоставлению учёным и специалистам закрепленной в документах научной информации»[18]. В 1952 г. в Москве был создан Институт научной информации Академии наук (переименованный позднее в ВИНИТИ). Цели его создания были более широкими, чем выполнение «научно-информационной деятельности» и А. А. Харкевич (директор Института проблем передачи информации АН СССР) предложил в письме А. И. Михайлову (директору ВИНИТИ) новое название: «„информология“ или „информатика“ („информация“ плюс „автоматика“)» [19]. Третье издание «Большой советской энциклопедии» (1970-е гг.) фиксирует значение информатики как дисциплины, изучающей «структуру и общие свойства научной информации, а также закономерности её создания, преобразования, передачи и использования в различных сферах человеческой деятельности»[19].
- Наука о вычислительных машинах и их применении (вычислительная техника и программирование). В 1976 г. профессорá Мюнхенского технического университета Ф. Л. Бауэр и Г. Гооз написали книгу «Информатика. Вводный курс», переведённую в том же году В. К. Сабельфельдом, учеником известного советского учёного Андрея Петровича Ершова, на русский язык. Они перевели «Informatik» словом «информатика» и определили как «науку, занимающуюся разработкой теории программирования и применения ЭВМ»[19]. Термин «Informatik» Ф. Л. Бауэр и Г. Гооз объясняют как «немецкое название для computer science — области знания, которая сложилась в самостоятельную научную дисциплину в шестидесятые годы, прежде всего в США, а также в Великобритании. … В английском языке, по-видимому, останется „computer science“ (вычислительная наука), причем этот термин имеет уклон в область теории»[20].
- Фундаментальная наука об информационных процессах в природе, обществе и технических системах. В начале 1990-х гг. К. К. Колин (заместитель директора Института проблем информатики АН СССР) синтезировал толкования информатики, данные академиками А. П. Ершовым и Б. Н. Наумовым, а также проф. Ю. И. Шемакиным следующим образом: информатика — это наука «о свойствах, законах, методах и средствах формирования, преобразования и распространения информации в природе и обществе, в том числе при помощи технических систем». Предметная область информатики, по Колину, включает такие разделы: (1) теоретическая информатика; (2) техническая информатика; (3) социальная информатика, (4) биологическая информатика и (5) физическая информатика[21].
Полагают[17], что одновременное существование всех трёх значений у слова «информатика» затрудняет и мешает развитию данного научного направления.
Самые ранние основы того, что впоследствии станет информатикой, предшествуют изобретению современного цифрового компьютера. Машины для расчёта нескольких арифметических задач, такие как счёты, существовали с древности, помогая в таких вычислениях как умножение и деление.
Блез Паскаль спроектировал и собрал первый рабочий механический калькулятор, известный как калькулятор Паскаля, в 1642[22].
В 1673 году Готфрид Лейбниц продемонстрировал цифровой механический калькулятор, названный «Stepped Reckoner»[23]. Его можно считать первым учёным в области компьютерных наук и специалистом в области теории информации, поскольку, среди прочего, он ещё описал двоичную (бинарную) систему чисел.
В 1820 году Томас де Кольмар[en] запустил промышленный выпуск механического калькулятора после того, как он создал свой упрощённый арифмометр, который был первой счётной машиной, достаточно прочной и надёжной для ежедневного использования. Чарльз Бэббидж начал проектирование первого автоматического механического калькулятора, его разностной машины, в 1822, что в конечном счёте подало ему идею первого программируемого механического калькулятора, его аналитической машины.
Он начал работу над этой машиной в 1834 году и менее чем за два года были сформулированы многие из основных черт современного компьютера. Важнейшим шагом стало использование перфокарт, сработанных на Жаккардовском ткацком станке [24], что открывало бесконечные просторы для программирования [25]. В 1843 году во время перевода французской статьи на аналитической машине Ада Лавлейс написала в одной из её многочисленных записок алгоритм для вычисления чисел Бернулли, который считается первой компьютерной программой [26].
Около 1885 года Герман Холлерит изобрёл табулятор, который использовал перфокарты для обработки статистической информации; в конечном итоге его компания стала частью IBM. В 1937 году, спустя сто лет после несбыточной мечты Бэббиджа, Говард Эйкен убедил руководство IBM, производившей все виды оборудования для перфорированных карт[27] и вовлечённой в бизнес по созданию калькуляторов, разработать свой гигантский программируемый калькулятор ASCC/Harvard Mark I, основанный на аналитической машине Бэббиджа, которая, в свою очередь, использовала перфокарты и центральный вычислитель (central computing unit). Про готовую машину поговаривали: «мечта Бэббиджа сбылась»[28].
В 1940-х с появлением новых и более мощных вычислительных машин термин компьютер стал обозначать эти машины, а не людей, занимающихся вычислениями (теперь слово «computer» в этом значении употребляется редко)[29]. Когда стало ясно, что компьютеры можно использовать не только для математических расчётов, область исследований информатики расширилась с тем, чтобы изучать вычисления в целом. Информатика получила статус самостоятельной научной дисциплины в 1950-х и начале 1960-х годов[30][31]. Первая в мире степень по информатике, Диплом Кэмбриджа по информатике, была присвоена в компьютерной лаборатории Кембриджского университета в 1953 году. Первая подобная учебная программа в США появилась в Университете Пердью в 1962 году[32]. С распространением компьютеров возникло много новых самодостаточных научных направлений, основанных на вычислениях с помощью компьютеров.
Мало кто изначально мог предположить, что сами компьютеры станут предметом научных исследований, но в конце 1950-х годов это мнение распространилось среди большинства учёных [33]. Ныне известный бренд IBM в то время был одним из участников революции в информатике. IBM (сокращение от International Business Machines) выпустила компьютеры IBM 704[34] и позже — IBM 709[35], которые уже широко использовались одновременно с изучением и апробацией этих устройств. «Тем не менее работа с (компьютером) IBM была полна разочарований… при ошибке в одной букве одной инструкции программа „падала“ и приходилось начинать всё сначала»[33]. В конце 1950-х годов информатика как дисциплина ещё только становилась[36], и такие проблемы были обычным явлением.
Со временем был достигнут значительный прогресс в удобстве использования и эффективности вычислительной техники. В современном обществе наблюдается явный переход среди пользователей компьютерной техники: от её использования только экспертами и специалистами к использованию всем и каждым. Изначально компьютеры были весьма дорогостоящими и чтобы их эффективно использовать нужна была помощь специалистов. Когда компьютеры стали более распространёнными и доступными, тогда для решения обычных задач стало требоваться меньше помощи специалистов.
История информатики в СССР[править | править код]
Эта статья или раздел описывает ситуацию применительно лишь к одному региону, возможно, нарушая при этом правило о взвешенности изложения. Вы можете помочь Википедии, добавив информацию для других стран и регионов. |
В школах СССР учебная дисциплина «Информатика» появилась в 1985 году одновременно с первым учебником А. П. Ершова «Основы информатики и вычислительной техники»[37].
4 декабря отмечается День российской информатики, так как в этот день в 1948 году Государственный комитет Совета министров СССР по внедрению передовой техники в народное хозяйство зарегистрировал за номером 10 475 изобретение И. С. Брука и Б. И. Рамеева — цифровую электронную вычислительную машину M-1[38].
Основные достижения[править | править код]
Несмотря на короткую историю в качестве официальной научной дисциплины, информатика внесла фундаментальный вклад в науку и общество. По сути, информатика, наряду с электроникой, является одной из основополагающих наук текущей эпохи человеческой истории, называемой информационной эпохой. При этом информатика является предводителем информационной революции и третьим крупным шагом в развитии технологий, после промышленной революции (1750—1850 н. э.) и неолитической революции (8000-5000 до н. э.).
Вклад информатики:
- Начало «цифровой революции», включающей информационную эпоху и интернет.
- Дано формальное определение вычислений и вычислимости, и доказательство того, что существуют алгоритмически неразрешимые задачи[40].
- Введено понятие языка программирования, то есть средства для точного выражения методологической информации на различных уровнях абстракции[41].
- В криптографии расшифровка кода «Энигмы» стала важным фактором победы союзных войск во Второй мировой войне[39].
- Вычислительные методы обеспечили возможность практической оценки процессов и ситуаций большой сложности, а также возможность проведения экспериментов исключительно за счёт программного обеспечения. Появилась возможность углубленного изучения разума и картирования генома человека, благодаря проекту «Геном человека». Проекты распределенных вычислений, такие как Folding@Home, исследуют сворачивание молекул белка.
- Алгоритмическая торговля повысила эффективность и ликвидность финансовых рынков с помощью искусственного интеллекта, машинного обучения и других статистических и численных методов на больших диапазонах данных [42]. Частое использование алгоритмической торговли может усугубить волатильность[43].
- Компьютерная графика и CGI повсеместно используются в современных развлечениях, особенно в области телевидения, кино, рекламы, анимации и видео-игр. Даже фильмы, в которых нет (явного) использования CGI, как правило, сняты на цифровые камеры и впоследствии обработаны или отредактированы в программах обработки видео.
- Моделирование различных процессов, например в гидродинамике, физике, электрике, электронных системах и цепях, а также для моделирования общества и социальных ситуаций (в частности, военных игр), учитывая среду обитания и др. Современные компьютеры позволяют оптимизировать, например, такие конструкции, как проект целого самолёта. Известным программным обеспечением является симулятор электронных схем SPICE, а также программное обеспечение для физической реализации новых (или модифицированных) конструкций, включающее разработку интегральных схем.
- Искусственный интеллект приобретает все большее значение, одновременно с этим становясь более сложным и эффективным. Существует множество применений искусственного интеллекта (ИИ), например роботы-пылесосы, которые можно использовать дома. ИИ также присутствует в видеоиграх, роботах огневой поддержки и противоракетных системах.
Информатика делится на ряд разделов. Как дисциплина, информатика охватывает широкий круг тем от теоретических исследований алгоритмов и пределов вычислений до практической реализации вычислительных систем в области аппаратного и программного обеспечения[44][45]. Комитет CSAB[en], ранее называемый «Советом по аккредитации вычислительных наук», включающий представителей Ассоциации вычислительной техники (ACM) и Компьютерного общества IEEE[en] (IEEE-CS)[46] — определил четыре области, важнейшие для дисциплины информатика: теория вычислений, алгоритмы и структуры данных, методология программирования и языков, компьютерные элементы и архитектура. В дополнение к этим четырём направлениям, комитет CSAB определяет следующие важные области информатики: разработка программного обеспечения, искусственный интеллект, компьютерные сети и телекоммуникации, системы управления базами данных, параллельные вычисления, распределённые вычисления, взаимодействия между человеком и компьютером, компьютерная графика, операционные системы, числовые и символьные вычисления[44].
Теоретическая информатика[править | править код]
Огромное поле исследований теоретической информатики включает как классическую теорию алгоритмов, так и широкий спектр тем, связанных с более абстрактными логическими и математическими аспектами вычислений. Теоретическая информатика занимается теориями формальных языков, автоматов, алгоритмов, вычислимости и вычислительной сложности, а также вычислительной теорией графов, криптологией, логикой (включая логику высказываний и логику предикатов), формальной семантикой и закладывает теоретические основы для разработки компиляторов языков программирования.
Теория алгоритмов[править | править код]
По словам Питера Деннинга[en], к фундаментальным вопросам информатики относится следующий вопрос: «Что может быть эффективно автоматизировано?»[30] Изучение теории алгоритмов сфокусировано на поиске ответов на фундаментальные вопросы о том, что можно вычислить и какое количество ресурсов необходимо для этих вычислений. Для ответа на первый вопрос в теории вычислимости рассматриваются вычислительные задачи, решаемые на различных теоретических моделях вычислений. Второй вопрос посвящён теории вычислительной сложности; в этой теории анализируются затраты времени и памяти различных алгоритмов при решении множества вычислительных задач.
Знаменитая задача «P=NP?», одна из Задач тысячелетия[47], является нерешённой задачей в теории алгоритмов.
Информация и теория кодирования[править | править код]
Теория информации связана с количественной оценкой информации. Это направление получило развитие благодаря трудам Клода Э. Шеннона, который нашёл фундаментальные ограничения на обработку сигнала в таких операциях, как сжатие данных, надёжное сохранение и передача данных[48].
Теория кодирования изучает свойства кодов (системы для преобразования информации из одной формы в другую) и их пригодность для конкретной задачи. Коды используются для сжатия данных, в криптографии, для обнаружения и коррекции ошибок, а в последнее время также и для сетевого кодирования. Коды изучаются с целью разработки эффективных и надёжных методов передачи данных.
Алгоритмы и структуры данных[править | править код]
Алгоритмы и структуры данных, как раздел информатики, связаны с изучением наиболее часто используемых вычислительных методов и оценкой их вычислительной эффективности.
Теория языков программирования[править | править код]
В теории языков программирования, как подразделе информатики, изучают проектирование, реализацию, анализ и классификацию языков программирования в целом, а также изучают отдельные элементы языков. Эта область информатики, с одной стороны, в большой степени полагается на достижения таких наук как математика, программная инженерия и лингвистика, с другой стороны, сама оказывает большое влияние на их развитие. Теория языков программирования активно развивается, многие научные журналы посвящены этому направлению.
Формальные методы[править | править код]
Формальные методы — это своего рода математический подход, предназначенный для спецификации, разработки и верификации программных и аппаратных систем. Использование формальных методов при разработке программного и аппаратного обеспечения мотивировано расчётом на то, что, как и в других инженерных дисциплинах, надлежащий математический анализ обеспечит надёжность и устойчивость проекта. Формальные методы являются важной теоретической основой при разработке программного обеспечения, особенно в случаях, когда дело касается надёжности или безопасности. Формальные методы являются полезным дополнением к тестированию программного обеспечения, так как они помогают избежать ошибок, а также являются основой для тестирования. Для их широкого использования требуется разработка специального инструментария. Однако высокая стоимость использования формальных методов указывает на то, что они, как правило, используются только при разработке высокоинтегрированных и жизненно-важных систем[en], где надёжность и безопасность имеют первостепенное значение. Формальные методы имеют довольно широкое применение: от теоретических основ информатики (в частности, логики вычислений, формальных языков, теории автоматов, программ и семантики) до систем типов и проблем алгебраических типов данных в задачах спецификации и верификации программного и аппаратного обеспечения.
Прикладная информатика[править | править код]
Прикладная информатика направлена на применение понятий и результатов теоретической информатики к решению конкретных задач в конкретных прикладных областях.
Искусственный интеллект[править | править код]
Это область информатики, неразрывно связанная с такими целеполагающими процессами, как решение задач, принятие решений, адаптация к окружающим условиям, обучение и коммуникация, присущими и людям, и животным. Возникновение искусственного интеллекта (ИИ) связано с кибернетикой и ведёт свой отсчёт с Дартмутской Конференции (1956). Исследования в области искусственного интеллекта (AI) с необходимостью были междисциплинарными, и основывались на таких науках, как: прикладная математика, математическая логика, семиотика, электротехника, философия сознания, нейрофизиология и социальный интеллект. У обывателей искусственный интеллект ассоциируется в первую очередь с робототехникой, но кроме этого ИИ является неотъемлемой частью разработки программного обеспечения в самых разных областях. Отправной точкой в конце 1940-х годов стал вопрос Алана Тьюринга: «Могут ли компьютеры думать?», и этот вопрос остаётся фактически без ответа, хотя «тест Тьюринга» до сих пор используется для оценки результатов работы компьютера в масштабах человеческого интеллекта.
Архитектура компьютера и компьютерная инженерия[править | править код]
Архитектура компьютера, или организация цифрового компьютера, является концептуальной структурой компьютерной системы. Она сосредоточена в основном на способе, при котором центральный процессор выполняет внутренние операции и обращается к адресам в памяти[49]. Она часто включает в себя дисциплины вычислительной техники и электротехники, выбор и соединение аппаратных компонентов для создания компьютеров, которые удовлетворяют функциональным, производительным и финансовым целям.
Кода — Википедия
Материал из Википедии — свободной энциклопедии
Ко́да (итал. coda — «хвост, конец, шлейф») в музыке — дополнительный раздел, возможный в конце музыкального произведения и не принимающийся в расчёт при определении его строения; пассаж заключительной части произведения.
Кода следует за последним из основных разделов формы, начинается, как правило, после полного каданса.
Технически это развернутая каденция. Она может быть как простой, так и с несколькими тактами, или сложной, как целая секция[1]. Размеры коды непостоянны — от нескольких аккордов (в простых формах) до широко развитых построений (например, в сонатной форме, где со времён Моцарта кода стала почти обязательным элементом).
Она звучит в главной тональности произведения и содержит основные его темы[2]. Она представляет собой распространение и окончательное закрепление и утверждение главной тональности путём использования органного пункта, многократного повторения аккордов тонической функции или аккордов полного каданса, а также посредством модуляционных отклонений, чаще всего — в субдоминантовую сферу и др.
Содержание коды может явиться «послесловием», выводом, развязкой и обобщением тем, развитых в разработке.
Coda (Ит.) (1) Это вертикальная нотная черта. (2) Такты, которые иногда добавляются в полифоническое движение после закрытия или завершения canto fermo. (3) Несколько аккордов или тактов, присоединенных к большому канону для того, чтобы сделать его законченным; или несколько «неканоновых» аккордов, добавленных малому канону для получения более гармоничного завершения. (4) Заключительное дополнение у движения или отрывка, в частности, предназначенное усилить ощущение наполненности и законченности.[3] |
В классическом балете кода — финальная, наиболее виртуозная часть вариации либо другой музыкально-хореографической формы. Обычно она состоит из вращений (у женщин) либо прыжков (у мужчин) и, более длительная по времени, не совпадает с кодой музыкальной.