Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Fortran 90. ANSI Standard.doc
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
861.18 Кб
Скачать

Инициализация массивов Конструкторы

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

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, и т д...

 

Оператор data

Использование DATA, когда другие методы утомительны или / и невозможны: например, для инициализации более одного массива или вырезки массива. Формат такой:

DATA variable / список / ...

Например:

INTEGER :: a(4), b(2,2), c(10)

DATA a /4,3,2,1/

DATA a /4*0/

DATA b(1,:) /0,0/

DATA b(2,:)/1,1/

DATA (c(i),i=1,10,2/5*1/

DATA (c(i),i=2,10,2)/5*2/

Первый оператор DATA использует список значений, где значение для кажого элемента явно определено. Второй оператор DATA использует список для полного массива, где 4 - размер массива и 0 требуемое значение (* не есть умножение). Третий и четвертый операторы использует список в виде вырезки, где первый ряд принимает значения 0 и 0 и вторая строка принимает значения 1 и 1.

Последние два оператора используют список, представленный неявным циклом DO, где элементам с нечетными индексами заданы значения 1 , элементам с четными индексами заданы значения 2. Вспомним, что оператор DATA:

Можно располагать более чем в одной строке, но каждая строка должна иметь ключевое слово DATA

Может быть использован для переменных как для массивов.

WHERE

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

WHERE (условие) выражение

Рассмотрим следующее:

INTEGER :: a(2,3,4)

...

WHERE( a<0 ) a = 0

WHERE( a**2>10 ) a = 999

WHERE( a/=0 ) a = 1/a

Первый оператор WHERE дает результат во всех отрицательных значениях a, устанавливая в 0; неотрицательные значения остаются нетронутыми. Второй оператор WHERE дает результат в элементах данных, устанавливаемых в 999, если их квадрат больше 10. Третий оператор вычисляет обратную величину для каждого элемента данных, за исключением тех, значения которых нулевые. Конструкция WHERE допускает присваивание массивов (снова в элементах базы) только если верно логическое условие, но должно предусмотреть альтернативное присваивание на случай "не истина".Синтаксис:

WHERE (условие)

block1

[ELSEWHERE

block2]

ENDWHERE

В:

INTEGER :: btest(8,8)

...

WHERE ( btest<=0 )

btest = 0

ELSEWHERE

btest = 1/btest

ENDWHERE

 

Все элементы с отрицательными значениями в массиве btest устанавливаются в 0 и оставшиеся заменяются обратной величиной.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]