тичну змінну. Ось чому параметри-змінні слід оголошувати тільки ті, через які підпрограма насправді передає результати викликає програмі. Чим менше параметрів оголошено параметрами-змінними і чим менше в підпрограмі використовується глобальних змінних, тим менше небезпека отримання непередбачених програмістом побічних ефектів, пов'язаних з викликом підпрограми, тим простіше програма в розумінні і налагодженні.
Існує одна обставина, яку слід враховувати при виборі виду формальних параметрів. Як вже говорилося, при оголошенні параметра-значення здійснюється копіювання фактичного параметра в тимчасову пам'ять. Якщо цим параметром буде масив великої розмірності, то істотні витрати часу і пам'яті на копіювання при багаторазових зверненнях до підпрограмі можуть стати peшающім доказом на користь оголошення такого параметра параметром-змінною або передачі його в якості глобальної змінної.
Параметри масиви і параметри рядка
Може скластися враження, що оголошення змінних в списку формальних параметрів підпрограми нічим не відрізняється від оголошення їх у розділі опису змінних. Дійсно, в обох випадках багато спільного, але є одна істотна відмінність: типом будь-якого параметра в списку формальних параметрів може бути тільки стандартний або раніше оголошений тип. Тому не можна, наприклад, оголосити наступну процедуру:
Procedure S (а: array (1 .. 10] of real);
так як в списку формальних параметрів фактично оголошується тип - діапазон, який вказує кордону індексів масиву.
Якщо ми хочемо передати якийсь елемент масиву, то проблем, як правило, не виникає, але якщо в підпрограму передається весь масив, то слід спочатку описати його тип. Наприклад:
......
type
mas = array [1 .. 10] of real;
....... p> PROCEDURE S (a: mas);
......
Оскільки рядок є фактично своєрідним масивом, її передача в
підпрограму здійснюється аналогічним чином:
.......
type
intype = string [15];
outype = string [30];
FUNCTION St (i: intype): outype:
Вимога описати будь тип-масив або тип-рядок перед оголошенням підпрограми на перший погляд здається несуттєвим. Дійсно, в рамках найпростіших обчислювальних завдань зазвичай заздалегідь відома структура всіх використовуваних в програмі даних, тому статичне опис масивів не викликає проблем. Однак розробка програмних засобів універсального призначення пов'язана зі значними труднощами. По суті, мова йде про те, що в Турбо Паскалі неможливо використовувати в підпрограма масиви з В«плаваючимиВ» кордонами зміни індексів. Наприклад, якщо розроблена програма, обробна матрицю з 10 х 10 елементів, то для обробки матриці з 9 х 11 елементів необхідно перевизначити тип, тобто перекомпілювати всю програму. Цей недолік, як і відсутність в мові засобів обробки виняткових ситуацій (переривань), успадкований з стандартного Паскаля і явля...