7. Процедури
и 
7.3.2. Параметри-променливи
Идентификаторът на параметър-променлива се третира аналогично на
параметъра-значение със следните разлики:
*
всяко изменение на формалния параметър е изменение и на зададения
фактически параметър;
*
като фактически параметри могат да бъдат задавани само променливи (не
и изрази), типът на фактическия параметър трябва да бъде идентичен (type
identity) с този на формалния параметър;
*
разрешено е предаването на променливи от файлов тип.
Този вид параметри се наричат още и параметри, предавани по адрес, тъй като
обикновено се реализират чрез предаване на адреса на формалния параметър.
7.3.3. Параметри-константи
Параметрите-константи в UniPascal са разширение на стандарта на Pascal.
Компилаторът не разрешава промяната на тяхната стойност в тялото на процедурата
(т.е. не може да им се дава стойност или да се предават като параметри-променливи в
друга процедура). Когато са от прост тип, параметрите-константи се предават по
стойност, а ако са от съставен тип, те се предават по адрес. Това позволява пестене на
памет и време.
Като пример нека разгледаме следната функция, пресмятаща детерминантата
на матрица 3x3, чийто тип е дефиниран съответно като matrix_3x3.
var matrix_3x3 = array [1..3, 1..3] of real;
function determinant(const a: matrix_3x3): real;
begin
determinant:= a[1, 1] * a[2, 2] * a[3, 3] +
a[2, 1] * a[3, 2] * a[1, 3] +
a[1, 2] * a[2, 3] * a[3, 1] -
a[1, 3] * a[2, 2] * a[3, 1] -
a[2, 1] * a[1, 2] * a[3, 3] -
a[3, 2] * a[2, 3] * a[1, 1];
end { determinant };
Ако пред формалния параметър не е поставена ключовата дума CONST, то
фактическият параметър ще се предава по стойност. А стойността на един масив се
състои от стойностите на всички негови елементи, т.е. на функцията ще бъдат
предадени девет реални числа. За тази дейност се губи както време, така и памет (за
самата локална променлива 'a'). Обикновено в такива случаи програмистите
предпочитат да използуват параметър-променлива, но той не отразява реалното
използуване на параметъра, защото VAR означава, че параметърът може да бъде
променен. Ако типът на параметъра е низ, то неприятностите, свързани с
използуването на ключовата дума VAR, вече са реални. Вижте следната подпрограма,
отпечатваща дадения й като параметър низ. При това низът се отпечатва ограден с
единични кавички и вместо всяка съдържаща се в него кавичка се отпечатват две кавички
(както низът се задава по синтаксиса на Pascal):
procedure write_quote(const s: string);
var i: integer;
begin
write("'");
for i:= 1 to length(s) do begin
<<  <  GO  >  >>

Вернуться к началу сайта