Квант

42

Алгоритмический язык

Академик А. П. ЕРШОВ

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

В прошлом стать мы рассмотрели несколько примеров алгоритмов. Теперь же наша цель — научиться записывать алгоритмы «по всем правилам науки». Но прежде чем разбирать правильа отдачи приказа, следует понять, на что способен использовать приказов. Мы начнем поэтому с ответа на следующий вопрос:

Что должен иметь исполнитель?

1°. Считать. Исполнитель должен не только быстро и безшибочно произвольить все четыре арифметических действия, но и понять порядок их выполнения, «понить скобки», а также находить численные значения переменных величины. Например, хорошо использовать почти сразу сообщает, что при x=0,17x=0,17 и y=1,32y=1,32 выражение (x2+3x)(y3+5xy)/x2+xy(x^2+3x)(y^3+5xy)/\sqrt{x^2+xy} равно 3,66409 … и даже быстро укажет, что cos⁡0,29∘=0,99998719\cos 0,29^\circ=0,99998719 … или sin⁡(x2+x)=0,003471\sin(x^2+x)=0,003471 … при x=0,17∘x=0,17^\circ. НеSTRAWSЫЕ ЕМУ НИ БОЛЬШЕ ЧИСЛА, НИ БОЛЬШЕ ОБЪЕМЫ ВЫЧИСЛЕНИЙ.

2°. Запомнить. Исполнитель имеет заносить сообщаемые ему данные в определенные (известные ему) места своей памяти. Данные могут быть как числовыми, так и текстовыми (литерными) величины. В частности, он может заносить какую-нибудь команду или серийного команд. При необходимости исполнитель может уничтожить эти данные, заменить или изменить их. В частности, переменные числовые величины могут подвергаться многоократным изменением в процессе исполнитель алгоритма.

3°. Выбрать. Исполнитель должен иметь принимать решение о своих дальнейших действиях в зависимости от обстановки. Именно, он проверяет, выполнен ли некоторое сообщаемое ему условие, и если оно выполено, он использует одну серийную команду. Такой выбор между двумя сериями команда программы называют условия командой или ветвлением. Разумеется, исполнитель должен знать еще его проверить.

43

4°. Повторять. Исполнитель повторяет (быстро и, быть может, многократно) одну и ту же серию команд (цикл), пока выполнен определенное условие (условие цикла). Это условие он должен проверить перед каждым выполненем серии, а обнаружив, что оно нарушается, он должен перейти к следующей за циклом команд. Хороший исполнитель — например современный компьютер — сilen именно уменем с колосальной скоростью таким образом работать в цикле.

5°. Вспоминать. Среди текстов, записанных в память исполнитель, могут быть разные данные (числовые, литераные), которые он должен умет при необходимости вспомнить. В частности, в память могут быть запесены вспомогательные алгоритмы. Хороший исполнитель вспоминает (и выполняет) их по одному уполнинию их назначения (имени), не требуя повторения всех команд вспомогательного алгоритма. Такой пример программы называют вызовом подпрограммы.

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

Примеры записи алгоритмов

Ниже приведятся примеры записи алгоритмов. Эти примеры выполняны в соответствии с правилами алгоритмического языка, принято в вашем учебнике. Мы предлагаем внимательно прочитать их и разобрать, как они работают, то есть сыграть роль исполнитель алгоритма (для предложенных исходных данных — значений аргументов). Если это сразу не получится, стоит еще раз просмотреть §§ 2—4 вашего учебника, прочитать общие посянения, приведенные ниже, и затем вернуть к исполнению алгоритмов. Большое подробное комментарий приводится в конце статьи. Прочитав их, вы проверите, правильно ли вы исполнили данные алгоритмы, и будет готовы само «стоятьно писать простые программы на алгоритмическом языке.

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

45

Общепояснения

Все приведенные записи алгоритмов начинаются с заполовка (выделенного синим цветом). Заголовок начинается с названия или имены алгоритма (он напечатано заглавными буквами после службыного слова алгоритм)) и списка параметров (список переменных величины стоит в скобках после названия алгоритма). Далее (после слов аргументов) это те параметры, которые в начале нужно ввести в машину — их она заполинает). Завершается заполовок списком результатов (они перечислены после слова рез). Мы будем считать, что машина напечатает их значения, когда алгоритм будет использован.

После заполовка идет тело программы. Она начиная со службыного слова начало, далее идут все команды, которые завершают словом кон(eц).

Обратимся спрва внимание на те команды, в которых машина считает. Здесь имеется как совсем простые вычисления (например прибавленные единицы), так и более сложные (скем (-b+\sqrt{d})/2a). Записьюются эти вычисления самим объчным образом — так, как вас учат на уроках математики. Поэтому этот спектр записи алгоритмов у вас не выовет никаких трудностей. Стоит, однако, обратить внимание на команду присваивания (знаок :=). Запись x:=a означает, что параметру x машина присваивает значение a (здесть a может быть и числом, и текстом, и другим параметром). В этом случае машина заполинает, что x равно a. Если теперь она должна напечать x, то она напечатает не букву x, а число (текст) a.

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

Повторения (или циклы) выделены здесь желтыми кружками. Каждый цикл открывается службыным словом пока и завершается словом кц (конец цикла). После слова пока стоит условия цикла, затем службыное слово (начало цикла), за ним серия команд цикла. Напомним, что при использовании цикла машина сновала проверяет условия; если оно выполнен, машина выполняет серийную команд цикла и вовь проверяет условия; если оно опять выполнен, машина сновала проверяет серию и так далее, пока условия не оказывается нарушенным; тогда она переходит к следующей команде (после слова кц); если условия никакого не нарушится, машина будет «работать вечно», — говорят, что она зациклилась. Чтобы избегать зацикливания, нужно позаботиться о выходе из цикла, то есть добиться нарушения условий цикла.

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

Когда все команды программы исполены (перед заключительным службыным словом кон), машина печатает подряд полученные значения тех переменных, которые в заполовке стоит после службыного слова рез (те переменные, которые нikакие значения не присваивают). Не печатаются также кавычки, образляющие значения литеральных переменных.