Встроенные функции и ссылки на них. Символические имена встроенных функций заранее известны процессору и, если они удовлетворяют условиям, изложенным в п. 10.1.7, им приписывается специальный смысл и тип в соответствии с табл. 3.
Таблица 3
Встроенная функция |
Определение |
Число параметров |
Символическое имя |
Тип |
|
параметров |
функции |
||||
Абсолютное значение |
1 а| |
1 |
ABS |
Вещ. |
Вещ. |
IABS |
Цел. |
Цел. |
|||
Преобразование в плавающую форму |
Преобразование от целого к вещественному |
] |
FLOAT |
Цел. |
Вещ. |
Преобразование в фиксированную форму |
Преобразование от вещественного к целому |
1 |
IFIX |
Вещ. |
Цел. |
Передача знака |
sign(a2) умножается на [а,| |
2 |
SIGN |
Вещ. |
Вещ. |
ISIGN |
Цел. |
Цел. |
Для ссылки на встроенную функцию используется ее указатель в качестве первичного выражения в арифметическом выражении. Фактические параметры, образующие список фактических параметров в указателе функции, должны согласовываться по порядку, числу и типу со спецификациями, данными в табл. 3, и могут быть любыми выражениями соответствующих типов. Значение встроенных функций SIGN и ISIGN не определено, если значение второго параметра равно нулю.
Вычисление значения указателя встроенной функции заключается в выполнении действий, определенных в табл. 3, над значениями фактических параметров. Результирующее значение принимается в качестве значения указателя функции и тем самым становится доступным в выражении, содержащем этот указатель.
Внешние функции. Внешняя функция определяется вне того программного модуля, который ссылается на нее. Для определения внешней функции средствами Базисного ФОРТРАНа служит отдельный программный модуль, называемый модулем- функцией; первым предложением этого модуля является заголовок функции.
Структура модулей-функций. Заголовок функции имеет вид
FUNCTION f(aia2,...,atl)
(f — символическое имя определяемой функции;
каждое а! — символическое имя, называемое формальным параметром) .
Каждый формальный параметр должен быть либо именем переменной, либо именем массива. Все формальные параметры в одном заголовке функции должны быть различными.
Модули-функции строятся в соответствии с п. 9.1.6 со следующими ограничениями. Символическое имя определяемой функции должно также встречаться в этом модуле в качестве имени переменной. При каждом выполнении модуля эта переменная должна быть определена, причем впоследствии на эту переменную можно ссылаться или переопределять ее (см. разд. 10). Значение этой переменной к моменту выполнения в данном модуле любого оператора возврата называется значением определяемой функции. Символическое имя определяемой функции не должно встречаться ни в одном объявлении этого программного модуля, за исключением вхождения в заголовок функции в качестве ее имени. Формальные параметры не могут встречаться в объявлениях эквивалентности или общих блоков в этом модуле-функции. Модуль- функция при своем выполнении не может определять или переопределять один или несколько своих фактических параметров или элементов общего блока. Модуль-функция может содержать любые предложения, за исключением заголовка подпрограммы, другого заголовка функции, а также любого предложения, которое явно или неявно ссылается на определяемую функцию. Модуль-функция должен содержать по крайней мере один оператор возврата.Ссылки на внешние функции. Для ссылки на внешнюю функцию используется ее указатель (п. 5.2) в качестве первичного выражения в арифметическом выражении. Фактические параметры, образующие список фактических параметров в указателе функции, должны согласовываться по порядку, числу и типу с соответствующими формальными параметрами модуля-функции. Фактическим параметром в указателе внешней функции может быть:
имя переменной;
имя элемента массива;
имя массива;
любое другое выражение.
Вычисление значения указателя внешней функции производится путем обращения к соответствующему модулю-функции. При этом обращении устанавливается связь (и. 10.2.2) между фактическими параметрами и всеми вхождениями формальных параметров в операторы и в объявления внутренних функций в том модуле, который определяет указываемую функцию. Если фактический параметр является выражением, то эта связь параметров устанавливается по значению, а не по наименованию. После установления этих связей производится выполнение модуля, начиная с первого по порядку его оператора.
Если фактический параметр является именем элемента массива, содержащим переменные в индексе, то при установлении связи с формальным параметром этот фактический параметр может быть заменен на такой же параметр, но с постоянным индексом, содержащим те значения, которые были бы получены при вычислении переменного индекса непосредственно перед установлением связи между параметрами.
Если формальный параметр внешней функции используется в качестве имени массива, то соответствующий фактический параметр должен быть именем массива.
Основные внешние функции. Процессоры Базисного ФОРТРАНа должны быть снабжены внешними функциями, перечисленными в табл. 4. Ссылки на эти функции производятся так же, как было описано в п. 8.3.2. Фактические параметры, для которых значение этих функций математически не определено или имеет тип, отличный от приведенного в таблице, являются недопустимыми.
Подпрограммы. Внешняя подпрограмма определяется вне того программного модуля, который ссылается на нее. Для определения внешней подпрограммы средствами Базисного ФОРТРАНа служит отдельный программный модуль, называемый модулем-подпрограммой; первым предложением этого модуля является заголовок подпрограммы.
Таблица 4
Основная внешняя фун кция |
Определение |
Число параметров |
Символическое имя |
Тип |
|
параметров |
функции |
||||
Экспоненциальная функция |
еа |
1 |
ЕХР |
Вещ. |
Вещ. |
Натуральный логарифм |
1п(а) |
1 |
A LOG |
Вещ. |
Вещ. |
Тригонометрический синус |
sin (а) |
1 |
SIN |
Вещ. |
Вещ. |
Тригонометрический косинус |
cos(а) |
1 |
COS |
Вещ. |
Вещ. |
Гиперболический тангенс |
tanh(a) |
I |
TANH |
Вещ. |
Вещ. |
Квадратный корень |
(а)1/2 |
1 |
SQRT |
Вещ. |
Вещ. |
Арктангенс |
arctan (а) |
1 |
ATAN |
Вещ. |
Вещ. |
Структура модулей-подпрограмм. Заголовок подпрограммы имеет вид
SUBROUTINE s(a1,a2,...,aI])
или
SUBROUTINE s
(s — символическое имя определяемой подпрограммы;
каждое — символическое имя, называемое формальным параметром) .
Каждый формальный параметр должен быть именем переменной либо именем массива. Все формальные параметры в одном заголовке подпрограммы должны быть различными.
Модули-подпрограммы строятся в соответствии с п. 9.1.6 со следующими ограничениями. Символическое имя определяемой подпрограммы не должно встречаться ни в одном предложении определяющего ее программного модуля, за исключением вхождения этого имени в заголовок подпрограммы в качестве ее имени. Внутри этого модуля формальные параметры не могут встречаться в объявлениях эквивалентности. При своем выполнении модуль- подпрограмма может определять или переопределять свои фактические параметры, что также является результатом выполнения модуля-подпрограммы. Модуль-подпрограмма может содержать любые предложения, за исключением заголовка функции и другого заголовка подпрограммы, а также любого предложения, которое явно или неявно ссылается на определяемую подпрограмму. Модуль-подпрограмма должен содержать по крайней мере один оператор возврата.
Ссылки на внешние подпрограммы. Для ссылки на внешнюю подпрограмму используется оператор вызова подпрограммы (п. 7.1.2.4). Фактические параметры, образующие список фактических параметров этого оператора, должны согласовываться по порядку, числу и типу с соответствующими формальными параметрами модуля-подпрограммы.
Фактическим параметром при ссылке на внешнюю подпрограмму может быть:
имя переменной;
имя элемента массива;
имя массива;
любое другое выражение.
Если фактический параметр соответствует формальному параметру, который в подпрограмме определяется или переопределяется, то фактический параметр должен быть либо именем переменной, либо именем элемента массива, либо именем массива.
Выполнение оператора вызова подпрограммы производится путем обращения к соответствующему модулю-подпрограмме. При этом обращении устанавливается связь (п. 10.2.2) между фактическими параметрами и всеми вхождениями формальных параметров в операторы и объявления внутренних функций. Если фактический параметр относится к категории, приведенной в подпункте г в указанном выше перечне допустимых фактических параметров, то эта связь параметров устанавливается по значению, а не по наименованию. После установления связи параметров производится выполнение модуля, начиная с первого по порядку его оператора.
Если фактический параметр является именем элемента массива, содержащим переменные в индексе, то при установлении связи с формальным параметром этот фактический параметр может быть заменен на такой же параметр, но с постоянным индексом, содержащим те значения, которые были бы получены при вычислении переменного индекса непосредственно перед установлением связи между параметрами.
Если формальный параметр является именем массива, то соответствующий фактический параметр должен быть именем массива.
Если вызов подпрограммы приводит к тому, что ее формальный параметр оказывается связанным (п. 10.2.2) с другим формальным параметром этой же подпрограммы или с объектом общего блока, то внутри подпрограммы запрещено определение всех связанных таким способом объектов.
Модуль-блок данных — отсутствует; определение — по ГОСТ 23056—78.
ПРОГРАММА
Строение программных модулей. Программный модуль состоит из заголовка модуля и тела модуля.
(Измененная редакция, Изм. № 1).
Раздел операторов. Раздел операторов должен содержать хотя бы один оператор и может (но не обязан) содержать объявления форматов. Раздел операторов не должен содержать объявлений спецификаций.
Тело модуля. Тело модуля состоит из (возможно, пустой) совокупности объявлений спецификаций, за которой могут (но не обязаны) следовать совокупность объявлений внутренних функций, за которой следует раздел операторов с заключительной строкой после него. Объявления спецификаций должны располагаться в следующем порядке: объявления массивов, объявления общих объектов, объявления эквивалентности.
Программный модуль. Программный модуль является либо головным модулем (п. 9.1.4), либо модулем-процедурой (п. 9.1.6).
Головной модуль. Головной модуль состоит только из тела модуля.
Модуль-блок данных — отсутствует; определение—по ГОСТ 23056—78.
Модуль-процедура. Модуль-процедура состоит из заголовка функции или заголовка подпрограммы, за которым следует тело модуля.
Выполнимая программа. Выполнимая программа включает в себя головной модуль, а также произвольное количество других программных модулей и (или) внешних процедур (разд. 2).
(Измененная редакция, Изм. № 1).
Нормальный порядок выполнения. Выполнение любой выполнимой программы начинается с первого по порядку оператора головного модуля. При обращении к программному модулю его выполнение начинается с первого по порядку оператора этого модуля. Если очередной оператор не является оператором перехода, условным арифметическим оператором, оператором возврата, оператором останова или закрывающим оператором тела цикла, то по завершении выполнения этого оператора начинается выполнение непосредственно следующего за ним оператора. Порядок выполнения, определяемый каждым из перечисленных выше операторов, описан в разд. 7. В разделе операторов не может содержаться оператор, который никогда не может быть выполнен.ВНУТРИ- И МЕЖМОДУЛЬНЫЕ СООТНОШЕНИЯ
Символические имена. Символическое имя было определено (п. 3.5) как последовательность, содержащая от одной до пяти буквенно-цифровых символов, первый из которых должен быть буквой. Последовательности символов, образующие описатели полей в объявлениях формата или начальные ключевые слова конкретных типов предложений, например, GOTO, READ, FORMAT, не являются символическими именами в этих позициях и не образуют начала символических имен. В любом программном модуле символическое имя (возможно, дополненное индексом) должно обозначать элемент одного (и, как правило, только одного) из следующих классов: