C भाषा में निर्णय लेने की संरचना Decision Making structures in C (If .. Else, Switch Statement)

निर्णय लेने की संरचना Decision Making structures

निर्णय लेने की संरचना के लिए आवश्यक है कि प्रोग्रामर मूल्यांकन या परीक्षण के लिए एक या एक से अधिक शर्तों को निर्दिष्ट करें, साथ ही एक बयान या बयानों को निष्पादित किया जाए यदि स्थिति सही है, और वैकल्पिक रूप से, अन्य बयानों को निष्पादित किया जाना है यदि शर्त झूठा होना तय है।

C भाषा में डिसिजन मेकिंग (Decision Making) एक प्रकार का शर्त लगाने का तरीका है जो एक प्रोग्राम में एक से अधिक लेन-देन का फैसला लेने के लिए इस्तेमाल किया जाता है। इसमें, एक या एक से अधिक शर्तों का जांच किया जाता है और उसके आधार पर कुछ विशेष कार्रवाई की जाती है।

अधिकांश प्रोग्रामिंग भाषाओं में पाए जाने वाले विशिष्ट निर्णय लेने की संरचना का सामान्य रूप निम्नलिखित है:


C प्रोग्रामिंग लैंग्वेज किसी भी गैर-शून्य (Non-Zero) और गैर-शून्य (Non-Null) मानों को सत्य मानती है, और यदि यह शून्य (Zero) या शून्य (Null) है, तो इसे गलत माना जाता है।

सी प्रोग्रामिंग भाषा निम्नलिखित प्रकार के निर्णय लेने वाले बयान प्रदान करती है।


C भाषा में, डिसिजन  मेकिंग के लिए "if-else" अधिकार या "switch-case" अधिकार का उपयोग किया जाता है।

"if-else" अधिकार एक या एक से अधिक शर्तों की जांच करता है और उनमें से केवल एक शर्त सत्य होती है, तो उसके अनुसार कोड ब्लॉक को निष्पादित करता है। अगर कोई भी शर्त सत्य नहीं होती है, तो "else" ब्लॉक निष्पादित किया जाता है।

दूसरी तरफ, "switch-case" अधिकार एक मुख्य अभिव्यक्ति के लिए कुछ विकल्पों को जांचता है और मुख्य अभिव्यक्ति के मूल्य के अनुसार उनमें से केवल एक विकल्प को चुनता है। इसके लिए, हम "case" स्टेटमेंट का उपयोग करते है। एक "default" स्टेटमेंट उपलब्ध होता है जो चुनिंदा मूल्यों के लिए उपलब्ध विकल्पों के बाहर एक विशेष विकल्प को निर्दिष्ट करता है।


इन अधिकारों के इस्तेमाल से, C भाषा में आप विभिन्न प्रकार के डिसिजन मेकिंग टेक्निक्स का उपयोग कर सकते हैं जैसे कि "if-else if-else" ब्लॉक और "nested if" अधिकार आदि। इन टेक्निक्स का इस्तेमाल समस्याओं को हल करने के लिए और एक प्रोग्राम को अधिक लोभी बनाने के लिए किया जाता है।

if statement

        इफ स्टेटमेंट भाषा में शर्तों के आधार पर कुछ कोड ब्लॉक को चलाने के लिए इस्तेमाल किया जाता है। इफ स्टेटमेंट उन स्थितियों के लिए उपयोगी होता है जब आपको कुछ कोड को केवल जब की शर्त पूरी होती हैचलाना होता है। 

इसे आमतौर पर इस तरह से लिखा जाता है:

if (condition) {

    // code block to be executed if condition is true

}

यहां condition शर्त है जो सत्य होने पर आपके कोड ब्लॉक को चलाता है। इफ स्टेटमेंट के बाद दी गई शर्त का मूल्य true या false होता है। अगर शर्त सत्य होती है तो इफ स्टेटमेंट के भीतर के कोड ब्लॉक को चलाया जाता है अन्यथा इसे छोड़ दिया जाता है।

अधिक जानकारी के लिएयहां एक उदाहरण है:

int x = 10;

if (x > 5) {

    printf("x is greater than 5\n");

}

इस उदाहरण में, x की मान 10 है। शर्त x > 5 सत्य है तो इसे printf फंक्शन के माध्यम से "x is greater than 5" प्रिंट कर दिया जाएगा।


if else  statement

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

इसे आमतौर पर इस तरह से लिखा जाता है:

if (condition) {

    // code block to be executed if condition is true

} else {

    // code block to be executed if condition is false

}

यहां condition एक शर्त है जो सत्य होने पर आपके पहले कोड ब्लॉक को चलाता है। अगर शर्त सत्य होती है तो पहले कोड ब्लॉक को चलाया जाता है और यदि शर्त गलत होती है तो दूसरे कोड ब्लॉक को चलाया जाता है।

अधिक जानकारी के लिएयहां एक उदाहरण है:

int x = 5;

 if (x > 10) {

    printf("x is greater than 10\n");

} else {

    printf("x is less than or equal to 10\n");

}

