ПРОГРАММИРОВАНИЕ

ПРОГРАММИРОВАНИЕ процесс составления
упорядоченной последовательности действий (программы) для ЭВМ; науч.
дисциплина, изучающая программы для ЭВМ и способы их составления, проверки
и улучшения.


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


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


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


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


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


Процесс П. обычно состоит из след. этапов:

2102-1.jpg


Содержание каждого этапа П. можно пояснить
на примере решения квадратного уравнения.


Исходная формулировка. Надо найти корни
50 квадратных уравнений вида ax2 + bx + c = 0, коэффициенты
к-рых заданы в виде трёх таблиц Aи С(i
= 1, .... 50).


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

2102-2.jpg


с исследованием дискримината b2-4aс
для определения случая комплексных корней; для единообразия каждый корень
уравнения выдавать как комплексное число x=u + iv, полагая в случае
вещественных корней мнимую часть равной нулю.


Язык П. высокого уровня - гл. средство
составления программ для ЭВМ. Общая особенность этих языков - их независимость
от системы команд конкретных ЭВМ и фразовая структура, что в сочетании
с использованием т. н. служебных слов приближает их к естественным языкам.
Фразы разделяются обычно точкой с запятой; соподчинённость фраз указывается
с помощью "операторных скобок" начало и конец; фразы делятся на два типа-
операторы и описания. Оператор является единицей действия в языке. Различают
след. их типы: операторы присваивания, производящие подсчёт по указанной
формуле и присваивающие вычисленное значение заданной переменной величине;
условные операторы, к-рые в зависимости от результата проверки заданного
условия производят выбор одной или другой ветви вычислений; операторы цикла,
обеспечивающие повторное выполнение группы операторов. В описаниях указываются
свойства переменных величин н других обозначений, используемых в программе.
Важным свойством является "процедурный" характер языка: для любой уже составленной
программы, решающей нек-рую частную задачу, можно ввести символическое
функциональное обозначение. Текст этой программы вместе с её обозначением
наз. описанием процедуры или подпрограммой. Тогда при составлении новой
программы всюду, где может потребоваться использование этой описанной процедуры,
достаточно упомянуть её функциональное обозначение в виде оператора процедуры
вместо переписывания полного текста подпрограммы.


В 70-х гг. 20 в. существует целое семейство
таких языков П.: алгол-60, фортран для решения инженерных и науч. задач,
кобол для экономич. расчётов, симула для П. математич. моделей, более мощные
языки алгол-68 ц ПЛ/I, охватывающие все виды применений ЭВМ. Для всех из
них существуют трансляторы, обеспечивающие автоматич. построение машинных
программ для задач, выраженных в этих языках.


Программа решения квадратного уравнения,
записанная на языке алгол-60 (адаптированном ):

2102-3.jpg


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

2102-4.jpg


После составления программы неотъемлемым
этапом П. является "отладка" программы, т. е. обнаружение и исправление
ошибок, допускаемых при П. Осн. средство отладки - т. н. отладочные запуски,
когда в программу добавляются дополнительные "измерительные" действия,
позволяющие по ходу выполнения программы на ЭВМ выдавать "протокол" её
работы (порядок выполнения команд, значения промежуточных результатов и
т. п.). Исследование протокола позволяет судить о том, в какой степени
программа соответствует замыслу программиста.


Развитие П. как науки началось с 1947 в
работах амер. математиков Дж. Неймана, А. Беркса и Г. Голдстайна, к-рые
описали принципы ЭВМ, управляемой программой, хранящейся в памяти. Они
же ввели в употребление блок-схемы программы. Понятие подпрограммы и методики
её использования было введено в 1951 англ. учёными М. Уилксом, Дж. Уилером
и С. Гиллом. Сов. математик А. А. Ляпунов, первым в СССР прочитавший в
МГУ в 1952 курс П., определил П. как многоэтапный процесс и ввёл в П. аппарат
символич. обозначений, явившийся предвестником языков П. высокого уровня.
Идея автоматизации программирования путём трансляции программы,
записанной на языке П., была реализована в США Дж. У. Бейкусом (язык фортран)
и Г. Хоппер и в СССР С. С. Камыниным, Э. 3. Любимским, М. Р. Шура-Бурой
и А. П. Ершовым (1954-56). К 1960 в США был разработан язык кобол и международный
язык П. алгол-60 (группой учёных из 6 стран). В 60-е гг. развитие П. шло
по пути совершенствования и универсализации языков П., нашедших своё воплощение
в языках алгол-68, ПЛ/I и симула, разработки методов формального и строгого
описания языков П., развития теории и техники построения трансляторов,
создания библиотек стандартных подпрограмм. Особое развитие получили машинно-ориентированные
языки П. в направлении объединения ряда черт языков высокого уровня (процедурность,
фразовая структура) с адаптируемостью к особенностям конкретной ЭВМ. Для
нек-рых классов задач предприняты успешные попытки расширить область применения
автоматизации П. путём формализации способов алгоритмич. описания задачи
или даже её исходной формулировки. Это привело к понятиям проблемно-ориентированных
языков П., неалгоритмических языков П. и т. п.


Лит.: Лавров С. С., Введение в программирование,
М., 1973; его же, Универсальный язык программирования. (АЛГОЛ 60), 3 изд.,
М., 1972; Жоголев Е. А., Трифонов Н. П., Курс программирования, 3 изд.,
М., 1971; Джермейн К. Б., Программирование на IBM/360, пер. с англ., 2
изд., М., 1973; Стэбли Д., Логическое программирование в системе 360, пер.
с англ., М., 1974. А. П. Ершов.




А Б В Г Д Е Ё Ж З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Ъ Ы Ь Э Ю Я