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

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

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

72

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

1.Приступая к выполнению задания, внимательно прочтите раздел 5.

2.В составе данного проекта две независимые программные единицы

– главная программа и функция, каждая с собственной системой обозначений объектов.

3.Правила применения функции должны быть описаны в главной программе в операторе Interface.

4.Функция – это процедура, вызываемая из выражения по имени.

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

6.Аргументы функции по назначению – только входные, единственный результат связан с именем функции.

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

Пример

Вфункции: вычислить среднее арифметическое значение N последних элементов одномерного вещественного массива.

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

Программа

Real Function Primer(Array, N)

Integer, Intent(In) :: N

Real, Intent(In), Dimension(:) :: Array

Integer Len

! локальная переменная

Len = Size(Array)

...

! операторы, реализующие алгоритм функции

Primer = ... ! результирующее значение

End Function

 

Program Main !

Главная программа Interface и вызов функции

Implicit None

Interface

Real Function Primer(Array, N)

Integer, Intent(In) :: N

Real, Intent(In), Dimension(:) :: Array

End Function

End Interface

Real Result

Real Dimension(1:10) :: Mas

... ! ввод и вывод исходных данных

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

73

Result=Primer(Mas,5) ! вызов функции; Mas, 5 – фактические аргументы

... ! вывод результатов

End

Результаты работы программы в файле Out.txt

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

2.75 -12.88 0.12 -0.09 99.55

33.771.11 -4.66 3.00 2.99

Среднее арифметическое

5 последних элементов

7.242

 

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

1.Что такое процедура? Когда целесообразно использование процедур? Сколько разновидностей процедур в Фортане?

2.Назовите четыре вида программных единиц в Фортране.

3.Что такое встроенная функция, операторная функция и процедура-

функция? Чем они отличаются? Приведите примеры.

4.Как вызывают функцию?

5.Каковы основные атрибуты функции?

6.Передача данных между вызывающей и вызываемой программами. Что такое формальные и фактические аргументы? Приведите примеры.

7.Поясните примерами правила согласования формальных и фактических аргументов.

8.Как результат функции передается в вызывающую программу?

9.Атрибут Intent. Какими по назначению могут быть формальные аргументы функции? Приведите примеры.

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

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

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

2.Напишите интерфейс функции Radius, которая находит радиус окружности, проходящей через три точки, заданные своими координатами. Определите формальные аргументы. Покажите, как использовать эту функцию для трех точек: A (3.7, 6.1), В (12.6, 2.11) и

С (11.5, 8.2)?

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

74

3.В вещественном массиве обнулить элементы, синус которых превышает 0.5 (с оператором where). Как получить тот же результат без использования оператора where?

4.Исправьте ошибку

Real, dimension(7,4):: А write(*,10) ’Массив’,(A(I,:), I=1,4) 10 Format(a/(4F10.2))

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

По умолчанию все массивы вещественные.

Вариант 1

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

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

Вариант 2

Вфункции: вычислить площадь треугольника по трем его сторонам. Если треугольник построить нельзя, принять площадь равной нулю.

Вглавной программе: в столбцах исходной матрицы X(3,6) расположены длины сторон треугольников. Используя функцию, получить площади шести треугольников и записать их в одномерный массив.

Вывести таблицу с длинами сторон и площадью треугольников.

Вариант 3

Вфункции: вычислить произведение ненулевых элементов одномерного массива, расположенных между максимальным и минимальным элементами. Если между максимумом и минимумом нет ненулевых элементов, результат приравнять нулю. Для проверки вывести координаты максимума и минимума в массиве.

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

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

75

Вариант 4

Вфункции: вычислить среднее квадратичное элементов одномерного массива, расположенных между первым и вторым нулевыми элементами. Если в массиве меньше двух нулевых элементов, результат принять равным (-1). Если первый и второй нулевые элементы являются соседними, результат приравнять нулю.

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

Вариант 5

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

