Операторы, описывающие массивы, необходимо располагать в начале программы перед первым исполняемым оператором.




В Фортране список операторов ввода READ и вывода PRINT или WRITE может содержать как имена простых переменных и элементов массива, так и имена массивов. В последнем случае вводу-выводу подлежат все элементы массива в «естественной последовательности» (т.е. сначала растет первый индекс, затем второй и т.д.). Так, если в программе описан массив A(2,2) и имеется оператор ввода READ *, A, то численные значения необходимо задавать в такой последовательности: A(1,1), A(2,1), A(1,2), A(2,2), т.е. любая матрица вводится по столбцам. Для изменения порядка ввода-вывода или если требуется передать только часть элементов массива, можно использовать неявную форму оператора цикла. Например, ввод матрицы A(2,2) по строкам осуществляет оператор READ *, ((A(I,J), J=1,2), I=1,2).

Не следует забывать, что в Фортране функции «что вводить (выводить)» и «как вводить (выводить)» распределены между операторами ввода-вывода и оператором FORMAT.

Если в программе предусмотрен ввод исходных данных с клавиатуры, то в процессе отладки приходится задавать одни и те же численные значения много раз. Поэтому, когда исходных данных достаточно много, удобнее записать их перед счетом программы в файл данных, а в программе предусмотреть оператор, считывающий данные из файла данных. Кроме того, результаты также имеет смысл выводить в файл данных, чтобы иметь возможность получить распечатку результатов счета. Обращение к файлу данных производится по его логическому номеру N, указанному в операторах READ (N,…) или WRITE (N,…). С помощью оператора OPEN можно как назначать логические номера уже имеющимся файлам, так и создавать новые файлы с указанием соответствующего логического номера, например, OPEN (1, FILE=’LAB4.TXT’). После выполнения этого оператора файлу LAB4.TXT будет соответствовать логический номер 1. Файл LAB4.TXT создается в папке проекта либо предварительно до запуска программы на счет, либо в процессе работы программы в момент выполнения оператора OPEN. Для завершения доступа к файлу используется оператор CLOSE.

Типовые примеры использования массивов
в программах

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

В Фортран встроено большое число функций, позволяющих:

· выполнять вычисления в массивах, например, суммировать элементы массива или находить его максимальный элемент;

· преобразовывать массивы, например, можно получать из одномерного массива двумерный;

· получать справочные данные о массиве (размер, форма и значения границ каждого измерения).

1. Ввод одномерного массива B(8) из файла данных:

READ (1,*) B

Численные значения (8 значений) перед запуском программы на счет записываются через запятую или пробел в файл данных, соответствующий логическому номеру 1.

2. Ввод двумерного массива A(4,4) из файла данных:

а) построчно с использованием неявной формы цикла

READ (1,*) ((A(I,J), J=1,4), I=1,4)

Перед выполнением программы численные значения записываются в файл данных, соответствующий логическому номеру 1, в четыре строки по четыре элемента в строку через запятую или пробел;

б) построчно с использованием сечения массива (простейшей формы индексного триплета)

READ (1,*) (A(I,:),I=1,4)

Файл данных такой же, как и в случае а).

Индексный триплет применяется для получения доступа к некоторому подмножеству элементов массива, называемому сечением массива. При задании сечения массива индексный триплет подставляется вместо одного из индексов массива.

Индексный триплет имеет вид:

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

Все параметры триплета являются необязательными. При отсутствии нижней (верхней) границы триплета ее значение принимается равным значению нижней (верхней) границы соответствующего индекса массива. При отсутствии шага его значение принимается равным 1.

3. Вывод одномерного массива B(4) на экран:

PRINT 5, B

5 FORMAT (‘ VECTOR B’/4F10.4)

При выводе в файл данных оператор PRINT заменяется на оператор WRITE, например, при выводе двумерного массива A(4,4)

WRITE (1,10) (A(I,:), I=1,4)

10 FORMAT (‘ MATRICA A’/4(4F10.4/))

4. Суммирование элементов одномерного массива B(10) :

а) с использованием встроенной функции SUM

S=SUM(B),

б) по следующему алгоритму: начальное значение суммы принимается равным нулю , затем в цикле по от 1 до 10 накапливается сумма

S=0.

DO I=1,10

S=S+B(I)

END DO.

5. Произведение элементов одномерного массива B(10) :

а) целесообразно использовать встроенную функцию PRODUCT

P=PRODUCT(B),

б) можно составить алгоритм, аналогичный алгоритму сложения элементов массива, в котором начальное значение произведения необходимо положить равным единице, а операцию сложения заменить произведением

P=1.

DO I=1,10

P=P*B(I)

END DO.

6. Пусть требуется определить максимальный элемент массива B из N элементов и его номер K:

