Follow Us
माध्यम चुनें / Select Medium:
Eng (English) Beng (বাংলা) Hindi (हिन्दी)
WBB • कक्षा XI • Computer Science • अध्याय 2
अनुमानित समय: 45 Mins
प्रगति: अध्ययनरत

प्रोग्रामिंग के मूल सिद्धांत

पश्चिम बंगाल उच्च माध्यमिक शिक्षा परिषद (WBCHSE) कक्षा 11 कंप्यूटर साइंस पाठ्यक्रम का द्वितीय अध्याय 'प्रोग्रामिंग के मूल सिद्धांत' सॉफ्टवेयर विकास और संगणकीय चिंतन का आधारभूत स्तंभ है। यह अध्याय कंप्यूटर हार्डवेयर की कार्यप्रणाली को सॉफ्टवेयर के साथ जोड़कर वास्तविक जीवन की जटिल समस्याओं का चरणबद्ध, सटीक और गणितीय समाधान तैयार करने का प्रशिक्षण देता है। समस्या समाधान की व्यवस्थित कार्यप्रणाली और डोनाल्ड नुथ द्वारा प्रतिपादित पांच आवश्यक मानदंडों (सीमितता, निश्चितता, इनपुट, आउटपुट और प्रभावशीलता) पर आधारित एल्गोरिदम निर्माण से अध्याय का प्रारंभ होता है। विद्यार्थी अंतरराष्ट्रीय ANSI/ISO मानक प्रतीकों का उपयोग करके फ़्लोचार्ट बनाना, स्यूडोकोड लिखना और ट्रेस टेबल द्वारा ड्राई रन करके लॉजिक की सटीकता की पुष्टि करना सीखते हैं। अध्याय में बॉहम-जैकोपिनी के ऐतिहासिक संरचना प्रमेय का विस्तृत विश्लेषण किया गया है, जो सिद्ध करता है कि किसी भी संगणनीय प्रोग्राम को केवल तीन बुनियादी नियंत्रण संरचनाओं—अनुक्रम (Sequence), चयन (Selection - if-else, switch) और पुनरावृत्ति (Iteration - while, do-while, for)—के संयोजन से बनाया जा सकता है। इसके अतिरिक्त, मॉड्यूलर प्रोग्रामिंग के सिद्धांत, टॉप-डाउन स्टेपवाइज रिफाइनमेंट, उच्च संसंजन (High Cohesion), निम्न युग्मन (Low Coupling), कॉल बाय वैल्यू बनाम कॉल बाय रेफरेंस, और रिकर्शन के दौरान मेमोरी कॉल स्टैक की कार्यप्रणाली को विस्तार से समझाया गया है। अंत में डेटा प्रकार, ऑपरेटर प्राथमिकता, शॉर्ट-सर्किट मूल्यांकन, प्रोग्राम डेवलपमेंट लाइफ साइकिल (PDLC), त्रुटियों का वर्गीकरण (सिंटैक्स, रनटाइम, लॉजिकल) और बिग-ओ (Big-O) जटिलता विश्लेषण की व्यावहारिक व्याख्या की गई है।

यह अध्याय क्यों महत्वपूर्ण है

केवल कोड लिखना ही पर्याप्त नहीं है, बल्कि गणितीय रूप से प्रमाणित, रखरखाव में सरल और कुशल एल्गोरिदम डिजाइन करना ही एक पेशेवर सॉफ्टवेयर इंजीनियर की पहचान है। फ़्लोचार्ट मशीन के नियंत्रण प्रवाह को कैसे निर्देशित करता है, रिकर्शन के समय कॉल स्टैक में एक्टिवेशन रिकॉर्ड कैसे बनते हैं, और क्यों O(log n) का बाइनरी सर्च O(n) के लीनियर सर्च से हजारों गुना तेज गति से कार्य करता है—यह समझना सॉफ्टवेयर इंजीनियरिंग की रीढ़ है। WBCHSE बोर्ड परीक्षा के सैद्धांतिक और व्यावहारिक दोनों भागों में 10 से 12 अंक अर्जित करने और विश्वविद्यालय स्तर के डेटा स्ट्रक्चर्स तथा प्रतिस्पर्धी कोडिंग के लिए यह अध्याय आधारशिला प्रदान करता है।

अध्याय रूपरेखा एवं प्रगति

1 मॉड्यूल 1: समस्या समाधान पद्धति एवं...
2 मॉड्यूल 2: प्रोग्रामिंग प्रतिमान एव...
3 मॉड्यूल 3: मॉड्यूलर प्रोग्रामिंग, ट...
4 मॉड्यूल 4: डेटा प्रकार, चर, ऑपरेटर...
5 मॉड्यूल 5: प्रोग्राम डेवलपमेंट लाइफ...
6 मॉड्यूल 6: एल्गोरिदम दक्षता एवं एसि...

सम्पूर्ण सैद्धांतिक एवं वैचारिक अध्ययन

मॉड्यूल 1: समस्या समाधान पद्धति एवं एल्गोरिदम के आधार

1.1 समस्या समाधान का जीवनचक्र (Problem-Solving Lifecycle)

कंप्यूटर के पास अपनी कोई स्वाभाविक सोचने की क्षमता नहीं होती; वह दिए गए निर्देशों को तीव्र गति से निष्पादित करता है। मानव समस्या को कंप्यूटर द्वारा निष्पादन योग्य सॉफ्टवेयर में बदलने के लिए पांच सुव्यवस्थित चरण अपनाए जाते हैं:

  1. समस्या परिभाषा एवं विश्लेषण (Problem Definition & Analysis): समस्या के सटीक उद्देश्यों, आवश्यकताओं, सीमाओं और कार्यक्षेत्र की स्पष्ट पहचान करना।
  2. इनपुट एवं आउटपुट रूपरेखा (Input & Output Specification): आवश्यक कच्चे डेटा, उनके प्रकार तथा अपेक्षित परिणाम के स्वरूप का निर्धारण करना।
  3. एल्गोरिदम डिजाइन (Algorithm Design): इनपुट को वांछित आउटपुट में बदलने के लिए एक सीमित, चरणबद्ध और तार्किक प्रक्रिया तैयार करना।
  4. सत्यापन एवं ड्राई रन (Desk-Checking / Trace Table): कोडिंग करने से पहले कागज-कलम की सहायता से विभिन्न परीक्षण डेटा लेकर एल्गोरिदम की तार्किक शुद्धता की जांच करना।
  5. कोडिंग एवं निष्पादन (Coding & Implementation): सत्यापित एल्गोरिदम को किसी उच्च-स्तरीय प्रोग्रामिंग भाषा (जैसे C, Python) में रूपांतरित करना।
1.2 एल्गोरिदम की औपचारिक परिभाषा एवं डोनाल्ड नुथ के पांच मानदंड

एल्गोरिदम किसी विशिष्ट संगणकीय समस्या को हल करने के लिए सुपरिभाषित, असंदिग्ध और सीमित निर्देशों का एक क्रमबद्ध समुच्चय है। आधुनिक कंप्यूटर विज्ञान के जनक डोनाल्ड ई. नुथ (Donald Knuth) के अनुसार, प्रत्येक मान्य एल्गोरिदम को निम्नलिखित पांच शर्तों को पूरा करना अनिवार्य है:

मानदंड (Criterion)विवरण (Description)महत्व (Significance)
1. सीमितता (Finiteness)एल्गोरिदम को सभी मान्य इनपुट के लिए सीमित चरणों के निष्पादन के पश्चात अवश्य समाप्त होना चाहिए।यह प्रोग्राम को अनंत लूप (Infinite Loop) और हैंग होने से बचाता है।
2. निश्चितता (Definiteness)प्रत्येक चरण स्पष्ट, सटीक और असंदिग्ध होना चाहिए जिसका केवल एक ही अर्थ निकले।मशीन की परवाह किए बिना परिणाम हमेशा सुनिश्चित रहता है।
3. इनपुट (Input)एल्गोरिदम को निष्पादन से पूर्व शून्य या अधिक बाह्य मान प्रदान किए जाने चाहिए।यह प्रक्रिया के कार्यक्षेत्र को परिभाषित करता है।
4. आउटपुट (Output)एल्गोरिदम को कम से कम एक परिणाम अवश्य उत्पन्न करना चाहिए जो इनपुट से संबंधित हो।यह गणना का अंतिम उपयोगी परिणाम प्रदान करता है।
5. प्रभावशीलता (Effectiveness)प्रत्येक निर्देश इतना सरल और बुनियादी होना चाहिए कि उसे कागज-कलम द्वारा सीमित समय में संपन्न किया जा सके।यह सुनिश्चित करता है कि निर्देश भौतिक रूप से गणना योग्य हैं।
1.3 फ़्लोचार्ट: मानक ANSI/ISO प्रतीक

फ़्लोचार्ट किसी एल्गोरिदम के नियंत्रण प्रवाह, संक्रियाओं और निर्णयों का मानकीकृत ज्यामितीय आरेखों द्वारा आलेखीय (Graphical) निरूपण है। अमेरिकन नेशनल स्टैंडर्ड्स इंस्टीट्यूट (ANSI) द्वारा निर्धारित मुख्य प्रतीक निम्न हैं:

  • टर्मिनल (दीर्घवृत्त / Oval): प्रोग्राम के प्रारंभ (`START`) या अंत (`STOP`) को दर्शाता है। प्रत्येक फ़्लोचार्ट में ठीक एक Start और कम से कम एक Stop होना अनिवार्य है।
  • इनपुट/आउटपुट (समांतर चतुर्भुज / Parallelogram): डेटा इनपुट (`READ A`, `INPUT N`) या परिणाम प्रदर्शन (`PRINT Result`) को निरूपित करता है।
  • प्रोसेसिंग (आयत / Rectangle): आंतरिक गणना, अंकगणितीय संक्रिया या मान आवंटन (`C = A + B`, `Count = Count + 1`) को दर्शाता है।
  • निर्णय (समचतुर्भुज / Diamond / Rhombus): किसी बूलियन शर्त की जांच (`X > 0?`) करता है। इसमें एक प्रवेश रेखा और दो निकास रेखाएँ (`True/Yes` तथा `False/No`) होती हैं।
  • ऑन-पेज कनेक्टर (छोटा वृत्त / Circle): एक ही पृष्ठ पर जटिल या टूटी हुई प्रवाह रेखाओं को जोड़ने के लिए प्रयुक्त होता है।
  • ऑफ़-पेज कनेक्टर (पंचकोण / Pentagon): एक पृष्ठ से दूसरे पृष्ठ पर जाने वाले नियंत्रण प्रवाह को जोड़ता है।
  • प्रवाह रेखाएं (तीर / Flow Lines): निष्पादन की दिशा और क्रम को स्पष्ट रूप से दर्शाती हैं।
1.4 स्यूडोकोड बनाम फ़्लोचार्ट और ट्रेस टेबल

स्यूडोकोड (Pseudo-code) किसी एल्गोरिदम का एक अनौपचारिक, उच्च-स्तरीय विवरण है जो प्राकृतिक भाषा (अंग्रेजी/हिंदी) और संरचित प्रोग्रामिंग सिंटैक्स (`IF...THEN`, `WHILE...DO`) का मिश्रण होता है। यह सख्त सिंटैक्स नियमों के बिना मानव चिंतन को स्पष्ट करता है।

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

मॉड्यूल 2: प्रोग्रामिंग प्रतिमान एवं तीन मूलभूत नियंत्रण संरचनाएं

2.1 बॉहम-जैकोपिनी संरचना प्रमेय (Böhm-Jacopini Structure Theorem)

प्रारंभिक कंप्यूटर प्रोग्रामिंग में अनियंत्रित `GOTO` निर्देशों का अत्यधिक उपयोग किया जाता था, जिससे कोड अत्यंत उलझ जाता था जिसे "स्पेगेटी कोड" (Spaghetti Code) कहा जाता था। 1966 में इतालवी गणितज्ञ कोराडो बॉहम और ग्यूसेप जैकोपिनी ने एक युगांतरकारी प्रमेय सिद्ध किया:

बॉहम-जैकोपिनी प्रमेय: किसी भी संगणनीय एल्गोरिदम अथवा कंप्यूटर प्रोग्राम का निर्माण केवल तीन मूलभूत नियंत्रण संरचनाओं के संयोजन द्वारा किया जा सकता है: अनुक्रम (Sequence), चयन (Selection) और पुनरावृत्ति (Iteration)।
2.2 तीन मूलभूत नियंत्रण संरचनाएं
  1. अनुक्रम संरचना (Sequence Construct): निर्देश एक के बाद एक रैखिक क्रम में निष्पादित होते हैं। कथन $S_1$ के पूर्ण होने के बाद ही कथन $S_2$ प्रारंभ होता है। यह निष्पादन का डिफ़ॉल्ट रूप है।
  2. चयन संरचना (Selection / Branching Construct): किसी बूलियन शर्त के मूल्यांकन के आधार पर निष्पादन को विभिन्न शाखाओं में मोड़ती है:
    • एकल चयन (`IF-THEN`): यदि शर्त सत्य (True) हो, तभी कथन ब्लॉक निष्पादित होता है; अन्यथा छोड़ दिया जाता है।
    • द्वि-शाखीय चयन (`IF-THEN-ELSE`): शर्त सत्य होने पर ब्लॉक A, तथा असत्य (False) होने पर ब्लॉक B निष्पादित होता है।
    • बहु-शाखीय चयन (`IF-ELSE-IF` सीढ़ी): एक के बाद एक कई शर्तों की जांच, जहाँ पहली सत्य शर्त का ब्लॉक चलता है।
    • स्विच केस (`SWITCH-CASE`): किसी पूर्णांक या वर्ण व्यंजक के मान के अनुसार सीधे संगत केस लेबल पर जंप करता है।
  3. पुनरावृत्ति संरचना (Iteration / Looping Construct): किसी कथन समूह (लूप बॉडी) को एक समाप्ति शर्त पूरी होने तक बार-बार दोहराती है। संरचना के आधार पर लूप दो प्रकार के होते हैं:
    • प्रवेश-नियंत्रित लूप (Entry-Controlled / Pre-Tested - `WHILE`, `FOR`): शर्त की जांच लूप बॉडी में प्रवेश करने से पहले की जाती है। यदि पहली बार में ही शर्त असत्य हो, तो लूप बॉडी 0 बार चलती है।
    • निकास-नियंत्रित लूप (Exit-Controlled / Post-Tested - `DO-WHILE`): शर्त की जांच लूप बॉडी के निष्पादन के बाद की जाती है। अतः शर्त असत्य होने पर भी लूप बॉडी कम से कम 1 बार अवश्य निष्पादित होती है (उदा. मेनू आधारित प्रोग्राम)।
