Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лек-5(информатика).doc
Скачиваний:
10
Добавлен:
03.03.2015
Размер:
263.68 Кб
Скачать

1.16.4. Использование массивов.

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

 Массивам можно присваивать значения.

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

массив = выражение

 Массивы могут быть параметрами встроенных математических (элементных) функций, например SINиSQRT. Элементные функции, получив массив в качестве аргумента, выполняются последовательно для всех элементов массива. Однако, имеется важное ограничение: используемые в качестве операндов массивы и массив, которому присваивается результат выражения, должны быть согласованы.

1.16.5. Некоторые встроенные функции для массивов.

Сумма элементов.

Функция SUM(array_a) вычисляет сумму элементов массиваarray_a.

Произведение элементов.

Функция PRODUCT(array_a) вычисляет произведение элементов массиваarray_a.

Значение максимального элемента.

Функция MAXVAL(array_a) определяет максимальный элемент массиваarray_a.

Значение минимального элемента.

Функция MINVAL(array_a) определяет минимальный элемент массиваarray_a.

Пример программы

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

real,dimension(m)::a=(/-1.,2.,-3.,4./)

real,dimension(n,n)::b=(/1.,-2.,3.,-4.,5.,-6.,7.,-8.,9./)

print 100,'vector a:',a

100 format(/2x,a,6g12.4)

print 100,'summa el-ov mas.A=',sum(a)

print 100,'proizvedenie el-ov mas.A=',product(a)

print 100,'max element mas.A=',maxval(a)

print 100,'min element mas.A=',minval(a)

print '(//10x,"matrix B"/(3g12.4))',((b(i,j),j=1,n),i=1,n)

print 100,'summa el-ov mas.B=',sum(b)

print 100,'proizvedenie el-ov mas.B=',product(b)

print 100,'max element mas.B=',maxval(b)

print 100,'min element mas.B=',minval(b)

end

Результат выполнения

vector a: -1.000 2.000 -3.000 4.000

summa el-ov mas.A= 2.000

proizvedenie el-ov mas.A= 24.00

max element mas.A= 4.000

min element mas.A= -3.000

matrix B

1.000 -4.000 7.000

-2.000 5.000 -8.000

3.000 -6.000 9.000

summa el-ov mas.B= 5.000

proizvedenie el-ov mas.B= 0.3629E+06

max element mas.B= 9.000

min element mas.B= -8.000

Функции умножения матриц и векторов.

Функция MATMUL(matrix_a, matrix_b) производит операцию умножения двух матриц, матрицы на вектор или вектора на матрицу. Аргументами этой функции должны быть массивы либо оба числового типа (целого, вещественного, комплексного), либо оба – логического типа. Над логическими матрицами и векторами функция MATMUL производит логическое умножение. Размер первого (или единственного) измерения массива matrix_b должен быть равен размеру последнего (или единственного) измерения массива matrix_a.

Функция DOT_PRODUCT(vector_a, vector_b) производит вычисление скалярного произведения векторов. Правила в отношении типов аргументов такие же, что и для функции MATMUL, аргументы – одномерные массивы одинакового размера.

Функция транспонирования матрицы.

Функция TRANSPOSE(matrix) выполняет транспонирование матрицы (массива ранга 2). Аргумент может быть любого типа.

Пример выполнения лабораторной работы 6.

Требуется вычислить скалярное произведение - вариант 31.

Пример реализующей программы

integer,parameter::n=3

real,dimension(n,n)::a,b

real,dimension(n)::p,q,r

open(1,file='lab6var31.dat')

read(1,*)((a(i,j),j=1,n),i=1,n)

read(1,*)((b(i,j),j=1,n),i=1,n)

read(1,*)p,q,r

print 100,'matrix A',((a(i,j),j=1,n),i=1,n)

print 100,'matrix B',((b(i,j),j=1,n),i=1,n)

print 100,'vector P',p

print 100,'vector Q',q

print 100,'vector R',r

100 format(/10x,a/(3g12.4))

s=dot_product(matmul(a,p),matmul(b,q+r)) !var31

print '(//1x,"var.31: s=(Ap,B(q+r))=",g12.4)',s

end

Результат выполнения программы

matrix A

1.000 2.000 3.000

1.000 2.000 1.000

3.000 2.000 0.000

matrix B

4.000 1.000 2.000

0.000 4.000 3.000

1.000 1.000 1.000

vector P

0.1000 1.700 -1.500

vector Q

-1.600 0.8000 1.100

vector R

-0.7000 1.300 0.2000

var.31: s=(Ap,B(q+r))= 33.17

Исходные данные вводятся из файла lab6var31.dat.

1 2 3

1 2 1

3 2 0

4 1 2

0 4 3

1 1 1

0.1 1.7 -1.5

-1.6 0.8 1.1

-0.7 1.3 0.2

21