ИСПОЛНИТЕЛИ АЛГОРИТМОВ

Допустим нам необходимо:

Вычислить значение выражения (9+р)/2 и обозначить результат буквой у.

Вычислить значение выражения {9—р)/2 и обозначить результат буквой 2. Сообщить числа у и г.

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

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

Задачи на вычисления — один из наиболее широких классов задач, решаемых на ЭВМ. Исполнителя, который будет выполнять вычислительные алгоритмы, мы назовем ВЫЧИСЛИТЕЛЕМ. Он имеет дело с числами и переменными, обозначающими числа. На первых порах мы ограничимся следующим набором его допустимых действий:

1. Запросить исходные данные и обозначить их буквами. Соответствующую команду можно записывать, например, так: “Запросить...”, указывая вместо многоточия буквы, обозначающие соответствующие данные.

Например:

Запросить А. Запросить Л, В и С.

2. Сообщить результаты вычислений или какой-нибудь текст:

“Сообщить...”. Здесь вместо многоточия ставятся буквы или алгебраические выражения либо текст, заключенный в кавычки. Выполняя это действие, ВЫЧИСЛИТЕЛЬ печатает значения указанных выражений или текст (без кавычек). Вот примеры таких действий:

Сообщить X.

Сообщить Х и У, а также 7.

Сообщить “Я работаю ВЫЧИСЛИТЕЛЕМ!”.

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

Присвоить... значение...

Вместо второго многоточия пишется выражение, значение которого надо вычислить, а вместо первого многоточия — латинская буква, которой ВЫЧИСЛИТЕЛЬ обозначит это значение. Например:

Присвоить С значение А+В. или Присвоить Х значение 2С.

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

Запр. v,

или

Запросить значение скорости v.

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

Сообщить Х или У.

поскольку ВЫЧИСЛИТЕЛЬ не может сам выбрать, какое из чисел ему сообщать (у него нет соответствующего допустимого действия).

Совсем иначе будет обстоять дело при записи программ для ВЫЧИСЛИТЕЛЯ, имитируемого ЭВМ. К сожалению, ЭВМ не способна понимать всевозможные фразы русского языка. Поэтому приходится жестко фиксировать запись команд. Например, при работе на ЭВМ переменные разрешается обозначать только латинскими буквами, а в записи команды присваивания слово “Присвоить” не пишется, а вместо слова “значение” ставится знак “=”. Скажем, вместо команды

Присвоить С значение А -4- В вы будете писать

С=А+В

Обратите внимание, что точка в конце команд не ставится. Вот пример алгоритма для ВЫЧИСЛИТЕЛЯ.

Запросить А, В.

Присвоить С значение (А+В)/2.

Сообщить С.

Этот алгоритм выполняется так. Сначала ВЫЧИСЛИТЕЛЬ запросит у нас два числа. Когда мы сообщим их ему, он обозначит первое число буквой А, второе число — буквой В. Затем ВЫЧИСЛИТЕЛЬ найдет полусумму чисел и В, а результат обозначит через С. После этого он сообщит значение С.

У вас, наверно, возникло ощущение, что с допустимыми действиями ВЫЧИСЛИТЕЛЯ вы освоились. И действительно, действия “Запросить” и “Сообщить” довольно просты. А вот действие “Присвоить” похитрее. Давайте немного изменим разобранный только что алгоритм:

Запросить Л, В.

Присвоить Л значение (Л-В-5)/2.

Сообщить Л.

Теперь полусумма чисел Л и В будет обозначена не буквой С, а буквой Л. Что же произойдет с тем числом, которое было обозначено буквой Л до выполнения действия “Присвоить...”? ВЫЧИСЛИТЕЛЬ его забудет! И следующим своим действием он сообщит новое значение переменной Л (т. е. полусумму исходных чисел).

Переменную удобно представить себе как ящик, в котором можно хранить любое число. Когда в этот “ящик” кладут новое число, старое бесследно исчезает — допустимые действия ВЫЧИСЛИТЕЛЯ не позволяют никакой переменной присваивать два значения одновременно. Букву, обозначающую переменную, будем называть именем этой переменной. Имена переменных можно использовать в записи различных алгебраических выражений. При вычислении значений этих выражений имена заменяются числами из соответствующих “ящиков”. Запросив число, ВЫЧИСЛИТЕЛЬ “кладет” его в “ящик”, предварительно обозначив этот “ящик” соответствующей буквой.

Вот как можно представлять себе выполнение последнего из приведенных алгоритмов.

По команде “Запросить Л, В” ВЫЧИСЛИТЕЛЬ возьмет два “ящика”, “прикрепит” на первый ящик табличку “Л”, на второй — “В”:

Затем он обратится к нам с вопросом, какие числа надо обозначить буквами Л, В. Узнав эти числа, скажем, 2 и 12, ВЫЧИСЛИТЕЛЬ “положит” их в соответствующие “ящики”:

После этого он приступит к выполнению второго действия. Взяв значения переменных Л и В, ВЫЧИСЛИТЕЛЬ найдет их полусумму — число 7. Это число он “положит” в “ящик” с табличкой “Л”:

Как видите, число 2 уже забыто. Следующим действием ВЫЧИСЛИТЕЛЬ сообщит значение переменной Л — число 7, взяв его из соответствующего “ящика”. Ничто не исчезает так бесследно, как старое значение переменной после присваивания нового значения

Итак, для решения задачи надо выбрать исполнителя и лишь затем составлять алгоритм решения, используя только допустимые действия этого исполнителя. А что требуется от исполнителя составленного нами алгоритма? Только четкое выполнение каждого действия, входящего в алгоритм. Ему не надо знать, для каких целей предназначается алгоритм (компьютеру “безразлично”, управляет он доменным процессом или предсказывает погоду на завтра).

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

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

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

Что же такое исполнитель? Упрощенно исполнителя можно представить себе как некоторое устройство управления, соединенное с набором инструментов. Устройство управления понимает алгоритмы и организует их выполнение, командуя соответствующими инструментами. А инструменты производят действия, выполняя команды управляющего устройства. Скажем, если человека рассматривать, как исполнителя алгоритмов, то мозг — его управляющее устройство, а инструменты — руки, ноги, глаза, нос, рот, уши... (продолжите список самостоятельно). У роботов-манипуляторов, станков с программным управлением и ЭВМ управляющее устройство—процессор; что же касается набора инструментов, то он зависит от того, для решения каких задач предназначен тот или иной исполнитель.

Ясно, что как бы ни были разнообразны возможности исполнителя, они всегда ограничены. Иначе для решения любой задачи годился бы один-единственный алгоритм:

Получить исходные данные. Найти решение. Сообщить ответ.

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