Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Основи програмування Паскаль.docx
Скачиваний:
51
Добавлен:
12.05.2015
Размер:
511.7 Кб
Скачать

18. Підпрограми

Написання будь-якої великої програми неможливо як без розбивки завдання на менш складні подзадачи, які ми можемо вирішувати незалежно, так і без повторного використання раніше написаного коду (представимо, що кожна нова програма писалася б "з нуля"?!). Розв'язати ці найважливіші завдання дозволяє механізмпідпрограм, наявний у будь-якій мові програмування, у тому числі, і в Паскалі.

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

Використання підпрограм у чомусь схоже на розрахунки з використанням математичних або фізичних формул. Так, маючи загальні формули розв'язку квадратного рівняння, ми можемо підставити замість коефіцієнтів a, b і c будь-які числові значення й розв'язати будь-яке конкретне рівняння. Аналогічно, ми могли б написати підпрограму із вхіднимипараметрами a, b, c івихіднимипараметрами x1, x2 (знайдене коріння рівняння), а потім, використовуючи потрібне число раз цю підпрограму (однократне використання підпрограми називається їївикликом), розв'язати будь-яка кількість квадратних рівнянь.

Отже, використання підпрограм дозволяє розв'язати наступні завдання:

  • Зменшення розмірів коду й економія пам'яті за рахунок можливості кількаразового виклику однієї й тієї ж підпрограми в рамках однієї програми;

  • Краще структурування програми за рахунок розбивки завдання на більш прості подзадачи;

  • Ефективне повторне використання одного разу написаного коду.

Розглянемо загальну структуру складної програми, що містить дві підпрограми:

Var розділ_описів_1;

Заголовок Підпрограми_1;

Begin

{Тіло підпрограми_1}

End;

Заголовок Підпрограми_2;

Begin

{Тіло підпрограми_2}

End;

Var розділ_описів_2;

Begin

{Тіло головної програми}

End.

Як видне з опису, кожна підпрограма має заголовок( щонайменше, у цьому заголовку повинне бути зазначене її призначене програмістом ім'я) ітіло, що полягає з операторів. Подібно тілу циклу, тіло підпрограми укладене в операторные дужкиbegin … end;. Зверніть увагу, що в лістингу два розділи описів. Перший з них розташований до обох підпрограм, другий – після них перед тілом головної програми. Дані, описані в першому розділі –глобальні, вони доступні всім частинам програми, розташованим нижче по її тексту. Дані другого розділу описів доступні лише головній програмі, тому що описані безпосередньо перед нею. Загальне правило дуже простої: підпрограми "бачать" усі глобальні змінні, описані вище їхні тіла. Аналогічно, без вживання спеціальних заходів підпрограма "бачить" і може викликати будь-яку іншу підпрограму, розташовану вище її по тексту програми. Тут друга підпрограма може викликати першу, але не навпаки. Головна програма, як правило, розташована останньої, може викликати всі підпрограми.

На практиці не рекомендуєтьсяробити підпрограми залежними від глобальних даних, тому що це знижує їхпереносимость(можливість повторного використання). Зрозуміло, кожного з розділів описів у конкретній програмі може й не бути. Більше того, оскільки підпрограма – окрема й, в ідеалі, незалежна частина програми, вона може містити власний розділ описулокальнихзмінних, призначених лише для її потреб і невидимих з інших частин програми. Наприклад, для підпрограми розв'язку квадратного рівняння такий локальної змінної могла б бути зміннаd, призначена для обчислення дискримінанта рівняння. Пояснимо цей важливий момент на прикладі:

Var i:integer;

{глобальна змінна – описана поза всіма підпрограмами}

Заголовок Підпрограми;

Var i:integer;

{локальна змінна – описана після заголовка підпрограми}

Begin

{Тіло підпрограми}

End;

Begin

{Тіло головної програми}

End.

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

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