Модуль: Подпрограммы: процедуры и функции - 1


Задача

12/12

Изменяющиеся аргументы

Теория Нажмите, чтобы прочитать/скрыть

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

Попробуем написать процедуру таким образом:

var x, y: integer;

procedure Swap (a, b: integer);   // при таком описании параметров процедуры,
var c: integer; 
begin                            // будет происходить копирование значений аргументов (x и y)
                      // переменные a и b - самостоятельные переменные, не связанные с x и y  
c := a;
a := b;
b := c;
end;

begin
  x := 1;
  y := 2;
  Swap (x, y);         //значения переменных x и y (аргументы) копируются в параметры a и b
  writeln('x = ', x, ', y = ', y);       // x = 1, y = 2   
end.                                       
Если запустить данную программу, то можно увидеть, что значения переменных x и y не изменилось. Для того чтобы параметры изменяли значения аргументов необходимо использовать передачу данных по ссылке. Для этого после названия типа данных в заголовке подпрограммы необходимо поставить слово var 
procedure Swap (var a, b: integer);   // теперь переменные a и b получают адреса переменных x и y в памяти
var c: integer; 
begin
c := a;
a := b;
b := c;
end;
Применение: Если вы передаете аргумент по ссылке, то при вызове процедуры на этом месте может стоять только имя переменной (НЕ число и НЕ арифметическое выражение)!

НЕЛЬЗЯ вызвать процедуру таким образом:
Swap (x, 4);
Swap(5+x, y);

Задача

Cоставить процедуру, которая меняет местами значения двух переменных.

Найдите и исправьте ошибки в данной процедуре