Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Shporgalka_informatika ANT I.docx
Скачиваний:
2
Добавлен:
01.05.2025
Размер:
3 Мб
Скачать
☆

23. Процедуры и функции . Параметры-значения и параметры-переменные

Существует два способа описывать параметры: как параметры-значения и как параметры-переменные. В предыдущем разделеиспользовались параметры-значения. Параметр-значение является просто локальной переменной, начальное значение которой задается при вызове процедуры.

Пример:

  var

    a, b: integer; {Глобальные переменные}

 

  procedure P3(a, b: integer); {Внутри процедуры символами a и b

  обозначаются формальные параметры. Действия с ними никак не

  повлияют на значения глобальных переменных a и b}

  begin

    a:=a+1;

    b:=b+1;

    writeln(a+b);

  end;

 

  begin

    a:=1;

    b:=1;

    P3(a, b);{Вызов процедуры, где в качестве фактических параметров

              использованы значения глобальных переменных a и b}

    writeln(a, b);

  end.

Если в заголовке процедуры перед какими-либо из параметров поставить слово var, то это будут параметры-переменные. Например:

  procedure P3(var a, b: integer; c: real);

Здесь a и b – параметры-переменные, c – параметр-значение. При вызове процедуры фактический параметр, задающий значения этих формальных параметров не может быть выражением или константой, а должен быть обязательно переменной. То есть, недопустимы следующие вызовы:

    P3(x+y, y+1, z+2);     P3(x, 2, z);

где x, y, z – глобальные переменные. Такие инструкции вызовут синтаксическую ошибку. В то же время синтаксически правильными будут вызовы:

    P3(x, y, z+1);     P3(x, y, 2);

При использовании параметров-значений во время вызова процедуры происходит присваивание значения формальному параметру, то есть значение записывается в выделенные под хранение параметра ячейки памяти. При использовании параметров-переменных память под них не выделяется. Вместо этого на время работы процедуры они становятся синонимами тех переменных, которые указываются в качестве фактических параметров. Так при вызове P3(x, y, 2) формальные параметры a и b будут работать с теми же ячейками памяти, что и переменные x, y. Соответственно, если формальному параметру в процедуре присваивается новое значение, то и значение фактического параметра изменится. Воспроизведем пример, заменив тип параметров (добавим var перед их описанием):

  var

    a, b: integer; {Глобальные переменные}

 

  procedure P3(var a, b: integer); {Внутри процедуры символами a и b

  обозначаются формальные параметры. Теперь это

  параметры-переменные и действия с ними никак повлияют на значения

  глобальных переменных a и b}

  begin

    a:=a+1; 

    b:=b+1;

    writeln(a+b);

  end;

 

  begin

    a:=1;

    b:=1;

    P3(a, b);{Вызов процедуры, где в качестве фактических параметров

              использованы глобальные переменные a и b.

              После вызова глобальные переменные увеличатся на 1}

    writeln(a, b);

  end.

Если без слова var программа выводила числа 4, 1, 1, то после его добавления получится 4, 2, 2.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]