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

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

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

52

Блок-схемы

A – среднее арифметическое отрицательных элементов, больших D.

Vector1: вычисление A с помощью цикла

Notr = 0; - количествоэлементов

A = 0; - сумма элементов

 

i = 1, 12

да

D < M(i) < 0

 

Notr = Notr + 1

нет

А= А+ M(i)

 

Конец цикла

 

 

 

 

 

нет Notr

 

> 0

да

 

 

 

 

 

 

 

 

 

 

 

 

Сообщение*

 

 

 

 

 

A = A / Notr

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Vector2: вычисление A с помощью встроенных функций

Notr = Count (M < 0. and. M > D)

 

 

нет

 

 

 

 

да

 

 

Notr > 0

 

 

 

 

 

 

Сообщение*

 

 

 

 

 

 

 

 

 

 

A= Sum (M, mask = M < 0. and. M > D)

 

 

 

 

 

 

 

A = A / Notr

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

* - сообщение: «В массиве нет отрицательных элементов, больших D»

B – номер минимального положительного элемента.

 

Vector1: вычисление В с помощью циклов

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

B = 0 -

нетположительныхэлементов

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Конец цикла

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

i = 1, 12

 

 

 

 

 

 

 

 

 

 

нет

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

M( i) > 0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

да

 

 

 

 

Exit

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

B = i - номерпервогоэлемента > 0

 

 

 

 

 

 

 

нет

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

B = 0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Конец цикла

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

j = i+1, 12

 

 

 

 

да

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

нет

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Сообщение**

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0 < M (j) < M (B)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

да

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

B = j

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

53

Vector2: вычисление В с помощью встроенных функций

 

 

 

B = Count( M > 0 )

 

 

 

 

 

да

 

 

 

 

нет

 

 

B = 0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Num = MinLoc (M, mask = M>0)

Сообщение**

 

 

 

(Num - одномерный целочисленныймассив)

 

 

 

 

 

 

 

B =Num(1)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

** - сообщение: «В массиве нет положительных элементов»

C – среднее гармоническое ненулевых элементов с четными номерами.

Vector1: вычисление С с помощью цикла

Cnt = 0 - количество ненулевых элементов С = 0 - сумма обратных величин

 

i = 2, 12, 2

нет

M( i) = 0

 

Cnt = Cnt + 1

да

С= С + 1 / M(i)

 

Конец цикла

да Cnt = 0 или С=0

Сообщение***

C = Cnt / С

 

 

 

 

 

 

 

 

Vector2: вычисление С с помощью встроенных функций

C = 0; Cnt = 0; MasObr = 0

MasObr (1 : 6) - массив обратных величин элементов с четными номерами

 

 

 

 

 

 

 

 

 

 

нет

 

 

 

 

 

 

 

 

 

Where (M(2:12:2) = 0)

 

 

 

 

MasObr =1/M(2:12:2)

 

 

 

 

 

 

 

 

 

да

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Cnt = Count ( MasObr /= 0 );

С = Sum(MasObr)

 

 

 

 

 

да

 

 

 

 

 

 

 

 

нет

 

 

Cnt = 0 или C = 0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Сообщение***

 

 

 

 

 

 

 

 

 

C = Cnt / С

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

*** - сообщение: «Все элементы массива с четными номерами равны 0»

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

 

54

Программа

 

Program Vector1 !

или Vector2

! студент (фамилия, имя)

группа № работа № вариант №

Implicit None

 

Real,dimension(1:12):: M

Real,dimension(1:6) :: MasObr ! для программы Vector2

Real:: A, C, D, Z Integer B, i, Notr, Cnt

Open(1,FILE=’In.txt’) ! файл с исходным массивом

Open(2,FILE =’Out.txt’) ! результирующий файл Write(2,*) ’Программа Vector1’ ! или Vector2

Read(1,*)M ! ввод массива