2.3 लूप के आवश्यक घटक और सामान्य खतरे

प्रत्येक सुनियोजित लूप के चार परस्पर जुड़े घटक होते हैं:

  • प्रारंभीकरण (Initialization): लूप शुरू होने से पहले लूप कंट्रोल वेरिएबल (LCV) का प्रारंभिक मान निर्धारित करना।
  • परीक्षण शर्त (Termination Condition): एक बूलियन व्यंजक जो यह तय करता है कि लूप जारी रहेगा या समाप्त होगा।
  • लूप बॉडी (Loop Body): प्रत्येक पुनरावृत्ति में निष्पादित होने वाले निर्देशों का समूह।
  • अद्यतन व्यंजक (Update Expression): लूप कंट्रोल वेरिएबल के मान को बढ़ाना या घटाना ताकि वह समाप्ति शर्त की ओर अग्रसर हो सके।

लूप से जुड़ी सामान्य त्रुटियाँ:

  • असीम लूप (Infinite Loop): यदि लूप कंट्रोल वेरिएबल का मान कभी अपडेट न हो या समाप्ति शर्त कभी False न हो पाए, तो लूप कभी समाप्त नहीं होता और सिस्टम हैंग हो जाता है।
  • ऑफ-बाई-वन त्रुटि (Off-by-One Error): लूप को निर्धारित संख्या से एक बार अधिक या एक बार कम चला देना, जो प्रायः `<` और `<=` के भ्रम के कारण होता है।

मॉड्यूल 3: मॉड्यूलर प्रोग्रामिंग, टॉप-डाउन डिजाइन एवं कॉल स्टैक संरचना

3.1 टॉप-डाउन डिजाइन एवं स्टेपवाइज रिफाइनमेंट

जब सॉफ्टवेयर प्रणाली बहुत बड़ी हो जाती है, तो एक ही अखंड (Monolithic) प्रोग्राम लिखना अत्यंत कठिन हो जाता है। मॉड्यूलर प्रोग्रामिंग में फूट डालो और जीतो (Divide and Conquer) की रणनीति अपनाई जाती है:

  • टॉप-डाउन डिजाइन: संपूर्ण समस्या को पहले प्रमुख उप-प्रणालियों में विभाजित किया जाता है, फिर प्रत्येक उप-प्रणाली को छोटे-छोटे स्वतंत्र कार्यों (Functions) में तब तक तोड़ा जाता है जब तक कि प्रत्येक भाग सरल न हो जाए (Stepwise Refinement)।
  • मॉड्यूलरिटी के लाभ: कोड का पुन: उपयोग (Reusability), स्वतंत्र परीक्षण, डिबगिंग में सुगमता और टीम में कार्यों का कुशल विभाजन।
3.2 संसंजन (Cohesion) एवं युग्मन (Coupling): सॉफ्टवेयर गुणवत्ता के पैमाने

मॉड्यूलर सॉफ्टवेयर की वास्तुकला की गुणवत्ता दो प्रमुख मैट्रिक्स द्वारा मापी जाती है:

  • संसंजन (Cohesion): यह मापता है कि एक ही मॉड्यूल के अंदर के सभी निर्देश किसी एक विशिष्ट कार्य को पूरा करने के लिए कितने केंद्रित हैं। उच्च संसंजन (High Cohesion) सॉफ्टवेयर के लिए अत्यंत वांछनीय है।
  • युग्मन (Coupling): यह मापता है कि विभिन्न मॉड्यूल्स आपस में कितने अधिक निर्भर या जुड़े हुए हैं। निम्न युग्मन (Low / Loose Coupling) वांछनीय है ताकि एक मॉड्यूल में बदलाव करने से अन्य मॉड्यूल्स प्रभावित न हों।
3.3 फ़ंक्शन की कार्यप्रणाली: आर्ग्युमेंट बनाम पैरामीटर

एक फ़ंक्शन (Function) निर्देशों का एक नामांकित, पुन: प्रयोज्य ब्लॉक होता है जो कोई विशिष्ट कार्य संपन्न करता है:

  • फ़ॉर्मल पैरामीटर (Formal Parameters): वे चर जो फ़ंक्शन की परिभाषा के हेडर में घोषित किए जाते हैं और कॉल किए जाने पर मान प्राप्त करते हैं (उदा. `int add(int x, int y)` में `x` और `y`)।
  • एक्चुअल आर्ग्युमेंट (Actual Arguments): वे वास्तविक मान, चर या व्यंजक जो फ़ंक्शन को कॉल करते समय भेजे जाते हैं (उदा. `result = add(5, a + 2)` में `5` और `a + 2`)।
3.4 पैरामीटर पासिंग तंत्र: कॉल बाय वैल्यू बनाम कॉल बाय रेफरेंस
विशेषताकॉल बाय वैल्यू (Call by Value)कॉल बाय रेफरेंस (Call by Reference)
कार्यप्रणालीएक्चुअल आर्ग्युमेंट के मान की एक प्रतिलिपि (Copy) फ़ॉर्मल पैरामीटर में भेजी जाती है।एक्चुअल आर्ग्युमेंट का मेमोरी पता (Address/Reference) सीधे भेजा जाता है।
मेमोरी आवंटनफ़ंक्शन के स्टैक फ्रेम में फ़ॉर्मल पैरामीटर के लिए अलग मेमोरी ब्लॉक बनता है।फ़ॉर्मल पैरामीटर कॉलर के मूल मेमोरी स्थान के लिए एक उपनाम (Alias) या पॉइंटर का कार्य करता है।
कॉलर पर प्रभावफ़ंक्शन के अंदर पैरामीटर में किए गए बदलाव का कॉलर के मूल चर पर कोई प्रभाव नहीं पड़ता।फ़ंक्शन के अंदर किए गए बदलाव सीधे कॉलर के मूल चर को परिवर्तित कर देते हैं।
मेमोरी दक्षताबड़े डेटा स्ट्रक्चर्स (Arrays/Structs) की प्रतिलिपि बनाने में अतिरिक्त मेमोरी लगती है।अत्यंत दक्ष; केवल मेमोरी पता भेजा जाता है, कोई अतिरिक्त डेटा कॉपी नहीं होता।
C भाषा में स्थितिC में सभी स्केलर चरों (int, float, char) के लिए यह डिफ़ॉल्ट तंत्र है।C भाषा में पॉइंटर्स (`&variable`) की सहायता से इसे लागू किया जाता है।
3.5 चरों का स्कोप (Scope) एवं लाइफटाइम (Lifetime)
  • स्कोप (कार्यक्षेत्र): प्रोग्राम का वह भाग जहाँ किसी चर को उसके नाम से पहचाना और उपयोग किया जा सकता है। लोकल वेरिएबल का स्कोप केवल उसी ब्लॉक/फ़ंक्शन तक सीमित होता है; जबकि ग्लोबल वेरिएबल संपूर्ण प्रोग्राम में मान्य होते हैं।
  • लाइफटाइम (जीवनकाल): प्रोग्राम निष्पादन की वह अवधि जिसके दौरान चर भौतिक रैम (RAM) में स्थान सुरक्षित रखता है। लोकल वेरिएबल फ़ंक्शन कॉल से रिटर्न तक जीवित रहते हैं, जबकि ग्लोबल वेरिएबल प्रोग्राम के अंत तक बने रहते हैं।
