[Powered by Google Translate] डेविड जे मालन: सब ठीक है, इस CS50 है, और यह है
दो सप्ताह के शुरू.
धन्यवाद.
हमें एक फोन के साथ यहाँ शुरू.
मैं के बारे में 617 बग CS50 डायल.
CS50: यह CS50 है.
शटल लड़के के लिए, 1 दबाएँ.
पर शुरू करने के लिए, 9 दबाएँ.
डेविड जे मालन: तो वह शटल लड़के, प्रेस 1 के लिए कहा.
तो हम 1 प्रेस करने के लिए जा रहे हैं.
CS50: अपने मूल क्या है?
ट्रैक्टर, 1 प्रेस.
Mather, 2 दबाएँ.
Boylston, 3 दबाएँ.
Lamont, 4 दबाएँ.
Mem हॉल, 5 प्रेस.
पर शुरू करने के लिए, 0 दबाएँ.
डेविड जे मालन: हम ट्रैक्टर के लिए 1 प्रेस करेंगे.
CS50: अगली शटल 1:10 बजे यह बहुत मिनट छोड़ देता है, और
फिर 1:20 बजे, 1:30 PM, 1:40.
यह CS50 है.
>> डेविड जे मालन: तो इस CS50 आवाज है.
और यह अंतिम परियोजनाओं की तरह का एक उदाहरण के लिए,
उदाहरण के लिए, आप से दूर ओर काट कर सकते हैं
सेमेस्टर के अंत.
उदाहरण के लिए, कि shuttleboy.cs50.net मौजूद है -
वास्तव में एक परियोजना है कि मैं पहली बार CS51 लेने के बाद लिखा था
वापस जब मैं एक स्नातक था.
और प्रेरणा यहाँ वापस फिर गया था, वे था
मुद्रित शटल बस अनुसूचियां, और वहाँ कोई नहीं था
ऑनलाइन बातें तलाश की धारणा.
और इसलिए मैं कबूतर की तरह एक सप्ताह के अंत में, के माध्यम से डाला
अनुसूची मुद्रित है, और यह एक कंप्यूटर प्रोग्राम के लिए रखी.
समय, कंप्यूटर प्रोग्राम के लिए लिखा जा हुआ
सी. में आप वास्तव में एक टाइपिंग शटल लड़के द्वारा यह भागा
निमिष prompt तरह हम इस प्रकार दूर कर दिया गया है.
लेकिन पिछले कुछ वर्षों में, यह एक पल में विकसित
संदेश bot.
यह हाल ही में इस वेबसाइट में विकसित है, एक में,
एसएमएस आधारित उपकरण है, के रूप में आवाज आधारित इस उपकरण के रूप में अच्छी तरह से.
और यह चीजों की तरह पर संकेत है कि आप कर सकते हैं
सेमेस्टर के अंत तक खुद के लिए नहीं.
>> उदाहरण के लिए, वहाँ शटल लड़के के एसएमएस संस्करण होता है
प्रकार के रूप में कार्य करते हैं.
अगर, अपने सेल फोन पर, आप 41411 के लिए एक पाठ संदेश भेजने के लिए और
फिर शटल लड़के के लिए विशेष प्रतीक sboy, भेजने के लिए,
ए और बी, और जहां एक एक मूल है बी द्वारा पीछा किया है
गंतव्य -
उदाहरण के लिए, Boylston अंतरिक्ष ट्रैक्टर -
क्या आप कुछ सेकंड के भीतर वापस मिलना चाहिए एक पाठ है
शटल ब्वॉय से संदेश आपको बता वास्तव में जब
अगले कुछ शटल उस बिंदु से कर रहे हैं, एक है कि करने के लिए जा रहा
बिंदु बी
और यह क्या रूप में जाना जाता है की एक अधिक सामान्य उदाहरण है
एक एपीआई का उपयोग कर.
>> तो उदाहरण के लिए, यहाँ इस सिर्फ shuttleboy.cs50.net है,
इस का वास्तविक अवतार वेब आधारित हैं.
लेकिन डेटा है कि इस और अन्य क्षुधा को रेखांकित करता है कि CS50
गया है विकसित सब से उजागर कर रहे हैं यहाँ के रूप में
एपीआई का अनुप्रयोग प्रोग्रामिंग इंटरफेस.
और कहा कि सिर्फ कह का एक अच्छा तरीका है कि लोगों को हम पर पसंद है
इंटरनेट और दूसरों को कुछ समय बिताया है बनाने
सॉफ्टवेयर है कि आप क्रम में हम से डेटा ले लो और उपयोग कर सकते हैं
फिर शीर्ष पर अपने खुद के अनुप्रयोगों का निर्माण
कि डेटा सेट की.
तो उदाहरण के लिए, जो इस शटल लड़के एपीआई पृष्ठ यहाँ,
CS50 पुस्तिका, दस्तावेजों में अनिवार्य रूप से होना होता है
आप डेटा के लिए CS50 सर्वर के बारे में पूछ कैसे जा सकते हैं.
उदाहरण के लिए, अगर आप CSV फ़ाइलों, अल्पविराम के साथ परिचित हो
मूल्यों अलग है, इन बस की तरह कर रहे हैं जल्दी और गंदे
फाइल एक्सेल की तरह.
तो आप सब पर डेटा के सभी के लिए शटल लड़का पूछ सकते हैं
घरों और उनके जीपीएस निर्देशांक, और आप मिल जाएगा
वापस, अनिवार्य रूप से, कि जैसे एक स्प्रेडशीट कि
तुम तो अपने खुद के एक कार्यक्रम में पढ़ सकते हैं और फिर
परिणाम उत्पन्न, शटल की तरह ही ब्वॉय
कर रही हो होता है.
उन अधिक परिचित, अधिक आधुनिक डेटा अभ्यावेदन के लिए
JSON, जावास्क्रिप्ट वस्तु संकेतन शामिल.
कुछ पीछे की ओर आप के लिए आ जाएगा
सेमेस्टर के अंत.
>> लेकिन फिर, यह सिर्फ एक CS50 खुद के APIs के कई.
और अब रोमांचक बात है, इन दिनों, Facebook और
ट्विटर और गूगल और बहुत ज्यादा हर लोकप्रिय वेबसाइट बाहर
एपीआई, जिसका मतलब है कि अगर आप पढ़ के कुछ प्रकार है
अपनी वेबसाइट पर दस्तावेज़, आप एक के लिए साइन अप
खाता, तो आप के शीर्ष पर सॉफ्टवेयर लेखन शुरू कर सकते हैं
जो भी उपकरण या डेटा कंपनी है कि प्रदान करता है.
और इसलिए हमारे अपने शिक्षण साथियों के एक दो साल पहले एक
इस का एक मैक संस्करण लिखा है.
तो ऊपर छोड़ दिया पर यहाँ मैक नामक लिंक पर, आप वास्तव में कर सकते हैं
एक मैक ओएस विजेट है कि अपने खुद के मैक पर चलाता है डाउनलोड
चीजों के एक ही प्रकार के.
तो यह इन जैसे डेटा सेट के शीर्ष पर निर्माण के बारे में सब है.
लेकिन सेमेस्टर के अंत की ओर उस पर और अधिक.
>> तो चलो एक बग के असली जल्दी में बस की तरह करने के लिए, गोता
बातें आज गरम, और लगता है कि से कुछ पर वापस
बातें हम पिछले हफ्ते में देखा.
विशेष रूप से, मुझे आगे जाना है और ऊपर खींचने के लिए, कहते हैं,
यहाँ इस उदाहरण.
Buggy1.c, इस पाठ्यक्रम वेबसाइट पर उपलब्ध है यदि आप चाहते हैं
इसे डाउनलोड करने और अपने आप को चारों ओर प्रहार करना.
लेकिन हम यह काफी कम कार्यक्रम में यहाँ में ज़ूम, और बस
बुनियादी इमारत है कि ब्लॉक में से कुछ की एक संक्षिप्त सुपर फास्ट
हम वास्तव में बस के लिए दी लेने शुरू करने के लिए जा रहे हैं.
>> नीले सामान तो, 9 के माध्यम से 1 लाइनों में, बस
सॉफ्टबॉल सवाल.
तो ये सिर्फ टिप्पणी कर रहे हैं.
वे कोई कार्य अर्थ है.
लेकिन वे समझ में टिप्पणी कर रहे हैं कि वे नोट्स हैं कि
मैं, मानव, तो खुद के लिए व्याख्यान में कि और बाद
व्याख्यान, मैं वास्तव में याद कर सकते हैं कि क्या इस कार्यक्रम
लाइन से यह लाइन के माध्यम से पढ़ने के लिए बिना करता है और
मेरे मन में इतिहास पुनः.
इसके अलावा, अगर मैं की तरह किसी और को इस कार्यक्रम हाथ
आप, यह बहुत साफ है, क्योंकि इस तरह की टिप्पणी की है,
कार्यक्रम वास्तव में क्या कर रहा है, या कम से कम क्या
कार्यक्रम के लिए कर रही हो माना जाता है.
चाहे या नहीं यह सही है पूरी तरह एक और मामला है.
अब, सी में, बहु - रेखा टिप्पणियाँ के साथ याद करते हैं, कि लाइन पर
यहाँ एक जादू का प्रतीक है, * /.
यह यहाँ एक टिप्पणी की शुरुआत का मतलब आता है.
और कुछ नहीं मायने रखती है जब तक आप अंत टर्मिनेटर तक पहुँचने,
जो / * विपरीत है.
तो सच है कि मैं 80 कुछ अजीब सितारों से यहाँ है
सही करने के लिए छोड़ दिया वास्तव में सिर्फ एक सौंदर्य विस्तार है.
यह कोई कार्य अर्थ है.
>> अब कैसे 11 लाइन के बारे में?
क्या आम आदमी की दृष्टि में यह क्या करता है?
वह क्या है?
दर्शक: मानक शामिल है.
डेविड जे मालन: ठीक है, अच्छा है.
तो यह stdio.h पुस्तकालय भी शामिल है.
तो इसका क्या मतलब है?
खैर, उस फाइल के अंदर, stdio.h, की एक पूरी गुच्छा
समारोह घोषणाओं -
वह यह है कि, कोड है कि किसी और ने लिखा है.
और है कि एक समारोह में घोषित किया है का एक आदर्श उदाहरण
stdio.h है -
पसंदीदा जो अब?
तो printf, एक सबसे आम लोगों में से एक का उपयोग करने के लिए, निश्चित रूप से
पर जल्दी, कि पुस्तकालय से वहाँ है.
यदि मैं कोड की है कि लाइन को बाहर कर देते हैं, तो बजना चिल्लाना जा रहा है
मुझ पर एक अघोषित प्रतीक का उपयोग करने के बारे में कुछ.
अघोषित कुछ शायद कीवर्ड है, क्योंकि
हम क्या संकलक printf दिखता नहीं सूचित किया है
जैसे जब तक हम उस लाइन में शामिल हैं.
और अधिक नीचे पृथ्वी पर, सच में, कि लाइन कह रहा है क्या है
कि फ़ाइल, stdio.h, खुला है जहाँ यह सर्वर पर है
यह हार्ड ड्राइव, या उपकरण के हार्ड ड्राइव, और कॉपी पेस्ट
सही वहाँ बिना मेरी फाइल में, मेरे
होने कि मैन्युअल रूप से करना है.
>> अब, एक बार हम नीचे यहाँ मुख्य, लंबे समय से पहले हम शुरू करेंगे
अलग चिढ़ा int और क्या शून्य है.
लेकिन अब के लिए, तीन लाइनों पर देखो
भीतर 15 17 के माध्यम से.
यहाँ मैं इस छोटी गाड़ी के रूप में दावा.
मेरी टिप्पणी में 7 रेखा का कहना है, "10 प्रिंट चाहिए
तारांकनों लेकिन "नहीं क्यों इस करता है वास्तव में, मुद्रित नहीं,
10 जैसे सितारों?
दर्शक: [अश्राव्य].
डेविड जे मालन: बिल्कुल सही.
तो लगता है कि हम 0 से गिनती शुरू कर रहे हैं.
और यह वास्तव में प्रोग्रामिंग में एक परंपरा है और
कंप्यूटर और अधिक आम तौर पर विज्ञान, गिनती शुरू
0 के बजाय 1 से.
और यह वास्तव में सिर्फ उस के लिए, इस तथ्य से निकला
उदाहरण के लिए, जब हम आठ लोगों को मंच पर था जब,
कोई भी उनके हाथ उठाने था, वे थे
सभी प्रभावी ढंग से शून्य.
और इसलिए यह सिर्फ एक कंप्यूटर सम्मेलन की तरह है, तो
इसलिए, 0 से गिनती शुरू करने के लिए.
अगर है कि सबसे कम संख्या है तुम द्विआधारी में प्रतिनिधित्व कर सकते हैं.
>> तो यहाँ हम मैं 0 से आरंभ करने के दौरान शुरू कर दिया है.
हम मैं 0 के बराबर निर्धारित किया है.
लेकिन तब मैं इस गलती यहाँ बनाया है, कह रही है मैं कम से कम है या
10 के बराबर है.
लेकिन अगर आपको लगता है कि के माध्यम से, अगर मैं 0 में शुरू और फिर मैं जाना
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, मैं वास्तव में करने के लिए जा रहा हूँ
बाहर स्क्रीन के लिए 11 सितारों मुद्रित करने के लिए, क्योंकि मैं ऊपर चला गया है
करने के लिए और 10 के बराबर है.
तो यहाँ आसान तय तो क्या है?
दर्शक: [अश्राव्य].
डेविड जे मालन: बस इसे कम से कम करने के लिए बदल जाते हैं.
यदि आप वास्तव में चाहते हैं, तो आप यह कर सकते हैं.
लेकिन सामान्य रूप में, पर सिकोड़ी है.
और ऐसा करने के लिए 0 से गिनती शुरू सिर्फ कुछ तुम चाहिए
आम तौर पर इस्तेमाल किया हो.
अब, में और खुद के इस पूरे का निर्माण के बारे में क्या?
पाश के लिए यह लाइन 15 एक demarks.
तो के लिए एक समारोह नहीं है.
यह सिर्फ एक बयान है.
यह एक looping निर्माण है, जैसे हम खरोंच में देखा था.
और इसे तीन भागों में है.
सूचना है कि वहाँ पहली बार हिस्सा है
सेमीकोलन की बाईं.
वहाँ दो अर्द्धविराम के बीच में बीच का हिस्सा है.
और फिर वहाँ सही करने के लिए सही हाथ हिस्सा है
2 सेमीकोलन की.
अब, इनमें से पहला है क्या करता है?
दर्शक: [अश्राव्य].
डेविड जे मालन: वहाँ वापस?
हाँ?
दर्शकों: प्रारंभ.
>> डेविड जे मालन: प्रारंभ.
तो इसका क्या मतलब है?
हम एक मैं चर बुलाया की घोषणा की है.
यह int प्रकार की है, क्योंकि मैं int i निर्दिष्ट किया है.
और मैं 0 के मूल्य को आरंभ करने के दौरान कर रहा हूँ.
तो यह वास्तव में क्या कह रहा है?
यह प्रभावी रूप से कंप्यूटर के लिए कह रहा है हे, मुझे काफी दे
स्मृति, पर्याप्त रैम, एक संख्या फिट करने के लिए, और फिर डाल
राम की है कि हिस्सा में 0 संख्या.
और एक अलग रूप में, कितना बड़ा एक int आम तौर पर कम से कम अंदर है,
उपकरण के?
दर्शक: 32 बिट.
डेविड जे मालन: 32 बिट.
तो यह है कि मुझे 32 बिट दे, अन्यथा 4 बाइट्स के रूप में जाना जाता है का मतलब है,
और यह मान 0 डाल दिया है, जो बहुत आसान है क्योंकि
यह सिर्फ 0 से सभी बिट्स सेट का मतलब है.
>> तो अब, दूसरा हिस्सा यहाँ शर्त है.
और हालत, जैसा कि नाम से पता चलता है, क्या जाँच की है
फिर से और फिर चाहे वह सही है या गलत है.
तो यह कह रहा है कोड की निम्न पंक्तियाँ करते हैं -
अर्थात् 16 लाइन, कि केवल एक दांतेदार बना हुआ है क्योंकि
नीचे -
इतने लंबे समय के रूप में मैं कम से कम 10 है.
और इस लूप के माध्यम से प्रत्येक यात्रा के बाद,
incrementation है, जो इस मामले में मैं + +.
अब, यह मैं + + होना जरूरी नहीं है.
यह मैं हो सकता है.
लेकिन अगर मैंने ऐसा किया, व्यवहार क्या हो रहा है
इस कार्यक्रम का हो सकता है?
दर्शक: यह एक अनंत लूप होने जा रहा है.
डेविड जे मालन: यह अनंत लूप के कुछ प्रकार के होने जा रहा है,
जब तक हम अरब नकारात्मक 2 या तो बाद भाग्यशाली हो.
शायद चीजों के आसपास परिमित की प्रकृति द्वारा लपेटो जाएगा
बिट्स की संख्या है कि हम एक int के लिए आवंटित किया है.
लेकिन यह निश्चित रूप से अब तक 10 से अधिक पुनरावृति करने के लिए जा रहा है और
निश्चित रूप से अधिक से अधिक 11 बार.
>> और अब, बस के रूप में एक अलग एहसास है, कि मैं + + और मैं -
वास्तव में सिर्फ वाक्यात्मक चीनी हैं.
यह सिर्फ क्या एक छोटे से अधिक के लिए आशुलिपि संकेतन है
स्पष्ट रूप से इस प्रकार के रूप में लिखा है:
मैं मैं = 1 +.
कि मैं करने के लिए समान है + +.
यह बस की तरह सुंदर लग रहा है कहने के लिए मैं + +.
यह अधिक संक्षिप्त है, और अधिक पठनीय है.
और इसलिए ज्यादातर लोगों के बजाय कि क्या.
लेकिन इस के लिए कार्यात्मक समान है
क्या हम सिर्फ देखा.
तो संक्षेप में, जल्दी तय यहाँ सिर्फ कहने के लिए मैं पुनरावृति
0 से सभी तरह से ऊपर कम से कम 10.
और फिर हम वास्तव में 10 सितारों मिलेगा.
>> तो चलो इस प्रयास करें.
मुझे नीचे में टर्मिनल खोलने.
मुझे इस निर्देशिका में जाना है कि यह अंदर है
और मैं यह अब के लिए बजना के साथ स्वयं संकलन करने के लिए जा रहा हूँ.
और मैं के रूप buggy1.c इस संकलन, दर्ज करने के लिए जा रहा हूँ.
और अब buggy1, इसलिए ऐसा कोई फ़ाइल या निर्देशिका
buggy1 कहा जाता है?
दर्शक: [अश्राव्य].
डेविड जे मालन: हाँ.
तो यह वास्तव में a.out कहा जाता है.
तो अगर तुम सिर्फ बजना चलाने के लिए याद करते हैं, जहां बजना है
संकलक, और आप का नाम आप चाहते निर्दिष्ट नहीं करते
अपने कार्यक्रम के लिए देते हैं, यह a.out डिफ़ॉल्ट जा रहा है.
तो वास्तव में अगर मैं रास करते हैं -
उफ़.
और मैं फ्लॉप - काला और सफेद मुद्दे
आप ठीक किया गया है का सामना करना पड़ा.
लेकिन मुझे यह करना.
वहाँ हम वहाँ बाएं हाथ के तरफ a.out है.
तो हम buggy1 के बजाय a.out चलाने की है.
>> तो मुझे आगे जाना है और इस करते हैं.
. / A.out दर्ज करें.
और जाहिरा तौर पर मैं क्या नहीं किया?
दर्शक: सहेजें.
डेविड जे मालन: मेरी फ़ाइल सहेजें.
तो यह है कि आसानी से नियंत्रण एस मार, या के लिए जा रहा द्वारा हल है
फ़ाइल, जैसे ज्यादातर कार्यक्रमों में सहेजें.
मुझे यहाँ से नीचे जाना, स्क्रीन स्पष्ट है, इसे फिर से चलाने.
और वहाँ अभी भी एक बग है.
तो क्या जा रहा है -
दर्शक: आप संकलन नहीं किया.
डेविड जे मालन: आह, अच्छा है.
मैं यह संकलन नहीं था.
एक बेवकूफ की तरह, मैं कोड में देख रहा हूँ देखने के लिए क्या गलत है.
तो बजना buggy1.c, अब a.out.
ओफ़्फ़ बचाया.
>> तो यह एक छोटे बदसूरत लग रहा है क्योंकि वहाँ कोई नई लाइन है
कार्यक्रम में कहीं.
लेकिन फिर, कि सिर्फ एक सौंदर्य विस्तार है.
और कम से कम अगर हम उन बाहर गिनती, हम चाहिए
अब ऐसे 10 सितारों को देखने.
खैर, इस 2 उदाहरण वार्म अप के बारे में क्या?
तो buggy2 में, मैं दावा है कि इस संस्करण, भी मुद्रित करने के लिए,
10 सितारों, एक प्रति पंक्ति.
इस समय तो मैं एक newline चरित्र है, बस बनाने के लिए
एक छोटे से सुंदर बातें.
लेकिन बजाय मैं क्या मिलता है यह है.
तो मुझे बजना buggy2.c दर्ज करें.
अब यह फिर से a.out कहा जाता है.
दर्ज करें.
मैं केवल एक नई लाइन, केवल बहुत पिछले नई लाइन देखना है कि
अगली पंक्ति में मेरे शीघ्र चाल.
और अभी तक स्पष्ट रूप से मैं * किया गया मुद्रण है, तो एक नई लाइन,
*, तो एक नई लाइन.
लेकिन यहाँ बग क्या है?
हाँ?
दर्शक: [अश्राव्य].
>> डेविड जे मालन: बिल्कुल सही.
तो अजगर, जहां खरोज की तरह कुछ भाषाओं के विपरीत,
वास्तव में कार्यात्मक अर्थ है,
सी की तरह भाषा -
जैसा कि हम देखेंगे, PHP, जावास्क्रिप्ट -
खरोज 'मानव लाभ के लिए सच है.
तथ्य यह है कि मैं 16 और 17 लाइन दांतेदार बना है तो बहुत अच्छा लग रहा है,
लेकिन यह कोई कार्यात्मक अर्थ यहाँ है.
अगर मैं दोनों लाइनों के लिए भाग के रूप में निष्पादित करने के लिए करना चाहते हैं
पाश, तो मैं ऐसा करने से उन्हें घुंघराले ब्रेसिज़ में लगा देना चाहिए.
आप केवल उस कोने में कटौती कर सकते हैं और अगर में घुंघराले ब्रेसिज़ चूकना
मामला क्या है?
दर्शक: बस एक लाइन.
डेविड जे मालन: बस एक लाइन.
तो यह है कि बस वाक्यविन्यास विस्तार का एक अच्छा प्रकार की तरह है कि इतने
आप समय बर्बाद नहीं तीन लाइनों लेखन करते हैं, जिनमें से दो हैं
घुंघराले ब्रेसिज़, सिर्फ कोड की एक लाइन लिखने के लिए.
लेकिन अगर आप दो या अधिक लाइनों है हम,
वास्तव में यह करने की जरूरत है.
>> तो अब मुझे इस बचाने के लिए.
मुझे आगे जाना है और फिर से चलाने के बजना.
तो मुझे a.out फिर से दौड़ना, और अब मैं उन्हें एक प्रति पंक्ति.
अब, a.out फिर एक कार्यक्रम के लिए एक गूंगा नाम की तरह है.
मैं बजना कैसे बताने के लिए वास्तव में मुझे एक फ़ाइल नाम दे सकते हैं
buggy2 ही तरह है कि अधिक उपयोगकर्ता के अनुकूल है?
एक छोटे से अधिक स्पष्ट रूप से?
दर्शक: [अश्राव्य].
डेविड जे मालन: ठीक है, तो मैं वास्तव में बहुत ले जा सकते हैं
उपयोगकर्ता के अनुकूल शॉर्टकट और सिर्फ लिखने buggy2 बनाते हैं.
मैं नहीं ग निर्दिष्ट करते हैं, इस मामले में और हिट दर्ज करें.
और क्या पड़ता है यह मेरे लिए buggy2.c compiles
बजना पूछ लिए करते हैं.
विशेष रूप से, यह बजना कहता है, यह बजना चलाता है जिस तरह से अधिक का उपयोग करते हुए
कमांड लाइन तर्क या स्विच की तुलना में मैं वास्तव में जरूरत है.
समय में, हम वापस इन विभिन्न सब क्या करने आया हूँ
गुप्त बंटे अभिव्यक्ति का मतलब है.
लेकिन अब के लिए, कि बस मुझे की परेशानी की बचत है
याद करने के लिए कर रहे हैं और उन सभी टाइप करने
विभिन्न बंटे अभिव्यक्ति.
और यह के ऊपर अंततः
कि अब मैं buggy2 है.
अगर मैं यह करने के लिए मैन्युअल रूप से करना चाहते हैं, हालांकि मैं,
बजाय यह कर सकते हैं -
बजना ओ buggy2 और फिर buggy2.c.
और कहा कि इसी तरह मुझे एक buggy2 नामक एक फाइल दे देंगे.
>> तो संक्षेप में, बजना संकलक है.
सिर्फ एक उपकरण उपयोगकर्ता के अनुकूल है कि हम और अधिक उपयोग कर सकता हूँ
और अधिक, क्योंकि यह सिर्फ करने के लिए शुरू
हमारे लिए चीजों को आसान बनाने में.
और हम 0 अंत में लौटने के लिए,.
अभी के लिए, बस, लेकिन क्योंकि हम उस भाग चिढ़ा शुरू करेंगे
और बुधवार को आज.
इस में से किसी पर कोई सवाल?
हाँ?
दर्शक: [अश्राव्य]
वहाँ उद्धरण में रास?
डेविड जे मालन: ठीक है.
जब मैं उद्धरण में टाइप रास, कि मुझे कुछ जादू कर रहा था
पर्दे के पीछे एक बग को ठीक करने के लिए.
मैं भूल गया, जैसे हम पर दिया गया है आप में से कई कह
चर्चा बोर्डों, करने के लिए -
हम इस अब क्या करेंगे - sudo yum-y appliance50 अद्यतन.
वूप्स, कि कि सही वर्तनी है.
तो उपकरण एक ऑपरेटिंग सिस्टम की तरह है.
यह इस ऑपरेटिंग प्रणाली बुलाया Fedora चल रहा है.
और अब मेरी धीमी गति से इंटरनेट कनेक्शन की वजह से, मैं
वास्तव में यह hosed.
तो sudo yum अद्यतन चल रहा है, के रूप में हम आपको बताने के लिए
समस्या सेट, अनिवार्य रूप से स्वत: अद्यतनों को चलाने की तरह है
मैक ओएस या विंडोज में.
और के बहुत शुरू में इस चलाने के लिए कारण
समस्या सेट कर दिया जाता है, क्योंकि जब हम उपकरण बनाया है,
गड़बड़, और मैं गलती से अपने कार्यक्रमों के सब देखो
एक काली स्क्रीन पर काला है, जो कारण है कि आप उन्हें देख नहीं रहे हैं
डिफ़ॉल्ट रूप से.
लेकिन उपकरण के नवीनतम संस्करण को हल करता है.
और मैं ब्रेक के दौरान तय है कि एक बार मैं इंटरनेट
कनेक्टिविटी.
>> तो उद्धरण सिर्फ मेरी गलती खाल, बहुत सावधानी से
जाहिरा तौर पर.
अन्य प्रश्न?
हाँ?
दर्शकों: कहाँ से आया है?
[अश्राव्य]
: डेविड जे मालन अच्छा सवाल है.
कहां से आया है?
यह एक Linux कार्यक्रम है कि कई वर्षों के लिए ही अस्तित्व में है, लंबे समय है
CS50 पहले.
और यह Fedora की तरह एक ऑपरेटिंग सिस्टम के साथ आता है.
यह CS50 लाइब्रेरी से नहीं आया है.
वास्तव में, केवल बातें है कि CS50 पुस्तकालय से आते हैं
इस प्रकार अब तक, कि हमने देखा है, GetString, GetInt, सभी के हैं
उन कार्यों जाओ, और शब्द स्ट्रिंग, और कुछ करने के लिए
हद तक, bool शब्द.
लेकिन हम उस चिढ़ाने के अलावा जब हम CS50 में डुबकी हूँ
ही उपकरण.
>> तो हाँ, एक और सवाल यहाँ.
दर्शक: जब आप बनाने के लिए और फिर छोटी गाड़ी कहा, कैसे करता है
कंप्यूटर [अश्राव्य] को जानते हो?
: डेविड जे मालन अच्छा सवाल है.
तो जब आप बस चलाने buggy1 बनाने या buggy2 बनाने, कैसे
पता नहीं है बनाने के लिए?
तो डिफ़ॉल्ट रूप से, अगर आप buggy1 बनाने के लिए लिखते हैं, एक के लिए लग रहा है
फ़ाइल buggy1.c बुलाया.
और फिर यह उपयुक्त बजना आदेश निष्पादित करता है,
जिससे डिफ़ॉल्ट उत्पादन a.out बुलाया फ़ाइल अधिभावी.
वास्तव में, अगर हम क्या कर देखो, क्या -
चलो इस छोड़ने के.
अगर हम क्या वास्तव में कर कर देखो, buggy2 बनाने,
यह पहले से ही है तिथि करने के लिए.
तो मुझे rm आदेश को हटाने,
मैं कार्यक्रम से पहले लिखा था.
Y-E-S पुष्टि करने के लिए कि मैं इसे हटाना चाहते टंकण.
अगर मैं अब कर सकता हूँ, कि यह बहुत ही लंबी लाइन में नोटिस,
इस आखिरी बात यहाँ है buggy2, ओ.
सभी कर रही है कि तर्क गुजर रहा है, तो बात करने के लिए
बजना, ताकि मैं इसे अपने आप टाइप नहीं है.
>> सब ठीक है तो, प्रशासनिक की एक त्वरित जोड़े
घोषणाओं.
तो वर्गों के लिए है, जो आधिकारिक तौर पर इस आ रहा शुरू किया
रविवार, आप हमेशा लाना चाहता हूँ, हूँ अगर
आप एक, एक लैपटॉप है.
यदि आप एक लैपटॉप नहीं है, बाहर से मुझे तक पहुँचने
मुझे एक ईमेल छोड़ने.
और हम बाहर एक कार्यप्रवाह आंकड़ा हूँ.
आम तौर पर आप अनुभाग में क्या मिलेगा है कि वे भाग रहे हैं
वैचारिक हिस्सा हाथों पर.
हम विशेष रूप से सवालों के अनुभाग के भाग का उपयोग करेंगे
सप्ताह की समस्या सेट, कुछ के माध्यम से चलना
व्याख्यान से वैचारिक सामग्री.
और कहा कि मौजूदा समस्या सेट में सब है.
और हम भी कुछ हाथ पर गतिविधियों में गोता, कभी कभी हूँ
जो करने के लिए प्रस्तुत किया जाना आवश्यक हो जाएगा, कभी कभी
जो नहीं होगा.
उदाहरण के लिए, यह 1 सप्ताह, वे एक बस के रूप में रहे हैं मतलब
वार्म अप व्यायाम.
और आप पाएंगे कि उन समस्याओं को वास्तव में कि बस रहे हैं.
वे काफी छोटा होना चाहिए रहे हैं, लेकिन जरूरी नहीं
तुच्छ लिखने के कार्यक्रम, कि जरूरी नहीं कर रहे हैं
में और खुद को रोमांचक रहे हैं, लेकिन अच्छा के लिए अवसरों की
वाक्य रचना के साथ अभ्यास करने के लिए, एक के आराम में नए कार्यों के साथ,
अनुभाग जहां आप अपने सहपाठियों के कुछ है के रूप में उपस्थित
TF के रूप में अच्छी तरह से.
>> और हम समय के साथ क्या करेंगे CS50 Spaces नामक उपकरण का उपयोग करने के लिए है,
सिर्फ CS50 उपकरण का उपयोग करने के बजाय, आप जिससे
बजाय एक ब्राउज़र में एक वेब पेज के लिए जाना है, जहाँ आप में सक्षम हो जाएगा
एक ब्राउज़र विंडो में कोड लिखने अनुभाग दौरान.
और फिर अगर आप में चुनते हैं, अपने शिक्षण साथी तो दिखा सकते हैं
जो कुछ भी यह है कि आप अपने ब्राउज़र में अपनी स्क्रीन पर टाइप कर रहे हैं
कक्षा के सामने खिड़की, चाहे या गुमनाम
सार्वजनिक रूप से, इतना है कि वह या तो साथ के माध्यम से चल सकता है
अपने सहपाठियों क्या आप अच्छी तरह से किया, तो आप क्या अच्छी तरह से नहीं कर था.
और फिर, बाकी का आश्वासन दिया है कि इस सब के अच्छी तरह से बेनाम किया जा सकता है.
लेकिन यह बहुत अधिक के लिए एक अच्छा अवसर हो जाएगा
व्याख्यान की तरह कुछ से अन्तरक्रियाशीलता की अनुमति देता है.
>> बीच में, हम इन बातों सुपर बुलाया होगा
वर्गों, जो वैकल्पिक हैं, लेकिन में हर किसी के लिए खुले हैं
वर्ग, इतना है कि आप इस के लिए सामूहिक रूप से अधिक कर सकते हैं
समस्या एक सेट.
यहाँ अनुसूची है.
यह भी cs50.net में मुखपृष्ठ पर पोस्ट किया है.
सूचना है कि वहाँ एक हैकर विशिष्ट हो जाएगा
एक कल दोपहर.
और हम एक आज और कल एक फिल्म और उन पोस्ट करेंगे
24 घंटे के भीतर ऑनलाइन.
तो अगर आप इन बार के किसी भी नहीं कर सकते हैं, चिंता करने की ज़रूरत नहीं है.
और फिर, अनुसूची अब ऑनलाइन है cs50.net पर.
>> ही सेक्शनिंग के मामले में, आप एक मिल गया है चाहिए
आप कोर्स के होमपेज पर जाने के लिए लगता है निर्देश ईमेल
अपने अनुभाग के बाहर.
यदि जीवन बदल गया है और आप अपने अनुभाग बदलने की जरूरत है,
एक समस्या नहीं है.
वही समान यूआरएल, cs50.net/section, विलक्षण वापस जाओ,
और आप बाहर ही फार्म भरने इतना है कि आप कर सकते हैं
तो हमें अपनी वरीयताओं को दे.
और हम हम क्या कर सकते हैं के रूप में सप्ताह के अंत तक का पालन करेंगे
समायोजित.
पिछले हफ्ते याद है, कि हम CS50 चर्चा का उपयोग करने का प्रस्ताव है,
पाठ्यक्रम के व्याख्यान में चर्चा उपकरण,.
तो हम 40 सवाल पूछा किया गया और था
व्याख्यान के दौरान जवाब दे दिया.
तो यह अच्छी तरह से काम करने लगता है, इसलिए हम जारी रखेंगे
यह करने के लिए कोशिश कर रहा है.
अगर, व्याख्यान के दौरान, आप सिर्फ आराम से ऊपर उठाने के नहीं लग रहा है
अपने हाथ, एक समस्या नहीं है.
Cs50.net/discuss जाएँ, वहाँ के बाद, और हमारे शिक्षण का एक
साथियों यह या तो इलेक्ट्रॉनिक जवाब देना होगा या बढ़ा उनके
हाथ आपकी ओर से पूछने के लिए, निर्भर करता है गुमनाम
प्रश्न की प्रकृति पर.
और प्रतिक्रिया के संदर्भ में, आम तौर पर psets होगा
एक सप्ताह के भीतर लौट आए.
क्योंकि यह थोड़ी देर लेता है वर्गों के लिए प्राप्त करने के लिए
संतुलन, 1 pset, 0 और 1, एक छोटा सा हो जाएगा
देरी के रूप में बातें बसने.
लेकिन उस के लिए सप्ताह में रहने tuned लिए आते हैं.
>> ठीक है, तो मुझे मेरी गंभीर पर डाल
बस एक पल के लिए आवाज.
तो यह वास्तव में एक दिलचस्प जलवायु है
इस चर्चा कर रहे है, क्या अन्य बातों के साथ
परिसर से संबंधित बहां पर चल रहा है.
लेकिन CS50 निश्चित रूप से इस विशेष के अपने इतिहास पड़ा है
के रूप में हर वर्ष के रूप में ज्यादा है, इस कोर्स में, के लिए कई विषय है,
साल, विज्ञापन बोर्ड वर्ग के लगभग 3%.
यह सबसे हाल ही में वर्ष, 2011, CS50 35 छात्रों विज्ञापन - चढ़ा.
मुझे लगता है, स्पष्टता की कमी की वजह से नहीं है.
एहसास है कि पाठ्यक्रम पाठ्यक्रम में, वहाँ के एक पृष्ठ है
बयान समझा जहां लाइनें हैं.
वह उसी बयान हर एक पर दोहराया है
समस्या एक पृष्ठ पर सेट है.
>> इसलिए मैं वास्तव में सिर्फ यह आज उल्लेख बनाने के लिए
इस के प्रति जागरूक लोगों के.
और हम अलग अलग चीजों की कोशिश की है.
और मैं क्या सोचा था कि हम आज करना होगा बस एक पल लेने के
वास्तव में पिछले मामलों में कि ऊपर आ गए में से कुछ पर देखो.
बजाय इन के रूप में गंदे छोटे से रहस्य वास्तव में रखने के लिए,
बाहर बिंदु छात्रों क्या किया है और कैसे हम का पता चला है
और यह वास्तव में व्यापक प्रेरणा के लिए क्या है
भी इस बातचीत हो रही है.
तो उस से कहा, लाइन अनिवार्य रूप से यह है -
पाठ्यक्रम के अनुसार, आप का स्वागत कर रहे हैं, आप कर रहे हैं करने के लिए प्रोत्साहित किया है,
सहपाठियों के साथ बात करते हैं.
कि इन सहयोगी होने के पूरे उद्देश्य है
Annenberg में कार्यालय समय के लिए और लोगों को प्रोत्साहित
अंतिम परियोजना के लिए एक साथ काम करने के लिए.
लेकिन लाइन जब यह समय आता है के लिए वास्तव में लिखने के लिए तैयार है
अपने अंतिम समाधान.
अंग्रेजी में बोलते हुए, पूरी तरह से ठीक है, छद्म कोड में बोल रहा हूँ,
पूरी तरह से ठीक है.
एक सहपाठी अपने pset ईमेल, दे उन पर देखो
स्क्रीन के रूप में हाथ टाइपिंग जारी,
लाइन पर के रूप में अच्छी तरह से.
क्या विशेष रूप से लाइनों के लिए पाठ्यक्रम देखो.
>> लेकिन यह कैसे एक दुर्भाग्य है की सिर्फ एक चित्र पेंट करने
वास्तविकता का एहसास है, कि वहाँ वेबसाइटों वहाँ से बाहर कर रहे हैं कि
इस वर्ग और कई अन्य वर्गों से समाधान हो.
तथ्य यह है कि आप या आप में से 3% से कुछ पता है कि यह मौजूद है
इसका मतलब है कि हम जानते हैं कि यह मौजूद है.
तथ्य यह है कि इस तरह वेबसाइटें हैं तुम कहाँ
किसी को भुगतान करने के लिए वास्तव में अपनी समस्या सेट कर सकते हैं - यह था
एक वास्तविक मामला है कि पिछले साल आया.
यह एक odesk.com वेबसाइट बुलाया है.
और टिम व्यक्ति के नाम है जो पर पोस्ट किया गया था
इस वेबसाइट और किसी ने पूछा में अपने 7 pset
इस विशेष मामले.
खैर, odesk.com बहुत Google-सक्षम है, और हम भी कर रहे हैं
Googling में बहुत अच्छा है.
यहां भी, वहाँ साइटों रहे हैं - और यह एक जगह है
नृशंस, स्पष्ट है.
[हँसी]
डेविड जे मालन: इस साइट के बारे में मजेदार बात यह है अगर
आप पृष्ठ के बारे में पढ़ा है, वे अपने कॉर्पोरेट के बारे में बात करते हैं
संस्कृति और कैसे ग्राहक सेवा उनकी संख्या एक है
प्राथमिकता है, यकीन है कि अपने कार्य मिल
समय पर बदल गया.
>> लेकिन सभी गंभीरता में, फिर से, तथ्य यह है कि इन साइटों
मौजूद हैं, हम भी एहसास है, के जानकार हैं
इन साइटों की तरह.
और आप क्या की भावना दे यह आम तौर पर रूपों
लेता है, हम आम तौर पर महान घोटालों नहीं है जहां लोगों को
भारी पैमाने के किसी भी प्रकार पर सहयोग कर रहे हैं, बल्कि
यह कमजोरी की इन देर रात क्षण है, जहां तुम इतनी है
करने के लिए और बहुत कुछ करना है, यह 4:00 है, तुम थक रहे हैं, आप और
अपने आप को लगता है कि अच्छी तरह से है, मुझे सिर्फ मेरे पर एक नज़र रखना
रूममेट या मेरे दोस्त कोड या पसंद है.
और इस की अभिव्यक्ति दुर्भाग्य से छात्र शामिल
इस और छात्र बी प्रस्तुत की तरह प्रस्तुत करने कुछ
इस तरह से एक कंप्यूटर में कुछ निश्चित रूप से है, जो है,
विज्ञान वर्ग, उल्लेखनीय कंप्यूटर वैज्ञानिकों के लिए आसान है
सॉफ्टवेयर का पता लगाने के साथ.
यह एक आम प्रतिमान है, जहाँ आप सॉर्ट के
किसी के साथ काम कर रहे, में शायद में बात कर
अंग्रेजी, बस ठीक pseudocode,.
लेकिन तब यह समय आता है के लिए वास्तव में सबमिट, और psets
सिर्फ ईमेल या ड्रॉपबॉक्स या तरह के माध्यम से विमर्श करने के लिए.
लेकिन एक के लिए यह कम स्पष्ट है कि यह है कि बनाने के प्रयास में
क्या हुआ है, तो यह है कि क्या प्रस्तुत है.
यह भी अच्छी तरह से लिखा टुकड़े यात्रा नहीं करता है
सॉफ्टवेयर की तरह हम वास्तव में पता लगाने के लिए
इन चीजों की तरह.
और वास्तव में हम क्या चलाने के लिए सॉफ्टवेयर है कि सभी तुलना
पिछले एक साल के सभी के खिलाफ इस साल की प्रस्तुतियाँ
प्रस्तुतियाँ, सब कुछ के खिलाफ हम पर पाया
वहाँ से बाहर हर काम वेबसाइट के खिलाफ इंटरनेट.
यह सब बहुत स्वचालित है.
और इसलिए हम यह वास्तव में महान निष्पक्षता में 97% करने के लिए जो
वास्तव में अपने गधे इस में और दूसरे में काम
वर्गों और प्रयास है कि सभी में डाल इतना है कि काम
वे अंततः अपने ही है प्रस्तुत.
और मैं उम्र के लिए जा सकते हैं.
>> ये सिर्फ पिछले साल के मामलों की एक मुट्ठी रहे हैं.
कुछ छात्रों को इन फ़ाइलों को हूबहू पेश 2 pset के लिए,
pset 3, 4 pset, 5 pset, 6 pset, pset 9.
इस मामले में, यह 0 प्रश्नोत्तरी और पिछले साल में दो जहां
छात्रों को हूबहू कई के बीच इस वाक्य प्रस्तुत
दूसरों "प्रकार के अनुरोध", डॉट, डॉट, डॉट.
तो 600 के एक वर्ग में भी हम यह पता लगा था
पर quizzes प्रस्तुत की.
तो संक्षेप में, यह स्पष्ट रूप से, मैं इस तरह की होने से नफरत है
बातचीत - लेकिन यह वास्तव में एक जानबूझकर प्रयास है
इस वर्ष के लिए नीचे उस संख्या को ड्राइव करने की कोशिश करने के लिए.
क्योंकि भले ही हम कहते हैं कि इन चीजों की तरह हर
वर्ष, मैं कुछ करने के लिए उस पर dwelled की वास्तविकता लगता है
सामान्य सेकंड से अधिक है और वास्तव में सिर्फ बाहर इशारा
कि क्या पसंद है, हाँ, इतना बड़ा सौदा नहीं लग रहे हो, कम से कम हो सकता है
इस खास पल के लिए वापस लगता है, दोनों निष्पक्षता में
अपने आप को और अपने सहपाठियों यहाँ.
तो अगर तुम कभी के रूप में किसी भी सवाल है जहां लाइन
है, कृपया सिर्फ मेरे लिए व्यक्तिगत रूप से बाहर तक पहुँचने के.
लेकिन जवाब हमेशा है, पूरी तरह से पर जोर दिया
अंतिम मिनट, एक दिन में देर से नकद.
या अगर यह किसी भी देर से दिन नहीं होने का एक मामला है,
ईमानदारी से, मुझे व्यक्तिगत तौर पर ईमेल करें.
हम कुछ समझ से बाहर हूँ.
कृपया अपना समय यहाँ नहीं डाल खतरे में हार्वर्ड में.
>> मैं तो अब, मैंने सोचा था कि हम मन हल्का चाहिए,
अगली स्लाइड के रूप में यह भी शामिल है.
[हँसी]
डेविड जे मालन: यह वेबसाइट बहुत अच्छा था.
मैं वास्तव में एक थोड़ा विचलित मिला.
यह एक है.
और फिर यह एक अद्भुत था.
ठीक है, तो है कि बिल्ली का बच्चा रात में देर से लगता है कि जब बनाने
उन फैसलों.
सब ठीक है, वापस तो अधिक मज़ा और कम गंभीर सामान, जैसे
शर्तें.
>> ठीक है, तो हम इन के बारे में संक्षेप में बात की.
यह कुछ ऐसा है कि शायद बहुत से परिचित है
स्क्रैच की दुनिया.
और खरोंच की दुनिया में, हम इस आवश्यकता को कभी कभी
सड़क में कांटे बनाने के लिए जाना.
या तो इस या कि या यह दूसरी बात यहाँ करना.
और जब हम ऐसा करना चाहते हैं, हम अब सी में, उपयोग कर सकते हैं अगर इस
किसी और का निर्माण किया.
और फिर यहाँ हम बूलियन अभिव्यक्ति है.
उदाहरण के लिए, बूलियन अभिव्यक्ति, हम कर सकते हैं, या
उन्हें एक साथ, समझ में आता है कि हम इस स्थिति या में
शर्त यह है कि.
और हम एक साथ समझ में आता है कि हम चाहते हैं, उन्हें कर सकते हैं
इस हालत और उस स्थिति की जाँच करें.
और यहाँ हम अब एक स्विच बयान है, जो ऐसा नहीं है
शर्तों के उन प्रकार के वाक्य रचना इसी तरह की है, लेकिन यह
हमें अगर के बराबर है, और अगर, और अगर, और करने के लिए अनुमति देता है
अगर, और बस उन्हें मामले से मामले enumerating तरह
मामले ने मामले से.
तो हम उन आखिरी बार देखा था.
और फिर हम loops तरह चीजों पर छू शुरू कर दिया.
हम इनमें से किसी एक के बस एक पल पहले देखा था.
लेकिन वहाँ इन अन्य looping constructs हैं.
>> उदाहरण के लिए, यह एक यहाँ.
तो, जबकि (शर्त), इस बात को फिर से और फिर से करना.
तो मौलिक, क्या इस बीच अलग किया जा रहा है
पाश और यहाँ इस जबकि पाश के लिए?
पाश और इस जबकि पाश के लिए यह.
हाँ?
वह क्या है?
दर्शक: [अश्राव्य].
डेविड जे मालन: अच्छा.
तो पाश हालत के लिए, जबकि वहाँ स्पष्ट रूप से
अधिक वाक्यविन्यास.
इस initialization है, वहाँ इस अद्यतन है.
एक समय पाश में, वहाँ सिर्फ इस शर्त है.
तो ऐसा लगता है कि यह एक बनाम नीचे के लिए मुकाबले छोटी है
पाश, जिसका मतलब है कि अगर हम चर करना चाहते हैं और हम चाहते हैं
incrementation है, हम वास्तव में है
इस बात को खुद करते हैं.
>> तो मुझे आगे जाओ और जीएडिट खोलने के.
मुझे उपकरण पर स्विच.
और चलो बस एक त्वरित छोटा सा उदाहरण है कि
इनमें से एक दूसरे से अलग करता है.
और मेरे मन की पीठ में, मैं एक बात कहना चाहिए.
मैं विशेष रूप से नाम टिम उल्लेख किया.
टिम था वास्तव में कोई है कि एक छात्र को करने के लिए मिल की कोशिश की
उनके लिए अपने होमवर्क.
हम उस विशेष खंड में कोई टिम था.
तो एहसास है, ऐसा न हो कि मैं एक छात्र बताया, यह एक छात्र नहीं था.
यह इंटरनेट पर एक यादृच्छिक व्यक्ति बातें कर रही थी
प्रॉक्सी पिछले साल से.
तो हम भी हैं.
तो इस मामले में, मुझे आगे जाना है और
एक नई फ़ाइल खोलने.
फ़ाइल, नई.
यह मुझे यहाँ एक टैब देता है.
मुझे आगे जाना है और यह के रूप में बचाने के loop.c.
मुझे जाने दो और सहेजें क्लिक करें.
और फिर यहाँ नीचे, चलो आगे जाना है और लेखन शुरू
# शामिल हैं.
मुझे अंदर ज़ूम
अब हम int मुख्य (शून्य) करूँगा.
<मैं, अब (int i = 0 के लिए मुझे आगे जाना है और क्या
ओह, 10, मैं + +).
और अब मुझे आगे जाना है और सितारा आप प्रिंट करने के लिए जा रहा हूँ मुझे लगता है कि
पहले किया था.
और फिर इस कार्यक्रम के अंत में, हम सिर्फ करने के लिए जा रहे हैं
एक नई लाइन प्रिंट, सिर्फ इतना है कि मेरे शीघ्र तो
सब गन्दा नहीं लग रहे.
0 वापसी.
वाक्य रचना सही लगता है?
अब तक.
तो देखते हैं.
>> तो मुझे बाहर ज़ूम, अपने टर्मिनल विंडो में चलते हैं.
और मुझे आगे जाना है और लूप को चलाने के लिए, क्योंकि मैं इस बुलाया
बात loop.c.
तो लूप करना.
संकलन ठीक लगता है.
मुझे पाश को चलाने के लिए, और अब दर्ज.
और यह 10 सितारों मुद्रित है लगता है.
इसलिए चलो बस एक जबकि पाश इस कन्वर्ट करने के लिए और क्या देखने के
हम यात्रा के मुद्दों पर की तरह.
तो बजाय, मुझे यहाँ जाओ और कहते हैं, जबकि मैं
कम से कम 10 -
मुझे पाश के लिए छुटकारा पाने के.
ठीक है, तो हम समस्याओं के एक जोड़े पहले से ही है.
तो हालत ही है, लेकिन मैं स्पष्ट रूप से याद कर रहा हूँ
initialization.
मैं incrementation याद आ रही है.
तो संकलक क्या संभावना मुझे बताना चाहिए जब मैं कोशिश
इस कार्यक्रम के संकलन?
हाँ?
दर्शक: [अश्राव्य].
>> डेविड जे मालन: अच्छा.
तो यह अघोषित की तरह कुछ कहने जा रहा है इस में
मामले में, मैं चर.
और वास्तव में, मैं अघोषित पहचानकर्ता का उपयोग करें.
और इसलिए इस PHP जैसी भाषाओं के साथ इसके विपरीत में है और
पायथन और रूबी, जो आप में से कुछ के साथ परिचित हो सकता है,
जहाँ आप चर का उपयोग शुरू करने के बस की तरह कर सकते हैं
बिना सोचे समझे और उन्हें की घोषणा के बारे में चिंता करने की ज़रूरत नहीं है
हमेशा स्पष्ट रूप से.
सी और जावा और सी जैसी भाषाओं में + +, आप होना चाहिए
स्पष्ट सुपर.
और यदि आप एक मैं चर बुलाया चाहता हूँ, तुम मुझे बताओ
चर का किस तरह का है.
तो हम यह तय करने के लिए के रूप में इस प्रकार के लिए जा रहे हैं.
मैं करने के लिए यहाँ जाओ और int i टाइप करने के लिए जा रहा हूँ, इसलिए,
मैं एक मैं चर बुलाया घोषित किया है.
अब, मैं एक कदम को छोड़ दिया है.
मैं स्पष्ट रूप से initialized है, नहीं है लेकिन यह देखते हैं कि अगर
कम से कम बनाता बजना रोकने के शिकायत.
तो मुझे इस कार्यक्रम के रीमेक.
>> ठीक है, अब यह सिर्फ शिकायत है
एक अलग कारण के लिए.
"'मैं' चर जब यहां इस्तेमाल किया uninitialized है." तो ठीक है,
जो बहुत स्पष्ट है.
प्रारंभिकीकरण सिर्फ यह एक मूल्य के बराबर की स्थापना का मतलब है.
और हम नहीं किया है कि, इसलिए मुझे कोशिश 0 के बराबर होती है.
अब यह फिर से कोशिश करते हैं और फिर से चलाने के बजना.
इस समय संकलित.
और मैं इसे चलाने के बारे में हूँ.
लेकिन बड़े पुराने अनंत लूप, क्योंकि मैंने किया है
initialization, मैं हालत किया है, लेकिन मैंने कभी नहीं किया है
incrementation की किसी भी तरह.
तो मैं incrementation कैसे कर सकते हैं?
वैसे, एक समय पाश में, ऐसा लगता है जैसे मैं जा रहा हूँ
यह लूप के अंदर ज्यादा है क्योंकि पहले की तरह करते हैं,
पाशन constructs करने के सप्ताह के साथ की तरह, उदाहरण
मोजे और आत्म की गिनती के साथ, हम करना पड़ा
बहुत अंत में कुछ करना चाहते हैं, अगली पंक्ति में वापस जाओ.
क्या होगा यदि मैं आगे जाना है और मैं इस + + यहाँ?
चलो यह भी संकलन नहीं.
मुझे पहले से ही पकड़ो.
यहाँ क्या गलत है?
दर्शक: [अश्राव्य].
>> डेविड जे मालन: तो यह निश्चित रूप से int नहीं है.
यह मैं है.
और पहले की तरह घुंघराले ब्रेसिज़,
खरोज पर्याप्त नहीं है.
तो अब मैं इस निर्माण किया है.
इसलिए जब मैं 10 की तुलना में कम है, एक सितारा मुद्रित करने के लिए,
तो मैं वेतन वृद्धि.
और जिस तरह से एक जबकि पाश काम करता है कि जैसे ही है तुम्हें मारा
लूप के नीचे है, जो इस मामले में 10 लाइन की तरह लग रहा है,
यह 6 लाइन के लिए वापस जाने के लिए जा रहा है, जो बिंदु पर
हालत फिर से जाँच की जाएगी.
और अगर मैं अभी 10 से भी कम है, तो हम लाइनों 8 करते हैं और हूँ
9 तो, तो हम 10 मारा, करेंगे और 6 से वापस जाओ, फिर से और
फिर से और फिर से, इतने लंबे समय के रूप में मैं कम से कम 10 है.
तो चलो फिर से चलाने के लिए यहाँ बनाने.
>> ठीक है, हम ठीक संकलित किया है.
मुझे पाश फिर से चलाने के चलो.
और अब यह वास्तव में काम करने लगता है.
Pluses और minuses तो यहाँ?
खैर, अभी तक वहाँ वास्तव में पीएलओ की एक पूरी नहीं है -
बहुत प्यारा है.
सब ठीक है, कि एक था - आह, कि एक दुर्घटना थी.
ठीक है, तो हम वापस पाश के लिए जाना है.
तो loops के लिए अच्छा कर रहे हैं क्योंकि वे सुपर स्पष्ट कर रहे हैं.
और फिर भी वे एक छोटे से लिखने के लिए clunky रहे हैं, यह
बहुत शक्तिशाली है और यह तुम क्या करने की अनुमति देता है
एक ही बार में कई बातें.
जबकि loops के लिए मूल्य की एक बड़ी राशि है नहीं लगता है बस
अभी तक, क्योंकि ऐसा लगता है जैसे हम सिर्फ अधिक काम करना है.
हम initialization डाल, यहाँ है
यहाँ नीचे अद्यतन करने के लिए, और हम वह सब करने के लिए याद है.
इसलिए हम समय में देखना है कि जब तक loops वास्तव में उधार दे दूँगा
खुद को सिर्फ अलग संदर्भों में, अलग डेटा
सूचियों और हैश तालिका संरचनाओं की तरह, हम चीजों को मिलेगा
मध्य सेमेस्टर.
लेकिन अब के लिए, पता है कि वहाँ इस 3 प्रकार के रूप में जाना जाता है एक है,
जबकि पाश.
और हम इस संक्षिप्त देखा है.
और इस 1 pset साथ सुपर मददगार हो सकती है.
आप के लिए कुछ करना चाहते हैं तो किसी भी समय की जाँच करें अगर
उपयोगकर्ता सहयोग किया, और अगर वे नहीं किया है, इसे फिर से करना है, एक है,
जबकि पाश ही तर्क के उस तरह के लिए उधार देता है.
क्योंकि के रूप में ऊपर से नीचे तक यहाँ आदेश देने से पता चलता है,
शाब्दिक अर्थ यह करते हैं.
और यह फिर से और फिर से करने के लिए, कि क्या हो सकता है?
शायद यह बुला GetInt या GetString और फिर मतलब
GetInt या GetString के मूल्य की जाँच और फिर चिल्ला
उपयोगकर्ता पर अगर वे उन्हें पूछ द्वारा सहयोग नहीं है
फिर से और फिर से.
तुम कहाँ कुछ एक बार करना चाहते हैं,
तो कुछ हालत की जाँच करें.
>> तो चलो इस प्रयास करें.
मुझे वास्तव में यह है, जबकि एक पाश के लिए अब बदल.
और मुझे आगे जाना है और निम्न कार्य करने के लिए जा रहा हूँ.
तो निम्न कार्य करें.
चलो int i = (GetInt), लेकिन हम पहले उपयोगकर्ता बता
क्या करना है.
तो एक छोटे से अलग इस बार.
"मुझे एक int दे".
तो मैं printf कि के लिए इस्तेमाल करेंगे.
और अब मैं यहाँ नीचे जाने के लिए जा रहा हूँ, और मैं यह करने के लिए जा रहा हूँ
जबकि मैं है, चलो कहते हैं, की तुलना में अधिक से अधिक -
चलो देखते हैं, मैं है, कहते हैं, कम से कम 0, या मैं है
10 से अधिक है.
दूसरे शब्दों में, मैं 1 से 9 तक की संख्या चाहते हैं, बस
मनमाने ढंग से.
तो मैं एक संयुक्त बूलियन अभिव्यक्ति का उपयोग कर रहा हूँ यहाँ
यकीन है कि मैं कम से कम 0 या 10 से अधिक है, जिसमें
मामले में मैं इस लूप यहाँ फिर से करना होगा.
तो फिर, यह है -
जबकि मैं कम से कम 0 मैं या 10 से अधिक है.
>> तो अब आगे बढ़ो और इस बार हम किया है कि.
चलो बस एक त्वरित मानसिक स्वास्थ्य की जांच करते हैं.
printf ("धन्यवाद, मैं% d है" मैं).
तो यह सरल कार्यक्रम एक int के लिए उपयोगकर्ता पूछता है,
यकीन है कि यह कुछ रेंज, 1 से 9 तक की समावेशी के भीतर है बनाता है,
और फिर उन्हें याद दिलाता है कि क्या वे सिर्फ उपयोगकर्ता धन्यवाद
बस के रूप में एक छोटे से मानसिक स्वास्थ्य की जांच, टाइप.
लेकिन देखने के लिए अगर यह इरादा के रूप में काम करता है.
मुझे सिर नीचे जाने के यहाँ और पाश कर फिर से चलाने के.
हम्म.
"अघोषित पहचानकर्ता 'मैं' का प्रयोग". यह अजीब है.
मैंने सोचा था कि हम हल.
समान लक्षण लेकिन अलग कोड.
हाँ?
दर्शक: [अश्राव्य] दो अंदर, हम करने के लिए है
[अश्राव्य].
>> डेविड जे मालन: बिल्कुल सही.
तो यह वास्तव में हमें एक क्षेत्र के रूप में जाना जाता विषय की ओर जाता है.
यह पता चला है कि सी, फिर से, यह वास्तव में आप सचमुच लेता है.
और अगर आप कुछ इस तरह करते हैं, जहां आप एक int की घोषणा
और फिर यह कुछ मान असाइन करने के लिए, लेकिन आप है कि एक के अंदर करना
घुंघराले ब्रेसिज़ की जोड़ी, सी क्या करता है यह मानती है कि आप कि
केवल उन 32 बिट में जाना जाता है के रूप में मैं अस्तित्व के लिए करना चाहते हैं
लाइनों के संदर्भ में उन घुंघराले ब्रेसिज़ के संदर्भ में,
6 9 के माध्यम से. तो मैं घोषित है, और यह सौंपा है एक
8 लाइन में मूल्य है, लेकिन जैसे ही आप के बाहर मिल
घुंघराले ब्रेस नीचे 9 रेखा, मैं में नहीं रह गया है
गुंजाइश है, तो बात करने के लिए.
एस सी O-P-E. यह सही संदर्भ में नहीं रह गया है.
तो अब वहाँ नहीं है, मैं तो यह है कि लगता है जैसे हम भी नहीं था
यह सब पर की घोषणा की.
>> तो क्या इस तरह से कुछ के लिए तो तय है, अगर
कारण यह है कि मैं घुंघराले ब्रेसिज़ के भीतर घोषित किया जाता है, जो
जाहिरा तौर पर बुरा है?
यहाँ?
दर्शक: [अश्राव्य].
डेविड जे मालन: हाँ.
इसलिए हम यह इनिशियलाइज़ बाहर कर सकते हैं.
तो मुझे आगे जाना है और घोषणा जिससे भागों को हटा
मैं प्रकार निर्दिष्ट करने के लिए, और मुझे यह करना यहाँ.
तो लाइन में 5, यह अब कहते हैं, "मुझे एक int दे." यह मैं कॉल.
मैं लाइन में सूचना 9, मैं यह करने के लिए नहीं करना चाहती है, क्योंकि
पहले से ही 32 बिट है.
मैं एक के लिए कंप्यूटर पूछना नहीं चाहता
विभिन्न 32 बिट.
मैं ही उन 32 बिट का उपयोग करना चाहते हैं.
और अब क्योंकि मैं 5 लाइन में घोषित किया जाता है, यह अभी भी कानूनी
यह लाइन 11 और 12 लाइन में उपयोग करें.
>> तो मुझे इस recompile प्रयास करें और देखें
चिल्ला अगर बजना बंद हो जाता है.
लूप करना.
तो अब यह "समारोह के निहित घोषणा
'GetInt C99 में अवैध है ". वह क्या है?
हाँ?
दर्शक: [अश्राव्य].
डेविड जे मालन: हाँ.
तो अब है कि मैं वास्तव में GetInt का उपयोग कर रहा हूँ, यह कुछ नहीं है
है कि बस के साथ आता है सी. यह CS50 से आता है.
इसलिए हम इस यहाँ की जरूरत है.
और मुझे शीघ्र नीचे करने के लिए वापस जाना
यहाँ और फिर से चलाते हैं.
ठीक है, अंत में.
अब हम है कि और अन्य त्रुटि हल है.
चलो मुझे अब लूप को चलाने के लिए और देखो क्या होता है.
"मुझे एक int दे." मैं इसे 11 दे दूँगा.
मैं इसे -1 दे दूँगा.
मैं इसे foo दे दूँगा.
मैं इसे 5 दे दूँगा.
और अब यह वास्तव में काम करता है.
लेकिन शीघ्र यहाँ एक कारण के लिए बदल दिया है.
यह क्यों कहा इन बार के पुन: प्रयास करें, लेकिन मुझे एक दे
अन्य तीन बार int?
क्यों कि व्यवहार अलग है?
दर्शक: यह एक स्ट्रिंग दी.
डेविड जे मालन: क्षमा करें?
दर्शक: आप इसे एक स्ट्रिंग दिया.
डेविड जे मालन: हाँ.
तो हम इसे इस तीसरे प्रयास में एक स्ट्रिंग दिया,
जब मैं foo टाइप.
फू एक स्ट्रिंग है.
यह स्पष्ट रूप से एक int नहीं है.
और जिस तरह से कि CS50 GetInt लागू किया गया है है कि हम
की जांच नहीं अगर कुछ है 0 या कम से कम 10 से अधिक
आप के लिए, हम अग्रिम में कैसे जानते हो क्योंकि किस तरह के
int आप चाहते हैं?
लेकिन हम न्यूनतम आप के लिए जाँच, उपयोगकर्ता नहीं किया जा सकता कम से कम
एक पूर्णांक लिखें?
और अगर वे नहीं किया, हम टाइप करके उपयोगकर्ता पर चिल्लाना पर "उसे दुबारा कोशिश"
स्क्रीन.
>> तो अब हम एक प्रोग्राम है कि पाशन है. ठीक है.
अब, इनमें से जो बेहतर का निर्माण की तरह है?
तो यह है कि जहां चीजें थोड़ा गंदा पाने के लिए शुरू की है,
तथ्य यह है कि आप करने के लिए एक चर घोषणा यहाँ याद है
अगर आप इसे कुछ के अंदर उपयोग करना चाहते हैं
घुंघराले ब्रेसिज़ और बाहर.
लेकिन फिर भी अगर यह पहली बार में एक छोटे से गुप्त लग रहा है
नज़र, बस फिर, सरल तर्क याद है.
आदेश में सी में कुछ का उपयोग करने के लिए, चाहे वह एक समारोह है या
यह एक चर है, तो आप इसे शामिल करने के लिए अगर यह एक समारोह है
कुछ पुस्तकालय में, या आप यह घोषणा की जरूरत है.
लेकिन अब आप तथ्य की अतिरिक्त प्रति जागरूक होना चाहिए कि
आप इसे सही दायरे में घोषित कर रहे हैं.
आप यह कोष्ठक के अंदर नहीं डाल रहे हैं बहुत कसकर.
>> तो मुझे वास्तव में वापस रोल.
यदि हम अपने उदाहरण के लिए पहले से जाना है, और मैं जाना
int के लिए वापस करने के लिए, int i = 0, मैं <10; i + +, और मैं
इस तरह printf सितारों, और फिर बंद paren, और अब क्या
printf मैं अब है -
एक ही तर्क के अनुसार, क्या होगा जब मैं कोशिश
इस कार्यक्रम के संकलन?
दर्शक: पहचानकर्ता अमान्य है.
डेविड जे मालन: तो यह एक अमान्य पहचानकर्ता है,
अघोषित पहचानकर्ता.
अब, इस कारण थोड़ा अलग है.
वहाँ कोई घुंघराले ब्रेसिज़ स्पष्ट रूप से यहाँ है, लेकिन एक ही
विचार, गुंजाइश की एक ही कहानी पर लागू होता है.
यदि आप एक के अंदर मैं की तरह एक चर की घोषणा की है
पाश के लिए है, भले ही आप स्पष्ट रूप से घुंघराले नहीं लिखा है
ब्रेसिज़, उनमें से मानसिक रूप से अभी भी वहाँ जा रहा है के रूप में, लगता है कि जो में
इस मामले में मैं केवल पाश के लिए अंदर के वैध है.
यह मान्य नहीं है एक बार आप अगली पंक्ति के लिए मिलता है, जो नहीं है
इस मामले में अब 10 है.
तो बस गुंजाइश है और इस तरह के कुछ मुद्दों.
सही, किसी भी सवाल?
>> ठीक है, तो यह एक तुच्छ सा कार्यक्रम की तरह है,
सिर्फ छोटे तारे मुद्रण.
लेकिन हम देखते हैं कि आप इस गीत यहाँ याद.
यह एक अविश्वसनीय कष्टप्रद गीत बच्चों पर गाना होता है
स्कूल बस और पसंद है.
लेकिन इसके बारे में अच्छी बात यह है कि यह इस cyclicity है,
यह "जिससे दीवार पर 99 बियर की बोतलें,
बीयर की 99 बोतलें.
एक नीचे ले जाओ, इसे पास के आसपास, पर 98 बियर की बोतलें
और दीवार "तो गीत 97 को दोहराता है, तो 96 है, तो.
95, फिर 94, सभी तरह से नीचे 0 यदि आप वास्तव में मिल गया है कि
बस पर दूर.
तो यह एक अच्छा कार्यक्रम को लागू करने की तरह है, क्योंकि मेरे
भगवान, अगर तुम सिर्फ कुछ के साथ इस लागू कर सकता है
कोड की लाइनों, आप इस के लिए पूरे गीत थूक सकता है
गीत काफी जल्दी.
लेकिन जिस तरह से साथ, हम अब के अलावा कुछ चिढ़ाने के शुरू कर सकते हैं
इन बुनियादी looping constructs और अब भी
कार्यों का परिचय है कि हम अपने आप को लिखने के लिए, मान देते हैं
कि हम चारों ओर से गुजारें.
लेकिन पहले, हम आगे क्यों नहीं जाना है और हमारे पाँच मिनट ले
यहाँ तोड़ दिया?
और जब हम वापस मिलता है, तो हम इस गीत गाऊंगा.
>> ठीक है, तो हम वापस आ रहे हैं.
और जब मैं कहना है कि अब हम इस गीत गाऊंगा, मेरा मतलब
प्रोग्राम, मौखिक रूप से नहीं.
तो यहाँ हम beer1.c है, जो इस बात का एक कार्यान्वयन है
विशेष गीत.
और बस स्पष्ट होना करने के साथ अपरिचित उन लोगों के लिए, क्या
इस बात की तरह लग रहा है, मुझे आगे जाना है
और beer1 दर्ज करें.
अब मुझे beer1 चलाने के लिए, और हम क्या देखेंगे - कितने की बोतलें
बियर के वहाँ होगा?
मैं 99 में टाइप करें, जैसे गीत कहते हैं.
दर्ज करें.
और अब अगर हम के माध्यम से स्क्रॉल
उफ़ - अगर हम इस सब के माध्यम स्क्रॉल, हम देखेंगे कि
यह वास्तव में पूरे गीत गाना नहीं था.
एक मिनट रुको.
मेरा स्क्रॉल पट्टी थोड़ा गड़बड़ है.
चलो बड़ी विंडो का उपयोग करें.
99 beer1, तो हम वहाँ जाओ.
यहाँ तो हम पूरे गीत, बहुत तेजी से गाया
कंप्यूटर की तुलना में यह हमारे द्वारा किया गया हो सकता है.
तो नोटिस, हालांकि, यहाँ चक्रीय प्रकृति.
यह कहना है कि 99, फिर 99, फिर "एक नीचे ले जाओ, इसे पारित
के आसपास, "फिर 98.
और अब यह फिर से और फिर से दोहराता है.
>> तो यह वास्तव में कुछ तरह के लिए एक सही मौका है
का निर्माण पाशन.
सूचना है कि मैं एक कोने यहाँ काटने की तरह कर रहा हूँ.
सूचना है कि मैं कह रहा हूँ "दीवार पर बीयर की 98 बोतलें,
दीवार पर बीयर की 97 बोतलें, "और है कि सिर्फ इतना था
कि जब हम बियर की एक बोतल के लिए मिलता है, मैं नहीं है
अंग्रेजी व्याकरण के बारे में चिंता करने की ज़रूरत है.
लेकिन हम भी अगर एक का एक छोटा सा के साथ यह तय कर सकते हैं
हालत, शायद.
यदि इस संख्या में विलक्षण है, आगे बढ़ो और "बोतल" कहते हैं,
अन्यथा अगर यह बहुवचन है, "बोतलों" कहते हैं.
लेकिन अब के लिए, मैं पूरी तरह से उस कोने में कटौती कर रहा हूँ.
तो देखते हैं क्या हम यहाँ मिल गया है.
तो हम शीर्ष पर कुछ टिप्पणी मिल गया है.
मैं इन दो पुस्तकालयों सहित हूँ के रूप में,
हम आमतौर पर किया गया है.
और अब मुझे पहले नीचे स्क्रॉल
कोड की वास्तविक लाइनों.
17 लाइन के मुख्य बंद kicks.
रेखा 21 और 20 बियर की बोतलें कैसे वहाँ हो जाएगा?
और फिर मैं GetInt कहते हैं.
और अब मैं एक मानसिक स्वास्थ्य की जांच का एक सा है.
>> तो यह एक परंपरा है कि अब हम अपनाने शुरू करेंगे
अधिक कड़ाई से उपयोगकर्ता इनपुट की जाँच करें.
कभी कभी तुम सिर्फ उन्हें फिर से शीघ्र नहीं करना चाहती
और फिर.
उपयोगकर्ता शिकंजा यदि और सहयोग नहीं करता है, तो ठीक है.
बाहर निकलें और सिर्फ उन लोगों के साथ सौदा नहीं है.
और इतना है कि मैं यहाँ क्या कर रहा हूँ.
यदि n 1 से कम है, मैं सिर्फ उपयोगकर्ता पर चिल्लाओ करने के लिए जा रहा हूँ,
"माफ करें, कोई मतलब नहीं है." और फिर मैं जा रहा हूँ
मनमाने ढंग से लौटने के 1.
तो फिर, यह सिर्फ एक सम्मेलन करने के लिए इस्तेमाल किया जाना है.
अभी के लिए, यह विश्वास पर ले.
लेकिन अब तक, हम हमेशा 0 है लौटने गया है क्योंकि,
हम 0 क्या अर्थ लौटने के लिए कहा है?
दर्शक: सफलता.
डेविड जे मालन: सफलता, वह सब है.
तो अब है कि हम अंत में करने के बारे में सोचना शुरू कर रहे हैं
गैर सफलताओं -
दूसरे शब्दों में, कोने मामलों, त्रुटि की स्थिति में
अब मैं एक अनंत आपूर्ति है, या कम से कम चार अरब
संभव चीजें हैं जो अपने कार्यक्रमों में गलत हो सकता है.
और मैं उन्हें व्यक्तिगत नंबर देने शुरू कर सकते हैं.
अब, आम तौर पर यह सिर्फ वापस suffices
0 के अलावा अन्य कुछ.
तो हम बस अब के लिए 1 वापस जा रहे हैं.
लेकिन 1 लौटने के लिए कारण है कि जैसे ही तुम वापस
1 लगता है, कार्यक्रम के आराम करने के लिए क्या होता है?
यह बंद हो जाता है.
बस.
तो तथ्य यह है कि मैं वापस आ रहा हूँ 1 प्रभावी है
इस कार्यक्रम के निष्पादन इतना है कि शॉर्ट सर्किटिंग
27 लाइन के नीचे कुछ भी नहीं क्रियान्वित जारी रहेगा.
के रूप में जल्द ही मुख्य रिटर्न के रूप में, कि यह है.
>> ठीक है, तो यदि उपयोगकर्ता सहयोग और हम 30 लाइन तक पहुँचने
क्योंकि वे एक वैध संख्या में टाइप, यहाँ मेरा है
इस गीत के कार्यान्वयन.
तो मैं पहली बार एक newline चरित्र प्रिंट, बस के लिए
सौंदर्यशास्त्र.
मैं अब एक पाश के लिए है.
और मैं एक बिट में बातें कर रहा हूँ नोटिस
एक अलग दिशा की.
मैं से कम नहीं है, मैं + + नहीं करना है.
मैं बजाय कह सकते हैं, मैं एक चर इनिशियलाइज़ इसे स्थापित करने के बराबर
n, संख्या उपयोगकर्ता में टाइप, तो निम्नलिखित ऐसा करने के लिए,
लंबे समय के रूप में मैं 0 से अधिक है, तो मैं -
एक बार आप इस लूप के एक चलना खत्म कर दिया है.
इसलिए हम नीचे गिनती पाश के लिए एक का उपयोग कर के रूप में अच्छी तरह से कर सकते हैं.
अब, यह बहुत ज्यादा सप्ताह एक सामान अब printf के साथ है.
तो प्रिंट% "दीवार पर बीयर की घ बोतलें." प्रिंट "घ
बियर की बोतलें. "" एक नीचे ले जाओ, इसे पास के आसपास. "प्रिंट
"दीवार पर% बियर की बोतलें." तो यह अभी भी% d है, लेकिन
सूचना है कि तर्क printf को बदलने के लिए है.
अल्पविराम के बाद, मैं मैं, क्योंकि मैं 99 कहना चाहता हूँ.
इस अल्पविराम के बाद, मैं मैं, क्योंकि मैं 99 कहना चाहता हूँ.
इस अल्पविराम के बाद, मैं मैं - 1, क्योंकि मैं 98 कहना चाहता हूँ
यह पहली यात्रा है, और इतना आगे.
और अब यहाँ नीचे, मैं सिर्फ कुछ बेवकूफ छोटी टिप्पणी है.
और फिर 42 लाइन, मैं इस सम्मेलन से 0 वापसी, वाचक है कि
सब कुछ ठीक है.
>> तो क्या हुआ अगर मैं goofed?
एक आम गलती यहाँ क्या हो सकता है?
खैर, क्या हुआ अगर मैं गलती से अच्छी तरह से कहा, मैं गिनती करने के लिए करना चाहते हैं
0 से नीचे, मैं दीवार पर 0 बियर की बोतलें करना चाहते हैं?
तो मैं कहता हूँ, मैं अधिक से अधिक या 0 के बराबर है.
क्या लक्षण है कि मैं अब देखना है अगर मैं recompile होने जा रहा है
beer1 और इसे चलाने के लिए?
दर्शक: नकारात्मक.
डेविड जे मालन: हाँ, यह नकारात्मक जाना वाला है.
यह एक बंद करके एक त्रुटि है, एक अविश्वसनीय
आम गलती बनाने के लिए.
चलो वास्तव में टर्मिनल विंडो के लिए वापस जाओ और इसे कर
यहाँ है, तो हम एक समय में अधिक देख सकते हैं.
दर्ज करें, बीयर की 99 बोतलें.
बंद करे, लेकिन हम कभी तो थोड़ा बहुत दूर.
हम गाना बहुत दूर नीचे गाया है, जैसे कि हम अब मारा
नकारात्मक संख्या.
तो यह काफी काम नहीं करता.
>> ठीक है, तो हम आसानी से तय कर सकते हैं कि करने के लिए वापस जा रहा द्वारा
जिस तरह से यह एक बार गया था.
लेकिन कुछ अवसरों अब क्या कर रहे हैं के लिए
सुधार?
खैर, मुझे beer2.c यहाँ खुला और नीचे स्क्रॉल और एक ले
इस संस्करण को देखो.
क्या पहली बात यह है कि आप में अलग रूप में कूदता है
इस संस्करण में यहाँ?
दर्शक: [अश्राव्य].
डेविड जे मालन: हाँ, तो कोई और अधिक मैं, क्योंकि यह करने के लिए हुई
मुझे आप जानते हैं कि क्या, मैं n के लिए उपयोगकर्ता पूछ रहा हूँ, और फिर मैं कर रहा हूँ
मैं n के बराबर की स्थापना, और फिर मैं मैं बदल रहा हूँ, लेकिन मैं कभी नहीं कर रहा हूँ
को छू n फिर.
तो क्या बिल्ली आप की बात एक और 32 का आवंटन था
बिट्स मैं सिर्फ इतना है कि मैं एक अलग चर हो सकता है कहा जाता है?
तो इस मामले में, मैं की तरह मान्यता है कि अनावश्यक
डिजाइन सुविधा.
जाना और अब मैं कहने जा रहा हूँ जबकि n 0 से अधिक है,
आगे और एक ही गीत प्रिंट, के रूप में printf एक n गुजर
दूसरा तर्क और n 2 तर्क के रूप में यहाँ नीचे 1.
और फिर इस लूप के प्रत्येक चलना पर आगे और बस जाओ
घटती ही एन.
अब, कार्यात्मक, इस कार्यक्रम
करने के लिए समान होने जा रहा है.
यदि मैं 99 में लिखते हैं, n 99 में शुरू होता है.
मैं घटाव, घटाव, घटाव, घटती.
मैं सभी तरह से नीचे पर बियर की एक बोतल के लिए जा रहा हूँ
दीवार, बियर की एक बोतल.
एक नीचे ले जाओ, इसे पास के आसपास.
0 की बोतलें बियर की दीवार पर ". अंत में, क्योंकि मैं
हालत सही हो.
यह 0 से अधिक है.
मैं इस गलती मत करना था.
>> तो जो बेहतर है, एक संस्करण या दो संस्करण?
इसलिए मैं दो के लिए बुड़बुड़ाना का एक गुच्छा सुना.
क्यों दो?
वह क्या है?
दर्शक: [अश्राव्य].
डेविड जे मालन: ओह, ठीक है.
तो यह 0 नीचे नहीं जाना है, लेकिन याद होगा, एक संस्करण में,
मूल सही संस्करण 0 या तो नीचे जाना नहीं था.
इतना याद है कि यह सही संस्करण है.
तो चलो कम से कम दो सही संस्करणों की तुलना.
संस्करण के पक्ष में एक तर्क क्या है
दो, मम्म्म, बेहतर है?
हाँ?
दर्शक: यह कम जगह का उपयोग करता है.
डेविड जे मालन: ठीक है, तो यह कम जगह का उपयोग करता है, है ना?
जबकि संस्करण एक n के लिए 32 बिट, और फिर एक और इस्तेमाल
मैं के लिए 32 बिट.
दो संस्करण n के लिए केवल 32 बिट का उपयोग करता है, इतना है कि
करने के लिए एक से अधिक किया जा रहा है.
अन्य विचार?
क्या किसी एक के पक्ष में बहस करना चाहते हैं?
हाँ?
दर्शक: आप n के लिए कोड का अतिरिक्त लाइन का उपयोग करने के लिए किया है.
>> डेविड जे मालन: ठीक है, ज़रूर.
तो यह है कि उचित नहीं है.
यह सिर्फ इसलिए कम से कम मेरे लिए,
मैं यह वास्तव में एक छोटे से messier लगता है, इस तथ्य का मतलब है कि
मैं एक में अपने तर्क के सभी encapsulate नहीं सॉर्ट कर सकते हैं
पाश के लिए सुंदर लाइन है, के रूप में पाश के लिए कर सकते हैं.
यहाँ, मैं एक तरह से इस n पर हमले करने के लिए है -
क्योंकि पाश के अंत में,
यह तार्किक आवश्यक है.
लेकिन यह किस तरह का मुझे गलत तरीके rubs, यह सिर्फ इसलिए कि
यहाँ के तर्क से अलग लगता है, हालांकि,,
फिर, यह आवश्यक है.
अन्य विचार?
हाँ?
दर्शक: [अश्राव्य].
>> डेविड जे मालन: हाँ.
तो क्या तुम अगर बजाय, गीत के अंत में, के लिए चाहते थे
फिर से बाहर गीत के नाम मुद्रित?
"बीयर की 99 बोतलें खेलने के लिए धन्यवाद", या कुछ और
कि जैसे मूर्ख है?
लेकिन मुद्दा यह है, तो आप मूल मूल्य के लिए उपयोग करना चाहता था.
तथ्य यह है कि आप या उत्परिवर्तित बदल हर n
चलना और इसलिए नष्ट कर दिया है अपने मूल मूल्य
मतलब है कि आप सिर्फ इतना है कि अंत में नहीं कर सकते हैं.
अब, यकीनन, हम स्पष्ट रूप से करने के लिए नहीं करना चाहती
कि इस कार्यक्रम में.
तो कौन परवाह करता है?
लेकिन यह एक बहुत ही वैध बिंदु है.
और ईमानदार होना, वहाँ वास्तव में कोई नहीं
यहाँ जवाब.
वे दोनों समान रूप से सही हो.
मैं तो दोनों तरह से आश्वस्त किया जा सकता है.
मुझे कहना होगा कि, सामान्य रूप में, यह एक अच्छा सिद्धांत है तुम अगर
कुछ मूल्य के लिए उपयोगकर्ता से पूछा और आप एक चर में संग्रहीत
n की तरह, बस की तरह के सिद्धांत पर, यह शायद अच्छा है
कि चारों ओर रखना.
और किसी भी डेटा आप फिर से और फिर बस के रूप बदलना चाहते हैं,
अपने आप को कि चर की एक प्रति देने के लिए, आपको लगता है कि सिर्फ इतना
मूल करने के लिए उपयोग किया है.
आप 32 से अधिक बिट्स खर्च कर रहे हैं, लेकिन वास्तविकता यह है कि
कंप्यूटर, राम के दो गीगाबाइट इन दिनों की तरह,
और हम 32 बिट से अधिक quibbling रहे हैं?
वास्तव में इस तरह के एक बड़ा सौदा नहीं है.
और यहां तक ​​कि यह यहाँ एक आधा एक टमटम या एक साथ डिवाइस पर
राम के गीगाबाइट, 64 बिट बनाम 32 बिट,
इतना बड़ा सौदा नहीं है.
निश्चित रूप से आज, यह रास्ता आकार से अभिभूत होने जा रहा है
कार्यक्रम में ही की है, जो हो सकता है कई सौ जा रहा है
किलोबाइट, अगर कुछ नहीं, एक मेगाबाइट इन दिनों.
>> तो उचित चिंताओं, एक कोई सही जवाब है.
लेकिन कम से कम उन लोगों के विचार है कि शुरू कर देना चाहिए
अपने मन के माध्यम से जाना है?
क्योंकि में 0 pset, भले ही हम वास्तव में केवल की उम्मीद
शुद्धता, या कम से कम विभिन्न कीड़े कि disclaiming
आप का सामना करना पड़ा है हो सकता है, के रूप में हम आगे बढ़ना है, डिजाइन
करने के लिए एक और महत्वपूर्ण पहलू होने जा रहा है, दोनों कोड लिखने के
और भी हमारे कोड का मूल्यांकन.
और इसलिए कम से कम इस तरह बातें करने के लिए सोचा दे.
और सिर्फ कुछ काम करता है क्योंकि इसका मतलब यह नहीं है कि यह अच्छा है,
इसका मतलब यह नहीं है यह अच्छी तरह से डिजाइन है.
और कहा कि एक बातें शिक्षण साथियों के है और
समस्या सेट में मदद मिलेगी हमें समय के साथ हिस्सा चिढ़ाओ.
>> ठीक है, के बारे में क्या, चलो कहते हैं, यहाँ इस संस्करण?
मुझे एक पल में एक छोटे से यहाँ कुछ सेक्सी करते हैं.
पहले मुझे इससे छुटकारा पाना.
और अब हम इस व्याकरण मुद्दे को ठीक है.
तो इस संस्करण में, मैं व्याकरण को ठीक करना चाहते हैं कि ऐसा है, तो
के बजाय सिर्फ प्रारंभिक एस तरह "बोतल", का कहना है
या "बोतलों"
मैं उस कोने में कटौती नहीं करना चाहता -
मैं भी गतिशील बाहर शब्द "बोतलों" मुद्रित करना चाहते हैं
या "बोतल", जिससे आज इन% s प्लेसहोल्डर का उपयोग कर.
इसलिए मैं सशर्त जाँच क्या मैं के मूल्य की जरूरत है.
और अगर यह एक है, मैं "बोतल" कहना चाहते हैं, और अगर यह कुछ भी
और, मैं करने के लिए "की बोतलें" कहना चाहता हूँ. तो हम यह करने की कोशिश.
मैं == 1 अगर, तो मुझे आगे जाना है और घोषणा -
मैं एक स्ट्रिंग की जरूरत है, तो मुझे स्ट्रिंग s1 करते हैं, क्योंकि यह है
मैं पहली स्ट्रिंग के बारे में अभी परवाह है.
मैं "बोतल" कहने जा रहा हूँ. और फिर, चलो देखते हैं, स्ट्रिंग
और मैं जहाँ मैं एक क्षण में जा रहा हूँ समझाता हूँ - S2 -
"बोतलें." तो याद है कि, इस गीत में, हम करने के लिए सक्षम होने की जरूरत है
बातें, दो अलग अलग शब्द संभवतः मुद्रित करें.
तो अगर हम यहाँ वापस लग रही है, कि जब हम करने के लिए
इस उदाहरण यहाँ दीवार पर दो बीयर की बोतलें, "
बियर की दो बोतलें एक नीचे ले जाओ, इसे पारित, चारों ओर "मैं चाहता हूँ
इस चौथी लाइन अब "कहने के लिए पर बियर की एक बोतल
दीवार "की बोतल या" इसलिए मैंने तय करने की जरूरत है, मैं कहना चाहते हो "
"बोतल"? तो मैं करने के लिए मनमाने ढंग से कहने जा रहा हूँ, ठीक है,
मैं अब एक चर बुलाया s1 स्ट्रिंग, की घोषणा करने के लिए जा रहा हूँ
एक, कि यहाँ और भी यहाँ में खामियों को दूर करने के लिए जा रहा है,
क्योंकि उन शब्दों को हमेशा समान हैं, सिर्फ इसलिए की
गीत की प्रकृति.
और मैं s2 जो भी शब्द मैं चाहता हूँ कॉल करने के लिए जा रहा हूँ
अंततः नीचे दिखाई देते हैं.
अब, सचमुच, 100 में से 99 बार, यह करने के लिए जा रहा है
उन मामलों में से दोनों में एक ही है, क्योंकि 3 बहुवचन है, 2
बहुवचन, 4 बहुवचन है.
लेकिन इस कोने मामले में, जहाँ हम 2 से मिलता है और फिर 1, या
भी 1 और 0, तो मैं इस तर्क की जरूरत है.
तो मैं मेरे कोड हो रही है कि सही में कुछ समय बिताने की है.
तो अगर मैं यह कर, मैं == 1 अगर है, तो सेट "बोतल" के बराबर s1
और s2 "बोतलों" करने के लिए बराबर है क्योंकि इस के लिए किया जाएगा 1
बोतल, और यह 0 बोतलों के लिए होगा.
और यहाँ यह है, यह क्या दर्शाता है?
बस स्पष्ट होना.
यह सिर्फ एक टिप्पणी है.
तो तथ्य यह है कि आप एकल लाइन टिप्पणी हो सकता है आप का मतलब
इस तरह अपने कोड टिप्पणी कर सकते हैं, लेकिन एक आम
प्रतिमान भी है, कि अगर आप एक वाक्यांश सुपर कम है कि
तुम अपने आप को करना चाहते हैं और यह सिर्फ और अधिक पठनीय है डाल करने के
यह सही कोड की पंक्ति के अंत में, आप यह कर सकते हैं
बिल्कुल कुछ इस तरह करते हैं.
>> तो अब क्या यदि मैं यह कर? और अगर मैं 1 के बराबर नहीं है.
तो धमाके के बराबर होती है -
विस्मयादिबोधक बिंदु "धमाके" के रूप में जाना जाता है.
धमाके तो = 1.
तो अगर मैं 1 के बराबर नहीं है, मैं क्या बजाय करने के लिए करना चाहते हैं?
खैर, सबसे पहले शब्द मैं क्या होना चाहते हैं?
तो 1 स्ट्रिंग "बहुवचन बोतलों के लिए बोतलों" होना चाहिए,
और फिर इस बहुवचन "बोतलों" के रूप में अच्छी तरह से हो जाएगा अब के लिए,.
और हम अगर यह वास्तव में हमारे लिए हो जाता है देखेंगे
जहाँ हम जाना चाहते हैं.
तो अब अगर मैं यहाँ नीचे स्क्रॉल नोटिस, कि मैं में plugging रहा हूँ
न केवल मैं s1, लेकिन.
मैं और मैं s1 में plugging हूँ.
और फिर यहाँ नीचे, मैं 1 ऋण हूँ, जो के रूप में एक ही है
पहले, लेकिन s2.
दूसरे शब्दों में, मैं अंग्रेजी शब्द के आधार पर बदल चाहते हैं
इस तर्क पर.
अब, वहाँ पहले से ही इस कोड में कुछ समस्या है.
क्या पहले से ही टूटी हुई है यहाँ से बाहर फाटक के?
हाँ?
दर्शक: [अश्राव्य].
>> डेविड जे मालन: बिल्कुल सही.
तो मैं पहले से ही दायरे से सबक का उल्लंघन है.
तो मैं s1 और s2 घोषित किया है, लेकिन मैं इसे के अंदर किया है
घुंघराले ब्रेसिज़, जिसका अर्थ है, हाँ, इस कोड काम करेंगे
42 लाइन तक है, लेकिन जैसे ही मैं 43 लाइन मारा लगता है, कोई क्या
अब मौजूद नहीं है?
खैर, क्या दायरे में नहीं रह गया है - न तो s1 या s2.
तो हम इसे ठीक करने के लिए है.
तो मुझे हटाने के घोषणाओं.
और मैं चर नाम छोड़ और इसे हटाना यहाँ हूँ
और यह यहाँ हटा दें.
और लाइनों में मैं वास्तव में इन बातों की घोषणा करनी चाहिए?
दर्शक: [अश्राव्य].
डेविड जे मालन: हाँ, तो शायद
यहाँ ऊपर, 33-ish.
स्ट्रिंग s1 तो और तो s2 स्ट्रिंग.
और यह पता चला है, मैं यह कर सकता है.
यदि आप एक ही प्रकार के दो चर की घोषणा कर रहे हैं,
आप वास्तव में सिर्फ एक अल्पविराम का उपयोग कर सकते हैं और क्या करना है कि सी. सभी में
ठीक है, तो अब मैं दो चर है -
s1 और s2.
मैं उन्हें निर्दिष्ट कर रहा हूँ इन में मानों
यहाँ की स्थिति, या यहाँ में.
और फिर मैं उन्हें का उपयोग कर रहा हूँ नीचे.
कितनी अच्छी तरह से अब यह काम करने जा रहा है?
>> खैर, यह अभी भी एक छोटी सी छोटी गाड़ी है, लेकिन हम कम से कम देख
अब तक हम कैसे मिल गया है.
तो मुझे आगे जाना है और beer3 बनाने.
इस beer3 है?
हाँ, यह beer3 है.
और अब मुझे आगे जाना है और चलाने के beer3.
399 99.
हम शायद उनमें से ज्यादातर को छोड़ सकते हैं.
और यहाँ नीचे, कि देखो.
"दीवार पर एक बीयर की बोतल, बीयर की एक बोतल ले,
नीचे एक, यह पास के आसपास, दीवार पर बियर की बोतलें 0. "
लेकिन मैं समाधान का केवल आधा करने के लिए आपका ध्यान आकर्षित कर रहा हूँ.
यहाँ की तरह खराब कर दिया है.
तो ऐसा लगता है कि कोने मामलों पैदा होती है जब मैं बराबर होती है क्या
दो मानों?
दर्शक: 2, 1.
डेविड जे मालन: 2 और 1.
यह नहीं 1 और नहीं है 1.
यह वास्तव में सिर्फ इस गीत के इन पिछले दो पद है.
तो मैं क्या बजाय करना चाहते हैं?
तो मैं मामले को पकड़ लिया है, जहां अगर मैं == 1 है लगता है,
तो पहला शब्द "बोतल", लेकिन दूसरा शब्द है
बोतलों "है. लेकिन यहाँ, मैं इस 2 == बदलना चाहते हैं.
और अगर यह मामला है, मुझे क्या करना चाहते हैं
पहला शब्द हो सकता है?
दर्शक: "बोतलों".
डेविड जे मालन: तो दो बोतलों के लिए बोतलों ".
और फिर इस शब्द होना चाहिए -
दर्शक: "बोतल".
"बोतल", विलक्षण: डेविड जे मालन.
>> सब ठीक है, चलो बाहर ज़ूम यहाँ पर वापस जाने के लिए फिर से चलाने के लिए,
फिर से चलाने के beer3, प्रकार 99 फिर.
ठीक है, "विभाजन (कोर) फेंक दिया गलती है."
मैंने क्या गलत किया है?
दर्शक: आप एक मूल्य नहीं है [अश्राव्य].
डेविड जे मालन: आह, उत्कृष्ट बिंदु.
ठीक है, तो यहाँ क्या गलत है?
तो विभाजन गलती, और हम वास्तव में देखने के लिए जा रहे हैं
यह भविष्य में काफी कुछ बार, जानबूझ कर.
लेकिन अब के लिए, यह वास्तव में क्या मतलब यह नहीं है?
एक विभाजन गलती लगभग हमेशा मतलब है कि आप
किसी भी तरह से अपने कंप्यूटर में स्मृति रैम, का उपयोग करने की कोशिश की है,
कि तुम ही नहीं है कि आप वास्तव में नहीं पूछा है
संचालन के लिए प्रणाली.
तो इस मामले में नोटिस, मैंने क्या किया है, जो है
मेरे तर्क से दोषपूर्ण है.
मैं s1 और s2 मूल्य सौंपा है अगर मैं 1 के बराबर होती है.
मैं भी किया है कि अगर मैं 2 के बराबर होती है.
लेकिन मैं इसे दूसरे के अनंत संख्या में नहीं किया है
संभावित जगह -
विशेष रूप से, 3 या 4 या डॉट, डॉट, डॉट, 99.
तो इस के लिए एक तय बस हम हो सकता है
एक किसी और शर्त है.
और मुझे यहाँ में जाने के लिए और कहते हैं कि s1 के बराबर होती है -
यहाँ यह क्या होना चाहिए?
दर्शक: [अश्राव्य].
>> डेविड जे मालन: "" बोतलें, क्योंकि मामले में आम,
यह सिर्फ एक ही बात है.
तो बोली, गंदें शब्द बोलना, "बोतलों के बराबर होती है." तो बहुवचन के लिए
बोतलें, और उसके बाद यहाँ ऊपर, बहुवचन बोतलों के लिए.
ठीक है, तो अब मुझे मेरे टर्मिनल विंडो में वापस जाने के लिए,
फिर कंपाइल करने, इसे फिर से चलाते हैं.
99.
वाह.
और एक त्वरित मानसिक स्वास्थ्य की जांच करते हैं.
तकनीकी तौर पर, हम इन सब के पढ़ने के सुनिश्चित करना चाहते हैं
वे सही कर रहे हैं, लेकिन हम पर देखने के
कम से कम ज्ञात अपराधियों.
3 बोतलें, 2 की बोतलें, बोतलें 2, 1
बोतल, 1 बोतल, 0 बोतलों.
हम कम से कम अब के लिए यह तय कर दी है लगता है.
लेकिन यहाँ पकड़ है कि एक देवता भयंकर गंदगी यह क्या है
सिर्फ एक मूर्ख को हल करने के लिए
एक चरित्र व्याकरण विस्तार.
तो वहाँ एक कारण है कि मैं इस कोने में कटौती की तरह है
पहले, क्योंकि यह अभी पूरी तरह से परेशान करने के लिए है करने के लिए
इतना कोड लिखने.
लेकिन यह पता चला है कि वहाँ से थोड़ा अधिक सुरुचिपूर्ण तरीके
सटीक एक ही बात व्यक्त.
और हम के रूप में कर सकते हैं.
>> मुझे एक पल के लिए स्क्रीन पर छोड़ दो और
एक त्रिगुट ऑपरेटर के रूप में जाना जाता है कुछ परिचय.
यह एक एक जहाज की तरह है कि सिर्फ बनाने का मतलब है हमारी
के रूप में देने का वादा किया है एक छोटे से, sexier रहता है.
और मैं ऐसा करने के लिए के रूप में इस प्रकार के लिए जा रहा हूँ.
मुझे एक स्ट्रिंग s1 बुलाया दे, और मुझे
यह इस प्रकार असाइन करें.
(मैं == 1)?
"बोतल" अन्यथा "बोतलों". S2 स्ट्रिंग हो जाता है (मैं == 2)?
"बोतल" अन्यथा "बोतलों".
तो फिर यहाँ क्या अंतर है?
कोड के इन दो लाइनों, मैं बहस कर सकते हैं,
इस सारी गंदगी की जगह.
तो मैं इसे एक गड़बड़ फोन, सिर्फ इसलिए कि यह किस तरह का मुझे rubs
गलत तरीका है कि यह कोड के इतने लाइनों है.
गलत नहीं है.
यह बुरा डिजाइन नहीं है.
की तरह, यह पूरी तरह से सही है और पूरी तरह से ठीक है.
लेकिन कोडिंग थकाऊ हो जाता है कि अगर आप अपने आप को इतना व्यक्त किया है
फिर से और फिर एक साधारण के साथ विशेष रूप से लानत
इस तरह परिदृश्य.
इतनी सी इस तरह, कुछ शॉर्टकट है.
तो यह अनिवार्य रूप से कह रहा है एक स्ट्रिंग s1 बुलाया घोषित
यह या तो इस मूल्य या इस मूल्य अगर मैं == आवंटित -
माफ करना, मैं यह और अधिक स्पष्ट रूप से कहना चाहिए.
एक चर s1 एलान, यह इस मान असाइन अगर यह सच है.
अन्यथा, यह इस मान असाइन.
तो दूसरे शब्दों में, यह एक एक लाइन के रास्ते की तरह है
अगर किसी और कह रही है, लेकिन जिस तरह से साथ काम कर रहा है.
तो अगर मैं 1 है, तो आगे जाना है और इस "बोतल" कहते हैं. और
तो और, यह "बोतलों" कहते हैं. इस बीच, s2,
दूसरा शब्द है कि हम परिभाषित करने की जरूरत है, अगर मैं 2 के बराबर होती है, हम करेंगे
"बोतल" s2 सेट. अन्यथा, यह बोतलों "सेट. और क्या
अब यह मतलब है कि मैं इस के माध्यम से जाना है और सभी को नष्ट कर सकते हैं
कोड के उन लाइनों.
और जब मैं कहता हूँ कि कुछ हास्यास्पद, यह अब है
, sexier यह शैलीगत भावना की तरह में sexier है.
तथ्य यह है कि कार्यात्मक, इस कोड वास्तव में जा रहा है
सटीक एक ही बात करते हैं.
और भले ही यह पहली बार में एक गुप्त सा लग सकता है
नज़र, क्योंकि हम इस निर्माण से पहले नहीं देखा है, मैं
तर्क है कि यह अंततः को इतना अधिक होने जा रहा है
पठनीय और इतना आसान करने के लिए हम इंसानों को हल करने के लिए
समझते हैं, क्योंकि अब तुम सिर्फ पढ़ सकते हैं
एक लाइन पर सभी कोड.
यह अभी भी अगर, यह वह जगह है जहाँ भावना में समान
हालत तो यह है कि अगर अंदर क्या है और इस
और क्या अंदर है.
लेकिन हम इस बस बहुत अधिक elegantly कर सकते हैं.
>> और अगर मैं अब मेरे टर्मिनल के लिए वापस जाओ, सब नष्ट कर दिया होने
उन लाइनों की है और उन्हें सिर्फ उन दोनों के साथ बदल दिया,
फिर कंपाइल करने, 99 के साथ फिर से चलाने की बोतलें बियर, कि नोटिस
व्याकरण है, वास्तव में, अभी भी सही है.
तो फिर, शुरू करने के लिए कुछ है.
बियर की बोतलें 2, बियर की एक बोतल.
सही लग रहा है.
हाँ.
इसलिए हम एक बहुत अधिक संक्षिप्त समाधान है.
तो, भी, जैसा कि आप सी के साथ सहज नहीं हो
1 pset या यहां तक ​​कि दूसरे के साथ जरूरी है, लेकिन
एहसास है कि इन constructs हमें बातें करने के लिए कभी भी अनुमति दे सकते हैं
elegantly अधिक.
अब यहाँ एक दूसरी बात करते हैं.
मुझे आगे जाना है और ऊपर return1.c खोल.
अब चलो एक तरीका है कि एक और समस्या को हल करने के लिए शुरू
हमें और अधिक परिष्कृत कोड लिखने के लिए अनुमति देता है.
>> तो यहाँ एक साधारण सा कार्यक्रम जिसका उद्देश्य जीवन में
मूल्यों वेतन वृद्धि है.
और वास्तव में, चलो एक कदम वापस ले.
मुझे इस मैन्युअल रूप से करते हैं.
मुझे शामिल है और मुख्य (शून्य) int.
दो और मुझे इस increment.c फोन.
और मैं क्या करना चाहते हैं?
मुझे आगे जाना है और कुछ ऐसा कहना है करने के लिए जा रहा हूँ -
हम नंबर एक ही फोन होगा -
int x.
तो int x 2 हो जाता है, printf x% d, नई लाइन, एक्स.
इसलिए मैं अब तेजी से है, लेकिन परिचित सामान की तरह टाइप कर रहा हूँ.
तो मैं x + + करने के लिए जा रहा हूँ.
तो मैं करने के लिए है कि एक ही वाक्य फिर से मुद्रित करने के लिए जा रहा हूँ.
और फिर मैं 0 वापसी सिर्फ कार्यक्रम छोड़ने के लिए जा रहा हूँ.
ठीक है, तो यह एक प्रोग्राम है कि
वेतन वृद्धि एक संख्या.
यह पहली बार के लिए 2 से कुछ इनिशियलाइज़ जा रहा है, और तो यह है
यह वेतन वृद्धि और इसे फिर से मुद्रित की जा रही है.
>> तो चलो वेतन वृद्धि को चलाने के लिए अविश्वसनीय रूप से सरल कार्यक्रम.
लेकिन अब लगता है कि मैं मूल्य घन के लिए चाहते हैं, ऐसा करने के लिए
कुछ कुछ मनमाना.
और मैं वास्तव में क्या करना चाहते हैं एक्स के घन हो जाता है.
तो मैं क्या पाउ समारोह में कहा जाता है का उपयोग करें, लेकिन मैं नहीं कर सकता है
सच में पता है कि जहां अभी तक है.
इसलिए मैं इस पुराने ढंग का रास्ता करने के लिए जा रहा हूँ.
एक्स बार एक्स बार बार एक्स के बराबर होती है.
तो मैं मान cubing रहा हूँ, अपने आप में यह फिर से गुणा
और फिर, ताकि हम सत्ता पाने के लिए
3 इस मामले में की.
तो अब नंबर मैं प्रिंट चाहिए होना चाहिए, जैसा कि हम देखेंगे
यहाँ वेतन वृद्धि बनाने के लिए, तो यह वास्तव में वास्तव में वेतन वृद्धि नहीं
अब, लेकिन हम अकेले नाम छोड़ देंगे -
2 और फिर 8.
अब, हम शोधन के लिए एक अवसर की शुरुआत है
यहाँ, जिससे एक संख्या बढ़ के इस cubing बात
स्वयं के द्वारा ही स्वयं के द्वारा इस तरह लगता है बस हो सकता है
एक समारोह के रूप में उपयोगी है, बहुत पसंद है किसी का फैसला किया
साल पहले - आप जानते हैं, उपयोगी है की तरह अगर हम में से नीचे बैठता है
और printf इतना है कि दुनिया के बाकी का उपयोग कर सकते हैं लिखते हैं,
क्यों नहीं हम नीचे बैठ कर और एक घन बुलाया समारोह लिखने
कि हमारे लिए इस cubing करता है तो हम स्वयं नहीं है
मूल्यों यहाँ cubing की धारणा को लागू?
>> एक साधारण उदाहरण तो चलो, लेकिन आगे जाने के लिए और उपयोग यह है कि एक के रूप में
करने के लिए अपने स्वयं के समारोह लिखने का अवसर.
तो इस प्रकार अब तक, हम केवल मुख्य का उपयोग किया है, और हम अन्य का उपयोग किया है
लोगों के काम करता है, लेकिन हम हमारे अपने नहीं लिखा है.
तो यहाँ हम चले.
मुझे आगे जाना है और कहा जाता है एक घन समारोह लिखने के लिए जा रहा हूँ.
और मैं इसे एक इनपुट ले जा रहा हूँ.
तो अपने इनपुट के लिए एक पूर्णांक होने जा रहा है.
और यह क्या करने जा रहा है?
यह int उत्पादन घोषित करने जा रहा है = इनपुट बार इनपुट
बार इनपुट.
और तो यह है कि उत्पादन में वापस करने के लिए जा रहा है.
और फिर मैं अब के लिए विशिष्ट होना है.
इस समारोह में एक int वापस जा रहा है.
तो यहाँ तो यह है कि कैसे आप अपने खुद के कार्यों लिखना चाहते हैं.
आप पहले तय अपने का नाम क्या है
समारोह के लिए होने जा रहा है.
और आम तौर पर, व्याख्यात्मक कुछ अच्छा है, तो मैं हूँ
यह घन कॉल.
तो फिर तुम निर्दिष्ट करने के लिए यह क्या करने के लिए वापस जा रहा है है, क्या है
इसके उत्पादन के लिए होने जा रहा है.
और हम अभी तक कि कई विकल्प नहीं है.
Int, चार, नाव, bool, स्ट्रिंग.
अभी के लिए, मैं एक int के साथ छड़ी के लिए जा रहा हूँ, क्योंकि मैं यह चाहता हूँ
एक पूर्णांक वापस.
तो फिर तुम यह निर्दिष्ट करने के लिए, यदि कोई हो, जानकारी क्या कर रहे हैं है.
और अगर घन एक तर्क लेता है, के बीच कुछ लेता है
कोष्ठक, आप उस तर्क को एक नाम दे इतनी है कि
आप इसे कुछ फोन के रूप में आप लागू कर रहे हैं या लेखन कर सकते हैं
इस समारोह में, और आप इसे एक प्रकार है, देने के लिए है जो इस में
मामले इंट होने जा रहा है.
तो संक्षेप में, घन एक समारोह है कि एक पूर्णांक लेता है
इनपुट और आउटपुट के रूप में एक पूर्णांक रिटर्न के रूप में.
>> तो यह है कि इनपुट के साथ क्या करता है?
खैर, 14 लाइन में, मैं एक चर बुलाया उत्पादन की घोषणा, और मैं
यह मूल्य, इनपुट बार इनपुट बार इनपुट प्रदान.
और फिर मैं उत्पादन वापस.
तो मैं यह कैसे का उपयोग करें तो?
क्या मैं लाइन पर इन पर प्रकाश डाला वर्ण बदलने
7, के लिए तुम्हें नहीं लगता?
दर्शक: [अश्राव्य].
डेविड जे मालन: हाँ, तो एक्स के घन.
तो एक्स एक चर है, जिसका अर्थ यह कुछ मूल्य रखती है.
सौभाग्य से, यह प्रकार पूर्णांक है.
और क्योंकि x एक int है, इसका मतलब है कि मैं यह घन में पारित कर सकते हैं.
और फिर भी मैं मूल्य के साथ एक्स का मान अधिभावी कर रहा हूँ
घन एक्स, के रूप में मामला किया गया है इस प्रकार अब तक, आप किसी भी समय
बराबर के चिह्न और कोड की एक पंक्ति है, सही पर सामान
निष्पादित हो जाता है और फिर को सौंपा जाता है
बाईं तरफ मान.
तो कार्रवाई के आदेश के रूप में हम उम्मीद करेंगे.
तो यह काम करता है?
खैर, मुझे यहाँ नीचे जाना.
मुझे मेरे टर्मिनल विंडो खोलने.
मुझे वेतन वृद्धि कर सकता हूँ, दर्ज करें.
"समारोह 'घन' निहित घोषणा में अमान्य है
C99 एक अलग रूप में, C99 भाषा को संदर्भित करता है के रूप में यह था
1999 में परिभाषित किया गया है, जो संस्करण पर एक अद्यतन से हुई थी.
1989 है, जो मूल पर एक अद्यतन है.
तो यह है कि वह सब का मतलब है.
>> तो इसका मतलब क्या है कि "निहित घोषणा की
समारोह 'घन' अमान्य है? "यह सही यहाँ है.
यह 12 लाइन में अभी भी वहीं है.
दर्शक: [अश्राव्य].
डेविड जे मालन: वह क्या है?
दर्शक: यह पहले नहीं है.
डेविड जे मालन: यह पहले नहीं है.
तो यह बात है.
सी तरह बेवकूफ है, या सी compilers बेवकूफ की तरह कर रहे हैं.
वे वास्तव में केवल क्या तुम उन्हें बताने के लिए.
और वे विशेष रूप में, केवल नीचे करने के लिए अपने कोड शीर्ष पढ़ा,
सही करने के लिए छोड़ दिया.
तो अगर संकलक, बजना, अपने कोड पढ़ रही है, यह पंक्ति 1,
बाहर के आंकड़े यह कैसे करना है.
ओह, यहाँ मुख्य आता है.
ठीक है, मुझे आगे जाना है और एक चर x की घोषणा.
मुझे कुछ प्रिंट.
7 रेखा, बिल्ली घन क्या है?
Stdio.h में घोषित नहीं किया है.
यह सी के साथ नहीं आया मैं नहीं करने के लिए क्या विचार है.
और इसलिए बजना बस bails और है कि त्रुटि संदेश के साथ इस्तीफा.
तो हम तरीके के एक जोड़े में यह तय कर सकते हैं.
हम बजना सिखाने घन क्या बस, जहां हिल द्वारा कर सकते हैं
घोषणा है.
तो मैं कटौती और यह मुख्य ऊपर चिपकाया.
अब एहसास है कि सिर्फ इसलिए कि मुख्य अब 1 है, यह
अभी भी डिफ़ॉल्ट रूप से मार डाला.
मुख्य मुख्य है.
यह डिफ़ॉल्ट समारोह का नाम है.
यह कोई फर्क नहीं पड़ता है, जहां यह एक फ़ाइल में है.
लेकिन कम से कम अब बजना घन देखा गया है इससे पहले कि मैं इसे इस्तेमाल.
तो चलो देखते हैं अगर बजना अब खुश है.
वेतन वृद्धि करो, यह इस समय का संकलन किया था.
>> मुझे वेतन वृद्धि चलाने के.
और वास्तव में, यह काम करने लगता है.
अब, आप जहां अंततः परिदृश्यों के साथ आ सकते हैं
यह संभव नहीं है हर समारोह डाल
ऊपर हर दूसरे समारोह.
आप वास्तव में इस अनंत लूप में अटक मिलेगा,
जहां इस आदमी को यहाँ लेकिन यह होना चाहता है
आदमी के लिए वहाँ की जरूरत है.
तो यह है कि हमेशा काम नहीं करता.
तो शुक्र है, सी एक और अधिक सुरुचिपूर्ण समाधान है.
मैं मैं यह वापस डाल करने के लिए जा रहा हूँ जहाँ यह था, सिर्फ इसलिए कि
सिद्धांत की बात के रूप में पसंद करते हैं, कि मुख्य हमेशा हो
शीर्ष पर है, क्योंकि यह सिर्फ अच्छा है देखने के लिए क्या इस कार्यक्रम
डिफ़ॉल्ट रूप से करता है.
और क्या मैं यहाँ क्या करने जा रहा हूँ की घोषणा है क्या कहा जाता है
एक प्रोटोटाइप.
मैं सचमुच द्वारा फिर से मेरे क्यूब समारोह की घोषणा करने के लिए जा रहा हूँ
कॉपी करने और चिपकाने.
असल में, कि सचमुच नहीं है.
तो सचमुच कॉपी करने और चिपकाने 15 लाइन
6 लाइन के ऊपर.
यह बात नहीं है क्या लाइन पर समाप्त होता है.
यह 4 लाइन पर होना होता है.
लेकिन यह करने के पहले मुख्य होना है.
लेकिन अंतर नोटिस.
एक सेमीकोलन के साथ 4 समाप्त होता रेखा है, जो हे मतलब है,
बजना, इसके लिए मेरे शब्द ले कि वहाँ एक समारोह मौजूद
घन है कि एक int लेता है और रिटर्न एक int बुलाया.
लेकिन मैं तुम्हें बता नहीं यह अभी तक क्या कर रहा हूँ.
सिर्फ इतना पता है कि मैं आप अंततः बता वादा.
और वास्तव में, अब यह ठीक है कि यह नीचे है.
>> तो यह आम तौर पर बेहतर है, क्योंकि तब के शीर्ष पर
अपनी फ़ाइल, आप बस बंद खड़खड़ कर सकते हैं, तेजी से आग, एक लाइन
प्रत्येक, अपने कार्यों के नाम क्या हैं, क्या उनके
निवेश कर रहे हैं, क्या कर रहे हैं उनके outputs.
और अधिक स्पष्ट करने के लिए, इनपुट आम तौर पर तर्क का मतलब है या
पैरामीटर का पर्याय बन गया.
आउटपुट वापसी मूल्य का मतलब है, यह क्या करता है
मेरे पास वापस हाथ.
तो इस मामले में यहाँ, घन शीर्ष पर की घोषणा की है, लेकिन
परिभाषित, अन्यथा रूप में कार्यान्वित तल पर जाना जाता है.
तो अब चलो यहाँ वापस जाना है और यह फिर से चलाने के.
तो अब मुझे आगे जाना है और फिर से चलाने के, वेतन वृद्धि फिर से चलाने के.
और अब यह बस ठीक काम करने लगता है.
तो अब हम आगे जाने के लिए और बाहर की तरह कुछ कर सकते हैं कारक
उदाहरण के इस चौथे संस्करण में बियर.
तो मुझे यहाँ नीचे स्क्रॉल.
नोटिस और है कि मैं एक तरह से दिल के लिए इस सबक अभी लिया.
तथ्य यह है कि मैं एक ही श्लोक गायन किया गया था और फिर
फिर और फिर, गीत में एक ही कोरस लाइन लगा,
जैसे मैं बाहर है कि कारक एक समारोह में क्यों नहीं करते हैं?
और वास्तव में, यह एक मंशा का होना चाहिए.
तथ्य यह है कि दुनिया में किसी और चाहते हो सकता है के अलावा
एक घन समारोह का उपयोग करने के लिए -
कि कुछ कारक बाहर और अपने लिखने के लिए एक अच्छा कारण है
स्वयं के कस्टम समारोह -
अगर वहाँ अपने प्रोग्राम है कि सिर्फ बनाता में कोड का एक हिस्सा है
वैचारिक भावना है, कि आप की तरह यह एक देना चाहते हैं
इस मामले में कोरस की तरह, नाम -
तो आप इसी तरह एक अलग समारोह के रूप में लिख सकते हैं.
आप मुख्य में सब कुछ लिखने की जरूरत नहीं है बस इसे अगर
क्लीनर इसे अलग से बाहर है और इसे एक नाम देने लगता है.
>> तो इस मामले में नोटिस, कि मैं ऊपर एक टिप्पणी है
इस समारोह में कहा कि बस के बारे में गाती है
बोतलों की निर्दिष्ट संख्या.
सूचना है कि मैं इन फोन की जरूरत नहीं है.
इनपुट और आउटपुट बातें.
वास्तव में, इस समय मैं सिर्फ बोतल के लिए अपने इनपुट ख कहा जाता है.
और यहाँ नोटिस, शून्य क्या पता चलता है?
उस कोरस -
दर्शक: यह वापस नहीं करता है.
डेविड जे मालन: एक मूल्य वापस नहीं करता है.
और वास्तव में, कार्य करने के लिए मान देने के लिए नहीं है.
वे कुछ कर सकते हैं बस.
वे क्या साइड इफेक्ट कहा जाता है हो सकता है, जो इस में
मामला सिर्फ स्क्रीन पर छपाई की एक पूरी गुच्छा है.
तो सूचना है कि इस कोड, मैं सचमुच बस से चुराया
पिछले उदाहरण.
फर्क सिर्फ इतना मैं अपने के रूप में उपयोग करने के बजाय है
चर, मैं अब मेरे चर के रूप में कर रहा हूँ ख का उपयोग कर.
तो मैं ख यहाँ नीचे है, मैं ख यहाँ नीचे है, मैं ख
ऋण यहाँ नीचे 1.
लेकिन कोड वास्तव में एक ही है.
लेकिन सिर्फ तुम अब पता चलता है कि कैसे हम इस का उपयोग कर सकते हैं, मुझे जाने दो.
आगे और वास्तव में यह बदलने के लिए एक पाश के लिए हो.
के लिए (int i = n, मैं n>, मैं -).
>> तो मैं कि हमारे पिछले उदाहरण से चुरा लिया है.
इससे पहले, यह 37 लाइन में है कि मैं शुरू कर दिया जाएगा
इस कष्टप्रद गीत गा.
लेकिन इसके बजाय, मैं तो बस अब मैं का कोरस कॉल करने जा रहा हूँ.
हो गया.
तो अब इस लूप के हर यात्रा में, मैं यह अन्य फोन
समारोह, कोरस, कि मैं लिखने के लिए हुआ है.
यह और साल पहले किसी के द्वारा नहीं लिखा गया था.
लेकिन कोरस, इस बीच, printf का उपयोग करने के लिए प्रिंट
इन चार लाइनों के बाहर.
लेकिन तथ्य यह है कि मैं कोरस बुला रहा हूँ फिर से और फिर एक में
पाश यह मतलब है कि मैं बहुत अंत में मिलता है, के लिए जा रहा हूँ
सटीक एक ही गीत के रूप में मैं इस प्रकार दूर है.
तो संक्षेप में, अब अगर मैं अपने कोड पर वापस देखो, भले ही
कार्यात्मक यह बराबर है, यह है कि यह नोटिस
और भी अधिक पठनीय पाने के लिए शुरू.
मैं वास्तव में नहीं जानता कि कैसे GetInt
लागू किया है.
सच कहूँ तो, मैं नहीं जानता कि कैसे कोरस कार्यान्वित किया जाता है.
लेकिन यह मेरे लिए कोई फर्क नहीं पड़ता.
मुझे परवाह नहीं है क्योंकि अब मैं की तरह कर सकते हैं, एक मानव के रूप में, पढ़ने के
यह ऊपर से नीचे.
और क्योंकि कार्य करता है कि वे क्या के अनुसार नाम पर कर रहे हैं
करने के लिए, अपने कोड तेजी से पठनीय है.
और जैसा कि हमारे कार्यक्रमों को और अधिक जटिल मिल -
सेमेस्टर के अंत तक, आप लाइनों के सैकड़ों लिख सकता हूँ
PHP और जावास्क्रिप्ट और जैसे जैसी भाषाओं में कोड की -
आप पाएंगे कि यह इतना आसान की तुलना में ट्रैक रखने के लिए की है
तुमने क्या किया है.
और जब आप शुरू दोस्तों के साथ सहयोग या
भागीदारों या सहयोगियों, आप के लिए बहुत अधिक लिखने में सक्षम हो जाएगा
इन बुनियादी व्यायाम शुरू करने के द्वारा बड़े पैमाने पर कार्यक्रम
इमारत ब्लॉकों.
>> तो उस से कहा, हम इसे एक दिन क्यों फोन नहीं करते हैं?
और हम बुधवार को देखेंगे.
[वाहवाही]