>> [संगीत बजाना]
>> डेविड जे मालन: ठीक है।
यह CS50 और यह है 2 सप्ताह की शुरुआत है।
और तुम उस पर याद होगा सप्ताह की पिछले कुछ,
हम कंप्यूटर को शुरू किया गया है विज्ञान और, बारी में, प्रोग्रामिंग।
>> और हम के माध्यम से कहानी शुरू कर दिया स्क्रैच, कि चित्रमय भाषा
एमआईटी मीडिया लैब से।
और फिर सबसे हाल ही में, पिछले सप्ताह हमने किया
एक higher-- एक परिचय निचले स्तर की भाषा में जाना जाता है
सी, कुछ ऐसा है जो विशुद्ध शाब्दिक रूप में है।
और, वास्तव में, पिछली बार जब हम इस संदर्भ के भीतर का पता लगाया
अवधारणाओं की एक संख्या है।
>> यह, याद है, बहुत था पहला कार्यक्रम हम पर देखा।
और इस कार्यक्रम, काफी बस, बाहर प्रिंट, "हैलो, दुनिया।"
लेकिन वहाँ इतना सूरत से जादू चल रहा है।
इस # शामिल है इन कोण कोष्ठक के साथ।
वहाँ int है।
वहाँ (शून्य)।
कोष्ठक, घुंघराले ब्रेसिज़ नहीं है, अर्द्ध कॉलन, और इतना अधिक।
>> और हां, याद है कि हम खरोंच शुरू की
इतना है कि हम, आदर्श, अतीत देख सकता है कि वाक्य रचना, सामान सच नहीं है कि
सब है कि बौद्धिक दिलचस्प लेकिन जल्दी पर
, बिल्कुल, थोड़ा मुश्किल अपने मन के आसपास लपेटो करने के लिए।
और, वास्तव में, सबसे आम में से एक बातों पर जल्दी एक प्रोग्रामिंग वर्ग में,
खासकर उन लोगों के लिए कम आरामदायक, से निराश हो जाता है
और कुछ वाक्यात्मक द्वारा गच्चा त्रुटियों, तार्किक त्रुटियों का उल्लेख नहीं है।
और हमारे लक्ष्य के बीच इतना आज वास्तव में, होगा
कुछ के साथ लैस करने के लिए हो के लिए कैसे समस्या को हल करने की तकनीक
बेहतर समस्याओं को खुद हल करने के लिए डिबगिंग के रूप में।
और आपको याद होगा, भी, कि पर्यावरण कि हम शुरू की
पिछली बार CS50 आईडीई बुलाया गया था।
यह वेब आधारित सॉफ्टवेयर है कि आप क्लाउड में कार्यक्रम के लिए अनुमति देता है,
तो बात है, जबकि सभी को ध्यान में रखते हुए अपने एक साथ फ़ाइलें, जैसा कि हम आज फिर से होगा।
और कहा कि हम याद करते हैं यहां इन विषयों पर दोबारा गौर,
उन के बीच में काम करता है, और छोरों, और चर, और बूलियन अभिव्यक्ति,
और शर्तों।
और वास्तव में कुछ अधिक है कि हम स्क्रैच की दुनिया से अनुवाद
सी की दुनिया में
>> लेकिन मौलिक निर्माण ब्लॉक, तो बात है,
वास्तव में अभी भी एक ही पिछले सप्ताह थे।
एक वास्तव में, हम वास्तव में सिर्फ था अलग पहेली टुकड़ा, अगर तुम जाएगा।
कि बैंगनी रंग के बजाय ब्लॉक बचाने के लिए, हम बजाय
printf था, जो है सी में इस समारोह में कहा कि
आप कुछ प्रिंट करने देता है और स्क्रीन पर यह प्रारूप।
हम CS50 शुरू की लाइब्रेरी, तुम कहाँ
अपने निपटान get_char पर अब है, और get_int, और get_string,
और के रूप में कुछ अन्य कार्यों खैर, जो के माध्यम से आप इनपुट प्राप्त कर सकते हैं
उपयोगकर्ता की अपनी कीबोर्ड से।
और हम भी बातों पर एक नज़र लिया these- बूल, और चार तरह,
और डबल, नाव, पूर्णांक, long_long स्ट्रिंग।
और वहाँ सी में भी अन्य प्रकार के डेटा
>> दूसरे शब्दों में, जब आप की घोषणा में एक चर कुछ मूल्य की दुकान,
या जब आप एक समारोह को लागू कि कुछ मान देता है,
आप क्या निर्दिष्ट कर सकते हैं मूल्य है कि के प्रकार।
यह एक स्ट्रिंग है, एक तरह पात्रों के अनुक्रम?
यह एक पूर्णांक की तरह एक नंबर है?
यह एक चल बिन्दु है मूल्य, या पसंद है?
तो सी में, स्क्रैच के विपरीत, हम वास्तव में किस प्रकार का डेटा निर्दिष्ट करने के लिए शुरू किया
हम लौटने या उपयोग कर रहे थे।
>> लेकिन जाहिर है, हम भी में भाग गया कंप्यूटिंग के कुछ बुनियादी सीमा।
खास तरीके से, इस भाषा सी, याद
हम पर एक नज़र लिया है कि पूर्णांक अतिप्रवाह, वास्तविकता
कि अगर आप केवल एक है स्मृति की निश्चित राशि
या, विशेष रूप से, एक परिमित संख्या बिट्स के लिए, आप केवल इतनी अधिक भरोसा कर सकते हैं।
और इसलिए हम यहां इस उदाहरण को देखा जिससे एक हवाई जहाज में एक काउंटर,
वास्तव में, अगर लंबे समय पर्याप्त होता चल रहा है अतिप्रवाह और एक सॉफ्टवेयर में परिणाम
एक वास्तविक भौतिक संभावित त्रुटि।
>> हम यह भी तैर को देखा बिंदु अस्पष्टता, वास्तविकता
कि केवल एक सीमित संख्या के साथ बिट्स के लिए, चाहे वह 32 या 64 है,
आप केवल इतने सारे संख्या निर्दिष्ट कर सकते हैं एक दशमलव बिंदु के बाद जिसके बाद आप
imprecise पाने के लिए शुरू करते हैं।
उदाहरण के लिए, एक तिहाई तो यहाँ दुनिया, हमारे इंसानों की दुनिया में,
हम जानते हैं कि अभी एक अनंत संख्या है दशमलव बिंदु के बाद 3s की।
लेकिन एक कंप्यूटर जरूरी नहीं कर सकते संख्या की एक अनंत संख्या का प्रतिनिधित्व
अगर आप केवल अनुमति देते हैं यह कुछ जानकारी के सीमित मात्रा में।
>> इतना ही नहीं, हम आप से लैस किया मामले में अधिक से अधिक शक्ति के साथ
कैसे तुम अपने आप को अभिव्यक्त कर सकता है प्रोग्रामिंग के मामले में एक कीबोर्ड,
हम भी सीमित क्या आप वास्तव में क्या कर सकते हैं।
और वास्तव में, कीड़े और गलतियों से कर सकते हैं मुद्दों के उन प्रकार से उत्पन्न होती हैं।
और वास्तव में, विषयों के बीच आज डिबगिंग जैसे विषयों को होने जा रहे हैं
और वास्तव में हुड के नीचे तलाश कैसे चीजों को पेश किए गए पिछले सप्ताह में
वास्तव में लागू कर रहे हैं इतनी है कि आप बेहतर
समझ में दोनों की क्षमताओं और सी की तरह एक भाषा की सीमाओं
>> और वास्तव में, हम वापस परत छील कर देंगे डेटा संरचना का सरलतम की,
कुछ एक सरणी कहा जाता है, जो स्क्रैच एक फोन करने के लिए होता है 'की सूची। "
यह एक छोटा सा है इस संदर्भ में अलग है।
और फिर हम भी की एक मिलवाता हूँ हमारे डोमेन-विशिष्ट समस्याओं का पहला
CS50 में, की दुनिया क्रिप्टोग्राफी, पांव मार करने की कला
या में इतनी जानकारी संकेताक्षर आप गुप्त संदेश भेज सकते हैं कि
और गुप्त संदेशों को डिकोड दो व्यक्तियों, ए और बी के बीच
>> इसलिए हम संक्रमण से पहले कि नई दुनिया के लिए,
चलो कुछ से लैस करने की कोशिश करते हैं तकनीक है जिसके साथ आप समाप्त कर सकते हैं
या कम से कम कुछ कम कुंठा की
आप शायद का सामना करना पड़ा है कि पिछले एक सप्ताह से अकेले खत्म हो गया।
वास्तव में, आप के आगे के कुछ कर रहे हैं such-- सी और बाधाओं में अपना पहला समस्याएं हैं
अगर तुम मुझे पसंद कर रहे हैं, पहली बार आप एक प्रोग्राम बाहर टाइप करने के लिए कोशिश करते हैं,
भले ही आप तार्किक लगता है कार्यक्रम बहुत आसान है,
आप बहुत अच्छी तरह से एक दीवार हिट हो सकता है, और संकलक सहयोग करने के लिए नहीं जा रहा है।
करो या बजना नहीं जा रहा है वास्तव में अपनी बोली करने के लिए।
>> और क्यों है कि हो सकता है?
खैर, चलो पर एक नज़र रखना शायद, एक साधारण प्रोग्राम।
मुझे आगे जाना है और इस को बचाने के लिए जा रहा हूँ एक फ़ाइल जानबूझ buggy0.c कहा जाता है,
क्योंकि मैं इसे करने के लिए पता अग्रिम में त्रुटिपूर्ण हो।
लेकिन मुझे पता है कि अगर यह नहीं हो सकता है पहले या दूसरे या तीसरे कार्यक्रम है
कि मैं वास्तव में खुद बना रहा हूँ।
तो मैं आगे जाने के लिए जा रहा हूँ और बाहर प्रकार, int मुख्य (शून्य)।
और फिर मेरी घुंघराले ब्रेसिज़ के अंदर, एक बहुत परिचित ( "हैलो, world--
बैकस्लैश, एन ") - और एक अर्धविराम।
>> मैं फ़ाइल बचा लिया।
अब मैं नीचे जाने के लिए जा रहा हूँ मेरे टर्मिनल विंडो पर
और प्रकार बनाने buggy0, क्योंकि, फिर से, आज फ़ाइल का नाम buggy0.c है।
तो मैं buggy0 बनाने, दर्ज टाइप करें।
>> और, ओह, भगवान, पिछली बार से याद करते हैं कि कोई त्रुटि संदेश एक अच्छी बात है।
तो कोई उत्पादन एक अच्छी बात है।
लेकिन यहाँ मैं स्पष्ट रूप से है गलतियों से कुछ संख्या है।
>> उत्पादन की पहली पंक्ति तो buggy0 बनाने लिखने के बाद, याद है,
बजना की काफी वाचाल उत्पादन है।
हुड के नीचे, CS50 आईडीई कॉन्फ़िगर किया गया है
की एक पूरी गुच्छा का उपयोग करने के लिए इस संकलक के साथ विकल्प
ताकि आप की जरूरत नहीं है कि उनके बारे में सोचने के लिए।
और यह सब है कि पहली पंक्ति है इसका मतलब है कि बजना के साथ शुरू होता है।
>> लेकिन उसके बाद, समस्या उनकी उपस्थिति बनाने के लिए शुरू करते हैं।
लाइन 3, चरित्र पर Buggy0.c 5, वहाँ एक बड़ा, लाल त्रुटि है।
वो क्या है?
परोक्ष पुस्तकालय समारोह की घोषणा साथ प्रकार पूर्णांक (const चार * printf,
...) [-Werror]।
मैं बहुत जल्दी मतलब है, यह बहुत रहस्यमय हो जाता है।
और निश्चित रूप से, पहली बार में नज़र, हम नहीं होगा
आप समझने की उम्मीद उस संदेश की संपूर्णता।
और तो सबक के एक आज के लिए जा रहा है
नोटिस करने की कोशिश करने के लिए किया जाना है पैटर्न, या इसी तरह की बातें,
त्रुटियों के तुम हो सकता है अतीत में सामना करना पड़ा।
तो चलो अलावा केवल छेड़ो उन शब्दों है कि परिचित लग रही है।
बड़े, लाल त्रुटि स्पष्ट रूप से है कुछ का प्रतीक गलत जा रहा है।
>> उलझाव की घोषणा पुस्तकालय समारोह printf।
तो भी अगर मैं काफी समझ में नहीं आता कि क्या परोक्ष पुस्तकालय समारोह की घोषणा
इसका मतलब है, निश्चित रूप से समस्या किसी भी तरह printf से संबंधित है।
और कहा कि इस मुद्दे का स्रोत यह घोषणा के साथ नहीं है।
>> घोषणा एक समारोह है पहली बार के लिए यह उल्लेख।
और हम पिछले हफ्ते शब्दावली का इस्तेमाल किया एक समारोह के प्रोटोटाइप की घोषणा की,
या तो के शीर्ष पर एक लाइन के साथ अपने खुद फ़ाइल या एक तथाकथित हेडर फाइल में।
और क्या हम फ़ाइल कहा था पिछले हफ्ते कि printf उद्धरण है,
गंदें शब्द बोलना, घोषित?
क्या फाइल में अपने प्रोटोटाइप है?
>> तो अगर आप याद है, बहुत पहले की बात मैं टाइप, लगभग हर कार्यक्रम पिछले time--
और गलती से एक पल पहले शुरू myself-- लिखकर इस एक here-- था
hash-- # शामिल <stio-- के लिए इनपुट / output-- डॉट एच और वास्तव में,
अगर मैं अब इस फाइल को बचाने के लिए, मैं जा रहा हूँ आगे बढ़ो और अपनी स्क्रीन स्पष्ट करने,
आप टाइप करके ऐसा कर सकते हैं जो साफ है, या आप नियंत्रण एल पकड़ कर सकते हैं,
बस अपने टर्मिनल विंडो स्पष्ट करने बस कुछ अव्यवस्था को खत्म करने के लिए।
>> मैं आगे जाने के लिए जा रहा हूँ और फिर से लिखें buggy0 दर्ज करें।
और देखा, मैं अभी भी उस देखना बजना से लंबे आदेश,
लेकिन वहाँ कोई त्रुटि संदेश इस समय है।
और वास्तव में, अगर मैं ./buggy0 करते हैं, अभी पिछली बार की तरह,
जहां डॉट इसका मतलब यह है निर्देशिका, स्लैश बस का अर्थ है,
यहां कार्यक्रम का नाम आता है और कार्यक्रम का नाम है कि buggy0 है,
दर्ज, "हैलो, दुनिया।"
>> अब, तुम कैसे हो सकता है इस समाधान gleaned
बिना जरूरी के रूप में कई शब्दों को पहचानने
के रूप में मैंने किया था, निश्चित रूप से, हो रही इतने सालों के लिए यह किया?
खैर, सबसे पहले समस्या प्रति एहसास सेट, हम आपको एक आदेश से मिलवा
कि CS50 के अपने स्टाफ help50 नाम लिखा था।
और वास्तव में, सी के लिए विशिष्टता करता है समस्या यह कैसे उपयोग करने के लिए के रूप में निर्धारित किया है।
>> लेकिन help50 अनिवार्य है एक प्रोग्राम है कि CS50 के स्टाफ
आप चलाने के लिए लिखा है कि अनुमति देता है एक कमांड या एक कार्यक्रम चलाने के लिए,
और अगर आप समझ में नहीं आता अपनी उत्पादन, help50 करने के लिए अपने उत्पादन में पारित करने के लिए
जिस पर सॉफ्टवेयर बिंदु कि पाठ्यक्रम के कर्मचारियों ने लिखा है
अपने कार्यक्रम के उत्पादन में दिखेगा लाइन से लाइन, चरित्र द्वारा चरित्र।
और अगर हम, स्टाफ, को पहचान कि आप अनुभव कर रहे त्रुटि संदेश
हम कुछ के साथ आप भड़काने की कोशिश करेंगे बयानबाजी सवाल, कुछ सलाह के साथ,
ज्यादा एक टीएफ या एक सीए या अपने आप की तरह कार्यालय समय में व्यक्ति में क्या होगा।
>> तो help50 को देखने के लिए अगर तुम नहीं करते जरूरी नहीं कि एक समस्या को समझते हैं।
लेकिन इस पर भरोसा नहीं है एक बैसाखी के रूप में बहुत ज्यादा।
निश्चित रूप से समझने की कोशिश अपने उत्पादन और फिर इसे से सीख
केवल इतना है कि एक या दो बार आप ऐसा करेंगे कभी एक विशेष त्रुटि के लिए help50 चलाने
संदेश।
उसके बाद, आप होना चाहिए अपने आप को बेहतर सुसज्जित
यह पता लगाने के लिए क्या यह वास्तव में है।
>> यहाँ एक दूसरे को करते हैं।
मुझे आगे जाना है, और किसी अन्य रूप में करते हैं फ़ाइल हम इस buggy1.c फोन करता हूँ।
और इस फाइल में मैं हूँ deliberately-- जा रहा
लेकिन बहाना है कि मैं नहीं समझने की क्या गलती मैंने बनाया है।
>> मुझे आगे जाना है और this-- करने जा रहा हूँ # शामिल है, क्योंकि मैं
एक पल पहले से अपने सबक सीखा है।
इंट मुख्य (शून्य) के रूप में पहले।
और फिर यहाँ मैं जा रहा हूँ स्ट्रिंग करने के लिए - get_string।
और पिछली बार से याद है कि इसका मतलब है, अरे, कंप्यूटर,
मुझे एक चर देना, कॉल यह है, और कि चर एक स्ट्रिंग के प्रकार बनाना
इसलिए मैं इसे में एक या एक से अधिक शब्दों को स्टोर कर सकते हैं।
>> और फिर दाएँ हाथ पर बराबर चिह्न के पक्ष में
get_string है, जो एक है CS50 पुस्तकालय में समारोह
कि ठीक है कि नहीं करता है।
यह एक समारोह और फिर हो जाता है सही से हाथ इसे छोड़ दिया है।
तो यह बराबर चिह्न मतलब यह नहीं है "बराबर" हम गणित में सोच सकते हैं के रूप में।
यह दाईं से बाईं ओर से काम का मतलब है।
तो इसका मतलब यह है, से तार ले लो उपयोगकर्ता और यह एस के अंदर दुकान।
>> अब इसका इस्तेमाल करते हैं।
मुझे आगे अब और जाने के लिए एक दूसरे के रूप में करते हैं लाइन, मुझे आगे जाना है और कहते हैं "नमस्ते" करते हैं -
नहीं "दुनिया है," लेकिन "हैलो,% s-- जो हमारे प्लेसहोल्डर, अल्पविराम s है,
जो हमारे चर रहा है, और फिर एक अर्धविराम।
तो अगर मैं बहुत ज्यादा बिगाड़ नहीं था यहाँ, यह सही कोड की तरह लग रहा है।
>> और मेरी प्रवृत्ति अब यह संकलन करने के लिए कर रहे हैं।
फ़ाइल buggy1.c कहा जाता है।
तो मैं buggy1 बनाने, दर्ज करने जा रहा हूँ।
और रफ़ू-यह है, अगर वहाँ नहीं है पहले की तुलना में और भी अधिक त्रुटियों।
मेरा मतलब है, वहाँ और भी है त्रुटि संदेश यह होगा
इस कार्यक्रम में वास्तविक लाइनों की तुलना में लग रहे हैं।
>> लेकिन takeaway यहाँ है, भले ही आप अभिभूत हो
दो या तीन या साथ चार और त्रुटि संदेश,
बहुत पर हमेशा ध्यान केंद्रित उन संदेशों के पहले।
सर्वोच्च एक को देख, वापस ऊपर रूप में की जरूरत स्क्रॉल हो।
यहाँ तो मैं मेकअप buggy1 टाइप।
यहाँ है कि बजना उत्पादन की उम्मीद के रूप में है।
>> और यहाँ पहली बार लाल त्रुटि है।
अघोषित पहचानकर्ता का उपयोग स्ट्रिंग, मैं में मानक मतलब था?
तो मानक में है वास्तव में कुछ और।
यह उपयोगकर्ता के लिए संदर्भित करता है कीबोर्ड, अनिवार्य।
>> लेकिन यह है कि मैं क्या मतलब नहीं है।
मैं स्ट्रिंग मतलब है, और मैं get_string मतलब था।
तो क्या यह है कि मैं इस बार भी ऐसा करने के लिए भूल गए हैं?
क्या इस समय याद आ रही है?
मैं अपने # शामिल है, इसलिए मैं printf की पहुंच है।
>> लेकिन मैं क्या जरूरत नहीं है बस अभी तक के लिए उपयोग?
खैर, अभी पिछली बार की तरह, मैं संकलक बताने की जरूरत
बजना क्या ये कार्य कर रहे हैं।
Get_string नहीं आती है सी के साथ और विशेष रूप से, यह
में नहीं आता है हेडर फाइल, ।
यह बजाय में आता है कुछ कर्मचारियों ने लिखा है,
जो एक अलग फाइल है नाम लेकिन जिसे उपयुक्त नाम।
>> तो बस एक लाइन है कि जोड़कर पिछली बार से code-- याद की
जब बजना चलाता है कि, यह क्या हो रहा है नीचे करने के लिए अपने कोड के शीर्ष पर देखने के लिए,
बाएं से दाएं।
यह नोटिस करने जा रहा है ओह, आप चाहते हैं।
मुझे जाने और कहा कि पता करते हैं, जहाँ भी यह सर्वर पर है,
कॉपी और पेस्ट करें, अनिवार्य रूप से, अपनी खुद की फ़ाइल के शीर्ष में
तो यह है कि कहानी में इस बिंदु पर, लाइन 1, कार्यक्रम के बाकी
, वास्तव में, कार्यों के किसी भी उपयोग कर सकते हैं उसमें उन के बीच में get_string।
इसलिए मुझे लगता है की अनदेखी करने के लिए जा रहा हूँ उन त्रुटियों के बाकी है,
क्योंकि मैं, वास्तव में, यह है कि केवल संदेह पहले एक वास्तव में मायने रखता है।
और मैं आगे और फिर से दौड़ना जाने के लिए जा रहा हूँ मेरी फाइल को बचाने के बाद buggy1 बनाते हैं।
और देखा, यह काम किया है।
और अगर मैं ./buggy1 करते हैं और, में टाइप करने के लिए उदाहरण के लिए, Zamyla, मैं अब हैलो मिल जाएगा,
Zamyla के बजाय, हैलो, दुनिया।
>> ठीक है।
तो यहाँ takeaways तो कर रहे हैं, एक, के रूप में ज्यादा के रूप में आप कर सकते हैं बीनना करने की कोशिश
अकेले त्रुटि संदेश से, तलाश पहचानने शब्दों में से कुछ पर।
को छोड़कर कि, प्रति help50 का उपयोग समस्या सेट विनिर्देश।
लेकिन छोड़कर वह भी, हमेशा देखो शीर्ष त्रुटि पर ही है, कम से कम
प्रारंभ में, देखने के लिए क्या जानकारी यह वास्तव में उपज हो सकती है।
लेकिन यह वहाँ है पता चला है और भी अधिक कार्यक्षमता बनाया
CS50 पुस्तकालय में मदद करने के लिए आप पर जल्दी सेमेस्टर में
और जल्दी पर प्रोग्रामिंग में यह पता लगाने की क्या गलत हो रहा है।
तो चलो एक और उदाहरण यहाँ क्या करते हैं।
मैं, जो इस buggy2 फोन करने के लिए जा रहा हूँ, फिर, बाहर त्रुटिपूर्ण होने जा रहा है
गेट, डिजाइन द्वारा की।
>> और मैं आगे जाने के लिए जा रहा हूँ और # शामिल करना।
और फिर मैं int मुख्य (शून्य) क्या करने जा रहा हूँ।
और फिर मैं एक पाश के लिए क्या करने जा रहा हूँ।
(मैं int _ 0।
मैं कम से कम या 10 के बराबर है।
मैं ++, और फिर घुंघराले ब्रेसिज़ में, मैं जा रहा हूँ प्रिंट आउट करने के लिए यहाँ सिर्फ एक हैशटैग
और एक नई लाइन चरित्र।
>> इस के साथ मेरी मंशा तो कार्यक्रम काफी बस है
10 बार पुनरावृति और प्रत्येक यात्रा पर
कि पाश हर बार की चक्र के माध्यम से,
एक हैशटैग के बाहर प्रिंट, एक हैशटैग, एक हैशटैग।
मैं क्योंकि एक प्रति पंक्ति वहां नई लाइन है।
और उसके लिए याद करते हैं पाश, पिछले week-- प्रति
और आप अधिक मिलेगा वाक्य रचना के साथ परिचित
अभ्यास के साथ इसे का उपयोग करके long-- से पहले यह मुझे देता है
एक चर मैंने फोन किया और यह 0 से तय करता है।
>> इस पर मैं वेतन वृद्धि 1 से हर चलना।
तो मैं 2 से 3 करने के लिए 1 के लिए चला जाता है।
और फिर इस हालत में अर्द्ध कॉलन बीच बीच
कराने के लिए हर यात्रा पर जाँच की जाती है यकीन है कि हम सीमा के भीतर अभी भी कर रहे हैं।
तो मैं 10 बार पुनरावृति करना चाहते हैं, तो मैं राशि की तरह बहुत intuitively सिर्फ
10 मेरे ऊपरी बाध्य वहाँ के रूप में डाल दिया।
>> और फिर भी, जब मैं इस चलाते हैं, के बाद मेकअप के साथ यह संकलन buggy2--
और यह ठीक संकलन करता है।
तो मैं एक की जरूरत नहीं है सिंटेक्स त्रुटि इस बार।
मुझे आगे अब चलते हैं और buggy2 चलाने के लिए, दर्ज करें।
और अब ऊपर स्क्रॉल।
और मुझे वृद्धि करते हैं खिड़की के आकार।
>> मैं करने के लिए लग रहे हैं 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11।
तो वहाँ, 11 हैशटैग है, भले ही मैं स्पष्ट रूप से इस लूप के अंदर 10 डाल दिया।
अब, आप में से कुछ को तुरंत देख सकते हैं क्या त्रुटि है, क्योंकि वास्तव में, यह है
एक बहुत ही मुश्किल त्रुटि को बनाने के लिए नहीं है।
लेकिन यह बहुत सामान्य है बहुत जल्दी पर बनाया है।
>> क्या मैं बाहर बात करना चाहता है, हालांकि, , कैसे मैं यह समझ सकता है?
खैर, यह पता चला है कि CS50 पुस्तकालय आता है
न केवल get_string और get_int साथ और get_float और अन्य कार्यों।
यह भी एक विशेष समारोह के साथ आता है कहा जाता है eprintf, या, त्रुटि printf।
और यह पूरी तरह से मौजूद है बनाने के लिए यह आप के लिए एक छोटा सा आसान
जब बस के लिए अपने कोड डिबगिंग स्क्रीन पर एक त्रुटि संदेश मुद्रित
और पता है कि यह कहाँ से आया।
>> तो उदाहरण के लिए, एक बात मैं हो सकता है यहाँ क्या इस समारोह के साथ this-- है
eprintf, और फिर मैं आगे जाने के लिए जा रहा हूँ और कहते हैं कि मैं अब% है मैं, बैकस्लैश, एन।
और मैं मैं के मूल्य में प्लग करने के लिए जा रहा हूँ।
और ऊपर, इस वजह CS50 पुस्तकालय में है,
मैं आगे जाने के लिए जा रहा हूँ और शामिल
इसलिए मैं इस समारोह के लिए उपयोग किया है।
लेकिन हम विचार करते हैं क्या लाइन 9 कर रही हो जाता है।
मैं अंत में इसे हटाना जा रहा हूँ।
यह कुछ नहीं करना है मेरे व्यापक लक्ष्य के साथ।
लेकिन eprintf, त्रुटि printf, बस मतलब है मुझे कुछ नैदानिक ​​जानकारी देने के लिए।
जब मैं अपने कार्यक्रम चलाने के लिए, मैं चाहता हूँ अस्थायी रूप से स्क्रीन पर यह देखने के
के रूप में अच्छी तरह से सिर्फ समझने के लिए क्या चल रहा है।
>> और, वास्तव में, पर प्रत्येक 9 लाइन के यहां चलना
मैं देखना चाहता हूँ, मैं का मूल्य क्या है?
मैं का मूल्य क्या है?
और उम्मीद है, मैं केवल चाहिए उस संदेश भी 10 बार देखते हैं।
>> तो मुझे आगे जाना है और मेरे प्रोग्राम कंपाइल,
मैं किसी भी समय क्या करना है के रूप में मैं एक परिवर्तन करते हैं। ./buggy2।
और now-- ठीक है।
वहाँ एक बहुत अधिक चल रहा है।
तो मुझे में स्क्रॉल एक भी बड़ा खिड़की।
>> और आप उस के प्रत्येक देखेंगे हैशटैग अभी भी मुद्रण है।
लेकिन बीच में उनमें से प्रत्येक अब यह है नैदानिक ​​उत्पादन इस प्रकार के रूप में स्वरूपित।
मेरे कार्यक्रम का नाम यहाँ buggy2 है।
फ़ाइल का नाम buggy2.c है।
लाइन नंबर से इस छपा था 9 लाइन है।
और फिर उस के अधिकार के लिए है कि मैं उम्मीद कर रहा हूँ त्रुटि संदेश।
>> और क्या अच्छा के बारे में यह है कि क्या है अब मैं यह जरूरी गिनती के लिए नहीं है
मेरे सिर में क्या अपने कार्यक्रम कर रही है।
मैं उस पर देख सकते हैं पहली यात्रा में मैं 0 है,
तो 1, तो 2, तो 3, तो 4, तो 5, फिर 6, फिर 7, 8 तब, उसके बाद 9, तो
10।
तो एक मिनट रुको।
यहाँ क्या चल रहा है?
मैं अभी भी गिनती होने लगते हैं के रूप में 10 से ऊपर का इरादा।
>> लेकिन मैं कहाँ शुरू किया था?
0, 1, 2, 3, 4, 5, 6, 7, 8, 9 10।
तो 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11 वीं 10-- उंगली
समस्या का संकेत है।
मैं गिना गए लगते हैं गलत तरीके से अपने पाश में।
10 पुनरावृत्तियों जाने के बजाय, मैं 0 पर शुरू कर रहा हूँ,
मैं कम और 10 के माध्यम से खत्म होने वाली हूँ।
लेकिन क्योंकि, एक कंप्यूटर की तरह, मैं 0 पर गिनती शुरू कर रहा हूँ,
मैं गिन किया जाना चाहिए करने के लिए, लेकिन 10 के माध्यम से, नहीं।
>> और तो ठीक है, मैं अंत में यहाँ का एहसास है, दो चीजों में से एक है।
मैं बहुत आसानी से कह सकते हैं कम से कम 10 तक गिनती।
तो 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, जो है, वास्तव में, सही,
यहां तक ​​कि यह एक छोटे से गलत लगता है यद्यपि।
या मैं क्या कर सकता है की तुलना में कम या बराबर 9 के लिए इतने लंबे समय मैं 0 में शुरू के रूप में।
या तुम सच में पसंद नहीं है, तो आप के माध्यम से 10 तक गिनती लेकिन 1 पर शुरू कर सकते हैं।
लेकिन फिर, यह बस नहीं है कि आम है।
programming-- यद्यपि में Scratch-- में इतना नहीं
लेकिन प्रोग्रामिंग में सी और अन्य भाषाओं,
जावास्क्रिप्ट और पसंद अजगर और दूसरे, यह है
अभी के लिए बहुत आम बाइनरी की हमारी चर्चा
बस गिनती शुरू करने के लिए सबसे कम संख्या आप कर सकते हैं, जो 0 है।
ठीक है।
तो यह है कि eprintf है।
और फिर, अब मुझे पता लगा है कि मेरे समस्या है, और मैं 0 करने के लिए वापस जाने के लिए जा रहा हूँ
कम से कम 10 के माध्यम से, मैं जा रहा हूँ में जाने के लिए और eprintf हटाने के लिए।
>> यह वहाँ नहीं होना चाहिए जब मैं मेरे कोड जहाज या मेरे कोड प्रस्तुत
या इसे किसी और को दिखाने के लिए।
यह वास्तव में सिर्फ मतलब है अस्थायी रूप से इस्तेमाल किया जाएगा।
लेकिन अब मैं यह तय कर लिया है साथ ही विशेष समस्या नहीं है।
>> ठीक है, चलो एक और उदाहरण यहाँ क्या करते हैं कि मैं कोड़ा प्रकार के रूप में जा रहा हूँ।
मैं आगे जाने के लिए जा रहा हूँ और #शामिल । $ 50
और मैं आगे जाने के लिए जा रहा हूँ और # शामिल।
>> और मुझे बचाने के लिए जा रहा हूँ इस फ़ाइल buggy3.c के रूप में।
और मैं आगे जाने के लिए जा रहा हूँ और घोषणा int मुख्य (शून्य)।
और फिर वहाँ के अंदर मैं मैं int करने जा रहा हूँ _ -
मैं एक कार्यक्रम को लागू करना चाहते हैं एक get_negative_int के साथ।
यह एक समारोह अभी तक मौजूद है कि नहीं है।
इसलिए हम को लागू करने के लिए जा रहे हैं यह बस एक पल में।
लेकिन हम क्यों देखने के लिए जा रहे हैं यह पहली बार दर्रे पर छोटी गाड़ी है।
और एक बार मैं डाल दिया है उपयोगकर्ता से एक पूर्णांक,
मैं सिर्फ% मैं मुद्रित करने के लिए जा रहा हूँ एक नकारात्मक है पूर्णांक, बैकस्लैश, एन, अल्पविराम, मैं।
दूसरे शब्दों में, यह सब मैं इस कार्यक्रम के लिए करना चाहते हैं
से एक नकारात्मक int मिलता है उपयोगकर्ता और फिर बाहर प्रिंट
कि इस तरह के और इस तरह के एक नकारात्मक int है।
>> अब मैं इस समारोह को लागू करने की जरूरत है।
तो मेरी फाइल में बाद में, मैं जा रहा हूँ आगे और एक समारोह में कहा जाता घोषित
get_negative_int (शून्य) - और हम करेंगे करने के लिए वापस आने के लिए क्या मतलब है कि लाइन फिर से
एक moment-- int n में; do-- Do following-- printf n है :.
और फिर मैं n क्या करने जा रहा हूँ - get_int, और इस जबकि एन 0 से अधिक है।
और फिर n लौटने के ;.
>> तो एक बहुत में चल रहा है इस पर जो कोई भी हम नहीं
कम से कम संक्षेप में पिछले सप्ताह कम लग रही है।
तो यहाँ लाइन 10 पर मैं घोषित किया है एक समारोह get_negative_int कहा जाता है,
और मैं डाल दिया है (शून्य), में कोष्ठक, कारण यह जा रहा है
एक इनपुट नहीं ले करता है।
मैं कुछ भी नहीं गुजर रहा हूँ इस समारोह के लिए।
मैं बस कुछ इसे से वापस हो रही है।
>> और क्या मैं उम्मीद कर रहा हूँ वापस पाने के लिए एक पूर्णांक है।
वहाँ में कोई डेटा प्रकार है सी negative_int बुलाया।
यह सिर्फ int है, तो यह जा रहा है सुनिश्चित करने के लिए हम पर होना करने के लिए
कि मूल्य वास्तव में है कि वापस नहीं केवल एक int है
लेकिन यह भी नकारात्मक है।
>> लाइन 12 पर मैं एक चर घोषणा कर रहा हूँ n और int प्रकार की इसे बनाने का आह्वान किया।
और फिर लाइन 13 में से 18 के माध्यम से मैं कर रहा हूँ कुछ कर रही है, जबकि कुछ सच है।
मैं आगे और मुद्रण जा रहा हूँ n है, पेट, और फिर एक जगह है,
उपयोगकर्ता के लिए एक संकेत की तरह।
>> मैं तो get_int बुला रहा हूँ और अपनी तथाकथित वापसी मान के भंडारण
उस चर n में।
लेकिन मैं कर रखने के लिए जा रहा हूँ इस जबकि एन 0 से अधिक है।
दूसरे शब्दों में, उपयोगकर्ता मुझे एक देता है int और यह संख्या 0 से अधिक है,
फलस्वरूप, सकारात्मक, मैं जा रहा हूँ सिर्फ उपयोगकर्ता reprompting रखने के लिए,
reprompting रखने के लिए, उन्हें करने के लिए मजबूर द्वारा सहयोग और मुझे एक नकारात्मक int दे।
>> और एक बार n वास्तव में negative-- है उपयोगकर्ता लगता है अंत में प्रकार -50,
तो इस समय पाश अब सच है क्योंकि -50 0 से अधिक नहीं है।
तो हम उस से बाहर तोड़ने पाश तार्किक और एन वापसी।
>> लेकिन एक अन्य है बात मुझे क्या करना है।
और मैं बस यह कर सकते हैं कॉपी करने और चिपकाने से
फ़ाइल के शीर्ष पर कोड की एक पंक्ति।
मैं, बजना सिखाने की जरूरत है या बजना करने के लिए वादा करता हूँ,
स्पष्ट है कि मैं लूंगा, वास्तव में, जाने के लिए और लागू
इस समारोह get_negative_int।
यह सिर्फ फ़ाइल में कम हो सकता है।
फिर, याद है कि बजना ऊपर से नीचे बातों पर लिखा है,
सही करने के लिए छोड़ दिया, तो तुम नहीं कर सकते यदि बजना एक समारोह कॉल
यह अस्तित्व में हो रहा है पता नहीं है।
>> अब, दुर्भाग्य से, इस कार्यक्रम, के रूप में आप में से कुछ देखा हो सकता है,
पहले से ही छोटी गाड़ी है।
मुझे आगे जाना है और buggy3 कर दूं।
यह संकलन करता है, तो मेरी समस्या अब नहीं है कोई सिंटैक्स त्रुटि, एक शाब्दिक त्रुटि की तरह,
यह वास्तव में एक तार्किक होने जा रहा है त्रुटि है कि मैं जानबूझ कर किया है
करने के लिए एक अवसर के रूप में बनाया क्या हो रहा है के माध्यम से कदम।
>> मैं आगे जाने के लिए जा रहा हूँ अब और buggy3 चलाते हैं।
और मैं जाने के लिए जा रहा हूँ आगे और नहीं सहयोग करते हैं।
मैं यह संख्या 1 देने के लिए जा रहा हूँ।
यह ऐसा नहीं था, इसलिए यह मुझे फिर से उत्साह है।
>> कैसे के बारे में 2?
3?
50?
उन में से कोई भी काम कर रहे हैं।
कैसे -50 के बारे में?
और कार्यक्रम काम करने लगता है।
>> मुझे यह एक बार फिर कोशिश करते हैं।
मेरे -1 की कोशिश करते हैं, काम करने लगता है।
मेरे -2 की कोशिश करते हैं, काम करने लगता है।
मुझे 0 कोशिश करते हैं।
हं, कि गलत है।
अब, हम यहाँ एक छोटे से पंडिताऊ किया जा रहा हो।
लेकिन यह है, वास्तव में, मामला यह है कि 0 न तो सकारात्मक और न ही नकारात्मक है।
और तो तथ्य यह मेरे कार्यक्रम है कि कह रही है, कि 0 एक नकारात्मक पूर्णांक है
कि तकनीकी रूप से सही नहीं है।
>> अब, यह यह क्यों कर रहा है?
खैर, यह स्पष्ट हो सकता है।
और, वास्तव में, इस कार्यक्रम है काफी सरल होने का मतलब
इसलिए हम पता लगाने के लिए कुछ है।
>> लेकिन एक तिहाई डिबगिंग परिचय तकनीक यहाँ debug50 बुलाया।
तो यह एक कार्यक्रम है हम अभी बनाया है कि
इस साल कहा जाता debug50 कि आप की अनुमति देगा
का उपयोग करने के लिए क्या एक निर्मित में कहा जाता है CS50 आईडीई में चित्रमय डिबगर।
और एक डिबगर सिर्फ एक प्रोग्राम है कि आम तौर पर आप अपने प्रोग्राम चलाने देता है
लेकिन कदम, लाइन से कदम से कदम लाइन से लाइन द्वारा, रोक, poking
चारों ओर, चर पर विचार कर रही है, ताकि कार्यक्रम सिर्फ आप अतीत झटका नहीं है
और जल्दी से कुछ प्रिंट या कुछ और नहीं मुद्रित।
यह आप का अवसर देता है, पर मानव गति, इसके साथ बातचीत करने के लिए।
>> और ऐसा करने के लिए, आप बस निम्नलिखित है।
अपने कोड संकलन के बाद, जो मैं पहले से ही था, buggy3,
तुम आगे बढ़ो और debug50 ./buggy चलाते हैं।
इतना पसंद help50 आप चलाने के लिए है help50 और फिर कमान,
debug50 आप debug50 चला गया है और उसके बाद कमांड का नाम।
>> अब देखना मेरा स्क्रीन पर क्या होता है, विशेष रूप से दाएँ हाथ की ओर।
जब मैं चला, के सभी हिट अचानक इस दाएँ हाथ के पैनल
स्क्रीन पर खुल जाता है।
और वहाँ एक बहुत जा रहा है पहली नज़र में पर।
लेकिन वहाँ भी नहीं है के बारे में अभी तक चिंता करने की ज्यादा।
>> यह मुझे सब कुछ दिख रहा है कि अपने कार्यक्रम के अंदर जा रहा है
अभी और इन के माध्यम से बटन शीर्ष तो है
मुझे मेरे कोड के माध्यम से कदम के लिए अनुमति अंत में कदम से कदम से कदम।
लेकिन न सिर्फ अभी तक।
सूचना है कि क्या होता है।
मेरे टर्मिनल विंडो पर मैं n के लिए प्रेरित किया जा रहा हूँ।
और मैं आगे जाने के लिए जा रहा हूँ और इस समय और -1 में टाइप सहयोग करते हैं।
और यद्यपि एक छोटे cryptically, -1 एक नकारात्मक पूर्णांक, उम्मीद के रूप में है।
>> और फिर बच्चे के साथ बाहर हुआ स्थिति 0 gdbserver निकल।
GDB, जीएनयू Debugger, नाम है अंतर्निहित सॉफ्टवेयर की
कि इस डिबगर लागू करता है।
लेकिन यह सब वास्तव में इसका मतलब है, डिबगर दूर चला गया क्योंकि मेरे प्रोग्राम से बाहर
और सब कुछ ठीक था।
मैं वास्तव में अपने कार्यक्रम डिबग करने के लिए चाहते हैं, मैं, preemptively debug50 बताने के लिए है
मैं कहाँ शुरू करने के लिए करना चाहते हैं मेरे कोड के माध्यम से कदम?
>> और शायद सबसे आसान तरीका है कि इस प्रकार के रूप में है करने के लिए।
अगर मैं पर हॉवर मेरे संपादक के गटर यहाँ,
इसलिए वास्तव में सिर्फ साइडबार में यहाँ, लाइन नंबर के बाईं ओर,
सूचना है कि अगर मैं बस क्लिक करें एक बार, मैं एक छोटे लाल डॉट डाल दिया।
और कहा कि छोटे लाल बिंदी, एक बंद हस्ताक्षर की तरह है, जिसका अर्थ है, हे,
debug50, मेरे कोड का ठहराव निष्पादन सही वहाँ जब मैं इस कार्यक्रम चलाते हैं।
>> तो चलो करते हैं।
मुझे आगे जाना है और अपने कार्यक्रम चलाते हैं debug50 ./buggy3 के साथ फिर से दर्ज करें।
और अब, सूचना, कुछ अलग हुआ है।
मैं संकेत नहीं जा रहा हूँ अभी तक मेरी टर्मिनल विंडो में
कुछ के लिए, क्योंकि मैं नहीं किया है मेरे प्रोग्राम में अभी तक वहाँ मिल गया।
सूचना है कि 8 लाइन पर जो अब प्रकाश डाला है,
और वहाँ पर एक छोटा सा तीर है बाएं कहावत है, आप यहाँ रोक दिए गए हैं।
कोड, रेखा की यह पंक्ति 8, अभी तक क्रियान्वित नहीं किया गया है।
>> और क्या अगर मैं देखो, उत्सुक है दाएँ हाथ की ओर पर यहाँ पर,
सूचना है कि मैं एक स्थानीय है चर, इस अर्थ में स्थानीय
कि यह वर्तमान समारोह के अंदर है।
और इसकी कीमत, जाहिरा तौर पर डिफ़ॉल्ट रूप से, और तरह की सुविधा, 0 है।
लेकिन मैं 0 टाइप नहीं किया।
वह सिर्फ होना होता है इसकी पल में डिफ़ॉल्ट मान।
>> तो मुझे आगे जाना है और अब यह करते हैं।
मुझे आगे और पर चलते हैं शीर्ष यहीं, मैं हूँ
आगे जाने के लिए जा रहा है और यह पहली आइकन पर क्लिक करें जो
जिस पर कदम का मतलब को छोड़ नहीं है इसका मतलब है लेकिन यह कोड की इस लाइन पर कदम,
जिस तरह से साथ इसे क्रियान्वित।
>> और अब, नोटिस, मेरे शीघ्र सिर्फ बदल गया है।
ऐसा क्यों है?
मैं debug50 बता दिया है, कोड की इस पंक्ति को चलाते हैं।
कोड की इस पंक्ति क्या करता है?
मेरे एक पूर्णांक के लिए संकेत देता है।
ठीक।
मेरे सहयोग करते हैं।
मुझे आगे जाना है और अब टाइप -1, दर्ज करें।
और अब नोटिस क्या बदल गया है।
दाहिने हाथ की ओर, मेरे स्थानीय चर रहा
किया जा रहा -1 के रूप में अब संकेत दिया है।
और यह int प्रकार का अब भी है।
>> और नोटिस भी, मेरे तथाकथित ढेर कहते हैं, मैं जहां थामने किया?
हम के बारे में अधिक बात करेंगे भविष्य में इस।
लेकिन कॉल स्टैक बस के लिए संदर्भित करता है क्या कार्यों के प्रस्ताव में वर्तमान में कर रहे हैं।
अभी यह सिर्फ मुख्य है।
और अभी केवल स्थानीय चर 1 के एक मूल्य के साथ मैं है।
>> और जब मैं अंत में इस लाइन पर कदम इधर, सही शीर्ष पर है कि एक ही चिह्न के साथ,
-1 एक नकारात्मक पूर्णांक है।
अब यह है कि घुंघराले ब्रेस के ऊपर रोक रहा है।
चलो यह अपनी बात करते चलो।
मुझे लगता है कि लाइन, और देखा पर कदम।
>> इसलिए नहीं कि सभी को बहुत शिक्षाप्रद अभी तक,
लेकिन यह जाने दिया मुझे थामने और तार्किक माध्यम से लगता है
इस कार्यक्रम के लिए क्या कर रही है।
लेकिन यह है कि गलत मामला नहीं था।
इस प्रकार के रूप में की यह फिर से करते हैं।
>> मुझे लगता है कि ब्रेकप्वाइंट छोड़ने के लिए जा रहा हूँ लाल बिंदी के साथ लाइन 8 पर।
मैं फिर से दौड़ना debug50 करने जा रहा हूँ।
यह स्वचालित रूप से यहां रुका हुआ है।
लेकिन इस बार, बजाय इस लाइन पर कदम,
मुझे वास्तव में के अंदर जाने दिया get_negative_int और यह पता लगाने,
यही कारण है कि यह एक वैध जवाब के रूप में 0 स्वीकार कर रहा है?
>> तो कदम पर क्लिक करने के बजाय।
मैं आगे जाने के लिए जा रहा हूँ और कदम क्लिक करें।
और वह है कि लाइन 8 नोटिस अब अचानक अब प्रकाश डाला
लाइन 17 हो जाता है।
>> अब, यह है कि डिबगर नहीं है लाइनों 14 और 15 और 16 को छोड़ दिया गया है।
यह सिर्फ वहाँ कुछ भी नहीं है है तुम वहाँ दिखाने के लिए।
उन सिर्फ चर घोषणा कर रहे हैं, और फिर वहाँ शब्द क्या है
और फिर एक खुला घुंघराले ब्रेस।
केवल कार्यात्मक रेखा है कि रसदार वास्तव में यह एक यहां, 17 है।
और वह है जहाँ हम है है स्वचालित रूप से रुका हुआ है।
>> तो printf ( "n.is:") ;, इसलिए जो कि अब तक नहीं हुआ है।
तो चलो आगे जाना है और पर कदम क्लिक करते हैं।
अब मेरी शीघ्र, वास्तव में, करने के लिए बदल ( "n है:")।
अब get_int, मैं नहीं जा रहा हूँ में घुसने परेशान करने के लिए,
क्योंकि उस समारोह था लाइब्रेरी में CS50 द्वारा की गई।
यह शायद सही है।
>> तो मैं आगे जाने के लिए जा रहा हूँ और एक तरह से यह देकर सहयोग
एक int, लेकिन नहीं एक नकारात्मक इंट।
तो मुझे आगे जाना है और 0 से मारा।
और अब यहाँ क्या होता है 21 लाइन के लिए जब मैं नीचे मिलता है?
मैं फिर से दोहराया नहीं है।
मुझे लगता है कि पाश में फंस गया हो ऐसा नहीं लगता है।
दूसरे शब्दों में, इस पीले पट्टी के चारों ओर जा रहा नहीं रखा था,
और चारों ओर, और चारों ओर।
>> अब, ऐसा क्यों है?
खैर, एन, क्या अब ठीक n है?
मैं स्थानीय पर देख सकते हैं debugger में चर।
एन 0 है।
ठीक है, मेरी हालत क्या थी?
>> 20-- लाइन 20, ठीक है, 0 0 से अधिक है।
वह सच नहीं है।
0 0 से अधिक नहीं है।
और इसलिए मैं इस से बाहर तोड़ दिया।
>> और तो यही कारण है कि लाइन पर है 21, मैं वास्तव में जारी है,
मैं 0 वापस करने के लिए जा रहा हूँ, भले हालांकि मैं 0 खारिज कर दिया जाना चाहिए था
के रूप में वास्तव में नकारात्मक नहीं किया जा रहा।
तो अब, मैं वास्तव में भी नहीं है डिबगर के बारे में परवाह है।
यह, मैं करने की जरूरत नहीं मिला पता है क्या और अधिक जा रहा है।
>> तो मैं आगे जाने के लिए जा रहा हूँ और सिर्फ खेलने के बटन पर क्लिक करें,
और यह खत्म करते हैं।
अब, मुझे लगता है कि एहसास हुआ है मेरी बग लाइन 20 पर जाहिरा तौर पर है।
यही कारण है कि मेरी तार्किक त्रुटि है।
>> और तो क्या मैं चाहता हूँ इस परिवर्तन के लिए क्या करना है?
समस्या यह है कि अगर मैं नहीं हूँ 0 पकड़ने, यह सिर्फ एक तार्किक त्रुटि है।
और मैं कह सकता है, जबकि n से अधिक या 0 के बराबर है,
उपयोगकर्ता को बार-बार याद दिलाने की क्रिया रहते हैं।
>> तो, फिर से, साधारण गलती, शायद यहां तक ​​कि स्पष्ट है जब तुमने मुझे देखा
यह बस कुछ ही मिनट पहले लिखें।
लेकिन यहाँ takeaway है डिबग 50 के साथ कि,
और डिबगिंग के साथ सॉफ्टवेयर और अधिक आम तौर पर,
आप को इस नए पाया शक्ति है अपने खुद के कोड के माध्यम से चलना, देखो
कि दाहिने हाथ पैनल के माध्यम से क्या आपके चर मान रहे हैं।
तो आप जरूरी नहीं है कुछ का उपयोग करने के लिए है
आप की तरह उन मूल्यों को मुद्रित करने के लिए eprintf।
आप वास्तव में उन्हें देख सकते हैं नेत्रहीन स्क्रीन पर।
>> अब, इस के अलावा, यह ध्यान देने योग्य है वहाँ एक और तकनीक है कि है कि
वास्तव में सुपर आम है।
और आप शायद पता नहीं क्यों इस छोटी सी यहां पुरुष मंच पर बैठा दिया गया है।
तो इस तकनीक है, आम तौर पर रबर बतख डिबगिंग के रूप में जाना जाता है,
जो वास्तव में सिर्फ एक है इस तथ्य को वसीयतनामा
कि अक्सर जब प्रोग्रामर कोड लिख रहे हैं,
वे जरूरी नहीं हो दूसरों के साथ सहयोग,
या एक साझा वातावरण में काम कर रहे।
>> वे घर पर की तरह कर रहे हैं।
हो सकता है कि यह रात में देर हो चुकी है।
वे लगाने की कोशिश कर रहे हैं अपने कोड में कुछ बग बाहर।
और वे सिर्फ यह नहीं देख रहे हैं।
>> और कोई रूममेट है।
इसमें कोई टीएफ है।
वहाँ के आसपास कोई सीए है।
वे सब उनकी शेल्फ पर है इस छोटे से रबर लालित्य है।
>> और तो रबर बतख डिबगिंग सिर्फ इस निमंत्रण है
मूर्ख के रूप में कुछ सोचने के लिए इस रूप में एक असली प्राणी के रूप में,
और वास्तव में अपने कोड के माध्यम से चलना मौखिक रूप से इस निर्जीव वस्तु के लिए।
तो, उदाहरण के लिए, अगर यह मेरा उदाहरण है here--
और कहा कि पहले से याद करते हैं समस्या यह थी,
अगर मैं कोड की इस पहली पंक्ति को हटा दें, और मुझे आगे जाना है और फिर छोटी गाड़ी 0 बनाने,
याद है कि मैं इन थी यहाँ त्रुटि संदेश।
तो यहाँ विचार है, हालांकि मैं हास्यास्पद पल में लगता है कि यह सार्वजनिक रूप से कर रही है,
कि त्रुटि है।
>> ठीक है, तो मेरी समस्या यह है कि मैं है उलझाव से एक पुस्तकालय समारोह की घोषणा की।
और कहा कि पुस्तकालय समारोह printf है।
Declare-- ठीक है, घोषित मेरे प्रोटोटाइप की याद दिलाता है।
>> इसका मतलब है कि मैं वास्तव में करने की जरूरत है अग्रिम में संकलक बताओ कि क्या
समारोह की तरह लग रहा है।
एक मिनट रुकिए।
मैं मानक io.h. नहीं था
आपका बहुत बहुत धन्यवाद।
>> तो बस आप of-- इस प्रक्रिया वास्तव में एक बतख की जरूरत नहीं है।
लेकिन चलने के इस विचार अपने आप को अपने खुद के कोड के माध्यम से
तो आप भी सुना है कि अपने आप को, इतना है कि आप
अपने खुद में चूक का एहसास टिप्पणी, आम तौर पर विचार है।
>> और, शायद अधिक तार्किक रूप से, नहीं तो कि एक है, लेकिन अधिक शामिल साथ ज्यादा
उदाहरण हम सिर्फ छोटी गाड़ी 3.C में किया था, आप इसे माध्यम से अपने आप चल सकता है
निम्नलिखित नुसार।
तो सब ठीक है, रबर लालित्य, डीडीबी, अगर तुम जाएगा।
यहाँ हम अपने मुख्य समारोह में है, मैं नकारात्मक int मिल बुला रहा हूँ।
>> और मैं वापसी मूल्य मिल रहा है।
मैं बाएं हाथ की ओर यह भंडारण कर रहा हूँ एक चर में 8 लाइन पर मैंने कहा जाता है।
ठीक है, लेकिन रुकिए, कैसे किया जो उस मूल्य मिलता है?
मुझे लाइन 12 में समारोह पर नजर डालते हैं।
>> 12 लाइन में, हम नकारात्मक int मिलता है।
किसी भी जानकारी नहीं ले करता है, एक पूर्णांक के ठीक वापस नहीं करता।
मैं रेखा 14 एक चर n पर घोषणा।
यह एक पूर्णांक स्टोर करने के लिए जा रहा है।
मैं यही चाहता था।
>> तो निम्नलिखित जबकि एन है- चलो मेरे पूर्ववत क्या तय मैं पहले से ही बनाया है।
तो, जबकि एन से अधिक है 0, प्रिंट आउट n है, ठीक है।
और फिर कॉल int n में जमा हो।
और फिर जांच, अगर एन 0 है n not-- वहाँ यह है।
तो, फिर से, तुम नहीं करते वास्तविक बतख की जरूरत है।
लेकिन सिर्फ खुद के माध्यम से चल रहा एक बौद्धिक व्यायाम के रूप में अपने कोड
अक्सर आप में मदद मिलेगी एहसास क्या हो रहा है,
बस के रूप में कुछ कर रही करने का विरोध किया इस तरह, स्क्रीन घूर,
और अपने आप के माध्यम से बात नहीं कर रहा यह है, जो ईमानदारी से नहीं है
लगभग एक प्रभावी तकनीक के रूप में।
तो क्या तुम वहाँ यह है, एक विभिन्न तकनीकों की संख्या
वास्तव में अपने कोड डीबगिंग के लिए और गलती खोजने, जो सभी के लिए
अपने टूलकिट में उपकरण होना चाहिए कि आप रात में देर नहीं हो तो,
विशेष रूप से, आप भोजन में हो हॉल, या कार्यालय समय में,
के खिलाफ अपना सिर पीटने दीवार, कुछ समस्या को हल करने के लिए कोशिश कर रहा।
एहसास है कि वहाँ सॉफ्टवेयर उपकरण हैं।
वहाँ रबर बतख उपकरण हैं।
और वहाँ के एक पूरे स्टाफ है एक हाथ उधार देने के लिए इंतजार कर समर्थन करते हैं।
>> तो अब, इस समस्या पर एक शब्द सेट, और हम आप क्या उम्मीद कर रहे हैं पर
उनमें से बाहर निकलना, और कैसे हम मूल्यांकन के बारे में जाना।
प्रति पाठ्यक्रम के पाठ्यक्रम, CS50 की समस्या सेट
चार प्राथमिक कुल्हाड़ियों पर मूल्यांकन किया जाता है, तो गुंजाइश speak-- करने के लिए, शुद्धता, डिजाइन,
और शैली।
और गुंजाइश अभी कितना संदर्भित करता है टुकड़ा आप काट लिया है?
आप कैसे एक समस्या की बहुत कोशिश की है?
प्रयास का स्तर क्या आप प्रकट किया है?
>> शुद्धता, है के रूप में कार्यक्रम काम करता है यह CS50 विनिर्देश के अनुसार माना जाता है
जब आप कुछ जानकारी प्रदान या कुछ outputs वापस आ रहा है?
डिजाइन उनमें से ज्यादातर व्यक्तिपरक है।
और यह है कि विल के सबसे लंबे समय तक लेने के लिए सीखने के लिए
और सबसे लंबे समय तक पढ़ाने के लिए, में अब तक यह करने के लिए नीचे फोड़े के रूप में,
कैसे अच्छी तरह से लिखा अपने कोड है?
>> यह एक बात सिर्फ सही मुद्रित करने के लिए है outputs या सही मान।
लेकिन आप इसे के रूप में कर रहे हैं कुशलता से संभव के रूप में?
तुम यह विभाजन कर रहे हैं और जीत के लिए, या बाइनरी
खोज के रूप में हम जल्द ही देखेंगे कि हम किया था दो सप्ताह पहले फोन की किताब के साथ?
वहाँ हल करने के लिए बेहतर तरीके हैं समस्या आप वर्तमान में यहाँ से?
यही कारण है कि बेहतर डिजाइन के लिए एक अवसर है।
>> और फिर कैसे style-- सुंदर अपने कोड है?
तुम नोटिस हूँ कि मैं सुंदर हूँ मेरे कोड इंडेंट के बारे में विशेष रूप से,
और यकीन है कि मेरे चर बनाने यथोचित नाम हैं। n,
थोड़ी देर के लिए, एक के लिए एक अच्छा नाम है संख्या, एक गिनती पूर्णांक के लिए मैं,
एक स्ट्रिंग के लिए है।
और हम अब हो सकता है चर नाम शैली।
शैली बस कितना अच्छा है अपने कोड दिखता है?
और यह कैसे पठनीय है?
>> और समय के साथ, जो अपने TAs और TFS पाठ्यक्रम में क्या करेंगे
उस के साथ आप प्रदान कर रहा है गुणात्मक प्रतिक्रिया की तरह
इतनी है कि आप बेहतर हो उन विभिन्न पहलुओं पर।
और हम कैसे के मामले में इन कुल्हाड़ियों से प्रत्येक का मूल्यांकन,
यह बहुत कुछ के साथ आमतौर पर है बाल्टी इतनी है कि आप, आम तौर पर,
आप कितनी अच्छी तरह से कर रहे हैं की भावना हो।
और, वास्तव में, तुम पर एक अंक प्राप्त करते हैं उन axes-- शुद्धता, डिजाइन के किसी भी
और शैली especially-- कि संख्या आम तौर पर 1 और 5 के बीच होगा।
और, सचमुच, तुम हो रही है, तो सत्र की शुरुआत में 3 है,
यह एक बहुत ही अच्छी बात है।
इसका मतलब यह है कि वहाँ अभी भी है सुधार की गुंजाइश,
आप में उम्मीद करेंगे जो पहली बार के लिए एक क्लास लेने।
वहाँ उम्मीद है कि छत के कुछ सा है जो करने के लिए आप तक पहुंचने के लिए इच्छुक रहे हैं।
और तो 3 'पर हो रही है जल्द से जल्द टुकड़े,
नहीं तो कुछ 2 और 4 की, , वास्तव में, एक अच्छी बात है।
यह अच्छी तरह से सीमा के भीतर है, अच्छी तरह से उम्मीदों के भीतर।
>> और अगर आपके मन में दौड़ रहा है, इंतजार एक मिनट, तीन से पांच के बाहर।
यही कारण है कि वास्तव में 10 की एक 6 बाहर है।
यही कारण है कि 60% है।
हे भगवान, एक एफ है कि
>> यह।
यह नहीं है, वास्तव में है।
दरअसल, यह सुधार करने के लिए एक अवसर है सेमेस्टर के पाठ्यक्रम पर।
और अगर आप कुछ हो रही है Poors, ये एक अवसर है
कार्यालय समय का लाभ लेने के लिए, निश्चित रूप से वर्गों और अन्य संसाधनों।
>> बेस्ट का अवसर है, वास्तव में, है आप अभी कितनी दूर है पर गर्व होना करने के लिए
सेमेस्टर के पाठ्यक्रम पर आते हैं।
इसलिए महसूस करते हैं, अगर कुछ भी नहीं वरना, तीन अच्छा है।
और यह समय के साथ विकास के लिए कमरे की अनुमति देता है।
>> कैसे उन कुल्हाड़ियों कर रहे हैं भारित, वास्तविक आप कर रहे हैं
हो रही अपने समय के सबसे अधिक खर्च करने जा रहा काम करने के लिए चीजें, सही ढंग से अकेले चलो।
और इसलिए शुद्धता के लिए जाता है साथ के रूप में, सबसे भारित किया
तीन के इस गुणक कारक है।
डिजाइन, यह भी महत्वपूर्ण है, लेकिन कुछ है कि आप जरूरी नहीं है
उन घंटे के सभी पर खर्च चीजें सिर्फ काम करने के लिए प्राप्त करने की कोशिश।
>> और इसलिए यह भारित है एक छोटे से अधिक हल्के से।
और फिर शैली कम से कम भारित है।
यहां तक ​​कि यह भी कम नहीं है, हालांकि मूल रूप से महत्वपूर्ण,
यह सिर्फ, शायद, आसान बात सही है,
उदाहरण हम नकल उतार व्याख्यान और इस खंड में करते हैं,
चीजों को अच्छी तरह से दांतेदार, और टिप्पणी की,
और इसके आगे के लिए सबसे आसान के बीच है बातें करते हैं और अधिकार पाने के लिए।
इसलिए इस तरह के रूप में, एहसास कि उन अंक हैं
कि काबू करने के लिए अपेक्षाकृत आसान कर रहे हैं।
>> और अब एक शब्द पर शैक्षणिक ईमानदारी this--।
तो पाठ्यक्रम के प्रति पाठ्यक्रम, आप देखेंगे
कोर्स है कि काफी इस के आसपास भाषा का सा।
और निश्चित रूप से इस मुद्दे को ले जाता है काफी गंभीरता से शैक्षणिक ईमानदारी।
>> हम गौरव प्राप्त किया है, बेहतर या बदतर के लिए,
के लिए भेजा होने के लिए हर साल अधिक अनुशासनात्मक कार्रवाई के लिए छात्रों को
सबसे अधिक किसी भी अन्य की तुलना में जाहिर है, कि मैं जानता हूँ।
यह जरूरी नहीं है इस तथ्य का संकेत
सीएस छात्रों, या CS50 छात्रों, हैं कि किसी से कम अपने सहपाठियों की तुलना में ईमानदार।
लेकिन वास्तविकता यह है कि इस दुनिया, इलेक्ट्रॉनिक, हम बस
प्रौद्योगिकीय है इस का पता लगाने का मतलब है।
>> इसके लिए हमारे लिए महत्वपूर्ण है कक्षा भर में निष्पक्षता
इस का पता लगाने, और बढ़ा है कि हम क्या मुद्दा है जब हम चीजों को देखते हैं।
और सिर्फ एक तस्वीर पेंट करने, और वास्तव में इस सिंक की तरह कुछ मदद करने के लिए,
इन की संख्या रहे हैं पिछले 10 साल से अधिक छात्र
कुछ में शामिल किया गया है कि शैक्षणिक ईमानदारी के इस तरह के मुद्दों,
कुछ 32 छात्रों के साथ गिरावट 2015, से जो
कहते हैं कि हम लेते है इस मामले को बहुत गंभीरता से।
और, अंत में, इन नंबरों रचना, सबसे हाल ही में, के बारे में 3%, 4% या तो
वर्ग की।
>> छात्रों के सुपर बहुमत के लिए तो ऐसा लगता है कि लाइनों स्पष्ट कर रहे हैं।
लेकिन इस रहते हो मन, विशेष रूप से देर से
रात में जब साथ संघर्ष एक समस्या सेट करने के लिए कुछ समाधान,
वहाँ तंत्र हैं कि अपने आप को बेहतर प्राप्त करने के लिए
आप से समर्थन हो सकता है लगता है, यहां तक ​​कि एक घंटे में।
एहसास जब कि हम प्राप्त छात्र प्रस्तुतियाँ, हम पार
इस साल हर प्रस्तुत की तुलना हर प्रस्तुत पिछले साल के मुकाबले,
2007 से हर प्रस्तुत खिलाफ, और के बाद से, पर देख रहे हैं और साथ ही,
कोड खजाने ऑनलाइन, चर्चा मंचों, नौकरी साइटों।
और हम यह उल्लेख है, वास्तव में, कारण सब
पूर्ण प्रकटीकरण के, कि अगर किसी और को यह ऑनलाइन खोज सकते हैं,
निश्चित रूप से, तो हम निश्चित रूप से कर सकते हैं।
लेकिन, वास्तव में, आत्मा बेशक नीचे फोड़े
पाठ्यक्रम में इस खंड के लिए।
यह वास्तव में सिर्फ, उचित होना है।
>> और उस पर विस्तृत करने के लिए हम था कि अगर बस थोड़ा और अधिक भाषा के साथ,
पता चलता है कि सभी का सार काम है कि आप इस पाठ्यक्रम के लिए प्रस्तुत
अपने दम होना चाहिए।
लेकिन उस के भीतर, वहाँ निश्चित रूप से कर रहे हैं अवसरों, और प्रोत्साहन,
और करने के लिए बदल में शैक्षणिक मूल्य अपने आप others--, TFS, सीए,
Tas, और, कक्षा में दूसरों समर्थन के लिए, अकेले चलो मित्र
और कमरे में रहते हैं, जो अध्ययन किया है सीएस और प्रोग्रामिंग से पहले।
और इसलिए वहाँ उस के लिए एक भत्ता है।
और अंगूठे के सामान्य नियम this-- जब मदद के लिए पूछ रहा है,
आप दूसरों को अपने कोड दिखा सकते हैं, लेकिन आप उनकी नहीं देख सकता है।
तो अगर आप कार्यालय समय पर कर रहे हैं, भले ही, या डी हॉल, वरना कहीं में
कुछ टुकड़े सेट पर काम कर रहे, एक दोस्त है, जो साथ काम
पर, पूरी तरह से ठीक है दिन अपने काम के अंत
अंत में प्रत्येक से संबंधित होना चाहिए आप में से क्रमशः, और नहीं
कुछ सहयोगात्मक प्रयास हो सकता है, अंतिम परियोजना जहां को छोड़कर
यह अनुमति दी है और प्रोत्साहित किया है।
>> एहसास आप कर रहे हैं कि कुछ के साथ संघर्ष
और अपने दोस्त सिर्फ होता है तो इस पर बेहतर होने के लिए आप,
या आप से है कि समस्या में बेहतर है, या थोड़ा आगे आप की तुलना में आगे,
इसे चालू करने के लिए पूरी तरह से उचित है अपने दोस्त को और, कहते हैं कि अरे,
आप यहाँ मेरे कोड को देख बुरा मत करो, मदद मुझे हाजिर क्या मेरा मुद्दा है?
और उम्मीद है, में शैक्षणिक मूल्य का ब्याज
उस दोस्त न सिर्फ करता है कहते हैं, ओह, यह करते हैं, बल्कि,
क्या आप लाइन पर याद कर रहे हैं 6, या ऐसा कुछ?
लेकिन समाधान नहीं है आप के बगल में दोस्त के लिए
कहने के लिए, ओह, ठीक है, यहाँ, मुझे खींच यह ऊपर है, और आप के लिए मेरी समाधान दिखा।
तो यह है कि रेखा है।
आप के लिए अपने कोड दिखाने दूसरों के लिए, लेकिन तुम नहीं कर सकते
उनकी देख, दूसरे के अधीन पाठ्यक्रम के पाठ्यक्रम में कमी।
>> तो मन में रखना है यह अफसोस खंड तथाकथित
पाठ्यक्रम के पाठ्यक्रम में के रूप में अच्छी तरह से, कि आप कुछ कृत्य है कि अगर
उचित नहीं है, लेकिन करने के लिए इसे लाने के लिए पाठ्यक्रम के सिर का ध्यान
72 घंटे के भीतर, ज़ाहिर स्थानीय प्रतिबंधों लगाया जा सकता है कि
एक असंतोषजनक शामिल हो सकते हैं या काम प्रस्तुत करने के लिए असफल ग्रेड।
लेकिन निश्चित उल्लेख नहीं होगा आगे अनुशासनात्मक कार्रवाई के लिए बात है,
बार-बार कृत्यों के मामलों को छोड़कर।
दूसरे शब्दों में, कुछ कर यदि आप करते हैं बेवकूफ, विशेष रूप से देर रात, निर्णय
कि अगली सुबह या दो दिन बाद में, तुम उठो और एहसास है,
मैं क्या सोच रहा था?
आप CS50 में क्या एक दुकान है कि समस्या फिक्सिंग के लिए
और यह करने के लिए मालिक, ताकि हम आप आधे रास्ते से मिलने और सौदा होगा
यह एक मामले में साथ है कि दोनों है शैक्षिक और आप के लिए मूल्यवान है,
लेकिन अभी भी कुछ रास्ते में दंडात्मक।
और अब, किनारे से दूर ले करने के लिए, यह।
>> [वीडियो प्लेबैक]
>> [संगीत बजाना]
>> [अंत प्लेबैक]
डेविड जे मालन: ठीक है, हम वापस आ रहे हैं।
और अब हम में से एक को देखो हमारी असली दुनिया डोमेन के पहले
CS50 में, क्रिप्टोग्राफी की कला है, भेजने और प्राप्त करने की कला
गुप्त संदेश, एन्क्रिप्टेड संदेशों अगर तुम जाएगा,
कि केवल आप ही है, तो मतलब निकाला जा सकता है कुछ प्रमुख घटक है कि इस
भी।
तो यह प्रेरित करने के लिए हम ले लेंगे यहां इस बात को देखो,
जो एक का एक उदाहरण है गुप्त डिकोडर अंगूठी है कि
के क्रम में पता लगाने के लिए इस्तेमाल किया जा सकता क्या एक गुप्त संदेश वास्तव में है।
वास्तव में, पीठ में ग्रेड स्कूल में दिन,
अगर आप कभी भी करने के लिए गुप्त संदेश भेजा कुछ दोस्त या कक्षा में कुछ क्रश,
तुम सोचा था कि हो सकता है आप चतुर जा रहे थे
कागज का टुकड़ा अपने बदलते पर रखकर की तरह, एक बी करने के लिए, और बी सी के लिए, और सी डी को,
इत्यादि।
लेकिन आप वास्तव में encrypting थे आपकी जानकारी के लिए, यहां तक ​​कि
अगर यह एक छोटी सी तुच्छ था, नहीं था कि कठिन शिक्षक का एहसास करने के लिए,
वैसे, अगर आप बस बदल ए और बी से सी बी को,
आप वास्तव में यह पता लगाने क्या संदेश था,
लेकिन आप जानकारी Ciphering में थे।
>> तुम सिर्फ यह क्या कर रहे थे बस, बहुत Ralphie की तरह यहाँ
एक प्रसिद्ध फिल्म कि नाटकों में बहुत ज्यादा विज्ञापन nauseum प्रत्येक सर्दियों।
[वीडियो प्लेबैक]
रहो यह है कि सभी के लिए जाना जाता है राल्फ पार्कर एतद्द्वारा है
लिटिल का सदस्य नियुक्त अनाथ एनी गुप्त सर्किल
और सभी सम्मान के हकदार है और लाभ बहां होने वाली।
>> -Signed, लिटिल अनाथ एनी, काउंटर पर हस्ताक्षर किए पियरे आंद्रे, स्याही में।
सम्मान और लाभ, पहले से ही नौ साल की उम्र में।
>> [चिल्ला]
-आ जाओ।
इसके साथ पर मिलता है।
मैं सब जाज की जरूरत नहीं तस्करों और समुद्री डाकुओं के बारे में।
>> के लिए -listen कल रात समापन साहसिक
काले समुद्री डाकू जहाज के।
अब इसके लिए समय आ गया है एनी गुप्त संदेश
आप गुप्त सर्किल के सदस्यों के लिए।
याद रखें, बच्चों, केवल सदस्यों एनी की सीक्रेट सर्किल के
एनी गुप्त संदेश को डिकोड कर सकते हैं।
>> याद रखें, एनी आप पर निर्भर करता है।
बी 2 के लिए अपने पिन सेट करें।
यहाँ संदेश है।
12, 11--
>> -मैं, में हूँ मेरा पहला गुप्त बैठक।
>> -14, 11, 18, 16।
>> -Pierre महान आवाज आज रात में किया गया था।
मुझे लगता है कि आज रात के बता सकता है संदेश वास्तव में महत्वपूर्ण था।
>> -3, 25, कि एक संदेश है एनी खुद से।
याद रखें, किसी को मत बताना।
>> -90 सेकंड बाद में, मैं केवल में हूँ घर में कमरे में जहां नौ का एक लड़का
गोपनीयता और व्याख्या में बैठ सकता है।
अहा, बी!
मैं अगले, ई करने के लिए चला गया
>> पहला शब्द होना है।
एस, यह आसान आ रहा था अब, यू, 25--
>> -ओह, Ralphie पर आते हैं, मुझे जाना है!
>> ठीक नीचे हो -I'll, मा!
हाइ - फाइ पढ़ाकू!
>> टी हे, है-- क्या करने के लिए सुनिश्चित हो यकीन है कि हो सकता है?
क्या छोटे अनाथ था एनी कहने की कोशिश?
क्या करने के लिए यकीन है कि हो सकता है?
>> -Ralphie, एंडी गया है जाओ, आप कृपया बाहर आ जाएगा?
>> -सभी सही, मा!
मैं सही बाहर हो जाएगा!
>> -मैं करीब अब हो रही थी।
तनाव भयानक था।
यह क्या था?
ग्रह के भाग्य अधर में लटका सकता है।
>> -Ralphie!
एंडी जाना होगा!
>> जोर से रोने के लिए सही बाहर हो -I'll!
>> वहाँ -Almost, मेरी उंगलियां उड़ गया, मेरे मन एक इस्पात जाल था, हर ताकना स्फूर्त।
यह लगभग स्पष्ट हो गया था, हाँ, हाँ, हाँ।
>> अपने Ovaltine पीने के लिए सुनिश्चित रहो।
Ovaltine?
एक फालतू वाणिज्यिक?
दुष्ट।
[अंत प्लेबैक]
डेविड जे मालन: ठीक है, तो कि एक बहुत लंबा रास्ता तय करना था
क्रिप्टोग्राफी शुरू करने की, और भी Ovaltine।
वास्तव में, इस वर्ष विज्ञापन से इधर, क्यों Ovaltine इतना अच्छा है?
यह परिपक्व के एक केंद्रित निष्कर्षण है जौ माल्ट, शुद्ध मलाईदार गाय का दूध,
और विशेष रूप से कोको तैयार, एक साथ प्राकृतिक phosphatides और विटामिन के साथ।
इसे आगे भी साथ दृढ़ है अतिरिक्त विटामिन बी और डी, यम।
और आप अभी भी यह, जाहिरा तौर पर प्राप्त कर सकते हैं अमेज़न पर, हम यहाँ के रूप में किया।
>> लेकिन प्रेरणा के लिए यहाँ था क्रिप्टोग्राफी लागू करने, विशेष रूप से
क्रिप्टोग्राफी का एक प्रकार से जाना जाता है गुप्त कुंजी क्रिप्टोग्राफी के रूप में।
और नाम का सुझाव है, पूरे के रूप में एक गुप्त कुंजी क्रिप्टो प्रणाली की सुरक्षा,
अगर तुम जाएगा, एक पद्धति सिर्फ पांव मार के लिए
दो लोगों के बीच जानकारी, वह यह है कि केवल इस केवल प्राप्तकर्ता
एक गुप्त key-- कुछ मूल्य पता है, कुछ गुप्त वाक्यांश, कुछ गुप्त नंबर, कि
उन दोनों को एन्क्रिप्ट करने के लिए अनुमति देता है और जानकारी को डिक्रिप्ट।
और क्रिप्टोग्राफी, वास्तव में, हफ्ते 0 से सिर्फ यह है।
>> यह एक समस्या है, जहां आदानों वहाँ है, अंग्रेजी में वास्तविक संदेश की तरह
या जो भाषा है कि आप कक्षा में किसी को भेजना चाहते हैं,
या इंटरनेट के पार।
वहाँ कुछ उत्पादन है, जो जा रहा है तले हुए संदेश हो सकता है कि आप
प्राप्तकर्ता प्राप्त करना चाहते हैं।
और अगर किसी में बीच यह भी प्राप्त करता है,
आप उन्हें नहीं करना चाहते हैं जरूरी यह डिक्रिप्ट करने में सक्षम हो,
इस वजह से अंदर ब्लैक बॉक्स, या एल्गोरिथ्म,
कुछ तंत्र, कदम से कुछ कदम है निर्देश, कि इनपुट लेने के लिए
और इसे में परिवर्तित उत्पादन, उम्मीद है कि एक सुरक्षित तरीके से।
>> कुछ और, वास्तव में, वहाँ है इस दुनिया में शब्दावली के रूप में निम्नानुसार है।
सादा पाठ शब्द एक है कंप्यूटर वैज्ञानिक होगा
इनपुट का वर्णन करने के लिए प्रयोग संदेश, अंग्रेजी की तरह
या जो भी आप वास्तव में भाषा कुछ अन्य मानव को भेजने के लिए चाहते हैं।
और फिर सिफर हाथापाई है enciphered के लिए, या एन्क्रिप्टेड,
संस्करण क्या है।
>> लेकिन एक अन्य घटक यहाँ है।
वहाँ करने के लिए एक अन्य इनपुट है गुप्त कुंजी क्रिप्टोग्राफी।
और उस कुंजी ही है, जो आम तौर पर, है,
जैसा कि हम देखेंगे, एक नंबर, या पत्र, या शब्द है, जो कुछ भी
एल्गोरिथ्म यह वास्तव में है उम्मीद है।
>> और आपको जानकारी कैसे डिक्रिप्ट कर सकता हूं?
आप इसे कैसे खोलना है?
ठीक है, तुम बस रिवर्स outputs और आदानों।
>> दूसरे शब्दों में, एक बार किसी अपने एन्क्रिप्टेड संदेश प्राप्त करता है,
वह या वह बस है कि एक ही कुंजी को पता है।
वे सिफर प्राप्त हुआ है।
और उन दो plugging द्वारा क्रिप्टो प्रणाली में आदानों,
एल्गोरिथ्म, इस ब्लैक बॉक्स से बाहर मूल प्लेन आना चाहिए।
और इतना है कि बहुत ही उच्च स्तर है क्या क्रिप्टोग्राफी वास्तव में है का दृश्य
बारे में सबकुछ।
>> तो चलो वहाँ मिलता है।
चलो अब नीचे नजर डालते हैं कुछ के हुड
हम के लिए के लिए दी ले जा रहा है पिछले एक सप्ताह से, और के लिए इस सत्र
स्ट्रिंग here--।
दिन के अंत में एक स्ट्रिंग सिर्फ पात्रों में से एक दृश्य है।
>> यह दुनिया नमस्ते हो सकता है, या हैलो Zamyla, या जो भी हो।
लेकिन यह है कि क्या मतलब है पात्रों के एक दृश्य हो सकता है?
वास्तव में, CS50 पुस्तकालय देता है हमें स्ट्रिंग नामक एक डेटा प्रकार।
>> लेकिन वहाँ वास्तव में है कोई सी में एक स्ट्रिंग के रूप में ऐसी बात
यह वास्तव में सिर्फ का एक दृश्य है चरित्र, चरित्र, चरित्र,
चरित्र, पीठ, को वापस करने के लिए, वापस, वापस करने के लिए, अंदर वापस करने के लिए
अपने कंप्यूटर की स्मृति, या राम के।
और हम उस में में गहरी लग रही हूँ भविष्य में जब हम, स्मृति खुद को देखो
और उपयोग, और खतरों है कि शामिल कर रहे हैं।
>> लेकिन स्ट्रिंग Zamyla पर विचार करते हैं।
तो बस के नाम मानव इधर, Zamyla,
इस बात का एक दृश्य है वर्ण, जेड-ए-एम-वाई-एल ए।
और अब लगता है कि चलो Zamyla का नाम एक कंप्यूटर के अंदर संग्रहित किया जा रहा है
कार्यक्रम।
>> खैर, यह कारण है कि हम चाहिए खड़ा है उन पात्रों को देखने के लिए सक्षम हो
व्यक्तिगत रूप से।
तो मैं सिर्फ एक छोटे से आकर्षित करने के लिए जा रहा हूँ यहाँ Zamyla का नाम चारों ओर बॉक्स।
और यह सी में मामला है कि जब आप Zamyla-- और हो सकता है की तरह, एक स्ट्रिंग है
कि स्ट्रिंग से वापस आ गया है मिल स्ट्रिंग की तरह एक समारोह में,
आप वास्तव में हेरफेर कर सकते हैं चरित्र से यह चरित्र।
>> अब, इस के लिए सार्थक है बातचीत के हाथ में है, क्योंकि
क्रिप्टोग्राफी में आप बदलना चाहते हैं एक बी करने के लिए, और बी सी के लिए, और डी के लिए सी,
और बहुत आगे है, आप में सक्षम होने की जरूरत है अलग-अलग पात्रों को देखने के लिए
एक स्ट्रिंग में।
आप को बदलने में सक्षम होने की जरूरत है कुछ और, A से Z
कुछ और, एम के लिए वरना, और इतने पर कुछ और।
और इसलिए हम एक तरह की जरूरत है, प्रोग्राम के जरिए, तो
बात करने के लिए सी में परिवर्तन करने में सक्षम होना करने के लिए और व्यक्तिगत पत्रों को देखो।
और हम इस प्रकार के रूप में कर सकते हैं।
>> मेरे CS50 आईडीई में वापस सिर चलते हैं।
और मुझे आगे चलते हैं और एक नई फ़ाइल बनाने
कि मैं इस समय string0 फोन करता हूँ, हमारी पहली इस तरह के उदाहरण के रूप में, डॉट सी।
और मैं आगे जाने के लिए जा रहा हूँ और यह सचेतक इस प्रकार है।
>> तो cs50.h शामिल है, और तो मानक io.h शामिल हैं,
जो मैं लगभग हमेशा के लिए जा रहा हूँ अपने कार्यक्रमों में उपयोग करते हुए, कम से कम हो
शुरू में।
मुख्य शून्य int, और फिर यहाँ मैं हूँ तार करने जा रहा स्ट्रिंग प्राप्त हो जाता है।
और फिर मैं करने जा रहा हूँ आगे जाना है और यह करते हैं।
मैं आगे जाना चाहता हूँ और, एक मानसिक स्वास्थ्य की जांच के रूप में,
बस का कहना है, हैलो, प्रतिशत है, सेमी कॉलन, स्ट्रिंग 0 बनाता है।
उह ओह, क्या मैं यहाँ क्या किया?
ओह, मैं यह प्लग में नहीं था।
तो सबक सीखा है कि जानबूझकर नहीं किया गया था।
>> तो त्रुटि, अधिक प्रतिशत डेटा तर्क से रूपांतरण।
और इस में जहां है, लाइन 7-- ठीक है, तो मेरे पास है,
बोली गंदें शब्द बोलना, कि मेरे स्ट्रिंग printf करने के लिए।
मैं एक प्रतिशत चिह्न मिल गया है।
लेकिन मैं दूसरा तर्क याद आ रही है।
>> मुझे याद आ रही अल्पविराम है, जो मैं पिछले उदाहरण में किया है।
तो एक अच्छा अवसर ठीक करने के लिए एक और गलती, गलती से।
और अब मुझे चलाते हैं Zamyla में string0, प्रकार।
Zamyla हैलो ठीक है,।
>> इसलिए हम कार्यक्रम के इस तरह भाग लिया अब कुछ अलग अलग समय।
लेकिन कुछ एक करते हैं छोटे से अलग इस बार।
इसके बजाय सिर्फ Zamyla की छपाई की printf के साथ बाहर पूरे नाम,
के चरित्र से यह चरित्र करते हैं।
>> मैं एक पाश के लिए उपयोग करने के लिए जा रहा हूँ।
और मैं अपने आप को देने के लिए जा रहा हूँ एक गिनती चर, मैंने फोन किया।
और मैं पुनरावृति को रखने के लिए जा रहा हूँ, इसलिए जब तक मैं एस की लंबाई की तुलना में कम है।
>> यह पता चला है, हम नहीं यह आखिरी बार करते हैं,
कि सी एक साथ आता है समारोह स्टर्लिंग बुलाया।
वापस दिन में, और सामान्य में अब भी जब कार्यों को लागू करने,
मनुष्य अक्सर बहुत चयन करेंगे संक्षिप्त नाम है कि ध्वनि की तरह
आप क्या चाहते हैं, यह बात भले ही तरह कुछ स्वर या पत्र गायब है।
तो स्टर्लिंग है एक समारोह का नाम है कि
के बीच एक बहस लेता है कोष्ठकों कि एक स्ट्रिंग होना चाहिए।
और यह सिर्फ एक पूर्णांक देता है, कि स्ट्रिंग की लंबाई।
>> 7 लाइन पर पाश के लिए यह इसलिए हो रहा है गिनती मैं 0 के बराबर होती है शुरू करने के लिए।
यह वेतन वृद्धि करने जा रहा है प्रत्येक यात्रा पर मैं
1 से, हम एक बार कुछ कर रहा है के रूप में।
लेकिन यह केवल करने जा रहा है बिंदु तक यह ऊपर
जब मैं लंबाई है स्ट्रिंग ही की।
>> तो इस का एक तरीका है, अंत में, पात्रों पर iterating
स्ट्रिंग के रूप में इस प्रकार है।
मुझे नहीं बाहर मुद्रित करने के लिए जा रहा हूँ एक पूरे स्ट्रिंग, लेकिन प्रतिशत सी,
एक ही चरित्र एक नई लाइन द्वारा पीछा किया।
और फिर मैं करने जा रहा हूँ आगे बढ़ो, और मैं की जरूरत है
मैं मुद्रित करना चाहते हैं कहने के लिए एस के ith चरित्र।
>> तो अगर मैं चर कि इंगित करता है स्ट्रिंग, जहां के सूचकांक
आप इसे में, मैं करने में सक्षम होने की जरूरत है कहते हैं, मेरे एस के ith चरित्र दे।
और ग करने का एक तरीका है वर्ग कोष्ठक के साथ इस।
आप बस के नाम का कहना है स्ट्रिंग, जो इस मामले में एस है।
तो फिर तुम वर्ग कोष्ठक कर रहे हैं, जो प्रयोग आम तौर पर सिर्फ अपनी वापसी या ऊपर दर्ज
कुंजीपटल पर कुंजी।
और फिर आप के सूचकांक डाल चरित्र है कि आप मुद्रित करना चाहते हैं।
इसलिए सूचकांक एक होने जा रहा है संख्या-0, या 1, या 2, या 3, या डॉट,
डॉट, डॉट, कुछ अन्य संख्या।
>> और हम यह सुनिश्चित है कि यह जा रहा है , सही संख्या हो सकता है क्योंकि मैं
0 पर गिनती शुरू।
और डिफ़ॉल्ट रूप से, पहले चरित्र एक स्ट्रिंग में सम्मेलन 0 से है।
और दूसरा चरित्र ब्रैकेट 1 है।
और तीसरा चरित्र ब्रैकेट 2 है।
और अगर आप भी जाने के लिए नहीं करना चाहती दूर है, लेकिन हम क्योंकि हम कर रहे हैं नहीं होगा
केवल यह जब तक मैं वेतन वृद्धि के लिए जा रहा स्ट्रिंग की लंबाई के बराबर होती है।
और जो बात, पाश के लिए यह बंद हो जाएगा।
>> तो मुझे आगे जाना है और इस को बचाने के कार्यक्रम है, और रन स्ट्रिंग 0 बनाते हैं।
लेकिन मैं बँधा हुआ।
परोक्ष पुस्तकालय समारोह की घोषणा इस तरह के प्रकार के साथ स्टर्लिंग और अब such--,
इस परिचित लगता है।
लेकिन यह printf नहीं है।
और यह स्ट्रिंग नहीं मिल रहा है।
>> मैं में पेंच नहीं था उसी तरह से इस बार।
लेकिन यहाँ नीचे नीचे एक छोटे से नोटिस आगे, शीर्षक string.h में शामिल हैं,
स्पष्ट रूप से प्रदान स्टर्लिंग के लिए घोषणा।
तो वहाँ वास्तव में वहाँ में एक संकेत है।
>> और वास्तव में यह पता चला है वहाँ एक हेडर फाइल है
कि हम इस्तेमाल नहीं किया है कक्षा में अभी तक है, लेकिन यह है
उपलब्ध उन लोगों के बीच आप के लिए, string.h बुलाया।
और उस फ़ाइल, string.h में स्टर्लिंग घोषित है।
तो मुझे आगे जाना है और इस बचाने के लिए, स्ट्रिंग बनाने
0-- अच्छा है, कोई त्रुटि संदेश इस बार।
>> ./string0 Zamyla, और मैं के बारे में दर्ज हिट करने के लिए कर रहा हूँ
पर जो बात GetString जा रहा है स्ट्रिंग लौटने के लिए, यह में डाल दिया।
पाश के लिए पुनरावृति करने के लिए जा रहा है तो उस एक समय में एस के पात्रों से अधिक,
और उन्हें प्रति पंक्ति एक प्रिंट, क्योंकि मैं अंत में है कि बैकस्लैश n था।
इसलिए मुझे लगता है कि बैकस्लैश न आना हो सकता है एन, और फिर बस Zamyla सभी प्रिंट
एक ही पंक्ति में, प्रभावी ढंग से reimplementing
printf, जो कि सभी के लिए उपयोगी नहीं है।
लेकिन इस मामले में, मुझे लगता है कि नहीं किया है।
मैं वास्तव में एक छपा है एक समय में चरित्र, प्रति पंक्ति एक,
इसलिए हम वास्तव में प्रभाव देखते हैं।
>> लेकिन मैं एक बात यहां ध्यान देना चाहिए।
और हम करने के लिए वापस आ गया हूँ एक भविष्य सप्ताह में यह।
यह यह है कि पता चला है कोड संभावित छोटी गाड़ी है।
>> यह पता चला है कि मिल स्ट्रिंग और जीवन में कुछ अन्य कार्यों
जरूरी नहीं हमेशा करना आप क्या उम्मीद कर रहे हैं वापसी।
हम कक्षा पिछले से पता यह है कि मिल में समय
स्ट्रिंग एक स्ट्रिंग वापस करने के लिए माना जाता है।
लेकिन क्या अगर उपयोगकर्ता प्रकार के बाहर इस तरह के एक लंबे शब्द, या पैरा, या निबंध
वहाँ अभी पर्याप्त नहीं है कि कंप्यूटर में स्मृति इसे फिट करने के लिए।
>> की तरह, क्या कुछ हो जाता है, तो हुड के नीचे क्या गलत है?
यह अक्सर नहीं हो सकता है, लेकिन यह एक बार हो सकता है
एक समय में, बहुत बार बार।
और इसलिए यह पता चला है कि मिल स्ट्रिंग और जरूरी नहीं है कि यह की तरह कार्य
हमेशा तार वापसी।
वे कुछ त्रुटि मान सकता है, कुछ प्रहरी मूल्य तो बात है,
वह यह है कि इंगित करता है कुछ गलत हो गया है।
और आप ही से यह पता होगा कक्षा में अब यह सीखा है,
या कुछ और प्रलेखन पढ़ने वाले।
यह पता चला है कि मिल स्ट्रिंग अशक्त नामक एक मूल्य वापसी कर सकते हैं।
अशक्त एक विशेष मूल्य है कि हम करेंगे एक भविष्य सप्ताह में वापस करने के लिए आते हैं।
लेकिन अब के लिए, सिर्फ इतना पता है कि अगर मैं चाहता हूँ वास्तव में आगे बढ़ने में उचित होना करने के लिए
तार मिल का उपयोग करते हुए, मैं सिर्फ यह नहीं बुलाना चाहिए,
और आँख बंद करके अपनी वापसी मान का उपयोग, विश्वास है कि यह एक स्ट्रिंग है।
>> मैं पहली बार, कहना चाहिए अरे, एक मिनट ही इंतजार है,
आगे बढ़ना है, तो एस बराबर नहीं है अशक्त, जहां अशक्त, फिर से,
सिर्फ कुछ विशेष मूल्य है।
और यह केवल विशेष मूल्य है आप मिल स्ट्रिंग के लिए के बारे में चिंता करने की जरूरत है।
स्ट्रिंग या तो रहा है मिल एक स्ट्रिंग या अशक्त लौटने के लिए।
>> और यह विस्मयादिबोधक बिंदु पर हस्ताक्षर के बराबर होती है आप शायद गणित वर्ग से जानते हो सकता है
आप के साथ एक बराबर चिह्न आकर्षित हो सकता है कि इसके माध्यम से एक लाइन के बराबर नहीं संकेत मिलता है।
यही कारण है कि आम तौर पर एक चरित्र नहीं है आप अपने कीबोर्ड पर टाइप कर सकते हैं।
और तो सबसे प्रोग्रामिंग भाषाओं में, आप बराबर नहीं कहना चाहता हूँ जब,
आप एक विस्मयादिबोधक बिंदु का उपयोग, अन्यथा धमाके के रूप में जाना जाता है।
तो आप कह धमाके के बराबर होती है जो बराबरी नहीं, तार्किक मतलब है।
यह वहाँ एक बड़ा नहीं है, बस की तरह है की तुलना में, या के बराबर है, या कम से कम
या बराबर अपने कुंजीपटल पर कुंजी के लिए कि यह सब एक प्रतीक में करता है।
तो यही कारण है, पिछले उदाहरण में, आप एक खुले ब्रैकेट किया था, और उसके बाद
एक बराबर चिह्न, क्रम में करने के लिए से अधिक या, कहते हैं, की तुलना में कम।
>> तो क्या takeaway यहाँ है?
यह बस अब का एक तरीका है इस वाक्य रचना शुरू करने, इस सुविधा,
व्यक्ति पर iterating एक स्ट्रिंग में वर्णों।
और सिर्फ उन वर्ग की तरह कोष्ठक, आप उन पर प्राप्त करने की अनुमति
के रूप में उन पर विचार वर्ग कोष्ठक एक तरह से यह अंतर्निहित पर इशारा
डिजाइन, जिससे हर एक स्ट्रिंग के अंदर चरित्र
प्रकार के नीचे कहीं में बॉक्सिंग अपने कंप्यूटर की स्मृति में हुड।
>> लेकिन इस का एक संस्करण बनाते हैं।
यह यह है कि पता चला है कार्यक्रम सही है।
तो CS50 के कुल्हाड़ियों के मूल्यांकन के लिए प्रति कोड, अब यह सही है।
विशेष रूप से अब है कि मैं के लिए जाँच कर रहा हूँ अशक्त, इस कार्यक्रम दुर्घटना कभी नहीं करना चाहिए।
और मैं सिर्फ इतना है कि अनुभव से पता है।
लेकिन वहाँ और कुछ नहीं है कि हम वास्तव में यहाँ गलत जा सकते हैं।
लेकिन यह बहुत अच्छी तरह से तैयार नहीं है, क्योंकि हम बुनियादी बातों को वापस जाओ।
>> प्रथम सिद्धांत-- पाश के लिए एक क्या करता है?
पाश के लिए एक तीन बातें करता है।
यह कुछ initializes मूल्य, यदि आप इसे करने के लिए पूछना।
यह एक शर्त जाँच करता है।
और फिर बाद में प्रत्येक चलना, प्रत्येक चक्र के बाद,
यह कुछ वेतन वृद्धि मूल्य, या मान, यहाँ।
>> तो उसका क्या मतलब हुआ?
हम मैं 0 करने के लिए प्रारंभ।
हम जाँच करें और सुनिश्चित करें कि मैं तुलना में कम है एस की लंबाई, जो जेड-ए-एम-वाई-एल ए,
इसलिए जो 6 से कम है।
और, वास्तव में, 0 कम से कम 6 के रूप में।
>> हम Zamyla के नाम से जेड बाहर प्रिंट।
तो फिर हम मैं 0 से 1 वेतन वृद्धि।
हम तो जांच, 1 कम है एस की लंबाई की तुलना में?
एस की लंबाई 6 है।
हाँ यही है।
>> इसलिए हम Zamyla का नाम, जुल्फिकार अली में एक प्रिंट।
हम 0 से मैं वेतन वृद्धि, 1, 2 करने के लिए।
हम तो जांच, 2 की तुलना में कम है Zamyla के नाम की लंबाई।
6 इतनी 2 से 6 से कम है।
हाँ, चलो में एम अब बाहर मुद्रित करते हैं Zamyla का नाम, तीसरे चरित्र।
>> यहां महत्वपूर्ण यह है कि प्रत्येक पर है कहानी का चलना, मैं जाँच कर रहा हूँ,
मैं Zamyla की लंबाई की तुलना में कम है?
लेकिन पकड़ है कि है स्टर्लिंग एक संपत्ति नहीं है।
तुम में से जो प्रोग्राम किया है जावा या अन्य भाषाओं में से पहले
लंबाई जानते हो सकता है की एक स्ट्रिंग है एक संपत्ति, बस कुछ ही मूल्य पढ़ा।
>> इस मामले में सी में, यह है कि अगर एक समारोह का शाब्दिक है कि
की संख्या की गणना हर बार Zamyla में पात्रों
हम उस समारोह कहते हैं।
हर बार जब आप का उपयोग करने के लिए कंप्यूटर पूछना स्टर्लिंग, यह Zamyla पर एक नज़र ले जा रहा है,
और कह रही जेड-ए-एम-वाई-एल ए, 6।
और यह 6 रिटर्न।
अगली बार जब आप फोन ऐसा नहीं है कि पाश के लिए अंदर,
यह Zamyla को देखने के लिए जा रहा है फिर, का कहना है कि जेड-ए-एम-वाई-एल ए, 6।
और यह 6 लौटने के लिए जा रहा है।
तो क्या इस डिजाइन के बारे में बेवकूफ है?
>> क्यों मेरे कोड नहीं 5 के बाहर एक 5 डिजाइन के लिए अब ठीक है, तो बात करने के लिए?
खैर, मैं पूछ रहा हूँ एक अनावश्यक रूप से सवाल है।
मैं और अधिक काम कर रहा हूँ की तुलना में मैं करने की जरूरत है।
>> तो फिर भी जवाब सही है, मैं हूँ
कंप्यूटर पूछ रही है, क्या है Zamyla की लंबाई फिर से,
और फिर, और फिर, और फिर?
और कहा कि इस सवाल का जवाब है कभी नहीं बदलने जा रहा।
यह हमेशा के लिए 6 होने जा रहा है।
>> तो इस से बेहतर समाधान यह अगले संस्करण होगा।
मुझे आगे चलते हैं और एक में डाल दिया string1.c बुलाया अलग फाइल,
सिर्फ रखने के लिए यह अलग।
और इसके लिए एक में पता चला है पाश, तुम वास्तव में कर सकते हैं
एक बार में कई चर घोषणा।
>> इसलिए मुझे लगता है मैं रखने के लिए और 0 के लिए यह निर्धारित करने के लिए जा रहा हूँ।
लेकिन मैं यह भी जा रहा हूँ एक अल्पविराम जोड़ने के लिए, और कहते हैं,
मुझे एक चर n कहा जाता है, जिसका देना मूल्य एस की स्ट्रिंग की लंबाई के बराबर होती है।
और अब, मेरी हालत बनाने कृपया इतने लंबे समय के रूप में मैं n से भी कम है।
>> तो इस तरह से, तर्क है दिन के अंत में समान।
लेकिन मैं याद कर रहा हूँ मूल्य 6, इस मामले में।
Zamyla के नाम की लंबाई क्या है?
और मैं n पर यह डाल रहा हूँ।
>> और मैं अभी भी जाँच कर रहा हूँ हालत हर बार।
0 6 से कम है?
1 से 6 से कम है?
2 से 6 की तुलना में कम है, और बहुत आगे है?
>> लेकिन मैं कंप्यूटर नहीं कह रहा हूँ फिर, और फिर, क्या है
Zamyla के नाम की लंबाई?
Zamyla के नाम की लंबाई क्या है?
इस Zamyla के नाम की लंबाई क्या है?
मैं सचमुच याद कर रहा हूँ कि पहली और केवल इस दूसरे चर n में जवाब।
तो यह अब न केवल होगी सही है, लेकिन यह भी अच्छी तरह से डिजाइन।
>> अब, शैली के बारे में क्या?
मैं अपने चर नाम दिया है बहुत अच्छी तरह से, मैं कहूँगा।
वे अब ठीक सुपर संक्षिप्त रहे हैं।
और वह पूरी तरह से ठीक है।
>> आप केवल एक है एक कार्यक्रम में स्ट्रिंग,
तुम भी कॉल कर सकते हैं यह स्ट्रिंग के लिए है।
आप केवल एक चर है एक कार्यक्रम में गिनती के लिए,
आप के रूप में अच्छी तरह से यह मैं बुला सकता है।
आप लंबाई है, तो n साथ ही सुपर आम है।
लेकिन मैं अपने कोड के किसी भी टिप्पणी नहीं की है।
>> मैं reader-- सूचित नहीं किया है कि मेरे टीएफ, या प्रादेशिक सेना है या नहीं,
या सिर्फ colleague-- क्या माना जाता है इस कार्यक्रम में जा रहा हो।
और इतना अच्छा शैली पाने के लिए, मैं करना चाहता हूँ क्या होगा
this-- कुछ है जैसे इनपुट के लिए कहें।
और मैं फिर से लिखना कर सकता है तरीके की यह किसी भी संख्या।
>> सुनिश्चित करें कि प्राप्त करना सुनिश्चित करें s-- स्ट्रिंग एक स्ट्रिंग लौट आए।
और फिर here-- में और यह शायद है सबसे महत्वपूर्ण comment-- पुनरावृति
एक समय में एक है में पात्रों के ऊपर।
और मैं किसी भी इस्तेमाल कर सकते हैं अंग्रेजी भाषा के विकल्प
यहाँ प्रत्येक का वर्णन करने के लिए कोड के इन टुकडों की।
>> सूचना है कि मैं एक नहीं डाल दिया है कोड की हर पंक्ति पर टिप्पणी,
वास्तव में दिलचस्प पर बस सा हैं कि
कुछ अर्थ नहीं है कि मैं हो सकता है किसी को सुपर स्पष्ट करना चाहता हूँ
मेरे कोड को पढ़ने के।
और क्यों आप प्राप्त कर बुला रहे हैं स्ट्रिंग इनपुट के लिए उपयोगकर्ता पूछ रहे हो?
यहां तक ​​कि एक जरूरी नहीं है सब है कि वर्णनात्मक।
लेकिन यह एक कहानी बताने में मदद करता है, क्योंकि कहानी में दूसरी पंक्ति है, यह सुनिश्चित कर लें
स्ट्रिंग प्राप्त एक स्ट्रिंग लौट आए।
>> और कहानी में तीसरी लाइन है, एस एक में पात्रों पर पुनरावृति
समय पर।
और अब सिर्फ अच्छे उपाय के लिए, मुझे आगे जाना है और जोड़ने के लिए जा रहा हूँ
एक और टिप्पणी है कि बस एस में प्रिंट मैं वें चरित्र कहते हैं।
अब, क्या मैंने किया है दिन के अंत में?
>> मैं कुछ अंग्रेजी को शामिल किया है टिप्पणी के रूप में शब्द।
स्लेश स्लेश प्रतीक का मतलब है, अरे, कंप्यूटर इस मानव के लिए है,
आप के लिए नहीं, कंप्यूटर।
इसलिए वे तार्किक नजरअंदाज कर रहे हैं।
वे सिर्फ वहाँ रहे हैं।
>> और, वास्तव में, CS50 आईडीई के रूप में उन्हें पता चलता है ग्रे, के रूप में उपयोगी है, लेकिन महत्वपूर्ण नहीं किया जा रहा है
कार्यक्रम के लिए।
सूचना है कि तुम अब क्या कर सकते हैं।
आप सी पता है कि क्या प्रोग्रामिंग या नहीं, आप
सिर्फ इस पर वापस खड़े हो सकते हैं कार्यक्रम है, और टिप्पणियों स्किम।
इनपुट के लिए उपयोगकर्ता से पूछो, यह सुनिश्चित कर लें स्ट्रिंग एक स्ट्रिंग लौटे मिलता है,
एस में पात्रों पर पुनरावृति एक समय में एक, चरित्र मुद्रित
मैं वें चरित्र s-- में तुम नहीं करते यहां तक ​​कि कोड को देखने के लिए
समझने के लिए इस कार्यक्रम क्या करता है।
और, बेहतर अभी तक, अगर आप अपने आप को देखो एक या दो सप्ताह में इस कार्यक्रम में,
या एक महीने या एक साल, आप भी नहीं है
कोड घूरते, याद करने की कोशिश कर रहा है,
क्या मैं इस कोड के साथ करने की कोशिश कर रहा था?
>> तुम अपने आप को बता दिया है।
आप इसे अपने आप के लिए वर्णित किया है, या कुछ सहयोगी, या टीए, या टीएफ।
और हां, यह हो सकता है सही है, और अच्छे डिजाइन,
और अंत में अच्छा शैली के रूप में अच्छी तरह से।
इतना रखना है कि दिमाग में नहीं है।
>> तो वहाँ एक अन्य है बात मैं यहाँ करने के लिए जा रहा हूँ
कि अब प्रकट कर सकते हैं कि वास्तव में क्या है हुड के नीचे चल रहा है।
तो वहाँ इस सुविधा है सी, और अन्य भाषाओं में,
कहा जाता है typecasting कि या तो परोक्ष
या स्पष्ट रूप से आप को बदलने की अनुमति देता है एक दूसरे के लिए डेटा प्रकार से।
हम तो काम कर रहा है अब तक तार के साथ आज।
>> और तार अक्षर हैं।
लेकिन पिछले एक सप्ताह से याद 0, वर्ण क्या कर रहे हैं?
वर्ण सिर्फ एक अमूर्त हैं numbers-- दशमलव संख्या के शीर्ष पर,
और दशमलव संख्या वास्तव में सिर्फ एक हैं द्विआधारी संख्या के शीर्ष पर अमूर्त,
हम इसे परिभाषित किया।
>> तो वर्ण संख्या रहे हैं।
और संख्या अक्षर हैं, सिर्फ संदर्भ के आधार पर।
और यह है कि अंदर पता चला है एक कंप्यूटर प्रोग्राम की,
आप कैसे आप देखना चाहता हूँ निर्दिष्ट कर सकते हैं कि इस कार्यक्रम के अंदर बिट्स पर?
>> हफ्ते 0 कि हम था से याद ASCII, जो सिर्फ इस कोड है
नंबरों के लिए मानचित्रण पत्र।
और हमने कहा, पूंजी एक 65 है।
पूंजी बी के आगे तो 66 है, और।
>> और नोटिस, हम अनिवार्य रूप से घर का काम पर है यहाँ शीर्ष पंक्ति, के रूप में सी उन्हें फोन होगा,
वर्ण, और उसके बाद दूसरी पंक्ति पर ints।
और यह पता चला आप परिवर्तित कर सकते हैं को मूल दो, आम तौर पर के बीच।
और हम क्या करना चाहते हैं, तो इस जानबूझ, हम
से निपटने के लिए चाहते हो सकता है कुछ इस तरह।
>> हम परिवर्तित करने के लिए चाहते हो सकता है ऊपरी मामले कम करने के लिए
मामले, अपर केस को कम मामले।
और यह वहाँ है पता चला है वास्तव में एक पैटर्न यहाँ
हम बस एक पल में गले लगा सकते हैं।
लेकिन एक पर पहले देखो स्पष्ट रूप से ऐसा करने का उदाहरण है।
>> मैं CS50 आईडीई में वापस जाने के लिए जा रहा हूँ।
मैं एक बनाने के लिए जा रहा हूँ फ़ाइल आस्की 0.c. बुलाया
और मैं आगे जाना है और जोड़ने के लिए जा रहा हूँ मेरे शीर्ष पर मानक io.h, int मुख्य शून्य
मेरे समारोह के शीर्ष पर।
और फिर मैं सिर्फ क्या करने जा रहा हूँ पाश के लिए एक following-- मैं से बराबर होती है,
हम कहते हैं कि, 65 दें।
>> और फिर मैं की तुलना में कम होने जा रहा है वर्णमाला में 65, प्लस 26 अक्षरों।
इसलिए मैं कंप्यूटर दूँगा वहाँ मेरे लिए गणित है।
और फिर इस लूप के अंदर, क्या मैं मुद्रित करने के लिए जा रहा हूँ?
>> % ग% मैं n बैकस्लैश है।
और अब मैं दो मूल्यों में प्लग करने के लिए चाहते हैं।
मैं अस्थायी रूप से सवाल रख दिया है वहाँ के निशान सवाल आमंत्रित करने के लिए।
>> मैं आगे 65 से पुनरावृति करना चाहते हैं वर्णमाला के 26 अक्षरों के लिए,
प्रत्येक यात्रा पर बाहर मुद्रण है कि चरित्र का अभिन्न बराबर।
दूसरे शब्दों में, मैं चाहता हूँ पुनरावृति से अधिक 26 संख्या मुद्रण
क्या ASCII वर्ण है, पत्र, और क्या इसी नंबर है-
वास्तव में सिर्फ पुनः उस स्लाइड से चार्ट।
तो क्या इन प्रश्न चिह्न होना चाहिए?
>> खैर, यह है कि दूसरे पता चला है एक बस चर रहा होना चाहिए।
मैं देखना है कि एक नंबर के रूप में चाहते हैं।
और मध्य तर्क यहाँ, मैं कंप्यूटर बता सकते हैं
कि पूर्णांक के इलाज के लिए मैं एक चरित्र के रूप में, के रूप में तो
यह यहां प्रतिशत सी के लिए विकल्प
>> दूसरे शब्दों में, अगर मैं, मानव प्रोग्रामर, जानते
ये तो बस संख्या रहे हैं दिन के अंत में।
और मुझे पता है कि 65 चाहिए कुछ चरित्र के लिए नक्शे।
इस स्पष्ट कलाकारों के साथ, एक कोष्ठक,
आप चाहते हैं डेटा प्रकार का नाम कन्वर्ट करने के लिए, और एक बंद कोष्ठक,
आप बता सकते हैं कंप्यूटर, हे, कंप्यूटर,
एक चार को यह पूर्णांक परिवर्तित।
>> तो जब मैं इस चलाने कार्यक्रम के संकलन के बाद,
चलो देखते हैं कि मैं क्या get-- आस्की 0 बनाते हैं।
अरे यह क्या मैं गलत यहाँ क्या किया?
अघोषित पहचानकर्ता का उपयोग करें, सब ठीक है, जानबूझकर नहीं,
लेकिन चलो देखते हैं, तो हम नहीं कर सकते इस के माध्यम से कारण है।
>> तो लाइन five-- तो मैं नहीं मिला बहुत दूर पंगा लेना पहले।
ठीक है।
तो लाइन 5 मैं के लिए बराबर होती है 65-- मैं देख रहा हूँ।
तो सी में याद है कि, कुछ के विपरीत यदि आप पहले प्रोग्रामिंग है भाषाओं
अनुभव, आपके पास कंप्यूटर बताने के लिए,
स्क्रैच के विपरीत, क्या चर का प्रकार है।
>> और मैं एक चाबी वाक्यांश यहाँ भूल गया।
लाइन पांच में, मैं मैं का उपयोग शुरू कर दिया है।
लेकिन मैं सी नहीं बताया है क्या डेटा प्रकार यह है।
तो मैं यहाँ में जाने के लिए जा रहा हूँ और कहते हैं, आह, यह एक पूर्णांक हैं।
>> अब मुझे आगे जाना है और फिर कंपाइल करने के लिए जा रहा हूँ।
यही कारण है कि तय की।
./ascii0 दर्ज करें, जो कि एक तरह से शांत है।
इतना ही नहीं यह सुपर करने के लिए तेजी से होता है , कंप्यूटर इस सवाल पूछना
बल्कि एक स्लाइड पर यह ऊपर की तलाश से, यह एक प्रति पंक्ति बाहर मुद्रित, एक 65 है,
बी के बाद से मैं down-- 66, सभी तरह है पत्र Z करने के लिए इस 26 गुना था,
जो 90 है।
और, वास्तव में, थोड़ा अधिक बुद्धिमान होता
मेरे लिए नहीं किया गया है भरोसा करने के लिए कंप्यूटर पर 26 जोड़ने के लिए।
मैं तो बस किया जा सकता है 90 के रूप में अच्छी तरह से, इतने लंबे समय
के रूप में मैं एक ही गलती दो बार नहीं बनाते हैं।
मैं के माध्यम से ऊपर जाने के लिए चाहते हैं जेड, न सिर्फ y के माध्यम से ऊपर।
>> ताकि एक स्पष्ट डाली है।
यह यह है कि पता चला है यहां तक ​​कि जरूरी नहीं है।
मुझे आगे जाना है और यह फिर से दौड़ना चलो संकलक, और फिर से दौड़ना आस्की 0।
यह पता चला है कि सी बहुत चालाक है।
>> और printf, विशेष रूप से, बहुत चालाक है।
तुम सिर्फ एक मैं दो बार गुजरती हैं दोनों प्लेसहोल्डर्स के लिए, printf
एहसास होगा ओह, ठीक है मैं तुम्हें पता है मुझे एक कुछ संख्या integer-- दिया,
65, या 90, या जो भी पसंद है।
लेकिन मैं देख रहा हूँ कि तुम मुझे चाहते एक चरित्र की तरह है कि संख्या स्वरूप।
और तो printf के संकेत भी डाल सकते हैं के रूप में अच्छी तरह से आप के लिए एक चार को int।
तो यह है कि सब में एक समस्या नहीं है।
>> लेकिन नोटिस, इस तुल्यता की वजह हम वास्तव में इस के रूप में अच्छी तरह से कर सकते हैं।
मुझे आगे जाना है और एक कर दूं this-- आस्की 1.c. के दूसरे संस्करण
और के बजाय पर iterating पूर्णांकों, वास्तव में आपके मन उड़ा सकते हैं
पात्रों पर iterating द्वारा।
एक चार सी पूंजी एक हो जाता है, तो मैं आगे जाना है और ऐसा करना चाहते हैं,
इतने लंबे समय सेल्सियस से कम या बराबर है के रूप में राजधानी जेड और प्रत्येक यात्रा पर
मैं सी वेतन वृद्धि करना चाहते हैं, मैं कर सकता हूँ अब मेरे printf लाइन में यहाँ
कहते हैं, प्रतिशत सी है मैं फिर प्रतिशत, अल्पविराम सी
>> और अब, मैं दूसरी दिशा में जा सकते हैं, चरित्र को स्पष्ट रूप से कास्टिंग
एक पूर्णांक के लिए।
तो, फिर से, तुम क्यों यह करना होगा?
इसके बारे में सुलझाने के लिए एक अजीब सा है पात्रों के मामले में गिनते हैं।
>> लेकिन अगर आप समझते क्या है हुड के नीचे चल रहा है,
वहाँ वास्तव में कोई जादू है।
तुम बस कह रहे हैं, अरे, कंप्यूटर देना मुझे एक चर प्रकार चार की सी कहा जाता है।
राजधानी ए करने के लिए इसे प्रारंभ और एकल उद्धरण बात पर ध्यान दिया।
>> सी में पात्रों के लिए, से याद पिछले हफ्ते, आप एक उद्धरण का उपयोग करें।
तार के लिए, शब्दों के लिए, वाक्यांश, आप डबल उद्धरण का उपयोग करें।
ठीक है, कंप्यूटर, यह कर रखना है, तो चरित्र के रूप में लंबे समय से कम है
या जेड के बराबर है।
और मैं अपने ASCII तालिका से पता है कि सब इन आस्की कोड से सटे हैं।
>> वहाँ कोई अंतराल है।
तो यह सिर्फ एक जेड के माध्यम से है, एक संख्या प्रत्येक से अलग कर दिया।
और फिर मैं वेतन वृद्धि कर सकते हैं एक चार, अगर मैं वास्तव में चाहते हैं।
आखिरकार दिन के अंत में, यह सिर्फ एक संख्या है।
मैं यह जानता हूँ।
तो मैं सिर्फ यह करने के लिए 1 से जोड़ने के लिए मान सकते हैं।
>> और फिर इस बार, मैं सी प्रिंट, और फिर अभिन्न बराबर।
और मैं भी स्पष्ट कलाकारों की जरूरत नहीं है।
मैं printf और दे सकते हैं, कंप्यूटर आंकड़ा चीजें बाहर,
तो यह है कि अब अगर मैं चला Ascii1./ascii1 बनाने,
मैं भी सटीक एक ही बात हो।
>> बेकार कार्यक्रम, कोई भी though-- वास्तव में सॉफ्टवेयर लिखने के लिए जा रहा है
आदेश में यह पता लगाने के लिए, क्या था संख्या है कि एक करने के लिए नक्शे, या बी, या जेड?
तुम बस या यह गूगल के लिए जा रहे हैं, यह देखने के ऑनलाइन, या इसे देखो
एक स्लाइड, या जैसे पर।
तो जहां यह वास्तव में उपयोगी मिलता है?
>> खैर, उस की बात स्लाइड, वहाँ नोटिस
अपरकेस के बीच एक वास्तविक पैटर्न यहाँ और छोटे आकस्मिक नहीं था।
सूचना है कि राजधानी में एक 65 है।
लोअरकेस एक 97 है।
और दूर कितनी दूर निचले मामले एक है?
>> तो 65 97 से कितने कदम दूर है?
तो 97 शून्य से 65 से 32 है।
तो राजधानी में एक 65 है।
आप उस के लिए 32 जोड़ दें, तो आप एक छोटे से मिलता है।
और, यों, अगर आप 32 घटाना, आप पूंजी को वापस पाने के एक-- बी के साथ ही
छोटी सी बी करने के लिए, छोटी सी के लिए बड़ी सी।
>> इन कमियों के सभी 32 अलग कर रहे हैं।
अब, यह हमारे लिए अनुमति देने के लिए प्रतीत होता है माइक्रोसॉफ्ट वर्ड की तरह कुछ करते हैं,
या गूगल डॉक्स की सुविधा है, जहां आप सब कुछ का चयन कर सकते हैं और फिर कहते हैं,
लोअरकेस सब बदलने के लिए, या अपर केस में सब बदलने के लिए,
या सिर्फ पहला शब्द बदल अपर केस में एक वाक्य के।
हम वास्तव में कुछ कर सकते हैं अपने आप को लगता है कि जैसे।
>> मुझे आगे चलते हैं और एक फ़ाइल को बचाने के यहाँ 0.c. भुनाने बुलाया
और आगे बढ़ते हैं और एक कार्यक्रम कोड़ा चलो कि ठीक है कि इस प्रकार के रूप में करता है।
तो CS50 पुस्तकालय में शामिल हैं।
और मानक आई / ओ शामिल हैं।
>> और मैं यह जल्द ही आ रहा है पता है।
तो मैं इसे में डाल करने के लिए जा रहा हूँ वहां पहले से ही, string.h,
इसलिए मैं करने के लिए उपयोग किया है स्टर्लिंग की तरह बातें,
और फिर मुख्य शून्य int, हमेशा की तरह।
और फिर मैं आगे जाने के लिए जा रहा हूँ और तार कर स्ट्रिंग प्राप्त हो जाता है,
सिर्फ उपयोगकर्ता से एक स्ट्रिंग पाने के लिए।
और फिर मैं करने जा रहा हूँ मेरी मानसिक स्वास्थ्य की जांच कर रहे हैं।
स्ट्रिंग बराबर रिक्त नहीं करता है, तो यह आगे बढ़ने के लिए सुरक्षित है।
और मैं क्या करना चाहते हो?
मैं पुनरावृति करने से मैं 0 के बराबर होती है जा रहा हूँ, और एन एस की स्ट्रिंग की लंबाई पर निर्भर है।
>> और मैं इतने लंबे समय के रूप में यह करने के लिए जा रहा हूँ मैं n से कम नहीं है, और मैं प्लस प्लस।
अब तक, मैं वास्तव में अभी कर रहा हूँ पहले से विचारों उधार।
और अब मैं एक शाखा शुरू करने जा रहा हूँ।
>> तो स्क्रैच, जहां के लिए वापस लगता है हम सड़क में उन लोगों के कांटे था,
और पिछले हफ्ते सी में मैं जा रहा हूँ यह कहना है, अगर एस में मैं वें चरित्र
है या उससे अधिक मामले में एक कम करने के लिए बराबर है,
और-- खरोंच में आप सचमुच होगा कहते हैं और, लेकिन सी में आप कहते हैं एम्परसेंड,
ampersand-- और एस में मैं वें चरित्र कम से कम या मामले Z कम करने के लिए बराबर है,
चलो कुछ दिलचस्प करते हैं।
चलो वास्तव में एक प्रिंट आउट कोई newline के साथ चरित्र
कि स्ट्रिंग में चरित्र है, स्ट्रिंग में मैं वें चरित्र।
>> लेकिन आगे चलते हैं और इसमें से 32 घटाना।
वरना अगर चरित्र स्ट्रिंग है कि हम देख रहे हैं
छोटे से एक के बीच नहीं है और थोड़ा Z, आगे बढ़ो
और इसे बाहर अपरिवर्तित छपी।
इसलिए हम शुरू की है इस कोष्ठकों के भीतर संकेतन
हमारे तार पर प्राप्त करने के लिए मैं वें स्ट्रिंग में चरित्र।
>> मैं जैसे कुछ सशर्त तर्क जोड़ दिया है, पिछले हफ्ते के सप्ताह एक है, जहां में खरोंच
मैं सिर्फ अपने मौलिक उपयोग कर रहा हूँ क्या की समझ
हुड के नीचे चल रहा है।
एस के मैं वें चरित्र है से अधिक या एक के बराबर?
की तरह, यह, 97, या 98 है या 99, और बहुत आगे है?
>> लेकिन यह भी कम से कम या बराबर है लोअरकेस जेड के मूल्य के लिए?
और अगर ऐसा है, क्या इस लाइन मतलब है?
14, इस की तरह है पूरे विचार के रोगाणु,
द्वारा अक्षर को कैपिटल बस से 32 को घटाकर,
इस मामले में, क्योंकि मुझे पता है, कि प्रति चार्ट, कैसे अपनी संख्या प्रतिनिधित्व कर रहे हैं।
तो चलो आगे जाना है और इस चलाते हैं, 0.c भुनाने के संकलन के बाद,
और रन 0 कैपिटल में लिखें।
>> की तरह कुछ में टाइप करते हैं सभी लोअरकेस में Zamyla दर्ज करें।
और अब हम सभी अपरकेस में Zamyla है।
के सभी छोटे अक्षरों में रोब में टाइप करते हैं।
के सभी छोटे अक्षरों में जेसन कोशिश करते हैं।
और हम हो रही रखने के मजबूर पूंजीकरण।
वहाँ एक मामूली बग है कि मैं एक तरह से सोचा भी नहीं था।
सूचना है मेरी नई शीघ्र खत्म हो रही है उनके नाम के रूप में एक ही लाइन पर,
जो एक छोटे से गंदा लगता है।
>> तो मैं यहाँ जाने के लिए जा रहा हूँ, और वास्तव में इस कार्यक्रम के अंत में
एक नई चरित्र बाहर प्रिंट।
बस इतना ही।
printf के साथ, आप की जरूरत नहीं है चर या प्रारूप कोड में गुजरती हैं।
तुम सचमुच बस प्रिंट कर सकते हैं एक नई तरह कुछ।
>> तो चलो आगे जाना है और बनाते हैं 0 फिर से भुनाने के लिए, यह फिर से दौड़ना, Zamyla।
और अब यह एक छोटे से सुंदर है।
अब, मेरे शीघ्र अपनी नई लाइन पर है।
तो यह है कि सब ठीक है और अच्छा है।
तो यह है कि एक अच्छा उदाहरण है।
लेकिन मैं यह भी जरूरी नहीं है मुश्किल कोड 32 करने की जरूरत है।
आपको पता है कि?
मैं say-- सकता है मैं कभी नहीं करते याद क्या अंतर है।
>> लेकिन मुझे पता है कि अगर मैं एक कम मामले पत्र है,
मैं अनिवार्य रूप से बंद घटाना चाहते हैं जो कुछ दूरी थोड़ा के बीच है
एक और बड़ी ए, क्योंकि अगर मैं उस मान अन्य पत्र के सभी एक ही हैं,
कि काम मिल चाहिए।
लेकिन ऐसा करने कि बजाय, क्या आपको पता है?
वहाँ अभी भी एक और तरीका है।
>> तो यह है कि अगर मैं थे 1.c-- भुनाने है एक अलग फाइल में डाल दिया है कि।
की भुनाने 2.c करते प्रकार के रूप में करते हैं।
मैं वास्तव में यहाँ यह साफ करने के लिए जा रहा हूँ।
और बदले की भी करने के लिए होने जानते हैं या उन निम्न स्तर के बारे में परवाह
कार्यान्वयन के विवरण, मैं बजाय हूँ सिर्फ एक चरित्र मुद्रित करने के लिए जा रहा है,
बोली गंदें शब्द बोलना, प्रतिशत सी, और फिर एक और समारोह फोन है कि
मौजूद है कि एक तर्क लेता है, जो एक चरित्र है, इस तरह से है।
>> यह सी में पता चला है, वहाँ है एक अन्य समारोह कॉल
ऊपरी करने के लिए है जो अपने नाम के रूप में पता चलता है एक चरित्र लेता है
और यह अपने ऊपरी मामले के लिए बनाता है बराबर है, और फिर यह रिटर्न
इतना है कि printf वहाँ में प्लग कर सकते हैं।
और इसलिए यह करने के लिए, हालांकि, मैं एक अन्य फ़ाइल को पेश करने की जरूरत है।
यह बदल जाता है एक और फाइल वहाँ बाहर कि आप केवल वर्ग से पता होगा,
या एक पाठ्यपुस्तक, या एक ऑनलाइन संदर्भ, सी type.h. बुलाया
>> तो अगर मुझे लगता है कि मेरे हेडर के बीच फ़ाइलों, और अब फिर से संकलन इस कार्यक्रम,
capitalize2, दर्ज ./capitalize2।
हम सब में Zamyla में टाइप करते हैं लोअरकेस, अभी भी एक ही काम करता है।
लेकिन तुम जानते हो क्या?
यह ऊपरी को पता चला है कि कुछ अन्य कार्यक्षमता है।
>> और मुझे इस परिचय यहाँ की आज्ञा है, की तरह awkwardly
नाम है, लेकिन मैनुअल के लिए आदमी।
यह पता चला है कि ज्यादातर लिनक्स कंप्यूटर, हम लिनक्स ऑपरेटिंग here-- के रूप में प्रयोग कर रहे हैं
system-- एक आदेश दिया है कहा जाता है आदमी, जो कहते हैं,
अरे, कंप्यूटर, मुझे दे कंप्यूटर के मैनुअल।
तुम चाहते क्या हो कि मैनुअल में देखो?
>> मैं इस समारोह को देखने के लिए चाहते हैं ऊपरी करने के लिए कहा जाता है, दर्ज करें।
और यह एक छोटे गुप्त है कभी कभी पढ़ने के लिए।
लेकिन नोटिस हम कर रहे हैं लिनक्स प्रोग्रामर मैनुअल।
और यह सब पाठ है।
और सूचना है कि वहाँ यहाँ समारोह का नाम।
यह पता चला है कि यह एक चचेरे भाई का आह्वान किया है कम करने के लिए है, जो विपरीत है।
और सार के तहत नोटिस, इस का उपयोग करने के लिए आदमी पेज समारोह, तो बात है,
मुझे लगता है कि मैं बता रहा है ग type.h. शामिल करने की जरूरत
और मैं अभ्यास से पता था कि।
>> इधर, यह मुझे दिखा रहा है दो समारोह के लिए प्रोटोटाइप,
इतना है कि मैं कभी भी इस प्रयोग करना चाहते हैं मैं जानता हूँ कि क्या वे इनपुट के रूप में लेते हैं,
और क्या वे आउटपुट के रूप में वापसी।
और फिर अगर मैं पढ़ विवरण, मैं देख रहा हूँ
और अधिक विस्तार में क्या कार्य करता है।
लेकिन अधिक महत्वपूर्ण बात, अगर मैं, वापसी मान के नीचे देखो
इसे कहते हैं, मान है परिवर्तित पत्र की कि,
या सी, मूल इनपुट, अगर रूपांतरण संभव नहीं था।
>> दूसरे शब्दों में, ऊपरी कोशिश करेंगे ऊपरी मामले को एक पत्र परिवर्तित करने के लिए।
और अगर हां, तो यह इसे वापस करने के लिए जा रहा है।
लेकिन अगर कुछ reason-- के लिए नहीं यह कर सकते हैं शायद यह पहले से ही ऊपरी मामला है,
हो सकता है यह एक विस्मयादिबोधक बिंदु है या कुछ अन्य punctuation--
यह सिर्फ करने के लिए जा रहा है मूल सी वापसी,
जिसका मतलब है कि मैं अपने कोड बना सकते हैं बेहतर रूप में इस प्रकार बनाया गया है।
>> मैं सभी की जरूरत नहीं है कोड के इन रफ़ू लाइनों।
लाइनों रहा है सब सिर्फ प्रकाश डाला कर सकते हैं
सिर्फ एक सरल में ढह किया लाइन है, जो this-- printf प्रतिशत है
ऊपरी एस ब्रैकेट मैं करने के लिए ग।
और यह एक होगा बेहतर डिजाइन का उदाहरण है।
>> क्यों 7 या 8 लाइनों में लागू कोड की, जो कुछ भी मैं बस गया था
नष्ट कर दिया, जब आप के बजाय गिर सकते हैं कि तर्क और निर्णय लेने के सभी
एक भी लाइन, 13, में है कि एक पुस्तकालय पर निर्भर करता है function--
एक समारोह में कहा कि सी के साथ आता है, लेकिन लगता है कि क्या आप यह करना चाहते हैं ठीक है।
और, सच में, भले ही यह सी के साथ नहीं आया था,
आप इसे अपने आप लागू कर सकता है, के रूप में हमने देखा है, नकारात्मक int मिल के साथ
और सकारात्मक int पिछले सप्ताह के रूप में अच्छी तरह से मिलता है।
>> इस कोड को अब और अधिक पठनीय है।
और, वास्तव में, हम ऊपर स्क्रॉल हैं, कितना अधिक कॉम्पैक्ट देखो
अपने कार्यक्रम के इस संस्करण है।
यह एक छोटे से ऊपर भारी हो चुकी है, इन सभी शामिल हैं के साथ।
लेकिन यह ठीक है, क्योंकि अब मैं खड़ा हूँ प्रोग्रामर के कंधों पर
मुझसे पहले।
और जो कोई भी था जो वास्तव में ऊपरी करने के लिए लागू
मुझे एक एहसान किया जो कोई भी बहुत पसंद है कार्यान्वित स्टर्लिंग वास्तव में
मुझ पर एक एहसान कुछ समय पहले किया था।
और इसलिए अब हम एक है बेहतर डिजाइन कार्यक्रम
कि सटीक एक ही तर्क लागू करता है।
>> स्टर्लिंग की बात हो रही है, चलो मुझे आगे जाना है और यह करते हैं।
मुझे आगे जाना है और बचाने के लिए करते हैं इस फ़ाइल stirling.c के रूप में।
और यह पता चला है, हम वापस छील कर सकते हैं एक अन्य परत बहुत बस अब।
मैं आगे और कोड़ा जाने के लिए जा रहा हूँ मुख्य में एक अन्य कार्यक्रम अप
यहाँ यह है कि बस फिर से लागू करता है स्ट्रिंग की लंबाई इस प्रकार है।
यहाँ तो कोड की एक पंक्ति है कि मुझे उपयोगकर्ता से एक स्ट्रिंग हो जाता है।
हम फिर से और फिर से इस का उपयोग कर रखना।
मुझे अपने आप को एक चर बुलाया दे int प्रकार है कि एक नंबर भंडार के एन।
>> और मुझे आगे जाना है और निम्नलिखित तर्क नहीं है।
एस में n वें चरित्र करता है बराबर नहीं बैकस्लैश 0, आगे बढ़ो
और एन वेतन वृद्धि।
और फिर printf प्रतिशत मैं n बाहर प्रिंट।
मुझे लगता है कि इस कार्यक्रम को यहाँ दावा करते हैं, स्ट्रिंग लंबाई फोन के बिना,
एक स्ट्रिंग की लंबाई बाहर के आंकड़े।
>> और जादू पूरी तरह से है 8 लाइन में समझाया
यहाँ क्या नई वाक्य रचना की तरह लग रहा है के साथ, इस बैकस्लैश 0 एकल उद्धरण में।
लेकिन ऐसा क्यों है?
खैर, विचार क्या हो गया है यह सब समय चल रहा है।
>> और एक अलग रूप में इससे पहले कि मैं भूल जाते हैं, पता ही के रूप में भी, कि आदमी पृष्ठों के अलावा
कि एक विशिष्ट के साथ आए CS50 आईडीई तरह लिनक्स प्रणाली,
हम महसूस करते हैं कि, पाठ्यक्रम के कर्मचारियों को भी है
एक वेबसाइट के संस्करण बनाया इस एक ही विचार कहा जाता है
reference.cs50.net है, जो वे एक ही आदमी पृष्ठों के सभी,
कि उसी के सभी प्रलेखन, साथ ही
शीर्ष अनुमति देता है कि एक छोटे से बॉक्स आप काफी के सभी परिवर्तित करने के लिए
कम आराम में रहस्यमय भाषा विधा है, जहां हम, शिक्षण स्टाफ,
के माध्यम से चला गया है और सरल बनाने की कोशिश की है चीजें रखने के लिए भाषा के कुछ
विचारों पर ध्यान केंद्रित नहीं, और तकनीकी हैं।
तो मन में रखने के लिए, reference.cs50.net एक और संसाधन के रूप में रूप में अच्छी तरह।
>> लेकिन क्यों में स्ट्रिंग की लंबाई काम करता है जिस तरह से मैं पहले एक पल के प्रस्तावित?
यहाँ Zamyla का नाम फिर से है।
और यहाँ Zamyla का नाम है , में बॉक्सिंग के रूप में मैं कर रखना,
यह जा रहा है की एक तस्वीर पेंट करने, वास्तव में, बस पात्रों का एक दृश्य।
लेकिन Zamyla मौजूद नहीं है एक कार्यक्रम में अलगाव में।
>> जब आप लिखते हैं और एक कार्यक्रम चलाने के लिए, आप अपने मैक या अपने पीसी का उपयोग कर रहे
स्मृति, या राम के रूप में तो बात है।
और अगर आप सोच सकते हैं होने के रूप में आपके कंप्यूटर
स्मृति के गीगाबाइट इन दिनों बहुत सारी।
और एक टमटम अरबों का मतलब है, इसलिए बाइट्स के अरबों।
>> लेकिन कुछ ही समय में उल्टा करते हैं।
और कहा कि हम प्रयोग कर रहे हैं लगता है एक बहुत पुराने कंप्यूटर कि
केवल स्मृति के 32 बाइट्स है।
मैं कर सकता, अपने कंप्यूटर स्क्रीन पर, बस इस आकर्षित इस प्रकार है।
>> मैं बस कह सकते हैं कि मेरे कंप्यूटर इस स्मृति की गई है।
और इस स्मृति की एक छड़ी की तरह है, अगर आप पिछली बार से हमारी तस्वीर याद करते हैं।
और अगर मैं सिर्फ विभाजित पर्याप्त समय में इस,
मैं दावा मैं 32 बाइट्स है स्क्रीन पर स्मृति की।
>> केवल अब, वास्तव में, मैं कर सकता हूँ यहाँ इस स्क्रीन पर अब तक खींचना।
इसलिए मुझे लगता है, आगे जाने के लिए जा रहा हूँ और सिर्फ परंपरा से,
एक के रूप में अपने कंप्यूटर की स्मृति आकर्षित ग्रिड, नहीं बस के रूप में एक सीधी रेखा।
विशेष रूप से, मैं अब कि दावा इस ग्रिड, यह 8 से 4 ग्रिड,
बस सभी 32 बाइट्स का प्रतिनिधित्व करता है अपने मैक में उपलब्ध स्मृति की,
या अपने पीसी में उपलब्ध है।
और वे लपेटकर रहे हैं पर दो लाइनों, बस
क्योंकि यह स्क्रीन पर अधिक फिट बैठता है।
लेकिन यह पहली बाइट है।
यह दूसरी बाइट है।
यह तीसरा बाइट है।
>> और यह 32 वें बाइट है।
या, हम एक कंप्यूटर की तरह लगता है कि अगर वैज्ञानिक इस बाइट 0, 1, 2, 3, 31 है।
तो आप 31 करने के लिए 0 है, अगर आप 0 पर गिनती शुरू।
>> तो अगर हम एक प्रोग्राम का उपयोग कि कॉल स्ट्रिंग मिलता है,
और हम मानव से एक तार मिल जैसे मैं Zamyla कहा जाता था, जेड-ए-एम-वाई-एल ए,
कैसे दुनिया में करता है कंप्यूटर रखने ट्रैक जो बाइट की,
जो स्मृति का हिस्सा है, जो स्ट्रिंग के अंतर्गत आता है?
दूसरे शब्दों में, अगर हम के लिए आगे बढ़ना कंप्यूटर में एक और नाम टाइप करें,
इस Andi की तरह, बुला स्ट्रिंग एक दूसरी बार मिलता है,
एक-एन-डी-मैं में खत्म करने के लिए है कंप्यूटर की स्मृति के रूप में अच्छी तरह से।
पर कैसे?
>> खैर, यह पता चला है कि नीचे डाकू, क्या सेल्सियस जब तार के संचय करता है
कि मानव प्रकार में, या कि किसी अन्य स्रोत से आते हैं, यह है
साथ उनमें से अंत रूपरेखा बनाती है एक विशेष character-- बैकस्लैश
0 है, जो सिर्फ एक विशेष तरीका है की एक पंक्ति में 80 बिट्स कह रही है।
>> तो एक-- यह संख्या 97 याद करते है।
तो 8 बिट के कुछ पैटर्न दशमलव संख्या 97 का प्रतिनिधित्व करता है।
इस बैकस्लैश 0 सचमुच संख्या है 0, उर्फ ​​नुल, एन-यू-एल, पहले के विपरीत,
एन-यू-एल-एल, जो हम के बारे में बात की थी।
लेकिन अब के लिए, बस यह है कि पता है बैकस्लैश 0 एक पंक्ति में सिर्फ 80 बिट्स है।
>> और यह सिर्फ इस रेखा है रेत कि बाईं ओर कुछ भी कहते हैं
एक स्ट्रिंग, या एक डेटा प्रकार के अंतर्गत आता है।
और सही करने के लिए कुछ भी कुछ और करने के अंतर्गत आता है।
Andi का नाम, इस बीच, जो सिर्फ नेत्रहीन
दूसरी लाइन के लिए पर लपेटने के लिए होता है, लेकिन यह सिर्फ एक सौंदर्य विस्तार है,
इसी तरह नुल समाप्त होता है।
>> यह एक ए एन डी-मैं पात्रों में से एक स्ट्रिंग है, प्लस एक पांचवें गुप्त चरित्र,
सभी 0 बिट्स, कि बस demarcates एंडी के नाम के अंत के रूप में अच्छी तरह से।
और स्ट्रिंग एक तिहाई समय मिलता है, तो हम कहते हैं कंप्यूटर में तरह एक स्ट्रिंग पाने के लिए
मारिया, एम-ए-R-मैं-ए, इसी तरह मारिया है नाम नुल बैकस्लैश 0 के साथ समाप्त हुई।
>> यह मौलिक रूप से अलग है से कैसे एक कंप्यूटर आम तौर पर होता है
एक पूर्णांक है, या एक नाव, या अन्य दुकान अभी भी डेटा प्रकार, क्योंकि याद है,
एक पूर्णांक आमतौर पर 32 बिट है, या 4 बाइट्स, या शायद यह भी 64 बिट्स,
या आठ बाइट्स।
लेकिन एक कंप्यूटर में कई पुरातन एक प्रोग्रामिंग भाषा में
की एक निश्चित संख्या है hood-- नीचे बाइट्स
हो सकता है 1, शायद 2, शायद 4, शायद 8।
>> लेकिन तार, डिजाइन से, एक है पात्रों के गतिशील संख्या।
आप पहले से पता नहीं है, जब तक जेड-ए-एम-वाई-एल ए में मानव प्रकार,
या एम-ए-R-मैं-ए, या ए एन डी-मैं। आप नहीं जानते कितनी बार उपयोगकर्ता मारा जा रहा है
कुंजीपटल।
इसलिए, आप नहीं जानते कि कैसे अग्रिम में कई पात्रों
आप की जरूरत करने जा रहे हैं।
>> और तो सी बस की तरह एक तरह छोड़ देता है हुड के नीचे गुप्त ब्रेडक्रम्ब
स्ट्रिंग के अंत में।
स्मृति में जेड-ए-एम-वाई-एल ए के भंडारण के बाद, यह भी सिर्फ बराबर डालता है
अवधि की।
एक वाक्य के अंत में, यह 80 बिट्स कहते हैं, के रूप में तो
याद करने के लिए जहां Zamyla शुरू होता है और समाप्त होता है।
>> तो क्या संबंध है, तो, इस कार्यक्रम के लिए?
यहाँ इस कार्यक्रम, स्टर्लिंग, बस एक तंत्र है
एक स्ट्रिंग प्राप्त करने के लिए उपयोगकर्ता से, लाइन 6।
लाइन 7, मैं एक चर घोषित n कहा जाता है और यह 0 के बराबर सेट।
>> और फिर लाइन 8 में, मैं बस से पूछा सवाल है, जबकि n वें चरित्र करता है
बराबर नहीं सभी 0 bits-- दूसरे शब्दों में, नहीं करता है
बराबर इस विशेष चरित्र, बैकस्लैश 0, जो
सिर्फ इतना है कि विशेष नुल character-- था आगे जाना है और सिर्फ n वेतन वृद्धि।
>> और यह कर रखने के लिए, और रखना यह कर रहा है, और यह कर रखना।
और इसलिए भी में यद्यपि अतीत हम मैं का उपयोग किया है,
यह पूरी तरह से ठीक है शब्दार्थ n का उपयोग करने के लिए,
तुम बस करने के लिए कोशिश कर रहे हैं जान-बूझकर इस बार गिनती,
और सिर्फ यह n फोन करना चाहते हैं।
तो यह सिर्फ सवाल पूछ रहती है, के सभी 0s n वें चरित्र है?
यदि नहीं, तो अगले देखने के लिए लग रही है, अगले करने के लिए आगे देखें लग रही है,
अगले करने के लिए लग रही है।
>> लेकिन जैसे ही आप बैकस्लैश 0 देखने के रूप में, 11-- के माध्यम से इस loop-- लाइन 9 बंद हो जाता है।
आप जबकि पाश से बाहर तोड़ने, उस चर n के अंदर छोड़ने
सभी का एक कुल गिनती स्ट्रिंग तुम्हें देखा में वर्ण,
जिससे यह बाहर मुद्रण।
तो चलो इस कोशिश करते हैं।
>> मुझे आगे चलते हैं और बिना, स्टर्लिंग समारोह का उपयोग कर,
लेकिन सिर्फ अपने खुद के देसी संस्करण का उपयोग यहाँ स्टर्लिंग कहा जाता है, मुझे आगे चलते हैं
और रन स्टर्लिंग, कुछ में टाइप Zamyla, जो मुझे पहले से पता है की तरह
छह वर्ण है।
चलो देखते हैं अगर यह काम करता है।
वास्तव में, यह छह है।
रोब के साथ की कोशिश करते हैं, तीन अक्षर, तीन पात्रों के रूप में अच्छी तरह से, और बहुत आगे है।
इसलिए है कि यह सब हो रहा है हुड के नीचे।
और कनेक्शन नोटिस, तो, पहले सप्ताह के साथ
वर्ग की है, जहां हम के बारे में बात अमूर्त तरह कुछ है,
जो सिर्फ विचारों के इस लेयरिंग है, या जटिलता, बुनियादी सिद्धांतों के शीर्ष पर।
यहाँ, हम एक तरह से देख रहे हैं स्टर्लिंग के हुड के नीचे,
तो बात है, यह पता लगाने के लिए, यह कैसे लागू किया जाएगा?
>> और हम इसे अपने आप को फिर से लागू कर सकता है।
लेकिन हम फिर कभी नहीं जा रहे हैं को फिर से लागू स्टर्लिंग।
हम सिर्फ करने के लिए जा रहे हैं आदेश में स्टर्लिंग का उपयोग
वास्तव में कुछ तार की लंबाई पाने के लिए।
>> लेकिन वहाँ कोई जादू है हुड के नीचे।
यदि आप जानते हैं कि नीचे डाकू, एक स्ट्रिंग
सिर्फ पात्रों में से एक दृश्य है।
और वर्ण के अनुक्रम कि सभी संख्यानुसार संबोधित किया जा सकता
ब्रैकेट 0, वर्ग के साथ 1, वर्ग 2, और आप
जानते हैं कि एक स्ट्रिंग के अंत में एक है विशेष चरित्र है, आप समझ सकते हैं
कैसे एक में सबसे अधिक कुछ भी करने को कार्यक्रम है, क्योंकि यह करने के लिए नीचे फोड़े
पढ़ने और स्मृति लिख रही है।
यही कारण है, बदल रहा है और तलाश स्मृति में, या बातें चलती
स्मृति में चारों ओर, मुद्रण बातों स्क्रीन, और बहुत आगे है।
>> तो चलो अब इस नयी उपयोग करें क्या वास्तव में तारों की समझ
हुड के नीचे हैं, और वापस छील एक अन्य परत
कि अब तक हम है पूरी तरह अनदेखी की गई।
विशेष रूप से, किसी भी समय में हम एक कार्यक्रम लागू किया गया है,
हम कोड की इस पंक्ति को मिला है शीर्ष के निकट मुख्य घोषणा।
और हम int मुख्य शून्य निर्दिष्ट किया है।
>> और कोष्ठक के अंदर उस शून्य यह सब समय कह दिया गया है कि मुख्य
खुद को किसी भी तर्क नहीं ले करता है।
कोई इनपुट मुख्य है कि उपयोगकर्ता से मिल जा
कुछ अन्य से आ गया है तंत्र, पाने पूर्णांक,
या नाव हो, या स्ट्रिंग मिलता है, या कुछ अन्य कार्य करते हैं।
लेकिन यह पता चला है कि जब आप एक प्रोग्राम लिखने,
आप वास्तव में निर्दिष्ट कर सकते हैं कि इस कार्यक्रम करेगा
मानव से जानकारी लेने के लिए कमांड लाइन पर ही।
>> दूसरे शब्दों में, भले ही हम इस प्रकार अब तक सिर्फ ./hello चल रहा है हैलो
या इसी तरह के कार्यक्रमों के सभी अन्य कार्यक्रमों है कि हम प्रयोग किया गया है,
कि हम खुद नहीं लिखा था, राशि ले गया, ऐसा लगता है,
कमांड लाइन arguments-- मेकअप की तरह बातें।
आप मेकअप की तरह कुछ कहते हैं, और फिर एक दूसरा शब्द।
या बजना, आप बजना कहते हैं, और उसके बाद एक दूसरा शब्द, एक फ़ाइल का नाम है।
>> या यहां तक ​​कि आर एम या सी.पी., के रूप में आप कर सकते हैं देखा या पहले से ही इस्तेमाल किया है
हटाने या फाइल कॉपी करने के लिए।
उन सब के सब तथाकथित लेने के लिए कमांड लाइन arguments--
टर्मिनल प्रॉम्प्ट पर अतिरिक्त शब्द।
लेकिन अब तक, हम अपने आप को नहीं मिला है
से इनपुट लेने के इस विलासिता उपयोगकर्ता जब वह या वह वास्तव में चलाता है
कार्यक्रम में ही कमांड लाइन पर।
>> लेकिन हम उस से फिर से घोषित कर सकते हैं मुख्य आगे नहीं बढ़ रहा है, होने के रूप में
कोष्ठकों में शून्य, लेकिन इन दोनों के तर्क
पहले एक पूर्णांक instead--, और दूसरा कुछ
नया, कुछ है कि हम फोन करने के लिए जा रहे हैं एक सरणी, आत्मा में कुछ इसी तरह
क्या हम एक सूची के रूप में खरोंच में देखा है, लेकिन तारों की एक सरणी, हम जल्द ही देखेंगे के रूप में।
लेकिन चलो द्वारा यह देखने उदाहरण के लिए, हम पहले
भेद है कि वास्तव में क्या मतलब है।
>> तो अगर मैं CS50 आईडीई में जाना यहाँ, मैं आगे चला गया है
और नामक एक फाइल में घोषित निम्नलिखित टेम्पलेट argv0.c।
और केवल एक चीज को नोटिस कि अब तक अलग है
है कि मैं int करने के लिए शून्य बदल दिया है argc स्ट्रिंग खुला ब्रैकेट argv, बंद
ब्रैकेट।
और अब के लिए नोटिस, वहाँ है उन कोष्ठक के अंदर कुछ भी नहीं है।
>> वहाँ कोई संख्या है।
और कोई रहा है, या n, या किसी अन्य पत्र।
मैं सिर्फ का उपयोग कर रहा हूँ अब के लिए वर्ग कोष्ठक,
कारणों से हम आऊँगा वापस बस एक पल में करने के लिए।
>> और अब मैं क्या करने जा रहा हूँ यह है।
argc के बराबर होती है तो बराबर 2-- और याद है कि बराबरी के बराबर होती है
समानता ऑपरेटर की तुलना बाएँ और समानता के लिए सही है।
यह काम नहीं है ऑपरेटर है, जो
एकल बराबर संकेत है, जो प्रतिलिपि का मतलब सही से कुछ मूल्य के लिए छोड़ दिया।
>> argc बराबरी 2 के बराबर होती है, तो मैं चाहता हूँ कहते हैं, printf, नमस्ते, percents, नई लाइन,
और फिर in-- प्लग और यहाँ नया है trick-- argv ब्रैकेट 1, कारणों के लिए
कि हम एक पल में वापस करने के लिए आ जाएगा।
वरना यदि argc नहीं करता बराबर 2, तुम्हें पता है क्या?
चलो बस आगे चलते हैं और हमेशा की तरह, प्रिंट के रूप में, बाहर हैलो कोई प्रतिस्थापन के साथ दुनिया।
>> तो यह प्रतीत होता है कि अगर argc, जो तर्क गिनती के लिए खड़ा है, 2 के बराबर होती है,
मैं बाहर मुद्रित करने के लिए जा रहा हूँ हैलो कुछ न कुछ।
अन्यथा, डिफ़ॉल्ट रूप से, मैं हूँ हैलो मुद्रित करने के लिए दुनिया जा रही है।
अच्छा तो इसका क्या मतलब है?
>> खैर, मुझे आगे जाना है और बचाने के लिए करते हैं इस फ़ाइल, और फिर argv0 करते हैं,
और फिर ./argv0 दर्ज करें।
और यह दुनिया नमस्ते कहते हैं।
अब, ऐसा क्यों है?
>> खैर, यह कभी भी निकलता है कि आप कमांड लाइन पर एक कार्यक्रम चलाने के लिए,
आप में भर रहे हैं कि हम क्या करेंगे आम तौर पर एक बहस वेक्टर कहते हैं।
दूसरे शब्दों में, अपने आप में कंप्यूटर, ऑपरेटिंग सिस्टम,
अपने कार्यक्रम के लिए हाथ करने के लिए जा रहा है खुद को शब्दों के सभी की एक सूची
मानव में टाइप किया है कि शीघ्र, मामले में तुम
प्रोग्रामर क्या करना चाहते हैं कि जानकारी के साथ कुछ और।
और इस मामले में, केवल शब्द मैं प्रॉम्प्ट पर टाइप किया है ./argv0 है।
>> और इसलिए तर्क की संख्या है कि अपने कार्यक्रम के लिए पारित किया जा रहा से एक है।
दूसरे शब्दों में, तर्क गिनती, अन्यथा argc के रूप में जाना
यहाँ एक पूर्णांक के रूप में, बस एक है।
एक, ज़ाहिर है, बराबर दो नहीं करता है।
और तो यह है कि क्या प्रिंट, नमस्ते दुनिया है।
>> लेकिन मुझे यह कहीं ले चलो।
मुझे कहना है, argv0।
और फिर कैसे मारिया के बारे में?
और फिर हिट दर्ज करें।
>> और नोटिस क्या जादुई यहाँ होता है।
अब, के बजाय हैलो दुनिया की, मेरे पास है इस कार्यक्रम का व्यवहार बदल गया
इनपुट मिल से नहीं लेने के द्वारा स्ट्रिंग या कुछ अन्य समारोह,
लेकिन, जाहिर है, मेरे लिए आदेश ही है, क्या मैं मूल रूप में टाइप।
और मैं फिर से इस खेल खेल सकते हैं यह Stelios को बदल रहा है, उदाहरण के लिए।
>> और अब मैं एक और नाम अभी भी देखते हैं।
और यहाँ, मैं Andi कह सकते हैं।
और मैं Zamyla कह सकते हैं।
और हम इस खेल को दिन भर खेल सकते हैं, सिर्फ अलग मूल्यों में plugging,
इतने लंबे समय मैं वास्तव में प्रदान के रूप में प्रॉम्प्ट पर दो शब्द,
ऐसी है कि argc, मेरे तर्क गिनती, 2 है।
>> मैं देख रहा है कि नाम में खामियों को दूर printf, इस हालत यहां प्रति?
तो क्या अब हम करने लगते हैं अर्थपूर्ण क्षमता
एक और तंत्र से इनपुट लेने की, तथाकथित कमांड लाइन से,
बल्कि इंतजार करने के लिए होने से जब तक उपयोगकर्ता कार्यक्रम चलाता है,
और फिर उसे या उसके संकेत मिल स्ट्रिंग की तरह कुछ का उपयोग कर।
>> तो यह क्या है?
Argc, फिर से, बस एक पूर्णांक है, words-- arguments-- की संख्या
उस पर प्रदान की जाती उपयोगकर्ता शीघ्र, टर्मिनल विंडो में,
कार्यक्रम का नाम भी शामिल है।
इसलिए हमारे ./argv0, प्रभावी ढंग से है, कार्यक्रम का नाम,
या कैसे मैं इस कार्यक्रम चलाते हैं।
>> यही कारण है कि एक शब्द के रूप में गिना जाता है।
तो argc 1 होगा।
लेकिन जब मैं Stelios लिखते हैं, या Andi, या Zamyla, या मारिया,
इसका मतलब है कि तर्क गिनती दो है।
और इसलिए अब वहाँ में पारित दो शब्द है।
>> और नोटिस, हम इस तर्क जारी रख सकते हैं।
अगर मैं वास्तव में कहना Zamyla चान की तरह कुछ है,
एक पूरा नाम, जिससे गुजर कुल में तीन तर्क,
अब यह डिफ़ॉल्ट फिर कहते हैं, क्योंकि, बेशक, 3 बराबर नहीं 2 नहीं करता है।
>> और इसलिए इस तरह से, मैं क्या है argv इस नए तर्क के माध्यम का उपयोग
कि हम तकनीकी रूप से कर सकता है कुछ भी हम चाहते हैं कहते हैं।
लेकिन परंपरा से, यह है argv और argc, क्रमशः।
Argv, तर्क वेक्टर, प्रकार है एक प्रोग्रामिंग के लिए एक पर्याय के
सी में एक सरणी सुविधा का आह्वान किया।
>> एक सरणी समान मूल्यों की एक सूची है वापस, वापस करने के लिए वापस करने के लिए वापस करने के लिए।
दूसरे शब्दों में, अगर एक सही यहाँ है राम, अगले एक ठीक उसके बगल में है,
और ठीक उसके बगल में।
वे सब जगह नहीं हो।
और है कि बाद के परिदृश्य है, जहां चीजें सभी स्मृति में जगह खत्म हो गई हैं,
वास्तव में एक शक्तिशाली सुविधा हो सकती है।
लेकिन हम जब हम उस पर वापस करने आया हूँ शौक़ीन डेटा संरचनाओं के बारे में बात करते हैं।
अभी के लिए, एक सरणी सिर्फ एक है सन्निहित स्मृति का हिस्सा है,
से प्रत्येक जिसका तत्व हैं वापस, वापस करने के लिए वापस करने के लिए वापस करने के लिए,
और आम तौर पर एक ही प्रकार के।
>> तो आप के बारे में लगता है कि अगर एक से, पल पहले, एक स्ट्रिंग क्या है?
खैर, एक स्ट्रिंग, Zamyla की तरह, जेड-ए-एम-वाई-एल ए, तकनीकी रूप से, है,
सिर्फ एक सरणी।
यह पात्रों में से एक सरणी है।
>> और अगर ऐसा है हम वास्तव में इस खींचना, के रूप में मैं , स्मृति का एक हिस्सा के रूप में, पहले किया था
ऐसा नहीं है कि इनमें से प्रत्येक पता चला है अक्षर एक बाइट ले लेता है।
और फिर वहाँ है कि विशेष प्रहरी चरित्र, बैकस्लैश 0,
या सभी आठ 0 बिट्स, कि कि स्ट्रिंग के अंत demarcates।
तो एक स्ट्रिंग, यह बदल जाता है बाहर, गंदें शब्द बोलना स्ट्रिंग बोली,
सिर्फ chara-- की एक सरणी है चार एक वास्तविक डेटा प्रकार किया जा रहा है।
>> और अब argv, meanwhile-- की पीठ कार्यक्रम के लिए चलते हैं।
Argv, भले ही हम शब्द को देखने स्ट्रिंग इधर, एक स्ट्रिंग में ही नहीं है।
Argv, तर्क वेक्टर, तारों की एक सरणी है।
>> आप की एक सरणी हो सकता है तो बस के रूप में वर्ण, आप उच्च स्तर हो सकता है,
strings-- की एक सरणी इसलिए, उदाहरण के लिए, जब मैं पहले एक पल के द्वारा लिखे गए ./argv0
argv0, अंतरिक्ष जेड-ए-एम-वाई-एल ए, मैं दावा किया है कि argv, it-- ./argv0 में दो तार था
और जेड-ए-एम-वाई-एल ए। में दूसरे शब्दों में, argc 2 था।
ऐसा क्यों है?
>> खैर, प्रभावी ढंग से, क्या हो रहा है पर इन तारों की प्रत्येक कि
जाहिर है, पात्रों में से एक सरणी है के रूप में पहले, जिसका के प्रत्येक अक्षर के
एक बाइट ले लेता है।
और वास्तविक 0 भ्रमित नहीं है 0 के साथ कार्यक्रम के नाम पर,
जो सभी 80 बिट्स का मतलब है।
और Zamyla, इस बीच, अब भी है यह भी पात्रों में से एक सरणी।
>> दिन के अंत में इसलिए, यह वास्तव हुड के नीचे इस तरह दिखता है।
लेकिन यह कैसे मुख्य argv, स्वभाव से काम करता है, मुझे इस सब को लपेटने के लिए अनुमति देता है
अगर तुम जाएगा, एक बड़ा सरणी में अप , कि अगर हम थोड़ा अधिक आसान बनाने में
तस्वीर की तरह नहीं है और ऐसा लग रहा है क्या काफी वहाँ पैमाने पर करने के लिए आकर्षित,
इस सरणी, पहले ही आकार 2 की है तत्व है जो की एक स्ट्रिंग है,
के दूसरे तत्व जो एक स्ट्रिंग है।
और बदले में, तुम अगर एक तरह से प्रत्येक पर ज़ूम
उन तार, की क्या आप हुड के नीचे देख
कि प्रत्येक स्ट्रिंग सिर्फ है पात्रों में से एक सरणी।
>> अब, बस तार के साथ के रूप में, हम पहुँच प्राप्त करने में सक्षम थे
एक स्ट्रिंग में मैं वें चरित्र को उस वर्ग ब्रैकेट संकेतन का उपयोग कर।
इसी तरह, सरणियों के साथ सामान्य रूप में, हम कर सकते हैं
वर्ग कोष्ठक संकेतन का उपयोग पाने के लिए एक सरणी में तार के किसी भी नंबर पर?
उदाहरण के लिए, मुझे जाने आगे जाना है और यह करते हैं।
>> मुझे आगे जाना है और argv1.c पैदा करते हैं, जो एक छोटे से अलग इस समय है।
इसके बजाय argc2 के लिए जाँच की, मैं बजाय यह करने के लिए जा रहा हूँ।
int मैं 0 मिलता है, मैं कम है argc से, मैं प्लस प्लस,
और फिर इस के अंदर बाहर प्रिंट, प्रतिशत है, नई लाइन, और उसके बाद
argv ब्रैकेट रहा।
>> दूसरे शब्दों में, मैं के साथ काम नहीं कर रहा हूँ समय पर अलग-अलग पात्रों।
Argv, के रूप में इन खाली वर्ग से गर्भित नाम argv के अधिकार के लिए ब्रेसिज़,
argv तारों की एक सरणी है इसका मतलब है।
और argc सिर्फ एक int है।
>> यहाँ इस लाइन, 6, ​​है सेट कह मैं 0 के बराबर है।
अप करने के लिए सभी तरह से गणना, लेकिन argc सहित नहीं।
और फिर प्रत्येक यात्रा पर, एक स्ट्रिंग बाहर प्रिंट।
क्या स्ट्रिंग?
>> argv में मैं वें स्ट्रिंग।
तो, जबकि इससे पहले कि मैं था वर्ग कोष्ठक का उपयोग कर
संकेतन ith पर पाने के लिए एक स्ट्रिंग में चरित्र, अब
मैं वर्ग कोष्ठक संकेतन का उपयोग कर रहा हूँ एक सरणी में ith स्ट्रिंग पर पाने के लिए।
तो यह एक परत की तरह है ऊपर, धारणात्मक।
>> और तो क्या इस बारे में साफ है अब कार्यक्रम, अगर मैं argv1 संकलन,
और फिर ./argv1 करते हैं, और फिर टाइप करें foo बार बाज की तरह कुछ में,
जो तीन डिफ़ॉल्ट शब्द है कि एक हैं कंप्यूटर वैज्ञानिक किसी भी समय के लिए पहुंचता
वह या वह कुछ प्लेसहोल्डर शब्दों की जरूरत है, और हिट दर्ज करें, उन शब्दों के प्रत्येक,
कार्यक्रम का नाम, सहित जो पहले स्थान पर argv में है,
समाप्त होता है एक समय में एक मुद्रित किया जा रहा।
और अगर मैं इस बदलने के लिए, और मैं कहना है argv1 Zamyla चान की तरह कुछ है,
हम उन सभी के तीन मिल शब्द है, जो argv0 है,
argv1, argv2, इस में क्योंकि मामले argc, गिनती, 3 है।
>> लेकिन क्या साफ है अगर आप समझ है कि argv, बस तारों की एक सरणी है
और आप एक स्ट्रिंग है कि समझ में पात्रों में से एक सरणी है,
हम वास्तव में एक तरह से इस का उपयोग कर सकते हैं वर्ग कोष्ठक संकेतन कई बार
एक स्ट्रिंग चुनने के लिए, और उसके बाद का चयन स्ट्रिंग के भीतर एक चरित्र है,
इस प्रकार गहरी के रूप में डाइविंग।
इस उदाहरण में, मुझे जाने दो आगे और इस argv2.c कहते हैं।
और इस उदाहरण में, मुझे आगे चलते हैं और int मैं 0 मिल के लिए following-- करते हैं,
मैं argc की तुलना में कम है, मैं प्लस साथ ही, पहले की तरह।
तो दूसरे words-- और अब इस में काफी जटिल हो रही है।
तब मैं कहने जा रहा हूँ argv में तार पर पुनरावृति,
अपने आप के लिए एक टिप्पणी के रूप में।
और फिर मैं एक के लिए जा रहा हूँ पाश के लिए नेस्ट, तो आप शायद जो
किया है, या माना जहां, कर खरोंच में,
मेरे कहने का int-- मैं जा रहा हूँ मैं फिर से उपयोग करने के लिए नहीं जा रहे हैं,
क्योंकि मैं छाया के लिए नहीं करना चाहते हैं, या एक तरह से मौजूदा मैं ऊपर लिख।
>> मैं करने के लिए, बजाय, जम्मू कहना जा रहा हूँ, क्योंकि कि मैं के बाद चर करने के लिए मेरे जाने है,
जब मैं सिर्फ कोशिश कर रहा हूँ साधारण संख्या गिनती।
जम्मू जाता है के लिए 0-- और भी, एन, जा रहा है , Argv ब्रैकेट मैं की कड़ी लंबाई प्राप्त
इतने लंबे समय के रूप में जे एम की तुलना में कम है, जम्मू प्लस प्लस, निम्न कार्य करें।
और यहाँ दिलचस्प हिस्सा है।
>> एक चरित्र और एक नई लाइन बाहर प्रिंट, argv ब्रैकेट मैं, ब्रैकेट जम्मू में plugging।
ठीक है, तो मुझे यहाँ कुछ टिप्पणी जोड़ें।
पात्रों पर पुनरावृति वर्तमान में स्ट्रिंग,
मैं वें स्ट्रिंग में प्रिंट जम्मू-वें चरित्र।
तो अब, चलो पर विचार करते हैं इन टिप्पणियों क्या मतलब है।
>> तार पर पुनरावृति argv-- में कितने
तार argv में हैं, जो एक सरणी है?
Argc कई है, तो मैं कर रहा हूँ पुनरावृति मैं से बराबर 0 argc तक।
इस बीच, कितने अक्षर argv में मैं वें स्ट्रिंग में हैं?
>> खैर, कि इस सवाल का जवाब पाने के लिए, मैं सिर्फ स्ट्रिंग लंबाई फोन
वर्तमान स्ट्रिंग मैं देखभाल पर के बारे में है, जो argv ब्रैकेट रहा है।
और मैं अस्थायी रूप से स्टोर करने के लिए जा रहा हूँ मूल्य एन में, बस कैशिंग प्रयोजनों के लिए,
दक्षता के लिए यह याद रखना।
और फिर मैं 0 करने के लिए जम्मू से प्रारंभ जा रहा हूँ, इतने लंबे समय के लिए जा जम्मू के रूप में एन कम है रखने के लिए,
और प्रत्येक यात्रा के वेतन वृद्धि जम्मू पर।
>> और फिर यहाँ में, प्रति लाइन 12 पर मेरी टिप्पणी,
एक चरित्र बाहर प्रिंट, एक नई लाइन द्वारा पीछा किया,
विशेष रूप से argv ब्रैकेट मैं मेरे मैं वें स्ट्रिंग देता है
argv-- तो पहला शब्द में, दूसरा शब्द, तीसरे शब्द है, जो भी हो।
और फिर गहरी में जम्मू गोते, और हो जाता है मुझे उस शब्द के जम्मू-वें चरित्र।
और हां, वास्तव में, आप का इलाज कर सकते argv एक बहु-आयामी रूप में,
एक दो आयामी, सरणी के रूप में, जिससे लग रहा है की तरह हर शब्द
अपने मन में इस तरह आंख, और हर चरित्र
एक तरह से में बना है एक कॉलम, कि अगर मदद करता है।
>> हकीकत में, हम जब तंग भविष्य हफ्तों में इस के अलावा,
यह एक छोटे से होने जा रहा है कि अधिक से अधिक परिष्कृत।
लेकिन क्या तुम सच में कर सकते हैं इस बात का लगता है, अब के लिए,
सिर्फ इस दो आयामी रूप में सरणी, जिससे एक यह के स्तर पर
तार के सभी है।
और फिर आप गहरी, और आप में डुबकी यदि व्यक्तिगत चरित्र पर प्राप्त कर सकते हैं
यहाँ इस संकेतन का उपयोग करके उसमें।
>> तो शुद्ध प्रभाव क्या है?
मुझे आगे चलते हैं और argv2-- रफ़ू इसे बनाते हैं।
मैं यहाँ एक गलती।
उलझाव की घोषणा पुस्तकालय समारोह स्टर्लिंग।
तो यह सब समय है, यह शायद उचित
हम एक तरह से खत्म कर रहे हैं कि वास्तव में, जहां हम शुरू कर दिया।
>> मैं बँधा हुआ है, उलझाव की घोषणा पुस्तकालय समारोह स्टर्लिंग।
ठीक है एक मिनट रुको।
मुझे याद है कि, विशेष रूप से के बाद से यह यहीं है।
मैं string.h शामिल करने की जरूरत कार्यक्रम के इस संस्करण।
>> मुझे आगे जाना है और शामिल करते हैं string.h, कि बचाने के लिए, आगे बढ़ो
और argv2 कंपाइल।
और अब, यहाँ हम चले, argv2 बनाने दर्ज करें।
हालांकि यह एक छोटी सी है पहली नज़र में गुप्त,
सूचना है कि, वास्तव में, क्या मुद्रित किया जाता है डॉट argv2 है।
>> लेकिन अगर मैं के बाद कुछ शब्द टाइप शीघ्र, argv2 Zamyla चान की तरह,
दर्ज करें, जो भी एक छोटे से पहली नज़र में गुप्त।
लेकिन अगर हम वापस ऊपर स्क्रॉल, ./argv2 जेड-ए-एम-वाई-एल ए सी-एच-ए-एन।
इसलिए हम हर शब्द पर दोहराया है।
और बदले में, हम पर दोहराया गए एक शब्द के भीतर हर चरित्र।
>> अब, इस सब के बाद, एहसास है कि वहाँ
एक अन्य विस्तार से हम किस तरह से किया गया है इस पूरे समय की अनदेखी।
हम सिर्फ अलग छेड़ा क्या मुख्य के आदानों हो सकता है?
क्या मुख्य के उत्पादन के बारे में?
>> इस समय के सभी, हम किया गया है सिर्फ कॉपी करने और चिपकाने
मुख्य के सामने शब्द पूर्णांक, आप ऑनलाइन देख सकते हैं, हालांकि,
कभी कभी पुराने संस्करणों में गलत तरीके से सी और compilers के, वे शून्य का कहना है कि,
या कुछ भी नहीं।
लेकिन, वास्तव में, संस्करण के लिए सी का हम प्रयोग कर रहे हैं कि,
सी 11, या 2011, एहसास कि यह int होना चाहिए।
और यह तो होना चाहिए शून्य या argc और यहाँ argv।
>> लेकिन क्यों int मुख्य?
यह वास्तव में क्या लौट रहा है?
खैर, यह इस समय के सभी पता चला है, किसी भी समय आप एक कार्यक्रम के मुख्य लिखा है
हमेशा कुछ लौट रहा है।
लेकिन यह तो चुपके से कर रहा है।
>> एक यही कारण है कि कुछ तो है पूर्णांक, रेखा के रूप में 5 चलता है।
लेकिन क्या Int?
ठीक है, वहाँ यह है प्रोग्रामिंग में सम्मेलन,
जिससे अगर कुछ भी नहीं है गलत हो गया और सब कुछ ठीक है,
कार्यक्रमों और समारोहों में आम तौर पर return-- कुछ हद तक counterintuitively--
0।
0 आम तौर पर सब कुछ ठीक है का प्रतीक है।
तो फिर भी आप के बारे में सोच यह कई संदर्भों में के रूप में झूठी,
यह वास्तव में आम तौर पर एक अच्छी बात का मतलब
>> इस बीच, अगर एक कार्यक्रम रिटर्न 1, या नकारात्मक 1, या 5, या नकारात्मक 42,
या किसी भी गैर-0 मूल्य, कि आम तौर पर प्रतीक
कि कुछ गलत हो गया है।
वास्तव में, अपने खुद के मैक या पीसी पर, आप वास्तव में देखा हो सकता है
एक त्रुटि संदेश, जिससे यह कहते हैं कुछ या अन्य, त्रुटि
कोड नकारात्मक 42, या त्रुटि कोड 23, या कुछ ऐसे ही।
यह संख्या आम तौर पर सिर्फ एक संकेत है प्रोग्रामर, या कंपनी के लिए
कि सॉफ्टवेयर बनाया है, क्या है, गलत है और क्यों चला गया
इतना है कि वे के माध्यम से देख सकते हैं उनकी प्रलेखन या कोड,
और यह पता लगाने की क्या त्रुटि का वास्तव में मतलब है।
यह आम तौर पर नहीं है हमारे लिए उपयोगी उपयोगकर्ताओं को समाप्त।
>> लेकिन मुख्य रिटर्न 0, सब कुछ ठीक है जब।
और अगर आप निर्दिष्ट नहीं करते मुख्य वापस आ जाना चाहिए क्या,
यह सिर्फ स्वतः होगा आप के लिए 0 वापसी।
लेकिन कुछ लौटने बाकी वास्तव में उपयोगी है।
>> यह अंतिम कार्यक्रम में, मुझे जाने आगे बढ़ो और इस exit.c कहते हैं,
और आज के के अंतिम परिचय विषयों, एक त्रुटि कोड के रूप में जाना जाता है।
मुझे आगे जाना है और शामिल करते हैं हमारे परिचित फाइलों को शीर्ष, int मुख्य करो।
और इस बार, चलो int argc करते हैं स्ट्रिंग argv, और मेरे साथ कोष्ठक
समझा जाए कि यह सरणी में है।
और फिर मुझे सिर्फ एक मानसिक स्वास्थ्य की जांच करते हैं।
इस बार, अगर argc नहीं करता बराबर 2, तो आप जानते हो क्या?
रहने भी दो।
मुझे लगता है कि कहने जा रहा हूँ, हे, उपयोगकर्ता, आप कमांड लाइन तर्क याद कर रहे हैं
बैकस्लैश एन।
>> और फिर यह बात है।
मैं बाहर निकलने के लिए चाहते हैं।
मैं preemptively करने के लिए जा रहा हूँ, और समय से पहले वास्तव में, वापसी
कुछ संख्या 1 के अलावा अन्य।
पहली बार के लिए मूल्य के लिए जाना त्रुटि है कि हो सकता है 1 है।
आप कुछ अन्य गलत है, तो स्थिति है कि हो सकता है,
तुम बदले 2 या 3 का कहना है कि वापस आ सकता है, या शायद यह भी नकारात्मक 1 या 2 नकारात्मक।
>> ये सिर्फ बाहर निकलने के कोड रहे हैं कि कर रहे हैं, आम तौर पर,
केवल प्रोग्रामर के लिए उपयोगी है, या कंपनी है कि सॉफ्टवेयर शिपिंग है।
लेकिन तथ्य यह है कि यह 0 नहीं है जो महत्वपूर्ण है।
इसलिए इस कार्यक्रम में हैं, मैं चाहता हूँ गारंटी है कि इस कार्यक्रम केवल
काम करता है अगर उपयोगकर्ता मेरे प्रदान करता है दो में से एक तर्क गिनती के साथ,
कार्यक्रम का नाम है, और कुछ अन्य शब्द, मैं के रूप में ज्यादा के रूप में लागू कर सकते हैं,
printf कहावत के साथ उपयोगकर्ता पर चिल्लाओ, लापता कमांड लाइन तर्क है,
1 वापसी।
यही कारण है कि अभी तुरंत होगा कार्यक्रम छोड़ दिया।
>> तभी argc के बराबर होती है 2 हम नीचे मिल जाएगा इधर, पर जो बात मैं कहने जा रहा हूँ,
हैलो प्रतिशत है, बैकस्लैश एन, argv1।
दूसरे शब्दों में, मैं हूँ argv 0 के बाद नहीं जा रहा है,
जो सिर्फ कार्यक्रम का नाम है।
मैं बाहर मुद्रित करने के लिए हैलो, अल्पविराम चाहते हैं, दूसरा शब्द है कि मानव टाइप।
और इस मामले में 13 लाइन, सब कुछ ठीक है।
>> मुझे पता है कि argc 2 तार्किक रूप से इस कार्यक्रम से।
मुझे आगे जाना है और वापस जाने को 0 पर जा रहा हूँ।
एक अलग रूप में, यह ध्यान रखें कि इस के रूप में अच्छी तरह से खरोंच में सच है।
>> तार्किक रूप से, मैं यह कर सकता है और इन पंक्तियों के encapsulate
इस वरना यहाँ खंड में कोड की।
लेकिन उस तरह का है अनावश्यक रूप से मेरे कोड इंडेंट।
और मैं सुपर बनाना चाहते स्पष्ट है कि कोई बात नहीं,
डिफ़ॉल्ट रूप से, हैलो कुछ छपा हो जाएगी,
इतने लंबे समय के उपयोगकर्ता सहयोग के रूप में।
>> तो इसका इस्तेमाल करने के लिए बहुत आम है एक शर्त है, बस एक हैं,
कुछ गलत पकड़ने के लिए स्थिति, और फिर बाहर निकलें।
और फिर, इतने लंबे समय में सब है वैसे, एक और को ही नहीं है,
लेकिन सिर्फ कोड है कि बाहर हैं, क्योंकि यह
इस में बराबर विशेष मामले, तार्किक।
तो मैं 0 लौट रहा हूँ, बस के लिए स्पष्ट रूप से दर्शाता है सब कुछ ठीक है।
>> अगर मैं वापसी 0 छोड़े गए, यह होगा स्वचालित रूप से मेरे लिए ग्रहण किया।
लेकिन अब लगता है कि मैं वापस आ रहा हूँ कम से कम इस मामले में एक,
मैं जा रहा हूँ, अच्छे उपाय के लिए और स्पष्टता, इस मामले में 0 वापसी।
तो अब मुझे आगे जाना है और बाहर निकलने बनाते हैं, जो एक सही segue सिर्फ छोड़ रहा है।
>> लेकिन बाहर निकलें, और मुझे जाने दो आगे और ./exit करते हैं, दर्ज करें।
और कार्यक्रम मुझ पर चिल्लाया, लापता कमांड लाइन तर्क।
ठीक है, मुझे सहयोग करते हैं।
>> मुझे बजाय ./exit करना, डेविड, दर्ज करें।
और अब यह कहते हैं, हैलो डेविड।
और आप सामान्य रूप में यह देखने के लिए नहीं होता।
>> लेकिन यह पता चला है कि वहाँ एक बात यह है कि लिनक्स में खास तरह से वास्तव में देखने के लिए
क्या बाहर निकलें कोड के साथ एक कार्यक्रम से बाहर निकल गया।
एक ग्राफिकल में कभी कभी मैक ओएस या Windows की तरह दुनिया,
आप केवल इन नंबरों जब एक देखना त्रुटि संदेश स्क्रीन पर चबूतरे
और प्रोग्रामर आप उस नंबर से पता चलता है।
लेकिन हम क्या त्रुटि देखना चाहते हैं संदेश है, हम इसे here-- क्या कर सकते हैं
इसलिए ./exit, दर्ज करें, प्रिंट लापता कमांड लाइन तर्क।
>> मैं अब गूंज $ ?, करते हैं जो है हास्यास्पद गुप्त रहा।
लेकिन $?
जादुई जादू है जो कहते हैं, अरे, कंप्यूटर,
मुझे बताओ कि क्या पिछले कार्यक्रम के बाहर निकलने के कोड था।
और मैं हिट दर्ज करें।
मैं 1 देखते हैं, वह है, क्योंकि जो मैं लौटने के लिए अपने मुख्य समारोह में बताया।
>> इस बीच, अगर मैं ./exit डेविड करते हैं, और हिट दर्ज करें, मैं देख रहा हूँ, हैलो डेविड।
और अगर मैं अब गूंज $ करना ?, मैं हैलो 0 देखें।
और इसलिए यह वास्तव में होगा बहुमूल्य जानकारी हो
डिबगर के संदर्भ में, इसलिए नहीं इतना है कि आप, मानव, देखभाल करेगा।
लेकिन डिबगर और अन्य प्रोग्राम हम इस सेमेस्टर इस्तेमाल करेंगे
अक्सर उस नंबर पर दिखेगा, भले ही यह एक तरह से दूर छिपा हुआ है
जब तक आप इसके लिए, करने के लिए देखो निर्धारित किया जाए या नहीं एक कार्यक्रम के
निष्पादन सही या गलत था।
>> और इतना है कि हमारे लिए लाता है यही नहीं, दिन के अंत में।
हम देख द्वारा आज शुरू डिबगिंग, और निश्चित रूप से बारी में
ही है, और तो और अधिक दिलचस्प है, तकनीकी रूप से हुड के नीचे
क्या में तार कर रहे हैं, जो पिछले सप्ताह हम सिर्फ लिए दी ले लिया है,
और निश्चित रूप से उन्हें ले गए के लिए खरोंच में दी।
>> हम तो हम कैसे उपयोग कर सकते हैं को देखा एक स्ट्रिंग में व्यक्तिगत चरित्र,
और उसके बाद फिर से एक उच्च स्तर ले लिया , चीजों को देखने well-- कैसे पर देख रहे हैं
हम व्यक्तिगत पर प्राप्त करना चाहते हैं संरचना की तरह एक सूची में तत्वों,
हम चाहते हैं कि कई तार के साथ ऐसा नहीं कर सकते?
और हम कमांड लाइन तर्क के साथ कर सकते हैं।
लेकिन इस तस्वीर सिर्फ बक्से के यहां इस सामान्य विचार की प्रदर्शनात्मक है
एक सरणी, या एक सूची है, या एक वेक्टर की।
और पर निर्भर करता है संदर्भ, इन शब्दों के सभी
थोड़ा अलग बातें मतलब है।
तो सी में, हम केवल जा रहे हैं एक सरणी के बारे में बात करने के लिए।
और एक सरणी एक हिस्सा है स्मृति की है, जिनमें से प्रत्येक है
तत्वों, सन्निहित हैं वापस, वापस करने के लिए वापस करने के लिए वापस करने के लिए।
>> और उन तत्वों, आम तौर पर, एक ही डेटा प्रकार की, चरित्र,
चरित्र, चरित्र, चरित्र, या स्ट्रिंग, स्ट्रिंग, स्ट्रिंग, स्ट्रिंग, या पूर्णांक,
पूर्णांक, पूर्णांक, जो कुछ भी है हम दुकान करने की कोशिश कर रहे हैं।
लेकिन दिन के अंत में, यह है क्या यह धारणा की तरह लग रहा है।
आप ले जा रहे हैं अपने कंप्यूटर की मेमोरी या राम।
और अगर आप इसे बाहर नक्काशी कर रहे हैं में हूबहू आकार के बक्से, जो सभी के लिए
वापस आ रहे हैं, को वापस करने के लिए, वापस, इस तरह से वापस करने के लिए।
>> और क्या बारे में अच्छा है इस विचार, और यह तथ्य
हम इस तरह से व्यक्त कर सकते हैं कि मानों हमारे डेटा संरचनाओं के साथ पहली बार
कक्षा में, हम शुरू कर सकते हैं मतलब कोड के साथ समस्याओं को हल करने के लिए
कि हफ्ते 0 में इतना intuitively आया था।
आप फोन याद होगा पुस्तक उदाहरण है, जहां
हम एक विभाजन का इस्तेमाल किया और जीत के लिए, या एक द्विआधारी खोज एल्गोरिथ्म,
एक पूरे के माध्यम से झारना नाम और नंबर का एक गुच्छा।
लेकिन हम मान लिया है, याद है, वह यह है कि फोन की किताब पहले से ही हल किया गया था
किसी और पहले से ही था कि out-- नामों की एक सूची दी सोचा
और numbers-- उन्हें alphabetize करने के लिए कैसे।
और अब है कि सी में हम, भी क्षमता है
चीजों को बाहर रखना करने के लिए, नहीं शारीरिक रूप से एक फोन बुक में
लेकिन लगभग एक कंप्यूटर में स्मृति, हम सक्षम अगले सप्ताह किया जाएगा
पहले this-- फिर से शुरू करने की एक array-- में हमारे डेटा संरचनाओं की
लेकिन अधिक महत्वपूर्ण बात, वास्तविक कंप्यूटर विज्ञान एल्गोरिदम लागू
कोड में, जिसके साथ हम स्टोर कर सकते हैं इस तरह के ढांचे में डेटा,
और फिर यह हेरफेर करने के लिए शुरू, और वास्तव में इसके साथ समस्याओं को हल करने के लिए,
और उस के शीर्ष पर निर्माण करने के लिए, अंत में, सी में कार्यक्रम,
अजगर में, जावास्क्रिप्ट में, एसक्यूएल के साथ डेटाबेस क्वैरी?
>> और हम यह है कि इन सभी को देखेंगे विभिन्न विचारों गूंथ।
लेकिन अब के लिए, कि याद करते हैं डोमेन है कि हम आज पेश
इस बात को यहाँ था, और क्रिप्टोग्राफी की दुनिया।
और तुम अपने आप को अगले समस्याओं के बीच समाधान होगा क्रिप्टोग्राफी की कला है,
पांव मार और de-पांव मार जानकारी है, और संकेताक्षर
और पाठ का गूढ़ रहस्य, और अंत में यह सोचते
अब आप जानते हैं कि क्या हुड के नीचे है
तो यह है कि जब आप देखते हैं या प्राप्त इस तरह से एक संदेश है, आप
अपने आप को यह समझने कर सकते हैं।
यह सब, और अधिक अगली बार।
>> [वीडियो प्लेबैक]
>> -Mover सिर्फ पहुंचे।
मैं यात्रा जाने के लिए जा रहा हूँ अपने कॉलेज के प्रोफेसर हैं।
हां।
नमस्ते।
ये तुम हो।
रुकिए!
डेविड।
मैं सिर्फ लगाने की कोशिश कर रहा हूँ तुम्हें क्या हुआ बाहर।
कृपया, कुछ भी मदद कर सकता है।
आप अपने कॉलेज के थे रूममेट, तुम नहीं थे?
तुम उसे जब साथ वहाँ थे वह CS50 परियोजना समाप्त हो गया?
>> [संगीत बजाना]
>> -यही CS50 था।
>> मुझे इस जगह से प्यार है।
>> -खाएं।
हम व्यापार के बाहर जा रहे हैं।
>> [अंत प्लेबैक]