 |
ЙННННННННННННЛНННННННННННННННННННННННЛННННННННННЛННННННННН»
є ИМЯ є НАЗНАЧЕНИЕ єТИП ПАРАМ.єТИП Ф є
МННННННННННННКНННННННННННННННННННННННКННННННННННКННННННННН№
є Конец файла [8] є
є EOF(I) є целый конец файла є INTEGER є LOGICAL є
ИННННННННННННКНННННННННННННННННННННННКННННННННННКНННННННННј
Таблица 5-1. Встроенные функции.
Примечания к таблице 5-1:
1. Для Х типа INTEGER INT(X)=X. Для Х типа REAL или REAL*8, если
Х - неотрицательно, то INT(X) - наибольшее целое, не превы-
шающее Х; а если Х - отрицательно, то INT(X) - наибольшее
отрицательное целое не меньшее чем Х. Для Х типа REAL IFIX(X)
то же самое, что INT(X).
2. Для Х типа REAL REAL*(X)=X. Для Х типа INTEGER или REAL*8
REAL(X) это значащая часть наибольшей точности Х, которую
может содержать данный тип REAL. Для Х типа INTEGER FLOAT(X) -
то же самое, что REAL(X).
3. Для Х типа REAL*8 DBLE(X)=X. Для Х типа INTEGER или REAL
DBLE(X) - это значащая часть наибольшей точности Х, которую
может содержать тип данных двойной точности.
4. COMPLEX и DCMPLX могут иметь один или два параметра. Если ис-
пользован один параметр, он может быть типа
INTEGER, REAL, DOUBLE PRECISION, COMPLEX или DOUBLE PRECISION
COMPLEX. Если использованы два параметра, то они должны быть
одного и того же типа и при этом допустимы типы INTEGER, REAL
или DOUBLE PRECISION.
При Z=COMPLEX*8, COMPLEX(Z)=Z. Для Z=INTEGER, REAL и REAL*8
COMPLEX(Z)=комплексной величине, действительная часть которой
REAL(Z), а мнимая часть равна нулю.
COMPLEX(X,Y)= комплексной величине, действительная часть ко-
торой - REAL(X), а мнимая - REAL(Y).
При Z=COMPLEX*16, DCMPLX(Z)=Z. Для Z=INTEGER, REAL и REAL*8
DCMPL(Z)=комплексной величине, у которой действительная часть
- REAL*8, а мнимая равна нулю. Для Z=COMPLEX*8 DCMPLX(Z) имеет
действительную часть равной DBLE(Z), а мнимую равной
DBLE(AIMAG(Z)).
DCMPLX(X,Y)=комплексной величине, у которой действительная
часть - REAL*8(X), а мнимая - REAL*8(Y).
5. ICHAR преобразует символьную величину в целую. Целая величина
символа - это внутреннее представление символа в коде ASCII,
лежащее в диапазоне от 0 до 255.
Для любых двух символов С1 и С2 (С1.LE.C2) будет .TRUE. тогда
и только тогда если (ICHAR(C1).LE.ICHAR(C2)) есть .TRUE.
Функция CHAR(I) возвращает 1-й символ таблиц ASCII. Это ве-
личина типа CHARACTER длиной один символ, при этом I должно
быть целым выражением, величина которого принадлежит диапазону
0уiу255.
ICHAR(CHAR(I))=I для 0уIу255
CHAR(ICHAR(C))=C для любого С из набора ASCII
6. DIM(X,Y) - это Х-Y, если X>Y, или нуль в противном случае.
7. LGE(X,Y) возвращает .TRUE. если Х=Y или если Х следует за Y
в таблице кодов ASCII; иначе возвращается .FALSE.
LGT(X,Y) возвращает .TRUE. если Х следует за Y в таблице кодов
ASCII; иначе возвращается .FALSE.
LLE(X,Y) возвращает .TRUE. если X=Y или если Х предшевствует
Y в таблице ASCII; иначе возвращается .FALSE.
LLT(X,Y) возвращает .TRUE. если Х предшевствует Y в таблице
ASCII; иначе возвращается .FALSE.
Если у операндов неравная длина, то более короткий дополняется
справа пробелами.
8. EOF(X) возвращает .TRUE. если устройство, определенное этим
параметром находится на или после записи конец-файла; иначе
возвращается .FALSE. Величина Х должна соответствовать откры-
тому файлу или нулю, что соответствует экрану или клавиатуре.
3.3.Функции-операторы.
Функция-оператор определена единственным оператором и по виду
подобна оператору присваивания. Функция-оператор может появиться
только после операторов описания и перед любыми выполняемыми опера-
торами в программной единице.
Функция-оператор не является выполняемым оператором, так как
она не выполняется, как стоящая первой в конкретной программной
единице. Однако, тело функции-оператора используется для определе-
ния значения функции-оператора. Она выполняется, как и любая другая
функция при вычислении ссылки на функцию в выражении.
Для информации о синтаксисе и использовании функции-оператора
смотрите часть 3 "Операторы".
4.ПАРАМЕТРЫ.
Формальный параметр - это имя, с помощью которого параметр
передается функции или подпрограмме; фактический параметр - это
указанная переменная, выражение, массив и т.д., передаваемый
процедуре при конкретном ее вызове. Взаимодействие между формаль-
ными и фактическими параметрами в функции или подпрограмме детально
раскрывается ниже.
Параметры передают величины и берут их из процедуры ссылочным
образом. Число действительных параметров должно совпадать с числом
формальных параметров и при этом их типы должны быть согласованы.
На входе в подпрограмму или функцию фактические параметры
связываются с формальными, во многом подобно тому как оператор
EQUIVALENCE связывает два или более массива или переменные, а
оператор COMMON в двух или нескольких программных единицах связы-
вает списки переменных. Эта связь действует, пока не закончилось
выполнение подпрограммы или функции. Поэтому присвоение величины
формальному параметру во время выполнения подпрограммы или функции
может изменить величину соответствующего фактического параметра.
Если фактический параметр - константа, ссылка на функцию или
выражение, а не простая переменная, то присвоение величины соот-
ветствующему формальному параметру недопустимо и может вызвать
непредсказуемые последствия. В частности, присвоение величины фор-
мальному параметру типа CHARACTER, когда фактический параметр -
литерал, может вызвать ненормальное поведение.
Если фактический параметр - выражение, то оно вычисляется
немедленно, еще до установления связи формальных и фактических
параметров. Если фактический параметр - элемент массива, его ин-
дексные выражения вычисляются тоже до установления связи и остаются
постоянными во время выполнения процедуры, даже если они содержат
переменные, которые переопределяются во время выполнения процедуры.
Формальный параметр, описанный как переменная, может быть
связан с фактическим параметром - переменной, элементом массива,
выражением. Формальный параметр, описанный как переменный возврат
(*) может быть связан с определителем переменного возврата (*n) в
операторе CALL и является повторяемым.
Формальный параметр, описанный как массив, может быть связан
с фактическим параметром, являющимся массивом или элементом мас-
сива. Число и размер размерностей формального параметра могут быть
отличны от этих характеристик фактического параметра, но любая
ссылка на формальный массив должна быть в пределах памяти, отве-
денной под фактический массив. Когда ссылка на элемент выходит за
границы, это не фиксируется как ошибка при исполнение программы
на МС-Фортране и результат непредсказуем.
Формальный параметр может быть также связан с внешней подпрог-
рвммой, функцией или встроенной функцией, если он используется в
теле процедуры как ссылка на подпрограмму или функцию или он по-
является в операторе EXTERNAL.
Соответствующий фактический параметр должен быть внешней под-
программой или функцией, объявленной в операторе EXTERNAL или
встроенной функцией, которую допускается связывать с формальным
параметром процедуры. Встроенные функции должны быть объявлены в
операторе INTRISIC в программной единице, где они используются как
фактические параметры.
Все встроенные функции, за исключением нижеуказанных, могут
быть связаны с формальными параметрами процедуры:
INT SNGL CHAR MAX0 MIN0
INT2 REAL LGE AMAX1 AMIN1
INT4 DBLE LGT DMAX1 DMIN1
IFIX COMPLX LLE AMAX0 AMIN0
IDINT DCMPLX LLT MAX1 MIN1
FLOAT ICHAR MAX MIN
5.ПЕРЕДАЧА ЦЕЛЫХ ПАРАМЕТРОВ.
Переменная INTEGER*2 не может быть передана формальному
параметру INTEGER*4, а переменная INTEGER*4 не может быть передана
формальному параметру INTEGER*2. Передача неверного типа переменной
порождает ошибку компиляции. Вы должны использовать встроенные
функции INT4 и INT2. Также при действии $STORAGE:4 по умолчанию
выражения с параметрами INTEGER*2 будут иметь результат типа
INTEGER*4. Следующая программа:
SUBROUTINE S(I)
INTEGER*2 I
. . .
END
INTEGER*2 J,K
CALL S(J+K)
дает ошибку, поэтому J+K - INTEGER*4. Вы должны написать вызов
подпрограммы так
CALL S(INT2(J+K))
Компилятор при оптимизации понижает степень точности арифме-
тики, если это не влияет на результат и не установлено $DEBUG.
Например, если не установлено $DEBUG, арифметика в
INTEGER2 I,J,K
I=J+K
- 16-ти разрядная арифметика, даже если определено $STORAGE:4.
Использование $STORAGE:4 не действует на выражения INTEGER*2 при
использовании в нем только операторов +, - или *, поэтому что ре-
зультат их одинаковый как в 16-разрядной, так и в 32-разрядной
арифметике.
Целые параметры, которые передаются величинами (смотрите
"Атрибуты" в части 7 для определения атрибутов, которые позволяют
передавать параметры величинами), не являются объектами таких же
ограничений. Параметр обрабатывается, как если бы ему была присво-
ена временно переменная соответствующего типа, и временная пере-
менная затем передается как параметр. Правила присвоения для
величин параметров те же самые, что и при присваивании. Вы можете,
например, передать действительную величину целому параметру.
|