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

книги из ГПНТБ / Килов Х.И. Фортран для БЭСМ-4 (МИФ) учеб. пособие

.pdf
Скачиваний:
5
Добавлен:
23.10.2023
Размер:
5.14 Mб
Скачать

 

- 60 -

где ^ т / ^ ч

" восьмеричный номер соответствую­

щего оператора.

 

Кроме того, если в рабочей программе имеются число­

вые константы, то они печатаются в десятичной системе

счисления, причем перед первой

из них, а также перед каж­

дой последующей, адрес которой

кратен IOQ, печатается

этот адрес Б виде:

 

 

гдо

^ ^ ^ г ^ а ^

" соответствующий восьмеричный адрес.

2.6.2.5.5, Печать рабочей прогщтыы на АЦПУ

Программист может потребовать, чтобы рабочая про­ грамма печаталась на АЦПУ. Для этого нужно написать

Тогда на АЩ1У печатается рабочая программа совместно с программой старта (см. также 3) . Печать происходит с ука­

занием адресов, с помощью соответствующей стандартной программы (см. 8.10.).

2.6.2.5.6, Вывод рабочей программы на перфокарты

Полностью готовая рабочая программа совместно с программой старта (см, 3) может быть выдана на перфокар­ ты. В этом случае полученная колода перфокарт может бить вьедена з машину с ячейки 0010. После передачи управле - ния ячейке 0010 программа старта произведет соответствую­

щую подготовительную работу, сдвинет в нужное место памяти

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

программе без необходимости заново кошилировать ФОРТРАНпрограмму, Дня перфорации рабочей программы нужно написать:

0РТТ01Г б-;

Пооле перфорации происходит останов

0.77.0000.7777.0000

- 61 -

Вслед за этим остановом надо установить отперфорированную колоду перфокарт на читающее устройство и нажать на ПУСК. Произойдет (фиктивный) ввод этих перфокар '. Если перфора­ ция и ввод'произошли правильно, то произойдет останов

0.77.7777.0000.7777 вслед ЗР которым, при нажатии на ПУСК,начнется работа

(программы старта и, вслед за этим) рабочей программы. Ес­ ли же перфорация и/или ввод произошли неправильно, то вы­ вод программы на перфокарты повторится, и снова произой­ дет останов

0.77.0000.7777.0000 Следует выбросить первую колоду перфокарт, полученную ко­

лоду назвать первой и повторить процесс проверки,- вплоть до выхода на останов

0.77.7777.0000.7777

2.6.2.5.7. Блокировка чистки динамических массивов на магнитных барабанах

Если в программе используются массивы, находящиеся

