1.20. ВСТРОЕННЫЕ ФУНКЦИИ

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

Закрыть

Закрыть

Таблица . Элементные числовые функции

Функция                            Тип параметров              Тип результата

Назначение функции

ABS(a)                               Int, Real, Cmp                               Int, Real

Абсолютная величина аргумента. Если а целого типа, то и результат целого типа, в остальных случаях результат будет вещественным

AINT(a[,kind])                          Real                                 REAL(4|kind)

Обрезает вещественную величину а в сторону нуля до целого числа

ANINT(a[, kind])              Real                              REAL(4|kind))

Возвращает в виде вещественной величины целое число, ближайшее к значению аргумента а

NINT(a[, kind})                Real                                INTEGER(4| kind )

Выполняет то же, что и ANINT

CONJG(z)                          Cmp                              COMPLEX

Возвращает комплексное число, сопряженное со значением комплексного аргумента a

DIM(x, у)                          Int, Real                                 Int, Real

Возвращает х – у, если х > у, и 0, если х  у

DPROD(x,y)                     REAL(4)                                  REAL(8)

Возвращает произведение двойной точности

FLOOR(a)                         Real                                INTEGER(4)

Возвращает наибольшее стандартное целое, меньшее или равное значению аргумента а

МОD(a, р)                        Int, Real                                 Int, Real

Возвращает остаток от деления а на р

MODULO(a, p)                 Int, Real                                  Int, Real

Возвращает а по модулю р

SIGN(a, b)                        Int, Real                                  Int, Real

Возвращает абсолютную величину а, умноженную на +1, если b  0, и на –1, если b < 0

В таблице  и далее используются следующие обозначения:

Int

Для INTEGER(1), INTEGER(2), INTEGER(4)

Real

Для REAL(4), REAL(8)

Cmp

Для COMPLEX(4) и COMPLEX(8)

Cmp(4)

Для COMPLEX(4)

Cmp(8)

Для COMPLEX(8)

Log

Для LOGICAL(1), LOGICAL(2), LOGICAL(4)

К справочным функциям относится, например, рассмотренная выше функция логического типа ALLOCATED (array), которая возвращает значение .TRUE., если под массив array выделена память, и .FALSE. – в противном случае.

Следующая программа демонстрирует использование некоторых встроенных числовых функций.

ПРИМЕР:

PROGRAM VSTR_FUNC

REAL :: A=-23.8, A1=-1.234, A2=1.234, A3=-1.789

REAL :: A4=1.789, B=-13.78, ARRAY(1:3)=(/-2.0,4.0,-6.5/)

REAL(8) :: AA=-164.5D-12, X=12.00007856D12,Y=-1.0000023D-7

INTEGER :: NA=-77777, NB=886432, N=478956, M=17

       OPEN(35,FILE='CHISLOV_FUNC.TXT')

       WRITE (35,*) 'ABS(X)'

       WRITE (35,*) ABS(A),ABS(AA), ABS(NA)

       WRITE (35,*) 'ABS(ARRAY)'

       WRITE (35,*) ABS(ARRAY)

       WRITE (35,*) 'AINT(X)'

       WRITE (35,*) AINT(A1),AINT(A2),AINT(A3),AINT(A4)

       WRITE (35,*) 'ANINT(X)'

       WRITE (35,*) ANINT(A1),ANINT(A2),ANINT(A3),ANINT(A4)

       WRITE (35,*) 'NINT(X)'

       WRITE (35,*) NINT(A1),NINT(A2),NINT(A3),NINT(A4)

       WRITE (35,*) 'DIM(X,Y)'

       WRITE (35,*) DIM(X,Y),DIM(NA,NB)

       WRITE (35,*) 'MOD(N,M)'

       WRITE (35,*) MOD(N,M)

       WRITE (35,*) 'MODULO(N,M)'

       WRITE (35,*) MODULO(N,M)

       WRITE (35,*) 'SIGN(A,B)'

       WRITE (35,*) SIGN(A,B), SIGN(A,AA), SIGN(NA,NB)

END

Результат выполнения показан на рисунке 1.13.

Закрыть

Рисунок 1.13. Результат использования встроенных числовых функций

Встроенные функции вычисления максимума и минимума являются элементными и применимы к числовым данным целого и вещественного типа. Имена MAX и MIN являются родовыми. При обращении ко всем встроенным функциям вычисления максимума и минимума требуется более одного фактического параметра.

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

Закрыть

Таблица. Встроенные функции вычисления максимума и минимума

Функция

Тип параметра

Тип результата

Назначение функции

AMAX0(a1,a2[,a3,…])

INTEGER(4)

REAL(4)