इस उदाहरण में, x की मान 5 है। शर्त x > 10 गलत है इसलिए दूसरे printf कोड ब्लॉक को चलाया जाएगा और वह "x is less than or equal to 10" प्रिंट कर देगा।


if...else if...else Statement

 एक if स्टेटमेंट के बाद एक और if...else स्टेटमेंट आ सकता है, जो सिंगल if...else if स्टेटमेंट का उपयोग करके विभिन्न स्थितियों का परीक्षण करने के लिए बहुत उपयोगी है। if , else if , else कथनों का उपयोग करते समय ध्यान में रखने के लिए कुछ बिंदु हैं:

  • एक if में शून्य या एक और हो सकता है और इसे किसी और if के बाद आना चाहिए।
  • एक if में शून्य से कई और if हो सकते हैं और उन्हें दूसरे से पहले आना चाहिए।
  • एक बार और यदि सफल हो जाता है, तो शेष में से किसी का भी परीक्षण नहीं किया जाएगा।


भाषा में if...else if...else statement का उपयोग एक से अधिक शर्तों को टेस्ट करने के लिए किया जाता है। यह इस तरह से लिखा जाता है:

if (condition1) {

    // code block to be executed if condition1 is true

} else if (condition2) {

    // code block to be executed if condition2 is true and condition1 is false

    } else {

    // code block to be executed if both condition1 and condition2 are false

    }

यहां, condition1 से शुरू होता हैजो सत्य होने पर पहले कोड ब्लॉक को चलाता है। अगर यह गलत होता है तो दूसरी शर्त condition2 का जांच किया जाता हैऔर यदि यह सत्य होता है तो दूसरे कोड ब्लॉक को चलाया जाता है। अगर दोनों शर्तों में से कोई भी सत्य नहीं होती हैतो अंतिम कोड ब्लॉक चलाया जाता है।

एक उदाहरण देखते हैं:

int x = 10;

if (x < 0) {

    printf("x is negative\n");

    } else if (x > 0) {

            printf("x is positive\n");

            } else {

                    printf("x is zero\n");

                    }

इस उदाहरण में, x की मान 10 है। शर्त x < 0 गलत हैइसलिए दूसरी शर्त x > 0 का जांच किया जाएगा और वह पहले कोड ब्लॉक को छोड़कर दूसरे कोड ब्लॉक को चलाएगाजो "x is positive" प्रिंट करेगा।


Nested if statements 

भाषा में Nested if statements का उपयोग शर्तों के एक से अधिक स्तरों की जांच करने के लिए किया जाता है। Nested if statements का उपयोग एक से अधिक शर्तों के एक साथ टेस्ट करने के लिए भी किया जा सकता है। एक Nested if statement के अंदर एक या एक से अधिक if statements होते हैं। नीचे एक उदाहरण दिया गया है:

int x = 5;

int y = 10;

if (x > 0) {

    if (y > 0) {

        printf("Both x and y are positive\n");

    } else {

            printf("x is positive but y is not\n");

            }

} else {

        printf("x is not positive\n");

    }

इस उदाहरण में, पहली if statement x की मान 0 से अधिक होने की जांच करती है। यदि यह सत्य होता है, तो दूसरी if statement y की मान 0 से अधिक होने की जांच करती है। यदि दोनों शर्तें सत्य होती हैं, तो "Both x and y are positive" प्रिंट होगा। यदि दूसरी शर्त गलत होती है, तो "x is positive but y is not" प्रिंट होगा। यदि पहली शर्त गलत होती है, तो "x is not positive" प्रिंट होगा।

एक Nested if statement अन्य Nested if statements के साथ भी नेस्ट किया जा सकता है। हालांकि, जब Nested if statements की संख्या ज्यादा होती है, तो कोड को अधिक संगठित बनाने के लिए switch statements या conditional operators का उपयोग किया जाता है।

 

Switch statement

C भाषा में switch statement, एक conditional control statement होता है जो एक expression के value के आधार पर अलग-अलग blocks में code execution को control करता है। switch statement में, expression को evaluate किया जाता है और उसके value के आधार पर उस value के matching case block में control जाता है। 

Switch statement के साथ हम एक expression की value को multiple cases में compare करते हैं और expression के matching case को execute करते हैं। इसके बाद switch statement को break keyword के द्वारा terminate किया जाता है।



स्विच स्टेटमेंट का सिंटेक्स (Syntax) निम्नलिखित है:

switch(expression) {

    case constant-expression1:

        // code to execute if expression matches constant-expression1

        break;

    case constant-expression2:

        // code to execute if expression matches constant-expression2

        break;

    .default:

        // code to execute if no case matches the expression

}



