[संगीत बजाना] डेविड जे मालन: ठीक है, इस CS50 है। और इस सप्ताह एक है। तो शून्य सप्ताह में है कि पिछली बार याद है, हम कम्प्यूटेशनल सोच पर ध्यान केंद्रित किया। और हम उस से करने के लिए transitioned स्क्रैच, एक चित्रमय प्रोग्रामिंग हमारे मित्रों से भाषा एमआईटी मीडिया लैब में। और खरोंच के साथ, हम पता लगाने किया कार्यों की तरह विचारों, और स्थिति, और छोरों, और चर, और यहां तक ​​कि घटनाओं, और धागे, और अधिक। और आज, हम करने जा रहे हैं उन विचारों का उपयोग जारी, और वास्तव में उनके लिए ले जा रही है दी गई, लेकिन उन्हें अनुवाद सी अब के रूप में जाना किसी अन्य भाषा को, सी एक और पारंपरिक भाषा है। यह एक कम स्तर है भाषा, अगर तुम जाएगा। यह विशुद्ध रूप से शाब्दिक है। और तो पहली नज़र में, यह है सब बल्कि गुप्त देखने के लिए जा यदि आप पहले कभी नहीं क्रमादेशित है। हम करने जा रहे हैं अर्द्ध कॉलन, और कोष्ठक, और घुंघराले ब्रेसिज़, और अधिक। लेकिन पता है कि भले हालांकि वाक्य रचना है के बारे में थोड़ा अपरिचित देखने के लिए आप में से ज्यादातर के लिए, पिछले है कि देखते हैं। और विचारों को देखने की कोशिश कि कर रहे हैं, वास्तव में, परिचित, क्योंकि पिछले एक सप्ताह में यहां एक क्या हम क्या करने की तुलना करने के लिए है शुरू करेंगे शुरू में, सी बनाम स्क्रैच तो, उदाहरण के लिए, याद है कि जब हम कार्यान्वित हमारे कार्यक्रमों के पहले पिछली बार, हम एक ब्लॉक है कि देखा था एक छोटे से कुछ this-- जब की तरह हरे रंग का झंडा क्लिक किया है, और फिर हम था एक यह नीचे या अधिक पहेली टुकड़े, इस मामले में, कहते हैं हैलो दुनिया। तो, वास्तव में, खरोंच में, जब मुझे लगता है कि हरे रंग का झंडा क्लिक करें अपने कार्यक्रम को चलाने के लिए है, इसलिए बात करने के लिए, ये हैं ब्लॉक कि मार डाला, या रन। और, विशेष रूप से, स्क्रैच कहा, हैलो, दुनिया। अब, मैं निर्दिष्ट कर सकता था यहां अलग-अलग शब्द। लेकिन हम देखेंगे कि, वास्तव में, कई इन blocks-- और वास्तव में, सी में कई functions-- हो सकता है parametrized या इच्छित अलग अलग बातें करने के लिए। वास्तव में, हम अगर सी में परिवर्तित करने के लिए, अब चाहते हैं, इस स्क्रैच कार्यक्रम यह अन्य भाषा के लिए, हम एक लिखने जा रहे हैं छोटे से कुछ इस तरह। दी, वहाँ कुछ अपरिचित है वहाँ वाक्य रचना सबसे अधिक संभावना है, पूर्णांक, और कोष्ठक, और शून्य। हालांकि आप होता लेकिन फिर भी printf-- लगता है कि यह सिर्फ प्रिंट होगा। लेकिन इसका मतलब प्रिंट प्रिंट स्वरूपित के रूप में हम जल्द ही देखेंगे। यह सचमुच प्रिंट होगा स्क्रीन करने के लिए जो कुछ भी उन कोष्ठकों के अंदर है, जो बेशक इस मामले में, नमस्ते दुनिया है। लेकिन अगर आप कुछ अन्य नोटिस देंगे वाक्य रचना, कुछ डबल उद्धरण, कि अंत में कोष्ठक, सेमी कॉलन और पसंद है। तो वहाँ भूमि के ऊपर का एक सा है, तो बात है, दोनों संज्ञानात्मक और वाक्य रचना, हम जा रहे हैं कि लंबे समय से पहले याद करने के लिए। लेकिन पता है कि अभ्यास के साथ, यह आप पर बाहर कूद करने के लिए शुरू कर देंगे। वास्तव में, के एक उस पर ध्यान केंद्रित करते हैं समारोह में इस मामले में specifically--, कहते हैं हैलो दुनिया। इतना कहने समारोह है। हैलो दुनिया अपनी पैरामीटर है, या तर्क है, इसकी अनुकूलन। और सी में तुल्यता बस है यहाँ इस एक लाइन होने जा रहा, जहां printf के बराबर है, का कहना है कि डबल उद्धृत स्ट्रिंग, हैलो दुनिया है, के बराबर है, ज़ाहिर है, क्या वहाँ सफेद बॉक्स में करने के लिए। और बैकस्लैश एन, हालांकि एक छोटे से अजीब और खरोंच से अनुपस्थित, बस प्रभाव हम करेंगे किया जा रहा है एक कंप्यूटर में देखते हैं, अपने मैक या पीसी की तरह, की बस चलती अगली पंक्ति के लिए कर्सर। इसे मार की तरह है अपने कुंजीपटल पर दर्ज करें। इसलिए हम चाहते हैं कि फिर से लंबे समय से पहले देखेंगे। लेकिन पहले, चलो इस पर एक नजर डालते हैं छोरों के मामले में अन्य उदाहरण है। हम पिछली बार यह हमेशा के लिए लूप था, जो पहेली टुकड़े की एक श्रृंखला थी कि कुछ शाब्दिक किया इस मामले में forever--, कहते हैं, नमस्कार, नमस्ते विश्व, हैलो दुनिया, हैलो दुनिया। तो यह डिजाइन द्वारा एक अनंत लूप है। सी में, हम इस को लागू करना चाहते हैं एक ही विचार है, हम बस यह कर सकता है। जबकि यह सच है, printf हैलो अब world-- जबकि, बस शब्दार्थ, की तरह करने के विचार को conjures कुछ फिर से, और फिर, और फिर, और कब तक? खैर, याद है कि true-- सच बस पर या एक है। और सच है, बेशक, हमेशा सच है। तो यह एक व्यर्थ की तरह है बयान सिर्फ सच कहने के लिए। लेकिन वास्तव में, यह जानबूझकर है, क्योंकि अगर यह सच है तो बस हमेशा सच है, की तुलना में, जबकि सच तो बस का अर्थ है, एक छोटी सी है, तो परोक्ष रूप से, उस कोड की निम्न पंक्तियाँ उन घुंघराले ब्रेसिज़ के बीच में बस फिर, और फिर से अमल करना चाहिए, और फिर, और वास्तव में रोक कभी नहीं। लेकिन क्या आप चाहते हैं, तो आपके पाश हम के रूप में बंद करने के लिए, ऐसा कुछ के साथ पिछली बार किया था यह, दोहराने के बाद 50 बार सी में हम क्या साथ वही कर सकता कीवर्ड का loop-- के लिए एक बुलाया जबकि, लेकिन के लिए नहीं किया जा रहा। और फिर हम, यहाँ कुछ नई वाक्य रचना है int के साथ मैं 0 मैं 50 से भी कम समय के बराबर होती है, मैं ++। और हम वापस आ जाएगा। लेकिन यह सिर्फ इसलिए है कि हम कैसे होगा स्क्रैच ब्लॉक के सेट का अनुवाद कोड के सी लाइनों का एक सेट करने के लिए। इस बीच, चर पर विचार करें। और, वास्तव में, हम सिर्फ एक पल पहले एक देखा था। और खरोंच के मामले में, अगर हम एक चर मैंने फोन घोषित करना चाहता था मैं पूर्णांक होने के लिए, बस एक संख्या है, और हम कुछ मूल्य के लिए यह निर्धारित करना चाहते हैं, हम इस नारंगी का प्रयोग करेंगे ब्लॉक here-- मैं 0 करने के लिए निर्धारित किया है। और आज हम देखेंगे और से परे है, अभी पिछले सप्ताह की तरह, प्रोग्रामर लगभग हमेशा करते हैं शून्य से गिनती शुरू, वास्तव में रिवाज के अनुसार। लेकिन यह भी याद करते हैं क्योंकि बाइनरी की हमारी चर्चा, सबसे छोटी संख्या आप कर सकते हैं बिट्स के किसी भी संख्या के साथ प्रतिनिधित्व केवल 0 में ही होने जा रहा है। और इसलिए हम आम तौर पर शुरू करेंगे 0 करने के लिए भी हमारे चर प्रारंभ कर रहा। और सी में भी ऐसा ही करने के लिए हम int कहने जा रहे हैं पूर्णांक के लिए, मैं सिर्फ सम्मेलन द्वारा। मैं इस चर बुलाया जा सकता था कुछ भी मैं चाहता हूँ, सिर्फ खरोंच में की तरह। और फिर बराबर 0 बस प्रदान करती है सही से मान 0 और यह चर में डालता है, या भंडारण कंटेनर वहाँ, बाईं तरफ। और अर्द्ध पेट के रूप में हम see-- जाएगा और हम इन already-- के कुछ ही देखा है सिर्फ सोचा के अंत का मतलब है। कुछ और करना आगे बढ़ें लाइनों है कि पालन पर। अब, क्या बूलियन अभिव्यक्ति के बारे में? याद है कि खरोंच में, इन भाव थे या तो सही हैं कि या false-- सवाल, वास्तव में, या तो सही है या गलत कर रहे हैं। तो खरोंच के मामले में, हम हो सकता है इस तरह एक साधारण सवाल पूछना, मैं 50 से कम है? तो मैं, फिर से, एक पूर्णांक है। शायद हम यह प्रयोग कर रहे हैं एक स्क्रैच कार्यक्रम में एक स्कोर का ट्रैक रखने के लिए या कुछ इस तरह का। तो इस वाक्य रचना यहाँ खरोंच में बस का अर्थ है, मैं 50 से कम है? खैर, शुक्र है, कुछ तो है सी में और अनुवाद करने के लिए सरल, इस लिए हम बस मैं कम कहेंगे 50 से, परिचित कुंजी का उपयोग अपने कुंजीपटल पर। इस बीच, अगर तुम चाहते थे कुछ अधिक सामान्य कहते हैं, जैसे, ठीक है, एक्स वाई जहां प्रत्येक से कम नहीं है एक्स और वाई के लिए खुद को चर रहे हैं? हम एक ही बात कर सकते हैं सी में, जब तक हम है के रूप में इन चर पहले से ही बनाया। और हम कैसे देख लेंगे इससे पहले कि लंबे समय से करते हैं। हम बस एक्स वाई से कम कहेंगे। तो क्या आप शुरू कर रहे हैं कुछ समानताएं देखते हैं। और उन लोगों को, जो बने स्क्रैच निश्चित रूप से थे इन बुनियादी विचारों में से कुछ से प्रेरित है। और तुम में से इस तरह देखेंगे कई languages-- में वाक्य रचना न सिर्फ खरोंच, नहीं बस सी, लेकिन अजगर, और जावास्क्रिप्ट, और अभी भी अन्य भाषाओं। चलो एक और निर्माण पर विचार करें सी से, एक की हालत की धारणा, कुछ सशर्त कर रही है। अगर कुछ सच है, यह करते हैं। तो कुछ और ही सच है, ऐसा करते हो। यह प्रोग्रामिंग की तरह है सड़क में एक कांटा के बराबर है। शायद यह एक दो तरह कांटा है, एक तीन तरह कांटा, या अधिक। और खरोंच के साथ, हम हो सकता है कुछ इस तरह देखा। तो यह एक बड़ा एक है। लेकिन रिश्तेदार पर विचार तर्क की सादगी। यदि x y से कम है, तो कहते हैं कि एक्स कम है Y से, और अगर एक्स वाई से अधिक है, फिर कहते हैं कि एक्स वाई से अधिक है। और फिर, तार्किक रूप से, यदि आप स्क्रैच करने के लिए वापस लगता है या सिर्फ अपने स्वयं के मानव अंतर्ज्ञान, खैर, एक्स वाई से बड़ा नहीं होता, तो और एक्स Y से कम नहीं है, तो निश्चित रूप से है एक्स वाई के बराबर होने जा रहा है। तो इस मामले में, घोंसले से उन स्क्रैच ब्लॉक, हम एक तीन हासिल कर सकते हैं सड़क में जिस तरह से कांटा? इस बीच, हम करना चाहते हैं यकीनन ऐसा है कि सी में, यह कम से कम एक छोटे simpler-- लग रहा है एक बार जब आप वाक्य रचना के साथ परिचित हो। यदि x y से कम है, printf एक्स वाई से कम है। वरना अगर एक्स y से अधिक है, printf एक्स वाई से अधिक है। वरना printf एक्स, y-- और के बराबर है फिर, साथ उन लोगों के बैकस्लैश सिर्फ समाप्त होता है उन नई लाइनों के लिए तो यह है कि अगर आप वास्तव में इस कार्यक्रम के इस तरह भागा यह सिर्फ ले जाया जाएगा अपने कर्सर अंततः स्क्रीन के अगली पंक्ति के लिए। अब, इस बीच स्क्रैच दूसरे था अधिक अत्याधुनिक सुविधाओं, केवल जिनमें से कुछ हम करने जा रहे हैं शुरू में सी की दुनिया के लिए पर स्थानांतरित और उनमें से एक था स्क्रैच में एक सूची का आह्वान किया। और यह एक खास था चर के प्रकार है कि अनुमति आप कई चीजों की दुकान यह पीठ में, वापस करने के लिए वापस करने के लिए वापस करने के लिए। सी में, यह जरूरी नहीं है सूचियों, दर असल, लेकिन कुछ अधिक आम तौर पर कर रहे हैं कि सरणियों कहा जाता है, हालांकि हम करेंगे वापस आने के बाद में इस सेमेस्टर कुछ देख करने के लिए एक सूची है, या वास्तव में एक लिंक सूची का आह्वान किया। लेकिन अब, करीबी के लिए हमारे लिए सी में बराबर कुछ होने जा रहा है एक सरणी कहा जाता है। और एक सरणी बस एक है चर के विशेष प्रकार कि आप डेटा स्टोर करने के लिए अनुमति देता है वापस, वापस करने के लिए वापस करने के लिए वापस करने के लिए। और, वास्तव में, स्क्रैच में, हम का उपयोग करना चाहता था एक सरणी के पहले तत्व या एक list-- और मैं इसे कहते करने जा रहा हूँ, सम्मेलन, argv, तर्क से वेक्टर, लेकिन अधिक उस पर लंबे समय से पहले। मैं पहली बार तत्व पर प्राप्त करना चाहते हैं की खरोंच की दुनिया में argv, आप वास्तव में आम तौर पर कर 1 से गिनती शुरू। और इसलिए मैं argv की 1 आइटम मिल सकता है। यही कारण है कि बस कैसे एमआईटी लागू किया है सूचियों की धारणा। लेकिन सी में, मैं करने जा रहा हूँ अधिक बस बस का कहना है, argv, जो फिर से का नाम है मेरा list-- या स्पष्ट होने के लिए, एक सरणी। और मैं चाहता हूँ कि अगर पहले तत्वों, मैं जा रहा हूँ वर्ग कोष्ठक का उपयोग करने के लिए, आप जो अक्सर एक कुंजीपटल के तहत इस्तेमाल नहीं हो सकता है। लेकिन 0 बस का अर्थ है, पहले मुझे मिलता है। तो इस अवसर पर और के रूप में समय गुजरता है, हम जा रहे हैं इन द्विभाजन देखने के लिए शुरू करने के लिए खरोंच और सेल्सियस के बीच, जिससे स्क्रैच से एक का उपयोग करता है। हम सी में यहां 0 का उपयोग करें। लेकिन आप जल्दी से देखेंगे एक बार जब आप समझ में प्रत्येक भाषा की नींव, कि इन बातों को सभी को और अधिक पाने के लिए शुरू अभ्यास और अभ्यास के माध्यम से परिचित। तो चलो वास्तव में एक कार्यक्रम में अब देखो। यहाँ हमारे सी के पहले हो जाएगा पूरा कार्यक्रमों के लिए स्रोत कोड। और कार्यक्रम हम जा रहे हैं विचार के लिए पेशकश करने के लिए एक है कि बराबर है कि पहले स्क्रैच टुकड़ा करने के लिए। यहाँ तो, हम क्या है यकीनन सबसे सरल सी कार्यक्रम आप लिख सकते हैं वास्तव में कुछ भी करता है। अब, हम अतीत देखता हूँ, अभी के लिए, शामिल है, मानक io.h, और इन कोण कोष्ठक, और पूर्णांक, और शून्य, और घुंघराले ब्रेसिज़, और पसंद है। और हम बस पर ध्यान केंद्रित करते हैं क्या, कम से कम intuitively, पहले से ही आप पर बाहर कूद सकता है। वास्तव में, मुख्य, मैं नहीं जरूरी पता है कि यह क्या है, जब कि लेकिन स्क्रैच बहुत पसंद था हरे रंग का झंडा पहेली टुकड़ा क्लिक किया, इसलिए एक प्रोग्रामिंग भाषा के रूप में सी करता है कोड का एक मुख्य टुकड़ा है कि डिफ़ॉल्ट रूप से मार डाला जाता है। सचमुच, यह सचमुच मुख्य बुलाया जा रहा है। तो मुख्य कार्य है। और यह एक विशेष समारोह में कहा कि मौजूद है सी में जब आप एक प्रोग्राम चलाते हैं, ऐसा नहीं है कि द्वारा चलाया जाता है मुख्य है चूक। स्क्रैच की दुनिया में, यह आम तौर पर जब हरे रंग का झंडा था क्लिक किया डिफ़ॉल्ट रूप से चलाने मिला है। इस बीच, हम इस पहले देखा है, printf या प्रिंट स्वरूपित है, कि एक समारोह के साथ आता है कि होने जा रहा सी, दूसरों की एक पूरी गुच्छा के साथ साथ, समय और समय से इच्छा है कि फिर, क्रम में ठीक करने के लिए जैसा कि इसके नाम का सुझाव है, कुछ प्रिंट। क्या हम प्रिंट करना चाहते हैं? ठीक है, हम देखेंगे कि enclosing पात्रों द्वारा these-- हैलो दुनिया की तरह, डबल उद्धरण में बैकस्लैश एन, हम वास्तव में printf बता सकते हैं स्क्रीन पर क्या मुद्रित करने के लिए। लेकिन क्रम में करने के लिए कि, हम दुर्भाग्य से कुछ तो है कि लेने की जरूरत पहले से ही हमें मनुष्य के लिए गुप्त, लेकिन कम से कम यह कुछ हद तक readable-- है तेज शामिल हैं, मानक io.h, पूर्णांक, मुख्य, शून्य, printf, जादुई के सभी मंत्र हम सिर्फ स्क्रीन पर देखा था। लेकिन हम वास्तव में करने के लिए है अभी भी अधिक रहस्यमय जाना। हम पहले कोड अनुवाद करने की जरूरत हम मशीन कोड में लिखना है। और पिछले सप्ताह से याद है कि मशीनों, कम से कम लोगों को पता है कि हम यहाँ, दिन के अंत में ही शून्य और लोगों को समझते हैं। और मेरे भगवान, ये लिखने के लिए यदि हम था शून्य और वास्तव में इस कार्यक्रम के लिए लोगों को, यह बहुत, बहुत जल्दी होगा कुछ भी से बाहर मजा लेते हैं। लेकिन यह पता चला है, पिछले सप्ताह प्रति, कि शून्य और लोगों की इन नमूनों सिर्फ विशेष अर्थ है। कुछ संदर्भों में, वे संख्या मतलब हो सकता है। कुछ संदर्भों में, वे मतलब हो सकता है अक्षर, या रंग, या किसी भी संख्या वहाँ पर अन्य चीजें। लेकिन बस के रूप में आपके कंप्यूटर है एक सीपीयू, सेंट्रल प्रोसेसिंग यूनिट, या आपके कंप्यूटर के अंदर दिमाग। यह आमतौर पर इंटेल की अंदर, कि क्योंकि सबसे बड़ी कंपनियों में से एक कंप्यूटर के लिए सीपीयू बनाता है। खैर, इंटेल सीपीयू और दूसरों बस अग्रिम में फैसला कर लिया है कि शून्य के कुछ पैटर्न और लोगों को विशिष्ट बातों का अर्थ होगा। शून्य और लोगों के कुछ पैटर्न होगा मतलब है, स्क्रीन करने के लिए इस प्रिंट, या इन दो नंबरों को जोड़ने, या इन दो नंबरों घटाना, या से डेटा के इस टुकड़े को स्थानांतरित अपने कंप्यूटर की स्मृति यहाँ पर, या अन्य बहुत कम स्तर के किसी भी संख्या, लेकिन अंत में उपयोगी है, आपरेशनों। लेकिन, शुक्र है, हम इंसानों के लिए नहीं जा रहे हैं विस्तार के इस स्तर को पता करने की जरूरत है। दरअसल, सिर्फ, पिछली बार की तरह है, जहां हम फिर से, और फिर, और फिर अनमना, बहुत कम स्तर से इमारत शून्य और लोगों की तरह पुरातन उच्च स्तर की अवधारणाओं को संख्याओं, और अक्षरों की तरह, और रंग, और अधिक, इसलिए हम प्रोग्रामर के रूप में कर सकते हैं के कंधों पर खड़े दूसरों को, जो हमारे सामने आए हैं और सॉफ्टवेयर है कि अन्य का उपयोग लोगों us-- पहले लिखा है अर्थात् कार्यक्रमों compilers बुलाया। सी एक भाषा है कि आमतौर पर संकलित किया गया है, जिसमें से परिवर्तित करने का मतलब मशीन कोड के लिए स्रोत कोड। विशेष रूप से, क्या इसका मतलब यह है जाती है कि आप अपने स्रोत मिल गया है कोड है कि आप अपने आप को हम जितनी जल्दी लिखते हैं, स्क्रीन पर बस एक पल में होगा, और आप इसे परिवर्तित करना चाहते हैं अंतत: मशीन के लिए code-- उन शून्य और लोगों को केवल अपने मैक या अपने पीसी understands-- आप पहली बार एक मिल गया है के रूप में है कि स्रोत कोड फ़ीड एक विशेष के लिए इनपुट कार्यक्रम एक संकलक कहा जाता है, उत्पादन जिनमें से हम को देखेगा मशीन कोड है। और, वास्तव में, पिछली बार हमने बात की थी के बारे में है, वास्तव में, दिन के अंत में, समस्या को सुलझाना। आप आदानों मिल गया है। और अगर आप outputs मिल गया है। और अगर आप किसी तरह मिल गया है बीच में एल्गोरिथ्म के। एल्गोरिदम निश्चित रूप से हो सकता है सॉफ्टवेयर में लागू किया, हम pseudocode पिछले सप्ताह के साथ देखा था और हम वास्तविक कोड के साथ देखेंगे के रूप में इस सप्ताह। और तो एक संकलक वास्तव में सिर्फ अंदर एल्गोरिदम का एक सेट है इसके बारे में पता है कि कैसे करने के लिए विशेष कीवर्ड परिवर्तित, मुख्य, और printf की तरह, और दूसरों है कि हम सिर्फ शून्य के पैटर्न में देखा था और लोगों को लगता है कि इंटेल के अंदर और अन्य सीपीयू वास्तव में समझता है। इसे कैसे किया जा सकता है? हम एक संकलक कहाँ मिलता है? हम में से अधिकांश यहाँ एक मैक या पीसी है। और अगर आप मैक ओएस चला रहे हैं, या विंडोज, या लिनक्स, या सोलारिस, या अन्य के किसी भी संख्या ऑपरेटिंग सिस्टम। और, वास्तव में, हम कर सकते थे वेब पर बाहर जाना और एक संकलक डाउनलोड अपने मैक या अपने पीसी के लिए अपने विशेष ऑपरेटिंग सिस्टम के लिए। लेकिन हम सब पर होगा विभिन्न पृष्ठों, तो बात करो। हम थोड़ा होता है अलग विन्यास। और चीजें हैं सब एक ही काम नहीं करेगा। और, वास्तव में, इन दिनों हम में से कई का उपयोग नहीं करते कि केवल हमारे लैपटॉप पर चलता सॉफ्टवेयर। इसके बजाय, हम कुछ का उपयोग एक ब्राउज़र की तरह है कि हमें पहुंचने देता है वेब आधारित बादल में अनुप्रयोगों। और बाद में इस सेमेस्टर, वास्तव में हम ऐसा करेंगे। हम आवेदनों लिखेंगे या सॉफ्टवेयर code-- का उपयोग नहीं सी, लेकिन अजगर की तरह अन्य भाषाओं और JavaScript-- कि बादल में चला रहे हैं। और अपने आप को क्या करना है कि, हम सेमेस्टर के दौरान वास्तव में एक क्लाउड-आधारित का उपयोग करेगा CS50 आईडीई के रूप में जाना जाता है पर्यावरण। यह एक वेब आधारित प्रोग्रामिंग है पर्यावरण, या एकीकृत विकास पर्यावरण, आईडीई, कि कुछ के ऊपर बनाया गया है खुला स्रोत सॉफ्टवेयर 9 बादल बुलाया। और हम कुछ शैक्षणिक बनाया है यह करने के सरलीकरण में कुछ सुविधाओं को छिपाने के लिए इतनी के रूप में पहले सप्ताह है कि हम जरूरत नहीं है, जिसके बाद आप कर सकते हैं उन्हें पता चलता है और करना सबसे कुछ भी आप पर्यावरण के साथ चाहते हैं। और यह हमें भी अनुमति देता है, के लिए, कुछ सॉफ्टवेयर पूर्व स्थापित करें। एक तथाकथित CS50 जैसे हालात पुस्तकालय है, जो हम जल्द ही देखेंगे कुछ के साथ सी में हमें प्रदान करता है अतिरिक्त कार्यक्षमता। तो अगर तुम जाओ करने के लिए, अंत में, CS50.io, आप में प्रवेश करने के लिए प्रेरित किया जाएगा और एक बार आप करते हैं और बनाने मुक्त करने के लिए एक खाता, आप एक का उपयोग करने में सक्षम हो जाएगा वातावरण है कि इस तरह से काफी लग रहा है। अब, यह डिफ़ॉल्ट मोड में है। सब कुछ अच्छा है और स्क्रीन पर उज्ज्वल है। हम में से कई की एक आदत है CS50 टुकड़ा है उस पर काम कर काफी देर रात में। और तो आप में से कुछ पसंद हो सकता है यह रात मोड में बदल जाते हैं, तो बात करो। लेकिन, अंत में, आप क्या कर रहे हैं CS50 आईडीई के भीतर देखने के लिए जा रहा तीन अलग areas-- है छोड़ दिया, जहां पर एक क्षेत्र अपनी फाइल में होने जा रहे हैं बादल, ऊपर सही पर एक क्षेत्र जहां अपने कोड संपादन किया जा रहा है। आप को खोलने के लिए सक्षम हो जाएगा किसी भी कार्यक्रम के लिए अलग-अलग टैब आप इस सेमेस्टर के अंदर के बारे में है कि कि ऊपर दाहिने हाथ कोने की। और फिर सबसे arcanely, और अभी तक शक्तिशाली, पर इस बात को होने जा रहा है टर्मिनल विंडो के रूप में जाना जाता है नीचे। यह एक पुराने स्कूल है कमांड लाइन इंटरफेस, या सीएलआई, कि अनुमति देता है आप आदेश पर अमल करने के लिए इस मामले में computer-- पर, cloud-- में कंप्यूटर अपने कोड संकलन की तरह बातें करने के लिए स्रोत कोड से मशीन कोड के लिए, अपने कार्यक्रमों को चलाने के लिए, या शुरू करने के लिए अपने वेब सर्वर, या अपने डेटाबेस का उपयोग करने के लिए, और अन्य तकनीकों के किसी भी संख्या कि हम लंबे समय से पहले का उपयोग करने के लिए शुरू कर देंगे। लेकिन वहाँ पाने के लिए, हम कर रहे हैं वास्तव में लिए किया जा रहा ऑनलाइन जाने और खेल शुरू करने के लिए। और ऐसा करने के लिए, की पहली चलो मुख्य साथ छेड़छाड़ शुरू, और एक कार्यक्रम के मुख्य भाग में लिखें। और चलो कि समारोह का उपयोग करते हैं printf, जो हम पहले से इस्तेमाल किया, बस कुछ कहने के लिए। तो यहाँ मैं CS50 आईडीई के अंदर पहले से ही कर रहा हूँ। मैं अग्रिम में लॉग इन किया है। और मैं पूर्ण खिड़की की जांच की। और हां, तो अंत में, आप भी आ रही समस्याओं में इसी तरह के कदम का पालन करेंगे कि ऑनलाइन प्रलेखन प्रदान करेगा। तो आप के बारे में चिंता करने की जरूरत नहीं है हर छोटी तकनीकी कदम को अवशोषित मैं आज यहां करते हैं। लेकिन आप इस तरह की स्क्रीन मिल जाएगा। मैं रात मोड में होना होता है। और तुम सब कुछ रोशन कर सकते हैं रात मोड अक्षम द्वारा अप। और के अंत में दिन, आप को देखने के लिए जा रहे हैं फ़ाइल areas-- इन तीन मुख्य बाएँ पर ब्राउज़र, ऊपर शीर्ष कोड टैब, और नीचे में टर्मिनल विंडो। मुझे आगे चलते हैं और मेरा पहला कार्यक्रम के बारे में। मैं, preemptively फाइल करने के लिए जाने के लिए जा रहा हूँ सहेजें, और hello.c के रूप में मेरी फाइल को बचाने के। दरअसल, परंपरा से, किसी भी कार्यक्रम हम लिखने कि सी भाषा में लिखा है कुछ नाम होना चाहिए डॉट सी, परंपरा से। इसलिए मैं यह hello.c नाम करने के लिए जा रहा हूँ, क्योंकि मैं तो बस दुनिया को नमस्ते कहना चाहता हूँ। अब मैं ज़ूम करने के लिए जा रहा हूँ बाहर और सहेजें क्लिक करें। और यह सब मैं यहाँ है अब एक टैब है जिसमें मैं कोड लिखने शुरू कर सकते हैं। यह संकलन करने के लिए नहीं जा रहा है। यह कोई मतलब नहीं है। और हां, तो भी मैं परिवर्तित शून्य और लोगों को यह, सीपीयू कोई किया जा रहा है विचार के आसपास क्या हो रहा है। लेकिन अगर मैं लाइनों के बारे में है कि मैच साथ सी सी conventions-- किया जा रहा, फिर, इस वाक्य रचना के साथ language-- की तरह यही नहीं, printf हैलो world-- और मैं के साथ आराम मिल गया समय के साथ यह कर। इसलिए मुझे लगता है मैं बना नहीं लगता है किसी भी टंकण त्रुटि। लेकिन, जाहिर है, बहुत पहले बार जब आप ऐसा करते हैं, आप करेंगे। और मैं क्या करने जा रहा हूँ बहुत हो सकता है अच्छी तरह से आप के लिए पहली बार काम नहीं। और वह पूरी तरह से ठीक है, क्योंकि अभी आप सिर्फ नयापन की एक पूरी बहुत कुछ देख सकता है, लेकिन समय के साथ एक बार जब आप परिचित हो इस माहौल के साथ, और इस भाषा, और दूसरों को, आप चीजों को देखना शुरू करेंगे कि या तो सही है या गलत कर रहे हैं। और यह क्या है टीचिंग फैलो और पाठ्यक्रम सहायकों है, समय के साथ पर इतना अच्छा मिलता है अपने कोड में गलतियों या कीड़े खोलना। लेकिन मुझे लगता है कि वहाँ का दावा इस कोड में कोई कीड़े हैं। तो अब मैं इस कार्यक्रम को चलाने के लिए चाहते हैं। अब अपने दम पर मैक या पीसी, मैं में हूँ डबल क्लिक माउस की आदत जब मैं कुछ कार्यक्रम चलाना चाहते हैं। लेकिन यह है कि मॉडल यहाँ नहीं है। इस माहौल है, जो CS50 आईडीई है। हम एक ऑपरेटिंग उपयोग कर रहे हैं सिस्टम लिनक्स कहा जाता है। लिनक्स दूसरे की याद ताजा करती है ऑपरेटिंग सिस्टम है, आम तौर पर जाना जाता है यूनिक्स के रूप में। और लिनक्स के लिए विशेष रूप से जाना जाता है एक कमांड लाइन वातावरण, सीएलआई कर रही है। अब, हम एक विशिष्ट प्रयोग कर रहे हैं लिनक्स का स्वाद उबंटू का आह्वान किया। और Ubuntu बस एक है लिनक्स के कुछ संस्करण। लेकिन इन लिनक्स इन दिनों वास्तव में क्या ग्राफिकल यूजर इंटरफेस के साथ आते हैं। और एक हम के लिए होता है यहाँ का उपयोग किया जा वेब आधारित है। तो यह भी एक लग सकता है कुछ से थोड़ा अलग आप अपने आप को हो सकता है देखा या अतीत में चला रहे हैं। तो मैं आगे जाने के लिए जा रहा हूँ अब और निम्नलिखित है। मैं इस फाइल hello.c के रूप में सहेजे गए हैं। मैं आगे जाने के लिए जा रहा हूँ और प्रकार clanghello.c बजना तो सी भाषा के लिए एक संकलक है। यह पहले से स्थापित है CS50 आईडीई में। और आप पूरी तरह से डाउनलोड कर सकते हैं और अपने खुद के मैक या पीसी पर यह स्थापित। लेकिन, फिर से, आप सभी के लिए नहीं होता पूर्व विन्यास आप के लिए किया। तो अब के लिए, मैं अभी कर रहा हूँ clanghello.c चलाने के लिए जा रहा है। और अब इस वाक्य रचना नोटिस यहाँ अंत में होगा एहसास बस का अर्थ है कि मैं एक में हूँ फ़ोल्डर या निर्देशिका कार्यक्षेत्र बुलाया। यह डॉलर के हस्ताक्षर सिर्फ परंपरा है अर्थ के लिए, अपने आदेशों यहाँ टाइप करें। ऐसा नहीं है जो एक त्वरित कहा जाता है, बस सम्मेलन द्वारा डॉलर की निशानी है। और अगर मैं अब आगे जाना है और क्लिक करें दर्ज करें, कुछ भी नहीं हुआ है लगता है। लेकिन यह है कि वास्तव में एक अच्छी बात है। कम उस पर होता है अपनी स्क्रीन है, और अधिक होने की संभावना अपने कोड सही हो सकता है, कम से कम वाक्य रचना। तो अगर मैं इस चलाना चाहते हैं कार्यक्रम है, मैं क्या करूँ? खैर, यह पता चला है कि सम्मेलन द्वारा डिफ़ॉल्ट नाम कार्यक्रमों के लिए जब आप एक निर्दिष्ट नहीं करते नाम के लिए अपने कार्यक्रम सिर्फ a.out है। और इस वाक्य रचना भी है, तुम हूँ लंबे समय से पहले से परिचित हो। डॉट स्लेश बस का अर्थ है, हे, CS50 आईडीई, एक कार्यक्रम a.out बुलाया चलाने कि मेरे वर्तमान निर्देशिका के अंदर है। यही कारण है कि डॉट मौजूदा निर्देशिका का मतलब है। और हम क्या अन्य ऐसे दृश्यों देखेंगे पात्रों के लंबे समय से पहले का मतलब है। तो यहाँ हम चले, दर्ज करें, हैलो दुनिया। और तुम नोटिस हूँ, कि क्या हुआ? इतना ही नहीं यह हैलो दुनिया मुद्रित किया था। यह भी ले जाया गया अगली पंक्ति के लिए कर्सर। और क्यों था? कोड है कि हम पहले लिखा क्या था कि यह सुनिश्चित किया कि कर्सर होगा अगली पंक्ति पर जाना है? एक के बारे में मजेदार बात कंप्यूटर यह केवल जा रहा है सचमुच ऐसा करने के लिए आप क्या करना है यह बताओ। तो अगर आप हैलो printf यह बताने के लिए करते हैं, अल्पविराम, अंतरिक्ष, दुनिया, बंद भाव, यह सचमुच ही जा रहा है उन पात्रों मुद्रित करने के लिए। लेकिन मैं इस विशेष चरित्र था अंत में, याद है, बैकस्लैश एन। और है कि क्या यह सुनिश्चित किया है उस चरित्र के लिए चला गया स्क्रीन के अगली पंक्ति के लिए। वास्तव में, मुझे जाने और यह करते हैं। मुझे आगे जाना है और इसे हटाना करते हैं। अब, कि नोटिस मेरा स्क्रीन के ऊपर वहाँ है में एक छोटे से लाल बत्ती टैब का संकेत है, अरे, आप अपनी फ़ाइल को सहेजा नहीं गए हैं। तो मैं नियंत्रण के साथ आगे जाने के लिए जा रहा हूँ एस या आदेश एस, फ़ाइल सहेजें। अब यह एक moment-- हरे रंग के लिए चला गया goes--। और अब यह करने के लिए वापस आ गया है सिर्फ एक करीबी आइकन जा रहा है। अब मैं फिर से clanghello.c चलाते हैं, दर्ज करें, डॉट स्लेश, a.out, दर्ज करें, आप देखेंगे कि यह अभी भी काम किया। लेकिन यह यकीनन एक छोटी छोटी गाड़ी है। अभी, मेरे prompt-- कार्यक्षेत्र, और फिर उस डॉलर के हस्ताक्षर, और फिर मेरे वास्तविक prompt-- सभी एक ही लाइन पर है। तो यह निश्चित रूप से एक सौंदर्य बग, यहां तक ​​कि अगर यह सच में एक तार्किक बग नहीं है। इसलिए मुझे लगता है मैं बस क्या था पूर्ववत करने के लिए जा रहा हूँ। मैं फिर से दौड़ना a.out करने जा रहा हूँ। सूचना मैंने जोड़ दिया है newline चरित्र वापस। मैं फ़ाइल बचा लिया। तो मैं फिर से दौड़ना a.out करने जा रहा हूँ और-- Dammit, एक बग, एक बग अर्थ गलती। तो बग है कि भले ही है मैं वहाँ n बैकस्लैश कहा, फिर से बचाया, कार्यक्रम फिर से भाग गया, व्यवहार ही किया गया था। ऐसा क्यों है कि हो सकता है? मैं एक कदम है, है ना याद आ रही है? यही कारण है कि महत्वपूर्ण कदम है कि आप पहले था जब आप अपने स्रोत कोड बदलने है--, यह पता चला है भी चलाते हैं यह संकलक के माध्यम से फिर तो आप नई मशीन कोड मिलता है। और मशीन कोड, शून्य और लोगों, लगभग समान होने जा रहे हैं लेकिन पूरी तरह तो नहीं, क्योंकि हम की जरूरत है, जाहिर है, कि नई लाइन। तो यह तय करने के लिए, मैं जरूरत के लिए जा रहा हूँ clanghello.c फिर से दौड़ना, प्रवेश, डॉट स्लेश, a.out। और अब, नमस्ते विश्व वापस आ गया है मैं जहां उम्मीद करने के लिए यह किया जाना है। तो यह सब ठीक है और अच्छा है। लेकिन a.out एक के लिए एक बहुत बेवकूफ नाम है कार्यक्रम है, भले ही यह होना होता है, ऐतिहासिक कारणों से, विधानसभा outputs अर्थ default--। लेकिन मुझे आगे चलते हैं यहां और यह अलग है। मैं अपने नमस्ते विश्व कार्यक्रम चाहते हैं वास्तव में करने के लिए हैलो कहा जा। तो अगर उस पर एक आइकन थे मेरे डेस्कटॉप, यह a.out नहीं किया जाएगा। यह हैलो बुलाया जाएगा। तो यह करने के लिए, यह पता चला कि बजना, कई कार्यक्रमों की तरह, कमांड लाइन तर्क का समर्थन करता है, या झंडे, या स्विच, बस अपने व्यवहार को प्रभावित करता है। विशेष रूप से, बजना एक पानी का छींटा ओ का समर्थन करता है झंडा, जो फिर एक दूसरा शब्द लेता है। इस मामले में, मैं मनमाने ढंग से करेंगे, लेकिन काफी है, यह हैलो कहते हैं। लेकिन मैं इसे कुछ भी कह सकते हैं मैं चाहता हूँ, a.out, सिवाय जो बजाय बिंदु के अलावा होगा। और फिर बस नाम निर्दिष्ट फ़ाइल का मैं संकलन करना चाहते हैं। तो अब भी शुरुआत में हालांकि कमांड मैं अभी भी बजना है, आदेश के अंत में मैं अभी भी फ़ाइल का नाम है, अब मैं इन कमांड लाइन है तर्क, इन झंडे कि कह रहे हैं, ओह, वैसे, उत्पादन-ओ, एक फ़ाइल नमस्ते कहा जाता है, नहीं डिफ़ॉल्ट a.out। तो अब, कुछ भी नहीं दर्ज करता है, तो मैं मारा हुआ है लगता है। और, अभी तक, अब मैं डॉट स्लेश हैलो कर सकते हैं। तो यह एक ही कार्यक्रम है। शून्य और लोगों रहे हैं दिन के अंत में समान। लेकिन वे दो में हैं अलग files-- a.out, जो पहला संस्करण है और सिर्फ मूर्खता का नाम है, और अब हैलो, जो एक बहुत है एक कार्यक्रम के लिए और अधिक सम्मोहक नाम। लेकिन, ईमानदारी से, मैं कभी नहीं हूँ यह फिर से याद करने के लिए जा रहा है, और फिर, और फिर। और, वास्तव में, जैसा कि हम के बारे में अधिक जटिल प्रोग्राम, आदेशों आप कर रहे हैं लिखने के लिए किया जा रहा यहां तक ​​ले जा रहे हैं अधिक अभी भी जटिल है। और तो चिंता करने की नहीं। यह पता चला है कि मनुष्य पहले हमें वे भी एहसास हो गया है इस सटीक एक ही समस्या थी। वे भी करने के लिए होने का आनंद नहीं था काफी लंबे, रहस्यमय आदेश टाइप करें, अकेले उन्हें याद है। और इसलिए हमें पहले मनुष्य बना दिया है अन्य कार्यक्रमों है कि यह आसान बनाने के लिए अपने सॉफ्टवेयर संकलन करने के लिए। और, वास्तव में, एक ऐसी कार्यक्रम बनाने को कहा जाता है। इसलिए मुझे आगे जाना है और यह करने के लिए जा रहा हूँ। मैं सब कुछ पूर्ववत करने के लिए जा रहा हूँ मैं सिर्फ निम्नलिखित तरीके से किया था। मेरे LS टाइप करते हैं। और अगर आप तीन नोटिस देंगे things-- a.out, और एक स्टार, हैलो और एक स्टार और hello.c। उम्मीद है, इस करना चाहिए एक छोटे सहज ज्ञान युक्त हो, जहां तक ​​पहले वहाँ था इस कार्यक्षेत्र में कुछ भी नहीं है। कुछ भी नहीं है कि मैं था नहीं था बनाया जब तक हम क्लास शुरू कर दिया। और मैं hello.c बनाया। मैं तो इसे संकलित है, और यह a.out बुलाया। और फिर मैं इसे फिर से थोड़ा संकलित अलग ढंग से और यह नमस्ते कहा जाता है। इसलिए मैं इस निर्देशिका में तीन फाइल किया है, इस फ़ोल्डर कार्यक्षेत्र में बुलाया। अब, मुझे लगता है कि वहाँ के रूप में अच्छी तरह से कर सकते हैं अगर मैं वास्तव में बाहर ज़ूम। अगर मैं यहाँ बाहर ज़ूम और कि शीर्ष दाहिने हाथ में देखो कोने, बाएं वादा किया था के रूप में अपनी स्क्रीन के हाथ की ओर हमेशा के लिए आप को दिखाने के लिए जा रहा है क्या अपने खाते में है, क्या है CS50 आईडीई के अंदर। और वहाँ तीन फाइल नहीं है। तो मैं a.out से छुटकारा पाने के लिए और हैलो चाहते हैं। और जैसा कि आप हो सकता है intuitively कल्पना, आप नियंत्रण क्लिक करें का सुलझा सकता था या सही इस पर क्लिक करें। और इस छोटे से मेनू चबूतरे। आप फाइल को डाउनलोड कर सकते हैं, चलाने के लिए यह, यह पूर्वावलोकन ताज़ा, नाम बदलने, या क्या नहीं। और मैं सिर्फ नष्ट कर सकता है, और इसे दूर जाना होगा। लेकिन एक आदेश के साथ बातें करते हैं अब के लिए लाइन इतनी के रूप में आराम पाने के लिए इस के साथ, और निम्नलिखित है। मुझे आगे जाना है और दूर करने के लिए जा रहा हूँ सचमुच rma.out टाइप करके a.out। यह पता चला है, के लिए आदेश हटाने या कुछ को हटाने, हटाने या हटा नहीं है। इसे और अधिक संक्षेप आरएम बस को बचाने के लिए है, आप कुछ कीस्ट्रोक, और हिट दर्ज करें। अब हम कुछ हद तक होने जा रहे हैं cryptically नियमित फाइल a.out को हटा दें। मैं वास्तव में क्या एक पता नहीं है अनियमित फ़ाइल अभी तक होगा। लेकिन मैं इसे दूर करना चाहते हैं। तो मैंने हाँ के लिए y टाइप करने के लिए जा रहा हूँ। या मैं इसे बाहर टाइप करें, और हिट दर्ज कर सकता है। और, फिर, कुछ भी होने लगता है। लेकिन यह है कि, एक अच्छी बात है आम तौर पर। अगर मैं इस समय लोकसभा टाइप करें, मैं क्या देखना चाहिए? उम्मीद है, बस नमस्ते और hello.c। अब, एक अलग रूप में, तुम हूँ इस स्टार तारांकन नोटिस, कि अपने कार्यक्रमों के अंत में है। और वे भी हरे रंग में दिख रहे हैं। वह सिर्फ CS50 आईडीई की तरह है इस तथ्य में आप cluing की वह यह है कि स्रोत कोड नहीं है। यही कारण है कि एक निष्पादन, एक runnable है प्रोग्राम है कि आप वास्तव में चला सकते हैं डॉट स्लेश कर रही है, और तब तक यह नाम है। अब, मुझे आगे जाना है और हटाने चलो इस, आरएम हैलो, दर्ज करें, जो नियमित रूप से हटाने के हैलो दाखिल, हाँ। और अब अगर मैं लोकसभा टाइप करें, हम वापस hello.c लिए कर रहे हैं। नष्ट करने के लिए नहीं की कोशिश करें अपने वास्तविक स्रोत कोड। हालांकि वहाँ विशेषताएं हैं CS50 आईडीई जहां में निर्मित यदि आप अपने संशोधन इतिहास के माध्यम से जा सकते हैं और समय में उल्टा अगर आप गलती कुछ को हटा दें, ध्यान में रखना होगा करना इन संकेतों का हाँ या नहीं के अनुसार, आप वास्तव में क्या करना चाहते हैं। और अगर मैं चोटी पर चढ़ जाना हाथ के कोने छोड़ दिया है यहाँ, सब कि रहता hello.c है। तो वहाँ के गुच्छों है अन्य आदेश है कि आप लिनक्स की दुनिया में निष्पादित कर सकते हैं, जिनमें से एक फिर से बनाने के लिए, है। और हम बनाने जा रहे हैं अपने कार्यक्रम के रूप में अब इस प्रकार है। इसके बजाय बजना कर के, बजाय बजना-ओ कर के, मैं बस करने के लिए जा रहा हूँ सचमुच टाइप करें, नमस्ते करते हैं। और अब नोटिस, मैं हूँ hello.c बनाने टाइपिंग नहीं। मैं नमस्ते बनाने टाइप कर रहा हूँ। और इस कार्यक्रम बनाओ कि CS50 आईडीई, और अधिक के साथ आता है आम तौर पर लिनक्स के साथ, एक प्रोग्राम है कि है एक कार्यक्रम हैलो बुलाया बनाने के लिए जा रहा है। और यह कल्पना करने के लिए, परंपरा से हो रहा है कि अगर इस कार्यक्रम बनाया जा सकता है, यह एक स्रोत से बनाया जा रहा है कोड फ़ाइल डॉट ग में समाप्त, hello.c। तो अब, सूचना दर्ज करता है, तो मैं मारा कि आदेश मार डाला जाता है कि वास्तव में अब भी है पहले की तुलना में पहले। और उसकी वजह हम है है preconfigured CS50 आईडीई के लिए है कुछ अतिरिक्त है कि में बनाया सुविधाओं हम अभी जरूरत नहीं है, लेकिन जल्दी ही होगा। लेकिन महत्वपूर्ण बात का एहसास है अब मैं एक कार्यक्रम हैलो किया है। अगर मैं LS फिर से टाइप करें, मैं एक हैलो कार्यक्रम है। और मैं उसके साथ चला सकते हैं डॉट a.out स्लेश, नहीं, इस वजह से सारी बात व्यायाम डॉट स्लेश हैलो था। और अब मैं अपने नमस्ते विश्व कार्यक्रम है। तो आगे बढ़ रहा है, हम लगभग हमेशा सिर्फ रहे हैं हमारे कार्यक्रमों संकलन करने के लिए जा रहा कमांड बनाने का उपयोग कर। और फिर हम ने उन्हें चलाने के लिए जा रहे हैं डॉट स्लेश, और इस कार्यक्रम का नाम। लेकिन क्या एहसास बनाने के लिए क्या कर रही है आप इसे अपने आप में एक संकलक नहीं है। यह सिर्फ एक सुविधा कार्यक्रम है कोई जानता है कि कैसे एक संकलक ट्रिगर करने के लिए इसलिए चलाने के लिए कि आप अपने आप इसका इस्तेमाल कर सकते हैं। क्या अन्य आदेशों में मौजूद लिनक्स, और बदले CS50 आईडीई में? हम जल्द ही देखेंगे कि वहाँ एक सीडी कमांड, निर्देशिका बदलें। यह आप के भीतर की अनुमति देता है अपने कमांड लाइन इंटरफेस आगे बढ़ने के लिए, और वापस, और अलग फ़ोल्डर को खोलने के लिए अपने माउस का उपयोग किए बिना। लोकसभा हमने देखा है, जो सूची के लिए खड़ा है मौजूदा निर्देशिका में फ़ाइलों। दीर बनाओ, आप कर सकते हैं शायद अनुमान करने के लिए शुरू ये क्या now-- निर्देशिका बनाने का मतलब है, आप एक फ़ोल्डर बनाने के लिए चाहते हैं। निकालें के लिए RM, आरएम के लिए दीर directory-- और इन को हटाने, फिर, कमांड लाइन कर रहे हैं आप क्या के समकक्ष अपने माउस के साथ CS50 आईडीई में कर सकता है। लेकिन आप जल्दी ही मिल जाएगा कि कभी कभी यह सिर्फ है एक बहुत तेजी से ऐसा करने के लिए एक कुंजीपटल के साथ बातें करते हैं, और अंत में एक बहुत अधिक शक्तिशाली है। लेकिन यह तर्क है कि मुश्किल है कुछ भी हम अब तक कर दिया गया है सब है कि शक्तिशाली, जब सब है हम कह रहा है, हैलो दुनिया। और, वास्तव में, मैं हार्डकोडेड शब्द मेरे कार्यक्रम में हैलो दुनिया। कोई गतिशीलता अभी तक नहीं है। स्क्रैच परिमाण के एक आदेश था अधिक दिलचस्प पिछले सप्ताह। और तो वहाँ मिलता है। के द्वारा कि ओर एक कदम रखना इन कार्यों में से कुछ के रास्ते। इतना ही नहीं, सी printf के साथ आता है, और अन्य कार्यों के गुच्छों जिनमें से कुछ हम देखेंगे समय के साथ, यह नहीं है सही बाहर यह है कि सभी के लिए आसान बनाने के उपयोगकर्ता इनपुट प्राप्त करने में गेट की। वास्तव में, कमजोरियों में से एक सी जैसी भाषाओं की, और यहां तक ​​कि जावा और अभी तक दूसरों के लिए, कि यह नहीं करता है यह आसान बस की तरह चीजों को पाने के लिए बना उपयोगकर्ताओं, या तार, शब्दों से पूर्णांकों, और वाक्यांशों, जैसे बातें अकेला चलो चल बिन्दु मान, या वास्तविक संख्या दशमलव अंक, और सच के साथ लंबे समय तक नंबर, के रूप में हम जल्द ही देखेंगे। तो यहाँ कार्यों की इस सूची में, इन अन्य स्क्रैच पहेली टुकड़े की तरह हैं हम CS50 में पहले से स्थापित किया है कि आईडीई है कि हम एक कुछ हफ्तों के लिए इस्तेमाल करेंगे एक तरह की प्रशिक्षण के पहियों, और के रूप में अंततः उन्हें दूर ले, और देखो हुड, शायद, पर नीचे कैसे इन बातों को लागू कर रहे हैं। लेकिन ऐसा करने के लिए, चलो वास्तव में एक कार्यक्रम के बारे में। मुझे आगे अब चलते हैं। और मैं एक नया बनाने के लिए जा रहा हूँ इस छोटी सी प्लस क्लिक करके फ़ाइल, और नई फ़ाइल क्लिक करें। मैं यह अगले बचाने के लिए जा रहा हूँ के रूप में, हम कहते हैं एक, string.c, क्योंकि मैं तार के साथ खेलना चाहते हैं। और सी में स्ट्रिंग बस है पात्रों का एक दृश्य। तो अब आगे चलते हैं और निम्नलिखित है। शामिल मानक IO.h-- और यह पता चला है मानक कब, कब बस इनपुट और आउटपुट का मतलब है। तो यह पता चला है कि यहाँ इस लाइन क्या है printf का उपयोग करने के लिए हमें पड़ोसी है। Printf, ज़ाहिर है, उत्पादन पैदा करता है। तो क्रम में printf का उपयोग करने के लिए, यह बदल जाता है बाहर आप कोड की इस पंक्ति के लिए है आपकी फ़ाइल के शीर्ष पर। और हम करने के लिए वापस आ गया हूँ क्या कि वास्तव में लंबे समय से पहले का मतलब है। यह पता चला है कि में किसी भी सी कार्यक्रम मैं लिखना, मैं के साथ इसे शुरू करने के लिए मिल गया है कोड है कि इस तरह दिखता है। और अगर आप CS50 आईडीई नोटिस, और करेंगे अन्य एकीकृत विकास यह तरह के वातावरण, के रूप में पूरी कोशिश करने जा रहे हैं वे अपने विचार खत्म करने के लिए कर सकते हैं। वास्तव में, एक पल पहले अगर मैं पूर्ववत मैं तो बस क्या था, मैं हिट दर्ज करें। मैं तो खुले घुंघराले मारा गले लगा, फिर हिट दर्ज करें। और यह मेरे विचार समाप्त हो गया। यह मेरे लिए एक नई लाइन दे दी है, कम नहीं खिसका अच्छा शैलीगत कारणों के लिए हम देखेंगे। और फिर यह स्वचालित रूप से मुझे दिया कि घुंघराले ब्रेस मेरे विचार खत्म करने के लिए। अब, यह हमेशा नहीं होता लगता है कि आप क्या करना चाहते हैं। लेकिन बड़े हिस्से में, यह करता है आप कुछ कीस्ट्रोक्स बचाने के लिए। तो एक पल पहले, हम इस program-- भागा हैलो, दुनिया, और फिर इसे संकलित, और फिर यह भाग गया। लेकिन वहाँ कोई गतिशीलता यहाँ है। क्या होगा यदि हम चाहते थे कुछ अलग करें? खैर, क्या हुआ अगर मैं वास्तव में चाहता था उपयोगकर्ता से एक स्ट्रिंग मिलता है? मैं एक पहेली टुकड़े का उपयोग करने के लिए जा रहा हूँ वास्तव में बुलाया that-- स्ट्रिंग मिलता है। सी में पता चला है कि है जब आप नहीं चाहते एक पहेली टुकड़ा करने के लिए इनपुट प्रदान करने के लिए, या अधिक एक समारोह के लिए ठीक है, आप सचमुच सिर्फ खुला कोष्ठक करते हैं, बंद कोष्ठक। तो यह है कि वहाँ है कोई सफेद बॉक्स में टाइप करने के लिए। कहते ब्लॉक से पहले एक छोटे सफेद बॉक्स था। अब हम है कि सफेद बॉक्स नहीं है। लेकिन जब मैं तार मिल कहते हैं, मैं परिणाम कहीं डाल करना चाहते हैं। तो सी में एक बहुत ही आम प्रतिमान के लिए है एक समारोह में मिलता है, स्ट्रिंग की तरह यहाँ फोन, और उसके बाद अपनी वापसी मूल्य की दुकान। उसी का नतीजा है इसकी कुछ में प्रयास। और क्या है प्रोग्रामिंग में निर्माण, सी खरोंच में या अब चाहे, कि हम वास्तव में कुछ स्टोर करने के लिए उपयोग कर सकते हैं? यह सही एक चर कहा जाता है,? और खरोंच के साथ, हम वास्तव में नहीं है परवाह क्या चर में जा रहा था। लेकिन इस मामले में, हम वास्तव में है। मैं स्ट्रिंग कहने जा रहा हूँ। और फिर मैं कह सकते हैं यह कुछ भी मैं चाहता हूँ। मैं यह कॉल करने के लिए जा रहा हूँ नाम, स्ट्रिंग प्राप्त हो जाता है। और अब आप कर रहे हैं, भले ही इस के लिए एक छोटा सा नया, सूचना है कि मैं कुछ विस्तार से कमी कर रहा हूँ। मैं एक अर्धविराम भूल रहा हूँ। मैं इस विचार को खत्म करने की जरूरत है। तो मैं अपने कर्सर ले जाने के लिए जा रहा हूँ, और वहाँ सेमी कॉलन मारा। और मैं सिर्फ क्या किया है? कोड की इस पंक्ति में, इस समय नंबर 5, मैं कोई आदानों के साथ तार मिल बुला रहा हूँ। तो वहाँ कोई छोटे सफेद है बॉक्स की तरह बचाना ब्लॉक है। मैं सिर्फ इतना कह रहा हूँ, अरे, कंप्यूटर, मुझे एक स्ट्रिंग मिलता है। बराबर चिह्न सच नहीं है एक बराबर चिह्न, प्रतिशत से। यह काम है ऑपरेटर, जिसका अर्थ है, अरे, कंप्यूटर, मूल्य के लिए कदम बाईं ओर से सही। और बाएँ में, मैं निम्नलिखित है। अरे, कंप्यूटर, मुझे एक string-- देना पात्रों का एक दृश्य। और कॉल कि स्ट्रिंग नाम। और मैं भी इसे नाम कॉल करने के लिए नहीं है। मैं यह कह सकते हैं, पारंपरिक, एस की तरह कुछ है, बहुत पसंद है हम मैं करने के लिए इस्तेमाल किया चर मैं कहते हैं। लेकिन अब मैं इसके साथ कुछ करने की जरूरत है। यह बहुत करने के लिए बेवकूफ होगा इस कोड संकलन की कोशिश चल रहा है, इस कार्यक्रम है, भले ही मैं एक स्ट्रिंग हो रही है, क्योंकि यह अभी भी सिर्फ है हैलो कहने के लिए दुनिया जा रही है। लेकिन क्या मैं इस परिवर्तन करना चाहते हैं। मैं ऐसा क्यों नहीं करते? प्रतिशत है, अल्पविराम है। और यह अभी भी एक छोटे गुप्त है। तो मुझे अपने चर और अधिक स्पष्ट कर दूं। मुझे इस चर नाम नाम हैं। और चलो देखते हैं अगर हम तंग नहीं कर सकते हैं इसके अलावा यहाँ क्या हो रहा है। तो लाइन पांच पर, मैं एक स्ट्रिंग हो रही है। और मैं उस स्ट्रिंग संग्रहीत कर रहा हूँ, जो उपयोगकर्ता में टाइप किया गया है अपने या अपने कीबोर्ड पर, एक चर नाम कहा जाता है। और यह पता चला है कि printf न सिर्फ करता है डबल में एक बहस को देखा जा कोट, डबल कोट में एक इनपुट। यह दो या तीन, या अधिक, इस तरह के ले जा सकते हैं कि, दूसरे या तीसरे या चौथे, सभी चर के नाम हैं, या विशेष महत्व देता है, कि आप में प्लग करने के लिए चाहते हैं, गतिशील, उद्धरण में है कि स्ट्रिंग। दूसरे शब्दों में, क्या इस के साथ गलत हो सकता है? अगर मैं सिर्फ इतना कहा हैलो नाम, बैकस्लैश एन, मेरी फाइल को बचाया, मेरे कोड संकलित, और इस भाग गया, तो क्या होगा? यह सिर्फ कहने के लिए जा रहा है, हैलो नाम है, सचमुच एन-ए-एम-ई, जो बेवकूफ की तरह है क्योंकि है यह दुनिया से अलग नहीं है। तो उद्धरण में कुछ भी नहीं है क्या सचमुच मुद्रित हो जाता है। तो अगर मैं करने के लिए चाहते हैं एक प्लेसहोल्डर, मैं वास्तव में उपयोग करने की आवश्यकता कुछ विशेष सिंटेक्स। और यह पता चला है, तो आप पढ़ printf समारोह के लिए दस्तावेज, यह आपको बता देगा कि आप प्रतिशत s का उपयोग करते हैं, आप एक मूल्य के रूप में स्थानापन्न कर सकते हैं। उस के बाद एक अल्पविराम के बाद दोहरे उद्धरण, तो आप बस के नाम के बारे में चर कि आप चाहते हैं उस प्रारूप में में प्लग करने के लिए कोड, या स्वरूप विनिर्देशक, तार के लिए प्रतिशत है। और अब मैं अपने फ़ाइल को बचाया गया है, मैं वापस अपने टर्मिनल के लिए नीचे चलते हैं। और मैं स्ट्रिंग बनाने टाइप करें, क्योंकि, फिर से, इस का नाम फ़ाइल है कि मैं पहले चुना string.c है। तो मैं स्ट्रिंग बनाने, प्रवेश कहने जा रहा हूँ। हे भगवान, के सभी देखो गलतियों को हम पहले ही कर दिया है। और यह है- क्या है, यह सच है एक छह, सात लाइन कार्यक्रम की तरह? तो यह है, जहां यह बहुत कर सकते हैं जल्दी से भारी मिलता है। इस टर्मिनल विंडो है अब सिर्फ regurgitated त्रुटि संदेशों में से एक बड़ी संख्या है। निश्चित रूप से, मैं और अधिक त्रुटि नहीं है मैं से संदेशों कोड की लाइनों की है। तो क्या चल रहा है? खैर, सबसे अच्छी रणनीति आप किसी भी समय क्या करना एक भारी मुठभेड़ लगता है कि जैसे त्रुटियों की सूची, वापस स्क्रॉल है, आदेश के लिए देखो तुम सिर्फ भाग गया, जो मेरे मामले में स्ट्रिंग बनाने के लिए है। क्या था बनाने को देखो, और वह है कि लंबे बजना आदेश, वहाँ कोई बड़ी बात नहीं। लेकिन लाल खराब है। ग्रीन होने की कोशिश कर रहा है कोमल और उपयोगी है। लेकिन यह अभी भी बुरा है, इस मामले में। लेकिन जहां यह बुरा है? String.c, लाइन पांच, चरित्र पांच। तो यह सिर्फ आम सम्मेलन है। कुछ पेट के कुछ का मतलब लाइन नंबर और चरित्र संख्या। त्रुटि, अघोषित का उपयोग पहचानकर्ता स्ट्रिंग। आप में मानक मतलब है? तो, दुर्भाग्य से, बजना सहायक होने की कोशिश कर रहा है। लेकिन यह गलत है, इस मामले में। नहीं, बजना, मैं मानक कब मतलब नहीं था। मैं लाइन पर एक का मतलब है कि, हाँ। लेकिन लाइन पाँच यहाँ यह एक है। और बजना नहीं करता समझ में एस टी आर-मैं-एन-जी। यह एक अघोषित पहचानकर्ता, एक है यह शब्द सिर्फ पहले कभी नहीं देखा गया है। और उसकी वजह सी, भाषा है हम में कोड लिख रहे हैं अब ठीक है, चर तार बुलाया नहीं है। यह नहीं करता डिफ़ॉल्ट, समर्थन से कुछ एक स्ट्रिंग कहा जाता है। इस बात का एक टुकड़ा है CS50 शब्दजाल है, लेकिन बहुत परम्परागत। इस प्रकार के रूप में लेकिन मैं इसे ठीक कर सकते हैं। मैं कोड की एक पंक्ति जोड़ने के लिए इस कार्यक्रम के शीर्ष करने के लिए, CS50.h, जो एक और फाइल है शामिल कहीं CS50 आईडीई के अंदर कहीं न कहीं, हार्ड ड्राइव पर, तो बात है, उबंटू ऑपरेटिंग सिस्टम की कि मैं भाग रहा हूँ, कि फ़ाइल है कि है ऑपरेटिंग सिखाने के लिए जा रहा सिस्टम क्या एक स्ट्रिंग है, बस मानक io.h तरह फ़ाइल है ऑपरेटिंग सिस्टम है कि में क्या printf है यह सिखाने के लिए जा रहा है। दरअसल, हम मिल गया होता एक बहुत ही इसी संदेश यदि कब मानक स्वीकार किया था IO.h और printf का उपयोग करने की कोशिश की। तो मैं आगे और बस जाने के लिए जा रहा हूँ नियंत्रण एल ले मेरी स्क्रीन स्पष्ट करने के लिए। या आप स्पष्ट टाइप कर सकते हैं और यह होगा सिर्फ टर्मिनल विंडो साफ़ करें। लेकिन आप अभी भी समय में वापस स्क्रॉल कर सकते हैं। और मैं फिर से दौड़ना स्ट्रिंग बनाने के लिए जा रहा हूँ। मेरी उंगलियों के इस समय के पार, दर्ज करें। हे भगवान, यह काम किया। यह मेरे लिए एक लंबे समय तक गुप्त आदेश से पता चलता है कि क्या बजना के माध्यम से उत्पन्न कर रहा है, लेकिन कोई त्रुटि संदेश। तो पता ही है, भले ही आप पूरी तरह से मिल सकता है साथ अभिभूत त्रुटि संदेश की संख्या, यह सिर्फ इस कष्टप्रद व्यापक हो सकता है प्रभाव, जहां बजना समझ में नहीं है एक बात है, जो यह तो मतलब है अगले शब्द समझ में नहीं आता, या अगली पंक्ति। और तो यह सिर्फ अपने कोड पर chokes। लेकिन तय सरल हो सकता है। और इसलिए हमेशा पर ध्यान केंद्रित उत्पादन के पहले ही लाइन। और अगर तुम नहीं करते यह समझते हैं, बस देखो खोजशब्दों के लिए है कि हो सकता है सुराग, और लाइन नंबर, और चरित्र है, जहां उस गलती हो सकती है। अब मुझे आगे जाना है और टाइप डॉट स्लेश, स्ट्रिंग, दर्ज करें। हम्म, यह कुछ भी नहीं कह रहा है हैलो। क्यूं कर? खैर, याद है, जहां यह चल रहा है? यह शायद पल में अटक गया है एक पाश में, अगर तुम जाएगा, लाइन छह पर, डिजाइन द्वारा तार हो क्योंकि, CS50 स्टाफ ने लिखा है, सचमुच सिर्फ बैठने के लिए होती है वहाँ इंतज़ार कर रहा है, और इंतज़ार कर रहे, और एक स्ट्रिंग के लिए इंतज़ार कर रहे। हम सभी को तार से मतलब मानव इनपुट है। तो तुम जानते हो क्या? मुझे आगे चलते हैं। और बस यूँ ही, मुझे जाने मेरा नाम, डेविड टाइप करें, दर्ज करें। अब मैं एक और अधिक गतिशील कार्यक्रम है। इसमें कहा गया है, हैलो डेविड। अगर मैं आगे जाना है और यह फिर से चलाने के लिए, मुझे कहना है Zamila नाम कोशिश, में प्रवेश करते हैं। और अब हम एक गतिशील कार्यक्रम है। मैं कड़ी दुनिया कोडित नहीं किया है। मैं हार्ड कोडित नहीं किया है नाम, या डेविड, या Zamila। अब यह कार्यक्रमों की तरह बहुत अधिक है हम जानते हैं, जहां अगर यह इनपुट ले, यह थोड़ा अलग उत्पादन पैदा करता है। अब, यह सबसे अच्छा नहीं है उपयोगकर्ता अनुभव, या UX। मैं इस कार्यक्रम चलाते हैं। मैं नहीं जानता कि मैं क्या चाहिए हूँ ऐसा करने के लिए, जब तक मैं वास्तव में देखो या स्रोत कोड याद है। तो चलो उपयोगकर्ता बनाते हैं एक छोटे से बेहतर अनुभव बातों का सरलतम के साथ। मुझे इस में वापस जाओ कार्यक्रम है, और बस printf कहते हैं। और मुझे आगे जाना है और कहते हैं कि नाम, पेट के दो, और एक अंतरिक्ष, और फिर एक अर्धविराम। और बस kicks के लिए, कोई प्रतिक्रिया एन। और कहा कि जानबूझकर है, क्योंकि मैं नहीं चाहता कि शीघ्र अगली पंक्ति में स्थानांतरित करने के लिए। मैं करने के लिए, बजाय, यह करने के लिए चाहते हैं, स्ट्रिंग बनाने नई मशीन में मेरी कोड कंपाइल करने के लिए कोड डॉट स्ट्रिंग स्लेश। आह, यह बहुत सुंदर है। अब मैं वास्तव में जानते हैं कि क्या कंप्यूटर मुझे क्या करना है यह एक नाम देना चाहता है। इसलिए मुझे आगे जाना है और टाइप करने के लिए जा रहा हूँ रोब में, रोब दर्ज करें, और हैलो,। तो, एहसास, यह अभी भी है, अंत में दिन, केवल एक नौ लाइन कार्यक्रम का। लेकिन हम ये बच्चे कदम उठाए गए हैं। हम एक पंक्ति में लिखा था जिसके साथ हम परिचित, printf, नमस्ते विश्व थे। तो फिर हम इस बात का एक छोटा सा undid। और हम वास्तव में तार मिल इस्तेमाल किया। और हम एक चर में है कि मूल्य फेंक दिया। और फिर हम आगे चला गया और बेहतर यह एक तीसरी लाइन के साथ आगे। और इस प्रक्रिया चलने का सॉफ्टवेयर लेखन वास्तव में महत्वपूर्ण है। CS50 में, और सामान्य रूप में जीवन में, आप आम तौर पर, बैठ जाओ नहीं करना चाहिए मन में एक कार्यक्रम है, और लेखन की कोशिश सभी को एक बार पूरे लानत बात है। यह अनिवार्य रूप से, जिस तरह का परिणाम देगा अधिक त्रुटियों की तुलना में हम अपने आप को यहाँ देखा। मैं भी इस दिन के लिए, लगातार अन्य बेवकूफ गलती करते हैं, वास्तव में कठिन गलती कर रहे हैं यह पता लगाने के लिए कड़ी मेहनत कर रहे हैं। लेकिन यदि आप और अधिक गलतियों कर देगा कोड की लाइनों आप एक बार में सभी के बारे में। और इसलिए इस अभ्यास, कोड का एक छोटा सा के बारे में कि आप के साथ आराम कर रहे हैं, संकलन यह, इसे चलाने के लिए और अधिक आम तौर पर यह परीक्षण, तो on-- ले जाते हैं तो बस जैसे हम रखा लेयरिंग और पिछले हफ्ते लेयरिंग, कुछ से इमारत बहुत और अधिक जटिल कुछ करने के लिए सरल, यहां भी ऐसा ही। बैठ जाओ मत करो, और करने की कोशिश एक पूरी समस्या के बारे में। असल में ये बच्चे कदम उठाए। अब, तार सब नहीं कर रहे कि स्वयं के इधार उपयोगी है। हम वास्तव में चाहते हैं, आदर्श, के लिए की तरह हमारे टूलकिट में कुछ और ही है। तो चलो वास्तव में बिल्कुल वैसा ही करेगा। मुझे आगे जाना है और अब कोड़ा चलो एक से थोड़ा अलग कार्यक्रम। और हम पूर्णांक के लिए, इस int.c फोन करता हूँ। मैं जा रहा हूँ, इसी तरह, CS550.h शामिल हैं। मैं मानक कब शामिल करने के लिए जा रहा हूँ। और कहा कि बहुत आम होने जा रहा है वर्ग के इन पहले कुछ दिनों में। और मैं तैयार करने जा रहा हूँ अपने आप को एक मुख्य समारोह के साथ। और अब के बजाय एक स्ट्रिंग हो रही है, आगे बढ़ते हैं और एक पूर्णांक के लिए मिलता है। चलो यह मैं फोन करते हैं, और इसे पाने के लिए फोन पूर्णांक, बंद कोष्ठक, सेमी कॉलन। और अब चलो इसके साथ कुछ, printf। की तरह कुछ कहना है हैलो, बैकस्लैश एन, अल्पविराम रहा। तो मैं बहुत ज्यादा नकल उतार कर रहा हूँ क्या मैं बस एक पल पहले किया था। मैं एक प्लेसहोल्डर यहाँ है। मैं मैं यहाँ अल्पविराम है, क्योंकि मैं चाहता हूँ मुझे लगता है कि प्लेसहोल्डर में प्लग। तो चलो आगे चलते हैं और कोशिश करते हैं इस कार्यक्रम के संकलन। फ़ाइल int.c. कहा जाता है तो मैं कहता हूँ, int बनाने, प्रवेश करने के लिए जा रहा हूँ। हे भगवान, लेकिन कोई बड़ी बात नहीं है, है ना? वहाँ एक गलती है। वहाँ एक वाक्यात्मक गलती है यहाँ है कि इस तरह के कार्यक्रम नहीं कर सकते int.c, लाइन के अंदर संकलित किया सात, चरित्र 27, त्रुटि प्रारूप यह बताता है प्रकार चार स्टार, जो कुछ भी है। लेकिन तर्क प्रकार int है। तो यहां भी, हम नहीं जा रहे हैं है-- भले ही आज सामग्री का एक बहुत है, हम साथ डूब जा रहे हैं बिल्कुल सी की हर सुविधा, और प्रोग्रामिंग अधिक आम तौर पर, बस इन पहले कुछ हफ्तों में। तो वहाँ अक्सर होने जा रहा है शब्दजाल जिसके साथ आप परिचित नहीं हैं। और, वास्तव में, चार स्टार में कुछ है हम करने के लिए वापस आने के लिए जा रहे हैं एक या दो सप्ताह के समय में। लेकिन अब के लिए, चलो अगर हम देख सकते हैं शब्दों है कि परिचित हैं पार्स। Formats-- तो हम प्रारूप सुना विनिर्देशक, स्वरूप कोड से पहले। यही कारण है कि परिचित है। Type-- लेकिन तर्क प्रकार int है। एक मिनट रुको, मैं एक int है। शायद प्रतिशत रों वास्तव में कुछ परिभाषित अर्थ नहीं है। और, वास्तव में, यह करता है। एक पूर्णांक, अगर आप चाहते हैं यह स्थानापन्न करने के लिए printf, आप वास्तव में एक का उपयोग किया है अलग स्वरूप विनिर्देशक। और आप को यह पता नहीं होता जब तक कोई तुमसे कहा था, या आप इसे पहले किया था। लेकिन मैं प्रतिशत क्या है आमतौर पर इस्तेमाल किया जा सकता है एक पूर्णांक में plugging के लिए printf में। तुम भी प्रतिशत उपयोग कर सकते हैं एक दशमलव पूर्णांक के लिए डी। लेकिन मैं यहाँ अच्छा और सरल है। तो हम उस के साथ जाना होगा। अब मुझे आगे जाना है और फिर से दौड़ना बनाने पूर्णांक, दर्ज करें। यही कारण है कि अच्छा है, कोई त्रुटि। डॉट int-- ठीक है, बुरा उपयोगकर्ता अनुभव स्लेश, क्योंकि मैं अपने आप को नहीं बताया है क्या करें। लेकिन वह ठीक है। मैं जल्दी से बढ़ रहा हूँ। और अब मुझे आगे जाना है और डेविड, ठीक है, Zamila, रोब में टाइप करें। ठीक है, तो यह एक अच्छी बात है। इस बार, मैं एक समारोह का उपयोग कर रहा हूँ, एक पहेली टुकड़ा मिलता है, int कहा जाता है। और यह out-- बदल जाता है और हम करेंगे term-- में यह बाद में देखेंगे CS50 स्टाफ लागू किया गया है इस तरह से तार हो कि यह केवल शारीरिक रूप से होगा आप के लिए एक स्ट्रिंग मिलता है। यह int में पहुंचने में लागू किया गया है इस तरह से है कि यह केवल करेंगे आप के लिए एक पूर्णांक मिलता है। और अगर तुम, मानव, सहयोग नहीं करते, यह सचमुच सिर्फ करने के लिए जा रहा , पुन: प्रयास पुन: प्रयास करें, पुन: प्रयास कहते हैं, सचमुच वहाँ बैठे पाशन, जब तक आप कुछ जादुई संख्या के साथ उपकृत, 50, और 50 नमस्ते की तरह। या हम यह फिर से चलाते हैं और 42 में प्रकार, हैलो 42। और तो मिल int समारोह उस पहेली टुकड़े के अंदर पर्याप्त तर्क है, काफी सोचा, यह पता लगाने के लिए, एक शब्द क्या है? और एक नंबर क्या है? केवल स्वीकार करने, अंत में, संख्या। तो यह पता चला है कि इस सब है कि अर्थपूर्ण नहीं है। अब तक। तो, याय, पिछली बार जब हम बहुत तेजी से चला गया को लागू करने के खेल, और एनीमेशन में, और खरोंच के कलात्मक काम करता है। और यहाँ, हम सामग्री किया जा रहा है हैलो दुनिया, और नमस्ते 50 के साथ। यह सब है कि प्रेरणादायक नहीं है। और, वास्तव में, इन पहले कुछ उदाहरण के लिए कुछ समय लगेगा उत्तेजना में रैंप पर। लेकिन हम इतना अधिक है वास्तव में अब नियंत्रित करते हैं। और हम करने जा रहे हैं बहुत जल्दी से लेयरिंग शुरू इन बुनियादी पुरातन के शीर्ष पर। लेकिन पहले, चलो समझते हैं क्या सीमाएं हैं। वास्तव में, बातों में से एक स्क्रैच आसानी से नहीं करता है देखने के लिए हमें क्या करना है चलो वास्तव में हुड के नीचे, और क्या एक को समझने कंप्यूटर है, यह क्या कर सकते हैं, और अपनी सीमाएं क्या हैं। और, वास्तव में, इस बात का अभाव समझ, संभावित, लंबी अवधि हमारे अपने mistakes-- लेखन के लिए नेतृत्व कर सकते हैं कीड़े, असुरक्षित सॉफ्टवेयर लेखन कि किसी तरह से काट दिया जाता है। तो चलो की ओर कुछ कदम उठाने के लिए करते हैं यह एक छोटे से बेहतर समझने के रास्ते का कहना है, निम्न उदाहरण। मुझे आगे जाना है और लागू करने के लिए जा रहा हूँ असली जल्दी एक कार्यक्रम योजक कहा जाता है। की तरह, चलो कुछ नंबरों को एक साथ जोड़ दें। और मैं कुछ कोनों कोड के लिए जा रहा हूँ यहाँ है, और बस कॉपी और पेस्ट जहां मैं पहले था, बस इसलिए हम जल्दी ही जा रहा प्राप्त कर सकते हैं। अब तो मैं बुनियादी शुरुआत मिल गया है योजक नामक एक कार्यक्रम का। और आगे बढ़ते हैं और यह करते हैं। मैं आगे जाने के लिए जा रहा हूँ और कहते हैं, intx int प्राप्त हो जाता है। और क्या आपको पता है? की एक बेहतर प्रयोक्ता अनुभव करते हैं। तो चलो बस का कहना है x है, और प्रभावी ढंग से करते हैं उपयोगकर्ता का संकेत हमें एक्स देने के लिए। और फिर मुझे आगे जाना है और कहते हैं, printf चलो कैसे के बारे में y है, इस बार उम्मीद उपयोगकर्ता से दो मानों। और फिर चलो बस आगे बढ़ो और कहते हैं, printf, एक्स और वाई का योग है। और अब मैं प्रतिशत रों नहीं करना चाहते हैं। मैं प्रतिशत मैं क्या करना चाहते हैं, बैकस्लैश एन, और फिर योग मूल्य में प्लग। तो मैं ऐसा करने के बारे में कैसे जा सकता है? आपको पता है कि? मैं कैसे चर का उपयोग करने के लिए जानते हैं। मुझे बस एक नया एक, पूर्णांक Z की घोषणा करते हैं। और मैं यहाँ एक अनुमान लेने के लिए जा रहा हूँ। यदि इस में बराबर संकेत मिल रहे हैं भाषा, शायद मैं एक्स प्लस y सिर्फ कर सकते हैं, तो मैं अंत के रूप में अपने लंबे एक अर्द्ध पेट के साथ सोचा है? अब मैं यहाँ वापस नीचे जा सकते हैं, जेड में प्लग, एक अर्द्ध पेट के साथ इस बारे में सोचा खत्म। और चलो अब देखते हैं, इन यदि चलो lines-- एक्स के दृश्यों int मिल रहा है। Y int मिल रहा है। , एक्स और वाई जोड़ें मूल्य की दुकान z-- तो, फिर से, बराबर चिह्न याद बराबर नहीं है। यह दाईं से बाईं ओर से काम है। और चलो कि योग बाहर प्रिंट देना एक्स और वाई की सचमुच Z नहीं है, लेकिन जेड के अंदर क्या है। तो चलो योजक बनाते हैं - अच्छा, कोई गलती इस बार। डॉट स्लेश योजक, प्रवेश, एक्स 1 होने जा रहा है। वाई 2 होने जा रहा है। और एक्स और वाई की राशि 3 है। तो यह है कि सब ठीक है और अच्छा है। तो तुम उस गणित कल्पना होगा इस तरह एक कार्यक्रम में काम करना चाहिए। लेकिन तुम जानते हो क्या? इस चर, रेखा है 12, भी आवश्यक है? आप आदत में प्राप्त करने की आवश्यकता नहीं है की बस चर में चीजों के भंडारण सिर्फ इसलिए कि आप कर सकते हैं। और, वास्तव में, यह आम तौर पर है माना बुरा डिजाइन आप एक चर पैदा कर रहे हैं, तो कहा जाता है इस मामले में जेड, उस में कुछ भंडारण, और फिर तुरंत यह प्रयोग, लेकिन फिर कभी नहीं। क्यों कुछ एक नाम दे जेड की तरह यदि आप सचमुच रहे का उपयोग करने के लिए जा रहा है कि बात केवल एक बार, और इसलिए जहां आपके द्वारा बनाई गई करने के लिए समीपस्थ यह पहली जगह में, कोड की लाइनों के मामले में इतने करीब? तो तुम जानते हो क्या? यह पता चला है कि सी बहुत लचीला है। मैं वास्तव में चाहते हैं प्लग में मूल्यों इधर, मैं एक नया चर घोषित करने की जरूरत नहीं है। मैं तो बस प्लग में एक्स प्लस कर सकता है वाई, क्योंकि सी समझता गणित, और गणितीय ऑपरेटरों। तो मैं बस कह सकते हैं, इस गणित करते हैं, एक्स प्लस y, जो कुछ भी उन मान रहे हैं, प्लग जिसके परिणामस्वरूप कि स्ट्रिंग में पूर्णांक। तो यह हो सकता है, हालांकि केवल एक ही लाइन पर कम, एक बेहतर डिजाइन, एक बेहतर कार्यक्रम, क्योंकि वहाँ कम कोड है, इसलिए कम मुझे समझने के लिए। और यह भी बस क्लीनर है, हम नहीं कर रहे insofar के रूप में नए शब्दों का परिचय, नए प्रतीकों, जेड की तरह, भले ही वे वास्तव में नहीं है एक उद्देश्य के ज्यादा काम करते हैं। दुर्भाग्य से, गणित नहीं है सब है कि विश्वसनीय कभी कभी। आगे बढ़ते हैं और यह करते हैं। मैं आगे जाने के लिए जा रहा हूँ अब और निम्नलिखित है। के printf, मैं प्रतिशत, प्रतिशत से अधिक करते हैं मैं, मैं प्रतिशत, बैकस्लैश n होगी। और मैं this-- xyx प्लस y क्या करने जा रहा हूँ। तो मैं बस को फिर से लिखना करने जा रहा हूँ यह थोड़ा अलग तरह से यहाँ। मुझे बस एक त्वरित मानसिक स्वास्थ्य की जांच करते हैं। फिर, चलो अपने आप से आगे नहीं मिलता है। योजक, डॉट स्लेश योजक बनाओ। एक्स 1 है, वाई 2, 1 प्लस 2 से 3 है। तो यह अच्छी बात है। लेकिन अब इस जटिल बना देना एक सा है, और एक नई फ़ाइल बनाएँ। मैं इस एक फोन करने के लिए जा रहा हूँ, कहते हैं, ints, पूर्णांकों के लिए बहुवचन। मुझे शुरू जहां मैं एक पल पहले था। लेकिन अब चलो कुछ अन्य लाइनों करते हैं। मुझे आगे जाना है और निम्नलिखित करते हैं, printf, मैं प्रतिशत, शून्य प्रतिशत रहा, प्रतिशत रहा, अल्पविराम एक्स, अल्पविराम YX शून्य से y है। तो मैं थोड़ा कर रहा हूँ वहाँ अलग गणित। के एक और एक है। तो मैं प्रतिशत गुना प्रतिशत मैं प्रतिशत रहा, बैकस्लैश n है। के प्लग में एक्स, वाई और, और एक्स बार y करते हैं। हम पर तारांकन इस्तेमाल करेंगे समय के लिए अपने कंप्यूटर। आप एक्स का उपयोग नहीं करते। एक्स है यहाँ एक चर नाम। आप गुणन के लिए स्टार का उपयोग करें। चलो एक और करते हैं। Printf प्रतिशत रहा, विभाजित प्रतिशत रहा द्वारा, प्रतिशत रहा है बैकस्लैश एन। XY y-- से विभाजित इसलिए तुम सी में आगे स्लैश का उपयोग करें विभाजन करने के लिए। और हम एक दूसरे से करते हैं। मैं प्रतिशत के शेष विभाजित मैं प्रतिशत रखकर प्रतिशत रहा है। xy-- और अब शेष क्या बचा है। आप एक विभाजन का प्रयास करते हैं एक अंश में विभाजक, कितना बचा है कि आप बाहर विभाजित नहीं कर सकता था? तो वहाँ वास्तव में नहीं है, जरूरी, एक प्रतीक हम इस के लिए ग्रेड स्कूल में उपयोग किया है। लेकिन वहाँ सी में आप कर सकते हैं का कहना है कि एक्स सापेक्ष वाई, जहां इस context-- में यह प्रतिशत चिह्न भ्रमित जब आप अंदर हो डबल कोट्स की, printf की, प्रतिशत के अंदर प्रारूप विनिर्देशक के रूप में प्रयोग किया जाता है। आप में से बाहर प्रतिशत का उपयोग करते हैं कि एक गणितीय अभिव्यक्ति में, यह मॉड्यूलर के लिए सापेक्ष ऑपरेटर है हमारे उद्देश्यों के लिए arithmetic-- इधर, बस का अर्थ है, क्या है एक्स के शेष y से विभाजित? तो एक्स वाई द्वारा विभाजित एक्स स्लेश y है। Y से विभाजित एक्स के शेष क्या है? यह आधुनिक y एक्स एक प्रोग्रामर के रूप में कहेंगे। तो अगर मैं कोई गलती यहाँ बनाया है, मुझे जाने आगे बढ़ो और ints, बहुवचन, अच्छा बनाने, और डॉट स्लेश ints। और चलो आगे चलते हैं और करते हैं, हम कहते हैं कि, 1, 10 दें। ठीक है, 1 प्लस 10 11, जांच है। 1 शून्य से 10 नकारात्मक 9, जांच है। 1 बार 10 से 10 की जांच है। 1 10 से विभाजित है- ठीक है, हम छोड़ देंगे कि एक। 1 के शेष 10 से विभाजित 1 है। यह सही है। लेकिन यहाँ पर एक बग है। एक तो मैं डाल मेरी को सौंपने, सही नहीं है। मेरा मतलब है, यह 0 के करीब है। 1 10 से विभाजित है, आप जानते हैं, हम कर रहे हैं कुछ कोनों को काटने, यकीन है, यह शून्य है। लेकिन यह सच में 1/10 होना चाहिए, 0.1 अथवा 0.10, 0.1000, या बहुत आगे है। यह वास्तव में शून्य नहीं होना चाहिए। खैर, यह पता चला है कि कंप्यूटर है सचमुच कर रही है कि हम क्या करने के लिए कहा था। हम y से विभाजित एक्स की तरह गणित कर रहे हैं। और दोनों एक्स और वाई, लाइनों प्रति कोड के पहले, integers हैं। इसके अलावा, लाइन 15 पर, हम कर रहे हैं printf, हे, printf प्लग में बता रही है एक पूर्णांक, प्लग में एक पूर्णांक, प्लग में एक विशेष integer-- एक्स, और फिर y, और फिर एक्स Y से विभाजित। एक्स और वाई ints हैं। हम वहाँ अच्छा कर रहे हैं। लेकिन क्या एक्स एक्स से विभाजित किया जाता है? एक्स विभाजित करके Y होना चाहिए, गणितीय, 1/10, या 0.1, जो एक वास्तविक संख्या, एक वास्तविक संख्या है चल रहा है, संभवतः एक दशमलव बिंदु। यह एक पूर्णांक नहीं है। लेकिन क्या सबसे करीब है 1/10, या 0.1 करने के लिए पूर्णांक? हाँ, यह एक तरह से शून्य है। 0.1 यह बहुत पसंद है। और 1 इस ज्यादा है। तो 1/10 के करीब है 0 से यह एक है। और तो क्या सी us-- के लिए क्या कर रही है तरह का है क्योंकि हम यह है-- बताया कि पूर्णांक छोटा है। यह मूल्य है, जो फिर से ले जा रहा है .1000 की तरह कुछ होना चाहिए था, 0 और बहुत आगे है। और यह सब कुछ छोटा है दशमलव बिंदु के बाद तो यह है कि यह सब सामान, क्योंकि यह नहीं है एक पूर्णांक की धारणा में फिट है, जो सिर्फ नकारात्मक 1, 0, 1 की तरह एक नंबर है, ऊपर और नीचे, यह सब कुछ दूर फेंकता क्योंकि आप दशमलव बिंदु के बाद एक दशमलव बिंदु फिट नहीं कर सकते परिभाषा के द्वारा एक पूर्णांक में। तो जवाब यहाँ शून्य है। तो हम यह कैसे तय करते हैं? हम सब एक साथ एक और समाधान की जरूरत है। और हम इस प्रकार के रूप में कर सकते हैं। मुझे आगे चलते हैं और एक नया बनाने फ़ाइल, यह एक floats.c बुलाया। और यहां इसे बचाने के लिए एक ही निर्देशिका, float.c। और मुझे आगे जाना है और कॉपी करते हैं पहले से उस कोड के कुछ। लेकिन के बजाय हो रही है एक int, चलो यह करते हैं। मुझे एक चल बिन्दु मान दें एक्स कहा जाता है। जहां एक चल बिन्दु मूल्य सिर्फ शाब्दिक है एक चल बिन्दु के साथ कुछ और। यह बाईं ओर ले जाने के लिए सही करने के लिए कर सकते हैं। यह एक वास्तविक संख्या है। और मुझे नहीं कहते हैं int मिलता है, लेकिन नाव मिलता है, यह भी मेनू के बीच था जो C250 पुस्तकालय में विकल्पों की। है y एक नाव के लिए परिवर्तित करें। तो इस नाव प्राप्त हो जाता है। और अब, हम नहीं ints में प्लग करने के लिए चाहते हैं। यह पता चला है कि हम प्रतिशत का उपयोग किया है नाव के लिए एफ, नाव के लिए प्रतिशत एफ, और अब इसे बचाने के लिए। और अब, उंगलियों को पार कर, कर तैरता है, अच्छा है, डॉट स्लेश मंगाई। x एक 1. Y होने जा रहा है 10 फिर से होने जा रहा है। और, अच्छा, ठीक है मेरे अलावा सही है। मैं और अधिक के लिए उम्मीद कर रहा था, लेकिन मैं यह लिखने के लिए भूल गया। तो चलो चलते हैं और इस तार्किक त्रुटि को ठीक करते हैं। आगे बढ़ते हैं और निम्नलिखित ले लो। हम सिर्फ एक छोटे से कॉपी और पेस्ट कर देंगे। और मैं शून्य से कहने जा रहा हूँ। और मैं कई बार कहने जा रहा हूँ। और मैं विभाजित कहने जा रहा हूँ। और मैं सापेक्ष करने के लिए नहीं जा रहा हूँ, जो के रूप में सार्थक यहाँ नहीं है, च से विभाजित है, और कई बार प्लस ठीक है, चलो इस बार फिर से करते हैं। बनाओ मंगाई, डॉट स्लेश मंगाई, और 1, 10, और-- अच्छा, नहीं, ठीक है। तो मैं एक मूर्ख हूँ। तो यह बहुत आम है कंप्यूटर विज्ञान के क्षेत्र में इस तरह बेवकूफ गलतियों को बनाने के लिए। शैक्षणिक उद्देश्यों के लिए, मैं वास्तव में क्या करना चाहता था विज्ञान यहाँ परिवर्तन किया गया था प्लस के लिए, शून्य करने के लिए, कई बार करने के लिए, और आप के रूप में विभाजित करने के लिए, उम्मीद है कि इस अभ्यास के दौरान देखा। तो अब यह फिर से संकलन करते कार्यक्रम डॉट स्लेश मंगाई करना। और तीसरी बार के लिए, चलो देखो अगर यह मेरी उम्मीदों को पूरा करती है। 1, 10, दर्ज ठीक है, हाँ, 1.000, 10.000 से विभाजित, 0.100000 है। और यह पता चला है कि हम नियंत्रित कर सकते हैं कि कितने संख्या उन दशमलव अंक के बाद कर रहे हैं। हम वास्तव में होगा। हम वापस आ जाएगा। लेकिन अब, वास्तव में, गणित सही है। तो, फिर, क्या takeaway यहाँ है? यह पता चला है सी में, देखते हैं कि न केवल बस strings-- और वास्तव में, वहाँ है, वास्तव में नहीं कर रहे हैं क्योंकि हम CS50 पुस्तकालय के साथ उन लोगों को जोड़ने। लेकिन वहाँ सिर्फ ints नहीं हैं। यह भी मंगाई हैं। और यह अन्य डेटा का एक गुच्छा पता चला है प्रकार के भी, कि हम लंबे समय से पहले इस्तेमाल करेंगे। निकलता है कि आप एक भी चाहते हैं चरित्र, वर्णों की एक स्ट्रिंग नहीं, आप सिर्फ एक चार का उपयोग कर सकते हैं। पता चला है कि अगर आप एक बूल चाहते हैं, एक बूलियन मान, सही है या गलत ही है, CS50 पुस्तकालय के लिए धन्यवाद, हम है के रूप में अच्छी तरह से सी बूल डेटा प्रकार के लिए कहा। लेकिन यह भी मौजूद है कई अन्य भाषाओं के रूप में अच्छी तरह से। और यह है कि आप कभी कभी पता चला है बड़ी संख्या तो डिफ़ॉल्ट रूप से आने की जरूरत ints और मंगाई साथ। और, वास्तव में, एक डबल एक नंबर है है कि नहीं 32 बिट, लेकिन 64 बिट का उपयोग करता। और एक लंबे लंबे समय से एक संख्या है कि नहीं 32, बिट्स लेकिन 64 बिट का उपयोग करता, क्रमश: चल बिन्दु के लिए मूल्यों और पूर्णांकों, क्रमशः। तो चलो अब वास्तव में चलो कार्रवाई में यह देखने। मैं यहाँ आगे जाने के लिए जा रहा हूँ और एक अन्य कार्यक्रम कोड़ा। यहाँ, मैं आगे जाने के लिए जा रहा हूँ और CS50.h. शामिल करते हैं और मुझे जाने दो, मानक IO.h. शामिल और अगर आप कुछ नोटिस देंगे कायरता यहां हो रहा है। यह चीजों में कोडिंग रंग नहीं है एक ही रास्ता के रूप में यह पहले किया था। और यह पता चला है कि क्योंकि मैं है एक फ़ाइल नाम बात नहीं दिया है। मैं इस एक फोन करने के लिए जा रहा हूँ sizeof.c, और बचाने मारा। और नोटिस क्या मेरे बहुत के लिए होता है कि काले सफेद पृष्ठभूमि के खिलाफ कोड। अब कम से कम वहाँ है कुछ वहाँ में बैंगनी। और यह वाक्य रचना पर प्रकाश डाला है। ऐसा इसलिए है क्योंकि, काफी बस, मैं है आईडीई किस प्रकार की फ़ाइल में बताया यह यह एक नाम देकर है, और विशेष रूप से एक फाइल एक्सटेंशन। अब, चलो आगे जाना है और यह करते हैं। मैं आगे और बहुत से जाने के लिए जा रहा हूँ बस following-- बूल बाहर प्रिंट लू प्रतिशत है। हम करने के लिए वापस आ गया हूँ बस एक पल में है। और फिर मैं करने जा रहा हूँ बूल के प्रिंट आकार। और अब, बस को बचाने के लिए अपने आप को कुछ समय, मैं हूँ एक पूरे करने जा रहा एक बार में इन का गुच्छा। और, विशेष रूप से, मैं करने जा रहा हूँ एक चार और चार को यह बदल जाते हैं। यह एक, मैं बदलने के लिए जा रहा हूँ एक डबल और एक डबल करने के लिए। यह एक, मैं बदलने के लिए जा रहा हूँ एक नाव और एक नाव के लिए। यह एक, मैं जा रहा हूँ एक int और एक पूर्णांक के लिए बदल जाते हैं। और यह एक, मैं जा रहा हूँ एक लंबे को बदलने के लिए। और यह अभी भी ले जा रहा है एक लंबे समय, लंबे समय तक। और फिर, अंत में, मैं दे दिया अपने आप को एक भी कई, स्ट्रिंग। यह पता चला है सी में, वहाँ है कि विशेष ऑपरेटर बुलाया इस बात का आकार सचमुच है , जब चलाने के लिए जा रहा है, हम में से आकार बता इन चर के प्रत्येक। और यह एक तरीका है, अब, हम वापस कनेक्ट कर सकते हैं पिछले हफ्ते की चर्चा करने के लिए डेटा और प्रतिनिधित्व की। मुझे आगे जाना है और संकलित करते डॉट स्लेश आकार के आकार। और चलो देखते हैं। यह सी में है कि पता चला है, विशेष रूप से CS50 आईडीई पर, विशेष पर ऑपरेटिंग सिस्टम उबंटू, जो एक 64-बिट ऑपरेटिंग है इस मामले में प्रणाली, एक बूल जा रहा है अंतरिक्ष के एक बाइट का उपयोग करें। यही कारण है कि आकार मापा जाता है, नहीं बिट्स में है, लेकिन बाइट्स में। और याद है कि एक बाइट आठ बिट है। तो एक बूल, भले ही आप एक 0 या 1 तकनीकी रूप से केवल जरूरत है, यह एक छोटे से बेकार है कैसे हम इसे क्रियान्वित किया है। यह वास्तव में एक पूरे का उपयोग करने के लिए जा रहा है byte-- तो सब शून्य है, हो सकता हैं सभी लोगों को, या ऐसा कुछ है, या सिर्फ एक 1 आठ बिट्स के बीच में। एक चार, इस बीच, एक चरित्र के लिए इस्तेमाल किया पिछले सप्ताह प्रति एक ASCII चरित्र की तरह, एक चरित्र होने जा रहा है। और उस के बारे में हमारी धारणा के साथ synchs यह कोई 256 से अधिक bits-- जा रहा है बल्कि, यह कोई होने के साथ synchs अप अब से 8 बिट, जो अमेरिका के रूप में कई के रूप में 256 मान देता है। एक डबल करने के लिए जा रहा है 8 बाइट्स या 64 बिट्स हो। एक नाव 4 है। एक int 4 है। एक लंबे, लंबे समय तक 8 है। और एक स्ट्रिंग 8 है। लेकिन उस के बारे में चिंता मत करो। हम उस परत वापस छील करने के लिए जा रहे हैं। यह पता चला है, तार कर सकते हैं 8 बाइट्स से अधिक समय हो। और, वास्तव में, हम लिखा है पहले से ही तार, नमस्ते दुनिया, 8 बाइट्स से अधिक समय। लेकिन हम करने के लिए वापस आ गया हूँ बस एक पल में है। लेकिन दूर ले जाओ यहाँ पीछा कर रहा है। किसी भी कंप्यूटर केवल एक परिमित है स्मृति और अंतरिक्ष की राशि। आप केवल इतने सारे स्टोर कर सकते हैं अपने मैक या पीसी पर फ़ाइलें। आप केवल में इतने सारे कार्यक्रमों स्टोर कर सकते हैं राम के बार में चल रहा है, जरूरी है, भले आभासी स्मृति के साथ, क्योंकि आप राम की एक निश्चित राशि है। और बस यदि picture-- करने के लिए आप एक लैपटॉप को कभी नहीं खोला है या अतिरिक्त स्मृति का आदेश दिया एक कंप्यूटर के लिए, आप पता नहीं हो सकता है कि आपके कंप्यूटर के अंदर कुछ है जो दिखता है इस तरह एक छोटे। तो यह सिर्फ एक आम नाम कंपनी है महत्वपूर्ण है कि कंप्यूटर के लिए राम बनाता है। और राम जहां कार्यक्रमों है रहते हैं, जबकि वे चल रहे हैं। तो हर मैक या पीसी, जब आप डबल पर एक कार्यक्रम के लिए क्लिक करें, और यह खुल जाता है, और यह कुछ शब्द दस्तावेज़ को खोलता है या कुछ इस तरह का, यह यह भंडार अस्थायी रूप में रैम, क्योंकि राम तेजी से होता है आपकी हार्ड डिस्क से, या अपने ठोस राज्य डिस्क। तो यह सिर्फ है जहां कार्यक्रमों जाना रहने के लिए जब वे चला रहे हैं, या जब फ़ाइलों का उपयोग किया जा रहा है। तो आप चीजों है कि देखो अपने लैपटॉप के इस अंदर की तरह, या थोड़ा बड़ी बातें अपने डेस्कटॉप के अंदर। लेकिन महत्वपूर्ण है कि आप केवल एक है है इन सब बातों के परिमित संख्या। और वहाँ केवल एक सीमित मात्रा में है हार्डवेयर इस डेस्क पर बैठे सही यहाँ। तो, निश्चित रूप से, हम दुकान नहीं कर सकते असीम लंबे संख्या। और, अभी तक, तुम वापस करने के लिए लगता है कि अगर ग्रेड स्कूल, कितने अंक कर सकते हैं आप सही करने के लिए है एक दशमलव बिंदु के? उस बात के लिए, कितने अंक कर सकते हैं आप एक दशमलव बिंदु के बाईं ओर है? वास्तव में, कई infinitely। अब, हम केवल मनुष्य ही हो सकता है जानते लाख का उच्चारण कैसे करें और अरब, खरब, और शंख, और quintillion। और मैं की सीमाओं जोर दे रहा हूँ मेरे understanding-- या my-- मैं समझता हूँ संख्याओं, लेकिन मेरी नंबरों के उच्चारण। लेकिन वे साथ असीम बड़ी प्राप्त कर सकते हैं बाईं ओर असीम कई अंक या एक दशमलव बिंदु के दाईं। लेकिन कंप्यूटर केवल एक है स्मृति की सीमित मात्रा में, ट्रांजिस्टर की एक निश्चित संख्या, एक प्रकाश बल्ब के अंदर की सीमित संख्या। तो क्या होता है जब तुम अंतरिक्ष के बाहर चला? दूसरे शब्दों में, यदि आप पीठ ने पिछले सप्ताह के लिए लगता है जब हम संख्या के बारे में बात की थी खुद को, द्विआधारी में प्रतिनिधित्व किया जा रहा लगता है कि हम मिल गया है इस 8 बिट मूल्य यहाँ। और हम सात 1 और एक 0 है। और लगता है कि हम चाहते हैं इस मान को 1 जोड़ने के लिए। यह एक बहुत बड़ी संख्या में अब ठीक है। यह 254 है, अगर मुझे याद है पिछले हफ्ते सही से गणित। लेकिन क्या अगर मैं बदल कि एक 1 दाएँ 0 करने के लिए? पूरी संख्या के बेशक, आठ 1 का हो जाता है। इसलिए हम अभी भी अच्छा कर रहे हैं। और कहा कि शायद का प्रतिनिधित्व करता है 255, हालांकि संदर्भ के आधार पर यह वास्तव में प्रतिनिधित्व कर सकता है एक नकारात्मक संख्या। लेकिन यह एक और समय पर और अधिक। यह लगता है जैसे इस बारे में है के रूप में उच्च के रूप में मैं भरोसा कर सकते हैं। अब, यह केवल 8 बिट है। और मेरे मैक, निश्चित रूप से, जिस तरह से है स्मृति का अधिक से अधिक 8 बिट। लेकिन यह परिमित है। तो एक ही तर्क लागू होता है, तो भी हम स्क्रीन पर इन लोगों में से भी अधिक है। लेकिन क्या होता है अगर आप कर रहे हैं इस संख्या, 255 के भंडारण, और तुम 1 थोड़ा अधिक गिनती करने के लिए करना चाहते हैं? आप 255 से 256 के लिए जाना चाहता हूँ। समस्या है, ज़ाहिर है कि अगर आप शून्य पिछले हफ्ते की तरह पर गिनती शुरू, आप के रूप में उच्च गिनती नहीं कर सकते 256 के रूप में, अकेले 257 चलो, अकेले 258 चलो, क्योंकि मीटर क्या होता है जब आप एक 1 जोड़ सकते हैं? आप पुराने ग्रेड स्कूल करते हैं दृष्टिकोण, आप एक 1 यहाँ डाल दिया, और फिर 1 प्लस 1 2 है, लेकिन है कि वास्तव में एक शून्य, आप 1 ले, 1 ले, 1 ले। इन सभी बातों के, इन 1, शून्य करने के लिए जाना। और तुम ऊपर हवा, हाँ, किसी के रूप में बाएं हाथ की ओर एक 1, बाहर बताया। लेकिन सब कुछ आप कर सकते हैं वास्तव में देख सकते हैं और स्मृति में फिट सिर्फ आठ 0 की, जो कहना है कुछ बिंदु पर यदि आप एक कंप्यूटर, उच्च पर्याप्त गिन की कोशिश की, आप कर रहे हैं आसपास लपेटो करने के लिए जा रहा है, यह प्रतीत होता है, शून्य, या शायद यह भी नकारात्मक करने के लिए संख्या है, जो शून्य से भी कम हैं। और हम एक तरह से यह देख सकते हैं। मुझे आगे जाना है और लिखने दो एक असली जल्दी यहां कार्यक्रम। मुझे आगे जाना है और लिखने दो एक कार्यक्रम अतिप्रवाह बुलाया। Cs50.h शामिल शामिल मानक IO.h-- ओह, मैं वास्तव में मेरे वाक्य रचना हाइलाइटिंग याद किया। तो चलो overflow.c रूप में यह बचा करते हैं। और अब int मुख्य void-- और लंबे समय से पहले, हम करेंगे क्यों समझा करने के लिए वापस आने के लिए हम int मुख्य शून्य लिखते रहते हैं। लेकिन अब के लिए, चलो बस यह, इसे लेने के लिए दी। के अपने आप को एक int दे, और इसे 0 प्रारंभ। के तत्कालीन int के लिए करते हैं मैं zero-- मिल वास्तव में, चलो एक अनंत लूप करते हैं और देखते हैं क्या होता है। जबकि सच है, तो चलो एन बाहर मुद्रित करते हैं प्रतिशत है मैं, बैकस्लैश एन, प्लग में एन। लेकिन, अब, के एन हो जाता है एन प्लस 1 करते हैं। तो दूसरे शब्दों में, प्रत्येक पर इस अनंत लूप के चलना, के एन के मूल्य ले चलो, और यह करने के लिए 1 जोड़ने के लिए, और उसके बाद बाईं तरफ n में वापस परिणाम की दुकान। और, वास्तव में, हम वाक्य रचना को देखा है थोड़ा इस तरह, संक्षेप। एक शांत चाल के बजाय है यह सब बाहर लिखने की, आप वास्तव में कह सकते हैं एक एन प्लस 1 के बराबर होती। या तुम सच में फैंसी होना चाहते हैं, आप कह सकते हैं n प्लस प्लस सेमी कॉलन। लेकिन इन बाद के दो बस रहे हैं क्या हम वाक्यात्मक चीनी फोन था पहली बात के लिए। पहली बात, और अधिक स्पष्ट है पूरी तरह से ठीक है, पूरी तरह सही है। लेकिन यह ज्यादा आम है, मैं कहूँगा। तो हम बस एक पल के लिए यह करूँगा। चलो अब बनाने अतिप्रवाह, जो लगता है बल्कि अशुभ, डॉट स्लेश अतिप्रवाह। चलो देखते हैं, n बहुत बड़ी हो रही है। लेकिन हम सोचते हैं, कितना बड़ा n प्राप्त कर सकते हैं? n एक int है। हम के आकार के साथ एक पल पहले देखा था उदाहरण के एक पूर्णांक के चार बाइट्स है। हम पिछले हफ्ते से जानते हैं, चार बाइट्स है 32 बिट, क्योंकि 8 बार 4, कि 32 है। यही कारण है कि 4 अरब होने जा रहा है। और हम 800,000 तक कर रहे हैं। यह हमेशा के लिए ले जा रहा है के रूप में मैं संभवतः कर सकते हैं के रूप में उच्च गिनती। इसलिए मुझे लगता है, आगे जाने के लिए जा रहा हूँ के रूप में आप लंबे समय से पहले हो सकता है, और नियंत्रण C-- स्पष्ट रूप से मारा, नियंत्रण सी, एक बहुत कुछ है, जहां नियंत्रण सी आम तौर पर साधन रद्द कर दें। दुर्भाग्य से, इसका कारण यह है बादल में चल रहा है, कभी कभी बादल है इतना सामान बाहर थूकना, इतना उत्पादन, यह जा रहा है अपने इनपुट के लिए थोड़ा समय लग बादल को पाने के लिए। तो फिर भी मैं मारा नियंत्रण सी कुछ सेकंड पहले, यह निश्चित रूप से पक्ष है एक अनंत लूप का असर। और इसलिए इस तरह के मामलों में, हम कर रहे हैं हो सकता है कि छोड़ने के लिए जा रहा है। और हम एक और जोड़ने के लिए जा रहे हैं यहाँ पर टर्मिनल विंडो साथ ही, जो निश्चित रूप से नहीं करता है के साथ ऐसे ही, क्योंकि यह अभी भी सोच रहा है। और आगे बढ़ते हैं और हो जाने दो एक छोटे से अधिक उचित। मुझे आगे जाना है और क्या करने जा रहा हूँ यह केवल finitely कई बार। के पाश के लिए एक का उपयोग करते हैं, जो मैंने पहले के लिए alluded। आओ इसे करें। मुझे एक और चर int मैं हो जाता 0 दें। मैं कम से कम, हम कहते हैं, 64 i ++ देना है। और अब मुझे आगे और प्रिंट जाने दिया बाहर n प्रतिशत रहा है, एन अल्पविराम। और फिर N-- यह अभी भी है हमेशा के लिए ले जा रहा है। आओ इसे करें। n हो जाता एन बार 2। या फिर हम कल्पना हो सकता है और कई बार बराबरी 2 से करते हैं। लेकिन हम सिर्फ n कहते हैं खुद के बराबर होती है, कई बार 2। दूसरे शब्दों में, इस में कार्यक्रम के नए संस्करण, मैं हमेशा के लिए इंतजार नहीं करना चाहते हैं 800,000 तरह 4 अरब से। की बस के साथ इस पर मिलता है। वास्तव में हर बार दोगुना n करते हैं। कौन सा, याद है, दोहरीकरण है जाहिर है, होने के विपरीत है। और पिछले सप्ताह, जबकि हमारे पास है कुछ फिर से, और फिर, और फिर, सुपर फास्ट, दोहरीकरण निश्चित रूप से होगा सबसे बड़ी संभव करने के लिए 1 से हमें मिलता है मूल्य है कि हम एक पूर्णांक के साथ करने के लिए भरोसा कर सकते हैं। तो चलो वास्तव में यह करते हैं। और हम लंबे समय से पहले वापस इस पर आ जाएगा। लेकिन यह, फिर से, बस की तरह है खरोंच में दोहराने ब्लॉक। और आप लंबे समय से पहले इसका उपयोग करेंगे। यह सिर्फ शून्य से गिनती का मतलब करने के लिए, लेकिन नहीं के बराबर, 64 तक। और इस में से प्रत्येक यात्रा पर पाश, बस मैं incrementing रहते हैं। तो मैं ++ - और यह सामान्य निर्माण लाइन पर 7 सिर्फ एक सुपर आम तरीका है की की कुछ लाइनों को दोहरा कोड, समय में से कुछ संख्या है। जो कोड की तर्ज? इन घुंघराले ब्रेसिज़, आप के रूप में अब से gleaned हो सकता है, इसका मतलब है, निम्न कार्य करें। ऐसा लगता है कि खरोंच में है, जब यह पीले ब्लॉक हैं और अन्य रंग उस तरह का गले लगाने या अन्य ब्लॉकों गले। यही कारण है कि उन घुंघराले है ब्रेसिज़ यहाँ क्या कर रहे हैं। तो अगर मैं अपने वाक्य रचना मिला आप right-- सी साधन में गाजर का प्रतीक देख सकते हैं कि कितनी बार मैं था इस समस्या को हल करने के लिए कोशिश कर रहा है। तो चलो कि एक से छुटकारा मिलता है कुल मिलाकर, और उस खिड़की को बंद करें। और हम एक नए के लिए इस्तेमाल करेंगे। अतिप्रवाह, डॉट स्लेश बनाओ अतिप्रवाह, दर्ज करें, सब ठीक है, यह पहली बार में बुरा लग रहा है। लेकिन समय में वापस जाने के लिए स्क्रॉल, क्योंकि मैं इस 64 बार किया था। और पहली बार नोटिस, एन 1 है। दूसरी बार, 2 n है, तो 4, तो 8, तो 16। और ऐसा लगता है कि जैसे ही मैं, मोटे तौर पर 1 अरब के लिए मिलता है अगर मैं इसे फिर से दोगुना, कि मेरे 2 अरब देना चाहिए। लेकिन यह पता चला है, यह cusp पर सही है। और इसलिए यह वास्तव में overflows 1 अरब से एक int मोटे तौर पर नकारात्मक 2 को अरब, क्योंकि एक पूर्णांक, हम संख्या के विपरीत पिछले सप्ताह यह सोचते थे, दोनों सकारात्मक और नकारात्मक हो सकता है वास्तविकता में और एक कंप्यूटर में। और उन में से तो कम से कम एक बिट्स को प्रभावी ढंग से चोरी हो रही है। इसलिए हम वास्तव में केवल 31 बिट्स है, या 2 अरब संभव मूल्यों। लेकिन अब के लिए, takeaway काफी है बस, जो कुछ भी इन नंबरों हैं और जो गणित है, कुछ बुरा अंत में होता है, क्योंकि अंत में आप के लिए कोशिश कर रहे हैं बिट्स एक भी कई बार दूसरे स्थान पर रखना। और अगर आप प्रभावी रूप से सभी से जाना 1 के लिए शायद सभी 0 है, या शायद बस कुछ अन्य पैटर्न यह है कि जाहिर है, संदर्भ पर निर्भर करता है, एक नकारात्मक संख्या के रूप में व्याख्या की जा सकती है। और तो यह उच्चतम रहा प्रतीत होता है इस विशेष कार्यक्रम में गिनती कर सकते हैं केवल मोटे तौर पर 1 अरब है। लेकिन यहाँ एक आंशिक समाधान है। आपको पता है कि? मुझे एक से बदल दें एक लंबे लंबे समय के लिए int। और मुझे आगे चलते हैं यहां और say-- मैं जा रहा हूँ एक अहस्ताक्षरित लंबे समय के लिए इस बदलने के लिए। या, चलो देखते हैं, मैं अपने आप को याद है कभी नहीं। आगे बढ़ते हैं और अतिप्रवाह कर दूं। नहीं, कि यह नहीं है, एलएलडी, धन्यवाद। तो कभी कभी बजना सहायक हो सकता है। मैं क्या प्रारूप याद नहीं आया विनिर्देशक एक लंबे लंबे समय के लिए किया गया था। लेकिन, वास्तव में, बजना मुझे बताया था। ग्रीन, अच्छा के कुछ प्रकार है अभी भी आप एक गलती की है इसका मतलब है। यह अनुमान लगा रहा है कि मैं एलएलडी का मतलब है। तो, मुझे लेने के लिए यह सलाह है चलो एक लंबे लंबे दशमलव संख्या, कि बचाने के लिए। और मुझे यह फिर से दौड़ना डॉट करते हैं, अतिप्रवाह स्लेश दर्ज करें। और अब क्या अच्छा है यह है। अगर मैं समय में वापस स्क्रॉल, हम अभी भी शुरू एक ही place-- पर गिनती 1, 2, 4, 8, 16। सूचना, हम मिल सब जिस तरह से ऊपर 1 अरब करने के लिए। लेकिन तब हम सुरक्षित रूप से 2 अरब करने के लिए मिलता है। तो फिर हम 4 अरब के लिए मिलता है, उसके बाद 8 अरब, 17 अरब। और हम उच्च जाने, और ऊँचा और ऊँचा। आखिरकार, यह भी टूट जाता है। आखिरकार, एक लंबे लंबे समय के साथ, जो 64-बिट मूल्य नहीं है, एक 32-बिट मूल्य, अगर आप गिनती बहुत अधिक है, आप के आसपास 0 लपेटो। और इस मामले में, हम को भी हो एक नकारात्मक संख्या के साथ खत्म होता है। तो यह एक समस्या है। और यह पता चला है कि इस समस्या है कि सभी रहस्यमय नहीं है। हालांकि मैं जानबूझ कर किया है इन गलतियों से यह प्रेरित किया, यह निकलता है कि हम यह एक तरह सब से देखना अमेरिका, या हम में से कम से कम कुछ के आसपास है। तो लेगो स्टार वार्स में, अगर यदि आप कभी भी खेल खेला है, यह पता चला है आप के चारों ओर जा सकते हैं लेगो दुनिया में चीजों को तोड़ने, और सिक्कों का संग्रह है, अनिवार्य रूप से। और अगर तुम कभी खेला है इस खेल रास्ता बहुत अधिक समय, इस अनाम व्यक्ति के रूप में यहाँ था, कुल संख्या सिक्के है कि आप जमा कर सकते हैं की यह प्रतीत होता है, 4 अरब है। अब, के साथ यह वास्तव में गोल है। तो लेगो करने के लिए कोशिश कर रहा था बातों उपयोगकर्ता के अनुकूल रखने के लिए। वे वास्तव में यह करने के लिए नहीं किया है 2 32 बिजली, पिछले सप्ताह प्रति। लेकिन 4 अरब एक कारण है। ऐसा लगता है, इस जानकारी के आधार पर, कि लेगो, और कंपनी है कि यह वास्तविक सॉफ्टवेयर बनाया का फैसला कि सिक्कों की अधिकतम संख्या उपयोगकर्ता जमा कर सकते हैं है, वास्तव में, 4 अरब, वे अपने कोड में चुना क्योंकि एक लंबे लंबे समय तक नहीं का उपयोग करने, जाहिर है, लेकिन सिर्फ एक पूर्णांक, एक अहस्ताक्षरित पूर्णांक, केवल एक सकारात्मक पूर्णांक, जिसका अधिकतम मूल्य है कि मोटे तौर पर है। वैसे, यहाँ एक और अजीब से एक है। खेल सभ्यता में तो है, जो आप में से कुछ परिचित हो सकता है, के साथ ऐसा नहीं है कि साल पहले वहाँ पता चला है इस खेल जिससे में एक बग था यदि आप भूमिका निभाई खेल में गांधी की, उसे करने के बजाय बहुत शांतिवादी जा रहा है, बजाय अविश्वसनीय था, अविश्वसनीय रूप से आक्रामक, कुछ परिस्थितियों में। विशेष रूप से, जिस तरह से कि सभ्यता काम करता है कि अगर आप, खिलाड़ी, लोकतंत्र को अपनाने के अपने आक्रामकता स्कोर हो जाता है दो, तो शून्य से decremented शून्य, और फिर शून्य से शून्य। तो तुम से 2 घटाना अपने वास्तविक पुनरावृति। दुर्भाग्य से, अपने पुनरावृति है अगर शुरू में 1, और आप 2 यह से घटाना लोकतंत्र को गोद लेने के बाद गांधी के रूप में यहाँ हो सकता है किया है, क्योंकि वह बहुत passive-- था आक्रामकता के पैमाने पर 1। लेकिन अगर वह लोकतंत्र को गोद ले, तो वह 1 से नकारात्मक 1 को जाता है। दुर्भाग्य से, वे थे अहस्ताक्षरित नंबर का उपयोग कर, जिसका मतलब है कि वे भी नकारात्मक व्यवहार किया संख्या के रूप में यद्यपि वे सकारात्मक थे। और यह पता चला है कि नकारात्मक 1 के सकारात्मक बराबर है, ठेठ कंप्यूटर प्रोग्राम में, 255 है। तो अगर गांधी को गोद ले लोकतंत्र, और इसलिए है उसकी आक्रामकता स्कोर में कमी आई, यह वास्तव में से 255 के आसपास रोल और उसे सबसे अधिक करता है खेल में आक्रामक चरित्र। तो अगर आप इस पर गूगल कर सकते हैं। और यह था, वास्तव में, एक आकस्मिक प्रोग्रामिंग बग, लेकिन यह काफी प्रवेश किया है विद्या के बाद से कभी। यही कारण है कि सब मज़ा और प्यारा है। अधिक भयावह जब वास्तविक है असली दुनिया उपकरणों, और खेल नहीं, ये एक ही कीड़े हैं। वास्तव में, सिर्फ एक साल पहले एक लेख आया था बोइंग 787 ड्रीमलाइनर के बारे में पता। और पहली बार में लेख नज़र में एक छोटे से रहस्यमय पढ़ता है। लेकिन यह कहा कि यह एक सॉफ्टवेयर बोइंग में असुरक्षा नए 787 ड्रीमलाइनर विमान की है संभावित पायलटों पैदा करने के लिए के नियंत्रण खोने के लिए विमान, संभवतः मध्य उड़ान में, एफएए अधिकारियों हाल ही में चेतावनी दी एयरलाइनों। यह दृढ़ संकल्प था कि एक मॉडल 787 हवाई जहाज है कि संचालित किया गया है लगातार 248 दिन सभी बारी वर्तमान खो सकते हैं, एसी, विद्युत जनरेटर के कारण बिजली नियंत्रण इकाई, GCUs, एक साथ में जाने से सुरक्षित मोड में विफल। यह मुझे खोने की तरह है। लेकिन ज्ञापन में कहा गया है, ठीक है, अब मुझे लगता है कि मिल गया है, हालत एक सॉफ्टवेयर की वजह से हुई करने के लिए आंतरिक काउंटर जनरेटर नियंत्रण इकाइयों कि बाद होगा अतिप्रवाह निरंतर बिजली के 248 दिनों के लिए। हम इस जारी कर रहे हैं नुकसान को रोकने के लिए नोटिस के सभी एसी बिजली शक्ति है, जो परिणाम सकता है हवाई जहाज के नियंत्रण के नुकसान में। तो, सचमुच, वहाँ कुछ पूर्णांक है, या कुछ बराबर डेटा प्रकार, सॉफ्टवेयर में इस्तेमाल किया जा रहा एक वास्तविक हवाई जहाज में कि अगर आप अपने हवाई जहाज रखने के काफी लंबे समय से है, जो जाहिरा तौर पर मामला हो सकता है, अगर आप सिर्फ चला रहे हैं उन्हें लगातार और कभी unplugging अपने हवाई जहाज, ऐसा लगता है, या दे इसकी बैटरी मर जाते हैं, अंततः गिनती होगी, और ऊपर, और ऊपर, और ऊपर, और ऊपर, और ऊपर। और, स्वभाव से, एक स्मृति की निश्चित राशि , अतिप्रवाह जाएगा वापस करने के लिए रोलिंग शून्य या कुछ नकारात्मक मूल्य, जिनमें से एक पक्ष प्रभाव है डरावनी वास्तविकता विमान की जरूरत हो सकती है कि रिबूट किया है, प्रभावी ढंग से, या बुरा गिर सकता है, यह मक्खियों के रूप में। इसलिए मुद्दों के इन प्रकार अभी भी हमारे साथ हैं, even-- यह एक 2015 लेख था, सभी को और अधिक भयावह आप जरूरी नहीं है जब , समझने की सराहना करते हैं, या आशा त्रुटियों के उन प्रकार के। तो यह वहाँ एक अन्य है पता चला है डेटा प्रतिनिधित्व के बारे में बुरी बात है। यह पता चला है कि यहां तक ​​कि मंगाई हैं एक तरह से त्रुटिपूर्ण है, क्योंकि मंगाई, भी, मैं प्रस्तावित कर रहे हैं 32 बिट, या शायद 64 आप एक डबल का उपयोग करें। लेकिन यह है कि अभी भी परिमित है। और पकड़ने है कि यदि आप कर सकते हैं संख्या की एक अनंत संख्या में डाल दिया दशमलव बिंदु के बाद, वहाँ कोई रास्ता नहीं तुम है सभी संभव प्रतिनिधित्व कर सकते हैं नंबर है कि हमें सिखाया गया कक्षा में स्कूल दुनिया में मौजूद कर सकते हैं। एक कंप्यूटर, अनिवार्य रूप से करने के लिए है उन लोगों की संख्या का एक सबसेट चयन सही प्रतिनिधित्व करने के लिए। अब, कंप्यूटर कर सकते हैं दौर हो सकता है एक छोटा सा है, और मोटे तौर पर स्टोर करने के लिए आपको अनुमति दे सकते हैं किसी भी नंबर पर आप संभवतः चाहते हो सकता है। लेकिन सिर्फ intuitively, तुम अगर बिट्स की एक निश्चित संख्या है, आप केवल उन्हें दूसरे स्थान पर रखना कर सकते हैं तो कई मायनों में परिमित। तो आप संभवतः नहीं कर सकते एक सीमित संख्या का उपयोग बिट्स के क्रमचय की, शून्य और लोगों के पैटर्न, एक अनंत प्रतिनिधित्व करने के लिए संख्या की संख्या, जो कि कंप्यूटर हो सकता है पता चलता है बहुत अच्छी तरह से हमारे लिए झूठ बोल रही है कभी कभी हो। वास्तव में, चलो यह करते हैं। मेरे CS50 आईडीई में वापस जाओ। मुझे आगे चलते हैं और एक छोटे प्रोग्राम बनाने दिखाने के लिए कि imprecision कहा जाता है, कंप्यूटर, वास्तव में, imprecise। और मुझे आगे जाना है और साथ शुरू करते हैं पहले से उस कोड के कुछ है, और अब सिर्फ निम्नलिखित है। मुझे आगे जाना है और printf, प्रतिशत करते हैं एफ, बैकस्लैश एन, 1 10 से विभाजित। दूसरे शब्दों में, गहरे में डुबकी चलो 1/10 की तरह, 1 और 10 से विभाजित करने के लिए। निश्चित रूप से, एक कंप्यूटर 1/10 का प्रतिनिधित्व कर सकते हैं। तो चलो आगे जाना है और अस्पष्टता बनाते हैं। चलो देखते हैं। प्रारूप डबल प्रकार निर्दिष्ट करता है। लेकिन तर्क प्रकार int है। क्या चल रहा है? ओह, दिलचस्प है, तो यह एक है पाठ से पहले से सीखा है। मैं कह रहा हूँ, हे, कंप्यूटर शो मेरे प्रतिशत च के साथ एक नाव। लेकिन मैं इसे 2 ints दे रहा हूँ। तो यह पता चला है, मैं ठीक कर सकते हैं तरीके के एक जोड़े में यह। मैं सिर्फ 1.0 में एक मोड़ सकता है, और 10 10.0 में है, जो होगा, वास्तव में, परिवर्तित करने का असर floats-- में उन्हें अभी भी उम्मीद है कि एक ही नंबर। या यह बदल जाता है वहाँ बाहर कुछ हम फिर से लंबे समय से पहले देखेंगे। आप संख्या डाली सकता है। आप इस प्रारंभिक उपयोग कर सकते हैं अभिव्यक्ति, आप कह सकते हैं, अरे, कंप्यूटर, ये लो 10 है, जो मैं जानता हूँ कि एक int है। लेकिन यह इलाज, कृपया, जैसे कि यह एक नाव है। लेकिन इस अनावश्यक रूप से जटिल लगता है। आज हमारे प्रयोजनों के लिए, चलो बस सचमुच चलो उन्हें बात मान कर चल एक दशमलव बिंदु, इस तरह के साथ। मुझे आगे चलते हैं और फिर से दौड़ना, बनाना अस्पष्टता, अच्छा, डॉट स्लेश अस्पष्टता, दर्ज करें। ठीक है, हम अच्छी लग रहे हैं। 1, 10 से विभाजित के अनुसार मेरी मैक यहाँ, वास्तव में, 0.100000 है। अब, मैं ग्रेड स्कूल में पढ़ाया जाता था 0 की एक अनंत संख्या होना चाहिए। तो चलो कम से कम कोशिश करते हैं उन में से कुछ देखने के लिए। यह पता चला है कि printf एक छोटी सी है शौक़ीन तुलना में अभी भी हम उपयोग किया गया है। यह पता चला है आप को निर्दिष्ट करने की जरूरत नहीं है सिर्फ प्रतिशत एफ, या सिर्फ प्रतिशत रहा। आप वास्तव में निर्दिष्ट कर सकते हैं कुछ नियंत्रण यहाँ विकल्प। विशेष रूप से, मैं जा रहा हूँ कहने के लिए, हे, printf, वास्तव में मुझे 10 दशमलव अंक दिखा। तो यह थोड़ा अजीब लग रहा है। लेकिन आप कहते प्रतिशत, डॉट, कितनी संख्या आप के बाद देखना चाहते हैं दशमलव बिंदु है, और फिर च फ्लैट के लिए, सिर्फ इसलिए कि क्या प्रलेखन कहते हैं। मुझे आगे जाना है और उस को बचाने करते हैं। और भी नोटिस, मैं जा रहा हूँ बातों पुन: लिखने के थक गया। तो मैं बस स्थापना कर रहा हूँ और यहाँ नीचे मेरी चाबियाँ पर तीर। और मैं मार रखने के लिए, आप आदेशों के सभी देख सकते हैं कि मैं कर दिया, या गलत तरीके से बनाया है। और अब मैं आगे जाने के लिए जा रहा हूँ और वास्तव में उस का उपयोग नहीं है, जाहिर है। बनाओ अस्पष्टता, डॉट इसलिए imprecision-- स्लेश क्या मैं में पढ़ाया जाता था ग्रेड स्कूल की जाँच करता है। यहां तक ​​कि अगर मैं यह 10 दशमलव के लिए प्रिंट यह रखता है, वास्तव में, 0.10000 है। लेकिन तुम जानते हो क्या? के एक छोटे से लालची मिलता है। हम कहते हैं कि, की तरह करते हैं, मुझे 55 दिखाने दशमलव के बाद अंक। चलो वास्तव में यह लो एक स्पिन के लिए बाहर कार्यक्रम। मुझे बनाओ साथ यह रीमेक चलो अस्पष्टता, डॉट स्लेश, अस्पष्टता। और अब हम चले। अपने बचपन के एक झूठ था। जाहिर है, 1 10 से विभाजित वास्तव में है 0.100000000000000005551115123-- क्या हो रहा है? खैर, यह पता चला है, अगर आप की तरह काफी दूर तक अंतर्निहित में देखो बाहर इस का प्रतिनिधित्व नंबर, यह वास्तव में नहीं बिल्कुल 1/10, या 0.1 और है शून्य की एक अनंत संख्या। अब, ऐसा क्यों है? ठीक है, हालांकि यह एक सरल है हमें मनुष्य के लिए संख्या, 1, 10 से विभाजित यह अभी भी असीम कई में से एक है हम संख्या को लगता है कि हो सकता है कि। लेकिन एक कंप्यूटर ही प्रतिनिधित्व कर सकते हैं कई finitely इतनी संख्या। और हां, प्रभावी ढंग से, क्या कंप्यूटर दिखा रहा है हमें अपने सबसे करीब है संख्या के लिए सन्निकटन हमें विश्वास है कि 1/10 है चाहता हूँ, या वास्तव में 0.10000 विज्ञापन अनन्त। बल्कि, हालांकि, यह है के रूप में के रूप में इसे प्राप्त कर सकते बंद। और, वास्तव में, अगर तुम देखो हुड के नीचे, हम यहाँ देख कर रहे हैं के रूप में दशमलव के बाद 55 अंक, हम वास्तव में उस वास्तविकता को देखते हैं। अब एक अलग रूप में, यदि आप 've कभी देखा movie-- आप में से अधिकांश शायद haven't-- लेकिन सुपरमैन 3 कुछ साल पहले, रिचर्ड प्रायर अनिवार्य रूप से इस leveraged उनकी कंपनी में वास्तविकता एक बहुत चोरी करने के लिए भिन्न और पैसे के भागों की, क्योंकि company-- मुझे याद है, यह while-- अनिवार्य था एक हो गया है कुछ दूर फेंकने के लायक नहीं था कि सेंट की धारणा में। लेकिन आप को जोड़ अगर इन सभी छोटे, छोटे, छोटे फिर से नंबर, और फिर, और फिर, आप के रूप में कर सकते हैं, उसका मामला है, पैसे की एक अच्छी रकम बना। यही कारण है कि एक ही विचार से बंद फट गया था एक और अधिक हाल है, लेकिन अभी भी अब पुराने फिल्म, कार्यालय अंतरिक्ष कहा जाता है, जहां कि फिल्म में एक आदमी, , एक ही बात थी कि यह खराब कर दिया अप पूरी तरह से, बहुत ज्यादा तरीके के साथ समाप्त हो गया उनके बैंक खाते में पैसा है। यह सब बहुत शक था। लेकिन दिन के अंत में, imprecision हमारे चारों तरफ है। और वह भी है, हो सकता है मामले डरावनी। यह पता चला है कि सुपरमैन 3 और कार्यालय अंतरिक्ष के अलावा, वहाँ कुछ बहुत ही वास्तविक हो सकता है दुनिया असर imprecise की वास्तविकताओं का डेटा का प्रतिनिधित्व कि हम भी मनुष्य के लिए इस दिन के लिए जरूरी नहीं है साथ ही साथ हम चाहिए समझते हैं, या के रूप में अक्सर के रूप में हम चाहिए याद है। और, वास्तव में, निम्न क्लिप है कुछ बहुत ही वास्तविक दुनिया पर एक नज़र से क्या होगा अगर तुम ऐसा होता है के असर अस्पष्टता की सराहना करते नहीं है कि संख्या प्रतिनिधित्व में हो सकता है। [वीडियो प्लेबैक] -Computers है, हम सभी को स्वीकार करने आया हूँ अक्सर निराशा समस्या है कि them-- कीड़े के साथ जाना है, वायरस, और सॉफ्टवेयर glitches, छोटे मूल्य का भुगतान करने के लिए सुविधा के लिए। लेकिन उच्च तकनीक और उच्च गति में सैन्य और अंतरिक्ष कार्यक्रम अनुप्रयोगों, छोटी से छोटी समस्या सकते हैं आपदा में बढ़ाया जा सकता है। जून 4 वें, 1996 को, वैज्ञानिकों तैयार एक मानव रहित एरियन -5 रॉकेट लांच करने के लिए। यह वैज्ञानिक ले जा रहा था उपग्रहों के लिए बनाया गया ठीक कैसे स्थापित करने के लिए पृथ्वी के चुंबकीय क्षेत्र का आदान प्रदान सौर हवाओं के साथ। रॉकेट के लिए बनाया गया था यूरोपीय अंतरिक्ष एजेंसी, और अपनी सुविधा से बंद उठाया फ्रेंच गयाना के तट पर। में 37 सेकंड के बारे में कम से उड़ान, वे पहले गौर कुछ गलत हो रहा था। नलिका में swiveling थे एक तरह से वे वास्तव में नहीं करना चाहिए। उड़ान में 40 सेकंड के आसपास, स्पष्ट रूप से, वाहन मुसीबत में था। और है कि जब वे बनाया है एक निर्णय के लिए इसे नष्ट करने के लिए। सीमा सुरक्षा अधिकारी के साथ जबरदस्त हिम्मत, बटन दबाया, रॉकेट विस्फोट से उड़ा दिया इससे पहले कि यह हो सकता है जनता की सुरक्षा के लिए एक खतरा बन गया है। -यह युवती था एरियन -5 के लिए यात्रा। और उसके विनाश ले लिया एक दोष की वजह से जगह रॉकेट के सॉफ्टवेयर में एम्बेडेड। एरियन पर -इस समस्या थी वहाँ एक नंबर था कि कि व्यक्त करने के लिए 64 बिट की आवश्यकता है। और वे परिवर्तित करना चाहता था एक 16-बिट संख्या के लिए यह। उन्होंने मान लिया है कि नंबर कभी नहीं जा रहा था , बहुत बड़ा होना करने के लिए उन में से अधिकांश कि एक 64-बिट संख्या में अंक शून्य थे। वे गलत थे। एक के -इस असमर्थता सॉफ्टवेयर प्रोग्राम को स्वीकार करने के लिए संख्या की तरह द्वारा उत्पन्न एक और विफलता की जड़ में था। सॉफ्टवेयर विकास बन गया था एक नई तकनीक की बहुत महंगा हिस्सा है। एरियन रॉकेट बहुत किया गया है सफल, तो सॉफ्टवेयर के ज्यादा बनाया यह भी था के लिए एरियन -5 में इस्तेमाल किया। -इस बुनियादी समस्या यह है कि एरियन था 5, तेजी से गया था तेजी से बढ़ी है। और सॉफ्टवेयर नहीं था इसके लिए जिम्मेदार है। रॉकेट के -इस विनाश भारी वित्तीय आपदा थी, सब एक मिनट सॉफ्टवेयर त्रुटि के कारण। लेकिन यह पहली बार नहीं था समय डेटा रूपांतरण समस्या आधुनिक रॉकेट प्रौद्योगिकी ग्रस्त था। अलावे 1991, शुरुआत के साथ पहले खाड़ी युद्ध के, पैट्रियट मिसाइल इसी तरह की एक तरह का अनुभव नंबर रूपांतरण समस्या की। और एक परिणाम के रूप में, 28 लोग, 28 अमेरिकी सैनिकों, मारे गए थे, और के बारे में 100 अन्य घायल हो गए, जब देशभक्त है, जो चाहिए था भेजे गए scuds के खिलाफ की रक्षा के लिए, एक मिसाइल आग करने में विफल रहा। -जब इराक कुवैत, और अमेरिका पर हमला किया जल्दी 1991 में डेजर्ट स्टॉर्म शुरू की है, पैट्रियट मिसाइल बैटरी तैनात किया गया था सऊदी अरब और इसराइल की रक्षा के लिए इराकी स्कड मिसाइल हमलों से। पैट्रियट एक अमेरिकी मध्यम दूरी की है हवा प्रणाली के लिए सतह, विनिर्मित रेथियॉन कंपनी द्वारा। पैट्रियट इंटरसेप्टर के -इस आकार खुद के बारे में मोटे तौर पर 20 फुट लंबा है। और यह करीब 2,000 पाउंड वजन। और यह, के बारे में एक बम से किया जाता है मुझे लगता है कि यह मोटे तौर पर 150 पाउंड है। और वारहेड ही है एक उच्च विस्फोटक, जो यह चारों ओर टुकड़े है। बम की आवरण है buckshot की तरह कार्य करने के लिए बनाया गया है। -इस मिसाइलों किया जाता है चार कंटेनर प्रति, और एक अर्द्ध ट्रेलर से ले जाया जाता है। -इस पैट्रियट मिसाइल रोधी प्रणाली कम से कम 20 साल के लिए अब वापस चला जाता है। यह मूल रूप से डिजाइन किया गया था एक वायु रक्षा मिसाइल के रूप में नीचे दुश्मन के हवाई जहाज शूट करने के लिए। पहले खाड़ी युद्ध में, जब कि युद्ध के साथ आया था, सेना के लिए इसका इस्तेमाल करना चाहता था नीचे scuds, न हवाई जहाज को गोली मार। इराकी वायु सेना था एक समस्या का इतना नहीं है। लेकिन सेना scuds के बारे में चिंतित था। और इसलिए वे करने की कोशिश की पैट्रियट उन्नयन। एक दुश्मन -Intercepting मिसाइल मच 5 पर यात्रा काफी चुनौतीपूर्ण होने जा रहा था। लेकिन जब पैट्रियट सेवा में ले जाया गया था, सेना के एक के बारे में पता नहीं था इराकी संशोधन कर दिया है कि उनकी scuds लगभग हिट करने के लिए असंभव है। -क्या हुआ scuds है कि में आ रहे थे अस्थिर थे। वे wobbling थे। इस का कारण यह था इराकियों के क्रम में, 600 किलोमीटर की दूरी पर पाने के लिए एक 300 किलोमीटर से बाहर दूरी की मिसाइल, वजन ले लिया सामने बम से बाहर। वे बम हल्का बना दिया। तो अब पैट्रियट है स्कड पर आने के लिए कोशिश कर रहा। और ज्यादातर समय, समय की भारी बहुमत, यह सिर्फ स्कड से उड़ जाएगा। एक बार जब पैट्रियट सिस्टम ऑपरेटरों एहसास हुआ पैट्रियट अपने लक्ष्य को याद किया, वे देशभक्त के बम विस्फोट अगर यह संभव हताहत से बचने के लिए भूमि पर गिर करने के लिए अनुमति दी गई थी। क्या सबसे ज्यादा लोगों ने देखा -यही था, आकाश में उन बड़े आग के गोले, और के रूप में गलत समझा स्कड हथियार के अवरोध। रात में -Although आकाश, देशभक्त दिखाई दिया सफलतापूर्वक होना करने के लिए स्कड को नष्ट करने, Dhahran में, वहाँ कोई गलती नहीं हो सकता है अपने प्रदर्शन के बारे में। वहाँ, पैट्रियट के रडार प्रणाली एक आने वाली स्कड का ट्रैक खो दिया है, और कारण कभी नहीं शुभारंभ एक सॉफ्टवेयर दोष करने के लिए। यह इजरायल जो पहली बार पता चला था कि अब सिस्टम पर था, अधिक से अधिक समय विसंगति बन गया है, एक घड़ी एम्बेडेड के कारण सिस्टम के कंप्यूटर में। -About दो सप्ताह पहले Dhahran में त्रासदी, इजरायल की सूचना दी रक्षा विभाग कि इस प्रणाली के समय खो गया था। लगभग आठ घंटे या चलाने के बाद, वे प्रणाली है कि गौर काफ़ी कम सटीक होता जा रहा था। रक्षा विभाग द्वारा प्रतिक्रिया पैट्रियट बैटरी के सभी कह रही सिस्टम नहीं छोड़ करने के लिए एक लंबे समय के लिए। उन्होंने कहा कि क्या एक लंबे समय कभी नहीं was-- आठ घंटे, 10 घंटे, 1000 घंटे। कोई नहीं जानता। -इस पैट्रियट बैटरी बैरकों में तैनात Dhahran और उसके त्रुटिपूर्ण आंतरिक पर घड़ी 100 घंटे से अधिक पर किया गया था फरवरी 25 की रात को। -यह एक सटीकता के लिए समय पर नज़र रखी की एक दूसरे के एक दसवें के बारे में। अब, एक दूसरे का एक दसवें एक दिलचस्प संख्या है, क्योंकि यह व्यक्त नहीं किया जा सकता द्विआधारी में वास्तव में है, जो यह वास्तव में व्यक्त नहीं किया जा सकता है इसका मतलब किसी भी आधुनिक डिजिटल कंप्यूटर में। यह विश्वास करना मुश्किल है। लेकिन एक उदाहरण के रूप में इस का उपयोग करें। की संख्या एक तिहाई लेते हैं। एक तिहाई नहीं किया जा सकता वास्तव में दशमलव में व्यक्त किया। एक तिहाई 0.333 है अनंत के लिए चल रहा है। साथ ऐसा करने का कोई रास्ता नहीं है दशमलव में पूर्ण शुद्धता। यह ठीक है कि समस्या की तरह है कि पैट्रियट में हुआ। अब सिस्टम भाग गया, बदतर समय त्रुटि हो गया। ऑपरेशन के 100 घंटे -After, समय में त्रुटि के बारे में केवल एक तिहाई था एक दूसरे की। लेकिन एक को निशाना बनाने के मामले में मिसाइल मच 5 पर यात्रा, यह एक ट्रैकिंग में हुई 600 मीटर से अधिक की त्रुटि। यह एक गंभीर त्रुटि होगा क्या पर सैनिकों के लिए हुआ एक स्कड लांच किया गया है पूर्व चेतावनी उपग्रहों द्वारा पता लगाया और वे जानते थे कि स्कड था उनकी सामान्य दिशा में आ रहे हैं। उन्हें पता नहीं था जहां यह आ रहा था। -यह अब रडार पर निर्भर था पैट्रियट प्रणाली के घटक बचाव Dhahran लगाने और रखने के लिए आने वाली दुश्मन मिसाइल का ट्रैक। -इस रडार बहुत होशियार था। यह वास्तव में ट्रैक होगा स्कड की स्थिति, और उसके बाद की भविष्यवाणी जहां यह शायद अगली बार जब रडार भेजा जाएगा एक बाहर नाड़ी। यही कारण है कि एक सीमा के गेट बुलाया गया था। -फिर, एक बार पैट्रियट फैसला करता पर्याप्त समय है वापस जाने के लिए और अगले जाँच करने के लिए पारित इस का पता चला वस्तु के लिए स्थान, इसे वापस चला जाता है। तो जब यह गलत करने के लिए वापस चला गया जगह है, यह तो कोई वस्तु को देखता है। और यह फैसला करता था कि वहाँ कोई वस्तु है, यह एक गलत पहचान थी, और ट्रैक चला जाता है। -इस भेजे स्कड गायब हो गया रडार स्क्रीन से। और सेकंड बाद में, यह बैरकों में पटक दिया। स्कड 28 की मौत हो गई, और पिछले था एक पहले खाड़ी युद्ध के दौरान निकाल दिया। दुर्भाग्य से, अद्यतन सॉफ्टवेयर अगले दिन Dhahran पर पहुंचे। सॉफ्टवेयर दोष था गया तय, समापन परेशान में एक अध्याय पैट्रियट मिसाइल का इतिहास। [वीडियो प्लेबैक] डेविड जे मालन: तो यह सब करने के लिए है कहने अतिप्रवाह के इन मुद्दों है कि और अस्पष्टता सब भी असली हैं। तो तुमको वहां क्या मिला? हम सिर्फ printf बारे में बात कर के साथ शुरू हुआ। फिर, यह है कि समारोह स्क्रीन के लिए कुछ प्रिंट, और हम उसके बाद शुरू की कुछ अन्य कार्यों तथाकथित CS50 के पुस्तकालय से। और हम जारी रखेंगे कारण समय में इन देखते हैं। और हम, विशेष रूप से, स्ट्रिंग मिलता है, का इस्तेमाल किया और int मिलता है, और अब भी नाव मिलता है, और अभी तक दूसरों को भी हम सामना करेंगे और खुद को लंबे समय से पहले का उपयोग करें। लेकिन इस अवसर पर, राशि हम पहले से ही एक की जरूरत है देखा क्या उन कार्यों हाथ वापस स्टोर करने के लिए? वे हमें वापस एक स्ट्रिंग हाथ, या एक पूर्णांक के लिए, या एक नाव। और कभी कभी हम उस डाल की जरूरत है स्ट्रिंग, या पूर्णांक, या नाव, कहीं न कहीं। और उन चीजों को स्टोर करने के लिए, बस याद करते हैं खरोंच में की तरह, हम चर है। लेकिन स्क्रैच के विपरीत, सी में हम वास्तविक प्रकार है variables-- डेटा की प्रकार, अधिक generally-- उनमें से, एक स्ट्रिंग, एक पूर्णांक, एक तैरने लगते हैं, और इन दूसरों को भी। और इसलिए जब हम सी में चर घोषित, हम अपने डेटा प्रकार की घोषणा करनी होगी। यह कुछ ऐसा नहीं है हम करेंगे सेमेस्टर में बाद में क्या करना है के रूप में हम अन्य भाषाओं के लिए संक्रमण। लेकिन अब के लिए, हम की जरूरत है अग्रिम में एक प्राथमिकताओं के लिए, कंप्यूटर किस प्रकार को समझाने चर का हम यह हमें देना चाहता हूँ। अब, इस बीच, मुद्रित करने के लिए डेटा प्रकार के उन प्रकार, हम बता printf करने के लिए क्या उम्मीद करनी है। और हम तार के लिए प्रतिशत रों देखा था, और पूर्णांकों के लिए प्रतिशत रहा, और कुछ पहले से ही दूसरों। और उन लोगों के बस आवश्यकताओं हैं दृश्य प्रस्तुति के लिए कि सूचना के। और इनमें से प्रत्येक वास्तव में हो सकता है parametrized या किसी तरह से tweaked, आप नियंत्रण को आगे करना चाहते हैं उत्पादन के प्रकार है कि आप मिलता है। और, वास्तव में, यह पता नहीं है कि केवल बदल जाता है वहाँ एक नई लाइन के लिए बैकस्लैश n है। वहाँ कुछ और बैकस्लैश कहा जाता है एक गाड़ी वापसी, के लिए R जो एक करने जैसा है पुराने स्कूल टाइपराइटर, और भी Windows कई वर्षों के लिए इस्तेमाल किया। वहाँ टैब के लिए बैकस्लैश टी। पता चला है, कि अगर आप चाहते हैं एक स्ट्रिंग के अंदर दोहरे उद्धरण, याद है कि हम का उपयोग किया है दोहरे उद्धरण डबल छोड़ दिया और सही पर बोली इस प्रकार अब तक हमारे तार के समाप्त होता है। यही कारण है कि चीजों को भ्रमित करने के लिए प्रतीत होता है। आप में एक दोहरे उद्धरण करना चाहते हैं एक string-- और, वास्तव में के बीच, यह देखने के लिए भ्रामक है। और तो आप से बचने के लिए है, इसलिए करने के लिए बात करते हैं, कुछ के साथ एक दोहरे उद्धरण जैसे, सचमुच, दोहरे उद्धरण बैकस्लैश। और वहाँ कुछ अन्य अब भी है। और हम उन लोगों का अधिक देखेंगे लंबे समय से पहले वास्तविक प्रयोग में। तो चलो अब से संक्रमण करते हैं डेटा, और प्रतिनिधित्व, और अंकगणितीय ऑपरेटर, सब जिनमें से हमें कुछ इमारत दिया जो के साथ ब्लॉक खेलने के लिए। लेकिन अब वास्तव में दे हमें शब्दावली के बाकी हम पहले से ही था कि खरोंच के साथ पिछले सप्ताह कुछ अन्य पर एक नज़र लेने के द्वारा C-- में निर्माणों उन सभी को नहीं। लेकिन विचारों हम कर रहे हैं के बारे में वास्तव में सिर्फ देखने के लिए से अनुवाद पर जोर देना एक भाषा, खरोंच, दूसरे के लिए, सी और समय के साथ, हम ले लेंगे हमारे टूलकिट के लिए और अधिक उपकरण, तो बात है, वाक्य रचना। और, वास्तव में, आप देखेंगे कि विचारों देखेंगे अब बल्कि पिछले हफ्ते से परिचित हैं। तो चलो यह करते हैं। आगे बढ़ते हैं और एक कार्यक्रम कोड़ा चलो कि वास्तव में कुछ भाव का उपयोग करता है, एक बूलियन अभिव्यक्ति। मुझे आगे चलते हैं यहां और एक नई फ़ाइल बनाएँ। मैं इस condition.c फोन करता हूँ। मुझे आगे चलते हैं और CS50 पुस्तकालय में शामिल हैं। और मुझे आगे जाना है और शामिल करते हैं हमारे कार्यों के लिए मानक IO.h, और printf, और अधिक क्रमशः। मुझे खुद की कि बॉयलरप्लेट दे int मुख्य शून्य, जिसका विवरण हम करेंगे भविष्य में वापस करने के लिए आते हैं। अब मुझे आगे जाना है और दे अपने आप मिल int के माध्यम से एक इंट। तो फिर मुझे आगे जाना है और यह करते हैं। मैं कहना चाहता हूँ कि यदि मैं चलो less-- है सकारात्मक, नकारात्मक के बीच भेद, या शून्य मान हैं। तो अगर मैं शून्य से कम है, मुझे जाने सिर्फ इस कार्यक्रम बस कहना है, नकारात्मक, बैकस्लैश एन, बाकी अगर मैं शून्य से अधिक है। अब मैं, ज़ाहिर है, कहने जा रहा हूँ printf सकारात्मक, बैकस्लैश एन। और तो और मैं यह कर सकता if--। अगर मैं 0 के बराबर होती है मैं कर सकता है। लेकिन मैं कम से बना रही हो जाएगा कम से कम एक पहले से ही गलती है। याद है कि बराबर का चिह्न है बराबर नहीं, हम मनुष्यों के रूप में यह पता है। लेकिन यह असाइनमेंट ऑपरेटर है। और हम पर 0 नहीं लेना चाहते हैं सही है और मैं में छोड़ दिया पर डाल दिया। तो इस भ्रम से बचने के लिए, या शायद बराबरी के दुरुपयोग पर हस्ताक्षर, मनुष्य कुछ साल पहले का फैसला कि कई प्रोग्रामिंग भाषाओं में आप समानता के लिए जाँच करना चाहते हैं जब छोड़ दिया और सही के बीच, आप वास्तव में इस्तेमाल बराबर बराबर होती है। तो अगर आप बराबरी दो बार हस्ताक्षर मारा। आप सही से आवंटित करना चाहते हैं बाईं करने के लिए, आप एक ही बराबर चिह्न का उपयोग करें। इसलिए हम this-- वरना कर सकता है अगर मैं बराबर शून्य के बराबर होती है। मैं तो जा सकते हैं और हो सकता है मेरे घुंघराले ब्रेसिज़ खोलने, और कहते हैं, printf 0, बैकस्लैश n, हो गया। लेकिन कैसे इन याद सड़क में कांटे काम कर सकते हैं। और, वास्तव में, बस तर्क के बारे में सोचते हैं। मैं एक संख्या है। यह एक पूर्णांक विशेष रूप से है। और इसका मतलब यह कम होने जा रहा है 0, या 0, या 0 से अधिक से अधिक है। तो इस तरह का है गर्भित डिफ़ॉल्ट मामला। और इसलिए हम बस की तरह हो सकता है स्क्रैच, और अगर साथ बांटना और अभी सब कहते हैं। तार्किक रूप से, अगर आप प्रोग्रामर वहाँ सिर्फ इतना पता है जो एक में तीन बाल्टी परिदृश्य, पहले fall-- कर सकते हैं दूसरे या तीसरे यह नहीं case-- में अतिरिक्त परिशुद्धता जोड़ने की परेशानी और वहाँ अतिरिक्त तर्क। बस के साथ आगे बढ़ो डिफ़ॉल्ट मामले बाकी के यहाँ। अब, चलो आगे चलते हैं इस सहेजने के बाद, बनाना शर्तों डॉट conditions-- स्लेश नहीं एक महान यूजर इंटरफेस, क्योंकि मैं उत्साह नहीं कर रहा हूँ उपयोगकर्ता, जैसा कि मैंने पहले उल्लेख किया है। लेकिन वह ठीक है। हम इसे सरल रखने देंगे। की संख्या 42 कोशिश करते हैं। और वह सकारात्मक है। के नंबर की कोशिश करते हैं नकारात्मक 42, नकारात्मक। का मान 0 कोशिश करते हैं। और, वास्तव में, यह काम करता है। अब, आप से पहले समस्याओं के साथ देखेंगे लंबे, परीक्षण बातों में तीन बार, शायद पर्याप्त नहीं। तुम्हें शायद कुछ परीक्षण करना चाहते हैं बड़ी संख्या है, कुछ छोटे नंबर, किसी कोने मामलों, के रूप में हम उन्हें का वर्णन करने के लिए आ जाएगा। एक लेकिन अब के लिए, यह है बहुत आसान कार्यक्रम। और मुझे पूरा यकीन है, तार्किक, यह तीन मामलों में गिर जाता है। और, वास्तव में, यहां तक ​​कि हम हालांकि अभी संभावित downsides पर ध्यान केंद्रित अस्पष्टता और अतिप्रवाह की, में वास्तविकता जहां CS50 की समस्याओं के कई, हमें चिंता करने के लिए नहीं जा रहे हैं के बारे में, हर समय, अतिप्रवाह के उन मुद्दों और अस्पष्टता, क्योंकि वास्तव में, सी में, यह वास्तव में सब नहीं है कि उन चीजों से बचने के लिए आसान नहीं है। आप तक गिनती करना चाहते हैं बड़ा, और बड़ा और बड़ा है, यह पता चला है वहाँ आप तकनीक हैं उपयोग कर सकते हैं अक्सर बातें बुलाया शामिल पुस्तकालयों, कोड का संग्रह है, कि अन्य लोगों ने लिखा है कि आप उपयोग कर सकते हैं, की तरह और अन्य भाषाओं जावा और दूसरों को, वास्तव में यह एक बहुत आसान बनाना यहां तक ​​कि उच्च गिनती करने के लिए। तो यह वास्तव में इन खतरों में से कुछ है भाषा आप उपयोग के एक समारोह। और आने वाले हफ्तों में, हम करेंगे देखना कितना खतरनाक C है यदि आप इसे ठीक से इस्तेमाल नहीं किया जा सकता है। लेकिन वहाँ से, और साथ अजगर, और जावास्क्रिप्ट जाएगा हम कुछ अतिरिक्त सुरक्षा पर परत, और उन खतरों के कम चलाते हैं। तो चलो एक छोटे से अधिक हमारे कार्यक्रम में दिलचस्प तर्क। तो मुझे आगे जाना है और पैदा करते हैं एक कार्यक्रम तार्किक बुलाया अभी तो मैं कुछ के साथ खेल सकते हैं वास्तविक तर्क, logical.c। मैं बस कॉपी और पेस्ट कुछ करेंगे पहले तो मैं वापस पाने से कोड यह अच्छा प्रारंभिक बिंदु है। मुझे इस समय चार सी मैं कर रहा हूँ यह सी का एक नाम देने जा रहा यह पारंपरिक है, सिर्फ इसलिए कि, उपयोगकर्ता से एक चरित्र मिलता है। और हम जैसे ढोंग करते हैं मैं भाग लागू कर रहा हूँ कि आर एम कार्यक्रम की, निकालें इससे पहले कि कार्यक्रम के उपयोगकर्ता के लिए प्रेरित किया एक फ़ाइल को हटा दें। हम ऐसा कैसे कर सकता है? मैं कहना चाहता हूँ, अगर सी के बराबर होती है के बराबर होती है, बोली गंदें शब्द बोलना, Y, तो मैं मान जा रहा हूँ उपयोगकर्ता हाँ चुना गया है। मैं सिर्फ हाँ मुद्रित करने के लिए जा रहा हूँ। यह वास्तव में लिख रहे थे तो हटाने कार्यक्रम, हम फ़ाइल निकाल सकता है कोड के अधिक लाइनों के साथ। लेकिन हम इसे सरल रखने के लिए होगा। वरना यदि ग के बराबर होती है N-- के बराबर होती है और अब यहाँ, मैं कहने जा रहा हूँ, उपयोगकर्ता कोई मतलब होगा। और तो और, तुम्हें पता है क्या? मैं क्या किसी और को पता नहीं है उपयोगकर्ता टाइप करने के लिए जा रहा है। इसलिए मुझे लगता है कि बस कहने जा रहा हूँ कि एक त्रुटि है, जो कुछ भी वह या वह वास्तव में टाइप। तो यहाँ क्या हो रहा है? वहाँ एक बुनियादी फर्क है मैं अतीत में क्या किया है बनाम। डबल कोट, डबल कोट, डबल उद्धरण, और, अभी तक, एकल उद्धरण, एकल कोट। यह सी में पता चला है, कि जब आप एक स्ट्रिंग लिखना चाहते हैं, आप डबल उद्धरण का उपयोग करते हैं, हम है बस के रूप में printf के साथ यह सब समय का उपयोग किया गया। लेकिन अगर आप सिर्फ एक साथ काम करना चाहते हैं एकल चरित्र, एक तथाकथित चार, तो आप वास्तव में एक उद्धरण का उपयोग करें। आप में से जो लोग क्रमादेशित है इससे पहले, आप नहीं हो सकता है इस बारे में चिंता थी कुछ भाषाओं में भेद। सी में, यह बात करता है। और इसलिए जब मैं एक चार मिलता है और मैं चाहता हूँ बराबरी का उपयोग करते हुए कि चार तुलना करने के लिए Y या n जैसे कुछ पत्र के बराबर होती है, मुझे क्या करना है, दरअसल, एक उद्धरण की आवश्यकता है। अब, चलो आगे जाना है और यह करते हैं। आगे बढ़ते हैं और कर सकता हूँ चलो तार्किक डॉट तार्किक स्लेश। और अब मैं के लिए प्रेरित किया जा रहा है। तो, शायद, एक बेहतर प्रयोक्ता अनुभव वास्तव में मुझे बताना होगा कि यहाँ क्या करना है। लेकिन मैं करने जा रहा हूँ बस आँख बंद करके अच्छा ठीक है हां, तो, वाई कहते हैं। चलो फिर से चलाने के लिए, n कोई, तो अच्छा है। कुछ लोगों को मैं जानता की तरह लगता है, मेरे कैप्स लॉक कुंजी भी अक्सर सभी पर है। तो मैं त्रुटि कर राजधानी वाई, दर्ज करें। ठीक है, यह वास्तव में मैं क्या उम्मीद कर रहा हूँ नहीं है। दरअसल, कंप्यूटर सचमुच क्या कर रहा है मैं यह बताया do-- करने के लिए जाँच लोअरकेस Y और छोटे एन। यह अच्छी तरह महसूस नहीं करता उपयोगकर्ता अनुभव, यद्यपि। मेरे लिए पूछना और स्वीकार करते हैं या तो कम मामले अपर केस। तो यह पता चला है, तुम चाहते हो सकता है स्क्रैच में ऐसा कुछ कहना है, सचमुच या सी के बराबर होती है जैसे राजधानी एकल उद्धृत y के बराबर होती है। पता चला है, सी नहीं है इस शाब्दिक खोजशब्द या। लेकिन यह दो खड़ी सलाखों है। तुम्हें पता है, आम तौर पर शिफ्ट पकड़ है यदि आप एक अमेरिकी कीबोर्ड का उपयोग कर रहे हैं, और ऊर्ध्वाधर बार मारा अपनी वापसी कुंजी ऊपर कुंजी। लेकिन इस बार ऊर्ध्वाधर ऊर्ध्वाधर बार का मतलब है या। तो, इसके विपरीत, हम चाहते थे कहने और खरोंच के साथ की तरह, को, हम एम्परसेंड एम्परसेंड कर सकता है। यही कारण है कि कोई तार्किक समझ में यहाँ आता है, क्योंकि एक मानव संभवतः नहीं कर सका टाइप किया है दोनों Y और छोटे y और एक ही चरित्र के रूप में राजधानी वाई। तो या है क्या हम यहाँ इरादा रखते हैं। इसलिए मैं दोनों स्थानों में ऐसा करते हैं, तो या ग बराबर बराबर राजधानी एन, अब फिर से दौड़ना, तार्किक बनाने के लिए, तार्किक फिर से दौड़ना। अब, मैं y टाइप कर सकते हैं। और मैं इसे फिर से कर सकते हैं के साथ राजधानी वाई, या पूंजी एन और मैं अतिरिक्त में जोड़ सकता है अभी भी संयोजन। तो यह एक तर्कसंगत है के रूप में अब insofar के कार्यक्रम मैं के लिए तार्किक जाँच कर रहा हूँ इस मूल्य या इस मूल्य। और मैं करने के लिए नहीं है, जरूरी दो और भारतीय विदेश सेवा या किसी और आईएफएस के साथ आते हैं। मैं वास्तव में से कुछ के गठजोड़ कर सकते हैं इस तरह से एक साथ संबंधित तर्क। तो यह बेहतर होगा बस से डिजाइन किए करते हुए कहा कि यदि सेल्सियस कम मामले y के बराबर होती है, बाकी मुद्रित हाँ, अगर ग के बराबर होती है राजधानी वाई, बाकी मुद्रित हाँ, अगर ग के बराबर होती है दूसरे शब्दों में lower--, आपके पास करने के लिए नहीं है अधिक से अधिक शाखाएँ हैं। आप बराबर के कुछ गठबंधन कर सकते हैं तार्किक रूप से शाखाओं, इस तरह के रूप में। तो चलो बस एक पर एक नज़र रखना अंतिम घटक, एक अंतिम निर्माण, कि सी की अनुमति देता है। और हम में वापस आ जाएगा दूसरों को भी करने के लिए भविष्य। और फिर हम देख कर समाप्त होगा code-- की नहीं सत्यता पर कोड हो रही work-- लेकिन डिजाइन करने के लिए कोड की, और उन बीज संयंत्र पर जल्दी। तो मुझे आगे जाना है और यहाँ एक नई फ़ाइल को खोलने के लिए। आपको पता है कि? मैं फिर से लागू करने के लिए जा रहा हूँ कि एक ही कार्यक्रम है, लेकिन एक अलग निर्माण का उपयोग। तो मुझे जल्दी चलो अपने आप को दे पहुँच cs50.h शामिल करने के लिए CS50 पुस्तकालय के लिए, printf के लिए मानक Io.h। मुझे मेरे int मुख्य शून्य दीजिए। और फिर यहाँ पर, चलो मुझे आगे जाना है और यह करते हैं। चार सी, चार प्राप्त हो जाता है पहले की तरह। और मैं एक नया निर्माण का उपयोग करने के लिए जा रहा हूँ now-- स्विच, क्या चरित्र पर? तो स्विच की तरह की तरह है एक ट्रेन पटरियों स्विचन। या, वास्तव में, यह एक तरह से है एक बाकी है, और अगर हैं, तो लेकिन कुछ अलग ढंग से लिखा है। एक स्विच इस तरह दिखता है। आप स्विच है, और फिर क्या चरित्र या नंबर पर आप को देखने के लिए चाहते हैं, फिर कुछ घुंघराले ब्रेसिज़ में पसंद स्क्रैच, सिर्फ इस सामान करना कहते हैं। और फिर आप अलग-अलग मामले दर्ज हैं। तुम अगर और कुछ का उपयोग नहीं करते। तुम सचमुच शब्द मामले का उपयोग करें। और अगर आप इस तरह कुछ कहेंगे। तो एक छोटे y के मामले में, या एक राजधानी Y के मामले में, आगे बढ़ो और हाँ बाहर प्रिंट। और फिर स्विच के बाहर तोड़। बस। हो गया था। वरना, तो तो बात है, कम मामले n, या पूंजी एन, तो आगे चलते हैं और प्रिंट बाहर कोई है, और फिर टूट गया। Else-- और इस तरह का है डिफ़ॉल्ट मामले indeed-- printf error-- और सिर्फ अच्छे उपाय के लिए, हालांकि तार्किक रूप से यह ब्रेक जरूरी नहीं है क्योंकि हम अंत में कर रहे वैसे भी स्विच की, अब मैं स्विच से बाहर तोड़ रहा हूँ। तो यह एक छोटे से अलग लग रहा है। लेकिन, तार्किक रूप से, यह है वास्तव में बराबर। और तुम क्यों प्रयोग करेंगे एक के ऊपर एक? कभी कभी, सिर्फ व्यक्तिगत पसंद, कभी कभी सौंदर्यशास्त्र, अगर मैं इस पर नज़र अब, वहाँ कुछ है के लिए कहा जा सकता है इस कोड की पठनीयता। मेरा मतलब है, इस तथ्य यह है कि कोई बात नहीं कोड कमरे में हम में से कई के लिए नया है। लेकिन यह बस की तरह सुंदर है। आप लोअरकेस वाई, राजधानी Y देखते हैं, कम मामले n, राजधानी एन डिफ़ॉल्ट, यह बस की तरह कूदता एक तरह से आप पर बाहर कि, यकीनन, हो सकता है पिछले उदाहरण आईएफएस, और ऊर्ध्वाधर सलाखों के साथ, और बाकी आईएफएस, नहीं हो सकता है। तो यह व्यक्तिगत के लिए वास्तव में एक मामला है पसंद है, वास्तव में, या पठनीयता, कोड की। लेकिन कार्यक्षमता के संदर्भ में, मुझे जाने आगे जाकर एक स्विच, डॉट स्लेश बनाना स्विच, और अब छोटे अक्षरों y में टाइप करें, राजधानी वाई, लोअरकेस एन, एन राजधानी, डेविड, पुन: प्रयास है कि क्योंकि नहीं एक ही चरित्र। उम्मीद के रूप में की, एक्स, त्रुटि करते हैं। और, logically-- और यह कुछ है मैं general-- भी प्रोत्साहित करेगा हालांकि हम केवल scratching रहे हैं इन सुविधाओं में से कुछ की सतह। और यह स्पष्ट नहीं हो सकता है जब आप खुद के कीबोर्ड पर बैठ जाओ, यह कैसे काम करता है? यह क्या करना होगा? होने के बारे में सुंदर बात एक लैपटॉप या डेस्कटॉप, या उपयोग एक संकलक के साथ एक कंप्यूटर करने के लिए, और इस तरह एक कोड संपादक के साथ, आप लगभग हमेशा इन जवाब दे सकती है सिर्फ कोशिश कर रहा द्वारा खुद के लिए प्रश्न। उदाहरण के लिए, यदि बयानबाजी हाथ पर सवाल थे, क्या होता है अगर आप भूल जाते हैं अपने को तोड़ने के बयानों? जो वास्तव में एक बहुत ही आम बात है, क्योंकि यह नहीं दिखता है जैसे तुम सच में उन्हें जरूरत है। वे वास्तव में पूरा नहीं करते अपने एक कोष्टक या घुंघराले की तरह सोचा ब्रेस करता है। चलो आगे चलते हैं और कोड कंपाइल और देखते हैं। तो स्विच, डॉट स्लेश स्विच कर सकते हैं। के कम मामले में टाइप करते हैं वाई, शीर्ष मामला दर्ज करें। तो मैं y टाइप। कार्यक्रम नहीं कहा, हां, त्रुटि, के रूप में हालांकि वह अपने मन बदल रहा था। लेकिन यह किस तरह का था, क्योंकि क्या होता है एक स्विच के साथ पहला मामला है कि मैच अनिवार्य रूप से इसका मतलब है, हे कंप्यूटर, इसे नीचे कोड के सभी निष्पादित। और अगर आप कहते हैं कि नहीं तोड़, या ब्रेक मत कहो, या तोड़ मत कहो, कंप्यूटर उड़ा जा रहा है उन पंक्तियों के माध्यम से सभी और जब तक उन सभी को निष्पादित ऐसा नहीं है कि घुंघराले ब्रेस के लिए हो जाता है। तो ब्रेक कर रहे हैं, वास्तव में, आवश्यक है। लेकिन एक takeaway इधर, जब है संदेह में, कुछ करने की कोशिश। हो सकता है कि अपने कोड पहला बचाने के लिए, या यह एक अतिरिक्त फ़ाइल में बचाने के लिए यदि आप के बारे में वास्तव में चिंतित हैं खिलवाड़ और ठीक करने के लिए हो रही काम है कि आप जानते हैं कि काम कर रहा है। लेकिन चीजों की कोशिश। और वैसे भी डर नहीं है, शायद, कंप्यूटर क्या कर सकता है की, या आप कुछ टूट सकता है। आप हमेशा के लिए वापस लौट सकते हैं कुछ पुराने संस्करण के लिए। तो चलो देख कर अंत कोड के डिजाइन पर। हम लिखने के लिए अब यह क्षमता है स्थिति, और लिखने छोरों, और चर, और कॉल कार्य करता है। तो, सच में, हम किस तरह के कम से वापस आ गए हैं जहां हम खरोंच के साथ एक सप्ताह पहले थे, एक कम सम्मोहक शाब्दिक साथ यद्यपि स्क्रैच से पर्यावरण अनुमति देता है। लेकिन नोटिस हम कैसे जल्दी से अधिग्रहण किया है कि शब्दावली, भले ही यह में सिंक करने के लिए थोड़ा समय लग करने के लिए जा रहा है, इतना है कि हम अब इस शब्दावली का उपयोग कर सकते हैं अधिक रोचक कार्यक्रमों लिखने के लिए। और चलो एक बच्चे को कदम उठाने जाने कि ओर, के रूप में इस प्रकार है। मुझे आगे चलते हैं और यहाँ एक नई फ़ाइल बनाएँ। मैं इस फोन करने के लिए जा रहा हूँ prototype.c, और परिचय पहली बार के लिए, क्षमता अपने खुद के कार्यों बनाने के लिए। आप में से कुछ हो सकता है स्क्रैच के साथ यह किया, जिससे आप बना सकते हैं अपने खरोंच में स्वयं के कस्टम ब्लॉक, और फिर उन्हें जगह में खींचें जहाँ भी तुम सी में करना चाहते हैं और सबसे प्रोग्रामिंग में भाषा, वास्तव में आप क्या कर सकते हैं that-- अपने खुद के कार्यों बनाने, अगर वे पहले से ही मौजूद नहीं है। तो, उदाहरण के लिए, मुझे आगे चलते हैं और cs50.h शामिल है, और शामिल मानक IO.h, int मुख्य शून्य। और अब हम एक है जाने के लिए तैयार प्लेसहोल्डर। मैं चीजों को रखने के मुद्रण आज लोगों के नाम की तरह। और कहा कि लगता है like-- अच्छा नहीं होगा अगर वहाँ एक समारोह प्रिंट नाम कहा जाता था? मैं printf का उपयोग करने की जरूरत नहीं है। मैं याद करने की जरूरत नहीं है सभी प्रारूप कोड। क्यों नहीं रहा, या क्यों नहीं, मुझे पहले किसी को किया था एक समारोह में कहा जाता प्रिंट बनाने नाम है, कि कुछ नाम दिया, बस इसे बाहर प्रिंट? दूसरे शब्दों में, अगर मैं कहता हूँ, अरे, कंप्यूटर, मुझे एक स्ट्रिंग देना इस तरह के लिए उपयोगकर्ता पूछ रही द्वारा, CS50 मिलता स्ट्रिंग समारोह के माध्यम से। अरे, कंप्यूटर, में है कि स्ट्रिंग डाल बाएं हाथ की ओर में चर, और कॉल यह बात है। और फिर, अरे कंप्यूटर, आगे बढ़ो और मुद्रित उस व्यक्ति का नाम, हो गया। अब, यह अच्छा होगा, क्योंकि इस कार्यक्रम है, जिसे उपयुक्त नाम, मुझसे कहता है कि वह क्या करने वाला है उन समारोह के नाम के माध्यम से। मुझे जाने और प्रोटोटाइप बनाने, दर्ज करें। और, दुर्भाग्य से, इस उड़ान भरने के लिए नहीं जा रहा है। Prototype.c, रेखा 7, चरित्र 5, त्रुटि, अंतर्निहित घोषणा समारोह प्रिंट नाम की C99, C99 में अमान्य है सी के एक संस्करण है, जिसका अर्थ कि 1999 में बाहर आया था। बस इतना ही। इसलिए मैं नहीं जानता कि क्या यह सब अभी तक इसका मतलब है। लेकिन मैं लाल में त्रुटि को पहचान नहीं है। यही कारण है कि बहुत स्पष्ट है। और ऐसा लगता है कि साथ यहां हरी चरित्र, मुद्दा प्रिंट नाम के साथ खुला है, कुछ शब्द एस, बंद कुछ शब्द, सेमी कॉलन। लेकिन अंतर्निहित घोषणा समारोह हम संक्षेप में पहले देखा था। इसका मतलब यह है, बस, कि बजना पता नहीं है कि मैं क्या मतलब है। मैं एक शब्दावली शब्द का उपयोग किया है यह है कि कभी नहीं देखा या पहले सिखाया गया। और इसलिए मैं इसे सिखाने की जरूरत है इस समारोह का मतलब है क्या। इसलिए मुझे आगे जाना है और ऐसा करने जा रहा हूँ। मुझे आगे जाना है और लागू करने के लिए जा रहा हूँ अपने ही समारोह में कहा जाता प्रिंट नाम। और मैं कहना है इस प्रकार के रूप में जा रहा हूँ, यह है कि यह इस, printf, नमस्ते, प्रतिशत करता है एस, बैकस्लैश एन, नाम, सेमी कॉलन। तो मैं बस क्या किया? तो यह पता चला है, करने के लिए अपने खुद के समारोह को लागू करने, हम एक तरह से से कुछ उधार ले मुख्य रूप में एक ही संरचना हम सिर्फ किया गया है कि के लिए ले जाया दी गई है, और मैं पता है सिर्फ नकल और बहुत ज्यादा क्या चिपकाने मैं अतीत में लिख दिया गया है। लेकिन पैटर्न यहाँ नोटिस। इंट, मुख्य, शून्य, हम अलग तंग करेंगे इससे पहले लंबे समय है कि क्या वास्तव में मतलब है। लेकिन आज के लिए, बस समानता पर ध्यान दिया। शून्य, प्रिंट का नाम, स्ट्रिंग नाम, तो वहाँ एक बैंगनी कीवर्ड का है, जो हम शुरू करने के लिए जा रहे हैं एक प्रकार की वापसी बुला रहा था, के नाम समारोह, और फिर इनपुट। तो, वास्तव में, हम कर सकते हैं गढ़ने पिछले हफ्ते की तरह के इस तरह के के रूप में, इस नाम या है कोड हम कर रहे हैं के एल्गोरिथ्म write-- जा रहा एल्गोरिथ्म अंतर्निहित कोड हम लिखने जा रहे हैं। यह अपने इनपुट है। यह अपनी उत्पादन है। इस समारोह में, प्रिंट नाम है, स्ट्रिंग नाम बुलाया लेने के लिए बनाया गया है, या जो भी, इनपुट के रूप में, और उसके बाद शून्य। यह कुछ भी वापस नहीं करता है, जैसे स्ट्रिंग पाने के लिए या int करता मिलता है। तो यह मुझे कुछ हाथ वापस करने के लिए जा रहा है। यह सिर्फ एक किया जा रहा है साइड प्रभाव, तो बात है, एक व्यक्ति के नाम छपाई की। तो नोटिस, रेखा 7, मैं प्रिंट नाम कॉल कर सकते हैं। रेखा 10, मैं परिभाषित कर सकते हैं या प्रिंट नाम को लागू करने। लेकिन, दुर्भाग्य से, यह है कि पर्याप्त नहीं है। मुझे आगे चलते हैं और बचाने के बाद इस कंपाइल। वाह, अब, मैं इसे बनाया है बदतर है, यह प्रतीत होता है। तो निहित घोषणा समारोह प्रिंट नाम अवैध है। और, फिर से, वहाँ अधिक त्रुटियों है। लेकिन जैसा कि मैंने पहले आगाह किया, के रूप में भी आप के साथ अभिभूत हो, तो या एक छोटे से दुखी हैं तो कई देखने के लिए त्रुटियों, पहले पर ही ध्यान केंद्रित अभी शुरू में, क्योंकि यह हो सकता है एक व्यापक प्रभाव पड़ा है। तो सी, या बजना अधिक विशेष रूप से, अभी भी प्रिंट नाम पहचान नहीं है। और उसकी वजह बजना है, डिजाइन के द्वारा, की तरह गूंगा है। यह केवल करता है कि आप क्या करना है यह बताने के। और यह केवल क्रम में ऐसा करता है जिसमें आप करते हैं यह बताने के लिए। तो मैं लाइन चार पर मुख्य परिभाषित किया है, जैसे हम बहुत बार कर रहा है। मैं लाइन पर 10 प्रिंट के नाम से परिभाषित किया है। लेकिन मैं प्रयोग करने की कोशिश कर रहा हूँ लाइन सात पर प्रिंट नाम। यह भी जल्द ही, अभी तक अस्तित्व में नहीं है। तो मैं चालाक हो सकता है, और इस तरह हो सकता है, ठीक है, तो बस साथ खेलते हैं, और प्रिंट ऊपर ले जाने के नाम यहां, और फिर से संकलन। हे भगवान। इसने काम कर दिया। यह बेहद आसान था। लेकिन तर्क ठीक है कि। आप बजना को पढ़ाने के लिए है कि यह क्या है पहले समारोह को परिभाषित कर रहा है। तो आप इसका इस्तेमाल कर सकते हैं। लेकिन, सच में, यह लगता है एक फिसलन ढलान की तरह। तो हर बार मैं चला एक समस्या में, मैं अभी कर रहा हूँ पर प्रकाश डाला और कोड की नकल करने के लिए जा रहा मैंने लिखा था, यह कटौती और यहां इसे पेस्ट करें। और, निश्चित रूप से, हम कर सकते थे कुछ परिदृश्यों ईजाद जहां एक समारोह हो सकता है एक और फोन करने की जरूरत है। और तुम बस हर नहीं डाल सकते हैं हर दूसरे के ऊपर कार्य करते हैं। तो यह है वहाँ पता चला है एक बेहतर समाधान। हम इस होना छोड़ सकते हैं। और, सच में, यह आम तौर पर अच्छा है, और सुविधाजनक है, और अच्छे डिजाइन मुख्य पहले डाल दिया, क्योंकि, फिर से, जैसे जब हरे रंग का झंडा क्लिक किया मुख्य, उस समारोह है कि डिफ़ॉल्ट रूप से मार डाला जाता है। तो तुम भी डाल सकता है यह फ़ाइल के शीर्ष पर इतना है कि आप या कोई भी जब अन्य मानव फ़ाइल पर लग रहा है आप जानते हैं कि क्या हो रहा है सिर्फ मुख्य पहले पढ़ने के द्वारा। तो यह पता चला है, हम बजना बता सकते हैं लगातार, हे, बजना, लाइन चार पर, मैं लागू करने के लिए वादा एक समारोह में कहा जाता प्रिंट नाम है कि एक स्ट्रिंग बुलाया नाम लेता है इनपुट, और रिटर्न कुछ नहीं, शून्य के रूप में। और मैं करने के लिए आसपास मिल जाएगा बाद में इसे लागू करने। यहाँ मुख्य आता है। मुख्य लाइन पर अब 9 उपयोग कर सकते हैं प्रिंट का नाम क्योंकि बजना भरोसा है कि, अंत में, यह परिभाषा का सामना करेंगे प्रिंट नाम के कार्यान्वयन की। तो मेरी फाइल को बचाने के बाद, चलो मुझे आगे जाना है और प्रोटोटाइप बनाने, इस समय अच्छा लग रहा है। डॉट स्लेश, प्रोटोटाइप, मुझे जाने आगे जाकर एक नाम में टाइप करें। डेविड, हैलो डेविड, Zamila, हैलो Zamila, और, वास्तव में, अब यह काम करता है। तो घटक है कि यहाँ हम है है एक कस्टम समारोह बना दिया, एक कस्टम की तरह स्क्रैच ब्लॉक हम यह कह रहे हैं। लेकिन स्क्रैच के विपरीत, जहां आप कर सकते हैं बस इसे बनाने के लिए और यह प्रयोग शुरू, अब हम एक होने की जरूरत छोटे से अधिक पंडिताऊ, और वास्तव में बजना प्रशिक्षित का उपयोग करने के लिए, या यह की उम्मीद है। अब, एक तरफ, के रूप में क्यों यह सब समय है हम बस आँख बंद करके विश्वास सहित पर किया गया CS50.h, और मानक IO.h सहित? खैर, यह पता चला है, कुछ अन्य बातों के अलावा, लगता है कि सभी में उन डॉट एच फ़ाइलें, जो भी हो फ़ाइलें होने के लिए। वे इतनी बात करने के लिए फ़ाइलों हैडर रहे हैं। वे अभी भी कर रहे हैं लेकिन सी में लिखा वे फ़ाइल का एक अलग प्रकार रहे। अभी के लिए, तुम बहुत ज्यादा मान सकते हैं सभी CS50.h के अंदर यह है कि इस तरह से कुछ एक-लाइनर्स, नहीं है कार्यों बुलाया प्रिंट नाम, लेकिन के लिए तार हो जाओ फ्लोट, और कुछ अन्य। और वहाँ समान प्रोटोटाइप कर रहे हैं, एक liners, मानक IO.h के अंदर printf, जिसमें अब है के लिए मेरे अपने प्रिंट नाम समारोह। तो दूसरे शब्दों में, इस पूरे समय हम है बस आँख बंद करके कॉपी करने दिया और चिपकाने यह शामिल है, में शामिल कि, क्या चल रहा है? उन सुराग के बस की तरह हैं क्या कार्य करने के लिए के रूप में करने के लिए बजना कर रहे हैं, वास्तव में, लागू किया, बस विभिन्न फाइलों में कहीं कहीं और सिस्टम पर। इसलिए हम प्रिंट नाम क्रियान्वित किया है। इसे इस पक्ष असर करता है स्क्रीन पर कुछ मुद्रण। लेकिन यह वास्तव में नहीं है मुझे कुछ हाथ वापस। हम कैसे जाने के बारे में एक कार्यक्रम को लागू करने कि मुझे कुछ हाथ वापस करता है? ठीक है, चलो इस कोशिश करते हैं। मुझे आगे जाना है और लागू करते हैं एक फ़ाइल कहा जाता return.c तो हम कैसे कुछ प्रदर्शित कर सकते हैं जैसे तार हो, या इंट जाओ, वास्तव में लौटने है उपयोगकर्ता के लिए वापस कुछ और। आगे बढ़ते हैं और int मुख्य शून्य को परिभाषित करते हैं। और, फिर, भविष्य में, हम करेंगे समझा क्या है कि int और उस शून्य वास्तव में कर रही है। लेकिन आज के लिए, हम करेंगे बिना प्रमाण मान लेना। मैं, आगे और printf जाने के लिए जा रहा हूँ एक अच्छा उपयोगकर्ता अनुभव के लिए, एक्स है। और फिर मैं के लिए प्रतीक्षा करने के लिए जा रहा हूँ उपयोगकर्ता मुझे मिल int के साथ एक्स देने के लिए। और फिर मैं आगे जाने के लिए जा रहा हूँ और वर्ग के लिए एक्स बाहर प्रिंट। तो जब आप केवल एक है कीबोर्ड, सामान्यतः लोग थोड़ा गाजर का उपयोग कीबोर्ड पर प्रतीक सत्ता में प्रतिनिधित्व करने के लिए की, या के प्रतिपादक। तो चुकता एक्स मैं मौजूद है। और अब मैं यह करने के लिए जा रहा हूँ। मैं सिर्फ do-- सका x क्या है चुकता? एक्स एक्स चुकता बार एक्स है। और हमने किया है कि यह कुछ पहले समय पहले से ही आज। इस तरह महसूस नहीं करता कि सभी बहुत प्रगति। आपको पता है कि? के उस विचार का कुछ लाभ उठाने के चलो अमूर्त के पिछली बार से। अगर यह अच्छा नहीं होगा वहाँ एक समारोह में कहा जाता है वर्ग कि ठीक है कि क्या करता है? यह अभी भी, के अंत में दिन, एक ही गणित करता है। लेकिन चलो सार दूर लेने के विचार एक संख्या से गुणा दूसरा, और इसे सिर्फ एक नाम दे, की तरह इस मूल्य वर्ग। और, दूसरे शब्दों में, में सी, के एक समारोह बना देना कहा जाता है कि वर्ग ठीक है कि नहीं करता है। यह वर्ग के नाम से जाना जा रहा है। यह एक पूर्णांक के ले जा रहा है। और हम करेंगे सिर्फ होगा यह n फोन, डिफ़ॉल्ट रूप से। लेकिन हम यह कुछ भी हम चाहते हैं कह सकते हैं। और यह सब करने के लिए जा रहा है कि करते हैं, सचमुच, वापसी है एन बार n का नतीजा है। लेकिन ऐसा नहीं है क्योंकि कुछ लौट रहा है, जो बैंगनी हम है खोजशब्द है पहले कभी नहीं देखा, मैं, लाइन 11 पर, न सिर्फ शून्य कह सकते हैं इस बार। शून्य, उदाहरण में हम सिर्फ देखा प्रिंट नाम के बजाय, बस का अर्थ है, कुछ करो। लेकिन मुझे कुछ हाथ वापस नहीं है। इस मामले में, मैं चाहता हूँ लौटने के लिए एन बार एन, या जो कुछ भी है, उस नंबर। तो मैं नहीं कह सकता, हे, कंप्यूटर, मैं शून्य कुछ भी नहीं वापस। यह वापस करने के लिए प्रकृति द्वारा एक पूर्णांक जा रहा है। और इतना है कि सब है कि यहाँ पर जा रहा है। इनपुट वर्ग के लिए एक पूर्णांक के होने जा रहा है। और इतना है कि हम इसका इस्तेमाल कर सकते हैं, यह करने के लिए है एक नाम है, एन यह उत्पादन करने के लिए जा रहा है एक int है कि एक नाम की जरूरत नहीं है। हम यह मुख्य करने के लिए छोड़ सकते हैं, या जो कोई भी है मुझे का उपयोग कर इस मान को अगर हम याद करने की अपने आप ही चर के साथ चाहते हैं। और, फिर से, केवल नए यहाँ खोजशब्द वापसी है। और मैं बस कुछ गणित कर रहा हूँ। अगर मैं वास्तव में अनावश्यक बनना चाहता था, मैं कह सकता int उत्पाद हो जाता एन बार एन। और फिर मैं वापस उत्पाद कह सकते हैं। लेकिन, फिर से, मेरी बात के पहले यह सिर्फ अच्छा नहीं किया जा रहा design-- जैसे, क्यों एक नाम का परिचय, एक प्रतीक है, उत्पाद की तरह, सिर्फ इसे तुरंत वापस जाने के लिए? यह एक छोटे से क्लीनर है, एक छोटे से तंग है, तो बात करने के लिए, बस वापसी एन बार कहने के लिए n, कुल मिलाकर इस लाइन से छुटकारा मिलता है। और यह सिर्फ कम पढ़ने के लिए कोड है, गलतियों के लिए कम अवसर। और हम इस करता है, तो देखते हैं वास्तव में अब काम करता है। अब, मैं जा रहा हूँ आगे और बदले हैं। ओह, समारोह की अंतर्निहित घोषणा। मैं इस गलती से पहले कोई बड़ी बात नहीं बनाया है। मुझे बस टाइप करते हैं, या प्रकाश डाला और कॉपी, ठीक उसी समारोह प्रोटोटाइप, या हस्ताक्षर, समारोह को यहां की। या मैं पूरे समारोह स्थानांतरित कर सकता है। लेकिन यह है कि एक छोटे से आलसी है। इसलिए हम ऐसा नहीं करेंगे। अब, मुझे वापसी कर देना फिर, स्लेश वापसी डॉट। एक्स 2. एक्स चुकता है 4 है। एक्स 3 एक्स चुकता है 9 है। और समारोह लगती है अब काम करने के लिए। तो क्या यहाँ अंतर है? मैं एक समारोह में कहा कि वर्ग कहा जाता है, इस मामले में, जो मैं एक इनपुट में डाल दिया है। और मैं एक आउटपुट वापस जाओ। और फिर भी, इससे पहले, यदि मैं अन्य उदाहरण खोलने पहले से है, जो prototype.c कहा जाता था, मैं प्रिंट नाम था, जो शून्य लौटे, तो बात है, या फिर यह कुछ भी नहीं लौटे, और बस एक पक्ष प्रभाव नहीं पड़ा। तो यहाँ क्या हो रहा है? खैर, समारोह पर विचार बस एक पल के लिए स्ट्रिंग मिलता है। हम समारोह का उपयोग किया गया है निम्नलिखित तरीके से स्ट्रिंग मिलता है। हम एक समारोह मिलता लिया है स्ट्रिंग की तरह, cs50.h शामिल मानक IO.h, पूर्णांक, मुख्य, शून्य शामिल हैं। और फिर हर बार जब मैं इस प्रकार अब तक मिल स्ट्रिंग कहा जाता है, मैंने कहा है कुछ पसंद है, स्ट्रिंग स्ट्रिंग प्राप्त हो जाता है क्योंकि मिल string-- चलो इस get.c-- मिल स्ट्रिंग कहते हैं अपने आप में एक स्ट्रिंग रिटर्न कि मैं तो कर सकते हैं उपयोग करते हैं, और नमस्ते, कहते हैं, अल्पविराम, प्रतिशत है, बैकस्लैश एन, एस। तो यह एक ही उदाहरण है, वास्तव में, हम पहले भी था। तो स्ट्रिंग मान देता मिलता है। लेकिन एक पल पहले, प्रिंट स्ट्रिंग एक मूल्य वापस नहीं करता है। यह सिर्फ एक पक्ष प्रभाव पड़ता है। तो यह एक बुनियादी फर्क है। हम अलग अलग देखा है अब कार्यों के प्रकार, जिनमें से कुछ लौट आए हैं मूल्यों, जिनमें से कुछ को नहीं। तो शायद यह स्ट्रिंग, या पूर्णांक, या नाव है। या शायद यह सिर्फ शून्य है। और अंतर है कि इन कार्यों कि डेटा पाने के लिए और एक मूल्य वापसी कर रहे हैं वास्तव मेज पर कुछ वापस लाने, इतनी बात करने के लिए। तो चलो आगे चलते हैं और एक अंतिम सेट में देखो इस बात का एहसास देता है, अब, उदाहरण के कैसे हम हो सकता है, वास्तव में, अमूर्त बेहतर है, और बेहतर, और बेहतर है, या अधिक, और अधिक, और अधिक, क्रम में लिखने के लिए, अंत में, बेहतर कोड। आगे बढ़ते हैं, और आत्मा में चलो स्क्रैच से, निम्न कार्य करें। मुझे आगे जाना है और शामिल करते हैं CS50.h और मानक IO.h. मुझे आगे जाना है और दे अपने आप को एक पूर्णांक, मुख्य, शून्य। और मुझे आगे जाना है, इस cough.c कहते हैं। और मुझे आगे और अभी चलते हैं स्क्रैच की तरह, खांसी / एन बाहर प्रिंट। और मैं इस तीन बार करना चाहते हैं। तो मैं कर रहा हूँ, ज़ाहिर है, बस जा कॉपी और तीन बार पेस्ट करने के लिए। अब मैं करने जा रहा हूँ डॉट स्लेश खाँसी खाँसी। के अपने आप को एक छोटे से अधिक कमरा दे दो इधर, दर्ज करें, खांसी, खांसी, खांसी। वहाँ है, जाहिर है, पहले से ही एक सुधार के लिए अवसर। मैं नकल और चिपकाया है एक बार कुछ आज। लेकिन यह केवल था, इसलिए मैं नहीं था के रूप में कई पात्रों को टाइप करने के लिए की है। मैं अभी भी बदला क्या कोड के उन लाइनें हैं। इन तीन लाइनों, समान हैं जो आलसी महसूस करता है और वास्तव में है, और शायद सही तरीका नहीं है। क्या घटक के साथ तो हम इस कोड को सुधार सकता है? हम कॉपी और पेस्ट कोड की जरूरत नहीं है। और, वास्तव में, किसी भी समय आप महसूस करते हैं खुद को कॉपी करने और चिपकाने, और यहां तक ​​कि कोड को बदलने नहीं, बाधाओं वहाँ एक बेहतर तरीका है कर रहे हैं। और, वास्तव में, वहाँ है। मुझे आगे चलते हैं और एक पाश के लिए करते हैं, भले ही वाक्य रचना नहीं हो सकता है स्वाभाविक रूप से अभी तक नहीं आया। इस तीन बार करो, बस following-- कर रही द्वारा और मैं अभ्यास से यह पता करने के लिए होता है। लेकिन अब हम उदाहरण के एक नंबर है। और अगर आप ऑनलाइन देख लेंगे अभी भी अधिक संदर्भ। यह लाइन 6 पर वाक्य रचना है कि ज्यादा स्क्रैच कि दोहराता की तरह ब्लॉक, निम्नलिखित तीन बार दोहराएँ। यह अभी के लिए एक छोटी सी जादुई है। लेकिन यह अधिक हो जाएगा, और अधिक परिचित। और इसे दोहराने जा रहा है लाइन आठ में तीन बार, तो यह है कि अगर मैं फिर से संकलन बनाने खांसी, डॉट स्लेश खांसी, खांसी, खांसी, खाँसी। यह अभी भी उसी तरह काम करता है। तो यह है कि सब ठीक है और अच्छा है। लेकिन यह है कि बहुत अनमना नहीं है। यह पूरी तरह से सही है। लेकिन यह वहाँ की तरह लगता है एक अवसर हो सकता है, की दुनिया में के रूप में स्क्रैच, शुरू की तरह करने के लिए इतना है कि कुछ शब्दों के यहाँ जोड़ने के लिए मैं सिर्फ पाश के लिए कुछ भी नहीं है, और एक समारोह का कहना है कि खाँसी, या खांसी करता है। आपको पता है कि? मुझे एक होने की कोशिश करते हैं उस से भी छोटे से कूलर, और वास्तव में एक समारोह के बारे में है कि कुछ साइड इफेक्ट है, यह खांसी कहते हैं। और यह कोई इनपुट लेता है, और आउटपुट के रूप में कोई मान देता है। लेकिन क्या आप जानते हैं कि यह क्या करता है? यह this-- printf करता है, बोली गंदें शब्द बोलना, खाँसी। और अब यहाँ तक, मैं जा रहा हूँ आगे और int के लिए जाना है, मैं शून्य मैं प्लस प्लस हो जाता है, मैं कम से कम 3,। मैं printf ऐसा नहीं करने के लिए है, जो जा रहा हूँ यकीनन एक निम्न स्तर के कार्यान्वयन विस्तार। मुझे परवाह नहीं है कैसे खाँसी। मैं सिर्फ खांसी समारोह का उपयोग करना चाहते हैं। और मैं सिर्फ खांसी फोन करने के लिए जा रहा हूँ। अब, विरोधाभास पर ध्यान दिया। जब आप एक समारोह फोन है, अगर तुम नहीं करते यह जानकारी, पूरी तरह से ठीक देना चाहता हूँ। अभी खुला Paren, बंद करना कुछ शब्द, और आप कर रहे हैं। जब आप एक समारोह को परिभाषित है, या एक समारोह के प्रोटोटाइप घोषित, यदि आप पहले से जानते हैं कि यह नहीं है किसी भी तर्क लेने के लिए जा रहा है, वहाँ उन कोष्ठकों में शून्य कहते हैं। और कहा कि निश्चित करता है कि आप गलती से यह दुरुपयोग नहीं होगा। मुझे आगे जाना है और खांसी कर दूं। और, बेशक, मैं एक गलती की है। Dammit, वहाँ है कि अस्पष्ट घोषणा। लेकिन वह ठीक है। यह एक आसान तय है। मैं सिर्फ प्रोटोटाइप उच्च ऊपर की जरूरत है मेरी फाइल में से मैं वास्तव में यह उपयोग कर रहा हूँ। तो अब मुझे खांसी फिर, अच्छा बनाते हैं। अब यह काम कर रहा है। खांसी, खांसी, खांसी, खांसी बनाओ। तो क्या आप सोच सकते हैं कि हम वास्तव में कर रहे बस पर इस समस्या इंजीनियरिंग। और, वास्तव में, हम कर रहे हैं। यह एक अच्छी बात नहीं है एक कार्यक्रम के उम्मीदवार के लिए समय पर पुनर्रचना, और कर रही है क्या श्रेणीबद्ध अपघटन कहा जाता है, जहाँ आप कुछ कोड लेते हैं, और उसके बाद आप किस तरह के कारक चीजें बाहर, के रूप में तो उन्हें अधिक शब्दों के मानो, और यह अंततः लंबी अवधि के पुन: उपयोग। लेकिन यह की ओर एक निर्माण खंड है और अधिक परिष्कृत कार्यक्रमों कि हम शुरू कर देंगे लंबे समय से पहले कि लेखन हमें शब्दावली करने की अनुमति देता जिसके साथ बेहतर कोड लिखने के लिए। और, वास्तव में, चलो देखते हैं कि हम यदि यह आगे सामान्यीकरण नहीं कर सकते। यह एक छोटी लंगड़ा लगता है कि मैं, मुख्य, पाश के लिए इस रफ़ू के बारे में चिंता करने की जरूरत है, और फिर और फिर खांसी बुला रही है। क्यों मैं सिर्फ खांसी नहीं बता सकता, तीन बार खांसी कृपया? दूसरे शब्दों में, मैं क्यों नहीं कर सकते हैं बस खाँसी और ऐसा करने के लिए इनपुट दे? मैं सिर्फ क्यों नहीं कह सकते हैं, में मुख्य खांसी तीन बार। और अब, इस तरह के जादुई है। यह यहाँ बहुत चलने का है। और यह एक बच्चे कदम है, वास्तव में। लेकिन सिर्फ क्षमता पर कहने के लिए लाइन आठ, तीन बार खांसी, यह सिर्फ इतना अधिक पठनीय है। और, इसके अलावा, मुझे पता है की जरूरत नहीं है या देखभाल कैसे खांसी कार्यान्वित किया जाता है। और, वास्तव में, बाद में अवधि और अंतिम परियोजनाओं के लिए, आप के साथ एक परियोजना से निपटने यदि एक सहपाठी या दो सहपाठियों, तुम्हें पता चलेगा कि आप के लिए जा रहे हैं करने के लिए है, या, काम को विभाजित करना चाहते हैं। और आप यह तय करना चाहते करने जा रहे हैं अग्रिम में, कौन क्या कर रहा है, और जो टुकड़ों में? और न यह अच्छा होगा यदि आप, उदाहरण के लिए, मुख्य लेखन के आरोप, किया ले। और अपने रूममेट, या अपने साथी अधिक आम तौर पर, खांसी को लागू करने का ख्याल रखता है। और इस विभाजन, इन अमूर्त की दीवारों, या यदि अमूर्त की परतें आप करेंगे, सुपर शक्तिशाली हैं विशेष रूप से बड़ा करने के लिए है, क्योंकि और अधिक जटिल कार्यक्रमों और प्रणालियों, यह कई लोगों के निर्माण के लिए अनुमति देता है चीजें एक साथ, और अंततः एक साथ उनके काम सिलाई इस तरह से। लेकिन जाहिर है, हम अब खांसी ठीक करने के लिए की जरूरत है। हम खांसी बताने की जरूरत कि, अरे, तुम जानते हो क्या? आप एक लेने की जरूरत करने जा रहे हैं input-- इतने शून्य नहीं है, लेकिन int और अब। आगे बढ़ते हैं और में डाल दिया int खाँसी। मैं शून्य हो जाता है। मैं कितनी बार की तुलना में कम है। मैंने पहले तीन ने कहा। लेकिन यह है कि मैं क्या चाहता हूँ नहीं है। मैं करने के लिए सामान्यीकृत किया जा करने के लिए करना चाहते हैं खांसी पुनरावृत्तियों की संख्या किसी भी समर्थन करते हैं। तो, वास्तव में, यह n है कि मैं चाहता है, जो कुछ भी उपयोगकर्ता मुझसे कहता है। अब, मुझे आगे जाना है और कहते हैं कि प्रिंट खांसी कर सकते हैं। और कोई बात नहीं क्या संख्या उपयोगकर्ता में गुजरता है, मुझे लगता है कि कई बार पुनरावृति होगी। दिन के अंत में तो, कार्यक्रम के लिए समान है। लेकिन यह सब के सब नोटिस यहां तक ​​कि एक और फाइल में हो सकता है। दरअसल, मैं पता नहीं है पल कैसे printf कार्यान्वित किया जाता है। मैं इस समय पता नहीं कैसे मिलता है स्ट्रिंग, या int हो, या नाव मिल कार्यान्वित कर रहे हैं। और मैं नहीं करना चाहता हूँ अपनी स्क्रीन पर उन्हें देख। वैसे भी, मैं पर ध्यान केंद्रित करने के लिए शुरू कर रहा हूँ मेरा कार्यक्रम है, न कि उन कार्यों। और हां, दरअसल, जैसे ही आप के रूप में इस तरह कोड बाहर फैक्टरिंग शुरू, हम भी खांसी स्थानांतरित कर सकता है एक अलग फाइल करने के लिए? किसी और को यह लागू कर सकता है। और आप और आपके कार्यक्रम बन बहुत ही सुंदर है, और बहुत पठनीय, यकीनन, वास्तव में चार लाइन कार्यक्रम अभी भी वहीं है। तो चलो अब आगे चलते हैं और एक और परिवर्तन करें। सूचना है कि अपने प्रोटोटाइप शीर्ष तक बदल गया है। तो मुझे कि इतने तय कर लो मैं चिल्लाया नहीं मिलता है। खांसी बनाओ, मुझे खांसी एक बार चलाते हैं अधिक, अभी भी एक ही बात कर रहे हैं। लेकिन अब, हम एक नोटिस है एक अंतिम संस्करण के लिए घटक। आपको पता है कि? मैं नहीं चाहता कि सिर्फ खाँसी, जरूरी चाहते हैं। मैं कुछ अधिक सामान्य करना चाहते हैं। तो तुम जानते हो क्या? मेरी यह करने की इच्छा है। मैं करने के लिए, बहुत स्क्रैच की तरह चाहते हैं करता है, एक कहना ब्लॉक, लेकिन अभी नहीं का कहना है कि कुछ समय में से कुछ संख्या है। मैं यह एक बहुत विशिष्ट स्ट्रिंग कहना चाहता हूँ। और, इसलिए, मैं नहीं चाहते हैं कि उसे सिर्फ खांसी कहने के लिए। मैं यह कहना चाहता हूँ जो कुछ भी स्ट्रिंग में पारित कर दिया है। तो नोटिस, मैं सामान्यीकरण नहीं किया है यह तो अब है कि कहते हैं एक अच्छा नाम की तरह लगता है इस के लिए, स्क्रैच की तरह, स्क्रैच के विपरीत दो तर्क लेता है। एक एक स्ट्रिंग है। एक एक int है। और मैं उन्हें स्विच कर सकता। मैं बस की तरह के विचार की तरह कहने स्ट्रिंग पहले, और फिर कितने बाद में समय। शून्य यह अभी भी मतलब है कुछ भी वापस नहीं करता है। ये सिर्फ दृश्य पक्ष हैं प्रभाव, [के साथ की तरह? जॉर्डन,?] चिल्ला के एक मौखिक पक्ष प्रभाव। यह अभी भी कुछ एन बार करता है अप करने के लिए 0, लेकिन n के बराबर नहीं। इस n कुल समय का मतलब है। और फिर बस बाहर प्रिंट जो कुछ भी है कि स्ट्रिंग है। इसलिए मैं वास्तव में सामान्यीकृत किया है कोड की इस पंक्ति। तो अब, मैं कैसे लागू करते हैं खांसी समारोह? मैं शून्य खांसी कर सकते हैं। और मैं अभी भी कैसे ले जा सकते हैं कई बार आप खाँसी करना चाहते हैं। लेकिन तुम जानते हो क्या? मैं अब कहने के लिए बाज़ी कर सकते हैं। मैं के साथ कह कॉल कर सकते हैं शब्द खांसी, एन में गुजर रहा है। और मैं यह भी लागू करना चाहते हैं, सिर्फ मनोरंजन के लिए, एक छींक समारोह, मैं समय में से कुछ नंबर छींक कर सकते हैं। और मैं n reusing रख सकते हैं, क्योंकि इस संदर्भ या दायरे में है कि मीटर नोटिस इस समारोह के भीतर ही मौजूद है। और एन इस संदर्भ में केवल इस समारोह में यहां के भीतर मौजूद है। इसलिए हम वापस करने के लिए आया हूँ दायरे से इन मुद्दों। और यहाँ, मैं सिर्फ कहने जा रहा हूँ, Achoo, और फिर एन बार, सेमी कॉलन। और अब, मैं सिर्फ उधार लेने की जरूरत इन समारोह यहां तक ​​हस्ताक्षर। तो खांसी सही है। शून्य छींक अब सही है। और मैं अभी भी सिर्फ कहने की जरूरत है। तो मैं कहने जा रहा हूँ स्ट्रिंग, पूर्णांक एन, सेमी कॉलन। तो मैं इंजीनियर गए इस कार्यक्रम से बाहर बिल्ली। और यह नहीं करता है जरूरी मतलब यह है आप क्या करना चाहिए जब लेखन यहां तक ​​कि कार्यक्रमों का सरलतम। जाहिर है कि कुछ है ले लो वास्तव में सरल, वास्तव में कम, और इसे फिर से लागू रास्ता बहुत अधिक कोड का उपयोग कर। लेकिन आप वास्तव में देखेंगे, और में समय, इन उदाहरणों पर वापस देखो और महसूस करते हैं, ओह, उन कदम उठाए हैं हम वास्तव में सामान्यीकरण करने के लिए ले लिया कुछ बाहर कारक, दिन के अंत में जब तक मेरे कोड वास्तव में बहुत ही उचित है। क्योंकि अगर मैं तीन खांसी करना चाहते हैं कई बार तो तीन बार छींक, मैं तो बस, यह फिर से दौड़ना करने जा रहा हूँ कार्यक्रम खांसी बना है, और खांसी चलाते हैं। और मैं तीन खांसी है और तीन छींक। और इसलिए यह एक बुनियादी है प्रतिमान, अगर तुम जाएगा, कैसे हम के बारे में जाने के लिए हो सकता है वास्तव में एक कार्यक्रम को लागू करने। लेकिन चलो बस देखना यह अब क्या है हम इस समय के सभी कर दिया गया है और क्या अंतिम टुकड़े में से कुछ इस सरल कमांड के पीछे हैं। दिन के अंत में, हम है हमारे संकलक के रूप में बजना का उपयोग किया गया। हम स्रोत लिख रहा हूँ कोड, इसे परिवर्तित मशीन कोड में बजना के माध्यम से। और हम बस बनाने का उपयोग किया गया हमारे कीस्ट्रोक्स इसलिए की सुविधा के लिए हमें याद करने की जरूरत नहीं है कि बजना ही की उन मंत्र। लेकिन क्या वास्तव में बनाने कर रही है? और बदले में, क्या है बजना वास्तव में कर रही है? यह पता चला है, हालांकि हम सरल है कह कर आज की चर्चा, आप स्रोत कोड ले, के रूप में इसे पारित एक संकलक, जो आपको देता है के लिए इनपुट मशीन का उत्पादन कोड, वहाँ का पता चला है वहाँ अंदर कुछ अलग कदम। और संकलन छाता होना होता है कदम की एक पूरी गुच्छा के लिए शब्द। लेकिन हम सिर्फ तंग इस बाहर बहुत जल्दी। यह पता चला है कि हम कर दिया गया है अधिक बातें हर बार मैं एक कार्यक्रम चलाने के लिए, या हर समय मैं आज एक कार्यक्रम संकलन। तो preprocessing को संदर्भित करता है एक सी कार्यक्रम में कुछ भी this--, जैसा कि हम बार-बार देखता हूँ, कि, इस हैश प्रतीक के साथ शुरू होता है या हैशटैग यहाँ प्रतीक है, जिसका अर्थ यह एक पूर्वप्रक्रमक निर्देश है। इसका मतलब है कि, इस मामले में, हे कंप्यूटर, इस फाइल के साथ कुछ करना इससे पहले कि आप वास्तव में अपने खुद के कोड संकलन। इस मामले में, हैश है शामिल हैं, अनिवार्य रूप से, कह रही है की सी की तरह, अरे कंप्यूटर, सामग्री मिल जाना CS50.h की और उन्हें यहाँ पेस्ट करें। अरे कंप्यूटर, मिल जाना मानक IO.h की सामग्री, जहाँ भी उस पर है हार्ड ड्राइव, यह यहाँ पेस्ट करें। तो उन बातें होती हैं preprocessing के दौरान पहली। और बजना हमारे लिए यह सब करता है। और यह यह इतना रफ़ू करता है तेजी से, आप भी नहीं है हो रहा चार अलग चीजें देखते हैं। लेकिन यह है कि पहली बार इस तरह कदम है। क्या वास्तव में आगे क्या होता है? खैर, अगली अधिकारी कदम संकलन है। और यह पता चला है कि एक कार्यक्रम के संकलन तकनीकी रूप से जाने का मतलब स्रोत कोड, सामान हम है किया कुछ करने के लिए, आज लेखन विधानसभा कोड कहा जाता है, कुछ कि एक छोटे से अलग दिखता है। और, वास्तव में, हम इस असली तेजी देख सकते हैं। मुझे वास्तव में मेरे आईडीई में चलते हैं। मुझे आगे और खुले hello.c चलते हैं, जो बहुत पहला कार्यक्रम है जिसके साथ हम आज शुरू कर दिया। और मुझे आगे जाना है और बजना एक चलाते हैं थोड़ा अलग, बजना-एस, hello.c, जो वास्तव में करने जा रहा है मुझे एक फ़ाइल hello.s दे। और हम कभी शायद होगा फिर कोड के इस तरह देखते हैं। आप एक निचले स्तर लेते हैं CS61 तरह सिस्टम वर्ग, आप एक बहुत अधिक देखेंगे कोड के इस तरह के। लेकिन इस विधानसभा भाषा है। यह x86 विधानसभा भाषा है कि सीपीयू कि अंतर्निहित है CS50 आईडीई वास्तव में समझता है। और गुप्त रूप में यह होता देखो, यह कुछ है कंप्यूटर बहुत अच्छी तरह से समझता है। उप क्ष, यह एक घटाना है। वहाँ आंदोलनों है। वहाँ कार्यों के लिए यहां बुला रहा है, एक्स oring, एक आंदोलन है, एक ऐड, एक पॉप, एक वापसी। कुछ तो वहाँ बहुत निम्न स्तर के निर्देश सीपीयू कि समझते हैं कि मैंने पहले के लिए alluded। यही कारण है कि इंटेल के अंदर है। वहाँ के पैटर्न हैं शून्य और लोगों को करने के लिए इन शब्दों arcanely नक्शा है, लेकिन कुछ हद तक अच्छी तरह से नामित किया गया, निर्देश, इतनी बात करने के लिए। यही होता है जब है आप अपने कोड संकलन। आप विधानसभा मिल इसे से बाहर भाषा है, जो इसका मतलब तीसरे चरण के लिए इकट्ठा करने के लिए है कि विधानसभा कोड में, अंत में, मशीन code-- शून्य और लोगों, नहीं पाठ है कि हम सिर्फ एक पल पहले देखा था। तो पूर्व प्रसंस्करण कि मिल रहा है और जगह है, और कुछ अन्य बातें। संकलन अपने स्रोत लेता है सी से कोड, स्रोत कोड हम ने लिखा है कि, विधानसभा के लिए कोड है कि हम सिर्फ पर नजर है। कोडांतरण कि विधानसभा लेता है शून्य और लोगों के लिए कोड कि वास्तव में सीपीयू होगा दिन के अंत में समझते हैं। और जोड़ने अंतिम कदम है कि us-- के लिए फिर से होता है, इतनी तेजी से हम भी नहीं है notice-- कि कहते हैं, अरे कंप्यूटर, के सभी लेते हैं शून्य और लोगों को दाऊद के कोड संकलन से हुई, और इस मामले में उसकी मुख्य समारोह। और हे कंप्यूटर, मिल जाना शून्य और लोगों के सभी कि CS50 स्टाफ ने लिखा है CS50 पुस्तकालय के अंदर। दाऊद के साथ में उन लोगों को मिला लें। और हे कंप्यूटर, सभी शून्य मिल जाना और किसी और वर्ष लिखा है कि लोगों पहले printf के लिए। और उन में जोड़ने पूरी बात तो यह है कि हम है मेरे शून्य और लोगों, मिला CS50 स्टाफ के शून्य और लोगों, printf शून्य और लोगों, और कुछ और हम प्रयोग कर रहे हैं। वे सभी एक में एक साथ संयुक्त हो कार्यक्रम कहा जाता है, इस मामले में, नमस्कार। बस इतना आगे से, हम करेंगे शब्द संकलन का उपयोग करें। और हम के लिए दी ले जाएगा कि जब हम कहते हैं, अपने कार्यक्रम संकलन, इसका मतलब है, अरे पूर्व प्रसंस्करण करते हैं, संयोजन, और जोड़ने। लेकिन वहाँ वास्तव में कुछ रसदार सामान है हुड के नीचे वहाँ चल रहा है। और विशेष रूप से आप अगर जिज्ञासु कुछ समय मिलता है, आप poking शुरू कर सकते हैं इस निचले स्तर पर चारों ओर। लेकिन अब के लिए, पता है कि आज के लिए takeaways के बीच काफी बस एक प्रक्रिया की शुरुआत, साथ सहज हो रही है की हैलो दुनिया की तरह कुछ। दरअसल, हम आज क्या किया था के सबसे निश्चित रूप से सुपर फास्ट में सिंक नहीं होगा। और यह कुछ ले जाएगा समय है, और कुछ अभ्यास। और बाधाओं रहे हैं, आप ठीक हो जाएगा के अपने कीबोर्ड हिट करना चाहते हैं या स्क्रीन पर चिल्लाना। और यह सब ठीक है। हालांकि, शायद नहीं की कोशिश पुस्तकालय में यह इतना नहीं है। और अंत में, तुम हूँ हालांकि सक्षम हो, शुरू करने के लिए पैटर्न को देखकर, दोनों अच्छे कोड में आप लिखा है कि और गलतियों में आपके द्वारा किए गए है। और भी बहुत की प्रक्रिया की तरह एक टीएफ बनने या एक सीए की तरह है, आप बेहतर पाने के लिए शुरू कर देंगे और उन पैटर्न को देखने में बेहतर है, और सिर्फ अपने सुलझाने अंततः अपनी समस्याएं। इस बीच में, वहाँ बहुत हो जाएगा हम में से आप समर्थन दे, और आप को पाने के लिए इस के माध्यम से। और लिखने-अप में समस्याओं के सभी के लिए आप के माध्यम से निर्देशित किया जाएगा आदेशों के सभी मैं निश्चित रूप से पता है कि अब तक अभ्यास का एक बहुत, लेकिन प्रवाहित हो सकता है अब के लिए एक के सिर पर। और वह पूरी तरह से ठीक है। लेकिन, अंत में, आप जा रहे हैं पैटर्न उभरने देखने के लिए शुरू करने के लिए। और एक बार आप सभी के पिछले मिल बेवकूफ विवरण, कोष्ठकों की तरह, और घुंघराले ब्रेसिज़, और अर्द्ध कॉलन, और सामान, सच में, कि बिल्कुल नहीं है बौद्धिक रूप से दिलचस्प है। और यह का उद्देश्य नहीं है किसी भी परिचयात्मक वर्ग ले। यह विचार है कि बात करने के लिए जा रहे हैं। यह छोरों है, और स्थिति, और काम करता है, और अधिक शक्तिशाली अमूर्त, और कोड की फैक्टरिंग, और अच्छे डिजाइन, और अच्छा शैली, और अंततः सत्यता अपने कोड की, कि अंततः है सबसे बात करने के लिए जा रहा है। तो अगले हफ्ते, हम इन लगेगा विचार है कि हम पहले स्क्रैच में देखा था और अब अनुवाद किया है सी के लिए और हम शुरू करेंगे के पहले लागू करने के लिए पाठ्यक्रम के असली दुनिया डोमेन। हम सुरक्षा की दुनिया पर ध्यान केंद्रित करेंगे और अधिक विशेष रूप से क्रिप्टोग्राफी, जानकारी के पांव मार करने की कला। पहले के बीच और आप समस्याओं का खुद परे लिखने के लिए मिल जाएगा वाक्य रचना से कुछ के साथ खेल रहा है और कुछ तार्किक हल समस्याओं, अंत में लंबे समय से पहले, वास्तव में हाथापाई करने के लिए है, या एनक्रिप्ट, और अंत में जानकारी डिक्रिप्ट। और हम सब कुछ किया है आज काफी कम होगा स्तर, बस की अनुमति देने के लिए जा रहा है हमें एक है, और एक लेने के लिए, और ऊपर की ओर एक और कदम अभी तक सबसे दिलचस्प कोड लिखने। तो यह है कि अगले सप्ताह के बारे में अधिक। [वीडियो प्लेबैक] -क्या आप मेरे बारे में बता सकते हैं पिछली बार जब आप उसे देखा था? क्या मैं सच में कह सकते हैं? मेरा मतलब है, यह किसी भी अन्य की तरह था पूर्व उत्पादन रिहर्सल, सिवाय इसके कि वहाँ कुछ था वह कहा बहुत अंत कि मेरे साथ अटक पर। -यह CS50 था। -यह एक कट हर किसी को है, रिहर्सल पर महान काम है। -यह दोपहर के भोजन? ; -हां, तुम और मैं कर सकता हूँ एक बिट में एक सैंडविच हड़पने। मुझे बस के साथ debrief चलो डेविड वास्तव में जल्दी से। डेविड? डेविड? [अंत प्लेबैक]