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

  • 2.8.3. Оператор INQUIRE.

  • Direct

  • Named

  • Share

  • 2.8.4 . BASKSPACE. Оператор возвращает файл на 1 запись назад.BASKSPACE u

  • BASKSPACE 3 2.8.5. Оператор REWIND. Оператор перемещения файлового указателя в начало первой записи файла.REWIND u

  • 2.8.7. Функция EOF .

  • 2.8.8. Оператор LOCKING.

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


    Скачать 0.98 Mb.
    НазваниеКурс лекций по дисциплине Программирование на языке Фортран
    Дата02.09.2019
    Размер0.98 Mb.
    Формат файлаdoc
    Имя файлаFortran01.doc
    ТипКурс лекций
    #85698
    страница14 из 15
    1   ...   7   8   9   10   11   12   13   14   15
    [type] Function fname [([ nformal [[ attrs ]][ ,nformal[[ attrs]]…])]

    где type –тип функции( integer, Real, Logical);

    fname –имя функции;

    nformal, attrs –см.выше (п.2.6.3)

    При отсутствии type тип и длина функции определяется внутри функции операторами описания.

    Функция – именованная программная единица, вызываемая из выражения по ее имени. Имя функции содержит значение, получающееся в результате ее выполнения, которое затем используется в выражении, содержащем вызов функции.

    Тип возвращаемого функцией результата определяет тип функции.


    пример вызова функции

    c=max (a,b)-c



    Function max (x, y)

    Real max, x, y



    max =…

    end


    О соответствии между факт. и форм. Параметрами см. п.2.6.3.

    Форм. Параметры могут быть входящие (1), выходящие (2) и вх.– вых. (3).

    Вх. форм. парам. Получает свае значение от соответствующего фактического параметра.

    Вых. форм. парам. передает свае значение соответствующему фактическаму параметру.

    Вх.– вых.– осуществляется связь в 2–х направлениях. Функция не должна содержать прямых или косвенных (через другие п/п ) обращений к самой себе.


    Пример функции вычисления n!

    Integer Function Factorial (n)

    Integer n, i Factorial=1

    do i=2, n

    Factorial=Factorial*i

    end do

    End

    Пример программного определения
    max элемента массива А(n)

    Ma=A(1)

    Do i=2,n

    ma=maxe (ma,A(i))

    end do

    print *,ma

    ………………………

    Function maxe (a, b)

    Real maxe, a, b

    If (a, lt, b) then

    maxe=b

    else

    maxe=a

    end if

    end




    Пример нахождения максимального значения m4 из 4–х переменных с использованием функции maxe.

    Real a, b, c, d

    ……………..

    m4=maxe(a, maxe(b, maxe(c, d)))



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

    Program pf

    Real f, y, x

    Write ( 5,* ) ‘ Введите значение аргумента х ‘

    Read ( 5, * ), x

    Y=(f(x)+2*f(2*x))/(x-f(x+0.5)**2)

    Write ( 5, * ) ‘y=’, y

    End

    Function f(a)

    Real a, f

    F=sin(a)-exp(-a)

    end


    2.6.5. Оператор Block Data

    Оператор используется для задания начальных значений величинам, входящим в именованные общие области.

    Програмная единица начинается с оператора Block Data, заканчивается оператором End. П/п исходных данных может содержать операторы: операторы описания типов, операторы общих областей COMMON. Начальные значения могут указываться не для всех величин, входящих в некоторую общую область. Начальные значения величин, входящих в состав некоторой общей области, могут указываться только в одной п/п начальных значений, в то время как п/п может содержать несколько п/п начальных значений.


    Пример

    Block Data

    Common /R1/a, b, c, /R2/x, y, z

    Real a/3.5/, c*8/7.44D15/

    Complex y(15)/15*(2.4,3.769)/

    end


    2.7. Другие операторы Fortran.

    2.7.1. Оператор Common

    О
    Синтаксис

    Common [Pr1/]V1, V2,…,[Pr2/]Vn, Vn+1,…,[/rm/]…, где

    Ri – имя общей области( может быть опущено)

    Vk, k=1,… – список переменных, имен массивов.

    ператор размещения величин, используемых в разных модулях программы, в одни и те же области оперативной памяти (общие области). Область может иметь (именованная область) и нет(неименованная область) имя.

    В одном модуле может быть несколько операторов Common.
    О
    Пример

    Common x, y, z(10) – создание одной неименованной области

    Common x, y, z(10)

    Common a, b, c, d – создание одной неименованной общей области,
    переменные и массивы располагаются в ней по порядку следования

    Common x1, y1, /R1/z(5,15), w, //x2, y2 – создание двух общих областей: неименованной( величины x1, x2, y1, y2) и именованной R1( величины z и w).

    Common a1, b1, /R1/c1, d1, //x1, y1

    Common /R1/a2, b2, //c2, d2, /R2/x2, y2 – создание 3 – х общих областей: неименованной (a1, b1, x1, y1, c2, d2), с именем R1(c1, d1, a2, b2) и с именем R2(x2, y2)

    дноименные общие области, относящиеся к разным программным модулям, будут совмещены друг с другом, то есть будут размещены с одного и того же листа памяти. Это позволяет экономить расход памяти.

    Требования к одноименным общим областям различных программных модулей одной и той же программы:

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

    2. Если общие области используются для обмена данными между двумя программными единицами, то типы и длины данных в п/п должны совпадать. Соответствия между данными устанавливается по порядку их следования в общих областях.

    3. Величины, входящие в неименованные общие области, не могут иметь начальных значений.

    2.7.2. Оператор конца END.

    Оператор служит для обозначения конца программной единицы. Т.к. оператор END является не исполняемым, то он не может стоять в середине программы.


    Неверный код:

    Program ya

    ………….

    ………….

    if (a. ne. 0) then

    c=b/a

    else

    end

    end if

    ………..

    end


    2.7.3. Оператор Parameter

    Оператор задает константе символьное имя.


    Синтаксис:

    Parameter (vn=expr [ , vn=expr ]….), где

    vn – символьное имя

    expr – выражение, включающее только

    символические имена, если они

    ранее определены в операторе

    Parameter, в том же программном

    модуле.


    Если тип выражения expr отличается от типа имени, то любые операции преобразования типов выполняются автоматически. В отличии от оператора Data (объявляет начальное значение для переменной ) Parameter устанавливает фиксированное значение для символических констант. Любая попытка изменить символическую константу при помощи оператора присваивания или оператора Read приведет к ошибке этапа компиляции.


    Пример:

    Parameter ( nblocks=10 )

    Real mass

    Paremeter (mass=47.3, Pi=3.141593, Pi2=2.0*Pi)


        1. Оператор Include

    Оператор выполняет вставку содержимого специфированного текстового файла в позиции оператора Include.


    Синтаксис:

    Include ‘ filename ‘, где

    Filename – имя текстового файла на

    языке Fortran, включаемого в программу.


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


        1. Оператор Allocate

    Оператор осуществляет динамическое размещение массива, ранее объявленного с атрибутом Allocatable.


    Синтаксис:

    Allocate (array([L:] и [,[L:] и…]) [, stat=ierr]),

    Где: array – имя размещаемого массива;

    ierr – целочисленная переменная,

    получаемая при выполнении

    попытки размещения.

    L – целочисленное выражение, устанавливающее

    нижнюю границу.

    n – тоже верхнюю.



    Размещаемые массивы используются, в основном, если заранее неизвестна их размерность. Они динамически размещаются во время этапа исполнения (в то время, когда уже известна их размерность).

    Массив должен быть предварительно объявлен как Allocatable, объявлено также должно быть и число измерений массива. Если размещаются несколько массивов, то они перечисляются через запятую.
    2.7.6. Оператор Deal locate

    Оператор Deal locate освобождает область памяти, ранее зарезервированную оператором Allocate.

    Deal locate(array List[ ,STAT=ierr ]),

    где array List –список имен размещаемых массивов через запятую;

    ierr –целочисленная переменная, возвращающая статус попытки
    переразмещения.

    Попытка переразметить массив, который не был ранее размещен, приводит к возникновению ошибки этапа исполнения. Переменная ierr возвращает значение 0, если операция переразмещения была выполнена успешно; в противном случае возвращается номер ошибки этапа исполнения.

    Е
    Пример

    Integer dataset[ALLOCATABLE] (:,:,:)

    Integer reactor, level, error

    Data reactor, level, points/10, 50, 10/



    Allocate (dataset(1:reactor, 1:level, 1:points), stat = error)



    Deal locate (dataset, stat = error)
    сли на размещаемый массив задается ссылка, то в тот момент, когда он не является размещенным, результаты могут оказаться непредсказуемыми.


    Пример на Allocate

    program dinam

    implicit none

    Real b [ALLOCATABLE] (:, :)

    Real integer k, n

    write (5,*) ’ Введите размерность массива в ’

    Read (5,*) n

    Allocate (b(n, n), STAT=k)



    call pp(b, n) ! Пересылка значений в п/п pp



    end

    subroutine pp(bc, n)

    Real bc (n, *)



    write(5, *) ‘ Значения элементов массива ‘

    write (5, ‘(20(f6.2))’)((bc(i, j), j=1,n), i=1,n



    end




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

    Необходимо вычислить функцию: , где

    program pp

    Real y, y1, y2, y3, x

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

    Read(5,*) x

    Call p(x, y1)

    Call p(x+0.5,y3)

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

    write (5,*) ‘ y= ’, y

    end

    subroutine p(a, z)

    real a, z

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

    end



    2.8.3. Оператор INQUIRE.

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

    INQUIRE ([UNIT=] и FILE = file [,ACCESS = access] [,ACTION = action] [,BINARY = binary] [,DIRECT = direct] [,ERR = err] [,EXIST = exist] [,FORM = form] [,FORMATTED = format] [,IOSTAT = iocheck] [,MODE = mode] [,NAME =name] [,NAMED = named] [,NEXTREC = nextrec] [,NUMBER = num] [,OPENED = opened] [,READ = read] [,RECL = recl] [,SEQUENTIAL = seq] [,SHARE = share] [,UNFORMATTED = unformatted])

    u – см. выше, верна запись UNIT = *.

    File – символьное выражение, задающее имя файла, информация о котором возвращается.

    Если задан параметр u, то выполняется опрос устройства, если – file, то опрос файла.

    Access – символьная переменная, возвращающая:

    1. ‘APPEND’, если устройство или файл открыты для добавления данных.

    2)‘SEQUENTIAL’, если устройство или файл открыты для последовательного доступа.

    1. ‘DIRECT’, если устройство или файл открыты для прямого доступа.

    2. ‘UNDEFINED’, если отсутствуют подсоединения.

    Action – символьная переменная, возвращающая:

    1. ‘READ’ – если файл открыт только для чтения.

    2. ‘WRITE’ – если файл открыт только для записи.

    3. ‘READWRITE’ – если файл открыт для чтения и записи.

    4. ‘UNDEFINED’

    Binary – символьная переменная = ‘YES’, если файл или устройство двоичные, иначе ‘NO’.

    Direct - символьная переменная = ‘YES’, если файл или устройство открыты для прямого доступа, иначе ‘NO’.

    Err – см. выше.

    Exist – логичн. перем., возвращающая .TRUE., если устройство или файл существует, иначе .FALSE.

    Form – символьная переменная, возвращающая ‘FORMATTED’, ‘UNFORMATTED’, ‘BINARY’.

    Formatted – символьная переменная, возвращающая ‘YES’, ‘NO’ или ‘UNKNOWN’.

    Iocheck – переменная целого типа, см. выше.

    Mode – символьная переменная, возвращающая значения mode или action (‘READ’, ‘WRITE’ или ‘READWRITE’).

    Name – символьная переменная, возвращает имя файл, подсоединенного к устройству.

    Named – логичн. переменная = .TRUE., если файл имеет имя, иначе .FALSE.

    Nextrec – переменная целого типа. Возвращает номер следующей записи в файле прямого доступа.

    Numпеременная целого типа. Возвращает номер подсоединенного к файлу устройства.

    Opened логичн. переменная. Возвращает ‘YES’, если файл открыт для чтения и ‘NO’, если нет.

    Recl - переменная целого типа. Возвращает длину записи (в байтах) файла прямого доступа.

    Seq символьная переменная. Возвращает ‘YES’ или ‘NO’.

    Shareсимвольная переменная, возвращающая значение статуса share при открытии файла (см. OPEN).

    Unformatted – символьная переменная, возвращающая ‘YES’ или ‘NO’.

    2.8.4. BASKSPACE.

    Оператор возвращает файл на 1 запись назад.

    BASKSPACE u, где

    uвыражение целого типа, задающее номер подсоединенного к файлу устройства.

    BASKSPACE 3

    2.8.5. Оператор REWIND.

    Оператор перемещения файлового указателя в начало первой записи файла.

    REWIND u, где

    uсм. выше.

    2.8.6. Оператор ENDFILE.

    Оператор записывает спец. Запись «конец файла» ENDFILE.

    После выполнения ENDFILE все записи, расположенные после новой записи «конец файла», стираются. Это справедливо как для последовательных файлов, так и для файлов прямого доступа.

    2.8.7. Функция EOF.

    Функция возвращает .TRUE., если подсоединенный к устройству файл позиционирован на спец. записи «конец файла» или после этой записи, иначе .FALSE.

    EOF (u)

    Пример подсчета количества строк в файле.

    Character*12 fname

    Logical yes

    Integer i

    Fname =’1.txt.’

    Open inquire (file=fname, exist=yes)

    If (yes) then

    Open (3, file=fname)

    i=0

    do while (.not. eof (3))

    read (3, *) !Фиктивная построчное считывание.

    i = i+1

    end do

    write (5,*) ’Количество строк n=’,i

    else

    write (5,*) ’Файл не найден’

    end if

    end

    2.8.8. Оператор LOCKING.

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

    LOCKING (U [,ERR = err] [,IOSTA = iocheck] [,LOCKMODE = lockmode] [,REC = rec] [,RECORDS = recnum]

    Пример защиты записей с 10 по 15 в файле прямого доступа net.doc.

    OPEN (3, FILE = ‘net.doc’, ACCESS = ‘direct’, FORM =’formatted’)
    1   ...   7   8   9   10   11   12   13   14   15


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