निम्नलिखित नियम एक स्विच स्टेटमेंट पर लागू होते हैं:
  • एक स्विच स्टेटमेंट में उपयोग की जाने वाली अभिव्यक्ति में एक अभिन्न या प्रगणित प्रकार होना चाहिए, या एक वर्ग प्रकार का होना चाहिए जिसमें वर्ग का एकल रूपांतरण फ़ंक्शन एक अभिन्न या प्रगणित प्रकार का हो।
  • आपके पास एक स्विच के भीतर कई केस स्टेटमेंट हो सकते हैं। प्रत्येक मामले के बाद मूल्य की तुलना की जाती है और एक कोलन होता है।
  • किसी मामले के लिए निरंतर-अभिव्यक्ति स्विच में चर के समान डेटा प्रकार होना चाहिए, और यह स्थिर या शाब्दिक होना चाहिए।
  • जब स्विच ऑन किया जा रहा वेरिएबल एक केस के बराबर होता है, तो उस केस के बाद के स्टेटमेंट ब्रेक स्टेटमेंट तक पहुंचने तक निष्पादित होंगे।
  • जब एक ब्रेक स्टेटमेंट पहुंच जाता है, तो स्विच समाप्त हो जाता है, और नियंत्रण का प्रवाह स्विच स्टेटमेंट के बाद अगली पंक्ति में कूद जाता है।
  • जरूरी नहीं कि हर मामले में विराम हो। यदि कोई विराम नहीं दिखाई देता है, तो नियंत्रण का प्रवाह बाद के मामलों में एक विराम तक पहुंच जाएगा।
  • एक स्विच स्टेटमेंट में एक वैकल्पिक डिफ़ॉल्ट केस हो सकता है, जो स्विच के अंत में दिखाई देना चाहिए। किसी भी मामले के सत्य न होने पर कार्य करने के लिए डिफ़ॉल्ट केस का उपयोग किया जा सकता है। डिफ़ॉल्ट मामले में किसी ब्रेक की आवश्यकता नहीं है।

जब expression की value किसी constant-expression से मिलती हैतो उसके corresponding case block में code execution होता है। इसके बाद, switch statement को break के द्वारा terminate किया जाता है ताकि दूसरे case blocks में code execution नहीं होता है। अगर expression को एक भी constant-expression से match नहीं होता है तो default block में code execution होता है।

इसके लिए एक उदाहरण निम्नलिखित है:

int choice = 2;

 switch (choice) {

    case 1:

        printf("You chose option 1.\n");

        break;

    case 2:

        printf("You chose option 2.\n");

        break;

    case 3:

        printf("You chose option 3.\n");

        break;

    default:

        printf("Invalid choice.\n");

}

इस उदाहरण में, choice के value 2 होने के कारण इसका matching case block execute होता है और "You chose option 2." print होता है।

 

Nested switch statements

भाषा में nested switch statements एक switch statement के block में दूसरा switch statement होता है। इसका मतलब है कि, switch के case block में एक दूसरे switch statement को लिखा जा सकता है।

यहां nested switch statements का एक उदाहरण दिया गया है:

int num1 = 3;

int num2 = 4;

char operator = '+';

 switch (num1) {

    case 1:

        switch (num2) {

            case 1:

                printf("Invalid operation.\n");

                break;

            case 2:

                printf("Invalid operation.\n");

                break;

            case 3:

                switch (operator) {

                    case '+':

                        printf("%d + %d = %d\n", num1, num2, num1 + num2);

                        break;

                    case '-':

                        printf("%d - %d = %d\n", num1, num2, num1 - num2);

                        break;

                    default:

                        printf("Invalid operator.\n");

                }

                break;

            case 4:

                printf("Invalid operation.\n");

                break;

        }

        break;

    case 2:

        printf("Invalid operation.\n");

        break;

    case 3:

        printf("Invalid operation.\n");

        break;

    default:

        printf("Invalid operation.\n");

}

इसके माध्यम सेहमने nested switch statements का उदाहरण बनाया है। पहले switch statement में, num1 की value 3 है जो कि matching case में है। इसके बाद, nested switch statement के block में हम num2 की value को evaluate करते हैं। num2 की value 4 होने के कारण, matching case में हम "Invalid operation." print करते हैं।

इस तरहहम nested switch statements के माध्यम से एक switch statement के block में दूसरा switch statement लिख सकते हैं।

 

The ? : Operator

भाषा में, conditional operator या ternary operator को ? : operator भी कहा जाता है। इसका उपयोग किसी condition के आधार पर दो विभिन्न values में से एक को select करने के लिए किया जाता है।

इसका syntax निम्नलिखित है:

condition ? value_if_true : value_if_false;

जहां condition को evaluate किया जाता है। यदि condition true होता हैतो value_if_true return किया जाता हैअन्यथा value_if_false return किया जाता है।

यहां कुछ उदाहरण दिए गए हैं:

int num1 = 5;

int num2 = 10;

int max_num = (num1 > num2) ? num1 : num2; // max_num को num2 की value से initialize किया जाएगाक्योंकि num1 > num2 नहीं है।

char grade = (num1 > 60) ? 'A' : 'F'; // grade को 'F' से initialize किया जाएगा, क्योंकि num1 > 60 नहीं है।

इस तरहहम दो values में से एक को select करने के लिए conditional operator का उपयोग कर सकते हैं।