Writeln('Введіть три числа');Readln(A, B, C);Writeln('Максимальним з усіх є ', Max(Max(A, B), C))
End.
Зверніть увагу на стислість тіла основної програми і на прозорість дій усередині функції. Формальні параметри A і B, використовувані в підпрограмі, не мають ніякого відношення змінним A і B, описаним в основній програмі.
Існує два способи передання фактичних параметрів в підпрограму: за значенням і по посиланню. У першому випадку значення змінно-фактичного параметра при виклику підпрограми привласнюється локальній змінній, що є формальним параметром підпрограми. Що б потім не відбувалося з локальною змінною, це ніяк не відіб'ється на відповідній глобальній. Для одних завдань це благо, але іноді вимагається виконати в підпрограмі дії над самими змінними, вказаними в якості фактичних параметрів. На допомогу приходить другий спосіб. Відбувається наступне: при зверненні до підпрограми не відбувається формування локальною змінно-формального параметра. Просто на час виконання підпрограми ім'я цієї локальної змінної вказуватиме на ту ж область пам'яті, що і ім'я відповідної глобальної змінної. Якщо в цьому випадку змінити локальну змінну, зміняться дані і в глобальній.
Передача параметрів по посиланню відрізняється тим, що при описі підпрограми перед ім'ям змінної - формального параметра ставиться службове слово Var. Тепер використання в якості фактичних параметрів виразів або безпосередніх значень вже не допускається - вони мають бути іменами змінних.
Ще один класичний приклад. Завдання: "Розташувати в порядку неубування три цілі числа".
Program Pr;
VarS1, S2, S3 : Integer;
Procedure Swap(Var A, B: Integer);{Процедура Swap з параметрами-змінними}
Var C : Integer; {C - незалежна локальна змінна}
Begin C :=A; A:=B; B:=C {Міняємо місцями утримуване A і B}