в динамической памяти (динамические массивы - CM.2.6.2.U.5"J, то, как правило, перед началом работы программы эти

массивы на магнитных барабанах чистятся7 т.е. всем юс эле­ ментам присваивается значение нуль (это, как и все другие действия с динамическими массивами, реализуется стандарт­ ной программой работы с ниш). Однако, может возникнуть необходимость блокировать эту чистку. Это нужно, например, в том случае, когда несколько (различных) рабочих программ работают подряд и имеют полностью.совпадающую структуру динамических массивов и когда динамические массивы - ре­ зультаты работы предыдущей программы - используются в по­ следующей программе. Совершенно ясно, что при обычной раCj're такого рода передача данных между программами невоз­ можна. Если же блокировать чистку динамических массивов, то передача данных произойдет автоматически. Это позволя­ ет' в некоторой степени ослабить ограничение на длину ра-

- 62 -

бочих программ (см., например, 2.6.2.5.3.), разделяя слишком длинные программы на несколько более коротких.

Чтобы блокировать чиотку динамических массивов, следует написать:

0PTI01T 7 ;

2,6,2.6. Операторы, определяющие подпрограммы

Имеются следующие типы подпрограмм:

-встроенные функция ;

-(вкешше) подпрогршФШ-фушщш!;

-(внелше) подпрограммы ища SUBROUTINE.

Обращение к функции может осуществляться только в арифметическом выражении. При этом обращении идентифика­

тор функции получает некоторое значение - вещественное

число. Данное значение может быть обычным образом исполь­ зовано в арифметическом выражении (см. 2.4.1.). Кроме то­

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

При обращении к подпрограмме типа SUBROUTINE ее идентификатору не присваивается никакого значения. Это обраценае реализуется как отдельный оператор C A L L (см. 2.6.1.2.4.). При таком обращении некоторые из фактических

параметров данной подпрограмма могут получить какие-либо

значения.

Как правило,- для того, чтобы компилятор мог запро­

граммировать обращение к некоторой подпрограмме, она

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

в явном определении (см. 2.6.3.3.).

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

иPUNCJION , вслед за которыми записывается полностью

тело(т.е. набор операторов) данной подпрограммы, завер-

- 63 -

шаюшееся оператором "SND;" . Следует отметить, что выпол-

.ниние подпрограммы происходит тогда и только тогда, ког­ да к ней встречается обращение, а обраще vie к подпрограм­

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

прямые и косвенные рекурсивные обращения к подпрограммам (см.2.6Л.?.4. - это же относится и к функциям).

Обращения к подпрограммам детально описаны в 2.6.3.

2.6.2.6.1. ОператорfflffiCTIffK и определение функций.

Оператор FUNCTION служит для определения подпрог- раш:-функций и имеет вид:

или:

 

шаль дшстют P (a,,, a,.,...,<£*.):

• (эти два оператора имеют одинаковый смысл),

где:

Р

- идентификатор функции; •

OL„, . CL^. - формальные параметры - идентифика­ торы простых переменных, массивов ила юдпрограмм Gi£ 36).

У функции должен быть хотя бы одт формальный пара­

метр.

Некоторые из формальных параметров могут быть спе­ цифицированы, т.е. могут встретиться в описанияхДЕЕВаадь (в начале ФОРТРАН-программы) илиR3A5L (вслед за данным оператором FUNGMgH ) . Такая спецификация определяет тип

формального параметра (простая переменная, подпрограмма или массив). Спецификация простых переменных и массивов

записываются в описании REAL (или в нескольких описаниях RBAL ) в любом порядке, в том числе и вперемешку с обыч­

ными описаниями типа (см. 2.6.2.1.3.7.2.). Спецификации массивов подробнее описаны в 2.6.2.1.3.1. Вое неспецнфи'- цированные формальные параметры считаются простыми пере­ менными.

- 64 -

Никакой формальный параметр-массив не может появить

ся в олератора>с squiVAiaMCB, P^JNCH, HEAD ИЛИ WRITE.

]3след за оператором FUNCTION записывается тело функ­ ции - набор операторов, соотазлящнх данную функцию и за-

вершакь/йкся оператором "END;" . Б теле функции могут быть любые оператор:, кроме операторов sugRgUTip и других

операторов FUNCTION . И теле функции должен быть хотя бы

один оператор RS'."1.'RM •

Прл выполнении тела функции ее гдентификатору долж­

но быть присвоено значение. Значение этого идентификатора к моменту исполнения какого-либо оператора RETURN дашюй

функции считается значением функции.

Идентификатор функции не должен появляться ни в ка­ ком везаполкяемом операторе этой функции, кроме самого

оператора FUNCTION.

2.6.2.6.2. Оператор SUBROUTINE к определение подпрограмм

т;ша SUBROUTINE

Оператор SUBROUTINE служит для определения подпро­

граммы типа SUBROUTINE и тлеет вад:

SUBROUTINE

s (0,л аъ

... &и.);

или;

 

 

SUBROUTINE

Si

 

где:

 

 

3 - идентификатор данной подпрограммы;

аи.~ формальные параметры-идентификаторы про­

стых переменных, массивов или подпрограмм(r v * 36).

