Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

книги из ГПНТБ / Караваев, Н. И. Электронные цифровые вычислительные машины и программирование учеб. пособие

.pdf
Скачиваний:
14
Добавлен:
20.10.2023
Размер:
8.52 Mб
Скачать

- 260 -

нарушению принципа однозначности, описание алгоритмов полу­ чается весьма неполным.

Операторная запись алгоритмов хотя и дает формальные правила для записи алгоритмов, но все же иьлвт ряд серьез­ ных недостатков. Она не предусматривает программирования самих расчётных формул, а последовательность вычислений за­ даётся только в виде логической схемы.

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

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

чисто логическими. Например,

мы часто

говорим: "если а > в,

то

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

" . 3

этой части предложения

" а, > , в" - математические термины, а "если, то, в противном случае" - логические.

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

ния ряда понятий, свойственных машинной реализации этих процес-

- 261 -

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

Чтобы машина могла "понять" вались, сделанную на алго­ ритмическом языке, в нем желательно иметь средства для опи­ сания свойств и характера наиболее важных математических объектов / н - р , чисел, векторов, матриц, массивов и д р . / . Следовательно, язык должен содержать и уметь описывать ряд чисто алгоритмических понятий и объектов.

Итак, алгоритмический язык должен содержать набор спе­ цифических терминов и символов, обозначающих ^тематические, логические, алгоритмические объекты v. операции, свойства и отношения этих объектов и должен удовлетворять следующим тре­ бованиям:

-быть достаточно гибким, чтобы запись задач на этом

языке была компакта и наглядна;

-легко усваиваться при изучении, что может быть дос­

тигнуто близостью к общепринятой метьмахической символике;

-быть удобным для публикаций и достаточно простые.

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

В1958 году усилиями группы ученых Западной Европы и Америки был разработан универсальный язык программирования для решения вычислительных задвч, окончательный вариант ко­ торого носит название АЛГОЛ-60. В настоящее время АЛГОЛ-60

получил международное

признание

и широко, применяется в СССР.

Он является в какой-то

степени

слиянием математического и

разговорного языков. На базе этого, языка в Советском Союзе разработаны алгоритмические языки для экономических задач АЛГЭМ и АЛГЭК.

В настоящее время зарегистрировано более 2000 алгоритми­ ческих языков и число их непрерывно растет.

Существующие алгоритмические языки можно разделить на че-

- 262 -

тыре группы, отличающиеся своим назначением и характеристи­ ками:

1. Явыки, испольауемые для решения вычислительных за­ дач: АЛГОЛ-60, адресный язык Института кибернетики АН УССР, ФОРТРАН, язык Института кибернетики АН Эстонской ССР, 1Щ,г ДЖОВИАЛ и др.

2. Языки, применяемые при планировании, учете и для обработки экономической информации, такие как КОБОЛ, ТАБОЛ, АЛГЭМ, АЛГЭК, АЛГОЛ-КОБОЛ и др.

3.Яэыки для решения информационно-логических задач

типа КОШТ, ИПЛ-У,

ЛИСП, РЕКОЛ, ФЛПЛ, РИКАЛ и др.

4. Языки для

описания алгоритмов управления производ­

ственными процессами в реальном масштабе времени, как, напри­ мер, APT.

Ниже приводятся общие сведения о языке АЛГОЛ. Полное описание его можно найти в соответствующей литературе [Л6-ЛЮ].

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

является изучение грамматикинауки

о

правописании, включаю­

щей в

себя морфологию /учение о форме

слов/, синтаксис

/уче ­

ние о

сочетании слов в предложении/и пунктуацию. Если провес­

ти аналогию в изучении разговорного

и алгоритмического

языков,

то можно придти к выводу, что почти

все перечисленные

выше эта­

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

При изучении языка нужно хорошо различать две характеризую­ щие его стороны: синтаксис и семантику.

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

- 263 -

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

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

1 . Алфавит;