Вглавной программе: применить функцию к двум массивам: массиву Z(20), составленному из модулей исходного массива X(20), и массиву

Y(20), каждый элемент которого определяется по формуле yi=xi*xi+1, где xi – элемент исходного массива Х. Вывести результаты, указав имена массивов.

Вариант 6

В функции: вычислить среднеквадратическое отклонение от среднего в

 

1

n

одномерном массиве X(1:n) по формуле σ =

(xi x)2 , где n

 

 

n i=1

длина массива, x – среднее арифметическое его элементов. Для проверки вывести среднее арифметическое значение.

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

Вариант 7

Вфункции: получить логическое значение (.true. или .false.), определяющее, расположен ли максимальный отрицательный элемент одномерного массива ранее минимального положительного элемента. Для проверки вывести координаты найденных элементов массива.

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

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

76

Вариант 8

Вфункции: найти сумму элементов, расположенных по периметру прямоугольного фрагмента матрицы M, диагонально противоположными вершинами которого являются элементы с индексами (i1,j1) и (i2,j2).

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

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

Вариант 9

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

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

Вариант 10

Вфункции: найти максимальный по модулю элемент (со знаком), расположенный выше главной диагонали матрицы.

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

Вариант 11

Вфункции: подсчитать количество элементов одномерного массива, отличающихся от среднего арифметического менее чем на 1. Для проверки вывести среднее арифметическое значение.

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

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

77

Вариант 12

Вфункции: вычислить сумму элементов диагонали, параллельной главной диагонали матрицы. Диагональ задаётся координатами ее верхнего элемента.

Вглавной программе: применить функцию ко всем диагоналям, параллельным главной диагонали матрицы A(6,6), начиная с левого нижнего угла. Составить и вывести одномерный массив из полученных значений.

Вариант 13

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

Вглавной программе: применить функцию ко всем диагоналям, параллельным побочной диагонали матрицы A(6,6), начиная с левого верхнего угла. Составить и вывести одномерный массив из полученных значений.

Вариант 14

Вфункции: получить логическое значение (.true. или .false.), определяющее, расположен ли максимальный элемент одномерного массива в его первой половине.

Вглавной программе: проанализировать три массива разной длины, по результатам вывести сообщения, указав имена массивов.

Вариант 15

Вфункции: подсчитать количество отрицательных элементов внутри прямоугольного фрагмента матрицы M, диагонально противоположными вершинами которого являются элементы с индексами (i1,j1) и (i2,j2).

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

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

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

78

Вариант 16

В функции: вычислить определенный интеграл как площадь под кривой

 

n1

 

по формуле прямоугольников S = x yi , где n – количество значений

 

i=1

 

функции Y в одномерном массиве, а

x – постоянный шаг изменения

аргумента.

 

 

В главной программе: сформировать массивы значений функции

y = exp(–x3/2) в интервале [-2, 2]:

 

a) с шагом x1 = 0.1

b) с шагом

x2 = 0.01.

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

Вариант 17

В функции: с точностью ε вычислить приближенное значение функции

ex при заданных значениях x и ε. Вычисления проводить суммированием членов ряда Тейлора.

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

значений ex, изменяя значение аргумента от xn до xk с шагом x (10 зна-

чений). Для проверки дополнить таблицу значениями ex, вычисленными по стандартной программе.

Вариант 18

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

Вглавной программе: проанализировать три массива разной длины, по результатам вывести сообщения, указав имена массивов.

Вариант 19

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

Вглавной программе: применить функцию к столбцам матрицы A(5,10). Результаты оформить в виде одномерного массива. Вывести элементы полученного массива в две строки.

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

79

Вариант 20

Вфункции: получить логическое значение (.true. или .false.), определяющее, есть ли одинаковые элементы в двух целочисленных матрицах.

Вглавной программе: сравнить попарно три матрицы, разные по размеру. Вывести соответствующие сообщения с именами массивов.

Вариант 21

В функции: вычислить определенный интеграл как площадь под кривой

