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


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оставить процедуру, которая меняет местами значения двух переменных.

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

Вставьте недостающие фрагменты кода
Pascal
1
var x, y: integer; 
2


                                                   
3
4
5
begin 
6
7
8
9
end; 
10


                                                   
11
begin 
12
    read(x, y); 
13
14
    writeln('x = ', x, ', y = ', y); 
15
end.