डेविड Malan: सब ठीक है. तो इस CS50 है, और यह है अब सप्ताह में तीन की शुरुआत. अब तक, हम है ऊपर तो सी में प्रोग्राम लिख दिया कि एक छोटे से देखो यहाँ कुछ इस तरह. इसलिए हम एक जोड़े के लिए मिल गया है तेज शीर्ष पर शामिल है. हम शून्य,, int मुख्य मिल गया है, और तो कुछ बीच में ऐसा करने के लिए, अंदर कोड के कुछ सा उस समारोह का. लेकिन महत्वपूर्ण तथ्य यह है कि कर दिया गया है हम यहां शून्य कह रहा हूँ. तो शून्य, इस समय के सभी निर्दिष्ट इस कार्यक्रम, जब चलने वाले, केवल अपने नाम के माध्यम से चलाया जा सकता है. आप किसी भी अन्य शब्द टाइप नहीं कर सकते हैं या कार्यक्रम का नाम जब बाद संख्या यह चल रहा है. तो, उदाहरण के लिए कार्यक्रम, थे हैलो नामक एक फ़ाइल में संकलित, आप ./hello कर सकता है, लेकिन यह बात है. 

एक ही तरीका है कि आप सकता है इस कार्यक्रम के लिए इनपुट प्रदान एक समारोह बुला कर रहा है. उदाहरण के लिए, क्या समारोह हम इस प्रकार अब तक का उपयोग किया गया है उपयोगकर्ता से इनपुट पाने के लिए? 

दर्शक: स्ट्रिंग जाओ. डेविड Malan: स्ट्रिंग मिलता है, या पूर्णांक मिलता है, या आप दूसरों को देखा है, आप उन्हें अभी तक उपयोग नहीं किया है, भले ही जैसे, लंबे और की तरह मिलता है. लेकिन लगता है कि हम वास्तव में शुरू करना चाहते हैं थोड़ा अधिक कर रहे हैं कि लेखन कार्यक्रमों सच कहूँ तो, एक छोटे से अधिक, बहुमुखी, और आप है कि आदेशों की तरह उम्मीद है, मिल रहा, एक छोटा सा के आदी. सीडी अंतरिक्ष ड्रॉपबॉक्स तरह. यह, ज़ाहिर है, परिवर्तन आपके निर्देशिका, यह सोचते हैं आप जॉन हार्वर्ड के घर में रहे निर्देशिका, अपने ड्रॉपबॉक्स फ़ोल्डर में. इस बीच, इस तरह एक आदेश , pset2 नामक एक नई निर्देशिका बनाता है हो सकता है आप के रूप में पहले से ही या जल्द ही समस्या के लिए दो सेट. बनाओ नमस्कार, ज़ाहिर है, एक आदेश है कि हैलो नामक एक कार्यक्रम बनाता है हैलो डॉट सी नामक एक फ़ाइल से. और इनमें से प्रत्येक में मामलों, अब, हम लिया है तथाकथित पर एक तर्क प्रदान कमांड लाइन, निमिष शीघ्र, कि बनाने जानता है तो क्या हुआ निर्माण, और इतना करने के लिए कि mkdir बनाने के लिए क्या फ़ोल्डर जानता है, और इतना है कि सीडी जानता जहां आप जाना चाहते हैं. लेकिन अब तक, हम कहते रहते कि मुख्य आपकी डिफ़ॉल्ट समारोह, एक शून्य अभिव्यक्ति है उन कोष्ठकों के अंदर, जो यह मतलब है कि कोई बहस नहीं हो सकती. 

तो आज शुरू, क्या हम क्या करने जा रहे हैं , हम शुरू करने जा रहे है यह भी तरह बातें समर्थन. वास्तव में, इस मामले में, जो आप आम तौर पर मैन्युअल टाइप नहीं है, इस कर की गई है हमारे लिए, वहाँ नहीं कर रहे हैं लेकिन एक एक, दो, तीन अतिरिक्त कार्यक्रम का नाम दिया है के बाद तार बजना. तो कैसे हम इस लक्ष्य को हासिल कर सकता हूं? 

खैर, आज शुरू, हम चाहते हैं कि जिन मामलों में के माध्यम से इनपुट प्रदान करने के लिए कमांड लाइन तथाकथित, हम जोड़ने शुरू करने जा रहे हैं यहाँ yellow-- में क्या है int argc अल्पविराम के साथ शून्य की जगह स्ट्रिंग argv खुला ब्रैकेट बंद कोष्ठक. अब यह दिलचस्प है कारणों की एक जोड़ी के लिए. एक, यह हमें लिखने जा रहा है एक छोटे से अधिक गतिशील हैं कि कार्यक्रम. लेकिन, अधिक compellingly, इसे खोलने के लिए जा रहा है के रूप में अब एक बातचीत क्या सरणियों कर सकते हैं वास्तव में क्या एक स्ट्रिंग के लिए इस्तेमाल किया जा वास्तव में हुड के नीचे है, अगले सप्ताह तक हम डाइविंग शुरू जब मशीन है के रूप में कैसे भी गहरा में इस सामान के सभी काम कर रही है. लेकिन अब के लिए, चलो आकर्षित करते हैं, शायद, एक तस्वीर. 

आप एक प्रोग्राम लिखने घोषित मुख्य साथ इस तरह, इस तरह के मुख्य कि दो तर्क, एक पूर्णांक लेता है and-- क्या डेटा प्रकार दूसरा तर्क है? 

दर्शक: ऐरे. डेविड Malan: सरणी. यह एक है तो ऐसा पहली नज़र में लगता है स्ट्रिंग, लेकिन वर्ग कोष्ठक नोटिस. हम पेश पिछली बार याद एक सरणी की धारणा. और सारणियों वर्ग कोष्ठक का उपयोग संदर्भों की एक जोड़ी में. आप वर्ग का उपयोग हो सकता है कोष्ठक एक सरणी में जाने के लिए और इस तरह के एक विशेष तत्व मिल ब्रैकेट 0 या ब्रैकेट 1 या ब्रैकेट 2. लेकिन हम अगर संक्षेप में, देखा पिछले हफ्ते यह भी है कि आप करने के लिए इन वर्ग कोष्ठक का उपयोग एक सरणी के आकार की घोषणा, आप पहले से जानते हैं कि कितने ints या कितने तार या जो कुछ भी आप वास्तव में चाहते हैं. तो यह है वहाँ पता चला है यहाँ एक तिहाई संदर्भ कि अंदर कोई संख्या है वर्ग कोष्ठक की. मैं यहाँ के रूप में जब आप, निर्दिष्ट, argv तरह से कुछ के नाम, जिनमें से सिर्फ एक अच्छा तरीका है तर्क वेक्टर, कह रही है जो का एक और अच्छा तरीका है , तर्क की एक सरणी कह खुला ब्रैकेट बंद कोष्ठक बस तुम जरूरी नहीं है इसका मतलब कितना बड़ा पहले से पता सरणी, होने जा रहा है लेकिन आप इसे एक सरणी होने जा रहा है पता है. आप नहीं जानते तो अगर संख्या, वहाँ में मत डालो खुला ब्रैकेट बंद कोष्ठक के लिए argv एक स्ट्रिंग नहीं है कि इसका मतलब है, लेकिन तारों की एक सरणी. तो वाक्य रचना, आप अगर पिछले सप्ताह वापस लगता है, यह कह के समान है पूर्णांक उम्र खुला ब्रैकेट की तरह कुछ, और फिर कुछ उसके बाद. तो क्या इस तरह दिखता है? वास्तव में एक तस्वीर खींचना. तो आप मुख्य के साथ इस कार्यक्रम चलाते समय दो तर्क अंदर परिभाषित होने उन कोष्ठकों का, तुम अनिवार्य रूप से कम से कम दो हिस्सा है स्मृति के आप को सौंप दिया हुड के नीचे. एक, इस आयत के रूप में आ रही है, मैं हूँ, argc कहा जा रहा है. और सिर्फ एक त्वरित पुनर्कथन के रूप में, argc के डेटा प्रकार क्या है? तो यह एक पूर्णांक है. तो एक नंबर जा रहा है argc-- में बदल जाता है जाने के लिए बाहर तर्क गणना के लिए खड़ा है. इस बीच, मैं एक सरणी के रूप argv खींचा है. और मैं सच में नहीं पता यह होने जा रहा है, कब तक इसलिए आज के प्रयोजनों के लिए डॉट डॉट डॉट. यह कुछ लंबाई की हो सकती है. लेकिन मैं यहाँ चित्र लिया है कम से कम चार आयतों. तो भंडार है कि स्मृति का एक हिस्सा argv स्ट्रिंग स्ट्रिंग स्ट्रिंग डॉट डॉट डॉट, और argc सिर्फ एक हिस्सा है एक पूर्णांक के लिए स्मृति की. 

