Справочное руководство по языку Fortran 95
Глава 2.Алфавитный справочник
Конструкт DOОписаниеDO Statement Замечания Если construct name указано в операторе DO, то же самое construct name должно быть указано в соответствующем операторе END DO. Окончание конструкта DO помеченным оператором действия представляет устаревший способ. Пример do i=1,100 ! повторить 100 раз do while (a>b) ! повторять пока a>b do 10 j=1,100,3 ! повторять 33 раза ... 10 continue end do end doОператор CYCLE может быть употреблен для сокращения текущей итерации в цикле (loop) DO. Оператор EXIT можно использовать для выхода насовсем из цикла DO. Оператор DO
Описание [ construct-name : ] DO [ label ] [ loop-control ] Здесь: construct-name есть необязательное имя конструкта DO. label сть необязательная метка оператора, завершающего конструкт DO. loop-control есть [,] do-variable = expr, expr [, expr] или [,] WHILE (while-expr)do-variable есть скалярная переменная типа INTEGER, default REAL или default double-precision REAL. expr есть скалярное выражение типа INTEGER, default REAL или default double-precision REAL. Первое expr есть начальное значение для do-variable; второе expr есть конечное значение do-variable; третье expr есть значение приращения для do-variable. while-expr есть скалярное LOGICAL выражение. Замечания Когда выполняется оператор DO, становится активным конструкт DO. Выражения в loop-control вычисляются и, если присутствует do-variable, то ей присваивается начальное значение и на базе вычисленных значений выражений устанавливается счетчик итераций для конструкта. Он может получит и значение 0. Заметим, что вследствие того, что счетчик устанавливается до начала выполнения loop, изменение do-variable в пределах loop не влияет на число итераций. Если loop-control есть WHILE (while-expr), то вычисляется while-expr и если оно есть false, повторений больше не будет и конструкт DO заканчивает работу. Если loop-control отсутствует, счетчик устанавливается на бесконечность. Использование значений default или double-precision REAL для do-variable считается устаревшим приемом. Пример do i=1,100 ! повторение 100 раз do while (a>b) ! повторять пока a>b do 10 j=1,100,3 ! повторять 33 раза каждый раз ! после входа в этот конструкт ... 10 continue end do end do Функция DOT_PRODUCT
Описание i = dot_product((/3,4,5/),(/6,7,8/)) ! i получает значение 86 Оператор DOUBLE PRECISION
Описание DOUBLE PRECISION [[, attribute-list] :: ] entity [, entity ] ...Замечания Один и тот же атрибут не может появиться дважды в операторе DOUBLE PRECISION. function-name должно быть именем external, intrinsic или statement function, или фиктивной процедуры-функции. = initialization-expr может появиться в операторе, содержащем атрибут PARAMETER. Если присутствует = initialization-expr, то перед списком примитивов должно стоять двойное двоеточие. Каждый примитив имеет атрибут SAVE, если только он не находится в именованном блоке common. = initialization-expr не должно фигурировать, если entity-name есть фиктивный аргумент, результат функции, объект в именованном блоке common (если только объявление типа не находится в программной единице блок данных), размещаемый массив, указатель, внешнее имя, встроенное имя или автоматический объект данных. Атрибут ALLOCATABLE может быть использован только при объявлении массива, который не есть фиктивный аргумент или результат функции. Массив, объявленный с атрибутом POINTER или ALLOCATABLE, должен быть описан с отложенной формой. array-spec для function-name, которая не имеет атрибута POINTER, должен определять явную форму. array-spec для имени функции, которая имеет атрибут POINTER, должен быть специфицирован с отложенной формой. Если указан атрибут POINTER, то TARGET, INTENT, EXTERNAL или INTRINSIC атрибуты не должны указываться. Если указан атрибут ARGET, нельзя специфицировать атрибуты POINTER, EXTERNAL, INTRINSIC или PARAMETER. Атрибут PARAMETER не должен специфицироваться для фиктивных аргументов, указателей, размещаемых массивов, функций или объектов в блоках common. Атрибуты INTENT и OPTIONAL могут специфицироваться только для фиктивных аргументов. entity не должен иметь атрибут PUBLIC, если его тип имеет атрибут PRIVATE. Атрибут SAVE не должен указываться для объекта в блоке common, фиктивного аргумента, процедуры, результата функции или автоматического объекта данных. entity не должен иметь атрибут EXTERNAL, если имеет атрибут INTRINSIC. entity в операторе DOUBLE PRECISION не должен специфицироваться с атрибутами EXTERNAL или INTRINSIC, если не есть функция. Массив не должен иметь одновременно атрибуты ALLOCATABLE и POINTER. entity не может получить явно атрибут более одного раза в единице видимости. Пример double precision a, b, c ! a, b, c имеют тип ! double precision double precision, dimension (2, 4) :: d ! d есть массив 2 х 4 ! of double precision double precision :: e = 2.0d0 ! e инициализировано Функция DPROD
Описание Произведение двойной точности для чисел REAL. Syntax DPROD (x, y) Аргументы x и y должны иметь типы default REAL. Результат Результат имеет тип double-precision REAL. Его значение есть представление с двойной точностью произведения x и y. Пример dub = dprod (3.e2, 4.4e4) ! dub получает значение 13.2d6 Сабрутина DVCHK (только в Windows)
Описание Начальный вызов подрутины DVCHK маскирует прерывание по делению на ноль в устройстве с плавающей точкой. При первом обращении флажок lflag устанавливается на true. Последующие вызовы возвращают true или false в переменной lflag в зависимости от того, произошло или нет упомянутое событие. DVCHK не проверяет и не маскирует деление ноль на ноль. Для этого нужно употреблять INVALOP. Syntax DVCHK (lflag) Аргумент lflag должен быть типа LOGICAL. Он получает значение true, если произошло событие деления на ноль и false в противном случае. Пример call dvchk (lflag) ! маскирует прерывание по делению на ноль Оператор ELSE IF
Описание Оператор ELSE IF управляет условным исполнением блока кода в конструкте IF, когда все предудущие IF-выражения имеют значением false. Syntax ELSE IF (expr) THEN [construct-name] Здесь: еxpr есть скалярное выражение типа LOGICAL. construct-name есть необязательное имя, данное конструкту IF. Пример if (i>-1) then print*, b else if (i<j) then ! выполняется только при true здесь и ! false в предыдущем if expression print*, c end if Оператор ELSEОписание Оператор ELSE предшествует блоку кода, исполняемому в конструкте IF, если все предыдущие IF-выражения есть false. Syntax ELSE [construct-name] Здесь: construct-name есть необязательное имя конструкта IF. Пример Оператор ELSEWHEREОписание Оператор ELSEWHERE управляет условным исполнением блока операторов присваивания для элементов массива, для которого маскировочное выражение конструкта WHERE имеет значение false (см. "Контрукт WHERE" на стр. 234). Syntax ELSEWHERE [ ( mask-expr ) ] Здесь: mask-expr есть выражение типа LOGICAL. Пример where (b>c) ! начало конструкта where b = -1 elsewhere (b=c) b = 1 elsewhere !b=0 b = 999 end where Оператор ENDОписание Оператор END заканчивает программную единицу, модульную подпрограмму или внутреннюю подпрограмму. Syntax END [ class [ name ] ] Здесь: class есть или PROGRAM, FUNCTION, SUBROUTINE, MODULE, INTERFACE или BLOCK DATA. name есть имя программной единицы, модульной подпрограммы или внутренней подпрограммы. Замечания Каждая программная единица, модульная подпрограмма или внутренняя подпрограмма должны иметь точно один оператор END. Операторы END PROGRAM, END FUNCTION и END SUBROUTINE есть исполнимые операторы и могут служить назначением операторов перхода. Операторы END MODULE, END INTERFACE и END BLOCK DATA не являются исполнимыми. Выполнение операторов END FUNCTION или END SUBROUTINE эквивалентно выполнению оператора return в подпрограмме. Выполнение оператора END PROGRAM заканчивает выполнение программы. name можно употреблять только если name было дано программной единице, модульной подпрограмме или внутренней подпрограмме в операторах PROGRAM, FUNCTION, SUBROUTINE, MODULE или BLOCK DATA statement. name нельзя употреблять в операторе END INTERFACE. Если name присутствует, оно должно совпадать с именем, указанным в соответствующих операторах PROGRAM, FUNCTION, SUBROUTINE, MODULE или BLOCK DATA. Пример program names call joe call bill call fred end program names ! program и names не обязательны subroutine joe end subroutine joe ! правильный оператор end subroutine bill end subroutine ! также правильный оператор end subroutine fred end ! также правильный оператор end Оператор END DOОписание Оператор END DO заканчивает конструкт DO. Syntax END DO [construct-name] Здесь: construct-name есть имя конструкта DO. Замечания Если оператор DO в конструкте DO отмечен посредством construct-name, то соответствующий оператор END DO должен иметь то же самое construct-name. Если оператор DO не идентифицирован посредством construct-name, то оператор END DO тоже не должен его содержать. Если опрератор DO помечен меткой, то соответствующий END DO должен быть идентифицирован той же меткой. Example named: do i=1,10 labeled: do 10 j=1,10 do k=1,10 ... end do 10 end do labeled end do named Оператор ENDFILEОписание Оператор ENDFILE записывает признак endfile на месте следующей записи файла. Затем файл устанавливается в позицию после endfile, которая становится последней записью файла. Syntax ENDFILE unit-number или ENDFILE (position-spec-list) Здесь: unit-number есть скалярное INTEGER выражение, определяющее номер соответствующего устройства ввода/вывода для внешних файлов. position-spec-list есть [[ UNIT = ] unit-number][, ERR = label ][, IOSTAT = stat ], где UNIT=, ERR= и IOSTAT= могут располагаться в любом порядке, но если UNIT= опущено, то unit-number должно стоять на первом месте. label есть метка оператора, который получает управление при обнаружении ошибки. stat есть переменная типа INTEGER, которой присваивается положительное значение при обнаружении ошибки , отрицательное значение при обнаружении условия end-of-file или end-of-record и 0 в остальных случаях. Если присутствует stat и обнаружена ошибка, end-of-file или end-of-record, исполнение программы не прерывается. Замечания После исполнения оператора ENDFILE могут исполняться операторы BACKSPACE или REWIND, чтобы изменить позицию в файле перед операторами передачи данных или последующим оператором ENDFILE. Выполнение ENDFILE для файла, который связан но еще не существует, приводит к созданию файла перед записью в него признака endfile. Пример endfile 8 ! записывает endfile record в файл ! связанный с unit 8 Оператор END IFОписание Оператор END IF оканчивает конструкт IF. Syntax END IF [ construct-name ] Здесь: construct-name есть имя конструкта IF. Замечания Если оператор IF в конструкте IF идентифицирован посредством construct-name, то соответствующий оператор END IF должен быть снабжен тем же construct-name. Если оператор IF не идентифицирован посредством construct-name, то оператор END IF не должен содержать construct-name. Example if (a.gt.b) then c = 1 d = 2 end if Оператор END SELECTОписание Оператор END SELECT заканчивает конструкт CASE. Syntax END SELECT [ construct-name ] Здесь: construct-name есть имя конструкта CASE. Замечания Если оператор SELECT CASE в конструкте CASE идентифицирован посредством construct-name, соответствующий оператор END SELECT должен указывать то же construct-name. Если the SELECT CASE не идентифицирован посредством construct-name, оператор the END SELECT не должен содержать construct-name. Пример select case (i) case (:-1) print*, "negative" case (0) print*, "zero" case (1:) print*, "positive" end select Оператор END WHEREОписание Оператор END WHERE заканчивает конструкт WHERE. Syntax END WHERE Пример where (c > d) ! c и d есть массивы c = 1 d = 2 end where |
<<< | Оглавление | Страницы: 10 11 | >>> |