सामग्री पर जाएँ
Topos Uranos

सारांश

यह पाठ पाठ्यक्रम की चौथी इकाई को समाप्त करता है, जो नियंत्रण प्रवाह को समर्पित है। यह अवधारणाओं की उस शृंखला को फिर से गढ़ता है जो शर्त से संख्यात्मक एल्गोरिदम तक जाती है, और रास्ते में निर्णय और स्थितियों के विश्लेषण, लूप और उसके तीन रूपों, लूप के पैटर्नों, निश्चर और वैरिएंट से होकर गुज़रती है; इनमें से जो किसी भी भाषा में लागू होता है उसे उससे अलग करता है जो C++ का अपना है; इकाई के अपरिभाषित व्यवहार को एकत्र करता है, जो ओवरफ़्लो होने वाले काउंटरों, संचायकों और शर्तों में केंद्रित है, एक ऐसे प्रोग्राम के साथ जो उसे दिखाता है और उसके सुधार के साथ; अपने समापन मूल्यांकन में प्रवेश मूल्यांकन के कौशल दोहराता है; और छह चुनौतियों के साथ समाप्त होता है जो पूरी इकाई को जोड़ती हैं, विस्तारित यूक्लिड के एल्गोरिदम से लेकर एक महीने के कैलेंडर तक।

अधिगम उद्देश्य

  1. ऐसे निर्णय डिज़ाइन करना जिनकी स्थितियाँ परस्पर अपवर्जी और सर्वसमावेशी हों, और उन्हें हर स्थिति और हर सीमा के लिए एक इनपुट से परखना।
  2. समाप्त होने वाले सही लूप डिज़ाइन करना, उनका रूप और उनके पैटर्न विनिर्देश से चुनते हुए।
  3. किसी लूप की शुद्धता को निश्चर से और उसकी समाप्ति को वैरिएंट से सिद्ध करना, इकाई के संख्यात्मक एल्गोरिदमों में भी।
  4. इकाई के अपरिभाषित व्यवहार (ओवरफ़्लो होने वाले काउंटर, संचायक और शर्त, और वह भाग जिसे शर्त को रोकना था) को पहचानना और लूप को उसके बिना फिर से लिखना।
  5. इकाई में सीखी गई बातों में से, जो किसी भी भाषा में लागू होता है उसे उससे अलग करना जो C++ का अपना है।

इकाई की उपलब्धियाँ

इकाई का लक्ष्य था निर्णयों और लूपों से निष्पादन के क्रम को नियंत्रित करना सिखाना, और उनकी शुद्धता के बारे में तर्कणा करना: कि हर स्थिति सँभाली जाए, कि हर लूप वही करे जो उसे करना चाहिए, और कि वह समाप्त हो। यह लक्ष्य केवल उन बातों के सहारे पूरा हुआ जिन्हें परिचय ने ज्ञात घोषित किया था: इकाई 3 की शर्तें, इकाई 2 के प्रकार, और पाठ 1.1 का ट्रेस और वैरिएंट। वह प्रोग्राम जो तीन निश्चित चरणों में महत्तम समापवर्तक निकालता था, और डेटा के अनुसार गलत उत्तर देता था या शून्य से भाग देता था, उसकी जगह तीन पंक्तियों के एक लूप ने ले ली, और अब यह सिद्ध किया जा सकता है कि यह लूप सभी अऋणात्मक डेटा के लिए सही है।

निर्णय

पाठ निर्णय ने if कथन सिखाया, हमेशा कर्ली ब्रेस के साथ। उसने दिखाया कि else if की शृंखला में वह पहली शाखा निष्पादित होती है जिसकी शर्त सत्य है, इसलिए हर शाखा की वास्तविक स्थिति उसकी शर्त है, उससे पहले की सभी शर्तों के निषेध के साथ; इसी से क्रम का महत्त्व है, और यह भी कि कोई शाखा बिना किसी चेतावनी के अगम्य रह सकती है। उसने हर निर्णय की शुद्धता की कसौटी स्थापित की: उसकी स्थितियाँ परस्पर अपवर्जी होनी चाहिए (शृंखला का रूप इसकी गारंटी देता है) और सर्वसमावेशी (वे ऐसी हैं यदि शृंखला else पर समाप्त होती है), और उन्हें विनिर्देश की स्थितियों से मेल खाना चाहिए, जिसे हर स्थिति के भीतर और हर सीमा के दोनों ओर परखा जाता है। उसने सशर्त संक्रियक प्रस्तुत किया, ताकि पूरे निर्णय के बिना दो छोटे मानों में से एक चुना जा सके। अंत में उसने enum class और switch प्रस्तुत किए, जिनमें छूटी हुई स्थिति की चेतावनी कंपाइलर देता है।