तो अब, चलो थोड़ा और अधिक सटीक हो. तो, मैं तार है जब इस सरणी में कहा जाता है, argv, मैं उन पर प्राप्त करना चाहते हैं व्यक्तिगत रूप से, अभी पिछले सप्ताह की तरह, हम संकेतन का उपयोग करने के लिए जा रहे हैं argv ब्रैकेट 0 की तरह पहली बात यह है कि एक सरणी प्राप्त करने के लिए. Argv ब्रैकेट 1 पाने के लिए इसके आगे दूसरी बात, और. चाबी यहाँ हम अभी भी 0 हो जा रहा है indexed-- हम अभी भी 0 से भरोसा कर रहे हैं. तो अब वास्तव में चलो इस में कुछ डाल दिया. मैं एक कार्यक्रम में कहा संकलन के लिए गए थे हैलो हैलो डॉट सी नामक एक फ़ाइल से, और फिर मैं उस कार्यक्रम चलाने डॉट के साथ नमस्ते स्लेश, मेरे कंप्यूटर, मेरे लैपटॉप क्या करता है, हुड के नीचे की तरह दिखते मैं डॉट चलाने के पल हैलो स्लेश और हिट दर्ज करें? खैर, यह शायद है हम वर्णन कर सकता है क्या आपके कंप्यूटर के की सामग्री के रूप में स्मृति, या RAM-- रैंडम एक्सेस मेमोरी. दूसरे शब्दों में, कंप्यूटर, किसी भी तरह जादुई आप के लिए, argc में नंबर 1 डालता है, उर्फ ​​argcount, और यह सचमुच स्ट्रिंग डालता ./hello argv ब्रैकेट 0 में. मुझे पता नहीं है, सच में, क्या है argv ब्रैकेट में 1 या 2 या 3, उपयोगकर्ता नहीं किया गया है क्योंकि , ./hello के अलावा कुछ भी टाइप किया हम इन मानते हैं कि करने के लिए जा रहे हैं सबसे अधिक संभावना कचरा मान रहे हैं, इतनी बात करने के लिए. स्मृति के उन हिस्सा मौजूद हैं, लेकिन यह हम पर निर्भर नहीं है क्योंकि, उन्हें देखने के लिए argcount केवल एक है. 

अब, इस बीच, मैं अगर एक अन्य कार्यक्रम चलाने लिखना, अधिक ठीक से एक आदेश है जो सीडी,, अपने चमचमाते prompt-- सीडी अंतरिक्ष में मैं प्रभावी ढंग से, कि जब चलाने Dropbox--, सीडी कार्यक्रम चलाया जाता है, argc, अपने कंप्यूटर की स्मृति के अंदर, के लिए है सबसे छोटा दूसरे नंबर 2. और फिर argv ब्रैकेट ओ है सीडी, argv ब्रैकेट 1, ड्रॉपबॉक्स है और फिर बेशक आदेश पूरा करता है, तो यह स्मृति के सभी अनिवार्य रूप से दूर हो जाता है और कुछ और के लिए प्रयोग किया जाता है. और कहा कि मैं कहना क्यों है दूसरी बस एक विभाजन. 

इस बीच, हम mkdir pset2 करते हैं, चित्र, लगभग एक ही लग रहा है लेकिन argv अंदर अलग तार के साथ. मैं नमस्कार बजना पानी का छींटा करते हैं हैलो डॉट सी, एक ही विचार है. अधिक सामान के लिए में भर जाता है argv, और argc, बेशक, 4. तो दूसरे शब्दों में, यहां तक ​​कि इस सरणी हालांकि कुछ की, डॉट डॉट डॉट किया जा सकता है चर लंबाई, तो बात है, आप हमेशा यह का जहां अंत पता argc आपको बताने जा रहा है, क्योंकि है किस बिंदु पर आप को रोकना होगा argv में तत्वों पर देख रहे हैं. आप केवल चार पर देख सकते हैं इस मामले में कुल में. 

तो चलो अब पर एक नज़र रखना, शायद, एक सरल कार्यक्रम. सिर्फ हैलो कहते हैं कि एक Zamyla तरह किसी को. इसलिए मुझे लगता है मैं एक प्रोग्राम लिखने के लिए जा रहा हूँ दावा बस एक पल में जो के माध्यम से मैं कर सकता तो मैं चाहता हूँ ./hello अंतरिक्ष Zamyla, और अपने कार्यक्रम कुछ बाहर मुद्रित करने के लिए जैसे सुपर सरल "हैलो, Zamyla." अब अतीत में हम getstring का उपयोग किया है. अतीत में, भले ही तो आप, प्रोग्रामिंग करने के लिए नए हैं, बाधाओं आप एक कोड़ा सकता हैं getstring का उपयोग करता है कि कार्यक्रम और तो printf का उपयोग करता है Zamyla को नमस्ते कहने के लिए. लेकिन इस बार getstring का उपयोग नहीं करते हैं. मुझे बजाय Appliant में चलते हैं और मानक मैं हे डॉट घंटे शामिल है. मुझे भी CS50 डॉट घंटे शामिल करते हैं. अब मुख्य int, और अब मैं कर रहा हूँ आज शून्य नहीं जा रहा. इसके बजाय, मैं int argc क्या करने जा रहा हूँ स्ट्रिंग argv खुला ब्रैकेट बंद कोष्ठक, एक संख्या को निर्दिष्ट नहीं. और अब यहाँ मेरे पास करने के लिए तथाकथित है. अब मैं क्या करने जा रहा हूँ मैं कर रहा हूँ, है विश्वास की छलांग के एक बिट करने के लिए जा रहा है, मैं उपयोगकर्ता की कल्पना करने के लिए जा रहा हूँ सही ढंग से इस कार्यक्रम का उपयोग करने के लिए जा रहा है, और मैं बस करने के लिए जा रहा हूँ हैलो printf% एस.एन. करते हैं. तो कुछ भी नहीं है नया. लेकिन अब मैं जो कुछ शब्द डाल करना चाहते हैं कार्यक्रम के नाम के बाद उपयोगकर्ता प्रकार. इसलिए मैं Zamyla ./hello अंतरिक्ष करते हैं, मैं किसी भी तरह प्रोग्राम के उपयोग करने के लिए चाहते हैं गंदें शब्द बोलना "Zamyla." बोली इसलिए मैं मेरा तर्क वेक्टर में जा सकते हैं, मेरा तार की सरणी, और आदेश हैं, फिर, ./hello अंतरिक्ष, Zamyla था क्या संख्या मैं चाहता हूँ यहाँ argv में डाल करने के लिए? दर्शक: 1. डेविड Malan: 1, क्योंकि ब्रैकेट 0 पता चला है होने जा रहा है कार्यक्रम का नाम हमने देखा, के रूप में. तो ब्रैकेट 1 पहला शब्द है मुझे लगता है कि, उपयोगकर्ता, टाइप किया है. मुझे आगे जाना है और इस को बचाने के लिए जा रहा हूँ. मैं अपने फ़ोल्डर में जाने के लिए जा रहा हूँ जहां मैं इस फाइल रखा है. मैं नमस्कार 3 बनाना क्या करने जा रहा हूँ. कंप्यूटर अनुप्रयोग है कब ठीक है. ./hello Zamyla लिखें. मैं गलत क्या किया? मैं आश्चर्य से पकड़ा गया था अपने आप को वहाँ सिर्फ एक पल के लिए. मैं गलत क्या किया? 

दर्शक: नाम. 

डेविड Malan: फाइल के वास्तव में hello3.c बुलाया. और मैं बस के लिए किया है कि स्थिरता, हम है क्योंकि में था hello.c की ऑनलाइन कोड में पिछले. तो चलो इस ./hello तय ब्रैकेट पानी का छींटा 3 Zamyla. लिखें. और अब हम, हैलो Zamyla है. इस बीच, मैं करने के लिए इसे बदल सकते हैं रोब, या वास्तव में किसी भी अन्य शब्द हो. 

लेकिन एक कोने मामले पर विचार करें. आप अगर कुछ नहीं होगा क्या उम्मीद कर सकते हैं मैं सब पर किसी का नाम नहीं लिख सकता हूँ? 

दर्शक: त्रुटि. 

डेविड Malan: कोई त्रुटि शायद किसी प्रकार का. चलो देखते हैं. लिखें. अशक्त. तो printf वास्तव में किया जा रहा है हम में से एक छोटे से सुरक्षात्मक यहाँ, और सचमुच खुला कोष्ठक मुद्रण अशक्त, लेकिन चीजें भी बदतर हो सकता है. और बस को प्रदर्शित करने के लिए कुछ तुम बिल्कुल ऐसा नहीं होना चाहिए, चलो में चलते हैं यहां और आसपास poking शुरू. है ना? अगर मुझे पता है कि तस्वीर में स्मृति, अनिवार्य रूप से यह है argv ब्रैकेट 1 Zamyla, argv है ब्रैकेट 0 ./hello है, या ./hello-3. क्या ब्रैकेट 2 में है? इसलिए मुझे लगता है कि जवाब कर सकते हैं ठीक है, अपने आप में प्रश्न? मैं सिर्फ 2 से 1 बदल सकते हैं. मैं अब, 3 नमस्ते, फिर कंपाइल कर सकते हैं ./hello3 में ज़ूम और हिट दर्ज करते हैं. वूप्स. कोई उद्धरण चिह्न. दिलचस्प. तो उस तरह के अच्छा है यहाँ में है और क्या देखते हैं. 

तो और क्या मेरे लैपटॉप के अंदर है? के ब्रैकेट 3 के साथ इसे बचाने के लिए करते हैं. ./hello -3, Hello3 बनाओ. जिज्ञासु. और अब वास्तव में bold-- 50 मिलता है. इसलिए कि गहरी वास्तव में गोताखोरी है अपने कंप्यूटर की स्मृति में. 50 अनुक्रमित में. तो हैलो 3 ./hello-3 बनाना. जिज्ञासु. सब ठीक है, अब मैं अभी कर रहा हूँ लापरवाह पाने के लिए जा रहा है. के 5000 के लिए चलते हैं. ठीक है. तो मुझे फिर कंपाइल करते हैं. ./hello -3, Hello3 बनाओ. ठीक. आप में से कुछ अब, वहाँ हो सकता है बंद रहा एक प्रकाश बल्ब हो. आप में से कितने पास की पहले इस संदेश को देखा है? ठीक. तो, क्यों? 

बाधाओं are-- और अलग नहीं है इस कारण हो सकता है कि चीजें, और स्पष्ट रूप से आप अच्छा कर रहे हैं में company-- हम स्पष्ट रूप से है कहा जाता है के कारण विखंडन दोष. और आज के लिए लंबी कहानी संक्षेप में, मैं स्मृति के एक खंड को छुआ है मैं नहीं होना चाहिए कि. जहां एक खंड सिर्फ एक हिस्सा मतलब स्मृति की मैं नहीं होना चाहिए कि. अब कंप्यूटर गारंटी देता है कि अगर मैं मैं argv संपर्क कर सकते हैं कि ./helloZamyla चलाने ब्रैकेट 0 और argv ब्रैकेट 1 हो. लेकिन argc मूल्य 2, कि मैं हूं, इसका मतलब है केवल यह सम्मान की तरह है allowed-- स्पर्श करने system-- ब्रैकेट 0 और ब्रैकेट 1. मैं किसी भी आगे जाना है, वहाँ वहाँ बिल्कुल स्मृति होने जा रहा. मेरे राम शारीरिक रूप से मौजूद है कंप्यूटर में. लेकिन वहाँ कौन है क्या जानता है? दरअसल, मैं कई चल रहा हूँ एक समय पर कार्यक्रम. मैं नहीं थे अगर मैं seen-- हो सकता है Appliant पर यह कर लेकिन अपने मैक या PC-- पर मैं हो सकता है एक ईमेल की सामग्री को देखा. मैं एक पल देखा हो सकता है संदेश मैं हाल ही में भेज दिया है. हो सकता है कि कुछ भी स्मृति में चारों ओर सुस्त के माध्यम से पहुँचा जा सकता था इस मनमानी वर्ग ब्रैकेट अंकन. या बुरा अभी तक, तुम हो सकता है मेरे पासवर्ड में से एक पाया मैं हाल ही में लिखे गए एक कि था कि कार्यक्रम स्मृति में संग्रहीत किया था के रूप में तो मुझे प्रमाणित, और करने के लिए तो बस की तरह इसे छोड़ दिया राम में मुझे लगता है कि इस कार्यक्रम से बाहर निकलें जब तक. 

और वास्तव में, इस में से एक है खतरे और एक शक्तियां सी की तरह एक भाषा का उपयोग करने का आप निरंकुश उपयोग कर सकते है सारी सामग्री को एक कार्यक्रम की स्मृति में, और क्या बुरे लोग कर सकते हैं यहां तक ​​कि उन cases-- में कर खासकर जब हम वेब प्रोग्रामिंग करने के लिए मिलता है सेमेस्टर के अंत की ओर, हम करेंगे चारों ओर ढकेलना है इस topic-- फिर से आना, संभवतः, किसी कंप्यूटर का है स्मृति और ऐसे उत्सुक चीजों को खोजने हम वहाँ देखा. या भी बदतर अभी तक, पासवर्ड कि वह या तो वह बुरी बातें करने के लिए उपयोग कर सकते हैं. 

तो स्पष्ट रूप से मैं ऐसा नहीं करना चाहिए अजीब बातें होने शुरू है. दरअसल, यह एक कार्यक्रम दुर्घटनाग्रस्त है. यह बराबर होगा विंडोज मैक ओएस के लिए या में एक प्रोग्राम विंडो सिर्फ गायब. एक अप्रत्याशित त्रुटि हुई है. कमांड लाइन माहौल में हम कुछ इस तरह देखते हैं. लेकिन यही कारण है कि, मैं बस छू रहा है मेरे लिए नहीं है कि स्मृति. 

तो चलो इस एक के खिलाफ की रक्षा करते हैं एक अलग तरह से थोड़ा सा यहां इस कार्यक्रम को देखकर. तो, फिर से, कंकाल हम earlier-- देखा कि और मैं इस समय पूर्णांक पर प्रकाश डाला गया है. और यह सब समय मुख्य है वास्तव में एक मान दिया. हालांकि हमारे व्याख्यान के अधिकांश में हम एक बार इस्तेमाल कभी नहीं किया उदाहरण मुख्य में कुछ भी वापसी. हम सिर्फ printf करीब लिखना घुंघराले ब्रेस और यह बात है. लेकिन मुक्त करने के लिए, क्या संकलक, आप के लिए कर दिया गया प्रभावी रूप से, आप के लिए 0 लौट रहा है. Out-- बदल जाता है और यह एक छोटी सी है 0 अच्छा है कि counterintuitive--. यह एसई प्रति गलत मतलब यह नहीं है. 0 अच्छा है, और किसी भी गैर 0 मूल्य, दुनिया का फैसला किया है, एक त्रुटि दर्शाता कर सकते हैं. आप कभी गड़बड़ है तो अगर आपके कंप्यूटर पर कुछ, या एक कार्यक्रम सिर्फ तुम पर मर गया और आप कुछ गलत खिड़की मिल गया है अपनी स्क्रीन पर, कह त्रुटि 49 या त्रुटि नकारात्मक 23-- है कि कुछ मालूम होता है मनमाना value-- एक प्रोग्रामर हार्ड कोडित है क्योंकि 49 नकारात्मक या सकारात्मक तरह एक मूल्य 23 किसी भी संख्या का प्रतिनिधित्व करने के लिए कहते हैं, हिम्मत, 4 अरब संभव चीजों की कि एक कार्यक्रम में गलत जा सकता है. 

तो मैं कैसे ले सकता है इस का लाभ अपने आप को? खैर, मुझे एक कार्यक्रम खोल देना मैं पहले से लिखा है कि, और ऑनलाइन नमस्ते 4 बुलाया आसपास प्रहार. और यह, सिवाय इसके कि लगभग समान है अपने त्रुटि की जाँच का एक छोटा सा मिल गया. इस मामले में, मैं फिर से घोषित कर दिया है दो तर्क लेने के रूप में मुख्य, लेकिन इस बार, लाइन 17 पर, नोटिस मैं एक मानसिक स्वास्थ्य की जांच के एक बिट कर रहा हूँ. मैं यह सुनिश्चित करें कि बना रहा हूँ argc 2 बराबर होती है. अगर यह होता है कि, क्योंकि मैं सुरक्षित रूप से कर सकते हैं मतलब न केवल ब्रैकेट 0, लेकिन ब्रैकेट 1 छूना. और मुझे आगे जाना है और बाहर प्रिंट, इस मामले में, Zamyla या रोब या मैं बाहर टाइप जो कुछ शब्द. और अब सिर्फ पाने के लिए , अधिक उचित एक छोटी सी मैं स्पष्ट रूप से वापस जाने के लिए जा रहा हूँ 0 सब कुछ ठीक है दर्शाता है. कुछ भी बुरा हुआ. 

लेकिन सम्मेलन से, मैं जा रहा हूँ 1 लौटने, या स्पष्ट रूप से किसी भी गैर 0 मान, कुछ गलत हो गया है. अब उपयोगकर्ता के लिए नहीं जा रहा है वास्तव में क्या हो रहा है नोटिस. दरअसल मैं इस निर्देशिका में जाओ, हम में ज़ूम और हैलो 4 बना कर मैं उम्मीद के रूप में ./hello-4 Zamyla व्यवहार करता है. लेकिन मैं बजाय टाइप नहीं है कुछ भी, कुछ भी नहीं होने लगता है, लेकिन यह दुर्घटना नहीं है. और मैं बजाय कुछ करते हैं रोब तरह एक प्रॉक्टर है Thayer-- बंटवारे में मनमाने ढंग से जानकारी. लेकिन नोटिस, argv 1, 2, 3, 4, और 5 अब स्मृति में मौजूद होना चाहिए. वह भी, नहीं क्या है मेरे कार्यक्रम की उम्मीद मैं चाहे जाँच की है क्योंकि argc बराबर 2 या नहीं के बराबर होती है. इसलिए मैं अब इस के खिलाफ की रक्षा कर रहा हूँ. 

अब, के रूप में एक अलग रूप में, हम programmer-- या बल्कि हम users-- 0 या 1 लेकिन एक का उपयोग कर देखते हैं कि कभी नहीं उपकरण, डिबगर, या अन्य उपकरण बुलाया हम पहले देखेंगे के रूप में लंबे समय, आप प्रोग्रामर वास्तव में क्या हो सकता है देख सकते हैं अपने कार्यक्रम के अंदर गलत हो रहा. 

तो, argc पर कोई सवाल? हाँ. 

