Объявление статических массивов
Границы значений индекса массива могут задаваться в интервальной форме или одним значением верхнего индекса: ТИП ИМЯ([нижний_индекс :] верхний_индекс) Для статических массивов границы индекса задаются константами. Например: 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
Популярное: Как построить свою речь (словесное оформление):
При подготовке публичного выступления перед оратором возникает вопрос, как лучше словесно оформить свою... Личность ребенка как объект и субъект в образовательной технологии: В настоящее время в России идет становление новой системы образования, ориентированного на вхождение... Как вы ведете себя при стрессе?: Вы можете самостоятельно управлять стрессом! Каждый из нас имеет право и возможность уменьшить его воздействие на нас... ©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (325)
|
Почему 1285321 студент выбрали МегаОбучалку... Система поиска информации Мобильная версия сайта Удобная навигация Нет шокирующей рекламы |