а) Определение максимального (или минимального) элемента одномерного массива и номера этого элемента выполняется по следующему алгоритму: сначала за максимальный принимается первый элемент массива и, следовательно, номером максимального элемента будет единица . Затем в цикле по от 2 до N текущее значение максимального сравнивается с . Если условие не выполняется, то цикл повторяется. Если условие выполняется, то текущему значению максимального присваивается значение , а его номеру – значение .

INTEGER, PARAMETER:: N=10

REAL B(N) /1.,2.,3.,4.,5.,6.,5.,4.,3.,2./

S=B(1); K=1

DO I=2,N

IF (S<B(I)) THEN

S=B(I); K=I

END IF

END DO

PRINT *, ’ S=’, S, ‘ K=’, K

END,

б) Определение максимального (или минимального) элемента одномерного массива и номера этого элемента можно выполнить с использованием встроенных функций MAXVAL и MAXLOC (MINVAL, MINLOC).

INTEGER, PARAMETER:: N=10

REAL B(N) /1.,2.,3.,4.,5.,6.,5.,4.,3.,2./

INTEGER K(1)

S=MAXVAL(B); K=MAXLOC(B)

PRINT *, ’ S=’, S, ‘ K=’, K

END.

7. Пусть требуется расположить элементы одномерного массива B(10) в порядке невозрастания, т.е. так, чтобы для всех элементов массива выполнялось условие: при . Рассмотрим один из способов решения этой задачи. Сначала из всех элементов при найти максимальный (его величину и номер ), затем переставить первый и максимальный элементы. Из оставшихся девяти элементов при найти максимальный и поменять его местами со вторым и т.д. Перестановка двух элементов массива с номерами и выполняется следующим образом: элемент равен , поэтому сначала следует заменить на , а затем присваивается значение . Программа упорядочения элементов массива будет иметь следующий вид:

DO J=1,9

S=B(J); K=J

DO I=J+1,10

IF (S<B(I)) THEN

S=B(I); K=I

END IF

END DO

B(K)=B(J); B(J)=S

END DO.

Внешний цикл по изменяет номер элемента, с которого начинается поиск.

8. Пусть требуется составить одномерный массив С(4) из максимальных элементов строк матрицы А(4,4). Программа строится по схеме двойного цикла. Параметром внешнего цикла является номер строки . Во внутреннем цикле по определяется максимальный элемент строки:

DO I=1,4

C(I)=A(I,1)

DO J=2,4

IF (C(I)<A(I,J)) C(I)=A(I,J)

END DO

END DO.

9. Пусть требуется умножить матрицу А(4,4) на вектор В(4). Результатом умножения матрицы А(4,4) на вектор В(4) является вектор С(4), элементы которого определяются по формуле

а) используем встроенную функцию MATMUL, которая выполняет матричное умножение операндов

C=MATMUL(A,B),

б) алгоритм строится по схеме двойного цикла: внешний цикл по параметру , во внутреннем цикле по параметру производится суммирование:

DO I=1,4

C(I)=0.

DO J=1,4

C(I)=C(I)+A(I,J)*B(J)

END DO

END DO.

10. Пусть требуется найти произведение D матрицы A на матрицу F, где A(4,4), F(4,4) и D(4,4). Умножение матрицы на матрицу осуществляется по схеме тройного цикла в соответствии с формулой , где и

а) используем схему тройного цикла с суммированием во внутреннем цикле

DO I=1,4

DO J=1,4

D(I,J)=0.

DO K=1,4

D(I,J)=D(I,J)+A(I,K)*F(K,J)

END DO

END DO

END DO,

б) используем схему двойного цикла со встроенной функцией суммирования

DO I=1,4

DO J=1,4

D(I,J)=SUM(A(I,:)*F(:,J))

END DO

END DO.

11. Пусть требуется вычислить элементы матрицы D(4,4) по формулам:

.

Программа, использующая блочный оператор IF, имеет следующий вид:

DO I=1,4

DO J=1,4

Z= B(I)+B(J)

IF (Z<-1.) THEN

D(I,J)= Z**2

ELSE IF (Z>1.) THEN

D(I,J)=SQRT(Z)

ELSE

D(I,J)=2.*Z

END IF

END DO

END DO.


Варианты заданий к лабораторной работе № 4

В вариантах заданий в качестве исходных данных используются следующие массивы:

1. Заданы массивы А(4,4), В(4). Вычислить элементы массивов С(4), D(4,4), F(4,4) в соответствии с формулами:

, .

Вывести на печать массивы C, D, F.

2. Заданы массивы A(4,4), B(4). Вычислить элементы массива по формуле:

.

Найти максимальный элемент массива P=C+B. Преобразовать матрицу A, разделив все ее элементы на найденный максимум. Печатать A, B, C, P.

3. Заданы массивы A(4,4), B(4). Из 1-й строки А вычесть 3-ю и в полученной матрице найти максимальный элемент. Из всех элементов массива В вычесть найденный максимум. Печатать А, В.

4. Задан массив В(4). Вычислить элементы массива С(4) по формулам:

.