У поддарограгд.ш типа SUBROUTINE может не быть ни од­

ного формального параметра.

Спецафикащш и употребление формальных параметров

описаны выше, в 2.6.2.6.1.

Вслед за оператором SUBROUTINE записывается тело

подпрограммы типа SUBROUTINE , т.е. набор операторов,

составляющих данную подпрограмму и завершающийся опера-

- 65 -

тором "BND;". В теле подпрограмм типа sUBRffraiKB могут

быть любые операторы, кроме операторов №ссттш и .других операторов SUBRflUTTKia. В теле отоЙ подог-«грашы Должен

быть хотя1 бы одам оператор RSgURff.

Идентификатор гюдгфограмш типа зиВБ0Щ'11№ не дол­

жен появляться ни и каком операторе этой подпрограммы, кроме самого оператора SUBROUTINE.

2.6.3. Обращения к нодггрогеамлам

Обращение к подпрограмме осуществляется путем ука­

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

ключенного п круглые скобки списка аргументов - фактических

параметров.

Обращение к подпрограше тип».fflBRffUTINB допускает­

ся только в операторе GALL (см. 2,6.1.2.4.)»

Обращение к подпрогА.аше-фуЕЬЧции допускается только в арифметическом выражении, которое испольгует полученное значение этой функции.

Как правило, любая йсдарограмла до обращения к ней

должна быть определена (см. 2.6.2.6.). Однако, существу­

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

ного параметра, тогда как у подпрограммы-функции должен быть хотя бы один параметр.

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

граммы (см, 2.6.2.6.I.).

•Фактическим параметром может быть:

-идентификатор переменной (простой или с индексом)}

-арифметическое выражение;

-66 -

-идентификатор массива;

-идентификатор подпрограммы.

Если формальный параметр является идентификатором переменкой, то, таким образом, фактический параметр может

быть идентификатором переменной или арифметическим выра­

жением.

Если формальный параметр является идентификатором

массива, то и фактический параметр может быть только иден­ тификатором масоива, причем если формальный параметр яв­

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

ва. Вид памяти (МОЗУ-0, РДОЗУ— 4 или динамическая память)

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

Если формальный параметр является идентификатором подпрограммы, то фактический параметр может бить только

идентификатором подпрограммы. В атом случае как формаль­

ный, так и фактический параметры - идентификаторы подпрограмм должны быть указаны в описании БХТЕВЖЬ (см. 2.6.2.1.5.). Подарограмма должна быть описана (определе­

на) в .ФОРТРАН-программе раньше, чем она будет использо­

вана, в частности, в качестве фактического параметра. Золи в процессе выполнения подпрограммы формальный

параметр-явреиенная получает новое значение,

то соответствующий ему фактический параметр может быть

только простой переменной (но не параметром цикла!) или пе­

ременной с индексом.

2.6.3.2. Выполнение обращения к подпрограмме.состоит в

следующем:

2.6,3.2.1. Формальные параметры заменяются на соответст­ вующие фактические параметры, - точнее, формальным пара­ метрам-переменным (простым и с индексом) присваиваются

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

программы .

- 67-

2.6.3.2,2. Происходит выполнение подпрограммы, начиная с ее первого выполняемого оператора и вплоть до встречи ка­ кого-либо из операторов KEJIPURK ЭТОЙ подпрограммы. 2.6.3.2.3; Фактическим параметрам - простым переменным и переменным с индексом присваиваются ноше значения, полу­ ченные соответствующими формальными параметрами при выпол­ нении подпрограммы. (Фактические параметры-массивы уже получили, при необходимости, новые значения в результате замены формальных параметров на фактические и выполнения подпрограммы)

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

2,6.3.'3. Имеются следующие встроенные функции ЕХР(Х) - для вычисления е х

AL0G(X) - для вычисления Uuc SIN(X) - для вычисления einx C0S(X) - для вычисления оовя ТАЫ(Х) - Для вычисления tgx АТЛН(Х) - Для вычисления arctgx SQRT(X) - для вычисления "У1Г

