Файл: Голембо, З. Б. Алгоритмизация и программирование электротехнических задач на электронных цифровых вычислительных машинах учеб. пособие.pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 21.10.2024

Просмотров: 72

Скачиваний: 0

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

языке, и перерабатывает его в программу, состоящую только из машинных команд. Таким образом, алгоритмический язык в извест­ ной мере независим от ЭЦВМ, что позволяет выполнять расчет на разных моделях ЭЦВМ без необходимости ручного программи­ рования.

Все высокоразвитые алгоритмические языки программирования являются в той или иной степени специализированными. Каждый из них предназначен для записи алгоритмов решения задач из вполне определенной области. Так, например, широко используе­ мый язык ФОРТРАН — наиболее удобен для описания вычисли­ тельных процессов, КОБОЛ — для описания экономических задач, СНОБОЛ — для описания процессов переработки символьной информации, ЛИСП — для обработки списочных структур и т. д.

Использование при решении какой-либо задачи не предназна­ ченного для нее языка, как правило, сопряжено с большими не­ удобствами — составление описания алгоритма требует больших затрат труда и времени, сами же описания ненаглядны, оттранслиро­ ванные программы неэффективны.

К алгоритмическому языку предъявляются следующие требо­ вания.

1. Наглядность (использование легко понимаемых изобрази­ тельных средств).

2.Единство языка (одни и те же средства должны применяться для выражения одних и тех же понятий в разных частях записи алгоритма).

3.Гибкость (любой из распространенных приемов вычислитель­ ной математики должен описываться без излишнего усложнения).

4.Многоступенчатость (должен позволять описывать очень сложные алгоритмы в виде сочетания сравнительно небольшого числа более простых алгоритмов, описываемых отдельно).

5.Однозначность (запись любого алгоритма должна читаться единственным способом).

Внастоящее время наибольшее распространение получили алго­ ритмические языки ФОРТРАН и Алгол-60, удовлетворяющие боль­ шинству перечисленных требований и удобные для описания вычис­ лительных процессов.

§ 2.3. Алгоритмический язык АЛГОЛ-60

Название алгоритмического языка Алгол-60 складывается из следующих понятий: Алгол (ALGOL) сокращение от английских слов algorithmic language — алгоритмический язык; число 60 ука­ зывает на год, когда состоялась конференция ученых, обсудивших и опубликовавших описание этого языка.

Основными символами в Алголе служат латинские буквы. Имеется также некоторое количество служебных слов (английских). Числа обозначаются в десятичной системе счисления. Целая часть числа отделяется от дробной точкой.

Центральным понятием Алгола является оператор, обозначаю-

17


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

пример: L : вывод (h 2хС).

Для

присвоения

переменной того

или иного значения используется оператор

присваивания, напри­

мер, оператор h : =

ахв

есть оператор,

который

присваивает

переменной h значение ахв.

Знак присвоения (: = ) рассматривает­

ся как единый; его нельзя смешивать со

знаком

равенства.

Для обозначения

меток

и

всех

переменных,

встречающихся

в программе, программист пользуется произвольно выбранной пос­ ледовательностью наименований — идентификатором. Идентифика­ тор может содержать буквы (строчные и заглавные), цифры и целые слова, составленные из букв и цифр. Выбор того или иного иден­ тификатора не меняет смысла программы.

Чтобы пояснить течение вычислительного процесса, в язык Алгола введены специальные слова, которые не входят в выбранный идентификатор и являются постоянными составными частями языка. Существует 22 таких слова: go to (перейти к), if (если), then (то), else (иначе), for (для), do (выполнить), step (шаг), until (до), while (пока), begin (начало), end (конец), comment (коммента­ рий), own (собственный Boolean (булево), integer (целое), real (действительное), array (массив), switch (переключатель), string (строка), procedure (процедура), label (метка), value (значение). Эти слова воспринимаются как единые символы и печатаются жир­ ным шрифтом.

Программа на языке Алгол-60 расписывается в строку. При этом соблюдаются следующие правила. Внутри одной строки сим­ волы должны быть написаны строго линейно; надстрочные (пока­ затели) и подстрочные (индексы) знаки не допускаются. Члены one-

ft

рации деления пишутся в строчку; например,

 

= И/(а + Ь).

 

 

 

 

а + Ъ

Знак умножения опускать нельзя, например: h-a—

hxa. Для пока­

зателя степени

принято обозначение

а8 — а\в,

например, ft2 =

h f 2; для чисел

типа

ах\0в вводится

форма:

ах

10" = a- 10s( 10

в этом сучае пишется

жирным шрифтом).

 

 

