Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

Массивы и производные типы

Материал взят из проекта Lahey: http://www.lahey.com/index.html, http://www.lahey.com/other.htm). | Возможности расширения языка | Вид семейства | Управление программой | Выражения для массивов | Секция (вырезка) массива | Модули и процедуры | Более подробная информация | Спецификации или объявления | Тип Character |


Читайте также:
  1. V) Массивы и функции
  2. Автоматизация поиска информации. Категория «Ссылки и массивы».
  3. Авторское право на служебные, производные, составные и аудиовизуальные произведения
  4. ГЛАЗ и связанные с ним структуры. Оболочки глазного яблока, их отделы и производные, функц.аппараты, циркуляция внутриглазной жидкости, возрастные изменения.
  5. Двумерные массивы
  6. Динамические массивы
  7. Дисковые массивы RAID

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

TYPE(circle) INTEGER:: radius REAL:: area END TYPE circle

Где-нибудь в другом месте второй встроенный тип, называемый position, использован для запоминания координат центра окружности типа real; position имела два числа типа real в качестве компонент. Возможно заменить использование производного типа position массивом типа real:

TYPE(circle) REAL, DIMENSION(2):: pos INTEGER:: radius REAL:: area END TYPE circle

Здесь pos(1) есть x координата, соответственно pos(2) есть y координата. Массив можно использовать, когда число компонент довольно велико. На компоненты массива ссылаются точно так же, как на другие компоненты:

TYPE(circle):: first... first%pos(1)! элемент 1 из pos first%pos(1:)! весь массив (сечение)

Так же как несколько (или много) экземпляров (шаблонов, образцов) встроенных типов данных могут быть сгруппированы вместе как единый массив, так же возможно сгруппировать вместе экземпляры (шаблоны, образцы) производных типов данных. Например:

TYPE(circle), DIMENSION(100):: all_circles... all_circles(1)%radius! радиус окружности 1 all_circles(51:100)%radius! радиус последней половины окружностей all_circles(1:100:2)%area! область каждой другой окружности all_circles(:)%pos(1)! x - координаты каждой окружности all_circles%pos! все координаты всех окружностей all_circles(10)%pos(:)! обе координаты 10-й окружности

 

Массив производного типа данных и/или компоненты массива имеют те же требования (то есть те же правила в выражениях и др.) и ограничения как другие массивы в Fortran 90. Например:

TYPE(circle), DIMENSION(100):: cir... cir(1:10) = cir(91:100)! соответствие сегментов производных типов cir(i)%pos = cir(i-1)%pos(:)! соответствие массивов типа real cir%pos(1:2) = cir(1:2)%pos! ошибка, cir=cir(1:2) не соответствуют

Нужно позаботиться, чтобы обеспечить, чтобы любая пометка секции массива была применена к правильной части выражения.

Инициализация массивов

Конструкторы

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

array = (/ список /)

где список может быть одним из следующих:

список значений назначенного типа

INTEGER:: a(6)=(/1,2,3,6,7,8/)

Выражения для переменной (s)

REAL:: b(2)=(/SIN(x),COS(x)/)

Выражение от массива (s)

INTEGER:: c(5)=(/0,a(1:3),4/)

Неявный цикл DO

REAL:: d(100)=(/REAL(i),i=1,100/)

Конструктор может быть использован во время объявления как показано выше или в отдельном операторе. Массивы ранга 2 или более не могут быть инициализированы с помощью простого конструктора, а комбинацией конструктора (ов) и функции RESHAPE().

Reshape

Функция RESHAPE() используется для инициализации и присваивания многомерных массивов (ранг выше 1). Ее можно использовать в операторе объявления или в отдельном операторе. Формат такой:

RESHAPE (список, shape [,PAD] [,ORDER])

where список это одномерный массив или конструктор, содержащий данные и формирование одномерного массива или вектора или подпись вектора, содержащего новую форму данных. PAD - массив, содержащий данные для использования их в качестве простлойки в списке для требуемого формирования.. ORDER может быть использован для изменения порядка, в котором данные переформируются.

Размер массива определяет размеры нового массива. Элементы определяют протяженность каждой размерности. В следующем примере:

 

INTEGER, DIMENSION(3,2):: a

a=RESHAPE((/0,1,2,3,4,5/),(/3,2/))! положить значения в a

RESHAPE() генерирует массив ранга 2 с протяженностью 3 и 2 из списка значений в конструкторе. Поскольку этот массив подобен (соответствует) массиву a, использовано присваивание всего массива, дающее значение каждому элементу.. Аргумент ORDER не использован, значения из конструктора возвращены в порядке следования элементов в массиве, то есть a(1,1)=0, a(2,1)=1, a(3,1)=2, a(1,2)=3, и т д...

 


Дата добавления: 2015-11-14; просмотров: 71 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Логические выражения| Оператор и конструкция IF

mybiblioteka.su - 2015-2024 год. (0.007 сек.)