3.6 रिकर्शन एवं रनटाइम कॉल स्टैक (Recursion & Call Stack)

रिकर्शन (Recursion) एक ऐसी प्रोग्रामिंग तकनीक है जिसमें कोई फ़ंक्शन उसी समस्या के छोटे स्वरूप को हल करने के लिए स्वयं को प्रत्यक्ष या अप्रत्यक्ष रूप से कॉल करता है। इसके दो अनिवार्य घटक हैं:

  1. बेस केस (आधार शर्त / Stopping Condition): एक स्पष्ट गैर-रिकर्सिव शाखा जो पुनरावृत्ति को समाप्त करती है (उदा. $0! = 1$ या $N = 1$)। बेस केस न होने पर अनंत रिकर्शन उत्पन्न होता है।
  2. रिकर्सिव स्टेप: फ़ंक्शन स्वयं को ऐसे बदले हुए मानों के साथ कॉल करता है जो बेस केस की दिशा में आगे बढ़ते हैं (उदा. $N! = N imes (N-1)!$)।

रनटाइम कॉल स्टैक की कार्यप्रणाली: प्रत्येक फ़ंक्शन कॉल के समय ऑपरेटिंग सिस्टम रैम के स्टैक क्षेत्र में एक एक्टिवेशन रिकॉर्ड (स्टैक फ्रेम) पुश करता है, जिसमें पैरामीटर, लोकल वेरिएबल और रिटर्न एड्रेस संग्रहीत होते हैं। यह LIFO (Last-In, First-Out) क्रम में काम करता है। जब बेस केस पूरा होता है, तो स्टैक फ्रेम एक-एक करके पॉप होकर परिणाम वापस भेजते हैं। यदि रिकर्शन बहुत गहरा हो जाए और स्टैक मेमोरी समाप्त हो जाए, तो प्रोग्राम स्टैक ओवरफ़्लो (Stack Overflow) के कारण क्रैश हो जाता है।

मॉड्यूल 4: डेटा प्रकार, चर, ऑपरेटर एवं व्यंजक मूल्यांकन

4.1 डेटा प्रकार एवं पहचानकर्ता (Identifiers)

एक डेटा प्रकार (Data Type) यह निर्धारित करता है कि कोई चर किस प्रकार का मान संग्रहीत कर सकता है, उसे मेमोरी में कितनी बाइट मिलेगी और उस पर कौन सी गणितीय संक्रियाएँ की जा सकती हैं:

  • प्रिमिटिव डेटा प्रकार: इंटीजर (`int`, 2 या 4 बाइट्स), फ्लोटिंग-पॉइंट (`float` 4 बाइट्स, `double` 8 बाइट्स), कैरेक्टर (`char`, 1 बाइट ASCII कोड), और बूलियन (`bool`, true/false)।
  • स्थिरांक (Constants / Literals): वे मान जो प्रोग्राम निष्पादन के दौरान अपरिवर्तनीय रहते हैं (उदा. पूर्णांक `42`, दशमलव `3.14`, वर्ण `'A'`, स्ट्रिंग `"Hello"`)।
  • आइडेंटिफ़ायर नामकरण के नियम: पहला अक्षर वर्णमाला या अंडरस्कोर (`_`) होना चाहिए; इसमें केवल अक्षर, अंक और अंडरस्कोर हो सकते हैं; कोई रिक्त स्थान या विशेष चिह्न (`@`, `$`) मान्य नहीं है; और यह किसी आरक्षित कीवर्ड (`while`, `return`) जैसा नहीं हो सकता।
4.2 ऑपरेटरों का वर्गीकरण एवं प्राथमिकता क्रम

एक ऑपरेटर (Operator) एक विशेष प्रतीक है जो एक, दो या तीन ऑपरेंड्स पर संक्रिया संपन्न करता है:

  • अंकगणितीय ऑपरेटर: जोड़ (`+`), घटाव (`-`), गुणा (`*`), भाग (`/`), और मापांक (`%`, पूर्णांक विभाजन का शेषफल, जैसे $17 \% 5 = 2$)। पूर्णांक विभाजन में दशमलव भाग हट जाता है ($7 / 2 = 3$), जबकि फ्लोट विभाजन में $7.0 / 2.0 = 3.5$ आता है।
  • संबंधपरक ऑपरेटर: तुलना करते हैं और बूलियन परिणाम (सत्य/असत्य) देते हैं: `==` (समानता), `!=` (असमानता), `<`, `<=`, `>`, `>=`।
  • तार्किक ऑपरेटर: तार्किक AND (`&&`), तार्किक OR (`||`), और तार्किक NOT (`!`)।
  • असाइनमेंट एवं संयुक्त ऑपरेटर: सरल आवंटन (`=`) और संक्षिप्त रूप: `+=`, `-=`, `*=`, `/=`, `%=` (उदा. `x += 5` का अर्थ `x = x + 5`)।
  • इंक्रीमेंट / डिक्रीमेंट ऑपरेटर: प्री-इंक्रीमेंट (`++x`) व्यंजक में मान उपयोग होने से पहले $x$ बढ़ाता है; पोस्ट-इंक्रीमेंट (`x++`) वर्तमान मान का उपयोग करने के पश्चात $x$ बढ़ाता है।
  • कंडीशनल (टर्नरी) ऑपरेटर: तीन ऑपरेंड्स वाला संक्षिप्त चयन व्यंजक: `Condition ? Exp_True : Exp_False`।
4.3 तार्किक व्यंजकों में शॉर्ट-सर्किट मूल्यांकन (Short-Circuit Evaluation)

आधुनिक कंपाइलर तार्किक व्यंजकों के मूल्यांकन में समय बचाने और सुरक्षा के लिए शॉर्ट-सर्किट पद्धति अपनाते हैं:

  • `A && B` में: यदि पहला व्यंजक `A` False हो जाए, तो कंपाइलर `B` की जांच कभी नहीं करता, क्योंकि पूरा व्यंजक सत्य हो ही नहीं सकता।
  • `A || B` में: यदि पहला व्यंजक `A` True हो जाए, तो कंपाइलर `B` की जांच कभी नहीं करता, क्योंकि परिणाम पहले ही निश्चित हो चुका है।
  • व्यावहारिक लाभ: यह रनटाइम क्रैश से बचाता है, जैसे शून्य से विभाजन रोकना: `if (count != 0 && total / count > 50)`।
