Масив як параметр процедури

Програма може повністю поміщатися в одному блоці. Але, як правило, реальні програми мають значний обсяг, і розміщення в одному блоці ускладнює їх написання і налагодження. Крім того, будь-яке завдання може бути розділена на відносно самостійні підзадачі. Оформлення кожної підзадачі у вигляді окремого блоку сприяє розділенню роботи над програмою на незалежні етапи і оперативному внесенню змін.

Блоки, виділені для подзадач, називаються програмними одиницями. У Фортране розрізняються три види незалежних програмних одиниць:

Незалежні програмні одиниці мають незалежні системи позначень і можуть компілюватися окремо. Всі елементи незалежної програмної одиниці локальні. тобто доступні всередині цієї одиниці і недоступні поза нею.

Частиною незалежних програмних одиниць можуть бути внутрішні процедури - процедури, опис яких укладено всередині програми-носія.

Головна програма є обов'язковим компонентом будь-якої програми. При запуску програми операційна система передає управління операторам головної програми. Головна програма повинна бути єдиною, інакше неможливо визначити точку входу - оператор, з якого починається виконання програми.

Структура головної програми така:

У квадратні дужки укладені необов'язкові частини тексту програми, які можуть бути відсутніми. Як видно, єдиним обов'язковим елементом головної програм є операторend. Відмітною ознакою головної програми є відсутність спеціальних операторів (subroutine, function іліmodule) в її заголовку: саме це характеризує цей компонент як головну програму.

Оператор end головної програми не тільки відзначає кінець програмного компонента, а й є сигналом до зупинки всієї програми. Хороша організація програми передбачає повернення управління в головну програму на завершальній стадії роботи, але якщо необхідно зупинити програму в іншому місці, використовується оператор stop.

Якщо оператор end містить ім'я програми, то воно має збігатися з ім'ям, зазначеним в операторі program в заголовку.

Блок Оператори опису. якщо він є, повинен передувати блоку Виконувані оператори. Відсутність блоку Виконувані оператори можливо, але безглуздо.

Оператор contains відокремлює виконувані оператори від опису внутрішніх процедур.

Зовнішні процедури - це програмні одиниці, які служать для виконання окремих підзадач в рамках загальної задачі програми в цілому.

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

Загальний вигляд зовнішньої процедури:

Для того, щоб процедура почала виконуватися, необхідно її викликати. Програмна одиниця, з якої здійснюється виклик процедури, називається викликає програмної одиницею. Процедури викликаються з головної програми або з інших процедур і при завершенні повертають управління викликає програмної одиниці.

Повернення управління з процедури в зухвалу програмну одиницю, в точку виклику процедури, здійснюється оператором return. Операторend не тільки вказує на кінець процедури, але і діє як оператор return. Оператор return може припинити виконання процедури в будь-якому її місці і передати управління в місце виклику. Як і оператор stop. він може бути частиною умовного оператора.

Всі процедури повинні мати можливість обмінюватися даними з зухвалими програмними одиницями - отримати вхідні дані від зухвалої програми і передати їй результати своєї роботи. Обмін інформацією з процедурами може відбуватися через параметри (аргументи) процедур і / або через глобальні дані. Організація глобальних даних розглядається в розділі «Модулі».

При передачі даних через параметри в заголовку процедури вказується список формальних параметрів - перелік змінних і / або масивів, які використовуються в ході виконання процедури.

В операторах виклику процедури вказується список фактичних параметрів. При виклику процедури відбувається підстановка фактичних параметрів замість формальних параметрів.

Кожен параметр процедури має наступні основні характеристики:

- ранг - розмірність або кількість вимірювань; ранг змінної дорівнює 0;

- призначення параметра - вхідний, вихідний або універсальний (змінний).

Призначення формального параметра визначає атрибут intent:

intent (in) - вхідний параметр;

intent (out) - вихідний параметр;

intent (inout) - універсальний параметр.

Якщо атрибут призначення параметра не вказано, то за замовчуванням параметр вважається універсальним (inout).

Є два основних види процедур: процедури-функції function і процедури-подпрограммиsubroutine.

Структура процедури-функції має вигляд:

[Тип] functionімя функції (список формальних параметрів)

Процедура-функція обчислює значення заданого типу і повертає управління в зухвалу програмну одиницю разом з цим значенням. Отримане значення називається повертається значенням. У зухвалій програмі повертається значення може бути присвоєно змінної або підставлено в вираз.

Оператор function називається заголовком функції. Тип функції, вказаний в її заголовку, є типом значення, що повертається. Крім того, в заголовку вказується унікальне ім'я функції, складене за правилами Фортрана, і список формальних параметрів в круглих дужках.

Серед операторів опису повинні бути присутніми опису формальних параметрів функції і внутрішніх (локальних) змінних і масивів.

Серед виконуваних операторів обов'язково має визначатися повертається значення функції, ім'я якого збігається з ім'ям функції.

Якщо в операторі end вказано ім'я функції, воно має збігатися з ім'ям в заголовку функції.

Виклик функції не вимагає спеціального оператора. Зверненням до функції є ім'я функції і список фактичних параметрів в круглих дужках, наприклад:

A = ім'я функції (список фактичних параметрів)

Приклади звернення до функції:

a = sqrt (x) + sqrt (s)

Оформити у вигляді функції знаходження в речовій матриці елемента з максимальним абсолютним значенням. У головній програмі потрібно унормувати матрицю, тобто розділити всі її елементи на отриманий елемент.

real function Max_Abs (Array, cRows, cCols)

заголовок функції; яке значення дійсного типу

implicit none. оператор повинен бути в кожній програмної одиниці

формальні параметри функції - масив, кількість його рядків і стовпців

integer, intent (in). cRows, cCols

integer. i, j. змінні циклів

integer. NumI, NumJ. координати елемента матриці

NumI = 1; NumJ = 1. максимальним по модулю вважаємо Array (1,1)

Схожі статті