Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

учебное пособие по лр_фортран

.pdf
Скачиваний:
109
Добавлен:
21.03.2016
Размер:
1.32 Mб
Скачать

 

 

 

 

62

Integer

M, N

!

размеры матрицы по измерениям

Integer

i, j

!

переменные циклов

Open(1,FILE=’In.txt’) !

файл с исходной матрицей

Open(2,FILE=’Out.txt’) !

результирующий файл

Read(1,*)M,N ! ввод размеров (строк-M, столбцов-N) Allocate(A(1:M,1:N),B(1:N))! размещение динамических массивов в памяти ! ввод массива

Read(1,*)(A(i,:),i=1,M) ! неявный цикл по секциям-строкам матрицы

! *****

По блок-схеме, составленной для индивидуального задания, написать операторы программы. Не забудьте добавить необходимые описания переменных и массивов.

! *****

Deallocate(A)! освобождение динамической памяти

End Program Matrix

Результаты работы программы

Содержимое файла Out.txt для приведенного примера задания (одна матрица):

В исходной

матрице

3 строки и 5 столбцов

Исходная матрица

12

-5

0

-123

-33

0

 

0

0

0

0

0

 

0

12

0

1

Координаты

первого

ненулевого элемента строки = [ 1, 2]

В строке 2

все

элементы равны 0

Координаты

первого

ненулевого элемента строки = [ 3, 3]

Преобразованная матрица

-5

0

123

-33

12

0

 

0

0

0

0

0

 

0

-12

0

1

Массив B –

суммы отрицательных элементов столбцов

0

 

0

-45

0

-5

Контрольные вопросы к защите работы

1.Что такое двумерный массив? Его аналоги в математике на примере двух массивов. Описание двумерных массивов в Fortran 90, диапазон индекса.

2.Форма – основная характеристика массива, напишите примеры конформных (одинаковых по форме) массивов.

3.Укажите порядок размещения элементов двумерных массивов в памяти компьютера. Приведите пример.

4.В программе объявлен двумерный массив A(12,12). Как его описать

вFortran 90? Как записать в программе ссылку: а) на полный массив, б) на секцию массива, в) на элемент массива?

Практикум по современному Фортрану

63

5.Допустим ли оператор присваивания применительно к объявленным массивам? Почему?

Real A(2, -3:3), B(0:1, 0:6), C(-2:-1, 1:7)

A= cos(B**2)- 3*C

6.Поясните правила записи выражений в операторах присваивания с массивами на примерах.

7.Как работает оператор where? Приведите примеры оператора where а) без блока; в) с одним блоком; с) с двумя блоками.

8.Назовите 4 функции для работы с минимумами и максимумами в массиве; приведите примеры для двумерных массивов.

9.Назовите 7 фунций редукции массива и приведите три примера их примененения к двумерным массивам.

10.Каковы тип и форма результата для функций редукции при работе с двумерным массивом ?

11.Что произойдет при выполнении оператора Read?

Real, dimension(1:12, 1:12) A

Read(1,*) A(1, 12)

12.Как ввести первую строку массива, объявленного оператором

Real, dimension(1:20, 1:12):: A?

13.Как вывести вторую строку массива, объявленного оператором

Real, dimension(1:20, 1:12):: A?

14.Что будет выведено при выполнении оператора Write?

Real, dimension(1:12, 1:12):: A

Write(*,*) A(12,12)

15. Что и как будет выведено при выполнении оператора Write?

Real, dimension(1:12, 1:12):: A

Write(*,11) A(10:12, 10:12) 11 Format(F10.2)

Пример контрольного задания

1.С использованием циклов решить задачу, аналогичную заданиям I из вариантов заданий. Составить блок-схему и написать программу. Вывести найденное значение по формату.

2.С помощью встроенных функций решить задачу, аналогичную заданиям II из вариантов заданий.

3.Записать операторы для вывода элементов правой нижней четверти матрицы. Массив объявлен оператором:

Real, dimension(1:8, 1:10):: A

4.В файле data.txt подготовлены данные в виде целочисленной мат-

рицы

11

12

13

14

15

 

21

22

23

24

25

 

31

32

33

34

35

Практикум по современному Фортрану

64

Что будет выведено на экран монитора (с пробелами) в результате работы программы, если добавить вывод массива?

Program podvoh

Integer, dimension(3,5):: Mas = 0

