[संगीत खेल] डेविड जे मालन: सब ठीक है, CS50 के लिए वापस स्वागत करते हैं. इस सप्ताह दो की शुरुआत है. हमारे में से एक से एक शब्द परिसर में दोस्तों - आप रुचि रखते हैं, तो संभवतः, या तो अब या भविष्य में कुछ समय में यहां तक ​​कि, एक बार और अधिक आरामदायक, शिक्षण मध्य विद्यालय के छात्रों के एक छोटे से कंप्यूटर विज्ञान के बारे में कुछ, कि यूआरएल के लिए सिर करते हैं. वे अभी की विशेष जरूरत होती है आपके पास विशेष रूप से अगर शिक्षकों, कंप्यूटर विज्ञान के लिए कुछ जोखिम था. तो हम शुरू की, कि पिछली बार याद कुछ डेटा सी में प्रकार, और तुम्हें पाने के लिए शुरू हो सकता है आपके इन प्रकार अब तक साथ गंदे हाथ समस्या में एक सेट. और हम एक चार थी. तो कुछ हद तक तकनीकी शब्दों में, क्या आप आज जानते हैं कि यह एक चार है? तो यह एक चरित्र है, लेकिन चलो अब और अधिक सटीक हो. हम चरित्र से क्या मतलब है या व्यक्तिगत चार? एक गैर संख्यात्मक चरित्र - इसलिए जरूरी नहीं. यह पता चला है कि यहां तक ​​कि संख्या भी विराम चिह्न और पत्र इस डेटा के साथ प्रतिनिधित्व एक चार के रूप में जाना लिखें. इसलिए यह जरूरी वर्णमाला नहीं है. हाँ? तो यह एक ASCII चरित्र है. तो आप सप्ताह शून्य करने के लिए वापस अगर आपको लगता, जब हम स्वयंसेवकों के हमारे बाइट था आते हैं और या तो अपने हाथों को पकड़ या नहीं, वे बिट्स का प्रतिनिधित्व किया. लेकिन सामूहिक रूप से आठ के एक समूह के रूप में, वे एक बाइट का प्रतिनिधित्व किया. और हम ASCII शुरू की धारणा बस एक है जो कि व्याख्यान, पर संख्या और अक्षरों के बीच मानचित्रण. और ASCII उन मनुष्यों के रूप में उपयोग करता है, निहित, आठ बिट्स एक चरित्र का प्रतिनिधित्व करने के लिए. तो तदनुसार, अगर आठ बिट कर सकते हैं प्रत्येक दो में से एक मान पर ले - शून्य या एक - कि वहाँ दो संभावनाएं थे मतलब है इस व्यक्ति के लिए - शून्य या एक - इस व्यक्ति के लिए दो, इस के लिए दो व्यक्ति, यह एक के लिए दो. दो बार की तो एक कुल दो बार दो बार दो बार दो - इसलिए दो में कुल आठवां. तो पात्रों की कुल संख्या है 256 संभव आप कर सकते हैं कि आठ बिट के साथ प्रतिनिधित्व करते हैं. अब, आप में से उन जो एशियाई बात भाषा और भी है कि पता कर सकते हैं बस से दुनिया में वर्ण और बी एस और सीएस और डी एस के रूप. और वास्तव में, ASCII के लिए पर्याप्त नहीं है दुनिया की भाषाओं का एक बहुत. लेकिन एक समय उस पर और अधिक. अगर आप चाहते हैं अभी के लिए, सी में पता चला है कि एक पत्र का एक टुकड़ा का प्रतिनिधित्व करने के लिए विराम चिह्न, या बस कुछ चरित्र प्रकृति में, हम एक चार का उपयोग करें. और यह एक बाइट या आठ बिट है. कैसे एक पूर्णांक के बारे में? खैर, एक int एक पूर्णांक है. कितने बिट्स, यदि आपको याद है, आम तौर पर एक पूर्णांक था? किसी को भी याद करते हैं? तो यह आम तौर पर 32 है. यह वास्तव में कंप्यूटर पर निर्भर करता है आप उपयोग कर रहे हैं. लेकिन उपकरण में, और का एक बहुत में कंप्यूटर, यह 32 बिट या चार है बैट - आठ बार चार. और ints बस भंडारण के लिए उपयोग किया जाता है नकारात्मक या तो संख्या,, सकारात्मक, या शून्य. और आप 32 बिट मिल गया है और आप ही लिया है, तो , सकारात्मक संख्या के बारे में कर सकते हैं परवाह किसी को भी ballpark कितने संभव पूर्णांकों एक कंप्यूटर से प्रतिनिधित्व कर सकते हैं ऊपर पर शून्य? तो यह 32 के लिए दो जो होगा मोटे तौर पर चार अरब डॉलर का है. इसलिए दो की इन शक्तियों के होने जा रहे हैं कंप्यूटर विज्ञान में आवर्ती विषयों. हम देखेंगे, वे काफी सुविधाजनक हो ऐसा नहीं है, भले ही काफी के साथ काम करने के लिए एक के सिर में गणित करने के लिए आसान. तो हम मोटे तौर पर चार अरब कहूँगा. अब, एक लंबे - आप किस तरह का अनुमान लगा सकते हैं. यह एक पूर्णांक से अधिक लंबी है. कितने बिट्स? इसलिए 64 बिट्स या आठ बाइट्स. यह सिर्फ तुम भी प्रतिनिधित्व कर सकते हैं इसका मतलब बड़ी संख्या, बड़ा सकारात्मक या बड़ा ऋणात्मक संख्याओं. और कैसे नाव के बारे में? यह एक अस्थायी बात है 32 बिट के लिए मूल्य. यह सिर्फ एक वास्तविक संख्या, कुछ है एक दशमलव बिंदु के साथ. लेकिन आप के बजाय और अधिक जगह की जरूरत है अगर दशमलव बिंदु के बाद या आप करना चाहते हैं कुछ के साथ एक बड़ी संख्या का प्रतिनिधित्व करते हैं अंश यह करने के बाद, आप एक का उपयोग कर सकते हैं 64 बिट्स है जो डबल,. लेकिन एक दिलचस्प नहीं है यहाँ takeaway. Ints 32 बिट और द्वारा सीमित कर रहे हैं तो अगर यहां तक ​​कि लंबे समय चाहता है 64 से सीमित कर रहे हैं तरह के सवाल भी जन्म देती है कि बिट्स,, आप वास्तव में गिनती करने के लिए क्या चाहते हैं, तो एक पूर्णांक के लिए 4 अरब डॉलर से अधिक? ठीक है, तुम सिर्फ एक लंबे समय से उपयोग. लेकिन आप उच्च गिनती करने के लिए क्या चाहते हैं दो से 64 वीं करने के लिए, दे या ले? अब, कि एक बड़ी संख्या है. लेकिन अंत में, आप वास्तव में हो सकता है मूल्यों के इन प्रकार के बारे में ध्यान, आप एक डेटाबेस का उपयोग कर रहे हैं, खासकर अगर और बहुत से और बहुत इकट्ठा करने के लिए शुरू और डेटा के बहुत सारे और अद्वितीय बताए उस डेटा का एक टुकड़ा करने के लिए संख्या. तो हम किस तरह की एक समस्या है. और इसी तरह, चल बिन्दु के साथ मान - तैरता या युगल - आप केवल एक निश्चित संख्या के मिल गया है बिट्स, कितने कुल संख्या तुम सकता है संभवतः प्रतिनिधित्व करते हैं? जब आप ठीक है, यह कम स्पष्ट है एक दशमलव बिंदु शामिल है. लेकिन यह निश्चित रूप से परिमित है. आप बिट्स की एक सीमित संख्या है, तो मनुष्य की एक निश्चित संख्या, एक परिमित प्रकाश बल्बों की संख्या, निश्चित रूप से आप कर सकते हैं केवल एक परिमित संख्या का प्रतिनिधित्व करते हैं चल बिन्दु मान. लेकिन कितने वास्तविक संख्या दुनिया में उनके हैं? एक अनंत है. तो यह है कि एक समस्या की तरह है क्योंकि हम एक अनंत राशि की जरूरत नहीं है हमारे कंप्यूटर के अंदर स्मृति या राम. तो कुछ चुनौतीपूर्ण बातें हो सकता है. तो चलो आगे चलते हैं और कोशिश यहाँ यह व्यक्त करने के लिए. मुझे आगे जाना है और जीएडिट खोल दें. मुझे आगे जाना है और एक फ़ाइल को बचाने के लिए जा रहा हूँ बस हो "floats0.c" कहा जाता है है कि एक उदाहरण के साथ संगत ऑनलाइन उपलब्ध है, अगर आप चाहते हैं. और मैं आगे जाने के लिए जा रहा हूँ इस प्रकार के रूप में परिभाषित - मुझे आगे जाना है और, INT कहने जा रहा हूँ हम अक्सर करते हैं मुख्य शून्य,. और फिर इस कार्यक्रम में, मैं जा रहा हूँ अपने आप को एक नाव, तो एक 32 बिट की घोषणा चर मनमाने ढंग से, च बुलाया. और फिर मैं इसे में स्टोर करने के लिए जा रहा हूँ मैं, दसवां, तो 0.1 पता नहीं है. तो मैं एक के रूप में व्यक्त करने के लिए जा रहा हूँ पूरी तरह से है जो 10, से विभाजित सी. में वैध और फिर दूसरी लाइन पर, मैं बस कि मूल्य बाहर मुद्रित करना चाहते हैं. इसलिए हम इस्तेमाल कर सकते हैं कि याद परिचित printf. हम मैं एक पूर्णांक के लिए% का उपयोग नहीं करना चाहती. हम एक नाव के लिए% च उपयोग करना चाहते हैं. और फिर मैं बैकस्लैश n क्या करने जा रहा हूँ, बंद बोली, अल्पविराम, च, अर्धविराम. तो यहाँ मेरा कार्यक्रम है. एक बग पहले से ही नहीं है. क्या यह क्लिक किया, जिनके लिए किसी को पहले से ही बात करना चाहता हूँ कम से कम एक बग मैं कर दिया है? हाँ? हाँ. मैं पर "# शामिल" भूल मैं करने की कोशिश ऊपर, वे जो के लक्षण इस होने जा रहा है संकलन संकलक मुझ पर चिल्लाना जा रहा है, कह अपरिभाषित प्रतीक या उस प्रभाव के लिए कुछ है. यह कुछ नहीं समझती printf की तरह. तो मैं # include "क्या करने जा रहा हूँ ", सहेजें. और अब यह बेहतर स्थिति में है. लेकिन मैं यह भी बात करने के लिए जा रहा हूँ आज एक नया विस्तार बाहर. जगह निर्दिष्ट करने के अलावा %% च मैं% है, आप कर सकते हैं जैसे धारकों कभी कभी व्यवहार को प्रभावित उस प्लेसहोल्डर की. उदाहरण के लिए, एक अस्थायी के मामले में बिंदु मान, मैं केवल चाहते हैं एक के बाद एक दशमलव स्थान प्रदर्शित करने के लिए अवधि, मैं वास्तव में 0.1f कर सकते हैं. तो दूसरे शब्दों में, मैं च अलग और 0.1 के साथ प्रतिशत चिह्न, बस printf बता रहा है, आप एक पूरे हो सकता है दशमलव के बाद संख्या का गुच्छा मेरे लिए इशारा करते हैं. लेकिन मैं केवल उन में से एक को देखना चाहते हैं. इसलिए मैं अब आगे बढ़ो और बचाने के लिए जा रहा हूँ इस कार्यक्रम, मेरे टर्मिनल में जाने खिड़की, और मैं आगे जाने के लिए जा रहा हूँ और प्रकार बनाने फ्लोट 0, दर्ज करें. मुझे लगता है कि कुछ हद तक गुप्त रेखा देखना है कि हम के रूप में और अधिक समझ बनाने के लिए शुरू हो जाएगा इस सप्ताह और अगले यह अलग तंग. अब मैं आगे जाने के लिए जा रहा हूँ और नाव शून्य चलाते हैं. और, लानत. तो एक और बग है यहाँ किसी कारण के लिए. मुझे पूरा यकीन है कि एक दसवें, या 10 से विभाजित एक, 0.0 नहीं है. शायद मैं सिर्फ देख रहा हूँ पर्याप्त अंक पर. तो क्यों मैं दो .2 देखने के लिए मत कहो दो सिर्फ एक के बजाय दशमलव स्थानों. मुझे अपने टर्मिनल विंडो के लिए वापस जाओ यहाँ करने के लिए और समय की एक जोड़ी मारा मेरा इतिहास देखें. फिर नाव शून्य बना है, और उसके बाद फिर से ऊपर. और अब दर्ज करें. और अब मैं यह गलत है पूरा यकीन है. और मैं तीन और चार कर सकता है, और मैं कर रहा हूँ शायद शून्य देख रखने के लिए जा रहा. तो जहां बग है? 10 से विभाजित 0.1 होना चाहिए. किसी को क्या एक चाकू ले जाना चाहता हूँ बुनियादी मुद्दा है? हाँ? वे दोनों पूर्णांकों कर रहे हैं. तो क्या हुआ? तो एक साथ 10 से विभाजित है, कि मैं गणित में क्या करते हैं. और मैं 0.1 मिलता है. हाँ. और तो यह वास्तव में लगता है कि मुद्दा है. आप एक कंप्यूटर में एक पूर्णांक ले और आप एक और पूर्णांक से विभाजित, डिफ़ॉल्ट रूप से कंप्यूटर के लिए जा रहा है आप एक पूर्णांक चाहते हैं कि मान. समस्या हालांकि, ज़ाहिर है, कि 0.1 कोई पूर्णांक नहीं है. यह एक वास्तविक संख्या है. और तो कंप्यूटर द्वारा क्या करता है डिफ़ॉल्ट यह अभी दूर फेंकता है दशमलव बिंदु के बाद सब कुछ. यह प्रतिशत से ऊपर नीचे गोल या नहीं है. यह अभी सब कुछ दूर फेंकता दशमलव बिंदु के बाद. और अब है कि समझ में आता है. अब हम स्पष्ट रूप से कर रहे हैं क्योंकि शून्य के साथ छोड़ दिया. लेकिन एक मिनट रुको. मैं एक पूर्णांक शून्य नहीं देख रहा हूँ. मैं वास्तव में 0.00 देख रहा हूँ. तो कैसे मैं अब यह स्वीकार करते हैं? 10 से विभाजित एक शून्य है, लेकिन मैं कर रहा हूँ यह हो रही है जहां 0.00, देखकर एक वास्तविक संख्या को वापस बदल? हाँ. बिल्कुल सही. यहाँ तो लाइन पांच में, ऊपर जब मैं वास्तव में तो है जो कि 0.1, स्टोर शून्य से छोटा, एक नाव के अंदर, कि करने के लिए प्रभावी ढंग से बराबर है , एक पूर्णांक के रूप में यह नहीं के भंडारण लेकिन दरअसल, एक नाव के रूप में. इसके अलावा, मैं तब तक printf का उपयोग कर रहा हूँ स्पष्ट रूप से दो कि संख्या मुद्रित दशमलव स्थान भी वहाँ हालांकि वास्तव में किसी भी नहीं हो सकता है. तो इस तरह के अधिकार, बेकार है? जाहिर है आप गणित नहीं कर सकते, कम से कम इस स्तर के पर परिशुद्धता, एक कंप्यूटर में. लेकिन निश्चित रूप से वहाँ एक समाधान है. हम शायद कर सकता सरलतम तय क्या है करने के लिए भी सिर्फ intuitively, यहाँ करना इस को हल? हाँ? पूर्णांकों में बदल जाते हैं - हाँ. मैं क्या काफी यकीन नहीं है यहां तक ​​कि अगर यह अगर सच में, यहाँ पर जा रहा मूलरूप में इन दोनों के साथ क्या करना है जा रहा है ints, ठीक है, क्यों नहीं मैं इस बना रही है कि 10.0 बनाने 1.0, फ़ाइल resave. मुझे वापस नीचे चलते हैं नीचे और recompile. मुझे अब फिर से दौड़ना करते हैं. और वहाँ - अब, मैं अपने एक दसवें मिल गया है 0.10 के रूप में प्रतिनिधित्व किया. ठीक है. तो इतना बुरा नहीं है. और मुझे एक दूसरी तरह के बाहर बात करते हैं हम इस हल हो सकता है. मुझे वास्तव में समय में वापस रोल करते हैं हम एक के रूप में यह था जब तक एक पल पहले दसवें. और मुझे आगे जाना है और इस फाइल resave जाने एक अलग फ़ाइल नाम के रूप में, बस के लिए एक छोटे से जांच की चौकी है. तो उस संस्करण में से एक था. और अब मुझे आगे चलते हैं और एक और संस्करण है. हम इस संस्करण फोन करता हूँ दो शून्य अनुक्रमित. और मैं बजाय क्या करने जा रहा हूँ इस - क्या आप जानते हैं? डॉट शून्य जोड़ने से इस मामले में काम करता है. लेकिन एक एक चर रहे थे लगता है. माना जाता 10 एक चर रहे थे. दूसरे शब्दों में, लगता है कि मैं नहीं कर सकता अंत में सिर्फ कड़ी मेहनत से कोड .0 इस अंकगणित अभिव्यक्ति की. खैर, मैं वास्तव में कुछ कर सकते हैं कोष्ठक में कास्टिंग बुलाया. मैं एक नाव के लिए कि पूर्णांक 10 डाल सकते हैं, और मैं एक के लिए कि पूर्णांक एक डाल सकते हैं साथ ही, तैरने लगते हैं. तो किया जा रहा है कि गणित प्रभावी ढंग से 1.0 10.0 से विभाजित है, जिनमें से परिणाम चला जाता है पहले की तरह च में. इसलिए मैं इस recompile के रूप में यदि मंगाई बनाने 2, और अब 2 तैरता, मैं एक ही मिलता है साथ ही, जवाब. तो यह एक काफी काल्पनिक उदाहरण है, इस समस्या को हल करने के लिए कास्टिंग शुरू करने से. लेकिन सामान्य तौर पर, कास्टिंग होने जा रहा है एक शक्तिशाली बात है, विशेष रूप से के लिए समस्या एक सप्ताह का समय में दो सेट, जब आप एक डेटा प्रकार में कनवर्ट करना चाहते एक और है कि दिन के अंत में उसी तरह से प्रतिनिधित्व कर रहे हैं. दिन के अंत में, हर एक हम इस प्रकार अब तक के बारे में बात की है बात है बस हुड के नीचे ints. या उस के लिए भी कम स्तर है अगर तुम, वे बस संख्या रहे हैं हुड के नीचे. यहां तक ​​कि वर्ण, फिर, याद सप्ताह शून्य से, नंबर हैं हुड के नीचे. जो कहना है, हम दोनों के बीच में बदल सकते हैं संख्या अगर के विभिन्न प्रकार वे बस बिट कर रहे हैं. हम संख्याओं के बीच में बदल सकते हैं और अक्षरों वे अभी कर रहे हैं बिट्स, और इसके विपरीत. और इस तरह से कास्टिंग एक तंत्र है जबरन आपको देता है कि प्रोग्रामिंग में एक दूसरे के लिए डेटा प्रकार बदल जाते हैं. दुर्भाग्य से, इस रूप में नहीं है मुझे अच्छा लगा कि हो सकता है के रूप में सरल. मैं मंगाई में वापस जाने के लिए जा रहा हूँ 1, जो सरल, अधिक था साथ सीधा एक .0 प्रत्येक को कहा. और सिर्फ एक त्वरित रिफ्रेशर के रूप में, मुझे आगे जाना है और फिर कंपाइल जाने यह मंगाई 2 बनाने - क्षमा करें, यह मंगाई 1 बनाना है. और अब मंगाई 1 चलाते हैं. और नीचे, नोटिस में मैं वास्तव में 0.1 मिलता है. तो, इस समस्या का हल. लेकिन अभी नहीं. मैं अब थोड़ा उत्सुक पाने के लिए जा रहा हूँ और मैं में वापस जाने के लिए जा रहा हूँ मेरे printf बयान और कहते हैं, आप क्या जानते हो? मैं इस बात की पुष्टि करना चाहते हैं कि इस वास्तव में दसवां है. और मैं यह देखना चाहता हूँ जा रहा हूँ पाँच दशमलव स्थानों, कहते हैं, के लिए. यह एक समस्या नहीं है. मैं, एक से पांच दो को बदलने मैं बनाने के साथ recompile. मैं मंगाई 1 के रूप में इसे फिर से चलाएँ. बहुत अच्छी लग रही. अपने विवेक चेक यहीं खत्म, लेकिन हो सकता है मैं एक छोटे से अधिक साहसी हो रही है. मैं 0.5-0.10 बदलने के लिए जा रहा हूँ. मैं के बाद 10 अंकों देखना चाहते हैं दशमलव स्थान. और मुझे आगे जाना है और फिर कंपाइल करने के लिए जा रहा हूँ इस और फिर से दौड़ना 1 मंगाई. मैं एक तरह से यह परीक्षण अफसोस मेरी गणित तो नहीं है आगे क्योंकि अब और सही, ऐसा लगता है. लेकिन शायद, एक मिनट रुको कि सिर्फ एक अस्थायी है. हो सकता है कि कंप्यूटर काम कर रहा है एक छोटा सा अजीब. मुझे आगे जाना है और 20 दशमलव अंक करते हैं और मुझे पता है कि अपने आप को आश्वस्त गणित करने के लिए कैसे. मैं कार्यक्रम के लिए आता है. , मंगाई 1 बनाओ, फिर कंपाइल करने, और यह लानत. यह वास्तव में हो रही है, वास्तव में है अब तक मार्क से. तो यहाँ क्या हो रहा है? Intuitively, हमारी मान्यताओं पर आधारित पहले डेटा प्रकार के आकार के बारे में, यहाँ क्या हो जाना चाहिए क्या हुड के नीचे? हाँ? बिल्कुल सही. आप इतना सटीक चाहते हैं, और अगर कि परिशुद्धता का एक बहुत की एक बिल्ली है - दशमलव बिंदु के बाद 20 नंबर. आप संभवतः एक का प्रतिनिधित्व नहीं कर सकते मनमाना संख्या आप एक है जब तक बिट्स की मनमानी संख्या. लेकिन हम नहीं. एक नाव के लिए, हम केवल 32 बिट है. इसलिए 32 बिट केवल एक में permuted किया जा सकता है तरीका - बस, मंच पर हमारे इंसानों की तरह ऊपर या नीचे हाथ - की एक निश्चित संख्या में तरीके, केवल एक सीमित संख्या है आप का प्रतिनिधित्व कर सकते हैं वास्तविक संख्या उन बिट्स के साथ. और तो कंप्यूटर अंततः करने के लिए किया जा रहा है कोनों में कटौती शुरू. कंप्यूटर उन विवरण छिपा कर सकते हैं समय का एक छोटा सा के लिए हम से. हम शुरू करते हैं लेकिन संख्या में poking और आगे और आगे को देख , पूरी संख्या में संख्या अनुगामी तो हम यह है कि देखने के लिए शुरू वास्तव में approximating दसवां का विचार है. और इसलिए यह पता चला है, दुर्भाग्य से, वहाँ संख्या की एक अनंत संख्या हम एक में ठीक का प्रतिनिधित्व नहीं कर सकते कंप्यूटर, एक परिमित के साथ कम से कम बिट्स की संख्या, एक परिमित रैम की राशि. अब दुर्भाग्य से, यह कभी कभी वास्तविक दुनिया परिणाम है. लोगों को काफी यह नहीं की सराहना करते हैं इस तथ्य के लिए दी गई या ऐसा ले अपने कंप्यूटर अभी करना होगा कि क्या वे करते हैं यह बताने के लिए और नहीं करना समझ में इन अंतर्निहित प्रतिनिधित्व विवरण - कुछ भाषाओं में, जो स्पष्ट रूप से, कर रहे हैं सी में विपरीत, उपयोगकर्ता से छिपा हुआ - कुछ बुरी बातें हो सकता है. और मैंने सोचा था कि हम क्या चाहते हैं एक कदम वापस ले रहा है. और इस एक के बारे में है आठ मिनट का वीडियो. यह कुछ साल पहले प्रसारित किया, और यह देता है क्या वास्तव में जा सकते हैं में अंतर्दृष्टि गलत आप इन के तहत की सराहना करते हैं जब बहुत सभी के लिए भी में विवरण के प्रकार असली दुनिया. हम रोशनी मंद कर सकता है कुछ मिनट के लिए. स्पीकर 1: हम अब इंजीनियरिंग करने के लिए वापस आधुनिक चमत्कार पर आपदाओं. कंप्यूटर - हम सभी को स्वीकार करने आया हूँ अक्सर निराशा समस्याओं कि उनके साथ जाना. कीड़े, वायरस, और सॉफ्टवेयर glitches के लिए भुगतान करने के लिए छोटे कीमतें हैं सुविधा. लेकिन में उच्च तकनीक और उच्च गति सैन्य और अंतरिक्ष कार्यक्रम आवेदन पत्र, छोटी से छोटी समस्या आपदा में बढ़ाया जा सकता है. 4 जून, 1996 पर, वैज्ञानिकों के लिए तैयार एक मानव रहित एरियन -5 रॉकेट प्रक्षेपण. यह वैज्ञानिक उपग्रह ले जा रहा था स्थापित करने के लिए डिजाइन ठीक कैसे पृथ्वी के चुंबकीय क्षेत्र का आदान प्रदान सौर हवाओं के साथ. रॉकेट यूरोपीय के लिए बनाया गया था अंतरिक्ष एजेंसी और से बंद उठाया अपनी तट पर सुविधा फ्रेंच गयाना की. जैक GANSSLE: के बारे में 37 सेकंड से कम में उड़ान, वे पहली बार देखा कुछ गलत हो रहा था. नलिका में swiveling गया एक तरह से वे वास्तव में नहीं होना चाहिए. उड़ान में लगभग 40 सेकंड, स्पष्ट रूप से वाहन मुसीबत में था. वे बनाया और है कि जब एक इसे नष्ट करने का फैसला. साथ सीमा सुरक्षा अधिकारी, जबरदस्त हिम्मत, बटन दबाया, यह कर सकता से पहले रॉकेट विस्फोट से उड़ा दिया सार्वजनिक सुरक्षा के लिए एक खतरा बन जाते हैं. स्पीकर 1: यह पहली यात्रा थी एरियन -5, और अपने विनाश की क्योंकि एम्बेडेड एक दोष की जगह ले ली रॉकेट के सॉफ्टवेयर में. जैक GANSSLE: एरियन पर समस्या एक नंबर था कि वहाँ था उस व्यक्त करने के लिए 64 बिट की आवश्यकता है. और वे परिवर्तित करना चाहता था एक 16 बिट संख्या के लिए. वे संख्या कभी नहीं था कि ग्रहण , बहुत बड़ा होने जा रहा है कि अधिकांश 64 बिट में उन अंक संख्या शून्य थे. वे गलत थे. स्पीकर 1: एक सॉफ्टवेयर की असमर्थता एक तरह से स्वीकार करने के लिए कार्यक्रम एक अन्य द्वारा उत्पन्न संख्या था विफलता की जड़ में. सॉफ्टवेयर विकास एक बहुत ही बन गया था नई तकनीक के महंगा हिस्सा. एरियन 4 रॉकेट से किया गया था बहुत सफल, सॉफ्टवेयर की इतना यह भी था के लिए बनाया एरियन -5 में इस्तेमाल किया. फिलिप Coyle: बुनियादी समस्या थी एरियन -5, तेज था कि तेजी से बढ़ी है. और सॉफ्टवेयर नहीं था उस के लिए जिम्मेदार है. स्पीकर 1: रॉकेट का विनाश एक भारी वित्तीय आपदा थी, पूरे एक मिनट सॉफ्टवेयर त्रुटि के लिए. लेकिन यह पहली बार डेटा नहीं था रूपांतरण समस्याओं आधुनिक त्रस्त था रॉकेट प्रौद्योगिकी. जैक GANSSLE: 1991 में शुरुआत के साथ पहले खाड़ी युद्ध, देशभक्त की मिसाइल एक ही तरह का अनुभव एक नंबर रूपांतरण समस्या की. नतीजतन, 28 अमेरिकी सैनिकों थे मारे गए हैं और लगभग 100 अन्य घायल हो गए पैट्रियट, चाहिए था जब आने वाली Scuds के खिलाफ की रक्षा के लिए, एक मिसाइल आग में विफल रही है. स्पीकर 1: इराक ने कुवैत पर हमला करते हैं और अमेरिका में डेजर्ट स्टॉर्म का शुभारंभ जल्दी 1991, पैट्रियट मिसाइल बैटरी सऊदी अरब की रक्षा के लिए तैनात किया गया था और इराकी स्कड से इसराइल मिसाइल हमलों. पैट्रियट एक अमेरिकी मध्यम दूरी है सतह से हवा प्रणाली द्वारा निर्मित रेथियॉन कंपनी. THEODORE POSTOL: देशभक्त का आकार इंटरसेप्टर ही मोटे तौर पर है 20 फुट लंबा है. और यह लगभग 2000 पाउंड वजन. और इसके बारे में एक बम वहन करती है - मैं यह लगभग 150 पाउंड है लगता है. और बम अपने आप में एक है उच्च विस्फोटक जो है इसके चारों ओर टुकड़े. बम का आवरण बनाया गया है buckshot तरह कार्य करने के लिए. स्पीकर 1: मिसाइलों चार किया जाता है कंटेनर प्रति और ले जाया जाता है एक अर्द्ध ट्रेलर से. फिलिप Coyle: पैट्रियट मिसाइल रोधी सिस्टम में वापस चला जाता है अब कम से कम 20 साल. यह मूल रूप से डिजाइन किया गया था एक हवाई रक्षा मिसाइल दुश्मन के हवाई जहाज को गोली मार. उस युद्ध जब पहले खाड़ी युद्ध में साथ सेना इसका इस्तेमाल करना चाहते थे आया Scuds, नहीं हवाई जहाज नीचे गोली मार करने के लिए. इराकी वायु सेना नहीं था तो एक समस्या की बहुत. लेकिन सेना Scuds के बारे में चिंतित था. और इसलिए वे को अपग्रेड करने की कोशिश की पैट्रियट. स्पीकर 1: एक दुश्मन मिसाइल बेधने मच पांच पर गया था यात्रा काफी चुनौतीपूर्ण होने जा रहा. लेकिन पैट्रियट में ले जाया गया था जब सेवा, सेना एक के बारे में पता नहीं था कर दिया है कि इराकी संशोधन उनके हिट करने के लिए लगभग असंभव Scuds. THEODORE POSTOL: क्या हुआ थे कि Scuds है में आने अस्थिर थे. वे wobbling गया. इस के लिए कारण में, इराकियों था एक के बाहर 600 किलोमीटर की दूरी पर प्राप्त करने के लिए 300 किलोमीटर की दूरी के प्रक्षेपास्त्र लिया सामने बम से बाहर वजन. वे बम हल्का कर दिया. तो अब पैट्रियट की कोशिश कर रहा स्कड पर आने के लिए. और ज्यादातर समय, भारी समय के अधिकांश, यह सिर्फ होगा स्कड से उड़ान भरने के लिए. स्पीकर 1: एक बार पैट्रियट प्रणाली ऑपरेटरों पैट्रियट चूक का एहसास अपने लक्ष्य, वे देशभक्त विस्फोट संभव से बचने के लिए बम यह अनुमति दी गई थी, तो हताहतों की संख्या भूमि पर गिर करने के लिए. THEODORE POSTOL: वह क्या सबसे था लोग आकाश में के रूप में बड़ा fireballs देखा और अवरोध के रूप में गलत समझा स्कड हथियार की. स्पीकर 1: हालांकि रात आसमान में देशभक्त सफलतापूर्वक हो दर्शन वहाँ धहरान में, Scuds नष्ट इस बारे में कोई गलती हो सकती है इसकी प्रदर्शन. वहाँ, खो पैट्रियट के रडार प्रणाली एक आने वाली स्कड का ट्रैक और कभी नहीं कारण एक सॉफ्टवेयर दोष के लिए शुरू की है. यह पहले की खोज की है जो इजरायल था कि अब सिस्टम समय विसंगति अधिक से अधिक, पर था कारण एक घड़ी के लिए बन गया सिस्टम के कंप्यूटर में एम्बेडेड. जैक GANSSLE: के बारे में दो सप्ताह पहले धहरान, इजरायल में त्रासदी रक्षा विभाग को सूचना दी सिस्टम समय खो गया था कि. चल के बारे में आठ घंटे के बाद, वे प्रणाली है कि देखा काफ़ी कम सटीक होते जा. रक्षा विभाग के द्वारा प्रतिक्रिया पैट्रियट बैटरी के सभी कह रही सिस्टम नहीं छोड़ करने के लिए एक लंबे समय के लिए. वे एक लंबे समय क्या था कभी नहीं कहा. आठ घंटे? 10 घंटे? 1,000 घंटे? कोई नहीं जानता था. स्पीकर 1: पैट्रियट बैटरी तैनात धहरान में बैरकों में और अपने त्रुटिपूर्ण आंतरिक घड़ी से किया गया था की रात को 100 घंटे से अधिक पर 25 फ़रवरी. जैक GANSSLE: यह एक समय पर नज़र रखी एक दूसरे के बारे में एक दसवें की सटीकता की. अब, एक दूसरे का एक दसवें एक है दिलचस्प संख्या यह नहीं हो सकता क्योंकि जिसका मतलब है, बिल्कुल बाइनरी में व्यक्त यह बिल्कुल में व्यक्त नहीं किया जा सकता किसी भी आधुनिक डिजिटल कंप्यूटर. यह विश्वास करना मुश्किल है, लेकिन एक उदाहरण के रूप में इस का उपयोग करें. की संख्या एक तिहाई से लेते हैं. एक तिहाई व्यक्त नहीं किया जा सकता बिल्कुल दशमलव में. एक तिहाई 0.333 जा रहा है अनंत के लिए पर. साथ ऐसा करने के लिए कोई रास्ता नहीं है दशमलव में पूर्ण शुद्धता. कि इस समस्या का भी वैसी ही है कि पैट्रियट में हुआ. अब सिस्टम, भागा सबसे खराब समय त्रुटि हो गया. स्पीकर 1: आपरेशन के 100 घंटे के बाद, समय में त्रुटि ही था एक दूसरे के बारे में एक तिहाई. लेकिन एक मिसाइल को निशाना बनाने के मामले में मच पांच में यात्रा, उस में हुई 600 मीटर से अधिक की एक ट्रैकिंग एरर. इसके लिए एक गंभीर त्रुटि होगा धहरान में सैनिकों. THEODORE POSTOL: क्या हुआ एक है स्कड लांच जल्दी से पता चला था चेतावनी उपग्रहों. और वे स्कड आ रहा था कि पता था उनके सामान्य दिशा में. यह आ रहा था, जहां उन्हें पता नहीं था. स्पीकर 1: यह रडार अप करने के लिए अब था पैट्रियट प्रणाली के घटक पता लगाने और रखने के लिए धहरान बचाव आने वाली दुश्मन मिसाइल का ट्रैक. जैक GANSSLE: रडार बहुत होशियार था. यह वास्तव में स्थिति पर नज़र होगी तब मूसलधार बारिश और भविष्यवाणी जहां यह शायद अगली बार होगा रडार बाहर एक नाड़ी भेजा. उस श्रृंखला गेट बुलाया गया था. THEODORE POSTOL: तो पैट्रियट एक बार फैसला करता है पर्याप्त समय जाने के लिए पारित किया है पीठ और के लिए अगले स्थान की जांच इस का पता चला वस्तु, यह वापस चला जाता है. इसे वापस गलत करने के लिए चला गया तो जब जगह है, यह तो कोई वस्तु को देखता है. और यह कोई वस्तु नहीं थी कि निर्णय लेता है, यह एक गलत पहचान थी, और ट्रैक चला जाता है. स्पीकर 1: आने वाले स्कड गायब हो गया राडार स्क्रीन से, और सेकंड बाद में पटक दिया बैरकों में. स्कड 28 मारे गए और पिछले एक था पहले खाड़ी युद्ध के दौरान निकाल दिया. दुर्भाग्य से, अद्यतन सॉफ्टवेयर पहुंचे धहरान पर अगले दिन. सॉफ्टवेयर दोष तय किया गया था, संकटग्रस्त में एक अध्याय बंद हो रहा पैट्रियट मिसाइल का इतिहास. पैट्रियट वास्तव में एक परिचित करा रहा है चरणबद्ध सरणी पर नज़र रखने के लिए लक्ष्य से रोकना. डेविड जे मालन: सब ठीक है, तो एक उदाहरण मर्यादित, सुनिश्चित करना होगा. और सौभाग्य से, इन निचले स्तर कीड़े हम हूँ कि कुछ नहीं कर रहे हैं आम तौर पर निश्चित रूप से सराहना करते हैं नहीं हमारे में से कुछ के साथ कार्यक्रमों की जल्द से जल्द. बल्कि, कीड़े का सबसे तुम हूँ मुठभेड़, प्रकृति में तार्किक होगा प्रकृति में वाक्यात्मक जिससे कोड सिर्फ सही काम नहीं करता है. और तुम बहुत तेजी से यह पता है. लेकिन विशेष रूप से हम करने के लिए मिलता है जब सेमेस्टर के अंत में, यह जा रहा है करने के लिए अधिक से एक संभावना के और अधिक हो वास्तव में डिजाइन के बारे में मुश्किल लगता है अपने कार्यक्रमों और अंतर्निहित की प्रतिनिधित्व वहाँ भी है, डेटा की. उदाहरण के लिए, हम MySQL मिलवाता हूँ, एक लोकप्रिय डेटाबेस इंजन है जो आप के लिए वेबसाइटों के साथ उपयोग कर सकते हैं वापस अंत पर डेटा की दुकान. और आप पर फैसला करने के लिए शुरू होगा सेमेस्टर के अंत न केवल क्या इन लाइनों का उपयोग करने के साथ डेटा के प्रकार लेकिन वास्तव में कितने बिट का उपयोग करने के लिए, आप की तिथियाँ संग्रहीत करना चाहते हैं या नहीं, भी दिनांक और समय समय के रूप में, और के रूप में आप चाहते हैं कि कितना बड़ा तरह बातें उपयोगकर्ताओं को, कहते हैं, के लिए होने के लिए अद्वितीय आईडी अपने डेटाबेस में. वास्तव में, अगर आप में से कुछ पड़ा है फेसबुक, काफी कुछ समय के लिए खातों और आप पहुँच पाने के लिए पता अपना यूजर आईडी के लिए - जिसमें कभी कभी ऊपर से पता चलता है अपने प्रोफाइल का यूआरएल आप एक चुन लिया है, जब तक आपने उपनाम यूआरएल के लिए, या अगर खेतों में फेसबुक का ग्राफ़ एपीआई, सार्वजनिक रूप से उपलब्ध एपीआई जिसके द्वारा आप कच्चे डेटा के लिए फेसबुक पूछ सकते हैं - आप अपने मिटाएँ है क्या देख सकते हैं. और कुछ साल पहले, फेसबुक अनिवार्य रूप का उपयोग करने से बदलना पड़ा लंबे समय का उपयोग करने के लिए ints के बराबर लंबे क्योंकि उपयोगकर्ताओं आने के रूप में समय के साथ और जाने के लिए और बहुत सारे खाते बनाने और नकली खातों, यहां तक ​​कि वे बहुत आसानी एक 4 की तरह कुछ के निकास के लिए सक्षम थे एक पूर्णांक की तरह अरब संभव मूल्य. मुद्दों के उन प्रकार पर तो अधिक सड़क के नीचे, के रूप में अच्छी तरह से. ठीक है, तो उस कास्टिंग था. यही अस्पष्टता था. त्वरित घोषणाओं के एक जोड़े. तो वर्गों औपचारिक रूप से इस आने शुरू रविवार, सोमवार, मंगलवार. आप बाद में इस सप्ताह ईमेल के माध्यम से सुन लेंगे अपने अनुभाग काम करने के रूप में. और तुम उस बिंदु पर यहां भी कैसे करेंगे अपने अनुभाग बदलने के लिए अगर आपके अनुसूची अब बदल गया है या आपके आराम के स्तर अब बदल गया है. इस बीच एक पी सेट और हैकर एक हैं करने के लिए विकल्प के साथ इस गुरुवार कारण प्रति कि समय सीमा का विस्तार शुक्रवार को विशिष्टताओं एक ठेठ रास्ते में. कि समस्या के साथ शामिल एहसास सेट विनिर्देशों निर्देश पर हैं CS50 उपकरण, बनाने, का उपयोग कैसे करें साथ ही कुछ CS50 विशिष्ट उपकरण आप प्रदान कर सकते हैं जो शैली 50, जैसे पर गतिशील रूप से प्रतिक्रिया के साथ अपने कोड शैली की गुणवत्ता और भी 50 की जांच, जो आप के साथ प्रदान कर सकते हैं के रूप में गतिशील प्रतिक्रिया अपने कोड की शुद्धता. हम अभी भी मौजूद रहे कि माफ कर दो चेक 50 के साथ बाहर कुछ सनक. शुरू किया था, जो अपने सहपाठियों के कुछ शुक्रवार की रात को 4:00 के आसपास जब कल्पना तब से देखा है ऊपर चला गया हम काम कर रहे हैं कि कुछ कीड़े किसी के लिए के माध्यम से, और क्षमा याचना जो अनुचित कुंठा का अनुभव किया है. गलती मेरी है. लेकिन हम CS50 पर का पालन करेंगे कि हल हो गई है जब चर्चा की. तो स्कोर के लिए खुद पर एक शब्द भी नहीं. तो यह आप से पहले एक या दो सप्ताह हो जाएगा समस्या सेट पर प्रतिक्रिया प्राप्त करने के लिए शुरू आप अभी तक नहीं है क्योंकि एक शिक्षण साथी. और फिर भी, हम का मूल्यांकन करने के लिए शुरू कर देंगे सी समस्या है, हम पहले सेट वापस जाने के लिए और इसलिए खरोंच का मूल्यांकन आप और अधिक प्रासंगिक हो कि प्रतिक्रिया और अधिक तेजी से. लेकिन पाठ्यक्रम, CS50 प्रति सामान्य रूप में समस्या सेट के साथ मूल्यांकन कर रहे हैं चार कुल्हाड़ियों निम्न - गुंजाइश, शुद्धता, डिजाइन, और शैली. स्कोप आम तौर पर एक संख्या होने जा रहा है शून्य और पांच के बीच में है कि कब्जा से कितना आप बंद सा टुकड़ा है कि. आमतौर पर, आप यह पांच बनना चाहता हूँ. आपको कम से कम सब कुछ करने की कोशिश की. और यह एक multiplicative कारक है नोटिस इतना है कि के ही भाग कर समस्या सेट सबसे अच्छी रणनीति नहीं है. इस बीच, अधिक स्पष्ट है शुद्धता का महत्व - बस अपने कार्यक्रम के साथ सही है विनिर्देश के संबंध? यह जान - बूझकर अधिक भारित है भारी एक से अन्य दो कुल्हाड़ियों से तीन का कारक है कि हम समझते हैं क्योंकि कि आम तौर पर आप खर्च करने जा रहे हैं एक बहुत अधिक समय कुछ कीड़े नीचे का पीछा करते हुए, यदि आप काम करने के लिए अपने कोड हो रही है यह indenting और चयन कर रहे हैं उपयुक्त चर नाम और जैसे, दूसरे छोर पर जो है शैली के स्पेक्ट्रम की. उस शैली नहीं है कहने के लिए नहीं है महत्वपूर्ण है, और हम इस पर प्रचार करेंगे व्याख्यान में और वर्गों में दोनों समय. शैली सौंदर्यशास्त्र को संदर्भित करता है अपने कोड की. आप अच्छी तरह से नामित चर को चुना है कुछ हद तक कम कर रहे हैं लेकिन यह है कि वर्णनात्मक? अपने कोड आप में देखा है के रूप में दांतेदार बना हुआ है व्याख्यान और एक तरीके से संगत शैली 50 के साथ? अन्त में डिजाइन सही है वहाँ बीच में. डिजाइन एक डाल करने के लिए कठिन है यह बहुत अधिक है क्योंकि पर उंगली व्यक्तिपरक. लेकिन यह शायद का सबसे महत्वपूर्ण है शैक्षणिक के मामले में तीन कुल्हाड़ियों मूल्य समय के साथ और कहा कि यह हो जाएगा शिक्षण साथी के अवसर के लिए गुणात्मक राय के साथ प्रदान करते हैं. दरअसल, CS50 में हम करते हैं, भले ही अंत में इन फार्मूलों और स्कोर, दिन के ये बहुत जान - बूझकर कर रहे हैं बहुत छोटे बाल्टी - बात मान शून्य के बीच और तीन और शून्य और पांच. हम बहुत मोटे लाइन खींचने की कोशिश मत करो समस्या सेट के बीच या बीच में छात्रों बल्कि जितना ध्यान केंद्रित हम गुणात्मक पर, पूरे अक्षरों में लिखावट कर सकते हैं से राय, टाइप किए गए या मौखिक या तो अपने विशेष शिक्षण साथी, आप बहुत अच्छी तरह से जानते हैं. लेकिन सामान्य तौर पर, उन वजन रहे हैं विभिन्न कुल्हाड़ियों होगा. इस बीच, यह भी में रखने लायक है आपको लगता है कि एक नहीं मान लेना चाहिए कि मन पांच में से तीन एक 60% है और इसलिए मोटे तौर पर असफल साबित हुई. तीन जानबूझ होने का मतलब है सड़क अच्छा के बीच की तरह. आप पर threes हो रही है सत्र की शुरुआत है, कि वास्तव में एक अच्छा होने का मतलब शुरू करने के लिए जगह है. आप twos हो रही है, मेलों, वहाँ एक छोटे से भुगतान करने के लिए निश्चित रूप से कुछ काम अधिक ध्यान, लाभ लेने के लिए वर्गों और कार्यालय समय के. आप चौकों हो रही है और fives, महान. लेकिन वास्तव में, हम trajectories देखने की उम्मीद छात्रों के बीच - बहुत प्रति छात्र व्यक्तिगत, लेकिन शुरू कर यहाँ की तरह में सेमेस्टर तीन श्रृंखला के लिए दो पर समाप्त यहाँ 4-5 रेंज में. यही कारण है कि हम सच के लिए देख रहे हैं. और हम मन में डेल्टा रहते हो कि आप सप्ताह शून्य और सप्ताह के बीच प्रदर्शन 12 मैं ग्रेड कर रहा हूँ. यह हमारे लिए कोई फर्क नहीं पड़ता बिल्कुल कैसे आप शुरुआत में निष्पक्ष अगर आपके प्रक्षेपवक्र वास्तव में है ऊपर की ओर और मजबूत. शैक्षणिक ईमानदारी - तो मुझ पर डाल देना मेरे बस एक पल के लिए और अधिक गंभीर आवाज. इसलिए इस कोर्स के अंतर की है किसी भी अन्य की तुलना में अधिक छात्रों भेजने विज्ञापन बोर्ड को इतिहास में, मुझे विश्वास है. हम की तरह इस पर गिनती खो दिया है कितनी बार ऐसा होता की बात. और क्योंकि नहीं है कि छात्रों को 50 में किसी भी अधिक बेईमान हैं उनके कहीं सहपाठियों. लेकिन हम बहुत अच्छा कर रहे हैं, भी, एहसास इस तरह की बात का पता लगाने में. और कहा कि लाभ है कि एक कंप्यूटर विज्ञान वर्ग कि हम में है और हम सभी छात्रों की तुलना कर सकते हैं समस्या हर खिलाफ जोड़ी वार सेट अन्य, इस साल न केवल लेकिन सभी पूर्व के वर्षों. हम में छात्रों की तरह की क्षमता है, वर्ग, गूगल के लिए और कोड को खोजने के लिए GitHub और जैसी साइटों पर चर्चा मंचों. CS50 के लिए पूरी तरह से समाधान कर रहे हैं वहाँ के आसपास चल पी सेट. लेकिन आप उन्हें पा सकते हैं, हम उन्हें मिल सकता है. और यह सब बहुत ज्यादा स्वचालित है हमें खोजने के लिए और आसान है और दुख की बात है. लेकिन मैं भी जोर देना चाहते हैं कि पाठ्यक्रम की शैक्षिक ईमानदारी नीति है बहुत ज्यादा बहुत ज्यादा होने का मतलब उस भावना के विपरीत. दरअसल, इस साल हम चीजों rephrased किया है यह डॉट होने के लिए पाठ्यक्रम में अधिक विस्तार के साथ डॉट डॉट, पाठ्यक्रम में. लेकिन पाठ्यक्रम में व्यापक विषय वास्तव में उचित होना है. हम एक महत्वपूर्ण समझते हैं कि वहाँ शैक्षणिक की राशि कुछ हद तक, सहयोग में मूल्य, सहपाठियों के साथ, जिससे आप दो या तीन या आप अधिक कर रहे हैं एक सफेद बोर्ड पर खड़े whiteboarding, ऐसा करने के लिए अपने विचारों बात - तस्वीरों में pseudocode लेखन मारियो क्या किया जाना चाहिए आरेखण अगर आप पहली बार इसे लिख रहे थे pseudocode में. क्या लालची एल्गोरिथ्म चाहिए - कैसे यह प्रति व्यवहार करना चाहिए समस्या एक सेट? और इतना है कि व्यवहार का एहसास हम है प्रोत्साहित करते हैं कि बहुत उन पंक्तियों के साथ ज्यादा. और पाठ्यक्रम में, आप एक देखेंगे एक के तहत गोलियों की पूरी गुच्छा उचित श्रेणी और एक उचित नहीं हमें मदद करने में मदद करता है कि वर्ग आप जहां आसपास अपने मन लपेटो हम उस लाइन आकर्षित करते हैं. और सामान्य में, अंगूठे का एक सभ्य नियम है कि आप को हल करने के लिए संघर्ष कर रहे हैं कुछ बग और अपने दोस्त या सहपाठी आप के बगल में बैठे, यह है आप उसे या उसे दिखाने के लिए उचित अपने कोड और अरे, आप मदद कर सकते हैं, का कहना है मुझे गलत यहाँ क्या हो रहा है यह पता लगाने? आम तौर पर हम गले नहीं है विपरीत दिशा. इसके लिए एक सही जवाब नहीं है आपके दोस्त या कहने के लिए यहां सहपाठी, ओह, सिर्फ मेरा और चित्रा को देखो उस से यह बाहर. उस तरह का अनुचित है. लेकिन किसी और के होने, एक और मस्तिष्क, आंखों की एक और जोड़ी पर देखने के लिए अपनी स्क्रीन या अपने कोड को देखो और कहते हैं, क्या आप चाहते हैं यहाँ एक पाश के लिए है? या आप चाहते हैं यहाँ कि अर्धविराम? या ओह, यह त्रुटि संदेश यह मतलब है. उन बहुत उचित है और कर रहे हैं प्रोत्साहित व्यवहार. मैं की ओर इशारा करते था, जो करने के मामलों पहले छात्र रहे हैं जब तक नीचे फोड़ा देर रात में गरीबों को न्याय कर रही है फैसलों और करने के लिए अपने कोड ईमेल बाकी या सिर्फ यह कह किसी को, यहां, यह ड्रॉपबॉक्स में है या रात में देर से Googling. और इसलिए मैं, प्रोत्साहित करते हैं और आप की भीख माँगती हूँ होगा आप उन अपरिहार्य है तो क्या होगा तनाव के क्षणों, आप को मार रहे हैं समय सीमा के खिलाफ, आप कोई देर है यह उस पर पहले से ही शुक्रवार सुबह के बाद से बिंदु, पाठ्यक्रम के सिर ईमेल या सीधे अपने आप को. मैं में हूँ, सुनो, कहो मेरी यहां मुद्दा तोड़ने. चलो एक वार्तालाप करते हैं और यह समझ से बाहर. वेब का सहारा या कुछ अन्य नहीं उचित व्यवहार कभी नहीं है समाधान, और अपने से बहुत अधिक सहपाठियों पर यहां नहीं रह रहे हैं वजह यह है कि गरीबों को न्याय का परिसर. लेकिन यह है कि लाइन स्कर्ट के लिए बहुत आसान है. और यहाँ खुश करने के लिए एक छोटी सी तस्वीर है आप ऊपर Reddit से इतना है कि अब सब कुछ ठीक हो जाएगा. तो एक त्वरित पुनर्कथन, तो, जहां से हम से दूर छोड़ दिया. इसलिए पिछले हफ्ते, हम परिचय कि याद स्थितियां, नहीं खरोंच में लेकिन इस बार सी में. और वहाँ कुछ नए वाक्यविन्यास था लेकिन वास्तव में कोई नए विचारों से प्रति. हम बूलियन अभिव्यक्ति था कि हम कर सकते थे या एक साथ साथ दो खड़ी सलाखों के या और एक साथ दो से एम्परसेंड्स, कह रही है कि बाएं दोनों और सही सच होना चाहिए इस पर अमल करने के लिए. तब हम हम देखा जो स्विच था, संक्षेप में, लेकिन मैं वास्तव में कर रहे हैं का प्रस्ताव प्राप्त करने के लिए सिर्फ अलग वाक्यविन्यास लक्ष्य का एक ही तरह आप में जानते हैं अगर अग्रिम क्या आपके मामलों होने जा रहे हैं. हम छोरों को देखा. एक के लिए लूप, शायद सबसे आम है या कम से कम एक है कि लोग आम तौर पर सहज तक पहुँचने के लिए. यह एक छोटे से गुप्त लग रहा है हालांकि, आप इस के बहुत से, कई उदाहरण देखेंगे लंबे समय से पहले, आप के रूप में पहले से ही देर से पिछले सप्ताह. छोरों इसी सकता है, जबकि एक ही बात को प्राप्त करने. लेकिन आप किसी भी incrementation करना चाहते हैं या अद्यतन करने की चर के मूल्यों, आप के लिए है अधिक से अधिक स्वयं कर पाश के लिए पहले अनुमति देता है. और फिर, जबकि पाश, वहाँ हम पर कुछ करने के लिए अनुमति देता है कम से कम एक बार, जबकि कुछ वरना सच है. और इस के लिए विशेष रूप से अच्छा है कार्यक्रम या आप चाहते हैं जहां खेल के लिए कुछ के लिए उपयोगकर्ता संकेत करने के लिए कम से कम एक बार. और फिर वह या वह सहयोग नहीं करता है, आप यह करना चाहते हो सकता है बार - बार. चर के साथ, इस बीच, हम लाइनों था इस तरह कोड, की जो कर सकता था दो लाइनें हो. आप बुलाया एक पूर्णांक घोषित कर सकता है काउंटर, अर्धविराम. या आप बस की घोषणा कर सकते हैं इतनी बात करने के लिए, यह परिभाषित करते हैं. एक ही समय में यह एक मूल्य दे. और फिर अंत में, हम बात कार्यों के बारे में. और यह एक अच्छा उदाहरण में था यह दिखाता है कि भावना कार्यों के दो प्रकार के. एक) (GetString, जो, फिर से, है उपयोगकर्ता से एक स्ट्रिंग हो जाता है. लेकिन GetString (), की तरह दिलचस्प है अब तक हम यह प्रयोग किया है, के रूप में हम हमेशा साथ यह प्रयोग किया है क्योंकि एक के बाएं हाथ की ओर कुछ बराबर का चिह्न. यही कि GetString कहना है () एक मान देता है. यह, ज़ाहिर है, एक तार आए. और फिर बाएं हाथ की ओर, हम कर रहे हैं बस एक के अंदर है कि स्ट्रिंग बचत चर नाम कहा जाता है. इस से, एक मायने में अलग है, printf printf, कम से कम में है क्योंकि हमारी यहां के उपयोग, कुछ भी वापस नहीं करता है. एक अलग रूप में, यह कुछ वापस करता है. हम सिर्फ यह है क्या परवाह नहीं है. लेकिन यह क्या करता है एक पक्ष प्रभाव कहा जाता है. और हर में उस पक्ष प्रभाव क्या है मामले में हम इस प्रकार अब तक देखा है? Printf क्या करता है? यह स्क्रीन करने के लिए कुछ मुद्रित करता है पाठ प्रदर्शित करता है या संख्या या कुछ और स्क्रीन पर. और ये सिर्फ एक पक्ष प्रभाव माना जाता है यह वास्तव में सौंपने नहीं है क्योंकि यह मेरे पास वापस. इसके अंदर एक जवाब नहीं है मैं तो कर सकते हैं कि एक ब्लैक बॉक्स में पहुँचने के लिए और ले लो. यह सिर्फ ज्यादा अपने दम पर यह कर रहा है कोल्टन इस में खामियों को दूर किया गया था की तरह ब्लैक बॉक्स से पिछले हफ्ते, और वह किसी भी तरह जादुई बोर्ड पर ड्राइंग था मुझे वास्तव में शामिल किए बिना. यह एक पक्ष प्रभाव होगा. लेकिन मैं वास्तव में वापस पहुँचना था अगर यहाँ और कहते हैं, ओह, यहाँ स्ट्रिंग है उपयोगकर्ता से, कि होगा वापसी मान हो. और इस प्रकार अब तक हम केवल कार्यों का उपयोग किया है अन्य लोगों को लिखा है कि. लेकिन हम वास्तव में इन कर सकते हैं चीजें अपने आप की तरह. तो मैं में जाने के लिए जा रहा हूँ CS50 उपकरण फिर से. मुझे लगता है कि हम टैब को बंद करने दें एक पल पहले खुला था. और मुझे आगे जाना है और दो एक नई फ़ाइल बनाएँ. और मैं आगे जाने के लिए जा रहा हूँ एक positive.c कहते हैं. तो मैं के साथ कुछ करना चाहते हैं यहां सकारात्मक संख्या. तो मैं आगे जाना है और int क्या करने जा रहा हूँ - क्षमा करें - # शामिल हैं. चलो कि एक ही नहीं बना दो. के रूप में पहले गलती. Int मुख्य (शून्य), खुला घुंघराले गले लगा, घुंघराले ब्रेस बंद हुआ. और अब मैं निम्नलिखित करना चाहते हैं. मैं एक प्रोग्राम लिखने के लिए चाहते हैं कि उपयोगकर्ता देता है का कहना है कि मुझे एक सकारात्मक पूर्णांक. तो कोई GetPositiveInt समारोह है CS50 पुस्तकालय में. केवल GetInt () नहीं है. मैं क्योंकि लेकिन यह ठीक है मैं लागू कर सकते हैं जो साथ निर्माणों एक कि मूल्य पर थोड़ा अधिक बाधा. मैं इस तरह से कुछ कर सकता है. तो पता INT - आप के साथ टाइप कर रहे हैं, तो सिर्फ एहसास मैं वापस जाने के लिए जा रहा हूँ एक पल में कुछ चीजें बदल - इसलिए int n GetInt () के बराबर होती है. और उस डाल जा रहा है n के अंदर एक पूर्णांक. और मुझे एक और वर्णनात्मक हो. मुझे लगता है कि मांग की तरह मुझे कुछ कहने दो आप मुझे एक सकारात्मक पूर्णांक दे. ठीक है. इसलिए निर्देश का सिर्फ एक छोटा सा. और अब मैं क्या कर सकता है? ठीक है, मैं पहले से ही मेरे साधारण से पता स्थितियां या शाखाओं, बस जैसे मैं स्क्रैच में था, मैं कुछ कह सकता जैसे अगर n से कम या बराबर है शून्य, तो मैं कुछ करना चाहते हैं जैसे, कि सकारात्मक नहीं है. और फिर मैं कर सकता है - ठीक है, लेकिन मैं वास्तव में उस INT प्राप्त करना चाहते हैं. इसलिए मैं यहां तक ​​जा सकता है और मैं एक तरह से कर सकता है की यह प्रति और इस इंडेंट. और फिर, ठीक है. तो पता कम से कम या अगर शून्य के बराबर ऐसा करते हैं. अब, क्या हुआ अगर उपयोगकर्ता सहयोग नहीं करता है? ठीक है, तो मैं करने जा रहा हूँ यहाँ इस उधार ले. और फिर मैं यहाँ में जाने और यहाँ और यहाँ. तो यह स्पष्ट रूप से नहीं है समाधान, सही? दृष्टि में कोई अंत नहीं है क्योंकि. मैं उपयोगकर्ता देता है कि मांग करने के लिए चाहते हैं मुझे एक सकारात्मक पूर्णांक, मैं कर सकता हूँ वास्तव INT मिलता है. मैं तो उस int के लिए जाँच कर सकते हैं. लेकिन तब मैं इसे फिर से जाँच करना चाहते हैं और इसे फिर से जाँच करें और इसे फिर से जाँच करें. तो जाहिर है, क्या बेहतर है यहां का उपयोग कर सकता का निर्माण? सब ठीक है, पाश की ताकि किसी तरह. इसलिए मैं छुटकारा पाने के लिए जा रहा हूँ की लगभग सभी इस की. और मैं इस प्राप्त करना चाहते हैं कम से कम एक बार int. तो मैं क्या कहने जा रहा हूँ - और मैं वापस आ गया हूँ बस एक पल में, जबकि - अब, क्या करना है? मैं int n क्या करने जा रहा हूँ GetInt हो जाता है (). ठीक है. तो वो काफ़ी अच्छा है. और अब अक्सर ऐसा कैसे मैं ऐसा करना चाहते हैं? मुझे लूप के अंदर printf डाल दो. इसलिए मैं बार - बार मांग कर सकते हैं, अगर जरूरत हो. और क्या मैं यह चाहते हैं हालत क्या करना है, जबकि? मैं यह कर रखना चाहते हैं मामला क्या है, जबकि? हाँ. एन से कम या शून्य के बराबर है. तो पहले से ही, हम काफी है इस कोड को साफ कर दिया. हम एक बहुत ही सरल तो उधार लिया है - मत का समय पाश. मैं सिर्फ महत्वपूर्ण लाइनों चुरा लिया है मैं नकल शुरू कर दिया और कहा कि कोड की बुद्धिमान नहीं था जो चिपकाने,. और इसलिए अब मैं वास्तव में पेस्ट करने के लिए जा रहा हूँ यह यहाँ और बस में एक बार करना. और अब मैं क्या क्या करना चाहते हैं इस कार्यक्रम के अंत? मैं सिर्फ कह देंगे कुछ सरल जैसे, के लिए धन्यवाद - और मैं int के लिए% मैं करता हूँ - फिर बैकस्लैश एन, अल्पविराम, और एन, अर्धविराम में प्लग. ठीक है. तो चलिए अब देखते हैं क्या होता मैं इस कार्यक्रम चला रहे हैं. मैं आगे जाने के लिए जा रहा हूँ सकारात्मक बना कर. धिक्कार है. कुछ त्रुटियाँ. तो मुझे पहले अप करने के लिए वापस स्क्रॉल करते हैं. पीछे की ओर के माध्यम से उन्हें काम नहीं करते. ऊपर से नीचे के माध्यम से उन्हें काम वे झरना और केवल ऐसा न हो एक बात गलत हो. के निहित घोषणा GetInt समारोह (). हाँ. तो यह पर्याप्त नहीं था. मैं एक तरह से एक ही गलती की है लेकिन एक छोटे से अलग इस बार. मैं stdio.h शामिल करने के लिए न केवल जरूरत है, लेकिन भी शामिल है, जो cs50.h मिल int के तथाकथित घोषणाओं, जो उपकरण सिखाने, या सिखाता सी () क्या GetInt है. तो मुझे resave करते हैं. मैं अन्य त्रुटियों को अनदेखा करने के लिए जा रहा हूँ मुझे लगता है वे कर रहे हैं आशा है कि करने के लिए जा रहा हूँ क्योंकि किसी भी तरह त्रुटि से संबंधित मैं पहले से ही तय हो गई. तो मुझे आगे जाना है और फिर कंपाइल जाने सकारात्मक बनाने के साथ दर्ज करें. धिक्कार है. तीन त्रुटियों, अभी. मुझे पहले अप करने के लिए स्क्रॉल. अप्रयुक्त चर एन. हम इस से पहले नहीं देखा है. और यह भी, एक छोटे से गुप्त है. इस संकलक का उत्पादन होता है. और उस पंक्ति पर प्रकाश डाला क्या वहाँ - positive.c :9:13 - यह की लाइन में नौ पर कह रहा है, कह रहा है positive.c, 13 चरित्र पर, 13 कॉलम, आप इस गलती की. और विशेष रूप से, यह कह रही है मुझे अप्रयुक्त चर एन. तो चलो देखते हैं - रेखा नौ. मैं समझ में एन का उपयोग कर रहा हूँ कि मैं इसे एक मूल्य दे रहा हूँ. लेकिन क्या संकलक पसंद नहीं करता है मुझे लगने इसे प्रयोग नहीं कर रहा हूँ कि. लेकिन मैं इसे उपयोग कर रहा हूँ, एक मिनट रुको. 11 लाइन में, मैं यहाँ यह उपयोग कर रहा हूँ. लेकिन मैं आगे नीचे स्क्रॉल अगर positive.c पर :11 - इसलिए 11 लाइन, चरित्र 12, पर संकलक, मुझे बता उपयोग की अघोषित पहचानकर्ता एन. मेरे पास तो अघोषित साधन एक के रूप में यह निर्दिष्ट नहीं एक डेटा प्रकार के साथ चर. लेकिन एक मिनट रुको. मैं वास्तव में उस रेखा नौ में किया था. तो अगर कोई वास्तव में यहाँ उलझन में है. यह मेरे या संकलक या तो है क्योंकि रेखा नौ में, फिर से, मैं एक घोषणा कर रहा हूँ n int, और मैं यह निर्दिष्ट कर रहा हूँ GetInt की मान (). तब मैं लाइन में है कि चर n का उपयोग कर रहा हूँ 11 और इसकी कीमत भी कम है अगर जाँच से अधिक या शून्य के बराबर. लेकिन यह जाहिरा तौर पर है बुरा और क्यों टूटा? फिर यह कहते हैं? आह, मैं पहले पता घोषित करने के लिए है पाश में प्रवेश. लेकिन क्यों? मेरा मतलब है, हम बस थोड़ा पहले प्रस्तावित है कि यह चर घोषित करने के लिए ठीक है फिर एक पंक्ति पर सभी और उन्हें कुछ मान असाइन. एक वैश्विक चर - चलो वापस आने दीजिए बस एक पल में उस विचार करने के लिए. तुम मुझे क्यों डाल करना चाहते हैं पाश के बाहर यह? यह है. बिल्कुल सही. तो, कुछ हद तक counterintuitive, यद्यपि मुझे संक्षेप में प्रस्तुत करते हैं. आप अंदर n घोषित वहाँ क्या ब्लॉक की - विशेष रूप से अंदर उन घुंघराले ब्रेसिज़ - चर पता है क्या है कि एक दायरे कहा जाता है - में हमारे स्कोरिंग प्रणाली से संबंधित नहीं कोर्स - लेकिन है कि एक गुंजाइश है उन घुंघराले ब्रेसिज़ के लिए सीमित. दूसरे शब्दों में, आम तौर पर आप की घोषणा का एक सेट के अंदर एक चर घुंघराले ब्रेसिज़, कि चर केवल मौजूद है उन घुंघराले ब्रेसिज़ के अंदर. भले ही, अकेले कि तर्क से तो मैं यह लाइन नौ में एन घोषित कर दिया है अनिवार्य रूप दायरे से गायब हो जाता है, इतनी बात करने के लिए, स्मृति से गायब हो जाता है, समय से मैं 11 लाइन मारा. लाइन 11, दुर्भाग्य से, क्योंकि उन घुंघराले ब्रेसिज़ के बाहर. तो मैं दुर्भाग्य से यह नहीं तय कर सकते हैं मैं यह पहले किया था क्या करने के लिए वापस जा रहा. आप पहली बार में यह कर सकता है. लेकिन अब आप क्या नहीं कर रहे हैं cyclically कर रही है? आप स्पष्ट रूप से नहीं मिल रहे हैं cyclically int. इसलिए हम) (GetInt छोड़ देते हैं, और हम कर सकते हैं अंदर GetInt () छोड़ देना चाहिए कि हम चाहते हैं पाश क्योंकि बार बार के लिए उपयोगकर्ता परेशान. लेकिन यह जाने के लिए पर्याप्त है लाइन अप करने के लिए, छह कहना. Int n, अर्धविराम. अभी तक यह एक मूल्य देना नहीं है क्योंकि आप बस अभी तक की जरूरत नहीं है. लेकिन अब यहाँ नीचे, सूचना - इस एक बहुत ही आसान गलती होगी. मैं अपने पिछले छाया नहीं करना चाहती n की घोषणा. मैं n उपयोग करना चाहते हैं वास्तव में मौजूद है. और इसलिए अब 10 लाइन में, मैं n एक मूल्य प्रदान. लेकिन लाइन छह में, मैं n घोषणा. और तो कर सकते हैं मैं या मैं नहीं कर सकता अब 12 लाइन में इसका इस्तेमाल करते हैं? मैं कर सकता हूँ क्योंकि जो घुंघराले के बीच ब्रेसिज़ n अब घोषित किया जाता है? यहाँ लाइन पांच पर एक. यहाँ लाइन 14 पर एक करने के लिए. मैं अब बाहर ज़ूम यदि हां, तो जाना, इस फाइल को बचाने पीठ में और रन सकारात्मक, इसे बनाने इस समय तैयार की. तो यह है कि पहले से ही प्रगति है. स्लैश. . / सकारात्मक, लिखें. मैं तुम मुझे दे कि मांग एक सकारात्मक पूर्णांक. नकारात्मक 1. नकारात्मक 2. नकारात्मक 3. शून्य. एक. और एक के लिए धन्यवाद है अब छपा है क्या. मुझे कुछ और कोशिश करते हैं, जिज्ञासा से बाहर. मैं इनपुट करने के लिए एक पूर्णांक बताया जा रहा हूँ. लेकिन मैं बजाय मेमने में क्या लिखते हैं? तो आप अब एक अलग शीघ्र देख - पुनः प्रयास करें. लेकिन कहीं मेरे कोड में मैं फिर से प्रयास करें लिख किया था. तो कहाँ, मुमकिन है, यह फिर से प्रयास करें है से आने का संकेत है, तो आप कहेंगे? हाँ, GetInt से (ही). तो चीजें CS50 के स्टाफ में से एक करता है आप के लिए, कम से कम इन पहले कुछ में सप्ताह, हम कुछ राशि लिखा है है त्रुटि के लिए सुनिश्चित करने के लिए जाँच कि अगर आप) (GetInt कॉल, आप कम से कम होगा उपयोगकर्ता से एक पूर्णांक वापस मिलता है. आप एक स्ट्रिंग नहीं मिलेगा. आप एक चार नहीं मिलेगा. आप कुछ नहीं मिलेगा कुल मिलाकर कुछ और. आप एक पूर्णांक मिलेगा. अब, यह सकारात्मक नहीं हो सकता है. यह नकारात्मक नहीं हो सकता है. हम चाहते हैं कि आसपास कोई गारंटी. लेकिन हम पुन: प्रयास करने के लिए उपयोगकर्ता परेशान करेगा, फिर से प्रयास करें, जब तक कि वह या वह वास्तव में पुन: प्रयास सहयोग. इसी तरह, मैं 1.23 करते हैं, कि एक पूर्णांक नहीं है. लेकिन मुझे लगता है, कहते हैं, 50 में टाइप करते हैं मुझे मैं चाहता था कि कोई मान देता है. ठीक है. इतना बुरा नहीं. हम अभी क्या किया है पर कोई सवाल? कुंजी takeaway जा रहा है, स्पष्ट नहीं होने के लिए हमने देखा है जो इतना पाश, इससे पहले कि हम वास्तव में नहीं है, भले ही यह प्रयोग किया जाता है, लेकिन गुंजाइश का मुद्दा, जहां चर केवल केवल इस्तेमाल किया जा सकता है हो सकता है कुछ निर्दिष्ट दायरे के भीतर. सब ठीक है, मुझे सुझाव को संबोधित करते हैं आप एक के पहले, कि बनाया वैश्विक चर. एक अलग रूप में, यह पता चला है कि एक और इस समस्या का हल है, लेकिन आम तौर पर एक गलत समाधान या एक खराब डिजाइन समाधान करने के लिए है क्या अपने चर घोषित एक वैश्विक चर बुलाया. अब मैं एक तरह से मेरी परिभाषा का उल्लंघन कर रहा हूँ वहाँ गुंजाइश की वजह ऊपर से ही कोई घुंघराले ब्रेसिज़ और एक फ़ाइल के बहुत नीचे. लेकिन उस के निहितार्थ कि, रेखा चार में अब है N एक वैश्विक चर रहा है. जैसा कि नाम और, यह है हर जगह सिर्फ सुलभ. स्क्रैच वास्तव में इन है. आप एक चर का उपयोग किया है, तो आपको याद हो सकता है आप इसके लिए अगर चुनाव करना था इस प्रेत या सभी sprites के लिए. खैर, यह सब sprites सिर्फ साफ है वैश्विक कहने का तरीका है. हाँ? आह, वास्तव में अच्छा सवाल है. तो बहुत पहले संस्करण में याद है कि मेरे कोड का, जब मैं गलत रेखा नौ में घोषित और परिभाषित एन - मैं एक चर के रूप में घोषित साथ और मैं इसे एक मूल्य दिया असाइनमेंट ऑपरेटर - यह मेरे दो त्रुटियों दे दी है. वन, एन इस्तेमाल नहीं किया गया था तथ्य यह है कि, और दो, कि लाइन 11 में यह सिर्फ घोषित नहीं किया गया था. मैं नहीं था तो पहले एक समय पर पता. इसे कड़ाई से घोषित करने में कोई त्रुटि नहीं है इसका इस्तेमाल एक चर लेकिन नहीं. लेकिन हम में किया है चीजों में से एक CS50 उपकरण, जान - बूझकर, Pedagogically, हम ऊपर cranked कर लिया है बनाने के लिए संकलक की उम्मीदों आप बातें कर रहे हैं कि यकीन नहीं बस सही ढंग से, लेकिन वास्तव में सही ढंग से. क्योंकि आप एक चर की घोषणा कर रहे हैं जैसे एन और यह कभी नहीं का उपयोग कर, या इसे का उपयोग सही ढंग से, तो क्या यह वहाँ क्या कर रही है? यह वास्तव में कोई उद्देश्य में कार्य करता है. आप और अगर यह समय के साथ बहुत आसान है में अपनी खुद की कंप्यूटर कॉन्फ़िगर नहीं है इस तरह, सिर्फ है कि कोड के लिए थोड़ा यहाँ अवशेष, वहाँ अवशेष. और फिर महीने बाद आप वापस देखो और तुम क्यों इस लाइन का है, पसंद कर रहे हैं वहाँ कोड? और कोई अच्छा कारण यह है कि अगर वहाँ आप या अपने सहकर्मियों को लाभ नहीं है करने के लिए है सड़क के नीचे तो इस पर ठोकर. एक अलग रूप में, जहां है उस से आ रहा है? खैर, याद है कि हम संकलन हर समय कार्यक्रम, यह सब के सब है मुद्रित किया जा रहा है. इसलिए हम वापस इस के लिए आया हूँ. लेकिन फिर, एक उपयोगिता है कि कर द्वारा संकलन की प्रक्रिया को स्वचालित वास्तविक संकलक चल बजना कहा जाता है. यह बात है, हम अंत में देखता हूँ, है एक विशेष के साथ डिबगिंग के साथ क्या करना कार्यक्रम डिबगर कहा जाता है. इस अनुकूलन के साथ क्या करना है कोड - अधिक भविष्य में उस पर. एसटीडी = C99 - यह सिर्फ 1999 संस्करण के उपयोग का मतलब सी. सी भी अब से आसपास किया गया है यही नहीं, लेकिन वे कुछ अच्छा बनाया 10 से अधिक साल पहले बदल जाता है. और यहाँ प्रासंगिक वाले है. हम कुछ भी कर कह रहे हैं कि पहले एक चेतावनी हो गया होता छात्र को रोकने में कोई त्रुटि संकलन से. और दीवार का मतलब है एक के लिए ऐसा कर बातें नहीं, की पूरी गुच्छा बस चर से संबंधित. और फिर मेरे लिए स्क्रॉल इस पंक्ति के अंत. और यह भी, हम अंततः हूँ वापस करने के लिए आते हैं. जाहिर है, इस का नाम है मैं संकलन हूँ फ़ाइल. इस फ़ाइल का नाम याद करते हैं मैं नाम के रूप में outputting हूँ मेरे runnable कार्यक्रम का. इस lcs50 सिर्फ CS50 उपयोग का मतलब पुस्तकालय, और किसी भी शून्य और लोगों कि कर्मचारियों ने लिखा है और पहले संकलित इस साल, एकीकृत मेरे कार्यक्रम में उन्हें. और किसी को भी-एल एम क्या है? यह है, जो गणित पुस्तकालय है बस वहाँ आप कर रहे हैं, भले ही किसी भी गणित नहीं कर रही है. यह सिर्फ स्वतः प्रदान की है बनाने के द्वारा हमें. खैर, मुझे एक अन्य उदाहरण करते हैं यहां एक नई फ़ाइल खोलने से. और मुझे string.c रूप में यह एक बचा. यह पता चला है कि हम डेटा के बारे में बात के रूप में प्रकार आज भी वहाँ और भी है हुड के नीचे चल रहा हम इस प्रकार अब तक देखा है की तुलना में. तो मुझे जल्दी से एक त्वरित कार्यक्रम करते हैं. Stdio.h शामिल करें. और मुझे लगता है कि बचा लेंगे. और तुम जानते हो, मुझे मत देना एक ही गलती बार - बार. Cs50.h. शामिल करें और मैं अब आगे चलते हैं और int मुख्य (शून्य) से करते हैं. और अब मैं बस एक कार्यक्रम में करना चाहते हैं कि इस करता है - एक स्ट्रिंग घोषित यह कहा जाता है और एक तार मिल उपयोगकर्ता से. और मुझे एक छोटे से करते हैं यहाँ निर्देश - मुझे एक स्ट्रिंग दे - तो उपयोगकर्ता क्या करना जानता है. और फिर नीचे यहाँ यह नीचे, मैं निम्नलिखित करना चाहते हैं - int के लिए मैं शून्य हो जाता है. फिर, कंप्यूटर वैज्ञानिकों आमतौर पर शून्य पर गिनती शुरू, लेकिन हम कर सकते थे हम वास्तव में चाहते थे कि हम एक हैं. अब मैं क्या करने जा रहा हूँ मैं कम है एस के स्ट्रिंग की लंबाई की तुलना में. तो strlen - एस टी आर एल ई एन - यह आसान है क्योंकि फिर, यह संक्षिप्त है यह एक है, भले ही टाइप करने के लिए थोड़ा गुप्त. यही कारण है कि हम इस्तेमाल नहीं किया है एक समारोह है लेकिन इससे पहले कि सचमुच करता है कि - मेरे लिए प्रतिनिधित्व करने वाली एक संख्या में वापसी स्ट्रिंग की लंबाई उपयोगकर्ता द्वारा लिखे गए. वे नमस्कार में टाइप करते हैं, तो यह लौटेंगे पाँच वहाँ पाँच क्योंकि हैलो में पत्र. फिर, प्रत्येक यात्रा के पर इस पाश, मैं प्लस प्लस. तो फिर, एक मानक भले ही निर्माण आप काफी भी आराम या नहीं कर रहे हैं इसके साथ अभी तक परिचित. लेकिन अब इस पाश के प्रत्येक चलना पर, मैं क्या करने जा रहा हूँ नोटिस. मैं आगे और प्रिंट जाना चाहते एक ही चरित्र बाहर - इसलिए एक नई लाइन पर% ग बैकस्लैश एन. और फिर, तुम मुझे क्या करना चाहते पता है क्या? शब्द है कि जो कुछ भी उपयोगकर्ता प्रकार नमस्कार की तरह, मैं मुद्रित करना चाहते हैं, में एच ई एल एल ओ, प्रत्येक पंक्ति में एक चरित्र. दूसरे शब्दों में, मैं कम से प्राप्त करना चाहते हैं एक स्ट्रिंग में व्यक्तिगत चरित्र, जिससे अब तक एक स्ट्रिंग बस है अक्षरों का एक अनुक्रम गया. और यह मैं है, ब्रैकेट कर सकते हैं पता चला है मैं करीब वर्ग, करीब कोष्ठक, अर्धविराम. और मैं एक और बात यह है कि क्या करना है. यह string.h नामक एक फ़ाइल में है कि strlen घोषित किया जाता है. इसलिए मुझे लगता है कि समारोह का उपयोग करना चाहते हैं, मैं संकलक बताने की जरूरत है, इसका इस्तेमाल करने की उम्मीद है. अब मुझे आगे जाना है और कर देना स्ट्रिंग कार्यक्रम बुलाया. डॉट, स्लैश, स्ट्रिंग. मुझे एक स्ट्रिंग दे दीजिए. मुझे आगे जाना है और इसे टाइप करेंगे. हैलो, सभी टोपियां में, लिखें. और अब मैं इस छपा है नोटिस एक के बाद एक चरित्र. तो यहाँ नया विस्तार, एक स्ट्रिंग है दिन के अंत में, हो सकता है अपने व्यक्तिगत के माध्यम से पहुँचा वर्ग शुरू करने से वर्ण ब्रैकेट अंकन. और वह है, एक स्ट्रिंग नीचे क्योंकि हुड वास्तव में एक दृश्य है अक्षर. लेकिन क्या उनके बारे में साफ है है आपके कंप्यूटर की रैम में - मैक, पीसी, जो भी है - वे कर रहे हैं सचमुच वापस वापस करने के लिए पीछे - एच ई एल एल ओ - व्यक्तिगत, आसन्न पर स्मृति में बाइट्स. तो तुम आठवें ऐसे में प्राप्त करना चाहते हैं बाइट, इस पाश में जो होगा ब्रैकेट शून्य, वर्ग एक, वर्ग दो, ब्रैकेट तीन, वर्ग चार - कि पांच जब तक अनुक्रमित शून्य है - कि एच ई एल एल ओ बाहर प्रिंट होगा अपनी पंक्ति में. अब, एक नमूना के रूप में, मुझे तुम्हें दिखाने चीजों की तरह आप अंततः हो जाएगा समझने में सक्षम, कम से कम कुछ करीबी तलाश के साथ. एक के लिए, क्या हम आज में शामिल उदाहरण, यदि आप चाहते हैं, वास्तव में है बहुत पहले jailbreaks में से एक iPhone के लिए. Jailbreaking फोन खुर का मतलब तो आप वास्तव में एक पर इसका इस्तेमाल कर सकते हैं अलग वाहक या स्थापित अपना खुद का सॉफ्टवेयर. और आप इस पूरी तरह से लग रहा है पर ध्यान देंगे , गुप्त सबसे अधिक संभावना है. लेकिन इस पर दिखेगा. iPhone जाहिरा तौर पर साथ टूट गया था, एक पाश, एक अगर हालत, एक किसी और के लिए हालत, कार्यों का एक गुच्छा हम नहीं देखा है. और फिर, आप पर नहीं होगा पहली नज़र शायद इस काम कर रहा है कि कैसे समझते हैं. लेकिन हम की तरह लेते हैं कि सब कुछ हमारे आधुनिक जीवन में प्रदान के लिए वास्तव में, यहां तक ​​कि कुछ को कम करने के लिए जाता है इन बुनियादी बातों का हम किया गया है पर देख रहे हैं. मुझे आगे जाना है और एक खोल दो. अन्य कार्यक्रम, holloway.c. तो यह भी है, आप कुछ है वास्तव में पता नहीं चलना चाहिए. स्टाफ का कोई भी या मैं भी सकता है शायद को देखकर यह पता लगाना यह है कि यह किसी के कोड था क्योंकि कि क्या करने के लिए प्रस्तुत किया गया था ऐतिहासिक दृष्टि से एक obfuscated सी के रूप में जाना जाता है आप एक प्रोग्राम लिखने जहां प्रतियोगिता, कि compiles और चलाता है, लेकिन इतनी लानत है गुप्त कोई मानव समझ सकते हैं क्या यह करने के लिए जा रहा है जब तक वे वास्तव में इसे चलाते हैं. तो वास्तव में, आप इस पर नजर डालें तो कोड, मैं एक स्विच देखते हैं. मैं मुख्य देखते हैं. मैं इन वर्ग कोष्ठक जिसका अर्थ है देखना एक सरणी में किसी तरह का. किसी को लगता है कि क्या करना चाहते हैं इस कार्यक्रम वास्तव में मैं होलोवे चलाते हैं करता है? हां. ठीक है. अच्छा किया. इतना ही स्टाफ और मैं समझ नहीं सकता इन बातों को क्या कर बाहर. और अब अंत में, मुझे आगे चलते हैं और एक अन्य कार्यक्रम खुला. इस एक - फिर, हम स्रोत कोड बना देंगे ऑनलाइन उपलब्ध - यह एक बस है प्रकार के सुंदर को देखने के लिए. वे सब किया मारा है अंतरिक्ष बार काफी थोड़ा. लेकिन यह वास्तविक कोड है. तो आप हम यही है, अगर सुंदर है अगर आपको लगता है वास्तव में, प्रॉम्प्ट पर इस दौड़ अंत में आप देखेंगे कि कैसे हम इस तरह से बातें कर सकता है. तो हम उस पर ध्यान दें छोड़ दूँगा और बुधवार को आप देखते हैं. [संगीत खेल] अध्यक्ष 2: अगले CS50 पर, TFS एक गदर मंच. स्पीकर 3: वह वहाँ है. उसे जाओ! [संगीत खेल]