Параметрами підпрограм можуть бути змінні не тільки простих, але і складних типів, таких як масиви, записи, множини. Розглянемо для ілюстрації приклад з масивами.
Завдання. Є два масиви, по два числа в кожному. Надрукувати суму елементів кожного масиву. Використовувати функцію sum, єдиним параметром якої є ім'я сумовною масиву.
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, і в заголовку функції. Така вимога синтаксису Паскаля.
Завдання 122. У школі два класи. У кожному - 5 учнів. Кожен учень отримав оцінку на іспиті з фізики. Визначити, який з двох класів вчиться рівніше (будемо вважати, що рівніше вчиться той клас, в якому різниця між найвищою і найнижчою позначкою менше).
Вказівка: Створити функції min (c: vector), max (c: vector) і raznitsa (c: vector).
Параметри-значення та параметри-змінні
Багато процедури не тільки малюють або звучать, але і, подібно до функцій, обчислюють що-небудь корисне. Наприклад, процедура B з наступної програми збільшує глобальну змінну x на значення параметра y.
Буде надруковано число 1001.
Однак керівники проектів не люблять, коли в підпрограма зустрічаються імена глобальних змінних. Хіба мало - керівнику прийде в голову змінити ім'я глобальної змінної, і що тоді - переписувати все підпрограми? Тому придумали використовувати так звані параметри-змінні. Ось та ж програма з їх використанням:
Тут y - добре знайомий нам параметр. Називається він параметр-значення. При виконання підпрограми для параметра-значення виділяється місце в стеку і туди надсилається значення відповідного фактичного параметра (1).
Питання: чи має сенс писати B (1 1000)? Відповідь: не має, так як підпрограма не знатиме, який змінної привласнювати результат 1001. Природно, Паскаль видасть повідомлення про помилку.
Завдання 123: На двох станціях (A і B) протягом року вимірювалася температура. Відповідно створені два масиви чисел довжиною 365. Потім виявилося, що на станції A термометр весь час показував температуру на 2 градуси вище реальної, а на станції B - на 3 градуси нижче. Написати процедуру з двома параметрами, яка виправляє вихідний масив. Один формальний параметр - величина поправки, інший - параметр-змінна - масив температур.