Open(1,file = ’data.txt’) Read(1,*) Mas(2, 1:5:2)

! добавьте вывод всего массива по формату

End Program podvoh

Варианты индивидуальных заданий

По умолчанию все массивы вещественные и обе части задания выполняются для одной и той же матрицы.

Вариант 1

I.Сформировать одномерный массив из элементов, расположенных по «периметру» матрицы (элементы первой и последней строк и первого и последнего столбца). Элементы «периметра» выбирать по часовой

стрелке, начиная с верхнего левого элемента (элемента a11). Вывести сформированный одномерный массив.

II.Составить и вывести одномерный массив из средних квадратичных значений элементов каждого столбца матрицы.

Вариант 2

I.Сформировать матрицу B из элементов матрицы

А. Каждый элемент bik должен быть равен сумме элементов матрицы А из области, определяемой индексами i,k в соответствии с рисунком. Вывести результирующую матрицу.

II.Составить и вывести одномерный массив из сумм положительных элементов с четными номерами строк в каждом столбце матрицы A.

Вариант 3

I.Если сумма положительных элементов матрицы больше произведения модулей ее отрицательных элементов, сформировать одномерный массив из положительных элементов матрицы, иначе массив формировать из ее отрицательных элементов. При формировании одномерного массива матрицу просматривать построчно. Вывести:

°вычисленные значения суммы и произведения;

°полученный одномерный массив.

II.Составить и вывести одномерный массив из максимальных отрицательных элементов среди второй половины каждой строки матрицы. Если таких элементов в строке нет, соответствующий элемент одномерного массива должен быть равен 0.

Практикум по современному Фортрану

65

Вариант 4

I.Отобрать в матрицу B только те строки матрицы A, элементы которых расположены в порядке возрастания. Если в матрице A таких строк нет, вывести сообщение, иначе вывести:

°номера строк матрицы A, помещенных в матрицу B;

°полученную матрицу B.

II.Найти и вывести сумму положительных элементов матрицы A с двумя нечетными индексами.

Вариант 5

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

II.Найти значение максимального элемента из заштрихованной части преобразованной матрицы и вывести это значение и координаты его в матрице. Границы заштрихованной части выберите сами.

Вариант 6

I.Записать в одномерный массив максимальные отрицательные элементы каждой строки матрицы. Для строк матрицы, не содержащих отрицательных элементов, в результирующий массив записать 0. Вывести полученный одномерный массив.

II.Составить и вывести одномерный массив из средних квадратичных значений элементов с четными номерами строк в каждом столбце матрицы.

Вариант 7

I.Найти среднее арифметическое значение максимальных по модулю элементов строк матрицы. Вывести:

°значения максимальных по модулю элементов строк (со знаком);

°полученное значение.

II.Составить и вывести одномерный массив из количеств элементов со значениями в интервале [C, D] в каждой строке матрицы.

Вариант 8

I.В каждом столбце целочисленной матрицы подсчитать сумму положительных элементов с четными значениями и записать ее в одномерный массив. Вывести полученный массив.

II.Составить и вывести одномерный массив из минимальных положительных элементов среди первой половины каждого столбца матрицы. Если таких элементов в столбце нет, соответствующий элемент одномерного массива должен быть равен 0.

Практикум по современному Фортрану

66

Вариант 9

I.Вычислить среднее арифметическое значение элементов каждого столбца матрицы без учета минимального и максимального элементов этого столбца; записать это значение в одномерный массив. Вывести:

°значения минимума и максимума столбцов;

°полученный одномерный массив.

II.Составить и вывести одномерный массив из сумм элементов со значениями из интервала [C, D] в каждом столбце матрицы.

Вариант 10

I.Сформировать матрицу B из элементов матрицы

А. Каждый элемент bik должен быть равен сумме элементов матрицы А из области, определяемой индексами i,k в соответствии с рисунком.

Вывести результирующую матрицу.

II.Найти и вывести среднее геометрическое положительных элементов матрицы А с двумя четными индексами. Если таких элементов в матрице нет, вывести сообщение.

Вариант 11

I.Преобразовать целочисленную матрицу, удалив из нее строки, содержащие нулевые элементы, и сдвинув оставшиеся строки. Если нулевых элементов в матрице нет, вывести сообщение. Вывести:

°номера удаленных строк или сообщение;