n1

( yi+1 + yi )

 

по формуле трапеций S = x

, где n – количество значений

2

i=1

 

функции Y в одномерном массиве, а x – постоянный шаг изменения аргумента.

В главной программе: сформировать массивы значений функции y = exp(–x/5) в интервале [-2, 2]:

a) с шагом x1 = 0.1 b) с шагом x2 = 0.01.

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

Вариант 22

Вфункции: вычислить периметр n-угольника по координатам вершин, расположенным в столбцах двумерного массива XY(1:2,1:n). Каждой вершине многоугольника соответствует один столбец.

Вглавной программе: применить функцию к 4-угольнику, 5-угольнику и 6-угольнику. Вывести периметры с именами фигур в порядке возрастания периметров. В отчете привести графическую интерпретацию.

Вариант 23

В функции: получить логическое значение (.true. или .false.), определяющее, принадлежит ли точка с координатами (x,y) внутренней области эллипса с длинами полуосей а и b и центром в точке с координатами

(x0,y0).

В главной программе: длины полуосей и координаты центра эллипса ввести в диалоге. Проанализировать 8 точек с координатами из массива Pt(2,8), в котором каждой точке соответствует столбец. Вывести параметры эллипса, а для каждой точки – ее координаты и сообщение: точка внутри или вне эллипса. В отчете привести графическую интерпретацию результатов.

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

80

Вариант 24

Вфункции: найти в матрице максимум среди локальных минимумов. Локальным минимумом считать элемент матрицы, значение которого строго меньше его «соседей» по горизонтали и по вертикали. Учесть, что количество «соседей» элемента колеблется от 2 до 4 в зависимости от его положения в матрице. Для проверки вывести координаты и значения всех локальных минимумов.

Вглавной программе: применить функцию к трем матрицам разных размеров. Вывести полученные значения, указав имена массивов.

Вариант 25

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

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

Вариант 26

В функции: вычислить радиус окружности, вписанной в треугольник. Координаты вершин треугольника расположены в столбцах двумерного массива XY(1:2,1:3). Одна из формул для вычисления радиуса вписан-

ной окружности: r =

( p - a)( p - b)( p - c)

, где a, b, c – стороны треуголь-

p

 

 

ника, p – его полупериметр.

В главной программе: применив функцию к трем треугольникам, вывести таблицу с координатами вершин треугольников и радиусом вписанной окружности. В отчете привести графическую интерпретацию.

Вариант 27

Вфункции: используя формулу Герона, получить логическое значение (.true. или .false.), определяющее, принадлежит ли точка с координатами (x, y) треугольнику. Координаты вершин треугольника расположены в столбцах двумерного массива XY(2, 3). Точку, лежащую на стороне треугольника, считать принадлежащей треугольнику.

Вглавной программе: ввести координаты вершин треугольника и применить функцию к трем точкам. Вывести таблицу с координатами точек и словами «внутри» или «вне» в зависимости от результата функции. В отчете привести графическую интерпретацию.

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

81

Вариант 28

В функции: с точностью вычислить приближенное значение функции cos x при заданных значениях x и ε. Вычисления проводить суммированием членов ряда Тейлора.

В главной программе: Значение ε ввести в диалоге и вывести в результирующий файл. С помощью функции составить вывести таблицу зна-

чений cos x, изменяя значение аргумента от xn до xk с шагом x (10 зна-

чений). Для проверки дополнить таблицу значениями cos x, вычисленными по стандартной программе.

Вариант 29

Вфункции: получить логическое значение (.true. или .false.), определяющее, представляют ли элементы одномерного массива возрастающую последовательность.

Вглавной программе: проанализировать три массива разной длины, по результатам вывести сообщения, указав имена массивов.

Вариант 30

Вфункции: найти в одномерном массиве число с максимальным синусом.

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

1.9. Решение задач с использованием подпрограмм Задание

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

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

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

b)вызовы подпрограмм с различными данными;

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

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

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