2 . Слова;

3. Выражения;

4. Предложения.

В таком порядке и рассмотрим краткий обзор основных син­ таксических единиц языка АЛГОЛ-60.

Алфавит АЛГОЛ-60 представляет собой Набор самых элемен­ тарных, неделимых синтаксических единиц - основных символов.

Основные символы делятся

на четыре группы:

1 .

Цифры :

0123456789.

 

2 .

Буквы:

используются

52 строчных и прописных букв

латинского алфавита, однако этот список может изменяться

путем отбрасывания некоторых букв или добавления

новых.

3.

Логические значения. В качестве

логических

значений

применяются два

символа

 

 

 

 

 

"tt/ue

- истинно,

^оЛье

 

- ложно.

 

4.

Ограничители:

знаки операций,

разделители,

скобки,

описатели,

спецификаторы.

 

 

 

 

Знаки

операций:

 

 

 

 

 

-

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

+

прибавить

к

,

 

 

 

 

 

-

отнять . . . .

 

 

 

 

 

 

и умножить на

. . . ,

 

 

 

 

 

/

делить на

. . . ,

 

 

 

 

 

-г- разделить

нацело . . . ,

 

+возвести в степень,

-логические = "эквивалентно" /равнозначность/,

 

 

 

 

-

264

 

-

 

 

 

 

 

Z)

"

влечёт

"

/импликация/,

 

 

 

V

"

или"

/логическое

сложение/,

 

 

Л " и " /логическое умножение/,

 

 

 

—1

"

не"

/отрицание/,

 

 

 

-

отношения > , < , > , <

=

^£ ;

 

 

 

-

следования

 

^oto

-

'перейти

к

,

 

 

 

 

 

1^

-

если,

 

 

 

 

 

 

 

then

-

то,

 

 

 

 

 

 

 

е£&е

-

иначе,

 

 

 

 

 

 

 

^ог-

-

для,

 

 

 

Разделители:

 

do

-

выполнить

/цикл/.

 

 

 

 

 

 

 

 

 

, -

служит

для разделения

элементов

списков,

например

список