Вычислить элементы матрицы D(4,4) по формуле . Найти , из всех элементов массива B вычесть S. Печатать B, C, D, S.

5. Задан массив А(4,4). Составить вектор С(4) из минимальных элементов в столбцах А. Из каждой строки А вычесть С. Печатать А, С.

6. Задан массив А(4,4). Составить вектор С(4) из максимальных модулей элементов в строках А. Элементы вектора С разделить на максимальный элемент С. Из диагональных элементов А вычесть С. Печатать A, C.

7. Заданы массивы А(4,4), В(4). Найти С=АВ. Максимальный элемент С и его номер . Из k -й строки матрицы А вычесть С. Печатать A, B, C, .

8. Заданы массивы А(4,4), В(4). Найти максимальные элементы массивов А и В и поменять их местами. Печатать А, В.

9. Задан массив В(4). Вычислить элементы массива С(4) по формулам:

.

Вычислить элементы матриц D(4,4) и F(4,4) . Найти Q=DF. Печатать С, D, F, Q.

10. Заданы массивы А(4,4), В(4). Составить вектор С(4) из максимальных элементов в строках А. Вычислить P=BC. Из диагональных элементов А вычесть P. Печатать А, В, С, Р.

11. Задан массив А(4,4). Вычислить элементы массива по формулам. Найти F=AD. Печатать A, D, F.

.

12. Заданы массивы А(4,4), В(4). Найти максимальный элемент В и его номер , минимальный элемент В и его номер . В матрице А элемент заменить на найденный максимум, – на минимум. В векторе В поменять местами максимальный и минимальный элементы. Вычислить C=AB. Печатать А, В, С.

13. Заданы массивы А(4,4), В(4). Упорядочить B в порядке неубывания. Из каждой строки А вычесть В. Печатать А, В.

14. Заданы массивы А(4,4), В(4). Вычислить С=АВ. Упорядочить С в порядке невозрастания. Из столбцов А вычесть С. Печатать А, В, С.

15. Задан массив В(4). Вычислить С(4) по формулам:

, , , .

Вычислить элементы D(4,4) по формулам:

.

Печатать B, C, D.

16. Заданы массивы А(4,4), В(4). Упорядочить строки А по неубыванию значений первых элементов строк. Вычислить элементы вектора С(4) по формуле . Печатать A, B, C.

17. Задан массив В(4). Вычислить элементы матрицы D(4,4) по формулам:

 .

Найти максимальные элементы D и B, поменять их местами. Печатать B, D.

18. Задан массив В(4). Вычислить элементы матрицы D(4,4) по формулам. Из всех элементов D вычесть максимальный элемент В. Вычислить C=DB. Печатать B, C, D.

.

19. Задан массив А(4,4). Вычислить элементы вектора С(4) по формулам:

, ,

, .

Вычислить P=AC. Из диагональных элементов A вычесть вектор Р. Печатать А, С, Р.

20. Заданы массивы A(4,4), В(4). В матрице A найти минимальный и максимальный элементы, поменять их местами. Вычислить C=АВ. Печатать A, В, С.

21. Заданы массивы A(4,4), В(4). В массиве B найти максимальный и минимальный элементы, поменять их местами. Вычислить C=АВ. Из диагональных элементов A вычесть вектор С. Печатать А, В, С.

22. Задан массив A(4,4). Из диагональных элементов A вычесть максимальный элемент А. Вычислить вектор С(4) как сумму 1-й и 3-й строк А. Вычислить P=АС. Печатать A, С, Р.

23. Заданы массивы А(4,4), В(4). Вычислить C=АВ. Упорядочить C в порядке неубывания. Из диагональных элементов A вычесть вектор С. Печатать А, В, С.

24. Заданы массивы A(4,4), В(4). Вычислить элементы массива С(4) как сумму элементов в соответствующих строках А. Из диагональных элементов А вычесть С. Вычислить P=АС. Печатать A, С, Р.

25. Задан массив А(4,4). Вычислить элементы массива D(4,4) по формулам. Вычислить F=AD. Печатать A, D, F.

.

26. Задан массив B(4). Вычислить элементы массива C(4) по формуле . Вычислить элементы массива D(4,4) по формуле . Печатать B, C, D.

27. Задан массив B(4). Вычислить элементы массива C(4) по формуле . Вычислить элементы массива D(4,4) по формуле . Печатать B, C, D.

28. Заданы массивы A(4,4), В(4). Вычислить C=АВ. Из первой строки A вычесть B, из второй строки A вычесть вектор С. Печатать A, B, C.

29. Заданы массивы A(4,4), В(4). Найти максимальный и минимальный элементы B и поменять их местами. Вычислить C=АВ. Печатать A, В, С.

30. Задан массив B(4). Вычислить элементы массива C(4) по формуле: . Найти и поменять местами максимальные элементы B и С. Вычислить элементы массива D(4,4) по формуле . Печатать B, C, D.



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2019-04-12 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: