Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Модульність, розподіл пам'яті, підпрограми.doc
Скачиваний:
2
Добавлен:
25.11.2018
Размер:
764.42 Кб
Скачать

Механізм передачі параметрів

Представлена вище підпрограма Max_PР не дуже зручна для використання, оскільки її призначення зафіксоване дуже жорстко. Зокрема, вхідними даними для неї можуть служити лише значення змінних а і b. Тому перед кожним звертанням до підпрограми доводиться заздалегідь присвоювати цим змінним ті значення, з яких потрібно вибирати більше.

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

Слід зазначити, що параметри використовуються не тільки як інструмент для передачі в підпрограму вихідних даних, а й для повернення у зовнішній блок (основну програму, підпрограму) отриманих результатів.

Оскільки параметри можуть бути кожен раз різними, виникає проблема уніфікованого опису дій по обробці цих параметрів в тілі підпрограми. З цією метою параметри підпрограми позначаються умовними позначками (абстрактними іменами) в термінах яких і описуються відповідні дії. Ідентифікатори, що виступають в якості цих абстрактних імен, називають формальними параметрами, оскільки вони представляють не якісь конкретні значення, а значення "взагалі". Формальні параметри, якщо вони є, явно вказуються в заголовку підпрограми і тим самим упорядковуються по їх перерахуванню.

Конкретизація ж дій підпрограми здійснюється за допомогою фактичних параметрів - конкретних значень або змінних, які повинна обробити підпрограма, і які в її тілі були позначені формальними параметрами. Вказуються фактичні параметри, якщо вони є, в операторі виклику відповідної підпрограми. Його РБНФ:

оператор виклику підпрограми ::= ім'я підпрограми [(список фактичних параметрів)]

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

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

При активізації підпрограми фактичні параметри, зазначені в команді виклику, заміщують відповідні їм формальні параметри, чим і забезпечується передача даних в підпрограму. Саме механізм заміни (підстановки) і дозволяє виконувати підпрограму з різними аргументами. Схематично це можна представити наступним чином:

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