समस्या: एक ऐसी प्रक्रिया लिखें जो दो चरों के मानों की अदला-बदली करे।
इस कार्य की ख़ासियत यह है कि हमें कॉलिंग प्रोग्राम के बारे में जानने के लिए प्रक्रिया में किए गए परिवर्तनों की आवश्यकता है।
आइए प्रक्रिया को इस प्रकार लिखने का प्रयास करें:
वर एक्स, वाई: पूर्णांक;
<पूर्व>
प्रक्रिया स्वैप (ए, बी: पूर्णांक); // प्रक्रिया मापदंडों के ऐसे विवरण के साथ,
वर सी: पूर्णांक;
start // तर्कों के मूल्यों की नकल करेगा (x और y)
// चर ए और बी स्वतंत्र चर हैं जो एक्स और वाई से संबंधित नहीं हैं
सी := ए;
ए: = बी;
ख := ग;
अंत;
शुरू
एक्स: = 1;
य := 2;
स्वैप (एक्स, वाई); // चर x और y (तर्क) के मान पैरामीटर a और b में कॉपी किए गए हैं
राइटलन('x = ', x, ', y = ', y); // एक्स = 1, वाई = 2
अंत।
पूर्व>
यदि आप इस प्रोग्राम को चलाते हैं, तो आप देख सकते हैं कि चर x और y के मान नहीं बदले हैं। मापदंडों के लिए तर्कों के मूल्यों को बदलने के लिए, आपको संदर्भ द्वारा डेटा पास करना चाहिए। ऐसा करने के लिए, डेटा प्रकार के नाम के बाद उपनेमका के शीर्षक में, आपको वर शब्द डालना होगा
<पूर्व>
प्रक्रिया स्वैप (var a, b: पूर्णांक); // अब वेरिएबल्स a और b को मेमोरी में वेरिएबल्स x और y के एड्रेस मिलते हैं
वर सी: पूर्णांक;
शुरू
सी := ए;
ए: = बी;
ख := ग;
अंत;
पूर्व>
उपयोग: यदि आप संदर्भ द्वारा तर्क पारित करते हैं, तो प्रक्रिया को कॉल करते समय केवल चर नाम (संख्या नहीं और अंकगणितीय अभिव्यक्ति नहीं) इस स्थान पर हो सकता है!< बीआर />
इस तरह की प्रक्रिया को कॉल न करें:
<पूर्व>
स्वैप (एक्स, 4);
स्वैप (5+x, y);
पूर्व>