आरओबी बोडेन: हाय, मैं, रोब बोडेन हूँ और के quiz0 के बारे में बात करते हैं. तो, पहला सवाल. इस सवाल कहाँ है आप नंबर कोड की जरूरत बाइनरी बल्ब में 127. अगर तुम चाहते थे, तुम सकता है नियमित रूपांतरण करना दशमलव से द्विआधारी करने के लिए, bi-- या से. लेकिन वह शायद जा रहा है समय की एक बहुत लेने के लिए. मैं आपको लगता है कि समझ सकता है, मतलब है, ठीक है, 1, वहाँ में, 2 वहाँ में है 4 वहाँ में, 8 वहाँ में है. आसान तरीका है, 127 128 शून्य से एक है. यही कारण है कि वाम-पंथी प्रकाश बल्ब 128-बिट है. तो 127 बस सब सच है अन्य प्रकाश बल्ब की, कि वाम-पंथी के बाद प्रकाश बल्ब शून्य से 1. यही कि प्रश्न के लिए है. प्रश्न एक. 3 बिट्स के साथ तो आप कर सकते हैं 8 अलग मूल्यों का प्रतिनिधित्व. क्यों, तो, सबसे बड़ा गैर नकारात्मक 7 आप का प्रतिनिधित्व कर सकते दशमलव पूर्णांक? खैर, अगर हम केवल यह कर सकते हैं 8 अलग मूल्यों का प्रतिनिधित्व, तो क्या हम हो जा रहे हैं का प्रतिनिधित्व 7 के माध्यम से 0 है. 0 से एक मान लेता है. प्रश्न दो. N बिट्स के साथ, कितने अलग मानों आप का प्रतिनिधित्व कर सकते हैं? तो, एन बिट के साथ, आप 2 प्रत्येक बिट के लिए संभव मूल्यों. इसलिए हम 2 संभव मूल्यों के लिए है पहले थोड़ा, 2 संभव मूल्यों दूसरे के लिए, 2 तीसरे के लिए संभव. और तो है कि 2 बार 2 बार 2, और अंततः जवाब n करने के लिए 2 है. प्रश्न तीन. बाइनरी में 0x50 क्या है? तो हेक्साडेसिमल एक बहुत है कि याद बाइनरी को सीधा रूपांतरण. यहाँ तो, हम बस को देखने की जरूरत 5 और स्वतंत्र रूप से 0. तो द्विआधारी में 5 क्या है? 0101, कि 1 बिट और 4 सा है. बाइनरी में 0 क्या है? मुश्किल नहीं. 0000. तो बस उन्हें एक साथ रखा, और कि बाइनरी में पूर्ण संख्या है. 01010000. तुम चाहते थे और अगर तुम सकता है कि वाम-पंथी शून्य दूर ले. यह अप्रासंगिक है. तो फिर वैकल्पिक रूप से, दशमलव में 0x50 क्या है? अगर तुम चाहते थे आप कर रहे हैं, तो आप could-- बाइनरी के साथ अधिक सहज, आपको लगता है कि द्विआधारी जवाब ले सकता है और दशमलव में है कि परिवर्तित. या हम सिर्फ याद सकता है कि हेक्साडेसिमल. 0 तो यह है कि 0 वें स्थान पर है, और 5 प्रथम स्थान पर 16 में है. तो यहाँ, हम करने के लिए 5 बार 16 है पहला, शून्य करने के लिए प्लस 0 बार 16, 80 है. और तुम को देखा तो सवाल का शीर्षक, यह एक की तरह था जो सीएस 80, था इस समस्या का जवाब करने के लिए संकेत. प्रश्न पाँच. हम है, जो इस स्क्रैच स्क्रिप्ट है 4 बार मूंगफली का मक्खन जेली दोहरा. तो कैसे हम सी में कोड कि अब क्या? खैर, हम here-- बोल्ड में हिस्सा है आप को लागू करने के लिए था ही हिस्सा है. इसलिए हम 4 पाशन है कि एक 4 पाश है टाइम्स, printf आईएनजी मूंगफली का मक्खन जेली, नई लाइन के साथ समस्या के लिए पूछता है. प्रश्न छह, एक और स्क्रैच समस्या. हम एक हमेशा के पाश में देख रहे हैं. हम चर मैं कह रहे हैं और फिर 1 से मैं incrementing. अब हम सी में कर रहे हैं कि क्या करना चाहते हैं हम यह कर सकता था कई तरीके. यहाँ हम कोड का क्या हुआ एक समय (सत्य) के रूप में हमेशा के पाश. तो हम बस, चर मैं घोषणा जैसे हम खरोंच में चर मैं था. चर मैं घोषणा, और हमेशा के लिए (सच) है, जबकि हम चर मैं कहता हूँ. Printf% i-- या आप% d इस्तेमाल किया जा सकता था तो. हम चाहते हैं कि चर का कहना है, और तो यह वेतन वृद्धि, मैं ++. प्रश्न सात. अब हम बहुत कुछ ऐसा ही करना चाहते हैं मारियो डॉट ग को समस्या से एक सेट. हम इन हैशटैग मुद्रित करना चाहते हैं, हम एक पांच मुद्रित करना चाहते हैं इन हैश के तीन आयत से. तो कैसे हम ऐसा करने जा रहे हैं? खैर, हम आपको एक पूरी दे कोड का गुच्छा, और आप बस प्रिंट ग्रिड समारोह में भरने के लिए है. तो क्या PrintGrid की तरह दिखता है? वैसे आप अतीत हो चौड़ाई और ऊंचाई. तो हम एक बाहरी है 4 पाश, कि पाशन है इस की पंक्तियों की सब से अधिक हम बाहर प्रिंट करना चाहते हैं कि ग्रिड. तो फिर हम, अंतर-नेस्टेड 4 पाश है कि प्रत्येक स्तंभ के ऊपर मुद्रण है. इसलिए प्रत्येक पंक्ति के लिए, हम के लिए प्रिंट प्रत्येक स्तंभ, एक भी हैश. फिर पंक्ति के अंत में हम प्रिंट एक नई लाइन अगले पंक्ति में जाने के लिए. और कहा कि पूरे ग्रिड के लिए है. प्रश्न आठ. PrintGrid तरह एक समारोह के लिए कहा है एक वापसी एक पक्ष प्रभाव है, लेकिन नहीं मूल्य. गौरव के बारे में बताएं. तो यह तुम्हें याद पर निर्भर करता है एक पक्ष प्रभाव है क्या. खैर, एक वापसी value-- हम PrintGrid नहीं है पता के बाद से, वापसी मान यहीं यह शून्य कहते हैं. शून्य देता है तो कुछ भी वास्तव में कुछ भी वापस नहीं करता है. तो पक्ष प्रभाव क्या है? खैर, एक पक्ष प्रभाव है की तरह बनी रहती है कि कुछ भी समारोह समाप्त होने के बाद कि, अभी लौटे नहीं था और यह सिर्फ आदानों से नहीं था. तो, उदाहरण के लिए, हम कर सकते हैं एक वैश्विक चर बदल जाते हैं. यह एक पक्ष प्रभाव होगा. इस विशेष मामले में, एक बहुत ही महत्वपूर्ण पक्ष प्रभाव स्क्रीन करने के लिए मुद्रण है. इसलिए कि एक पक्ष प्रभाव है कि PrintGrid है. हम स्क्रीन करने के लिए इन बातों को मुद्रित. और आप सोच सकते हैं कि एक पक्ष प्रभाव के रूप में, कुछ है कि बाद कि इस समारोह समाप्त होने के बाद बनी रहती है. उस दायरे से बाहर कुछ है इस समारोह की कि अंततः परिवर्तित किया जा रहा है, स्क्रीन की सामग्री. प्रश्न नौ. , नीचे कार्यक्रम पर विचार जो लाइन नंबरों के लिए के लिए जोड़ दिया गया है चर्चा की खातिर. इस कार्यक्रम में तो हम सिर्फ रहे हैं यह भंडारण, GetString बुला इस चर एस में, और उसके बाद उस चर के मुद्रण. ठीक. रेखा एक वर्तमान है तो यही कारण समझा. # शामिल CS50 डॉट एच. क्यों हम CS50 डॉट ज # शामिल करने की जरूरत है? वैसे तो हम कह रहे हैं समारोह GetString, और GetString परिभाषित किया गया है CS50 पुस्तकालय में. हम नहीं था तो अगर # शामिल CS50 डॉट ज, हम चाहते हैं कि निहित घोषणा मिलेगा GetString समारोह त्रुटि की संकलक से. इसलिए हम library-- शामिल करने की ज़रूरत हम हेडर फाइल को शामिल करने की जरूरत है, वरना संकलक नहीं होगा GetString मौजूद है कि पहचान. लाइन दो मौजूद है क्यों समझाओ. तो मानक कब डॉट एच. यह बिल्कुल वैसा ही है पिछले समस्या के रूप में, बजाय से निपटने के सिवाय GetString, हम printf के बारे में बात कर रहे हैं. हम हम की जरूरत नहीं कहा तो अगर मानक कब डॉट ज शामिल करने के लिए, तो हम सक्षम नहीं होगा printf समारोह का उपयोग करने के लिए, संकलक क्योंकि इसके बारे में पता नहीं होता. Why-- महत्व क्या है की लाइन चार में शून्य? तो यहाँ हम int मुख्य (शून्य) है. वह सिर्फ यह है कि हम कह रहा है किसी भी कमांड लाइन नहीं मिल रहा है मुख्य करने के लिए तर्क. हम int कह सकते हैं कि याद रखें मुख्य पूर्णांक argc स्ट्रिंग argv कोष्ठक. तो यहाँ हम सिर्फ हम कहने के लिए शून्य कहना कमांड लाइन तर्क की अनदेखी कर रहे हैं. वास्तव में, स्मृति के लिए सम्मान के साथ, समझाओ लाइन में क्या GetString छह रिटर्न. GetString के एक ब्लॉक लौट रहा है स्मृति, वर्णों की एक सरणी. यह वास्तव में एक लौट रहा है प्रथम चरित्र के लिए सूचक. एक स्ट्रिंग एक चार सितारा है कि याद रखें. तो पहली के लिए एक संकेत है चरित्र में जो कुछ भी स्ट्रिंग है उपयोगकर्ता कीबोर्ड पर दर्ज किए गए. और कहा कि स्मृति malloced होना होता है, इसलिए कि स्मृति ढेर में है. प्रश्न 13. नीचे कार्यक्रम पर विचार करें. तो यह सब कार्यक्रम कर रही है 10 से विभाजित 1 printf हैैं है. तो संकलित जब और मार डाला, इस कार्यक्रम outputs के 0.0, भले ही 10 से विभाजित 1 0.1 है. तो क्यों यह 0.0 है? खैर, इस वजह से है पूर्णांक विभाजन की. तो 1 एक पूर्णांक 10 एक पूर्णांक है, है. तो 1 से 10, सब कुछ से विभाजित पूर्णांक के रूप में व्यवहार किया जाता है, और सी में, हम पूर्णांक विभाजन करते हैं, हम किसी भी दशमलव बिंदु काटना. तो 1 से 10 तक है विभाजित 0, और फिर हम कोशिश कर रहे हैं इसलिए, एक नाव के रूप में है कि मुद्रित करने के लिए एक नाव के रूप में मुद्रित शून्य 0.0 है. हम 0.0 मिल और यही कारण है. नीचे कार्यक्रम पर विचार करें. अब हम 0.1 मुद्रण कर रहे हैं. तो कोई पूर्णांक विभाजन, हम सिर्फ 0.1 मुद्रण कर रहे हैं लेकिन हम यह मुद्रण कर रहे हैं 28 दशमलव स्थानों के लिए. और हम इस 0.1000, एक पूरी गुच्छा मिल शून्य की, 5 5 5, ब्ला ब्ला ब्ला. यह करता है तो यही कारण है यहां सवाल है बजाय वास्तव में 0.1 की, कि प्रिंट? तो यहाँ कारण अब है बिंदु अस्पष्टता चल. एक नाव केवल 32 बिट्स है कि याद रखें. इसलिए हम केवल एक सीमित संख्या का प्रतिनिधित्व कर सकते हैं की उन 32 से बिंदु मूल्यों चल बिट्स. खैर अंत में असीम नहीं है कई चल बिन्दु मूल्यों, और चल असीम रूप से कई वहाँ 0 और 1 के बीच में बात मान, और हम स्पष्ट रूप से सक्षम हैं उससे भी अधिक मूल्यों का प्रतिनिधित्व. तो हम करने के लिए त्याग करने के लिए है सबसे मूल्यों का प्रतिनिधित्व करने में सक्षम हो. तो 0.1 की तरह एक मूल्य, जाहिरा तौर पर हम चाहते हैं कि वास्तव में प्रतिनिधित्व नहीं कर सकते हैं. तो बजाय 0.1 का प्रतिनिधित्व करने का हम क्या सबसे अच्छा है कि हम इस 0.100000 5 5 का प्रतिनिधित्व कर सकते हैं 5. और कहा कि, बहुत करीब है लेकिन आवेदनों की एक बहुत कुछ के लिए आप के बारे में चिंता करने की ज़रूरत बिंदु अस्पष्टता चल, हम बस का प्रतिनिधित्व नहीं कर सकते हैं क्योंकि सब बिल्कुल अंक चल. प्रश्न 15. नीचे दिए गए कोड पर विचार करें. हम सिर्फ 1 प्लस 1 मुद्रण कर रहे हैं. यहाँ तो कोई चाल है. 1 प्लस 1 से 2 का मूल्यांकन करता है, और तो हम उस मुद्रण कर रहे हैं. यह सिर्फ 2 प्रिंट. प्रश्न 16. अब हम चरित्र मुद्रण कर रहे हैं 1 प्लस चरित्र 1. तो क्यों यह नहीं करता एक ही बात को प्रिंट? खैर चरित्र 1 प्लस चरित्र 1, चरित्र 1 ASCII मूल्य 49 है. तो यह वास्तव में 49 कह प्लस 49, और है अंततः इस 98 मुद्रित करने के लिए जा रहा है. तो यह 2 मुद्रित नहीं करता है. प्रश्न 17. कार्यान्वयन को पूरा करें ऐसे में नीचे के करीब समारोह अगर सच है कि रिटर्न एन भी अगर एन अजीब और झूठी है. यह एक महान उद्देश्य है आधुनिक ऑपरेटर के लिए. इसलिए हम अपने तर्क एन ले, एन मॉड 2 अच्छी तरह से 1, बराबर होती है अगर कि एन विभाजित मतलब है कि 2 द्वारा एक शेष था. 2 n से विभाजित है, एक शेष था कि एन अजीब है, तो हम वापसी सच है कि इसका मतलब है. वरना हम झूठी वापसी. तुम भी 2 बराबरी आधुनिक एन किया जा सकता है शून्य, वरना, झूठी लौटने वापसी सच. नीचे पुनरावर्ती समारोह पर विचार करें. N है तो अगर कम से कम या 1 लौटने के लिए, 1 के बराबर, एन शून्य से 1 की एफ बाकी वापसी एन बार. इसलिए इस समारोह में क्या है? खैर, यह सिर्फ है भाज्य समारोह. यह अच्छी तरह से प्रतिनिधित्व किया है n भाज्य के रूप में. तो अब 19 सवाल है, हम करना चाहते हैं इस पुनरावर्ती समारोह ले. हम यह चलने का बनाना चाहते हैं. तो हम कैसे करते हो? वैसे कर्मचारियों के लिए समाधान, और फिर वहाँ आप कर सकते थे कई तरीके , हम इस पूर्णांक उत्पाद के साथ शुरू 1 के बराबर होती है. और इस पूरे पाश के लिए, हम जा रहे हैं अंत में करने के लिए उत्पाद गुणा किया जाना है पूरी भाज्य के साथ खत्म होता है. पूर्णांक के लिए मैं 2 के बराबर होती है तो, मैं है से भी कम या एन के बराबर, मैं ++. मैं 2 के बराबर होती है क्यों आप सोच हो सकती है. खैर, हम करने के लिए है कि यहाँ याद हमारे आधार मामला सही है सुनिश्चित करें. एन से कम या बराबर है तो अगर 1 के लिए, हम सिर्फ 1 लौट रहे हैं. मैं 2 के बराबर होती है पर यहाँ तो, हम शुरू करते हैं. खैर मैं 1, थे तो the-- या एन पाश के लिए तो 1, थे सब पर अमल नहीं होता. और इसलिए हम सिर्फ होगा 1 है जो बदले उत्पाद,. इसी तरह, अगर एन थे से कुछ भी कम 1-- यह 0, थे अगर नकारात्मक 1, whatever-- हम अभी भी 1 लौटने होगी जो वास्तव में क्या है पुनरावर्ती संस्करण कर रहा है. अब, एन अधिक है 1 से, तो हम जा रहे हैं कम से कम एक करना इस लूप का चलना. तो फिर हम कर रहे हैं, के एन 5 हम कहते हैं उत्पाद टाइम्स क्या करने जा 2 के बराबर होती है. तो अब उत्पाद 2 है. अब हम क्या करने जा रहे हैं उत्पाद गुना 3 बराबर होती है. अब यह 6 है. उत्पाद टाइम्स अब यह 24 है, 4 के बराबर होती है. उत्पाद टाइम्स अब यह 120 है, 5 के बराबर होती है. तो फिर अंत में, हम लौट रहे हैं सही ढंग से 5 भाज्य है जो 120,. प्रश्न 20. यह आपको भरना होगा जहां एक है किसी भी एल्गोरिथ्म के साथ इस तालिका में, हमने देखा है कि कुछ भी, कि इन एल्गोरिथम रन फिट बैठता है कई बार इन उपगामी रन टाइम्स. तो एक एल्गोरिथ्म क्या है कि 1 के ओमेगा, लेकिन एन की बड़ी हे है? तो असीम हो सकता है यहाँ कई जवाब. हम शायद सबसे देखा है कि एक अक्सर बस रैखिक खोज है. सबसे अच्छा मामले में तो परिदृश्य, हम कर रहे हैं आइटम की तलाश में है सूची की शुरुआत और तो 1 कदमों की ओमेगा में, हम जाँच पहली बात, हम अभी तुरंत वापस कि हम मद ​​पाया. सबसे खराब स्थिति में, मद, अंत में है या मद में सभी सूची में नहीं है. इसलिए हम खोज करने के लिए पूरी सूची, सभी एन तत्वों, और यह n के ओ है कि क्यों. तो अब यह है कि दोनों कुछ है n लॉग एन की ओमेगा, और n लॉग एन की बड़ी हे. वैसे सबसे अधिक प्रासंगिक बात हम यहाँ देखा सॉर्ट मर्ज है किया है. इसलिए तरह याद विलय, अंततः थीटा है थीटा परिभाषित किया गया है, जहां एन लॉग एन, की ओमेगा और बड़ी हे दोनों एक ही हैं. दोनों एन लॉग इन करें. ओमेगा कुछ है कि क्या हो रहा है n का, और एन हे चुकता? खैर, फिर वहाँ कई संभावित जवाब. यहाँ हम बुलबुला तरह कहने के लिए होता है. निवेशन प्रकार का भी यहां काम करेगा. कि बुलबुला तरह याद रखें कि अनुकूलन जहां है, आप को मिल रहे हैं अगर पूरी सूची के माध्यम से ऐसा करने के लिए जरूरत के बिना किसी भी स्वैप, तो, ठीक है, हम तुरंत कि वापसी कर सकते हैं सूची के साथ शुरू करने के लिए हल किया गया था. , सबसे अच्छी स्थिति में तो यह n की बस ओमेगा है. यह सिर्फ एक अच्छी तरह से नहीं है के साथ शुरू करने के लिए सूची हल तो हम n हे स्वैप चुकता है. और अंत में, हम चयन प्रकार है एन चुकता लिए, ओमेगा और बड़ा ओ दोनों प्रश्न 21. पूर्णांक अतिप्रवाह क्या है? खैर, फिर से पहले की तरह, हम केवल finitely कई बिट्स एक पूर्णांक प्रतिनिधित्व करने के लिए, इसलिए हो सकता है 32 बिट. हम एक हस्ताक्षरित पूर्णांक है कहते हैं. तो अंततः उच्चतम सकारात्मक संख्या हम प्रतिनिधित्व कर सकते हैं है 2-31 शून्य से 1. हम करने की कोशिश तो क्या होता फिर उस पूर्णांक वेतन वृद्धि? खैर, हम 2-31 जाने के लिए जा रहे हैं शून्य से 1, नीचे नकारात्मक 2 के लिए सभी तरह 31. तो इस पूर्णांक अतिप्रवाह है आप incrementing रखने के लिए, और अंत में तुम नहीं कर सकते किसी भी अधिक है और यह सिर्फ मिल सभी तरह वापस लपेटता एक नकारात्मक मूल्य को चारों ओर. एक बफर अतिप्रवाह के बारे में क्या? तो एक बफर overflow-- एक बफर है क्या याद है. यह स्मृति का सिर्फ एक हिस्सा है. एक सरणी कुछ ऐसा ही एक बफर है. तो एक बफर अतिप्रवाह जब है आप स्मृति का उपयोग करने की कोशिश कि सरणी के अंत से परे. अगर आपके पास एक तो आकार 5 और आप की सरणी सरणी ब्रैकेट तक पहुँचने का प्रयास 5 या ब्रैकेट 6 या ब्रैकेट 7, परे या कुछ भी अंत, या यहां तक ​​कि कुछ भी below-- सरणी ब्रैकेट नकारात्मक 1-- उन सभी के बफर overflows हैं. आप बुरा मायनों में स्मृति छू रहे हैं. प्रश्न 23. आप की जरूरत है इस एक में तो strlen लागू करने के लिए. और हम आप कर सकते हैं कि आपको बता एस शून्य नहीं होगा मान, तो आप के लिए नहीं है अशक्त के लिए किसी भी जांच करते हैं. और कई तरीके हैं आप यह कर सकता था. यहाँ हम सिर्फ सीधा ले. हम n, एक काउंटर के साथ शुरू करते हैं. n है वहाँ कितने वर्ण गिनती. तो हम हम तो 0 में शुरू, और पूरी सूची से पुनरावृति. के बराबर है ब्रैकेट 0 अशक्त टर्मिनेटर चरित्र? हम देख रहे हैं याद रखें अशक्त टर्मिनेटर चरित्र हमारे स्ट्रिंग है कितनी देर तक यह निर्धारित करने के लिए. यही समाप्त करने के लिए जा रहा है किसी भी प्रासंगिक स्ट्रिंग. तो चलो ब्रैकेट बराबर 0 है अशक्त टर्मिनेटर के लिए? यदि ऐसा नहीं है, तो हम करने जा रहे हैं एस ब्रैकेट 1, एस ब्रैकेट 2 पर दिखेगा. हम जब तक जा रहा रखने अशक्त टर्मिनेटर लगता है. हम यह पाया है एक बार, तो पता होता है स्ट्रिंग की कुल लंबाई, और हम सिर्फ इतना है कि वापसी कर सकते हैं. प्रश्न 24. तो यह एक है जहाँ आप व्यापार बंद कर दिया है. तो एक बात एक में अच्छा है , लेकिन किस तरह से जिस तरह से यह बुरा है? तो यहाँ, मर्ज तरह की आदत बुलबुला तरह से तेजी से हो. वहाँ, अच्छी तरह से that-- कर कहा कई जवाब यहाँ हैं. लेकिन मुख्य एक है कि बुलबुला तरह है एक सॉर्ट की गई सूची के लिए एन के ओमेगा है. हम सिर्फ पहले देखा कि टेबल याद रखें. तो बुलबुले की ओमेगा प्रकार एन, बेहतरीन परिदृश्य यह बस पर जाने के लिए सक्षम है सूची में एक बार, निर्धारित अरे यह बात पहले से ही है हल है, और वापसी. कोई बात नहीं, की तरह मिलाएं क्या यदि आप करते, एन लॉग एन की ओमेगा है. सॉर्ट की गई सूची के लिए, बुलबुला तो क्रमबद्ध तेजी से होने जा रहा है. अब सूचियों के बारे में क्या जुड़ा हुआ? तो एक लिंक सूची बढ़ने और सिकुड़ कर सकते हैं जरूरत के रूप में के रूप में कई तत्वों फिट करने के लिए. इसलिए that-- कर कहा आमतौर पर प्रत्यक्ष तुलना एक लिंक होने जा रहा है एक सरणी के साथ सूची. तो भी सरणियों सकता है आसानी से आगे बढ़ने और हटना के रूप में कई तत्वों फिट करने के लिए जरूरत के रूप में, एक सूची लिंक्ड एक array-- एक की तुलना सरणी यादृच्छिक पहुँच गया है. हम किसी में सूचकांक कर सकते हैं सरणी के विशेष तत्व. तो एक लिंक की गई सूची के लिए, हम नहीं कर सकते अभी पांचवें तत्व में जाना है, हम शुरू से पार करने के लिए है हम पांचवें तत्व को मिलता है जब तक. और उस से हमें रोकने के लिए जा रहा है द्विआधारी खोज की तरह कुछ कर रही है. द्विआधारी खोज की बात हो रही है, द्विआधारी खोज रैखिक खोज से अधिक तेजी से हो जाता है. That-- कर कहा इसलिए, एक संभव बात आप द्विआधारी ऐसा नहीं कर सकते है लिंक सूचियों पर खोज, आप केवल सरणियों पर यह कर सकते हैं. लेकिन शायद अधिक महत्वपूर्ण बात, आप द्विआधारी खोज नहीं कर सकते हल नहीं है कि एक सरणी पर. अग्रिम आप से सुलझाने की आवश्यकता हो सकती है सरणी, और उसके बाद ही कर सकते हैं आप द्विआधारी खोज करते हैं. अपनी बात नहीं है तो अगर साथ शुरू करने के लिए हल, तो रैखिक खोज तेजी से हो सकता है. प्रश्न 27. तो नीचे कार्यक्रम पर विचार, जो अगली स्लाइड में हो जाएगा. और यह हम कर रहे हैं, जहां से एक है स्पष्ट रूप से राज्य के लिए चाहते हो जा विभिन्न चर के लिए मान. तो चलो कि देखो. तो एक लाइन. हम int एक्स 1 के बराबर होती है. यही हुआ है कि केवल एक चीज है. तो लाइन से एक में, हम में देखना हमारे मेज, कि वाई, ए, बी, और TMP सभी कर रहे हैं बेहोश हो. तो एक्स क्या है? खैर, हम सिर्फ यह 1 के बराबर निर्धारित किया है. और फिर, ठीक है, दो लाइन हम, वाई 2 के लिए सेट कर दिया जाता है कि देखने और तालिका में पहले से ही है हमारे लिए भरे गए. तो एक्स 1 और वाई 2 है. अब, लाइन तीन, हम अब कर रहे हैं स्वैप समारोह के अंदर. क्या हम स्वैप करने के लिए पारित किया था? हम के लिए एम्परसेंड एक्स पारित किया ख के लिए एक, और एम्परसेंड Y. जहां समस्या पहले कहा गया है कि एक्स के पते 0x10 है, और Y के पते 0x14 है. तो ए और बी के बराबर हैं क्रमशः 0x10 और 0x14,. अब लाइन तीन पर, एक्स और वाई में क्या कर रहे हैं? खैर, कुछ भी नहीं बदला गया है इस बिंदु पर एक्स और वाई के बारे में. यहां तक ​​कि वे कर रहे हैं, हालांकि एक मुख्य ढेर फ्रेम के अंदर, वे अभी भी एक ही है मानों वे पहले किया था. हम किसी भी स्मृति संशोधित नहीं किया है. तो एक्स 1 है, वाई 2 है. ठीक है. तो अब हम एक स्टार के बराबर पूर्णांक tmp कहा. तो लाइन चार, सब कुछ पर tmp के अलावा एक ही है. हम किसी भी मूल्यों को बदल नहीं है tmp के अलावा कुछ भी की. हम एक स्टार के बराबर tmp स्थापित कर रहे हैं. सितारा एक क्या है? खैर, एक अंक एक्स के लिए, तो एक स्टार 1 है जो बराबर एक्स, करने जा रहा है. इतना सब कुछ नकल की है नीचे, और TMP 1 पर सेट है. अब अगली पंक्ति. स्टार एक सितारा बी के बराबर होती है. तो रेखा ने five-- अच्छी तरह से फिर से, सब कुछ सितारा एक है जो कुछ छोड़कर एक ही है. सितारा एक क्या है? खैर, हम सिर्फ स्टार एक एक्स है. इसलिए हम बराबर सितारा बी को एक्स बदल रहे हैं. स्टार ख क्या है? Y. Y ख अंक. तो स्टार ख y है. तो हम, वाई के लिए एक्स बराबर स्थापित कर रहे हैं और बाकी सब वही है. X अब इतना है कि हम अगली पंक्ति में देखना 2, और बाकी तो बस नीचे नकल कर रहे हैं. अब अगली पंक्ति में, सितारा बी tmp के बराबर होती है. खैर, हम सिर्फ स्टार ख y है ने कहा, इसलिए हम tmp वाई बराबर स्थापित कर रहे हैं. बाकी सब कुछ एक ही है, इतना सब कुछ नीचे की नकल की जाती है. हम है, जो tmp के बराबर Y स्थापित कर रहे हैं वरना एक, और सब कुछ वैसा ही है. अब अंत में, लाइन सात. हम वापस मुख्य समारोह में कर रहे हैं. स्वैप समाप्त होने के बाद हम कर रहे हैं. हम एक, ख खो दिया है, और है tmp, लेकिन हम अंततः कोई भी मान नहीं बदल रहे हैं इस बिंदु पर कुछ भी की, हम सिर्फ एक्स और वाई लिख लें. और हम एक्स और वाई देखते हैं कि अब 2 और 1 के बजाय 1 और 2. स्वैप सफलतापूर्वक क्रियान्वित किया गया है. प्रश्न 28. तुम मुठभेड़ कि मान लीजिए त्रुटि संदेश कार्यालय समय के दौरान नीचे एक सीए या TF के रूप में अगले साल. इन त्रुटियों में से प्रत्येक को ठीक करने की सलाह कैसे. GetString को तो अपरिभाषित संदर्भ. आप यह क्यों देख सकते हैं? खैर, एक छात्र उपयोग कर रहा है अपने कोड में GetString, वे ठीक से CS50 शामिल हैश है डॉट एच CS50 पुस्तकालय में शामिल करने के लिए. खैर, वे क्या करते हैं इस त्रुटि को ठीक करने की जरूरत है? वे पर एक पानी का छींटा lcs50 करने की ज़रूरत है वे संकलन कर रहे हैं जब कमांड लाइन. वे पास नहीं है तो बजना पानी का छींटा lcs50, वे कर रहे हैं वास्तविक है नहीं जा GetString लागू करता है कि कोड. प्रश्न 29. परोक्ष घोषित पुस्तकालय समारोह strlen. वैसे यह अब, वे नहीं है उचित हैश किया शामिल हैं. इस विशेष मामले में, शीर्ष फाइल वे, स्ट्रिंग डॉट ज रहा है को शामिल करने की जरूरत है और अब स्ट्रिंग डॉट ज सहित अब student-- संकलक तक पहुँच गया है strlen की घोषणाओं, और यह जानता है कि अपने कोड कि सही ढंग से strlen उपयोग कर रहा है. प्रश्न 30. अधिक प्रतिशत रूपांतरण डेटा तर्कों से. तो यह क्या है? वैसे इन प्रतिशत याद है कि वे printf के लिए प्रासंगिक हो कैसे signs--. तो printf में हम percent-- सकता है हम कुछ प्रिंट हो सकता है प्रतिशत की तरह मैं n बैकस्लैश. या फिर हम, प्रतिशत मैं जैसे प्रिंट हो सकता है अंतरिक्ष, प्रतिशत मैं, अंतरिक्ष, प्रतिशत मैं. उन में से प्रत्येक के लिए तो प्रतिशत के संकेत, हम की जरूरत है printf के अंत में एक चर पारित करने के लिए. तो हम कहते हैं कि अगर printf कोष्ठक प्रतिशत मैं, एन करीब कोष्ठक बैकस्लैश खैर, हम हम कर रहे हैं का कहना है कि एक पूर्णांक मुद्रित करने के लिए जा रहा है, लेकिन फिर हम printf पास नहीं है एक पूर्णांक वास्तव में मुद्रित करने के लिए. तो यहाँ अधिक प्रतिशत डेटा तर्कों से रूपांतरण? यही है कि हम कह रहा है percents की एक पूरी गुच्छा, और हम काफी चर नहीं है वास्तव में उन percents में भरने के लिए. और फिर निश्चित रूप से, प्रश्न 31 के लिए, निश्चित रूप से एक ब्लॉक में 40 बाइट्स खो दिया है. तो यह एक वेलग्रिंड त्रुटि है. यह कह रहा है कि कहीं अपने कोड में, आप 40 है कि एक आवंटन है बाइट्स बड़े तो आप 40 बाइट्स malloced और आप इसे मुक्त कर दिया कभी नहीं. आप बस जरूरत सबसे अधिक संभावना है कुछ स्मृति रिसाव लगता है, और आप की जरूरत है, जहां लगता है स्मृति के इस ब्लॉक को मुक्त. और, 32 सवाल आकार 4 से अवैध लिखना. फिर यह एक वेलग्रिंड त्रुटि है. यह सब करने की जरूरत नहीं है अब स्मृति लीक के साथ. यह मेरा मतलब likely-- सबसे अधिक है, यह है, है अवैध स्मृति अधिकार किसी प्रकार का. और सबसे अधिक संभावना यह है कुछ बफर अतिप्रवाह की तरह. तुम कहाँ हो सकता है, एक सरणी है एक पूर्णांक सरणी, और चलो यह आकार 5 से कहते हैं, और आप सरणी ब्रैकेट 5 छूने की कोशिश. आपको लगता है कि करने के लिए लिखने की कोशिश तो अगर मूल्य, कि स्मृति का एक टुकड़ा नहीं है आप वास्तव में करने के लिए उपयोग किया है, और कहा कि तो आप इस त्रुटि को ले जा रहे हैं, आकार 4 से अवैध लिखने कह. वेलग्रिंड आप कर रहे हैं पहचान करने के लिए जा रहा है अनुपयुक्त स्मृति को छूने की कोशिश कर रहा. और वह quiz0 के लिए है. मैं रोब बोडेन हूँ, और इस CS50 है.