При вызове процедуры формальный параметр-значение получает свое начальное значение путем копирования соответствующего ему фактического параметра во временную память. При изменении формального параметра-значения фактический параметр не меняется. На месте формального параметра-значения при вызове процедуры может стоять также выражение такого же типа:
SUMMA (X1+5.1,L,MM)
Если параметр процедуры определен как параметр-переменная, то при вызове процедуры ей передается сама переменная, а не её копия. Это повышает быстродействие работы процедуры и экономит память. Однако любые изменения этой переменной внутри процедуры приводят к изменению самого фактического параметра в вызывающей программе. Если параметр-переменная используется для передачи в вызывающую программу результатов работы процедуры, то это нормально. В остальных случаях целесообразно использовать параметры-значения и параметры-константы. Параметр-константа описывается в заголовке процедуры аналогично параметру-значению, но перед ним ставится служебное слово CONST. В этом случае копия исходных данных не создается, что позволяет экономить память. Таким способом часто пользуются для передачи в подпрограмму больших массивов данных.
PROCEDURE RIS(CONST X:REAL;Y,S:WORD);
Отсюда можно сделать выводы:
· Передачу процедуре исходных данных для расчета следует производить через параметры-значения и параметры-константы.
· Обмен данными между вызывающей программой и процедурой и обратно следует производить через параметры-переменные.
Следует иметь в виду, что типом любого формального параметра процедуры может быть только стандартный или ранее объявленный тип. Поэтому, нельзя объявить следующую процедуру
PROCEDURE S(A:ARRAY[1..10] OF REAL)
Чтобы в подпрограмму передать весь массив, следует первоначально описать его тип:
AT=ARRAY[1..10] OF REAL;
PROCEDURE S(A:AT);
…
Т.к. строка является своеобразным одномерным массивом, то её передача в подпрограмму осуществляется аналогично: