डेविड जे मालन: इस CS50 है और इस सप्ताह चार की शुरुआत है। और, लड़का, वोक्सवैगन में है सभी क्योंकि सॉफ्टवेयर की मुसीबत। हमें एक नज़र रखना। [वीडियो प्लेबैक] -Cars, होशियार पात्रों फास्ट एंड द फ्यूरियस फिल्मों में। इस हफ्ते जर्मन automaker वोक्सवैगन ही पाया के एक घोटाले के बीच में संभावित आपराधिक अनुपात। -Volkswagen अरबों के लिए हौसला पैदा कर रहा है जुर्माने के रूप में, संभव आपराधिक आरोप अपने अधिकारियों के लिए, के रूप में कंपनी से माफी मांगी 11 लाख कारों हेराफेरी के लिए यह उत्सर्जन परीक्षण हरा में मदद। -Certain डीजल मॉडल थे अत्याधुनिक सॉफ्टवेयर के साथ डिजाइन कि सहित जानकारी का उपयोग किया स्टीयरिंग और वाहन की स्थिति गाड़ी थी निर्धारित करने के लिए तेजी लाने के उत्सर्जन परीक्षण के दौर से गुजर। कि हालात के तहत, इंजन जहरीले उत्सर्जन को कम करेगा। लेकिन कार बाईपास से धांधली की गई थी कि इसे संचालित किया जा रहा था जब। उत्सर्जन 10-40 वृद्धि हुई स्वीकार्य ईपीए के स्तर से ऊपर गुना। [अंत प्लेबैक] डेविड जे मालन: तो चलो इस पर एक नज़र डालें और वास्तव में कैसे यह देखना लागू किया जा सकता है और यह कैसे प्रभावित कर सकता इस तरह से कई कारें। तो मेरे हाथ में यहां प्रेस कर रहे हैं कि EPA-- द्वारा जारी किया गया था रिलीज पर्यावरण संरक्षण एजेंसी है जो अमेरिकी नियामक एजेंसी है कि पर्यावरण संबंधी चिंताओं को संभालती है, और फिर वास्तविक था कि कानूनी नोटिस बस कुछ ही दिनों पहले वोक्सवैगन के लिए भेज देते हैं। तो ईपीए लिखते हैं, और अब खुलासा सार्वजनिक रूप से, एक अत्याधुनिक सॉफ्टवेयर कुछ पर एल्गोरिथ्म वोक्सवैगन वाहनों का पता लगाता है जब कार के दौर से गुजर रहा है आधिकारिक उत्सर्जन परीक्षण और पूर्ण उत्सर्जन बदल जाता है केवल परीक्षण के दौरान पर नियंत्रित करता है। की प्रभावशीलता इन वाहनों के प्रदूषण उत्सर्जन नियंत्रण उपकरणों के बहुत है सभी सामान्य ड्राइविंग के दौरान कम स्थितियों। यह पूरा करने वाले कारों में परिणाम प्रयोगशाला या परीक्षण में मानकों स्टेशन है, लेकिन सामान्य ऑपरेशन के दौरान नाइट्रोजन oxides-- या NOx-- फेंकना पर ऊपर से 40 बार मानक। वोक्सवैगन द्वारा उत्पादित सॉफ्टवेयर एक बोली गंदें शब्द बोलना, हार डिवाइस है, स्वच्छ द्वारा परिभाषित के रूप में अमेरिका में वायु अधिनियम। वे कहते हैं कि कहने पर चलते हैं ईपीए और एक अन्य एजेंसी हार डिवाइस का पर्दाफाश स्वतंत्र विश्लेषण के बाद सॉफ्टवेयर पश्चिम में शोधकर्ताओं द्वारा वर्जीनिया विश्वविद्यालय। NOx प्रदूषण के लिए योगदान नाइट्रोजन डाइऑक्साइड, जमीनी स्तर ओजोन, और ठीक बात कण। इन करने के लिए एक्सपोजर प्रदूषण से जोड़ा गया है की एक विस्तृत श्रृंखला के साथ गंभीर स्वास्थ्य प्रभाव, बढ़ी हुई अस्थमा सहित हमलों और अन्य सांस काफी गंभीर हो सकता है कि बीमारियों अस्पताल के लिए लोगों को भेजने के लिए। ओजोन के लिए एक्सपोजर और बात कण भी है समय से पहले साथ संबद्ध किया गया संबंधित सांस की वजह से मौत या हृदय प्रभाव से संबंधित है। बच्चे, बुजुर्ग, साथ लोगों को पहले से मौजूद सांस की बीमारी विशेष रूप से के लिए खतरा हैं इन प्रदूषकों के स्वास्थ्य के प्रभाव। इतना ही यह काफी गंभीर है, कहने के लिए है। और चलो पढ़ने के लिए पर चलते हैं सिर्फ एक और अंश और फिर हम पर एक नज़र रखना होगा अंतर्निहित निहितार्थ एक कार के संदर्भ में इस बात का। विशेष रूप से, वोक्सवैगन निर्मित और स्थापित तथाकथित में सॉफ्टवेयर इलेक्ट्रॉनिक नियंत्रण module-- या ECM-- की लगा कि इन वाहनों वाहन के लिए परीक्षण किया जा रहा था, जब ईपीए उत्सर्जन मानकों के अनुपालन। सहित विभिन्न सूचनाओं के आधार पर स्टीयरिंग व्हील की स्थिति, वाहन गति, इंजन की की अवधि आपरेशन, और बैरोमीटर का दबाव, इन सूचनाओं ठीक मानकों को नज़र रखी के लिए इस्तेमाल किया संघीय परीक्षण प्रक्रिया की ईपीए प्रमाण पत्र के लिए उत्सर्जन परीक्षण प्रयोजनों। ईपीए के उत्सर्जन परीक्षण के दौरान, वाहनों ईसीएम सॉफ्टवेयर उत्पादन किया जो सॉफ्टवेयर भागा शिकायत के उत्सर्जन का परिणाम है। सभी अन्य समय में, वाहन ईसीएम सॉफ्टवेयर एक अलग सड़क भागा जो कम अंशांकन की प्रभावशीलता समग्र उत्सर्जन नियंत्रण प्रणाली, विशेष रूप से चयनात्मक उत्प्रेरक झुक NOx की कमी trap-- जो हम एक पल में के बारे में देखेंगे। NOx का एक परिणाम के रूप में, उत्सर्जन 10 से 40 बार के एक पहलू की वृद्धि ईपीए के अनुरूप स्तर से ऊपर ड्राइव चक्र के प्रकार पर निर्भर करता है। यह वास्तव में मतलब है, और तो क्या हुआ सॉफ्टवेयर चलाने के लिए स्रोत कोड वोक्सवैगन पर नहीं है अभी तक सार्वजनिक रूप से खुलासा किया गया कि, प्रभावी ढंग से, यह है बराबर के अंदर कहीं है वोक्सवैगन कोड की। अगर आप परीक्षण किया है, और किया जा रहा है कार है, तो कुछ पर्यावरणीय कारकों का पता लगाता है स्टीयरिंग व्हील की तरह स्थिति या आंदोलन या कमी है कार की या उसके अन्य कारकों के किसी भी संख्या कि वर्तमान में धारणा कर रहे हैं इस सूत्र का हिस्सा बनने के लिए, वे बस मोड़ पर है | पूर्ण उत्सर्जन नियंत्रित करते हैं। दूसरे शब्दों में, वे शुरू प्रदूषण का कम उत्सर्जन। वरना, हर दूसरे स्थिति में यह जा रहा है के रूप में पहचान नहीं है जब प्रयोगशाला में, वे बस नहीं है। और तो आप और अधिक में इस सरल कर सकते हैं कुछ के साथ ठोस स्यूडोकोड इस तरह। पहियों मोड़ रहे हैं लेकिन अगर स्टीयरिंग व्हील, विचारोत्तेजक नहीं है कार से कुछ पर है कि घूर्णन सिलेंडर की तरह लेकिन किसी तरह का में गोदाम का परीक्षण किया जा रहा है, तब के रूप में व्यवहार ईपीए आप करना चाहते हैं। अन्यथा नहीं है। तो चलो एक नजर डालते हैं एक लघु वीडियो पर कि क्या निहितार्थ को देख लेता है वास्तव में यंत्रवत् इस के हैं। [वीडियो प्लेबैक] शुक्रवार -पिछले ईपीए ने घोषणा की है कि कुछ वोक्सवैगन ऑडी कारों 2009 के बीच किए गए और इस साल का उपयोग कर रहे थे एक तथाकथित हार डिवाइस उत्सर्जन कानूनों निजात पाने के लिए हवा को साफ रखने के लिए बनाया गया है। लेकिन यह है कि वास्तव में क्या मतलब है? खैर, आधुनिक कारों दर्जनों है उन्हें अंदर कंप्यूटरों की। और उन कंप्यूटरों के कुछ कार्यों के समन्वय में मदद इष्टतम के लिए इंजन की प्रदर्शन सुनिश्चित कर रही है, जबकि बहुत ज्यादा कचरा नहीं है कि निकास पाइप से बाहर आ रहा है। वे वास्तव में काम कर रहा है अब कई दशकों के लिए इस तरह से। असल में, हर हिस्से एक आधुनिक कार के इंजन की एक संवेदक या नियंत्रक है यह, और इन कंप्यूटरों पर डेटा के हजारों की संख्या में पढ़ रहे हैं दूसरी समायोजन करने के प्रति बार हवा के लिए ईंधन के अनुपात की तरह कि सिलेंडरों में जा रहा है। ये धोखा दे वोक्सवैगन और ऑडी मॉडल डीजल, कर रहे हैं और डीजल एक और है वास्तव में महत्वपूर्ण कंप्यूटर है जो नियंत्रित मापदंडों जा रहा बिना जली ईंधन की राशि निकास में। अब जब कि बुरा लग रहा है। आप चाहेंगे की तरह बात नहीं करता है निकास में जाने बिना जली ईंधन। लेकिन एक के मामले में डीजल, आप कुछ है एक युक्ति है जो एक NOx जाल कहा जाता है कि अवशोषण और नाइट्रोजन आक्साइड के लिए जाल प्रदूषण कि होता हैं कि अन्यथा वातावरण में चलते हैं। और कहा कि NOx जाल का असर बिना जली ईंधन के साथ बढ़ाया है। तो एक हार के इस उपकरण में एक विशेष कार्यक्रम है इन कंप्यूटरों के अंदर है कि यह कर सकते हैं कार उत्सर्जन को पूरा करती है की तरह लग रहे मानकों यह नहीं करता है, तब भी जब। वोक्सवैगन अपने हाथों पर एक समस्या थी। अपने डीजल इंजन में जाने जाते थे महान ईंधन अर्थव्यवस्था प्राप्त करने के लिए, लेकिन NOx जाल केवल अच्छी तरह से काम करता है अधिक ईंधन का इस्तेमाल किया जा रहा है। तो कार का पता लगाने जाएगा इस हार के उपकरण का उपयोग कर, यह एक उत्सर्जन हो रही थी जब परीक्षण, इसे और अधिक ईंधन का प्रयोग करेंगे, अच्छी तरह से NOx जाल काम करना, उत्सर्जन ठीक हो जाएगा। लेकिन फिर आप सड़क पर उपकरण प्राप्त बंद हो जाती है, तो आप कम ईंधन जल रहे हैं लेकिन आप के रूप में ज्यादा के रूप में 40 बार डाल रहे हैं वातावरण में अधिक प्रदूषण। लेकिन बिल्ली कैसे किया कार यह था कि पता उत्सर्जन अनुपालन के लिए परीक्षण किया जा रहा है? ईपीए यह एक परिष्कृत था कहते हैं चीजों की जाँच की है कि सिस्टम स्टीयरिंग व्हील स्थिति की तरह है, गति, इंजन पर था, कब तक और यहां तक ​​कि वायुमंडलीय दबाव। दूसरे शब्दों में, वहाँ था कोई रास्ता नहीं इस आकस्मिक था सॉफ्टवेयर था क्योंकि पता लगाने के लिए बहुत सावधानी से तैयार एक अधिकारी के उत्सर्जन परीक्षण। यही कारण है कि कुछ बहुत गंभीर है धोखे और है कि क्यों वोक्सवैगन में है इस तरह के गंभीर संकट। वास्तव में, उनके सीईओ मार्टिन Winterkorn, बस नीचे कदम रखा। तो आगे क्या होता है? वैसे आप डेढ़ लाख से एक रहे हैं, यदि डीजल Jettas, बीटल्स, golfs, Passats, या ऑडी A3s, प्रभावित अच्छी खबर यह है कि आपकी कार अभी भी ड्राइव करने के लिए सुरक्षित है। आप इसे दूर रखा करने की जरूरत नहीं है वोक्सवैगन एक याद जारी करता है जब तक। लेकिन कुछ बिंदु पर वे कर रहे हैं शायद लिए किया जा रहा अपनी कार के अंदर सॉफ्टवेयर को अपडेट करने के लिए। जब ऐसा होता है तुम हो सकता है टैंक प्रति कम मील मिलता है। वकीलों पहले से ही कमर कस रहे हैं क्लास एक्शन मुकदमों के लिए साइन अप इसलिए मालिकों को मुआवजा मिल सकता है भविष्य में कुछ बिंदु पर। लेकिन यह है कि करने के लिए नहीं जा रहा है जल्द ही किसी भी समय होता है। [अंत प्लेबैक] डेविड जे मालन: तो यह वास्तव में उठाती है एक दिलचस्प बड़ी तस्वीर सवाल के रूप में विश्वास करने के लिए। है ना? हम सब आईफ़ोन या Androids है या हमारी जेब में कुछ सबसे अधिक संभावना इन दिनों, या लैपटॉप कर रहे हैं कि हमारी गोद पर बना चल सॉफ्टवेयर एप्पल और माइक्रोसॉफ्ट द्वारा अन्य कंपनियों के गुच्छों। लेकिन हम कैसे जानते हैं कि क्या करना है इन सॉफ्टवेयर उत्पादों कर रहे हैं क्या ये वास्तव में है कंपनियों के लिए वे क्या कर रहे हैं कहते हैं? उदाहरण के लिए, जो करने के लिए है का कहना है कि हर बार जब आप अपने iPhone पर एक फोन करना या एंड्रॉयड फोन या की तरह, उस फोन नंबर भी नहीं है कि कुछ कंपनी के सर्वर पर अपलोड किया जा रहा कुछ कार्यक्रम की आप है क्योंकि यह ऑपरेटिंग है, चाहे लिखित आईओएस या एंड्रॉयड प्रणाली की तरह ही है, या आप डाउनलोड की है क्योंकि कुछ तीसरे पक्ष के अनुप्रयोग किसी भी तरह सुन रहा है सब कुछ करने के लिए आप लिख रहे हैं या सब कुछ आप वास्तव में कह रहे हैं। आप जानते हैं कि कैसे, कब तुम लोगों को बजना चल रहे हैं या संकलन करने के लिए सुनिश्चित करें कि आपकी CS50, कैसे में अपने सॉफ्टवेयर आपको लगता है कि CS50 के अपने स्टाफ करते हैं, CS50 पुस्तकालय के माध्यम से, हर प्रवेश करने नहीं किया गया है यदि आप कभी भी मिल गया है स्ट्रिंग या हर आप कभी भी मिल गया इंच? ठीक है, तुम निश्चित रूप से लग सकता है कुछ के लिए स्रोत कोड पर CS50 पुस्तकालय की तरह, तुम स्रोत कोड पर लग सकता है लिनक्स ऑपरेटिंग सिस्टम के लिए CS50 आईडीई पर चल रहा है। लेकिन एक अद्भुत प्रस्तुति 1984 में वापस दे दिया गया था एक से ट्यूरिंग पुरस्कार की प्राप्ति में नाम से जाना बहुत प्रसिद्ध कंप्यूटर वैज्ञानिक नामित केन थॉम्पसन as-- कौन ट्यूरिंग पुरस्कार प्राप्त किया, जो कंप्यूटर विज्ञान की की तरह है नोबेल पुरस्कार, अगर तुम जाएगा, एक पर अपने काम के लिए ऑपरेटिंग सिस्टम कहा जाता में बहुत समान है, जो यूनिक्स, हम जो उपयोग करने के लिए क्या भावना लिनक्स है। और सवाल यह है कि वह में पूछा, उसके अनिवार्य रूप से स्वीकृति भाषण, के लिए ढांचे के नीचे बिछाने साल और चर्चा का वर्ष विश्वास और सुरक्षा के बारे में, इस थी। किस हद तक होना चाहिए एक ट्रस्ट एक करने के लिए एक एक टुकड़ा program-- उस बयान के software-- ट्रोजन घोड़े से मुक्त है? शायद यह विश्वास करने के लिए और अधिक महत्वपूर्ण है सॉफ्टवेयर लिखा है जो लोगों को। और वास्तव में, हम जुड़ा हुआ है बात करने के लिए कि वह यह पुरस्कार स्वीकार करते समय दिया CS50 की वेबसाइट पर 80 के दशक में आज के लिए व्याख्यान पेज के नीचे। आप क्या देखेंगे क्योंकि वह वास्तव में देता है कैसे भी की एक काफी सरल उदाहरण बजना या जो कुछ भी तरह एक संकलक दूसरों अतीत में इस्तेमाल किया compilers, संकलक हम में एम्बेडेड है, तो क्या अपने आप को अगर थोड़ा है प्रयोग कर रहे हैं अनिवार्य रूप से कहते हैं कि हालत, आप इस कोड का उपयोग कर रहा है कि नोटिस GetString समारोह या GetInt समारोह, आगे बढ़ो और सम्मिलित एक पीछे के दरवाजे या एक ट्रोजन घोड़ा ऐसी है कि लगता है कि कार्यक्रम अब कुछ शून्य है और दुर्भावनापूर्ण कुछ करना है कि लोगों को। के सभी प्रवेश अपने कि डेटा अपलोड कीस्ट्रोक्स, कुछ सर्वर, या वास्तव में कुछ भी करने के लिए। और क्या केन थॉम्पसन उसकी बात में क्या करने के लिए पर चला जाता है यहां तक ​​कि अगर प्रदर्शन है आप स्रोत का उपयोग किया है एक संकलक का कोड है कि दुर्भावनापूर्ण रूप से, यह क्या कर रही हो सकता है इसकी वजह यह कोई फर्क नहीं पड़ता इस चिकन और अंडे भी नहीं है पिछले कई की वास्तविकता वर्ष जिससे compilers खुद को संकलित करने के लिए इस्तेमाल कर रहे हैं। दूसरे शब्दों में, जिस तरह से वापस जब कोई पहले संकलक लिखा है था। और उसके बाद, किसी भी समय वे नवीनीकृत किया है इसके स्रोत कोड को बदलकर एक संकलक, सुविधाओं को जोड़ने और इसे फिर कंपाइल हमारे जैसे लोगों का उपयोग करने के लिए, ठीक है, वे पुराने का उपयोग कर रहे हैं संकलक के संस्करण नए संकलन करने के लिए संकलक के संस्करण। और अगर आप एक बार देख ले, तो वह दे दिया है कि बात में, आप क्योंकि देखेंगे कि कि घेरा की, आप वास्तव में कीड़े हो सकता है या ट्रोजन घोड़े सॉफ्टवेयर में एम्बेडेड हम प्रयोग कर रहे हैं। और अपने आप को देखो, भले ही उन कार्यक्रमों के लिए स्रोत कोड, यह भी स्पष्ट नहीं हो सकता है प्रवंचना वास्तव में है क्योंकि एक के कुछ पुराने संस्करण में कभी के बाद से किया गया है कि संकलक हमारे सॉफ्टवेयर में खतरा इंजेक्शन। जो केवल हम कहने के लिए वास्तव में नहीं कर सकते हैं और नहीं करना चाहिए विश्वास सॉफ्टवेयर हमारे लैपटॉप पर चल रहा है फोन या स्थानों के किसी भी नंबर या। और वास्तव में, बाद में जब इस सेमेस्टर में हम वेब प्रोग्रामिंग के बारे में बात शुरू और वास्तव में निर्माण शुरू वेब अनुप्रयोगों खुद को, हम इन के बारे में बात करेंगे धमकियों और अन्य शामिल हैं। अब, तुम सोच रहा है और देखा हो सकता है एक छोटे से डार्थ था कि वहाँ क्लिप में वादेर कि कगार वहाँ दिखा रहा था वोक्सवैगन के बारे में। यदि आप कभी नहीं देखा है, मैं हम हल्का होना चाहिए था मूड यह सब है, क्योंकि बहुत ही निराशाजनक और भयावह। मैं वापस देखने के लिए जा रहा हूँ सुपर बाउल 2011 जब से एक वाणिज्यिक Volkswagen-- और इस लगभग again-- उन्हें आकर्षक बना देता है टीवी पर पहली बार के लिए प्रसारित किया गया। यह 60 सेकंड क्लिप है मैं तुम्हें मजा करेंगे लगता है कि। [वीडियो प्लेबैक] [संगीत - 'स्टार वार्स' से थीम] [कुत्ता भौंकता है] [गाड़ी शुरू होता है] [अंत प्लेबैक] डेविड जे मालन: हाँ। मैं बस देख रहा था। यही कारण है कि कार के उल्लंघन की सूची में है। ठीक है। इसलिए हम कुछ को देखो एक पल पहले pseudocode। और यहाँ एक बड़ा है स्यूडोकोड कोड का टुकड़ा कि हम इस प्रकार अब तक एक बार कुछ देखा है। और चलो यह एक अवसर है का उपयोग करते हैं अब एक नई प्रोग्रामिंग शुरू करने की हमने किया है कि तकनीक एल्गोरिदम देखना पिछले सप्ताह हमने मर्ज तरह से देखा। लेकिन इसका औपचारिक और कैसे देखते हैं हम वास्तविक कोड में इसका इस्तेमाल हो सकता है और फिर हम इस का उपयोग करने के लिए जा रहे हैं सड़क के नीचे तकनीक सबसे कुछ अन्य समस्याओं को हल करने की संभावना है। तो यह पहली कार्यक्रमों में से एक था हम कभी स्यूडोकोड कोड में ही सही, लिखा था। और क्या इस कार्यक्रम हमें पाठ्यक्रम करने की अनुमति दी एक फोन की किताब में माइक स्मिथ मिल गया था। और विशेष रूप से लाइनों आठ में नोटिस और यह जाने का बयान था, जिसमें 11। और वास्तव में, कुछ भाषाओं, उन के बीच सी, वास्तव में एक की क्या ज़रूरत है सचमुच है कि बयान कि करने के लिए आपको अनुमति देता है के लिए जाना एक विशिष्ट लाइन के लिए कूद। यह आम तौर पर क्योंकि पर सिकोड़ी यह बहुत आसानी से दुरुपयोग किया जा सकता और तुम कूद शुरू कर सकते हैं अपने विरोध के रूप में सभी जगह कार्यक्रम एक तरह से उपयोग करने के लिए तर्क और नियंत्रण प्रवाह हम बस के साथ इस प्रकार अब तक का उपयोग किया है कि छोरों और शर्तों और पसंद है। लेकिन हम इस एल्गोरिथ्म सरल कर सकते हैं स्यूडोकोड कोड के रूप में इस प्रकार है। इसके बजाय यह चलने की या दृष्टिकोण पाशन जहां हम वापस जा रहा रखने और पीठ और वापस तीन लाइन के लिए, यही कारण है कि हम सिर्फ एक तरह से बाज़ी और अधिक नहीं है आम तौर पर, लाइन सात और 10 में कहते हैं सिर्फ उन दो की जगह साथ लाइनों के जोड़े, स्मिथ ने पहले है और अगर पुस्तक में हम करेंगे में माइक के लिए खोज किताब के बाईं आधा। स्मिथ में बाद में है और अगर किताब, सही में माइक के लिए खोज आधा किताब। और पहले से ही घेरा नोटिस। है ना? मैं में माइक के लिए खोज कर रहा हूँ फोन की किताब और उसके बाद मैं अंत में शायद मारा लाइन में सात या शायद लाइन 10 और खुद के लिए मेरे निर्देशों खोज है फोन की किताब में से आधे में माइक के लिए। खैर, मैं कैसे माइक के लिए खोज करते हैं? मैं के बीच में हूँ माइक, क्यों के लिए खोज आप की तरह एक सर्कल में मुझे भेज रहे हैं? लेकिन क्या है कि क्योंकि ठीक है समस्या के आकार के लिए हो रहा है, लाइन 7 और 10 में लिखित रूप में? हम सिर्फ खोज नहीं कह रहे हैं माइक के लिए, माइक के लिए खोज। हम विशेष रूप से क्या कह रहे हैं? के बाईं छमाही में उसके लिए खोज प्रभावी ढंग से है जो सही आधा समस्या के आधे आकार। तो यह है कि हम एक तरह से कर रहे हैं, वह ठीक है इस घेरा में आकर्षक, इस परिपत्र तर्क है, कम से कम हम कर रहे हैं, क्योंकि समस्या और छोटे छोटे बना रही है। और अंततः हम तक पहुंचने के लिए जा रहे हैं कि तथाकथित आधार के मामले जहां हम सिर्फ एक पेज है left-- हमारे स्वयंसेवक पिछले सप्ताह के रूप में did-- हम एक पृष्ठ पड़ा फिर छोड़ दिया और हम नहीं करते माइक स्मिथ के लिए खोज कर रख दिया है वह उस पेज पर भी है क्योंकि या वह नहीं है। इसलिए हम इस विचार से, यह कैसे लागू कर सकते वास्तविक कोड में घेरा की तरह? खैर, हम एक तकनीक का लाभ उठाने कर सकते हैं कि आम तौर पर प्रत्यावर्तन के रूप में जाना जाता है। और हम में यह देखा है मर्ज प्रकार के लिए स्यूडोकोड पिछले सप्ताह। यह था कि स्मरण करो मर्ज प्रकार के लिए स्यूडोकोड। यह यकीनन से भी आसान है बुलबुला या चयन या प्रविष्टि प्रकार सिर्फ सादगी के मामले में जिसके साथ आप यह व्यक्त कर सकते हैं। लेकिन यह है कि क्योंकि है हम तरह चक्राकार की हैं कुछ के लिए खोज, कह रही इसके लिए फिर से खोज के द्वारा। लेकिन हम किसी पर खोज कर रहे हैं बाईं आधा या सही आधा और फिर अंत में हम कर रहे हैं इस मामले में विलय। लेकिन यहां भी, साथ उन दो तरह लाइनों, हम फिर से इस के लिए किया है प्रत्यावर्तन का विचार है। और वस्तुतः इस का मतलब क्या है, एक एल्गोरिथ्म के संदर्भ में, एक एल्गोरिथ्म पुनरावर्ती है इसे इस्तेमाल करता है या खुद को कहता है। या सी के संदर्भ में एक समारोह है कहा जाता है एक समारोह recursive-- Foo, foo यदि पुनरावर्ती है कहीं न कहीं अपने स्रोत कोड में, समारोह foo ही कहता है। और यह सब foo कभी करता है तो बुरा है बार-बार खुद को कहते हैं। Foo के अंत में बंद हो जाता है, तो करता है, क्योंकि यह ठीक है कह कर, तरह विलय एक मिनट रुको, इस समस्या को सुपर है, तो छोटे, उदाहरण के लिए, या मैं मैं कर रहा हूँ जिसे उसे मिल गया खोज रहा है, सिर्फ वापसी। बारी बारी से, नहीं ऐसा मत करो चक्रीय फिर से अपने आप को कहते हैं। और तो है पर एक नजर डालते हैं यह वास्तव में कैसे काम कर सकते। तो मैं आगे और खुले जाने के लिए जा रहा हूँ यहां दो स्रोत कोड उदाहरण अप। जिनमें से एक सिग्मा 0 कहा जाता है। और यह बिल्कुल नहीं है पुनरावर्ती, लेकिन हम ले चलो एक इस कार्यक्रम क्या करता है पर देखो। मैं सब बाहर छीन लिया है लेकिन यह सब से टिप्पणी CS50 पर स्रोत कोड की वेबसाइट अगर आप टिप्पणी की है फिर बाद में यह माध्यम से पढ़ने के लिए चाहते हैं। और चलो एक जोड़े करते हैं विवेक के यहाँ जाँच करता है। इस कोड के शीर्ष पर तो हम CS50.h. शामिल है यह क्या करता है? ऐसा क्यों है कि यहाँ है? उचित आम आदमी की दृष्टि में। वह क्या करता है? हाँ। दर्शकों: GetInt समारोह काम करता है तो। डेविड जे मालन: तो यह है कि GetInt समारोह काम करता है। इस के अंदर क्योंकि फ़ाइल, CS50.h, जो हम लंबे समय में पहले देखेंगे इसके स्रोत कोड के संदर्भ में, कार्यों का एक गुच्छा है declared-- GetInt, GetString, others-- की और जब तक एक गुच्छा और हम वास्तव में, कि लाइन को शामिल किया है संकलक बजना नहीं है यह मौजूद है पता करने के लिए जा रहा है। और एक ही पंक्ति के लिए चला जाता है पूर्णांक परिभाषित किया गया है, जहां दो एक समारोह है जो printf, हम काफी एक बिट का उपयोग कर रखना। अब, लाइन चार एक छोटे कायरता लगती है यह सिर्फ एक एक जहाज है, क्योंकि। यह कोई घुंघराले, अर्धविराम मिल गया है ब्रेसिज़, इसके अंदर कोई कोड। लेकिन क्या हम फोन किया था सप्ताह के अतीत में इस बात? हाँ। तो एक प्रोटोटाइप। और यही कारण है कि हम एक की क्या ज़रूरत है लगता है जो प्रोटोटाइप एक छोटे बेमानी हो आम तौर पर आम तौर पर हम क्योंकि फिर से समारोह को देखने के बाद में फाइल में, है ना? तो क्यों न हम तुम सिर्फ कर रहे have-- करना अपने सिर scratching लेकिन मैं इसे ले जाऊँगा। हाँ। दर्शकों: [अश्राव्य] मुख्य बाद समारोह। डेविड जे मालन: बिल्कुल। संकलक आप जानता है कि अंत में परिभाषित या लागू करेगी संभवतः मुख्य बाद उस समारोह,। तो बजना और सबसे compilers तरह का गूंगा कर रहे हैं और वे ही पता चल जाएगा क्या आप उन्हें बताओ। और आप का उपयोग करना चाहते हैं तो सिग्मा नामक एक समारोह में, क्या आप बेहतर संकलक सिखाने कि यह पहले से ही मौजूद है। अब, मुख्य ही है, यहां तक ​​कि यह लाइनों का एक गुच्छा है, हालांकि, अब तक उम्मीद है कि बहुत परिचित है। यह एक Do पाश जबकि मिल गया है जीवन में जिसका उद्देश्य यहाँ जाहिरा तौर पर एक को मिल रहा है उपयोगकर्ता से सकारात्मक पूर्णांक। और अभी उसे तंग कर रख या उसे वे सहयोग जब तक। फिर लाइन 16 में मेरे पास है एक दिलचस्प कॉल। IntAnswer। बाएं हाथ पर कौन सा ओर मुझे एक इंट देता है Answer-- बुलाया store-- सकता है, जो स्टोर करने के लिए जा रहा है, जो जाहिर है, सिग्मा की वापसी के लिए मूल्य। तो सिग्मा सिर्फ एक है मनमाना लेकिन सार्थक नाम मैं एक समारोह के लिए दिया है कि जीवन में जिसका उद्देश्य एक argument-- ले रहा है हम इस case-- में एन फोन करता हूँ और सिर्फ इतना है कि संख्या की राशि लेने के लिए प्लस हर सकारात्मक संख्या कि यह तुलना में छोटा होता है। मैं करने के लिए नंबर 2 में पारित तो अगर सिग्मा, मैं जोड़ना चाहते हैं 2 प्लस 1 प्लस 0-- इसलिए कि मुझे 3 देता नहीं 0--। मैं सिग्मा को तीन में से गुजरती है, मैं चाहता हूँ 3 प्लस 2 प्लस 1 है, जो मुझे 6 देता है। इत्यादि। तो यह सिर्फ कहते हैं सभी यह संख्या कम से कम या बराबर। अब, यहाँ नीचे मैं सिर्फ जा रहा हूँ जवाब बाहर मुद्रित करने के लिए। तो एक त्वरित मानसिक स्वास्थ्य की जांच के रूप में, चलो सिग्मा 0-- डॉट स्लेश सिग्मा बनाने 0-- और मुझे 2 में टाइप करते हैं। और मैं वास्तव में 3 मिलता है। मुझे 3 में टाइप करते हैं। मैं वास्तव में 6 मिलता है। और किसी को भी जल्दी से गणित कर सकते हैं, तो मैं मैं जा रहा हूँ, क्या 50 से करते हैं? दर्शकों: [अश्राव्य]। डेविड जे मालन: ठीक है, नहीं। लेकिन 1,275 बहुत करीब है। तो यह 50 से कर का परिणाम है प्लस 49 प्लस 48 प्लस 47 प्लस 46 1 करने के लिए सभी तरह से नीचे। इतना है कि सभी सिग्मा करता है। लेकिन हम है कि कैसे देखते हैं अब इसे लागू किया है। तो यहाँ नीचे समारोह में ही है। और इस के लिए प्रतीत नहीं होता कुछ भी अभी तक प्रत्यावर्तन के साथ क्या करना है। वास्तव में, हम एक प्रयोग कर रहे हैं पुराने स्कूल तकनीक। मैं एक चर बुलाया योग प्रारंभ कर रहा हूँ शून्य करने के लिए, तो मैं यहाँ एक foreloop है, और मैं नामक एक इंट घोषणा कर रहा हूँ मैं 1-- करने के लिए इसे बराबर की स्थापना मैं करने के लिए इसे बराबर सेट सकता है, हालांकि शून्य है, लेकिन मैं इसके अलावा क्या कर रहा हूँ के बाद से, यह शून्य या एक है, तो कौन परवाह करता है। यह कोई प्रभाव नहीं किया जा रहा है। तो मैं इतने लंबे समय मैं के रूप में पुनरावृति कर रहा हूँ कम से कम या मीटर के बराबर है, जो में पारित किया गया था कि तर्क है। और फिर मैं सिर्फ रखने मैं और अंतर्दृष्टि incrementing पाश की सब मैं योग कर रहा है कर रहा हूँ प्लस मैं बराबर होती है और वह है कि विचार है। मैं इस में, ऐसा नहीं करना चाहते हैं मामले, योग प्लस प्लस की तरह। मैं वास्तव में जोड़ना चाहते हैं मैं के वर्तमान मूल्य जो बड़ा और बड़ा हो रही रखता है और चल मिलान करने के लिए बड़ा। और फिर मैं योग वापसी। और तो जवाब मूल्य योग हो जाता है। और फिर मैं इसे बाहर प्रिंट। तो एक अवसर यहाँ है, हालांकि, एक तरह से सरल करने के लिए इस कोड धारणात्मक और झटका की तरह एक है के मामले में कोई आपत्ति सादगी भी है कि हालांकि यह सॉर्ट करने के लिए एक समय लेता है क्यों इस की सराहना इन छोटे उदाहरणों में शक्तिशाली है। यहाँ ऐसा one-- सिग्मा है इस कोड का दूसरा संस्करण। शीर्ष तक सब कुछ इतनी समान है कि एक ही कहानी के रूप में पहले से लागू होता है। लेकिन अब के को देखो सिग्मा के कार्यान्वयन जो मैं तो बस इन करने के लिए नीचे whittled किया है lines-- कोड की चार लाइनें, वास्तव में, प्लस कुछ सर्पाकार और सफेद अंतरिक्ष। लेकिन मैं क्या कर रहा हूँ? मीटर से कम या बराबर है शून्य, मैं एक तरह से संभालने की जरूरत कि सुपर साधारण मामला। और तुम मुझे शून्य या कुछ भी हाथ अगर , सिर्फ अजीब है जो नकारात्मक मैं बस मनमाने ढंग से करने के लिए जा रहा हूँ लेकिन लगातार शून्य वापसी। मैं इस बात को नहीं करना चाहते हैं कुछ अजीब अनंत में मिलता है क्योंकि एक नकारात्मक मूल्य के पाश। तुम मुझे दे तो अगर मैं सिर्फ इतना कह रहा हूँ शून्य या कम है, मैं शून्य लौट रहा हूँ। क्योंकि है कि लेकिन यह अच्छी बात है फोन की किताब के उस एकल पेज छोड़ दिया है। मैं एक बहुत ही विशिष्ट समस्या काट रहा हूँ और बारी बारी से कुछ नहीं बुला रहा। लेकिन लाइन 31 में, क्या मैं क्या कर रही हो लग रहे हो? कोष्ठकों सिर्फ रख रहे हैं बातें, उम्मीद है, एक छोटे से साफ। लेकिन मैं क्या कर रहा हूँ सब मैं कर रहा हूँ है m-- लौटने जो कुछ भी आप me-- अधिक हाथ m-- खेद का मूल्य, प्लस मीटर शून्य से 1 की सिग्मा के लिए मूल्य। अच्छा तो इसका क्या मतलब है? आप इनपुट के रूप में मुझे 3 नंबर देते हैं, इस सवाल का जवाब मैं अंत में प्राप्त करना चाहते हैं 3 प्लस 2 प्लस 1 मुझे 6 देता है क्योंकि 6 है। लेकिन मुझे लगता है के बारे में कैसे सोचते हैं इस कोड को कैसे चल रहा है? मैं सिग्मा फोन पहली बार और मुझे लगता है, मान 3 में पारित कि एक टुकड़े पर कह की तरह है कागज की, यहां मूल्य 3 है और मैं सिग्मा के रूप में यह पारित किया गया है। 3 जाहिर है ऐसा नहीं कम से कम 0 है अगर हालत लागू नहीं होता। कोई करता है। तो मैं क्या करूं? मैं है, जो मीटर वापसी करना चाहते हैं मीटर शून्य से 1 से 3, प्लस सिग्मा। तो मुझे इस बात का ट्रैक रखने के लिए। मैं इस डाल करने के लिए जा रहा हूँ कागज नीचे का टुकड़ा। और क्या मूल्य है, होना करने के लिए स्पष्ट है, मैं पारित करने के लिए जा रहा हूँ कहानी में इस बिंदु पर सिग्मा में? कौन सा नंबर? 2, है ना? 3 शून्य से 1 2 है। तो मैं सिर्फ एक छोटे से जरूरत यहां कागज के स्क्रैप। तो अब सिग्मा फिर से बुलाया जा रहा है। और मैं जानबूझ कर रख दिया है यह नीचे है क्योंकि यह एक तरह से रोक की तरह कहानी के उस संस्करण अब मैं ध्यान केंद्रित कर रहा हूँ क्योंकि मीटर शून्य से 1 के संकेत पर। तो 3 मीटर, मीटर था शून्य से 1 2 है। तो यहाँ मैं पारित किया गया है कि 2 है। 2 जाहिर की तुलना में कम नहीं है 0 तो उस मामले पर लागू नहीं होता। वरना मैं यह है, जो मीटर लौटने क्या मूल्य की बात है, प्लस सिग्मा? तो सिग्मा के 1-- मीटर है क्योंकि अगर अभी 2 तो 2 शून्य से 1 1 है। तो अब मैं बस मान 1 है। मैं बस संख्या गुजर रहा हूँ समारोह sigma-- करने के लिए 1 या अपने आप here-- इसलिए एक स्पष्ट रूप से नहीं है शून्य से कम है, अभी भी लागू नहीं होता। वरना बदले 1 प्लस की क्या सिग्मा? 0। तो मुझे सिर्फ इतना है कि याद करते हैं। मैं बाद में वापस करने के लिए कि मिल जाएगा। अब मैं आगे और संक्षेप में लिख जाने के लिए जा रहा हूँ संख्या 0 नीचे है कि क्योंकि मेरा तर्क या पैरामीटर। मैं संख्या 0 से पारित कर रहा हूँ और अंत में इस प्रक्रिया के सिर्फ खुद के विज्ञापन दोहरा nauseum क्या क्योंकि संघर्ष करता है मैं इस 0 देख एक बार मैं तुरंत करते हैं? मैं शून्य वापसी। तो अब आप कहानी उल्टा करने के लिए है। मैं अब समय में पीछे की ओर जाना है, सबसे हाल ही बात थी तुम सचमुच थे, तो मैंने किया एक वीडियो rewinding? मैं हाल ही में लेने के लिए जा रहा हूँ 1 और कहा कि मुझे एक देता प्लस 0 1 है। मैं rewinding रखने के लिए कहानी है, कि मुझे देने जा रहा है 1 है जो 2 प्लस यह चल मूल्य,। तो यह है कि 3 है। और फिर मैं rewinding रखने के लिए जा रहा हूँ। जब मैं पहली बार नंबर नीचे डाल दिया है 3-- इसलिए 3 प्लस 3 से 6 मुझे देता है। और अब, आप rewound है अगर इस बिंदु तक वीडियो को, यह बहुत ही था पहला सवाल मैंने पूछा। 3 से पारित कर दिया है, तो 3 के सिग्मा क्या है? यह वास्तव में 6 की राशि है कागज के इन सभी टुकड़े। कि एक छोटे से लेता है तो अगर जबकि वह ठीक है, अपने मन के आसपास लपेटो। लेकिन यह little-- एक था पर विचार मैं खड़ी है कि बहुत जानबूझकर किया गया था एक दूसरे के शीर्ष पर इन नंबरों। यह एक होने की तरह की तरह है समय में एक रिकार्ड memory--, एक वीडियो में एक रंडी की तरह, मैं वास्तव में उल्टा कर सकते हैं। और हम करने के लिए वापस आने के लिए जा रहे हैं सिर्फ एक छोटा सा में है कि रूपक। लेकिन पहले, यह भी नहीं है कि पता चला है geeks और हास्यास्पद बहुत से लोगों को, मैं गूगल पर, लगता है। चाहेंगे बहुत है, जो किसी को Googling मन में अच्छा बस एक पल के लिए आ रहा है और मुझे कुछ के लिए खोज करने में मदद? बहुत, बहुत कम कुंजी। कभी नहीं कोई है जो शायद, पहले आते हैं। ठीक। हाँ? चलो। नीचे आए। आपका नाम क्या है? सैम सैम। डेविड जे मालन: सैम, पर नीचे आते हैं। इस एक ही है। आपसे मिलना अच्छा रहा। अरे। खत्म हो गया आ जाओ। इतना सब मैं तुम्हें, अगर ऐसा करने की जरूरत आप, सैम, गूगल के कर सकता है। आप इस शब्द प्रत्यावर्तन के लिए खोज कर सकते हैं? खराब मत करो। और अब हाँ let's--। ठीक है कि क्लिक करें। बेहतर है कि क्लिक करें। आह, यह मिलता है। नहीं? ठीक। तो चलो एक जोड़े को दूसरों से करते हैं। संबंधित इतना नहीं अकादमिक यहाँ है, लेकिन आपके पास कभी अनाग्राम के लिए गूगल खोज की? सैम: नहीं डेविड जे मालन: ठीक है। अनाग्राम बजाय प्रत्यावर्तन के लिए खोजें। कैसे तिरछा के बारे में। आप कभी तिरछा के लिए खोज की? अब, यह एक करने के लिए थोड़ा मुश्किल है देख सकते हैं लेकिन उम्मीद है कि ठीक everything's--। यह सिर्फ आप और मुझे इस का आनंद ले रहे है। ठीक। तो अंत में, इस one's-- यह एक छोटे से तिरछा है। अब एक बैरल रोल करते हैं। कमाल है। ठीक है। बिग सैम के लिए धन्यवाद। हियर यू गो। धन्यवाद। तो क्या सब में चल रहा है इन मूर्खतापूर्ण उदाहरण के? तो सच में, के हुड के नीचे कोड की लाइनों के गूगल के लाखों जाहिरा तौर पर अगर कुछ मूर्खतापूर्ण है अनिवार्य रूप से कर रहे हैं कि शर्तों उपयोगकर्ता है, तो जाँच इस वाक्यांश में टाइप, शायद ले लिया है कि कुछ करना है समय की एक nontrivial राशि बस को लागू करने के लिए इस तरह से मनोरंजक हो। लेकिन यह है कि यह फोड़े सब है हुड के नीचे करने के लिए नीचे। लेकिन जाहिर है, प्रत्यावर्तन geekier की अधिक है उन विशेष चाल के बीच उदाहरण है। और निश्चित रूप से वहाँ वहाँ दूसरों बाहर है साथ ही हम शायद यह है कि यह भी नहीं बस अभी तक की खोज की। तो एक बार देख ले, या पर विचार अब निम्न कार्यक्रम, और निश्चित रूप से किसी भी हड़पने अपने रास्ते बाहर पर इनमें से। मैं आगे जाने के लिए जा रहा हूँ और एक प्रोग्राम है कि ऊपर खुला दो मानों स्वैप करने के लिए कोशिश करने के लिए जा रहा है। हम वहाँ जाने से पहले लेकिन, चलो यह करते हैं। हम एक और मिल सकता है स्वयंसेवक, मुझे लगता है? क्या आप वालंटियर को पसंद करेंगे? नहीं? आ जाओ। आ जाओ। ठीक है। तो तुम्हारा नाम क्या है? लॉरेन: लॉरेन। डेविड जे मालन: लॉरेन। , ऊपर लॉरेन चलो। तो लॉरेन किया जा रहा है इस प्रकार के रूप में यहां चुनौती दी। आपसे मिलना अच्छा रहा। तो लॉरेन यहाँ सामने है उसके दो खाली कप की। और हम कुछ नारंगी है रस और कुछ दूध और हम जाने के लिए जा रहे हैं आगे और निम्नलिखित है। हम सिर्फ इस भरने के लिए जा रहे हैं। यहाँ पर दूध की कुछ औंस और चलो यहां पर एक छोटे से संतरे का रस भर दें। और सभी के सामने इन दर्शकों के सदस्यों को, इन कप के दो मूल्यों स्वैप। दूध कप में संतरे का रस रखो और संतरे का रस कप में दूध। आप पर थे, तो आप यह कैसे करेंगे घर और अन्य सामग्री का उपयोग किया था? लॉरेन: एक और कप में डाल दिया। डेविड जे मालन: ठीक है। तो चलो एक अस्थायी करते हैं चर, हम करेंगे। और अब आगे जाना है और लागू इस एक ही अदला-बदली प्रक्रिया। कितना अच्छा। हम अस्थायी में OJ रख दिया है चर, OJ चर में दूध, और अब अस्थायी चर दूध चर में। ठीक। तो बहुत अच्छी तरह से इतनी दूर किया। तो यह है कि पकड़ out-- बदल जाता है बस एक पल के लिए सोचा। इधर, बस इसे थोड़ा ऊपर geek के लिए, इस इसी सी कोड होगा हम अभी लागू है। हम दो आदानों, ए और बी, दोनों के लिए किया था जो हम कर रहे हैं बस सादगी के लिए कहूँगा पूर्णांक के। मैं स्वैप करने के लिए चाहते हैं, तो यहाँ नोटिस दो चर, ए और बी के मूल्यों, हम वास्तव में एक बिचौलिए की जरूरत है, एक अस्थायी चर, एक अस्थायी कप, जिसमें से एक मान डालना तो यह है कि हम इसके लिए एक प्लेसहोल्डर है। लेकिन तब कोड ठीक है लॉरेन के रूप में यहां लागू किया है। अब, बस एक पाने के लिए थोड़ा पागल पता चला है, आप बिना ऐसा कर सकते हैं कि एक अस्थायी चर। हालांकि, हम जा रहे हैं, ठीक ऐसा करने के लिए कुछ रसायन विज्ञान के साथ धोखा करने के लिए। हम यहाँ कुछ अतिरिक्त कप है। तो निकटतम बात है कि लग रहा है दूध और पानी perhaps-- की तरह या दूध और OJ-- हम कुछ है पानी है, तो हम इस एक को भर देंगे साफ पानी की कुछ औंस के साथ। यही कारण है कि बहुत ज्यादा शायद है। हाँ। यही कारण है कि बहुत ज्यादा निश्चित रूप से है। एक सेकंड रुको। और अब हम जैसा कि मुझे याद है, जो तेल है, मध्य विद्यालय के रसायन विज्ञान वर्ग से, उम्मीद है कि यह पानी के साथ मिश्रण नहीं है। लेकिन यह एक तरह से एक तरह से दूध और OJ की तरह लग रहा है। अब तो, का उपयोग किए बिना एक अस्थायी चर, आप उन दो मानों स्वैप कर सकते हैं? , पानी कप में चला जाता है तेल इतना पानी तेल कप में चला जाता है। लॉरेन: कोई अन्य कप? डेविड जे मालन: कोई अन्य कप। और मैं वास्तव में नहीं है इस साल से पहले यह परीक्षण किया इस होगा, इसलिए यदि मैं नहीं जानता वास्तव में रासायनिक काम करते हैं। लगता है कि ऐसा नहीं होना चाहिए था। क्या यह काम कर रहा है? ठीक है। तो अलग करने? अच्छा। अब हम मिल गया अन्य कप में पानी। होशियार रसायन शास्त्र संकेंद्रक सकता है शायद मुझसे बेहतर यह करते हैं। लॉरेन: पानी के तल पर है। डेविड जे मालन: था कि water-- क्या हम इस किया था पिछली बार कुंजी है। आप सही क्रम में ही करना होगा। हाँ। ठीक है। तो अब हम तेल के दो कप है। ठीक। ठीक है। लेकिन इस I-- से काम किया रासायनिक यदि लॉरेन: यह पानी है। डेविड जे मालन: यही कारण है कि ज्यादातर पानी है। ठीक है। लेकिन यह है कि अभी भी पहले की तरह ही कप है। तो it-- वहाँ पर यह कोशिश डालना। ठीक। इस श्रेणी के समय का एक अच्छा प्रयोग है आज। ठीक। तो अब अच्छा we--। की तरह। ठीक है। बहुत बढ़िया। लॉरेन के लिए धन्यवाद। बहुत अच्छा किया। तो बस, अपने मन को उड़ाने के लिए और यह शायद कुछ है आप CS50 आईडी में चाहते हैं, तो साथ खेलने के लिए, आप वास्तव में, दो चर स्वैप कर सकते हैं एक अस्थायी पूर्णांक का उपयोग किए बिना। और यह इसी सी कोड है। और आप पिछले से याद करते हैं बुधवार, हम, अगर संक्षेप में, शुरू की सी और करता है में कुछ नए ऑपरेटरों किसी को भी जो थोड़ा गाजर याद प्रतीक, उस छोटे त्रिकोणीय है कीबोर्ड से प्रतीक का प्रतिनिधित्व करता है? क्या बिटवाइस ऑपरेटर? दर्शकों: exor। डेविड जे मालन: exor। एकमात्र। आप सिर्फ मनोरंजन पर के लिए, यदि आप चाहते हैं तो घर, ए और बी दो मनमाना देने के लिए किसी भी eight-- और मैं जैसे मूल्यों एक आठ बिट मूल्य का चुनाव होगा। आप 32 बिट के साथ ऐसा करते हैं, आप बहुत जल्दी ऊब जाओगे। लेकिन सिर्फ एक एक आठ बिट दे एक या दो जो कुछ भी है कि मूल्य, और एक समान मूल्य ख दे। और फिर परिभाषा का उपयोग पिछले बुधवार से XOR की, , थोड़ा करके की प्रत्येक कि सा लागू ए और बी में से प्रत्येक में उन आठ बिट, और फिर इस संहिता के अनुसार वास्तव में इसे करते हैं। और यह गलत नहीं है क्या आप स्क्रीन पर यहाँ देखें। यह वास्तव में नीचे फोड़े तीन XOR आपरेशन करने के लिए और किसी भी तरह जादुई एक और ख पदों का आदान प्रदान करेंगे किसी भी जानकारी को खोने के बिना। तो तेल और पानी की चाल है निकटतम असली दुनिया अवतार मुझे लगता है कि नकल करने के बारे में सोच सकता है। लेकिन यह निश्चित रूप से आसान है एक अस्थायी चर का उपयोग, यहां इस मामले में के रूप में। और यह भी एक अवसर है, का कहना है भी, माइक्रो अनुकूलन के इस तरह, एक कंप्यूटर वैज्ञानिक के रूप में कहते थे, जबकि मजाक की तरह तुम्हारे बिना ऐसा किया कैसे के बारे में अपनी बड़ाई करने के लिए एक अतिरिक्त चर के साथ स्वैपिंग की तरह, यह है कि सभी बाध्यकारी नहीं है। 32 बिट के रूप में बचाने के लिए क्योंकि एक वास्तविक पूर्णांक के मामले में, कहा कि सभी बाध्यकारी नहीं है एक प्रणाली है, जहां पर आप मेगाबाइट के दसियों का उपयोग किया जा सकता है या और भी अधिक ऐसे स्मृति इन दिनों। और वास्तव में, हम जब मिलता है बाद में एक समस्या सेट करने के लिए और तुम जादू लागू चेकर और आप करेंगे इसलिए साथ करने के लिए चुनौती दी जा इस रूप में छोटे रैम और के रूप में छोटा पर संभव के रूप में समय अभी भी आप computer-- को लागू करने के लिए एक सप्ताह है आप हो जाएगा have-- करेंगे it-- उन संसाधनों को कम करने की चुनौती दी। और कहा कि वास्तव में ही है इस सेमेस्टर अवसर आप दाढ़ी बनाने के लिए प्रोत्साहित किया जाएगा, जहां भी बेहतरीन प्रदर्शन बंद अन्यथा खर्च होती है। तो हम कैसे कर सकते हैं what-- इस वास्तविक कोड में देखते हैं? मुझे अब आगे चलते हैं और एक उदाहरण के ऊपर खुला कि जानबूझ कर कहा जाता है कोई स्वैप यह नहीं है क्योंकि वास्तव में चर स्वैप आप वास्तव में उम्मीद कर सकते हैं। तो चलो एक नज़र रखना। यहाँ कोई CS50 है कि एक कार्यक्रम है पुस्तकालय, सिर्फ मानक आई / ओ पर जा रहे हैं। अब हम एक प्रोटोटाइप है शीर्ष ऊपर स्वैप के लिए जो सिर्फ यह बाद में परिभाषित किया गया है इसका मतलब है। और यहाँ मुख्य है। मैं मनमाने ढंग से एक्स और वाई सौंपा क्रमशः, मूल्यों एक और दो सिर्फ वे छोटे हैं क्योंकि और आसान के बारे में सोचने के लिए। और फिर मैं सिर्फ printfs का एक गुच्छा है मैं एक मानसिक स्वास्थ्य की जांच की है, जहां। एक्स 1 है और वाई 2 संभवतः है उन printfs क्या कहेंगे। तो कोई जादू इस प्रकार अब तक। तब मैं के साथ का दावा करने के लिए जा रहा हूँ डॉट डॉट डॉट स्वैपिंग, डेफ प्रिंट। मैं स्वैप फोन करने के लिए जा रहा हूँ समारोह, एक्स और वाई में गुजर रहा है। और चलो अब उस के लिए मान लेते हैं स्वैप वास्तव में कार्यान्वित किया जाता है यह एक पल पहले था एक अस्थायी चर के साथ। और इसलिए मैं ऐसे मुकाम पर पहुंच दावा, बदली। एक्स यह और y अब यह है कि अब है। लेकिन फ़ाइल, ज़ाहिर है, कोई स्वैप कहा जाता है। तो चलो वास्तव में देखते हैं क्या होता। मैं तो कोई स्वैप और संकलन ./noswap करते हैं, एक्स 1 है, वाई 2 है। बदली से अदला-बदली। एक्स वाई 2, 1 है। तो यह वास्तव में भी त्रुटिपूर्ण होने लगता है swap-- हालांकि now-- नीचे स्क्रॉल चलो वास्तव में प्रति कार्यान्वित किया जाता है कोड मैं एक पल पहले प्रस्ताव रखा। तो क्या हम कल्पना पाने के लिए नहीं जा रहे हैं अब के लिए XOR सामान के साथ। यह भी, सिर्फ काम करना चाहिए दूध और OJ के साथ की तरह, लेकिन यह काम करने के लिए नहीं लगता है। तो चलो फिर से यह करते हैं। हो सकता है कि मैं अभी इसे ठीक नहीं चल रहा था। तो चलो फिर से कोई स्वैप चलाते हैं। शायद I-- नहीं। तो यह सिर्फ काम नहीं कर रहा। तो चलो थोड़ा मानसिक स्वास्थ्य की जांच करते हैं। मुझे स्वैप में यहां से आगे जाने दो और बस को जोड़ने के लिए एक मिनट रुको, एक% मैं है / n और चलो प्लग में एक के लिए मूल्य। मैं वास्तव में चाहते हैं क्योंकि क्या हो रहा है देखने के लिए। और वास्तव में, यह है एक डिबगिंग तकनीक आप में उपयोग हो सकता है कि कार्यालय समय या पहले से ही घर में, दान की पहली छमाही के लिए समान PSET3 में Armendariz के वीडियो हम प्रिंट पेश किया जिसमें रूप डेफ कम से कम एक सिफारिश की तकनीक, साधारण मामलों के लिए। मुझे आगे जाना है और कर चलाते हैं फिर कोई स्वैप, ./noswap। दिलचस्प है। तो सच लगता है क्या नोटिस। एक्स 1 है, वाई 2 है, लेकिन बी 1 है जब एक 2 है। तो उन दो किसी भी तरह की अदला-बदली कर ली लेकिन एक्स और वाई बदली नहीं हो रही है। तो क्या हो रहा है, स्पष्ट होना , यहाँ मैं एक्स और वाई है है और उन में स्थानीय चर रहे हैं मुख्य की गुंजाइश है, मैं एक्स और वाई में गुजर रहा हूँ स्वैप करने के लिए। अब, स्वैप, एक अलग समारोह के रूप में, इसके तर्क को फोन करने के लिए स्वतंत्र है या उसके मापदंडों कुछ भी यह चाहता है। फू एक्स या वाई या एक या बी या बार या। सिर्फ इसलिए कि वे कर रहे हैं कि स्पष्ट करना एक्स के समान नहीं हैं और y प्रतिशत से, मैं एक और ख कहा है। लेकिन हम उन्हें हम चाहते हैं कुछ भी कह सकते हैं। और इसलिए ऐसा लग रहा है स्वैप पारित किया जा रहा है एक्स उर्फ ​​एक-- और यह बात है y-- उर्फ ​​ख पारित किया जा रहा है। किसी तरह इन तीन लाइनें हैं वास्तव में उन मूल्यों की अदला-बदली लॉरेन दूध और OJ के साथ किया था। लेकिन हम बाहर प्रिंट जब मूल्यों, ए और बी स्वैप वास्तव में कर रहे हैं, लेकिन एक्स और Y उन्हें कोई परिवर्तन नहीं किया है। कि एक्स और वाई यहाँ तक कर रहे हैं याद है। इसलिए हम के माध्यम से यह देख सकते हैं के रूप में अच्छी तरह से एक और तकनीक। और यह भी एक तकनीक है समस्या में एम्बेडेड तीन सेट। चलो आगे चलते हैं और में यह कर CS50 आईडी आप पहले से ही नहीं किया है। दाहिने हाथ की ओर हम पर इस डिबगर टैब है। और अगर आप इस ऊपर खुला है, कुछ रहस्यमय जानकारी नहीं है कि शुरू में आप पर फेंक दिया है। लेकिन असली तेजी से इस के अलावा तंग करते हैं। एक तो, आप स्थानीय चर देखते हैं। CS50 आईडीई में निर्माण पता चला है कि, और प्रोग्रामिंग वातावरण का एक बहुत अधिक आम तौर पर, एक डिबगर है। आप नेत्रहीन देखने के लिए अनुमति देता है कि एक उपकरण क्या अपने कार्यक्रम के अंदर जा रहा है उनका कहना है करने के लिए उपाय करने के लिए बिना printfs और संकलन और चल और printf के जोड़ने और संकलन और कार्यालय समय में, जो पहले से ही चल रहा है, या घर, शायद है बहुत थकाऊ हो रही है। यहाँ तो, बस एक पल में, हम कर रहे हैं वास्तविक समय में देखने के लिए जा रहा हमारे स्थानीय चर के मूल्यों। हम यह भी स्थापित करने के लिए सक्षम होने के लिए जा रहे हैं ब्रेकप्वाइंट क्या कहा जाता है जो के अवसरों को थामने के लिए अपने कार्यक्रम में हैं कोड की एक विशिष्ट लाइन पर निष्पादन मैं के बारे में उत्सुक हूँ। है ना? इन कार्यक्रमों में एक दूसरे विभाजन में चलाते हैं। यह हमें धीमी मनुष्य के लिए एक तरह से अच्छा है थामने है, एक पल लेने के लिए सक्षम होने के लिए, देखें चारों ओर क्या हो रहा है कोड की एक निश्चित लाइन कार्यक्रम जुताई के बिना इसके माध्यम से और पूरी तरह से खत्म। तो एक ब्रेकप्वाइंट करने के लिए हमें अनुमति देने के लिए जा रहा तोड़ने के लिए और एक निश्चित बिंदु पर थामने। कॉल स्टैक का एक अच्छा तरीका है कार्यों वर्तमान में क्या कर रहे हैं कह रही पल में बुलाया जा रहा है। मुख्य हमेशा पहले कहा जाता है। लेकिन मुख्य एक कहता है स्वैप बुलाया समारोह, हम वास्तव में यह देखने के लिए जा रहे हैं किया गया है कि कार्यों के टावर रिवर्स कालानुक्रमिक क्रम में बुलाया। तो चलो कि देखते हैं। मैं बाहर ज़ूम करने के लिए जा रहा हूँ। मैं अपने कोड को वापस जाने के लिए जा रहा हूँ। और अभी मैं चाहता हूँ क्योंकि यहां पंडिताऊ होना, मुझे आगे जाना है और क्लिक करने के लिए जा रहा हूँ बस लाइन पाँच के बाईं ओर। और कहा कि एक लाल डॉट बनाता है। और दाहिने हाथ की ओर नोटिस डिबगर अरे, जानता है कि, मैं सिर्फ इतना कहा एक ब्रेकप्वाइंट पर noswap.c लाइन पांच, विशेष रूप से कोड के इस लाइन पर। तो डिबगर कि मैं जानता अगली बार अनुरोध किया है कि मैं अपने कार्यक्रम इसे थामने चलाने वहाँ के बजाय सिर्फ निष्पादन सुपर फास्ट पूरी बात चल रहा है। तो अब मैं डिबग क्लिक करने के लिए जा रहा हूँ आईडीई के ऊपर से ही बटन और कहा कि निम्न करने के लिए जा रहा है। यह शुरू में कुछ हद तक एक खोलने जा रहा है डरावना लग दूसरे टर्मिनल window-- से रिमोट डिबगिंग इस तरह मेजबान और such-- और हम करने के लिए वापस आ गया हूँ क्या सब है कि लंबे समय से पहले इसका मतलब है। लेकिन अब के लिए महत्वपूर्ण क्या है कि लाल बिंदी मारा गया था, डिबगर जानबूझ कर किया गया है execution-- रुका हुआ नहीं एसई प्रति कि लाइन पर लेकिन पहले पर उस समारोह में वास्तविक कोड की लाइन। लाइन सात है और यही कारण है अब पीले रंग में प्रकाश डाला। और अब एक नजर डालते हैं दाहिने हाथ की ओर। यह डिफ़ॉल्ट रूप से, की तरह लग रहा है, अच्छी तरह से पर्याप्त है, एक्स क्या महत्व है? 0। और वाई क्या महत्व है? शून्य। और उस अर्थ में उम्मीद की जा रही है कि एक्स और पीले line-- है कि y-- अभी तक क्रियान्वित नहीं। तो एक्स मूल्य एक नहीं होना चाहिए। यह किसी भी अन्य मूल्य हो सकता है, एक तथाकथित कचरा मूल्य। और हम यह है कि में भाग्यशाली है अनिवार्य रूप से, इस बिंदु पर शून्य। तो अब केवल कुछ भी नहीं है बटन हम परवाह करने की जरूरत है इस तरह से जब debugging के बारे में। यहाँ पर ध्यान दें, हम एक प्ले बटन है। और हम खेलते हैं या मारा सिर्फ है कि, फिर से शुरू के माध्यम से चलाने के लिए जा इस कार्यक्रम के बाकी या यह एक और ब्रेकप्वाइंट हिट जब तक। लेकिन मैं किसी भी अन्य निर्धारित नहीं किया है ब्रेकप्वाइंट तो यह सिर्फ है अंत के माध्यम से चलाया जा रहा है। हार के उस तरह आसपास poking का उद्देश्य। तो बजाय, मैं देखभाल के बारे में सही करने के लिए इन चिह्न। और मैं पर जाएँ अगर उन्हें, जैसा कि आप भी चाहिए आप थोड़ा tips-- उपकरण युक्तियाँ देखेंगे। यह एक से अधिक कदम है। अब जब कि छोड़ें मतलब यह नहीं है कोड की निम्न पंक्ति। वह सिर्फ यह अमल का मतलब है और अगले करने के लिए कदम अगले करने के लिए ले जाते हैं, अगले करने के लिए चलते हैं। दूसरे शब्दों में, के माध्यम से उस बटन, मैं चल सकते हैं एक समय में अपने कोड के एक कदम के माध्यम से। सचमुच लाइन से लाइन,। अब, के अधिकार के लिए एक और एक है, कि हम सिर्फ एक पल में देखेंगे कि। इस तथाकथित है है कि आइकन में कदम मुझे गोता अनुमति देने के लिए जा रहा एक अन्य समारोह में। लेकिन बस एक पल में यह देखते हैं। इसलिए मुझे लगता है पर कदम क्लिक करने के लिए जा रहा हूँ। मैं क्लिक के रूप में और अब, नोटिस शीर्ष सही पर इस बटन, स्थानीय तहत मोटे तौर पर अपनी आँखें रखने के चर और एक्स के लिए देखो क्या होता है। X अब क्योंकि 1 पीले रंग की लाइन अब मार डाला गया है और हम लाइन से 8 पर स्थानांतरित किया है। और बस एक पल y में उम्मीद है कि 2 हो जाना चाहिए। अब, कुछ भी दिलचस्प है कि एक बिट के लिए होता है। यह सब है printf है। और मेरे माध्यमिक टर्मिनल में, नोटिस खिड़की, मैं प्रिंट डेफ के उत्पादन में देखते हैं। और अब मैं एक बनाने के लिए है प्रोग्रामर के रूप में निर्णय। मैं इस लाइन पर कदम कर सकते हैं कोड, इसे क्रियान्वित नहीं बल्कि अंदर क्या है के बारे में उत्सुक हो रही है। या मैं वास्तव में यह कदम कर सकते हैं और स्वैप के ही अंदर जाना। तो चलो उत्तरार्द्ध करते हैं। मुझे आगे जाना है और क्लिक करते हैं खत्म नहीं हुआ कदम है लेकिन में कदम। सूचना, अचानक खिड़की परिवर्तन पहले उजागर करने के लिए स्वैप में कोड की लाइन। यही कारण है कि लाइन 21 है। और अब, कायरता की तरह है कि वह क्या है, आप यहाँ पर नजर डालें, तो उम्मीद के रूप में एक अल्पविराम ख क्रमशः 1 और 2, है। क्यों अस्थायी 32,767 है? बहुत पसंद है कि अस्थायी याद करते हुए एक पल पहले खाली कप, लाइन 21 पर यहां घोषित किया जाता है। मेरा मतलब है क्यों 32,000-, क्यों है यह सिर्फ कुछ अजीब मूल्य है? हाँ? दर्शकों: यह प्रारंभ नहीं किया है। डेविड जे मालन: यह प्रारंभ किया गया नहीं। इसलिए हमारे कंप्यूटर हमेशा भौतिक स्मृति है। यह हमेशा शारीरिक रैम है। और वहाँ हमेशा शून्य और एक सही है, वहाँ में है? हम प्रयोग कर रहे हैं, क्योंकि हमारी दिन भर कंप्यूटर, आप CS50 आईडीई का उपयोग कर रहे हैं या सर्वर दिन भर। कि राम कुछ शून्य है या तो या कुछ एक या कुछ शून्य और लोगों। कोई फर्क नहीं पड़ता कि क्या है या आप उन्हें प्रयोग कर रहे हैं नहीं। तुम बस खाली नहीं हो सकता रिक्त स्थान है, जहां आप बिट्स चाहते हैं। वे शून्य और लोगों को या तो कर रहे हैं। तो इसकी वजह यह है कि, अस्थायी पता चला है हम अभी तक यह शुरू नहीं किया है हम उन 32 बिट है, लेकिन वे नहीं किया है किसी भी ज्ञात मूल्यों के लिए प्रारंभ किया गया। तो वे थे जो कुछ सबसे हाल ही में उन 32 bits-- for-- इस्तेमाल किया हम सिर्फ कुछ की कलाकृतियों को देख रहे हैं विशेष रूप से उन 32 के पिछले उपयोग बिट्स। जैसे ही मैं हालांकि पर कदम क्लिक करें, के रूप में ओफ़्फ़, अस्थायी मूल्य 1 पाने के लिए जा रहा है। मैं इसे फिर से करते हैं, एक है मूल्य 2 दिए जा और फिर बी करने के लिए जा रहा है मान 1 दिया जाएगा। और तो क्या अब अच्छा है कहानी में इस बिंदु डिबगर है सुपर धीरे धीरे मुझे दिखा अपनी गति से, क्या स्वैप की स्थिति है। लेकिन यहाँ शीर्ष, सूचना पर नोटिस कि वास्तव में कॉल स्टैक यह करने के लिए दो परतों में है। के रूप में प्रकाश डाला है कि अब एक स्वैप, मैं बजाय मुख्य पर क्लिक करते हैं, स्थानीय चर कैसे बदल नोटिस डेवलपर बस हॉप कर सकते हैं क्योंकि के आसपास है और किसी भी अलग दायरे में जाना। हम यह सब कर रहे हैं तो भले ही काम करते हैं और सही ढंग से ए और बी स्वैपिंग, मैं स्वैप के बीच आगे और पीछे जाने के लिए अगर एक 2 और बी 1 और मुख्य है, जहां मुख्य बिल्कुल भी प्रभावित कर दिया गया है? नहीं। तो takeaway यहां क्या हो रहा है? खैर, यह किसी भी समय पता चला है कि आप स्वैप की तरह एक समारोह फोन और आप यह तर्क पारित क्या आप स्वैप समारोह को पारित कर रहे हैं इस मामले में एक प्रति है उन तर्कों की। तो एक्स और वाई क्रमशः प्रत्येक रहे हैं, तो 32 बिट, क्या स्वैप हो रही है दो नए स्थानीय है चर, या तर्कों कहा जाता है एक और b-- लेकिन उन मनमानी कर रहे हैं names-- लेकिन शून्य का पैटर्न और अंदर एक और ख के लोग कर रहे हैं लाइन में खड़ा एक्स और वाई के लिए समान होना लेकिन वे नहीं कर रहे हैं एक्स और वाई के रूप में एक ही बात है। मुख्य के अपने टुकड़े पर है, हालांकि ऐसा लगता है जैसे पेपर नंबर 1 और एक्स और वाई के लिए 2, और यह है कि हाथ तो जब कागज के टुकड़े स्वैप करने के लिए, स्वैप बहुत जल्दी हो जाता है अपने स्वयं के कलम, नीचे लिखता है 1 और कागज की अपनी खुद की चादर पर 2, हाथों मुख्य करने के लिए मूल XY को वापस और फिर अपने आप ही करता है ए और बी के साथ बात। और इस वजह से अब सुपर महत्वपूर्ण है इस nontrivial निहितार्थ हैं वास्तव में सही कोड लिखने के लिए यह प्रतीत होता है क्योंकि हम स्वैप नहीं कर सकते दो चर। मैं एक सही स्वैप समारोह में लिखा है। हम के रूप में लॉरेन के साथ इसे क्रियान्वित किया है वास्तविकता में एक सही स्वैप समारोह, लेकिन इस बात का जाहिरा तौर पर कोई भी मामलों यदि आप वास्तव में नहीं कर सकते स्थायी रूप से दो मानों स्वैप। तो हम एक और तरह की जरूरत है वास्तव में इस पर पाने के लिए, और हम करने के लिए सक्षम होने की जरूरत वास्तव में इस समस्या का समाधान। और यह out-- बदल जाता है और हम आने देंगे वापस इस विशेष तस्वीर के लिए long-- से पहले यह एक तरीका है कि आप अपने कंप्यूटर की स्मृति आकर्षित हो सकता है। यह सिर्फ एक आयत है। आप किसी भी यह आकर्षित कर सकता है तरीके लेकिन यह है की संख्या एक के रूप में यह आकर्षित करने के लिए सुविधाजनक निम्न कारण आयत। हम परे आज शुरू करने के लिए जा रहे हैं तथाकथित ढेर के बारे में बात कर रही है। और ढेर सिर्फ एक हिस्सा है के memory-- का एक हिस्सा RAM-- कार्यों उपयोग किया है कि वे कहते हैं कि जब तक। और तो यह है कि कम से पता चला है इस ढेर के बहुत नीचे मुख्य के स्थानीय चर के सभी जहां है ओआरजी सी और ओआरजी वी और वह सब सामान और डिफ़ॉल्ट रूप से जाने के लिए जा रहे हैं। और मुख्य यदि स्वैप जैसे कुछ अन्य समारोह कॉल खैर, स्वैप एक और पाने के लिए जा रहा है यह ऊपर स्मृति ऊपर की परत। और तो बस आप एक त्वरित सरसरी देने के लिए इस के चित्र, मैं खत्म हो जाना है, तो here-- और मुझ पर इस दर्पण जाने भूमि के ऊपर के रूप में वास्तव में मैं क्या है well--, हम के बारे में ही परवाह है अब के लिए इस तस्वीर के नीचे, है कि मैं एक कार्यक्रम चलाने के लिए जब और मुख्य, बुलाया जाता है मुख्य का एक हिस्सा दिया जाता है है कि मेरे कंप्यूटर में रैम इस तथाकथित ढेर के नीचे। और मैं यह आकर्षित करने के लिए जा रहा हूँ जान-बूझकर एक वर्ग के रूप में। तो यह 32 बिट या चार बाइट्स की तरह है। और यह मुख्य कार्य किया है, तो एक 1 के एक मूल्य के साथ चर बुलाया एक्स और यह एक चर बुलाया है 2 के मूल्य के साथ Y, कि स्मृति के इस ज़ुल्फ़ लेने की तरह है कि मुख्य परिचालन द्वारा दिया गया है प्रणाली और इतना है कि यह विभाजित पहले स्थानीय चर, यहाँ जाता है दूसरा एक यहाँ जाता है, और यह बात है। मुख्य स्वैप, स्वैप कहता है स्मृति के लिए अपने स्वयं के टुकड़ा हो जाता है हम इस तरह से आकर्षित करेंगे कि ऑपरेटिंग सिस्टम से, और यह किया जा रहा है इसकी अपने स्थानीय चर आधारित हमारे कार्यान्वयन पर पहले स्थानीय चर के साथ एक शुरू में और ख है कि मूल्यों 1 और 2 मिलता है। लेकिन फिर, जैसे ही स्वैप कोड, कार्यान्वित और लॉरेन वास्तव में स्वैप OJ और दूध, क्या हो रहा है? खैर, इस 2 1, इस बनता जा रहा है 1, जिस तरह से एक 2 बनने के लिए, और है किया जा रहा है कि एक अस्थायी चर नहीं है कि अंत में कहा कि पूरे समय का इस्तेमाल दूर जाता है। लेकिन यह बात नहीं है कितना काम आप करते हैं इस लाइन इस स्मृति अंतरिक्ष में of-- में, एक्स और वाई पूरी तरह से अछूते हैं। तो हम देने की किसी तरह की जरूरत जैसे कि यह स्वैप और कार्यों गुप्त प्रवेश, अगर तुम जाएगा, करने के लिए कार्यों एक्स और वाई की तरह स्मृति को like--। तो चलो पर एक नजर डालते हैं मदद करता है कि एक उदाहरण हमें हो गया है कि क्या वास्तव में देखना इस पूरे समय चल रहा है। मैं आगे जाने के लिए जा रहा हूँ और ऊपर खुला शून्य की तुलना करें। और मैं बंद करने के लिए जा रहा हूँ हमारे डिबगर, मैं जा रहा हूँ इस डरावना लग संदेश को बंद करने के लिए बस, एक मिनट रुको कहते हैं, आप बीच डिबगिंग में कर रहे हैं। मैं यहाँ इस टैब को छिपाने के लिए जा रहा हूँ अभी वापस सादगी के लिए जाने के लिए। GDB की मौत हो जाती है तो तो चिंता मत करो। यही कारण है कि सिर्फ कार्यक्रम का मतलब है कि जानबूझ कर इस मामले में पद छोड़ने की गई, मेरे द्वारा। और अब शून्य इस करता है की तुलना करें। मैं CS50 उपयोग कर रहा हूँ मानक आई / ओ में पुस्तकालय। मुझे लगता है कि पहले एक मुख्य समारोह मिल गया है कहते हैं, कुछ कहते हैं, और एक स्ट्रिंग हो जाता है। तो फिर और यह कहते हैं एक और तार हो जाता है। और कहा कि इन दोनों के तार नोटिस क्रमश: एस और टी कहा जाता है। और अब इस कार्यक्रम की तुलना करें शून्य, जीवन में अपने उद्देश्य, यह मुझे बताने के लिए माना जाता है, मैं एक ही बात टाइप किया? और इसलिए मैं एक सप्ताह के लिए वापस जा रहा हूँ। मैं अपने बराबर बराबर ऑपरेटर का उपयोग कर रहा हूँ जो गुणवत्ता के ऑपरेटर है। नहीं असाइनमेंट ऑपरेटर, समानता ऑपरेटर। मैं सिर्फ एस और टी तुलना कर रहा हूँ। तो चलो वास्तव में आगे जाना है और यह करते हैं। और मैं आगे जाने के लिए जा रहा हूँ और शून्य से तुलना कर सकते हैं। मैं ./comparezero क्या करने जा रहा हूँ। और मैं जाने के लिए जा रहा हूँ आगे और कुछ कहने जैसे, के छोटे अक्षरों में माँ करते हैं और कैसे अपरकेस में माँ के बारे में। और निश्चित रूप से मैं अलग अलग बातें लिखें। ठीक है। यही कारण है कि उम्मीद की जा रही है। चलो फिर से इसे चलाते हैं। दोनों बार, छोटे छोटे अक्षरों करते हैं। यह मेरे लिए सुपर समान दिखता है। दर्ज करें। ठीक। शायद इसकी वजह यह सिर्फ अजीब है यह मेरी व्याकरण को पसंद नहीं है। तो चलो एक राजधानी माँ करते हैं, राजधानी माँ, समान। अलग अलग बातें। तो ऐसा क्यों है? ठीक है, वास्तव में क्या हो रहा है यहां हुड के नीचे? तो चलो वापस पर चलें यहां सिर्फ एक पल के लिए और क्या विचार GetString वास्तव में कर रही है। आप GetString कॉल करते हैं, एक समारोह है कि हम है खुद लिखा है और यह किसी भी तरह एक हो जाता है उपयोगकर्ता से पात्रों के अनुक्रम। और चलो पहले मान लेते हैं कि समय मैं GetString कहते हैं, कि मुझे देता है स्मृति का एक हिस्सा है कि इस तरह दिखता है। और मैं सभी को छोटे अक्षरों में लिखा गया है, तो एम-ओ-m-- और क्या यह करने के बाद चला जाता है? बस एक त्वरित मानसिक स्वास्थ्य की जांच। Backslash शून्य। हम जानते हैं कि। और हम खेला याद है कि चारों ओर Zamila के नाम के साथ और अन्य नाम का एक गुच्छा जब रोब यहाँ देख रहा था स्मृति के अंदर क्या हो रहा है पर। तो यह है कि कहानी बिल्कुल वैसा ही है। यह क्या है GetString मेरे लिए लौट रहा है। अब, मेरे कोड एक पल पहले संग्रहित GetString की मान एक चर में कहा जाता है। और फिर दूसरी बार मैं यह कहा जाता है, यह एक चर बुलाया टी में संग्रहीत। मैं यहाँ पर जाना तो, अगर मैं की जरूरत है इस स्थानीय variable-- आकर्षित करने के लिए और मैं आम तौर पर करने के लिए जा रहा हूँ just-- हम करेंगे के रूप में एक स्ट्रिंग आकर्षित यहाँ एक छोटा सा वर्ग के रूप में यह s-- कहते हैं। माँ कैसे करता है और अब, somehow-- इस चर एस के अंदर जाने के लिए? खैर, हम वापस जाने की जरूरत यहां पहले सिद्धांतों के लिए। GetString वास्तव में क्या लौट रहा है? तो यह है कि एम-ओ-एम पता चला है बैकस्लैश शून्य है, और किसी भी संख्या जैसे स्मृति में अन्य तारों की Zamila और रोब या एंडी या किसी भी अन्य लोगों, में कोर्स कर रहे हैं हमारे कंप्यूटर की रैम या स्मृति। और अपने राम तुम्हारे पास like-- है राम की एक टमटम, राम के दो gigs, या एक अरब या दो अरब बाइट्स, या शायद उससे भी ज्यादा इन दिनों। तो चलो आज के प्रयोजनों के लिए, मान लेते हैं, यह हम नंबर कैसे कोई फर्क नहीं पड़ता कि उन्हें है, लेकिन हम प्रत्येक नंबर सकते हैं उन अरब या दो अरब डॉलर का या चार अरब बाइट्स। और चलो बस मनमाने ढंग से कहते हैं कि इस पहली काटने, दूसरी काटने है, तीसरे, चौथे। मैं जानबूझ के लिए शून्य का उपयोग नहीं कर रहा हूँ लेकिन आज हम वापस करने के लिए आया हूँ। तो दूसरे शब्दों में यह है, यदि बहुत पहली बार मैं प्रोग्राम का उपयोग कर रहा हूँ मैं सिर्फ भाग्यशाली है और पहले हो रही है काटने तो स्थान से एक पर दो उसके बाद तीन से चार से अधिक है। और मैं ड्राइंग रखा है, तो बॉक्स संख्या दो अरब रास्ते पर यहाँ होगा। तो तुम तो, क्या लगता है, GetString वास्तव में देता है? यह एम-ओ-एम बैकस्लैश वापस नहीं है शून्य से प्रति स्पष्ट है कि क्योंकि मैं खींचा है कि बॉक्स में फिट नहीं होगा। तो वास्तव में और क्या हो सकता है GetString इन सभी सप्ताह लौटने जा सकता है? जवाब पर है बोर्ड यहीं कहीं। तुम्हें पता है, एम-ओ-एम बैकस्लैश शून्य फिट नहीं कर सकते तो क्या बजाय समझ कर सकता है? तुम डाल, सुपर चालाक होना था तो तथाकथित इंजीनियरिंग टोपी पर, आप क्या लौट सकता है? क्या जानकारी के कम से कम राशि है तुम अब भी होता है कि वापसी कर सकता है आप स्मृति में एम-ओ-एम पाते हैं? हाँ? दर्शकों: एक। डेविड जे मालन: एक। और क्यों एक? दर्शकों: यह बताना होगा क्योंकि आप जहां [सुनाई] जाने के लिए। डेविड जे मालन: बिल्कुल। मैं सिर्फ पता वापस करने के लिए जा रहा हूँ मुझे मिल गया है कि स्ट्रिंग की। इस में पता मामले स्थान से एक है। तो क्या वास्तव में s-- में संग्रहित किया जा रहा है और हर स्ट्रिंग चर इस प्रकार far-- सिर्फ कर दिया गया है कि तार का पता। इस बीच, मैं कॉल एक दूसरी बार और मैं GetString सचमुच ही thing-- में टाइप Lowercase-- एम-ओ-M के साथ एम-ओ-एम और एक अन्य बैकस्लैश शून्य, और अब शायद अपने कार्यक्रम के कुछ समय के लिए तो शायद यह चल रहा 10 है, यह इस 12 है, स्थान 11 है इस 13 है। कुछ अन्य का उपयोग कर कंप्यूटर जो भी कारण के लिए स्मृति। क्या अब मेरी दूसरी में चला जाता है मेरे प्रोग्राम टी में चर? 10। बिल्कुल सही। और इसलिए हम पर जब देखो इस कार्यक्रम के स्रोत कोड जहां मैं बस कोशिश कर रहा हूँ दो मूल्यों की तुलना करने के लिए, टी के बराबर बराबर है, क्या स्पष्ट मानव जवाब? 1 10 बराबर नहीं है बस कोई है। और इसलिए इस के साथ साथ एक निहित है अवसर के लिए हमें वास्तव में सिर्फ पहला, फिर से वापस जाने के लिए सिद्धांतों और अच्छी तरह से, के बारे में सोचना, क्या हुड के नीचे हो रहा है? हम इस बारे में बात कर रहा है बिट्स और बाइट्स और स्मृति, लेकिन यह समझने के लिए वास्तव में उपयोगी है आप GetString कॉल करते हैं, क्योंकि हम के बारे में सोचना है, भले ही यह है एम-ओ-एम या स्ट्रिंग माँ लौटने या एंडी या Zamila या जैसे, तकनीकी रूप से यह सिर्फ पते लौट रहा है स्मृति की है कि हिस्सा के। लेकिन यह ठीक है। मैं कैसे जानते हैं क्योंकि स्ट्रिंग जहां समाप्त होता है? मैं केवल शुरुआत दी रहा हूँ? खैर, बैकस्लैश शून्य, है ना? बस मैं कर सकता हूँ रैखिक समय में प्रिंट डेफ एम-ओ-M के साथ बाहर प्रिंट। और जैसे ही मैं बैकस्लैश देखने के रूप में मैं शुरू कर दिया है जहां शून्य है, मैं परवाह नहीं है मैं पहले से ही संकेत भी पता है जहां मैं खत्म करने की जरूरत है। और इसलिए आज beginning-- के निशान और मुझे क्योंकि हम नाटकीय रूप से यह करते हैं मुसीबत का एक बहुत कुछ करने के माध्यम से चला गया इन यहां wheels-- प्रशिक्षण प्राप्त इसलिए आज प्रशिक्षण के पहियों शुरू बंद आते हैं और हम पर प्रकट करने के लिए least-- [वाहवाही] यही कारण है कि अच्छी तरह से यात्रा के लायक था हाँ, इस सुबह को लक्षित करने के लिए? तो now-- नहीं है, यह बदल जाता है बाहर, स्ट्रिंग के रूप में ऐसी कोई बात नहीं। स्ट्रिंग मौजूद नहीं है। यह हमें मिला है कि एक पर्याय है CS50 पुस्तकालय के अंदर। इसके बाद, हम बुला शुरू करने जा रहे हैं एस और टी नहीं तार लेकिन चार सितारों। चार सितारा और हम करेंगे इससे पहले लंबे समय तक अलग तंग। लेकिन यह कहने के लिए है, हम जारी कि भले अब के लिए GetString का उपयोग कर, तकनीकी रूप से मैं चाहिए चार सितारा और चार स्टार कह रही हो। और यह क्या है कि स्टार पता चला है निरूपित करने के लिए जा रहा है कुछ है एक सूचक या एक पते बुलाया। और वास्तव में, एक नमूना के लिए क्या आगे झूठ से इस 20 सेकंड क्लिप है हमारी स्टैनफोर्ड में दोस्त निक Parlante जो है, काफी कुछ समय पहले, खर्च समय की एक हास्यास्पद राशि, सबसे अच्छा के रूप में मैं बता सकता है उसकी रसोई या अपने तहखाने, claymation बनाने दुनिया के लिए शुरू नाम का एक चरित्र Binky जिनके साथ हम करेंगे संकेत करने के लिए अगली बार पेश किया। तो यहाँ आने के लिए क्या है की एक पूर्वावलोकन है। [वीडियो प्लेबैक] हे, Binky। उठो। यह सूचक मनोरंजन के लिए समय है। -वह क्या है? संकेत के बारे में जानें? ओह, गुडी। [अंत प्लेबैक] डेविड जे मालन: और उस पर ध्यान दें, हम बुधवार को आप देखेंगे। ठीक है। नृत्य कौन है? चलो। नृत्य कौन है? तुम मुझे यह आरंभ करना चाहते हैं? मैं इसे शुरू कर देंगे। Woooo! लॉरेन: मीठा फैंसी मूसा।