- •Введение
- •Глава 1
- •§ 1. «Алгоритмические джунгли»
- •§ 2. Исходные данные и результаты. Массовость алгоритма
- •§ 4. Понятность алгоритма
- •§ 5. Рекурсивные определения
- •§ 6. Определенность алгоритма
- •§ 1. Роль алгоритмов в науке и технике
- •§ 7. Выводы
- •Глава 2 создание алгоритмов
- •§ 2. Как возникают алгоритмы
- •§ 3. Алгоритмы в математике
- •§ 4. Алгоритм Евклида
- •§ 5. Решето Эрагосфена
- •§ 6. Алгоритм разложения на простые множители. Определение наименьшего кратного двух чисел
- •§ 7. Распознавание алгебраического тождества
- •§ 8. Задачи на построение алгоритмов
- •Глава 3 кризис математики в начале XX века
- •§ 1. Арифметизация математики
- •§ 2. Теория множеств
- •§ 3. Кардинальные числа
- •§ 4. Антиномии
- •§ 5. Выводы из антиномий
- •Глава 4 логические теории алгоритмов
- •§ 1. Рекурсивные функции
- •§ 2. Машины Тьюринга
- •§ 3. Нормальные алгоритмы Маркова
- •§ 4. Эквивалентность описанных теорий
- •Глава 5
- •§ 1. Массовые проблемы. Неразрешимость проблем
- •§ 2. Экстраалгоритм и три неразрешимые проблемы
- •§ 3, Некоторые замечания
- •Глава 6 электронные вычислительные машины и программирование
- •§ 1. Устройство эвм
- •§ 2. Процессоры эвм. Рабочий цикл
- •§ 3. Что такое программа
- •§ 4. Особенности современных эвм
- •§ 5. Входные языки программирования
- •§ 6. Необходимость содержательной теории алгоритмов. Какой она должна быть
- •Г л а в а 7 формальные языки
- •§ 1. Анализ естественного языка
- •§ 2. Искусственные языки. Формальные языки
- •§ 3. Буквы, связи, оболочки, конструкции
- •§ 4. Формальные грамматики
- •§ 5. Нотация Бекуса. Тезаурусы
- •§ 1. Что такое операция?
- •§ 2. Натуральные операции
- •§ 4. Первичные алгоритмы
- •§ 5. Натуральные алгоритмы
- •§ 6. Ограничения на структуру исходных данных сняты
- •§ 8. Соотношение с алгоритмами в интуитивном смысле
- •§ 10. Исследование тупиков (клинчей)
- •§ 11. Формальная семантика формального языка
- •Глава 9 математическое обеспечение эвм
- •§ 1. Анализ эвм и программ
- •§ 2. Что такое математическое обеспечение эвм
- •§ 3. Функциональная классификация программ математического обеспечения эвм
- •§ 4. Операционные системы
- •И автоматизация процессов
- •§ I. Использование эвм для управления
- •§ 2. Информационные системы
- •§ 3. Алгоритмизация процессов
- •§ 4. Язык алгоритмизации процессов
- •§ 5. Наука и искусство алгоритмизации
- •Заключение
- •§ 1. Может ли машина мыслить? Может ли человек решить алгоритмически неразрешимую проблему?
- •§ 2. Детерминированность машин. Самообучение
- •§ 3. Сознание машин. Алгоритмическое моделирование
§ 5. Входные языки программирования
В § 2 приведен пример программы. Если читатель уделил ему достаточно внимания, то он, конечно, заметил, что задача, для которой составлена программа, очень проста, а работа по составлению программы довольно кропотлива и утомительна. Какова же трудность программирования в тех случаях, когда приходится составлять тысячи команд?!
Поэтому вполне естественно появилась идея некоторую и, возможно, большую часть работы по программированию делать с помощью самой ЭВМ. После довольно длительного периода проб и экспериментов сложился определенный метод программирования, основанный на изложенной идее. Были разработаны различные языки, на которых гораздо легче составлять алгоритмы, чем непосредственно программы. В практике в данное время получили широкое распространение такие входные языки программирования, как фортран, алгол, кобол и некоторые так называемые автокоды. Это формальные языки, имеющие очень простую и четкую грамматику. Автокодами называют формальные языки, очень близкие к языкам машины, но значительно более простые для применения человеком.
Обычно в автокодах всевозможные величины обозначаются не их адресами, как это делается в программах, а буквами или недлинными сочетаниями букв. Операции обозначаются не сочетаниями цифр, а либо обычными знаками действий, либо краткими словами, которые лзгко можно запомнить. Мы знаем, что адреса бывают нужны не только для указания данных, но и для указания команд (например, при переходах — условном или безусловном). Для этой цели в автокоде применяют так называемые метки (метками являются целые числа).
Программа на автокоде по-прежнему состоит из приказов. Но метки ставятся не перед каждым приказом, а только перед теми приказами, к которым производится переход. Программирование обычно производится на бланках, состоящих из нескольких вертикальных граф.
Приведем пример программы решения уже известного нам квадратного уравнения, составленной на одном из столь простых автокодов, что читатель ее поймет даже без пояснений (а мы все же сделаем некоторые пояснения). Такая программа приведена в табл. 5.
В автокоде, пример которого мы рассмотрели, каждый приказ занимает одну или несколько (ввод и печать) строк. Приказ состоит из метки и команды или только из команды (если метка не нужна). Знак действия «на» означает переход (условный, если за «на» следуют две метки, и безусловный, если — одна). Остальное в примере понятно. Автокод такого типа, как приведенный в примере, каждый приказ которого соответствует одному определенному приказу программы, называется автокодом 1:1. Программировать на таком автокоде легче, чем на языке программ, но все же трудно.
Более сложные автокоды позволяют записывать в виде формул целые цепочки операций. Приведем пример той же программы и на более сложном автокоде (табл. 6). Подобные автокоды называют автокодами 1: несколько (1 приказ автокода — несколько приказов программы). Программы для них тоже пишут на бланках, но уже состоящих только из двух граф (для метки и для команды).
Чем проще запись алгоритма на таком автокоде, тем более сложной должна быть заранее составленная программа, по которой алгоритм, заданный на автокоде, будет преобразован в программе для решения задачи на ЭВМ. Специально созданные программы, предназначенные для выполнения перевода с языка программирования на язык машины, называются трансляторами.
Если мы хотим программировать на автокоде, нам необходим соответствующий транслятор.
Составив программу на автокоде, переносим ее на перфокарты с помощью специальных технических устройств, имеющих клавиатуру, затем вводим в центральный процессор программу-транслятор, а колоду перфокарт устанавливаем в устройстве ввода. Далее" все идет автоматически.
Было бы очень хорошо, если бы программисты не совершали всевозможных ошибок. Эти ошибки приходится «вылавливать», производя очень тщательную проверку программы.
Чаще всего допускаемые программистом ошибки получаются в результате описок. При этом появляются нарушения грамматических правил автокода. Такие нарушения может выявлять сама ЭВМ. Для этой цели в состав транслятора включают подпрограмму синтаксического контроля. Вместо проверки программы, составленной на автокоде, путем ее прочитывания и сопоставления ее смысла с нашим замыслом, делают синтаксический контроль, да еще с помощью самой ЭВМ.
Автокоды относятся к так называемым машинно-ориентированным входным языкам программирования.
Указанные ранее языки фортран, алгол и кобол принадлежат к группе так называемых машинно-независимых языков.
Эти языки еще более удобны для программиста, чем автокоды, еще более экономят человеческий труд. Трансляторы с этих языков значительно сложнее, чем с автокодов. Но, в общих чертах, программирование на машинно-независимых входных языках сходно с программированием на автокоде.
Мы не будем даже пытаться познакомить читателя с этими языками, так как не располагаем для этого возможностями. Желающих изучить машинно-независимые языки программирования и конкретные автокоды отсылаем к специальной литературе22.
