Sunday, April 19, 2009

सीखिए सी 13 : प्रचालकों का वरीयता-क्रम

जब एक ही व्यंजक में अनेक प्रचालक हों, तब कभी-कभी यह निश्चित करना कठिन हो जाता है कि उनमें से किस प्रचालक का निष्पादन पहले होता है। उदाहरण के लिए इस अंकगणितीय व्यंजक को देखिए: 10 + 5 * 2। इसका मान 30 है, या 20?

यदि हम + प्रचालक के निष्पादन को पहले माने, तो 30 है और यदि * प्रचालक का निष्पादन पहले माने, तो 20 है। किंतु कंप्यूटर को इस प्रकार की द्विधात्मक स्थितियां पसंद नहीं हैं। इसलिए प्रचालकों की एक वरीयता क्रम मानी गई है और कंप्यूटर इसी क्रम के अनुसार अनेक प्रचालकों वाले व्यंजकों का मूल्यांकन करता है। वह ऊंची वरीयता वाले प्रचालक का निष्पादन नीची वरीयता वाले प्रचालकों के निष्पादन के पहले करता है।

प्रचालकों की वरीयता निम्नानुसार है:

() सबसे अधिक वरीयता
! ++ --
* / %
+ -
< <= > >=
&&
|| सबसे कम वरीयता

उपर्युक्त क्रम को तोड़ना हो, तो संबंधित राशियों को गोल कोष्ठक में रख दीजिए। चूंकि गोल कोष्ठक की वरीयता सबसे अधिक है, इसलिए कंप्यूटर उसके अंदर जो प्रचालक हैं, उनका निष्पादन सबसे पहले करेगा, चाहे इन प्रचालकों की वरीयता अन्य प्रचालकों से कम क्यों न हो।

मान लीजिए कि उपर्युक्त उदाहरण में आप 10 और 5 को पहले जोड़ना चाहते हैं और तत्पश्चात उनके योग को 2 से गुणन करना चाहते हैं। इसके लिए आप व्यंजक को इस प्रकार से लिखेंगे:

(10 + 5) * 2

प्रचालकों का वरीयता-क्रम किसी व्यंजक के दो पड़ौसी प्रचालकों पर ही (यानी कोई भी दो प्रचालक जो व्यंजक में निरंतर आते हों) लागू होता है, दूरस्थ प्रचालकों पर नहीं। आमतौर पर कंप्यूटर व्यंजकों का मूल्यांकन बाईं ओर से दाहिनी ओर करता है। वह बाईं ओर से सबसे पहले आए दो प्रचालकों की वरीयता की तुलना करता है और उनमें से जिसकी वरीयता अधिक हो, उसका निष्पादन करता है। तत्पश्चात वह बचे हुए प्रचालक की वरीयता की तुलना अगले प्रचालक से करता है और इन दोनों में से जिसकी वरीयता अधिक हो, उसका निष्पादन करता है। इत्यादि।

उदाहरण:
आइए, देखें कि कंप्यूटर निम्नलिखित व्यंजक का निष्पादन किस क्रम में करेगा:

10 + 4 - 21 * 6 / 7

कंप्यूटर इस व्यंजक का मूल्यांकन बाईं ओर से शुरू करेगा और पहले दो प्राचलकों, यानी + और - की वरीयता की तुलना करेगा। दोनों की वरीयता समान है, इसलिए वह + का निष्पादन करेगा क्योंकि वह व्यंजक में पहले आया है। इसका परिणाम होगा:

14 - 21 * 6 / 7

तत्पश्चात वह - और * की वरीयता की तुलना करेगा। * की वरीयता अधिक है। लेकिन इसका निष्पादन करने से पहले कंप्यूटर इसकी वरीयता को इसके अगले प्रचालक, यानी /, की वरीयता से करके देखेगा। इन दोनों की वरीयता समान है। इसलिए * का निष्पादन होगा:

14 - 126 / 7

अब बचते हैं - और / प्रचालक। इनमें से / प्रचालक की वरीयता अधिक है। अतः उसका निष्पादन होगा:

14 - 18

अब केवल एक प्रचालक - बचा है। इसके निष्पादन के बाद अंतिम परिणाम प्राप्त होगा, जो है:

-4।

इस अध्याय में हमने सी के बहुत से प्रचालकों का परिचय प्राप्त किया। संभव है इतने सारे प्रचालकों को एक साथ देखकर आपका मन चकरा रहा हो। घबराइए नहीं, अगले लेखों में जैसे-जैसे हम इन प्रचालकों का उपयोग करने लगेंगे, वैसे-वैसे उनकी विशेषताएं भी आपको स्पष्ट होती जाएंगी। फिलहाल आप बस यह याद रखें कि सी में इन सब प्रचालकों का अस्तित्व है।

3 comments:

  1. जहाँ कहीं वरीयता-क्रम के बारे में थोड़ी भी शंका हो , कोष्टक का भरपूर उपयोग करना चाहिये। इससे वरीयता-क्रम से सम्बन्धित खतरा बहुत हद तक टल जाता है।

    ReplyDelete
  2. अनुनाद जी, कोष्ठकों के उपयोग से वरीयता क्रम को तोड़ने की तरकीब अच्छी है। दरअसल इसका उल्लेख ऊपर के लेख में मैंने किया है।

    ReplyDelete