[Powered by Google Translate] [धारा 4] [कम आरामदायक] [नैट Hardison] [हार्वर्ड विश्वविद्यालय] [यह CS50 है.] [CS50.TV] सब ठीक है, अनुभाग के लिए वापस स्वागत करते हैं. इस सप्ताह के अनुभाग में हम चीजों की एक जोड़ी करने के लिए जा रहे हैं. हम 1 पुनर्कथन समस्या 2 सेट के लिए जा रहे हैं, जो कैसर और Vigenère समस्या सेट है. और फिर हम क्विज 0 समीक्षा में गोता लगाने के लिए जा रहे हैं और समय का एक छोटा सा recapping क्या हम के बारे में बात की है खर्च व्याख्यान में से प्रत्येक में अब तक, और हम भी कुछ समस्याओं करूँगा पिछले वर्ष के quizzes से. कि जिस तरह से तुम लोगों को उस के लिए तैयार करने के लिए एक अच्छा तरीका है. शुरू करने के लिए, मैं अच्छा समाधान के एक जोड़े को हटा दिया गया है पिछले समस्या सेट के लिए, समस्या 2 इस अंतरिक्ष में सेट करें. यदि आप लोगों को यह सब कड़ी मारा, और अगर आप मेरे नाम पर क्लिक करें और अपने पहले संशोधन पर क्लिक करें आप देखेंगे caesar.c है, जो वास्तव में है क्या मैं देख रहा हूँ. चलो इस बारे में बात बहुत जल्दी. यह सिर्फ एक नमूना समाधान है. यह सही समाधान जरूरी नहीं है. यह लिखने के लिए कई अलग अलग तरीके हैं, लेकिन वहाँ कुछ चीजें हैं जो मैं उजागर करना चाहता था कि मैंने देखा है के रूप में मैं ग्रेडिंग था, आम गलतियों कि मुझे लगता है कि इस समाधान से निपटने का एक बहुत अच्छा काम करता है. पहली बार शीर्ष पर हेडर टिप्पणी के कुछ प्रकार हो रही है. 1 तर्ज पर 7 के माध्यम से आप विवरण देखने के लिए, क्या वास्तव में इस कार्यक्रम कर रही है. जब आप सी कोड लिख रहे हैं एक अच्छा मानक अभ्यास चाहे तो अपने कार्यक्रम में एक एकल फाइल या भीतर निहित है चाहे वह कई फाइलों पर विभाजित करने के लिए किसी प्रकार का है शीर्ष पर टिप्पणी orienting. यह लोग हैं, जो बाहर जाने के लिए और वास्तविक दुनिया में कोड लिखने के लिए भी है. यह वह जगह है जहाँ वे कॉपीराइट जानकारी डाल देता हूँ. नीचे # शामिल हैं. 16 लाइन पर यह परिभाषित # है, जो हम वापस करने के लिए सिर्फ एक बिट में आ जाएगा. और फिर एक बार समारोह शुरू होता है, एक बार मुख्य शुरू होता है, क्योंकि इस कार्यक्रम में सभी एक समारोह में शामिल किया गया है बहुत पहले की बात है कि होता है और यह बहुत मुहावरेदार और एक सी कार्यक्रम के विशिष्ट है कि कमांड लाइन में लेता है तर्क है कि इसे तुरंत जाँच करता है तर्क गिनती के लिए, argc. ठीक है यहाँ हम देखते हैं कि इस कार्यक्रम 2 तर्कों की उम्मीद है बिल्कुल. याद रखें कि 1 तर्क है कि विशेष एक है कि हमेशा कार्यक्रम चलाया जा रहा है कि नाम है, निष्पादन योग्य फ़ाइल के नाम. और इसलिए यह क्या करता है यह कार्यक्रम चल रहा से उपयोगकर्ता को रोकता है अधिक या कम तर्क के साथ. कारण है कि हम इस अधिकार के लिए दूर की जांच करना चाहते हैं क्योंकि है हम वास्तव में इस argv सरणी सही यहाँ मज़बूती से उपयोग नहीं कर सकते जब तक हम देखने के लिए कितना बड़ा है यह जाँच की है. एक आम त्रुटियों मैंने देखा था कि लोगों को तुरंत जाना होगा और हड़पने argv [1]. वे सरणी के बाहर कुंजी तर्क हड़पने और एक मैं उस पर जांच करने के लिए चाहते हैं, और फिर वे argc के लिए परीक्षण के रूप में अगले टेस्ट के रूप में अच्छी तरह से करना चाहते हैं, चाहे या नहीं पहले तर्क वास्तव में एक ही समय में एक पूर्णांक था, और कहा कि क्योंकि इस मामले में काम नहीं करता है कि वहाँ कोई आपूर्ति की बहस कर रहे हैं आप एक तर्क है कि वहाँ नहीं है हथियाने हो जाएगा या एक है कि वहाँ नहीं है हड़पने के प्रयास में है. अन्य बड़ी बात है कि आप ध्यान देना चाहिए है कि आप हमेशा के लिए बाहर उपयोगी त्रुटि संदेश के कुछ प्रकार मुद्रित करना चाहते हैं उन्हें उन्मुख करने के लिए उपयोगकर्ता के लिए. मुझे यकीन है कि आप सभी कार्यक्रम चलाने, जहाँ अचानक यह दुर्घटनाओं लिया है हूँ, और आप यह हास्यास्पद सा संवाद है कि ऊपर चबूतरे और कहते हैं बुरी तरह से गुप्त है और शायद कुछ आप एक त्रुटि कोड या उस तरह कुछ देता है कि कोई मतलब नहीं है. यह वह जगह है जहाँ आप वास्तव में उपयोगी कुछ प्रदान करना चाहते हैं और उपयोगकर्ता के लिए लक्षित ताकि जब वे इसे चलाने के लिए वे "ओह," हथेली चेहरा जाना. "मैं जानता हूँ कि वास्तव में क्या करने के लिए मुझे पता है कि यह कैसे तय करने के लिए." यदि आप एक संदेश मुद्रित नहीं है, तो आप वास्तव में अंत उपयोगकर्ता जाने के लिए छोड़कर अपने स्रोत कोड की जांच पता लगाने की क्या गलत हो गया था. वहाँ भी कुछ समय है कि आप अलग त्रुटि कोड का उपयोग करेंगे. यहाँ हम सिर्फ एक का इस्तेमाल करने के लिए कहते हैं कि वहाँ एक त्रुटि थी, वहाँ एक त्रुटि थी, वहाँ एक त्रुटि थी. बड़ा कार्यक्रम, अक्सर प्रोग्राम है कि अन्य कार्यक्रमों के द्वारा कहा जाता है, विभिन्न परिदृश्यों में विशेष त्रुटि कोड के कुछ प्रकार वापस आ जाएगी प्रोग्राम संवाद आप अन्यथा होगा क्या बस के लिए एक अच्छा संदेश अंग्रेजी का उपयोग करें. कूल. जैसा कि हम नीचे काम करते हैं, तो आप देख सकते हैं कि हम कुंजी बाहर खींच. हम देखने के लिए अगर कुंजी फिट बैठता है का परीक्षण करें. हम उपयोगकर्ता से एक संदेश मिलता है. कारण है कि हम इसे इस में क्या करते हैं, जबकि पाश और यह कुछ है कि हम को कवर किया जाएगा एक छोटे सा है, लेकिन यह पता चला है कि अगर आप नियंत्रण डी प्रकार जब आप कि GetString टर्मिनल पर शीघ्र क्या है कि वास्तव में क्या करता है यह एक विशेष चरित्र भेजता कार्यक्रम के लिए. यह एल्फ या फ़ाइल चरित्र का अंत कहा जाता है. और उस मामले में, हमारे संदेश स्ट्रिंग रिक्त हो जाएगा, तो यह कुछ हम समस्या में ही स्थापित के लिए जाँच नहीं था. लेकिन के रूप में हम पर जाओ, अब है कि हम संकेत के बारे में बात करना शुरू कर दिया है और ढेर पर गतिशील स्मृति आवंटन, जब भी आप एक समारोह में कहा कि हो सकता है अशक्त के लिए जाँच अशक्त वापसी के रूप में एक मूल्य कुछ है कि आप करने की आदत में शामिल होने के लिए चाहता हूँ. यह स्पष्ट करने के लिए मुख्य रूप से यहाँ है. लेकिन जब आप भविष्य में GetString देखने के लिए करते हैं, पर 4 सेट समस्या से, आप को ध्यान में रखना चाहता हूँ. फिर, यह तो 3 सेट क्योंकि हम अभी तक यह नहीं शामिल किया था समस्या के लिए एक मुद्दा नहीं है. अंत में, हम इस भाग जहां हम मुख्य एन्क्रिप्शन पाश के लिए करने के लिए मिलता है, और यहाँ पर जा रहा चीजों के एक जोड़े हैं. सबसे पहले, हम पूरे संदेश स्ट्रिंग ही अधिक पुनरावृति. यहाँ हम हालत में strlen फोन रखा है, आप में से एक नंबर बाहर बताया है जो एक महान जाने के लिए रास्ता नहीं है. यह इस मामले में पता चला है यह भी महान नहीं है, आंशिक रूप से, क्योंकि हम ही संदेश की सामग्री को संशोधित कर रहे हैं अंदर पाश के लिए है, इसलिए यदि हम एक संदेश है कि 10 वर्णों तक लंबा है, पहली बार हम शुरू कि strlen पाश के लिए वापस आ जाएगी? 10. लेकिन अगर हम तो संदेश संशोधित कहते हैं, हम अपने 5 चरित्र को संशोधित, और हम 5 की स्थिति में एक \ 0 चरित्र में फेंक, बाद में एक यात्रा पर strlen (संदेश) वापस नहीं होगा कि यह क्या किया बहुत पहली बार हम दोहराया, लेकिन यह बजाय 5 वापस क्योंकि हम कि अशक्त टर्मिनेटर में फेंक दिया जाएगा, और स्ट्रिंग की लंबाई में परिभाषित किया गया है कि \ 0 की स्थिति से. इस मामले में, यह एक शानदार तरीका है जाने के कारण हम यह जगह में संशोधित कर रहे हैं. लेकिन तुम नोटिस कि यह वास्तव में आश्चर्यजनक रूप से आसान है एन्क्रिप्ट करने के लिए अगर आप गणित सही हो सकता है. सभी आवश्यक है कि चाहे या नहीं पत्र की जाँच करें कि आप देख रहे हैं अपरकेस या लोअरकेस है. कारण है कि हम केवल उस के लिए जाँच करने के लिए किया है और हम के लिए जाँच करने के लिए नहीं है अल्फा मामला है क्योंकि अगर एक चरित्र अपरकेस या अगर यह लोअरकेस है तो यह निश्चित रूप से एक वर्णमाला चरित्र है, क्योंकि हम अपरकेस और लोअरकेस अंक नहीं है. दूसरी बात हम करते हैं और यह एक थोड़ा मुश्किल है हम मानक सीज़र बीजलेख सूत्र संशोधित किया है कि हम समस्या सेट विनिर्देश में दिया. यहाँ अलग है यह है कि हम subtracted अपरकेस मामले राजधानी में एक, और फिर हम एक राजधानी जोड़ा अंत में वापस. मैं जानता हूँ कि आप में से कुछ अपने कोड में इस किया है. क्या आप में से कोई भी अपनी प्रस्तुतियाँ में इस करते हैं? आप इस किया. तुम समझा क्या नहीं कर सकते हैं, Sahb? इसे घटाकर बाहर है, क्योंकि आप इसे सही होने के बाद एक आधुनिक किया, आप इसे बाहर ले, तो तरीका है कि आप [खाँसी] स्थिति है. और फिर इसे वापस जोड़ने के बाद आप एक है कि तुम चाहते थे पर स्थानांतरित कर दिया. हाँ, बिल्कुल. Sahb क्या कहा था कि जब हम जोड़ने के लिए करना चाहते हैं हमारा संदेश और हमारे साथ कुंजी और फिर, आधुनिक आधुनिक कि NUM_LETTERS द्वारा, अगर हम उपयुक्त 0 से 25 श्रेणी में हमारे संदेश पैमाने पर नहीं 1, तो हम अंत में एक बहुत ही अजीब संख्या में हो रही हो सकता है क्योंकि मूल्यों है कि हम जब हम [i] संदेश में देखो में देख रहे हैं, , जब हम हमारे सादे पाठ संदेश के ith चरित्र पर देखो यह 65 से 122 रेंज में एक मूल्य कहीं है लोअरकेस z के माध्यम से एक अपरकेस के लिए ASCII मूल्यों पर आधारित है. और इसलिए जब हम इसे 26 या NUM_LETTERS द्वारा आधुनिक, के बाद से था कि हमारे # सही शीर्ष पर परिभाषित करने के लिए, कि हमें एक मूल्य है कि 0 से 25 रेंज में देने जा रही है, और हम तो पैमाने कि वापस ऊपर के लिए एक तरह की जरूरत है और यह उचित ASCII रेंज में मिलता है. सबसे आसान तरीका है कि अभी सब कुछ नीचे पैमाने के साथ शुरू करने के लिए 0 से 25 रेंज में, और फिर सब कुछ अंत में वापस पाली. एक अन्य आम त्रुटि है कि मैंने देखा कि लोगों में चलाने की है कि अगर आप वास्तव में इस स्केलिंग नहीं कर सही दूर और आप संदेश और चाबी के साथ जोड़ सकते हैं और आप उन्हें जोड़ने, कहते हैं, एक चार चर में, उस के साथ समस्या संदेश के बाद से मैं [] शुरू करने के लिए एक अपेक्षाकृत बड़ी संख्या है साथ याद है कि यह कम से कम 65 है अगर यह एक अपरकेस है चरित्र यदि आप एक बड़ी कुंजी है, कहते हैं, 100 की तरह कुछ है, और आप उन 2 को एक साथ जोड़ने में एक हस्ताक्षरित चार आप एक अतिप्रवाह पाने के लिए जा रहे हैं. आप के लिए एक मूल्य है कि 127 से भी बड़ा है पाने के लिए जा रहे हैं, जो सबसे बड़ा मूल्य है कि एक चार चर पकड़ सकता है. फिर, यही कारण है कि आप के साथ शुरू करने की बात की है कि तरह करना चाहता हूँ. कुछ लोगों को अगर एक और कर रही है और परीक्षण के द्वारा उस मामले के आसपास मिला अगर यह होगा अतिप्रवाह देखने से पहले कर रही है कि, लेकिन इस तरह से है कि चारों ओर हो जाता है. और फिर हम इस समाधान में बहुत अंत में पूरे स्ट्रिंग मुद्रित. अन्य लोगों को एक समय में एक चरित्र मुद्रित. दोनों कमाल कर रहे हैं. इस बिंदु पर करने के लिए, आप लोग किसी भी सवाल है, इस बारे में कोई टिप्पणी? चीजें आप चाहें, तो बातें आप पसंद नहीं करते? मैं एक सवाल था. शायद मैं इसे अपने विवरण के दौरान याद किया, लेकिन कैसे इस कार्यक्रम करता है पाठ की लंबाई के लिए कुंजी को जोड़ने के लिए रिक्त स्थान को छोड़? यह सिर्फ सीज़र बीजलेख. >> ओह, माफ करना, हाँ. हाँ, हम देखेंगे. सीज़र सिफर में हम है कि चारों ओर मिला है क्योंकि हम केवल वर्ण फ़्लिप किया. हम केवल उन्हें घुमाया अगर वे अपरकेस या लोअरकेस थे. तुम लोग इस बारे में बहुत अच्छा लग रहा है? इस घर की नकल करने के लिए स्वतंत्र लग रहा है, इसे ले लो, यह तुम लोगों को क्या लिखा तुलना. निश्चित रूप से इसके बारे में सवाल भी भेजने के लिए स्वतंत्र महसूस हो रहा है. और फिर एहसास है कि अपनी समस्या के साथ यहाँ लक्ष्य सेट के लिए नहीं मिल तुम लोगों को अपनी समस्या के सेट के लिए सही कोड लिखने के लिए है. यह एक सीखने का अनुभव है. हाँ. वापस करने के लिए, अगर यह बराबर होती है जबकि पाश अशक्त, इतना अशक्त सिर्फ कोई मतलब नहीं है, वे सिर्फ हिट दर्ज करें? अशक्त एक विशेष सूचक मान है, और हम अशक्त का उपयोग करें जब हम कहना चाहते हैं हम एक सूचक चर है कि कुछ भी नहीं करने के लिए इशारा कर रहा है. और इसलिए आम तौर पर इसका मतलब है कि इस चर, इस संदेश चर खाली है, और यहाँ है, क्योंकि हम CS50 विशेष स्ट्रिंग प्रकार का उपयोग कर रहे हैं, CS50 स्ट्रिंग प्रकार क्या है? क्या तुमने देखा है कि यह क्या है जब दाऊद व्याख्यान में हुड वापस खींच लिया? यह एक कायरता यह एक सूचक है, है ना? ठीक है, हाँ. >> यह एक चार * है. और तो वास्तव में हम इस जगह ले सकता है सही यहाँ चार * संदेश के साथ, और तो GetString समारोह, अगर यह सफलतापूर्वक उपयोगकर्ता से एक स्ट्रिंग नहीं मिलता है, यह एक स्ट्रिंग को पार्स नहीं कर सकता है, और जो एक मामले में यह एक स्ट्रिंग विश्लेषण नहीं कर सकता उपयोगकर्ता फ़ाइल चरित्र, नियंत्रण डी के अंत प्रकार अगर, जो कुछ आप आम तौर पर करते नहीं है, लेकिन अगर ऐसा होता है तो कहने का एक तरीका समारोह के रूप में इस अशक्त मूल्य वापसी करेंगे "अरे, मैं एक स्ट्रिंग नहीं मिला." क्या होगा अगर हम संदेश = अशक्त नहीं डाल दिया होगा, जो कुछ है कि हम अभी तक नहीं कर रही है? कि एक समस्या यहाँ क्यों होगा? क्योंकि मुझे पता है कि हम स्मृति लीक के बारे में व्याख्यान में एक छोटा सा बात. हाँ, चलो करते हैं कि, और देखते हैं क्या होता है. बासिल सवाल था कि क्या होता है अगर हम वास्तव में नहीं है इस संदेश = अशक्त परीक्षण? चलो शीर्ष करने के लिए स्क्रॉल. तुम लोग इस बाहर टिप्पणी कर सकते हैं. असल में, मैं इसे एक संशोधन में बचा लेंगे. यह 3 संशोधन किया जाएगा. क्या आप इस कार्यक्रम को चलाने के लिए करना होगा है कि आप इस गियर आइकन यहाँ क्लिक करें होगा, और आप इसे करने के लिए एक तर्क जोड़ना होगा. आप यह कुंजी तर्क दे सकते है, क्योंकि हम एक कमांड लाइन तर्क में पारित करना चाहते हैं. यहाँ मैं यह 3 संख्या देने के लिए जा रहा हूँ. मैं 3 पसंद है. अब वापस बाहर zooming, कार्यक्रम चल रहा है. यह चल रहा है, संकलन, निर्माण. यहाँ हम चले. यह करने के लिए प्रेरित किया जा इंतज़ार कर रही है. अगर मैं हैलो जहां की तरह कुछ में टाइप किया जाना है? ओह, मेरे कार्यक्रम को चलाने के लिए बहुत लंबा लिया. मैं भी लंबे समय के लिए jawing था. यहाँ यह जाता है. अब मैं हैलो में लिखें. हम देखते हैं कि यह उचित encrypts. अब क्या होता है अगर हम शीघ्र GetString करना अशक्त लौटने? याद है, मैंने कहा कि हम किया है कि एक ही समय में नियंत्रण डी दबाकर. मैं यहाँ स्क्रॉल जाएगा. हम इसे फिर से भाग लेंगे. बिल्डिंग. यह हो जाता है. अब जब मैं नियंत्रण डी मारा मैं इस लाइन है कि opt/sandbox50/bin/run.sh कहते हैं, विभाजन गलती है. क्या इससे पहले कि तुम लोगों को देखा है? [छात्र] क्यों वहाँ कोई >> माफ करना है? [छात्र] क्यों इस मामले में कोई कोर डंप है? कोर डंप सवाल कोई कोर डंप यहाँ क्यों है? सवाल यह है कि हो सकता है, लेकिन कोर डंप एक फाइल है कि हार्ड ड्राइव पर जमा हो जाता है. इस मामले में हम कोर डंप निष्क्रिय कर दिया है चलाने के सर्वर पर इतना है कि हम लोगों को नहीं है दोषयुक्त seg और कोर डंप के टन के निर्माण. लेकिन आप एक हो सकता है. कोर उदासीनता बात की तरह है कि आप अक्सर निष्क्रिय कर सकते हैं कर रहे हैं, और कभी कभी आप करते हैं. विभाजन गलती आपके सवाल का जवाब, तुलसी, कह रही है कि हम एक सूचक का उपयोग करने की कोशिश की है कि कुछ भी करने के लिए बात नहीं स्थापित किया गया था. वीडियो में Binky याद है जब Binky करने की कोशिश करता है एक सूचक है कि कुछ भी करने के लिए ओर इशारा करते हुए नहीं है पहुँच जाना? मैं इस मामले में लगता है कि तकनीकी सूचक कुछ करने के लिए इशारा कर रहा है. यह अशक्त, जो तकनीकी रूप से 0 की ओर इशारा करते है, लेकिन यह है कि एक खंड है कि सुलभ नहीं है में परिभाषित किया गया है अपने कार्यक्रम से है, तो आप एक विभाजन गलती क्योंकि तुम स्मृति अभिगम नहीं कर रहे है कि एक वैध खंड में है ढेर खंड या स्टैक खंड या डेटा खंड की तरह. कूल. सीज़र के बारे में कोई और सवाल? चलो पर स्थानांतरित. चलो 2 संशोधन पर वास्तव में जल्दी से देखो. वह Vigenère है. यहाँ Vigenère में हम इस एक के माध्यम से बहुत जल्दी करेंगे क्योंकि चलना फिर से, Vigenère और कैसर काफी समान हैं. हैडर से पहले टिप्पणी है, परिभाषित # से पहले इन जादुई संख्या का उपयोग कर से बचने के लिए है. अच्छी बात यह कहना है हम को स्थानांतरित करने के लिए करना चाहता था एक अलग या कुछ की तरह है कि वर्णमाला. मैन्युअल रूप से जाने के सभी 26 कोड में परिवर्तन के होने के बजाय हम इस 27 को बदलने के लिए या इसे नीचे छोड़ सकता अगर हम अलग अक्षर, विभिन्न भाषाओं का उपयोग कर रहे थे. फिर, हम तर्क गिनती के इस चेक मिल गया है, और वास्तव में आप लगभग एक टेम्पलेट के रूप में इस ले जा सकते हैं. बहुत ज्यादा हर कार्यक्रम आप लिखने होना चाहिए अगर यह कमांड लाइन लेता तर्क कुछ लाइनों के अनुक्रम कि बहुत शुरुआत में इस तरह से पढ़ता है. यह 1 विवेक परीक्षण आप करना चाहते हैं में से एक है. यहाँ क्या हम हम किया गया था कि यकीन है कि बनाया कीवर्ड वैध था, और कहा कि 2 की जाँच करें कि हम किया था. फिर से सूचना है कि हम argc और 2 से अलग. ध्यान दें कि इस मामले में एक बात यह है कि हम करना पड़ा बजाय था मैं एक का उपयोग कर के हम पूरे स्ट्रिंग को मान्य करने के लिए चाहता था, और आदेश में करने के लिए कि आप वास्तव में चरित्र द्वारा चरित्र जाना है स्ट्रिंग अधिक है. उस पर कुछ कॉल के लिए कोई अच्छा तरीका है क्योंकि भी, उदाहरण के लिए, एक मैं 0 वापस आ जाएगी अगर यह एक पूर्णांक नहीं कर सकता है, तो, जो भी काम नहीं करता. फिर, अच्छा उपयोगकर्ता ठीक कह रही संदेश क्या हुआ. यहाँ तो फिर, हम भी मामले को संभाल जहां एक नियंत्रण डी यादृच्छिक चरित्र में उपयोगकर्ता प्रकार. और फिर Charlotte कैसे हम के लिए रिक्त स्थान को छोड़ प्रबंधन के बारे में एक प्रश्न के पहले था हमारे यहाँ स्ट्रिंग में. इस कि हम क्या माइस्पेस कार्यक्रम के साथ किया था के लिए इसी तरह की तरह था कि हम अनुभाग में किया था, और जिस तरह से इस काम यह है कि हमने देखा था कि हम पत्र की संख्या पर नज़र रखी. जैसा कि हम संदेश स्ट्रिंग पर चला गया है, के रूप में हम चरित्र द्वारा चरित्र पर चला गया, हम हमारे पाश के लिए भाग के रूप में सूचकांक पर नज़र रखी है, और फिर हम भी नज़र रखी अक्षरों की संख्या है, तो गैर - विशेष वर्ण, गैर अंक, गैर सफेद स्थान कि हम अलग चर में देखा था. और फिर इस समाधान कुंजी को संशोधित एक वास्तविक पूर्णांक कुंजी प्राप्त करने के लिए, और यह है कि मक्खी पर करता है, सही से पहले यह तो वास्तविक संदेश चरित्र एन्क्रिप्ट करने के लिए चला जाता है. वहाँ कुछ समाधान कि बिल्कुल भी महान थे कि कुंजी को संशोधित जब कुंजी वैधता के लिए परीक्षण होगा. सुनिश्चित करने के लिए इसके अलावा में है कि चरित्र और खोजशब्द अल्फाबेट यह भी है कि एक पूर्णांक में बदल गया 0 से 25 रेंज में तो छोड़ करने के लिए है कि बाद में इस में पाश के लिए क्या कर रहे हैं. फिर, आप यहाँ देख यह वास्तव में सटीक एक ही कोड है कि हम इस बिंदु पर सीज़र में प्रयोग किया जाता है. आप सटीक एक ही बात कर रहे हैं तो, असली चाल पता लगाना है कैसे एक पूर्णांक में कीवर्ड की बारी है. एक बात है कि हम यहाँ किया है कि एक छोटे से घना है है हम इस वाक्यांश को दोहराया है, मुझे लगता है कि आप यह कह सकते हैं, लाइनों 58, 59, और 61 पर 3 अलग बार. किसी को समझा सकते हैं क्या वास्तव में इस वाक्यांश करता? यह एक चरित्र तक पहुँचने है, जैसे तुमने कहा था. हाँ, यह [अश्राव्य] कीवर्ड में एक चरित्र है, और इसलिए यह देखा पत्र की संख्या है क्योंकि आप ही के साथ आगे बढ़ रहे हैं कीवर्ड एक बार आप इस पत्र को देखा है, इतना है कि प्रभावी ढंग से रिक्त स्थान है और इस तरह से सामान छोड़ जा रहा है. हाँ, बिल्कुल. और फिर एक बार आप कीवर्ड रिक्त तुम सिर्फ आधुनिक देखा है तो तुम वापस चारों ओर कदम. बिल्कुल सही. यह एक सही व्याख्या है. केविन ने कहा है कि हम कीवर्ड में सूचकांक के लिए चाहते हैं. हम num_letters_seen चरित्र प्राप्त करना चाहते हैं, अगर तुम जाएगा, लेकिन अगर num_letters_seen कीवर्ड की लंबाई से अधिक है, जिस तरह से हम उचित सीमा में वापस पाने के लिए है कि हम माड आपरेटर के उपयोग को प्रभावी ढंग से आसपास लपेटो. उदाहरण के लिए, जैसे संक्षेप में, हमारे कीवर्ड बेकन है, और यह 5 अक्षर लंबा है. लेकिन हम इस बिंदु पर हमारे सादे पाठ में 6 पत्र देखा है और एन्क्रिप्टेड 6. हम अंत num_letters_seen तक पहुँचने होगा, जो 6 है, आधुनिक कीवर्ड की लंबाई, 5, और इसलिए हम 1 मिलता है, और हूँ तो क्या हम क्या करेंगे हम करेंगे उस बिंदु पर हमारे कीवर्ड का पहला वर्ण अंदर का उपयोग. सब ठीक है, Vigenère पर किसी भी सवाल इससे पहले कि हम पर स्थानांतरित? तुम लोग इस बारे में बहुत अच्छा लग रहा है? कूल, महान. मुझे यकीन है कि तुम लोगों को कोड को देखने का मौका मिल रहा है बनाना चाहते हैं है कि हमें लगता है कि अच्छा लग रहा है और इसे से सीखने का मौका है. यह करने के लिए पिछले हो सकता है हम कुछ समय के लिए रिक्त स्थान का उपयोग किया जाएगा जा रहा है, और संक्रमण के लिए हम जा रहे हैं अब, और मैं cs50.net/lectures करने के लिए जा रहा हूँ तो हम प्रश्नोत्तरी समीक्षा का एक छोटा सा कर सकते हैं. सबसे अच्छा तरीका मैं प्रश्नोत्तरी समीक्षा कर शुरू करने लगता है कि इस व्याख्यान पृष्ठ पर आ रहा है, cs50.net/lectures, और प्रत्येक सप्ताह के शीर्षकों के नीचे, यदि ऐसा है तो मैं 0 वीक में यहाँ देखो, मैं देख रहा हूँ कि हम विषयों की एक सूची कि हम 0 वीक में शामिल किया है. यदि इन विषयों में से किसी भी आप के लिए अपरिचित लगते हैं आप निश्चित रूप से वापस जाने के लिए और व्याख्यान नोटों और संभवतः परिमार्जन चाहता हूँ भी व्याख्यान के माध्यम से हवा में घूमना, उन्हें फिर से देखने के लिए यदि आप चाहते हैं पर उन विषयों में से प्रत्येक के साथ क्या हो रहा है के लिए एक महसूस पाने के लिए. मैं भी शांत हम संसाधनों मिल गया है की इस वर्ष एक कहेंगे इन शॉर्ट्स है कि हम बनाया है, और अगर आप 0 वीक में देखो, हम सभी विषयों को कवर नहीं है, लेकिन हम उनमें से काफी कुछ मिल गया है, पेचीदा मामला लोगों में से कुछ है, तो इन शॉर्ट्स फिर से देख तुम्हें पाने के लिए गति के लिए एक अच्छा तरीका है. विशेष रूप से, मैं 3 के लिए एक प्लग में डाल तल पर, के बाद से मैं उन किया जा रहा हूँ. लेकिन अगर आप द्विआधारी के साथ संघर्ष कर रहे हैं, बिट्स, हेक्स, सामान की तरह, बाइनरी एक महान शुरू करने के लिए जगह है. ASCII एक और एक है कि करने के लिए भी देखने के लिए अच्छा है. तुम भी मुझे 1.5x गति में देख सकते हैं अगर मैं भी आप के लिए धीमी गति से जा रहा हूँ. यह समीक्षा के बाद से, कि ऐसा करने के लिए स्वतंत्र महसूस हो रहा है. सिर्फ सच में जल्दी शुरू करने के लिए, हम इन प्रश्नोत्तरी समस्याओं के एक जोड़े के माध्यम से जाने के लिए जा रहे हैं बस जल्दी से इन के माध्यम से मंथन करने के लिए. उदाहरण के लिए, 16 समस्या पर लग रही है कि मैं सही यहाँ बोर्ड पर मिल गया है. हम बाइनरी में इस निम्नलिखित गणना मिल गया है, और हम किसी भी काम को दिखाने के लिए करना चाहते हैं. ठीक है, मैं इस एक शॉट देने के लिए जा रहा हूँ. तुम लोगों के साथ कागज के साथ पालन करना चाहिए, और हम इस सच में जल्दी करूँगा. हम द्विआधारी में निम्न परिकलन करना चाहते हैं. मैं 00110010 मिल गया है. और मैं यह 00110010 जोड़ने के लिए जा रहा हूँ. गणित के साथ घर पर पीछा कर प्रतिभाशाले यह प्रभावी रूप से 2 से गुणा है. शुरु करते हैं. हम एक ही इसके अलावा एल्गोरिथ्म है कि हम क्या कर का पालन करने के लिए जा रहे हैं जब हम दशमलव संख्या एक साथ जोड़ें. वास्तव में यहाँ अंतर केवल इतना है कि हम वापस आसपास पाश एक बार हम 1 + 1 के बजाय एक बार हम 10 से मिलता है. अगर हम सही से शुरू करते हैं, बहुत जल्दी, क्या पहले अंक है? [छात्र] 0 >> [नैट एच.] 0. बढ़िया है, दूसरा अंक? 1 [] छात्र. [नैट एच.] यह एक 1 है? 1 + 1 है? 10 [] छात्र. [नैट एच.] वास्तव में, तो क्या अंक है कि मैं एक साथ 2 जोडी लोगों के नीचे सही लिखने के? छात्र [1], 0, या 0 और फिर 1 ले. [नैट एच.] 0 और 1 का एक टुकड़ा ले, बिल्कुल. अगला एक अप तुलसी, आप कर रहे हैं. 3 क्या है? >> [तुलसी] 1. [नैट एच. 1], एकदम सही है. केविन? [केविन 0] >> [नैट एच.] 0, Charlotte? [Charlotte 0] >> [नैट एच.] हाँ, और मैं क्या करूँ? [छात्र] 1. [नैट एच.] और मैं क्या करूँ? और फिर मैं 1 ले. बिल्कुल सही, Sahb >> [Sahb] अब आप 1 है. [नैट एच.] और मैं यहाँ कुछ भी करते हैं? [Sahb] तो अगले एक के लिए आप 1 है क्योंकि आप 1 से अधिक किया जाता है. [नैट एच.] महान, तो यहाँ हम इसे खत्म कर सकते हैं. कूल. [छात्र] 0 0 + = 0 करता है? 0 + 0 = 0. 1 + 1, जैसे तुमने कहा था, 10, या 1, 0, बल्कि. 10 एक मिथ्या नाम है, क्योंकि मेरे लिए 10 10 संख्या का मतलब है, और यह कि हम इसे कैसे का प्रतिनिधित्व कर रहे हैं, जब हम यह लिख रहे हैं चतुरायी की बोली है. हम 0 1, 2 नंबर का प्रतिनिधित्व करते हैं, और संख्या 10 से थोड़ा अलग है. बाइनरी के बारे में अच्छी तरह क्या है यह है कि वहाँ सच है कि कई नहीं कर रहे हैं मामलों में आप जानने की जरूरत है. 0 + 0 = 0, 1 + 1 = 0 है, 1 + 1 0 है, और फिर 1 का एक टुकड़ा ले, और फिर तुम यहाँ सही से तीसरे स्तंभ पर देख सकते हैं हम इस 1, 1, और 1 था. और 1 1 + 1 + 1 एक है, और आप एक और 1 ले. जब आप बाइनरी अलावा कर रहे हैं, बहुत आसान है. मैं एक दो इनमें से अधिक करने के लिए विवेक अपने आप को जांच होगी इससे पहले कि आप क्योंकि यह जाना शायद कुछ है कि हम प्रश्नोत्तरी पर देखेंगे. अब यह अगले एक के रूप में अच्छी तरह से करते हैं. 17 समस्या है. हम दशमलव के लिए निम्न द्विआधारी संख्या में परिवर्तित करने के लिए जा रहे हैं. मैं 10100111001 मिल गया है. बाइनरी वीडियो कि मैंने किया याद मैं उदाहरण के एक जोड़े के माध्यम से चला गया, और मैं कैसे पता चला है सब कुछ काम करता है जब आप इसे दशमलव में कर रहे हैं. जब आप दशमलव प्रतिनिधित्व में काम कर रहे हैं मुझे लगता है कि हम कर रहे हैं हमारे जीवन में इस बिंदु पर तो यह में धाराप्रवाह कि यह बहुत आसान है कि यह कैसे काम करता है वास्तव में यांत्रिकी हाशिये या पंक्तियों के बीच लिखा हुआ मूल पाठ का अर्थ या व्याख्या. लेकिन एक त्वरित पुनर्कथन करने के लिए, अगर मैं 137 नंबर है यह वास्तव में फिर से, इस दशमलव में और प्रतिनिधित्व का मतलब है - दशमलव में 137 नंबर का मतलब है कि मैं 1 x 100 10 + 3 x 7 + 1 x. यह सब स्क्रीन पर रह रही है. और फिर अगर आप इन नंबरों पर सही यहाँ देखो, 10, 100, और 1, आप देखते हैं कि वे वास्तव में कर रहे हैं 10 के सभी अधिकार. मैं शून्य ² 10, 10 ¹, और 10 है. हम बाइनरी में बात की एक समान तरह है, सिवाय इसके कि हमारे आधार के रूप में हम यह कहते हैं, 10 के बजाय 2 है. ये 10s कि मैं नीचे तल पर यहाँ लिखा है, इस ² 10, 10 ¹, 10 शून्य 10, हमारे आधार है, और प्रतिपादक, 0, 1, या 2, कि हम लिखने संख्या में अंकों की स्थिति से गर्भित है. 1, अगर हम इसे देखो, यह 1 2 की स्थिति में है. 3 1 की स्थिति में है, और 7 0 की स्थिति में है. यही कारण है कि कैसे हम हमारे अड्डों के लिए विभिन्न exponents नीचे मिलता है. इस we'll वास्तव में सभी के बाद, आप जानते हो क्या? हम करते हैं जहाँ मेरे बटन किए हुए कार्य को भ्रष्ट कर देना जाऊँगा? यह हो जाता है. मैं प्यार इस बात किए हुए कार्य को भ्रष्ट कर देना. इस के बाद मैं कम से कम मेरे लिए लगता है एक द्विआधारी संख्या परिवर्तित शुरू के लिए सबसे आसान तरीका या एक हेक्साडेसिमल संख्या जहां आधार 16 है और 2 10 या नहीं आगे जाने के लिए और बाहर लिखने कुर्सियां ​​और exponents मेरे शीर्ष पर बाइनरी संख्या में संख्या में से सभी के लिए. अगर हम बाएं से दाएं फिर से शुरू, जो counterintuitive की तरह है, मैं वापस काला करने के लिए यहाँ बदल देंगे, हम 0 की स्थिति के लिए 2 है, और फिर हम 2 है ¹, 2 ², और 3, 2 से 4 2, 5, 6 के लिए, तो 2 7, 8, 9, और 10. इन नंबरों को मैं बाहर लिखा है exponents हैं. मैं केवल कुर्सियां ​​यहाँ अंतरिक्ष के लिए सिर्फ 1 3 में लिखा है. इस बिंदु पर मैं आगे जाने के लिए जा रहा हूँ और मैं वास्तव में मिटा के लिए जा रहा हूँ सामान है कि हम दशमलव में किया था, अगर वह ठीक है. तुम सब है कि मिल गया है. तुम में से जो ऑनलाइन देख मुझे यकीन है कि यदि आप चाहें तो मुझे उल्टा करने में सक्षम हो जाएगा. कलम करने के लिए वापस स्विचन. अब, क्या हम करते हैं, अगर तुम लोगों को पूरी तरह से 2 की अपनी शक्तियों पर गति नहीं कर रहे हैं, कि पूरी तरह से शांत है. ऐसा होता है. मैं समझ सकता हूँ. मैं एक बार में एक नौकरी के लिए इंटरव्यू था जहां मुझे बताया गया था मैं 2 के सभी शक्तियों को पता होना चाहिए के माध्यम से ऊपर 2 30. यह एक नौकरी मैं मिला नहीं था. वैसे भी, आप लोग आगे जाना है और गणित यहाँ करना कर सकते हैं, लेकिन द्विआधारी साथ यह सच में समझ में नहीं पड़ता है, और न ही यह दशमलव या षोडश आधारी साथ मतलब या तो बना, बाहर जहाँ आप शून्य है गणित है. आप देख सकते हैं मैं 0 यहाँ है, यहाँ एक 0, 0 यहाँ, 0 यहाँ, 0 यहाँ, 0 यहाँ. ऐसा क्यों कर वास्तविक गणित ऐसा नहीं हो सकता है भावना उस स्थिति के लिए 2 की उचित बिजली की गणना करने के लिए? वास्तव में, तरह Charlotte कहा, यह 0 हो जाएगा. के रूप में अच्छी तरह से अपने आप को समय बचाने के लिए हो सकता है अगर 2 की शक्तियों की गणना के अपने मजबूत सूट नहीं है. इस मामले में हम केवल 2 के लिए यह 0 जो की गणना करने की जरूरत है? 1 [] छात्र. [नैट एच.] 1, 3 से 2 जो है? [छात्र] 8 >> [नैट एच.] 8. 2 से 4? 2 [] छात्र. मैं माफी चाहता हूँ, 1. [नैट एच. 16] 2 +४ करने के लिए ठीक है. 2 5, केविन 32? >> [नैट एच.] 32, 8 से 2? [छात्र] 32 x 8, 256. [नैट एच.] बिल्कुल सही. और 2 10? [छात्र] 1024. [नैट एच.] हाँ, 1024. एक बार जब हम इन नंबरों हम उन सब को योग करने के लिए कर सकते हैं मिल गया है. और यह है जहाँ यह वास्तव में महत्वपूर्ण है चीजों की एक जोड़ी. एक धीमी गति से जाना जाता है और अपने काम की जांच. आपको लगता है कि वहाँ एक 1 इस संख्या के अंत में बता सकते हैं, तो मैं निश्चित रूप से मेरे परिणाम के रूप में एक विषम संख्या मिलना चाहिए, क्योंकि सभी अन्य लोगों के लिए भी हो सकता है संख्या जा रहे हैं यह देखते हुए कि यह एक बाइनरी संख्या है. अन्य बात करना है अगर आप परीक्षण पर इस बिंदु को मिलता और आप इसे लिखा है इस दूर और आप समय से बाहर चल रहे हैं अंकों की संख्या में लग रही है कि इस समस्या के लायक है. यह समस्या है, जल्दी के रूप में आप देखने के लिए अगर मैं अपने लैपटॉप के लिए वास्तव में फ्लिप कर सकते हैं इस समस्या को 2 अंक के लायक है, तो यह की तरह नहीं है आप के माध्यम से चल रहा होना चाहिए अगर आप वास्तव में समय के लिए दबा रहे हैं. लेकिन हम वापस iPad करने के लिए स्विच, और हम इसे माध्यम से बहुत जल्दी जाना होगा. मैं छोटे संख्या 1 कर की तरह क्योंकि मुझे लगता है कि आसान लगता है. मैं 32 और 8 की तरह है क्योंकि वे एक साथ बहुत आसानी से जाना, और हम 50 से मिलता है. 16 और एक 17 हो जाता है. वहाँ हम 57 मिलता है, और फिर हम इस के बाकी है, तो हम 57 कर सकते हैं कर सकते हैं, 156. आओ. यार, ठीक है, चलो देखते हैं. हम 57, 256, और 1024 था. इस बिंदु पर, मैं नहीं बल्कि बस के माध्यम से जाना चाहते हैं. मैं कोई सुराग नहीं है. मैं स्पष्ट रूप से इस पर पढ़ने की जरूरत है. 7, 6, 4, आप 17 मिलता है. 1, 5, 5, 2, 13. फिर हम 3 हो, और फिर हम 1 मिल. 1337. ईस्टर अंडे, कोई है? किसी को भी इस संख्या को पहचानते हैं? क्रिस संख्या पहचानता है. यह क्या करता है, क्रिस क्या मतलब है? [क्रिस] Leet. Leet, यदि ऐसा है तो आप इस पर देखो, यह leet की तरह लग रहा है. हैकर सामान. मध्यावधि या प्रश्नोत्तरी, बल्कि सामान के उस तरह के लिए बाहर देखो. यदि आप सामान की तरह देखते हैं और आप सोच रहे हैं "हं," कि वास्तव में कुछ मतलब हो सकता है. मुझे नहीं मालूम. दाऊद ने उसके अंदर डाल पसंद करता है यह एक अच्छा तरीका है कि यह जाँच विवेक. ठीक तरह, मैं देख सकता हूँ कि क्या हो रहा है. यह 0/Week 1 सामान सप्ताह है. यदि हम अपने लैपटॉप के लिए अब वापस स्विच, बाहर ज़ूम, और अन्य चीजों के एक जोड़े. वहाँ ASCII है, जो हम समस्या के सेट के साथ किया गया है की एक बहुत कुछ कर रहे हैं. राजधानी ए की यह धारणा है कि वास्तव में क्या है? जानने दशमलव पूर्णांक है. 65 है जो यह ASCII तालिका में मैप किया है, और इसलिए है कि कैसे कंप्यूटर यह लिखते हैं, और है कि कैसे हम वास्तव में लिखने के साथ किया गया है दूर हो रही है चरित्र राजधानी एक और चरित्र एक लोअरकेस इन समाधान और समस्या सेट है कि आप कर दिया गया है में से कुछ में. अन्य बातों के एक जोड़े. हम बयान, बूलियन अभिव्यक्ति, शर्तों, loops, चर और सूत्र मिल गया है. उन सभी के अधिकांश भाग के लिए समझ बनाने के लग रहे हो? इस शब्दावली का कुछ समय पर थोड़ा कायरता है. मैं सबसे अधिक भाग के कुछ है कि एक सेमीकोलन के साथ समाप्त होता है के लिए के रूप में एक बयान के बारे में सोचना अच्छा लगता है. एक्स के रूप में इस तरह के बयानों = 7, जो एक चर सेट, संभाव्यतः x 7 = कहा जाता है. मुमकिन x भी एक प्रकार है कि 7 नंबर स्टोर कर सकते हैं, तो यह एक int या संभवतः एक नाव या एक छोटी या एक चार है, ऐसा ही कुछ है. एक बूलियन अभिव्यक्ति इन डबल का उपयोग कर रहा है के बराबर होती है और धमाके के बराबर या बराबर होती है नहीं, कम से कम, की तुलना में अधिक से अधिक, कम से कम या बराबर, सामान के सभी उस तरह. स्थितियां तो अगर किसी और बयान कर रहे हैं. मुझे याद है कि आप एक अगर इसी बिना एक और नहीं हो सकता. इसी तरह, आप एक अगर इसी बिना अगर किसी और नहीं हो सकता है. Loops, loops के 3 प्रकार हम आप में खटखटानेवाला है याद वर्गों और समस्या सेट के अंतिम जोड़ी के लिए. का प्रयोग करते समय है जब तुम उपयोगकर्ता इनपुट हो रही है, का उपयोग करते हुए एक विशेष स्थिति तक loops सच है, और फिर loops के लिए उन का उपयोग अगर आप की जरूरत पाश का चलना है जो आप पर वर्तमान में कर रहे हैं पता है कि मैं इसके बारे में सोचना है. या यदि आप एक स्ट्रिंग मैं कुछ करना चाहते हैं में हर किरदार के लिए कर रहे हैं, मैं उस तत्व के लिए कुछ करना चाहते हैं एक सरणी में प्रत्येक तत्व के लिए. धागे और घटनाओं. हम ये तो स्पष्ट रूप से सी में शामिल नहीं किया है, लेकिन स्क्रैच से यह याद रखना. यह विभिन्न लिपियों होने की धारणा है. यह भी एक घटना प्रसारण की इस धारणा है. कुछ लोगों का प्रसारण शुरू में अपनी परियोजनाओं में उपयोग नहीं किया, जो पूरी तरह से शांत है, लेकिन इन इस बड़े मुद्दे से निपटने के 2 अलग तरीकों संगामिति बुलाया हैं, जो आप कार्यक्रमों पर अमल करने के लिए कैसे मिलता है या उचित रूप में एक ही समय पर निष्पादित? विभिन्न कार्य चल रहा है जबकि अन्य कार्यों में भी चल रहे हैं. यह कैसे अपने ऑपरेटिंग सिस्टम के लिए काम करने लगता है. यह भी क्यों हालांकि, उदाहरण के लिए, मैं अपने ब्राउज़र चल रहा था, मैं भी Spotify पर बारी कर सकते हैं और एक गाना खेलने. कि एक वैचारिक बात समझने की अधिक है. मैं कम धागे पर एक नज़र रखना होगा अगर आप इस बारे में अधिक जानकारी चाहते हैं. चलो देखते हैं, मेरा मानना ​​है कि वहाँ किया गया है हो सकता है इन में से एक में इस पर एक समस्या है. फिर, मुझे लगता है कि धागे और घटनाओं के लिए कुछ नहीं कर रहे हैं कि हम सी में कवर किया जाएगा बस, क्योंकि यह काफी स्क्रैच की तुलना में और अधिक कठिन है. आप इसके बारे में चिंता करने की ज़रूरत नहीं है, लेकिन निश्चित रूप से अवधारणाओं को समझने चाहिए, समझ में क्या हो रहा है. इससे पहले कि हम आगे बढ़ना है, सप्ताह 0 सामग्री पर किसी भी सवाल? हर कोई बहुत अच्छा लग रहा है? समझ चर और क्या एक चर है? पर चल रहा है. 1 सप्ताह. यहाँ चीजों की एक जोड़ी है कि विशेष रूप से नहीं कवर किया गया जरूरी प्रश्नोत्तरी समीक्षा में और भी अधिक वैचारिक बातें करने के बारे में सोच रहे हैं. पहले स्रोत कोड compilers, और ऑब्जेक्ट कोड क्या कर रहे हैं इस धारणा है. कोई है? तुलसी. ऑब्जेक्ट कोड मैं स्रोत कोड का मतलब है आप क्या बजना में डाल, और ऑब्जेक्ट कोड है बजना क्या इतना कहते हैं कि आपके कंप्यूटर कार्यक्रम पढ़ सकते हैं. बिल्कुल सही. स्रोत कोड सी कोड है कि आप वास्तव में टाइप है. ऑब्जेक्ट कोड है तुम क्या बजना से बाहर निकलना है. यह 0s और कि बाइनरी स्वरूप में 1s है. फिर क्या होता है जब आप वस्तु फ़ाइलों का एक गुच्छा है, का कहना है कि आप एक परियोजना या एक प्रोग्राम है कि कई स्रोत कोड फ़ाइलों का उपयोग करता है संकलन कर रहे हैं, जो सम्मेलन द्वारा ग फ़ाइल एक्सटेंशन दिया जाता है. यही कारण है कि हम caesar.c vigenère.c,. यदि आप जावा प्रोग्राम लिख रहे हैं आप उन्हें विस्तार देना जावा. अजगर कार्यक्रमों एक्सटेंशन py अक्सर. एक बार जब आप कई ग फ़ाइलें है, तो आप उन्हें संकलन. बजना बाहर यह सब बाइनरी कबाड़ spits. क्योंकि तब आप केवल 1 कार्यक्रम चाहते हैं आप linker लिंक इन वस्तु के सभी एक साथ फ़ाइलें 1 निष्पादन योग्य फ़ाइल में. यह भी है क्या जब आप CS50 पुस्तकालय का उपयोग होता है, उदाहरण के लिए. CS50 पुस्तकालय है कि दोनों घंटे हेडर फाइल है. है कि आप पढ़, # includecs50.h कि. और फिर यह भी एक विशेष बाइनरी पुस्तकालय फ़ाइल कि संकलित किया गया है कि 0s और 1s है, और झंडा कि-l, यदि ऐसा है तो हम हमारे रिक्त स्थान के लिए वापस जाना है और हम बहुत जल्दी देखो यहाँ क्या हो रहा है जब हम हमारे बजना आदेश में देखो, हमें मिल गया है क्या है यह हमारे स्रोत कोड फ़ाइल यहीं है. संकलक झंडे का एक गुच्छा रहे हैं. और फिर बहुत अंत में, इन एल झंडे लिंक इन 2 पुस्तकालयों के लिए वास्तविक द्विपदीय फाइल CS50 पुस्तकालय और फिर गणित पुस्तकालय. 'फ़ाइलों उद्देश्य के प्रत्येक प्रकार को समझना संकलन प्रक्रिया में आप कुछ करने में सक्षम होना चाहता हूँ कम से कम एक उच्च स्तर की सिंहावलोकन दे. स्रोत कोड अंदर आता वस्तु कोड बाहर आता है. ऑब्जेक्ट कोड फ़ाइलों को एक साथ जोड़ने के लिए, और आप एक सुंदर, निष्पादन योग्य फ़ाइल मिलता है. कूल. यह भी है जहां आप कई बिंदुओं पर त्रुटियों को प्राप्त कर सकते हैं संकलन की प्रक्रिया में है. यह वह जगह है जहाँ, उदाहरण के लिए, अगर आप इस जोड़ने झंडा ले, CS50 झंडा, और आप यह रिक्त स्थान में छोड़ या जब आप अपने कोड चला रहे हैं, यह वह जगह है जहाँ आप जोड़ने चरण में एक त्रुटि मिल जाएगा, और linker कहते हैं, "अरे, तुम एक समारोह GetString बुलाया कि CS50 पुस्तकालय में है. " "तुम मुझे बताया कि यह CS50 पुस्तकालय में किया गया था, और मैं इसके लिए कोड नहीं मिल सकता है." यह वह जगह है जहाँ आप इसे में जोड़ने के लिए है, और है कि अलग एक संकलक त्रुटि से क्योंकि संकलक वाक्यविन्यास और सामान की तरह लग रही है. यह अच्छा है पता है कि क्या हो रहा है जब. अन्य चीजों के बारे में पता करने के लिए. मैं कहूँगा कि आप निश्चित रूप से typecasting पर कम जॉर्डन के द्वारा किया पर एक नज़र रखना चाहते हैं समझ ints हुड के नीचे क्या कर रहे हैं, घर का काम क्या हुड के तहत कर रहे हैं. , जब हम ASCII के बारे में बात करते हैं और हम वास्तव में ASCII तालिका में देखो है कि वह क्या कर रहा है हमें दे रहा है हुड देखो के तहत एक कैसे कंप्यूटर वास्तव में राजधानी का प्रतिनिधित्व करता है और अंक 7 और एक अल्पविराम और एक प्रश्न चिह्न है. कंप्यूटर भी विशेष का प्रतिनिधित्व करने के तरीके एक पूर्णांक के रूप में नंबर 7. यह एक विशेष तरीका है एक चल बिन्दु संख्या के रूप में 7 संख्या का प्रतिनिधित्व करते हैं, और उन बहुत अलग हैं. Typecasting है आप कैसे बता कंप्यूटर "अरे, मैं आप कन्वर्ट करने के लिए करना चाहते हैं एक प्रतिनिधित्व से दूसरे प्रतिनिधित्व करने के लिए. " हम उस पर एक नज़र क्यों नहीं ले जाते. मैं भी पुस्तकालयों पर कम और compilers पर कम पर एक नज़र रखना होगा. संकलन की प्रक्रिया के बारे में वे बात करते हैं, एक पुस्तकालय क्या है, और इनमें से कुछ सवाल है कि आप पूछा मिल सकता है पर चलते हैं. 1 सप्ताह सामग्री पर कोई प्रश्न? यहाँ किसी भी विषय है कि आप को कवर करना चाहते हैं कठिन लग? मैं पहले इन विषयों के अधिकांश के माध्यम से उड़ाने की कोशिश कर रहा हूँ ताकि हम प्राप्त कर सकते हैं संकेत और recursion का एक छोटा सा. विचार? को कवर करने के लिए कुछ है? शायद कुछ चॉकलेट के लिए समय है? तुम लोगों के माध्यम से यह काम कर रहे हैं. मैं अपनी कॉफी पर बरतें रखने के लिए जा रहा हूँ. 2 सप्ताह. फोन अच्छा है, अच्छा फोन है. सप्ताह में 2 हम कार्यों के बारे में थोड़ा और अधिक बात की थी. पहले कुछ समस्या सेट में हम वास्तव में सब पर किसी भी कार्य नहीं लिखा था अन्य समारोह जो की तुलना में? [छात्र] मुख्य >> वास्तव में मुख्य. और इसलिए हम विभिन्न वेशभूषा कि मुख्य पहनता है देखा है. वहाँ एक में यह कोई तर्क नहीं लेता है, और हम सिर्फ कोष्ठकों के बीच शून्य कहते हैं, और फिर वहाँ अन्य एक है जहां हम कमांड लाइन तर्क ले जाना चाहते हो, और जैसा कि हमने देखा, वह है जहाँ तुम int argc और स्ट्रिंग argv सरणी या अब है कि हम वास्तव में स्ट्रिंग उजागर किया चार * है कि यह है हम यह चार * argv और फिर कोष्ठक के रूप में लेखन शुरू करने के लिए जा रहे हैं. समस्या 3 सेट में, आप लोग कार्यों का एक गुच्छा देखा, और आप कार्यों का एक गुच्छा लागू, आकर्षित, ऊपर देखो, हाथापाई. प्रोटोटाइप सब आप के लिए लिखा गया है. मैं क्या करने के कार्यों के साथ यहाँ के बारे में वास्तव में जल्दी से बात करना चाहता था यह है कि उन्हें 3 भागों हैं जब भी आप एक समारोह लिखने. आप करने के लिए समारोह का रिटर्न प्रकार निर्दिष्ट है. समारोह के लिए एक नाम निर्दिष्ट है, और फिर आप निर्दिष्ट तर्क सूची या पैरामीटर सूची. उदाहरण के लिए, अगर मैं एक समारोह लिखने के लिए पूर्णांकों का एक गुच्छा राशि और फिर मेरे लिए योग क्या मेरी वापसी प्रकार होगा वापस अगर मैं integers राशि और तब राशि लौटने के करना चाहते थे? तो समारोह के नाम. अगर मैं आगे जाने के लिए और हरे रंग में लिखने के लिए, इस भाग रिटर्न प्रकार है. इस भाग का नाम है. और फिर कोष्ठकों के बीच में है जहां मैं तर्क दे, अक्सर args, कभी कभी मानकों के लिए params बुलाया के रूप में संक्षिप्त. और यदि आप एक है, तो आप सिर्फ एक निर्दिष्ट. यदि आपके पास एकाधिक आप एक अल्पविराम के साथ प्रत्येक एक अलग. और प्रत्येक तर्क के लिए आप यह 2 बातें दे जो कर रहे हैं - केविन? [केविन] तुम और फिर नाम प्रकार देना है. और फिर, नाम और नाम का नाम है कि आप प्रयोग करने जा रहे हैं राशि समारोह के भीतर कि तर्क को देखें, समारोह है कि आप वर्तमान में लिख रहे हैं के भीतर. आप उदाहरण के लिए नहीं है, अगर मैं करने के लिए राशि के लिए जा रहा हूँ, , integers we'll की एक सरणी int सरणी करना, और मैं अपने आप को कुछ घुंघराले ब्रेसिज़ दे दूँगा फिर जब मैं योग समारोह के लिए एक सरणी के पास मैं यह तर्क सूची के पहले की स्थिति में गुजरती हैं. लेकिन सरणी कि मैं में पारित नाम आगमन नहीं है. आगमन कैसे मैं समारोह के शरीर के भीतर उस तर्क को देखें जा रहा है. दूसरी बात यह है कि हम खाते में लेने की जरूरत है, और इस कार्यों से थोड़ा अलग है, लेकिन मुझे लगता है कि यह एक महत्वपूर्ण बात है, यह है कि सी में जब मैं इस तरह एक समारोह लिख रहा हूँ मैं कैसे पता है कितने तत्वों इस सरणी में हैं? यह एक चाल सवाल के कुछ है. हम इस बारे में पिछले सप्ताह के अनुभाग में एक छोटा सा बात की थी. मैं सी में एक सरणी के अंदर तत्वों की संख्या कैसे जानते हो? वहाँ एक तरीका है? यह पता चला है कि वहाँ कोई रास्ता नहीं पता है. आप इसे पारित करने में अलग - अलग है. वहाँ एक चाल है जो आप कर सकते है अगर आप एक ही समारोह जो सरणी में घोषित किया गया है में हो, और आप एक ढेर सरणी के साथ काम कर रहे हैं. लेकिन यह केवल काम करता है अगर आप एक ही समारोह में कर रहे हैं. एक बार जब आप किसी अन्य समारोह के लिए एक सरणी के पास या यदि आप एक सरणी की घोषणा की है और आप ढेर पर है कि सरणी डाल, आप malloc का उपयोग किया है  और सामान की तरह है, तो सभी दांव बंद कर रहे हैं. तो फिर आप वास्तव में आसपास पारित किया है एक विशेष तर्क या अन्य पैरामीटर आपको बता कितना बड़ा सरणी है. इस मामले में, मैं एक अल्पविराम - मैं खेद है, यह स्क्रीन से जा रहा है का उपयोग करना चाहते चाहते हैं यहाँ और मैं एक और तर्क में पास था  और यह लंबाई के लिए int लेन कहते हैं. एक बात है कि प्रश्नोत्तरी पर आ सकता है आप पूछ लिखने के लिए या एक विशेष रूप से कुछ कहा जाता है समारोह को लागू करने. अगर हम आप प्रोटोटाइप देना नहीं है तो, यह पूरी यहाँ बात है, इस सारी गंदगी समारोह घोषणा या समारोह प्रोटोटाइप कहा जाता है, यह एक पहली चीजों की है कि आप नीचे कील चाहते अगर यह नहीं दिया है आप सही प्रश्नोत्तरी पर दूर करने के लिए. अन्य चाल मैंने सीखा है कि हम कहते हैं कि हम आप किसी समारोह में भाग लेने के लिए एक प्रोटोटाइप देने के लिए करते हैं, और हम कहते हैं, "अरे, आप इसे लिखने के लिए मिल गया है." घुंघराले ब्रेसिज़ है कि आप प्रश्नोत्तरी पर अंदर अगर आपको लगता है कि वहाँ एक वापसी प्रकार है और आप देखेंगे कि वापसी प्रकार शून्य है, जिसका अर्थ है कि समारोह कुछ भी वापस नहीं करता है के अलावा अन्य कुछ है, एक बात तो आप निश्चित रूप से करना चाहते है लिखने समारोह के अंत में वापसी के बयान के कुछ प्रकार है. वापसी, और इस मामले में हम एक रिक्त रखा है क्योंकि हम रिक्त को भरने में चाहते हूँ. लेकिन यह आप कैसे मैं इस समस्या के दृष्टिकोण के लिए जा रहा हूँ के बारे में सही तरीके से सोच हो जाता है? और यह आपको याद दिलाता है कि आप करने के लिए एक मूल्य वापसी के लिए जा रहे हैं समारोह के फोन करने के लिए. हाँ >> [छात्र] क्या शैली लागू होते हैं जब हम प्रश्नोत्तरी पर कोड लिख रहे हैं? खरोज और सामान की तरह के रूप में इस तरह के >> [छात्र] हाँ. नहीं, नहीं के रूप में ज्यादा. मुझे लगता है कि - इस का एक बहुत कुछ हम प्रश्नोत्तरी के दिन पर स्पष्ट है, लेकिन आम तौर पर के बारे में चिंता भी शामिल है और सामान की तरह, यह बाहर की तरह है. [छात्र] क्या आप अपने हस्तलिखित कोड टिप्पणी करने की आवश्यकता है? क्या आप अपने हस्तलिखित कोड टिप्पणी करने की आवश्यकता है? टिप्पणी हमेशा अच्छा है अगर आप आंशिक क्रेडिट के बारे में चिंतित हैं या आप ग्रेडर अपने इरादे बातचीत करना चाहते हैं. लेकिन मैं फिर से, प्रश्नोत्तरी पर ही और प्रश्नोत्तरी दिन स्पष्ट करना होगा, लेकिन मैं विश्वास नहीं है कि आप टिप्पणी लिखने के लिए, नहीं की आवश्यकता होगी. लेकिन आम तौर पर यह नहीं, निश्चित रूप से बात की तरह है, जहां आप अपने इरादे संवाद की तरह कर सकते हैं "अरे, यह वह जगह है जहाँ मैं इसके साथ जा रहा हूँ." और कभी कभी कि आंशिक क्रेडिट के साथ मदद कर सकते हैं. कूल. तुलसी. [तुलसी] का कहना है कि, int lang की घोषणा के बीच क्या अंतर है तर्क या समारोह के भीतर एक चर घोषित बनाम मानकों में? वाह, कॉफी सांस की नली से नीचे चला गया. [तुलसी] की तरह बातें हैं जो हम बहस में डाल करना चाहते हैं. हाँ, यह एक बड़ा सवाल है. आप कैसे चयन करते हैं क्या बातें आप बहस में डाल चाहते क्या बातें आप समारोह के अंदर करना चाहिए बनाम? इस मामले में हम तर्क के रूप में इन दोनों के शामिल क्योंकि वे कुछ है कि जो कोई भी योग समारोह का उपयोग करने के लिए जा रहा है कर रहे हैं लिए उन चीज़ों को निर्दिष्ट करने की जरूरत है. राशि समारोह, जैसे हम के बारे में बात की थी, यह जानने का कोई तरीका नहीं है कैसे बड़ा सरणी है यह अपने कॉलर या जो कोई भी हो जाता है योग समारोह का उपयोग कर रहा है. यह कितना बड़ा है कि सरणी है जानने का कोई तरीका नहीं है. कारण है कि हम इस लंबाई में एक तर्क के रूप में सही यहाँ गुजरती हैं कारण यह है कि कुछ है कि हम मूल रूप से समारोह के फोन करने वाले कह रहे हैं, जो भी राशि समारोह का उपयोग करने के लिए जा रहा है, "अरे, आप न केवल करने के लिए हमें एक सरणी देना है ints की, आप भी हमें बताओ कितना बड़ा सरणी है कि आप हमें दिया है. " [तुलसी] उन दोनों कमांड लाइन तर्क होगा? नहीं, इन वास्तविक बहस कर रहे हैं कि आप समारोह को पारित होगा. मुझे एक नया पृष्ठ यहाँ. [तुलसी] नाम की तरह पारित होगा [नैट एच.] यदि मैं int मुख्य (शून्य), और मैं मेरी वापसी 0 में डाल नीचे तल पर यहाँ जा रहा हूँ, और कहते हैं कि मैं योग समारोह कॉल करना चाहते हैं. मैं कहना चाहता हूँ int x = (राशि); योग समारोह का उपयोग करने के लिए मैं दोनों सरणी में पारित है कि मैं संपेक्षतः करना चाहते हैं और सरणी की लंबाई, तो यह कहाँ है मैं मान ints की एक सरणी था, कहते हैं कि मैं था int numbaz [] = 1, 2, 3, उपयोग की तरह काट दिया है कि वाक्यविन्यास सही, तो मुझे क्या करना होगा राशि में है कि मैं में पारित करना चाहते हैं दोनों numbaz और नंबर 3 योग समारोह बता "ठीक है, यहाँ में सरणी मैं आप योग करने के लिए करना चाहते हैं." "यहाँ अपने आकार है." क्या इसका यह मतलब है? करता है कि आपके सवाल का जवाब? कई मायनों में यह समानांतर नहीं है कि हम क्या मुख्य के साथ कर रहे हैं जब हम कमांड लाइन तर्क है. सीज़र बीजलेख की तरह एक कार्यक्रम है, उदाहरण के लिए, की जरूरत है कि कमांड लाइन तर्क के लिए कुछ भी करने में सक्षम नहीं होगा. यह पता है कि कैसे एन्क्रिप्ट करने के लिए नहीं है, अगर आप यह क्या उपयोग करने के लिए महत्वपूर्ण बता नहीं किया जाएगा या यदि आप यह नहीं बता स्ट्रिंग क्या आप एन्क्रिप्ट चाहता था. इनपुट के लिए उत्साह, यह है, जहां हम 2 अलग तंत्र मिल गया है इनपुट में उपयोगकर्ता से उपयोगकर्ता से जानकारी लेने के लिए ले रही है, के लिए. के लिए समस्या 1 सेट हम इस GetInt, GetString, GetFloat जिस तरह से देखा इनपुट के लिए उत्साह की, और कहा कि मानक इनपुट स्ट्रीम का प्रयोग करके कहा जाता है. यह थोड़ा अलग है. यह कुछ ऐसा है कि आप एक समय में कर के रूप में करने का विरोध किया जा सकता है जब आप प्रोग्राम आह्वान जब आप कार्यक्रम चल रहा शुरू. कमांड लाइन तर्क सब जब आप कार्यक्रम चल रहा है शुरू करने के लिए निर्दिष्ट कर रहे हैं. हम उन लोगों में से दो का मिश्रण है. जब हम एक समारोह के लिए तर्क का उपयोग करते हैं, यह आदेश मुख्य लाइन तर्क बहुत पसंद है. यह है जब आप समारोह तुम्हें यह बताने की जरूरत आह्वान वास्तव में यह क्या जरूरत है, ताकि अपने कार्य करने के लिए. एक और अच्छी बात करने के लिए और देखो मैं तुम्हें बता दूँगा अपने खाली समय में इसे देखो, और उस में शामिल किया गया था गुंजाइश की इस धारणा प्रश्नोत्तरी और वैश्विक चर बनाम स्थानीय चर. क्या उस पर ध्यान देना. अब है कि हम इस अन्य सामान के लिए हो रही है, 3 सप्ताह में हम खोज और छँटाई के बारे में बात करना शुरू कर दिया. खोज और छँटाई CS50 में, कम से कम, बहुत बहुत अधिक कंप्यूटर विज्ञान के सैद्धांतिक भागों में से कुछ के लिए एक परिचय है. खोज की समस्या, छँटाई की समस्या बड़ा, विहित समस्याएं हैं. आप पूर्णांकों की अरबों की एक सरणी में एक विशेष नंबर कैसे मिल रहा है? आप कैसे एक फोन की किताब के अंदर एक खास नाम कि अपने लैपटॉप पर संग्रहीत किया जाता है? और इसलिए हम asymptotic रन बार की इस धारणा का परिचय वास्तव में अंदाजा कितनी देर तक, कितना मुश्किल ये समस्या है, कितनी देर तक वे हल करने के लिए ले. मुझे विश्वास है, 2011 की प्रश्नोत्तरी में वहाँ एक समस्या यह है कि मुझे लगता है कि गुण है बहुत जल्दी कवर, जो इस एक, 12 समस्या है. हे नहीं, यह ओमेगा है. यहाँ हम तेजी से संभव चलाने के समय के बारे में बात कर रहे हैं एक विशेष एल्गोरिथ्म के लिए और फिर धीमी संभव चलाते समय. यह ओमेगा और हे वास्तव में कर रहे हैं बस शॉर्टकट. वे कह के लिए notational शॉर्टकट हो बेहतरीन मामले में कितनी तेजी से हमारे एल्गोरिथ्म चलाने, और कैसे सबसे खराब संभव मामले में धीमी गति से हमारे एल्गोरिथ्म चलेगा? इनमें से कुछ करते हैं, और ये भी कवर किया गया उपगामी संकेतन है, जो मैं अत्यधिक की सिफारिश पर संक्षेप में. जैक्सन के एक बहुत अच्छा काम किया. द्विआधारी खोज के साथ, हम एक एल्गोरिथ्म के रूप में किया जा रहा द्विआधारी खोज के बारे में बात करते हैं, और हम आम तौर पर अपने बड़े ओ के मामले में इसके बारे में बात करते हैं बड़ी हे क्या है? संभव द्विआधारी खोज की धीमी चलाते समय क्या है? [छात्र] एन ²? बंद, मुझे लगता है कि इसी तरह के हैं. यह एक बहुत है कि तेजी से है. छात्र [] द्विआधारी? >> हाँ, द्विआधारी खोज. [छात्र] यह लॉग एन. N प्रवेश करें, तो क्या लॉग एन क्या मतलब है? यह यह प्रत्येक चलना आधा. वास्तव में, तो धीमी संभव मामले में, कहते हैं कि अगर आप एक हल सरणी एक लाख integers और संख्या के लिए आप देख रहे या तो बहुत या बहुत अंतिम तत्व सरणी में सरणी में पहला तत्व है. याद रखें, द्विआधारी खोज एल्गोरिथ्म मध्यम तत्व पर देखकर काम करता है, देख रहा है है कि अगर मैच है कि आप के लिए देख रहे हैं. अगर ऐसा है, तो महान, तुम्हें मिल गया. बेहतरीन मामले में, कितनी तेजी द्विआधारी खोज रन करता है? 1 [छात्र]. 1, यह लगातार समय है, 1 बड़ा हे. हाँ. [छात्र] मैं एक सवाल है. जब आप कहते हैं n के लॉग इन करने के लिए, आप 2 आधार के लिए सम्मान के साथ मतलब है, है ना? हाँ, इतना है कि दूसरी बात है. हम लॉग एन का कहना है, और मुझे लगता है कि जब मैं हाई स्कूल में था मैंने हमेशा माना है कि लॉग आधार 10 था. हाँ, तो हाँ, लॉग आधार आम तौर पर 2 हम क्या उपयोग है. फिर, द्विआधारी खोज करने के लिए वापस जा रहे हैं, अगर आप या तो के लिए खोज रहे हैं बहुत अंत में तत्व या बहुत शुरुआत में तत्व, क्योंकि तुम बीच में शुरू और फिर तुम त्यागें 1/2 जो भी मानदंडों को पूरा नहीं करता है कि आप के लिए देख रहे हैं, और आप अगले आधे और अगले आधे और अगले आधे जाओ. यदि मैं मिलियन पूर्णांक सरणी में सबसे बड़ा तत्व के लिए खोज कर रहा हूँ मैं जा रहा हूँ यह 1 लाख बार के सबसे लॉग आधा करना इससे पहले कि मैं अंत में परीक्षण करने के लिए और देखने के लिए कि तत्व मैं देख रहा हूँ सबसे बड़ी में या सरणी के उच्चतम सूचकांक में है, और कि लॉग n के लेने के लिए, 1 लाख बार का प्रवेश होगा. बुलबुला तरह. क्या तुम लोगों को बुलबुला तरह एल्गोरिथ्म याद है? केविन, तुम मुझे के एक त्वरित पुनर्कथन क्या बुलबुला तरह एल्गोरिथ्म में हुआ दे सकता है? [केविन] असल में यह सूची में सब कुछ के माध्यम से चला जाता है. यह पहले दो पर लग रहा है. अगर पहले एक 2 एक यह उन्हें स्वैप की तुलना में बड़ा है. तो यह तुलना दूसरे और तीसरे, एक ही बात है, स्वैप, तीसरे और चौथे, सभी तरह से नीचे. बड़ी संख्या को समाप्त करने के लिए का पालन करेंगे. और आप लेकिन कई loops के बाद कर रहे हैं. वास्तव में, तो क्या केविन ने कहा है कि हम बड़ी संख्या देखेंगे सरणी के अंत बुलबुला. उदाहरण के लिए, आप हमें इस उदाहरण के माध्यम से चलने आपत्ति नहीं है अगर यह हमारे सरणी है? [केविन] आप 2 लेने के लिए और 3 हूँ. 3 2 से भी बड़ा है, तो आप उन्हें स्वैप. [नैट एच.] ठीक है, तो हम इन स्वैप, और तो हम मिल 2, 3, 6, 4, और 9. [केविन] तो आप 3 और 6 की तुलना. 3 6 से छोटा है, तो आप उन्हें छोड़, और 6 और 4, आप उन्हें स्वैप क्योंकि 4 6 की तुलना में छोटे है. [नैट एच.] ठीक है, तो मैं 2, 3, 4, 6, 9 मिलता है. [केविन] 9 और 6 से भी बड़ा है, तो आप इसे छोड़ दें. और तुम वापस इसे माध्यम से फिर से जाना चाहते हैं. [नैट एच.] मैं इस बिंदु पर काम कर रहा हूँ >> [केविन] नहीं? और मैं इस बिंदु पर किया क्यों नहीं कर रहा हूँ? क्योंकि ऐसा लगता है जैसे मेरी सरणी हल है. मैं इसे देख रहा हूँ. [केविन] के माध्यम से फिर से जाओ और यकीन है कि वहाँ कोई और अधिक स्वैप कर रहे हैं इससे पहले कि आप पूरी तरह से रोक सकता है. वास्तव में, ताकि आप के माध्यम से जा रही है और यकीन है कि वहाँ कोई स्वैप कर रहे हैं की जरूरत है कि आप इस बिंदु पर कर सकते हैं. यह वास्तव में सिर्फ भाग्यशाली था, जैसे तुमने कहा, कि हम समाप्त केवल के माध्यम से 1 पारित कर रहा है और हम हल कर रहे हैं. लेकिन सामान्य मामले में ऐसा करने के हम वास्तव में इस पर और फिर से यह करना होगा. और वास्तव में, यह सबसे अच्छा संभव मामले का एक उदाहरण था, जैसे हम समस्या में देखा था. हमने देखा है कि सबसे अच्छा संभव मामले n था. हम सरणी समय 1 के माध्यम से चला गया. इस एल्गोरिथ्म के लिए सबसे ज्यादा संभव मामला क्या है? [केविन] एन ². और कहा कि देखो क्या पसंद करता है? एक सरणी देखो क्या ऐसा n ² समय ले जाएगा? [केविन] [अश्राव्य क्रमबद्ध]. वास्तव में, यदि ऐसा है तो मैं सरणी 9, 7, 6, 5, 2, 1 9 सभी तरह बुलबुला होगा. 1 चलना के बाद हम 7, 6, 5, 2, 9. फिर 7 बुलबुला, 6, 5, 2, 7, 9, और इतने पर और आगे. हम पूरे सरणी n बार के माध्यम से जाना होगा, और आप वास्तव में थोड़ा अधिक इस से सटीक प्राप्त कर सकते हैं क्योंकि एक बार हम अपनी अंतिम संभव स्थिति में 9 सभी तरह ले जाया गया है हम जानते हैं कि हम उस तत्व के खिलाफ फिर से तुलना नहीं. एक बार जब हम 7 बुदबुदाती ऊपर शुरू हम जानते हैं कि हम एक बार में 7 9 से पहले सही है रोक सकता है क्योंकि हम पहले से ही यह करने के लिए 9 की तुलना में. यदि आप एक चालाक रास्ता में इस करते हैं यह वास्तव में मुझे लगता है, कि इतना समय नहीं है. आप के लिए सभी संभव [अश्राव्य] संयोजन की तुलना करने के लिए नहीं जा रहे हैं हर बार जब आप प्रत्येक यात्रा के माध्यम से जाना. लेकिन फिर भी, जब हम यह ऊपरी सीमा के बारे में बात करते हैं, हम कहते हैं कि आप n पर देख रहे हैं ² तुलना सभी तरह के माध्यम से. चलो वापस जाओ, और जब से हम एक छोटे से समय पर कम पाने के लिए शुरू कर रहे हैं मैं कहूँगा कि आप निश्चित रूप से इस तालिका के बाकी के माध्यम से जाना चाहिए, यह सभी भरने के बाहर. उदाहरण के बारे में सोचो. ठोस उदाहरण के बारे में सोचो. यह वास्तव में आसान और उपयोगी है. यह ड्रा. इस तालिका की तरह है कि आप कंप्यूटर विज्ञान में के माध्यम से जाना आप वास्तव में इन के द्वारा हृदय जानना शुरू कर देना चाहिए. सवाल आप साक्षात्कार में मिल के प्रकार हैं. इन चीजों की तरह है कि पता करने के लिए अच्छा कर रहे हैं, और उन बढ़त मामले के बारे में लगता है, वास्तव में पता लगाना कैसे के बारे में सोचने के लिए जानते हुए भी कि बुलबुला के लिए सबसे खराब संभव सरणी प्रकार उस के साथ सुलझाने की है कि रिवर्स क्रम में है. सूचक. चलो संकेत के बारे में थोड़ा बहुत बात करते हैं. पिछले कुछ ही मिनटों में हम यहाँ है मैं जानता हूँ कि यह मैं / हे बल्कि नया है कि फाइल के साथ साथ कुछ है. जब हम संकेत कारण है कि हम संकेत के बारे में बात करना चाहते हैं के बारे में बात करते हैं क्योंकि, एक, जब हम सी में काम कर रहे हैं हम वास्तव में एक काफी कम स्तर पर सबसे आधुनिक प्रोग्रामिंग भाषाओं की तुलना में कर रहे हैं. हम वास्तव में कर रहे हैं स्मृति में चर में हेरफेर करने में सक्षम है, बाहर आंकड़ा जहां वे वास्तव में हमारे रैम के भीतर स्थित हैं. एक बार जब आप पर चले गए ऑपरेटिंग सिस्टम वर्गों आप देखेंगे ले है कि वह है, फिर, एक अमूर्त की तरह. यह वास्तव में मामला नहीं है. हम आभासी स्मृति है कि हम में से उन विवरण छुपा रहा है मिल गया है. लेकिन अब के लिए आप को लगता है कि जब आप एक कार्यक्रम कर सकते हैं, उदाहरण के लिए, जब आप शुरू अपने सीज़र बीजलेख कार्यक्रम चल रहा है मैं वापस मेरी iPad सच में जल्दी स्विच कि शुरुआत से ही अपने कार्यक्रम में, यदि आप कहते हैं, अपने लैपटॉप पर 4 रैम की गीगाबाइट, आप यह हिस्सा अलग हो, और हम इस रैम फोन करता हूँ. और यह हम 0 कॉल करने के लिए जा रहे हैं एक जगह में शुरू होता है, और यह एक जगह पर समाप्त होता है कि हम 4 गीगाबाइट फोन करता हूँ. मैं वास्तव में नहीं लिख सकते हैं. यार, कि काट दिया है. जब अपने कार्यक्रम कार्यान्वित ऑपरेटिंग सिस्टम रैम carves, और यह अपने अंदर रहना कार्यक्रम के विभिन्न भागों के लिए अलग खंडों को निर्दिष्ट यहाँ नीचे इस क्षेत्र में कोई आदमी की भूमि की तरह है. जब आप एक छोटे से दूर यहाँ जाना आप वास्तव में जगह मिल गया है, जहां कोड अपने कार्यक्रम जीवन के लिए. यही वास्तविक बाइनरी कोड, कि निष्पादन योग्य फ़ाइल वास्तव में स्मृति में लोड हो जाता है जब आप एक प्रोग्राम चलाने के लिए, और यह कोड खंड में रहती है. और के रूप में अपने कार्यक्रम कार्यान्वित प्रोसेसर इस कोड खंड पर लग रहा है के लिए बाहर आंकड़ा अगले अनुदेश क्या है? कोड की अगली पंक्ति मैं निष्पादित करने की जरूरत क्या है? वहाँ भी एक डेटा खंड है, और यह वह जगह है जहाँ उन स्ट्रिंग स्थिरांक संग्रहीत कि आप का उपयोग किया गया है. और फिर आगे इस जगह ढेर कहा जाता है. हम malloc का उपयोग करके वहाँ में स्मृति का उपयोग करने के लिए, और फिर अपने कार्यक्रम के शीर्ष की ओर वहाँ ढेर है, और कहा कि जहां हम शुरुआत के अधिकांश के लिए खेल रहा हूँ. इस पैमाने या कुछ भी करने के लिए नहीं है. यह एक बहुत बहुत मशीन निर्भर है, प्रणाली निर्भर कार्य कर रहा है, लेकिन यह है कि अपेक्षाकृत कैसे चीजों को chunked मिलता है. जब आप एक प्रोग्राम चलाने के लिए और आप एक-x बुलाया चर घोषणा मैं नीचे एक बॉक्स आकर्षित करने के लिए जा रहा हूँ, और यह करने के लिए राम के रूप में अच्छी तरह से होने जा रहा है. और मैं देखने के लिए जा रहा हूँ. हम दांतेदार लाइनों आकर्षित करने के लिए संकेत मिलता है यह सिर्फ राम का एक छोटा सा वर्ग है और जैसा कि हम यह सब नहीं शीर्ष पर आकर्षित. अगर मैं एक पूर्णांक x नामक चर घोषित तो क्या मैं वास्तव में एक मानचित्रण कि अपने कार्यक्रम के प्रतीक तालिका में संग्रहीत किया जाता है है कि स्मृति के इस क्षेत्र के लिए नाम x जोड़ता है कि मैं तैयार किया है सही यहाँ ऊर्ध्वाधर सलाखों के बीच. अगर मैं अपने प्रोग्राम है कि x 7 = कहना में कोड की एक पंक्ति है प्रोसेसर जानता है, "ओह, ठीक है, मुझे पता है कि x स्मृति में इस स्थान पर रहता है." "मुझे आगे जाना है और वहाँ एक 7 लिखने जा रहा हूँ." यह कैसे जानते हैं कि किस स्थान की स्मृति में है? वैसे, यह सब समय संकलन में किया है. संकलक आवंटन की देखभाल लेता है, जहां चर में से प्रत्येक के लिए जा रहे हैं और एक विशेष मानचित्रण बनाने या बल्कि डॉट्स जोड़ने एक प्रतीक है और कहाँ जा रहा है, एक चर नाम के बीच और जहां यह स्मृति में रहने के लिए जा रहा है. लेकिन यह पता चला है कि हम वास्तव में यह हमारे कार्यक्रमों में उपयोग के रूप में अच्छी तरह से कर सकते हैं. यह महत्वपूर्ण हो जाता है जब हम डेटा संरचनाओं में से कुछ के बारे में बात शुरू करते हैं, जो एक अवधारणा है कि हम बाद में शुरू करने जा रहे हैं. लेकिन अब के लिए, क्या तुम जानते हो सकता है कि मैं इस स्थान के लिए एक सूचक बनाने के लिए, x कर सकते हैं. उदाहरण के लिए, मैं एक सूचक चर बना सकते हैं. जब हम एक सूचक चर बनाते हम सितारा संकेतन का उपयोग करें. इस मामले में, यह कहना है कि मैं एक int के लिए एक सूचक बनाने जा रहा हूँ. यह किसी भी अन्य की तरह एक प्रकार है. हम इसे एक चर y तरह देते हैं, और फिर हम यह पता करने के लिए बराबर है, एक पते पर निर्धारित किया है. इस मामले में, हम y एक्स के लिए बात कर सकते हैं इस एम्परसेंड साथ एक्स के पते, जो हम करते हैं लेने के द्वारा, और फिर हम y सेट करने के लिए यह करने के लिए बिंदु. यह क्या अनिवार्य रूप से अगर हम अपने रैम को देखो करता है यह एक अलग चर बनाता है. यह करने के लिए यह y कॉल करने के लिए जा रहा है, और जब कोड की इस पंक्ति निष्पादित यह वास्तव में एक छोटे से सूचक है जो हम आम तौर पर एक तीर के रूप में आकर्षित बनाने के लिए जा रहा है, और यह करने के लिए एक्स के लिए इंगित y सेट. हां. [छात्र] यदि x पहले से ही एक सूचक है, तुम सिर्फ करना होगा int * y = x बजाय एम्परसेंड होने की? हां. यदि x पहले से ही एक सूचक है, तो आप 2 एक दूसरे के बराबर संकेत सेट कर सकते हैं, जो मामले में y एक्स के लिए नहीं बात करेंगे, लेकिन यह एक्स जो कुछ भी इशारा कर रहा है के लिए बात करेंगे. दुर्भाग्य से, हम समय से बाहर रहे. क्या मैं इस बिंदु पर कहना होगा, हम इस ऑफ़लाइन के बारे में बात कर सकते हैं, लेकिन मैं कहूंगा कि इस समस्या के माध्यम से काम कर रहा है, # 14 शुरू. आप देख सकते हैं कि वहाँ पहले से ही आप के लिए एक छोटे से भरा सा है यहाँ. आपको लगता है कि जब हम 2 संकेत घोषणा कर सकते हैं, int * x और y, और ध्यान दें कि चर के लिए अगले * की ओर इशारा करते हुए कुछ है कि पिछले साल किया गया था. यह पता चला है कि हम क्या कर रहे हैं इस साल के लिए इसी तरह की है. यह वह जगह है जहाँ आप लिखने * जब आप सूचक की घोषणा कर रहे हैं कोई फर्क नहीं पड़ता. लेकिन हम * टाइप करने के लिए बगल में लिखा है क्योंकि कि यह बहुत स्पष्ट है कि आप एक सूचक चर की घोषणा कर रहे हैं कि बनाता है. आप देख सकते हैं कि 2 संकेत की घोषणा हमें 2 बक्से देता. जब हम यहाँ malloc के बराबर एक्स सेट यह क्या कह रहा है निवारक ढेर में स्मृति. इस छोटे से बॉक्स में, इस चक्र, ढेर पर स्थित है. एक्स यह इशारा कर रहा है. ध्यान दें कि y अभी भी कुछ भी करने के लिए नहीं इशारा कर रहा है. स्मृति x में 42 नंबर की दुकान हम क्या संकेतन का उपयोग होगा? [छात्र] * x 42 =. वास्तव में, * x 42 =. इसका मतलब है कि तीर का पालन करें और वहाँ में 42 फेंक. यहाँ है जहाँ हम वाई और एक्स सेट हम y x ओर इशारा करते हैं. फिर, यह बस की तरह है क्या केविन ने कहा कि जहां हम y एक्स के लिए बराबर सेट. वाई एक्स के लिए नहीं इशारा कर रहा है. बल्कि, यह एक्स के रूप में अच्छी तरह से करने के लिए क्या इशारा कर रहा है की ओर इशारा करते है. और फिर अंत में यह पिछले बॉक्स में 2 संभव चीजें हैं जो हम कर सकते हैं. एक यह है कि हम कह सकते हैं * x = 13. दूसरी बात यह है कि हम कहना एलेक्स, आप करते हैं जानते हो सकता है कि हम यहाँ क्या कर सकता है? आप कह सकते हैं * x 13 = [छात्र] आप int जो कुछ भी कह सकता है. [नैट एच.] यदि यह एक int चर के रूप में भेजा जाता था कि हम कर सकते थे. हम भी * y = 13 क्योंकि वे दोनों एक ही जगह पर इशारा कर रहे हैं, कह सकते हैं तो हम या तो चर का उपयोग करने के लिए मिल सकता है. हाँ >> [छात्र] क्या यह की तरह अगर हम सिर्फ कहते int x 13 है लग रही होगी? कि एक नई एक्स नामक चर, जो काम नहीं करेगा घोषित किया जाएगा. हम एक टकराव है क्योंकि हम x एक सूचक होने के लिए यहाँ की घोषणा करता हूं. [छात्र] यदि हम अभी से ही है कि बयान था कि यह क्या चक्र के मामले में की तरह लग रही होगी? यदि हम x 13 = तो हम एक बॉक्स है, और चाहते हैं एक तीर होने के बजाय बॉक्स से बाहर आ रहा है हम यह सिर्फ एक 13 के रूप में आकर्षित होता. बॉक्स में [छात्र]. ठीक है. आप देख के लिए धन्यवाद, और 0 प्रश्नोत्तरी पर अच्छी किस्मत. [CS50.TV]