[Powered by Google Translate] धारा समस्या 2 सेट: हैकर संस्करण रोब Bowden, हार्वर्ड विश्वविद्यालय यह CS50 है. CS50.TV तो, मैं रोब हूँ. मैं एक वरिष्ठ Kirkland में हूँ. यह मेरी 3 CS50 TFing वर्ष है. यह पहली बार है कि हम परंपरागत व्याख्यान शैली अनुभाग से बदल रहे हैं, जहां हम समीक्षा के बस की तरह व्याख्यान में क्या हुआ और फिर तुम लोगों को सवालों के पूछने, अब एक बहुत अधिक समस्या आधारित किया जा रहा है, जहां हम रिक्त स्थान का उपयोग करने के लिए, और ओह, तो विचार है कि लिंक मैं तुम्हें भेजा जाना है और फिर आप अपने अंतरिक्ष में हो जाएगा. क्या किसी एक लैपटॉप भी नहीं है? ठीक है. तो हम इस का उपयोग किया जा रहे हैं, और हम समस्याओं कर रही हो जा रहे हैं अनुभाग में रहते हैं और उन पर चर्चा और पता लगाना है कि क्या गलत है और मैं अपने कोड के कुछ खींचने के लिए, हो सकता है और मैं अपने विचारों पर चर्चा हो सकती है. इसलिए किसी को भी कठिनाई पड़ा है? आप पक्ष पर चैट कर सकते हैं, मैं अगर हम उस के लिए कारण हो जाएगा पता नहीं है. अब, पिछले supersection की तरह, अगर आपको लगता है कि वर्ग में थे, तो आप जानते हैं कि किस बारे में है. पी सेट के सभी पर इन वर्गों को होने जा रहा है. तो पी 2 सेट, विनिर्देशों, मुझे लगता है कि आप 1 पी सेट पर यह पहले से ही देखा है. लेकिन हम पी 2 सेट पर क्या हम आज पर जा रहा जा रहे हैं के लिए देख सकते हैं. और तुम सवालों का एक अनुभाग देखेंगे. तो यह सब पी सेट में होगा, वहाँ सवालों की एक खंड हो जाएगा. अब तक हम कहा है, "एक अभ्यास का मौका इस पर विचार करें." आप इस कार्यक्रम प्रस्तुत करने के लिए नहीं कहा जाएगा. विचार यह है कि इन की मदद से आप समस्या सेट के साथ शुरू करने के लिए की तरह करने के लिए चाहिए रहे हैं. मैं हैकर संस्करण पर लगता है, उनमें से एक बहुत कुछ करने के लिए सिर्फ नए, दिलचस्प बातें सीखने को होना चाहिए रहे हैं. वे सीधे समस्या सेट करने के लिए लागू नहीं हो सकता. और अब हम कर आप उन्हें प्रस्तुत नहीं कर रहे हैं, लेकिन सिद्धांत रूप में, बाद में समस्या के सेट के लिए, आप उन्हें प्रस्तुत करने के लिए, और हो सकता है इस प्रकार आप या तो अनुभाग के लिए आ सकते हैं या अनुभाग देखने के लिए जवाब मिलता है, या आप बस उन्हें अपने दम पर प्राप्त कर सकते हैं अगर आप मेरी उपस्थिति का आनंद ले की तरह महसूस नहीं करते. तो मुझे लगता है कि यह पहली एक है. ओह. इसके अलावा, सवालों के इन वर्गों के तहत हम भी आप शॉर्ट्स के बारे में सवाल पूछना है. तो मुझे लगता है, सिद्धांत रूप में, आप अनुभाग के लिए आने से पहले इन देखने के लिए चाहिए रहे हैं, लेकिन यह ठीक है अगर आप नहीं करते हैं, हम उन पर वैसे भी जाना होगा. इसलिए हम इन के साथ शुरू कर सकते हैं: "एक समय पाश है, जबकि एक पाश से कैसे भिन्न होता है? बाद जब विशेष रूप से उपयोगी है? " तो किसी को भी किसी भी है? [छात्र] है, जबकि पाश हमेशा कम से कम एक बार अमल करेंगे. हां. तो यह है कि अंतर है. जबकि पाश - I'll सिर्फ इसे यहाँ पर करते हैं जबकि पाश, हम शर्त है यहीं, जबकि करते, जबकि आप एक शर्त नहीं है जब तक हम यहाँ नीचे जाओ. और हां, जब अपने कार्यक्रम को क्रियान्वित करने, और यह जबकि पाश के लिए हो जाता है, इसे तुरंत जाँच करता है अगर यह शर्त सही है. यदि उस हालत सही नहीं है, यह बस पर पाश पूरी तरह से छोड़ जाएगा. मत जबकि पाश, के रूप में कार्यक्रम को क्रियान्वित कर रहा है, यह करने के लिए "क्या." हो जाता है इस बिंदु पर कुछ भी नहीं होता है, बस निष्पादित कर जारी है. फिर जब यह "जबकि," हिट अगर हालत सच है, यह पाश वापस करने के लिए और इसे फिर से करना होगा और फिर जब तक शर्त सही और फिर बस के माध्यम से गिर जाता है नहीं है. तो, अंतर किया जा रहा है, कि यह सही बहुत प्रारंभ से ही छोड़ सकते हैं. यह जरूरी एक बार निष्पादित करता है और फिर से अधिक बार निष्पादित अगर हालत अभी भी सच हो सकता है. तो, जबकि पाश केवल इसे एक बार करना होगा, या जबकि पाश - हम यह सब करने की जरूरत नहीं हो सकती है, जैसे ही हम इसे पाने के लिए के बाद से, अगर हालत झूठी है, हम सिर्फ यह खत्म सही छोड़ देंगे. जबकि जबकि पाश, हम इसे एक बार निष्पादित, अनिवार्य. तब, जब हम शर्त करने के लिए मिलता है, हम जांच अगर यह सही है या गलत है. अगर यह सच है, तो हम इसे फिर से करूँगा, अगर यह गलत है, हम बस जा रही जारी रखेंगे. तो जब बाद विशेष रूप से उपयोगी है? तो मैं 4 साल की संपूर्णता, 3 साल, जो कुछ भी कह सकते हैं कि, कि मैं प्रोग्रामिंग किया गया है, मैं इस का इस्तेमाल किया है, जैसे 10 गुना के तहत. और शायद उनमें से 5 CS50 में कर रहे हैं जब हम करते हैं, जबकि loops शुरू कर रहे हैं. तो जब आप करते हैं, जबकि loops इस्तेमाल करते हैं? हाँ -? [छात्र] जब आप उपयोगकर्ता इनपुट, या कुछ और आप की जाँच करना चाहते हैं पाने के लिए कोशिश कर रहे हैं - हाँ. तो क्या, जबकि loops, उपयोगकर्ता इनपुट एक बड़ा है. कि पहली जोड़ी समस्या सेट पर क्यों है, जब आप उपयोगकर्ता पूछने की तरह करना चाहते हैं, उन्होंने कहा, "मुझे एक स्ट्रिंग दे" आप जब तक आप उस स्ट्रिंग प्राप्त नहीं जारी रख सकते हैं. और इसलिए तुम जरूरी स्ट्रिंग के लिए कम से कम एक बार पूछने की जरूरत है. लेकिन फिर अगर वे कुछ बुरा का जवाब है, तो आप वापस पाश के लिए की जरूरत है और फिर से पूछो. लेकिन उपयोगकर्ता इनपुट के अलावा, यह बहुत दुर्लभ है कि मैं एक मामले में मुठभेड़ जहाँ मैं पाश के लिए "कम से कम एक बार" करना चाहते हैं, लेकिन संभवतः अधिक. प्रश्न या? किसी को भी एक है, जबकि पाश कहीं और इस्तेमाल किया? ठीक है. तो अगले एक है, "क्या पहचानकर्ता अघोषित करता है आम तौर पर अगर बजना द्वारा outputted संकेत मिलता है? " तो किस तरह के कोड का मैं लिख सकता है 'अघोषित पहचानकर्ता?' [छात्र] कि x = 2? तो हम बस इसे यहाँ की कोशिश कर सकते हैं, x = 2. हम इस चला हूँ - ओह, मैं इसे क्लिक नहीं किया. सब ठीक तो यहाँ हम मिलता है. "अघोषित पहचानकर्ता एक्स का प्रयोग करें." तो यह है कि अघोषित पहचानकर्ता, एक चर है. यह अक्सर एक चर एक पहचानकर्ता कॉल जाएगा. तो यह पता है कि यह वास्तव में एक चर नहीं हो सकता है, यह पता नहीं है कि यह क्या है. तो यह एक पहचानकर्ता है. क्यों तो यह अघोषित है? हाँ. तो शब्दावली, एक चर की घोषणा पर स्पष्ट होने के लिए जब आप "int x," या "स्ट्रिंग y," जो कुछ भी कहते हैं. चर चर के या असाइनमेंट के initialization, जब भी आप कहते हैं कि "x = 2 है." तो हम अलग - अलग चरणों में इन कर सकते हैं, int x, x = 2, और जब तक हम यहाँ में सामान की एक गुच्छा हो सकता है - लेकिन जब तक इस लाइन होता है, एक्स अभी भी, uninitialized है लेकिन यह घोषित किया गया है. और इसलिए हम स्पष्ट रूप से यह एक लाइन में कर सकते हैं, और अब हम की घोषणा कर रहे हैं और आरंभ करने के दौरान. प्रश्न? और अंत में, "सीज़र छद्मकरण क्यों बहुत सुरक्षित नहीं है?" तो पहले किसी को कहना सीज़र छद्मकरण क्या है चाहता है? [छात्र] सीज़र छद्मकरण सिर्फ यह है कि आप नक्शे, आप हर पत्र पाली, पत्र की एक निश्चित संख्या से अधिक जाओ, और अधिक वापस ले जाने, और यह बहुत ही सुरक्षित नहीं है, क्योंकि वहाँ केवल 26 संभव विकल्प है और तुम सिर्फ उन में से 1 हर कोशिश है जब तक आप इसे पाने के लिए है. ओह. तो, मैं दोहराना चाहिए? सीज़र छद्मकरण, it's - मेरा मतलब है, आप इसके साथ आपको लगता है कि समस्याओं पर काम कर सकता हूँ - या मैं समस्या सेट है कि हैकर संस्करण पर नहीं है के मानक संस्करण लगता है. तो समस्या सेट करने के लिए मानक संस्करण पर, आप की तरह, एक संदेश मिलता है "विश्व नमस्कार,," और आप भी 6 की तरह एक नंबर है, और आपको लगता है कि संदेश ले, और प्रत्येक व्यक्ति के चरित्र, आप यह वर्णमाला में 6 पदों से बारी बारी. तो 'ज' हैलो में घंटे - मैं जम्मू - कश्मीर - एल मीटर n बन जाएगा. तो पहले अक्षर होगा. हम ई के साथ एक ही बात करते हैं. यदि हम एक है, की तरह, z या कुछ और, तो हम वापस आसपास लपेट के लिए 'एक.' लेकिन प्रत्येक वर्ण साइकिल 6 अक्षर बाद वर्णमाला में हो जाता है, और यह बहुत ही सुरक्षित नहीं है के बाद से वहाँ कैसे कई मायनों आप एक पत्र लपेट सकता है के लिए केवल 26 संभावनाएं हैं. तो तुम सिर्फ उनमें से 26 सब करने की कोशिश कर सकते हैं और, संभवतः एक लंबे समय पर्याप्त संदेश के लिए, केवल उन संभव 26 बातें की 1 सुपाठ्य होना जा रहा है, और सुपाठ्य एक मूल संदेश को होने जा रहा है. तो यह सब कुछ encrypting की एक बहुत अच्छा तरीका नहीं है. उन शॉर्ट्स से संबंधित "क्या एक समारोह है?" तो एक समारोह में क्या है? हां. [छात्र] यह कोड का एक टुकड़ा अलग है कि आप के माध्यम से जाना और फिर कॉल कर सकते हैं जो कुछ भी मान प्राप्त की तरह है. हाँ. भी सिर्फ अगले एक जवाब देने के द्वारा या दोहराने - तो मैं यह भी अगले जवाब देने के द्वारा जवाब देंगे. आप कार्य के बजाय सिर्फ नकल और चिपकाने के कोड का उपयोग कर सकते हैं और फिर से. बस ले कि कोड, यह एक fuction में डाल दिया, और फिर तुम सिर्फ समारोह में कह सकते हैं आप जहाँ भी नकल किया गया है और चिपकाने. तो कार्य उपयोगी होते हैं. तो अब हम वास्तविक समस्याओं करूँगा. पहले एक. तो पहले एक विचार है, तो आप इसे एक स्ट्रिंग के पास है, और की परवाह किए बिना - या यह सभी लोअरकेस कहना है? यह सभी लोअरकेस नहीं कहना है. संदेश तो कुछ भी हो सकता है, और कर सकते हैं - अरे नहीं. यह करता है. सादगी के लिए, आप कि उपयोगकर्ता केवल लोअरकेस अक्षरों और स्थान के इनपुट. मान सकते हैं. " तो हम इसे केवल लोअरकेस अक्षरों के साथ एक संदेश देना और फिर हम वैकल्पिक कैपिटल और लोअरकेस के बीच - हम पूंजी और लोअरकेस स्ट्रिंग होने के लिए, बारी बदल जाते हैं. तो इससे पहले कि हम आपको एक भी समस्या में गोता लगाने के लिए 2 दे, पहली बात यह है कि हम क्या करने की जरूरत क्या है? ओह, मैं क्या बस पर क्लिक करें? ओह, मैं बस यहाँ एक ईमेल पर क्लिक किया. पहली बात तो हम क्या करने की जरूरत है - मैं एक गलत देख रहा हूँ? यह इस एक का हिस्सा है? नहीं, वे वहाँ में हालांकि अभी भी कर रहे हैं. ठीक है, अभी भी यहाँ. - अब हम कल्पना नहीं कर सकते? हां. यहाँ हम कल्पना नहीं कर सकते कि यह केवल लोअरकेस और रिक्त स्थान है. तो अब हम तथ्य यह है कि पत्र हो सकता है जो कुछ भी हम उन्हें होना चाहते हैं के साथ सौदा किया है. और तो पहली बात हम करना चाहते हैं बस संदेश मिलता है. हम सिर्फ एक स्ट्रिंग प्राप्त करने की जरूरत है, स्ट्रिंग एस = GetString, ठीक है. अब यह समस्या है, वहाँ इसे कर के तरीके के एक जोड़े हैं. लेकिन हम बिटवाइस ऑपरेटरों यहाँ का उपयोग करना चाहते करने के लिए जा रहे हैं. वहाँ जो लोग या तो supersection में नहीं थे, या कुछ पता है, और नहीं है बिटवाइस ऑपरेटरों क्या कर रहे हैं? या कि वे किसी भी तरह से संबंधित ASCII? [छात्र] मैं supersection में नहीं था, लेकिन मैं जानता हूँ कि बिटवाइस ऑपरेटरों क्या कर रहे हैं. ठीक है. तो फिर मैं उनमें से मूल पर जाना नहीं है, लेकिन मैं समझाता हूँ हम क्या करने के लिए यहाँ का उपयोग करना चाहते हैं के लिए जा रहे हैं. तो 'ए': राजधानी के एक द्विआधारी प्रतिनिधित्व, संख्या 65 है. मैं तो बस को देखने के लिए जा रहा हूँ - 41 01000001 होने जा रहा है. तो यह है कि 65 दशमलव में होना चाहिए, तो यह चरित्र राजधानी ए के द्विआधारी प्रतिनिधित्व है अब, चरित्र की द्विआधारी प्रतिनिधित्व 'एक' लोअरकेस एक ही बात हो, लगभग जा रहा है. - 6, हाँ. यह सही है. तो बाइनरी राजधानी एक द्विआधारी लोअरकेस 'एक.' तो सूचना है कि एक और 'एक' यह एक सा है. के बीच अंतर और यह 32 बिट, 32 बिट संख्या का प्रतिनिधित्व होता है. और कहा कि समझ में आता है, के बाद से एक 65 है, 'एक' 97 है. उन दोनों के बीच का अंतर 32 है. तो अब हम जानते हैं कि हम एक 'एक' से एक लेने के द्वारा परिवर्तित कर सकते हैं और यह बिटवाइस oring, के साथ है कि 1 एक की तरह लग रहा है. यह एक बिटवाइस या 00100000 के साथ है, और कहा कि हमें दे दूँगा 'एक.' और हम 'एक' से बिटवाइस anding द्वारा प्राप्त कर सकते हैं के साथ 11, कि जगह, 11111 में 0. तो यह तो हमें दे वास्तव में क्या 'एक' था, लेकिन बाहर इस व्यक्ति सा रद्द, इसलिए हम 01000001 होगा, मैं नहीं पता है कि अगर मैं सही गिना. लेकिन बिटवाइस oring के इस तकनीक राजधानी से प्राप्त करने के लिए लोअरकेस, और बिटवाइस लोअरकेस से राजधानी के लिए anding ए के लिए विशेष नहीं है पत्र के सभी, कश्मीर बनाम कश्मीर, Z बनाम z, उन सभी को सिर्फ इस एकल बिट से अलग करने के लिए जा रहे हैं. और इसलिए आप इस प्रयोग को किसी भी पूंजी पत्र और ठीक इसके विपरीत किसी भी लोअरकेस अक्षर से बदल सकते हैं. ठीक है. तो इस से होने का एक आसान तरीका है - तो बदले में होने बाहर लिखने 1011111 जो भी है इस संख्या का प्रतिनिधित्व करने का एक आसान तरीका है, और यह एक नहीं है कि मैं supersection में खत्म हो गया था, लेकिन टिल्ड (~) एक और बिटवाइस ऑपरेटर है. क्या करता है ~ बिट प्रतिनिधित्व में लग रहा है. चलो किसी भी संख्या ले. यह सिर्फ कुछ बाइनरी संख्या है, और क्या है ~ यह सिर्फ बिट्स के सभी flips. तो यह एक 1 था, अब एक 0, यह एक 0 है, अब एक 1, 010100. तो यह है कि सब ~ करता है. उससे छुटकारा पाना तो संख्या 32 करने के लिए होने जा रहा है - इसलिए 32 00100000 संख्या होने जा रहा है, और इसलिए इस के ~ होने जा रहा है इस यहाँ संख्या है कि मैं के साथ 'एक' anded. क्या हर कोई देख रहे है? यह बहुत आम है, जब आप यह पता लगाने के लिए चाहता हूँ की तरह, बाद में चीजें हैं जो हम को देखकर किया जा सकता है, जब हम देखने के लिए अगर चाहते हैं के लिए - या हम 1 के अलावा सब कुछ चाहते हैं, हर एक बिट सेट आप बिट है कि हम तय नहीं चाहते ~ करते हैं. तो हम 32 बिट सेट नहीं करना चाहती इसलिए, हम 32 के ~ करते हैं. ठीक है. तो हम उन सभी का उपयोग कर सकते हैं. सब ठीक है, तो यह ठीक है अगर आप नहीं कर रहे हैं, हम धीरे धीरे पर एक साथ चलना होगा, या इस पर चलना है, तो इस के माध्यम से. इस के माध्यम से चलो. इसलिए हम अपने स्ट्रिंग है, और हम कि स्ट्रिंग में प्रत्येक चरित्र पर पाश के लिए करना चाहते हैं और यह करने के लिए कुछ है. तो कैसे हम एक स्ट्रिंग पर पाश करते हैं? हम क्या इस्तेमाल करना चाहिए? मैं इसे यहाँ पर नहीं जा रहा हूँ. हाँ. इसलिए मैं अपने iterator है, और वह यह कहा है, लेकिन मैं कैसे पता है कि कितने अक्षर स्ट्रिंग में कर रहे हैं? Strlen (), तो मैं + +. तो क्या मैं यहाँ किया है बातें करने का सबसे अच्छा तरीका नहीं है. क्या किसी को पता है क्यों? क्योंकि आप हर बार स्ट्रिंग की भाषा की जाँच कर रहे हैं. तो हम करने के लिए strlen स्थानांतरित करना चाहते करने के लिए जा रहे हैं, मैं यहाँ कह सकता है, int लंबाई strlen = (ओं), और फिर मैं लंबाई <करते हैं, और इस मामले में आप पहले कभी नहीं देखा यह नहीं है, मैं भी कर सकता है int i = 0 लंबाई, strlen = (ओं). और इसलिए यह कुछ हद तक बेहतर है, अब के बाद से मैं गुंजाइश प्रतिबंधित है चर लंबाई के बस पाश 'के लिए' इस के बजाय, पहले यह की घोषणा और कहा कि यह हमेशा से मौजूद है, और इस मामले में तुम क्यों है कि बुरा है पकड़ नहीं किया था, मूल या बुरा, क्यों it's था - पाश के लिए शुरू. मैं इस हालत की जाँच की. मैं एस की लंबाई > 1 बिट. यह 1 से अधिक सा हो सकता है, के रूप में लंबे समय के रूप में इस स्थिति से नीचे बिट्स के सब एक ही हैं. तो हम कम से कम 26 अक्षरों की जरूरत है - या, वहाँ 26 अक्षर हैं. तो हम कम से कम 26 नंबर की जरूरत के लिए अंतर का प्रतिनिधित्व एक और 'एक' के लिए कम से कम 26 हो गया है, के बीच का अंतर वरना हम सभी राजधानी संख्या नहीं प्रतिनिधित्व होगा. इसका मतलब है कि एक, अगर हम 1 पर शुरू, यह इन बिट्स के सभी का उपयोग करने जा रहा है, इन 1 5 बिट्स, जेड के माध्यम से सब कुछ का प्रतिनिधित्व करने के सभी यह अगले क्यों बिट, या इस बिट है, अगले कुछ एक है कि करने के लिए एक और के बीच अंतर करने के लिए चुना है 'एक.' यही कारण है कि भी है, ASCII तालिका में, वहाँ 5 लोअरकेस अक्षरों से पूंजी पत्रों को अलग प्रतीक हैं. चूंकि उन प्रतीकों, अतिरिक्त 5 कि लाता है 32 उन दोनों के बीच अंतर किया जा रहा हैं. [छात्र] तो हम इसे करते हैं, क्योंकि ASCII के लिए डिज़ाइन किया गया है कि जिस तरह से हो सकता है. हां. लेकिन अंतर ASCII - भी इन बिट्स के दोनों हो सकता है. की तरह, अगर एक 10000001 थे, और 'एक' 11100001 था - मैं भूल जाते हैं, जो भी हो. ए - लेकिन अगर यह इस थे, तो हम 'एक' अभी भी इस्तेमाल कर सकते हैं अब यह सिर्फ एक और 'एक' अभी भी इन 2 बिट्स के बीच अंतर है. मुझे लगता है कि यह 48 लिखा है. यह है 32 + 64? मुझे लगता है कि यह क्या है? हर एक चरित्र की तरह, जेड और z कश्मीर और कश्मीर, यह अभी भी 2 बिट्स होगा वे अभी भी एक ही सटीक उन 2 बिट्स के लिए छोड़कर बिट सेट करना होगा. इतने लंबे समय के रूप में के रूप में है कि हमेशा सच है, की परवाह किए बिना अगर हम ASCII या कुछ अन्य प्रणाली का उपयोग कर रहे हैं, के रूप में लंबे समय के रूप में वहाँ केवल बिट्स कि प्रत्येक वर्ण के लिए अलग अलग हैं की एक निर्धारित संख्या है, तो यह है कि ठीक काम करता है. यह सिर्फ है कि 32 के लिए स्थापित किया गया था क्योंकि यह हम संभवतः इस्तेमाल कर सकते हैं 1 एक है. कूल. >> मैं पसंद करते हैं, के मामले में तुम्हें देखा है, नहीं तो ब्लॉक केवल एक ही लाइन है करते हैं, आप घुंघराले ब्रेसिज़ से छुटकारा मिल सकता है, तो मैं यह कर पसंद करते हैं. इसके अलावा, आप जानते हैं कि कैसे हम [i] + = 1 की तरह बातें कर सकते हैं? तुम भी कर सकते हैं [i] बिटवाइस और = 32. और बिटवाइस = 32. इसके अलावा, 2 आधुनिक == 0 गिनती. तो याद है कि मैं यह लिख नहीं होगा - किसी भी गैर शून्य मान सच है, और 0 झूठी है. तो "अगर गिनती 2 आधुनिक == 0" कह के रूप में एक ही है, "अगर आधुनिक 2 गिनती नहीं है." शायद मैं लाइनें है उलट होता है और कहा, "अगर गिनती आधुनिक 2, करते हैं या 1, और 1 है, "इतना है कि मैं की जरूरत है नहीं किया था." नहीं " लेकिन यह बस के रूप में अच्छी तरह से काम करता है. और क्या मैं यहाँ क्या कर सकते हैं? आप उन्हें त्रिगुट के साथ गठबंधन अगर तुम चाहते थे, सकता है, लेकिन तब है कि सिर्फ बातें messier बनाना चाहते हैं और शायद अधिक पढ़ने के लिए मुश्किल है, इसलिए हम नहीं है कि क्या करेंगे. किसी को भी किसी भी अन्य सुझाव है? कि सभी समस्या के लिए कहा है? ओह, हाँ. तो इन खाली लाइनों से छुटकारा पाने के लिए, अब हम च% मुद्रित करेंगे तार के लिए एक किया जा रहा है, हम च प्रिंट, एस. अब चलो इसे चलाने के लिए. क्या मैंने कुछ गलत किया? यह एक \ "; मैं एक n चाहते. ठीक है. अब हम यह भाग लेंगे. यह शायद मुझ पर चिल्लाना होगा. Strlen string.h में है. तो इस है बजना के बारे में अच्छी बात यह है यह आपको बताता है कि यह क्या है, बजाय जीसीसी जो सिर्फ कहते हैं, "अरे, तुम कुछ भूल गया, मैं नहीं जानता कि यह क्या था नहीं है." , लेकिन यह मुझे बताओ, "तुम string.h शामिल करने का मतलब है." तो मैं कुछ भी करने के लिए प्रांप्ट नहीं था, तो यह कुछ भी नहीं कह रहा है. लेकिन, "4 जोड़ धन्यवाद" हम उनके उदाहरण करूँगा. यह सही लग रहा है. हुर्रे. तो अपने मुख्य लौटने, मैं लगभग यह कभी नहीं. यह वैकल्पिक है. और मुख्य केवल समारोह जिसके लिए यह वैकल्पिक है. यदि आप कुछ मुख्य से वापस नहीं करते हैं, तो यह मान लिया है कि आप 0 वापसी का मतलब है. प्रश्न? ठीक है. तो अब दूसरी समस्या. "पासिंग द्वारा सप्ताह 2 2 व्याख्यान कि 2 चर मूल्यों गमागमन से याद एक समारोह के लिए (भी अगर स्वैप बुलाया) उन 2 चर बिल्कुल बिना कम से कम नहीं, काम नहीं 'संकेत' करता है " और संकेत की अनदेखी जब तक हम उन्हें पाने के लिए. हम 2 चर स्वैप करना चाहते हैं, हम एक समारोह का उपयोग करने के लिए यह कर रहे हैं. हम अभी भी यह मुख्य में क्या करना पसंद इसे कहते हैं, के लिए जा रहे हैं. लेकिन उन 2 चर का उपयोग करने के लिए, हम करने के लिए एक अस्थायी चर का उपयोग नहीं करना चाहती. वहाँ दो तरीके से ऐसा कर रहे हैं. आप इसे अपने पारंपरिक द्विआधारी ऑपरेटरों का उपयोग कर सकते हैं. तो किसी को भी है कि कर का एक त्वरित और गंदे तरीका पता है? यह वास्तव में सोच का एक मिनट लग सकता है. यदि मेरे पास है - मैं इस समस्या के सेट अप की तरह वे पूछता हूँ. तो अगर मैं 2 चर है, एक है, जो सिर्फ एक पूर्णांक है कि वे मुझे दे, और राशि चर बी है, जो एक और पूर्णांक है कि मैं दिया हूँ. तो अगर मैं इन 2 चर है, अब मैं उन्हें स्वैप के लिए करना चाहते हैं. पारंपरिक, अपने नियमित रूप से बाइनरी ऑपरेटर्स का उपयोग कर, मेरा मतलब है, + तरह, ÷. नहीं बिटवाइस ऑपरेटरों जो बाइनरी पर काम करते हैं. तो, + ÷, सभी और उन का उपयोग कर. हम जैसे कुछ करके स्वैप सकता है एक = एक + ख, और ख = एक - ख, एक = एक - ख. तो, विवेक की जाँच करें, और फिर हम यही वजह है कि काम देखेंगे. चलो का कहना है कि एक = 7, b = 3, तो एक + ख से 10 होने जा रहा है. तो हम अब एक = 10 की स्थापना कर रहे हैं, और फिर हम ख = एक कर रहे हैं - ख. तो हम क्या कर रहे हैं ख = एक - ख, जो 7 होने जा रहा है, और ख = एक - ख फिर, या एक = एक - ख. 7 जो 3 - कौन से 10 होने जा रहा है. तो अब, सही ढंग से 'एक', 7 था, ख 3 था, और अब ख 7 है और 'एक 3' है. तो उस तरह की समझ में आता है, 'एक' 2 नंबर के संयोजन है. इस बिंदु पर, 'एक' संयोजन है, और फिर हम बाहर मूल ख subtracting कर रहे हैं, और फिर हम बाहर घटाकर क्या कर रहे हैं मूल था 'एक.' लेकिन यह सभी नंबरों के लिए काम नहीं करता. यह देखने के लिए है, चलो एक प्रणाली पर विचार करें, तो हम आम तौर पर लगता है कि 32 बिट के रूप में integers के. चलो कुछ है कि केवल 4 बिट्स की तरह है पर काम. उम्मीद है कि मैं एक अच्छा उदाहरण के साथ अभी आते हैं. तो मुझे पता है, यह आसान हो जाएगा. चलो का कहना है कि हमारे 2 नंबर 1111, 1111 और कर रहे हैं, तो हम बाइनरी में सही अब कर रहे हैं. वास्तविक दशमलव में, यदि आप इसे की तरह लगता है चाहता हूँ, एक = 15 और b = 15. और इसलिए हम उम्मीद करते हैं, के बाद हम उन्हें स्वैप - वे भी एक ही नंबर नहीं है, लेकिन मैं इसे इस तरह से किया. चलो उन्हें एक ही नंबर बनाने के लिए नहीं. है 1111 और 0001. तो एक = 15 और ख = 1. के बाद हम उन्हें स्वैप, हम 'एक' के लिए एक और ख 15 होने की उम्मीद है. तो हमारा पहला कदम है एक = एक + ख. हमारी संख्या केवल 4 बिट्स व्यापक हैं, तो 'एक', जो 1111 है + ख है, जो 0001 है, अंत 10000 जा रहा है जा रहा है, लेकिन हम केवल 4 बिट्स है. तो अब एक = 0. ख - वास्तव में, यह अभी भी पूरी तरह से बाहर काम करता है और अब हम करने के लिए सेट ख = एक के लिए करना चाहते हैं. एक = एक - ख - चलो देखते हैं अगर यह पूरी तरह से काम करता है. तो फिर ख = 0 - 1,, जो अभी भी 15 होगा और फिर एक = एक - ख है, जो 1 होगा. हो सकता है कि यह काम करता है. मुझे लगता है कि वहाँ एक कारण है कि यह नियमित रूप से का उपयोग कर काम नहीं करता है. ठीक है, तो धारणा है कि यह नियमित रूप से बाइनरी आपरेशनों के साथ काम नहीं करता है पर काम कर रहा है, और मैं के लिए दिखेगा - मैं देखना है कि अगर सच है गूगल. तो हम ऐसा करने के लिए bitwise ऑपरेटरों का उपयोग करना चाहते हैं, और यहाँ सुराग XOR है. तो, XOR (^) शुरू अगर आप अभी तक नहीं देखा है. ऐसा नहीं है, फिर से, एक bitwise ऑपरेटर तो यह सा है, और it's द्वारा सा काम करता है - यदि आप 0 और 1 बिट्स है, तो यह 1 होगा. यदि आप बिट्स 1 और 0 है, यह 1 होगा, आप बिट्स 0 और 0 0 हो जाएगा है, और अगर आप बिट्स 1 और 1 यह 0 हो जाएगा. तो यह की तरह है या. यदि बिट्स की या तो सच हैं, यह एक है, लेकिन या विपरीत, यह दोनों बिट्स कि सच नहीं हो सकता है. या यह होगा 1, XOR इस 0 हो. तो हम करने के लिए XOR यहाँ का उपयोग करना चाहते हैं के लिए जा रहे हैं. एक मिनट के लिए इसके बारे में सोचो, मैं गूगल के लिए जा रहा हूँ. खैर, आपको लगता है कि नहीं पढ़ सकते हैं, मैं XOR की स्वैप एल्गोरिथ्म पृष्ठ पर वर्तमान में हूँ. उम्मीद है कि यह समझा जाएगा क्यों मैं can't - यह वास्तव में एल्गोरिथ्म है कि हम सिर्फ किया है. मैं अभी भी क्यों नहीं दिख रहा है - मैं बस एक बुरा उदाहरण उठाया जाना चाहिए, लेकिन इस मामले में जहां 'एक' 0 हो, 5 बिट्स के लिए मिलने के बाद, तो अब 'एक' 0 है हुआ वह यह है कि क्या कहा जाता है "पूर्णांक अतिप्रवाह." विकिपीडिया के अनुसार, "XOR स्वैप के विपरीत, इस भिन्नता की आवश्यकता है कि यह कुछ तरीकों का उपयोग करता है गारंटी है कि x + y एक पूर्णांक अतिप्रवाह कारण नहीं है. " तो यह समस्या है; इस पूर्णांक अतिप्रवाह थी, लेकिन मैंने कुछ गलत किया है. मैं ठीक से नहीं कह सकता. मैं करने के लिए एक दूसरे के साथ आने की कोशिश करेंगे. [छात्र] खैर, पूर्णांक अतिप्रवाह जब तुम वहाँ में एक नंबर डालने की कोशिश कर रहे हैं नहीं है बिट्स की राशि आवंटित की है की तुलना में बड़ा है? हाँ. हम 4 बिट्स है. That's - हम 4 बिट था, हम तो यह करने के लिए 1 जोड़ने की कोशिश, तो हम 5 बिट्स के साथ खत्म होता है. लेकिन 5 बिट बस काट जाता है, हाँ. यह वास्तव में हो सकता है - छात्र [] कि आप एक त्रुटि फेंक, या कि करता है कि एक त्रुटि फेंक होगा? नहीं तो कोई त्रुटि है. जब आप विधानसभा स्तर मिलता है, एक विशेष सा कहीं सेट कर दिया जाता है कि ने कहा कि वहाँ एक अतिप्रवाह था, लेकिन सी में आप की तरह बस के साथ सौदा नहीं करते. आप वास्तव में इसके साथ सौदा नहीं है जब तक आप सी. में विशेष विधानसभा निर्देश का उपयोग कर सकते हैं चलो XOR स्वैप के बारे में सोचते हैं. और मुझे लगता है कि विकिपीडिया लेख भी हो सकता है कह दिया गया है कि - तो यह भी मॉड्यूलर अंकगणितीय लाया है, इसलिए मुझे लगता है मैं था, सिद्धांत रूप में, मॉड्यूलर गणित कर रहा जब मैंने कहा कि 0 - 1 15 फिर से है. तो यह है कि वास्तव में हो सकता है - 1 = 15 - एक नियमित प्रोसेसर है कि 0 करता है. चूंकि हम 0 पर खत्म होता है, हम 1 घटाना है, तो फिर यह सिर्फ चारों ओर 1111 के लिए वापस wraps. तो इस एल्गोरिथ्म वास्तव में काम करते हैं, एक + ख, एक हो सकता है - बी, बी - एक, कि ठीक हो सकता है. लेकिन वहाँ कुछ प्रोसेसर है जो ऐसा नहीं करते है, और इसलिए यह उन विशिष्ट लोगों में ठीक नहीं होगा. XOR स्वैप किसी भी प्रोसेसर पर काम करेंगे. ठीक है. विचार यह है कि यह एक ही हो सकता है, हालांकि माना जाता है. हम कहाँ XOR का उपयोग कर रहे हैं के लिए किसी भी तरह से 1 चर में दोनों की जानकारी प्राप्त करने के लिए, और फिर बाहर व्यक्तिगत चर की जानकारी फिर से खींचने. तो किसी के विचारों / जवाब है? [छात्र जवाब, unintelligible] तो यह काम करते हैं, और यह भी, XOR विनिमेय है चाहिए. चाहे जो क्रम के इन 2 संख्या यहाँ में होना होता है, इस परिणाम के लिए एक ही होने जा रहा है. तो एक ^ b ख ^ एक. आप यह भी देख सकते हैं इस के रूप में लिखा है एक ^ = ख, ख ^ = एक, एक ^ = फिर b. तो यह सही है, और देखने के लिए क्यों यह काम करता है, बिट्स के बारे में सोचना है. एक smallish नंबर का उपयोग, 11001, और 01100 का कहना है. तो यह 'एक' है, इस ख है. तो एक ^ = b. हम स्थापित करने के लिए इन 2 बातें XOR 'एक' = हो जा रहे हैं. ^ 0 1 1 तो है, एक ^ 1 0 है, ^ 0 1 1 है, और ^ 0 0 0 है, एक ^ 0 1 है. तो ',' अगर आप दशमलव संख्या को देखो, यह करने के लिए जा रहा है - मूल 'एक' और नए के बीच एक संबंध की बहुत देखने जा रहा है एक 'कर रहे हैं लेकिन बिट्स में देख 'एक', जानकारी का एक जाल की तरह अब दोनों मूल 'एक' और मूल ख. तो अगर हम ख ^ एक, हम देखते हैं कि हम मूल में समाप्त होगा 'एक.' ले और अगर हम ले मूल 'एक' ^ नए 'एक,' हम देखते हैं कि हम मूल ख पर खत्म होता है. तो (एक ^ ख) ^ b = मूल 'एक.' और (एक ^ b) ^ एक = मूल ख. वहाँ है - देखकर यह कुछ भी XOR ही है एक और तरीका है हमेशा 0. ^ 1101 1101 तो, सभी बिट्स के लिए एक ही होने जा रहे हैं. तो वहाँ एक मामले में जहां 1 एक 0 और अन्य 1 नहीं होने जा रहा है. तो यह 0000 है. इस के साथ ही. (एक ^ ख) ^ b तरह है ^ (ख ^ ख). (ख ख ^) 0 होने जा रहा है, एक ^ 0 बस 'होने के लिए एक,' जा रहा है के बाद से सभी बिट्स 0. इतना ही है कि लोगों को होने जा रहे हैं जहां 'एक' मूल रूप से किया गया था 1 एक - वाले थे. और यहाँ एक ही विचार है, मुझे पूरा यकीन है कि यह भी है विनिमेय हूँ. हाँ. मैंने कहा था कि इससे पहले कि यह विनिमेय था. ^ ',' और यह साहचर्य है, तो अब (ख ^ एक) ^ एक. और हम ख ^ (एक ^ एक) कर सकते हैं. तो फिर, हम मूल ख मिलता है. तो 'एक' अब 'एक' ख और के साथ संयोजन है. हमारे नए combo का उपयोग 'एक' हम कहते हैं ख = कॉम्बो 'एक' ^ मूल ख, हम मूल 'एक.' और अब एक = कॉम्बो 'एक' ^ नई ख है, जो मूल था - या जो अब है क्या 'एक' या ख था. कि इस मामले यहाँ नीचे. यह = ख, ख पुरानी है. तो अब सब कुछ वापस बदली क्रम में है. यदि हम वास्तव में बिट्स में देखा, ख = एक ^ b, इन 2 XOR जा रहा है, और जवाब देने के लिए यह हो जा रहा है, और फिर एक = एक ^ b इन 2 XORing है और इस सवाल का जवाब यह है. प्रश्न? ठीक है. तो कुछ हद तक पिछले एक काफी अधिक मुश्किल है. [छात्र] मुझे लगता है कि वह इसके बारे में एक सवाल है. >> ओह, माफ करना. [छात्र] क्या वास्तव में तेजी से? यदि आप इस XOR का उपयोग करते हैं, या यह है कि अगर आप एक नया चर घोषित? तो क्या वास्तव में तेजी है, एक नया चर की घोषणा या XOR का उपयोग करने के लिए स्वैप? जवाब सभी संभावना में है, एक अस्थायी चर. और वह यह है कि क्योंकि यह एक बार नीचे संकलित है तो विधानसभा स्तर पर, वहाँ कोई स्थानीय चर या किसी भी अस्थायी चर या इस सामान की किसी भी रूप में ऐसी बात नहीं है. वे बस की तरह कर रहे हैं - वहाँ स्मृति है, और वहाँ रजिस्टरों हैं. रजिस्टरों हैं जहां चीजें सक्रिय हो रहे हैं. आप स्मृति में 2 बातें जोड़ नहीं है, आप रजिस्टरों में 2 बातें जोड़ने. और तुम रजिस्टरों में स्मृति से चीजों को लाने के लिए फिर उन्हें जोड़, और तब आप उन्हें वापस रख स्मृति में हो सकता है, लेकिन सभी कार्रवाई रजिस्टर में होता है. तो जब आप अस्थायी चर दृष्टिकोण का उपयोग कर रहे हैं, आम तौर पर क्या होता है इन 2 संख्या रजिस्टर में पहले से ही कर रहे हैं. और फिर पर, के बाद आप उन्हें बदली है कि बिंदु से, यह सिर्फ अन्य रजिस्टर का उपयोग शुरू करेंगे. कहीं तुम ख उपयोग किया गया था, यह सिर्फ रजिस्टर है कि पहले से ही भंडारण किया गया था इस्तेमाल करेंगे 'एक.' तो यह स्वैप करने के लिए वास्तव में क्या करने के लिए कुछ भी करने की जरूरत नहीं है. हाँ? [छात्र] लेकिन यह भी अधिक स्मृति लेता है, है ना? अगर यह है कि अस्थायी चर की दुकान की जरूरत है यह केवल अधिक स्मृति ले जाएगा. जैसे कि अगर आप बाद में है कि अस्थायी चर का उपयोग फिर से कहीं, तो या आप कुछ है कि अस्थायी चर आवंटित. तो अगर समय ',' अस्थायी ख में में किसी भी बिंदु पर विशिष्ट मान या कुछ और है, तो यह स्मृति में अलग स्थानों के लिए जा रहा है, लेकिन यह सच है कि वहाँ कई स्थानीय चर है जो केवल रजिस्टरों में मौजूद हैं. जो मामले में, यह स्मृति में डाल कभी नहीं है, और इसलिए आप स्मृति कभी नहीं बर्बाद कर रहे हैं. ठीक है. आखिरी सवाल थोड़ा और अधिक है. तो, यहाँ इस उपकरण में CS50, वहाँ एक शब्दकोश है. और इस के लिए कारण है क्योंकि [? B66] एक जादू चेकर जहाँ आप लिख सकता हूँ हैश तालिका या की कोशिश करता है या कुछ डेटा संरचना का उपयोग कर. आप एक जादू चेकर लिखने जा रहे हैं, और आप इस शब्दकोश का उपयोग किया वही करने जा रहे हैं. लेकिन इस समस्या के लिए, हम सिर्फ देखने के लिए देखने के लिए अगर एक शब्द शब्दकोश में है जा रहे हैं. तो कुछ डेटा संरचना में पूरे शब्दकोश भंडारण के बजाय और फिर एक पूरे दस्तावेज़ पर देख देखने के लिए अगर कुछ भी गलत वर्तनी है, हम सिर्फ एक शब्द खोजने के लिए करना चाहते हैं. तो हम बस पर पूरे शब्दकोश स्कैन कर सकते हैं और अगर हम पूरे शब्दकोश में शब्द खोजने के लिए कभी नहीं, तो यह वहाँ में नहीं था. यदि हम पूरे शब्दकोश पर स्कैन और शब्द नहीं देखते हैं, तो हम अच्छा कर रहे हैं, हम यह पाया. यह यहाँ का कहना है कि हम सी समारोह फ़ाइल से निपटने में तलाश शुरू करना चाहते हैं, क्योंकि हम शब्दकोश पढ़ना चाहते हैं, लेकिन मैं के रूप में कार्य करता है आप के बारे में सोचना चाहिए जो संकेत दे देंगे. मैं उन्हें रिक्त स्थान पर लिख देंगे. तो मुख्य लोगों में आप खुला और फिर च, अनिवार्य रूप से बंद कर दिया, च में देखना चाहता हूँ, जो अपने कार्यक्रम के अंत में जाना जाएगा, और च स्कैन च. तुम भी उपयोग कर सकता है च पढ़ने के, लेकिन आप शायद नहीं करना चाहती कि क्योंकि आप नहीं कि की आवश्यकता होगी, अंत नहीं है. F स्कैन च है कि तुम क्या करने के लिए शब्दकोश स्कैन का उपयोग करने के लिए होने जा रहे हैं. और इसलिए आप समाधान कोड की जरूरत नहीं है, बस कोशिश करते हैं और छद्म कोड की तरह अपना रास्ता एक समाधान के लिए, और फिर हम यह चर्चा करेंगे. और वास्तव में, जब से मैं पहले से ही आप इन दिया, अगर आप किसी भी टर्मिनल या अपने उपकरण खोल में जाना, मैं - मैं आमतौर पर अगर आप अभी तक नहीं देखा है, मैं जानता हूँ कि नहीं अगर आप वर्ग में किया था, लेकिन आदमी है, तो आदमी पृष्ठों, बहुत ज़्यादा किसी भी समारोह में देखने के लिए बहुत उपयोगी हैं. तो मुझे क्या करना, पसंद है, आदमी च, स्कैन च. इस अब कार्यों की स्कैन च परिवार के बारे में जानकारी है. मैं भी आदमी च, खुला कर सकता है, और कहा कि मुझे उस की जानकारी दे देंगे. तो अगर आप जानते हैं कि क्या तुम समारोह का उपयोग कर रहे हैं, या आप कोड को पढ़ रहे हैं और आप कुछ कार्य देखते हैं और आप कर रहे हैं जैसे, "यह क्या करता है?" बस आदमी समारोह कि नाम. अजीब उदाहरण के एक जोड़े हैं जहाँ आप करने के लिए कहने के लिए हो सकता है पसंद है. कि समारोह नाम, या 3 आदमी है कि समारोह का नाम, 2 आदमी लेकिन आप केवल करने की है कि अगर आदमी समारोह का नाम पहली बार काम करने के लिए नहीं होता है. [छात्र] तो मैं आदमी पृष्ठ के लिए खुला पढ़ रहा हूँ, लेकिन मैं अभी भी यह कैसे और प्रोग्राम का उपयोग करने पर उलझन में हूँ. ठीक है. आदमी पृष्ठों की एक बहुत मददगार की तुलना में कम कर रहे हैं. वे और अधिक उपयोगी हो अगर आप पहले से ही पता है कि वे क्या करते हैं और फिर तुम सिर्फ तर्क या कुछ के आदेश को याद करने की जरूरत है. या वे तुम्हें देने के लिए एक सामान्य अवलोकन कर सकते हैं, लेकिन उनमें से कुछ बहुत भारी हैं. च स्कैन च की तरह, यह भी. यह आप इन कार्यों में से सभी के लिए जानकारी देता है, और एक लाइन के नीचे यहाँ कहने के लिए होता है, "एफ स्कैन च स्ट्रिंग बिंदु या धारा से पढ़ता है." लेकिन खोलने के च. तो, हम च कैसे खुला प्रयोग करेंगे? एक कार्यक्रम के लिए जो फाइल करने की जरूरत का विचार मैं / हे है कि आप पहली बार आप के साथ काम करना चाहते हैं फ़ाइल खोलने की जरूरत है, और अनिवार्य रूप से, कि फ़ाइल से चीजों को पढ़ने के लिए और उन लोगों के साथ सामान करना. एफ खुला है कि हम क्या करने के लिए फ़ाइल खोलने के लिए उपयोग. बात हम वापस मिलता है, तो क्या हम फ़ाइल को खोलने के लिए चाहते हो, यह हमें देता है - यहाँ यह "/ उपयोगकर्ता / शेयर / dict / शब्द कहते हैं." इस फ़ाइल है कि हम खोलना चाहते है, और हम इसे खोलने के लिए करना चाहते हैं - हम स्पष्ट रूप से निर्दिष्ट कर सकते हैं कि क्या हम यह पढ़ने के लिए या यदि हम खोलना चाहते हैं, तो यह लिखने के लिए खोलना चाहते है. संयोजन और सामान की एक जोड़ी है, लेकिन हम पढ़ने के लिए खोलना चाहते हैं. हम फ़ाइल से पढ़ने के लिए करना चाहते हैं. तो इस वापसी क्या करता? यह एक फ़ाइल सितारे (*) देता है, और मैं सिर्फ चर च में सब कुछ है, तो * दिखाता हूँ, फिर, यह एक संकेत है, लेकिन हम संकेत के साथ सौदा नहीं करना चाहता है. तुम च के बारे में सोच के रूप में, च अब चर आप फ़ाइल प्रतिनिधित्व का उपयोग करने के लिए जा रहे हैं कर सकते हैं. तो अगर आप फ़ाइल से पढ़ने के लिए चाहते हैं, तो आप च से पढ़ा. यदि आप फ़ाइल को बंद करना चाहते हैं, तो आप च करीब है. तो जब कार्यक्रम के अंत में हम निश्चित रूप से फ़ाइल को बंद करना चाहते हैं, हम क्या करना चाहिए? हम च बंद करना चाहते हैं. तो अब पिछले फ़ाइल समारोह है कि हम करने के लिए उपयोग करना चाहते हैं के लिए जा रहे हैं, च च स्कैन च स्कैन है. और कि क्या करता है यह एक मैच के पैटर्न के लिए देख फ़ाइल पर स्कैन. आदमी पृष्ठ पर देख रहे हैं, हम int च स्कैन च देखते हैं, अब के लिए वापसी मूल्य की अनदेखी. 1 तर्क फ़ाइल * धारा है, तो हम पारित करने के लिए चाहते करने जा रहे हैं 1 तर्क है च. हम च पर स्कैनिंग कर रहे हैं. दूसरा तर्क एक प्रारूप स्ट्रिंग है. मैं तुम्हें एक प्रारूप स्ट्रिंग सही अब दे देंगे. मुझे लगता है कि हम कहते हैं, 127s \ n, कि अनावश्यक है एक बहुत कुछ होता है. विचार की कि प्रारूप स्ट्रिंग क्या है, आप स्कैन च के प्रिंट च के विपरीत के रूप में सोच सकते हैं. तो प्रिंट च, प्रिंट च हम भी प्रारूप पैरामीटर का इस प्रकार का उपयोग करें, लेकिन प्रिंट च में हम क्या कर रहे हैं - चलो एक बराबर में देखो. तो च मुद्रित करने के लिए, और वास्तव में भी च च प्रिंट, जहां पहले तर्क च होने जा रहा है. जब तुम च मुद्रित करते हैं, हम कुछ की तरह कह सकते हैं, "प्रिंट 127s \ n" और फिर अगर हम इसे कुछ स्ट्रिंग पारित यह करने के लिए और फिर एक नई लाइन स्ट्रिंग प्रिंट जा रहा है. 127 मतलब क्या, मैं बहुत यकीन है, लेकिन मैं खुद को यह करने के लिए कभी नहीं रखा है, तुम भी प्रिंट च में '127 'कहने की जरूरत नहीं होगी, लेकिन क्या इसका मतलब यह पहले 127 वर्ण मुद्रित है. तो मुझे पूरा यकीन है कि मामला है. तुम उस के लिए गूगल कर सकते हैं. लेकिन अगले एक में मैं लगभग सकारात्मक है इसका मतलब है कि हूँ. तो यह है कि पहले 127 वर्ण, एक नई लाइन के द्वारा पीछा प्रिंट. F स्कैन अब च, एक चर में देख रहे हैं और यह मुद्रण के बजाय, यह कुछ स्ट्रिंग को देखो, और चर में पैटर्न की दुकान के लिए जा रहा है. चलो वास्तव में एक अलग उदाहरण में स्कैन उपयोग च. तो चलो कहते हैं कि हम कुछ int था, x 4 = और हम एक से बना स्ट्रिंग बनाना चाहता था - स्ट्रिंग बनाना चाहता था कि जैसा था, यह बहुत बाद में आएगा, कुछ है कि 4.jpg की तरह है. तो यह एक कार्यक्रम है जहां आप राशि काउंटर होगा हो सकता है, मैं काउंटर राशि, और आप छवियों का एक गुच्छा बचाने के लिए चाहते हैं. तो आप i.jpg, जहां मैं अपने पाश की कुछ चलना है बचाने के लिए चाहते हैं. तो कैसे हम कि JPEG लिए इस स्ट्रिंग कर सकता हूँ? यदि आप 4.jpg मुद्रित करने के लिए करना चाहता था, हम सिर्फ प्रिंट, च% d.jpg कह सकते हैं, और फिर यह कि JPEG के लिए प्रिंट होगा. लेकिन अगर हम स्ट्रिंग 4.jpg को बचाने के लिए करना चाहते हैं, तो हम स्कैन च का उपयोग करें. स्ट्रिंग है तो वास्तव में हम can't - चरित्र, चार, 100 जाना. इसलिए मैं सिर्फ 100 अक्षरों के कुछ सरणी की घोषणा की है, और है कि हम क्या अनिवार्य रूप से करने के लिए कि JPEG भंडारण हो अंदर जा रहे हैं. तो हम स्कैन च का उपयोग करने के लिए जा रहे हैं, और स्वरूप है, कैसे हम% d.jpg कहना होगा 4.jpg क्रम में मुद्रित करने के लिए, इस का प्रारूप% d.jpg होने जा रहा है. तो प्रारूप% d.jpg, हम साथ% d बदलना चाहते हैं क्या है x है, और अब हम उस स्ट्रिंग कहीं स्टोर की जरूरत है. और जहां हम इस स्ट्रिंग की दुकान करने के लिए जा रहे हैं सरणी है. तो कोड, एस के इस लाइन के बाद, अगर हम च, चर s के% s मुद्रित, यह 4.jpg मुद्रित करने के लिए जा रहा है. तो स्कैन च च स्कैन च के रूप में ही छोड़कर अब इस फाइल पर यह लग रहा है, क्या एस में संग्रहीत. यही अंतिम बहस के लिए क्या किया जा रहा है. कार्यों स्कैन के दोनों प्रारूप के अनुसार नीचे के रूप में करने की कोशिश की "स्कैन च परिवार हम स्टोर करने के लिए करना चाहते हैं. यदि किसी भी स्थान अंक में संग्रहित कर रहे हैं आप वापसी हो सकती है " नहीं, हम अच्छा हो सकता है. मुझे एक पल के लिए लगता है. क्या बिल्ली समारोह जो कि करता है तो स्कैन च नहीं करता है? तो स्कैन च एक पूर्णांक ले और डॉट jpg नहीं जा रहा है. यह [फुसफुसाता] करने के लिए जा रहा है. स्ट्रिंग int सी. में int चर सहेजें इस चर क्या है, या इस समारोह में क्या कहा जाता है? हां. That's - हाँ. तो क्या मैं आप को परिभाषित किया गया है से पहले एस प्रिंट च था, जो कि बहुत अधिक समझ में आता है, इसलिए मैंने कहा कि यह प्रिंट च की तरह ज्यादा था बनाता है. स्कैन च अभी भी प्रिंट च की तरह की तरह है, लेकिन एस प्रिंट च इसे स्कैन पर जा रहा है और चर की जगह है और अब यह एक स्ट्रिंग में संग्रहीत. यह मुद्रण के बजाय, यह एक स्ट्रिंग में संग्रहीत करता है. तो यह है कि पूरी तरह से की उपेक्षा. अभी भी आप की तरह है कि प्रिंट च के रूप में प्रारूप विनिर्देशक के बारे में सोच सकते हैं. तो अब, अगर हम 4.jpg बात करना चाहता था, हम है प्रिंट च करते हैं, इस के एक्स. तो स्कैन च क्या कर रहा है - क्या अपने प्रश्न के लिए होने जा रहा है? [छात्र] मैं बस क्या हम यहीं करने की कोशिश कर रहे हैं पर उलझन में हूँ कि JPEG के साथ. आपको लगता है कि 1 और अधिक समय की व्याख्या कर सकते हैं? तो यह था - यह कम च स्कैन अब च के लिए प्रासंगिक है, उम्मीद है, इसे वापस रास्ते से किसी तरह का में टाई जाएगा. लेकिन मैं शुरू करने के लिए दिखाने के लिए इरादा था क्या था - यह वास्तव में सीधे इन [प्रासंगिक है? F5] आप एस प्रिंट च का उपयोग करने के लिए होने जा रहे हैं, जहां का कहना है, हम 100 चित्र है, और आप छवि 1.jpg 2.jpg, 3.jpg पढ़ने के लिए चाहते हैं. तो आदेश में करने के लिए है कि, आप च के लिए खुला है की जरूरत है, और फिर तुम स्ट्रिंग जिसे आप खोलना चाहते हैं में पारित किया है. तो हम 1.jpg खोलने के लिए चाहते हैं, क्रम में स्ट्रिंग 1.jpg है कि बनाने के लिए, हम% की प्रिंट च d.jpg हम int i = 0 के लिए क्या किया. मैं 40 <, मैं + +. तो प्रिंट च% मैं के d.jpg. तो इस लाइन के बाद, अब चर या सरणी 1.jpg जा रहा है. या, 0.jpg, 1.jpg 2.jpg. और इसलिए हम, बारी में खोलने के लिए, पढ़ने के लिए प्रत्येक छवि कर सकते हैं. तो यह है कि एस क्या च मुद्रित करने के लिए करता है. क्या आप देख एस क्या च अब कर रही है मुद्रित करने के लिए? [छात्र] ठीक है, तो इसे ले जा रही है - यह एक स्ट्रिंग बनाता है, something.jpg, और फिर यह भंडार. हां. यह बनाता है - यह एक और प्रारूप स्ट्रिंग स्कैन च और प्रिंट च की तरह है, जहां दूसरा तर्क में यह चर के सभी आवेषण, के रूप में मैं विरोध हो सकता है. शायद मेरा मतलब है, यह मामला है. लेकिन जो कुछ तर्कों के आदेश है. यह प्रारूप स्ट्रिंग में चर के सभी डालने जा और फिर हमारे बफर में दुकान, हम कहते हैं कि एक बफर, यह है जहाँ हम स्ट्रिंग भंडारण कर रहे हैं. तो हम एस के अंदर भंडारण कर रहे हैं सही ढंग से स्वरूपित स्ट्रिंग,% d 4 के साथ प्रतिस्थापित किया गया है. [छात्र] तो अगर हम यह किया है, चर च बस फिर नियत किया जा रहा है? हां. तो हम ऐसा करने से पहले मूल च बंद हो जाना चाहिए. पर - और फिर भी, अगर वहाँ एक च यहाँ खोलने नहीं थे, तो हम कहने के लिए की आवश्यकता होगी - हाँ. लेकिन यह एक सौ अलग अलग फ़ाइलों को खोलने का होगा. ठीक [छात्र] लेकिन हम तक पहुँच या करने में सक्षम नहीं होगा. ठीक है. स्कैन च, च स्कैन च, तो एक ही विचार की तरह है, लेकिन इसके बजाय, यह एक स्ट्रिंग में भंडारण के बजाय, यह तुम अब कर रहे हैं और अधिक की तरह है एक डंक और पैटर्न कि स्ट्रिंग के खिलाफ मिलान पर जा रहा है और चर में परिणाम भंडारण. आप स्कैन उपयोग च 4.jpg की तरह कुछ पर पार्स, और राशि int x में पूर्णांक 4 की दुकान कर सकते हैं. यही कारण है कि हम क्या के लिए स्कैन च का उपयोग कर सकते हैं. F स्कैन च कि कमांड लाइन पर करने जा रहा है. मैं वास्तव में पूरा यकीन है कि यह क्या CS50 पुस्तकालय करता हूँ. तो जब आप कहते हैं, ", int हो" यह खत्म हो च आईएनजी स्कैन - स्कैन च जिस तरह से आप उपयोगकर्ता इनपुट मिलता है. F स्कैन च के लिए एक ही बात कर रहा है, लेकिन एक फ़ाइल का उपयोग करने पर स्कैन. तो, यहाँ हम इस फाइल पर स्कैनिंग कर रहे हैं. पैटर्न हम मैच की कोशिश कर रहे हैं कि 127 वर्ण लंबा है कुछ स्ट्रिंग है एक नई लाइन के द्वारा पीछा तो मुझे यकीन है कि हम भी कह सकते हैं "मैच" के बाद से इस शब्दकोश में हम के लिए होता है, हम गारंटी रहे हैं कोई शब्द नहीं है कि लंबे समय है, और भी च स्कैन च नई लाइन पर मुझे लगता है, कोई बात नहीं क्या बंद हो जाएगा. लेकिन हम मैच में नई लाइन को शामिल करेंगे, और - [छात्र] अगर हम नई लाइन को शामिल नहीं किया है, तो यह एक शब्द के कुछ हिस्सों को नहीं मिल जाएगा? प्रत्येक - यह शब्दकोश में देख रहे हैं - शब्दकोश में तो, ये हमारे शब्दों के सभी कर रहे हैं. हर एक को एक नई लाइन पर है. स्कैन च करने के लिए इस शब्द के लेने के लिए जा रहा है. यदि हम नई लाइन शामिल नहीं है, तो यह संभव है कि अगले स्कैन च सिर्फ नई लाइन पढ़ा होगा. लेकिन नई लाइन सहित तो सिर्फ नई लाइन की अनदेखी करेंगे. लेकिन हम कभी भी एक शब्द का हिस्सा नहीं मिलता है, क्योंकि हम हमेशा एक नई लाइन के लिए पढ़ने, कोई बात नहीं क्या होगा. [छात्र] लेकिन क्या अगर आप शब्द "cissa," cissa तरह के लिए खोज. यह है कि मिल जाएगा, और कहते हैं कि यह एक मैच है? यहाँ तो हम - यह में पढ़ा होगा - यह वास्तव में एक अच्छी बात है. हम वर्तमान कभी नहीं का उपयोग कर रहे हैं - शब्द के लिए हम देख रहे हैं 1 कमांड लाइन तर्क है. तो स्ट्रिंग, शब्द = 1 argv. तो स्ट्रिंग के लिए हम देख रहे हैं 1 argv है. हम हमारे स्कैन च सब पर एक शब्द के लिए नहीं देख रहे हैं. क्या हम स्कैन च के साथ कर रहे थे शब्दकोश में प्रत्येक शब्द हो रही है, और फिर एक बार हम हम strcmp का उपयोग करने के लिए उनकी तुलना करने के लिए जा रहे हैं कि शब्द है. हम हमारे शब्द की तुलना करने के लिए जा रहे हैं और हम क्या सिर्फ अंदर पढ़ें तो अनिवार्य रूप से, हम करने के लिए अंत स्कैन एफएस की एक गुच्छा कर जा रहे हैं जब तक यह सिर्फ इतना होता है कि स्कैन च वापस आ जाएगी - यह एक लौटने के लिए, के रूप में लंबे समय के रूप में यह एक नया शब्द मिलान किया जाएगा, और यह कुछ और जैसे ही यह शब्द मैच में विफल रहा है वापस आ जाएगी. हम पूरे शब्दकोश पर पढ़ रहे हैं, लाइन से लाइन प्रत्येक शब्द भंडारण चर s में. तब हम एस के साथ शब्द की तुलना कर रहे हैं, और अगर तुलना == 0 strcmp 0 लाने के लिए अगर एक मैच बनाया गया था होता है. तो अगर यह 0 गया था, तो हम च मुद्रित करने के लिए, मिलान किया जा सकता है, या शब्द शब्दकोश में है, या जो कुछ भी आप च मुद्रित करना चाहते हैं. और फिर हम च पर बंद करो और पर फिर से नहीं करना चाहती. इस बात की तरह हम करना चाहते है, और हम सिर्फ शब्दकोश में शब्द के लिए नहीं देख रहे हैं. तो हम करते हैं, अगर हम अपने पैटर्न, cissa के लिए देखना चाहता था सकता है, जैसे पहले कहा, अगर हम उस पैटर्न के लिए देखना चाहता था, तो यह मामले में विफल हो जाएगा कि वास्तव में एक शब्द भी नहीं है, लेकिन क्योंकि एक शब्दकोश में शब्दों की यह है कि होता है. तो यह शब्द इस मैच के लिए, लेकिन इस शब्द का सबसेट एक शब्द ही नहीं है. लेकिन यह है कि कैसे हम इसे प्रयोग नहीं कर रहे है, हम प्रत्येक शब्द में पढ़ रहे हैं और फिर हम उस शब्द के साथ शब्द की तुलना. तो हम हमेशा पूर्ण शब्दों की तुलना कर रहे हैं. मैं अंतिम रूप दिया समाधान बाद में भेज सकते हैं. यह लगभग सही जवाब की तरह है, मुझे लगता है. [छात्र टिप्पणी, unintelligible] ओह, मैं उससे छुटकारा पाना था पहले? चार है, मुझे लगता है कि हम 127 ने कहा - मैं भूल जाते हैं सबसे बड़ा क्या है. हम सिर्फ 128 करूँगा, तो अब लंबे समय पर्याप्त है. हम कुछ भी मुद्रित करने की जरूरत नहीं है. हम भी हमारे फाइल को बंद करने के लिए है चाहता हूँ के लिए जा रहे हैं, और है कि सही जवाब के बारे में होना चाहिए. CS50.TV