Tuesday, April 28, 2009

सीखिए सी -19 : विशाखन - if... else निर्देश

इस लेख में हम प्रोग्रामन भाषाओं की एक अत्यंत महत्वपूर्ण विशेषता के बारे में सीखेंगे, जो है विशाखन।

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

इसे एक उदाहरण से समझते हैं। मान लीजिए कि हमें एक ऐसा प्रोग्राम लिखना है जो स्कूली बच्चों के प्राप्तांक स्वीकार करेगा और यदि प्राप्तांक 60% से ज्यादा हो, तो प्रदर्शित करेगा - Pratham Darja. यदि प्राप्तांक 50% और 60% के बीच हो तो प्रदर्शित करेगा - Dvitiya Darja. और यदि प्राप्तांक 40% और 50% के बीच हो तो प्रदर्शित करेगा – Tritiya Darja. और यदि प्राप्तांक 40% से कम हो, तो प्रदर्शित करेगा – Fail.

यहां कंप्यूटर उसे दी गई सूचना के अनुसार चार विकल्पों में से कोई एक विकल्प चुनेगा। इस तरह इस प्रोग्राम को चलाने पर हर बार अलग-अलग परिणाम प्राप्त होगा जो उसे दिए गए प्राप्तांक पर निर्भर करेगा।

इस तरह के प्रोग्राम लिखने में हमें सी की जो संरचना मदद करती है, वह है if... else वाली संरचना। इसके कई रूप होते हैं, सबसे सरल रूप यह है:

if (शर्तें)
{
सी की उक्तियां
}
else
{
सी की उक्तियां
}

इसमें if के आगे के गोल कोष्ठकों में सी की कोई तार्किक व्यंजक होता है, जिसका मान प्रोग्राम के चलने के समय सही अथवा गलत में से कोई एक होता है। यदि उसका मान सही हुआ, तो if के बाद के धनु कोष्ठकों के बीच विद्यमान उक्तियों का निष्पादन होता है और प्रोग्राम else के धनु कोष्ठकों में जो उक्तियां हैं, उन्हें छोड़ देता है। इसकी जगह यदि if के गोल कोष्ठकों में जो तार्किक व्यंजक है, उसका मान गलत हो, तो प्रोग्राम if के धनु कोष्ठकों की उक्तियों को छोड़कर else के धनु कोष्ठकों में जो उक्तियां हैं, उनका निष्पादन करता है।

आइए एक छोटे प्रोग्राम के जरिए इसे समझते हैं। इस प्रोग्राम में आपसे पूछा जाता है कि रात है या दिन, और प्राप्त उत्तर के अनुसार Raat ko taare chamakte hain. या Din ko suraj chamakta hai. में से कोई एक वाक्य प्रदर्शित किया जाता है।

प्रोग्राम 8
--------------------------------
/*if... else ka udaharan */

#include <stdio.h>
#include <conio.h>

void main()
{
clrscr();

char raat_din;

printf("Batayiye ki raat hain ya din. Raat ke liye R aur din ke liye D type kijiye: ");
scanf("%s", &raat_din);
if(raat_din=='D')
{
printf("\nDin mein suraj chamakta hai.");
}
else
{
printf("\nRaat ko tare chamakte hai.");
}
getch();
}
-------------------------------

आउटपुट
-------------------------------
यदि प्रयोक्ता R दर्ज करे
Raat ko tare chamakte hai.

यदि प्रयोक्ता D दर्ज करे
Din mein suraj chamakta hai.
-------------------------------

इस प्रोग्राम में खास रूप से if के गोल कोष्ठकों में जो व्यंजक है उसकी ओर ध्यान दीजिए। वह है

raat_din=='D'

यहां D अक्षर को एकल उद्धरण चिह्न ( ‘ और ‘) से घेरा गया है। यह महत्वपूर्ण है। सी में char प्रकार की राशियों को एकल उद्धरण चिह्नों से घेरा जाता है, और string प्रकार की राशियों को दुहरे उद्धरण चिह्नों से (“ और ”)। उदाहरण के लिए prinf() के गोल कोष्ठकों में जो वाक्य है, वह string प्रकार की राशि है, जिसे दुहरे उद्धरण चिह्नों से घेरा गया है।

जब प्रोग्राम if वाली उक्ति पर पहुंचता है, तो वह उसके गोल कोष्ठक के तार्किक व्यंजक का मूल्यांकन करता है और scanf() के जरिए raat_din राशि में जमा कराए गए वर्ण की तुलना D से करता है। यदि दोनों D ही हुए तो वह इस व्यंजक का मान 1 कर देता है, यानी सही, और प्रोग्राम if के धनु कोष्टकों के भीतर जो उक्ती है, उसका निष्पादन कर देता है, जिससे स्क्रीन पर

Din me suraj chamakta hai.

वाला वाक्य दिखाई देता है।

इसकी जगह यदि scanf() ने raat_din में R वर्ण को जमा कराया हो, तो if उक्ति के गोल कोष्ठक के भीतर के व्यंजक का मान 0 हो जाता है, यानी गलत, और प्रोग्राम if के धनु कोष्ठकों की उक्ति को छोड़कर else के धनु कोष्ठक की उक्ति का निष्पादन करता है, जिससे स्क्रीन पर यह वाक्य नजर आता है

