Мегаобучалка Главная | О нас | Обратная связь


Объявление статических массивов



2016-01-26 322 Обсуждений (0)
Объявление статических массивов 0.00 из 5.00 0 оценок




Границы значений индекса массива могут задаваться в интервальной форме или одним значением верхнего индекса:

ТИП ИМЯ([нижний_индекс :] верхний_индекс)

Для статических массивов границы индекса задаются константами. Например:

real G(-10:5) – одномерный вещественный массив, индексы элементов которого могут принимать целые значения от -10 до 5. Размер массива равен 16. Другой вариант:

integer D(100) – одномерный массив целого типа, состоящий из 100 элементов. Нижнее значение индекса по умолчанию принимается равным 1.

Примеры описания двумерных массивов (матриц):

integer A(0:3,0:4) – целая матрица размером 20 (4×5);

integer A(3,4) – целая матрица размером 12 (3×4).

В описаниях массивов может использоваться ключевое слово DIMENSION. Примеры:

real, dimension(10) X - здесь dimension – атрибут размерности;

dimensionX(10) – оператор описания массива; тип определяется по умолчанию.

При описании статических массивов можно использовать именованные константы. Например:

integer, parameter:: m = 3, n = 4

integer x(m, n) ! или x(1:m, 1:n)

integer,dimension(m, n) :: y

При объявлении статического массива может быть выполнена его иници-ализация:

integer а(10) /1,2,3,4,4,4,5,5,5,5/

или с использованием коэффициента повторения:

integer а(10) /1, 2, 3, 3*4, 4*5/.

Элементы двумерного массива располагаются в оперативной памяти в последовательности по столбцам. Например, в программе описан двумерный массив: integer g(3,3). В последовательной цепочке ячеек памяти компьютера его элементы расположатся в следующем порядке:

g(1,1), g(2,1), g(3,1), g(1,2), g(2,2), g(3,2), g(1,3), g(2,3), g(3,3).

При выводе массива с помощью оператора:

print *,g

его элементы расположатся на экране в указанном выше порядке.

Исходные значения многомерных массивов удобнее всего задавать с помощью файлов. Например, записать исходный массив в текстовый файл с помощью программы Блокнот, а затем в программе считать массив в оперативную память.

Объявление динамических массивов

Динамические массивы объявляются с атрибутом ALLOCATABLE. Каждое измерение обозначается двоеточием (:). Память под динамические массивы выделяется при выполнении программы оператором

allocate (список динамических массивов).

У каждого массива в списке должны быть указаны границы каждого измерения, значения которых предварительно могут быть вычислены или введены с клавиатуры. Для освобождения динамической памяти от размещенных в ней массивов используется оператор

deallocate (список динамических массивов)

Пример:

integer n, m

integer, allocatable :: x(:,:)

read*, n, m

allocate (x(n, m))!выделение памяти под массив x(n, m)

………..

deallocate (x) !освобождение памяти, занятой массивом

Сечение массива

Сечением массива называется некоторое подмножество его элементов. Фортран позволяет работать с сечением массива как с единым объектом данных.

Сечение массива задается с помощью индексного триплета:

[нижняя граница]:[верхняя граница]:[шаг].

Параметры триплета – целочисленные выражения. Каждый элемент триплета является необязательным.

Например, в программе описан массив: integer X(10). Возможны следующие варианты обозначения сечений этого массива:

X(:5) – первые 5 элементов массива;

X(5:) – элементы массива с 5-го по 10-й;

X(2:7) – элементы массива со 2-го по 7-й;

X(2:10:2) – все четные элементы массива;

X(::2) – все нечетные элементы массива.

Примерами сечения двумерного массива являются его строки и столбцы, например:

real p(4, 10)

p(3, :) = 0 ! 3-я строка матрицы обнуляется

p(:, 5) = 1 ! 5-й столбец матрицы заполняется единицами

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

Примерпрограммы перестановки столбцов матрицы.

programColumn

integer,parameter :: m=3, n=3

real, dimension(1:m,1:n) :: a

realvect(m)

real:: pr, s=0.

integer :: i, c1=1, c2=3

a(1,:)=(/1.,2.,3./) !инициализация 1-й строки с

! помощью сечения

a(2,:)=(/(i*2,i=1,3)/)!инициализация 2-й строки,

!встроенный DO-цикл

a(3,:)=(/3.,2.,1./) !инициализация 3-й строки

print *,' перестановка столбцов c1 и c2'

do i=1,n !вывод матрицы с помощью сечения

print *, a(i,:)

End do

vect = a(:,c1) !запоминание столбца c1

!сечение и vect д.б. согласованы

a(:,c1) = a(:,c2) !перестановка столбцов c1и c2

a(:,c2) = vect

print *,'Результат'

do i=1,n

print *,a(i,:)

End do

End program

 

Оператор WHERE

Оператор WHERE позволяет обращаться одновременно к множеству элементов массива, удовлетворяющих определенному условию. Один оператор WHERE заменяет собой структуру «цикл с вложенным ветвлением».

Например, в программе объявлен массив:

integer:: R(5) = (/ 1, -1, 1, -1, 1 /)

Требуется обнулить все его отрицательные элементы.

Задачу можно решить следующим традиционным способом:

do i = 1, 5

if(R(i) < 0) R(i) = 0

End do

 

С помощью оператора WHERE задача решается так:

where(R <0) R=0

Смысл следующий: всем элементам массива R, меньшим нуля, присвоить ноль.

Существует также конструкция WHERE-ELSEWHER-ENDWERE. Например, в том же самом массиве требуется занулить отрицательные и удвоить все остальные элементы. Программа будет следующей:

where(R < 0)

R = 0

Elsewhere

R=2*R

End where

 



2016-01-26 322 Обсуждений (0)
Объявление статических массивов 0.00 из 5.00 0 оценок









Обсуждение в статье: Объявление статических массивов

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

Популярное:
Как выбрать специалиста по управлению гостиницей: Понятно, что управление гостиницей невозможно без специальных знаний. Соответственно, важна квалификация...
Модели организации как закрытой, открытой, частично открытой системы: Закрытая система имеет жесткие фиксированные границы, ее действия относительно независимы...



©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (322)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.009 сек.)