Особливості використання процедур та функцій у турбо паскалі
Якщо формальним параметром процедури або функції є параметр, то при викликі цієї процедури або функції відповідним фактичним параметрам може бути будь-який вираз (частковий випадок виразу: змінна, константа). Якщо параметром єпараметр-змінна,то при викликі процедури або функції фактичним параметром може бути лише змінна еквівалентного типу.
Типом будь-якого формального параметра може бути стандартний тип, або тип раніше визначений в секції опису типів. (Не можна конструювати типи у заголовках процедур та функцій).
Тип параметра-значенняможе бути будь-яким, крім файлового.
Тип параметра-змінноїможе бути будь-яким, включаючи файловий.
Висновок:Якщо необхідно в процедуру або функцію передавати файл, то він має бути переданий як параметр-змінна.
Друга можливість позбавляє цього недоліку. Можна використовувати т.зв.параметри-константи.
Можна використовуватипараметр - змінну або параметр - константу без типу.
Можна використовувати т.зв. "відкриті" масиви -масиви без кордонів.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зробити відомими імена процедур та функцій.