Raat ko tare chamakte hai.

इस उदाहरण में दो ही विकल्प थे, पर if... else संरचना का उपयोग करके दो से अधिक विकल्पों को भी संभाला जा सकता है। इस तरह:-

if (शर्तें)
{
सी की उक्तियां
}
else if (शर्तें)
{
सी की उक्तियां
}
else
{
सी की उक्तियां
}

इसमें दो if... else कथनों को एक के बाद एक पिरोया गया है, जिससे तीन विकल्प प्राप्त होते हैं।

आइए प्रोग्राम 8 को ही थोड़ा और विस्तृत करके इस तीन विकल्प वाले if...else को समझते हैं। इसके लिए हम प्रोग्राम 8 को इस तरह बदलेंगे। यदि प्रयोक्ता R या D के सिवा कोई अन्य कुंजी को दबाए, तो प्रोग्राम यह संदेश प्रदर्शित करेगा:-

Aap ko D athava R me se koi kunji hi dabani thi.

प्रोग्राम 9
-------------------------------
/*Teen vikalp wale if... else ka udaharan */

#include <stdio.h>
#include <conio.h>

void main()
{
clrscr();

char raat_din;

printf("Batayiye ki raat hain ya din. Raat ke liye R aur din ke liye D type kijiye: ");
scanf("%s", &raat_din);
if(raat_din=='D')
{
printf("\nDin mein suraj chamakta hai.");
}
else if (raat_din=='R')
{
printf("\nRaat ko tare chamakte hai.");
}
else
printf("\nAap ko D athava R me se koi kunji hi dabani thi.");
getch();
}
-------------------------------

आउटपुट
-------------------------------
यदि प्रयोक्ता R दर्ज करे
Raat ko tare chamakte hai.

यदि प्रयोक्ता D दर्ज करे
Din mein suraj chamakta hai.

यदि प्रयोक्ता D या R के सिवा कोई अन्य कुंजी दबाए
Aap ko D athava R me si koi kujni hi dabani thi.
-------------------------------

इस प्रोग्राम में संकलक if उक्ति पर पहुंचकर उसके गोल कोष्ठक के भीतर के व्यंजक को scanf() द्वारा raat_din में जमा किए वर्ण के आधार पर सही या गलत का मान देता है। वह सही होने पर if के धनु कोष्ठकों की उक्ति का निष्पादन होता है और आगे के else if.. else के धनु कोष्ठकों की उक्तियों को संकलक लांघ जाता है। वह गलत होने पर if के धनु कोष्ठों की उक्ति को छोड़कर प्रोग्राम else if वाली उक्ति पर आ जाता है और उसके गोल कोष्ठकों के व्यंजक का मूल्यांकन करता है और उसे सही या गलत का मान देता है। यदि यह व्यंजक सही है, तो else if के धनु कोष्ठकों की उक्ति का निष्पादन होता है। यदि यह व्यंजक गलत है, तो प्रोग्राम else if के धनुकोष्ठकों की उक्ति को छोड़ देता है, और अंतिम else के धनु कोष्ठकों की उक्ति का निष्पादन करता है।

इस अंतिम else के आगे आप और if ... else जोड़कर तीन से अधिक विकल्पों वाले अधिक जटिल प्रोग्राम भी लिख सकते हैं।

क्यों न इस तरह का एक प्रोग्राम लिखने की कोशिश आप करें? इससे if ... else संरचना के काम करने की रीति आपको अच्छी तरह समझ में आ जाएगी। तो लिजिए, यह रहा

अभ्यास – 2

आपको इस लेख के प्रारंभ में जो उदाहरण दिया गया है उसके लिए if ... esle संरचना का उपोयग करते हुए एक प्रोग्राम लिखना है।

आपको एक ऐसा प्रोग्राम लिखना है जो स्कूली बच्चों के प्राप्तांक स्वीकार करेगा और यदि प्राप्तांक 60% से ज्यादा हो, तो प्रदर्शित करेगा - Pratham Darja. यदि प्राप्तांक 50% और 60% के बीच हो तो वह प्रदर्शित करेगा - Dvitiya Darja. और यदि प्राप्तांक 40% और 50% के बीच हो तो वह प्रदर्शित करेगा – Tritiya Darja. और यदि प्राप्तांक 40% से कम हो, तो वह प्रदर्शित करेगा – Fail.

यह प्रोग्राम लिखने की कोशिश कीजिए। अगले लेख में मैं इसका हल दूंगा, पर मैं चाहता हूं कि इससे पहले आप स्वयं ही इसे लिख डालें।

2 comments:

  1. विशाखन (ब्रांचिंग) के बिना कम्प्यूटर प्रोग्रामों का अस्तित्व ही नहीं होता;

    इनके बिना 'आटोमेशन' की सम्भावना ही नहीं होती।


    कम्प्यूटर की दो ही तो विशेषताएँ हैं -
    * छोटे-छोटे लाखों कामों को झटपट निपटाने की क्षमता। (बड़े काम छोटे-छोटे कामों से मिलकर बने होते हैं)

    *जाँच करने और जाँच के परिणाम के आधार पर अलग-अलग रास्ते पर चलने (विशाखन) की क्षमता

    बाकी सब तो इन्हीं दो क्षमताओं की उपज हैं।

    ReplyDelete