[Powered by Google Translate] सब ठीक है, हर कोई: ZAMYLA चान. 1 Walkthrough के लिए आपका स्वागत है. इस walkthrough pset 1, जो है सी. मैं आशा है कि आप पर होगा सभी अपने स्क्रैच परियोजनाओं के साथ मज़ा था. तो अब इस walkthrough में, हम वास्तव में जा रहे हैं सी में प्राप्त करने में सक्षम है, कुछ मशीन कोड लिखने में मिलता है. तो अगर आप Walkthrough 0 पर, तो नहीं थे इन वास्तव में walkthroughs - हम के माध्यम से चलने के लिए जा रहा समस्या सेट, कुछ सामान्य टिप्स और तकनीकों के माध्यम से बात है कि आप उपयोग कर सकते हैं. हम असाइनमेंट प्रबंधनीय काटने में तोड़ने के लिए हूँ, इतना है कि तुम लोग और उम्मीद है कि शुरू कर सकते हैं हम समझते हैं कि यह कैसे करना है. ठीक है. Pset तो 1. psets इस साल जहां 1 संरचना होगा - वहाँ के लिए सवालों की एक खंड की एक श्रृंखला होने जा रहा है सवाल है कि वास्तव में भी मदद मिलेगी आप के साथ शुरू करने के लिए pset मदद, आप कुछ तकनीकों है कि आप की जरूरत अभ्यास. और इसलिए इन सवालों, मैं में कवर नहीं जा रहा हूँ walkthrough अपने अनुभाग में, अपने आवंटित शिक्षण क्योंकि साथी वास्तव में उन के माध्यम से चल रहा है आप के साथ सवाल. अपने अनुभाग के अंत में, तुम दूर के साथ चलना होगा उन सवालों के जवाब, लेकिन यह भी विश्वास है कि आप सुविधाओं है कि आप की आवश्यकता होगी की कुछ को लागू कर सकते हैं pset के उत्तरार्द्ध भागों के लिए. मारियो Pset 1 का गठन किया. और कहा कि एक मजाक सा कार्यक्रम है जहाँ हम मूलतः लिखने और प्रिंट ठेठ मारियो दृश्य में एक आधा पिरामिड. और फिर pset के दूसरे भाग लालची कहा जाता है. और इतना लालची में हम अनिवार्य रूप से एक लालची के रूप में कार्य खजांची, जहां अगर कोई हमें पैसे की राशि देता है कि हम चाहते हैं, हम सिक्कों कि की न्यूनतम राशि की गणना हम उन्हें वापस करने के लिए अभी भी उन्हें लगता है कि राशि देने के लिए कर सकते हैं. सही सभी. तो हर walkthrough एक Toolbox होगा. और फिर, तुम उपकरणों के सभी इस में उपयोग हो सकता है toolbox आप या उन सभी का उपयोग हो सकता है. किसी भी मामले में, यह पता करने के लिए वास्तव में अच्छा है क्या आप के साथ लैस कर रहे हैं. तो हम CS50 उपकरण, तुम लोग है जो मैं तुम्हें दिखाता हूँ और आपको लगता है कि करने के लिए परिचय. फिर भी सामान्य रूप में, अच्छा शैली निश्चित रूप से एक हमारे सबसे महत्वपूर्ण उपकरण है. शैली अनिवार्य रूप से कैसे अपने कोड पठनीय संबंधित? जब किसी और चला जाता है और अपने कोड पढ़ता है, वे है एक आसान समय? वे यह समझ सकते हैं? यह सुंदर है? फिर हम कैसे मान्य उपयोगकर्ता इनपुट प्राप्त करने के बारे में बात करेंगे कार्यक्रम क्योंकि दोनों मारियो और लालची में, आप की आवश्यकता होगी उपयोगकर्ता इनपुट के लिए पूछने के लिए और आप संख्या की किसी तरह दे. तो फिर हम यकीन है कि नंबर मान्य है बनाना चाहते हैं. तो खरोंच में याद है, हम ऐसे दोहराने के रूप में ब्लॉक था, तक दोहराएं रुको, हमेशा के लिए या. तो हम की तरह करने के लिए जा रहे हैं अनुवाद है कि अब सी में और लिए के रूप में loops पर देखो, जबकि, और करते हैं, जबकि. फिर भी हम भी मूल्यों पर प्रदर्शित करने के लिए की आवश्यकता होगी स्क्रीन, मारियो में या लालची में है कि क्या. और इसलिए हम कैसे हम तार से बातें करने के लिए प्रिंट के बारे में बात करेंगे integers और मंगाई. और फिर अंत में, हम pseudocode के बारे में बात करते हैं, एक सच इस पाठ्यक्रम भर में याद करने के लिए महत्वपूर्ण अवधारणा है. मुझे क्या पता मुझे समस्या सेट के साथ सबसे ज्यादा मदद करता है सोचने के लिए और किसी भी सी के बारे में सोच से पहले का वर्णन है कि मैं क्या करना चाहते हैं लेकिन सिर्फ कार्रवाई का वर्णन. तो pseudocode में अंग्रेजी और सी के बीच किस तरह का है, किस तरह का सही सिंटैक्स बिना प्रक्रियाओं का वर्णन है, लेकिन एक अच्छा पर्याप्त संरचना प्रदान करते हैं. और इसलिए मैं आप के लिए pseudocode के कुछ उदाहरण के रूप में अच्छी तरह से करना होगा इस walkthrough. ठीक है. तो क्या हम साथ काम करेंगे CS50 उपकरण है. यह अनिवार्य रूप से एक आभासी मशीन है कि की तरह चलाता है अपने स्वयं के कंप्यूटर के अंदर कंप्यूटर. और यह लाभ का एक बहुत है. एक यह है कि यह उपकरण है कि आप का एक बहुत कुछ के साथ पूर्व निर्धारित है CS50 के लिए जरूरत है. के रूप में अच्छी तरह से, इसका मतलब है कि हर कोई एक ही जमीन पर है, चाहे मैक या पीसी या अन्य ऑपरेटिंग सिस्टम. हम सभी आभासी मशीन चला सकते हैं. और इसलिए वहाँ manual.cs50.net/appliance में निर्देश दिए गए हैं. और यदि ऐसा है तो आप उस लिंक पर जाने के लिए और निर्देशों का पालन करें, तो उम्मीद है कि आप उपकरण को स्थापित करने में सक्षम हो जाएगा. तो पहले, आप एक आवेदन स्थापित करने की जरूरत है, एक हूँ वास्तविक आभासी मशीन को चलाने के लिए सक्षम होने के लिए आवेदन. और फिर आप उपकरण डाउनलोड. लेकिन फिर, वहाँ पर निर्देश दिए गए हैं manual.cs50.net/appliance. तो मैं पहले से ही मेरे उपकरण डाउनलोड किया है, और मैं स्थापित किया है यह VMware संलयन में. और इसलिए एक बार मैं उपकरण डाउनलोड, मैं फाइल करने के लिए चला गया. मैं खोलने के लिए चला गया और फिर पाया कि मैं जहां CS50 उपकरण संग्रहीत. और वहाँ से, मैं इसे यहाँ भाग गया. लेकिन मैं यह पहले से ही यहाँ, तो चलो एक करीब देखो ले. सही सभी. तो अब हम CS50 उपकरण के अंदर हो. मैं इसे पूर्ण स्क्रीन बनाया. आप करने के लिए कि अगर आप चाहते हैं या सिर्फ यह एक के रूप में चुन सकते हैं अपने डेस्कटॉप पर छोटी खिड़की. यहाँ हम बस के साथ एक सरल डेस्कटॉप एक घर और एक कचरा. लेकिन अगर आप मेनू में जाने और प्रोग्रामिंग के लिए तो, तो आप देखेंगे कि हम कुछ टर्मिनल बुलाया है. और इसलिए यहाँ में, हम अपने कंप्यूटर के आसपास नेविगेट कर सकते हैं. हम कोड लिख सकते हैं. लेकिन वास्तव में, हम एक जीएडिट कार्यक्रम बुलाया का उपयोग कर सकता हूँ, या "जी , जो भी एक है कि संपादित करें ". तो हम का उपयोग किया जा सकता है कि एक कोड लिखने के लिए हूँ. तो आप इन दो उपकरण है कि आप मुख्य रूप से उपयोग कर सकता हूँ कोड लिखें. फिर इसके अलावा में, यह सिर्फ एक नियमित रूप से कंप्यूटर की तरह है. हम एक ब्राउज़र है. हम गूगल क्रोम चुना. मैंने क्या किया है मैं एक ड्रॉपबॉक्स निर्धारित किया है की सभी शामिल दस्तावेजों. और इतना है कि कुछ है कि अत्यधिक प्रोत्साहित किया है. ड्रॉपबॉक्स का उपयोग करता है और यदि ऐसा है तो सिंक्रनाइज़ बादल - ऐसा करते हैं, उदाहरण के लिए, मौका द्वारा कुछ - चलो आशा है कि नहीं - अपने उपकरण के लिए होता है, तो यह सब होगा बादल पर synced. सही सभी. तो उन आवेदन कर रहे हैं कि आप में उपयोग कर सकता हूँ CS50 उपकरण. अब कमांड लाइन के आसपास नेविगेट करने के लिए. टर्मिनल वास्तव में वास्तव में एक तरह की तरह के रूप में कार्य कर सकते हैं में आदेश टाइप करें - करना चाहते हैं, यदि आप एक मैक, एक खोजक कर रहे हैं. या यदि आप Windows में कर रहे हैं, मुझे विश्वास है कि "मेरे लॉग्स "कंप्यूटर या ऐसा कुछ. तो अगर हम उपकरण को वापस जाने के लिए, चलो एक खुला टर्मिनल विंडो. तो यह इस prompt, jharvard उपकरण @ है. चलो बस यह बड़ा बना. ठीक है. तो अगर हम आदेश रास लिखें, तो है कि सूची के सभी हमारे कंप्यूटर में फाइलें, हमारे मौजूदा निर्देशिका में. निर्देशिकाएँ सिर्फ फ़ोल्डर्स की तरह हैं. हम उन शब्दों interchangeably उपयोग करें. ठीक है, तो हम फ़ाइलों को सूचीबद्ध किया है कि इस निर्देशिका में हैं. अब अगर हम का उपयोग करना चाहते हैं, कहते हैं, हमारे ड्रॉपबॉक्स, तो हम कर सकते हैं निर्देशिका बदल जाते हैं. सीडी और तो ड्रॉपबॉक्स तो. हम रास फिर, और फिर हम में हैं कि फ़ाइलों की सूची देखें इस फ़ोल्डर. यह मुझे अपने घर के लिए जा रहा अनुरूप है, तो क्लिक ड्रॉपबॉक्स, और तब सूची यहाँ देख. सही सभी. तो हम कहते हैं - जब आप लोगों के लिए अपने 1 pset बनाने जा रहे हैं, चलो एक बनाने के निर्देशिका pset1 बुलाया. तो हम ड्रॉपबॉक्स में सही अब कर रहे हैं, जैसा कि आप यह देख सकते हैं यहाँ शीघ्र. तो चलो एक निर्देशिका बनाने. Mkdir तो, चलो यह pset1 कहते हैं. और इसलिए अब फिर से अगर हम रास, हम तो देखना है कि pset1 प्रकट होता है. और यदि ऐसा है तो हम pset1 अंदर जाना चाहते हैं, तो हम अंदर जा सकते हैं कमांड सीडी के साथ कि फ़ोल्डर. सही सभी. तो फिर, चलो देखते हैं कि हम अगर - का कहना है कि इसे दूसरे तरीके से करते हैं. यह सिर्फ इतना कह "बनाएँ अनुरूप है एक नया फ़ोल्डर, pset1. लेकिन जैसा कि आप पाते हैं, तो आप के साथ बातचीत हो जाएगा टर्मिनल एक बहुत. कभी कभी तो यह एक बहुत आसान है, एक करने के लिए तेजी से खो दिया है बस चीजों के उन प्रकार के कर के लिए टर्मिनल में काम करते हैं. ठीक है. और फिर इन अन्य आज्ञाओं. वहाँ एक फाइल हटाने के लिए एक rm है. तो आप बस rm लिखें और फिर के नाम इसे नष्ट करने फ़ाइल. हम है कि बाद के कुछ उदाहरण में जाऊँगा. और फिर हम आदमी आदेश कुछ कहा जाता है, जो है समारोह के एक प्रकार के लिए एक मैनुअल लाता है. फिर, मैं बाद में उस के एक वास्तविक उदाहरण लाती हूँ. तो एक और बहुत महत्वपूर्ण उपकरण है, के रूप में मैं संक्षेप में उल्लेख किया पहले, शैली है. तो अनिवार्य रूप से, शैली पठनीयता के साथ क्या करना है. किसी और पढ़ने के लिए, का पालन करने में सक्षम हो जाएगा, और अपने कोड को समझते हैं? यह आप के लिए विशेष रूप से महत्वपूर्ण है, अपने आप को वास्तव में,. यदि आप देर कोडिंग रह रहे हैं, और फिर बाद में आप पर वापस जाने के लिए और आप की तरह कर रहे हैं, यह क्या चर क्या मतलब है? कहते हैं, आप किसी के साथ एक समूह की परियोजना पर काम कर रहे हैं, तो आप और दोनों एक दूसरे के कोड को देखने के लिए है. यह वास्तव में महत्वपूर्ण है कि आप अपने चर सही ढंग से नाम और यह अच्छी लग रही है कि क्योंकि सभी फर्क पड़ता है. लेकिन सब से ऊपर तो, हम एक कोर्स में अभी रहे हैं. तो CS50 के हित के लिए और विशेष रूप से आपके लिए शिक्षण साथियों और ग्रेडर जो अपने पर लग जाएगा psets, कृपया, सही शैली का उपयोग करें. और अपने शिक्षण साथियों काफी खुश हो जाएगा. तो फिर, शैली चीजों को सही ढंग से indenting भी शामिल है, विशेष रूप से अपने ब्रेसिज़ का उपयोग कर और उन indenting. चर कुछ समझ में आता है कि नामकरण. अभी हम परंपरा का पालन करें जब आप अपने चर नाम में कई शब्दों, आप तो उन्हें एक अधोडैस के साथ कनेक्ट करने के लिए, जैसा कि आप में देख उदाहरण के नाम है. फिर अंत में, कुछ जादुई संख्या कहा जाता है. मूलतः, जब आप कोड के माध्यम से पढ़ रहे हैं और कहते हैं आप एक चर है - कहते हैं, आप एक चर नहीं है, लेकिन बस ठीक कहना है, जब तक इस तरह के और इस तरह के कम से कम 10 है. फिर अपने ग्रेडर अच्छी तरह से जाना, प्रतीक्षा की जा रही है, जहां 10 से आया? तो सच में समझा अपने आप को एक बहुत मायने रखती है. टिप्पणी करने के लिए मदद से आप अपने आप को समझाने के लिए है. टिप्पणियां शायद सबसे महत्वपूर्ण बात कर रहे हैं में शामिल अपने कार्यक्रमों. और यह मदद करता है आप केवल वास्तव में समझाने के लिए नहीं - यह मदद करता है कि आप की तरह के रूप में अपने तर्क की व्याख्या आप के साथ जा रहे हैं. और इसलिए अगर आप ऐसा कर, फिर से, यह एक बहुत आसान हो जा रहा है अपने कोड और की तरह में वापस जाने समझते हैं कि आप क्या कर रहे हैं वहाँ कर रहे हैं. फिर, ग्रेडर वास्तव में टिप्पणी करना. तो आप अच्छी तरह से टिप्पणी करने के लिए और - मुफ्त अंक की तरह की तरह. और जो मुक्त अंक पसंद नहीं है? तुम भी बहु - रेखा टिप्पणियाँ हो सकता है. और इसलिए मैं ऊपर टेम्पलेट के एक प्रकार के शामिल हैं. मूलतः, आम तौर पर इन आपके के शीर्ष पर उपयोग किया जाता है कार्यक्रम की तरह सामान्य रूप में समझाने के लिए क्या अपनी समस्या सेट करता है. आपका नाम, तारीख, वगैरह शामिल करें. और ऐसा है, के रूप में मैं बहु - रेखा इस टिप्पणी में कहा, manual.cs50.net/style_guide अधिक सुझावों और नियमों के बारे में है loops, वगैरह के लिए शैली. ठीक है. तो अब है कि मैं तुम्हें बता दिया शैली के बारे में एक छोटे से, चलो देखते हैं इस में कार्रवाई. सही सभी. तो यहाँ, टॉमी हमें एक delightfully भयानक लिखा है शैली के एक कार्यक्रम में उदाहरण है. तो आप यहाँ देख कर, सब ठीक है. यह वास्तव में सब ठीक है. आप बहु - रेखा टिप्पणी यहाँ देखें. आप इसे एक आगे स्लेश और फिर दो तारक के साथ शुरू करते हैं. आप के साथ जारी रखने, रेखा के साथ तारांकनों aligning और फिर इसे एक तारांकन और एक स्लेश के साथ खत्म होता है. सही सभी. तो यह है कि ठीक है. यहाँ यह ठीक है. वह अपने पुस्तकालयों सहित है. लेकिन फिर वह यहाँ कई लाइनों फैले टिप्पणी की है. इस के साथ गलत चीजों के बहुत सारे हैं. कई लाइनों फैले टिप्पणियां, यहीं वह इस्तेमाल कर रहा है बस एक लाइन टिप्पणी के लिए वाक्यविन्यास. उन्होंने यह भी एक ही टिप्पणी में सब कुछ melding. तो हम से बचने के लिए करना चाहते हैं. यहाँ तो हम देखते हैं कि इन ब्रेसिज़, उदाहरण के लिए, सभी कर रहे हैं जगह पर. खरोज गलत है. यह वास्तव में आप नहीं दिखा करता है निश्चित जहां कुछ शुरू होता है और समाप्त होता है एक और बात. तब के रूप में अच्छी तरह से, हम देखते हैं वह एक परिभाषित चर i = 5 यहाँ है. लेकिन फिर इस चार कहीं से भी बाहर आता है, और वहाँ कोई नहीं है टिप्पणी करने के लिए वास्तव में समझाने के लिए कहाँ से आता. ठीक है. तो अब चलो कुछ है कि वास्तव में सिर्फ एक ही है पर देखो बेहतर शैली के साथ छोड़कर कोड. तो फिर, यह अच्छा शैली का उदाहरण है, उदाहरण बहु - रेखा. और फिर यहाँ यह काफी साफ है. हम देखते हैं कि वह एक बयान अगर यहाँ शुरू होता है, एक नया प्रवेश करती है लाइन, एक खुले गले है. फिर वह एक खरोज है. वह इस खरोज रहता है - वह पूरी भर में इस संकेत वर्दी रहता है कार्यक्रम और वास्तव में पता चलता है जब कोड का एक ब्लॉक शुरू होता है, जब कोड का एक ब्लॉक समाप्त हो जाती है. यह हमारे हिस्से पर एक छोटे से nitpicky लग शुरू करने के लिए कर सकते हैं साथ है, लेकिन आप के रूप में आप अपने कोड लिख रहे हैं देखेंगे. यह वास्तव में उपयोगी है इस बाहर अलग करने में सक्षम हो. और फिर, अपने ग्रेडर वास्तव में यह पसंद है. और इसलिए तुम सिर्फ एक संख्या में डालने की बजाय देखते हैं, वहाँ, वह वास्तव में चर पुनरावृत्तियों का नाम. और इसलिए हम वास्तव में इस कोड में नहीं देख रहे हैं सही अब लेकिन बस का एक उदाहरण देखने की तरह अच्छा बनाम बुरा शैली. और यदि ऐसा है तो आप उन्हें कंधे से कंधा मिलाकर देखो, क्या तुम करोगी निश्चित रूप से करने के लिए सही पर एक पढ़ने के लिए पसंद करते हैं. सही सभी. पहले तो एक आखिरी बात हम के असली मांस में गोता pset कैसे संकलन और अपने कोड चलाने. और इसलिए अनिवार्य रूप से जब आप लिखने के सी, कि वास्तव में नहीं है वास्तविक मशीन कोड, zeroes और में अनुवाद लोगों को है कि मशीन वास्तव में पढ़ने और व्याख्या कर सकते हैं. इसलिए हम कुछ है - बजना एक संकलक कि हम सी. के लिए उपयोग है वहाँ कई compilers हैं. लेकिन CS50 में, हम बजना का उपयोग कर सकता हूँ. और इसलिए बजना मूल रूप से सी से मशीन अनुवाद आप के लिए कोड. तो चलो एक उदाहरण देखें - उपकरण में गोता. सही सभी. इसलिए अभी हम हमारे घर निर्देशिका में कर रहे हैं. हम वास्तव में नहीं कर रहे हैं, जहां किसी भी कोड है. तो चलो हमारी निर्देशिका Dropbox/walkthrough1 के लिए बदलने के लिए, जहां मैं कुछ कोड संग्रहित किया है. तो अगर हम रास प्रेस, तो हम देखते हैं कि मैं एक यहाँ में फ़ाइलों की जोड़ी. सही सभी. तो मैं पहले से ही hello.c लिखा है, तो हम यह संकलन और फिर देखते हैं कि यह क्या करता है. तो एक बुनियादी संकलन आदेश तो hello.c बजना होगा, ठीक कह रही है, अनिवार्य रूप से मेरे लिए hello.c संकलन. मैं दर्ज करें, सही चले गए हैं लगता है. चलो रास फिर क्लिक करें. इस a.out फ़ाइल अब पता चला है. और इसलिए a.out एक निष्पादन योग्य फ़ाइल है. तो इसे चलाने के लिए, आप एक / a.out करते हैं. और इसलिए हम उस इस hello.c जाहिरा तौर पर कार्यक्रम देखना हैलो पांच बार बाहर प्रिंट. सही सभी. लेकिन कहते हैं कि हम नाम a.out उपयोग नहीं करना चाहते. उदाहरण के लिए, हम हैलो कार्यक्रम चलाना चाहते हैं कि क्योंकि यह समझने के लिए आसान बनाता है. तो चलो बजना hello.c कहते हैं, और तो अनिवार्य रूप से आप की जरूरत लिए कुछ झंडे बुलाया बातों में से गुजरती हैं. तो ठीक कह रही है, मैं अच्छी तरह से करने के लिए यह कुछ और के नाम करना चाहते हैं. तुम भी विभिन्न झंडे का एक बहुत में पारित कर सकते हैं, जो आप देखेंगे. तो आपको लगता है कि एक कार्यक्रम कुछ नामकरण के लिए ध्वज है - ओ करना चाहते हैं. ओ के बाद, आप प्रोग्राम का नाम लिखें. चलो बस यह कॉल हैलो. तो अब हम देखते हैं कि हम वास्तव में एक नमस्ते निष्पादन योग्य फ़ाइल है. इसलिए हम इसे चलाने के लिए कर सकते हैं और यह पहले के रूप में एक ही बात करता है. तो अब है कि हम हैलो है, हम भी के लिए दूर कर सकते हैं, उदाहरण के लिए, हमारे a.out. तो हटायें, a.out के लिए rm, अपने टर्मिनल prompt जाएगा आप से पूछना, के लिए आप इस बात की पुष्टि करने के लिए कि क्या आप वास्तव में चाहते हैं इसे हटा दें या नहीं. हम हाँ के लिए y का कहना है. और हम वहाँ जाओ. A.out चला गया है. सही सभी. लेकिन कभी कभी यह सब याद भ्रमित हो जाता है झंडे कि हम शामिल करने के लिए और बाहर बजना टाइप करने की जरूरत है. और जैसा कि हम देखते हैं जब हम और अधिक जटिल प्रोग्राम का उपयोग कर रहे हैं, हम करेंगे विभिन्न पुस्तकालयों सहित. और इसलिए बजना के लिए हमारे कमांड अब और समय मिल जाएगा. तो CS50 उपकरण में शामिल है बनाने के आदेश. तो आप बस नमस्ते लिखें. उफ़! हम पहले से ही इस निष्पादन योग्य फ़ाइल बनाया है. तो मुझे सिर्फ यह जल्दी से हटा. अब चलो टाइप बनाने हैलो. और आप इस लाइन में देखना है कि अनिवार्य रूप से कह रही हैं हैलो इन आदेशों के सभी शामिल है कि आप के लिए इसे में जाओ. तो CS50 उपकरण में शामिल है बनाने फ़ाइल है. तो बस जब आप एक फ़ाइल name.c है, तो आप सब करते हैं फ़ाइल नाम कहते हैं. और फिर आप एक निष्पादन होगा उस नाम के साथ फ़ाइल. हाँ? 1 अध्यक्ष: अपने कंप्यूटर के लिए, बजना के बजाय यह जीसीसी कहते हैं. की तरह है कि - ZAMYLA चान: हाँ. तो अपने कंप्यूटर जीसीसी के रूप में विरोध बजना करने के लिए कह सकता है, क्योंकि जीसीसी संकलक का एक प्रकार है. यदि आप CS50 उपकरण में कर रहे हैं, हालांकि यह तो बजना का उपयोग किया जाना चाहिए. यदि ऐसा नहीं है, तो शायद मुझे बाद में बात आने या पोस्ट CS50 पर चर्चा और हम उस सुलझा सकते. सही सभी. तो अब है कि हम बुनियादी उपकरण के नीचे हमारे तरह है, हम तो मारियो में गोता लगा सकता हूँ. ठीक है. तो मारियो अनिवार्य रूप से जहाँ हम को होने जा रहे एक कार्यक्रम है हमारे मारियो की आदिम संस्करण की ही तरह बनाने खेल पृष्ठभूमि. तुम्हें पता है, मारियो आमतौर पर एक पाइप और एक है पेड़ और कुछ ब्लॉकों. और फिर वहाँ आधे पिरामिड की तरह है. तो हम बस है कि आधे पिरामिड पर ध्यान केंद्रित किया जा रहे हैं, कोड है कि यह इस तरह के प्रकार के लिए hashes प्रिंट इस प्रारूप में ब्लॉक के. तो क्या होगा है एक निश्चित उपयोगकर्ता इनपुट पिरामिड की ऊंचाई, और फिर आपको लगता है कि मुद्रित करने के लिए बाहर हूँ ऐसी है कि नीचे हैश छोड़ दिया - यहाँ तो बहुत नीचे सही है कि एक पंक्ति में होगा अपने टर्मिनल के नीचे छोड़ दिया. ठीक है. तो पहली बात यह है कि आप की जरूरत है - पहली छोटी मिनी समस्या है कि हम से निपटने की जरूरत है उपयोगकर्ता इनपुट मिल. तो हम साथ काम किया जा उपयोगकर्ता जानकारी की जरूरत है और फिर उत्पादन वहाँ चीजों की तरह. तो चलो एक apples.c लिखा था कि मैं बुलाया फ़ाइल देखो देखो कि निविष्टियाँ और outputs के साथ संबंधित है. ठीक है. तो यहाँ शीर्ष पर, मैं पुस्तकालयों के कुछ शामिल है जरूरत है कि मैं. वास्तव में महत्वपूर्ण यहाँ एक stdio है (मानक आई / ओ). सौदों की है कि मानक निविष्टियाँ और outputs के साथ क्योंकि हम जा रहे हैं उपयोगकर्ता जानकारी के साथ काम कर रहे हैं. सही सभी. तो फिर मैं अपने मुख्य कार्य शुरू. और फिर मैं उपयोगकर्ता पूछने के लिए ठीक है, कितने सेब तुम्हें क्या ज़रूरत है? यहाँ तो सही है, इस लाइन क्या करता है - मैं GetInt के मूल्य के लिए मैं चर असाइन करें. तो GetInt एक समारोह में कहा कि stdio में शामिल है. और इसलिए अनिवार्य रूप से, कि आप के लिए इसके साथ सौदा होगा. यह एक int के लिए उपयोगकर्ता prompt जाएगा. जो कुछ भी वे लौटने के लिए, वह करने के लिए आवंटित किया जाएगा मैं चर. और इतना तो यह सिर्फ एक छोटा सा प्रोग्राम है कि कम हो जाती है मैं 1 से मूल्य और फिर बाहर नए मूल्य प्रिंट. वास्तव में जी - एडिट के बारे में एक अच्छी बात यह है कि वहाँ एक मिनी यहाँ में टर्मिनल सही. तो बजाय बीच आगे और पीछे स्विच करने जीएडिट और टर्मिनल, तुम वास्तव में कर सकते हैं बस इसे यहाँ से चला रहे हैं. तो पहले हम सही निर्देशिका में मिलता है. तो चलो हमारी निर्देशिका में परिवर्तन Dropbox/walkthrough1. सही सभी. इसलिये अब सेब बनाने, यह हमारे लिए compiles. और इसलिए अब हम सेब चलाने के. हम कितने सेब है? मैं कहना है कि मैं 3 है. और यह कहते हैं और कहते हैं, "मैं mwahaha उनमें से एक खाने के लिए जा रहा हूँ" "अब तुम 2 सेब है. सही सभी. तो चलो फिर से चलाने के. और हम कहते हैं कि मैं एक सेब है. अब मैं 0 सेब है. ठीक है. तो इस कार्यक्रम के रूप में काम करने की उम्मीद है. हम एक संख्या इनपुट, यह 1 से कम हो जाती है, और फिर इसे फिर से प्रिंट बाहर. लेकिन क्या अगर, उदाहरण के लिए, मैं -1 सेब है? यह काफी समझ नहीं पड़ता है. लेकिन यह अभी भी एक पूर्णांक है, तो प्रोग्राम यह स्वीकार करता है. और इसलिए यह आगे भी नकारात्मक संख्या देता है. तो यह है कि हमारे लिए एक सबक है कि भले ही GetInt समारोह और इस तरह के रूप में जुड़े अन्य लोगों GetFloat या GetString - भले ही उन हमें सही डेटा प्रकार मिल जाएगा, उदाहरण के लिए, अगर मैं सिर्फ इतना कहा था [टाइपिंग] तो यह मुझे बताओ पुनःप्रयास के लिए होगा. तो यह जो डेटा अपने इनपुट प्रकार के साथ सौदा होगा लेकिन जांचें वास्तव में नहीं होगा, ठीक है, यह वास्तव में का एक प्रकार है मूल्य है कि मैं चाहता हूँ? तो फिर मारियो का एक हिस्सा है कि उपयोगकर्ता इनपुट के लिए है संख्या है कि 1/2 पिरामिड की ऊंचाई का प्रतिनिधित्व करता है कि आप कर रहे हैं. और अगर ऐसा हो तो हम ऊंचाई के लिए इस उपयोगकर्ता उत्साह रहे हैं तो, इस पर दो सीमा होना चाहिए. सही है? कल्पना में, यह कहना है कि यह 23 से अधिक नहीं होना चाहिए वर्ण क्योंकि कि मानक की तरह है टर्मिनल की ऊंचाई. लेकिन फिर, क्या अन्य बाध्य, शायद एक कम बाध्य हो सकता है, हम शामिल करना चाहते हैं? यदि हम वास्तव में वापस सोच की एक पिरामिड की तरह, चित्रकारी कर रहे हैं कैसे एक पिरामिड उच्च हो सकता है, यह कभी एक की तुलना में कम हो सकता है निश्चित संख्या है? 2 स्पीकर: तीन से बड़ा है. ZAMYLA चान: हम्म? 2 स्पीकर: तीन से बड़ा है. ZAMYLA चान: यह एक अच्छी बात है. यह हो सकता है - हम इसे सिर्फ एक तीन स्तर पिरामिड के लिए विवश करना चाहते हो सकता है. लेकिन चलो लगता है - चलो एक एक पिरामिड के रूप में एक हैश तालिका की गिनती की तरह भी कहते हैं. तो फिर हमारे वास्तविक कम बाध्य क्या होना चाहिए? सेब के लिए वापस सोच, हम एक नहीं करना चाहती नकारात्मक ऊंचाई पिरामिड. सही है? ठीक है. तो जब आप उपयोगकर्ता इनपुट के लिए पूछना है, तो आप के लिए होगा कि पूर्णांक कि सुनिश्चित करने के कुछ तरह से शामिल वे आपको प्रदान करने के साथ नकारात्मक क्योंकि आप नहीं कर सकते हैं नहीं है एक नकारात्मक पिरामिड आकर्षित. ठीक है. तो वहाँ एक दो तरीके से ऐसा कर रहे हैं. मूलतः, एक बार आप उपयोगकर्ता इनपुट के लिए पूछते हैं, आप की मांग करने के लिए करना चाहते हैं कि वे आप सही इनपुट के साथ प्रदान करते हैं. तो आप की मांग है कि वे तुम्हें एक संख्या के साथ प्रदान करना चाहते हैं कि नकारात्मक, लेकिन यह भी 24 से कम नहीं है. तो हम समावेशी शून्य करने के लिए 23, के साथ काम कर रहे हैं. सही सभी. तो हम लगातार की मांग करना चाहते हैं - अगर वे हमें एक मान्य पूर्णांक नहीं दिया है, वे चाहते हैं लगातार नहीं की मांग. मुझे एक मान्य इनपुट दे. मुझे एक वैध ऊंचाई दे. तो खरोंच में वापस याद है, हम ब्लॉक तक दोहराएँ या था ब्लॉक यदि हमेशा के लिए. उन छोरों कि बहुत जबकि पाश के लिए इसी तरह की और कर रहे हैं करते हैं, जबकि पाश, जो हम में सिर्फ एक दूसरे में मिल जाएगा. तो, जबकि पाश अनिवार्य रूप से एक शर्त है कि आप की जाँच कि एक बूलियन मान कि तुम वहाँ अंदर डाल की तरह है, खरोंच में कोण के साथ ब्लॉक. यही कारण है कि क्या जबकि पाश के कोष्ठक के अंदर चला जाता है. तो आप स्थिति के कुछ प्रकार होगा. और जैसा कि हम सिर्फ पहले चर्चा की, उस हालत inputted किया गया था कि पूर्णांक की सीमा के साथ क्या करना है. तो हालत है कि क्या साथ क्या कुछ करना होगा पूर्णांक उचित सीमा के भीतर है. तो यह है कि एक समय पाश है. उदाहरण के लिए, आप पूर्णांक के लिए त्वरित और तो कर सकते हैं लगातार जांच करते समय इस इनपुट मान्य नहीं है. उदाहरण के लिए, फिर से उत्साह पर रखने के लिए, पूछने पर रखना एक पूर्णांक के लिए उपयोगकर्ता. तो यह है कि एक ही रास्ता हो सकता है. एक और तरीका एक है, हो सकता है जबकि पाश, जो बहुत सकता है एक क्या करते हैं, जबकि करता है के अलावा एक जबकि पाश के लिए इसी तरह की है - आप की तरह वाक्यविन्यास द्वारा देख सकते हैं - यह है कि यह पहले करते हैं और फिर वास्तविक पाश शरीर है. तब जबकि यह स्थिति है. तो क्या जबकि loops - वे के लिए उपयोगी हो क्या है कि वे वास्तव में निष्पादित कोड कम से कम और एक बार फिर से जाँच करें कि क्या हालत है या नहीं मिले. तो अगर आप एक है, जबकि पाश, तो अंदर कर रहे थे अपने बयान आप एक पूर्णांक के लिए संकेत है क्योंकि आप में हूँ कर सकते हैं कम से कम करने के लिए उपयोगकर्ता एक बार पूछना है. और फिर उसके बाद आप उन्हें तुरंत, तो तुम ठीक कह सकते हैं, अच्छी तरह से एक बार मैं इस किया है, यह वैध है? अगर ऐसा है, तो आप सिर्फ जा रहा पर रख सकते हैं. लेकिन अगर ऐसा नहीं है, तो यह सिर्फ एक जबकि नियमित रूप से की तरह कार्य करेंगे पाश और फिर पूछने पर रखना. ठीक है. तो हम मारियो करने के लिए वापस आ गए हैं. इसलिए हम जानते हैं कि कैसे सही उपयोगकर्ता इनपुट के लिए संकेत करने के लिए सही सीमा के भीतर. तो अब हम वास्तव में इस आधे पिरामिड आकर्षित करने की आवश्यकता है. यह सरल पाठ पात्रों की तरह लग रहा है. तो वास्तव में खुला - हम सिर्फ एक खिड़की खुली और कहना ठीक है, अच्छी तरह से क्या हुआ अगर मैं थे वास्तव में इसे स्वयं करने के लिए जा रहा है, एक अपने आप लिखें? ठीक है. तो देखते हैं. चलो उदाहरण के लिए कहते हैं, हम एक पिरामिड है कि बनाना चाहते हैं बाईं ओर के साथ गठबंधन किया है, तो बस करना होगा - मारियो में, शीर्ष स्तर एक के बजाय दो ब्लॉकों है. इसलिए हम दोनों के साथ शुरू करते हैं. हम क्लिक करें. हम तीन करते हैं, और फिर दर्ज, चार, पांच. ठीक है. तो यह है कि बहुत आसान है. सिवाय इस समस्या सेट में, हम वास्तव में चाहते हैं के साथ संरेखित हमारे स्क्रीन के दाईं ओर. सही सभी. तो, कैसे एक आप वास्तव में यह है कि इस तरह के टाइप हो सकता है यह सही साथ गठबंधन है? 1 हैश डालने की बजाय, कैसे आप की तरह हो सकता है इसे ले जाने के साथ? 3 अध्यक्ष: एक पंक्ति लिखें? ZAMYLA चान: हम्म? 3 अध्यक्ष: एक पंक्ति लिखें? ZAMYLA चान: हाँ. हाँ. तुम एक तरह से लिखने अधोडैस सकता है या की तरह कुछ नहीं, लेकिन हम बस कहना है कि अंतरिक्ष का उपयोग कर सकते हैं. चलो तीन रिक्त स्थान की तरह यहाँ डाल. फिर अगली पंक्ति, ठीक है, हम दो रिक्त स्थान डाल करना होगा. अगली पंक्ति, हम सिर्फ एक अंतरिक्ष डाल दिया. और फिर हमारे अंतिम पंक्ति के लिए, हम किसी भी स्थान नहीं रखा जाएगा. और वहाँ हम हमारे पिरामिड है. तो उस तरह की है - तर्क के उस तरह याद है. और कोशिश करते हैं और पैटर्न के कुछ प्रकार है कि हम कर सकते हैं आंकड़ा तो सी अनुवाद और पाश के कुछ प्रकार में शामिल है. सही सभी. तो हम कहते हैं कि हम एक आठ ऊंचाई है, तो हमारी पहली पंक्ति है दो hashes. लेकिन उन hashes मिलता है, तो आप के लिए कुछ लिखना होगा पहले से रिक्त स्थान. सही है? क्या मैंने किया है मैं बस के माध्यम से चला गया. मैं इसे अपने आप को बाहर आकर्षित किया है, मेरे पाठ संपादक में एक पिरामिड, एक आठ साल की ऊंचाई के साथ पिरामिड और फिर गणना कितने रिक्त स्थान मैं बनाने की जरूरत है. तो मैंने कहा कि ठीक है, अच्छी तरह से पहली पंक्ति है दो hashes किया जा रहा. लेकिन इससे पहले कि मैं सात रिक्त स्थान इनपुट करने के लिए जरूरत है. अगले एक छह रिक्त स्थान है और फिर तीन hashes, वगैरह. तो फिर हम कोशिश करते हैं और लाने की एक और परत अमूर्त. क्या अगर हम nth पंक्ति के लिए किया था, कितने hashes और कैसे हम कई रिक्त स्थान की आवश्यकता होगी? क्या किसी को पैटर्न देख रहे हो? तो पहली पंक्ति में दो hashes है. 2 एक तीन है. 3 चार है. तो nth पंक्ति है - 4 अध्यक्ष: एन प्लस 1? ZAMYLA चान: हाँ. एन प्लस 1. बिल्कुल सही. तो फिर हम देखेंगे है कि hashes की संख्या होने जा रहा है - अगर हम पहली पंक्ति की गिनती कर रहे हैं के लिए एक हो, तब संख्या hashes के सिर्फ एक है कि अधिक से अधिक होने जा रहा है. ठीक है. तो फिर रिक्त स्थान की संख्या के बारे में क्या? इसलिए हम कोशिश करते हैं और ऊंचाई के मामले में यह व्यक्त. अगर ऊंचाई आठ है, तो 1 पंक्ति में सात रिक्त स्थान है. तो मेल खाती है उस तरह से 8 शून्य से 1. सही है? तो दूसरी पंक्ति के छह स्थानों के लिए जा रहा है, जो 8 शून्य से 2. तो फिर मैं आप के लिए यह आंकड़ा की तरह बाहर छोड़ने के लिए जा रहा हूँ इसके लिए पैटर्न. ठीक है. लेकिन प्रोग्रामिंग में, कभी कभी हम वास्तव में शून्य पर सूचकांक. इसलिए हम एक के बजाय शून्य पर शुरू. तो पहले पहली पंक्ति बुलाया पंक्ति के बजाय, हम यह पंक्ति शून्य वें बुला हो जा रहे हैं. तो तरीका है कि आप इसे लागू करने के लिए करना चाहते हैं पर निर्भर हो सकता है, बहुत सावधान रहना है कि क्या आप शून्य से शुरू करते हैं, कि क्या आप शुरू एक, अपने पैटर्न एक की भरपाई हो जा रहा है. ठीक है. तो अब है कि हम किस तरह के कार्यक्रम से बाहर लगा, हम ठीक कहना है. तो सीढ़ियों के स्तर के हर तरह के लिए, मैं मुद्रित करने के लिए जा रहा हूँ इस तरह के और रिक्त स्थान की ऐसी संख्या है और फिर इस तरह के और hashes की ऐसी संख्या. उस पैटर्न पर निर्भर करता है कि हम पहले स्थापित. ठीक है. तो के माध्यम से iterating का एक तरीका है और जा रहा की तरह चीजों की एक निर्धारित संख्या के माध्यम से पाश, तरह की तरह के लिए एक है दोहराने 10 ब्लॉक या तरह दोहराने में प्रवेश किया और एक स्क्रैच के लिए संख्या. तो अनिवार्य रूप से, सीढ़ियों के हर स्तर के लिए, हम चाहता हूँ रिक्त स्थान को मुद्रित. फिर hashes के संख्या मुद्रित. और फिर हम एक नई लाइन में प्रवेश करने के लिए और फिर इसे दोहराने के लिए चाहता हूँ फिर अगले ब्लॉक के लिए. ठीक है. तो चलो एक सेकंड के लिए loops के लिए की तरह देखने के एक तरह से देखते हैं कि हम एक सेट की संख्या के माध्यम से जा सकते हैं, नंबर के माध्यम से जाना इस आधे पिरामिड में कदम. तो loops के लिए तीन भागों से बना रहे हैं. सबसे पहले, आप एक initialization है. तो यह है कि अनिवार्य रूप से एक चर सेट. यह है कि मूल्य के लिए हर समय सेट किया जा रहा है कि पाश शुरू करने के लिए. तो आप के लिए एक शर्त है करने के लिए जा रहे हैं. अपने पाश के लिए के रूप में ही है कि जब तक अमल करेंगे शर्त सही मूल्यांकन करता है. और फिर तुम एक अद्यतन हालत होगा. तो यह है कि चर है कि आप initialized के साथ क्या करना है. तो मूल रूप से यह सुनिश्चित करना है कि हम बाहर तोड़ कर सकते हैं के कुछ तरीका पाश की, कि हम क्रियान्वित करने पर नहीं रहते हो यह हमेशा के लिए और कभी. क्योंकि स्क्रैच के विपरीत, हम वास्तव में न सिर्फ एक है सादे हमेशा पाश. सी में कार्यक्रम के लिए अंत में खत्म कर दिया है. तो हमें यह सुनिश्चित करना है कि किसी तरह हम इसे रोकने के लिए किया है. ठीक है. तो पाश के लिए एक का एक उदाहरण है कि आप के लिए उपयोग करना चाहते हैं हो सकता है मारियो है. तो तुम एक पूर्णांक है मुझे लगता है कि आप 0 में शुरू. के रूप में लंबे समय के रूप में यह ऊंचाई की तुलना में कम है, तो आप शरीर निष्पादित करने के लिए यहाँ अंदर पाश की. पाश की है कि शरीर के बाद मार डाला गया है, तो आप मैं 1 से वृद्धि हुई है. तो अपने कार्यक्रम फिर से जाँच करेगा - ठीक है, ठीक है, मैं कम से कम है ऊंचाई? अगर ऐसा है, तो आप जारी रहेगा. तो यहाँ शून्य अनुक्रमण, जहां हम पर शुरू की एक उदाहरण है शून्य और फिर हम - सूचना है कि हमारी हालत ऊंचाई की तुलना में कम है. तो कहना है कि हमारे ऊंचाई चार, उदाहरण के लिए, मैं 0 में शुरू होगा. यह 1 हो जाएगा. यह 2 हो जाएगा. यह 3 हो जाएगा. और फिर एक बार इसे अद्यतन, जब पाश अद्यतन के लिए, तो मैं लूंगा तो 4 से सेट किया जा. लेकिन कम से कम 4 4, नहीं है और यदि ऐसा है तो फिर हम करेंगे हमारे लूप के आराम करने के लिए जारी है. ठीक है. तो यह है कि शून्य से शुरू हो रहा है. लेकिन हम भी एक उदाहरण के लिए शुरू करने के लिए,. लेकिन जब से हम एक पर शुरू करते हैं, हम किस तरह का एक और जाना है अंत में समय. तो यही कारण है कि हम कम से कम या के बराबर जोड़ने. तो एक महान चीजें हैं जो मैं कंप्यूटर के बारे में की तरह प्रोग्रामिंग है कि वहाँ सिर्फ इतनी है बातें करने के लिए कई तरीके हैं. तो तुम कि क्या आप शुरू शून्य पर चुनते हैं, कि क्या आप कर सकते हैं एक पर शुरू. इसके अलावा, अगर तुम चाहते थे, तो आप सिर्फ एक का उपयोग कर सकते हैं जबकि पाश, उदाहरण के लिए. तो तुम सकता है - वास्तव में खुला hello.c चलो. तो हम यहाँ पाश के लिए एक है. यह i = 0, मैं <5 में शुरू होता है. मैं यहाँ एक टिप्पणी हमें बता रहा है यह क्या करता है. यह हैलो पाँच बार पाश के लिए एक का उपयोग प्रिंट. लेकिन हम यह भी है कि एक समय पाश का उपयोग कर के रूप में अच्छी तरह से कर सकता है. तो चलो हम कैसे कर सकता है कि देखो. तो अगर हम एक पाश के लिए नकल करने की जा रहे हैं, तो हम भी चाहते हैं initialization, हालत, और अद्यतन नकल. तो हालत बहुत आसान होना चाहिए क्योंकि वाक्यविन्यास जबकि, जब आप इसे देखो, इसे कहते हैं जबकि (शर्त). तो चलो बस हालत वहाँ इनपुट. मैं <5. ठीक है. तो हम जानते हैं कि हम अलविदा मुद्रित करना चाहते हैं. हम जानते हैं कि हमारे पाश के शरीर है. लेकिन हम initialization याद कर रहे हैं और अद्यतन, है ना? क्योंकि हम हमेशा के लिए लूप नहीं हो सकता. इसे समाप्त करने के लिए. तो चलो यहाँ initialization के कुछ प्रकार जोड़ने का उपयोग एक ही है कि हम हमारे लिए पाश में प्रयोग किया जाता है, int i = 0. ठीक है. तो हम एक int i के साथ शुरू करते हैं. हम इस जबकि पाश रूप में लंबे समय के रूप में मैं कम से कम 5 दोहराएँ. तो फिर हम एक बात याद आ रहे हैं, जो अद्यतन है. तो क्या हम अद्यतन का उपयोग करने की आवश्यकता होगी अगर हम मूलतः थे ऊपर पाश के लिए पुनः? हम initialization मैं 0 के बराबर है. हम हालत मैं 5 से कम है. और फिर यहाँ एक अद्यतन है, है ना? तो हम नकल है कि चाहते हैं. हम ठीक कहना चाहता हूँ, मैं + +. कि मैं मैं = 1 + कह के रूप में एक ही बात है. लेकिन क्योंकि यह तो अक्सर इस्तेमाल किया जाता है, आशुलिपि, कि बस के लिए है मैं कह + +. बढ़िया है. ठीक है. यहाँ मैं वास्तव में बाहर मेरी सेब कार्यक्रम की नहीं निकता. इसलिए मैं सिर्फ नियंत्रण सी और है कि तुरंत क्लिक करने के लिए जा रहा हूँ जूते अपने कार्यक्रम के बाहर मुझे लाता है और मुझे टर्मिनल वापस करने के लिए. तो, उदाहरण के लिए, कि अगर आप जहाँ आप एक बग में चलाने अपने समय ऐसी है कि यह होगा पाश को अद्यतन करने के लिए भूल गया समाप्त कर सकता है, और आप एक अनंत लूप में प्रवेश, तो आप कर सकते हैं नियंत्रण सी का उपयोग करने के लिए कि बाहर तोड़. सही सभी. तो हम सही निर्देशिका में कर रहे हैं. तो चलो हैलो बनाने. और फिर अगर हम हैलो चलाते हैं, हम देखते हैं है कि अलविदा पाश है हमारे पाश के लिए के रूप में सटीक एक ही बात करता है. तो यह है कि सिर्फ एक संकेत है. चाहे आप loops के लिए और अधिक के साथ सहज या कर रहे हैं जबकि loops के साथ, वे परस्पर विनिमय किया जा सकता है. तो जो भी आप करने के लिए के माध्यम से पुनरावृति करने के लिए उपयोग करना चाहते हैं - इस मामले में - मारियो पिरामिड की ऊंचाई. तो फिर, यह सिर्फ एक चेतावनी है, यदि आप शून्य से शुरू अपने चर के लिए, तो आप एक अलग करना चाहता हूँ अगर आप एक बार में शुरू से हालत. तो इस तालिका बस की तरह आप एक चेतावनी से पता चलता है. यदि आप 10 बार दोहराने के लिए, उदाहरण के लिए, आप चाहते हैं तो या तो शून्य पर अपने चर शुरू कर सकते हैं. और अपनी हालत के 10 से भी कम हो सकता है. और इसलिए उस तरह आप उस के मैट्रिक्स से पता चलता है. ठीक है. तो हम मारियो के माध्यम से चला गया है. हम कहा है, ठीक है, हम सही इनपुट के लिए जांच की जरूरत है, शून्य और 23 समावेशी. हम पैटर्न की तरह है, जिस तरह के कुछ प्रकार खोजने के लिए जा रहे हैं nth पंक्ति या ith पंक्ति व्यक्त की. और हम तय करने के लिए जा रहे हैं, ठीक है, कि हम इस मुद्रित करने के लिए जा रहे हैं कई रिक्त स्थान है, यह कई hashes, नई लाइन. सही सभी. तो हम उस है. तो अब हम लालची पर स्थानांतरित कर सकते हैं. लालची एक कार्यक्रम है, जहां एक उपयोगकर्ता आप एक राशि देता है नकदी है कि अनिवार्य रूप से आप खजांची के रूप में वापसी की जरूरत है. लेकिन आप के लिए संभव के रूप में के रूप में छोटे सिक्के का उपयोग करना चाहते हैं. और तो यह है, जहां एक लालची एल्गोरिथ्म में आता है, जहां हम सिक्कों की न्यूनतम राशि संभव करने के लिए उपयोग करना चाहते हैं परिवर्तन की है कि राशि. ठीक है. तो अपने समाधान में इस का एक उदाहरण लग सकता है कुछ इस तरह. आप चलाते हैं. लालची /. आप के लिए ठीक कहने के लिए प्रेरित कर रहे हैं, अच्छी तरह से कितना परिवर्तन बकाया है? मूल्य है कि डॉलर में एक मूल्य होने जा रहा है. तो यह है कि एक नाव होने जा रहा है. आपका कार्यक्रम तो न्यूनतम राशि की गणना की जाएगी इस उदाहरण में, 0.32 डॉलर की आवश्यकता के सिक्कों की. और इसलिए न्यूनतम संख्या चार है. की पैदल दूरी पर तो इससे पहले कि हम यह पता लगाने क्या करना है, चलो तरह के माध्यम से प्रक्रिया है कि आप के बारे में जाना हो सकता है. तो अगर इनपुट 32 है, तो अनिवार्य रूप से मैं उपयोग करने के लिए जा रहा हूँ सिक्कों की कम से कम राशि है, अगर मैं कई के रूप में उपयोग संभव के रूप में बड़ा सिक्कों. सही है? तो यह एक बहुत आसान है के रूप में एक चौथाई का उपयोग पाँच nickels करने का विरोध किया है. तो हम कहते हैं, आप 0.32 $ वापसी की जरूरत है. खैर, मैं इस में एक चौथाई का उपयोग कर सकते हैं? हाँ, आप यह कर सकते हैं. और फिर आप $ 0.07 तक कम किया जाएगा. चलो देखते हैं अगर मैं एक और तिमाही का उपयोग करने के लिए आप भुगतान वापस कर सकते हैं. वैसे, नहीं. मुझे लगता है कि एक चौथाई फिट नहीं कर सकते. तो मैं अगले सबसे बड़ा सिक्का को स्थानांतरित करने के लिए जा रहा हूँ. मैं एक पैसा भी उपयोग कर सकते हैं? $ 0.07, नहीं, आप 0.07 डॉलर का भुगतान करने के लिए पैसा भी नहीं का उपयोग कर सकते हैं. तो आप नहीं कहना है. अगले एक है, जो एक निकेल में ले जाएँ. आप एक निकेल का उपयोग कर सकते हैं? हां. सात 0.05 डॉलर से भी बड़ा है, इसलिए हम एक निकेल का उपयोग कर सकते हैं. और फिर हम दो सेंट के ऊपर छोड़ दिया है. हम एक पैसा का उपयोग कर सकते हैं? हाँ, हम कर सकते हैं. हम एक पैसा का उपयोग कर सकते हैं? हां. हम एक पैसा का उपयोग कर सकते हैं? नहीं, क्योंकि अब हम सफलतापूर्वक उपयोगकर्ता वापस भुगतान किया. और इतना है कि चार इस्तेमाल सिक्के योग. तो उस प्रक्रिया के बारे में सोच रही है, हम हर समय ठीक निर्णय लेते हैं, सबसे बड़ा सिक्का है कि हम का उपयोग कर सकते हैं क्या है? एक बार जब हम उस का उपयोग करने के लिए, हम किस तरह का कितना की एक मानसिक नोट रखने अधिक पैसे हम उपयोगकर्ता के रूप में के रूप में अच्छी तरह से वापसी की जरूरत है कि कितने सिक्के हम का उपयोग किया गया है. ठीक है. लेकिन फिर तो, पहला कदम है - बस मारियो की तरह - शीघ्र है एक मौद्रिक राशि के लिए उपयोगकर्ता. और इसलिए इस राशि के लिए होने जा रहा है - यह एक दशमलव मान जा रहा है क्योंकि हम जा रहे हैं उन्हें डॉलर के लिए पूछना. तो उस डेटा प्रकार एक पूर्णांक नहीं जा रहा है. लेकिन यह एक होने जा रहा है - हाँ, एक नाव. लेकिन सिर्फ सेब की तरह तैरता सकारात्मक या नकारात्मक हो सकता है. तो जब आप मूल्यों के लिए जांच, आप चाहते जा रहे हैं कि अपनी नाव को सुनिश्चित उपयोगकर्ता इनपुट - गैर नकारात्मक है. ठीक है. हम हमारे पूरे कार्यक्रम में तैरता साथ सौदा कर सकता का प्रतिनिधित्व करते हैं, 0.25 से क्वार्टर, 0.1 वगैरह, ऑफ डाइम्स. लेकिन मैं यह एक बहुत सिर्फ शुद्ध सेंट में सौदा करने के लिए आसान लगता है. इसके साथ - और हम इस एक बिट के बारे में बाद में बात करेंगे - सी में, अस्थायी अंक कुछ imprecision बुलाया है. तो जब आप 0.12 में दर्ज करते हैं, उदाहरण के लिए, कंप्यूटर 0.1111119 तरह के रूप में वास्तव में स्टोर या ऐसा ही कुछ है. तो यह एक बहुत आसान सेंट कनवर्टर के लिए इस्तेमाल किया जा सकता है. तो हम सेंट करने के लिए एक डॉलर की कीमत कैसे परिवर्तित करते हैं? 5 अध्यक्ष: यह 100 से टाइम्स? ZAMYLA चान: हाँ. हाँ. तो हम बार यह 100 से होगा. लेकिन एक अस्थायी अंक के बारे में मुश्किल बात यह है कि वहाँ कुछ अस्पष्टता है. तो चलो बस का एक उदाहरण देखो. तो मैं imprecision.c खोलने के लिए जा रहा हूँ. ठीक है. यह एक बहुत ही साधारण प्रोग्राम है. यह एक नाव के लिए पूछता है, और यह प्रिंट वापस. टर्मिनल में एक अच्छा संकेत है कि आप अभी स्पष्ट लिख सकते हैं, और तो आप एक स्पष्ट स्क्रीन है. और इसलिए आप किसी भी पिछले उत्पादन या किसी को देखने की जरूरत नहीं है त्रुटियों या रिपोर्ट बग, ऐसा कुछ. ठीक है. तो चलो imprecision बनाने. चलो इसे चलाने के लिए. इसलिए मैं नहीं - अपने कोड में, मैं किसी भी संकेत या कुछ भी की तरह है कि मुद्रित नहीं था. तो यह सिर्फ एक निमिष कर्सर है. तो यह सिर्फ मेरे लिए एक नाव के इनपुट के लिए इंतजार कर रहा है. तो let's एक यादृच्छिक नाव. और आप देखेंगे कि यह प्रिंट वापस लेकिन कुछ अतिरिक्त संख्या है कि हम निश्चित रूप से शामिल नहीं किया था. इसलिए हम यह सुनिश्चित करें कि नहीं करता है कि बनाना चाहते हैं हमारे कार्यक्रम में होता है. तो फिर हम क्या करना चाहते हैं कि हम वास्तव में सुनिश्चित बनाने के लिए है तरह के उचित मूल्य के लिए बंद गोल. सही है? और सौभाग्य से, हम एक समारोह दौर शामिल बुलाया है उपकरण में. यह गणित पुस्तकालय में है. यदि आप को पता कैसे दौर का उपयोग करना चाहते हैं, तो आप वास्तव में इस्तेमाल पुस्तिका. आप आदमी के दौर क्लिक कर सकते हैं. यहाँ तो यह ऊपर लाता है - समझने के लिए थोड़ा मुश्किल हो सकता है, लेकिन अंत में आप इसे भांप मिलेगा. यह एक तरह से पता चलता है कि समारोह में क्या करता है और फिर कुछ उस के संभव का उपयोग करता है. तो जब आप अंततः से एक उचित, वैध इनपुट मिल उपयोगकर्ता हैं, तो आप इसे सेंट करने के लिए परिवर्तित करना चाहते हैं. सुनिश्चित करें कि आप मूल्य दौर इतना करना है कि आप इस से बचने बिंदु imprecision तैर. ठीक है. तो हम एक मौद्रिक राशि के लिए उपयोगकर्ता प्रेरित है. अब हम क्या करना चाहते है, अनिवार्य रूप से सही की जांच? ठीक है, तो मैं सबसे बड़ी संभव सिक्के का उपयोग कर सकते हैं? यदि आप कर सकते हैं, तो आप इसे उपयोग. आप कितने सिक्के आप अब तक इस्तेमाल किया है का ट्रैक रखने और भी गिरावट राशि. सही है? और फिर आप की जाँच करने के लिए जा रहे हैं. एक बार जब आप तिमाहियों थक की तरह है, आप जाना चाहते हैं अगले संभव बात करने के लिए. तो पाश की संरचना की तरह क्या है या किस तरह हम हो सकता है करने के लिए लगातार जाँच करें कि क्या हम अभी भी उपयोग कर सकते हैं का उपयोग करना चाहते हैं एक चौथाई है, उदाहरण के लिए? 6 SPEAKER: जब से अधिक मूल्य है? ZAMYLA चान: हाँ, एकदम सही है. बिल्कुल सही. तो, जबकि मूल्य से अधिक है. तो, जबकि मूल्य अभी भी है कि हम वापस देना है एक चौथाई से भी बड़ा है, जबकि हम अभी भी एक चौथाई का उपयोग कर सकते हैं, तिमाहियों का उपयोग करें. उस के ट्रैक रखें. और फिर जा रहा पर रखने. बिल्कुल सही. ठीक है. ओह, मैं यहाँ सिर्फ बस कैसे मुद्रित करने के लिए कुछ सुझाव भी शामिल है मूल्यों बाहर. तो अपने printf समारोह में, हम आम तौर पर किया गया है तार के साथ काम कर रहे हैं. लेकिन जब आप एक int या बस किसी भी प्रकार के मुद्रित करना चाहते हैं अंकों, आप जगह धारक की तरह लिखने की तरह है. तो यह है कि, पूर्णांकों के लिए% d प्रतिशत द्वारा प्रतिनिधित्व किया है. आपको लगता है कि लिखने के लिए है, तो बाद में आप वास्तव में हूँ - एक अल्पविराम के बाद - मूल्य क्या वास्तव में वहाँ में चला जाता है में डाल दिया. सही है. ठीक है. इसलिए हमने तय किया है कि हम करने के लिए कि क्या जाँच करना चाहते हैं - ऐसा करने का एक तरीका लगातार जांच होगी कि क्या हम अभी भी तिमाहियों का उपयोग कर सकते हैं और उसके बाद का उपयोग करें तिमाहियों रखने के लिए, ट्रैक करने के लिए, और फिर अगला सबसे बड़ा मूल्य पर चलते हैं. अब साफ तरह का एक और प्रकार है कि आप यह कर सकते है ऑपरेटर modulo का उपयोग कर. तो हम पहले से ही इसके अलावा, ऋण, गुणा विभाजित है, और है हमारे पास उपलब्ध है. लेकिन modulo ऑपरेटर की तरह साफ है. यह क्या करता है, यह वास्तव में आप के शेष देता है दो संख्याओं को विभाजित. तो अगर आप लंबे समय विभाजन में याद है जब आप कहते हैं, 74 3 द्वारा विभाजित करते हैं, तो आप यह लिखना होगा, पर ले जाने के लिए, घटाना, और फिर अंत में नीचे कम संख्या में है शेष. खैर, modulo क्या करता है यह वास्तव में सिर्फ तुम देता है कि. 74 तो 3 modulo आप 2 देना होगा. इसी तरह, 10 2 modulo आप 0 देता है क्योंकि वहाँ कोई नहीं है शेष जब आप 2 से 10 विभाजित करते हैं. 6 5 modulo, अच्छी तरह से 5 6 एक बार में तो चला जाता है और यह 1 पर छोड़ दिया है. तो अगर आप 7 9 modulo है, अच्छी तरह से 9 7 से भी बड़ा है. तो यह किसी भी दूसरी बार नहीं जा सकते. तो यह समझ में आता है कि वापसी मान 7 है. तो अगर आप modulo के बारे में सोचते हैं, यह आप कैसे शेष देता है के बाद आप कुछ विभाजित है, तो आप किस तरह कर सकते हैं आप कैसे यह लालची सही, में उपयोग करने में सक्षम हो सकता है? तो अगर आप की तरह modulo शायद गठबंधन विभाजन के साथ ऑपरेटर, ऐसा कुछ है, तो आप एक अच्छा हो सकता है mathy समस्या सेट दृष्टिकोण की तरह. तो अब है कि हम जानते हैं कि अलग से एक जोड़ी है तरीके है कि हम यह कर सकता है - वहाँ निश्चित रूप से एक बहुत कुछ कर रहे हैं अलग अलग तरीकों से भी जबकि loops लिखने के लिए. तो मैं कुछ pseudocode यहाँ लिखा है. यह आपके के कंकाल की तरह करने के लिए समान नहीं हो सकता कोड है कि आप लिख. लेकिन अनिवार्य रूप से, और सोचने का तरीका प्रक्रिया है बस के रूप में हम पर चर्चा की. अब 1, पहली पंक्ति के लिए एक निश्चित राशि प्राप्त करने के लिए कह रहा है डॉलर में. और फिर निहित वहाँ यह सेंट करने के लिए कन्वर्ट करने के लिए है. तो, जबकि तिमाहियों के लिए इस्तेमाल किया जा सकता है, हम चाहते हैं गिनती बढ़ाने के लिए. और फिर हम राशि, मूल्य कि कमी चाहते हैं हम वापस लौट रहे हैं. जैसा कि आप यहाँ देख, यह काफी सी. लेकिन नहीं है कि मैं भी लिया है बातें दांतेदार बना, मैं के अंदर अपनी शर्तों डाल कोष्ठकों. तो फिर उस तरह मुझे शुरू हो जाता है. और फिर बाद में, मैं अभी तक वाक्यविन्यास देख सकते हैं. अक्सर एक समस्या के बारे में वास्तव में सबसे कठिन हिस्सा है समझते हैं कि क्या वास्तव में आप क्या करने की जरूरत है. तो एक बार आपको लगता है कि नीचे लिखते हैं, तो यह एक बहुत तो आसान है pseudocode करने के लिए अनुवाद. और फिर pseudocode से, वाक्यविन्यास बहुत आसान आता है. तो हम देखते हैं जबकि क्वार्टर, इस्तेमाल किया जा सकता है, गिनती बढ़ाने के लिए, मात्रा को कम. जबकि ऑफ डाइम्स इस्तेमाल किया जा सकता है, तो आप यह इतना इतने पर आचरण और आगे है, जब तक आप अपने पैसे के सभी को समाप्त किया है. तुम बाहर सिक्कों की संख्या का इस्तेमाल किया है, जो होगा मुद्रित न्यूनतम उपयोगकर्ता राशि मूल्य inputted. और वहाँ आप अपने लालची एल्गोरिथ्म है. और फिर एक बार आप है कि खत्म, आप भी pset 0 समाप्त कर दिया है. क्या किसी को कुछ के बारे में किसी भी सवाल है? सही सभी. खैर, मैं चारों ओर एक छोटा सा के लिए यदि आप के बाद छड़ी होगी किसी भी सवाल. यह 1 walkthrough था. आने के लिए धन्यवाद.