°преобразованную матрицу.

II.Составить и вывести одномерный массив из максимальных отрицательных элементов каждого столбца преобразованной матрицы. Если отрицательных элементов в столбце нет, соответствующий элемент одномерного массива должен быть равен 0.

Вариант 12

I.Преобразовать целочисленную матрицу, переставив на первое место столбец с наибольшим количеством нулей (сдвинуть остальные столбцы). При отсутствии в матрице нулевых элементов вывести сообщение, иначе вывести преобразованную матрицу.

II.Найти значение минимального ненулевого элемента в заштрихованной части преобразованной матрицы и вывести это значение и его координаты в матрице. Границы заштрихованной части выберите сами. Если таких элементов в матрице нет, вывести сообщение.

Практикум по современному Фортрану

67

Вариант 13

I.Сформировать и вывести квадратную матрицу B из элементов квадратной матрицы А. Каждый элемент

bik должен быть равен сумме элементов матрицы А из области, определяемой индексами i,k в соответствии с рисунком.

II.Составить и вывести одномерный массив из количеств элементов, меньших D, с четными номерами строк в каждом столбце матрицы А.

Вариант 14

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

°суммы отрицательных и положительных элементов матрицы;

°результирующий массив.

II.Найти и вывести координаты и значение максимального элемента матрицы с двумя четными индексами.

Вариант 15

I.Найти максимальный и минимальный по модулю ненулевые элементы матрицы и поменять их местами. Вывести:

°координаты найденных элементов;

°преобразованную матрицу.

II.Составить и вывести одномерный массив из произведений ненулевых элементов с нечетными номерами столбцов в каждой строке преобразованной матрицы. Если таких элементов в строке нет, соответствующий элемент одномерного массива должен быть равен 0.

Вариант 16

I.Записать в одномерный массив столбец матрицы с максимальным количеством отрицательных элементов. При отсутствии отрицательных элементов в матрице вывести сообщение. Вывести:

°количество отрицательных элементов в столбцах или сообщение;

°результирующий одномерный массив.

II.Составить и вывести одномерный массив из сумм квадратов отрицательных элементов каждой строки матрицы. Если отрицательных элементов в строке нет, соответствующий элемент одномерного массива должен быть равен 0.

Практикум по современному Фортрану

68

Вариант 17

I.Если в каждой строке целочисленной матрицы А есть равный нулю элемент, то сформировать матрицу B из строк матрицы А с четными номерами, иначе - из ее строк с нечетными номерами. Вывести:

°номера строк, в которых нет нулей;

°полученную матрицу.

II.Составить и вывести одномерный массив из количеств отрицательных элементов с четными номерами столбцов в каждой строке матрицы А.

Вариант 18

I.Заменить максимальный элемент матрицы A средним арифметическим его соседей. Соседями элемента aij в матрице считать элементы

ai-1,j , ai+1,j , ai,j-1 , ai,j+1 .Следует учесть, что в зависимости от положения элемента aij в матрице у него может быть 2, 3 или 4 соседа. Вывести:

°координаты и значение максимального элемента матрицы;

°преобразованную матрицу.

II.Найти и вывести количество ненулевых элементов преобразованной матрицы с двумя нечетными индексами.

Вариант 19

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

II.Составить и вывести одномерный массив из средних арифметических значений элементов с нечетными индексами столбцов в каждой стро-

ке преобразованной матрицы.

Вариант 20

I.Сформировать матрицу B из элементов матрицы

А. Каждый элемент bik должен быть равен максимальному элементу матрицы А из области, определяемой индексами i,k в соответствии с рисунком.

Вывести результирующую матрицу.

II.Составить и вывести одномерный массив из минимальных модулей ненулевых элементов каждой строки матрицы A. Если в строке все элементы равны 0, соответствующий элемент одномерного массива должен быть равен 0.

Практикум по современному Фортрану

69

Вариант 21

I.Найти координаты и значение максимума из минимальных элементов каждого столбца матрицы. Вывести:

°координаты минимальных элементов столбцов;

°координаты и значение максимума.

II.Составить и вывести одномерный массив из произведений ненулевых элементов каждого столбца матрицы. Если в столбце все элементы равны 0, соответствующий элемент одномерного массива должен быть равен 0.

Вариант 22

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

°координаты найденных в строках элементов;

°преобразованную матрицу.