4.4 टाइप रूपांतरण: अंतर्निहित बनाम स्पष्ट टाइपकास्टिंग
  • अंतर्निहित रूपांतरण (Implicit Type Conversion / Type Promotion): कंपाइलर द्वारा स्वचालित रूप से बिना डेटा हानि के छोटे डेटा प्रकार को बड़े प्रकार में पदोन्नत करना (उदा. $ ext{int} + ext{float} ightarrow ext{float}$)।
  • स्पष्ट रूपांतरण (Explicit Type Conversion / Type Casting): प्रोग्रामर द्वारा जबरन किसी मान का प्रकार बदलना, जैसे `(int)3.85`, जो दशमलव भाग हटाकर केवल `3` देता है।

मॉड्यूल 5: प्रोग्राम डेवलपमेंट लाइफ साइकिल (PDLC) एवं सॉफ्टवेयर गुणवत्ता

5.1 PDLC के छह प्रमुख चरण

प्रोग्राम डेवलपमेंट लाइफ साइकिल (PDLC) सॉफ्टवेयर निर्माण की एक व्यवस्थित, चरणबद्ध इंजीनियरिंग रूपरेखा है:

  1. समस्या परिभाषा: उपयोगकर्ताओं से मिलकर आवश्यकताओं, सीमाओं और सफलता के मानदंडों का स्पष्ट निर्धारण।
  2. सिस्टम विश्लेषण एवं एल्गोरिदम डिजाइन: डेटा संरचनाओं का चयन, स्यूडोकोड व फ़्लोचार्ट बनाना और ट्रेस टेबल से सत्यापन।
  3. कोडिंग एवं कार्यान्वयन: लक्षित प्रोग्रामिंग भाषा में स्वच्छ, मॉड्यूलर और प्रलेखित कोड लिखना।
  4. संकलन एवं सिंटैक्स जांच: कंपाइलर द्वारा कोड को ट्रांसलेट करना और सिंटैक्स त्रुटियों का निवारण करना।
  5. परीक्षण एवं डिबगिंग: विभिन्न टेस्ट डेटा चलाकर रनटाइम अपवादों और लॉजिकल गलतियों को खोजना व सुधारना।
  6. प्रलेखीकरण एवं रखरखाव: यूजर मैनुअल तैयार करना और भविष्य में आने वाली कमियों को ठीक करना या नए फीचर जोड़ना।
5.2 सॉफ्टवेयर त्रुटियों (Bugs) का वर्गीकरण: सिंटैक्स, रनटाइम और लॉजिकल

प्रोग्राम में आने वाली कमियों को तीन आधारभूत श्रेणियों में विभाजित किया जाता है:

त्रुटि की श्रेणीकब पहचानी जाती हैमूल कारणपहचानने की विधिउदाहरण
सिंटैक्स त्रुटि (Syntax Error)कंपाइल / ट्रांसलेशन के समयभाषा के व्याकरण और विराम चिह्नों के नियमों का उल्लंघन।कंपाइलर द्वारा फाइल नाम व लाइन नंबर सहित त्रुटि संदेश।सेमीकोलन छोड़ देना, कीवर्ड की गलत स्पेलिंग (`whle`), ब्रैकेट बंद न करना।
रनटाइम त्रुटि (Runtime Error)प्रोग्राम निष्पादन के दौरानअवैध निर्देश जो कंप्यूटर हार्डवेयर या ओएस द्वारा पूरे नहीं किए जा सकते।प्रोग्राम का अचानक क्रैश हो जाना (असामान्य समाप्ति / Exception)।शून्य से विभाजन (`x / 0`), सीमा से बाहर ऐरे इंडेक्स, स्टैक ओवरफ़्लो।
लॉजिकल त्रुटि (Logical Error)गलत आउटपुट आता है (क्रैश नहीं होता)एल्गोरिदम का गलत तर्क, अशुद्ध सूत्र या गलत शर्त।वास्तविक आउटपुट की तुलना अपेक्षित उत्तर से करके।`+` की जगह `-` लिख देना, लूप सीमा में `<` की जगह `<=` लगाना।
5.3 परीक्षण विधियां एवं डिबगिंग रणनीतियां
  • ब्लैक-बॉक्स टेस्टिंग: आंतरिक कोड को देखे बिना केवल इनपुट और आउटपुट के आधार पर सॉफ्टवेयर की कार्यप्रणाली की जांच करना।
  • व्हाइट-बॉक्स टेस्टिंग: आंतरिक कोड संरचना, तार्किक शाखाओं और स्थितियों की 100% कवरेज सुनिश्चित करते हुए जांच करना।
  • बाउंड्री वैल्यू एनालिसिस (BVA): चरम सीमाओं (न्यूनतम मान, अधिकतम मान, शून्य, ऋणात्मक मान) पर परीक्षण करना जहाँ अधिकांश बग्स उत्पन्न होते हैं।
  • डिबगिंग तकनीकें:
    • प्रिंट स्टेटमेंट्स: कोड में चरों के बदलते मानों को स्क्रीन पर प्रिंट करके देखना (`printf("Val: %d", x)`).
    • इंटरएक्टिव डिबगर: ब्रेकपॉइंट्स (Breakpoints) लगाना, एक-एक लाइन चलाकर देखना (Single Stepping), और मेमोरी में वॉच वेरिएबल्स का लाइव निरीक्षण करना।

मॉड्यूल 6: एल्गोरिदम दक्षता एवं एसिम्प्टोटिक जटिलता विश्लेषण

6.1 एल्गोरिदम की दक्षता का मापन

दो भिन्न एल्गोरिदम समान कार्य कर सकते हैं, परंतु एक मिलीसेकंड में परिणाम दे सकता है जबकि दूसरे को घंटों लग सकते हैं। एल्गोरिदम की दक्षता दो आयामों पर मापी जाती है:

  • समय जटिलता (Time Complexity): इनपुट आकार $N$ के फलन के रूप में एल्गोरिदम द्वारा निष्पादित किए जाने वाले बुनियादी चरणों की संख्या।
  • स्थान जटिलता (Space Complexity): इनपुट आकार $N$ के फलन के रूप में निष्पादन के दौरान एल्गोरिदम द्वारा उपयोग की जाने वाली अतिरिक्त रैम मेमोरी।
6.2 एसिम्प्टोटिक नोटेशन एवं बिग-ओ (Big-O)

चूँकि वास्तविक समय कंप्यूटर के प्रोसेसर की गति पर निर्भर करता है, कंप्यूटर वैज्ञानिक गणितीय विकास दर के आधार पर एल्गोरिदम का मूल्यांकन करते हैं:

  • बिग-ओ नोटेशन ($O$): सबसे खराब स्थिति (Worst-case Upper Bound) को दर्शाता है। यह गारंटी देता है कि बड़े $N$ के लिए निष्पादन समय कभी भी $c \cdot f(n)$ से अधिक नहीं होगा।
  • बिग-ओमेगा ($\Omega$): सर्वश्रेष्ठ स्थिति (Best-case Lower Bound) को दर्शाता है।
  • बिग-थीटा ($\Theta$): सटीक सीमा (Tight Bound) को दर्शाता है जहाँ ऊपरी और निचली सीमाएँ समान होती हैं।
6.3 सामान्य बिग-ओ जटिलता वर्ग
जटिलता वर्गनामविकास दरप्रतिनिधि उदाहरण
$O(1)$स्थिर समय (Constant Time)इनपुट आकार चाहे जितना बड़ा हो, समय हमेशा निश्चित रहता है।इंडेक्स द्वारा ऐरे एलिमेंट प्राप्त करना (`arr[i]`), हैश टेबल लुकअप।
$O(\log n)$लघुगणकीय समय (Logarithmic Time)प्रत्येक चरण में समस्या आधी हो जाती है; आकार दोगुना होने पर केवल 1 चरण बढ़ता है।सॉर्टेड सूची में बाइनरी सर्च (Binary Search)।
$O(n)$रैखिक समय (Linear Time)समय सीधे इनपुट आकार $N$ के 1:1 अनुपात में बढ़ता है।अनसॉर्टेड सूची में लीनियर सर्च, अधिकतम/न्यूनतम खोजना।
$O(n \log n)$लीनियरिदमिक समयतुलना-आधारित सॉर्टिंग के लिए इष्टतम समय।मर्ज सॉर्ट (Merge Sort), क्विक सॉर्ट (औसत स्थिति)।
$O(n^2)$द्विघाती समय (Quadratic Time)इनपुट दोगुना करने पर समय चार गुना हो जाता है; नेस्टेड लूप्स।बबल सॉर्ट (Bubble Sort), इंसर्शन सॉर्ट, नेस्टेड तुलनाएं।
$O(2^n)$घातीय समय (Exponential Time)इनपुट में 1 की वृद्धि होने पर समय दोगुना हो जाता है; अत्यंत धीमा।सरल रिकर्सिव फिबोनाची, टावर ऑफ हनोई।
6.4 व्यावहारिक तुलना: लीनियर सर्च ($O(n)$) बनाम बाइनरी सर्च ($O(\log n)$)

मान लीजिए हमें $N = 10,00,000$ (दस लाख) सॉर्टेड रिकॉर्ड्स में से एक संख्या खोजनी है:

  • लीनियर सर्च (सबसे खराब स्थिति): पहले से आखिरी तत्व तक क्रमिक जांच करता है। सबसे खराब स्थिति में पूरे 10,00,000 तुलनाएं लगेंगी।
  • बाइनरी सर्च (सबसे खराब स्थिति): बीच के तत्व से तुलना करके हर बार खोज क्षेत्र को आधा कर देता है। अधिकतम तुलनाएं: $\lceil \log_2(10,00,000) ceil = \mathbf{20 ext{ तुलनाएं}}$!
  • निष्कर्ष: बाइनरी सर्च 50,000 गुना तेज है! यह सिद्ध करता है कि बड़े डेटा के लिए हार्डवेयर की गति से कहीं अधिक एल्गोरिदम की जटिलता मायने रखती है।

प्रोग्रामिंग सिंटेक्स, स्टेटमेंट्स एवं भाषा अनुवादक नियम

बाइनरी सर्च में अधिकतम तुलनाएं
$$C_{max} = lceil log_2(N) rceil$$
लीनियर सर्च में अधिकतम तुलनाएं
$$C_{worst} = N$$
प्रथम N पूर्णांकों का योग (नेस्टेड लूप्स)
$$S = sum_{i=1}^{N} i = frac{N(N + 1)}{2}$$
रिकर्सिव फैक्टोरियल का संबंध
fact(n) = cases{ 1 & text{यदि } n = 0 text{ या } n = 1 cr n times fact(n - 1) & text{यदि } n > 1 }
यूक्लिडियन GCD पुनरावर्तन संबंध
gcd(a, b) = cases{ a & text{यदि } b = 0 cr gcd(b, a bmod b) & text{यदि } b > 0 }
कॉल स्टैक की अधिकतम मेमोरी खपत
$$M_{stack} = O(D)$$

अवधारणात्मक हल उदाहरण एवं अनुप्रयोग (Solved Examples)

उदाहरण 1
विस्तृत समाधान / उत्तर:
गणितीय अंतर्दृष्टि: यदि कोई संख्या N भाज्य है, तो उसका कम से कम एक भाजक d ऐसा अवश्य होगा जहाँ 2 <= d <= sqrt(N)। यदि इस सीमा में कोई भाजक न मिले, तो संख्या निश्चित रूप से अभाज्य है।

चरणबद्ध एल्गोरिदम:
चरण 1: [प्रारंभ] एल्गोरिदम निष्पादन शुरू करें।
चरण 2: [इनपुट] उपयोगकर्ता से पूर्णांक N प्राप्त करें।
चरण 3: [सीमा जांच] यदि N < 2, तो आउटपुट दें "अभाज्य नहीं" और चरण 9 पर जाएं।
चरण 4: [2 की जांच] यदि N == 2, तो आउटपुट दें "अभाज्य संख्या" और चरण 9 पर जाएं।
चरण 5: [सम संख्या जांच] यदि N % 2 == 0, तो आउटपुट दें "भाज्य संख्या" और चरण 9 पर जाएं।
चरण 6: [चर प्रारंभीकरण] भाजक d = 3 निर्धारित करें।
चरण 7: [विभाजन लूप]
    जब तक (d * d <= N) हो:
        यदि (N % d == 0) हो तो:
            आउटपुट दें "भाज्य संख्या"
            चरण 9 पर जाएं
        d = d + 2 करें (केवल विषम संख्याओं की जांच)
चरण 8: [अभाज्य आउटपुट] आउटपुट दें "अभाज्य संख्या"।
चरण 9: [समाप्त] एल्गोरिदम निष्पादन समाप्त करें।

फ़्लोचार्ट प्रतीकों का संयोजन:
- दीर्घवृत्त (Oval): Start (चरण 1) एवं Stop (चरण 9)।
- समांतर चतुर्भुज: Input N (चरण 2) और Output प्रिंट (चरण 3, 4, 5, 7, 8)।
- समचतुर्भुज (Diamond): निर्णय शर्तें `N < 2`, `N == 2`, `N % 2 == 0`, `d * d <= N`, और `N % d == 0`।
- आयत (Rectangle): प्रोसेसिंग चरण `d = 3` और `d = d + 2`।
उदाहरण 2
विस्तृत समाधान / उत्तर:
एल्गोरिदम लॉजिक:
जब तक (B != 0) हो:
    शेषफल R = A % B
    A = B
    B = R
A को महत्तम समापवर्तक (GCD) के रूप में प्रिंट करें।

औपचारिक ट्रेस टेबल (Trace Table):
पुनरावृत्ति #शर्त (B != 0)शेषफल R = A % Bनया A (A = B)नया B (B = R)टिप्पणी
प्रारंभिक स्थिति--5424रजिस्टर में मान लोड हुए
पुनरावृत्ति 124 != 0 (True)54 % 24 = 6246A को 24 मिला, B को शेषफल 6 मिला
पुनरावृत्ति 26 != 0 (True)24 % 6 = 060A को 6 मिला, B को शेषफल 0 मिला
पुनरावृत्ति 30 != 0 (False)-60लूप तुरंत समाप्त हुआ

अंतिम परिणाम: GCD = 6। मात्र 2 पुनरावृत्तियों में सटीक गणना संपन्न हुई।
उदाहरण 3
विस्तृत समाधान / उत्तर:
चरण 1: वाइंडिंग चरण (स्टैक PUSH ऑपरेशन्स):
1. कॉल `fact(4)`: फ्रेम 1 स्टैक पर पुश हुआ। पैरामीटर `n = 4`। यह `4 * fact(3)` की प्रतीक्षा कर रहा है।
2. कॉल `fact(3)`: फ्रेम 2 स्टैक पर पुश हुआ। पैरामीटर `n = 3`। यह `3 * fact(2)` की प्रतीक्षा कर रहा है।
3. कॉल `fact(2)`: फ्रेम 3 स्टैक पर पुश हुआ। पैरामीटर `n = 2`। यह `2 * fact(1)` की प्रतीक्षा कर रहा है।
4. कॉल `fact(1)`: फ्रेम 4 स्टैक पर पुश हुआ। पैरामीटर `n = 1`। बेस केस मिला (`n <= 1`), यह 1 रिटर्न करता है।

चरम स्टैक स्थिति (गहराई = 4 फ्रेम्स):
[स्टैक का शीर्ष] फ्रेम 4: fact(1) → 1 रिटर्न करता है
                 फ्रेम 3: fact(2) → fact(1) की प्रतीक्षा में
                 फ्रेम 2: fact(3) → fact(2) की प्रतीक्षा में
[स्टैक का तल]    फ्रेम 1: fact(4) → fact(3) की प्रतीक्षा में

चरण 2: अनवाइंडिंग चरण (स्टैक POP ऑपरेशन्स):
1. फ्रेम 4 पॉप हुआ: फ्रेम 3 को 1 मिला।
2. फ्रेम 3 की गणना: `2 * 1 = 2`। फ्रेम 3 पॉप हुआ, फ्रेम 2 को 2 मिला।
3. फ्रेम 2 की गणना: `3 * 2 = 6`। फ्रेम 2 पॉप हुआ, फ्रेम 1 को 6 मिला।
4. फ्रेम 1 की गणना: `4 * 6 = 24`। फ्रेम 1 पॉप हुआ, मुख्य प्रोग्राम को अंतिम उत्तर 24 मिला।
उदाहरण 4
विस्तृत समाधान / उत्तर:
प्रारंभिक मान: a = 5, b = 3, c = 2.

ऑपरेटर वरीयता पदानुक्रम:
1. पोस्टफिक्स ऑपरेटर (`b--`, `c++`) एवं प्रीफिक्स ऑपरेटर (`++a`)।
2. गुणा एवं भाग ऑपरेटर (`*`, `/`) बाएँ से दाएँ क्रम में।
3. जोड़ एवं घटाव ऑपरेटर (`+`, `-`) बाएँ से दाएँ क्रम में।
4. असाइनमेंट ऑपरेटर (`=`)।

चरण-दर-चरण मूल्यांकन:
1. पहला प्रीफिक्स `++a`: `a` बढ़कर 5 से 6 हुआ। उपयोग मान = 6.
2. पोस्टफिक्स `b--`: उपयोग मान = 3। इसके बाद `b` घटकर 2 हो गया।
3. दूसरा प्रीफिक्स `++a`: `a` बढ़कर 6 से 7 हुआ। उपयोग मान = 7.
4. पोस्टफिक्स `c++`: उपयोग मान = 2। इसके बाद `c` बढ़कर 3 हो गया।
अब व्यंजक बना: `x = 6 + 3 * 7 - 2 / 2`।
5. गुणा एवं भाग निष्पादन (बाएँ से दाएँ):
    `3 * 7 = 21`
    `2 / 2 = 1` (पूर्णांक विभाजन)
अब व्यंजक बना: `x = 6 + 21 - 1`।
6. जोड़ एवं घटाव निष्पादन:
    `6 + 21 = 27`
    `27 - 1 = 26`।

अंतिम परिणाम:
x = 26, a = 7, b = 2, c = 3।
उदाहरण 5
विस्तृत समाधान / उत्तर:
त्रुटिपूर्ण स्यूडोकोड:
1:  BEGIN CalculateAverage
2:  INTEGER N, count = 0, sum = 0
3:  INPUT N;
4:  WHLE (count <= N) DO
5:      INTEGER val
6:      INPUT val
7:      sum = sum + val
8:  END WHILE
9:  FLOAT avg = sum / N
10: PRINT "Average is: " + avg
11: END

त्रुटियों का वर्गीकरण एवं सुधार:
1. सिंटैक्स त्रुटि (लाइन 4): `WHLE` कीवर्ड की गलत स्पेलिंग है।
    सुधार: इसे `WHILE (count < N) DO` लिखें।
2. लॉजिकल त्रुटि (लाइन 4 व लूप बॉडी): `count = 0` के साथ `count <= N` लगाने से लूप $N + 1$ बार चलेगा (ऑफ-बाई-वन त्रुटि)। इसके अलावा लूप में `count` का मान बढ़ाया नहीं गया है, जिससे यह असीम लूप (Infinite Loop) बन जाएगा!
    सुधार: `WHILE (count < N) DO` करें और लाइन 8 से पहले `count = count + 1` जोड़ें।
3. रनटाइम त्रुटि (लाइन 9): यदि उपयोगकर्ता $N = 0$ इनपुट दे, तो `sum / N` करने पर शून्य से विभाजन (Division by Zero) के कारण प्रोग्राम क्रैश हो जाएगा।
    सुधार: शर्त जोड़ें `IF (N > 0) THEN avg = sum / N ELSE avg = 0.0`।
4. लॉजिकल त्रुटि (लाइन 9): दोनों चर पूर्णांक होने के कारण `sum / N` पूर्णांक विभाजन करेगा जिससे दशमलव भाग कट जाएगा (उदा. $15 / 4 = 3.0$ आएगा, $3.75$ नहीं)।
    सुधार: स्पष्ट टाइपकास्टिंग करें: `avg = (FLOAT)sum / N`।
उदाहरण 6
विस्तृत समाधान / उत्तर:
भाग A: लीनियर सर्च विश्लेषण:
लीनियर सर्च की समय जटिलता O(N) होती है। सबसे खराब स्थिति में जब तत्व सबसे अंत में हो या न मिले:
तुलनाएं = N = 10,48,576 तुलनाएं।

भाग B: बाइनरी सर्च विश्लेषण:
बाइनरी सर्च की समय जटिलता O(log2 N) होती है। प्रत्येक चरण में खोज क्षेत्र आधा हो जाता है:
तुलनाएं = ceil(log2(10,48,576)) = ceil(log2(2^20)) = 20 तुलनाएं।

भाग C: भौतिक निष्पादन समय तुलना (5 ns/तुलना की दर से):
1. लीनियर सर्च समय = 10,48,576 * (5 * 10^-9 s) = 5.24 * 10^-3 s = 5.24 मिलीसेकंड।
2. बाइनरी सर्च समय = 20 * (5 * 10^-9 s) = 100 * 10^-9 s = 0.0001 मिलीसेकंड (100 नैनोसेकंड)।
निष्कर्ष: बाइनरी सर्च 52,428 गुना तेज काम करता है। यह स्पष्ट करता है कि बड़े डेटाबेस के लिए एल्गोरिदम की जटिलता कितनी निर्णायक होती है।

सामान्य गलतियाँ एवं परीक्षक के जाल (Examiner Traps)

सामान्य भ्रम / गलत उत्तर

असाइनमेंट ऑपरेटर (=) और समानता तुलना ऑपरेटर (==) में भ्रमित होना।

सही वैज्ञानिक तथ्य

`=` का उपयोग मान असाइन करने के लिए होता है (`x = 5`), जबकि `==` का उपयोग तुलना के लिए (`if (x == 5)`)। `if (x = 5)` लिखने से x का मान 5 हो जाता है और शर्त हमेशा True हो जाती है!

सामान्य भ्रम / गलत उत्तर

व्हाइल लूप (while loop) के अंदर लूप कंट्रोल वेरिएबल को अपडेट करना भूल जाना।

सही वैज्ञानिक तथ्य

हमेशा सुनिश्चित करें कि लूप बॉडी के अंदर चर का मान बढ़ाया या घटाया जाए (`i++`), अन्यथा लूप कभी समाप्त नहीं होगा और असीम लूप बन जाएगा।

सामान्य भ्रम / गलत उत्तर

यह मान लेना कि डू-व्हाइल लूप (do-while) शून्य बार चल सकता है।

सही वैज्ञानिक तथ्य

चूँकि डू-व्हाइल लूप में शर्त की जांच अंत में होती है, इसलिए शर्त असत्य होने पर भी इसकी लूप बॉडी कम से कम एक बार अवश्य चलती है।

सामान्य भ्रम / गलत उत्तर

रिकर्सिव फ़ंक्शन में बेस केस (Stopping Condition) छोड़ देना।

सही वैज्ञानिक तथ्य

प्रत्येक रिकर्सिव फ़ंक्शन में एक स्पष्ट गैर-रिकर्सिव बेस केस होना अनिवार्य है, अन्यथा स्टैक मेमोरी समाप्त होने से स्टैक ओवरफ़्लो क्रैश हो जाएगा।

सामान्य भ्रम / गलत उत्तर

यह अपेक्षा करना कि पूर्णांक विभाजन दशमलव मान सुरक्षित रखेगा (जैसे 5 / 2 = 2.5)।

सही वैज्ञानिक तथ्य

C जैसी भाषाओं में दो पूर्णांकों का भागफल भी पूर्णांक ही आता है (5 / 2 = 2)। दशमलव परिणाम के लिए कम से कम एक संख्या को फ्लोट बनाएं: `(float)5 / 2 = 2.5`।

अध्याय का सार संक्षेप एवं 10 मुख्य निष्कर्ष

मुख्य बिंदु 1
अध्याय 2 'प्रोग्रामिंग के मूल सिद्धांत' सॉफ्टवेयर विकास और संगणकीय चिंतन की एक संपूर्ण सैद्धांतिक और व्यावहारिक रूपरेखा प्रस्तुत करता है। हमने समस्या समाधान जीवनचक्र और डोनाल्ड नुथ के पांच मानदंडों (सीमितता, निश्चितता, इनपुट, आउटपुट, प्रभावशीलता) के अनुसार एल्गोरिदम तैयार करना, उन्हें ANSI फ़्लोचार्ट में दर्शाना और ट्रेस टेबल से जाँचना सीखा। हमने बॉहम-जैकोपिनी प्रमेय का अध्ययन किया, जिसने स्पष्ट किया कि अनुक्रम, चयन (if-else, switch) और पुनरावृत्ति (while, do-while) किसी भी प्रोग्राम के निर्माण के लिए पर्याप्त हैं। हमने मॉड्यूलर प्रोग्रामिंग, टॉप-डाउन डिजाइन, उच्च संसंजन, निम्न युग्मन, कॉल बाय वैल्यू बनाम रेफरेंस, और रिकर्शन में रनटाइम कॉल स्टैक के एक्टिवेशन रिकॉर्ड्स की कार्यप्रणाली का विश्लेषण किया। इसके अतिरिक्त प्रिमिटिव डेटा प्रकार, ऑपरेटर प्राथमिकता, शॉर्ट-सर्किट मूल्यांकन, PDLC के छह चरण, बग्स का वर्गीकरण और बिग-ओ जटिलता विश्लेषण का गहन अध्ययन संपन्न हुआ।

स्व-मूल्यांकन अभ्यास (Check Your Understanding)

मूल वैचारिक स्पष्टता की जांच के लिए नैदानिक प्रश्न। पहले स्वयं हल करें, फिर उत्तर देखें।

1
फ़्लोचार्ट का कौन सा ज्यामितीय प्रतीक बहु-शाखीय निर्णय परीक्षण के लिए प्रयुक्त होता है जिसमें True और False शाखाएं निकलती हैं?
उत्तर एवं व्याख्या देखें
उत्तर: समचतुर्भुज (Diamond / Rhombus) प्रतीक, जो निर्णय (Decision) ब्लॉक को दर्शाता है।
2
यदि एक व्हाईल लूप (while loop) की प्रारंभिक शर्त असत्य (False) हो, तो उसकी लूप बॉडी कितनी बार निष्पादित होगी?
उत्तर एवं व्याख्या देखें
उत्तर: ठीक 0 बार, क्योंकि व्हाईल एक प्रवेश-नियंत्रित (Pre-tested) लूप है।
3
N तत्वों की सॉर्टेड ऐरे पर बाइनरी सर्च की सबसे खराब समय जटिलता (Worst-case Time Complexity) क्या है?
उत्तर एवं व्याख्या देखें
उत्तर: O(log2 N) या O(log N) लघुगणकीय समय।
4
यदि किसी रिकर्सिव फ़ंक्शन में कोई वैध बेस केस (Stopping Condition) न हो, तो क्या होगा?
उत्तर एवं व्याख्या देखें
उत्तर: फ़ंक्शन अनियंत्रित रूप से स्वयं को कॉल करता रहेगा जब तक कि कॉल स्टैक मेमोरी समाप्त न हो जाए और स्टैक ओवरफ़्लो क्रैश न हो जाए।
5
यदि a = 10 हो, तो व्यंजक b = a++ + ++a का मान क्या होगा, और a का अंतिम मान क्या होगा?
उत्तर एवं व्याख्या देखें
उत्तर: a++ से 10 मिलेगा (फिर a = 11 होगा); ++a से a = 12 होकर 12 मिलेगा; b = 10 + 12 = 22, तथा a का अंतिम मान = 12 होगा।
अध्याय का अध्ययन पूर्ण हुआ?
अभ्यास के लिए तैयार?

ऑनलाइन CBT टेस्ट देकर तैयारी का मूल्यांकन करें

झारखण्ड बोर्ड परीक्षा पैटर्न पर आधारित बहुविकल्पीय प्रश्नों का ऑनलाइन टेस्ट दें। तुरंत परिणाम, समय विश्लेषण और प्रत्येक प्रश्न का विस्तृत हल प्राप्त करें।