Theory
दो नतीजे नहीं, पाँच
Meera एक loyalty discount चाहती है जो इस पर निर्भर हो कि एक customer ने कितना ख़र्च किया: 10000 से ऊपर को 15%, 5000 से ऊपर को 10%, 2000 से ऊपर को 5%, वरना कुछ नहीं।
BCA105 का एक अकेला IF दो नतीजे संभालता है। इसे पाँच tiers चाहिए।
जवाब है IFs को एक-दूसरे के अंदर nest करना, एक decision सीढ़ी बनाते हुए, ठीक वह if-else-if सीढ़ी जिससे आप BCA104 C programming में मिले, अब एक cell में। और ठीक वहाँ की तरह, आप tiers को जिस क्रम में test करते हैं वह तय करता है कि यह काम करता है या नहीं। Logic तीसरे subject के लिए लौटता है; इस बार यह गहरे जाता है।
Theory
छलनियों का एक झरना
छलनियों की कल्पना कीजिए जो मोटे से बारीक तक ढेर हैं। पत्थरों का एक ढेर पहली छलनी (सबसे बड़े छेद) से गुज़रता है और सबसे बड़े पत्थर पकड़े जाते हैं; जो गिरकर निकलता है वह अगली छलनी से मिलता है, और इसी तरह। एक nested IF वह झरना है: पहले सबसे ऊँची threshold test कीजिए, जो योग्य हों उन्हें पकड़िए, और बाक़ी को अगले test तक गिरने दीजिए। छलनियों का क्रम गलत कीजिए (बारीक पहले) और सब कुछ ऊपर पकड़ा जाता है, गलत लेबल।
Theory
Nested IF: decision सीढ़ी
आप एक IF को दूसरे IF के 'वरना' slot में रखते हैं:
=IF(spend>10000, "15%", IF(spend>5000, "10%", IF(spend>2000, "5%", "0%")))
इसे एक सीढ़ी की तरह पढ़िए: '10000 से ऊपर? -> 15%। वरना, 5000 से ऊपर? -> 10%। वरना, 2000 से ऊपर? -> 5%। वरना 0%।' यह ऊपर से नीचे, पहला सही जीतता है मूल्यांकित होता है, फिर रुक जाता है (BCA104 का सीढ़ी बर्ताव)।
AND / OR / NOT किसी भी IF के अंदर conditions जोड़ते हैं: IF(AND(spend>5000, member="Yes"), ...)। आधुनिक Excel कई tiers के लिए गहरी nesting टालने को IFS() भी देता है।
Quiz
एक customer ने 8000 ख़र्च किया। =IF(spend>10000,"15%",IF(spend>5000,"10%",IF(spend>2000,"5%","0%"))) क्या लौटाता है?
- 10%, सीढ़ी पहले सही test (5000 से ऊपर) पर रुकती है
- 15%, क्योंकि 8000 बहुत है
- 5% और 10% दोनों
- 0%, कोई tier मेल नहीं खाता
Show the answer
10%, सीढ़ी पहले सही test (5000 से ऊपर) पर रुकती है
सीढ़ी ऊपर से नीचे test करती है: 8000 > 10000? नहीं। 8000 > 5000? हाँ -> '10%' लौटाता है और रुक जाता है, नीचे के tests कभी नहीं चलते। पहला सही जीतता है, ठीक BCA104 की if-else-if सीढ़ी की तरह। अगर आपने 5% जवाब दिया, तो आपने इसे जीतते tier के पार गिरने दिया, जो वह गलती है जो सीढ़ी का क्रम गलत होने पर होती है।
Think first
क्रम क्यों मायने रखता है
Aryan ग़लती से सीढ़ी को सबसे कम threshold पहले लिखता है: =IF(spend>2000,"5%",IF(spend>5000,...))। एक customer 8000 ख़र्च करता है। क्या गलत होता है?
Show the answer
उसे सही 10% के बजाय 5% मिलता है। क्योंकि 8000 > 2000 पहला test है और यह सही है, सीढ़ी वहीं रुक जाती है और कभी ऊँचे tiers नहीं जाँचती, 2000 से ऊपर हर कोई 5% में ढह जाता है। एक nested-IF सीढ़ी को सबसे ऊँची threshold पहले test करनी होगी ताकि सबसे बड़े ख़र्चीले नीचे tiers तक गिरने से पहले पकड़े जाएँ। गलत क्रम बिना किसी error के चुपचाप गलत जवाब देता है, सबसे बुरी किस्म का bug।
Watch out
Marks कहाँ कटते हैं
गलत सीढ़ी क्रम (सबसे ऊँची threshold पहले test कीजिए, वरना हर कोई एक कम tier में गिरता है)। AND (सारे सही) को OR (कोई एक सही) से गड्डमड्ड करना, BCA102 logic। text नतीजों के इर्द-गिर्द quotes भूलना ("15%")। गहरी nesting में बेमेल parentheses (बंद brackets गिनिए)। और कई tiers के लिए IFS() को साफ़ विकल्प के रूप में न जानना। एक nested IF को एक बार में एक test trace कीजिए, ठीक एक C if-else-if सीढ़ी पढ़ने की तरह।
Theory
वही logic, तीन subjects गहरा
IF-AND-OR अब अपने तीसरे घर में है: BCA102 truth tables, BCA104 if-else सीढ़ियाँ, और Excel, और nested IF सचमुच C की सीढ़ी एक spreadsheet cell में है। इस transfer को पहचानना मतलब आप पहले से इसे समझते हैं; आप बस नया syntax सीख रहे हैं। अगला lesson एक असली झुँझलाहट से निपटता है: formulas जो #DIV/0! जैसे भद्दे errors दिखाते हैं, और कैसे IFERROR उन्हें एक साफ़ message में लपेटता है।
Summary
Key takeaways
- IF(condition, value_if_true, value_if_false) दो नतीजों के बीच चुनता है।
- Nested IF एक IF को 'वरना' slot में रखता है एक multi-tier decision सीढ़ी बनाने को।
- सीढ़ी ऊपर से नीचे मूल्यांकित होती है, पहला सही जीतता है, फिर रुकती है, तो SABSE ऊँची threshold पहले test कीजिए।
- AND (सारे सही), OR (कोई एक सही), NOT (उलटना) IF के अंदर conditions जोड़ते हैं।
- IFS() गहरी nesting का एक साफ़ विकल्प है; यह BCA102/BCA104 logic दोबारा इस्तेमाल है।
- याद रखने का hook: छलनियों का एक झरना, सबसे मोटी (सबसे ऊँची threshold) पहले।