II.Найти и вывести координаты максимального элемента со значением в интервале [C, D] в преобразованной матрице. Если таких элементов в матрице нет, вывести сообщение.

Вариант 23

I.Записать в одномерный массив модули разности первого и последнего отрицательных элементов каждого столбца матрицы. Для столбцов, содержащих менее двух отрицательных элементов, в результирующий массив записать (-1) и вывести сообщение. Вывести:

°для каждого столбца – значения первого и последнего отрицательных элементов или сообщение;

°полученный одномерный массив.

II.Составить и вывести одномерный массив из максимальных модулей элементов каждой строки матрицы.

Вариант 24

I.Сформировать матрицу B из элементов матрицы

А. Каждый элемент bik должен быть равен максимальному элементу матрицы А из области, определяемой индексами i,k в соответствии с рисунком.

Вывести результирующую матрицу.

II.Составить и вывести одномерный массив из минимальных положительных элементов с четными индексами столбцов в каждой строке матрицы A. Если таких элементов в строке нет, соответствующий элемент одномерного массива должен быть равен 0.

Практикум по современному Фортрану

70

Вариант 25

I.Поменять местами первый и второй положительные элементы в каждом столбце матрицы. Для столбцов матрицы, содержащих менее двух положительных элементов, вывести сообщение. Вывести:

°координаты элементов, найденных в каждом столбце;

°преобразованную матрицу.

II.Составить и вывести одномерный массив из сумм отрицательных элементов каждой строки преобразованной матрицы.

Вариант 26

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

II.Найти и вывести произведение ненулевых элементов матрицы со значениями в интервале [C, D]. Если таких элементов в матрице нет, вывести сообщение.

Вариант 27

I.Рассматривая построчно целочисленную матрицу А, сформировать три одномерных массива, поместив в массив В - четные элементы, в массив С - элементы, кратные 3, в массив D - элементы, кратные 5. Возможна запись элемента в два или три массива. Вывести полученные одномерные массивы.

II.Найти и вывести сумму отрицательных элементов матрицы с двумя четными индексами.

Вариант 28

I.Сформировать квадратную матрицу B из элементов

квадратной матрицы А. Каждый элемент bik должен быть равен максимальному элементу матрицы А из области, определяемой индексами i,k в соответствии с рисунком.

Вывести результирующую матрицу.

II.Найти и вывести сумму отрицательных элементов матрицы, больших D (D < 0). Если таких элементов в матрице нет, вывести сообщение.

Вариант 29

I.В каждом столбце целочисленной матрицы найти количество рядом стоящих пар одинаковых элементов. Результаты записать в одномерный массив. Вывести полученный массив.

II.Составить и вывести одномерный массив из сумм последних K элементов каждой строки матрицы. (K меньше числа элементов в строке матрицы).

Практикум по современному Фортрану

71

Вариант 30

I. Умножить матрицу A на вектор B. Произведением матрицы A(M, N) и вектора B(N) является вектор C(M), каждый элемент которого вычис-

n

ляется по формуле cj = ajk bk . Вывести полученный массив.

k=1

II.Найти и вывести координаты и значение минимального элемента матрицы. При поиске минимума исключить из рассмотрения первую и последнюю строки и первый и последний столбцы.

1.8.Решение задач с использованием функций

Задание

1.Составить функцию в соответствии с индивидуальным заданием. В алгоритме функции использовать циклы (встроенными функциями для массивов не пользоваться).

2.Написать главную программу, которая должна содержать интерфейс с правилами применения функции и выполнять следующие действия:

a)ввод данных из файла In.txt на диске и форматный вывод их в результирующий файл Out.txt;

b)вызовы функции с различными данными;

c)форматный вывод в файл Out.txt результатов работы функции с пояснениями каждого значения формулировками из индивидуального задания;

d)если возможно, проверку результатов работы функций обращением к стандартным функциям;

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

Содержание отчета

1.Название работы и номер варианта индивидуального задания.

2.Фамилия, имя, отчество и номер группы студента.

3.Текст варианта индивидуального задания.

4.Блок-схемы функции и главной программы.

5.Распечатка текста программы.

6.Распечатка файла результатов Out.txt.

При подготовке к защите ответить на контрольные вопросы.

Справочная информация

Функции для определения размеров массивов смотрите в разделе 6.4.

Практикум по современному Фортрану