दर्शक: मैंने देखा है जहां वे चरित्र नहीं था, [अश्राव्य] बस जैसे स्ट्रिंग सितारा डी ने कहा, चरित्र तारांकन अल्पविराम. वे यहाँ बराबर हैं? 

डेविड Malan: वे कर रहे हैं. सवाल है तो, आपके पास कभी कभी देखा कार्यक्रमों ऐसा नहीं है कि इस तरह स्ट्रिंग argv ब्रैकेट कहना लेकिन बदले में कुछ कहना चार सितारा argv ब्रैकेट की तरह. और भी अन्य वहाँ आप देख सकते हैं कि वेरिएंट. वे वास्तव में बराबर हैं. अभी के लिए, हम इन किया प्रशिक्षण के पहियों की तरह CS50 में स्ट्रिंग के रूप में पर पुस्तकालय, लेकिन सिर्फ एक सप्ताह से अधिक में या तो हम दूर करने के लिए जा रहे हैं पूरी तरह और वास्तव में रुकावट चार और सितारा है देखो कर रहे हैं, और उन स्मृति से संबंधित कैसे प्रतिनिधित्व अधिक आम तौर पर. इसलिए हम वापस कि करने के लिए आया हूँ. 

हमारे argv या argc पर अन्य प्रश्न? हाँ. दर्शक: क्यों इसे वापस किया एक त्रुटि [अश्राव्य]? डेविड Malan: यह किया क्यों ओह only-- त्रुटि वापस! पिछले मामले में, जब हम स्मृति के साथ आसपास futzing गया, क्यों यह केवल एक त्रुटि वापस किया मैं वास्तव में एक बड़ी संख्या टाइप किया है? संक्षिप्त जवाब है कि हम सिर्फ भाग्यशाली है, है. सामान्य शब्दों में, एक कंप्यूटर मात्रा में स्मृति का आवंटन, और यह मुझे एक बहुत बड़ा हिस्सा दे दिया है कि मैं, देखा जा रहा बिना, दूर मिला छू ब्रैकेट 2, वर्ग 3 की, ब्रैकेट 50, लेकिन जैसे ही मैं धक्का दिया मेरी किस्मत, मैं परे चला गया स्मृति का हिस्सा की सीमाओं ऑपरेटिंग सिस्टम मुझे दिया था. और कहा कि जब यह बात है नीचे clamped और नहीं, कहा. विभाजन त्रुटि. हाँ. 

दर्शक: कैसे करता है कंप्यूटर argc की कीमत पता है? 

डेविड Malan: कैसे करता है कंप्यूटर argc की कीमत पता है? आप एक प्रोग्राम चलाते हैं, उस कार्यक्रम, निमिष शीघ्र की प्रकृति से, की सरणी सौंप दिया है टाइप किया गया है कि शब्द प्रॉम्प्ट पर, कि था प्रांप्ट पर टाइप. और तो यह आपके काम कर रहा है सिस्टम अनिवार्य रूप से कि आप के लिए मुख्य तर्क भरता. तो यह है कि सेवाओं में से एक है आप मिलता है, की तरह चुपके से के हुड के नीचे एक ऑपरेटिंग सिस्टम. अन्य सवालों के जवाब? हाँ. 

दर्शक: कोर डंप क्या मतलब है? डेविड Malan: कोर डंप क्या मतलब है? तो यह एक अच्छा सवाल है. और मुझे में वापस जाओ यहाँ इस निर्देशिका. और तुम उस पर ध्यान देंगे मैं वहाँ एक नया फ़ाइल है. यह वास्तव में कोर कहा जाता है, और यह है वास्तव में आम तौर पर एक सभ्य आकार फ़ाइल. यह अनिवार्य रूप से एक स्नैपशॉट है मेरे कार्यक्रम की स्मृति की सामग्री यह दुर्घटनाग्रस्त हो गया जब या राम. और यह उपयोगी होगा संभवतः, diagnostically, हम एक भविष्य व्याख्यान में बात एक बार और डिबगिंग के बारे में खंड, आप वास्तव में क्या कर सकते हैं क्योंकि एक डिजिटल शव परीक्षा के समकक्ष उस फ़ाइल पर पता लगाने में मदद करने के लिए यदि आप अपने कार्यक्रम में क्या गलत किया. हाँ. 

दर्शक: एक आदेश में argc है ही है, या आप इसे कुछ भी नाम दे सकते हैं? 

डेविड Malan: अच्छा सवाल है. अपने आप में एक आदेश argc है या आप इसे कुछ भी नाम दे सकते हैं? यह निश्चित रूप से एक आदेश नहीं है. यह बस एक चर का है या एक तर्क के नाम का नाम, और तो बिल्कुल हम इस foo कह सकते हैं, हम जो करते हैं इस बार, कह सकते हैं जाने के लिए शब्द है कि एक कंप्यूटर होने के लिए वैज्ञानिक को जाता है. लेकिन सम्मेलन से, हम argc और argv का उपयोग करें. लेकिन वह सिर्फ एक मानव सम्मेलन, इससे अधिक कुछ नहीं. ठीक है. तो पता चला है, मैं कर रहा हूँ एक सफेद lie-- का एक सा कह रही और सच कहूँ तो, भविष्य में, आप देखेंगे हम अन्य सफेद झूठ बोल रहा है. लेकिन अब के लिए, हम जा रहे हैं इन में से एक वापस छील. जब पहले मैं यहाँ इस मामले में ./hello या ./hello -3 की तरह एक कार्यक्रम में भाग गया Zamyla, हम की सामग्री थी मेरे मोटे तौर पर की तरह लग रही कंप्यूटर की मेमोरी इस. लेकिन एक स्ट्रिंग है क्या याद आता है. हम क्या एक एक सप्ताह पहले कहा था क्या स्ट्रिंग वास्तव में हुड के नीचे है? दर्शक: घर का काम की सरणी. डेविड Malan: यह एक है घर का काम की सरणी, है ना? तो हम की एक सरणी हो सकता है तार, लेकिन बदले में, एक स्ट्रिंग वर्णों की एक सरणी है. मैं वास्तव में होना चाहते हैं तो मैं इस तस्वीर खींचना जब गुदा, मैं वास्तव में ड्राइंग किया जाना चाहिए यह एक छोटे से अधिक इस तरह, जिससे इनमें से प्रत्येक में मेरे argv सरणी के अनुक्रमित, एक पूरी स्ट्रिंग ही है खुद कि एक सरणी में है. और अब सफेद झूठ हम आज कह रहे हैं तस्वीर नहीं है काफी इस तरह दिखेगा. वास्तव में, थोड़ा चौकों हैं बड़ा आयतों की आम तौर पर बाहर क्या आप वहां मौजूद हैं. लेकिन हम लंबे समय से पहले वापस करने के लिए आया हूँ. लेकिन यह ./hello बैकस्लैश 0 उस विशेष चरित्र जा रहा है कि एक स्ट्रिंग के अंत सीमांकित, और हम एक दूसरे के बाद मिल गया है Zamyla का नाम. तो इसका मतलब क्या है? 

खैर, मुझे आगे चलते हैं और दो अन्य उदाहरण खोल ऑनलाइन उपलब्ध हैं. एक argv1.c कहा जाता है और अन्य argv2 है. यह एक सुपर सरल कार्यक्रम है कि पिछले कार्यक्रमों से अलग है कि अब मैं उपयोग कर रहा हूँ argc और यहाँ argv. और अब मैं पाश के लिए एक साथ एकीकृत कर रहा हूँ argc अप करने के लिए पर मैं से लाइन 18, = 0 में. और मैं क्या करने जा रहा हूँ यहाँ कोड की इस पंक्ति के साथ? अंग्रेजी में. यह स्पष्ट रूप से argc के उपयोग को दर्शाता है. लेकिन अंग्रेजी में, क्या करता है मैं इस कार्यक्रम को चलाने अगर यह क्या है? हाँ? 

दर्शक: यह मुद्रित करने के लिए जा रहा है आपके आप चाहते हैं के रूप में कई बार स्क्रीन. डेविड Malan: बिल्कुल. इसलिए जो भी शब्द मैं यह है, प्रांप्ट पर टाइप करें बहना के लिए जा रहा प्रति पंक्ति मुझ पर उन्हें एक. तो चलो आगे जाना है और यह करते हैं. मुझे मेरी निर्देशिका में चलते हैं और argv1 ./argv1 करते हैं. और अब, चलो इसे साधारण रखना. की पहली बार में कुछ नहीं करते हैं. यह एक बात प्रिंट आउट किया था, और कि वास्तव में इस कार्यक्रम का नाम है, उस कोष्ठक 0 में है. मैं अब foo कहना है, यह क्या हो रहा है उन दो, और मैं foo बार कहते हैं, यह उन तीन बातें कहने के लिए जा रहा है. अब हो सकता है कि कुछ हद तक दिलचस्प है. लेकिन उस argv याद तारों की एक सरणी है, लेकिन एक स्ट्रिंग वर्ण की एक सरणी है, इसलिए हम एक पायदान ऊपर बातें ले जा सकते हैं और कहा कि बुनियादी लागू तर्क और कोड बनाने कि वैसे, एक छोटे से अधिक गूढ़ लग रहा है. लेकिन द्वारा एक नेस्टेड होने पाश, जैसा कुछ आप मारियो से याद हो सकता है क्या, उदाहरण के लिए, यदि आप इसे इस तरह से किया था. 

