Пиши Дома Нужные Работы

Обратная связь

Решение задач с использованием процедур

Задание

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

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

a) интерфейс с правилами применения каждой процедуры;

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

c) вызовы процедур с различными данными;

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

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

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

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

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

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

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

4. Постановка задачи, методы вычислений.

5. Графическая интерпретация (если требуется), выполненная вручную или в пакете Agrapher.

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

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

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

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

 

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

Таблица 12.

Функции для определения размеров массивов (Array – массив).

Функция Результат функции Примечания
Size(Array) Целое число, количество элементов массива Array. Рекомендуется для определения длины одномерного массива.
Size(Array,dim) Целое число - протяженность вдоль заданного измерения. При dim = 1 - количество столбцов двумерного массива, при dim = 2 – количество строк.
Shape(Array) Целочисленный одномерный массив из протяженностей по каждому измерению массива. Размер результирующего массива равен количеству измерений массива Array (для двумерного массива – 2)

 




Таблица 13.

Некоторые полезные встроенные функции:

Функция Аргументы Результат
Произведение матриц MC = Matmul(MA,MB) MA – матрица M ´ N MB – матрица N ´ P MC – матрица M ´ P
Умножение матрицы на вектор V2 = Matmul(MA,V1) MA – матрица M ´ N V1 – вектор N элементов V2 – вектор из M элементов
Транспонирование матрицы MB=Transpose(MA) MA – матрица M ´ N MB – матрица N ´ M
Cкалярное произведение векторов S=Dot_product(V1,V2) V1, V2 – векторы одинаковой длины S – число (скаляр)
Генератор случайных чисел Call Random_number(M1) Выходной аргумент M1 – вещественная переменная или массив – псевдослучайные числа из [0; 1]

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

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

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

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

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

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

6. Результаты подпрограммы передаются в вызывающую программу через выходные аргументы (атрибут Intent(Out)) и не связан с именем подпрограммы. Количество выходных аргументов может быть любым, в том числе один или ни одного.

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

8. Атрибут назначения каждого формального аргумента должен быть описан операторомIntent.

Пример 1 (функция)

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

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

Программа 1

Real Function Primer(Array,N)

Integer, Intent(In) :: N

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

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

Len = Size(Array)

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

If(N>0)Primer=sum(Array)/N ! результирующее значение

End Function Primer

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

Implicit None

Interface

Real Function Primer(Array, N)

Integer,Intent(In) :: N

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

End Function Primer

End Interface

Real Result

Real Dimension(1:10) :: Mas

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

Result=Primer(Mas(6:10),5) ! вызов: Mas,5-фактические аргументы

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

End Program Main

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

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

2.75 -12.88 0.12 -0.09 99.55

33.77 1.11 -4.66 3.00 2.99

Среднее арифметическое 5 последних элементов

5.923

Пример 2 (подпрограмма)

В подпрограмме: найти номер и значение максимального по модулю элемента одномерного массива.

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

Программа 2

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


 

Subroutine MaxAbs(Array, eLem, Num)

Implicit none

Real,intent(in),dimension(:)::Array ! входной массив

Real,intent(out)::eLem ! выходной: max по модулю элемент

Integer,intent(out)::Num ! выходной: номер max по модулю

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

Len = Size(Array)

... ! операторы, реализующие алгоритм подпрограммы

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

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

End Subroutine MaxAbs

Program Sub1 ! ФИО Лаб 6 Группа. Вар.

Implicit none

Interface ! шаблон вызываемой подпрограммы

Subroutine MaxAbs(Array, eLem, Num)

Implicit none

Real,intent(in),dimension(:)::Array ! входной массив

Real,intent(out)::eLem! выходной: max по модулю элемент

Integer,intent(out)::Num ! выходной: номер max по модулю

End Subroutine MaxAbs

End Interface

Real,dimension(1:12)::B

Real,dimension(1:10)::C

Real MaxB, MaxC ! max по модулю элементы для В,C

Integer NumB, NumC ! и их порядковые номера в массивах

... ! ввод и вывод в результирующий файл массива B

Call MaxAbs(B, MaxB, NumB)

... ! вывод в результирующий файл NumB, MaxB

... ! ввод и вывод в результирующий файл массива C

Call MaxAbs(C, MaxC, NumC)

... ! вывод в результирующий файл NumC, MaxC

End Program Sub1

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

Массив В

1.0 -4.0 6.0 20.0 45.0 -71.0

4.0 -17.0 .0 .0 .0 11.0

max по модулю элемент -71.0 его номер 6 в массиве B

 

Массив С

-122.0 .0 45.0 71.0 4.0 -17.0

.0 .0 .0 11.0

max по модулю элемент -122.0 его номер 1 в массиве C

Контрольные вопросы

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

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

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

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

5. Что в программировании называют подпрограммой? Сколько разновидностей подпрограмм в Фортане?

6. Зачем подпрограмме имя? Есть ли значение, связанное с именем подпрограммы? Как передаются результаты подпрограммы в вызывающую программу?

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

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

9. Где и для чего пишут интерфейсы?

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

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

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

Блок-схема функции обязательна.

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

Блок-схема подпрограммы обязательна.

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

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

Integer i

Real, dimension(7,4):: А

write(*,10) ’Массив’,(A(i,:), i=1,4)

10 Format(a/(4F10.2))

Таблица 14.

Варианты индивидуального задания «Процедуры»






ТОП 5 статей:
Экономическая сущность инвестиций - Экономическая сущность инвестиций – долгосрочные вложения экономических ресурсов сроком более 1 года для получения прибыли путем...
Тема: Федеральный закон от 26.07.2006 N 135-ФЗ - На основании изучения ФЗ № 135, дайте максимально короткое определение следующих понятий с указанием статей и пунктов закона...
Сущность, функции и виды управления в телекоммуникациях - Цели достигаются с помощью различных принципов, функций и методов социально-экономического менеджмента...
Схема построения базисных индексов - Индекс (лат. INDEX – указатель, показатель) - относительная величина, показывающая, во сколько раз уровень изучаемого явления...
Тема 11. Международное космическое право - Правовой режим космического пространства и небесных тел. Принципы деятельности государств по исследованию...



©2015- 2020 pdnr.ru Все права принадлежат авторам размещенных материалов.