* [х) означает наибольшее целое, величина которого не превосходит величины х, имеющее тот же знак, что и х.

** Функция MOD или AMOD (а,. а2) определяется как

Э]— [а] Iа2] • а2.

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

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

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

Для ссылки на встроенную функцию используется ее указа­тель в качестве первичного выражения в арифметическом или логическом выражении. Фактические параметры, образующие список фактических параметров в указателе функции, должны согласовываться по порядку, числу и типу со спецификациями, данными в табл. 3, и могут быть любыми выражениями соответ­ствующих типов. Значение встроенных функций AMOD, MOD, SIGN, ISIGN и DSIGN не определено, если значение второго параметра равно нулю.

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

(Измененная редакция, Изм. № 1).

  1. Внешние функции. Внешняя функция определяется вне того программного модуля, который ссылается на нее. Для опре­деления внешней функции средствами ФОРТРАНа служит от­дельный программный модуль, называемый модулем-функцией, первым предложением этого модуля является заголовок функции.

    1. Структура модулей-функций. Заголовок функции имеет вид

t FUNCTION f(a),a2,...an)

(t — либо пусто, либо INTEGER, либо REAL, либо DOUBLE PRECISION, либо COMPLEX, либо LOGICAL;

f — символическое имя определяемой функции;

каждое а;— символическое имя, называемое формальным пара­метром).

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

Модули-функции строятся в соответствии с п. 9.1.6 со следую­щими ограничениями. Символическое имя определяемой функции должно также встречаться в этом модуле в качестве имени пере­менной. При каждом выполнении модуля эта переменная должна быть определена, причем впоследствии на эту переменную можно ссылаться или переопределять ее (см. разд. 10). Значение этой переменной к моменту выполнения в данном модуле любого опе­ратора возврата называется значением определяемой функции. Символическое имя определяемой функции не должно встречаться ни в одном объявлении этого программного модуля, за исключе­нием вхождения в заголовок функции в качестве ее имени. Фор­мальные параметры не могут встречаться в объявлениях эквива­лентности, общих объектов или начальных данных в этом модуле- функции. Модуль-функция при своем выполнении может опреде­лять или переопределять один или несколько своих фактических параметров, что, наряду с вычислением значения функции, также является результатом выполнения модуля-функции. Модуль-функ­ция может содержать любые предложения, за исключением заго­ловка блока данных, заголовка подпрограммы, другого заголовка функции, а также любого предложения, которое явно или неявно ссылается на определяемую функцию. Модуль-функция должен со­держать по крайней мере один оператор возврата.

  1. Ссылки на внешние функции. Для ссылки на внешнюю функцию используется ее указатель (п. 5.2) в качестве первич­ного выражения в арифметическом или логическом выражении. Фактические параметры, образующие список фактических парамет­ров в указателе функции, должны согласовываться по порядку, чис­лу и типу с соответствующими формальными параметрами модуля- функции. Фактическим параметром в указателе внешней функции может быть:

имя переменной;

имя элемента массива;

имя массива;

любое другое выражение;

имя внешней процедуры.

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

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

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

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

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

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

Таблица 4

Основная внешняя функция

Оп ределение

Число пара­метров

Символиче- скос имя

парамет­ров

4ІІ

функции

Экспоненциаль­ная функция

еа

1

ЕХР DEXP СЕХР

Вещ.

Дв.

Ком пл.

Вещ. Дв. Компл.

Натуральный логарифм

1п(а)

1

ALOG DLOG CLOG

Вещ. Дв. Компл.

Вещ. Дв. Компл.

Десятичный логарифм

lg(a)

1

ALOG10

DLOG 10

Вещ. Дв.

Вещ. Дв.

Продолжение табл. 4

Основная внешняя функция

Определение

Число пара­метров

Символиче- с кое имя

т

парамет­ров

функции

Тригонометри­ческий синус

sin (а)

1

S1N

DS1N

CSIN

Вещ.

Дв.

Ком пл.

Вещ.

Дв.

Компл.

Тригонометри­ческий косинус

cos(а)

1

COS DCOS CCOS

Вещ.

Дв.

Ком пл.

Вещ.

Дв.

Компл.

Гиперболиче­ский тангенс

tanh(a)

1

TANH

Вещ.

Вещ.

Квадратный ко­рень

а' А

1

SQRT DSQRT CSQRT

Вещ.

Дв.

Компл.

Вещ.

Дв.

Компл.

Арктангенс

arctan (а)

arctan (aja2)

1

2

АТА DATAN ATAN2 DATAN2

Вещ. Дв. Вещ. Дв.

Вещ.

Дв. Вещ. Дв.

Взятие остатка1

a! (mod а2)

2

DMOD

Дв.

Дв.

Модуль


1

CABS

Компл.

Вещ.

(s — символическое имя определяемой подпрограммы;

каждое а, — символическое имя, называемое формальным пара­метром) .

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

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

  1. Ссылки на внешние подпрограммы. Для ссылки на внеш­нюю подпрограмму используется оператор вызова подпрограммы (п. 7.1.2.4). Фактические параметры, образующие список факти­ческих параметров этого оператора, должны согласовываться по порядку, числу и типу с соответствующими формальными пара­метрами модуля-подпрограммы. Исключением из правила согласо­вания типов является использование в качестве фактического па­раметра текстовой константы.

Фактическим параметром при ссылке на внешнюю подпрограм­му может быть:

  1. текстовая константа;

  2. имя переменной;

  3. имя элемента массива;

  4. имя массива;

  5. любое другое выражение;

  6. имя внешней процедуры.

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

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

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

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

Если формальный параметр является именем массива, то со­ответствующий фактический параметр должен быть именем мас­сива или именем элемента массива (п. 10.1.3).

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

  1. Модуль-блок данных. Заголовок спецификации блока дан­ных имеет вид

BLOCK DATA

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

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

  1. 2, 8.5. (Измененная редакция, Изм. № 1).