तो अब मैं कर रहा हूँ, लाइन 19 पर नोटिस फिर मेरे तर्कों पर iterating, 0 से ऊपर पर argc लिए. और अब लाइन में मैं 21-- हूँ पिछले week-- से एक चाल उधार मैं क्या है जाँच कर रहा हूँ argv ब्रैकेट मैं की लंबाई. मैं एन में जवाब है कि भंडारण कर रहा हूँ. और फिर मैं जम्मू से पर एकीकृत कर रहा हूँ जम्मू 0 करने के लिए प्रारंभ की है, जहां एन, अप करने के लिए. तो, गिनती के लिए सम्मेलन. यदि आपके पास एक तुम, मैं उपयोग कर लेते हैं नेस्टेड लूप, तुम, फिर मैं उपयोग नहीं कर सकते अन्यथा आप संभावित, पीटना हूँ, भीतरी लूप के बाहर मूल्य. इसलिए मैं सम्मेलन से जम्मू का उपयोग कर रहा हूँ. हम कश्मीर उपयोग हो सकता है. आप कश्मीर की तुलना में अधिक है, तो आप शायद आम तौर पर बहुत ज्यादा घोंसले के शिकार है. लेकिन अब, मेरे printf नोटिस लाइन से थोड़ा अलग है. मैं% एस मुद्रण नहीं कर रहा हूँ, मैं हूँ ,% सी मुद्रण जो, ज़ाहिर है, एक चार के लिए एक प्लेसहोल्डर है. 

और अब इस वाक्य पर ध्यान दिया. नई. हम पहले नहीं देखा है. लेकिन तार्किक रूप से, यह सिर्फ मतलब argv में ith तार मिल और क्या JTH मिलता है? दर्शक: चरित्र. डेविड Malan: कि स्ट्रिंग में चरित्र. तो वर्ग कोष्ठक का उपयोग करके वर्ग कोष्ठक द्वारा पीछा किया, यह पहली डाइविंग है argv के तार में, और फिर दूसरा जम्मू के साथ वर्ग कोष्ठक के पात्रों में गोता है argv में उस विशेष स्ट्रिंग. और फिर, सिर्फ अच्छे उपाय के लिए, मैं यहाँ एक नई लाइन मुद्रण कर रहा हूँ. तो अब मुझे आगे जाना है और खुला एक थोड़ा बड़ा खिड़की तो हम कार्रवाई में यह देख सकते हैं. मुझे उस फ़ोल्डर में चलते हैं. और अब करते argv-2-- argv -2 बनाने whoops--, ./argv 2. लिखें. और यह थोड़ा मुश्किल है खड़ी पढ़ने के लिए, लेकिन यह है कि वास्तव में का नाम है एक खाली लाइन द्वारा पीछा कार्यक्रम,. अब मुझे आगे जाना है और फू करते हैं. इसी प्रकार कठिन पढ़ा है, लेकिन यह करने के लिए वास्तव में प्रति पंक्ति एक चरित्र मुद्रण. मैं बार करते हैं, यह अब है रेखा ने उन लाइन मुद्रण. तो यहाँ takeaway इतना नहीं है वाह, यह साफ नई चाल पर देखने के लिए, कि जहां आप सामग्री पर प्राप्त कर सकते हैं एक सरणी के विशिष्ट वर्ण की, बल्कि हम इन बुनियादी ले जा रहे हैं कैसे एक सरणी में अनुक्रमण की तरह विचारों, और फिर एक में अनुक्रमण कि सरणी में था कि सरणी, और अभी तक एक ही विचारों को लागू करने थोड़ा और अधिक परिष्कृत उदाहरण हैं. लेकिन मूल बातें सच नहीं है यहां तक ​​कि पिछले सप्ताह के बाद से बदल गया. 

अब यह, समय पर तरह है उस में, सप्ताह शून्य में, याद हम इस तरह से एक फोन की किताब के साथ खेला. और यह जाहिर है कि भले ही कागज के भौतिक टुकड़े, आप की तरह के बारे में सोच सकते हैं एक सरणी के रूप में एक फोन की किताब. अगर तुम थे निश्चित रूप से, reimplement करने के लिए इस टुकड़े कागज के इन टुकड़ों एक कंप्यूटर में, शायद आप कुछ प्रयोग करेंगे एक सरणी उन के सभी स्टोर करने के लिए की तरह एक सभी तरह से नाम और नंबर जेड के माध्यम से तो इस वजह से अच्छा है, यह हमें एक अवसर देता है, आप कैसे हो सकता है शायद, पर विचार करने के लिए वास्तव में ऐसा कुछ को लागू करने. यहां दरवाजे की एक श्रृंखला के साथ के रूप में. मैं could-- तो अगर हम एक की जरूरत है ऊपर की ओर आने के लिए स्वयंसेवक. चलो देखते हैं. एक अपरिचित चेहरा शायद, शायद अपरिचित चेहरा. कैसे नारंगी में के बारे में? यहां. ऑरेंज शर्ट, ऊपर की ओर आते हैं. 

चलो अब और कदम आगे चलते हैं किनारे पर इन दरवाजों, एक पल के लिए रास्ते से बाहर इन चाल है. आपका नाम क्या है? 

अजय: 

डेविड Malan: अजय. डेविड. आपसे मिलकर अच्छा लगा. ठीक है. इसलिए हम इन छह पीछे है screen-- पर डिजिटल दरवाजे पर या, बल्कि, सात दरवाजे संख्या की एक पूरी गुच्छा screen--. और मैं आपको कुछ नहीं बता दिया है में advance-- सहमत हो? अजय: अग्रिम में कुछ भी नहीं है. डेविड Malan: सब मैं आप करना चाहते हैं अब मेरे लिए मिल रहा है, और हमारे लिए, वास्तव में, संख्या 50, एक समय में एक कदम है. 

अजय: 50 नंबर? 

डेविड Malan: संख्या 50. और आप क्या कर सकते हैं प्रकट इन दरवाजों में से प्रत्येक के पीछे बस एक उंगली से छूकर. लानत है. [हंसी] 

[वाहवाही] 

बहुत अच्छी तरह से किया. ठीक. हम एक सुंदर उपहार है यहाँ आप के लिए पुरस्कार. सिनेमा की अपनी ले हम पिछले सप्ताह चर्चा की. 

अजय: ओह, आदमी. ओह, मैं Spaceballs कभी नहीं देखा. 

डेविड Malan: Spaceballs. ठीक है. तो बस एक पल रुको. चलो यह करते हैं How-- एक मेहनती moment-- आप के बारे में कैसे जाना था संख्या 50 ढूँढने? अजय: मैं बेतरतीब ढंग से चुना है. डेविड Malan: तो आप चुना बेतरतीब ढंग से और भाग्यशाली है. अजय: हाँ. डेविड Malan: ठीक है. बहुत बढ़िया. तो अब, आप नहीं था भाग्यशाली, क्या किसी और को मिल गया इन दरवाजों के पीछे हुआ होगा? मुझे आगे जाना है तो अगर और यहां इन नंबरों का पता चलता है, वे वास्तव में यादृच्छिक क्रम में हैं. और सबसे अच्छा तुम हो सकता किया, सच में,, अंततः, के द्वारा होता है सबसे खराब स्थिति में, उन सब की जाँच. तो तुम सुपर भाग्यशाली है जो हम एक एल्गोरिथ्म क्या कहते होता नहीं है. हाँ, बधाई हो. अगर तुम सकता है लेकिन अब, मुझे हास्य let's--. यहाँ इस टैब में चलते हैं. और यहाँ स्पष्ट रूप में नंबर हैं एक यादृच्छिक क्रम लगती है क्या, और वे थे. लेकिन अब मैं बजाय दावा अगर कि इन दरवाजों के पीछे क्रमबद्ध हैं कि संख्या हैं. लक्ष्य अब भी है हमें संख्या 50 हैं. लेकिन algorithmically करते हैं, और आप इसके बारे में जा रहे हैं हमें बताओ. आप यह पाते हैं, तो आप फिल्म रखना. आप यह है, आप इसे वापस दे नहीं पाते. अजय: तो मैं सिरों की जाँच करने के लिए जा रहा हूँ पहला, there's-- निर्धारित करने के लिए [हँसी और तालियां] डेविड Malan: यहाँ तुम जाओ. के एक पर एक नज़र रखना अजय के पूर्ववर्तियों की, काफी के रूप में भाग्यशाली नहीं था जो सीन,. ठीक है, यहाँ अपने काम के लिए तो, शॉन, पीछा कर रहा है. मैं इन के पीछे छिपा हुआ है दरवाजे संख्या सात, लेकिन इन दरवाजों में से कुछ में दूर tucked साथ ही अन्य गैर नकारात्मक संख्या रहे हैं. और अपने लक्ष्य को इस के बारे में सोच रहा है सिर्फ एक सरणी के रूप में संख्या की शीर्ष पंक्ति. हम टुकड़ों में से सिर्फ एक दृश्य हो उनके पीछे संख्या के साथ कागज की. और अपने लक्ष्य को केवल शीर्ष का उपयोग है, सरणी यहाँ, मुझे संख्या सात लगता है. और हम तो आलोचना करने के लिए जा रहे हैं आप इसे कर के बारे में जाने कैसे. , हमें नंबर सात कृपया लगाएं. सं 5, 19, 13. यह एक चाल सवाल नहीं है. 1. इस बिंदु पर अपने स्कोर बहुत नहीं है अच्छा, तो आप के रूप में अच्छी तरह से जा रहा रख सकता है. 3. पर जाएँ. सच कहूँ तो, मुझे लगता है, लेकिन मदद नहीं आश्चर्य कर सकते हैं क्या आप के बारे में भी सोच रहे हैं. 

