Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Pascal.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
3.44 Mб
Скачать

1.3.2 Виклик підпрограм

Виклик процедури здійснюється з основної програми або іншої підпрограми за допомогою команд виклику:

<ім'я процедури>(<список фактичних параметрів>);

Виклик функції здійснюється тільки з виразів:

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

Фактичними параметрами-значеннями можуть бути як змінні, так і константи різних типів. Не допускаються лише файлові типи та типи, що на них опираються.

Фактичними параметрами-змінними можуть бути змінні будь-яких типів, включаючи файловий. Не допускається лише використання констант.

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

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

Функція, на відміну від процедури, повертає тільки один результат.

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

1.4 Глобальні та локальні змінні

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

program Scope;

var A0,B0,C0:integer;

procedure P1;

var A1,B1,C1:integer;

procedure P2;

var A2,B2,C2:integer;

begin

Припустиме використання як глобальних A0,B0,C0,

A1,B1,C1 так і локальних A2,B2,C2

end;

begin

Припустиме використання як глобальних A0,B0,C0

так і локальних A1,B1,C1

end;

begin

Припустиме використання тільки глобальних A0,B0,C0

end;

У наведеному прикладі A0,B0,C0 будуть глобальними для всіх процедур та функцій, що використовуються в програмі. A1,B1,C1 будуть глобальними для всіх процедур та функцій, які описані всередині процедури Р1 ( у даному прикладі для процедури Р2), і одночасно локальними для самої процедури Р1. Дані A2,B2,C2, що об’явлені у самій внутрішній процедурі Р2, будуть тільки локальними.

Правила визначення області дії для ідентифікаторів процедур та функцій:

  • діють усі ідентифікатори, що визначені всередині процедури/функції;

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

  • локальні ідентифікатори процедури/функції у зовнішньому оточенні діяти ніколи не будуть;

  • у випадку спів падіння імен глобального та локального ідентифікаторів діяти буде тільки внутрішній локальний ідентифікатор.

Пояснення четвертого правила на прикладі:

program EqualName;

var A,B,C:integer;

procedure P1;

var A,B,C:real;

procedure P2;

var A,B,C:char;

begin

A,B,C доступні,як символьні змінні

end;

begin

A,B,C доступні,як дійсні змінні

end;

begin

A,B,C доступні,як цілі змінні

end;

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

Оператори, що розміщенні у тілі процедури/функції можуть звертатися до її локальних даних (константам та змінним) і змінювати їх значення.

Але слід пам’ятати, що значення локальних даних існують поки процедура/функція працює. Як тільки вона закінчується, всі зміни значень локальних даних, які були зроблені операторами процедур/функцій, зникнуть разом із звільненням пам’яті.

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]