Читайте также:
|
|
Новый язык содержит возможности для пользователя расширять его собственными понятиями, например, для интервальной арифметики, арифметики рациональных или динамических символьных строк. Путем определения новых типов данных или операторов, и перегружаемых операций и процедур (так что вы можете использовать плюс + как символ сложения интервалов, а не только для обычных чисел), мы можем создать пакет (модуль) без использования препроцессора. Мы можем в скором времени ожидать число расширений для различных приложений в форме модулей от различных производителей. Некоторые уже доступны в NAG.
Данные
Структуры (производные типы)
В Фортран раньше не разрешалось использование некоторых типов, определенных пользователем. Теперь это можно делать.
Вы можете группировать Ваши данные, используя производные типы. При этом можно комбинировать встроенные типы (включая массивы и указатели). Доступ к компонентам новых типов осуществляется использованием уточнителя, а в качестве разделителя в нем знак процента. (Производные типы известны в VAX Fortran как записи.)
Ниже приведен пример
TYPE staff_member CHARACTER(LEN=20):: first_name, last_name INTEGER:: identification, department END TYPEкоторый может быть использован для того, чтобы описывать отдельные единицы. Комбинация индивидуальных единиц может создана таким образом
TYPE(staff_member), DIMENSION(100):: staffОтдельная единица может быть вызвана как staff(number), а поле может быть вызвано как staff(number)%first_name. Вы можете образовать гнездо определений
TYPE company CHARACTER(LEN=20):: company_name TYPE(staff_member), DIMENSION(100):: staff END TYPE: TYPE(company), DIMENSION(10):: several_companiesЗначительно более интересный пример - это разреженная матрица A, имеющаяс более сотни ненулевых элементов, которая может быть специфицирована следующим оператором
TYPE NONZERO REAL VALUE INTEGER ROW, COLUMN END TYPEи
TYPE (NONZERO):: A(100)Вы тогда получаете значение A(10), записав A(10)%VALUE. Присваивание может быть записано как
A(15) = NONZERO(17.0,3,7)Для того, чтобы использовать в COMMON определенные пользователем в примере типы, или чтобы безусловно сделать так, чтобы два типа данных, которые выглядят как один и тот же, рассмотривались как идентичные, вы можете использовать оператор SEQUENCE, в последнем случае требуется, чтобы переменная была специфицирована как PRIVATE.
! Еще один пример, использующий производные типы и модули
module pipedef
type pipe! определяется новый тип 'pipe', который
real diameter! включает две компоненты типа reals,
real flowrate! компоненту типа integer и компоненту типа character.
integer length
character(len=10):: flowtype
end type pipe
end module pipedef
program main
use pipedef! Связывает с модулем pipedef программу main.
type(pipe) water1, gas1! объявляет две переменные типа 'pipe'.
water1 = pipe(4.5,44.8,1200,"turbulent")! присваивает значение переменной water1.
gas1%diameter = 14.9! присваивает значение
gas1%flowrate = 91.284! частям переменной gas1.
gas1%length = 2550
gas1%flowtype = 'laminar'
.
.
end program
з
Указатели
Указатели позволяют программе вызвать более одной области памяти с одним именем. По сравнению с указателями языка С указатели в Fortran 90 более ограничены, и поэтому легче для отладки и оптимизации. Объекты данных с атрибутами-указателями могут иметь ассоциированную с ними память, выделяемую и возвращаемую, которую можно использовать динамически. Указатели могут быть ассоциированы с другими указателями и с другими объектами, облегчая работу с такими структурами данных как списки и деревья.
з
Дата добавления: 2015-11-14; просмотров: 52 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Материал взят из проекта Lahey: http://www.lahey.com/index.html, http://www.lahey.com/other.htm). | | | Вид семейства |