مشکل: روشی بنویسید که مقادیر دو متغیر را تعویض کند.
ویژگی های این کار این است که ما به تغییرات ایجاد شده در رویه نیاز داریم تا به برنامه فراخوانی شناخته شود.
بیایید سعی کنیم روال را به این صورت بنویسیم:
var x, y: عدد صحیح;
<پیش>
Procedure Swap(a, b: integer); // با چنین توصیفی از پارامترهای رویه،
var c: عدد صحیح;
شروع // مقادیر آرگومان ها را کپی می کند (x و y)
// متغیرهای a و b متغیرهای مستقلی هستند که به x و y مرتبط نیستند
ج := a;
a := b;
b := c;
پایان؛
شروع
x := 1;
y := 2;
مبادله (x, y); //مقادیر متغیرهای x و y (آگومان ها) در پارامترهای a و b کپی می شوند.
writeln('x = '، x، '، y = '، y); // x=1، y=2
پایان.
اگر این برنامه را اجرا کنید، می بینید که مقادیر متغیرهای x و y تغییر نکرده است. برای اینکه پارامترها مقادیر آرگومانها را تغییر دهند، باید از عبور دادهها با مرجع استفاده کنید. برای انجام این کار، پس از نام نوع داده در سربرگ زیربرنامه باید کلمه var را قرار دهید.
<پیش>
Procedure Swap(var a, b: integer); // اکنون متغیرهای a و b آدرس متغیرهای x و y را در حافظه دریافت می کنند
var c: عدد صحیح;
شروع
ج := a;
a := b;
b := c;
پایان؛
استفاده: اگر یک آرگومان را با مرجع ارسال میکنید، آنگاه فقط نام متغیر (نه یک عدد و نه یک عبارت حسابی) میتواند در این مکان هنگام فراخوانی رویه باشد!< br />
روشی را مانند این فراخوانی نکنید:
<پیش>
مبادله (x، 4)؛
تعویض (5+x، y);