[संगीत बजाना] डेविड जे मालन: इस तरह से है एक नए संगोष्ठी आज। ठीक। बाहर तो बहुत बरसात। यह बुधवार को हो जाता है, लेकिन सभी को और अधिक अवसर प्रश्नों के लिए आज। तो वास्तव में शुरू चलो बस एक पल में फिल्म के साथ। लेकिन हम हमेशा के रूप में धूम धाम से शुरू करेंगे। इस CS50 है, और इस 4 सप्ताह का अंत है। क्या आपने कभी देखा है तो अगर टीवी या एक फिल्म जिसमें कुछ कंप्यूटर विशेषज्ञों वहाँ है और पुलिस या एफबीआई, या कुछ एजेंसी कुछ पकड़ने की कोशिश कर रहा है विरोधी, ठीक है, तुम हो शायद, "बढ़ाने" अभिव्यक्ति सुना जिससे कि तकनीशियन किसी भी तरह जादुई असीम ज़ूम अपराधियों को देखने के लिए दूर पहचान या लाइसेंस प्लेट नंबर एक दर्पण के भी टिमटिमाना में या किसी की आँख की चमक। तो वास्तव में, चलो पर एक नजर डालते हैं हॉलीवुड से कुछ इस तरह के दृश्य। [वीडियो प्लेबैक] -OK है, अब आप को अच्छी तरह देख मिलता है। -इसे पकड़ो। कि वापस चला रहे हैं। -एक मिनट रुकिए। सही जाना। -वहाँ, कि फ्रीज। -पूर्ण स्क्रीन। -OK, कि फ्रीज। आप उस पर देंगे -Tighten? उस पर -Vector वापस पहिया द्वारा पुरुष। यहीं इस मौके पर में ज़ूम। सही उपकरण -साथ, छवि बढ़े और तेज किया जा सकता है। -वह क्या है? -यह एक वृद्धि कार्यक्रम है। कि किसी भी स्पष्ट है कि आप -Can? -मुझे नहीं पता। की यह वृद्धि करते हैं। -Enhance खंड ए 6। -मैं विस्तार बढ़ाया, और-- मैं लगता है कि वहाँ बढ़ाने के लिए पर्याप्त है, मेरी स्क्रीन पर रिलीज। -मैं उसकी आंख में प्रतिबिंब बढ़ाया। -Let माध्यम से इस दौड़ रहा है वीडियो वृद्धि। -Edgar आप इस वृद्धि कर सकते हैं? -डटे रहो। इस प्रतिबिंब पर काम कर रहा -I've। कोई है की परछाई। -Reflection। आदमी के चेहरे की एक प्रतिबिंब, वहाँ है। -प्रतिबिंब। एक प्रतिबिंब, वहाँ है। दर्पण पर में ज़ूम। -आप एक प्रतिबिंब देख सकते हैं। आप यहाँ से छवि को बढ़ाने -Can? तुम यहीं उसे बढ़ाने -Can? आप इसे बढ़ाने -Can? आप इसे बढ़ाने कर सकते हैं? हम इस को बढ़ाने -Can? आप इसे बढ़ाने -Can? एक दूसरे पर पकड़ो, मैं बढ़ाने करेंगे। दरवाजे पर में ज़ूम। 10 -Times। ज़ूम। -में स्थानांतरित। -अधिक। रुको, बंद करो। -रुकें। यह -Pause। हमें 75 डिग्री -Rotate खड़ी चारों ओर, कृपया। -रुकें। भाग के लिए वापस जाओ फिर दरवाजा, के बारे में। बिटमैप कर सकते हैं कि एक छवि बढ़ाने -Got? हे, शायद हम प्रदीप उपयोग कर सकते हैं सेन विधि खिड़कियों में देखने के लिए। -यह सॉफ्टवेयर कला का राज्य है। -इस Eigenvalue बंद है। सही -साथ algorithm-- का संयोजन -वह का लिया उन्मूलन अगले स्तर के लिए एल्गोरिदम, और मैं करने के लिए उन्हें इस्तेमाल कर सकते हैं इस तस्वीर में वृद्धि। पर ताला और जेड अक्ष बढ़ाना है। -Enhance। -Enhance। -Enhance। -Freeze और बढ़ाने के लिए। [अंत प्लेबैक] डेविड जे मालन: ठीक है, तो उन सब के सब वास्तव में शब्द हैं। वे सिर्फ एक में एक साथ महसूस कर रहे हैं वास्तव में समझदार नहीं है कि जिस तरह से। यह पसंद है और, वास्तव में, CS50 और पाठ्यक्रम टीवी और फिल्मों का एक बहुत बर्बाद करने की आदत है आपके लिए। जब उन कंप्यूटर विशेषज्ञों क्योंकि शर्तों बंद तेजस्वी और कह रहे हैं जैसे फैंसी बातें eigenvectors, और z अक्ष, और अन्य के किसी भी संख्या वास्तव में और अधिक तकनीकी शब्दों, वे वास्तव में सिर्फ धागों रहे शब्दों को एक साथ यह सब भी अक्सर। हमारी उम्मीदें में से एक यह है कि वह यह है कि लेने के पाठ्यक्रमों में से एक पक्ष प्रभाव के रूप में इस तरह से, अधिक से अधिक लोग दुनिया वास्तव में वजन करने के लिए सक्षम हो और सिर्फ कभी तो थोड़ा प्रभावित करती है गुणवत्ता और उन फिल्मों की सटीकता? वास्तव में, की वास्तविकता पर एक नजर डालते हैं। तो यहाँ के कर्मचारियों तस्वीर है मैरी, हमारे शिक्षण साथियों में से एक। और वह है लगता है कुछ का संदेह। और फिर भी, की एक किरण भी नहीं है उसकी आंखों में सबूत के कुछ टुकड़े, या उसे चश्मा की परछाई में। खैर, हम फिल्मों के रूप में वास्तव में ऐसा है, तो हम ज़ूम और "बढ़ाने", जिसमें प्रस्ताव इस कितनी जानकारी है मैरी के चेहरे में है आप एक छवि पर कब्जा जब कि मूल संकल्प के साथ। और, वास्तव में, आप इन बिंदुओं को देख सकते हैं। और ये क्या कर रहे हैं कहा जाता पिक्सल, पी-मैं-एक्स-ई-एल एस, जो आम तौर पर सिर्फ एक वर्ग है एक छवि है कि composes कि एक बिंदु है। और दिन में वापस, और वास्तव में भी आज के एलईडी टीवी से कुछ के साथ आज या एलसीडी टीवी, अगर तुम मिल गया अपने कमरे में या घर पर एक, आप इसे करने के लिए सुपर करीब ऊपर जाना है, और अगर यह कुछ हद तक एक बड़े टीवी, खासकर अगर आप शायद यह भी इन बिंदुओं को देख सकते हैं और एक छवि है कि रचना क्या है। और कोई अधिक नहीं है इस से भी जानकारी। हम की भावना में, "बढ़ाने" कर सकता है पर और तरह की बातें चौरसाई एक तरह से है, की तरह क्या inferring रंग मैरी की आंख के बगल में होना चाहिए इतना है कि यह वास्तव में बहुत pixelated नहीं है। लेकिन मैं में जूमिंग रखने के लिए, वहाँ उसकी आंखों में बुरा आदमी है। लगता है कि जैसे सब है जानकारी हमारे पास है। आप नहीं बना सकते कुछ नहीं से बाहर जानकारी। केवल एक परिमित नहीं है वहाँ बिट्स की संख्या। समस्या सेट 4, जहां में तो आप एक अवसर है दुनिया के इस प्रकार के साथ खेलने के लिए। समस्या सेट 4 में, आप का पता लगाने देंगे ग्राफिक्स, और फोरेंसिक की दुनिया और वास्तव में कोड लिखने खो दिया है कि छवियों ठीक हो जाए। आप कोड लिख देंगे कि मौजूदा छवियों manipulates और अंतत: क्या समझते हैं हुड के नीचे चल रहा है। और, यह है कि यह वास्तव में पता चला है, सब है कि जटिल नहीं। उदाहरण के लिए, यदि हम चाहते थे एक स्माइली चेहरे जहां का प्रतिनिधित्व इन काले पिक्सल के साथ, या इन काले डॉट्स, खैर, हम तो सिर्फ प्रतिनिधित्व कर सकता है उन के रूप में सही मायने में एक बिटमैप। और अगर आप कभी सुना था कि अभिव्यक्ति बिटमैप, शायद यह अब एक बनाने के लिए शुरू होता है थोड़ा और अधिक समझ में आज। हम पहले से ही एक सा है क्या पता है। यह 0 या 1 है। और एक नक्शा अभी कुछ है कागज के एक टुकड़े की तरह कि आप निर्देश देता है और है शायद एक्स और वाई निर्देशांक का एक ग्रिड। तो यहाँ एक बिटमैप है। यह बिट के एक नक्शा है जिससे एक एक जाहिरा तौर पर है एक सफेद पिक्सेल का प्रतिनिधित्व करने के लिए जा रहे हैं, और एक 0 एक काले पिक्सेल का प्रतिनिधित्व करने के लिए जा रहा है। लेकिन हम निश्चित रूप से इसके चारों ओर फ्लिप सकता है। यह वास्तव में बात करता है तो हम लगातार कर रहे हैं के रूप में लंबे समय। और यहाँ के अंदर binary-- में, कैसे एक कंप्यूटर की स्मृति की, या यहां तक ​​कि अंदर अपनी हार्ड पर एक फ़ाइल की drive-- आप स्टोर कर सकता स्माइली चेहरा छवियों का सरलतम। लेकिन हम क्या कर रहे हैं, निश्चित रूप से, इस छवि में कमी? रंग, है ना? यह एक स्पष्ट अगले कदम है या वृद्धि रंग के साथ इस सुधार करने के लिए। तो दुर्भाग्य से सिर्फ एक ही साथ बिट, 0 या 1, हम रंग का प्रतिनिधित्व करेगा। यही कारण है कि लाल या नीले रंग का हो सकता है, या कर सकता है काला या सफेद, या हरे या गुलाबी, या रंग के किसी भी जोड़े। लेकिन सादगी के लिए, हम करेंगे सिर्फ काले और सफेद मान। तो तार्किक हम यदि जरूरत क्या करते हैं हम एक छवि में रंग को लागू करना चाहते हैं? हमें क्या करना है? यहां सीमित कारक जैसे कि अगर कि एक बिट के साथ आप ही कर सकते है दो राज्यों, 0 या 1, सफेद प्रतिनिधित्व या काले, तुम क्या करना चाहते हैं? दर्शकों को अधिक डेटा। डेविड जे मालन: अधिक बिट्स, हाँ अधिक डेटा, अधिक बिट्स। और, वास्तव में, कि वास्तव में कितनी है रंग छवियों प्रतिनिधित्व कर रहे हैं। एक एकल बिट का उपयोग करने के बजाय, एक 0 या प्रत्येक पिक्सेल के लिए 1, प्रत्येक डॉट, आप सिर्फ कई का उपयोग करें। हो सकता है कि हो सकता है, और आमतौर पर, 8 का उपयोग समस्या सेट में, वास्तव में 24 का उपयोग करें, और 4, आप एक फाइल के साथ खेलना होगा आम तौर पर 24 बिट का उपयोग करता है कि प्रारूप। लेकिन आप में से अधिकांश शायद रहे हैं JPEGs के साथ परिचित। आप कभी भी ले लिया गया है अपने फोन पर एक तस्वीर है, या अपलोड या पर कुछ देखा फेसबुक, या फ्लिकर, किसी भी संख्या तस्वीर आधारित वेबसाइटों की, आप है शायद पहले एक जेपीईजी छवि देखा। और यह इस फाइल है, पता चला है प्रारूप हम pset 4 में उपयोग करने के लिए जा रहे हैं जिससे आप करने जा रहे हैं छवियों को ठीक करने के लिए है मैं गलती से एक से नष्ट कर दिया है कि कैमरे में भ्रष्ट मेमोरी कार्ड, अगर आप करें तो। और यह पता चला है कि भले ही जेपीईजी सुंदर sophisticated-- है इसे और अधिक परिष्कृत है काले और सफेद डॉट्स से क्योंकि वहाँ हम एक पल पहले देखा था वास्तव में फैंसी एल्गोरिदम कि इसलिए, एक जेपीईजी सेक करने के लिए इस्तेमाल कर रहे हैं आप एक बहुत अच्छा हो सकता है कि, गुणवत्ता के चित्र लेकिन का उपयोग कर अपेक्षाकृत कुछ टुकड़े। और हम करने के लिए वापस आ गया हूँ लंबे समय से पहले संपीड़न। यह पहली बार पता चला है कि एक जेपीईजी image-- में तीन बाइट्स कोई बात नहीं तुम एक तस्वीर ले लिया है क्या of-- मूल्यों 255, 216, 255 हैं। दूसरे शब्दों में, अगर आप बस बिट्स के पैटर्न है कि देखते हैं, तीन के रूप में यहां का प्रतिनिधित्व बाइट्स, या 24 बिट्स, कुल उच्च संभावना के साथ आपको लगता है कि अनुमान कर सकते हैं आप इस पहले तीन इसे देख रहे हैं एक जेपीईजी के बाइट्स। और यह क्या जाना जाता है है एक जेपीईजी के हस्ताक्षर के रूप में। फ़ाइल प्रारूपों के एक बहुत शुरू करने के लिए वहां जाते हैं बाहर 0 और 1 के कुछ पैटर्न के साथ, कि विंडोज और मैक ओएस, और iOS तो, और एंड्रॉयड जानते फाइल किस तरह वे तथाकथित फ़ाइल के अलावा, कर रहे हैं एक्सटेंशन फ़ाइलों का एक बहुत है कि। आप जेपीजी किया है, तो वह है कंप्यूटर के लिए एक और सुराग। तो अब यह देखो चलो अधिक तकनीकी रूप से एक छोटे से। हम दशमलव जानते सिस्टम के माध्यम से 9 0 है। हम द्विआधारी 0 और 1 है। और अगर आप pset वापस करने के लिए अगर आपको लगता 0, हम आप के साथ कुश्ती था एक छोटा सा, कुछ के लिए हेक्साडेसिमल कहा जाता है, आप 16 अंक है, जहां के बजाय 10 या 2 के बजाय। और उन अंक, परंपरा से, उसके बाद एक 9 और के माध्यम से 0 कर रहे हैं च क्या प्रतिनिधित्व करता है जहां एफ, के माध्यम से सिर्फ एक त्वरित विवेक के रूप में दशमलव संख्या, चेक? तो, 15। और एक बस से, 10 का प्रतिनिधित्व करना चाहिए मैं दे दिया है कि आदेश की प्रकृति। यह सिर्फ एक मनमाना सम्मेलन लेकिन यह काफी मानक है। हम इस पैटर्न को देखो तो अगर तीन में से चलो bytes-- बस में इसे देखने के लिए शुरू कैसे के साथ सुसंगत तरीके आम तौर पर कंप्यूटर वैज्ञानिकों पर देखते हैं और फ़ाइलों के बारे में सोचते हैं। तुम निश्चित रूप से के बारे में सोच सकते हैं 0s में फ़ाइलों, और 1, और दशमलव, लेकिन वास्तविकता में, हम द्विआधारी का उपयोग करते हैं या अधिक आम तौर पर hexadecimal-- वापस pset 0 से। तो मुझे का प्रस्ताव करते हैं कि 255, 216, और 255 0 और 1 का सिर्फ इन पैटर्न हैं। और अगर आप इस करता है, तो जांच कर सकते हैं आप हफ्ते 0 से गणित करना चाहते हैं। लेकिन, अब के लिए, बस मान कि यह वास्तव में सही है। मैं सिर्फ तीन दशमलव फिर से लिखे गए हैं तीन द्विआधारी मूल्यों के रूप में संख्या। अब मैं क्या करने जा रहा हूँ है बस कुछ सफेद स्थान जोड़ने के लिए, सिर्फ पठनीयता की खातिर। और नोटिस, मैं तो बस जा रहा हूँ चीजों के अलावा स्थानांतरित करने के लिए। तो इससे पहले, बाद में, पहले, के बाद। मैं अन्य दिलचस्प कुछ भी नहीं कर रहा हूँ बस इतनी बातें बाहर फैलने से सूचना है कि आठ के प्रत्येक सेट बिट्स अब चार बिट्स के दो सेट है। इस हेक्साडेसिमल क्योंकि उपयोगी है विशेष रूप से फैशनेबल है क्योंकि प्रत्येक हेक्साडेसिमल अंकों 0 के माध्यम से च, या अधिक विशेष 0 के माध्यम से 15, प्रतिनिधित्व किया जा सकता वास्तव में चार बिट्स के साथ। दूसरे शब्दों में, हेक्साडेसिमल में अगर आप यह सिर्फ 0000 है, एक 0 प्रतिनिधित्व करना चाहते हैं, चार शून्य। और आप 15 का प्रतिनिधित्व करना चाहते हैं, यह चार बिट्स है, जो 1111 है। और अगर आप गणित करते हैं, यह लोगों को जगह है, इस, 16s जगह है कि you-- देने जा रहा है बल्कि यह है कि हो रहा है क्षमा करें है--, द्विआधारी में, 15 कि तुम्हें देने के लिए जा रहा है, लोगों को जगह है, twos जगह, चौके और आठ भाग जगह। तो मुझे लगता है कि प्रस्ताव है कि चलो बाईं तरफ के चार बिट्स का सेट हम एफ फोन करने के लिए जा रहे हैं क्या है। यह सबसे बड़ी संख्या है आप चार बिट्स के साथ प्रतिनिधित्व कर सकते हैं। और हम पहले से ही हेक्साडेसिमल से पता है, च हेक्साडेसिमल में सबसे बड़ी अंकों है। हम वहाँ एक और एफ मिल गया है दो वहाँ पर अधिक है। और अब के लिए, बस विश्वास पर ले मैं गणित सही किया है कि और कहा कि बाईं आधा उन बिट्स, 1101 की, हेक्साडेसिमल में डी के रूप में एक ही बात है। और दाहिने हाथ, 1000, सिर्फ 8 है। और आसान है कि एक सही है, यह देखने के लिए? 8 represents-- सही है कि आठ भाग जगह नीचे। इसलिए हम आठ कॉलम में एक है और चौके, twos या लोगों में कुछ भी नहीं है। तो अब अधिक पारंपरिक, मनुष्य करते हैं इस तरह हेक्साडेसिमल अंक लिखने के लिए, आप बस उन्हें एक साथ तोड़ो और फिर आप 0x के साथ उन्हें प्रत्यय लगाएँ। यह अलावा अन्य कोई मतलब नहीं है एक human-- के लिए एक दृश्य सुराग यहां एक हेक्साडेसिमल value-- क्योंकि आता है अन्यथा यह स्पष्ट नहीं हो सकता है। जो कि अंतत: यह कहना है, शून्य और लोगों के पैटर्न, या हेक्साडेसिमल के पैटर्न अंक यों आप कर रहे हैं कि की तलाश शुरू करने जा रहा है समस्या सेट में 4 है- है और समस्या सेट 4 कल्पना चलना होगा अधिक detail-- में इस के माध्यम से आप लेकिन रहस्यमय की तरह के रूप के रूप में एहसास इस पहली नज़र में लग सकता है आप इस एक बहुत कुछ देख शुरू करने के लिए जा रहे हैं। और वास्तव में, यहां तक ​​कि GDB में, डिबगर हम सोमवार को पेश किया और दान pset 3 में जा रहा है, का परिचय अक्सर आप हेक्साडेसिमल मूल्यों को दिखाने के लिए सिर्फ इसलिए कि वे अधिक हो जाते हैं, क्योंकि दशमलव या द्विआधारी से परम्परागत कंप्यूटर की दुनिया में। अब के संदर्भ में इस डाल दें। कई आपको यह याद रखना हो सकता है की क्या से आया है, जो यहां तस्वीर? विस्टा, तो भी पहले की तुलना में कि, विंडोज एक्सपी इस पहली फिल्म में किया था। तो यह एक सुंदर परिदृश्य है। और वास्तव में, आप online-- चारों ओर से प्रहार करता है, तो मैं इसे एक विकिपीडिया लेख लगता है, जिसमें किसी को बहुत आश्चर्यजनक बाहर चला गया पाया दुनिया में इस स्थान की स्थापना अपने या अपने कैमरे में ठीक सही place-- और यह आज like-- दिखता है, लेकिन यह बिल्कुल वैसा ही स्थापित है। इस छवि है, हालांकि, एक फाइल में है प्रारूप बुलाया बिटमैप, बी एम पी। और हम एक सुपर लेने के लिए जा रहे हैं क्या इसका मतलब है पर नज़र। लेकिन बिटमैप का सिर्फ एक अलग तरीका है का प्रतिनिधित्व चित्र अभी भी पिक्सल का उपयोग कर 0 और 1 में, अंततः। लेकिन जल्दी नज़र में, यह है एक और अधिक दिलचस्प हस्ताक्षर फ़ाइल की शुरुआत में। यह सिर्फ तीन नहीं है बाइट्स, बल्कि वहाँ बाइट्स के पैटर्न की एक पूरी गुच्छा जिसका अर्थ है कि पूर्व निर्धारित है। उदाहरण के लिए, कहीं में एक बिटमैप छवि के पहले कुछ बाइट्स के आकार के होने जा रहा है छवि, छवि की चौड़ाई, छवि की ऊंचाई, इसलिए उपयोगी मेटाडाटा, अगर तुम जाएगा। उपयोगी जानकारी है कि फ़ोटोशॉप या किसी भी ग्राफिक्स का उपयोग कर रहे कार्यक्रम वास्तव में के बारे में परवाह सकता है। इस पर तो अधिक 4 समस्या सेट है, लेकिन इस यह कहना है कि केवल है दिन के अंत में आप का उपयोग किया गया है सभी फ़ाइल स्वरूप years-- माइक्रोसॉफ्ट वर्ड फाइल के लिए, नंबर फ़ाइलें, एक्सेल फाइल, फ़ाइल स्वरूपों में से किसी भी नंबर कि कुछ हो सकता है ज्ञात फ़ाइल विस्तार हुड के नीचे सिर्फ 0 और 1 हैं। और मनुष्य का फैसला किया है सम्मेलनों क्या कर रहे हैं, क्या 0 और 1 के पैटर्न का प्रतिनिधित्व एक शब्द, एक एक्सेल फ़ाइल बनाम दायर अन्य फ़ाइल स्वरूपों में से किसी संख्या की तुलना में। Pset 4 में तो, अगर आप एक होगा अवसर है कि के साथ खेलने के लिए। लेकिन क्या करता है यह एक संरचना है मतलब। अब यह वास्तव में एक अच्छा segue है केवल एक जोड़ी है जो में सी, के अतिरिक्त सुविधाओं है कि हम अभी तक देखा नहीं है। यह एक बहुत छोटा सा भाषा और में से एक है सी के बारे में अच्छी सुविधाएँ एक संरचना है। उदाहरण के लिए, यदि आप चलो represent-- करना चाहता था आप एक चर है चाहता था का कहना है कि कुछ कार्यक्रम में एक छात्र का प्रतिनिधित्व करता है। हो सकता है कि आप एक कोर्स लिख रहे थे पंजीकरण कार्यक्रम, या कोर खरीदारी उपकरण, या ऐसा कुछ। संबंधित डेटा के टुकड़े कर रहे हैं मन में आया है कि एक छात्र के लिए? एक छात्र की तरह क्या मान के साथ प्रतिनिधित्व किया? हाँ? आप एक छात्र के रूप में एक नाम है। एक ठेठ छात्र और क्या है? दर्शकों: [अश्राव्य] डेविड जे मालन: तो, माफ करना। दर्शकों आयु। डेविड जे मालन: एक उम्र या जन्मदिन यों, हां। और क्या? दर्शकों: आईडी नंबर? डेविड जे मालन: हो सकता है तो एक आईडी नंबर, एक फोन नंबर, शायद एक छात्रावास, या घर, कॉलेज, या ऐसा कुछ या। डेटा के टुकड़े की कोई भी संख्या कि आप अपने संपर्क सूची में हो सकता है एक छात्र को परिभाषित हो सकता है। हम कोड में, यह करना चाहता था तो, अगर हम इस तरह से सरल कुछ कर सकता है। हम तो यह है कि एक कार्यक्रम के लिए हो सकता है है, का कहना है int मुख्य (शून्य) करते हैं। और मैं एक का प्रतिनिधित्व करना चाहते हैं मैं उदाहरण के लिए, हो सकता है छात्र, कि छात्र के लिए नाम नामक एक स्ट्रिंग, कि छात्र के लिए छात्रावास नामक एक स्ट्रिंग, शायद एक पूर्णांक है कि छात्र के लिए आईडी बुलाया। और मैं स्ट्रिंग का उपयोग कर रहा हूँ, क्योंकि मैं CS50.h. वापस जाओ और ऊपर खड़ा करने की जरूरत शायद मैं stdio.h जरूरत के लिए जा रहा हूँ। तो मुझे preemptively उन करते हैं और मैं कर रहा हूँ अब के लिए इस student.c फोन करने वाला और इस बचा। और अब मैं कुछ कर सकते हैं इन चर के साथ। और हम बस लिखने जा रहे हैं कि छद्म कोड में एक टिप्पणी के रूप में, यह दिलचस्प नहीं है क्योंकि हम अब के लिए क्या करते हैं। ठीक है, तो यह एक कार्यक्रम है कि किसी तरह एक छात्र संग्रहीत करता है। मैं यदि ऐसा करना चाहते हैं मैं दो छात्रों को स्टोर करने के लिए करना चाहते हैं? तो मेरा पहला वृत्ति जा रहा है एक मिनट रुको, सब ठीक हो सकता है, मैं एक और छात्र है, तो मैं क्यों नहीं करते सिर्फ स्ट्रिंग नाम 2, स्ट्रिंग छात्रावास 2 करते हैं, पूर्णांक id2। और हम चले किया है इस सड़क से पहले नीचे और लगता है क्या करने के लिए हमारे समाधान क्या था एक hackish कॉपी पेस्ट की तरह हो यहां काम? दर्शकों: एक सरणी। डेविड जे मालन: हाँ, हम एक सरणी इस्तेमाल कर सकते हैं। सही यह बहुत जल्दी बोझल हो जाता है। आप मनमाने ढंग से हल करना होगा इन चर के सभी नामकरण शुरू करते हैं। और तुम, मानव, रखना है यह ठीक NAME2 मेल खाती ट्रैक dorm2 साथ id2 के साथ मेल खाती है। यह सिर्फ एक गड़बड़ हो जाता है। इसलिए यह एक बहुत आसान है कुछ हफ्ते पहले से याद करते हैं, अभी फोन स्ट्रिंग के नाम करने के लिए होने के लिए और शायद हमें उन लोगों में से तीन दे। और तब शायद हम है स्ट्रिंग dorms और है उन लोगों में से तीन, या एक निरंतर साथ आईडी के int और उन में से तीन है। लेकिन अब भी यह महसूस करता है एक छोटे से मैला, सही है। हम अभी तक के छात्रों और के बारे में बात कर रहे हैं मैं वास्तव में कम स्तर पर रहने वाली हूँ कार्यान्वयन विवरण। छात्र एक नाम और एक छात्रावास और आईडी है। क्यों मैं सिर्फ एक चर घोषित नहीं कर सकते छात्र को फोन किया और यह बात कहते हैं। और मैं एक और छात्र चाहते हैं, यही कारण है कि मैं सिर्फ टी यह फोन नहीं है। या मैं एक पूरी गुच्छा चाहते हैं छात्रों की, क्यों मैं अभी नहीं है मैं के एक पूरे वर्ग का कहना है कि छात्रों, और यह उनमें से तीन है। दूसरे शब्दों में, मैं क्यों नहीं आ सकते हैं कहा जाता मेरे अपने डेटा प्रकार, के साथ छात्र, जो अंदर है एक नाम, एक आईडी है एक छात्रावास है, अन्य क्षेत्रों के किसी भी नंबर है। और यह आप पता चला है वास्तव में ऐसा कर सकते हैं। इतनी सी संरचना नामक इस सुविधा है। एक भाषा है कि सुविधा है कि हमें वास्तव में यह करने के लिए अनुमति देता है। मैं आगे जाने के लिए जा रहा हूँ और structs.h ऊपर खुला हम यह देखने के लिए जा रहे हैं, जहां एक छात्र की परिभाषा के बाद। यह पता चला है - और यह एक भी है एक आईडी से जुड़े एक की तुलना में आसान एक क्षण पहले। आप के साथ आना चाहते हैं अपने घर का डेटा प्रकार, और int के अलावा, और चार में और मौजूद हैं, और यह कि इन सभी दूसरों फ्लोट तुम सचमुच करके ऐसा कर सकते typedef struct लेखन, फिर कुछ घुंघराले ब्रेसिज़, जो के अंदर आप यदि आप चाहते चर सूची इस नए कस्टम डेटा के साथ सहयोगी एक नाम और एक छात्रावास की तरह टाइप करें, और फिर घुंघराले ब्रेसिज़ के बाद आप नए डेटा प्रकार के लिए एक नाम देना। तो, उदाहरण के लिए, छात्र। और क्या अब इस बारे में अच्छा है कि है हम इसी कोड को देखो, पहला सम्मेलन, सभी को, इस डाल करने के लिए है एक फाइल में कुछ कहा डॉट ज में, हम नहीं है जो एक हेडर फाइल, बहुत ज्यादा खुद इस्तेमाल शुरू कर दिया। लेकिन हम शुरू करने के लिए जा रहे हैं अब काफी एक बिट का उपयोग। और हम इस के साथ क्या कर सकते हैं, अंत में, कोड के इन कुछ पंक्तियों में ठीक है कि घोषित किया गया है डेटा प्रकार, एक छात्र। और अब इसका इस्तेमाल करते हैं। मैं अब में जाने के लिए जा रहा हूँ एक फ़ाइल structs1.c बुलाया। दो और एक पर एक नजर डालते हैं यहाँ कुछ विशेषताओं। तो यहाँ सामान है ज्यादातर परिचित है, और हम करेंगे क्या नहीं है वापस आने के लिए बस एक पल में परिचित। निश्चित रूप से यह मेरा अपना है सहित के रूप में अच्छी तरह से नया है जो हेडर फाइल, pset 3, जहां के लिए छोड़कर, याद है, हम helpers.h है। तो अगर आप # शामिल helpers.h याद हो सकता है। क्यों, हालांकि मैं उद्धरण का उपयोग कर रहा हूँ बजाय कोणीय कोष्ठक की? जब मैं उन दोनों के बीच चयन करते हैं? लगभग हमेशा की तरह मैं प्रतीत कोणीय कोष्ठक का उपयोग करने के लिए। और फिर, एक के सभी अचानक पर लाइन छह मैं डबल उद्धरण का उपयोग कर रहा हूँ। क्यों कि हो सकता है? हाँ? दर्शकों: [अश्राव्य] डेविड जे मालन: यही कारण है कि क्या एक वास्तविक है? दर्शकों: वह अपने आईडीई में है। डेविड जे मालन: हाँ, कि मेरी वास्तविक आईडीई में है। और, क्योंकि आईडीई पर ध्यान केन्द्रित करना नहीं जाने कि सिर्फ मैं उपयोग कर रहा हूँ कि एक उपकरण है। यही कारण है कि मेरे वर्तमान में है निर्देशिका, विशेष रूप से। तो structs.h मेरी अपनी फ़ाइल है आईडीई में स्थापित नहीं, ऑपरेटिंग सिस्टम अपने आप में, बल्कि यह मेरे वर्तमान निर्देशिका में है। इसलिए सम्मेलन अगर आप चाहते है अपने खुद के हैडर फ़ाइल शामिल करने के लिए, आप बस डबल उद्धरण का उपयोग करें। हम में इस बात को कहते हैं क्या लाइन 8, आम तौर पर बोल? यह क्या है? #define कुछ। यह सही है, स्थिरांक प्रतिनिधित्व करता है? आप एक के लिए करना चाहते हैं अपने कार्यक्रम में मूल्य आप एक पूरे का उपयोग करने वाले समय का गुच्छा, यह है , यह बाहर कारक के लिए सम्मेलन अच्छा हैश प्रतीक के साथ, यह घोषणा सभी में, परंपरा से, फिर, परिभाषित ऐसा नहीं है, हालांकि word-- अपरकेस सख्ती जरूरी है, लेकिन यह मानव परंपरा है स्थिरांक भुनाने के लिए वे बाहर कूद तो यह है कि आप अंतरिक्ष visually-- पर और उसके बाद आप चाहते मूल्य होना कि निरंतर के नाम करने के लिए बराबर है। कोई अर्धविराम, लेकिन बस आप वहाँ उस पैटर्न का पालन करें। तो क्या मैं इस वास्तविक कोड में क्या कर रही हूं। तो चलो पर एक नजर डालते हैं यहां मुख्य कार्यक्रम। 12 लाइन में मैं क्योंकि structs.h को शामिल किया है, मैं अब पर जादुई है मेरी निपटान के लिए एक नया डेटा प्रकार। मैं तो बस, पूर्णांक के लिए पहुँच नहीं है और चार, और नाव, और स्ट्रिंग, और नीले और अन्य शामिल हैं। मैं अब तक पहुँच एक छात्र के डेटा प्रकार। 12 लाइन में, मैं दो के संयोजन हूँ तो , एक एक कस्टम डेटा प्रकार और दो ideas-- एक सरणी का उपयोग। और इसलिए इस कार्यक्रम यदि में मैं वास्तव में समर्थन करना चाहते हैं तीन अलग-अलग छात्रों मेरे कार्यक्रम में, मैं मुझे एक चर देने का कहना है कि बस कर सकते हैं जिनमें से प्रत्येक बुलाया छात्रों, प्रकार छात्रों की है जो मेरे कस्टम डेटा प्रकार है। और, विशेष रूप से, मुझे दे अपने सरणी में उन लोगों में से तीन। तो अब हम इस कार्यक्रम में क्या करते हो? यहाँ सिर्फ एक पाश पुनरावृति के लिए है क्योंकि है कि, 0-3 छात्रों का मूल्य क्या है। मैं सिर्फ उपयोगकर्ता उत्साह रहा हूँ मुझे छात्र का नाम देते हैं। और फिर लाइन 17 में, हम एक ज्यादातर परिचित लाइन है। हम अपने पुराने दोस्त है सही पर GetString। वाक्य रचना की और क्या टुकड़ा , जाहिरा तौर पर नया है इससे पहले कि आप सी में प्रोग्राम कभी नहीं किया है, और structs का इस्तेमाल नहीं किया? हाँ? दर्शकों: .name। डेविड जे मालन: .name। लेकिन यह एक छलांग के बहुत ज्यादा नहीं है अब छात्रों को मैं ब्रैकेट क्योंकि आप मैं वें छात्र देता है। और तुम गोता लगाने के लिए चाहते हैं कि संरचना के अंदर, आप सिर्फ एक ही अवधि का उपयोग करें और फिर अंदर चर का नाम, या कि अंदर संपत्ति आप के लिए उपयोग करना चाहते हैं। इसी तरह, फिर मैं तो शीघ्र उपयोगकर्ता, मुझे छात्र के छात्रावास दे, आप इसी तरह से है कि स्टोर कर सकते हैं अंदर छात्रावास चर में स्ट्रिंग उस छात्र संरचना की। और अब एक छोटी चीजें फैंसी मिलता है। और यह देखने के लिए जा रहा है शायद एक बहुत पर काफी जल्द ही। लेकिन अगर आप pset में यह कहीं अधिक देखेंगे 4, तो अब उस पर बस नज़र चलो। यह लाइन 23 में के माध्यम से पता चला है कि 38, तुम्हें पता है मैं शायद कर रहा हूँ क्या लगता है? मैं टिप्पणी को हटा दिया है आज, लेकिन संस्करण के लिए ऑनलाइन कोड की संदर्भ सभी टिप्पणी की है। मैं क्या कर रही हो क्या लगते हैं? दर्शकों: सभी के साथ फ़ाइल सहेजा जा रहा है उपयोगकर्ता प्रवेश किया है कि जानकारी। डेविड जे मालन: हाँ, वास्तव में, यह एक नया तरीका है हम दो को देख रहे हैं कि, सी की एक और विशेषता है, जिससे मैं अपनी खुद की फाइल बना सकते हैं। इस प्रकार अब तक, लगभग हर कार्यक्रम लिखा है आप राज्यविहीन है। जैसे ही यह चल रहा हो चुका है, के रूप में यह बात है। कोई स्मृति या यह की याद नहीं है। बचाया कोई फाइल नहीं है। लेकिन अगर आप करना चाहते हैं है कि इनपुट बचा एक खेल या एक कार्यक्रम में की तरह, क्या हुआ इस तरह, यह हम ऐसा कर सकते हैं पता चला है। और अगर आप इस अधिक देखेंगे pset 4 और धारा में। लेकिन इस लाइन 23 अनिवार्य students.csv नामक एक फ़ाइल बनाता है। और तुम से पहले यह देखा हो सकता है। इससे पहले कि आप सीएस का अध्ययन नहीं किया है, तो भी सीएसवी अल्पविराम से अलग चर है। यह एक बहुत ही गरीब आदमी की तरह है एक एक्सेल फ़ाइल का संस्करण जो इसे खोला जा सकता है कि इसका मतलब है एक्सेल में और एप्पल संख्या में, और यह पंक्तियों और कॉलम है। लेकिन यह एक स्वामित्व नहीं है माइक्रोसॉफ्ट या एप्पल की तरह प्रारूप। अलग सिर्फ अल्पविराम है हम एक पल में देखेंगे कि मानों। और सिर्फ एक अनुमान ले। बहुत से लाइन 23 में अंत में, मेरी दूसरी तर्क कहा जाता है इस नए कार्य करने के लिए च फ़ाइल को खोलने के लिए खुला w है। डब्ल्यू क्या निरूपित हो सकता है? हाँ? दर्शकों: यह आपको फ़ाइल में लिखने की सुविधा देता है? डेविड जे मालन: यह सुविधा देता है आप फाइल करने के लिए लिखें। तो वेरिएंट की एक जोड़ी है कि हम यहाँ में प्लग कर सकते हैं। लेकिन अगर आप सिर्फ पढ़ने के लिए चाहते हैं फ़ाइल, कि इसे देखो है और, स्मृति में आप इसे पढ़ सिर्फ बोली गंदें शब्द बोलना 'आर' का उपयोग करें। आप को लिखने के लिए चाहते हैं फ़ाइल, आप "डब्ल्यू" गंदें शब्द बोलना उद्धरण का उपयोग करें। वहाँ भी संलग्न है और अन्य चीजों की एक जोड़ी आप मौजूदा फ़ाइलों को संशोधित करने के लिए चाहते हैं। अब हम यह देख रखने के लिए जा रहे हैं 24 लाइन के लिए बात है, तो हम वापस आ जाएंगे। रिक्त, यह पता चला है, एक विशेष मूल्य कि कुछ कार्यों से लौटा जा सकता है कुछ wrong-- चला गया है फ़ाइल मौजूद नहीं है, आप स्मृति से बाहर चला गया है, अन्य त्रुटियों की या एक गुच्छा। लेकिन अब के लिए, चलो बस यह मान लेते हैं कि सिर्फ पारंपरिक त्रुटि जाँच है। यहाँ लाइन 26 में, मैं पुनरावृति कर रहा हूँ 0 से अपने सभी छात्रों के ऊपर से 3। और इस तरह की तरह है एक नया समारोह का, fprintf, लेकिन सिर्फ एक अनुमान ले। Printf सिर्फ प्रिंट है एक स्वरूपित स्ट्रिंग, fprintf शायद क्या मतलब है? दर्शकों: एक फाइल करने के लिए प्रिंट। डेविड जे मालन: प्रिंट एक फाइल करने के लिए स्वरूपित स्ट्रिंग। यही कारण है कि अतिरिक्त क्या है च साधन फाइल है। और नए पहला तर्क हो गया है आपकी फ़ाइल का प्रतिनिधित्व करता है कि चर। तो फिर हम सिर्फ एक स्वरूप है सिर्फ printf की तरह स्ट्रिंग। और यहां तक ​​कि हालांकि इस वाक्य रचना इस बस, नया है छात्र का नाम में प्लग का मतलब है, छात्र छात्रावास में प्लग, और उसके बाद fclose साथ फ़ाइल बंद करें। और फिर यह नया है lastly-- और हम यह करने के लिए वापस आ गया हूँ मैं मुक्त कराने रहा हूँ long-- से पहले कारणों के लिए छात्र कि वहाँ के ऊपर हुआ। लेकिन हम वापस आ गया हूँ कि करने के लिए long-- से पहले कि क्योंकि GetString है कैसे की है वास्तव में हुड के नीचे काम कर रहे हैं। तो चलो यहाँ एक त्वरित नज़र रखना। मैं अपनी निर्देशिका में रास लिखते हैं, तो मैं नहीं जानता कि नोटिस , students.csv नामक एक फाइल है बस वहाँ नहीं, मौजूद नहीं है। अब मैं इस कार्यक्रम को संकलित हैं तो, , structs -1 बनाते हैं। / Structs -1, और मुझे आगे जाना है और में टाइप करने के लिए जा रहा हूँ येल में बर्कले में रहता है, जो एंडी। हम लूटने के लिए जा रहे हैं, जो इन दिनों थायर में रहती है। और चलो, जहां के साथ आते हैं है, मुझे लगता है, मारिया, माथर में है अगर मैं सही ढंग से याद किया है। तो कुछ भी नहीं होने जा रहा है। लेकिन मैं अब रास टाइप करते हैं, students.csv है। आगे और खुले students.csv चलते हैं। यह फिर से एक बहुत है हल्के फ़ाइल स्वरूप। लेकिन मैं तो बस एक सम्मेलन को अपनाया है कि मैं यहाँ दो पंक्तियों और स्तंभों की है। प्रथम स्तंभ है लोगों का पहला नाम। दूसरे स्तंभ छात्र की है छात्रावास, या कॉलेज, या घर, या whatnot। और अब मैं इस बचा लिया स्थायी रूप से एक फाइल में। तो यह है कि सभी दिलचस्प नहीं है। लेकिन यह सिर्फ एक कदम पत्थर है अब जानकारी जारी रहती है करने में सक्षम होने के लिए स्थायी रूप से। तो अब क्या अधिक हम कर सकते हैं चलो देखते हैं इन और अन्य सुविधाओं के साथ करते हैं। लेकिन पहले, कोई सवाल? यही कारण है कि एक बहुत कुछ था, और कहा कि तेजी से गया था। लेकिन अगर आप एक बहुत देखेंगे pset 4 में अधिक है, के रूप में अच्छी तरह से। हाँ? दर्शकों: एक तरह से करने के लिए है उस फ़ाइल को नाम जोड़ने जारी रखें? डेविड जे मालन: अच्छा सवाल है। जारी रखने के लिए एक रास्ता है उस फ़ाइल को नाम जोड़ने? हाँ। और, वास्तव में, आप खत्म हो, तो ऊपर, फाइल फिर से खोलने आप बोली का प्रयोग करेंगे गंदें शब्द बोलना "एक" संलग्न के लिए, जो सिर्फ एक नई लाइन जोड़ होता है, एक नई लाइन फिर से और फिर, बिल्कुल। अच्छा प्रश्न। अन्य सवाल? हाँ? दर्शकों: आप भागा कार्यक्रम फिर से अब ठीक है, यह करने के लिए नामों को जोड़कर रखना होगा फाइल या यह एक नई फ़ाइल को खोलने के लिए होगा? डेविड जे मालन: आह, अच्छा सवाल है। आप फिर से सही कार्यक्रम में भाग गया तो अब, शायद नए नामों में लिखा है, यह फाइल को जोड़ना होगा या फ़ाइल के ऊपर लिख? उत्तरार्द्ध, मैं कर रहा हूँ क्योंकि संलग्न मोड का उपयोग नहीं। और मैं बस आँख बंद करके हूँ क्योंकि लिखने के लिए फ़ाइल खोलने, यह सिर्फ फ़ाइल अधिलेखित करने के लिए जा रहा है। इसलिए मैं वास्तव में संलग्न है क्या करने की आवश्यकता होगी, मैं वास्तव में एक लंबी अवधि के लिए करना चाहते हैं डेटाबेस। अब सीएसवी भी, सच में, उपयोगी है के लिए आप की तरह कर रहे हैं writing-- और हम अंत में यह देखेंगे बाद में जब सेमेस्टर में हम अन्य प्रयोजनों के लिए CSVs का उपयोग करें। आप लोगों के सभी स्टोर करना चाहते हैं जो, किसी घटना के लिए दर्ज कर लिया है या अपने छात्र के लिए साइन अप समूह, या ऐसा कुछ, इस तरह के डेटा भंडारण प्रारूप के सुपर सुविधाजनक है। सचमुच, क्योंकि मुझे लगता है, तो इस फाइल को डाउनलोड करने के लिए थे। मैं double-- सकता है और वास्तव में यह कोशिश करते हैं मैं यहाँ पर एक्सेल या संख्या है। मैं सही क्लिक करने के लिए जा रहा हूँ या मेरी फाइल नियंत्रण क्लिक करें। वूप्स। राइट-क्लिक करें या मेरी फाइल नियंत्रण क्लिक करें। चलो, मेरे माउस सहयोग नहीं कर रहा है। मैं जा रहा हूँ Download-- तो यहाँ सभी फ़ाइलों को डाउनलोड अभी तो मैं इस एक हड़पने कर सकते हैं। और यह काम करता है, तो चलो देखते हैं students.csv-- पहली बार मैं सक्रिय कर दिया है। अब वे अपने संपर्कों देखना चाहते हैं। अब, मुझे पंजीकरण की आवश्यकता है। यह CSVs का उपयोग करने के लिए कितना आसान है? हाँ, आज तक इसे जारी रखो। ठीक है, अब हम वर्ग के लिए तैयार कर रहे हैं। ओह, ठीक है, इसमें नया क्या है? ठीक है, करीब है। यही कारण है कि जादुई था। ठीक है, अब हम अद्यतन करने के लिए है। और अब, यह क्या भूल गया मैं मूल रूप से खोला फ़ाइल, लेकिन वहाँ एक-- क्या हम चले। ठीक है, तो अब हम एक एक्सेल फ़ाइल है। धन्यवाद। ठीक है, मैंने किया था तो क्या आसान हिस्सा था। बेशक मैं पहले से स्थापित हो सकता था एक्सेल, या संख्याओं, या जो भी कार्यक्रम। लेकिन इस वजह से अच्छा है, अब मैं हेरफेर कर सकते हैं एक मानक प्रारूप में डेटा। तो अब चलो संदर्भ हम कहाँ दूर छोड़ दिया करने के लिए स्विच शुरू करने के लिए था, जो पिछली बार, प्रशिक्षण के पहियों से दूर ले जाना। लेकिन पहले, तुम नहीं किया यह पहले दोपहर के भोजन देखना फिर से आग पर यहाँ क्या हो रहा है और न्यू हेवन में कैम्ब्रिज, सितार में बर्फ। ASAP के CS50s वेबसाइट पर साइन अप CS50 छात्रों और कर्मचारियों के शामिल होने का। इसलिए हम प्रशिक्षण के पहियों में ले लिया सोमवार को बंद follows-- के रूप में स्ट्रिंग में घोषित किया गया है कुछ समय के लिए CS50s पुस्तकालय। यह अनुमति देता है और क्योंकि यह अच्छा है हमें होने के रूप में चर के बारे में बात करने के लिए पूरा शब्दों और वाक्यों और अधिक। लेकिन यह मौजूद नहीं है स्ट्रिंग पता चला है। वह सिर्फ एक पर्याय, या एक उपनाम है, हम कुछ के लिए बनाया है कि कि वास्तव में एक छोटे से अधिक है तकनीकी * एक चार बुलाया। और वास्तव में, हम एक उदाहरण देखा सोमवार को एक कार्यक्रम का कि हम उम्मीद काफी के रूप में व्यवहार नहीं किया था। इस तुलना -0, फाइल था। और अगर, कि तुलना -0 याद मैं सोमवार को कार्यक्रम कंपाइल और रन-0 की तुलना में और माँ में टाइप फिर छोटे अक्षरों में लोअरकेस, और माँ। कार्यक्रम मैं जोर दिया अलग अलग बातें टाइप करें, यहां तक ​​कि माँ, सभी में यद्यपि लोअरकेस, नेत्रहीन समान है। तो कम जवाब क्या था कंप्यूटर सोचता है कि क्यों के लिए उन दो तार अलग कर रहे हैं? हाँ? दर्शकों: [अश्राव्य] डेविड जे मालन: ठीक है। तो, माँ, पहली बार मैं जा रहा है, उस में टाइप मेरे कंप्यूटर में कहीं संग्रहीत स्मृति लेकिन एक अलग स्थान में दूसरी बार की तुलना में मैं माँ में टाइप करें। अब यह निश्चित रूप से अनुकूलित किया जा सकता है। कंप्यूटर स्मार्ट हो सकता है और , अरे, ये दो तारों का एहसास वे समान हैं। मुझे प्रचुरता से यह दुकान नहीं करते हैं। लेकिन कंप्यूटर ऐसा नहीं करते अनुकूलन आप उन्हें बता जब तक। तो, डिफ़ॉल्ट रूप से, वे कर रहे हैं बस खत्म हो जा स्मृति में दो अलग-अलग स्थानों में। और हां, जब अधिक स्पष्ट करने की हम दो तार की तुलना पहले कहा जाता था, एस, दूसरी बुलाया गया था टी, विशेष रूप से मैं क्या था 13 लाइन पर यहाँ की तुलना? हाँ। दर्शकों: यह स्मृति में जगह चर के लिए बात करेंगे कि। डेविड जे मालन: वास्तव में, मैं था स्मृति में जगह की तुलना कि उन चर की ओर इशारा किया। इसलिए विशेष रूप से, यदि माँ पर था बाइट नंबर 1, और 2, और 3, और 4-- क्योंकि बैकस्लैश याद 0 अंत में सभी तरह से होने की जरूरत है। और माँ, एम-ओ-मीटर के अन्य उदाहरण, पता 10, 11, 12, और 13 पर था। मैं एक तुलना था, उस पते, स्मृति में उस स्थान, 10 के खिलाफ, जो है स्पष्ट रूप से नहीं एक ही है। 1 10 नहीं है। तो यह है कि में अच्छा है यह बहुत स्पष्ट है। लेकिन यह insofar के रूप में समस्याग्रस्त है हम तार की तुलना करने के लिए प्रतीत नहीं कर सकते। तो fundamentally-- और यह निम्न स्तर पर, आप को लागू करना चाहता था एक कार्यक्रम तुलना करने के लिए दो अलग-अलग शब्द है कि उपयोगकर्ता, गुणवत्ता के लिए में टाइप किया गया है वे के लिए चार लाइन अप करना सिर्फ सामान्य शब्दों में चार, क्या हम जाहिरा तौर पर ऐसा करने की क्या ज़रूरत है? यह सिर्फ करने के लिए पर्याप्त नहीं है उन दो पतों पर दिखेगा। हमें क्या करना होगा? हाँ? दर्शकों: के माध्यम से पुनरावृति स्ट्रिंग [सुनाई]। डेविड जे मालन: हाँ, चलो स्ट्रिंग के माध्यम से पुनरावृति। के पाश, थोड़ी देर के पाश के लिए एक का उपयोग करते हैं, या आप के साथ सबसे अधिक आराम कर रहे हैं जो भी हो। और हम कहीं न कहीं दो तार मिल गया है स्मृति में, एक की को देखो पहले चरित्र, तो हर दूसरा है चरित्र, फिर तीसरे और चौथे, और पांचवें हम मारा जब तक क्या विशेष प्रहरी मूल्य है? दर्शकों: [अश्राव्य] डेविड जे मालन: हाँ, बैकस्लैश शून्य, या तो स्ट्रिंग में जो बिंदु पर हम यह बात तय कर सकते हैं। हम हर एक चरित्र का मिलान नहीं हुआ है? यदि नहीं, तो झूठी वापसी। यदि हां, तो सच वापसी। और इतना है कि क्या इस संस्करण ठीक है कार्यक्रम की तुलना-1.c करता है। यह करने के लिए समान है क्या हम कि मैं छोड़कर सोमवार को देखा हालांकि शब्द string-- से छुटकारा मिल गया कि सब कोई कार्यात्मक impact-- है अब मैं क्या कर रहा हूँ निकाल रहा है कुछ दृश्य प्रशिक्षण के पहियों, लेकिन स्पष्ट रूप से देखने के लिए कि एस और टी पते हैं। और कहा कि, क्या सितारा है तारांकित, का प्रतिनिधित्व करता है एक पते अन्यथा जाना जाता है, अधिक तकनीकी रूप से एक संकेत के रूप में। इसलिए मुझे लगता है पर घोषित लाइन 9 और चार * कहते हैं कि, कि मुझे एक स्ट्रिंग दे मतलब नहीं है। यही कारण है कि मुझे जिसका एक चर देने का अर्थ है जीवन में उद्देश्य एक पते की दुकान है। मैं डाल करने के बारे में हूँ क्योंकि इसे में एक स्ट्रिंग का पता। और वास्तव में, GetString, होना करने के लिए स्पष्ट है, एक स्ट्रिंग वापस नहीं करता है। यह माँ वापस नहीं करता है बैकस्लैश शून्य प्रतिशत से। विशेष रूप से क्या GetString करता और ठीक वापसी? दर्शकों: [अश्राव्य] डेविड जे मालन: एक पता, पहले चरित्र का पता कुछ स्ट्रिंग में यह मिल गया है। और इसलिए अब हम देख रहे हैं फिर से एक विशेष कीवर्ड। और, मैं यह पहले के लिए alluded। यह अच्छा सम्मेलन होने जा रहा है हम अब बार-बार देखता हूँ कि। मुझे लगता है कि यह सुनिश्चित करना जाँच कर रहा हूँ एस रिक्त नहीं है और टी रिक्त नहीं है। वास्तव में मेरे पर आधारित है, क्योंकि त्वरित उल्लेख पहले, GetString नहीं लौटता है, तो इसका मतलब यह हो सकता है क्या एक पते लेकिन फिर से है जो एन-यू-एल-एल, कुछ विशेष मूल्य है? दर्शकों: त्रुटि। डेविड जे मालन: यह एक त्रुटि है। कुछ गलत हो गया। और क्या आम तौर पर विशेष रूप से, हो सकता है strings-- के साथ जो हो सकता है advance-- में अज्ञात लंबाई की शायद 'कंप्यूटर स्मृति से बाहर, हो सकता है आप इस तरह के एक में टाइप लंबे शब्द या वाक्य या इस तरह के एक विशाल निबंध चिपकाया अभी पर्याप्त नहीं स्मृति नहीं है। और तो GetString वापस नहीं कर सकते पूरी बात का पता, तो यह सिर्फ कुछ भी नहीं लौटाता है। और यह एक त्रुटि हुआ है कहते हैं विशेष नल मान लौटने से। यह तो बात है, शून्य का पता है। अब यह पता चला है सी एक साथ आता है कि चलना करता है कि समारोह। हम साथ इस लागू करने की जरूरत नहीं है पाश या थोड़ी देर के पाश खुद के लिए एक। हम एक समारोह का उपयोग कर सकते हैं, संक्षेप में कहा जाता है, जिसका, कंप्यूटर अनुप्रयोग हलचल, या स्ट्रिंग तुलना जीवन में उद्देश्य ठीक है कि क्या करना है। आप इसे दो संकेत, दो पते दे, और यह उन पतों के लिए जाना जाएगा और उसके बाद के लिए पत्र तुलना गुणवत्ता के लिए पत्र के लिए पत्र सच क्या है, केवल जब रोक? Intuitively कंप्यूटर अनुप्रयोग हलचल चाहिए जब , अभी स्पष्ट पुनरावृति होने के लिए रोक? इसमें एक बैकस्लैश 0 मारता है तो स्ट्रिंग, जो बिंदु पर यह तय कर सकते हैं सब कुछ, मिलान किया गया है या एक विसंगति हुई है? हम अब इस चलाने और यदि हां, कोशिश हमारे छोटे पूंजीकरण खेल, इसलिए तुलना -1, ./compare-1 बना है, और छोटे अक्षरों में दोनों बार माँ टाइप करें। अब यह एक ही बात है। और मैं के साथ इसे फिर से करना है, तो लोअरकेस और तब शायद अपरकेस। अब यह वास्तव में दूसरों से अलग ऊपरी और छोटे के बीच। इतना ही नहीं है कि सभी मुश्किल या जादुई, लेकिन अब यह व्याख्या करता है क्या हुड के नीचे हो रहा है। तो हम और अधिक निकाल सकते हैं क्या सबक के इस तरह से? तो चलो इस पर एक नजर डालते हैं। मुझे आगे जाना है और एक लिखने जा रहा हूँ त्वरित कार्यक्रम यहां कॉपी 0 बुलाया। और अब आगे और वास्तव में चलते हैं चलो, कॉपी-0 के साथ है- करते हैं मैं यहाँ क्या मिला है पर एक नज़र रखना। जब मैं पहली बार उपयोगकर्ता बताओ, कुछ कहते हैं। तो मैं एक तार मिल और मैं एस में यह संग्रहीत। एस के बराबर होती है, तो फिर मैं जाँच नल के बराबर होती है, बस एक वापसी। तो यह सिर्फ मानक त्रुटि जाँच कर रही है। दिलचस्प कुछ नहीं हुआ है। और वास्तव में, हम त्रुटि से छुटकारा यदि जाँच, इस सप्ताह एक कोड की तरह लग रहा है इस समय। लेकिन मैं एक पाने के लिए शुरू कर दिया है उस बारे में थोड़ा बेहतर। अब लाइन 16 में एक सप्ताह पहले, हो सकता है यहां तक ​​कि एक दो दिन या घंटे पहले आप लाइन 16 का कहना है कि हो सकता है एक चर बुलाया टी बनाने और नकल इसे में है। और वह एक पूरी तरह से है उचित takeaway। लेकिन अब और अधिक सटीक हो। लाइन 16 में क्या हो रहा है? क्या की नकल की हो रही है दांये से बांये तक? हाँ? दर्शकों: टी एस के एक पते हो रही है? डेविड जे मालन: वास्तव में, टी एस का पता हो रही है। मुझे जाना है तो, अगर अब स्पष्ट होना पीठ कि पहले उदाहरण के लिए और मैं मैं में टाइप किया है बात बाहर निकालना। और मैं टाइप किया है क्या in-- यहाँ है, और यहाँ मैं में कहीं में टाइप किया जाता है क्या स्मृति, माँ और उसके बाद एक बैकस्लैश मेरे लिए जोड़ा है कि 0। क्या मैं यहाँ में संग्रहीत, याद इस स्थान में 1, 2, 3, 4 पर है इस एस में वर्तमान में क्या है। लाइन पर 16 तो, अगर मैं मुझे दे कहना एक और चर बुलाया टी और दुकान एस के मूल्य से कम में, क्या यहां जमा हो जाता है माँ नहीं होगा बल्कि सिर्फ नंबर 1। हम इस कार्यक्रम में आगे देखो तो अगर अब, क्या होने जा रहा है? तो यह है कि वहाँ नोटिस इस समारोह में आप कर सकते हैं सीज़र के लिए कुछ समय पहले इस का इस्तेमाल किया है, या Vigenere, या शायद बिल्कुल नहीं। मैं मैं कर रहा हूँ, मेरे printf के साथ दावा प्रतिलिपि टी भुनाने के लिए जा रहा है। पहली पंक्ति में 19, जल्दी विवेक में टी के strlen के चेक लंबाई की जाँच करें। क्योंकि मैं नहीं चाहता कुछ भुनाने की कोशिश अगर वहाँ कोई स्ट्रिंग नहीं है। उपयोगकर्ता सिर्फ हिट दर्ज हैं, भुनाने के लिए कुछ भी नहीं है। तो मैं लाइन 21 ऐसा करने के लिए नहीं करना चाहती। तो लाइन 21 capitalizing है जो जाहिरा तौर पर पत्र, टी में? दर्शकों: M? डेविड जे मालन: ऐसा लगता है जैसे यह नकल है, जो एक है? दर्शकों: एम। डेविड जे मालन: उह, मी। ठीक है, पहले मीटर तो, मैं कर रहा हूँ कि नोटिस क्योंकि , toupper करने से गुजर रहा है, जो आप इसे कभी नहीं देखा है, तो यह है करने के लिए सिर्फ एक समारोह अपने इनपुट के रूप में भुनाने। टी ब्रैकेट शून्य देने का अर्थ है मुझे टी के शून्य चरित्र। और तो यह कैसे करता है तस्वीर बदलने, स्पष्ट होना करने के लिए? क्या फिर से लिखे या परिवर्तित करने की जरूरत है एस के लिए सम्मान और टी और माँ के साथ बैकस्लैश शून्य। दर्शकों: [अश्राव्य] डेविड जे मालन: हाँ, तो यह एक यहाँ बस है- ठीक करने है-- बदल पाने की जरूरत है एक राजधानी मीटर को बदल पाने की जरूरत है। लेकिन अब, बाद में देखो कार्यक्रम है, मैं बाहर प्रिंट यदि मैं यहां साफ के रूप में एस और टी, क्या देखना एस और टी बाहर मुद्रण होने जा रहा। तो कॉपी-0, ./copy-0 बनाते हैं। मुझे आगे जाना है और टाइप करते हैं सभी लोअरकेस में माँ में। सूचना है दोनों मूल और प्रतिलिपि पूंजीकृत कर दिया गया है। क्यों? खैर, एस और टी दोनों ओर इशारा करते हैं, अगर तुम जाएगा, स्मृति का एक ही हिस्सा। और सच में, यह हो रही है वास्तव में तथ्य यह है uninteresting-- हम यहाँ पता शून्य उपयोग कर रहे हैं। मेरा मतलब है, मैं वास्तव में परवाह नहीं है जहां सामान स्मृति में है। माफ करना, मैं एक छोटे से बहुत ज्यादा मिटाकर कर रहा हूँ। लेकिन मैं वास्तव में परवाह नहीं है बातें स्मृति में हैं जहां। और हां, तो वास्तव में क्या प्रोग्रामर के बारे में सोचने के लिए करते हैं आप के बारे में बात यह है कि जब एक पता, या एक सूचक, यह स्मृति में है, जहां कौन परवाह करता है। यह कम है, तो मुझे परवाह नहीं है बाइट एक या एक अरब। मैं सिर्फ यह है कि परवाह चर प्रभावी ढंग से है स्मृति की है कि हिस्सा तरफ इशारा करते हुए। और हां, तो आगे से, बजाय वक्रोक्ति मनमाने ढंग से स्मृति पते से अधिक है, चलो सिर्फ संकेत आकर्षित करने के लिए शुरू तीर के रूप में संकेत के रूप में। तो और टी वास्तव में, क्या कर रहे हैं रहा है इस कार्यक्रम के अनुसार, , मैं टी बनाया कैसे की वजह यह सिर्फ दो अलग-अलग चर है स्मृति का एक ही हिस्सा तरफ इशारा करते हुए। वे कहाँ हैं और हम परवाह नहीं है। इसलिए हम सार दूर है कि विस्तार कर सकते हैं। तो मैं यह कैसे ठीक करूं? मैं नकल का एक संस्करण लिखना चाहते हैं कार्यक्रम कि वास्तव में प्रतियां स्ट्रिंग और केवल capitalizes प्रतिलिपि, बस intuitively, क्या मिल गया है एक होने के लिए हमारे समाधान के लिए घटक? दर्शकों: [अश्राव्य] डेविड जे मालन: हम एक क्या जरूरत है? दर्शकों: स्मृति का हिस्सा। डेविड जे मालन: हम की जरूरत है स्मृति का एक और हिस्सा है, है ना? हम नहीं जानते कि कैसे करने के लिए जरूरी है, फिर भी इसे करते हैं। लेकिन मैं एक तरह से इसलिए ऐसा होने की जरूरत कि कम मामले में मूल माँ स्मृति की है कि अतिरिक्त हिस्सा में समाप्त होता है। और फिर मैं कॉपी परिवर्तन, जब मैं यहाँ इस प्रति को बदलने के लिए नहीं करना चाहती। मैं बजाय केवल इस बदलना चाहते हैं प्रतिलिपि इतना है कि मूल रूप से अपरिवर्तित है। तो, चलो हम यह कर सकते हैं कि कैसे देखते हैं। में कॉपी-1, पहले से ही है जो टिप्पणी के छीन लिया गया, लेकिन ऑनलाइन टिप्पणी की है। हम बजाय following-- इन करना लाइनों के समान हैं, मुझे एक तार मिल और यह बात कहते हैं। लेकिन अब चलो हमारे सबसे में से एक को देखो जटिल लेकिन जटिलता के अंतिम थोड़ी देर के लिए, लाइन 16 यह ठीक है। साथ अपने आराम तो अगर चित्र हम सिर्फ drew-- मुझे, स्मृति का एक नया हिस्सा देना इस बारे में सब कुछ नकल, हम कोड के लिए है कि अनुवाद कैसे देखते हैं। तो लाइन 16, बाएं हाथ की ओर, चार * टी यहाँ पर मुझे इस बॉक्स देता है। यही कारण है कि यह सब होता है। दाहिने हाथ की ओर, एम alloc, या malloc, सुपर फैंसी स्मृति आबंटन है, सिर्फ कहने का एक गुप्त रास्ता मुझे स्मृति का एक हिस्सा दे। हम कितना स्मृति की ज़रूरत है? खैर, एक बड़ा अभिव्यक्ति की तरह है। लेकिन हम यह यहाँ कहते हैं देखते हैं क्या। तो यह निश्चित रूप से, दे रहा है मुझे एस की स्ट्रिंग लंबाई। तो, माँ यह क्या किया जाना चाहिए? इसलिए सिर्फ तीन, है ना? माँ तीन अक्षर है। आप भरोसा नहीं है बैकस्लैश शून्य जब आप यह एक स्ट्रिंग की लंबाई के बारे में बात करते हैं वास्तव में मानव दृश्यमान पत्र। तो माँ है, इसलिए इस 3 मुझे देता है। लेकिन मैं अब एक जोड़ रहा हूँ, एक मिनट रुको। क्यों मैं वास्तव में करना चाहते हैं 4 बाइट्स और न सिर्फ 3 आवंटित? हाँ? दर्शकों: प्रहरी मूल्य के लिए? डेविड जे मालन: वास्तव में, कि प्रहरी मूल्य के लिए। बैकस्लैश शून्य के लिए, मैं 4 बाइट्स की कुल जरूरत है। इसलिए मैं लंबाई की जरूरत है स्ट्रिंग प्लस 1 की। और फिर बस अच्छा measure-- के लिए यहां तक ​​कि इस सिस्टम पर हालांकि, यह हमेशा मैं कह रहा हूँ 1-- होने जा रहा है एक चार के आकार के द्वारा इस गुणा। Sizeof है पता चला है सी में एक ऑपरेटर कि बस आपको बताता है है कि बाइट्स की संख्या एक निश्चित डेटा प्रकार के लिए जरूरी है। यह सरणियों के लिए काम नहीं करता है, आम तौर पर, कभी कभी यह करता है। लेकिन सामान्य तौर पर इस मामले में, नहीं। कई एक बाइट्स कैसे लेकिन यह मुझे बता देगा पता चला है जो चार है, हमेशा के लिए एक है। तो यह 1 से गुणा करने की तरह है। कोड की तो सुपर गुप्त देख लाइन। लेकिन यह सब होता देता है मुझे स्मृति का एक हिस्सा। लेकिन यह नकल होना प्रतीत होता है कि स्मृति में कुछ भी? अभी तक नहीं। और तो लाइन 22 पर मुझे क्या करना है, और 23, 24, 25, ठीक है, मैं बस यह करते हैं। और इस तरह की है अब पुराने स्कूल सामान। इस pset 2, जहां की तरह है तुम सिर्फ बातें आगे बढ़ रहे हैं चारों ओर स्मृति में, या बल्कि तार में। तो मैं 0 से पुनरावृति कर रहा हूँ स्ट्रिंग एस की लंबाई। और मुझे लगता है मैं वें चरित्र नकल कर रहा हूँ टी में मैं वें चरित्र में एस में। और मुझे लगता है क्योंकि, प्रोग्रामर, बनाया बिल्कुल के रूप में कई बाइट्स आवंटित करने के लिए सुनिश्चित करें मैं जरूरत के रूप में, यह एकदम सही है एक-से-एक रिश्ता है। और मैं में माँ की नकल एक नए के लिए लोअरकेस। और फिर अंत में, मैं इस लाइन से करते हैं। और तो प्रभाव ही है यहां इस टी भुनाने के लिए। तो एक बहुत अवशोषित, लेकिन करने के लिए आप बस पर विचार करता है, तो वास्तव में क्या हो रहा है हुड के नीचे बस इन बढ़ रहा है वह सब है, चारों ओर बाइट्स इस समस्या को हल करने की जरूरत है बस हमें स्मृति के इस हिस्सा देने के लिए। अब के जोखिम में भारी, मुझे दिखा देना लगभग एक है कि अन्य उदाहरण इस एक को छोड़कर, समान कोड की लाइन। इसलिए इस हैकर संस्करण है इस कार्यक्रम का, अगर तुम जाएगा। लेकिन चलो बस गढ़ने जाने यह क्या हो रहा है में। 24 लाइन इस टी हुआ करते थे ब्रैकेट मैं एस ब्रैकेट मैं हो जाता है। अब, मैं यह बदल रहा हूँ बहुत अधिक गुप्त स्टार टी प्लस 1 स्टार एस प्लस 1 के बराबर होती है। तो क्या हो रहा है और यही कारण है हम एक स्टार चरित्र की क्या ज़रूरत है? हम पहले तारा देखा है, और इसे दूसरे तरीके से यहां इस्तेमाल किया जा रहा है। हम पहले से अब मैं देख रहा हूँ, चार * देखा एक शुरुआत में स्टार, और वह ठीक है। यह हम पता चला है क्योंकि एक तरह से सिर्फ अनुमान कर सकते हैं उन पहले से सिद्धांतों पर क्या हो रहा है। तो अभी स्पष्ट होना करने के लिए, एस क्या है? पिछले हफ्ते, यह एक स्ट्रिंग था। यही कारण है कि अब और नहीं पर्याप्त नहीं है। विशेष रूप से, एस क्या है? दर्शकों: [अश्राव्य] डेविड जे मालन: यह एक सूचक है। इसके बारे में पता है पहले चरित्र हम में टाइप। ठीक है, टी क्या है? दर्शकों: [अश्राव्य] डेविड जे मालन: पहली बाइट का पता टी में, स्मृति की है कि हिस्सा पुनः आवंटन। तो यह पता चला है कि जब हम स्ट्रिंग को ऊपर की ओर 0 से पुनरावृति length-- सब से पहले, मैं क्योंकि, 0 पर बंद शुरू होता है पाश बात के लिए इस पुराने स्कूल की। तो बस सादगी के लिए, चलो कोड की है कि पहली पंक्ति मान वास्तव में सिर्फ यह सही है। मैं शून्य उनका कहना है, शून्य है कुछ करने के लिए मुमकिन है एक प्रभाव के लिए नहीं जा रहा है। तो यह कहावत क्या है? यह स्टार पता चला है कि इस संदर्भ में ऑपरेटर भिन्नता है बस है जो ऑपरेटर, जाना कह का एक अच्छा तरीका निम्न पते पर। तो चलो, तो पहले से पता है स्मृति के इस खंड में चरित्र, * एस साधन वहाँ जाओ। और हम तैयार है क्योंकि इस तरह से चित्र, आप को अपनाने कर सकते हैं मानसिक मॉडल के बाद। इस रों है, और आप * एस * कहते हैं एक तरह से शूट और सीढ़ी की तरह है, आप बचपन से ही खेल याद है, उस तीर का पालन करें और जाने की तरह है पता करने के लिए। * टी एक ही बात है। तो यहाँ शुरू, इसका हिस्सा के पास जाओ। मैं बस पर आकर्षित नहीं कर सकते इस स्क्रीन है कि जिस तरह से। * टी यहां जाने के लिए इसका मतलब है। और फिर, पाश के लिए ही है यहाँ इस चरित्र को स्थानांतरित कह यहाँ इस चरित्र को स्थानांतरित करने, यहाँ इस चरित्र को स्थानांतरित। लेकिन यह कैसे मुझे लगता है कि incrementation करते हैं? मैंने सोचा कि मैं सिर्फ हटाए क्या पूर्ववत करने की जरूरत है। यह आम तौर पर कहा जाता है क्या है सूचक गणित, जो पते के साथ गणित का मतलब है। तो, इस में पाश के लिए, मैं, मैं incrementing रखने और एस एक पता है और टी एक है पता है, मैं सिर्फ 1 जोड़कर रखना, अगर कि बस आगे बढ़ते रहो, इसका मतलब है और आगे है, और स्मृति में भेज देता है। यह ऑक्सफोर्ड स्ट्रीट की तरह है, सीएस के निर्माण पर है कि सड़क। सीएस भवनों 33 ऑक्सफोर्ड स्ट्रीट पर है। तो अगर आप 33 कर रहे थे ऑक्सफोर्ड स्ट्रीट प्लस 1, कि 34 ऑक्सफोर्ड के लिए लाता है स्ट्रीट, तो 35 ऑक्सफोर्ड स्ट्रीट, फिर 36 ऑक्सफोर्ड स्ट्रीट, जो कुछ भी उन इमारतों वास्तव में कर रहे हैं - अगर वे मौजूद हैं। और हां, कि हम क्या कर रहे है यहां सूचक गणित के साथ। तो यह एक सुपर रहस्यमय रास्ता है खुद को व्यक्त। लेकिन यह सब क्या हो रहा है हुड के नीचे बस इन पतों पीछा कर रहा है, एक नक्शा निम्नलिखित की तरह, अगर तुम जाएगा, या जैसे तीर के निम्न हम स्क्रीन पर तैयार किया है। ठीक है, एक बहुत पचाने के लिए। वाक्य रचना पर कोई सवाल, अवधारणाओं, संकेत, malloc, या पसंद है। हाँ, यहाँ पर पहले। दर्शकों: तो है कि जहां * टी toupper * टी के बराबर होती है कहते हैं भुनाने के लिए जा रहा है कि सभी पत्र या just-- डेविड जे मालन: आह, वास्तव में अच्छा सवाल है। यहां इस लाइन में तो, 31, इस भुनाने के लिए जा रहा है पहले अक्षर या पत्र के सभी। तो चलो जा रहा द्वारा जवाब है कि चलो वापस पहले सिद्धांतों के लिए। और यहाँ पहले सिद्धांतों मेरा मतलब सिर्फ मूल परिभाषा को जाना क्या शामिल है की। तो toupper एक समारोह है कि एक चार capitalizes। बस इतना ही। * टी first-- करने के लिए जाने का मतलब टी में पता करने के लिए जाना। तो, तस्वीर में, यह हिस्सा है, तो स्मृति की हम malloc के साथ आवंटित, और इस टी टी * यहाँ जाने का मतलब है, है। इस बीच, आप गुजर रहे हैं कि मूल्य, छोटे मीटर toupper करने के लिए, तुम वापस हो रही है राजधानी एम, जहां आप इसे डाल रहे हैं? आपको लगता है कि एक ही स्थान में डाल रहे हैं। और तो उन के उस तर्क से मूल परिभाषा यह केवल पहले अक्षर capitalizing तुम्हें पता है मैं या एक साथ पुनरावृति जब तक पाश या थोड़ी देर के पाश के लिए, यह नहीं जा रहा है आप यह पूछने की तुलना में अधिक कुछ भी करने के लिए। अच्छा प्रश्न। हाँ? दर्शकों: क्यों आप का उपयोग किया था विधि के बजाय भिन्नता सरणी? डेविड जे मालन: आह, अच्छा सवाल है। क्यों आप भिन्नता का प्रयोग करेंगे बजाय सरणी विधि की विधि? कोई विशेष कारण, ईमानदार हो। और, वास्तव में, इस के लिए उदाहरण की तरह है, ठीक है, मैं सिर्फ बनाने बहस कर रहा हूँ और अधिक जटिल प्रोग्राम, अधिक आँखें, पर ग्लेज़िंग रहे हैं लोगों को बाहर की जाँच कर रहे इस सुपर रहस्यमय लग रहा है क्योंकि लेकिन यहां तक ​​कि यह एक ही बात कर रहा है, हालांकि। और हां, सच में, यह है एक अनावश्यक रूप से नेत्रहीन जटिल समाधान समस्या के लिए। यह अभी भी अच्छा डिजाइन है पांच डिजाइन को पांच में से, यह ब्रैकेट में है कि क्या संकेतन या सूचक संकेतन। हम मिलता है जब विशेष रूप से But-- बाद में पाठ्यक्रम में pset 5 में हम चाहते हैं कि शब्दकोश लागू जब कि मैं गुना की एक जोड़ी का उल्लेख किया है हम वास्तव में के बारे में परवाह करता हूँ निम्न स्तर स्मृति पते हम वास्तव में समझते हैं कि क्या चल रहा है। लेकिन, अब के लिए, यह इस पता चला है कि कोड यहाँ वर्ग कोष्ठक की लाइन वास्तव में मौजूद नहीं है। उन्होंने कहा जाता है क्या कर रहे हैं वाक्यात्मक चीनी, जो कहने का सिर्फ एक अजीब तरह से अच्छा तरीका है संकलक वर्ग कोष्ठक होने की धर्मान्तरित कि गणितीय अभिव्यक्ति। तो यह एक मानव परंपरा है सिर्फ लिखने के लिए सक्षम होने के लिए ये बहुत उपयोगकर्ता के अनुकूल है कोष्ठक। लेकिन क्या संकलक, बजना, वास्तव में किसी भी समय कर रही है आप लाइन में प्रकाश डाला है क्या लिखना 24, हुड के नीचे यह सच है यह करने के लिए परिवर्तित। यह एक इंसान के रूप में अभी और अधिक सुखद है पढ़ने के लिए और 24 लाइन की तरह कोड लिखने के लिए। लेकिन अंततः उन प्रशिक्षण के पहियों भी उतर आते हैं एक के अपने आराम मजबूत हो जाता है। ठीक है, यदि ऐसा है तो यह है कि इस याद सबसे बड़ी समस्या की तरह था हम में भाग गया। और कहा कि इस पूरे छिड़ क्या है संकेत के बारे में लानत बातचीत, और पते, और नकल बातें। हम पर फिसल गया, क्योंकि यह था इस बेवकूफ, बेवकूफ मुद्दा है, जिसके तहत मैं लॉरेन के साथ logically-- कार्यान्वित यहाँ डेमो और संतरे का रस पर milk-- में एक पूरी तरह से एल्गोरिदम सही समारोह दो चर 'स्वैपिंग के लिए मूल्यों, लेकिन लानत बात किसी भी लगातार है, या नहीं था मेरे कोड पर स्थायी, प्रभाव। और क्यों था? संक्षेप में, यही कारण है स्वैप के कार्यान्वयन तार्किक रूप से सही है, लेकिन कोई असर पड़ता है यह करने के लिए पारित कर रहे हैं कि चर पर, मुख्य लिए एक्स और वाई की तरह? इस मुद्दे का सार क्या था? हाँ? दर्शकों: चर बना दिया पास में चर की प्रतियां समारोह के माध्यम से। डेविड जे मालन: वास्तव में, आप जब पारित एक समारोह में चर, या बहस एक समारोह में, वे कर रहे हैं प्रतिलिपि, द्वारा पारित जो आप देख एक समान मिलता है एक्स और वाई दोनों के लिए बिट्स के पैटर्न, ए और बी यहाँ बुलाया। और आप कुछ भी कर सकते हैं आप उन प्रतियों के साथ चाहते हैं, लेकिन वे कोई है जा रहे हैं बुला समारोह पर प्रभाव। और, वास्तव में, हम उस आकर्षित किया स्क्रीन, याद है पर तस्वीर पिछली बार, जिससे आप यदि वास्तव में क्या है के बारे में सोचते यदि hood-- के नीचे चल रहा है यह आपके कंप्यूटर की मेमोरी है और यहाँ नीचे का हिस्सा है स्मृति, मुख्य के लिए इस्तेमाल किया जा रहा इस का हिस्सा है स्मृति, स्वैप के लिए इस्तेमाल किया जा रहा और तो भी अगर मुख्य है दो चर, एक्स और वाई, स्वैप समान लग रही हो सकता है 1 और 2 के हैं, जो दोनों के मूल्यों, लेकिन वे पूरी तरह से कर रहे हैं स्मृति के विभिन्न मात्रा। इसलिए हम यह करने के लिए एक समाधान की जरूरत है। और सच कहूँ तो, यह अब हम प्रतीत होता है कि ठीक है, इस समस्या का एक समाधान है। हम अब क्षमता के लिए है, तो पतों के माध्यम से बातें हेरफेर और, एक तरह से शूट और सीढ़ी शैली, इन तीरों का पालन करें और हम चाहते हैं कि कहीं भी जाने स्मृति में, हम नहीं कर सका के द्वारा इस समस्या का समाधान मुख्य से गुजर स्वैप करने के लिए न मानों हम करना चाहते हैं स्वैप, लेकिन बस intuitively क्या हम बजाय स्वैप करने के लिए पारित कर सकता है? [आवाज interposing] डेविड जे मालन: क्यों हम अभी नहीं है यह सही, पते पारित? हम क्यों स्वैप एक नहीं देते खजाने का नक्शा, अगर तुम जाएगा, कि करने के लिए इसे ले जाता है वास्तविक मूल्यों एक्स और वाई। चलो स्वैप, वास्तव में बदल उन मूल बिट्स के बजाय, बस बिट की प्रतियां गुजर रहा है। और हां, वास्तव में, कि क्या हो रहा है जा समाधान हो। इस संस्करण में यहाँ है स्पष्ट रूप से बुरा और त्रुटिपूर्ण। और अब, पहली नज़र में, यह सिर्फ लग रहा है जैसे हम बेतरतीब ढंग से सितारों की एक गुच्छा जोड़ा और अपनी उंगलियों को पार यह संकलन होगा। लेकिन, अब यह संकलन होगा। लेकिन इन बातों का अर्थ क्या देखते हैं। की और, दुर्भाग्य से, लेखकों सी एक और प्रतीक चुन सकते थे यह एक छोटे से बनाने के लिए साफ है, लेकिन स्टार ऑपरेटर में अलग अर्थ है दो अलग-अलग संदर्भों। और हम दोनों को देखा है, लेकिन भेद करते हैं। , वहाँ शीर्ष पर तो मैं एक और ख को बदल दिया है जब बुरा में पूर्णांक के होने से संस्करण सितारों, ए और बी int करने के लिए, इससे पहले, पूर्णांकों थे। अब में ए और बी क्या हैं अच्छा, हरी संस्करण? वे पतों कर रहे हैं। क्या, के पते स्पष्ट हो सकता है? पूर्णांकों के पते। मैं कर रहा हूँ कि इस तथ्य तो पूर्णांक स्टार साधन कह इस बात का पता है एक पूर्णांक, विशेष रूप से। तो अब कोड की लाइनों में नोटिस, कुछ और भी बदल गया है। tmp, क्योंकि एक ही रहता है यह सिर्फ अस्थायी पूर्णांक है, वहाँ कोई स्मृति जादू। लेकिन एक अब एक स्टार की जरूरत है। और, वास्तव में, हर ए और बी के दूसरे उल्लेख सब है कि है कि नोटिस लाल से हरे रंग बदल रहा है मैं prefixing रहा हूँ वह यह है कि सितारों के साथ उन चर। मैं ए और बी की नकल नहीं करना चाहते हैं। क्योंकि मैं सिर्फ ए और बी और स्वैप प्रतिलिपि ए और बी, मैं वास्तव में क्या स्वैपिंग रहा हूँ? बस पते, मैं स्वैप करना चाहता हूँ क्या उन पतों पर है। मुझे वहां जाना है। और तो स्टार ऑपरेटर मेरे समारोह के अंदर, नहीं पैरामीटर सूची के अंदर, आप उन पतों के लिए जाने का मतलब और वास्तव में उन मूल्यों को बदल जाते हैं। तो क्या तस्वीर है अब बजाय तरह देखो। खैर, बजाय अगर मैं गुजर रहा हूँ एक के लिए नहीं है और -1 और बी 2-- मैं वास्तव में जोड़ने की जरूरत यहां एक अन्य परिभाषा। तो यह हिस्सा लगता है कि स्मृति का स्थान 10 पर है। यह स्थान 11 पर है, लेकिन इस एक सरलीकरण का एक सा है, मैं अब एक्स दो विकल्प मैं पास करना है और वाई या मैं उनके पते के पास है? मैं उनके पते गुजरती हैं इस तरह, मैं तो बस अब लागू करने की जरूरत हरी कोड प्रति स्वैप कि यह देखता है तो एक और जब यह ख, यह सिर्फ ए और बी की नकल नहीं करता देखता है और दूध और संतरे का रस के लिए कदम। दूध और संतरे का रस रूपक, अब टूट जाती है क्योंकि उन कप तरल और न नक्शे की। हम बदले जाने की जरूरत है 10 और हम पता करने के लिए 11 संबोधित करने के लिए जाने की जरूरत है, और तो उस से अदला-बदली तर्क प्रदर्शन करते हैं। इसलिए तर्क एक ही है, लेकिन हम एक अलग तरह की जरूरत है के उन चर तक पहुँचने। और इसलिए अंत में, क्या कार्यक्रम इस प्रकार है जैसे लग गया है। Swap.c में सचमुच की नकल की और हरे रंग के संस्करण चिपकाया। लेकिन मैं एक परिवर्तन करने की जरूरत है। यह सिर्फ स्वैप बदलने के लिए पर्याप्त नहीं है। क्या कोड के अन्य लाइन मैं बदलने की जरूरत है? हाँ? दर्शकों: यह तर्क लेता है कहाँ। डेविड जे मालन: कहां यह अपने तर्क लेता है। तो मैं मुख्य अप करने के लिए स्क्रॉल, तो मैं सिर्फ एक्स और वाई में पारित नहीं कर सकते हैं, और, मैं पिछले वादा नई वाक्य रचना का टुकड़ा आज। मैं नहीं एक्स में पारित करने के लिए की जरूरत है और Y लेकिन एक्स और वाई के पते। और यह प्रतीक पता चला है सी के लेखकों को चुना है कि आप यहाँ एक एम्परसेंड का उपयोग अगर नहीं करने के लिए है, बिटवाइस एम्परसेंड के साथ भ्रमित हो, आप एक एम्परसेंड का उपयोग करते हैं यहाँ और यहाँ एक एम्परसेंड, यह आप के लिए बाहर के आंकड़े एक्स के पता क्या है, हो सकता है यह 10 है, क्या y का पता, शायद यह है 11, और बदले में उन लोगों से गुजरता है। इसलिए एक बहुत ही बार में सभी को अवशोषित करने के लिए। लेकिन हम में जल्दी से अब देखते हैं हमारे शेष चार मिनट जहां कुछ गड़बड़ा सकता है। और एक तरफ, वास्तव में के रूप में मैने यह तस्वीर ली, टीएफ एक या दो साल पहले इस तस्वीर ले लिया। तो यह वापस कोने है एलियट डायनिंग हॉल की। सूचक शायद सबसे मुश्किल कर रहे हैं हम CS50 में कवर किया है कि विषय। आप की तरह चिंता तो अगर शायद यह है की तरह ढलान की है एक हॉकी स्टिक से अधिक इस तरह, एहसास हम किस तरह की एक चोटी में पास आ रहे हैं वैचारिक जटिलता के संदर्भ। और मैं इस ऊपर लाने के फोटो, मैं कसम खाता हूँ क्योंकि गिरावट 1996 में भगवान के लिए, जब मैं लिया मेरे शिक्षण साथी के साथ CS50, निशात मेहता, वह मुझ में बैठ गए दोपहर के भोजन पर एलियट डी हॉल के कोने, या रात के खाने के लिए, या कुछ करने की कोशिश मुझे संकेत समझने में मदद करने के लिए। मैं सप्ताह के बाद किया गया था और यह है जहाँ यह व्याख्यान जब में पेश किया गया था मैं अंत में संकेत समझा। और मैं इस उम्मीद कर रहा हूँ अब तक जितनी जल्दी आप के लिए क्लिक करेंगे। लेकिन बिल्कुल बीच इस एहसास और अधिक परिष्कृत विषयों हम पर देखा है। लेकिन यह सबसे शक्तिशाली बीच है। आप यह मिलता है और जब यह वास्तव में सभी के लिए है बस अंत में एक साथ आने के लिए जा रहा है। तो बाकी यह नहीं है का आश्वासन दिया आज सभी सिंक करने की जरूरत है। यहाँ तो पिछले कार्यक्रम है हम को देखने के लिए जा रहे हैं। और हम एक साथ समाप्त करने के लिए जा रहे हैं claymation के त्वरित तीन मिनट हमारे दोस्त, निक Parlante द्वारा की गई। यहां एक कार्यक्रम के दो शीर्ष पर है कि, लाइनों एक चर एक्स और वाई की घोषणा की। जो दोनों के पते हैं पूर्णांकों की, उर्फ ​​संकेत दिए। हम तो पर्याप्त आवंटित स्मृति एक पूर्णांक के स्टोर करने के लिए और पते की दुकान एक्स में है कि स्मृति की। इसलिए, यह भी आसान है पहले उदाहरण से। , मुझे स्मृति के चार बाइट्स दे कि एक पूर्णांक के आकार है, और एक्स में उस पते डाल दिया। यह लाइन यहाँ मतलब एक्स में पता करने के लिए जाना और के अर्थ डाल जीवन, वहाँ संख्या 42। लेकिन इस लाइन मुझे चिंता। Y y में पता करने के लिए जाने का मतलब है स्टार, और वहाँ अशुभ संख्या 13 डाल दिया। क्यों इस बिंदु पर, यह खतरनाक है story-- में हालांकि तेजी से बताया था हमारे ढलते ही मिनटों में here-- क्यों यह बुरा है मुझे कहने के लिए, y में पता करने के लिए जाना है? दर्शकों: आप नहीं [सुनाई]। डेविड जे मालन: मैं नहीं किया है y में कुछ भी डाल दिया। तो y का मूल्य क्या है, कहानी में इस बिंदु पर? हमें पता नहीं है। यह कुछ कचरा मूल्य है और न ही Binky पता है। हम इस नोट पर खत्म हो सकता है। [वीडियो प्लेबैक] हे, Binky, जगा। यह सूचक मनोरंजन के लिए समय है। -वह क्या है? संकेत के बारे में जानें? ओह, गुडी। -अच्छी, आरंभ करने के लिए, मैं हम कर रहे हैं लगता है एक जोड़े के संकेत की जरूरत जा। -ठीक। इस कोड को दो संकेत का आवंटन जो पूर्णांकों के लिए बात कर सकते हैं। -OK, अच्छी तरह से मैं देख रहा हूँ दो संकेत दिए, लेकिन वे कुछ भी करने के लिए इशारा हो ऐसा नहीं लगता है। -यह सही है। शुरू में संकेत कुछ भी करने के लिए बात नहीं है। उनके द्वारा इंगित बातें कर रहे हैं pointees कहा जाता है और उन्हें स्थापित एक अलग कदम है। ठीक है, ठीक है, -ओह। मैं जानता था कि। pointees अलग कर रहे हैं। तो आप कैसे एक pointee आवंटित है? -OK, अच्छी तरह से इस कोड आवंटित एक नए पूर्णांक pointee, और इस हिस्से सेट एक्स यह इंगित करने के लिए। हे, कि बेहतर लग रहा है। तो यह कुछ करते हैं। -OK, मैं हूँ करने के लिए सूचक एक्स भिन्नता इसकी pointee में 42 नंबर की दुकान। इस चाल के लिए, मैं की आवश्यकता होगी मेरी अपसंदर्भन की जादू की छड़ी। अपसंदर्भन की -आपका जादू की छड़ी? उह, कि यह बहुत अच्छा है। -यह कोड की तरह दिखता है। मैं तो बस नंबर स्थापित करेंगे और-- [पॉप ध्वनि] हे, यह हो जाता है वहाँ देखो। तो, एक्स पर एक भिन्नता कर रही है इस प्रकार है तीर अपने pointee पहुँचने के लिए। इस मामले में, वहाँ में 42 स्टोर करने के लिए। अरे, संख्या में स्टोर करने के लिए इसे उपयोग करने की कोशिश अन्य सूचक के माध्यम से 13, वाई। -ठीक। मैं बस y करने के लिए यहाँ पर जायेंगे, और 13 नंबर सेट अप मिलता है। और फिर की छड़ी ले लो अपसंदर्भन और just-- [बजर ध्वनि] -ओह, हे कि काम नहीं किया। , Binky उह, मैं नहीं, कहो अपसंदर्भन लगता है की स्थापना क्योंकि y, एक अच्छा विचार है pointee ऊपर एक अलग कदम है। और मुझे लगता है कि हम कभी भी यह किया है नहीं लगता है। -Hmm, अच्छी बात है। हाँ, हम सूचक, वाई आवंटित है, लेकिन हम एक pointee को इंगित करने के लिए सेट कभी नहीं। -Hmm, बहुत चौकस। हे, तुम वहाँ Binky अच्छा देख रहे हैं। आप तो यह है कि इसे ठीक कर सकते Y अंक एक्स के रूप में एक ही pointee करने के लिए। -Sure, मैं अपने जादू की छड़ी का उपयोग सूचक असाइनमेंट की। एक होने जा रहा है कि -Is समस्या यह है कि पहले की तरह? -नहीं, इस pointees स्पर्श नहीं करता है। यह सिर्फ एक सूचक परिवर्तन एक ही thing-- को इंगित करने के लिए [कड़क आवाज़] एक और --as। -ओह मैं समझा। एक्स के रूप में एक ही जगह पर अब Y अंक। तो, अब Y तय हो गई है, रुको। यह एक pointee है। तो अगर आप की छड़ी की कोशिश कर सकते हैं 13 से अधिक भेजने के लिए फिर से अपसंदर्भन। -ओह, ठीक है, यहाँ जाता है। हे, कि देखो। अब y पर काम करता है अपसंदर्भन। और संकेत साझा कर रहे हैं क्योंकि एक pointee कि, वे दोनों 13 देखते हैं। हाँ, साझा करने, उह, जो भी हो। तो, हम अब स्थानों स्विच करने के लिए जा रहे हैं? -ओह, हम समय से बाहर रहे हैं। -But-- तीन सूचक नियम याद, बस। नंबर 1, बुनियादी संरचना आप एक सूचक है कि है, और यह एक pointee करने से अधिक अंक। लेकिन सूचक और pointee अलग कर रहे हैं। और आम त्रुटि एक सूचक स्थापित करने के लिए है लेकिन यह एक pointee देना भूल जाते हैं करने के लिए। संख्या 2, सूचक dereferencing सूचक में शुरू होता है और अधिक से अधिक अपने तीर इस प्रकार है इसकी pointee पहुँचने के लिए। हम सभी जानते हैं, यह केवल अगर वहाँ काम करता है एक तरह से वापस हो जाता है, जो एक pointee है, नंबर 1 शासन करने के लिए। संख्या 3, सूचक काम के एक सूचक लेता है और करने के लिए बात करने के लिए यह परिवर्तन एक और संकेत के रूप में एक ही pointee। काम के बाद तो, दो संकेत एक ही pointee के लिए बात करेंगे, कभी-कभी लगता है कि साझा करने का आह्वान किया है। और कहा कि वास्तव में, वहाँ यह सब है। अब अलविदा। [अंत प्लेबैक] डेविड जे मालन: यही कारण है कि CS50 के लिए है। प्रोफेसर निक Parlante करने के लिए धन्यवाद। हम अगले सप्ताह आप देखेंगे। [इलेक्ट्रॉनिक संगीत खेल]