Write(2,10) M ! вывод массива в 2 колонки с заголовком для контроля Write(*,*) ’Input D < 0’ ! диалог для ввода значения D <0

Read(*,*) D

Write(2,14) ’D =’, D, ’- должно быть отрицательным’

! *****

По блок-схемам, составленным с учетом индивидуального задания, написать операторы программы Vector1 (или Vector2) для вычисления и форматного вывода трех переменных и результирующего выражения. Выводить значения переменных по мере их вычисления, поясняя формулировками из индивидуального задания.

Пример оператора Where для программы Vector2:

MasObr=0; Where(M(2:12:2)==0) MasObr=1/M(2:12:2)

! *****

End Program Vector1 ! или Vector2

Результаты программ Vector1 и Vector2

Содержимое файла Out.txt в результате работы программ Vector1 или Vector2 для приведенного примера задания:

Программа Vector1 (или Vector2)

Исходный массив

6 строк в 2 колонки с исходным массивом

D = -12.00

- должно быть отрицательным

A = -17.05

- среднее арифметическое элементов D<M<0

B =

10

- номер минимального положительного элемента

C =

25.13

- средне гармоническое элементов с нечетными номерами

Z =

34.77

= A + B – C

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

1.Что в программировании называют массивом?

2.Приведите характеристики одномерного массива.

3.Примеры описания одномерного массива, диапазон индекса. Что

объявлено в программе?

Real C(7), D(7), B(-7:0), U(0:7)

Как лучше описать тип и форму этих массивов в Фортран-90? Допустим ли оператор присваивания

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

55

U= cos(C**2)- 3*B ?

4.Как для массива real, dimension(1:12):: A

спомощью триплетов задать секции:

из всех элементов массива в обратном порядке?

из последних 8 элементов массива?

из первой трети массива?

из элементов массива с нечетными номерами?

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

6.Назовите семь фунций редукции массива и укажите особенности их применения к одномерным массивам.

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

8.Назовите функции редукции, возвращающие значение логического

типа. Как оно формируется?

9.У каких функций редукции нет аргумента Array?

10.Что получим в результате применения функций редукции к

одномерным массивам, насколько актуален аргумент dim?

11.В программе объявлен массив:

Real, dimension(1:10):: A

Что произойдет при выполнении каждого из операторов?

Read(1,*) A(10)

Write(*,*) A(10)

Read(*,*) A(11)

Write(*,*) A(11) Write(*,11) A(8:10)

Напишите оператор format для последнего оператора Write.

Напишите форматный вывод пяти последних элементов массива A.

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

1.Дан массив из 20 элементов. С использованием циклов написать

программу вычисления переменной (аналогичные задачи смотрите

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

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

3.В программе используется вещественный массив из 100 элементов.

Напишите операторы для вывода элементов массива в виде: a) заголовок «Исходный массив»;

b) элементы массива по четыре в строке.

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

56

4. В файле data.txt – 12 чисел натурального ряда. Как будут выглядеть выведенные на экран строки (с пробелами)?

Program ReWriter

Integer, dimension(1:12):: Mas = 0

Open(1,file = ’data.txt’) Read(1,*) Mas(3), Mas(5); Write(*,11) Mas(3:5)

11 Format (I4)

End Program ReWriter

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

 

Выражение

Определение переменных

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

B +

 

 

A

 

 

 

 

 

A – сумма отрицательных элементов с четными номерами;

1

 

 

 

 

 

 

 

 

B – максимальный элемент среди N первых элементов;

 

C +1

 

 

 

 

 

 

 

 

 

 

C – среднее геометрическое положительных элементов.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

R + Q + S

 

R – произведение положительных элементов с нечетными номе-

2

 

рами;

 

R Q

S + 2

Q – последний положительный элемент с четным номером;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

S – среднее гармоническое положительных элементов.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

E

 

H – количество нулей среди N последних элементов;

 

 

 

 

 

 

 

 

 

3

H

