Особливості використання процедур та функцій у турбо паскалі

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

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

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

Тип параметра-змінноїможе бути будь-яким, включаючи файловий.

Висновок:Якщо необхідно в процедуру або функцію передавати файл, то він має бути переданий як параметр-змінна.

Друга можливість позбавляє цього недоліку. Можна використовувати т.зв.параметри-константи.

Можна використовуватипараметр - змінну або параметр - константу без типу.

Можна використовувати т.зв. "відкриті" масиви -масиви без кордонів.A:arrayofchar;

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

Існують такі можливості «раптового» виходу з процедур або функцій та програми. Процедури:

exit;- забезпечує припинення виконуваної процедури або функції та повертає управління в точкувиклику.

Halt(n);- процедура використовується для передчасного виходу з усієї програми, на якому рівні вкладеності вона б не викликалася.

n-код повернення; якщоn= 0то завершення було нормальним; якщоn> 0то програма завершена некоректно. Код повернення аналізується за допомогою змінноїDOS,яка називаєтьсяERRORLEVEL.

Випереджальне визначення процедур та функцій

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

Наприклад: при уточненні процедуриАбуло вирішено, що вона уточнюється за допомогою виклику двох процедуріC.

2-й випадок: складна взаємна рекурсія

Кожен із цих двох розглянутих випадків пов'язаний з описом у програмі використаних процедур:

А, В, С,(1-й випадок),P,Q(2-й випадок). Компілятор розглядає програми згори донизу. При цьому всі процедури, функції, константи, змінні та мітки повинні бути відомідомоментуїх використання. В іншому випадку компілятор повідомить, щовикористовується невідомеім'я,і сприйме це як помилку.

Єдві можливості усуненняподібних помилок:

Змінити порядок опису процедур у тексті програми.

У1-му випадку, щоб усунути помилку, потрібно помістити опис процедурВіСперед описом процедуриА.

У2-му разі перестановкаPіQні до чого не приведе. Дляусунення цієї помилки для процедур та функцій є директиваforward. При її використанні обидва приклади були б записані так:

директиваforwardвказує компілятору, що описується лише заголовок. Повний опис буде зроблено нижче за текстом програми. Завдання оператораforwardзробити відомими імена процедур та функцій.