* [х) означает наибольшее целое, величина которого не превосходит величины х, имеющее тот же знак, что и х.
** Функция MOD или AMOD (а,. а2) определяется как
Э]— [а] Iа2] • а2.
рами. Фактическим параметром в указателе внутренней функции может быть любое выражение того же типа, что и соответствующий формальный параметр.
Вычисление значения указателя внутренней функции заключается в установлении связи (п. 10.2.2) между значениями фактических параметров и соответствующими формальными параметрами и в вычислении значения выражения в объявлении, определяющем эту функцию. Вычисленное значение выражения принимается в качестве значения указателя функции и тем самым становится доступным в выражении, содержащем этот указатель.
Встроенные функции и ссылки на них. Символические имена встроенных функций заранее известны процессору и, если они удовлетворяют условиям, изложенным в п. 10.1.7, им приписывается специальный смысл и тип в соответствии с табл. 3.
Для ссылки на встроенную функцию используется ее указатель в качестве первичного выражения в арифметическом или логическом выражении. Фактические параметры, образующие список фактических параметров в указателе функции, должны согласовываться по порядку, числу и типу со спецификациями, данными в табл. 3, и могут быть любыми выражениями соответствующих типов. Значение встроенных функций AMOD, MOD, SIGN, ISIGN и DSIGN не определено, если значение второго параметра равно нулю.
Вычисление значения указателя встроенной функции заключается в выполнении действий, определенных в табл. 3, над значениями фактических параметров. Результирующее значение принимается в качестве значения указателя функции и тем самым становится доступным в выражении, содержащем этот указатель.
(Измененная редакция, Изм. № 1).
Внешние функции. Внешняя функция определяется вне того программного модуля, который ссылается на нее. Для определения внешней функции средствами ФОРТРАНа служит отдельный программный модуль, называемый модулем-функцией, первым предложением этого модуля является заголовок функции.
Структура модулей-функций. Заголовок функции имеет вид
t FUNCTION f(a),a2,...an)
(t — либо пусто, либо INTEGER, либо REAL, либо DOUBLE PRECISION, либо COMPLEX, либо LOGICAL;
f — символическое имя определяемой функции;
каждое а;— символическое имя, называемое формальным параметром).
Каждый формальный параметр должен быть либо именем переменной, либо именем массива, либо именем внешней процедуры. Все формальные параметры в одном заголовке функции должны быть различными.
Модули-функции строятся в соответствии с п. 9.1.6 со следующими ограничениями. Символическое имя определяемой функции должно также встречаться в этом модуле в качестве имени переменной. При каждом выполнении модуля эта переменная должна быть определена, причем впоследствии на эту переменную можно ссылаться или переопределять ее (см. разд. 10). Значение этой переменной к моменту выполнения в данном модуле любого оператора возврата называется значением определяемой функции. Символическое имя определяемой функции не должно встречаться ни в одном объявлении этого программного модуля, за исключением вхождения в заголовок функции в качестве ее имени. Формальные параметры не могут встречаться в объявлениях эквивалентности, общих объектов или начальных данных в этом модуле- функции. Модуль-функция при своем выполнении может определять или переопределять один или несколько своих фактических параметров, что, наряду с вычислением значения функции, также является результатом выполнения модуля-функции. Модуль-функция может содержать любые предложения, за исключением заголовка блока данных, заголовка подпрограммы, другого заголовка функции, а также любого предложения, которое явно или неявно ссылается на определяемую функцию. Модуль-функция должен содержать по крайней мере один оператор возврата.
Ссылки на внешние функции. Для ссылки на внешнюю функцию используется ее указатель (п. 5.2) в качестве первичного выражения в арифметическом или логическом выражении. Фактические параметры, образующие список фактических параметров в указателе функции, должны согласовываться по порядку, числу и типу с соответствующими формальными параметрами модуля- функции. Фактическим параметром в указателе внешней функции может быть:
имя переменной;
имя элемента массива;
имя массива;
любое другое выражение;
имя внешней процедуры.
Если фактический параметр является именем внешней функции или именем подпрограммы, то соответствующий формальный параметр должен употребляться как имя внешней функции или как имя подпрограммы.
Если фактический параметр соответствует формальному параметру, который определяется или переопределяется в данной подпрограмме, то фактический параметр должен быть либо именем переменной, либо именем элемента массива, либо именем массива. Вычисление значения указателя внешней функции производится путем обращения к соответствующему модулю-функции. При этом обращении устанавливается связь (п. 10.2.2) между фактическими параметрами и всеми вхождениями формальных параметров в операторы, в объявления внутренних функций, а также в качестве регулируемых размеров в том модуле, который определяет указываемую функцию. Если фактический параметр является выражением, то эта связь параметров устанавливается по значению, а не по наименованию. После установления этих связей производится выполнение модуля, начиная с первого по порядку его оператора.
Если фактический параметр является именем элемента массива, содержащим переменные в индексе, то при установлении связи с формальным параметром этот фактический параметр может быть заменен на такой же параметр, но с постоянным индексом, содержащим те значения, которые были бы получены при вычислении переменного индекса непосредственно перед установлением связи между параметрами.
Если формальный параметр внешней функции используется в качестве имени массива, то соответствующий фактический параметр должен быть именем массива или именем элемента массива (п. 10.1.3).
Если ссылка на функцию приводит к тому, что ее формальный параметр становится связанным (п. 10.2.2) с другим формальным параметром этой же функции или с объектом общего блока, то в этом модуле-функции запрещено определение всех связанных таким способом объектов.
Основные внешние функции. Процессоры ФОРТРАНа должны быть снабжены внешними функциями, перечисленными в табл. 4. Ссылки на эти функции производятся так же, как было описано в п. 8.3.2. Фактические параметры, для которых значение этих функций математически не определено или имеет тип, отличный от приведенного в табл. 4, являются недопустимыми.
Таблица 4
Основная внешняя функция |
Оп ределение |
Число параметров |
Символиче- скос имя |
'Г параметров |
4ІІ функции |
Экспоненциальная функция |
еа |
1 |
ЕХР DEXP СЕХР |
Вещ. Дв. Ком пл. |
Вещ. Дв. Компл. |
Натуральный логарифм |
1п(а) |
1 |
ALOG DLOG CLOG |
Вещ. Дв. Компл. |
Вещ. Дв. Компл. |
Десятичный логарифм |
lg(a) |
1 |
ALOG10 DLOG 10 |
Вещ. Дв. |
Вещ. Дв. |
Продолжение табл. 4
Основная внешняя функция |
Определение |
Число параметров |
Символиче- с кое имя |
т параметров |
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 со следующими ограничениями. Символическое имя определяемой подпрограммы не должно встречаться ни в одном предложении определяющего ее программного модуля, за исключением вхождения этого имени в заголовок подпрограммы в качестве ее имени. Внутри этого модуля формальные параметры не могут встречаться в объявлениях эквивалентности, общих объектов и начальных данных. При своем выполнении модуль-подпрограмма может определять или переопределять свои фактические параметры, что также является результатом выполнения модуля-подпрограммы. Модуль-подпрограмма может содержать любые предложения, за исключением заголовка блока данных, заголовка функции и другого заголовка подпрограммы, а также любого предложения, которое явно или неявно ссылается на определяемую подпрограмму. Модуль-подпрограмма должен содержать по крайней мере один оператор возврата.
Ссылки на внешние подпрограммы. Для ссылки на внешнюю подпрограмму используется оператор вызова подпрограммы (п. 7.1.2.4). Фактические параметры, образующие список фактических параметров этого оператора, должны согласовываться по порядку, числу и типу с соответствующими формальными параметрами модуля-подпрограммы. Исключением из правила согласования типов является использование в качестве фактического параметра текстовой константы.
Фактическим параметром при ссылке на внешнюю подпрограмму может быть:
текстовая константа;
имя переменной;
имя элемента массива;
имя массива;
любое другое выражение;
имя внешней процедуры.
Если фактический параметр является именем внешней функции или именем подпрограммы, то соответствующий формальный параметр должен также использоваться в качестве имени внешней функции или имени подпрограммы соответственно.
Если фактический параметр соответствует формальному параметру, который в подпрограмме определяется или переопределяется, то фактический параметр должен быть либо именем переменной, либо именем элемента массива, либо именем массива.
Выполнение оператора вызова подпрограммы производится путем обращения к соответствующему модулю-подпрограмме. При этом обращении устанавливается связь (п. 10.2.2) между фактическими параметрами и всеми вхождениями формальных параметров в операторы, объявления внутренних функций, а также в качестве регулируемых размеров в модуле-подпрограмме. Если фактический параметр относится к категории, приведенной в подпункте д в указанном выше перечне допустимых фактических параметров, то эта связь параметров устанавливается по значению, а не по наименованию. После установления связи параметров производится выполнение модуля, начиная с первого по порядку его оператора.
Если фактический параметр является именем элемента массива, содержащим переменные в индексе, то при установлении связи с формальным параметром этот фактический параметр может быть заменен на такой же параметр, но с постоянным индексом, содержащим те значения, которые были бы получены при вычислении переменного индекса непосредственно перед установлением связи между параметрами.
Если формальный параметр является именем массива, то соответствующий фактический параметр должен быть именем массива или именем элемента массива (п. 10.1.3).
Если вызов подпрограммы приводит к тому, что ее формальный параметр оказывается связанным (п. 10.2.2) с другим формальным параметром этой же подпрограммы или с объектом общего блока, то внутри подпрограммы запрещено определение всех связанных таким образом объектов.
Модуль-блок данных. Заголовок спецификации блока данных имеет вид
BLOCK DATA
Этот заголовок может встречаться только в качестве первого предложения модуля-спецификации, который называется модулем- блоком данных и служит для придания начальных значений элементам помеченных общих блоков. Этот специальный модуль содержит только объявления типа, эквивалентности, массивов, начальных данных и общих объектов.
Если какому-либо элементу данного общего блока было придано начальное значение в таком модуле, то в него должен быть включен полный набор объявлений спецификаций для всего этого общего блока — даже в том случае, если некоторые из элементов блока не присутствуют в объявлениях начальных данных. В одном таком модуле начальные значения могут быть приданы элементам как одного, так и нескольких общих блоков.
2, 8.5. (Измененная редакция, Изм. № 1).