+

 

 

 

 

 

 

 

G

E – номер минимального элемента;

H +1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

G – среднее квадратичное элементов с четными номерами.

 

U +

 

 

 

 

 

1

 

 

 

 

 

 

 

 

 

S – сумма положительных элементов, меньших D;

4

 

 

S +T

 

+1

T – минимальный по модулю ненулевой элемент (со знаком);

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

U – среднее арифметическое N первых элементов.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Z +

 

 

X

 

 

 

 

 

X – количество элементов со значениями из интервала [A, B];

5

 

 

 

 

 

 

 

 

Y – модуль минимального элемента;

 

10 +Y

 

 

 

 

 

 

 

 

 

Z – среднее арифметическое элементов с нечетными номерами.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

U

 

 

+ S

U – произведение элементов с четными номерами;

6

 

 

 

 

R – номер максимального по модулю элемента;

 

 

R +

1

 

 

 

 

 

 

 

 

 

 

 

 

 

S – среднее арифметическое N последних элементов.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

A B

 

 

 

 

 

A – произведение ненулевых элементов;

7

 

 

 

 

 

 

 

 

 

 

 

B – последний отрицательный элемент с нечетным номером;

 

 

 

 

C

+ 2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

C – среднее арифметическое положительных элементов.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

R

 

 

 

 

 

 

 

 

 

 

 

 

R – сумма всех элементов;

8

 

 

 

 

 

 

+ S

Q – номер первого нулевого элемента;

 

 

Q +

1

 

 

 

 

 

 

 

 

 

 

 

 

 

S – среднее геометрическое положительных среди N последних

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

элементов.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

H

 

 

 

 

 

+G

H – сумма положительных среди N первых элементов;

9

(E +1)(H +1)

E – номер первого отрицательного элемента;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

G – среднее арифметическое отрицательных элементов.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

57

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Выражение

Определение переменных

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Y +

 

 

 

 

X

 

 

 

 

 

 

 

X – количество элементов, меньших D, с нечетными номерами;

10

 

 

 

 

 

 

 

 

 

 

 

Y – максимальный по модулю элемент (со знаком);

10 + Z

 

 

 

 

 

 

 

Z – среднее квадратичное положительных элементов.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

C +

 

 

 

 

A + B

 

A – произведение положительных элементов;

11

 

 

 

 

B – последний положительный элемент с четным номером;

 

A B +1

 

 

 

 

 

 

C – среднее квадратичное N первых элементов.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

T V +U

V – сумма отрицательных элементов, больших D, (D<0) ;

12

T – номер максимального элемента;

 

 

 

U

+1

 

 

 

 

 

 

 

 

U – среднее геометрическое положительных среди N первых

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

элементов.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

S – сумма модулей отрицательных элементов;

13

(U+T) (S+2)

T – номер минимального по модулю ненулевого элемента;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

U – среднее квадратичное N последних элементов.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

H

 

 

 

 

 

 

 

+G

H – произведение модулей отрицательных элементов;

14

(E +1)(H +1)

 

E – номер последнего положительного элемента:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

G – среднее арифметическое элементов с четными номерами.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

X

 

 

 

+ Z

 

 

 

 

 

 

 

X – сумма элементов, больших D, с четными номерами;

15

 

 

 

 

 

 

 

 

 

 

 

 

Y – номер максимального отрицательного элемента;

 

 

 

Y

 

 

+ 2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Z – среднее квадратичное всех элементов.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

B +

 

 

 

 

A

 

 

 

 

 

 

 

A – среднее гармоническое отрицательных элементов;

16

 

 

 

 

 

 

 

 

 

 

 

B – номер второго нулевого элемента;

 

 

C +1

 

 

 

 

 

 

 

 

 

 

C – количество отрицательных элементов с четными номерами.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

C +

 

 

A

 

+

 

 

 

 

B

 

A – сумма положительных элементов;

17

 

 

 

 

 

 

 