शॉन: मैं केवल शीर्ष पंक्ति से ले जा सकते हैं. डेविड Malan: केवल शीर्ष पंक्ति. तो आप तीन छोड़ दिया गया. तो मुझे 7 लगता है. 

[दर्शकों सुझाव चीखती] तो उन दोनों के अद्भुत थे बहुत अलग कारणों के लिए. तो यह वह जगह है जहाँ हम एक पल पहले से दूर छोड़ दिया, और यहाँ कुंजी अंतर्दृष्टि इन दरवाजों संख्या थी उनके पीछे कि आदर्श, हल किया गया जिसके लिए takeaway आप कर सकता है में मौलिक बेहतर इस दूसरे example-- और, वास्तव में, कि शॉन था यादृच्छिक संख्या के साथ पहला प्रयास बस के रूप में before-- लेकिन जैसे ही इन नंबरों हल कर रहे हैं के रूप में, फोन की किताब बहुत पसंद है, आप स्पष्ट रूप से क्या कर सकता है? या आप कैसे है कि ज्ञान का लाभ उठाने कर सकते हैं? हाँ. 

दर्शक: आप [अश्राव्य] आधे रास्ते जाओ. डेविड Malan: हाँ. बिल्कुल सही. तो अजय के प्रारंभिक वृत्ति था मुझे याद है, सिरों की जांच करने के लिए, और फिर हम एक तरह से समाप्त जल्दी उदाहरण. हम शुरू कर दिया लेकिन अगर यह अधिक करने के लिए विधिपूर्वक उन पंक्तियों के साथ, लेकिन में शायद शुरू मध्य, वे हल कर रहे हैं क्योंकि, जैसे ही हमें पता चलता है के रूप में संख्या 16, इसलिए हम know-- और हम that-- बिल्कुल करते हैं इसलिए पता 50 कि, आज के मामले में, सही करने के लिए हो गया है. तो बस की तरह सप्ताह शून्य जब में हम छमाही में फोन पुस्तक फाड़े और के आधे से फेंक दिया दूर समस्या, यहाँ एक ही विचार है. हम इस आधे फेंक कर सकते हैं समस्या का दूर. और शायद तुम क्या algorithmically कर सकता है, आप 50 होना चाहिए पता है कि एक बार सही करने के लिए, यह कहीं भी है, बीच में, वहाँ की कोशिश है शेष दरवाजे की. बेशक, 50 अधिक है 42 से अधिक है, तो हम कर सकते हैं इस शेष फेंक दूर समस्या की तिमाही, और, अंत में, की पहचान 50 की तरह कुछ. लेकिन बस के रूप में साथ फोन की किताब, इन नंबरों में पहले से ही हमारे लिए दिया गया हल आदेश, हमें जो पत्ते सवाल के साथ, आप कैसे करते हैं क्रमबद्ध क्रम में बातें हो? और, सच में, किस कीमत पर? यह होना एक बात है फोन की किताब सौंप दिया और फिर खोजने के द्वारा अपने मित्रों को प्रभावित सही वास्तव में जल्दी से एक फोन नंबर,? एक खोजने के लिए 32 पन्नों को फाड़ 4 अरब पृष्ठों के बाहर व्यक्ति, हम एक चरम उदाहरण था. लेकिन कितना समय लगा था Verizon कि फोन की किताब सॉर्ट करने के लिए? यह हमें ले गए थे कितना समय इन सात संख्या सॉर्ट करने के लिए? यही कारण है कि हम है कि एक सवाल है इस प्रकार अब तक पूरी तरह से नजरअंदाज कर दिया. 

तो चलो अब इस सवाल का जवाब देना. और अब हम सभी फिल्मों से बाहर रहे हैं, लेकिन हम कुछ तनाव गेंदों है. आठ स्वयंसेवकों का कहना है, यदि यहाँ हमें शामिल होने के मन नहीं होता? कैसे के बारे में है, चलो आगे चलते हैं और करते हैं आप में से चार, यहाँ आप के तीन? कुछ नए चेहरे. और वहाँ तुम में से चार? और हम नहीं पूर्वाग्रह जाने now-- here-- और यहाँ अंत पर खत्म संख्या आठ. ऊपर आओ. ठीक है. इसलिए हम यहाँ के लिए क्या किया तुम में से हर एक संख्या है. आप जाना चाहते हैं आगे, इस नंबर ले. आपका नाम क्या है? 

आर्टी: आर्टी. 

डेविड Malan: आर्टी, ठीक है. आप नंबर 1 रहे हैं. 

अमीन: अमीन. डेविड Malan: अमीन. डेविड. आप संख्या 2 हो. मैं हाथ के रूप में और, आगे बढ़ो आप कागज की चादरें, संगीत के सामने अपने आप को अप लाइन वहाँ के रूप में एक ही क्रम में खड़ा है. 

एंडी: हाय, एंडी. 

डेविड Malan: एंडी, यह आप को देखने के लिए अच्छा है. नंबर 3. 

याकूब: याकूब. 

डेविड Malan: याकूब, नंबर 4. नाव पर स्वागत. अनुदान: अनुदान. डेविड Malan: अनुदान. संख्या 5. 

Alanna: Alanna. 

डेविड Malan: Alanna, संख्या 6. 

फ्रांसिस: फ्रांसिस. डेविड Malan: फ्रांसिस, संख्या 7. और? 

: राहेल राहेल. 

डेविड Malan: राहेल, संख्या 8. ठीक है. आगे बढ़ो और इस क्रम में अपने आप को मिलता है. मुझे शेष एक डाल दिया संगीत जगह में खड़े हो जाओ. कहां आप एक स्टैंड की जरूरत है? ठीक. आगे बढ़ो और सिर्फ अपनी संख्या डाला जहां दर्शकों को उन पर देख सकते हैं, संगीत जावक का सामना करना पड़ खड़े हो जाओ. और उम्मीद है, हमारी पहली मानसिक स्वास्थ्य की जांच here-- 4, 2, 6. ओह ओह. ज़रा ठहरिये. हम एक 8 नहीं है. मैं तुम से बेदखल करने की जरूरत है किसी भी तरह उदाहरण. सं नहीं, वह ठीक है. चलो देखते हैं. हम ऐसा कर सकते हैं. समर्थन करना. हम वहाँ जाना. सही. ठीक है. तो, अब हम 8, 1, 3 से 7, 5 है. ठीक. बहुत बढ़िया. 

तो हाथ पर सवाल है, क्या लागत, और क्या विधि के माध्यम से, हम वास्तव में यहाँ इन नंबरों तरह कर सकते हैं हम एक तरह से पीछे की ओर काम कर सकते हैं तो, अंत में, और decide-- यह सच है प्रभावशाली, यह वास्तव में कुशल है, मैं विभाजित कर सकते हैं कि और एक फोन की किताब को जीत? यह है कि वास्तव में कुशल मैं विभाजन और जीत सकते हैं उन डिजिटल टुकड़े बोर्ड पर कागज की, यह हमें एक लागत जा रहा है हो सकता है अगर समय या ऊर्जा या CPU चक्र में भाग्य वास्तव में हमारे डेटा प्राप्त करने के लिए कुछ हल क्रम में? तो चलो कि प्रश्न पूछते हैं. 

तो सबसे पहले, इन नंबरों हैं बहुत ज्यादा यादृच्छिक क्रम में, और मैं प्रस्ताव करने के लिए जा रहा हूँ एक एल्गोरिथ्म, या प्रक्रिया जिसके द्वारा हम इन लोगों को सॉर्ट कर सकते हैं. मैं दृष्टिकोण करने के लिए जा रहा हूँ इस सुंदर भोलेपन से. और मैं पहचान करने के लिए जा रहा हूँ यह मेरे लिए एक बहुत की तरह है कि आसपास मेरे मन लपेटो पूरे डेटा पर एक बार सेट. लेकिन क्या आप जानते हैं? मैं कुछ करने जा रहा हूँ बहुत सरल सीमांत हल करता है. 4 और 2 हैं, क्रम से बाहर हैं लक्ष्य 8 से ऊपर पर 1 से जाने के लिए है. तो क्या आप जानते हैं? मैं आपके पास करने के लिए जा रहा हूँ आप स्विच लोग, स्वैप शारीरिक रूप से स्थिति और कागज के अपने टुकड़े. अब 4 और 6, इन क्रम में हैं. मैं उन हो छोड़ने के लिए जा रहा हूँ. 6 और 8, उन क्रम में हैं. उन्हें छोड़ने के लिए जा रहे हैं. आदेश में से 8 AND1,. आप दो गमागमन बुरा नहीं होता. अब 8 और 3, तुम लोगों को स्वैप कर सकता है. 8 और 7, तुम लोगों को स्वैप कर सकता है. और 8 और 5, तुम लोगों को स्वैप कर सकता है. 

