[Powered by Google Translate] [2 सप्ताह जारी रहेगा] [डेविड जे Malan, हार्वर्ड विश्वविद्यालय] [यह CS50 है. - CS50.TV] सही सभी. इस CS50 है, और यह 2 सप्ताह के अंत है. यदि आप इस समय चारों ओर भूख कल की उम्मीद है, जानते हैं कि हम एक छोटे से समूह कल, गुरुवार, 1:15 के रूप में आयोजित करने के लिए जा रहे हैं. इस URL यहाँ अगर आप RSVP करना चाहते हैं. स्थान सीमित है, तो कृपया माफ कर अगर फार्म बार जब आप इसे भरने में भरी है. एक अन्य यूआरएल, हालांकि, कि ब्याज की हो सकती है. में सिर्फ एक महीने के समय के बारे में, इस पाठ्यक्रम के लिए उपलब्ध कराया जा रहा है सभी EDX के माध्यम से और अधिक मोटे तौर पर, जिसके माध्यम से इंटरनेट पर लोगों के साथ पालन करने में सक्षम हो जाएगा, पाठ्यक्रम में काफी सक्रिय रूप से वास्तव में संलग्न हैं. वे CS50 उपकरण और CS50 उपयोग कर सकता हूँ पर चर्चा और विभिन्न सॉफ्टवेयर उपकरण है कि हम पहले से ही इस सेमेस्टर उपयोग किया गया है की सबसे. और पहल की हम एक प्रयोग के रूप में इस वर्ष पर ले जाना चाहता हूँ देखने के लिए अभी कितना सामग्री हम अनुवाद कर सकते हैं अन्य भाषाओं में बात की और लिखित. तो अगर आप इस परियोजना में भाग लेने में रुचि रखते हैं हो सकता है जिससे हम कोर्स व्याख्यान के लिए अंग्रेजी टेप और उपशीर्षक प्रदान करेगा और शॉर्ट्स और सेमिनारों और वर्गों और इस तरह, अगर आप धाराप्रवाह बोलते हैं या लिखने धाराप्रवाह कुछ अन्य भाषा, हम आप इस परियोजना में शामिल करने के लिए प्यार है जिससे आप एक या एक से अधिक वीडियो पर ले जाएगा, उन्हें एक भाषा आप अच्छी तरह जानते हैं में अनुवाद. आप अंतरफलक की भावना दे, वहाँ इस उपयोगकर्ता वेब आधारित इंटरफेस है कि हम का उपयोग किया है कि अनिवार्य रूप से इस तरह एक UI पैदा करेगा. यह मुझे कुछ हेलोवीन पहले सिखा रहा था, और काले रंग में दाएँ हाथ वहाँ इन समय टिकटों के लिए अगले तरफ, आप विभिन्न चीजें हैं जो मेरे मुंह से उस दिन बाहर आया देखेंगे, और फिर इसे नीचे आप किसी अन्य भाषा में अनुवाद करने में सक्षम हो जाएगा क्या वास्तव में मानचित्रण के बीच, इस मामले में है, अंग्रेजी और कहते हैं, स्पेनिश. तो यह वास्तव में एक बहुत उपयोगकर्ता के अनुकूल उपकरण है. आप अतीत और तेजी से आगे कुंजीपटल शॉर्टकट के साथ बहुत आसानी से कर सकते हैं. तो अगर आप इस प्रयोग में भाग लेने के लिए और करना चाहते हैं और अपने शब्दों को देखा और पढ़ा वहाँ से बाहर लोगों के संभावित हजारों द्वारा कृपया, करने के लिए भाग लेने के लिए स्वतंत्र महसूस करते हैं. सोमवार से बिल्ली का बच्चा के बारे में एक शब्द भी नहीं. कहीं ऐसा न हो कि हम एक पीढ़ी डरावना संदेश भेजा है, एहसास है कि, के रूप में कार्यालय घंटे का सुझाव और वर्गों के रूप में सुझाव है, पाठ्यक्रम के डिजाइन बहुत ज्यादा है छात्रों और सहयोग समस्या सेट के माध्यम से काम करने के लिए बात कर रहे हैं और एक साथ समस्याओं, और वास्तव में लाइन बस नीचे आता है, फिर, काम आप अंततः अपने खुद के submit होना चाहिए. और इसलिए बहुत ईमानदारी से, कार्यालय घंटे में यह पूरी तरह से सामान्य है, यह पूरी तरह से करने के लिए भी उम्मीद थी, कुछ आप के बगल में दोस्त के साथ चैट. अगर वह या वह कुछ विषय के साथ संघर्ष कर रही है और आप की तरह कर रहे हैं, "ओह, अच्छा, मुझे तुम कोड के कुछ लाइन की एक झलक है कि मैं ने लिखा," यह ठीक है, ऐसा होता है, और है कि बहुत ज्यादा अनुकूल सीखने की प्रक्रिया के साथ मुझे लगता है,. रेखा को पार कर जाता है, जहां जब सॉर्ट के सिर झुका हुआ है पर अभी तक भी कई सेकंड के लिए यहाँ या कि वास्तव में सिर्फ मिनट के लिए अपने दोस्त के लिए एक unblocking अवसर, और निश्चित रूप से जब चीजें ईमेल और ड्रॉपबॉक्स और इस तरह के माध्यम से आदान - प्रदान हो, वहाँ भी लाइन है. तो हर तरह से सहज महसूस करते हैं और महसूस करने के लिए दोस्तों के साथ चैट करने के लिए प्रोत्साहित और सहपाठियों psets और अधिक के बारे में और सिर्फ एहसास है कि क्या आप अंततः submit वास्तव में अपने सृजन और नहीं किसी और के उत्पाद होना चाहिए. और इसलिए pset2 के लिए डोमेन विशिष्ट समस्याओं का एक, जो देर से कल रात बाहर आ जाएगी, क्रिप्टोग्राफी की दुनिया में गोता लगाने के लिए है, जो encrypting या scrambling जानकारी के कला है, और यह अंततः सुरक्षा की दुनिया से संबंधित है. अब, हम में से ज्यादातर के लिए सुरक्षा काफी सांसारिक तंत्र के रूप में आता है. हम सभी उपयोगकर्ता नाम और पासवर्ड है, और हम में से सभी को बहुत बुरा उपयोगकर्ता नाम और पासवर्ड है, सबसे अधिक संभावना है. यदि आपका पासवर्ड कई वेबसाइटों पर ही है, कि शायद सबसे अच्छा विचार नहीं है, के रूप में हम सेमेस्टर के अंत की ओर चर्चा करेंगे. कोई मज़ाक नहीं है - यदि आपका पासवर्ड एक चिपचिपा नोट पर लिखा है, अपने मॉनीटर पर वह भी जरूरी सबसे अच्छा डिजाइन, लेकिन काफी एक आम घटना नहीं है. और अगर आप क्रिप्टोग्राफी का उपयोग नहीं कर अपने पासवर्ड एन्क्रिप्ट कर रहे हैं, वे विशेष रूप से कमजोर हैं. तो अगर आपको लगता है कि आप सुपर हो जा रहा है एक छिपा Word दस्तावेज़ होने से चालाक कहीं अपनी हार्ड ड्राइव पर है कि अपने सभी पासवर्ड की है लेकिन यह एक फ़ोल्डर में है कि कोई एक में देखने जा रहा है, वह भी एक बहुत सुरक्षित तंत्र नहीं है. और इसलिए pset2 का परिचय देंगे क्या क्रिप्टोग्राफी की इस कला है और जानकारी पांव मार इतना है कि पासवर्ड की तरह बातें सभी को और अधिक सुरक्षित हैं. यहां संदर्भ है कि असुरक्षित डेटा के साथ एक के लिए यह एन्क्रिप्ट और यह हाथों और घुटनों के बल चढ़ना करने का अवसर आता है. और तो यह है, उदाहरण के लिए, एक एन्क्रिप्टेड संदेश का एक उदाहरण है. यह वास्तव में अंग्रेजी में कुछ कहते हैं, लेकिन यह स्पष्ट रूप से पूरी तरह स्पष्ट नहीं है. और आज हम पूर्ण आए वृत्त अलग चिढ़ाने के इस गुप्त संदेश क्या है. लेकिन कंप्यूटर की वास्तविक दुनिया में, बातें भी तरह वे अंग्रेजी वाक्यांश हो सकता है नहीं लग रहे हो. उदाहरण के लिए, यह है कि क्या आप एक मानक लिनक्स या मैक या यूनिक्स कंप्यूटर पर मिल सकता है एक फाइल में है कि एक बार एक समय पर पासवर्ड फ़ाइल बुलाया. आजकल यह अन्य स्थानों पर स्थानांतरित कर दिया गया है. लेकिन अगर आप एक सिस्टम पर सही जगह में लग रही है, तो आप न केवल अपने उपयोगकर्ता नाम देखेंगे या सिस्टम पर अन्य लोगों की है, लेकिन आप अपने पासवर्ड की एन्क्रिप्टेड संस्करण देखेंगे. दरअसल, शब्द वहाँ तहखाना से पता चलता है कि निम्नलिखित सामान एन्क्रिप्टेड है, और मालूम होता है यादृच्छिक अक्षर और वर्ण और संख्या की इस श्रृंखला और इतना आगे आम तौर पर कुछ रहस्य जानने के द्वारा केवल decrypted किया जा सकता है - एक गुप्त शब्द, एक गुप्त संख्या - और तो वास्तव में, अंततः फोड़े क्रिप्टोग्राफी नीचे की कला कुछ प्रकार के विश्वास के लिए और कुछ है जो किसी नहीं करता है जानने. इसलिए हम थोड़ा और अधिक विस्तार में आज यह पता लगाने के लिए और pset में आने के लिए. और अब पास / असफल पर एक शब्द भी नहीं. खासकर के रूप में आप में से कुछ pset1, उपकरण में डुबकी लगाई है, और खुद के लिए एक बहुत ही नई दुनिया का एहसास है कि कुंठाओं और भ्रम और सिर्फ तकनीकी कठिनाइयों काफी उम्मीद की जा रहे हैं, विशेष रूप से पहली pset है, जहां सिर्फ इतना ज्यादा है, सिर्फ लोकसभा और सीडी के साथ परिचित हो रही है और इन सभी रहस्यमय आज्ञाओं और एक नए माहौल में, और कहा कि वास्तविक सामग्री और खुद प्रोग्रामिंग से अलग है. तो भी एहसास है कि वहाँ निश्चित रूप से कर रहे हैं कार्यालय समय है कि एक समर्थन संरचना के रूप में मौजूद है. धारा इस आने वाले रविवार को शुरू करते हैं. लेकिन सबसे महत्वपूर्ण बात, यदि आप महसूस कर रहे हैं, सिर्फ इतना है कि इस दुनिया में तुम्हारे लिए नहीं है, एहसास है कि यह वास्तव में सिर्फ समय लगता है. और यह एक वर्ग के पास / लेने के असफल की साल पहले नहीं थे मेरे लिए इस अवसर के लिए, ईमानदारी से, मैं भी कभी नहीं कक्षा में पैर निर्धारित किया है. और आप इस बदलने के लिए जब तक कर सकते हैं, कहते हैं, निश्चित रूप से 5 सोमवार, इसलिए यदि आप किनारे पर अब कर रहे हैं, कि बजाय सिर का एहसास कुछ अन्य पानी में पूरी तरह, निश्चित रूप से बस पास / असफल बदलने पर विचार करें. फिर, वहाँ वास्तव में इस संस्कृति नहीं यहाँ चीजें लेने के हार्वर्ड पास / असफल के बाद से हर कोई वास्तव में प्राप्त करने के लिए या overachieve चाहता है, लेकिन स्पष्ट रूप से, यह बाहर कुछ करने की कोशिश कर के एक बढ़िया तरीका है कि आप परिचित नहीं हो सकता है, और तुम अंत ज्यादातर मामलों में कर रही है, हो सकता है, काफी ठीक है, शायद अपने आश्चर्य करने के लिए बहुत है. और अधिक ठोस शब्दों में, मैं क्या लगता है कि गुजारें / आम तौर पर विफल करता है, खासकर के रूप में आप pset0 साथ अनुभव हो सकता है, अगर आप कुछ pset में 10 घंटे, 15 घंटे, 25 घंटे में डाल दिया और तुम सिर्फ दीवार के खिलाफ रहे हैं अपना सिर पीटने और यह सुपर रात में देर हो रही है लेकिन आप रास्ते से pset 90% कर लिया है और तुम सिर्फ बाहर एक बात नहीं समझ सकते हैं, गुजारें / असफल वास्तव में इस तरह एक वर्ग के किनारे से दूर ले जाता है, जहाँ आप की तरह खुशी से कहते हैं, "ठीक है, मैं जानता हूँ कि यह सही नहीं है, लेकिन मैं इस पर मेरे गधे से काम किया है, मैं जहां यह समाप्त हो गया के साथ बहुत खुश हूँ, " और पारित करने के लिए कि अपेक्षाओं को पूरा / असफल हो जायेगी. तो यह है कि ध्यान में रखना है. सही सभी. तो आप में से जो हार्वर्ड वाई - फाई विश्वविद्यालय का उपयोग करने के लिए संघर्ष किया है, पता चला है कि वहाँ एक CS50 SSID, एक वाई - फाई कनेक्शन, खाक छानने से कि आप के लिए बेहतर नसीब हो सकता है. यह एक विडंबना है कि इस के लिए पासवर्ड है, यदि आप इस के लिए जोड़ने की कोशिश करने के लिए करना चाहते हैं और हमें पता है कि अगर यह बेहतर नहीं है - बेहतर गति के लिए 8 से 12345, सभी तरह है क्योंकि 8 5 से अधिक सुरक्षित है. तो अगर आप वाई - फाई पासवर्ड की जरूरत है, wirelessly CS50 के लिए यहाँ कनेक्ट, 12345678, CS50 पर पोस्ट पर चर्चा अगर आप अभी भी आंतरायिक कनेक्टिविटी मुद्दों है, और हम अधिकार है कि इस स्थान के लिए पता दूँगा. सही सभी. तो आप में से जो प्रशंसक या सभी चीजें एप्पल के लड़कों और लड़कियों के लिए विशेष रूप से एक त्वरित चिढ़ाने के. क्या मैं एक कुछ वर्षों से वापस खोदा इस फाइल यहाँ था, iUnlock.c, बस की तरह और अधिक ठोस और अधिक जटिल बनाने के लिए कुछ अधिक बुनियादी सी कार्यक्रमों हम लिख रहा हूँ. इसलिए मैं इस फाइल को खोला, iUnlock.c. यह आज के लिए व्याख्यान पेज पर उपलब्ध है. बाएं हाथ की ओर आप कार्यों की एक लंबी सूची देखेंगे. तो साथी जो यह लिखा कार्यों का एक बहुत है, अधिक से अधिक सिर्फ मुख्य लिखा था. वह पुस्तकालयों की एक पूरी गुच्छा यहां इस्तेमाल किया, और अगर हम स्क्रॉल के माध्यम से शुरू, क्या यह वास्तव में बहुत पहले मूल iPhone के लिए मुझे विश्वास है, दरार है. जब आप मूल iPhone jailbreak करने के लिए चाहता था, जो यह एटी एंड टी से untether मतलब और वास्तव में इस पर विशेष सॉफ्टवेयर स्थापित करने के लिए और चीजें हैं जो एप्पल के लोगों को करना नहीं चाहता था, किसी को बाहर बिल्कुल आंकड़ा कैसे वे सॉफ्टवेयर खामियों का फायदा उठा सकती है करने के लिए समय ले लिया, - iUnlock.c एप्पल सॉफ्टवेयर में गलतियों, कीड़े, और इस तरह पैदा हुआ था कि अगर आप इसे अपने कंप्यूटर पर संकलित और यह एक iPhone पर स्थापित कि, कहते हैं, एक यूएसबी केबल के माध्यम से आपके कंप्यूटर से कनेक्ट किया गया था, यह आप अपने iPhone पर प्रशासनिक या रूट विशेषाधिकार देना होगा और तुम बहुत ज्यादा है जो आप चाहते हैं. और इसलिए इस आकर्षक और चूहे बिल्ली का खेल हो गया है एप्पल और विशेष रूप में दुनिया के बाकी के रूप में वे के बीच, कई कंपनियों की तरह, उनके सामान नीचे बंद इतना है कि आप केवल इसके साथ क्या कर सकते हैं कि वे क्या इरादा करने की कोशिश. लेकिन इस तरह से लोगों और कम स्तर के विवरण की समझ के लिए धन्यवाद - और इस मामले में सी प्रोग्रामिंग और परिचित constructs का एक बहुत कि हम साथ खेलना शुरू कर दिया है, तो आप वास्तव में हार्डवेयर का लाभ उठाने में सक्षम हैं एक तरीके से आप फिट और जरूरी कुछ कॉर्पोरेट इकाई नहीं देखते हैं. तो उदाहरण के लिए, मुझे पता नहीं यह सब क्या कर रहा है, लेकिन GetVersion बहुत सरल लगता है, और यह इस तरह दिखता है एक समारोह में कहा कि इस व्यक्ति ने लिखा है. यह एक तर्क के रूप में पूर्णांक के कुछ प्रकार लेता है, कुछ भी वापस नहीं करता है, लेकिन पाश के लिए यहाँ एक और एक अगर हालत, अगर हालत को तोड़ने के साथ पाश के लिए प्रकट होता है और किसी भी तरह संस्करण संख्या से संबंधित अगर हम नीचे स्क्रॉल, इन खोजशब्दों के एक बहुत कुछ करने के लिए भले ही नया हो जा रहे हैं. और वहाँ हमने देखा है और कभी नहीं देखना कभी नहीं हो सकता है यहाँ में कार्यों की एक पूरी बहुत है सेमेस्टर के पाठ्यक्रम पर. दिन के अंत में, यह एक ही नियम और तर्क इस प्रकार है कि हम साथ किया गया है इस प्रकार अब तक खेल. तो यह तक भी अपने iPhone के 3s या 4s या जल्द ही 5s इन दिनों दरार पुरानी है, लेकिन पता है कि यह सब बहुत ज्यादा इस दुनिया से प्राप्त किया गया है कि हम में डुबकी लगाई है. चलो एक छोटे से अधिक सरल उदाहरण पर एक नज़र रखना: यह एक है, सिर्फ कुछ वाक्य रचना के साथ करने के लिए गरम और भी कुछ अन्य डेटा प्रकार कि हम के बारे में बात की है, लेकिन वास्तव में सी. में नहीं देखा यह एक positive1.c नामक एक फाइल है, और शीर्ष पर टिप्पणी के प्रति, इस बस की मांग है कि एक उपयोगकर्ता एक सकारात्मक संख्या प्रदान करते हैं. तो यह है, जबकि एक पाश है, जो उपयोगकर्ता इंटरैक्टिव कार्यक्रमों के लिए अच्छा है की एक उदाहरण है , जहाँ आप उपयोगकर्ता को बताने की जरूरत के लिए कुछ करना और यदि वे सहयोग नहीं करते हैं आप उन पर चिल्लाना या उनके इनपुट अस्वीकार. बिन्दु में प्रकरण: मैं लाइनों से 24 के माध्यम से 19 करने के लिए जा रहा हूँ इतने लंबे समय के उपयोगकर्ता मुझे एक सकारात्मक संख्या नहीं दी है. 18 लाइन पर इस विस्तार, मैं इस पूरे पाशन के निर्माण के ऊपर क्यों n की घोषणा के रूप में 22 लाइन के बगल में सही है, जहां मैं वास्तव में n करने के लिए प्राप्त करने के लिए देखभाल करने के लिए विरोध किया? हाँ. [स्कोप] छात्र. >> हाँ, तो गुंजाइश के इस मुद्दे. और आम आदमी की दृष्टि में, क्या गुंजाइश के लिए संदर्भित करता है? हाँ. >> [अश्राव्य छात्र प्रतिक्रिया] >> आप एक ज़ोर सा बात कर सकते हैं? [छात्र] तुम कहाँ कि चर का उपयोग कर सकते हैं. >> बिल्कुल सही. तुम कहाँ एक विशेष चर का उपयोग कर सकते हैं. और आम तौर पर, अंगूठे का नियम इस प्रकार अब तक किया गया है कि कुछ चर की गुंजाइश सबसे हाल ही में घुंघराले ब्रेसिज़ देखा है कि आप द्वारा परिभाषित किया गया है. और इसलिए इस मामले में अगर मैं n 22 लाइन पर की घोषणा की गलती की है, कि लाइन काम करेगा. मैं एक int हो, और मैं 22 लाइन में है कि चर n में इसे रखा जाएगा, लेकिन जो कोड की लाइन अब पता नहीं मैं किस बारे में बात कर रहा हूँ? >> [छात्र] 25. Malan [25], और यह पता चला 24 के रूप में अच्छी तरह से है क्योंकि इस मामले में यह घुंघराले ब्रेसिज़ के बाहर हो जाता है. तो सिर्फ एक बाधा का एक छोटा सा है, लेकिन बहुत आसानी से बस चर घोषित करने के द्वारा हल समारोह ही बाहर. हम आज बाद में देखने के लिए आप एक कदम आगे जा सकते हैं और तुम भी एक छोटे से आलसी हो सकता है. और यह सामान्य रूप में सिफारिश की जा, नहीं है, लेकिन आप भी आलसी हो सकता है और दुनिया भर में एक चर में कहें, हां, तो एक समारोह के बात करने के लिए, नहीं एक पाश के अंदर अंदर, लेकिन ही फाइल में, आप कार्यों के सभी के बाहर लिखा है, के रूप में मैं 15 लाइन पर यहाँ था. यह आम तौर पर frowned है, लेकिन इस एहसास कभी कभी अन्य समस्याओं के लिए एक समाधान है, के रूप में हम भी देखेंगे. तो अब हम इसे इस तरह से छोड़ देते हैं, लेकिन चलो देखते हैं अगर हम इस फिर से लिखना कर सकते हैं सिर्फ खुद को व्यक्त करने शुरू करने के लिए एक छोटे से अलग. इस कार्यक्रम अभी स्पष्ट होना करने, positive1 है. मुझे आगे यहाँ जाओ और मेरे टर्मिनल विंडो में positive1 दर्ज करें,. ठीक compiles. मैं positive1 चलाने के लिए, हिट दर्ज करने के लिए जा रहा हूँ. मैं मांग करता हूं कि आप मुझे एक सकारात्मक पूर्णांक दे. मैं -1 कहूँगा. ऐसा काम नहीं किया. 0, 99. यह काम करने लगता है. शायद सबसे कठोर परीक्षण नहीं है, लेकिन कम से कम यह एक अच्छा मानसिक स्वास्थ्य की जांच कि हम सही रास्ते पर हैं. तो अब मुझे आगे जाना है और इस के 2 संस्करण खोलने, और क्या पहले से ही अलग है? यह एक ही बात लागू है, लेकिन क्या स्पष्ट रूप से अलग इस बार के रूप में बाहर कूद है? हरे रंग में इस bool. यह हरे, इस bool, जो डेटा प्रकार के रूप में जाना जाता कीवर्ड में प्रकाश डाला है. यह सी. के सभी संस्करणों में आ नहीं बनाया करता है आप के लिए एक विशिष्ट पुस्तकालय में शामिल करने की जरूरत है. हमारे मामले में, मैं CS50 पुस्तकालय शामिल इतना है कि हम bool करने के लिए उपयोग किया है. लेकिन 18 लाइन में, हम एक बूलियन मान आभारी बुलाया है लगता है. मैं यह कुछ भी कहा हो सकता है, लेकिन मैं यह आभारी बुलाया बस की तरह कुछ अर्थ अर्थ संप्रेषित करने के लिए. तो 18 लाइन पर शुरू में, मैं जाहिरा तौर पर आभारी नहीं कर रहा हूँ क्योंकि बूलियन आभारी मूल्य 18 लाइन में झूठी initialized है. और फिर ऐसा लगता है कि मैं यहाँ क्या 21 लाइनों में 23 के माध्यम से किया जाता है मैं बस की तरह मेरे तर्क: लिखा है. कोई कार्यात्मक अलग तो है, लेकिन अब 22 लाइन में मैं जाँच अगर int उपयोगकर्ता प्रदान की गई है 0 से अधिक है, तो मैं बस सच करने के लिए आभारी के मूल्य बदल जाते हैं. और मुझे लगता है कि क्यों करते हो? क्योंकि 25 लाइन में, जाहिरा तौर पर मैं एक शर्त की जाँच करने के लिए जा रहा हूँ. इस लूप करो जबकि आभारी गलत है. तो मैं 1 संस्करण के लिए एक विकल्प के रूप में इस प्रस्तावित क्योंकि यह कम से कम एक छोटे से अधिक सहज है, शायद यह एक छोटे से अंग्रेजी में आधारित है. तो निम्न करते हैं, जबकि आप आभारी है या नहीं कर रहे हैं जबकि आभारी गलत है. और इस बार भी मैं जाहिरा तौर पर याद करने के लिए क्या उपयोगकर्ता में टाइप नहीं परवाह नहीं नोटिस क्योंकि वहाँ कोई चर n तो वास्तव में, वहाँ एक छोटे सफेद झूठ है. कार्यात्मक, कार्यक्रम एक अलग सा है एक बार हम इसे की तह तक क्योंकि मैं याद नहीं कर रहा हूँ पता क्या है. लेकिन मैं यहाँ से प्रदर्शित करने के लिए करना चाहता था भी है कि भले ही हम GetInt देखा है और एक के दाएँ हाथ की ओर पर इस्तेमाल किया जा रहा है GetString हस्ताक्षर इस प्रकार अब तक के बराबर होती है इतना है कि हम मूल्य, तकनीकी रूप से याद है, कि सख्ती से आवश्यक नहीं है. अगर जो भी कारण तुम सिर्फ मूल्य बचाने परवाह नहीं, तुम सिर्फ मूल्य की जाँच करने के लिए, सूचना है कि हम बस GetInt के रूप में यह लिख सकते हैं करना चाहते हैं, खुला कोष्ठक करीब paren. समारोह में कहा कि एक मूल्य वापस करने के लिए जा रहा है, के रूप में हम कह दिया गया है. यह एक int तुम्हें देने के लिए वापस जा रहा है. और यदि ऐसा है तो आप मानसिक रूप से यह हो रहा है के बारे में सोचना, जब मैं 99 में लिखते हैं, GetInt 99 संख्या देता है, और अब धारणात्मक, यह मेरे कोड के रूप में हालांकि वास्तव में थे. तो अगर 99 वास्तव में 0 से अधिक है, तो आभारी सच हो जाता है, तो उह 25 लाइन का एहसास है, हम कर रहे हैं, क्योंकि अब मैं आभारी हूँ, 26 और लाइन में, हम बस कहते हैं, "सकारात्मक पूर्णांक के लिए धन्यवाद!" जो कुछ भी हुआ हो. अब मामूली वाक्यात्मक चीनी यहाँ करते हैं, तो बात करने के लिए. चलो देखते अगर हम positive3 में यह 25 लाइन को साफ कर सकते हैं इस तीसरे और अंतिम संस्करण के साथ. फर्क सिर्फ इतना है अब क्या कोड की पंक्ति है नोटिस? >> [छात्र] 25. >> [Malan] हाँ, 25. और हम वास्तव में इस चाल नहीं देखा है अभी, लेकिन हम सोमवार को विस्मयादिबोधक बिंदु देखा था, जो क्या denotes? >> [छात्र] नहीं. >> या नहीं नकार. तो एक बूलियन मान ले और इसकी कीमत फ्लिप. सही गलत हो जाता है, झूठा सच हो जाता है. मैं तो यह प्रस्ताव होगा, यहां तक ​​कि एक छोटे से अधिक सहज कोड लिखने के एक तरीका है क्योंकि मैं अभी भी गलत करने के लिए आभारी इनिशियलाइज़, मैं अभी भी निम्न करते हैं, मैं सच करने के लिए आभारी सेट जब समय आता है, लेकिन अब आप वास्तव में सिर्फ मौखिक रूप से सही करने के लिए छोड़ दिया कोड अनुवाद कर सकते हैं, जबकि आभारी (!), क्योंकि धमाके या विस्मयादिबोधक बिंदु नहीं की धारणा को दर्शाता है, इसलिए जब आभारी नहीं. तो फिर, हम से प्रति किसी भी नई अवधारणाओं को नहीं शुरू की है. हम वापस Booleans बारे में बात की जब हम खरोंच के साथ खेला, अब पता है, लेकिन हम कई अलग अलग तरीकों में सिर्फ हमारे कोड लिखने शुरू कर सकते हैं. Pset1 में तो खासकर यदि आप कुछ प्रोग्राम लिखने के लिए जिस तरह से करने के लिए बाहर निकालने के लिए संघर्ष की तरह कर रहे हैं, बाधाओं रहे हो तुम भाग्य में हैं क्योंकि वहाँ समाधान के किसी भी संख्या हो सकती है कि तुम पर हो सकता है. उदाहरण के लिए, यह अभी भी कार्यक्रमों का सरलतम के लिए 3 है. सही सभी. और अब याद सोमवार को हम वापसी मान के साथ इस नोट पर छोड़ दिया है. तो हम बहुत पहले समय के लिए लिखा है एक प्रोग्राम है कि सिर्फ मुख्य नहीं है; यह भी अपने स्वयं के कस्टम समारोह है कि मैं यहाँ लिखा है. तो 31 लाइन में 34 के माध्यम से मैं एक घन समारोह क्रियान्वित किया है. यह जटिल नहीं है. यह सिर्फ एक * एक * इस मामले में. लेकिन इसके बारे में महत्वपूर्ण बात यह है कि मैं एक के रूप में इनपुट ले जा रहा हूँ और मैं एक * एक * एक के रूप में उत्पादन में लौट रहा हूँ. तो अब मैं करने की क्षमता है, बहुत मैं prinf अकेले के साथ करने के लिए इस्तेमाल की तरह, घन समारोह बुला द्वारा इस समारोह को बुलाओ. और घन समारोह कुछ इनपुट लेता है, और घन समारोह कुछ उत्पादन देता है. इसके विपरीत करके, printf सिर्फ कुछ किया. यह कुछ है कि हम के बारे में परवाह नहीं लौटने के लिए, भले ही एक अलग रूप में यह एक मूल्य वापस नहीं करता है; आप सिर्फ आम तौर पर इसे अनदेखा. Printf सिर्फ कुछ किया. यह स्क्रीन करने के लिए मुद्रण के एक पक्ष प्रभाव था. यहाँ इसके विपरीत करके, हम घन समारोह है, जो वास्तव में कुछ देता है. तो इस बात से परिचित लोगों के लिए यह एक काफी स्पष्ट विचार है. लेकिन कम जानकारी में गुजर रहा है और वापस outputs हो रही इस विचार के साथ परिचित लोगों के लिए, में सिर्फ कुछ सुपर आसान करने की कोशिश करते हैं. आरामदायक किसी मंच पर संक्षेप में आ रहा है? तुम तुम पर एक कैमरा के साथ सहज रूप में अच्छी तरह से हो सकता है. हाँ? ठीक है. आपका नाम क्या है? >> [छात्र] केन. >> केन. सही सभी. केन, पर आते हैं. केन तरह के एक समारोह में यहाँ होने जा रहा है. चलो आगे बढ़ो और इस करना. चलो एक छोटे से कल्पना. आपसे मिलकर अच्छा लगा. केंद्र स्तर पर आपका स्वागत है. सही सभी. चलो इस बटन यहाँ मारा. सही सभी. तो यहाँ आप एक आधुनिक चॉकबोर्ड है, और क्या मैं कर रहा हूँ मुख्य समारोह है, उदाहरण के लिए, और मैं अपने हाथ में एक iPad नहीं है. खैर, मुझे लगता है कि यह नहीं कह सकता है - मैं वास्तव में कैसे करने के लिए नहीं याद है. मैं वास्तव में अच्छा लिखावट नहीं है, और इसलिए मैं आप मेरे लिए स्क्रीन पर कुछ प्रिंट करने के लिए करना चाहते हैं. मैं मुख्य कार्यक्रम किया जा रहा हूँ, और मैं आप यह कहते हैं के लिए जा रहा हूँ यह मेरी चिकन खरोंच में लेखन और फिर आप एक इनपुट गुजर से. तो मूर्ख हालांकि इस अभ्यास है, कार्यों की धारणा और एक समारोह बुला और एक समारोह वास्तव में फोड़े लौटने इस के लिए नीचे. मैं मुख्य हूँ, मैं सिर्फ स्क्रीन पर printf, बोली गंदें शब्द बोलना कुछ लिखा है, मैं इस कार्यक्रम चल रहा हूँ, और जैसे ही printf बुलाया जाता है, यह एक तर्क या दोहरे उद्धरण चिह्नों के बीच कभी कभी एक पैरामीटर लेता है. यहाँ है कि तर्क है. मैं यह केन के लिए जा रहा हूँ. वह एक काले साल के कुछ पहले नंबर लिखा बॉक्स कि जाहिरा तौर पर ही जानता है कि कैसे स्क्रीन पर बातें मुद्रित करने के लिए. तो निष्पादित. यह बुरा नहीं है. बहुत अच्छा है. तो अब केन क्रियान्वित किया जाता है. क्या वह मुझे कुछ हाथ वापस करने की आवश्यकता है? ऐसा नहीं है कि हम इस प्रकार अब तक देखा है. फिर, printf वास्तव में एक संख्या वापस नहीं करता है, लेकिन हम अब के लिए कि अनदेखा करने जा रहे हैं क्योंकि हम यह कभी नहीं किया है. इसलिए कि यह केन के लिए है. और इसलिए अब मुख्य कार्यक्रम के नियंत्रण पर फिर से लेता है क्योंकि कोड की है कि लाइन है, printf क्रियान्वित किया जाता है. और हम अपने रास्ते के बारे में जाने के लिए क्रियान्वित जो अन्य लाइनों वहाँ हैं. तो अब हम एक से थोड़ा अलग उदाहरण की कोशिश. इस बार यहाँ पहले स्क्रीन को साफ करने के लिए, और इस समय हम cubing समारोह करूँगा, लेकिन इस बार, मैं एक निर्गम मूल्य की उम्मीद है. तो चलो आगे बढ़ो और इस करना. अब मैं कोड की एक पंक्ति है कि कहना है कि एक्स एक्स के घन हो जाता है. कोड की पंक्ति, याद है, इस तरह दिखता है: x = घन (x); तो यह कैसे काम करने जा रहा है? चलो आगे बढ़ो और आप फिर से एक सफेद स्क्रीन दे. मैं अब नीचे x का मान लिखने जा रहा हूँ, जो समय में इस समय में होना होता है, चलो कहते हैं, 2 इसे साधारण रखना. मैं 2 के मूल्य है, जो मेरे मूल्य x है कागज के एक टुकड़े पर नीचे लिखा है. मैं इसे केन हाथ. >> और मैं अभी जवाब लिखने के लिए? >> हाँ, चलो बस जवाब लिखना. ठीक है. और अब वह मुझे कुछ वापस है. बिल्कुल सही. Segue अच्छा लगा. तो अब वह मेरे हाथ वापस इस मामले में 8 के मूल्य, और मैं इसके साथ क्या करना है? वास्तव में - चलो देखते हैं, यह सही हो. क्या मैं इसके साथ क्या करने जा रहा हूँ? अब मैं यह मान ले और वास्तव में यह स्मृति में वे एक ही टुकड़े में स्टोर करने के लिए जा रहा हूँ. नोटिस लेकिन मैं यहाँ संघर्ष के तरह कर रहा हूँ. मैं थोड़ा उलझन में हूँ क्योंकि मैं वास्तव में जहां एक्स का मान लिखने, क्योंकि मैं अभी क्या किया है शारीरिक रूप से हाथ कागज का एक टुकड़ा है कि 2 मूल्य था केन है, जो x था, और वास्तव में, ठीक है कि क्या हुआ. तो यह पता चला है कि जब आप समारोह फोन और आप एक बहस में पारित हैलो की तरह, दुनिया या आप 2 की तरह एक बहस में पारित, आम तौर पर, आप उस तर्क की एक प्रति में गुजर रहे हैं. और तो बस के रूप में मैं नीचे लिखा 2 संख्या यहाँ और केन को सौंप दिया है, इसका मतलब यह होगा कि मैं अभी भी 2 मूल्य की एक प्रति कहीं है क्योंकि वास्तव में, अब है कि मैं वापस 8 मूल्य मिल गया है, मैं रैम में वापस जाने की जरूरत है और वास्तव में नीचे 8 लिखने जहां मैं एक बार में 2 नंबर था. तो नेत्रहीन, में गुजर रहा है, सचमुच, मूल्य की एक प्रति की इस धारणा को याद है. केन करता है उसकी बात, मुझे वापस कुछ हाथ - इस मामले में 8 की तरह एक मूल्य - और फिर मैं करने के लिए है कि मूल्य के साथ कुछ करना है अगर मैं इसे रखने के आसपास चाहते हैं. तो इस सब के वापस आने के लिए सभी को भी लंबे समय से पहले परिचित हो जाएगा. तुम इतना इस डेमो के लिए यहाँ धन्यवाद, केन. [वाहवाही] बहुत अच्छी तरह से किया जाता है. चलो देखते हैं कि कैसे अंततः बुला रहा है कि हम यहाँ कर दिया गया है समारोह के कुछ संबंधित. मुझे आगे जाना है और हमें वापस लाने cubing उदाहरण के लिए यहाँ. ध्यान दें कि यदि हम वास्तव में इस आगे ले शुरू करना चाहते हैं, हम करने के लिए तथ्य यह है कि संख्या x है कि यहाँ में पारित किया जा रहा है के प्रति जागरूक होने के लिए जा रहे हैं क्या वास्तव में कार्य करने के लिए किया जा रहा है में पारित से अलग है. तो फिर, नकल द्वारा यह पारित करने के लिए बस एक पल में काफी सार्थक बनने जा रहा है. चलो कुछ है कि बहुत सही अभी तक काम नहीं करता है पर एक नज़र रखना. मुझे आगे जाना है और एक तीसरी छोटी गाड़ी उदाहरण है, जो स्वभाव से त्रुटिपूर्ण है खोलने जा रहा हूँ, और यह buggy3 कहा जाता है और यह एक गमागमन समारोह लागू. यहाँ हम एक मुख्य कार्य है कि एक्स और वाई मनमाने ढंग से किया गया है 1 और 2 के लिए initialized, क्रमशः है. हम GetInt का उपयोग कर सकता है, लेकिन हम सिर्फ एक सरल व्यायाम की जरूरत है, तो यह 1 और 2 के रूप में हार्ड कोडित है. लाइनों 21 और 22 में, हम जाहिरा तौर पर एक्स और वाई, 1 प्रति पंक्ति प्रिंट. फिर 23 लाइन पर, मैं दावा है कि मैं इन मूल्यों गमागमन रहा हूँ, डॉट, डॉट, डॉट. मैं जाहिरा तौर पर लाइन में एक समारोह में 24 बुलाया स्वैप कि 2 तर्क लेता है कहते हैं. यह पूरी तरह से कार्यों के लिए 2 तर्क लेने के लिए कानूनी है. हमने देखा है printf यह पहले से ही कर. तो स्वैप जाहिरा तौर पर एक्स और वाई लेता है, और जैसा कि इसके नाम से पता चलता है, मुझे आशा है कि यह करने के लिए इन 2 मूल्यों स्वैप जा रहा है. तो फिर मैं लाइन पर दावा है कि 25 "बदली!" और मैं एक्स और वाई पुनर्मुद्रण धारणा है कि वे वास्तव में बदली किया गया के तहत. लेकिन अगर मैं वास्तव में इस कार्यक्रम को चलाने - मुझे एक टर्मिनल विंडो खोलने, मुझे बनाने buggy3 - जैसा कि नाम से पता चलता है, यह अच्छी तरह से खत्म करने के लिए नहीं जा रहा है क्योंकि जब मैं हिट दर्ज करें, सूचना है कि एक्स 1 है, y 2 है, और अभी तक इस कार्यक्रम के अंत में, वे अब भी कर रहे हैं, वास्तव में, एक ही. अभी केन के साथ, वास्तव में क्या हो रहा है तो प्रदर्शन पर आधारित है? इस स्वैप समारोह में डुबकी चलो. यह सुपर कम है. यह केवल लंबे समय से कोड की कुछ लाइनों. लेकिन मौलिक सरल केन के साथ यहां संवाददाताओं से कहा कहानी पर आधारित समस्या क्या है? स्वैप क्यों टूट गया है? [छात्र] आप एक चर नकल नहीं भंडारण कर रहे हैं. बिल्कुल सही. हम एक प्रतिलिपि भंडारण कर रहे हैं, ही नहीं चर. दूसरे शब्दों में, स्वैप जाहिरा तौर पर 2 तर्क, एक int लेता है, और यह मनमाने ढंग से ए और बी कहा जाता है, और यहाँ मैं एक्स और वाई, जो क्रमशः 1 और 2 में पारित कर दिया है, लेकिन मैं सचमुच एक्स में नहीं जा रहा हूँ, मैं सचमुच y में नहीं जा रहा हूँ, मैं x और y की एक प्रतिलिपि की एक प्रति गुजर रहा हूँ. यह लगभग रूप में यद्यपि आप की नकल की और स्वैप में चिपकाया मूल्यों है कि आप यह वास्तव में हेरफेर करने के लिए करना चाहते हैं. तो अगर यह मामला है, 35 जब मैं इस कार्यक्रम शुरू की रेखा को क्रियान्वित तो 36 है, जब मैं कहानी में इस बिंदु पर 37 लाइन के लिए मिलता है, एक के मूल्य क्या है? कहानी में इस बिंदु पर, रेखा 37, क्या इस बिंदु पर एक मूल्य है? >> 1 [छात्र]. [Malan] यह सिर्फ 1 होना चाहिए, सही है, क्योंकि एक्स में पहले तर्क के रूप में पारित किया गया था, और इस समारोह में सिर्फ मनमाने ढंग से अपनी पहली तर्क बुला रही है. इसी तरह दूसरा तर्क y है, और यह सिर्फ मनमाने ढंग से दूसरा तर्क ख बुला. इस विरोधाभास वास्तव में काफी बस समझाया. इसके बारे में सोचो. हममें से कोई भी व्यक्ति जो printf लिखा था से मुलाकात की है, तो निश्चित रूप से, वह या वह कोई विचार हमारे चर क्या 30 साल बाद करने के लिए कहा जा रहा है. तो तुम क्या आप लिख रहे कार्यों में चर कॉल के बीच एक अंतर हो गया है और आप क्या आप या फोन का उपयोग कर रहे हैं कार्यों में चर कहते हैं. तो दूसरे शब्दों में, मैं एक्स और वाई के रूप में अपने चर लिखा है, लेकिन अगर किसी और स्वैप समारोह में लिखा था, वह या वह निश्चित रूप से नहीं पता होगा क्या अपने चर के लिए बुलाया जा रहे हैं, तो एहसास है कि इस वजह से आप के नाम के इस द्वंद्व है. तकनीकी तौर पर, मैं संयोग से यह कर सकता है, लेकिन वे अभी भी प्रतियां के रूप में पारित किया जाएगा. यह सिर्फ एक संयोग ही होगा aesthetically है कि अगर व्यक्ति जो स्वैप लिखा उन्होंने एक ही नाम का इस्तेमाल किया. तो कहानी में इस बिंदु पर, 37 लाइन, एक 1 है, बी 2 है, और अब मैं उन्हें स्वैप करने के लिए आगे बढ़ें. सब से पहले, मुझे वास्तव में यह बहुत अधिक बस. मैं नहीं जानता कि कोड की उन 3 लाइनों क्या कर रहे थे. मुझे सिर्फ यह करना: ख = एक; एक = ख; किया. ऐसा क्यों है कि टूटी हुई है, तार्किक? यह सहज बात की तरह है, है ना? एक हो जाता है बी और बी तो एक हो जाता है, लेकिन समस्या यह है कि जैसे ही लाइन 37 निष्पादित करता है, क्या ए और बी के मूल्य है? एक ही है, 1, क्योंकि तुम clobbered है, इतनी बात करने के लिए, आप ख बदल दिया है करने के लिए एक बराबर है. तो एक बार 37 लाइन मार डाला गया है, यह बहुत अच्छी बात है, अब आप नंबर 1 की 2 प्रतियां इस समारोह के अंदर है, तो फिर जब आप 38 लाइन में कहना एक = ख, आप की तरह खराब कर रहे हैं क्योंकि आप सिर्फ 1 के लिए कर रहे हैं 1 बताए. आप किस तरह के मूल्य के बारे में परवाह खो दिया है. तो इस के मूल संस्करण में नोटिस, जो मैंने किया. मैं बजाय कोड की तीसरी पंक्ति है कि इस तरह से देखा था. मैं एक अस्थायी चर घोषणा. Tmp एक अस्थायी चर के लिए एक बहुत ही आम नाम है, और यह एक int क्योंकि यह मैच मैं क्या करने की एक प्रतिलिपि बनाना चाहते है. मैं tmp की एक अंदर की कॉपी की दुकान है, तो एक बार 37 लाइन मार डाला गया है, त्वरित मानसिक स्वास्थ्य की जांच - एक के मूल्य 1, ख के मूल्य 2 है, और tmp के मूल्य भी है 1. तो अब मैं 38 लाइन को अंजाम. एक बार में 38 लाइन कार्यान्वित, एक ख के मूल्य पर लेता है. और बी 2 था, तो अब 2. तो कहानी में इस बिंदु पर, एक 2, बी 2 है, और tmp 1 है, तो अब तार्किक, हम बस खटखटाने से tmp ख में मूल्य और हम कर रहे हैं कर सकते हैं. तो हम उस समस्या का हल है. दुर्भाग्य से, जब मैं इस रूप में इस कार्यक्रम को चलाने, यह वास्तव में कोई भी मान स्वैप नहीं करता है. लेकिन स्पष्ट हो, क्यों? मैं बस एक पल पहले से तार्किक समस्या तय, लेकिन फिर, अगर मैं इस कार्यक्रम को चलाने, एक्स और वाई अपरिवर्तित ही रहेंगे प्रोग्राम निष्पादन के अंत तक. [अश्राव्य छात्र टिप्पणी] >> हम कुछ भी नहीं लौटे हैं, इसलिए, यह सच है. लेकिन यह निकलता है वहाँ एक समस्या का एक सा है क्योंकि इस प्रकार अब तक, हम एक ही बात पर लौटने में सक्षम किया गया है एक बात है, और इस सी. प्रतिबंध है आप केवल एक मूल्य वास्तव में लौट सकते हैं, जो मामले में मैं एक तरह से यहाँ फँस गया हूँ क्योंकि मैं एक्स के नए मूल्य लौट सकता है या मैं y के नए मूल्य लौट सकता है, लेकिन मैं दोनों वापस चाहते हैं. तो यहाँ लौट रहा है सरल समाधान नहीं है. लेकिन समस्या यह मौलिक क्यों है? क्या हम वास्तव में बदली है? [छात्र] एक और ख. >> एक और ख. लेकिन एक और ख एक्स और वाई, जिसका मतलब है कि हम सिर्फ इस काम के सभी प्रतियां हैं, हम सिर्फ 3 मिनट बिताए स्वैप समारोह और इन चर के सभी 3 के बारे में बात कर रहा है, और कि अलगाव में महान है, पूरी तरह से सही है, लेकिन एक और ख गुंजाइश ही इन लाइनों में यहाँ है. तो पाश के लिए एक बस की तरह, अगर आप एक पूर्णांक की घोषणा मैं पाश के लिए अंदर इसी तरह, अगर आप एक और ख एक समारोह के अंदर घोषणा कर रहे हैं कि आप लिखा है, वे केवल कि समारोह के वैध अंदर कर रहे हैं, जो के रूप में जल्द ही के रूप में स्वैप क्रियान्वित किया जाता है मतलब और हम 25 लाइन के लिए 24 लाइन से चलते हैं, एक्स और वाई बिल्कुल नहीं बदला है. तुम सिर्फ समय की एक पूरी बहुत चर की प्रतियां गमागमन बर्बाद किया. तो यह पता चला है कि इस समाधान वास्तव में गैर स्पष्ट है. यह काफी के लिए मूल्यों को वापस करने के लिए पर्याप्त नहीं है क्योंकि हम केवल 1 मान सकते हैं, और मैं वास्तव में एक ही समय में दोनों एक्स और वाई स्वैप करना चाहते हो, तो हम करने के लिए यह करने के लिए वापस आने के लिए जा रहे हैं. लेकिन अब के लिए एहसास है, कि इस मुद्दे को मौलिक तथ्य यह है कि एक और ख प्रतियां हैं से निकाली गई और वे अपने स्वयं के दायरे में हैं. चलो कुछ रास्ते में इस को हल करने की कोशिश. मुझे वास्तव में यहाँ वापस स्क्रॉल करें और खोलने के लिए, हम कहते हैं, इस का एक चौथा संस्करण buggy4. इस बारे में क्या? यह एक समान है, लेकिन इससे पहले कि हम इसे सुलझाने में एक चाकू ले देखने के लिए समस्या है. इस कार्यक्रम के वेतन वृद्धि कहा जाता है, और यह स्पष्ट तौर पर 1 18 लाइन में एक एक्स पूर्णांक initializes. मैं तो दावा एक्स 1 है, मैं तो "incrementing कर रहा है ..." का दावा मैं तो वेतन वृद्धि कहते हैं, लेकिन फिर 22 और 23 लाइनों में, मैं दावा है कि यह incremented गया है, मैं दावा x अब जो कुछ भी यह है - 2, संभाव्यतः - लेकिन इस कार्यक्रम छोटी गाड़ी है. समस्या क्या है? हाँ. >> [अश्राव्य छात्र प्रतिक्रिया] वास्तव में. >> तो x घोषित किया गया है, जाहिर है 18 लाइन पर. कि मुख्य घुंघराले ब्रेसिज़ के अंदर है. यहाँ इतना सरल जवाब है कि जबकि एक्स यहाँ मौजूद है, यह 32 लाइन में मौजूद नहीं है, इसलिए यह कार्यक्रम वास्तव में भी संकलन नहीं होगा. संकलक जब मैं इस कोड संकलन करने की कोशिश करने के लिए मुझ पर चिल्लाना जा रहा है कुछ अघोषित पहचानकर्ता या उस प्रभाव के लिए कुछ के बारे में. वास्तव में, हम कोशिश करते हैं. यह buggy4 बनाने के लिए है. वहाँ यह है. 32 लाइन में अघोषित पहचानकर्ता 'एक्स' का प्रयोग करें. और वास्तव में, हम और अधिक स्पष्ट आज यहां इतना है कि यह उपयोगी है कार्यालय घंटे में और घर पर. सूचना है कि यह एक छोटी cryptically लिखा है. लेकिन तथ्य यह है कि बजना है हम पर चिल्लाया, buggy4.c कह: 32:5, वास्तव में उपयोगी है. इसका मतलब यह है कि त्रुटि चरित्र 5 की स्थिति में 32 लाइन पर है. तो 1, 2, 3, 4, 5. यह वास्तव में है, जहां समस्या है. और यह भी, भी ध्यान में रखने के कार्यालय घंटे में और घर में, मैं भाग्यशाली यहाँ हूँ. मैं एक गलती की है. यह तय करने के लिए अपेक्षाकृत आसान होने जा रहा है. लेकिन यदि आप एक पूरे भारी त्रुटि संदेशों में से भरा स्क्रीन मिल, फिर एहसास है कि नीचा एक सिर्फ सर्वोच्च एक के लक्षण हो सकता है. तो हमेशा ऊपर से नीचे अपने कीड़े का पीछा क्योंकि वहाँ सिर्फ एक डेज़ी श्रृंखला प्रभाव हो सकता है सुझाव है कि आप रास्ता अधिक समस्याओं की तुलना में आप वास्तव में क्या है. तो हम यह कैसे तय अगर अपने लक्ष्य के लिए एक्स वेतन वृद्धि कर सकता है? >> [छात्र] x वैश्विक करें. ठीक है, तो हम x वैश्विक कर सकते हैं. चलो शॉर्टकट ले कि मैं पहले के बारे में चेतावनी दी, लेकिन बिल्ली, हम सिर्फ एक जल्दी ठीक की जरूरत है, तो चलो बस int x यहाँ का कहना है. कि x वैश्विक बनाता है. तो अब यह करने के लिए मुख्य उपयोग और वेतन वृद्धि इसे करने के लिए उपयोग किया है, और इसलिए मुझे आगे जाना है और अब यह संकलन. दर्ज करें, buggy4 बनाओ. संकलन अब लगता है. चलो buggy4 चलाने के. और यह वास्तव में काम करने लगता है. यह इन बातों है कि के रूप में मैं कहता हूँ है है, मैं ऐसा नहीं कर के रूप में, के रूप में मैं बस यहाँ किया है, क्योंकि सामान्य रूप में, हमारे कार्यक्रमों को और अधिक दिलचस्प इस की तुलना में बहुत लंबे समय तक ले जा रहे हैं, और अगर अपने जीवन की समस्याओं का हल सिर्फ अपनी फ़ाइल के शीर्ष पर सभी चर डाल, बहुत जल्दी कार्यक्रमों horrifically मुश्किल का प्रबंधन करने के लिए मिलता है. यह करने के लिए लगता है कि नए चर नाम के लिए कठिन हो जाता है, यह कठिन हो जाता है समझ में चर क्या क्या कर रहा है, और तो सामान्य रूप में, यह एक अच्छा समाधान नहीं है. तो यह बेहतर करते हैं. हम एक वैश्विक चर यहाँ का उपयोग नहीं करना चाहती. मैं x वेतन वृद्धि करना चाहते हैं, तो मैं स्पष्ट कर सकता है - दिन के अंत में, इस एक मूर्ख कहानी की तरह है, क्योंकि हम सिर्फ यह करना है - लेकिन अगर मुझे लगता है कि ऑपरेटर के बारे में नहीं पता है या था कि मैं इसे ही मुख्य में बदलने की अनुमति नहीं थी, और कैसे मैं यहाँ पर केन लागू कर सकता है इस समय क्यूब के लिए नहीं, लेकिन वेतन वृद्धि करने के लिए? मैं इस बात को कैसे यहाँ बदल? हाँ. [छात्र] एक्स में पास है और फिर वापस [अश्राव्य] >> ठीक है, अच्छा है. तो मैं एक्स में क्यों नहीं पास है और फिर बजाय इसे वापस, मैं अभी क्यों नहीं x + 1 कार्य वापस नहीं करते हैं. एक जोड़े को और अधिक काम करने के लिए यहाँ बदल दिया है. मैं सही रास्ते पर हूँ. मैं और क्या जरूरत tweak करने के लिए? किसी और ने. हाँ. [अश्राव्य छात्र प्रतिक्रिया] मैं वेतन वृद्धि की वापसी प्रकार बदलने की जरूरत है, क्योंकि यह शून्य नहीं है. शून्य मतलब नहीं दिया जा रहा है, लेकिन स्पष्ट रूप से अब यह है, इस जरूरत को बदलने के लिए - >> [छात्र] int. जो कुछ भी मैं वास्तव में लौट रहा हूँ के साथ संगत होना int. अब कुछ और अभी भी यहाँ छोटी गाड़ी है. हाँ. [अश्राव्य छात्र प्रतिक्रिया] >> [Malan] तो मैं एक्स वेतन वृद्धि की जरूरत है? [अश्राव्य छात्र प्रतिक्रिया] >> [Malan] आह, तो मैं एक्स पारित करने की आवश्यकता है. तो मैं यहाँ यह सब करने की जरूरत है. >> [अश्राव्य छात्र टिप्पणी] [Malan] तो प्रोटोटाइप, मैं इस बदलने के लिए यहाँ है. तो यह एक int बन गया है, यह करने के लिए बन गया है - हम्म, मैं वास्तव में एक बग यहाँ नीचे है. चलो एक यह पहली तय. यह वास्तव में क्या होना चाहिए? यह एक int कुछ हो गया है. यह एक्स हो सकता है, लेकिन हो सकता है स्पष्ट है, अगर आप अपने चर एक्स के सभी बुला शुरू, यह करने के लिए और कम से कम स्पष्ट है जो हो रहा है. तो चलो बस मनमाने ढंग से अपने सहायक कार्यों के लिए एक अलग नामकरण परिपाटी का चयन, कार्यों मैं लिख रहा हूँ. हम इसे एक फोन कर देंगे, या हम यह कह सकते हैं - चलो यह फोन नंबर के लिए और भी अधिक स्पष्ट हो. तो फिर मैं वापस जो संख्या 1 से अधिक है, और अब मैं एक अन्य बात बदल यहाँ और एक अन्य यहाँ बात है. क्या मैं 21 लाइन पर पहली बार बदलने की है? >> [अश्राव्य छात्र प्रतिक्रिया] [Malan] मैं यह एक्स के लिए आवंटित है. मैं सिर्फ वेतन वृद्धि (x) फोन नहीं कर सकते हैं. मैं बाईं ओर पर एक्स का मान बदलने के द्वारा उत्तर याद करने की जरूरत है. और भले ही एक्स पर अब छोड़ दिया और सही है, कि पूरी तरह से ठीक है क्योंकि पहले दाएँ हाथ की ओर से मार डाला जाता है तो बात बाएँ हाथ में plopped हो जाता है - इस मामले में एक्स. और फिर अंत में, यह अब एक आसान तय है. यह सिर्फ क्या नीचे है, int संख्या मैच चाहिए. तो एक सच में बेवकूफ समारोह के लिए परिवर्तन की एक पूरी गुच्छा लेकिन चीजें है कि हम तेजी से करना चाहती हूँ की प्रतिनिधि है. तो buggy4 बनाने. मैं कहीं खराब कर दिया है. ओह, मेरे भगवान. एक कार्यक्रम छह लाइन में पांच गलतियों. तो क्या 18 लाइन पर गलत है, चरित्र 5? तो मैं इस int, की घोषणा की है. चलो देखते हैं. अन्य त्रुटियों की एक पूरी गुच्छा हैं. ओह, मेरे भगवान - 19, 18, 21 - लेकिन फिर, चलो बस स्क्रीन स्पष्ट, नियंत्रण एल, और फिर से दौड़ना बजना. तो 5 समस्याओं वास्तव में सिर्फ 1 कि. तो अब चलो buggy4 चलाने के लिए, दर्ज करें. वाह, एक्स सही ढंग से incremented गया है. सही सभी. कैसे संख्या वेतन वृद्धि पर कोई सवाल? हाँ. [अश्राव्य छात्र प्रश्न] >> अच्छा सवाल है. कैसे यह है कि मैं सिर्फ संख्या एक्स बदल सकते हैं और कार्यक्रम तुरंत पता चल जाएगा? फिर, इस अमूर्त रूप में लगता है. तो अगर मैं मुख्य हूँ और केन वेतन वृद्धि है, सच में, मैं परवाह नहीं केन क्या अपने iPad कॉल. मुझे परवाह नहीं है कि वह जो कुछ भी है कि इस कार्यशीलता के अपने कार्यान्वयन के साथ क्या करना है कॉल. यह एक कार्यान्वयन के विस्तार है कि मैं मुख्य, के बारे में ध्यान नहीं है. और तो बस यह लगातार समारोह के अंदर बदलने की संख्या यहाँ और यहाँ संख्या - यह सब इतने लंबे समय के रूप में मैं recompile लेता है. यह तरह की तरह की है अगर आपको लगता है के बारे में हम में से कई, ड्राइवर का लाइसेंस के साथ आप उन लोगों जो या प्रेरित किया है और अगर आप भी एक कार में संचालित है, हम में से अधिकांश पता नहीं कैसे एक कार के हुड के नीचे काम करता है. और सचमुच, अगर आप डाकू, हम में से ज्यादातर के खुले खुद को शामिल वास्तव में जानते हैं कि हम क्या देख रहे हैं नहीं जा रहे हैं, की तरह की तरह आप इस सही तरह सामान के साथ अब महसूस हो सकता है. लेकिन हम वास्तव में कैसे कार काम करता है परवाह नहीं है, हम परवाह नहीं है क्या छड़ और पिस्टन और केबल कार के अंदर के सभी वास्तव में कर रहे हैं. तो आप क्या कहते पिस्टन यहाँ इस मामले में कोई फर्क नहीं पड़ता की तरह कुछ. ही विचार है. हाँ. >> [अश्राव्य छात्र प्रश्न] अगर वहाँ चर xa पल के अधिक उपयोग पहले कर रहे हैं, आप, प्रोग्रामर, उन्हें हर जगह बदलना होगा. या आप सचमुच फ़ाइल मेनू, कर सकता है और तब ढूँढें, बदलें - कुछ की तरह है कि - लेकिन आप उन परिवर्तनों को अपने आप को बनाने के लिए जा रहे हैं. आप लगातार होना है. >> [छात्र] अगर वहाँ कई चर रहे हैं [अश्राव्य] यहाँ की तरह एक विशेष आदेश, अगर यह था एक और संख्या int? >> [छात्र] सही है. [Malan] हाँ. आदेश मायने रखती है जब आप समारोह में बुला रहे हैं. तो अगर मैं वेतन वृद्धि को बुला रहे थे यहाँ कुछ अल्पविराम कुछ के साथ, वहाँ एक प्रत्यक्ष मानचित्रण है. 1 चर, जो कुछ भी यह कहा जाता है, यहाँ पर 1 तर्क की एक कॉपी किया जाता है. माफ़ कीजिए. यह एक कोष्टक नहीं होना चाहिए. दूसरा तर्क लाइनों को एक दूसरे के साथ. इतने में आदेश, हाँ, मायने रखती है. सही सभी. माफ़ कीजिए. मैं लंबे समय से वहाँ पाने के लिए रास्ता निकाल लिया है. अन्य प्रश्न? सही सभी. तो चलो देखते हैं अगर हम क्या वास्तव में यहाँ पर जा रहा है की एक तस्वीर रंग नहीं कर सकते हैं हुड के नीचे है, तो बात करो. यह एक आयत है कि आपके कंप्यूटर की मेमोरी का प्रतिनिधित्व हो सकता है. यहां तक ​​कि अगर आप पता नहीं कैसे स्मृति काम करता है या रैम कैसे काम करता है, कम से कम लगता है कि आप इन दिनों के bunches है. तुम यह मेगाबाइट मिल गया है, आप के गीगाबाइट मिल गया है, और हम 0 सप्ताह से पता है कि क्या सिर्फ एक बाइट है? >> [छात्र] 8 बिट. 8 बिट, है ना? तो 8 zeroes और 1. तो अगर आपके कंप्यूटर राम की एक टमटम, 2 GIGS का RAM इन दिनों है, आप स्मृति की एक अरब या दो अरब बाइट्स या लगभग 8 अरब या 16 अरब बिट्स आपके कंप्यूटर के अंदर. थोड़ा wooly विली उदाहरण के विपरीत, यह चुंबकीय कणों आम तौर पर अब और नहीं है. तेजी से लैपटॉप में कम से कम यह ठोस राज्य ड्राइव, SSDs है, कि सिर्फ कोई भाग रहा है. यह सभी इलेक्ट्रॉनिक है. यह सब बिजली आधारित है. तो सिर्फ स्मृति के 1 या 2 गीगाबाइट है कि आप का प्रतिनिधित्व के रूप में इस आयत के बारे में सोचना. तो यह स्मृति का एक हिस्सा है. कंप्यूटर विज्ञान की दुनिया सॉर्ट के बंद विभाजित स्मृति का हिस्सा अलग बातें करने के लिए. उदाहरण के लिए, अगर यह आपके कंप्यूटर की रैम है, के रूप में वहाँ आयत ने सुझाव दिया है, यह पता चला है कि सम्मेलन द्वारा अपने रैम के शीर्ष पर है, तो बात करने के लिए, आम तौर पर है कि क्या एक पाठ क्षेत्र कहा जाता है. उन 0s और 1s संकलित किया है कि आप कर रहे हैं. तो जब हम हुड के नीचे क्या है a.out में देखा है, इन सभी 0s और 1s, जब आप एक कार्यक्रम चलाने उन 0s और 1s अपनी हार्ड ड्राइव से रैम बुलाया कुछ में लोड कर रहे हैं, और राम में वे शीर्ष पर डाल रहे हैं. इस बीच, आप अन्य बातें हैं: डेटा इनिशियलाइज़, uninitialize डेटा. स्मृति के उन 2 swaths वैश्विक चर, जो आप अक्सर प्रयोग नहीं करते देखें लेकिन कभी - कभी यदि आप करते हैं, वे वहाँ ऊपर अंत के रूप में अच्छी तरह से. वातावरण चर, जो हम पर ज्यादा समय खर्च नहीं होगा, तो फिर वहाँ कुछ अन्य सामान है लेकिन फिर 2 महत्वपूर्ण बातें है कि सेमेस्टर में वापस आ जाएगा, ढेर और ढेर. तो आपके कंप्यूटर की मेमोरी की सबसे आरक्षित है जब एक कार्यक्रम चल रहा है कुछ के लिए ढेर कहा जाता है और कुछ ढेर बुलाया. हम आज ढेर के बारे में बात करने के लिए नहीं जा रहे हैं, लेकिन हम ढेर के बारे में बात करेंगे. ढेर माथर सदन में डायनिंग हॉल भोजन ट्रे के दृश्य को आच्छादित करने के लिए है या तुम जहाँ भी होना होगा जहां डायनिंग हॉल स्टाफ हर दिन उन्हें साफ वे उन्हें ढेर मंजिल से ऊपर की ओर, और इसी तरह, स्मृति में, वहाँ एक ढेर पर कुछ डाल के इस विचार है, एक ढेर पर कुछ डाल, एक ढेर पर कुछ डाल. और क्या हम इस से क्या मतलब है? चलो सिर्फ इस तस्वीर के निचले आधे, आपके कंप्यूटर की रैम पर ज़ूम में, निम्नलिखित का प्रस्ताव. यह पता चला है कि जब आप a.out या नमस्ते की तरह एक कार्यक्रम चलाने - जो भी कार्यक्रम है कि आप लिखा है - फिर, उन 0s और 1s अपनी हार्ड ड्राइव, जो लंबी अवधि के भंडारण से भरी हुई हैं, वहाँ रहता है यहां तक ​​कि जब आप प्लग, रैम में लोड खींच. रैम हार्ड ड्राइव की तुलना में तेजी से है - यह हार्ड ड्राइव की तुलना में छोटे - लेकिन यह जहाँ प्रोग्राम रहते हैं, जबकि आप उन्हें चला रहे हैं. तो आप डबल क्लिक करें एक मैक या पीसी पर एक कार्यक्रम है, यह रैम में हार्ड ड्राइव से भरा हुआ है. जैसे ही यह रैम में भरी हुई है, जिस तरह से शीर्ष पर 0s और 1s जाने, तथाकथित पाठ खंड, लेकिन तब के रूप में जल्द ही के रूप में अपने कार्यक्रम वास्तव में शुरू से चल रहा है, मुख्य समारोह में कहा जाता है, और मुख्य है, जैसा कि हमने देखा है, अक्सर स्थानीय चर है, और यह ints और तार और घर का काम और की तरह है. तो अपने कार्यक्रम लिखा है कि आप या प्रोग्राम है कि आप डबल क्लिक किया है अगर प्रयोग किया जाता मुख्य के अंदर कुछ चर, वे स्मृति के ढेर के नीचे में खत्म होता है, तो बात करने के लिए. अधिक concretely, यह वास्तव में क्या मतलब है? यह सिर्फ मतलब है कि अगर हम अपने कंप्यूटर में राम के बाइट्स की संख्या के लिए जा रहे थे, सूचना है कि इस बाइट 0 संख्या में हो सकता है, यह बाइट संख्या 1, 2, 3, 4, 5, 6 हो सकता है, 2 बिलियन करने के लिए सभी तरह सभी तरह से ऊपर शीर्ष पर होगा. तो दूसरे शब्दों में, जब हम बाइट्स के मामले में राम या स्मृति के बारे में बात करते हैं यह सिर्फ मतलब है कि किसी का फैसला किया है क्या स्मृति की उन विखंडू की प्रत्येक संख्या. इसलिए, जब आप एक int के लिए 32 बिट की जरूरत है या आप एक चार के लिए 8 बिट की जरूरत है जहां वे स्मृति में अंत? धारणा है, वे सिर्फ इस बात के नीचे ढेर कहा जाता है पर खत्म होता है. लेकिन दिलचस्प है अब क्या है जब मुख्य समारोह कॉल - एक foo समारोह बुलाया है, सिर्फ एक मनमाना नाम लगता है - क्या होता है मुख्य है स्मृति के इस ढेर के नीचे है; foo मुख्य के शीर्ष पर अब स्मृति में डाल दिया है. तो किसी भी स्थानीय चर कि foo धारणात्मक मुख्य में उन लोगों के ऊपर की तरह खत्म हो गया है. यदि foo एक और बार बुलाया समारोह कॉल, उन चर यहीं खत्म. अगर इस बार कुछ और है, यहाँ, यहाँ कहता है. तो एक कार्यक्रम चलाने के बारे में दिलचस्प बात यह है कि जैसा कि आप कार्य कॉल और उन कार्यों के रूप में कार्य कॉल और के रूप में उन कार्यों कार्यों कॉल, आप स्मृति में कार्य के इस ढेर का निर्माण. और केवल एक समारोह रिटर्न एक बार आपको लगता है कि स्मृति वापस हो रही शुरू करते हैं. तो एक आसान करने के लिए एक कंप्यूटर प्रोग्राम में स्मृति से बाहर चलाने के तरीके कार्य करता है कि कभी नहीं लौटने लिखने है. तो उदाहरण के लिए, एक जानबूझकर छोटी गाड़ी कार्यक्रम के साथ प्रदर्शित करने के लिए के रूप में ज्यादा है. मुझे आगे जाना है और # शामिल int मुख्य (शून्य), और मुझे क्या करना है जबकि (2> 1) है, जो शायद कभी हम पर नहीं बदल जाएगा जा रहा हूँ, और अब मुझे आगे जाना है और printf करना. असल में, कि कम नेत्रहीन दिलचस्प होने जा रहा है. चलो यह करते हैं. के लिए int i = 0; i> 0 - चलो यह गलती करते हैं - मैं + +. और यहाँ printf नहीं करते हैं. चलो अभ्यास मैं क्या उपदेश था. चलो यहाँ एक विधि है, शून्य कोरस, और हम int मैं कहता हूँ, और फिर मैं printf कहना जा रहा हूँ - नहीं, हम इस और अधिक दिलचस्प बनाने. वास्तव में सब पर मुद्रित करने के लिए कुछ भी नहीं है. कोरस (i): सिर्फ यह करना है. सही सभी. तो इस छोटी गाड़ी है क्योंकि क्यों? मैं यह कर रहा हूँ के रूप में मुझे जाना है क्योंकि इस कार्यक्रम वास्तव में ब्याज की कुछ भी नहीं है. लेकिन यह है कि लक्ष्य नहीं है. लक्ष्य के लिए एक कार्यक्रम जिसका मुख्य समारोह में क्या करता है, जाहिरा तौर पर लिखने के लिए है? ही बुलाओ. और वास्तव में, हम नहीं पाश की जरूरत नहीं है. चलो भी यह सिर्फ इतनी के रूप में नहीं वास्तव में मौलिक बग की दृष्टि खोने के लिए आसान बनाने में. मुख्य कॉल कुछ कोरस गाना कोरस, तो मैं बेवकूफ कुछ किया है और मैं कोरस कॉल कोरस था क्योंकि मुझे लगा कि किसी और को यह शायद लागू करने जा रहा था, और अब इस संकलन के लिए अभी तक नहीं जा रहा है. मैं क्या करने की जरूरत है? मैं प्रोटोटाइप की जरूरत है, याद है,. तो मैं यहाँ शून्य कोरस की जरूरत है (int i); तो अब अगर मैं यहाँ जाना - वास्तव में, चलो बड़ा विंडो का उपयोग. चलो आगे जाने के लिए और कोरस. चलो आगे जाने के लिए और कोरस. अघोषित पहचानकर्ता मैं का प्रयोग करें. ओह, यह बेवकूफी थी. हम तर्क की जरूरत नहीं है. हम सिर्फ यह करना है. काश हम इस तरह से शुरू कर दिया था. यह एक बहुत आसान लिखने के लिए प्रोग्राम किया गया है. वहाँ. अब चलो मेरे टर्मिनल विंडो के लिए खत्म हो जाना, फिर से दौड़ना बजना, और यहाँ हम चले. यह वास्तव में तेजी से किया गया था. क्या वास्तव में सिर्फ हालांकि हुआ? खैर, अब मैं मुद्रण लाइन जोड़ने तो हम देख सकते हैं. मुझे printf कहते हैं ("मैं यहाँ हूँ") - कोई चर. हम यह उस तरह छोड़ देंगे. मुझे फिर से दौड़ना बनाते हैं. मुझे कोरस फिर से दौड़ना. और ... पर आते हैं. चलते रहो. एक अलग रूप में, क्यों यह दुर्घटनाग्रस्त हो गया है अभी तक नहीं? विभाजन गलती सुपर फास्ट पहले हुआ था. [अश्राव्य छात्र प्रतिक्रिया] वास्तव में. >> तो यह करने के लिए प्रिंट करने में समय लगता है, है ना? यह सिर्फ कंप्यूटर भाग पर अधिक काम लेता है. विभाजन गलती: और वहाँ है. तो नोटिस बस कितनी तेजी से कार्यक्रमों को चलाने. यदि आप कुछ भी नहीं, सुपर फास्ट मुद्रण कर रहे हैं. लेकिन हम अभी भी इस विभाजन गलती है क्योंकि क्या हो रहा था? यदि आप के बारे में लगता है कि कैसे अपने कंप्यूटर की स्मृति से बाहर रखा है, इस के लिए मुख्य होता है, लेकिन यहाँ हम सिर्फ इस कोरस फोन, और हम इस कोरस कॉल. और अब अगर मैं मेरे सौंदर्यशास्त्र सही है, यह सिर्फ कोरस, कोरस, कोरस कहने जा रहा है, कोरस, कोरस, कोरस, कोरस, विज्ञापन nauseum, और अंत में, क्या होने जा रहा है? यदि बड़ी तस्वीर, सचमुच, यह है, क्या सिर्फ धारणात्मक होता है? ढेर ढेर overruns. या बुरा, आप सिर्फ पाठ्य खंड सहित सब कुछ, उग आया है, 0s और 1s कि अपने कार्यक्रम का प्रतिनिधित्व है. संक्षेप में, यह सिर्फ सुपर, सुपर बुरा है. अपने कार्यक्रम के नियंत्रण से बाहर spiraled है. आप का उपयोग कर रहे हैं जिस तरह से और अधिक स्मृति की तुलना में आप का इरादा क्योंकि इस मामले में एक बेवकूफ गलती के सभी, या इस मामले में बहुत जान - बूझकर किया समारोह ही बुला. अब, यह सब बुरा नहीं है. खुद को बुला कार्य वास्तव में महान शक्ति है जब आप इसे सही ढंग से उपयोग. मैं इसे सही ढंग से नहीं किया है. तो यह सब बुरा नहीं है, लेकिन तथ्य यह है कि मैं वास्तव में रोक कभी नहीं खुद बुला इस कार्यक्रम के एक मौलिक यहाँ कमजोरी है. तो हम कहाँ इस सब के साथ जा रहे हैं? वास्तव में क्या हो रहा है? , जब मैं वेतन वृद्धि समारोह कॉल की तरह हम उन उदाहरणों में कर रहे थे मैं 1 कि मैं अंदर गुजरती हैं जैसे एक मूल्य है मैं नंबर 1 की एक प्रति में गुजरती है, तो निम्न होता. चलो वेतन वृद्धि उदाहरण में जाने, यहाँ पर इस आदमी को सही. यहां बताया गया है कि वास्तव में क्या हो रहा है. जब मैं वेतन वृद्धि कॉल और मैं x में पारित, pictorially, यहाँ क्या हो रहा है है. अगर मैं 1 के मूल्य यहाँ संग्रहित है और मैं वास्तव में वेतन वृद्धि की कॉल, जो अब कोरस कहा जाता है - iPad मुझे फेंक है यहाँ. चलो इस वेतन वृद्धि कहते हैं, और हम नहीं जानते कि क्या यह अगले समारोह होने जा रहा है. तो वास्तव में क्या हो रहा है यहाँ मुख्य में कहीं है मैं स्मृति का एक हिस्सा है कि 1 संख्या भंडारण है. जब मैं वेतन वृद्धि कहते हैं, मैं स्मृति का एक हिस्सा का उपयोग कर रहा हूँ, लेकिन अब मैं 1 की प्रतिलिपि है. जब मुझे लगता है कि मूल्य वेतन वृद्धि, इस 2 हो जाता है, लेकिन फिर क्या वेतन वृद्धि लाभ के रूप में के रूप में जल्द ही होता है? यह स्मृति सिर्फ ऑपरेटिंग सिस्टम को वापस सौंप दिया जाता है, जिसका मतलब है कि आप सब किया है उपयोगी नहीं है. 1 है कि मूल रूप से मुख्य में निहित था अभी भी वास्तव में वहाँ है. तो हम कहाँ इस के साथ जा रहे हैं? यह पता चला है कि स्मृति में बाइट्स के इस अनुक्रम वापस करने के लिए वापस कि आप सामान में डाल दिया है, कर सकते हैं और यह पता चला है कि हम पहले से ही कुछ देखा है है कि चीजें डाल वापस वापस वापस करने के लिए वापस करने के लिए शामिल है. एक स्ट्रिंग 1 सप्ताह और अब 2 सप्ताह के आधार पर क्या है? यह सिर्फ अक्षरों का एक संग्रह है. तो यह पता चला है कि बस के रूप में आप स्मृति में नंबर डाल कर सकते हैं, इसी तरह आप स्मृति में वर्ण डाल सकते हैं. और एक बार हम स्मृति में डाल वर्ण वापस शुरू करने के लिए वापस करने के लिए वापस वापस, इसे बाहर मुड़ता पाश या एक समय पाश के लिए एक तरह चीजों की सरलतम का उपयोग करते हुए कहा कि, हम अक्षर पर एक स्ट्रिंग में बाएं से दाएं की पुनरावृति कर सकते हैं और अलग अलग अक्षरों में उन्हें पूरी तरह मालिश शुरू - एक ख बन सकता है, ख, ग बन सकता है - इतना है कि अंत में, हम एक अंग्रेजी वाक्य है कि वास्तव में समझ में आता है ले जा सकते हैं और एक समय में उन एक पत्र के प्रत्येक परिवर्तित हमारे कंप्यूटर की मेमोरी के माध्यम से चलने से सही करने के लिए वास्तव में एन्क्रिप्ट करने के लिए छोड़ दिया. तो चलो हमारे यहाँ पाँच मिनट का ब्रेक ले, और जब हम वापस आते हैं, हम जानकारी scrambling की इस प्रक्रिया शुरू करेंगे. सही सभी. इससे पहले कि हम कुछ क्रिप्टो में गोता लगाने और इन बातों arrays कहा जाता है, मुझे किसी भी प्रश्न के लिए रोकते क्योंकि मुझे लगता है कि मैं वास्तव में इस तरह के muddled उन विषयों में से कुछ हैं. तो चलो को ठीक अब अगर हम कर सकते हैं. हम सिर्फ वापसी मान के बारे में बात की है, हम तर्क के बारे में बात की थी, और हम इस धारणा के बारे में बात की थी, जो हम वापस करने के लिए सप्ताह में आने आया हूँ, इन stacked ट्रे की एक पूरी गुच्छा के रूप में स्मृति को देखने, इतनी बात करने के लिए, पर ऊपर से नीचे, जैसे कि प्रत्येक ट्रे है कि ढेर पर डाल दिया जाता है एक समारोह में कहा कि वर्तमान में बुलाया जा रहा है का प्रतिनिधित्व करता है. कोई सवाल? मुझे यहाँ एक सवाल पूछना. मुझे यह क्या अपने पहले के क्यू एंड ए के कुछ पहले था यह वापस सरल तथ्य यह है कि वेतन वृद्धि खुला कोष्ठक, int संख्या है, कोष्टक बंद क्या int संख्या का प्रतिनिधित्व करता है? एक तर्क [छात्र]. >> तर्क. ठीक है. लेकिन एक तर्क क्या है? [अश्राव्य छात्र प्रतिक्रिया] >> वह क्या है? >> [छात्र] कुछ है कि आप अंदर गुजरती हैं ठीक है, तो कुछ है कि आप अंदर से गुजारें और अधिक आम तौर पर, यह बस इनपुट है. यदि आप एक और जीवन में है कि समारोह के उद्देश्य समारोह लिख रहे थे कुछ थोड़ा अलग हर बार जब आप इसे उपयोग करना है, तो उस के लिए सच हो ही तरह लग रहे हो यह इनपुट के साथ प्रदान करेगा इतना है कि यह है कि इनपुट के साथ हर समय कुछ अलग कर सकते हैं. तो आपको दो बातें निर्दिष्ट जब एक समारोह इनपुट लेता की जरूरत है. आप नाम निर्दिष्ट करें कि आप कि निवेश के लिए देना चाहता हूँ की जरूरत है विशुद्ध रूप से अपनी सुविधा के लिए इतना है कि आप यह उल्लेख कर सकते समारोह है कि आप अपने आप लिख रहे हैं, के रूप में मैं 32 लाइन में यहाँ था. लेकिन आप भी अपने प्रकार निर्दिष्ट क्योंकि सी एक प्रोग्रामिंग भाषा है की जरूरत है कि बस आवश्यकता है कि यदि आप एक चर चाहते हैं, तो आप कंप्यूटर को बताने के लिए क्या यह डेटा प्रकार है, बड़े हिस्से में इतना है कि यह जानता है कि कितने बिट्स कि चर के लिए आवंटित करने के लिए क्योंकि यह हो सकता है 6 - माफ करना, यह 6 नहीं होगा. यह 16 हो सकता है, यह 8 हो सकता है, यह 32 हो सकता है, 64 भी कर सकते हैं, लेकिन कंप्यूटर के लिए पता करने की जरूरत है. अब, बाईं ओर पर int इसके विपरीत, का प्रतिनिधित्व करता है? [अश्राव्य छात्र प्रतिक्रिया] >> वह क्या है? >> [छात्र] समारोह का प्रकार है. एक समारोह के प्रकार और अधिक विशेष रूप से, यह अपने उत्पादन का प्रकार है. सही है. कोष्ठक में बात जबकि अपने इनपुट का प्रतिनिधित्व करता है, यदि कोई हो, बाईं करने के लिए बात अपने उत्पादन का प्रतिनिधित्व करता है. और इस मामले में, वेतन वृद्धि जाहिरा तौर पर एक int देता है, और इसलिए इस समारोह की वापसी प्रकार int है. इसका क्या मतलब है वापस करने के लिए? सचमुच, आप कीवर्ड वापसी का उपयोग करें तो और अगर तुम क्या लौट रहे हैं कीवर्ड की सही करने के लिए एक पूर्णांक है, तो यह है कि वास्तव में हम क्या वादा किया है के साथ संगत है. नमस्ते, दुनिया - आप इस तरह से कुछ नहीं कर सकता है कि क्योंकि एक स्ट्रिंग है. जाहिर है, यह एक पूर्णांक नहीं है. तो संक्षेप में, बोझ हम पर सच है, प्रोग्रामर, विशिष्ट होने के लिए तो हम क्या लौट रहे हैं और के रूप में वास्तव में यह लौटने के बारे में जाना. यहाँ संदर्भ अब यह है कि आपके कंप्यूटर की मेमोरी एक गीगाबाइट, 2 गीगाबाइट है - जो कुछ भी - शायद यह अधिक है, शायद यह कम है, लेकिन कंप्यूटर इसे विभिन्न वर्गों होने के रूप में देखता है. कुछ वहाँ से नीचे चला जाता है, कुछ और वहाँ से चला जाता है, विभिन्न सामान बीच में चला जाता है, और आज हम सिर्फ कहानी कह रही शुरू, लेकिन हम इस पर समय वापस करने के लिए आया हूँ. अभी के लिए, स्मृति की ही टुकड़ा हम वास्तव में के बारे में परवाह पाठ खंड है क्योंकि है कि सिर्फ 0s और 1s बजना का प्रतिनिधित्व करता है कि outputted गया है. तो जब आप a.out तरह कीबोर्ड पर एक कमांड को चलाने या आप डबल मैक ओएस या Windows पर एक आइकन पर क्लिक करें, अपने कार्यक्रम रैम में अपनी हार्ड ड्राइव से भरी हुई है और यह आपके कंप्यूटर की रैम के शीर्ष पर plopped है, इतनी बात करने के लिए. इस बीच, के रूप में अपने कार्यक्रम चल रहा है और शुरू होता है मुख्य बुलाया जाता है आप इस कार्यक्रम में लिखा या कार्यक्रम माइक्रोसॉफ्ट या एप्पल ने लिखा है, अपने स्थानीय चर के किसी भी आपके कंप्यूटर की मेमोरी के नीचे नीचे वहाँ अंत. लेकिन अगर मुख्य कॉल एक समारोह में कहा कि खुद चर या तर्क है, वे इसे ऊपर अंत. और अगर उस समारोह कुछ कहता है, वे इसे ऊपर समाप्त करने के लिए, ऊपर यह ऊपर. ट्रे के ढेर और केवल एक बार एक समारोह को क्रियान्वित किया जाता है, तो बात करने के लिए करता है, शुरू करने के लिए कम और कम हो. और ये है क्या तो, संक्षेप में बताते हैं, इसलिए जब आप घन कॉल या आप वेतन वृद्धि कहते हैं, आप मूल्य की एक प्रति में गुजर रहे हैं. और कि pictorially मतलब क्या है कि आप सचमुच 1 संख्या लिख ​​रहे हैं स्मृति के किसी अन्य भाग में बदल रहा है, कि 1 से वेतन वृद्धि के मामले में 2 या एक घन के मामले में 8 और फिर उस स्मृति को दूर फेंक के रूप में जल्द ही वेतन वृद्धि या घन समारोह रिटर्न के रूप में. प्रश्न. [छात्र] वैश्विक चर कहाँ संग्रहीत किए जाते हैं? वैश्विक चर वर्तमान में क्या कहा जाता है initialized डेटा या uninitialized डेटा में संग्रहित कर रहे हैं, अंतर किया जा रहा है अगर आप एक वैश्विक चर है और आप इसे तुरंत मान असाइन साथ हस्ताक्षर के बराबर होती है, यह वहाँ शीर्ष पर समाप्त होता है, और अगर तुम सिर्फ int x का कहना है, कोई मूल्य नहीं के साथ, यह रैम में थोड़ा कम समाप्त होता है सम्मेलन द्वारा बस. अन्य प्रश्न? सही सभी. तो इस तस्वीर वापस आने के रूप में हम और अधिक शक्तिशाली हो जाएगा साथ हम कंप्यूटर के साथ क्या कर सकते हैं, लेकिन अब के लिए, क्रिप्टोग्राफी के लिए एक संक्षिप्त परिचय है, क्रिप्टोग्राफी का एक विशिष्ट प्रकार है कि सभी दुनिया की समस्याओं को हल नहीं करता लेकिन उनमें से कुछ हल नहीं करता है. इस मामले में यहाँ, हम कुछ गुप्त कुंजी क्रिप्टोग्राफी कहा जाता है. गुप्त कुंजी क्रिप्टोग्राफी, जैसा कि नाम से पता चलता है, एक रहस्य से अपनी सुरक्षा प्राप्त है. उदाहरण के लिए, यदि आप ग्रेड स्कूल में वापस आ रहे थे और आप एक छोटे से रहस्य प्रेम पत्र गुजर रहे थे लड़का है या लड़की के लिए आप पर कुचल रहे थे, अगर आप दर्शकों के माध्यम से ध्यान दें कि पारित करना चाहता था, आप शायद अंग्रेजी में इस तरह के एक नोट नहीं लिखने के लिए या अपनी मूल भाषा है जो कुछ भी होगा. इसके बजाय, आप इसे एन्क्रिप्ट या आप बस उन्हें एक पाठ संदेश इन दिनों भेज सकता है हो सकता है. लेकिन आप वास्तव में उन्हें कक्षा भर सकता है और एक नोट गुजरती हैं. और यह करने के लिए सुरक्षित रूप से इस तरह से है कि अपने मित्रों और शिक्षक पता है तुम क्या लिख ​​रहे हैं, तो आप एक काफी सरल एल्गोरिथ्म के साथ आ सकता है, युवा हालांकि आप हो सकता है, सिर्फ शब्दों हाथापाई करने के लिए. तो एक लिखने के बजाय आप लिख सकते हैं, ख के बजाय आप ग लिख सकता है, ग के बजाय आप घ लिखते हैं, और हो सकता है बहुत आगे है. या फिर आप एक और अधिक परिष्कृत अनुवाद के साथ आ सकता है अलग पत्र को पत्र. लेकिन पकड़ लड़का है या लड़की है जिसे आप इस नोट भेज रहे हैं जरूरत है कुछ है, जो क्या है, जाहिर है पता करने के लिए? >> [छात्र] आप क्या भेज रहे हैं. क्या आपके रहस्य क्या है कि एक और ख और ग और डी एस के बीच मानचित्रण की तरह है. यह सिर्फ पत्र के प्रत्येक के लिए 1 जोड़ने के लिए एक से ख, ख, ग के लिए जाना है? यह है कि अधिक से अधिक जटिल है? तो आप और अपने क्रश के इस गुप्त जानकारी की जरूरत है, लेकिन यहाँ पकड़-22 की तरह है. यदि यह बहुत पहली बार है आप वर्ग के माध्यम से यह प्रेम पत्र भेज रहे हैं, कि लड़का है या लड़की के लिए भी रहस्य क्या है पता कैसे चल रहा है? तो गुप्त कुंजी क्रिप्टो सभी दुनिया की समस्याओं के समाधान नहीं है, और वहाँ वास्तव में एक रिश्ता है यहाँ है कि हम वापस करने के लिए सेमेस्टर के अंत की ओर आ जाएगा. इसी तरह हम में से ज्यादातर पता नहीं है किसी को है कि उदाहरण के लिए काम करता है, Amazon.com पर, और हम में से कई अभी तक शायद Amazon.com पर सामान खरीदा, और हम मानते हैं कि इन ई - कॉमर्स लेन - देन सुरक्षित हैं सिखाया गया है. यूआरएल https शायद कहते हैं, वहाँ शायद एक मूर्खतापूर्ण थोड़ा पैडलॉक आइकन कहीं, क्रिप्टोग्राफी अपने क्रेडिट कार्ड की जानकारी हासिल करने के कुछ प्रकार है आप और Amazon.com के बीच. और फिर भी अगर क्रिप्टोग्राफी में कुछ रहस्य जानने और अभी तक मैं अमेज़न पर किसी को भी नहीं पता है और मैं निश्चित रूप से राज की किसी भी तरह की व्यवस्था नहीं है अमेज़न पर किसी के साथ, अपने कंप्यूटर या अपने ब्राउज़र इस कर रही है कि कैसे? यह जाता है वहाँ क्रिप्टोग्राफी का अन्य प्रकार के पूरी तरह है कि उस समस्या को हल. लेकिन आज के लिए, हम एक सरल पर ध्यान केंद्रित करेंगे जहाँ आप अग्रिम में व्यवस्था करने के लिए कुछ रहस्य पता कर सकते हैं एक या एक और ख के बीच कुछ मैपिंग की तरह. और क्रिप्टोग्राफी की प्रक्रिया आम तौर पर शामिल है. आप कुछ सादे पाठ बाईं पर यहाँ दर्शाया है, आप यह encrypting के लिए एल्गोरिथ्म या प्रक्रिया के कुछ प्रकार के माध्यम से इसे चलाने के लिए - हो सकता है कि सिर्फ एक ख हो जाता है, ख, ग हो जाता है - और फिर आप सिफर के साथ खत्म होता है. इस बीच, एक बार अपने क्रश इस गुप्त नोट प्राप्त करता है, वह या वह तो यह decrypt आम तौर से पीछे है कि एल्गोरिथ्म इतनी के रूप में सादे पाठ वापस पाने के लिए. वहाँ इस के शारीरिक अवतार हैं. उदाहरण के लिए, यह एक छोटे से रहस्य कूटवाचक अंगूठी है, और यह समझ में आता है कि वहाँ दो नंबर डायल करता है यहाँ है में एक अंगूठी है. इस बात के बाहर परिधि पर, वहाँ Z के माध्यम से एक पत्र है, हालांकि वे यादृच्छिक क्रम में कर रहे हैं, और अंदर पर, वहाँ वास्तव में कुछ संख्या इस अंगूठी के साथ कि आप की तरह बाहर बारी कर सकते हैं, लेकिन नहीं के अंदर इस तरह के क्रम में अप लाइन के लिए पत्र के साथ संख्या. एक क्रिसमस स्टोरी नामक फिल्म से, आपको लगता है कि थोड़ा Ralphie देखेंगे इसलिए यह पता लगाने छोटे अनाथ एनी गुप्त संदेश है कि उसे क्या करने के लिए किया गया था उत्सुक था कि संख्यात्मक संदेश के रूप में किया गया था, मुझे लगता है, एक अनाज बॉक्स पर भेजी और आप सभी छोटे कार्ड है कि अनाज बॉक्स में आया जमा था, आप उन्हें मेल में था, तुम रहस्य कूटवाचक अंगूठी वापस पाने के लिए किया था इतनी है कि आप अंत में बाहर निकालने के मानचित्रण अक्षरों और संख्याओं के बीच क्या कर सकता है या पत्र और पत्र. एक कंप्यूटर में हम इस तरह से बातें लागू करने या का प्रतिनिधित्व करने के बारे में कैसे जा सकते हैं? हम खुद को एक छोटे से अधिक flexibly को व्यक्त करने का एक तरीका की जरूरत की तुलना में हमारे चर इस प्रकार अब तक की अनुमति दी है. हम ints लिया है, हम घर का काम लिया है, हम मंगाई और युगल और कुछ अन्य लोगों को मिला है, लेकिन उन स्मृति के व्यक्तिगत टुकड़े कर रहे हैं कि वास्तव में हमें चीजों को व्यक्त करने के लिए अनुमति नहीं देते हैं शब्दों और वाक्यों और वाक्यांशों की तरह. दरअसल, हम ऐसी बातें तार बुलाया है, लेकिन हम वादा करता हूँ कि यह वास्तव में सिर्फ CS50 पुस्तकालय में एक सरलीकरण है कि हम छील करने के लिए वापस इरादा कर रहे हैं. और तो चलो है कि यहाँ शुरू. मुझे आगे जाना है और एक फ़ाइल खोलने - इन फ़ाइलों के सभी उपलब्ध हैं, के रूप में हमेशा की तरह, ऑनलाइन तथाकथित array.c एक तार करने के लिए संबंधित समस्या का समाधान, लेकिन है कि एक तस्वीर यहाँ पेंट कैसे हम कुछ एक सरणी बुलाया का उपयोग हो सकता है. एक सरणी एक डेटा प्रकार है. यह एक तरह की चर का एक प्रकार है कि इसे अंदर कई छोटे डेटा प्रकार है वापस करने के लिए वापस वापस वापस करने के लिए. तो उदाहरण के लिए, अगर हम एक छोटे से प्रोग्राम है कि आप अपने प्रश्नोत्तरी औसत देता लिखना चाहता था 50 कि 2 quizzes तरह एक कोर्स के लिए, तुम बहुत आसानी से यह भी पिछले हफ्ते की सामग्री के कुछ पर आधारित कार्यक्रम लिख सकता है GetInt और चर के एक जोड़े का उपयोग करके: int quiz1, quiz2 int. और यह बहुत स्पष्ट है. यह हो सकता है 10, कोड अधिकतम 20 लाइनों को एक कार्यक्रम को लागू करने के लिए कि 2 प्रश्नोत्तरी स्कोर के लिए उपयोगकर्ता पूछता है और फिर उनकी औसत computes उन्हें एक साथ जोड़ने, 2 से विभाजित है, और फिर परिणाम मुद्रण. हम शायद कि मिनट की कुछ संख्या के बाद कर सकता है बहुत आसानी से अब. लेकिन समस्या यह है कि लगता है कि 50 3 quizzes या 4 था. मान लीजिए कि आप एक वर्ग है कि साप्ताहिक quizzes था के लिए एक ही प्रोग्राम का उपयोग करना चाहता था. एक वर्ग है कि साप्ताहिक quizzes के बारे में सोचो. अगर वहाँ एक सेमेस्टर में 16 सप्ताह या तो है, अब तुम 16 चर है: int, quiz1 int quiz2, int quiz3, quiz4 int. जैसे ही आप इस विकल्प को देखने के शुरू, यह नकल और कोड के चिपकाने, यह करने के लिए आप चाहते हैं कि वहाँ एक बेहतर तरीका थे शुरू कर देना चाहिए. और शुक्र है, arrays की वजह से है. तो यह करते हैं. सबसे पहले, मुझे एक बहुत ही सरल बात है कि हम इस प्रकार अब तक इस्तेमाल नहीं किया है शुरू, लेकिन आप यह कोड में कभी कभी देखेंगे. यह वही है जो आम तौर पर एक निरंतर कहा जाता है. तो यह समझ में आता है कि यह मूल्य कभी नहीं बदलता में एक स्थिर है. मानव सम्मेलन में जब एक स्थिर बनाने सभी राजधानी पत्र का उपयोग करने के लिए है बस इतना है कि यह वास्तव में अपने कोड में बाहर खड़ा है, और विशेष कीवर्ड है कि तुम सी में उपयोग परिभाषित है. तो हम कह परिभाषित #, तो एक जगह है, तो शब्द है कि आप निरंतर नाम के लिए उपयोग करना चाहते हैं और फिर लगातार मूल्य. सूचना यह एक चर को कुछ बताए से अलग है. वहाँ कोई संकेत नहीं के बराबर होती है, वहाँ कोई सेमीकोलन है. यह वही है जो आम तौर पर एक पूर्वप्रक्रमक निर्देश के रूप में जाना जाता है, लेकिन है कि एक और समय पर अधिक है. अभी के लिए, यह एक अपरिवर्तनीय quizzes बुलाया मूल्य बनाता है जिसका वास्तविक संख्यात्मक मूल्य 2 है. तो कहीं भी तुम quizzes देखते हैं, quizzes, इस फाइल भर quizzes, कि सिर्फ 2 नंबर है. अगर मैं मुख्य पर अब देखो, यह कैसे काम करता है देखना. पहले यह एक छोटे से गुप्त लग रहा है, लेकिन यह 1 सप्ताह से सभी सामान है. ग्रेड के लिए उपयोगकर्ता से पूछो. हम यह कैसे करते हो? लाइन में 22 - यह वास्तव में रसदार हिस्सा है - मैं एक नाव की घोषणा लेकिन सिर्फ एक ही नाव नहीं. मैं की घोषणा कर रहा हूँ, बल्कि चल बिन्दु मूल्यों की एक सरणी. चर कि ग्रेड कहा जाता है, के रूप में यहाँ निहित जा रहा है, लेकिन नए वाक्यविन्यास की ही टुकड़ा तो इन वर्ग कोष्ठक हैं. तथ्य यह है कि मैं नाव और फिर खुले ब्रैकेट ग्रेड और फिर एक संख्या ने कहा है - नोटिस अगर यह एक निरंतर है हम इस किया है की तरह है - इस का मतलब है, "अरे, कंप्यूटर, 2 मंगाई मुझे दे दो और सामूहिक रूप से उन्हें ग्रेड कहते हैं." यह इस तरह से एक बहुत अधिक थकाऊ प्रक्रिया के विपरीत है: grade1 फ्लोट; Grade2 फ्लोट, और इतना आगे. तो एक सरणी हमें इस विचार को लागू करने के लिए अनुमति देता है, लेकिन बहुत कम गडबड़ीसे, इस तरह के एक तरीका है कि हम कोड की एक पंक्ति के बजाय लिख सकते हैं, कहते हैं, 16 से 16 सप्ताह के एक सेमेस्टर के लिए. मैं 2 कोड कठिन नहीं करना चाहता था क्योंकि अगर आप इस बारे में अब तार्किक लगता है, लगता है अगले साल 3 के लिए CS50 परिवर्तन बजाय quizzes और मैं यहाँ 2 नंबर था, मैं 2 संख्या यहाँ था, मैं यहाँ 2 संख्या था, नंबर यहाँ 2. यह बहुत कठिन है और बहुत आसानी से पेंच हो जाता है और गलती से 3 1 मूल्य को बदलने के लिए और 2 के कुछ अन्य मूल्य याद आती है. इसलिए मैं बजाय सार जा रहा हूँ इस दूर और यह लगातार उपयोग करें कि, जैसा कि इसके नाम का सुझाव कभी नहीं बदलता. और अब कोई फर्क नहीं पड़ता है कि क्या हम अलग है इस साल या अगले quizzes, मैं सिर्फ यह एक ही स्थान में परिवर्तन शीर्ष पर यहाँ है. तो है कि एक निरंतर है. इस बीच, नए वैचारिक सुविधा है कि एक सरणी के है. तो वर्ग कोष्ठक मुझे यह कई मंगाई दे देता है और मुझे उन्हें सामूहिक ग्रेड यहाँ फोन. तो अब देखते हैं कि मैं क्या करने जा रहा हूँ. यहाँ 24 लाइन में पाश के लिए एक की शुरुआत है. यह वास्तव में कुछ भी नहीं फैंसी है. यह सिर्फ quizzes बजाय का उपयोग कर एक हार्ड कोडित संख्या के. लेकिन वहाँ बौद्धिक पिछले सप्ताह से अलग कुछ भी नहीं है. यह सिर्फ printf है, तो printf ("% d #% d प्रश्नोत्तरी:") क्योंकि मैं सिर्फ बाहर प्रिंट मुझे 2 की संख्या 1 प्रश्नोत्तरी और फिर 2 2 देना चाहते हैं. तो यह एक विशुद्ध रूप सौंदर्य बात है. लेकिन दिलचस्प हिस्सा अब 27 लाइन में है. आदेश में एक चल बिन्दु मान साथ एक दो प्लेसहोल्डर्स में भरने के लिए, आप फिर से वर्ग कोष्ठक का उपयोग करें. इस मामले में, मैं का उपयोग कर रहा हूँ, क्योंकि इस पाश के लिए मैं क्या मूल्य के बराबर के साथ शुरू कर दिया है, जाहिरा तौर पर? 0 [छात्र]. >> [Malan 0]. तो इस लूप की पहली यात्रा पर, ऐसा लगता है जैसे मैं कोड में यह लिखा है, लेकिन इस लूप की दूसरी यात्रा पर, यह है के रूप में हालांकि मैं अपने कोड में यह लिखा है. लेकिन तथ्य यह है कि मैं एक चर का उपयोग कर रहा हूँ सही है क्योंकि, जैसा कि नाम से पता चलता है, यह हर यात्रा पर अपने मूल्य अलग है, इसलिए मैं इस सरणी भरने हूँ एक समय में एक जगह है. इस सरणी की तरह दिखता है? इस कारण के लिए पहले कारण है कि मैं स्क्रीन पर सुपर सरल आयताकार यहाँ आकर्षित किया था. एक सरणी सिर्फ स्मृति का एक हिस्सा स्मृति का एक और हिस्सा द्वारा पीछा किया जाता है स्मृति का एक और हिस्सा द्वारा पीछा किया और बहुत आगे है. तो अगर मेरी सरणी इस मामले में 2 आकार की है, मैं सभी कर रहा होगा मेरी प्रश्नोत्तरी स्कोर में टाइप करके यहाँ तरह - मैं इस एक पर 100 हो गया और फिर मैं इस एक पर एक 99 मिला - तो इस स्मृति भी नहीं जा सकता है क्योंकि मैं केवल कंप्यूटर से पूछा है इस्तेमाल किया जा सकता 2 आकार की एक सरणी के लिए. उन वर्गों को अभी भी वहाँ हैं, सही? तुम अब भी राम के 2 गीगाबाइट है तो भी आप केवल 2 मंगाई के लिए पूछ रहे हैं. तो arrays के पीछे विचार यह है कि कंप्यूटर सिर्फ स्मृति का एक हिस्सा लेता है और फिर छोटे टुकड़ों को वापस करने के लिए वापस करने के लिए वापस वापस आबंटित कर देता है. और इतना है कि सब एक सरणी है. यह स्मृति के अंदर के एक सन्निहित हिस्सा है जिसमें से आप बातें रख सकते हैं. यह तो बस कुछ उबाऊ गणित करने के लिए होता है. अगर मैं यहाँ नीचे स्क्रॉल, यह है जहां मैं तो सरणी पर पुनरावृति. मैं सभी सरणी में मानों के योग के साथ आते हैं, और फिर मैं दौर समारोह यहाँ का उपयोग करने के लिए वास्तव में quizzes द्वारा विभाजित योग करते हैं. लेकिन मुझे उस पर अब के लिए पर्याप्त गणित के प्रकार के रूप में मेरे हाथ की लहर. लेकिन यह सब है कि मेरे लिए क्या कर रही है अंततः औसतन कंप्यूटिंग है. तो 1 प्रश्नोत्तरी प्लस 2 प्रश्नोत्तरी 2 से विभाजित है और फिर इसे एक int के रूप में बाहर मुद्रण. लेकिन हम अब एक अलग string1 बुलाया उदाहरण के लिए संक्रमण, जो एक ऐसी ही तस्वीर है, लेकिन का उपयोग कर तार पेंट. मुझे आगे जाना है और बस एक पल के लिए इस सरल. अब के लिए इंडेंटेशन माफ कर दीजिए. इस उदाहरण के 19 लाइन में सूचना, मैं उपयोगकर्ता से एक स्ट्रिंग मिलता है. नोटिस लेकिन क्या मैं अगले लाइनों में 22 आगे कर रहा हूँ. मैं वास्तव में मैं से iterating कर रहा हूँ करने के लिए - और यह एक नई चाल है - strlen, स्ट्रिंग लंबाई. यह है कि अगर आप इसे एक स्ट्रिंग पारित, एक समारोह है कि सी के साथ आता है यह आपको बताता है कि स्ट्रिंग में कितने अक्षर हैं. यही सब है. और तथ्य यह है कि यह strlen स्ट्रिंग की लंबाई के बजाय बस, क्योंकि यह अधिक संक्षिप्त है. तीस साल पहले, लोगों के लिए चीजों के रूप में संभव के रूप में लिखने succinctly पसंद है, तो हम उस सम्मेलन यहाँ रखा है. मैं + + सिर्फ मतलब है कि मैं प्रत्येक चलना में वेतन वृद्धि. और अब इस नोटिस, जो वास्तव में दिलचस्प है. 24 लाइन में, मैं कहना है, "कंप्यूटर, मुझे एक चरित्र देने के लिए, 8 बिट, और यह ग कहते हैं." लेकिन क्या कह दाएँ हाथ की ओर पर है? अंग्रेजी में, कि क्या काम करती है? सरणी में पहली चरित्र [छात्र]. बिल्कुल सही. मुझे सरणी में पहली चरित्र दे. या, और अधिक आम तौर पर, मुझे सरणी में ith चरित्र दे. का एहसास है और अब यह महत्वपूर्ण है कि कंप्यूटर वैज्ञानिकों के रूप में, हम वास्तव में 0 से गिनती कर रहे हैं. आप विवेक नहीं है अब यह कर रही शुरू. अब आप कंप्यूटर की उम्मीदों के अनुसार व्यवहार करते हैं और 0 से गिनती [0] क्योंकि एक स्ट्रिंग में प्रथम वर्ण होने जा रहा है, [1] 2 होने जा रहा है, [2] 3, और इतना आगे जा रहा है. तो इस कार्यक्रम, अगर मैं यह संकलन, यह फिर से है string1, तो string1 बनाने, और अब मैं अपने टर्मिनल विंडो में string1 चलाने की है. यह निवेश के लिए इंतजार कर रहा है, तो मैं डेविड में टाइप करें, दर्ज करने के लिए जा रहा हूँ, और अब यह सब अलग अलग लाइनों पर दाऊद प्रिंट क्योंकि नोटिस मैं क्या कर रहा हूँ. मैं एक समय में एक चरित्र का मुद्रण कर रहा हूँ. हम विस्तार में आज नहीं, इस पर जाना होगा, लेकिन मैं इस जांच को पहले एक पल के यहाँ से हटाया. यह पता चला है कि अगर उपयोगकर्ता अनुचित व्यवहार कर रहा है, adversarial, या सिर्फ भ्रमित, आप वास्तव में कुछ लंबाई के एक स्ट्रिंग दे विफल कर सकते हैं. यदि आप कीबोर्ड पर गलत कुंजी मारा, आप कोई स्ट्रिंग दे सकता है, या यदि आप दुर्भावनापूर्ण कर रहे हैं, तो आप एक निबंध के एक गीगाबाइट के मूल्य में पेस्ट करने की कोशिश हो सकती है इस स्ट्रिंग को भरने के लिए, और अगर कंप्यूटर स्मृति से बाहर चलाता है, यह पता चला है कि हम वापस इस विशेष नल बुलाया मूल्य पाने के लिए जा रहे हैं. तो अब के लिए, सिर्फ इतना पता है कि वहाँ इस विशेष नल बुलाया मूल्य कि हमें जांच करने के लिए जब हम स्मृति से बाहर अन्य बातों के अलावा, कर रहे हैं की अनुमति देगा. लेकिन अगर मैं अब string2 खोलते हैं, तो यहाँ एक अंतर नोटिस. String2 के साथ एक अंतर यहाँ सूचना. String2 के साथ पाश के लिए यह थोड़ा अलग है. मुझे NULLs हटाना इतना है कि हम एक और समय उन लोगों के बारे में बात कर सकते हैं. पाश के लिए इस समय के बारे में अलग क्या है? मैं वापस पिछले उदाहरण के लिए जा सकते हैं. तो यह है कि 2 संस्करण है, यह 1 संस्करण है. 1, 2. 1, 2. strlen फोन है कहाँ? यह पाश के लिए के पहले भाग में है. इसलिए मैं यह कर रहा हूँ के रूप में किसी भी विचार? हाँ. [छात्र] तो आप हर बार समारोह फोन नहीं है. [Malan] तो हम समारोह में हर बार फोन नहीं है. बिल्कुल सही. Loops के लिए याद है कि वे सुपर सरल हो एक बार आप तरह समझते हैं कि इस initialization, हालत, और अद्यतन है. समस्या यह है कि हालत लूप के हर यात्रा पर होता है. और इसलिए यहाँ इस उदाहरण में, तथ्य यह है कि यह मेरी हालत के बारे में क्या बुरा है? [छात्र] आप strlen बुला रहे हैं. [] Malan आप strlen फिर से बुला रहे हैं और फिर से और फिर. लेकिन एक बार मैं डेविड में टाइप किया है, कि स्ट्रिंग की लंबाई 5 है, और यह लूप के हर यात्रा पर परिवर्तन करने के लिए नहीं जा रहा है क्योंकि स्ट्रिंग अभी भी डी - एक v-i-घ. तो यह क्या करने के लिए एक तेजी से महत्वपूर्ण विचार बनने जा रही है पर एक संकेत है जहां सिर्फ एक डिजाइन निर्णय नहीं बनाते हैं कंप्यूटर अनावश्यक काम करते हैं के रूप में जाना जाता है. बस के रूप में मानक संस्करण में एक पूर्वावलोकन चुपके pset2, pset2 की आप को चुनौती देने के लिए वास्तव में सिफर के कुछ नंबर को लागू करने जा रहा है, एन्क्रिप्शन एल्गोरिदम के कुछ संख्या है, ताकि आप दोनों एन्क्रिप्ट कर सकते हैं और वहाँ एक Ralphie decrypt बहुत पसंद है गुप्त संदेश डीकोड. हैकर संस्करण में pset2 की, हम एक छोटे से आगे जाने के लिए जा रहे हैं. हम आपको एक फ़ाइल हाथ एक वास्तविक कंप्यूटर प्रणाली से जा रहे हैं कि उपयोगकर्ता नाम और वास्तविक एन्क्रिप्टेड पासवर्ड की एक पूरी गुच्छा होता है, और हैकर संस्करण के लिए चुनौती देने के लिए उन पासवर्ड दरार होने जा रहा है और बाहर आंकड़ा क्या क्रिप्टोग्राफी या रहस्य क्या वास्तव में उन पासवर्ड उत्पन्न करने के लिए इस्तेमाल किया गया था. और हम सी के यहाँ एक नई सुविधा का उपयोग करके यह करने जा रहे कि मैं तुम्हें सिर्फ कमांड लाइन तर्क के रूप में जाना जाता है के एक डेमो दे दूँगा. यह पता चला है, के रूप में आप में से कुछ के अनुभाग में या पाठ्यपुस्तकों में देखा हो सकता है, मुख्य हमेशा कोष्ठक में शून्य होना जरूरी नहीं है. यह पता चला है कि मुख्य भी इस तरह से लिखा जा सकता है दो तर्क के साथ, argc और argv, जहां argc शब्दों की संख्या कि आप अपने आदेश पंक्ति पर कार्यक्रम के नाम के बाद टाइप और argv वास्तविक शब्द है. और के रूप में वहाँ वर्ग कोष्ठक सुझाव है, argv जाहिरा तौर पर एक सरणी है. यह स्मृति में एक स्ट्रिंग के बाद एक स्ट्रिंग के बाद एक स्ट्रिंग होने जा रहा है. तो क्या हम 2 pset के साथ शुरू करने के लिए सक्षम होने के लिए जा रहे हैं कुछ इस तरह है. अगर मैं argv1, जो हम वापस करने के लिए सोमवार को आया हूँ और इसे चलाने के लिए एक उदाहरण है, सूचना है कि यह अभी तक कुछ भी नहीं लगता. यह सिर्फ बाहर अपने नाम प्रिंट. लेकिन अगर मैं कहना अलविदा वर्ग, सूचना है कि इस कार्यक्रम के जाहिरा तौर पर iterates कि शीघ्र लिखे गए शब्द में से प्रत्येक पर. और साधन है जिसके द्वारा हम शब्दों के लिए पहुँच प्राप्त है कि उपयोगकर्ता प्रॉम्प्ट पर टाइप किया जाएगा मुख्य बदलते int मुख्य (शून्य) से इस सप्ताह के अंत में शुरू करने के लिए मुख्य int (argc, argv) और इस तरह कमांड लाइन तर्क पैदा हो जाएगा. और एक बार आप इस पर वास्तव में परिष्कृत मिलता है, तो आप वास्तव में trippy प्रोग्राम लिखने में सक्षम हो जाएगा यहाँ इस तरह के रूप में यह एक है, जो ऊपर से परे चला जाता है कार्यक्षमता के कुछ हम इस प्रकार दूर किया है, लेकिन सब बहुत शक्तिशाली है. तो हम इस के साथ स्क्रीन पर इस, छोड़ देंगे और हम आप सोमवार को देखेंगे. [CS50.TV]