B – номер минимального положительного элемента;

10

10

 

+ A

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

C – среднее гармоническое ненулевых элементов.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

X

 

 

 

+ Z

 

 

 

 

 

 

 

X – количество положительных элементов с четными номерами;

18

 

 

 

 

 

 

 

 

 

 

 

 

Y – номер последнего нулевого элемента:

 

 

 

Y

 

 

+ 2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Z – среднее гармоническое ненулевых элементов, больших D.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

A B

 

 

 

 

 

 

 

A – произведение отрицательных элементов;

19

 

 

 

 

 

 

 

 

 

 

 

B – максимальный по модулю элемент (со знаком);

 

 

 

C

 

+ 2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

C – среднее арифметическое модулей отрицательных элементов.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

E

 

 

H – количество отрицательных элементов;

 

 

 

 

 

 

 

 

 

 

20

H

+

 

 

 

 

 

 

 

 

 

G

E – минимальный элемент среди N последних элементов;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

H +1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

G – среднее квадратичное элементов с четными номерами.

 

U +

 

 

 

 

 

1

 

 

 

 

 

 

 

 

S – количество положительных элементов;

21

S + T +1

 

T – минимальный положительный элемент;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

U – среднее арифметическое элементов.

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

58

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Выражение

Определение переменных

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

A – первый положительный элемент с четным номером;

22

C +

 

A

+

 

B

B – сумма элементов с нечетными номерами;

10

 

10 + A

 

C – среднее гармоническое ненулевых среди N первых элемен-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

тов.

 

 

 

 

 

U

 

 

+ S

U – произведение ненулевых среди N первых элементов;

23

 

 

 

 

 

 

R – номер максимального по модулю элемента;

 

 

 

R +1

 

 

 

 

 

 

 

 

 

S – среднее геометрическое положительных элементов.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

R

 

 

+ S

R – максимальный элемент с четным номером;

24

 

 

 

 

 

 

 

 

Q – количество ненулевых элементов;

 

 

 

Q +1

 

 

 

 

 

 

 

 

 

S – среднее гармоническое положительных элементов.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

S – сумма N последних элементов;

25

 

 

(U+T) (S+2)

T – максимальный отрицательный элемент;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

U – среднее квадратичное элементов с четными номерами.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

C +

 

 

 

A + B

 

A – количество элементов, больших D;

26

 

 

 

B – первый положительный элемент с четным номером;

 

A B +1

 

 

 

 

 

 

 

 

C – среднее арифметическое N первых элементов.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

H +1

H – сумма элементов со значениями из интервала [A, B];

27

 

 

 

 

 

 

E – последний положительный элемент с четным номером;

 

 

 

 

(C +2)E

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

C – среднее арифметическое положительных элементов.

 

 

 

 

(H + E) C

H – произведение элементов со значениями из интервала [A, B];

28

 

 

 

E – номер минимального по модулю ненулевого элемента;

 

 

 

(E +C +4)

 

 

C – среднее геометрическое положительных среди N последних

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

элементов.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

R + Q + S

 

R – количество элементов, меньших D;

29

 

 

Q – модуль минимального элемента;

 

 

R Q S + 2

 

 

 

S – среднее квадратичное положительных элементов.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

R

 

 

 

+U+T

U – минимальный элемент с номером из интервала [K, L];

30

 

 

 

 

 

 

T – среднее арифметическое элементов с нечетными номерами.

 

R +1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

R – количество нулей среди N последних элементов.

1.7. Решение задач с двумерными массивами

Задание

1.Написать программу, которая:

a)вводит из файла In.txt на диске количество строк и столбцов матрицы, вводит матрицу в динамический массив;

b)выводит по формату матрицу A с заголовком в файл Out.txt ;

c)вводит с клавиатуры дополнительные параметры, если они есть в варианте индивидуального задания;

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

59

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

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

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

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

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

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

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

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

4.Блок-схема программы.

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

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

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

