Операторы PASCAL ABC Параметры процедур и функций

  • docx
  • 11.11.2021
Публикация на сайте для учителей

Публикация педагогических разработок

Бесплатное участие. Свидетельство автора сразу.
Мгновенные 10 документов в портфолио.

Иконка файла материала Л2-00375.docx

Операторы PASCAL ABC

Параметры процедур и функций

Параметры, указываемые при описании подпрограммы, называются формальными. Параметры, указываемые при вызове подпрограммы, называются фактическими.

Если формальный параметр описан со служебным словом var, то его называют параметром-переменной и говорят, что он передается по ссылке. Если же параметр описан без слова var, то его называют параметром-значением и говорят, что он передается по значению.

Если параметр передается по значению, то при вызове подпрограммы значения фактических параметров присваиваются соответствующим формальным параметрам. Например, пусть имеется следующее описание процедуры:

procedure PrintSquare(i: integer);
begin
  writeln(i*i);
end;

Тогда при вызове PrintSquare(5*a-b) значение 5*a-b будет вычислено и присвоено переменной i, после чего выполнится тело процедуры.

Если параметр передается по ссылке, то при вызове подпрограммы фактический параметр заменяет собой в теле процедуры соответствующий ему формальный параметр. В итоге любые изменения формального параметра-переменной внутри процедуры приводят к соответствующим изменениям фактического параметра. Например, если описана процедура

procedure Mult2(var a: integer);
begin
  a:=a*2;
end;

то после вызова Mult(d) значение d увеличится в 2 раза.

В качестве фактического параметра-значения можно указывать любое выражение, тип которого совпадает с типом формального параметра или неявно к нему приводится.  В качестве фактического параметра-переменной можно указывать только переменную, тип которой в точности совпадает с типом формального параметра. 

При передаче параметра по ссылке в подпрограмму передается адрес фактического параметра. Поэтому если параметр занимает много памяти (массив, запись), то обычно он также передается по ссылке. В результате в процедуру передается не сам параметр, а его адрес, что экономит память и время работы. Например:

procedure Print(var a: array [1..10] of integer; n: integer);
var i: integer;
begin
  for i:=1 to n do
    write(a[i],' ');
  writeln;
end;

Параметр может быть также описан со служебным словом const. Это означает, что менять его в подпрограмме запрещено. Например:

procedure PrintSquare1(i: integer);
begin
 
i:=i*i; //
верно
  writeln(i);
end;
procedure PrintSquare2(const i: integer);
begin
 
i:=i*i; //
ошибка!!!
 
writeln(i);
end;