Главная страница
Навигация по странице:

  • 13. Стандартные функции Fortran

  • Курс лекций по дисциплине Программирование на языке Фортран


    Скачать 0.98 Mb.
    НазваниеКурс лекций по дисциплине Программирование на языке Фортран
    Дата02.09.2019
    Размер0.98 Mb.
    Формат файлаdoc
    Имя файлаFortran01.doc
    ТипКурс лекций
    #85698
    страница4 из 15
    1   2   3   4   5   6   7   8   9   ...   15
    [sattrs]] [ ( [nformal [[attrs]][, nformal [[attrs]]...] ) ]

    Sname – определенное пользователем, глобальное внешнее имя п/п.

    Sattrs – список атрибутов (через запятую и в квадратных скобках [ ]).

    Nformal – определенное пользователем имя формального параметра. Если их несколько, то разделение запятыми.

    Attrs – список атрибутов (через запятую и в квадратных скобках [ ]).

    Вызов п/п осуществляется по ее имени оператором CALL.

    CALL sname ( [nfact] [, nfact] ... )

    Nfact – определенное пользователем имя фактического параметра.

    При вызове п/п между фактическими и формальными параметрами устанавливается соответствие.

    Фактические параметры:

    • выражения;

    • буквальные и символические константы;

    • переменные;

    • элементы массивов и массивы;

    • строки;

    • встроенные функции.

    Формальные параметры:

    • переменные п/п;

    • массивы;

    • символы *.

    Требования к фактическим параметрам:

    • количество фактических параметров д.б. равно числу формальных;

    • типы и длины фактических и формальных параметров должны совпадать. Соответствие между параметрами устанавливается по порядку их следования в списках (1-му формальному параметру соответствует 1-й фактический и т.д.);

    • если формальный параметр – имя массива, то соответствующий фактический параметр – имя массива или элемент массива;

      REAL a(8)

      ...

      CALL p1(a)

      ...

      SUBROUTINE p1(b)

      REAL b(5)

      ! При вызове p1: bi=ai, i=1,5

      REAL a(3,3)

      ...

      CALL p1(a)

      ...

      SUBROUTINE p1(b)

      REAL b(5) ! bi=ai, i=1,5

      ! При вызове p1:

      b1=a11, b2=a21, b3=a31, b4=a12, b5=a22

      REAL a(4,4)

      ...

      CALL p1(a,3)

      ...

      SUBROUTINE p1(b,x)

      INTEGER x

      REAL b(4,x) ! Вместе со значениями передается и последняя размерность массива




    • если формальный параметр – имя переменной, то соответствующий фактический параметр м.б. переменной, выражением (в т.ч. с использованием функций) или константой (если формальный параметр не получает новых значений в п/п).

    При обращении к п/п фактические параметры могут ассоциироваться с формальными по значению (1 – value) или по ссылке (2 – reference).

    1) Фактические и формальные параметры обмениваются значениями, т.е. при вызове п/п значения фактических параметров присваиваются соответствущим формальным, после завершения выполнения п/п, наоборот (если фактические параметры не функции или константы). Т.о. передаваемые значения дублируются в ОЗУ.

    2) Формальным параметрам передается не значение, а ссылка (адрес в ОЗУ) на значение фактического параметра. Т.о. все действия над формальным параметром есть в действительности действия над соответствующим фактическим параметром.

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

    CALL s(a.AND.b,c)

    ...

    SUBROUTINE s(log,c)

    LOGICAL log

    CALL s(int2(a**3+b+3.64))

    ...

    SUBROUTINE s(d)

    INTEGER*2 d

    int2 – ф-ция преобразования к целому 2-х байтовому типу

    Если фактический параметр – строка, то формальным параметром м.б. строка перенимающая длину.
    CALL WriteText(‘abcdef’)

    ...

    SUBROUTINE WriteText(text)

    CHARACTER text*(*)
    Как видно из примеров тип и длина формальных параметров задаются внутри п/п операторами описания.

    Пример вычисления функции с использованием п/п

    ! Вычислить функцию: y=f(x)+2f(x)/(x-f¤(x+0.5)), где f(x)=sinx-exp(-x)

    ! с помощью подпрограммы

    program pp

    real y,y1,y2,y3,x

    write(5,*)'Введите значение аргумента x'

    read(5,*)x

    call p(x,y1)

    call p(2.*x,y2)

    call p(x+.5,y3)

    y=(y1+2.*y2)/(x-y3*y3)

    write(5,*)' Y=',y ! x=3, y=-0.165492

    read* ! x=12, y=-0.1957164

    end

    subroutine p(a,z)

    real a,z

    z=sin(a)-exp(-a)

    end
    Суть метода простой итерации заключается в том, что решение, полученное на предыдущем шаге является исходным значением для следующего шага. При определенных условиях данная последовательность сходится и ее предел является решением. Условия сходимости простых итераций: f’’(x)<1 и f’’<0.

    ! Программа вычисления корня уравнения методом простой итерации

    Real root, r ! Корень функции

    Real a,b ! Интервал для поиска корня

    Real eps ! Погрешность определения корня

    Integer imax,i

    Write(5,*) 'Введите ограничение количества итераций'

    read(5,*)imax

    Write(5,*) 'Введите интервал (a,b) для поиска корня'

    read(5,*)a,b

    Write(5,*) 'Введите погрешность определения корня'

    read(5,*)eps

    r=root(a,b,eps,i,imax) ! Вызов функции определения корня

    if (i.gt.imax) then

    Write(5,*)'Корень не найден. Превышено допустимое число итераций'

    else

    Write(5,*)'Корень функции:',r

    Write(5,*)'Потребовавшееся количество итераций',i

    end if

    read*

    end ! Уравнение 0=(exp(-x)-sqrt(exp(x))+3.7)/3.-x

    function f(x) ! имеет корень х=0.8614

    real x,f ! Уравнение 0=(1./(1.2*atan(x)+sqrt(x+1))-x

    real*8 y ! имеет корень х1=0.5435

    y=(exp(-x)-sqrt(exp(x))+3.7)/3.

    ! y=(1./(1.2*atan(x)+sqrt(x+1))

    if (y.gt.huge(f)) stop 'Процесс итераций расходится'

    f=y

    end

    ! П/п поиска корня функции

    function root(a,b,eps,i,imax)

    real root,f

    Real a,b ! Интервал для поиска корня

    Real eps ! Погрешность определения корня

    Real x,x0

    Integer imax,i ! Ограниченное количество итераций

    x0=0.5*(a+b) ! Начальное значение аргумента примем в середине интервала

    x=f(x0)

    i=0

    do while(abs(x-x0).gt.eps.and.i.le.imax)

    x0=x

    x=f(x0)

    i=i+1

    end do

    root=x

    end

    Пропущено – см. рукописный конспект со стр. 17!!!!!!!!!!!!!!
    Продолжение рукописного конспекта

    Обычно при окончании "контроллера формата" происходит конец передачи данных текущей записи. Если последним редакционным дескриптором, воспринятым "контроллером формата" является обратный слеш (\) то автоматический конец записи запрещается, что позволяет последующим операторам ввода/вывода продолжать чтение (или запись) с (или на) этой же записи. Этот механизм широко используется для получения на экране запроса и ответа на одной и той же строке, например:

    WRITE (*,'(A\)') 'Ввод целой величины->'

    READ (*,'(BN,I6)')I
    Примеры по форматному вводу/выводу

    ! Каждый WRITE выводит знаки между слешами: /ABC'DEF/

    ! Спецификация апостроф

    WRITE (*,970)

    970 FORMAT ('ABC"DEF')

    WRITE (*,'("ABC""DEF")')
    2.9.1 Оператор FORMAT

    Пропущено!

    Со стр.42 конспекта

    Print ‘(1x,80a1)’,(‘-‘,k=1,80) ! Вывод горизонтальной линии (в списке 80 элементов)

    Или

    Print ‘(1x,80(‘-‘))’ ! Вывод горизонтальной линии

    Print ‘(10(/))’ ! Отступ 9 строк



    Integer j, k, n, a(10), b(10)

    Read (*,’(2I8,5(I2,I3),5(I4,1x,I1))’) k, n, a,(b(j),j=1,10)



    Integer a(10)

    Open (9,file=’a.txt’)

    Read (9,1)a

    Write(5,1)a

    1 Format(5I3/3I3/2I3)

    Файл a.txt Результат

    1234567 12345

    8910111213 8910

    14151617 1415
    OPEN!!!
    13. Стандартные функции Fortran

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

    Параметры некоторых встроенных функций ограничены назначением этих функций. Например, логарифм отрицательного числа математически не определен и поэтому недопустим.

    12.1 Функции преобразования типов

    Имя

    Назначение

    (преобразование в тип)

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

    (преобразование из)

    Тип функции

    (преобразование в)

    INT(общее)

    Преобразование к целому типу

    любой

    INTEGER

    INT2(X)

    любой

    INTEGER*2

    INT4(X)

    любой

    INTEGER*4

    REAL(общее)

    Преобразование к вещественному типу

    любой

    REAL*4

    DREAL(Z)

    COMРLEX*16

    REAL*8

    FLOAT(I)

    INTEGER

    REAL*4

    SNGL(X)

    REAL*8

    REAL*4

    DBLE(общее)

    любой

    REAL*8

    DFLOAT(I)

    любой

    REAL*8

    CMPLX(Z[,Y]

    Преобразование к комплексному

    любой

    COMPLEX*8

    ICHAR(C)

    Преобразование символа в код и обратно*

    CHARACTER

    INTEGER

    CHAR(X)

    INTEGER

    CHARACTER

    Аббревиатура для обозначения различных типов данных:

    gen

    возможено включение более одного аргумента

    int

    INTEGER, INTEGER*1, INTEGER*2, или INTEGER*4

    int1

    INTEGER*1

    int2

    INTEGER*2

    int4

    INTEGER*4

    real

    REAL, REAL*4 или REAL*8 (DOUBLE PRECISION)

    real4

    REAL*4

    dbl

    REAL*8 (DOUBLE PRECISION)

    log

    LOGICAL, LOGICAL*1, LOGICAL*2, или LOGICAL*4

    log1

    LOGICAL*1

    log2

    LOGICAL*2

    log4

    LOGICAL*4

    cmp

    COMPLEX, COMPLEX*8 или COMPLEX*16 (DOUBLE COMPLEX)

    cmp8

    COMPLEX*8

    cmp16

    COMPLEX*16 (DOUBLE COMPLEX)

    char

    CHARACTER [*n]

    Примеры.

    Int(3.67)=3 (отсечение дробной части),

    Real(4)=4.0,

    Sngl(0.3333333333333333)=0.3333333

    Dble(1./3.)=0.3333333333333333

    Dble(1./3.)=Dble(1/3.)=Dble(1./3)=Dble(Real(1)/3)

    Dble(1/3)=0.0 Напомним, что 27**(1/3)=1

    Cmplx(3)=3.0+0.0i

    Cmplx(3,4)=3.0+4.0i

    Int(Dble(1/3))=0
    ! Печать всех ASCII символов в два столбца

    write(*,*)’Код символ код символ’

    Do i=1,254,2

    Write(*,*) i, char(i), i+1,char(i+1)

    End do

    Функция ICHAR преобразует символьную величину в целую. Целая величина символа - внутреннее представление символа в коде ASCII, лежащее в диапазоне от 0 до 255. Для любых двух символов С1 и С2 (С1.LE.C2) будет .TRUE. тогда и только тогда если (ICHAR(C1).LE.ICHAR(C2)) есть .TRUE.

    Функция CHAR(I) возвращает 1-й символ таблиц ASCII. Это величина типа CHARACTER длиной один символ, при этом I должно быть целым выражением, величина которого принадлежит диапазону 0
    Выражение ICHAR(CHAR(I))=I для 0
    Выражение CHAR(ICHAR(C))=C для любого символа С из набора ASCII.
    ! Программа подсчета суммы цифр числа

    ! Программа работает также при вводе любой символьной информации

    Character*80 num

    Integer Length, Sum, i, Code

    Write(*,*) 'Введите число '

    Read(*,'(A\)') num

    Length=Len_trim(num)

    Sum=0

    do i=1,Length

    Code=Ichar(num(i:i))-48

    if (Code.Gt.0.and.Code.Le.9) Sum=Sum+Code

    end do

    Write(5,*) 'Сумма цифр ',Sum

    end
    12.2 Функции возвращения информации о типах данных

    Имя

    Назначение

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

    Тип функции

    EPSILON(real)

    наименьшее значение для данного типа данных

    real

    real

    HUGE(gen)

    наибольшее значение для данного типа данных

    real или integer

    в соответствии с аргументом

    PRECISION (real)

    число значимых десятичных цифр (в мантиссе)

    real

    real

    TINY(real)

    наименьшее положительное число для данного типа данных

    real

    real

    Примеры.

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

    Real a*4, b*8

    Integer c*2, d*4

    Huge(a) = 3.4028235E+38

    Huge(b) = 1.797693134862316E+308

    Epsilon(a) = 1.1920929E-07

    Epsilon(b) = 2.220446049250313E-016

    Precision(a) = 6

    Precision(b) = 15

    Tiny(a) = 1.1754944E-38

    Tiny(b) = 2.225073858507201E-308

    Epsilon(1.) = 1.1920929E-07

    Huge(1) = 2147483647

    huge(1.) = 3.4028235E+38

    Huge(c) = 32767

    Huge(d) = 2147483647


    12.3 Функции взятия целой части и округления

    Имя

    Назначение

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

    Тип функции

    Взятие целой части

    AINT(общее)

    целая часть от REAL

    REAL

    REAL

    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

    REAL*8

    INTEGER

    INTEGER

    NINT(X)

    REAL*4

    INTEGER

    IDNINT(X)

    REAL*8

    INTEGER

    Примеры.

    Real a(3) /2.8, -2.8, 1.3/

    Write(*,*) anint(a) ! 3.000000 –3.000000 1.000000

    Write(*,*) nint(2.8), nint(2.2) ! 3 2

    Write(*,*) nint(a(2)), nint(-2.2) ! -3 -2

    Write(*,*) aint(2.6), aint(-2.6) ! 2.000000 -2.000000

    12.4 Математические функции



    Функция

    Математическая запись

    Описание

    1.

    ABS(x)

    x

    Возвращает модуль аргумента х**. ABS(-9.99)=9.99.

    2.

    ACOS(x)

    Arccos(x)

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

    2.1

    DIM(x,y)




    Max(x-y,0)

    3.

    AIMAG(Z)

    DIMAG(Z)

    Im(Z)

    Возвращает мнимую часть комплексного числа z. Тип входного аргумента (пара значений) – Complex*8, результата - Real*4 для Aimag и Complex*16, Real*8 для Dimag.

    4.

    ASIN(x)

    Arcsin(x)

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

    5.

    ATAN(x)

    Arctg(x)

    Возвращает арктангенс х (–1x1).

    5.1

    CONJG(Z)




    Возвращает комплексное сопряженное

    6.

    COS(x)

    Cos(x)

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

    7.

    COSH(x)

    Cosh(x)

    Возвращает гиперболический косинус х.
    Cosh(x)=(ex+e-x)/2.

    8.

    EXP(x)

    Exp(x), ex

    Возвращает экспоненту х. Exp(1)=2.718282=e.

    9.

    LOG(x)

    Ln(x)

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

    10.

    LOG10(x)

    Lg(x)

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

    11.

    MAX (A1,A2[,A3,…])

    MIN (A1,A2[,A3,…])

    Max(a1,a2,...)

    Min(a1,a2,...)

    Возвращает максимальное (минимальное) из двух или более целых или вещественных значений. a=max(5.5,4E2,99E-1)a=400.

    12.

    MOD(a,p)




    Взятие остатка. Аргумент х – Integer/Real*4, результат - Integer/Real*4 соответственно.

    Вычисление по формуле Mod(a,p)=a-Int(a/p)*p.

    Mod(5/2)=1.

    13.

    SIGN(x)




    Возвращает +1 при положительном х, -1 при отрицательном и 0 при х=0. Используется для возвращения знака числа.

    14.

    SIN(x)

    Sin(x)

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

    14.1

    SIND(x)

    Sin(x)

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

    15.

    SINH(x)

    Sinh(x)

    Возвращает гиперболический синус х. sinh(x)=(ex-e‑x)/2.

    16.

    SQRT(x)




    Возвращает квадратный корень из х (х0).

    17.

    TAN(x)

    Tg(x)

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

    18.

    TANH(x)

    Tanh(x)

    Возвращает гиперболический тангенс х. tanh(x)=(ex-e‑x)/(ex+e‑x)

    Примечание. ** - Х является арифметическим выражением, переменной или константой.

    Некоторые другие математические функции можно вычислить по известным формулам, используя стандартные. Например, секанс – sec(x)=1/cos(x), косеканс - csc(x)=1/sin(x), котангенс – cot(x)=1/tan(x), арксинус - , арккосинус - , гиперболический косинус - cosh(x)=(ex+e‑x)/2.

    Z=(3.0,4.0) ! Комплексное

    Abs(z)=5.0

    Sin(z)=(3.853738,-27.01681i)

    Conjg(z)=(3.0,-4.0) ! Комплексное сопряженное

    AIMAG(z)=4.0

    Z+z=(6.0,8.0)

    ! z1z2=(a1+ib1)(a2+ib2)=a1a2+ib1a2+ia1b2+ib1b2=(a1a2-b1b2)+i(b1a2+a1b2)

    Z*z=(-7.0,24.0)

    ! Умножение комплексно сопряженных чисел: =(a+ib)(a-ib)=a2-iba+iba-i2b2=a2+b2

    z*conjg(z)=(25.0,0.0)

    z/z=1.0

    Write(*,*) mod(5,3), mod (5.3,3.0) ! 2 2.300000

    Sind(30.)=0.5

    Dim(5,3)=2
    Когда параметрами логарифмических и тригонометрических функций являются комплексные числа, то функции возвращают комплексное число, аргумент  которого равен главному значению аргумента комплексного числа в радианах (-<).
    12.5 Лексические функции сравнения

    Имя

    Назначение

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

    Тип функции

    LGE(C1,C2)

    Лексически 

    Character

    Logical

    LGE(C1,C2)

    Лексически >

    Character

    Logical

    LLE(C1,C2)

    Лексически 

    Character

    Logical

    LLT(C1,C2)

    Лексически <

    Character

    Logical

    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.

    Если у операндов неравная длина, то более короткий дополняется справа пробелами.

    Write(*,*) LGE('a','b'), LGT('a','b'), LLE('a','b'), LLT('a','b') ! F F T T
    12.6 Функции операций над строками

    Подстроки.

    Var([first]:[last])

    Var – символьная переменная или элемент символьного массива.

    First – арифметическое выражение, определяющее первый символ в подстроке. Значение first округляется до целого и по умолчанию равно 1.

    Last – арифметическое выражение, определяющее последний символ в подстроке. Значение first округляется до целого и по умолчанию равно 1.

    Длина подстроки равна last–first+1

    A=’yahoo’

    A(:3)=’yah’ a(3:)=’hoo’ a(2:4)=’aho’ a(:)=’yahoo’

    Пример использования:

    Поиск символа “а” в символьной переменной text

    j=Len_trim(text) ! Определение длины переменной text

    Do i=1,j

    If(text(i:i).eq.’a’) exit

    End do

    Если на выходе из цикла i=j+1, то символ ‘a’ не найден, иначе он найден в позиции i переменной text.

    Имя

    Назначение

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

    Тип функции

    LEN(char)

    Длина строки

    CHARACTER

    INTEGER

    INDEX(cA,cB[,log])

    Позиция подстроки CharB в строке CharA

    Char, log

    INTEGER

    LEN_TRIM(char)

    Длина строки за исключением концевых пробелов

    CHARACTER

    INTEGER

    SCAN (char,charset[,log])

    Позиция одного из элементов charset в строке char.

    Char, log

    INTEGER

    VERIFY(char,charset[,log])

    Позиция одного из элементов charset не входящего в строку char.

    Char, log

    LOGICAL


    Встроенная функция INDEX возвращает целое число, соответствующее позиции CharB в CharA. Если длина CharА меньше длины CharB, или CharB не входит в CharA, то значение равно нулю. Если CharB входит более одного раза в CharB, то возвращается положение первого вхождения. Параметр log, если он задан .TRUE., обозначает, что поиск ведется от конца строки CharA к началу.

    Обе функции SCAN и VERIFY сравнивают строку с группой символов в charset. SCAN возвращает позицию первого символа строки, совпадающего с одним из символов charset. VERIFY возвращает позицию первого символа строки, который не совпадает ни с одним из символов, заданных в charset. Если символы не обнаружены или строка имеет нулевую длину, то SCAN возвращает ноль. Если нет несовпадающих символов или строка имеет нулевую длину, то VERIFY возвращает ноль. Параметр log, если он задан .TRUE., обозначает, что поиск ведется от конца строки к началу.


    LLE('A','B')=.TRUE.

    LLT('A','B')=.TRUE.

    LEN('abcdef')=6

    LEN_TRIM ('abc ')=3

    LEN_TRIM (' abc ')=5

    INDEX('banana','an',.TRUE.)=4

    INDEX('banana','an')=2

    SCAN ('banana','nbc')=1

    SCAN ('banana','dde')=0

    VERIFY ('banana','nbc')=2

    VERIFY ('banana','nba')=0

    VERIFY ('banana','bad')=3




    VERIFY ('MathCAD','Maple')=3 ! Символа p нет в Char и его позиция 3.
    ! Смена любого расширения файла на for расширение

    Integer i, j

    Character*20 ch1, ch2

    ch1='C:\Windows\temp.bas'

    do i = Len(ch1), 1, -1 ! Просмотр с конца

    If (ch1(i:i).eq.'\') Then

    ch2 = ch1(i+1:) ! Имя файла (Возврат подстроки)

    do j = Len(ch2), 1, -1

    If (ch2(j:j).eq.'.') Then ! Текущий символ

    ch2 = ch2(:j) // 'for' ! Присоединение расширения

    Exit

    End If

    end do

    Exit

    End If

    end do

    If (Index(ch2,'.').eq.0) ch2 = ch2(1:) // '.for'

    write(*,*) ‘Новое имя файла ’, ch2

    end
    ! Пример вычисления символьного выражения, содержащего 2 операнда и оператор +, -, * или /.

    program SimbCalc

    implicit none

    real LeftOperand, RightOperand

    real res

    character InputString

    character Operator

    character ListOperator(4)

    Integer i, k

    InputString = "-2*-9.2"

    ListOperator(1) = "+"

    ListOperator(2) = "-"

    ListOperator(3) = "*"

    ListOperator(4) = "/"

    do i = 1, 4

    k = Index(InputString, ListOperator(i)) ! Определение позиции оператора

    If (k.ne.0.And.k.ne.1) Then ! Если оператор не найден или стоит вначале,

    Operator = ListOperator(i) ! например минус перед числом

    ! Конструкция с open для перевода строки в число

    open(3) ! Открытие временного файла

    write(3,*) InputString(:k-1)

    write(3,*) InputString(k+1:)

    rewind(3) ! Репозиционирование для считывания

    read(3,*) LeftOperand

    read(3,*) RightOperand

    close(3)

    Exit

    End If

    end do

    If (k.eq.0) Then ! Оператор не найден

    write(*,*) InputString

    stop

    else

    Select Case (Operator)

    Case ("+")

    res = LeftOperand + RightOperand

    Case ("-")

    res = LeftOperand - RightOperand

    Case ("*")

    res = LeftOperand * RightOperand

    Case ("/")

    If (RightOperand.ne.0) Then

    res = LeftOperand / RightOperand

    Else

    write(*,*) "Деление на 0"

    stop

    End If

    End Select

    write(*,*) res

    end if

    End

    12.7 Функция возвращения конца файла

    Имя

    Назначение

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

    Тип функции

    EOF(I)

    целый конец файла

    INTEGER

    LOGICAL

    EOF(X) возвращает .TRUE. если устройство, определенное этим параметром находится на или после записи конец-файла; иначе возвращается .FALSE. Величина Х должна соответствовать открытому файлу или нулю, что соответствует экрану или клавиатуре.
    12.8 Адресные функции

    Имя

    Назначение

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

    Тип функции

    LOCNEAR (gen)

    адрес не сегментированный

    любой

    INTEGER*2

    LOCFAR (gen)

    сегмeнтный адрес

    Любой

    INTEGER*4

    LOC (gen)

    Возвращение адреса

    Любой

    INTEGER*2

    write(*,*) Loc(1.53) ! 4395376
    12.9 Операции с битами

    Имя

    Назначение

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

    Тип функции

    IOR (intA,intB)

    Включающее ИЛИ

    INTEGER

    INTEGER

    ISHL (intA,intB)

    Логический сдвиг

    ISHFT (intA,intB)

    Логический сдвиг

    ISHA (intA,intB)

    Арифметический сдвиг бит

    ISHC (intA,intB)

    Циклический сдвиг

    IEOR (intA,intB)

    Исключающее ИЛИ

    IAND (intA,intB)

    Логическое произведение

    NOT (intA)

    Логическое дополнение

    IBCLR (intA,intB)

    Очистка бит

    IBSET (intA,intB)

    Установка бит

    IBCHNG (intA,intB)

    Изменение бит

    BTEST (intA,intB)

    Возвращает .TRUE., если бит IntB в IntA установлен в 1. В противном случае возвращает .FALSE.

    INTEGER

    LOGICAL


    IOR (intA,intB) ‑ если n-й бит в первом
    1   2   3   4   5   6   7   8   9   ...   15


    написать администратору сайта