Совокупность элементов, обрабатываемых в процессе счета оди­ наковым образом, объединяется в языке Алгол в массив., Массиву предшествует слово array. Для каждого массива, встречающегося в программе, должно быть дано описание, которое устанавливает наименование массива и количество его элементов. Количество эле­ ментов массива определяется границами — индексами, которые заключаются в квадратные скобки, например: array в [1 : 10000]; array С[а : в\ е : d\. Алгол не накладывает никаких ограничений на глубину и размеры индексации, но во всех случаях, когда индек­ сное выражение получается нецелым, оно округляется до ближай­ шего целого.

В вычислениях встречается два типа чисел. Числа первого

18


типа — целые.

Эти

числа не должны портиться округлением.

В Алголе им

соответствует указатель типа integer, например:

integer i; j ; х.

Числа

второго типа — действительные; они обычно

округляются. Им соответствует указатель типа real, например: real у, 2, а . Тип числа определяется совокупностью цифр и знаков, которыми число записано. Любое число, записанное при помощи знаков -\ 0123456789, есть целое число. Любое другое число — действительное, хотя его значение может быть целым, например 3,00. Тип переменной с индексом определяется показателем типа, написанным перед словом array, например: integer array [1 : 5]; real array у [h + 1 : А+10]. Если в описании массива тип не ука­

зан, предполагается,

что его элементы

действительного типа.

 

Логические ходы,

встречающиеся в

программе,

записываются

на

языке Алгол в виде следующих булевых операций:

в

Д —«И». Условие С 4 Д С 2 истинно, если С4 и С2

оба истинны;

противном случае

ложно.

 

 

V — «ИЛИ». Условие Ci\fC2 истинно, если истинно С4 (незави­ симо от Сг ), или истинно С2 (независимо от С^; в противном случае ложно.

= —«ТОЖДЕСТВЕННО». Условие С 4 = С 2 истинно, если

Ci и С2 оба истинны или оба ложны; в противном случае

ложно.

3 — «СЛЕДУЕТ». Условие С4~)С2 истинно, если Ct

ложно

(независимо от С2 ), или С2 истинно (независимо от С4 ), в противном случае ложно.

~~| —«НЕ». Условие ~\С истинно, если Ct ложно; в противном случае ложно.

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

раций

в языке Алгол используются скобки, например (~~\D Д /г <^

+

У) V'а>-в; вначале выполняется операция в скобках.

Булевая переменная может принимать только два значения: true (истина) и false (ложь). Эти значения присваиваются булевой переменной булевым оператором присваивания, например:

А;=х<^у, т . е . значение

А будет true,

i f y > x , и false, if х>у.

Совокупность булевых

переменных,

которые в программе обра­

батываются одинаково, объединяется в булевый массив. Для описа­ ния булевого массива в языке Алгол используется слово Boolean, например Boolean array [1 : 10, 8 : 14].

Для обозначения условных переходов, встречающихся в про­ грамме, используются условные операторы. В языке Алгол су­ ществует два типа таких операторов: 1) «если Р, то Q», например: if а = 0 then go t o M ; 2) «если Р то Q, иначе S», например if а = О then go to М elseS. В обоих случаях S означает некоторое логичес­ кое выражение.

Куски программы, которые выполняются многократно до осу­ ществления определенного условия, формируются в циклы. Про­ грамма цикла вводится в язык Алгол оператором цикла. В операторе цикла задаются начальные значения параметра, шаг сгО'НаьюцбШДА

3 библиотека сл'„^* I



и его последнее значение (или формула пересчета) и условие в виде логического выражения, например for а: = 1 step 1 until lOOdo L; та­ кая запись означает, что значения переменной а изменяются от 1 до 100 с шагом, равным единице; для каждого значения а выпол­

няется оператор L . Вообще любая фраза типа Ei step Е2

until

£ 3 ,

где EiE%Ez

— арифметические

выражения,

есть элемент

списка

языка. Он

определяет часть

последовательности

£ 4 ;

Ei +

£2;

Ei + 2 £ 2 ;

т. е. элементы, меньшие или равные Е3,

если Е2

>

0,

и элементы, большие или равные Е3, если £ 2

< 0.

 

 

 

 

Часто действие, выполняемое повторно, не может быть описано одним оператором. В этом случае группу операторов объединяют в один составной оператор. Составной оператор заключают в опе­ раторные скобки, ограниченные словами begin и end, например: fori = 1 step 1 until 100 do.

beginh = ( 3 x ' + 4 ) x (4 x ' + 5)= В Ы В ° Д (- h t 2)

составной оператор

Операторы друг от друга отделяются точкой с запятой. Про­ грамма вычислений, особенно если она сложная и громоздкая, для упрощения программирования, может быть разбита на несколь­ ко самостоятельных кусков — блоков. На языке Алгол каждый блок представляет собой ряд описаний и следующий за ним ряд

операторов, заключены в операторные скобки

begin и end,

напри­

мер:

begin Mi,

М2; М3; ...;

Мп; Вй

52 ;

...; Ве end.

Здесь

Мх...\

Мп — ряд описаний, Bt;

В2 ; ...; Ве

— ряд операторов. В опи­

саниях заданы

обозначения локализованных в блоке величин; эти

обозначения в операторах, не входящих в блок, использовать нель­ зя. Описания в блоке всегда предшествуют операторам и отделяют­ ся друг от друга и от всех операторов точкой с запятой.

Значения переменной после выхода из блока, в котором она опи­ сана, теряются. Однако в языке Алгол может быть предусмотрен специальный класс переменных, сохраняющих свои значения во всей программе. Их называют собственные переменные. Перед опи­ санием типа собственной переменной или собственного массива должно стоять слово own, например own real х, у; own integer array а [1 : 10]. Часть программы, которая с различными параметрами используется в нескольких местах программы или в других про­ граммах, выделяется в процедуру. Процедуры имеют такое же зна­ чение, как стандартные программы при обычном программирова­ нии. Процедуре предшествует заголовок, который в простейшем случае имеет вид: procedure / (7Y. Pi\ ••\ Рп), где / — идентифика­ тор (наименование процедуры), а Р,; Р 2 ; ...; Рп — идентификаторы, обозначающие формальные параметры процедуры.

Часть программы, к которой относится идентификатор /, на­ зывается телом процедуры. Тело процедуры является оператором языка Алгол. Идентификатор служит наименованием выполняе­

мого куска программы,

например, procedure площадь треугольни­

ка (х, у,

z); здесь слова

«площадь треугольника» — идентификатор

/, а (х, у,

г) — формальные параметры процедуры. При выполнении

20