Формальные параметры – это наименование переменных, через которые передается информация из программы в процедуру либо из процедуры в программу.
Пусть, например, процедура sq осуществляет решение квадратного уравнения ax2 + bx + c = 0. Тогда она должна иметь пять формальных параметров: для значений коэффициентов a, b, c и для результатов: x1 иx2.
Для того, чтобы запустить процедуру в работу, необходимо к ней обратиться (ее вызвать). Вызов процедуры N производится оператором вида
N (p1, p2, p3, …);
здесь N – имя процедуры, p1, p2, p3 – фактические параметры.
При вызове процедуры машина производит следующие действия. Устанавливает взаимно однозначное соответствие между фактическими и формальными параметрами, затем управление передает процедуре. После того, как процедура проработает, управление передается вызывающей программе на оператор, следующий за вызовом процедуры.
Соответствие между фактическими и формальными параметрами должно быть следующим:
а) число фактических параметров должно быть равно числу формальных параметров;
б) соответствующие фактические и формальные параметры должны совпадать по порядку следования и по типу.
Соответствующие параметры не обязательно должны быть одинаково обозначены.
Пример. Вызвать процедуру sq можно так:
sq(p, q, r, y, z);
здесь p, q, r – коэффициенты квадратного уравнения, а y и z – корни этого уравнения. Если вызвать sq оператором sq(x1, x2, a, b, c); то машина воспримет x1, x2, a как коэффициенты уравнения, а корни зашлет в переменные b и c.
Пример. Составим процедуру sq решения квадратного уравнения ax2 + bx + c = 0 в предположении, что дискриминант не отрицателен. С помощью этой процедуры решим квадратное уравнение 5.7y2 – 1.2y – 8.3 = 0.
var y1, y2: real; procedure sq(a, b, c: real; var x1, x2: real); var d: real; begin d := b * b - 4 * a * c; x1 := (-b + sqrt(d)) / (2 * a); x2 := (-b - sqrt(d)) / (2 * a); end; begin sq(5.7, -1.2, -8.3, y1, y2); writeln('y1 = ', y1, '; y2 = ', y2); readln end.
Как видно из примера, процедура помещается после декларативных операторов программы. Первым выполняется оператор обращения к процедуре:
sq(5.7, -1.2, -8.3, y1, y2);
здесь первые три фактические параметра соответствуют формальным a, b, c, а последние два фактических параметра y1 и y2 соответствуют формальным x1 и x2. После того как процедура «запустится», в ячейки a, b, c попадут числа 5.7, -1.2, -8.3 и начнут выполняться операторы процедуры.
После окончания работы процедуры управление возвратиться к операторуwriteln, который отпечатает результат. Параметры процедур могут быть четырех видов: параметры-значения, параметры-переменные, параметры-процедуры, параметры-функции.