المشكلة: strong> اكتب إجراءً يبادل قيم متغيرين.
خصوصيات هذه المهمة هي أننا بحاجة إلى التغييرات التي تم إجراؤها في الإجراء حتى تصبح معروفة للبرنامج المتصل.
دعنا نحاول كتابة الإجراء مثل هذا:
var x ، y: عدد صحيح ؛
<قبل>
إجراء مبادلة (أ ، ب: عدد صحيح) ؛ // مع هذا الوصف لمعلمات الإجراء ،
فار ج: عدد صحيح ؛
start // سوف تنسخ قيم الوسيطات (x و y)
// المتغيرات a و b هي متغيرات مستقلة لا علاقة لها بـ x و y
ج: = أ ؛
أ: = ب ؛
ب: = ج ؛
نهاية؛
يبدأ
س: = 1 ؛
نبسب ؛ ص: = 2 ؛
المبادلة (س ، ص) ؛ // قيم المتغيرات x و y (الوسائط) يتم نسخها إلى المعلمات a و b
writeln (& # 39 ؛ x = & # 39 ؛، x ، & # 39 ؛، y = & # 39 ؛، y) ؛ // س = 1 ، ص = 2
نهاية.
إذا قمت بتشغيل هذا البرنامج ، يمكنك أن ترى أن قيم المتغيرين x و y لم تتغير. لكي تغير المعلمات قيم الوسيطات ، يجب عليك استخدام تمرير البيانات حسب المرجع. & nbsp؛ للقيام بذلك ، بعد اسم نوع البيانات في رأس الروتين الفرعي ، يجب عليك وضع الكلمة & nbsp؛ var strong> & nbsp؛
<قبل>
إجراء مبادلة ( var a، b: عدد صحيح) ؛ نبسب ؛ // الآن يحصل المتغيران a و b على عناوين المتغيرين x و y في الذاكرة
فار ج: عدد صحيح ؛ نبسب ؛
يبدأ
ج: = أ ؛
أ: = ب ؛
ب: = ج ؛
نهاية؛
الاستخدام: strong> إذا قمت بتمرير وسيطة من خلال المرجع ، فيمكن أن يكون اسم المتغير فقط ( ليس رقمًا وليس تعبيرًا حسابيًا strong>) في هذا المكان عند استدعاء الإجراء! < ر />
لا تطلب إجراءً مثل هذا: strong>
<قبل>
المبادلة (x، 4 ) ؛
Swap ( 5 + x ، y) ؛