लूप

पाठ लूप ने while, do और for को एक ही तंत्र के तीन रूपों के रूप में प्रस्तुत किया: while हर चक्कर से पहले अपनी शर्त की गणना करता है और हो सकता है एक भी चक्कर न लगाए; do कम से कम एक चक्कर लगाता है; for अपने हेडर में प्रारंभीकरण, शर्त और वृद्धि को एक साथ रखता है, और उसका नियंत्रण चर केवल लूप के भीतर जीवित रहता है। उसने इनकी तुल्यताएँ सिखाईं, ट्रेस तालिका सिखाई, जिसमें अपनी शर्त से समाप्त होने वाले while में शर्त की k+1k + 1 गणनाएँ होती हैं और kk चक्कर (और do में kk गणनाएँ), और हेडर से चक्करों की गिनती सिखाई, जो एक के अंतर की त्रुटि से बचाती है। उसने break, continue और नेस्टेड लूप जोड़े, जिनका भीतरी बॉडी एक योग जितनी बार निष्पादित होता है: निश्चित सीमाओं के साथ m⋅pm \cdot p, त्रिभुज के साथ n(n+1)/2n(n + 1)/2।

सही लूप की रचना

पाठ सही लूप की रचना ने लूप को डिज़ाइन की वस्तु बना दिया। उसने पैटर्न एकत्र किए (काउंटर, संचायक, अधिकतम और न्यूनतम, सेंटिनल और फ़्लैग), और हर एक को इस बात से परिभाषित किया कि हर चक्कर के बाद उसका चर क्या अर्थ रखता है। उसने निश्चर को परिभाषित किया, एक ऐसा कथन जो हर बार शर्त की गणना के समय सत्य होता है, उसके तीन दायित्वों के साथ: प्रारंभ, संरक्षण और निष्कर्ष, जो असत्य शर्त के साथ मिलकर पश्च-शर्त देता है; और उसे चक्करों की संख्या पर आगमन के रूप में पहचाना। उसने उलटी दिशा में डिज़ाइन करना सिखाया, पश्च-शर्त से निश्चर तक और निश्चर से बॉडी तक। उसने वैरिएंट से समाप्ति को सिद्ध किया, और ऐसे तीन लूप दिखाए जिनमें C++ का अंकगणित उसे अमान्य कर देता है: वास्तविक संख्या वाला लूप जो 1.0 को लाँघ जाता है, अचिह्नित काउंटर जो चक्कर लगाकर लौट आता है, और चिह्नित काउंटर जो ओवरफ़्लो होता है। अंत में उसने डिबगर से पहला परिचय कराया।

संख्यात्मक एल्गोरिदम

पाठ संख्यात्मक एल्गोरिदम ने ऊपर की बातों को चार क्लासिकी एल्गोरिदमों पर लागू किया, जो main के भीतर लिखे गए और सिद्ध किए गए। परीक्षण-विभाजन द्वारा अभाज्यता परीक्षण, इस साध्य के साथ कि n\sqrt{n} तक पहुँचना पर्याप्त है, और शर्त d <= n / d के साथ, जो वहाँ ओवरफ़्लो नहीं होती जहाँ d * d <= n होती है। यूक्लिड का एल्गोरिदम, निश्चर HCF⁡(a,b)=HCF⁡(a0,b0)\operatorname{HCF}(a, b) = \operatorname{HCF}(a_0, b_0) और वैरिएंट bb के साथ, और C++ में उसके दो ख़तरे: ऋणात्मक परिणाम, और शून्य से भाग यदि शर्त की गणना बॉडी के बाद हो। क्रमिक विभाजनों द्वारा आधार परिवर्तन और हॉर्नर नियम, जो हर गुणांक के लिए एक गुणन से बहुपद का मान ज्ञात करता है। और द्विभाजन विधि, जिसकी गारंटी मध्यवर्ती मान प्रमेय देता है, और जिसे एक पूर्णांक काउंटर नियंत्रित करता है जिसके चक्करों की संख्या पहले से गणना की जाती है।