सारांश
यह पाठ पाठ्यक्रम की तीसरी इकाई का आरंभ करता है, जो व्यंजकों और उनके संक्रियकों को समर्पित है। यह बताता है कि इकाई किसलिए है: ऐसे व्यंजक बनाना सिखाना जिनका मान निश्चितता के साथ पहले से बताया जा सके, यह जानते हुए कि कौन-सी संक्रिया पहले होती है, परिणाम किस प्रकार का है, उसके कौन-से साइड इफ़ेक्ट हैं और कौन-से व्यंजकों का कोई अर्थ नहीं है; इकाई के चार पाठों और उन्हें जोड़ने वाले सूत्र को प्रस्तुत करता है, पूर्णांक और वास्तविक अंकगणित से लेकर बिटों और गणितीय लाइब्रेरी तक, शर्तों और अपरिभाषित व्यवहार की सूची से होते हुए; उसे याद दिलाता है जिसे इकाई दूसरी इकाई से ज्ञात मानती है, यानी हर डेटा का प्रकार, उसकी सीमाएँ और उसके रूपांतरण; उस समस्या को सामने रखता है जिसे इकाई हल करती है, यानी एक ऐसे प्रोग्राम की समस्या जो एक भी चेतावनी के बिना कंपाइल होता है और जिसके छह स्कूली प्रश्नों के उत्तर सब के सब ग़लत हैं, जब वे ग़ायब न हों; और दिखाता है कि यह इकाई आगे की इकाइयों में और C++ में प्रोग्रामिंग II पाठ्यक्रम में कहाँ ले जाती है।
अधिगम उद्देश्य
- इकाई की विषय-वस्तु के क्रम का वर्णन करना और यह समझाना कि हर पाठ अपने बाद वाले पाठ को क्या देता है।
- इकाई 2 की ज़रूरी बातें याद करना (पूर्णांक और वास्तविक प्रकार, उनकी मानों की परास, ओवरफ़्लो और रूपांतरण) और ज़रूरत हो तो उन्हें दोहराना।
- एक उदाहरण के साथ पहले से यह देख लेना कि किसी व्यंजक का मान गणना के नियमों (प्राथमिकता, संकार्यों का प्रकार, प्रभावों का क्रम) पर निर्भर करता है, जो हमेशा स्कूली गणित के नियमों से मेल नहीं खाते।
- पहचानना कि इकाई के अंत में क्या करना आना चाहिए, और उसे उससे अलग करना जो आगे की इकाइयों में सीखा जाएगा।
प्रवेश मूल्यांकन
इकाई शुरू करने से पहले आरंभ-बिंदु को माप लेना उपयोगी है। यह मूल्यांकन एक स्व-मूल्यांकन है: इसमें अंक नहीं दिए जाते, और इसका एकमात्र उद्देश्य अध्ययन को दिशा देना है। पहले चार प्रश्न उसे जाँचते हैं जिसे इकाई दूसरी इकाई से ज्ञात मानती है: पूर्णांकों के बीच विभाजन, आधार 2 में लेखन, अचिह्नित घटाव और चिह्नित ओवरफ़्लो। उसके बाद के छह प्रश्न, पाठों के क्रम से, इकाई के केंद्रीय विचारों को छूते हैं, और उनमें से कई स्कूली गणित या प्रारंभिक तर्क से शुरू होते हैं। अभी इनके सही उत्तर देने के लिए कोई बाध्य नहीं है, और इनमें से दो में “मुझे अभी नहीं पता” एक ईमानदार उत्तर है: हर उत्तर, सही हो या ग़लत, बात को समझाता है और उस पाठ का नाम बताता है जिसमें वह बात आती है। यही कौशल अंत में, सारांश वाले पाठ में, फिर से मापे जाते हैं।
इकाई शुरू करने से पहले अपना आरंभ बिंदु मापें। यह एक छोटा स्व-मूल्यांकन है: इस पर अंक नहीं दिए जाते और इसका परिणाम केवल आपके ब्राउज़र में रहता है।
प्रश्न 1पिछली इकाइयों सेएक प्रोग्राम
const double r{7 / 2};घोषित करता है औरrको लिखता है। क्या दिखाई देता है?सोचता है कि चर का प्रकार तय करता है कि भाग कैसे दिया जाए; यह संकार्यों का प्रकार तय करता है।सोचता है कि पूर्णांक विभाजन पूर्णांकन करता है; वह दशमलव भाग को हटा देता है।मान 3 स्थिर है औरdoubleमें ठीक-ठीक निरूपित होता है: अस्वीकार करने लायक़ कोई संकुचन नहीं है।विभाजन7 / 2पूर्णांकों के बीच है और पूर्णांक भागफल 3 देता है; उसके बाद ही यह 3doubleमें रूपांतरित होता है। संक्रिया का निर्णय संकार्यों का प्रकार करता है, न कि उस चर का प्रकार जो परिणाम ग्रहण करता है। पाठ 3.1 इस अवलोकन को एक सामान्य नियम में बदलता है: प्रकार व्यंजक के हर नोड पर तय होता है।दोहराएँ: वर्ण, बूलियन, रूपांतरण और स्थिरांक
प्रश्न 2पिछली इकाइयों सेसंख्या 13 को आधार 2 में, आठ बिटों के साथ, कैसे लिखा जाता है?
भारों को ग़लत जोड़ता है: ।क्रमिक विभाजनों के शेषफल उसी क्रम में लिखता है जिसमें वे निकलते हैं; उन्हें अंतिम से पहले की ओर पढ़ा जाता है।यह पैटर्न 26 है, यानी 13 का दोगुना: बिट एक स्थान खिसक गए हैं।हर स्थान का भार अपने दाईं ओर वाले स्थान से दोगुना होता है: 1 वाले अंक भार 8, 4 और 1 वाले स्थानों पर हैं। पाठ 3.4 सीधे इन बिटों पर संक्रिया करता है, इसलिए इन्हें सहजता से पढ़ पाना उपयोगी है।दोहराएँ: पूर्णांक और उनका निरूपण
प्रश्न 3पिछली इकाइयों से32 बिट के
unsigned intके साथstd::println("{}", 0u - 1);क्या लिखता है?प्रत्ययuपर ध्यान नहीं देता: अचिह्नित प्रकार में ऋणात्मक मान नहीं होते।अचिह्नित अंकगणित को, जो मापांक के साथ परिभाषित है, चिह्नित ओवरफ़्लो से उलझा देता है।सोचता है कि घटाव प्रकार के सबसे छोटे मान पर रुक जाता है; वह घूमकर दूसरे सिरे पर पहुँच जाता है।अचिह्नित अंकगणित मापांक अंकगणित है: । परिणाम परिभाषित है, और इसीलिए कोई डिटेक्टर इसकी सूचना नहीं देता। इकाई इससे फिर मिलती है, मिश्रित व्यंजक के रूपांतरणों में और बिट संक्रियकों में, जो अचिह्नित प्रकारों के साथ लिखे जाते हैं।दोहराएँ: पूर्णांक और उनका निरूपण
प्रश्न 4पिछली इकाइयों सेएक प्रोग्राम
int count{std::numeric_limits<int>::max()};और उसके बादcount = count + 1;चलाता है। मानकcountके मान के बारे में क्या गारंटी देता है?जो कभी-कभी देखा जाता है उसे उससे उलझा देता है जिसकी मानक गारंटी देता है; न्यूनतम पर लौट आना अचिह्नित प्रकारों का व्यवहार है, चिह्नित प्रकारों का नहीं।प्रकार की सीमा को अनदेखा करता है: यह संख्या 32 बिट केintमें नहीं समाती।कंपाइलर उन मानों को नहीं जानता जो प्रोग्राम के चलते समय होंगे; वह लगभग हमेशा बिना कुछ कहे कंपाइल कर देता है।योग की एक पूर्व-शर्त है, कि परिणाम प्रकार में समाए, और उसके बाहर मानक कोई वादा नहीं करता। पाठ्यक्रम का डिटेक्टर प्रोग्राम को रोक देता है; उसके बिना कुछ भी लिखा जा सकता है। पाठ 3.3 इस स्थिति को इसी तरह की दूसरी स्थितियों के साथ एक सूची में इकट्ठा करता है।दोहराएँ: पूर्णांक और उनका निरूपण
प्रश्न 5 और के मान क्या हैं?
गुणनफल की प्राथमिकता पर ध्यान दिए बिना बाएँ से दाएँ गणना करता है।दूसरे व्यंजक के कोष्ठकों को अनदेखा करता है।हर व्यंजक को दूसरे का मान दे देता है: कोष्ठकों का प्रभाव उलट देता है।गुणनफल योग से अधिक कसकर जुड़ता है: में पहले गुणा होता है, और कोष्ठक इस क्रम को बदल देते हैं। C++ इसी परिपाटी का पालन करती है, और पाठ 3.1 व्यंजक वृक्ष को साधन बनाकर इसे विभाजन, शेषफल और साहचर्यता तक फैलाता है।दोहराएँ: अंकगणितीय संक्रियाएँ
प्रश्न 6गणित के विभाजन प्रमेय के अनुसार, जब शेषफल पर शर्त लागू हो, तब भागफल और शेषफल क्या हैं, जब को से भाग दिया जाए?
यही C++ गणना करती है, पर यह को पूरा नहीं करता: गणित का शेषफल ऋणात्मक नहीं होता।सर्वसमिका की जाँच नहीं करता: होता है, नहीं।यह भी सर्वसमिका को पूरा नहीं करता: ।प्रमेय की माँग करता है, साथ में की, और ये दो संख्याएँ ही इसे पूरा करती हैं। इसके विपरीत, C++ भागफल को शून्य की ओर छाँटती है:-7 / 2का मान है और-7 % 2का मान है। पाठ 3.1 इस अंतर को समझाता है और C++ के शेषफल से गणित का शेषफल प्राप्त करना सिखाता है।दोहराएँ: अंकगणितीय संक्रियाएँ
प्रश्न 7“बारिश हो रही है और ठंड है” का निषेध क्या है?
संयोजक बदले बिना हर भाग का निषेध करता है: यह निषेध से कहीं अधिक दावा करता है, क्योंकि यह सूखे और ठंडे दिन को भी बाहर कर देता है।केवल एक भाग का निषेध करता है।वही कहता है जो दूसरा विकल्प कहता है, उसी त्रुटि के साथ।किसी संयोजन का निषेध निषेधों का वियोजन होता है: यह डी मॉर्गन के नियमों में से एक है। कथन के असत्य होने के लिए इतना काफ़ी है कि दो में से एक बात न हो। पाठ 3.2 इसी नियम को प्रोग्राम की शर्तों पर लागू करता है।दोहराएँ: संबंध और तर्क
प्रश्न 8
std::println("{}", 3 < 5);क्या लिखता है?सोचता है कि तार्किक मान संख्या के रूप में लिखा जाता है; प्लेसहोल्डर{}के साथstd::printlnशब्द लिखता है।सोचता है कि व्यंजक टेक्स्ट के रूप में लिखा जाता है; जो लिखा जाता है वह उसका मान है।है: तुलनाboolप्रकार का व्यंजक है।तुलना भी किसी दूसरे व्यंजक की तरह एक व्यंजक है: उसका एक मान होता है,boolप्रकार का, औरstd::printlnउसेtrueयाfalseके रूप में लिखता है। पाठ 3.2 इसी अवलोकन से शुरू होता है: शर्त की गणना की जाती है, और इसीलिए उसकी प्राथमिकता, उसका वृक्ष और उसका बीजगणित होता है।दोहराएँ: संबंध और तर्क
प्रश्न 9
int a{5};औरint b{a++ * 2};के बादaऔरbके मान क्या हैं?यह एक ईमानदार उत्तर है: पाठ 3.3 किसी व्यंजक के मान और उसके प्रभाव का अंतर सिखाता है, और समापन मूल्यांकन यह फिर पूछेगा।प्रभाव को भूल जाता है:a++,aको बढ़ाता है।aके नए मान का उपयोग करता है; पोस्टफ़िक्स इंक्रीमेंट पहले वाला मान देता है।व्यंजकa++का एक मान है, वह जोaका था (5), और एक प्रभाव, जोaको 6 पर छोड़ देता है। गुणनफल मान का उपयोग करता है, प्रभाव का नहीं। पाठ 3.3 इन दोनों को अलग करना सिखाता है, और यह पहचानना कि कब एक ही व्यंजक में दो प्रभाव उसे अर्थहीन बना देते हैं।प्रश्न 10
std::println("{}", 2 ^ 3);क्या लिखता है?यह एक ईमानदार उत्तर है: पाठ 3.4 इसे समझाता है, और समापन मूल्यांकन यह फिर पूछेगा।कैरेट को घात के रूप में पढ़ता है, जैसा बहुत-से कैलकुलेटरों के संकेतन में होता है; C++ में यह घात नहीं है।इसे गुणनफल के रूप में पढ़ता है।C++ में कैरेट घात नहीं, बल्कि बिटवार XOR है: और केवल भार 1 वाले बिट में भिन्न हैं, इसलिए परिणाम 1 है। C++ में घात का कोई संक्रियक नहीं है; पाठ 3.4 सिखाता है कि कबstd::powका उपयोग करें और कब शिफ़्ट का।दोहराएँ: बिट और गणितीय लाइब्रेरी
सामग्री लोड हो रही है…