Комментарии к заданию

1.Встроенные функции для массивов смотрите в разделе 6.2.

2.Формулы для вычисления средних значений – в разделе 7.4.

3.Каждую матрицу готовить в файле In.txt следующим образом:

a)M, N (M и N – количество строк и столбцов матрицы );

b)матрица, содержащая M строк и N столбцов.

Далее пункты a) и b) повторяются для каждой следующей матрицы.

4. Рекомендуется выбрать M 10 и N 10 и для контроля вывести М и N в файл результатов Out.txt.

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

1. Размещение двумерного массива в памяти компьютера

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

a11 a12 a13

изменяется быстрее. Например, матрица a21 a22 a23 размещается в

массиве A(1:2, 1:3) в следующем порядке: {a11a21 a12a22 a13a23}.

Для матрицы, подготовленной, как в математике – по строкам {a11a12a13 a21a22a23}, чтение Read(1,*) A приведет к ошибочному размещению {a11a12

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

60

a13a21 a22a23}. Оператор Write(2,*) A выводит массив в порядке размещения

его в памяти, то есть по столбцам {a11a21a12 a22a13a23}. Внимание! Последовательность операторов

Read(1,*) A;

Write(2,*) A

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

2. Ввод и вывод двумерного массива

Для ввода матрицы по строкам следует изменять индексы элементов массива, как показано ниже (ввод без формата)

Integer:: M=2, N=3, str, stlb ! M строк, N столбцов

Real, dimension(1:M,1:N):: A

! циклы по секциям-строкам

Read(1,*)(A(str,1:N),str=1,M)

!или (диапазон индекса столбца по умолчанию)

Read(1,*)(A(str,:),str=1,M)

!или вложенные неявные циклы

Read(1,*)((A(str,stlb),stlb=1,N),str=1,M)

Вывод матрицы по строкам аналогичен, но обязательно по формату. Повторитель в операторе Format равен длине строки матрицы:

Write(2,1)(A(str,:),str=1,M)

1 format(‘Матрица’/3(f5.1)) !повторитель – константа ! или

1 format(‘Матрица’/ <N>(f5.1)) ! N значений в строке

В угловых скобках в качестве повторителя – целочисленная переменная или выражение.

3. Динамические массивы

Размер статического массива не может быть изменен в процессе вычислений, что не всегда удобно при решении задач. Этого неудобства можно избежать, применяя динамические массивы. Работа с динамическим массивом требует (смотри пример программы):

a)описать динамический массив с атрибутом Allocatable, указывая количество измерений и не указывая размеров;

b)определить размер массива оператором ввода или присваивания (для двумерного массива – количество строк и столбцов, для одномерного – количество элементов);

c)разместить массив в памяти оператором Allocate;

d)выполнить действия с массивом;

e)освободить память оператором Deallocate.

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

61

Пример

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

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

Блок-схема алгоритма

 

 

 

 

ЧастьI

 

 

цикл

по строкам

Конец цикла

 

 

i = 1, M

 

Num = 0 - Номерпервогоненулевогоэлементастроки

Конец цикла

цикл

по столбцам

 

 

 

j = 1, N

 

 

 

A(i, j) = 0

да

 

 

 

 

Exit

нет

Вывод

 

Num = j

матрицы A

 

 

Num = 0

 

нет

 

 

 

 

да

 

A(i, Num) = - A(i, Num)

Сообщение*

 

** - вывод i, Num

 

 

ЧастьII

B = Sum (A, dim = 1, mask = A < 0)

Вывод массива B

*— «В строке i все элементы равны 0»

**— «Координаты первого ненулевого элемента строки = [i, Num]»

Программа

Program Matrix

! студент (фамилия, имя) группа № работа № вариант №

Implicit None

Integer, Allocatable, dimension(:,:):: A ! динамическая матрица Integer, Allocatable, dimension(:):: B ! динамический массив

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