индексов [L,j,,kl

 

;

 

 

 

 

. -

служит

для

отделения

целой части числа от дробной;

: -

служит

для разделения

граничных

пар в описаниях

массивов, а также

для

отделения меток

от

операторов;

; -

служит

для разделения

отдельных участков

программы

/операторов и описаний/;

 

 

 

 

 

 

:» - служит в качестве символа присваивания;

 

1—1 - пробел

применяется

при

построении

строк;

 

ю - основание степени;

step

- шаг

")

 

агш£~

да

[

испольауются при построении операторов

ух/Ше-

пока

J

^ K J I A

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

Скобка:

( ) - служат для определения порядка действий в выра­ жениях ;

£ ] - индексные скобки;

гf - кавычки используются для образования строк обоз­

начающих нечисловые величины /собственные имена и д р . / ; fee^uv & i d - операторные скобки служат для объединения опе­ раторов в составные операторы и блоки.

- 265 -

Описатели служат для построения описаний величин и других объектов, используемых в АЛГОЛЕ и имеют вид:

 

owk

-

собственный,

 

 

Lnteqe.4,

_ целый,

 

 

 

Ze.a.£

_

вещественный,

 

 

hoo&zan.-

 

логический,

 

 

oX-iay

_

массив,

 

 

 

Switch

-

переключатель,

 

 

jbloceduie^

 

процедура.

 

Спецификаторы

gtzlnq.

/строка/,

£аЛе.£-

/метка/,

\/<х-£ие /значение/

используются

только в разделе

описаний

процедур и служат для характеристики величин, ис­

пользуемых в процедурах.

 

 

С помощью основных

символов /алфавита/

строятся все ос ­

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

 

К первичным выражениям относятся числа /303 - целое без

знака, + 303 - целое,.303 - правильная

дробь, 10.303 - деся­

тичная дробь или просто дробь

и т.д. / ,

переменные / yitj

-

y[l,j>l

— переменная с индексами,

? - простая

пере­

менная/,

указатели функций /' а-4£ (х) -\х\, $<р£(х) - Vx

/.

 

Следующими по сложности синтаксическими единицами являют­

ся

выражения:

 

 

 

-

арифметические, например,

(S<^t-t(xxX

+ yfS^g +Хху)",

-логические, -натирги^ер, (р^ф 1л(а[аЧ]>ОУа[гг]>о).

Выражения в свою очередь являются материалом для построе­ ния более сложных синтаксических единиц языка - операторов и описаний.

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

Классификация операторов в АЛГОЛе представляется схемой. Всего имеется восемь различных видов операторов, причём неко­ торые из этих видов объединяются в более крупные группировки.

- 266 -

оператор

После каждого оператора ставится точка с запятой.

Блок представляет собой самую совершенную синтаксичес­

кую единицу АЛГОЛа.

 

 

 

 

 

 

Блок -

автономный участок

программы,

включающий в себя

информацию двух видов: описания данных и других

объектов,

участвующих в вычислениях, и операторы.

 

 

 

В начале блока идут описания, затем пишутся все опера­

торы в порядке их выполнения. Блок начинается словесной

скоб­

кой ое^иг

и заканчивается

словесной скобкой

e n d

 

Программа в АЛГОЛе представляет собой либо блок, либо

составной

оператор.

 

 

 

 

 

 

В заключение приведем пример простейшей программы на

 

АЛГОЛе.

 

 

 

 

 

 

 

Пример. Два одномерных массива

а й в

содержат по 30

эле­

ментов. Вычислить

зо

 

\2

 

 

 

Программа на АЛГОЛе записывается следующим образом:

 

 

D : - О ;

(о% IЫ

$hp

i unlit

Зо

do

 

e u d

- 267 -

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

§9.4.ТРАНьЛЯТиРЬ

Современные трансляторы - это мощные программирующие программы, переводящие запись алгоритмов с некоторого вход­ ного языка на язык конкретной ЗьВМ. Перевод состоит в заме­ не символов и синтаксиса входного языка символами и синтак­ сисом машинного языка, при сохранении неизменным смыслового содержания переводимого текста.

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

Оно должно быть минимальным.

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

Определенные ограничения на входной язык накладываются со стороны самой ЭЦВМ и, в частности, устройств ввода информации. Последние, как правило, имеют довольно ограниченный алфавит,

- 268 -

что приводит к необходимости разработки специальных правил кодировки символов входного языка символами устройств ввода. Отсюда стремление по возможности сблизить алфавит входного языка с алфавитом устройств ввода.

В основе построения трансляторов лежит блочный принцип. Это объясняется сравнительно небольшими размерами ОЗУ ЭЦВМ, не позволяющими размещать одновременно обрабатываемую инфор­ мацию и транслятор в целом.

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

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

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

После ввода информации на ЭЦВМ происходит при необходи­ мости перекодировка ее на промежуточный язык и перевод инфор­ мации на внутренний язык. Затем в ОЗУ один за другим вызы­ ваются блоки программирования. В задачу каждого блока входит реализация алгоритмов программирования для единиц языка опре­ деленного типа.

После того как запрограммированы все синтаксические еди-

- 269 -

ницы, входящие в исходную информацию, происходит выбрасыва­ ние лишних кодов, распределение памяти и присвоение истин­ ных адресов.

Работа транслятора заканчивается либо выводом готовой программы на перфорацию, либо записью ее на внешний накопи­ тель, либо передачей управления на счет.

Работа по созданию трансляторов носит коллективный харак­ тер и продолжается порой годами. Например, суммарная трудо­ ёмкость разработки системы автоматизации программирования АЛЬФА оценивается в 35 человеко-лет.

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

Соседние файлы в папке книги из ГПНТБ