русс | укр

Мови програмуванняВідео уроки php mysqlПаскальСіАсемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование


Linux Unix Алгоритмічні мови Архітектура мікроконтролерів Введення в розробку розподілених інформаційних систем Дискретна математика Інформаційне обслуговування користувачів Інформація та моделювання в управлінні виробництвом Комп'ютерна графіка Лекції


Підпрограми


Дата додавання: 2014-11-28; переглядів: 762.


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

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

Використання підпрограм у чомусь схоже на розрахунки з використанням математичних або фізичних формул. Так, маючи загальні формули розв'язку квадратного рівняння, ми можемо підставити замість коефіцієнтів 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 ніяк від цього не зміниться. Уточните по цьому прикладу визначення глобальної й локальної змінних.

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

 


<== попередня лекція | наступна лекція ==>
Матриці й типові алгоритми обробки матриць | Процедури


Онлайн система числення Калькулятор онлайн звичайний Науковий калькулятор онлайн