Параметрами підпрограм можуть бути змінні не тільки простих, але і складних типів, таких як масиви, записи, множини. Розглянемо для ілюстрації приклад з масивами.
Завдання. Є два масиви, по два числа в кожному. Надрукувати суму елементів кожного масиву. Використовувати функцію sum, єдиним параметром якої є ім'я сумовною масиву.
TYPE vector = array [1..2] of Integer;
FUNCTION sum (c: vector): Integer;
WriteLn (sum (a), '', sum (b));
Починаючи обчислювати функцію sum (a). Паскаль підставляє в осередку для елементів масиву c значення елементів масиву a. Починаючи ж обчислювати функцію sum (b). Паскаль підставляє в осередку для елементів масиву c значення елементів масиву b.
У заголовку функції неправильно було б писати
function sum (c: array [1..2] of Integer): Integer.
Необхідно було спочатку визначити тип масиву в розділі TYPE. а потім використовувати цю постанову і в описі a і b. і в заголовку функції. Така вимога синтаксису Паскаля.
Параметри-значення та параметри-змінні
Багато процедури не тільки малюють або звучать, але і, подібно до функцій, обчислюють що-небудь корисне. Наприклад, процедура B з наступної програми збільшує глобальну змінну x на значення параметра y.
PROCEDURE B (y: Integer);
Буде надруковано число 1001.
Однак керівники проектів не люблять, коли в підпрограма зустрічаються імена глобальних змінних. Хіба мало - керівнику прийде в голову змінити ім'я глобальної змінної, і що тоді - переписувати все підпрограми? Тому придумали використовувати так звані параметри-змінні. Ось та ж програма з їх використанням:
PROCEDURE B (y: Integer; var c: Integer);
Тут y - добре знайомий нам параметр. Називається він параметр-значення. При виконання підпрограми для параметра-значення виділяється місце в стеку і туди надсилається значення відповідного фактичного параметра (1).
Питання: чи має сенс писати B (1, 1000). Відповідь: не має, так як підпрограма не знатиме, який змінної привласнювати результат 1001. Природно, Паскаль видасть повідомлення про помилку.
Завдання по темі «Процедури і функції»
Що таке процедура? Що таке функція? У чому їхня відмінність?
Перерахувати кілька стандартних функцій і процедур.