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

Таблица 3

Встроенная функция

Определение

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

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

Тип

парамет­ров

функции

Абсолютное значение

1 а|

1

ABS

Вещ.

Вещ.

IABS

Цел.

Цел.

Преобразование в плавающую форму

Преобразование от це­лого к вещественному

]

FLOAT

Цел.

Вещ.

Преобразование в фиксированную форму

Преобразование от ве­щественного к целому

1

IFIX

Вещ.

Цел.

Передача знака

sign(a2) умножается на [а,|

2

SIGN

Вещ.

Вещ.

ISIGN

Цел.

Цел.



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

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

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

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

FUNCTION f(aia2,...,atl)

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

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

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

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

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

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

имя массива;

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

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

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

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

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

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

Таблица 4

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

Определение

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

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

Тип

парамет­ров

функции

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

еа

1

ЕХР

Вещ.

Вещ.

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

1п(а)

1

A LOG

Вещ.

Вещ.

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

sin (а)

1

SIN

Вещ.

Вещ.

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

cos(а)

1

COS

Вещ.

Вещ.

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

tanh(a)

I

TANH

Вещ.

Вещ.

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

(а)1/2

1

SQRT

Вещ.

Вещ.

Арктангенс

arctan (а)

1

ATAN

Вещ.

Вещ.



  1. Структура модулей-подпрограмм. Заголовок подпро­граммы имеет вид

SUBROUTINE s(a1,a2,...,aI])
или
SUBROUTINE s

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    1. Модуль-блок данных — отсутствует; определение — по ГОСТ 23056—78.

  1. ПРОГРАММА

    1. Строение программных модулей. Программный модуль состоит из заголовка модуля и тела модуля.

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

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

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

  3. Программный модуль. Программный модуль является либо головным модулем (п. 9.1.4), либо модулем-процедурой (п. 9.1.6).

  4. Головной модуль. Головной модуль состоит только из тела модуля.

  5. Модуль-блок данных — отсутствует; определение—по ГОСТ 23056—78.

  6. Модуль-процедура. Модуль-процедура состоит из заго­ловка функции или заголовка подпрограммы, за которым следу­ет тело модуля.

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

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

  1. Нормальный порядок выполнения. Выполнение любой выполнимой программы начинается с первого по порядку опера­тора головного модуля. При обращении к программному модулю его выполнение начинается с первого по порядку оператора этого модуля. Если очередной оператор не является оператором пере­хода, условным арифметическим оператором, оператором возвра­та, оператором останова или закрывающим оператором тела цик­ла, то по завершении выполнения этого оператора начинается выполнение непосредственно следующего за ним оператора. По­рядок выполнения, определяемый каждым из перечисленных вы­ше операторов, описан в разд. 7. В разделе операторов не может содержаться оператор, который никогда не может быть выпол­нен.ВНУТРИ- И МЕЖМОДУЛЬНЫЕ СООТНОШЕНИЯ

    1. Символические имена. Символическое имя было опреде­лено (п. 3.5) как последовательность, содержащая от одной до пяти буквенно-цифровых символов, первый из которых должен быть буквой. Последовательности символов, образующие описатели полей в объявлениях формата или начальные ключевые слова конкрет­ных типов предложений, например, GOTO, READ, FORMAT, не являются символическими именами в этих позициях и не образу­ют начала символических имен. В любом программном модуле символическое имя (возможно, дополненное индексом) должно обозначать элемент одного (и, как правило, только одного) из следующих классов: