सारांश
यह पाठ पाठ्यक्रम की दूसरी इकाई का आरंभ करता है, जो डेटा और उसके प्रकारों को समर्पित है। यह बताता है कि इकाई किसलिए है: यह सिखाना कि किसी प्रोग्राम का हर डेटा मेमोरी में एक प्रकार के साथ रहता है, जो तय करता है कि वह कौन-से मान ले सकता है, कितनी जगह घेरता है और कौन-सी संक्रियाएँ स्वीकार करता है, और यह कि इन सीमाओं के ऐसे परिणाम होते हैं जिन्हें देखा जा सकता है; यह इकाई के चार पाठों और उन्हें जोड़ने वाले सूत्र को प्रस्तुत करता है, नाम और मान वाली सेल के रूप में चर से लेकर प्रकारों के बीच रूपांतरणों और स्थिरांकों तक; यह याद दिलाता है कि इकाई पहली इकाई से क्या ज्ञात मानती है, अर्थात् पढ़ने और लिखने वाला प्रोग्राम लिखना, उसे कंपाइल करना और चलाना; यह उस समस्या को सामने रखता है जिसे इकाई हल करती है, यानी ऐसे प्रोग्राम की समस्या जो देखने में सही है पर जिसकी गणनाएँ गणित की गणनाओं से मेल नहीं खातीं, योग से शुरू करके, जो कंप्यूटर में ठीक-ठीक नहीं होता; और यह दिखाता है कि यह इकाई कहाँ ले जाती है, आगे की इकाइयों में और C++ में प्रोग्रामिंग II पाठ्यक्रम में।
अधिगम उद्देश्य
- इकाई की विषय-वस्तु के क्रम का वर्णन करना और यह समझाना कि हर पाठ अपने बाद वाले पाठ को क्या देता है।
- इकाई 1 की ज़रूरी बातें याद करना (कंपाइल करने और चलाने का चक्र, फ़ॉर्मैट के साथ आउटपुट,
std::cinसे पढ़ना और कंपाइलर के संदेश पढ़ना) और ज़रूरत हो तो उन्हें दोहराना। - एक उदाहरण के साथ समझाना कि प्रोग्राम की कोई संख्या गणित की संख्या क्यों नहीं है, और पहले से संकेत देना कि कंप्यूटर में ठीक-ठीक क्यों नहीं है।
- पहचानना कि इकाई के अंत में क्या करना आना चाहिए, और उसे उससे अलग करना जो आगे की इकाइयों में सीखा जाएगा।
प्रवेश मूल्यांकन
इकाई शुरू करने से पहले आरंभ-बिंदु को माप लेना उपयोगी है। यह मूल्यांकन एक स्व-मूल्यांकन है: इसमें अंक नहीं दिए जाते, और इसका एकमात्र उद्देश्य अध्ययन को दिशा देना है। पहले चार प्रश्न उसे जाँचते हैं जिसे इकाई पहली इकाई से ज्ञात मानती है: किसी प्रक्रिया को चरण-दर-चरण चलाना, किसी संख्या को दो दशमलव अंकों तक लिखना, पूर्णांकन और किसी त्रुटि संदेश को पढ़ना। उसके बाद के छह प्रश्न, पाठों के क्रम से, इकाई के केंद्रीय विचारों को छूते हैं। अभी इनके सही उत्तर देने के लिए कोई बाध्य नहीं है, और इनमें से एक में “मुझे अभी नहीं पता” एक ईमानदार उत्तर है: हर उत्तर, सही हो या ग़लत, बात को समझाता है और उस पाठ का नाम बताता है जिसमें वह बात आती है। यही कौशल अंत में, सारांश वाले पाठ में, फिर से मापे जाते हैं।
इकाई शुरू करने से पहले अपना आरंभ बिंदु मापें। यह एक छोटा स्व-मूल्यांकन है: इस पर अंक नहीं दिए जाते और इसका परिणाम केवल आपके ब्राउज़र में रहता है।
प्रश्न 1पिछली इकाइयों सेएक प्रक्रिया कहती है: “1. का मान 17 हो जाता है। 2. का मान हो जाता है। 3. का मान हो जाता है।” अंत में का मान क्या है?
मान लेता है कि हर चरण आरंभिक मान से शुरू होता है; दूसरा चरण उस मान से शुरू होता है जो पहले चरण ने छोड़ा।“मान … हो जाता है” को गणितीय समता के रूप में पढ़ता है; यह एक आदेश है जो का मान बदल देता है।चर को स्थिरांक समझ बैठता है: हर बार जब चर को कोई दूसरा मान असाइन किया जाता है, उसका मान बदल जाता है।हर चरण उस मान से शुरू होता है जो उस क्षण के पास है, आरंभिक मान से नहीं। हर चरण के बाद हर चर का मान लिखते हुए प्रक्रिया को हाथ से चलाना ही इकाई 1 की ट्रेस तालिका है, और पाठ 2.1 उसे प्रोग्राम की अवस्था पर विचार करने का उपकरण बना देता है।दोहराएँ: समस्या से एल्गोरिदम तक
प्रश्न 2पिछली इकाइयों सेस्टेटमेंट
std::println("{:.2f}", 2.0 / 3);क्या लिखता है?सोचता है कि फ़ॉर्मैट विनिर्देश छाँट देता है; वह निकटतम दशमलव तक पूर्णांकन करता है।फ़ॉर्मैट विनिर्देश को अनदेखा करता है: यह.2fके बिना का लेखन है।सोचता है कि विभाजन पूर्णांक विभाजन है;2.0के साथ, जिसमें दशमलव हैं, विभाजन वास्तविक होता है।फ़ॉर्मैट विनिर्देश.2fसंख्या को पूर्णांकन करते हुए दो दशमलव अंकों तक लिखता है: को0.67लिखा जाता है। संग्रहीत मान नहीं बदलता; केवल उसका लेखन बदलता है।दोहराएँ: इनपुट, आउटपुट और त्रुटियाँ
प्रश्न 3पिछली इकाइयों से को पूर्णांकन करके दो दशमलव अंकों तक लिखना है। क्या मिलता है?
पूर्णांकन के बजाय छाँटता है: तीसरे अंक को देखे बिना हटा देता है।दो के बजाय एक दशमलव अंक तक पूर्णांकन करता है।दूसरे दशमलव अंक को ज़रूरत से ज़्यादा बढ़ा देता है: , और के बीच है, और पूर्णांकन इन्हीं दो में से एक को चुनता है।दो दशमलव अंकों तक पूर्णांकन का अर्थ है दो दशमलव अंकों वाली निकटतम संख्या चुनना: की से दूरी से उसकी दूरी से कम है। पाठ 2.3 दिखाएगा कि कंप्यूटर भी इसी तरह पूर्णांकन करता है, पर आधार 2 में, और इसी कारण दशमलव वाली लगभग कोई भी संख्या ठीक-ठीक संग्रहीत नहीं होती।दोहराएँ: इनपुट, आउटपुट और त्रुटियाँ
प्रश्न 4पिछली इकाइयों सेएक प्रोग्राम की पंक्ति 5 में
const int pages{12}है और पंक्ति 6 मेंstd::println("{}", pages);है। कंपाइलर लिखता है6:5: error: expected ',' or ';' before 'std'। दोष कहाँ है?पंक्ति 6 सही है; कंपाइलर उसकी ओर इसलिए इशारा करता है क्योंकि वहीं उसे कमी का पता चला।stdपहचाना जाता है; संदेश कहता है कि उससे पहले सेमीकोलन अपेक्षित था।संदेश मेंerrorलिखा है,warningनहीं: कोई एक्ज़ीक्यूटेबल फ़ाइल नहीं बनी।कंपाइलर को कमी का पता तब चलता है जब वह पंक्ति 6 की शुरुआत में ऐसी चीज़ से टकराता है जो घोषणा के बाद नहीं आ सकती, और वह उसी जगह की ओर इशारा करता है। यदि इंगित की गई पंक्ति सही है, तो दोष प्रायः उससे पहले की पंक्ति के अंत में होता है।दोहराएँ: प्रोग्राम की बनावट
प्रश्न 5एक प्रोग्राम
int a{2};औरint b{7};घोषित करता है, और फिरa = b;औरb = 10;चलाता है। अंत मेंaका मान क्या है?सोचता है कि असाइनमेंट दोनों चरों को बाँध देता है, मानोa,bका दूसरा नाम हो; वह केवल मान कॉपी करता है।a = bको उलटा पढ़ता है, मानो वहaकोbमें कॉपी करता हो; मान दाएँ से बाएँ जाता है।दोनों मानों को जोड़ देता है; असाइनमेंट मान को बदलता है, जमा नहीं करता।असाइनमेंटa = b,aमें वह मान कॉपी करता है जो उस क्षणbके पास है; उसके बादaऔरbस्वतंत्र सेल हैं, औरbको बदलने सेaनहीं बदलता।दोहराएँ: चर और मेमोरी
प्रश्न 6संख्या 13 को आधार 2 में कैसे लिखा जाता है?
यह एक ईमानदार उत्तर है: पाठ 2.2 किसी संख्या को आधार 2 में लिखना और पढ़ना सिखाता है, और समापन मूल्यांकन यह फिर पूछेगा।क्रमिक विभाजनों के शेषफलों को उसी क्रम में पढ़ता है जिसमें वे आते हैं; उन्हें अंतिम से पहले की ओर पढ़ा जाता है।भारों को ग़लत जोड़ता है: ।आधार 2 में हर स्थान का भार अपने दाएँ वाले स्थान का दोगुना होता है, और अंक केवल 0 और 1 होते हैं। पाठ 2.2 यह सिखाता है, क्योंकि प्रोग्राम का हर पूर्णांक इसी तरह संग्रहीत होता है।दोहराएँ: पूर्णांक और उनका निरूपण
प्रश्न 74 बाइट का एक
intअपना अधिकतम मान, , संग्रहीत करता है, और प्रोग्राम उसमें 1 जोड़ता है। क्या कहा जा सकता है?निरूपण की सीमा को अनदेखा करता है: यह संख्या 4 बाइट केintमें नहीं समाती।ऐसा व्यवहार अचिह्नित पूर्णांक करते हैं, जिनका अंकगणित मापांकीय है; चिह्नित पूर्णांकों के लिए मानक इसकी गारंटी नहीं देता।कंपाइलर नहीं जानता कि चलते समय प्रोग्राम के मान क्या होंगे, जब तक वे स्थिरांक न हों; लगभग हमेशा वह बिना कुछ कहे कंपाइल कर देता है।प्रोग्राम के पूर्णांक में बिटों की संख्या नियत होती है और, उसके साथ, मानों की परास सीमित होती है। किसी चिह्नित पूर्णांक की परास से बाहर जाना जोड़ की पूर्वशर्त का उल्लंघन है; पाठ्यक्रम का डिटेक्टर (sanitizer) प्रोग्राम को रोक देता है, और उसके बिना प्रोग्राम कुछ भी लिख सकता है। पाठ 2.2 इसका अध्ययन करता है।दोहराएँ: पूर्णांक और उनका निरूपण
प्रश्न 8क्या का कोई सांत दशमलव निरूपण है?
एक सन्निकटन है: , 1 नहीं।चाहे जितने अंक लिखे जाएँ, हमेशा एक शेष बचता है; प्रसार आवर्ती है, सांत नहीं।यह संख्या और आधार का गुण है, उपकरण का नहीं; कैलकुलेटर केवल एक सन्निकटन दिखाता है।सरलतम रूप में लिखी गई किसी भिन्न का दशमलव निरूपण सांत होता है यदि और केवल यदि उसके हर के अभाज्य गुणनखंडों में 2 और 5 के अलावा कोई न हो, जो आधार 10 के अभाज्य गुणनखंड हैं। आधार 2 में शर्त अधिक कठोर है: हर को 2 की घात होना चाहिए, और इसीलिए का कोई सांत द्विआधारी निरूपण नहीं है। पाठ 2.3 इससे इसके परिणाम निकालता है।दोहराएँ: फ़्लोटिंग-पॉइंट संख्याएँ
प्रश्न 9
std::println("{}", 0.1 + 0.2);क्या लिखता है?मान लेता है कि कंप्यूटर सटीक दशमलव संख्याएँ जोड़ता है; वह द्विआधारी सन्निकटन जोड़ता है।डिफ़ॉल्ट लेखन को फ़ॉर्मैट विनिर्देश{:.2f}से गड़बड़ा देता है, जो दो दशमलव अंकों तक पूर्णांकन करता है।दोdoubleका योग वैध है; चौंकाने वाला उसका परिणाम है, उसका लेखन नहीं।न और न द्विआधारी में ठीक-ठीक संग्रहीत होते हैं, और उनके सन्निकटनों का योग का सन्निकटन नहीं है।std::printlnवह सबसे छोटा दशमलव निरूपण लिखता है जो संग्रहीत मान को पहचानता है, और वही निरूपण अंतर को उजागर कर देता है। पाठ 2.3 अंक-दर-अंक समझाता है कि यह अंतर कहाँ से आता है।दोहराएँ: फ़्लोटिंग-पॉइंट संख्याएँ
प्रश्न 10एक प्रोग्राम
const double ratio{7 / 2};घोषित करता है औरratioलिखता है। क्या दिखता है?सोचता है कि चर का प्रकार तय करता है कि विभाजन कैसे हो; यह संकार्यों का प्रकार तय करता है।सोचता है कि पूर्णांक विभाजन पूर्णांकन करता है; वह दशमलव भाग हटा देता है।मान 3 स्थिरांक है औरdoubleमें ठीक-ठीक निरूपित होता है: कोई हानि नहीं है, और कर्ली ब्रेस इसे स्वीकार करते हैं।विभाजन7 / 2पूर्णांकों के बीच है, और पूर्णांक भागफल, 3, देता है; उसके बाद ही वह 3doubleमें रूपांतरित होता है। कौन-सा विभाजन होगा, यह संक्रिया के भीतर, संकार्यों के प्रकार के अनुसार तय होता है, न कि परिणाम संग्रहीत करते समय। पाठ 2.4 सिखाता है कि 3.5 पाने के लिए रूपांतरण कहाँ रखना है।दोहराएँ: वर्ण, बूलियन, रूपांतरण और स्थिरांक
सामग्री लोड हो रही है…