![](/user_photo/2706_HbeT2.jpg)
учебное пособие по лр_фортран
.pdf![](/html/2706/248/html_eGVwHe0umu.cz9p/htmlconvd-Ww6gfr51x1.jpg)
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 |
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Практикум по современному Фортрану
![](/html/2706/248/html_eGVwHe0umu.cz9p/htmlconvd-Ww6gfr52x1.jpg)
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.
Практикум по современному Фортрану
![](/html/2706/248/html_eGVwHe0umu.cz9p/htmlconvd-Ww6gfr60x1.jpg)
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 ! динамический массив
Практикум по современному Фортрану