ABS(X)

- для вычисления

\х\

А1ЫТ(Х)

- для вычисления £| X l j [ -aiOH<x>, т.е.

 

SIQN(X) , умноженного на наибольшее целое

SIGN(X)

число ^ | X \

 

для шчиоления знака X:

 

(

+1 при х > о

 

V.

-"1 при х < о

PL0AT(X) - для преобразования целого положительного числа из единиц второго адреса в норма-

- 68 -

лизованное двоичное число - используется душ обращения к параметру цикла вне этого цикла (см., например, 2.6.1.2.8.2. и 2.6.1.2.8.4.).

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

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

2.7. Отличия №Фа от стандартного ФОРТРАНа

Ниже будут перечислены отличия описанного языка МИФ (МИни ФОРТРАН) от стандартного ФОРТРАНа, описанного вС1Л, С 23 . Здесь указаны только основные отличия. Другие раз­ личия могут быть обнаружены путем сравнения настоящего опи­ сания и описания L 1 3 •

2.7.1.Ограничения и изменения

2.7.1.1.Программа записывается не на бланках. Резервиро­

ванные олова подчеркиваются. Отсутствует символ $ .

2.7.1.2. Операторы отделяются друг от друга точкой о запя­ той.

2.7.1.3.Метка отделяется от оператора двоеточием.

2.7.1.4.Подпрограммы определяются (описываются) вслед за глобальными описаниями и до основной программы. Таким обра­ зом, ни подпрограммы, ни основная программа но могут компи­ лироваться отдельно, т.е. может происходить только компиля­

ция всей ФОРТРАН-программы в целом. Кроме того, обращение

кподпрограмме не может произойти раньше ее описания.

2.7.1.5.Отсутствует оператор C0MM0N , т.к. все глобально описанные величины являются общими для всех программных единиц.

- 69 ~

2.7.1.6. В операторе Щ Ш И описываются не только под- программы-фзктические параметры, но и соответствующие им

цодпрограмглы-формальные параметры.

2.7.1.7. Отсутствует оператор DIMENSION . Отсутствуют ти­ пы целый, логический, с двоичной точностью и комплексный.

Имеются только арифметические и логические выражения. По­ следние имеют* более простую структуру.

2.7.1.8. Отсутствуют элементы формата L, н, G, D . Измене­

на структура элементов 0 и А.

2.7.1*9. Отсутствует воэмовдость присваивания символьных ( H o l l e r i t h ) значений с помощью оператора присваивания

2.7.. 1,10. Массивы могут быть только одно- и двумерными. •

2.7.1.11.Отсутствуют операторы A S S I G N И назначенный G0 Т0.

2.7.1.12.Отсутствуют операторы RATA и подпрограммы BL0OK

DATA.

2.7.1.13.В операторе рлиав можно указывать не более чем

четырехзначное, восьмерично, число.

2.7.1.14.Б операторе PRINT упрощена структур» неявного

цикла.

2.7.1.15. Первый

печатаемый в строке символ не служит

для управления печатью.

не может быть введен с перфо­

2.7.1.16. Оператор PgflMAT

карт или сформирован.

2.7.1.17. В операторе P0RMAT отсутствует масштабный множитель.

2.7.1.18.Двумерные массивы располагаются в памяти по

строкам.

2.7.1.19.В операторе вдщУАЬБЫСВ нельзя указывать, иденти­ фикаторы простых переменных.

2.7.1.20. Отсутствуют операторы BHD PIL3, Н Е Г С Ш ) , BACKSPACE . Изменена структура операторов PUaoKР READ и WRITE , в частности, ввода с перфокарт, что вызвано особен­ ностями оборудования БЭСМ-4.

2»7.1.21. Обращение к параметру цикла вне его области, т.е. при выходе из нее с помощью Gff Tg или 1£ , осуществляется

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