Возвращает максимум из двух или более значений

MAX(a1,a2[,a3,…])

Int, Real

Совпадает с типом параметра

Возвращает максимум из двух или более целых или вещественных значений

MAX1(a1,a2[,a3,…])

REAL(4)

INTEGER(4)

Возвращает максимум из двух или более значений

AMIN0(a1,a2[,a3,…])

INTEGER(4)

REAL(4)

Возвращает минимум из двух или более значений

MIN(a1,a2[,a3,…])

Int, Real

Совпадает с типом параметра

Возвращает минимум из двух или более целых или вещественных значений

MIN1(a1,a2[,a3,…])

REAL(4)

INTEGER(4)

Возвращает минимум из двух или более значений

Закрыть

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

Закрыть

ПРИМЕР:

PROGRAM MAX_MIN

REAL :: A=-23.8, A1=-1.234, A2=1.234, A3=-1.789

REAL :: A4=1.789, B=-13.78, ARRAY(1:3)=(/-2.0,4.0,-6.5/)

REAL(8) :: AA=-164.5D-12, X=12.00007856D12,Y=-1.0000023D-7

INTEGER :: NA=-7777701, NB=88643772, N=478956133, M=17

INTEGER :: NARRAY(1:4)=(/-2,177777,45,-8/)

            OPEN(35,FILE='MAX_MIN.TXT')

            PRINT *, 'AMAX0(N, M, NA,NB)'

            PRINT *, AMAX0(N, M, NA,NB)

            PRINT *,'AMAX0(NARRAY)'

            PRINT *,AMAX0(NARRAY,N)

            PRINT *,'AMAX0(NARRAY)'

            PRINT *,AMAX0(NARRAY,N)

            PRINT *, 'MAX(N, M, NA,NB)'

            PRINT *, MAX(N, M, NA,NB)

            PRINT *, 'MAX(A, B, ARRAY,A1)'

            PRINT *, MAX(A, B, ARRAY,A1)

            PRINT *, 'MAX1(A, B, ARRAY,A1)'

            PRINT *, MAX1(A, B, ARRAY,A1,A4)

END

Результат работы этой программы показан на рисунке 1.14

Закрыть

Рисунок 1.14. Результат использования встроенных функций вычисления максимума

Закрыть

Таблица. Встроенные математические функции Фортрана

 

Функция

 

Тип

 

 

Назначение

 

параметров

 

результата

 

Экспонента, логарифм и корень

 

ЕХР(х)

LOG(x)

LOGl0(x)

sqrt(x)

 

Real, Cmp

Real, Cmp

Real

Real, Cmp

 

Real

Real

Real

Real

 

Возвращает Exp(x*x)

Возвращает значение натурального логарифма х Возвращает десятичный логарифм х

 Возвращает квадратный корень из х

Тригонометрические функции

 

SIN(x)

 

Real, Cmp

 

Real

 

Возвращает (в радианах) синус х

SIND(x)

 

Real, Cmp

 

Real

 

Возвращает (в радианах) синус х с двойной точностью

ASIN(x)

 

Real

 

Real

 

Возвращает (в радианах) арксинус х|x|1

 

ASIND(x)

 

Real

 

Real

 

Возвращает (в градусах) арксинус х

COS(x)

 

Real, Cmp

 

Real

 

Возвращает (в радианах) косинус х.

COSD(x)

 

Real, Cmp

 

Real

 

Возвращает (в радианах) косинус х с двойной точностью

ACOS(x)

 

Real

 

Real

 

Возвращает (в радианах) арккосинус х. |x|1

ACOSD(x)

 

Real

 

Real

 

Возвращает (в градусах) арккосинус х

TAN(x)

 

Real

 

Real

 

Возвращает тангенс х

TAND(x)

 

Real

 

Real

 

Возвращает тангенс х с двойной точностью

COTAN(x)

 

Real

 

Real

 

Возвращает котангенс х

 

ATAN(x)

 

Real

 

Real

 

Возвращает (в радианах) арктангенс х

ATAND(x)

 

Real

 

Real

 

Возвращает (в градусах) арктангенс х

ATAN20( x)

 

Real

 

Real

 

Возвращает (в радианах) арктангенс у/х

ATAN2D(y, x)

Real

 

Real

 

Возвращает (в градусах) арктангенс у/х

Гиперболические тригонометрические функции

 

SINH((x)

 

Real

 

Real

 

Гиперболический синус для выраженного в радианах х

COSH(x)

 

Real

 

Real

 

Гиперболический косинус для выраженного в радианах х

TANH(x)

 

Real

 

Real

 

Гиперболический тангенс для выраженного в радианах х