Страница 1 из 3
ПРОГРАММЫ, ПОДПРОГРАММЫ И ФУНКЦИИ.
ОБ ЭТОЙ ЧАСТИ.
Эта часть расширяет описание операторов PROGRAM, SUBROUTINE,
FUNCTION и функции-оператора, приведенное в части 3. В ней приво-
дится информация о типах функций и взаимодействии формальных и
фактических параметров при вызове функции или подпрограммы.
Содержание.
1.ОСНОВНАЯ ПРОГРАММА. . . . . . . . . . . . . . . . . . . . 5-1
2.ПОДПРОГРАММЫ. . . . . . . . . . . . . . . . . . . . . . . 5-1
3.ФУНКЦИИ. . . . . . . . . . . . . . . . . . . . . . . . . . 5-1
3.1.Внешние функции. . . . . . . . . . . . . . . . . . . . . 5-2
3.2.Встроенные функции. . . . . . . . . . . . . . . . . . . 5-2
3.3.Функции-операторы. . . . . . . . . . . . . . . . . . . . 5-8
4.ПАРАМЕТРЫ. . . . . . . . . . . . . . . . . . . . . . . . . 5-8
5.ПЕРЕДАЧА ЦЕЛЫХ ПАРАМЕТРОВ. . . . . . . . . . . . . . . . . 5-9
1.ОСНОВНАЯ ПРОГРАММА.
Основная программа - это любая программная единица, у которой
первый оператор - это не FUNCTION,SUBROUTINE или BLOCK DATA. Первым
оператором основной программы может быть оператор PROGRAM. Если у
основной программы нет оператора PROGRAM, ей будет присвоено имя
MAIN. Имя MAIN тогда не может быть использовано как имя любого
другого глобального объекта.
Выполнение программы всегда начинается с первого выполняемого
оператора основной программы. Соответственно, в каждой выполняемой
программе должна быть только одна основная программа.
Для дополнительной информации о программах и операторе PROGRAM
смотрите часть 3 "Операторы".
2.ПОДПРОГРАММЫ.
Подпрограмма - это программная единица, которая может быть
вызвана из другой программной единицы c помощью оператора CALL.
Будучи вызванной, подпрограмма производит набор действий,
определенных ее выполняемыми операторами, и затем возвращает управ-
ление на оператор, следующий непосредственно за вызвавшим ее
оператором, или на оператор, определенный как переменный возврат
(смотрите оператор CALL в части 3).
Подпрограмма не возвращает величину прямо, хотя величины могут
быть возвращены в вызывающую программную единицу через параметры
и COMMON-блоки.
Для более подробной информации о подпрограммах смотрите часть
3 "Операторы".
3.ФУНКЦИИ.
На функцию ссылаются в выражении, и она возвращает величину,
которая используется при вычислении этого выражения. Существует
три вида функций:
1. Внешние функции
2. Встроенные функции
3. Функции-операторы.
Каждый из них описан более подробно в дальнейших параграфах.
Ссылка на функцию может появиться в арифметическом или логи-
ческом выражении. Когда выполняется ссылка на функцию, функция
вызывается, а величина результата используется как операнд в вы-
ражении, которое содержит ссылку на функцию. Форма ссылки на фун-
кцию следующая:
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
имя-функции ([пар[,пар]...])
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
имя-функции - это определенное пользователем имя внешней или
встроеной функции или функции-оператора.
пар - это фактический параметр.
Правила для параметров функций аналогичны правилам для под-
программ (за исключением переменного возврата, который недопустим)
и приведены в описании оператора CALL в части 3. Некоторые допол-
нительные ограничения, применимые для функций-операторов и встро-
еных функций, описаны ниже в этой части.
3.1.Внешние функции.
Внешняя функция определена программной единицей функции. Она
начинается оператором FUNCTION и заканчивается оператором END.
Она может содержать любые виды операторов, кроме PROGRAM, FUNCTION,
SUBROUTINE или BLOCK DATA.
3.2.Встроенные функции.
Встроенные функции определены в языке МС-Фортран и доступны
для использования в программе на МС-Фортране. В таблице 5-1 при-
ведены имена, назначения, типы параметров и типы функций для всех
встроенных функций, допустимых в МС-Фортране, с дополнительными
примечаниями после таблицы.
Оператор IMPLICIT не может изменять тип встроенной функции.
Для этих встроенных функций, которые допускают различные типы па-
раметров, при одном обращении все параметры должны быть одного и
того же типа.
Имя встроенной функции может появиться в операторе INTRINSIC.
Имя встроенной функции может также появиться в операторе описания
типа, но только если тип тот же самый, что и стандартный тип этой
встроенной функции.
Параметры некоторых встроенных функций ограничены назначением
этих функций. Например, логарифм отрицательного числа математически
не определен и поэтому недопустим.
Многие встроенные функции имеют общие имена, что позволяет
ссылаться на функцию без уточнения типа параметров при ссылке.
Когда ссылаются на общее имя компилятор выбирает соответствующую
относительно специфическую функцию в зависимости от типа парамет-
ра(ов) в ссылке на функцию.
Например, функция INT - это общее имя шести чуть отличающихся
функций: одна с собственным именем, совпадающим с основным, три с
особыми именами (IFIX,IDINT,ICHAR) и две - безымянных (для типов
данных COMPLEX*8 и COMPLEX*16).
Все углы в таблице 5-1 выражены в радианах. Все параметры в
ссылке на встроенную функцию должны быть того же типа. Х и У -
действительные, Z - комплексное, I и J - целые, а С,С1 и С2 - сим-
вольные величины. Числа в квадратных скобках в колонке 1 ссылаются
на примечания после таблицы.
В дальнейшем REAL эквивалентно REAL*4, DOUBLE PRECISION -
REAL*8, a COMPLEX - COMPLEX*8. Если в указанном типе параметра -
INTEGER, то тип может быть INTEGER*2 или INTEGER*4. Если указанный
тип функции - INTEGER, тип будет целый по умолчанию определенный
метакомандой $STORAGE. (Для более полной информации смотрите часть 6).
ЙННННННННННННЛНННННННННННННННННННННННЛННННННННННЛННННННННН»
є ИМЯ є НАЗНАЧЕНИЕ єТИП ПАРАМ.єТИП Ф є
МННННННННННННКНННННННННННННННННННННННКННННННННННКННННННННН№
є Преобразование типов є
є INT(общее) є преобразует в INTEGER є любой єINTEGER є
є INT2(X) є преобразует в INTEGER*є любой єINTEGER* є
є INT4(X) є преобразует в INTEGER*є любой єINTEGER* є
є INT(X) [1] є преобразует в INTEGER є REAL*4 єINTEGER є
є IFIX(X) є преобразует в INTEGER є REAL*4 єINTEGER є
є IDINT(X) є преобразует в INTEGER є REAL*8 єINTEGER є
є ICHAR(C)[S]є преобразует в INTEGER є CHARACTERєINTEGER є
є REAL(общее)є преобразует в REAL*4 є любой єREAL*4 є
є REAL(X) [2]є преобразует в REAL*4 є INTEGER єREAL*4 є
є є є REAL*4 єREAL*4 є
є DREAL(Z) є преобразует COMPLEX*16єCOMPLEX*16є REAL*8 є
є є в REAL*8 є є є
є FLOAT(I) є преобразует в REAL*4 є INTEGER є REAL*4 є
є CHAR(X) є преобразует в символ. є INTEGER єCHARACTERє
є SNGL(X) є преобразует в REAL*4 є REAL*8 є REAL*4 є
є DBLE(общее)є преобразует в REAL*8 є любой є REAL*8 є
є CMPLX(Z[,Y]є преобразует в COMPLEX*є любой єCOMPLEX*8є
є [4]є є є є
є DCMPLX(Z[,Yє преобразует в COMPLEX*є любой єCOMPLEX*1є
є є
є Взятие целой части є
є AINT(общее)є целая часть от REAL є REAL*4 є REAL*4 є
є AINT(X) є целая часть от REAL*4 є REAL*8 є REAL*8 є
є є є REAL*4 є REAL*4 є
є DINT(X) є целая часть от REAL*8 є REAL*8 є REAL*8 є
є є
є Округление є
є ANINT(общееє округление REAL є REAL*4 є REAL*8 є
є є є REAL*8 є REAL*8 є
є ANINT(X) є округление REAL*4 є REAL*4 є REAL*4 є
є DNINT(X) є округление REAL*8 є REAL*8 є REAL*8 є
є є
є Округление в целое є
є NINT(общее)є округление с переводомє REAL*4 є INTEGER є
є є в целое є REAL*8 є INTEGER є
є NINT(X) є округление с переводомє REAL*4 є INTEGER є
є є в целое є є є
є IDNINT(X) є округление с переводомє REAL*8 є INTEGER є
є є в целое є є є
є є
є Абсолютная величина є
є ABS(общее) є абсолютная величина є любой є любой є
є IABS(I) є абсолютное целое є INTEGER є INTEGER є
є ABS (X) є абсолютное REAL*4 є REAL*4 є REAL*4 є
є DABS(X) є абсолютное REAL*8 є REAL*8 є REAL*8 є
є CABS(Z) є абсолютное COMPLEX є COMPLEX*8є REAL*4 є