- •Область дії ідентифікаторів при використанні підпрограм
- •Класифікація способів передавання параметрів
- •Передавання параметрів засобами мови Паскаль
- •Вхідний і вихідний параметр за адресою (називають параметр-змінна).
- •Вхідний параметр за адресою (називають параметр-константа).
- •Рекурсія: основні поняття та визначення
- •Форми рекурсивних підпрограм
- •Виконання дій при рекурсивному спуску
- •Виконання дій при рекурсивному поверненні
- •Виконання дій як при рекурсивному спуску так і при рекурсивному поверненні
- •Швидке упорядкування
- •Порівняння функції і процедури
ТЕМА : ПІДПРОГРАМИ, ЇХ РІЗНОВИДИ ТА СПОСОБИ ВИКОРИСТАННЯ. ПРОЦЕДУРИ ТА ФУНКЦІЇ КОРИСТУВАЧА
(теоретичний матеріал)
Структура процедур і функцій
При створенні програми для розв’язування складної задачі виконується декомпозиція (поділ) цієї задачі на підзадачі, які в свою чергу поділяються на ще менші підзадачі і так далі, до елементарних підзадач, які легко програмуються. У мові Паскаль є різні засоби поділу програми на частини. На верхньому рівні поділу (великих задач) – це модулі, на нижньому рівні (елементарних підзадач) – це процедури і функції. Об’єктно-орієнтована методологія охоплює як верхній так і нижній рівень створення програм.
Процедури і функції є важливим засобом у більшості мов програмування. З їх допомогою можна об’єднати групу операторів для виконання деякої єдиної дії. Процедуру чи функцію (надалі підпрограму) можна викликати з різних місць програми, вона може повертати обчислені результати, і їй можна передавати дані для виконання обчислень. Для того, щоб підпрограма почала виконуватися, її потрібно викликати.
Структура опису процедури: |
Структура опису функції: |
||||||
procedure Назва(Список формальних параметрів); |
function Назва(Список формальних параметрів): Тип результату; |
||||||
label const type var |
|
|
Опис локальних міток, констант, типів і змінних |
label const type var |
|
|
Опис локальних міток, констант, типів і змінних |
|
|
||||||
|
|
|
|
|
|
|
|
procedure function |
|
|
Опис внутрішніх процедур і функцій |
procedure function |
|
|
Опис внутрішніх процедур і функцій |
|
|
||||||
|
|
|
|
|
|
|
|
begin … end; |
|
|
Оператори |
begin … end; |
|
|
Оператори, серед яких є принаймні один оператор, за яким назві функції або глобальній змінній Result надається значення результату |
|
|
Область дії ідентифікаторів при використанні підпрограм
Областю дії ідентифікатора називають частину програми, в якій він може бути використаний.
Область дії ідентифікатора визначається місцем його описання. Якщо ідентифікатор можна використовувати тільки в межах однієї підпрограми, то такий ідентифікатор називають локальним. Якщо дія ідентифікатора розповсюджується на кілька вкладених (не менше однієї) підпрограм, то такий ідентифікатор називають глобальним.
Слід зазначити, що поняття "глобальний" і "локальний" потрібно розуміти відносно деякої підпрограми. Розглянемо це на прикладі:
program SubProc; 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 будуть глобальними для всіх підпрограм, які використовуються в програмі – P1, P2. Іідентифікатори A1, B1, C1 будуть глобальними для всіх підпрограм, які описані в процедурі P1 (в даному прикладі для процедури P2), і одночасно локальними для процедури P1.
A2, B2, C2 оголошені у внутрішній процедурі P2 і тому є тільки локальними.
Правила визначення області дії для ідентифікаторів підпрограм:
діють всі ідентифікатори, визначені в підпрограмі;
діють всі ідентифікатори верхніх рівнів описання, якщо їх імена відрізняються від імен, описаних у підпрограмі;
локальні ідентифікатори підпрограми діють лише в межах цієї підпрограми;
у випадку однакових імен глобального і локального ідентифікаторів діятиме тільки внутрішній локальний ідентифікатор.
Локальні дані створюються при викликові підпрограми й існують тільки на протязі її виконання. Виділення пам’яті для локальних даних виконується автоматично на початку виконання підпрограми, а звільнення цієї пам’яті одразу після закінчення її виконання.
Класифікація способів передавання параметрів
При викликові підпрограми їй можна передавати параметри.
Параметри, які вказуються в заголовку підпрограми при її описанні, називають формальними параметрами.
Параметри, які вказуються при викликові підпрограми, називають фактичними параметрами.
Для задання списку параметрів потрібно дотримуватися правил:
список формальних параметрів вказується при описанні підпрограми в круглих дужках;
список фактичних параметрів визначає кількість, порядок слідування і тип параметрів;
будь-якому фактичному параметру може бути надано початкове значення (за замовчуванням), яке вказується після знака рівності "="; фактичні параметри, які мають значення за замовченням, мають завершувати список формальних параметрів;
якщо підпрограма описується без вказування списку формальних параметрів, то круглі дужки після назви підпрограми не вказуються.
Для коректного передавання параметрів потрібно дотримуватися таких правил:
має бути однакова кількість фактичних і формальних параметрів;
порядок задання фактичних параметрів має відповідати порядку опису формальних параметрів;
при наданні значень фактичних параметрів формальним має виконуватись сумісність їх типів.
Розглянемо загальну класифікацію способів передавання параметрів, реалізація яких можлива в мовах програмування. Параметри розрізняються:
за механізмом передавання:
передавання за значенням;
передавання за адресою;
за взаємодією підпрограми, яка викликає, і підпрограми, яку викликають:
вхідний параметр;
вихідний параметр;
вхідний і вихідний параметр.
Відповідно до цього теоретично можливі 6 способів передавання параметрів:
вхідний параметр за значенням;
вихідний параметр за значенням;
вхідний і вихідний параметр за значенням;
вхідний параметр за адресою;
вихідний параметр за адресою;
вхідний і вихідний параметр за адресою.