अब, मैं कर रहा हूँ? नहीं, कतई नहीं. लेकिन मैं बना दिया है बेहतर स्थिति, है ना? अपना नाम फिर क्या था, संख्या 8? 

: राहेल राहेल. डेविड Malan: तो राहेल है प्रभावी ढंग से बहुत दूर ऊपर bubbled, के अंत के लिए सभी तरह यहाँ संख्या के अपने सरणी. और ऐसा लगता है कि समस्या तरह का हल है. अब, स्पष्ट रूप से, 2 अभी भी करने की जरूरत है एक सा कदम है, और 4 और 6 और 1. लेकिन मैं एक मिल गया है लगता समाधान के करीब छोटी. तो चलो इस एक ही लागू होते हैं फिर अनुभवहीन अनुमानी. 2 और 4, ठीक है. 4 और 6, ठीक है. 6 और 1, मिमी मिमी. के स्वैप करते हैं. 6 और 3, मिमी मिमी. के स्वैप करते हैं. 6 और 7 ठीक है. 7 और 5, नहींं. के स्वैप करते हैं. और अब 7 और 8. और अपना नाम फिर क्या है? फ्रांसिस: फ्रांसिस. डेविड Malan: फ्रांसिस. तो अब फ्रांसिस भी एक बेहतर है स्थिति, अब 7 और 8 क्योंकि सही तरीके से ऊपर तक bubbled कर रहे हैं. तो 2 और 4, ठीक है. 4 और 1, चलो स्वैप. 4 और 3, चलो स्वैप. 4 और 6, आप ठीक कह रहे हैं. 6 और 5 है, चलो स्वैप. और अब उन लोगों को अच्छा कर रहे हैं. हम लगभग वहाँ रहे हैं. 2 और 1, क्रम से बाहर है, तो स्वैप. और अब मुझे एक मानसिक स्वास्थ्य की जांच करते हैं. 2 और 3, 3 और 4, 4 और 5, 5 और 6, 6 और 7, 8. ठीक है, तो हम कर रहे हैं. 

लेकिन क्या पर लागत मैंने किया यहां इन नंबरों तरह? खैर, कितने कदम संभावित मैंने किया इन लोगों छँटाई जब ले? खैर, हम वापस उस प्रश्न के लिए आया हूँ. लेकिन, सच में, तुम मिल गया एक छोटे से ऊब, कि एक तरह से यह नहीं था कि में खुलासा शायद सबसे कुशल एल्गोरिथ्म. और वास्तव में, स्पष्ट रूप से, मुझे पसीना आ रहा हूँ सभी को और अधिक आगे पीछे चल रहा है. यही कारण है कि विशेष रूप से कुशल महसूस नहीं किया था. तो चलो कुछ और कोशिश करते हैं. तुम लोगों को फिर से कायम कर सकता है इन आठ मूल्यों के लिए अपने आप को. बहुत बढ़िया. 

बस के लिए, डिजिटल एक नज़र रखना एक पल हम कुछ और प्रयास करने से पहले बस क्या हुआ. यहाँ तक, आप एक को देखने के लिए कर रहे हैं इन आठ मनुष्य के दृश्य जिससे नीले और लाल सलाखों संख्या का प्रतिनिधित्व करते हैं. लम्बे बार, बड़ी संख्या. छोटा बार, संख्या में छोटे. और क्या आप देखने जा रहे है उनमें से आठ से अधिक यादृच्छिक क्रम. आप इन सलाखों को देखने के लिए जा रहे हैं कि एक ही एल्गोरिथ्म के अनुसार क्रमबद्ध रही, या, निर्देश का सेट जो हम बुलबुला तरह आगे से फोन करता हूँ. तो, दूसरे या तो हर नोटिस दो बार, लाल रंग में प्रकाश व्यवस्था कर रहे हैं कंप्यूटर से तुलना की जा रही है. और फिर अगर बड़ा बार और छोटी सी पट्टी, क्रम से बाहर हैं वे मेरे लिए बदली जा रही हैं. 

अब यह अविश्वसनीय रूप से कठिन है निश्चित रूप से, यह देखने के लिए, बहुत लंबे समय के लिए, लेकिन नोटिस सही करने के लिए आगे बढ़ बड़ी सलाखों takeaway-- बाईं ओर आगे बढ़ थोड़ा सलाखों. इस प्रक्रिया को निरस्त करने दें और इस गति बहुत तेजी से हो, तो हम कर सकते हैं करने के लिए क्या का एक उच्च स्तरीय भावना हो, दरअसल, बुलबुला तरह से कर रही है. दरअसल, यह करने के लिए उत्साह से भरा हुआ है सूची के दाहिने हाथ की ओर, या सरणी, बड़ा सलाखों. और इसके विपरीत, छोटे सलाखों के हैं बाईं ओर नीचे उनके रास्ते बुदबुदाती, एक तेज गति से यद्यपि की तुलना में हम पहले किया था. तो, कठिन मनुष्यों के साथ देखने के लिए, लेकिन नेत्रहीन कि वास्तव में क्या हो रहा है हो रहा था. 

लेकिन मौलिक एक कोशिश करते हैं अब अलग दृष्टिकोण. की एक अलग से कोशिश करते हैं एल्गोरिथ्म हम तुम्हारे पास है जिससे लोग इन मूल में शुरू इस क्रम यहाँ था जो स्थिति है,. और चलो अब आगे चलते हैं. और मैं कुछ करने जा रहा हूँ भी सरल, सही? पीछे मुड़कर देखें, फिर से जोड़ो में गमागमन और फिर, लगभग एक छोटी चालाक. , चलो भी अधिक भोलेपन से बातें करते हैं जहां मैं इन लोगों को सॉर्ट करना चाहते हैं, मुझे बस देखते रहो जाने छोटी तत्व के लिए. इसलिए अभी, 4 मैंने देखा है सबसे छोटी संख्या. मुझे लगता है कि याद करने के लिए जा रहा हूँ. नहीं, 2 बेहतर है, और याद है कि. 1 भी छोटा होता है. 3, 7, 5. ठीक. One-- अपना नाम फिर क्या है? 

आर्टी: आर्टी. 

डेविड Malan: आर्टी. तो, आर्टी, आगे बढ़ो. मैं रेखा से बाहर खींचने के लिए जा रहा हूँ. आप यहाँ वापस आ सकता है. और मैं उसके लिए कमरा बनाने की जरूरत है. हम यहाँ एक निर्णय बिंदु है. हम यहाँ आर्टी के लिए जगह बनाने कैसे हो सकता है संख्या 1 के अंतर्गत आता है जहां शुरुआत में? 

दर्शक: पाली. 

डेविड Malan: ठीक है, हम हर कोई बदलाव कर सकता है. लेकिन एक अनुकूलन प्रस्ताव. यह एक छोटे से परेशान लगता है मुझे चार लोगों को पूछने के लिए सभी तरह से नीचे ले जाने के लिए. मैं और क्या कर सकता है? 

दर्शक: उन्हें स्विच. 

डेविड Malan: उन्हें स्विच. और अपना नाम फिर क्या है? 

याकूब: याकूब. डेविड Malan: याकूब, चाल है. बहुत अधिक कुशल बस को आर्टी साथ याकूब स्वैप स्थानों, मजबूर करने का विरोध किया इन लोगों के सभी चार, करने के लिए, आपको बहुत बहुत धन्यवाद उनकी सही स्थिति. क्या अब आर्टी के बारे में अच्छा है, वह अपनी सही स्थिति में है. चलो फिर से यह करते हैं. 2, कि मैंने देखा है सबसे छोटी संख्या है. 3, 7, 5. ठीक. 2 निश्चित रूप से सबसे छोटी है. कोई भी काम करने के लिए नहीं है. चलो फिर से ऐसा करते हैं. 6. सबसे छोटा? 8. नहींं. 4? ऊह. मुझे 4 याद करते हैं. 3. मुझे 3 याद करते हैं. 7, 5. मैं सबसे छोटी संख्या इस पास पर देखा 3 है. तुम बाहर पर आया था तो. हम कहाँ तुम डाल करने के लिए जा रहे हैं? और तुम्हारा नाम क्या है? 

Alanna: Alanna. 

डेविड Malan: Alanna, हम कर रहे हैं आप को बेदखल करने के लिए किया जा रहा है. लेकिन वह अधिक कुशल है सिर्फ दो लोगों को स्वैप करने के लिए, कई लोगों के लिए की तुलना वास्तव में अधिक टलना. अब फिर से यह करते हैं. मैं 4 का चयन करें, तो बाहर आने के लिए जा रहा हूँ. और जो स्थानांतरित करने के लिए जा रहा है? नंबर 8, बेशक. मैं अब नंबर 5 पाते हैं, पर बाहर आ गए. संख्या 8 फिर बेदखल हो रहा है. मैं अब जगह में नंबर 6 खोजने के लिए जा रहा हूँ. जगह में 7. जगह में 8. 

क्या हम अभी किया है चयन क्रमबद्ध कुछ कहा, हम यह कल्पना तो और, यह बात है एक छोटे से अलग महसूस करने के लिए जा रहा है. आगे और इस से चलते हैं मेनू यहाँ, इस visualization-- की, Firefox पर आ to-- इस बदलते हैं. का चयन क्रमबद्ध करने के लिए इसे बदल दें. और के रूप में पहले यह गति करते हैं, और अब दृश्य शुरू. और इस एल्गोरिथ्म है यह करने के लिए एक अलग लग रहा. प्रत्येक यात्रा पर, सच में, यह और भी अधिक स्पष्ट है. मैं सिर्फ छोटी तत्व चयन कर रहा हूँ. अब, सच कहूँ तो, मुझे लगता है कि एक छोटे से भाग्यशाली है समय, उस में यह सुपर फास्ट हल. तत्वों यादृच्छिक थे. यह रूप में हम अंत में हूँ, नहीं है मौलिक तेजी, देखें. लेकिन एक तीसरा और अंतिम देखते हैं क्या हो रहा है के रूप में यहाँ दृष्टिकोण. तो चलो आगे चलते हैं और तुम लोगों को रीसेट एक अंतिम समय यहाँ इस क्रम में किया जाना है. 

और अब, मैं जा रहा हूँ , एक छोटे से अधिक चतुर हो बस हमारे एल्गोरिदम बाहर दौर. मैं यह करने के लिए जा रहा हूँ. मैं नहीं जा रहा हूँ आगे पीछे इतना. सच कहूँ, मैं थक गया हूँ यह सब traversing. मैं सिर्फ मैं क्या कर रहा हूँ ले जा रहा हूँ सूची की शुरुआत में दिया, और मैं सॉर्ट करने के लिए जा रहा हूँ कि फिर वहाँ. तो यहाँ हम कर रहे हैं. नंबर 4. मैं नंबर डालने के लिए जा रहा हूँ एक क्रमबद्ध सूची में 4. डन. मैं अब दावा है, और अभी यह और अधिक बनाने के लिए स्पष्ट, मेरी सूची के इस भाग को हल है. यह एक बेवकूफ दावे की तरह है, लेकिन वास्तव में 4 आकार एक की एक सूची में सॉर्ट किया जाता है. अब, मैं नंबर 2 पर ले जा रहा हूँ. नंबर 2 अब मैं जा रहा हूँ सही जगह में डालें. इसलिए जहां 2 हैं करता है? जाहिर है, यहाँ पर. तो आगे चलते हैं और अगर तुम सकता है, वापस चलते हैं. और क्यों नहीं तुम लोग बस लेते हैं अपने संगीत आप के साथ इस समय खड़ा है. और जबरन चलो तुम डालें सूची की शुरुआत में. तो एक छोटे से अधिक काम करते हैं. मैं, चारों ओर याकूब कदम था और तुम्हारा नाम क्या है? 

अमीन: अमीन. 

डेविड Malan: अमीन. लेकिन कम से कम मैं आगे और पीछे जाने नहीं दिया. मैं जाने के रूप में मैं सिर्फ बातें ले जा रहा हूँ. मैं सिर्फ उन्हें डालने हूँ सही जगह में. 6, यह वास्तव में बहुत आसान है. आप अगर है, वहाँ पर आप सम्मिलित करते हैं बस थोड़ा स्थानांतरित करने के लिए चाहता था. नंबर 8, भी बहुत आसान. वहीं पर खत्म हो गया. लानत है. नंबर 1 हम नहीं कर सकते बस यहाँ अमीन के साथ स्वैप, कि क्योंकि जा रहा है गंदगी को आदेश करने के लिए. इसलिए हम एक छोटे से अधिक चालाक होना है. तो, आर्टी, अगर तुम सकता है एक पल के लिए वापस. , चलो आगे जाना है और अब बदलाव करते हैं हमारे पिछले एल्गोरिदम के विपरीत, आर्टी के लिए जगह बनाने के लिए यहीं शुरुआत में. दिन के अंत में तो, मैं एक तरह से कर रहा हूँ मैं पहले से बचना चाहता था क्या कर रही. और इसलिए मेरे एल्गोरिथ्म प्रकार है की, बौद्धिक, उलट यह मूल रूप से क्या था से. मैं सिर्फ स्थानांतरण कर रहा हूँ एक अलग बिंदु पर. अब मैं 3 में हूँ. अरे नहीं, ओह. हम फिर से अधिक काम करना है. तो चलो तुम बाहर धक्का. चलो 8, 6, 4-- oh-- ओह और 3 अभी भी वहीं जाना जा रहा है. इस समय कम से कम मामूली बचत पर तो. 7, नहीं भी बहुत काम किया जाना बाकी है. आप पॉप करना चाहते हैं तो पीठ, की आप सम्मिलित करते हैं. और अंत में, 5, तुम अगर वापस पॉप करना चाहते हैं, हम , आप शिफ्ट करने के लिए आप की जरूरत है, पांच, जब तक आप जगह में है. 

तो अब एक पर यह देखने के लिए रेखांकन उच्च स्तर, इस एल्गोरिथ्म करते हैं दृश्य एक अतिरिक्त समय. तो यह है कि हम प्रविष्टि क्रमबद्ध फोन करेगा. हम बस के रूप में यह चलने देंगे तेजी से, और इसे यहाँ शुरू. और यह भी एक अलग अनुभव होता है. यह एक तरह से बेहतर हो रही है और बेहतर है, लेकिन यह सही नहीं है मैं उन अंतराल में में और चिकनी जाने तक. क्योंकि, फिर से, मैं केवल ले जा रहा हूँ क्या मैं बाएं से दाएं को दिया जा रहा है. तो मैं इतना भाग्यशाली नहीं मिला कि सब कुछ सही था. हम इन छोटी थी यही कारण है कि हम समय के साथ तय हो गई है कि mispositions. 

तो इन एल्गोरिदम के सभी के लिए लग रहे थोड़ा अलग ज्ञान प्राप्त किया पर चलाते हैं. वास्तव में, जो आप कहेंगे सबसे अच्छा है या अब तक सबसे तेजी से? बुलबुला तरह, पहले? चुनाव में क्रमबद्ध, दूसरा? सम्मिलन सॉर्ट, तृतीय? मैं कुछ चयन प्रकार सुनते हैं. अन्य विचार? 

तो यह पता चला है कि इन एल्गोरिदम के सभी के रूप में मौलिक रूप से बस के रूप में कुशल हैं बस के रूप में, इसके विपरीत, प्रत्येक other-- या एक दूसरे के रूप में अकुशल, हम मौलिक कर सकते हैं क्योंकि सभी तीन से बेहतर इन एल्गोरिदम की. और कहा कि एक सफेद झूठ का एक सा है, भी है. मैं के रूप में कुशल का कहना है जब या अक्षम के रूप में, कि कम से कम के लिए है n के सुपर बड़े मूल्यों. हम यहां सिर्फ आठ लोगों को है, या शायद स्क्रीन पर 50 या तो सलाखों, आप बिल्कुल अंतर देखने को मिलेंगे इन तीन एल्गोरिदम के बीच. लेकिन एन के रूप में, लोगों की संख्या या संख्या की संख्या, या फोन में लोगों की संख्या पुस्तक, या वेब पृष्ठों की संख्या गूगल के डाटाबेस में बड़ा और बड़ा हो जाता है हम देखेंगे कि इन तीनों को एल्गोरिदम वास्तव में बहुत गरीब हैं. और हम मौलिक कर सकते हैं उस से भी बेहतर. 

, के अंत में, एक नज़र रखना क्या इन एल्गोरिदम हो सकता है पर में ध्वनि की तरह कुछ अन्य लोगों के संदर्भ के रूप में अच्छी तरह से इस के माध्यम से यहाँ दृश्य उस के लिए हमें शुरू होगा एल्गोरिदम के एक नंबर. आगे जाने के लिए और बधाई देता हूं जिनमें से सभी यहाँ हमारे प्रतिभागियों, बहुत अच्छी तरह से खुद को हल. आप एक बिदाई उपहार लेने के लिए करना चाहते हैं. आप के रूप में अच्छी तरह से अपनी संख्या में रख सकते हैं. और आप देखेंगे क्या, या यों कहें, अब सुना है, है कि हम आवाज़ डाल के रूप में इन सलाखों से प्रत्येक के लिए और, सॉफ्टवेयर के साथ सहयोगी ध्वनि की अलग आवृत्ति, आप अपने मन अधिक audioly लपेट कर सकते हैं इन बातों का क्या प्रत्येक के आसपास हमशक्ल. जिनमें से प्रथम सम्मिलन तरह है 

[टन] 

यह बुलबुला तरह है. 

[टन] 

चुनाव तरह. 

[टन] 

मर्ज क्रमबद्ध कुछ कहा. 

[टन] 

सूक्ति तरह. 

[टन] 

यही CS50 के लिए है. हम बुधवार को देखेंगे. 

अनाउन्सार: और अब, "दीप Daven Farnham द्वारा विचार, ". क्यों यह एक पाश के लिए है? क्यों नहीं इसे बेहतर बनाने? मैं एक पांच पाश बनाना चाहते हैं. 

[हंसी]