1 00:00:00,000 --> 00:00:02,350 >> [संगीत बजाना] 2 00:00:02,350 --> 00:00:05,444 3 00:00:05,444 --> 00:00:06,360 डौग लॉयड: ठीक है। 4 00:00:06,360 --> 00:00:07,770 एक अजीब विषय की तरह है, है ना? 5 00:00:07,770 --> 00:00:09,050 जादुई संख्या। 6 00:00:09,050 --> 00:00:12,012 वह जब वह मतलब क्या हरिणी जादुई संख्या के बारे में बात कर रही है? 7 00:00:12,012 --> 00:00:14,220 खैर, कुछ कार्यक्रमों के हम CS50 में लिखा है कि 8 00:00:14,220 --> 00:00:16,660 अब तक कुछ अजीब पड़ा है संख्या की तरह उन्हें में फेंक दिया। 9 00:00:16,660 --> 00:00:19,680 शायद कारणों के लिए हम नहीं करते पूरी तरह से ठीक है अब समझते हैं। 10 00:00:19,680 --> 00:00:23,950 उदाहरण के लिए, मारियो समस्या में, हम 23 पर पिरामिड की ऊंचाई छाया हुआ है। 11 00:00:23,950 --> 00:00:26,880 हम स्पष्ट रूप से आप ने कहा अधिक से अधिक 23 नहीं जा सकते। 12 00:00:26,880 --> 00:00:28,702 >> लेकिन 23 क्या मतलब है? 13 00:00:28,702 --> 00:00:30,410 खैर, आप पढ़ सकते हैं , ध्यान से आप कल्पना 14 00:00:30,410 --> 00:00:32,493 देखा गया है कि हो सकता है कारण है कि हम 23 पर यह छाया हुआ 15 00:00:32,493 --> 00:00:36,160 मानक ऊंचाई क्योंकि एक टर्मिनल विंडो के 24 है। 16 00:00:36,160 --> 00:00:38,860 और हम हैं यदि हां पिरामिड है कि अधिक से लम्बे हो, 17 00:00:38,860 --> 00:00:41,290 यह इस अजीब बात यह है कि ऐसा हो सकता है जहां यह बंद स्क्रीन रन। 18 00:00:41,290 --> 00:00:45,140 आप जानते हैं और, क्या करता है कि ठीक है, के संदर्भ में क्या मतलब है? 19 00:00:45,140 --> 00:00:48,880 >> 23 तुरंत स्पष्ट का अर्थ है किसी के लिए, जो अपने कार्यक्रम पर लग रहा है 20 00:00:48,880 --> 00:00:51,550 और शायद एक अलग है आकार टर्मिनल विंडो? 21 00:00:51,550 --> 00:00:52,330 शायद नहीं। 22 00:00:52,330 --> 00:00:53,080 यह ठीक है, जैसा लगता है। 23 00:00:53,080 --> 00:00:55,005 खैर, ऐसा क्यों है कि अभी कम से कम 23 से अधिक है? 24 00:00:55,005 --> 00:00:56,880 सामान्य में, यह एक तरह है एक बुरी आदत से वास्तव में 25 00:00:56,880 --> 00:00:58,940 अपने कोड में स्थिरांक लिखने के लिए। 26 00:00:58,940 --> 00:01:02,190 आप वास्तव में क्या है, जब ऐसा करने में अपने कोड में एक निरंतर लिखते हैं, 27 00:01:02,190 --> 00:01:05,630 यह प्रयोग कर के रूप में भेजा कभी कभी जादुई संख्या, जो कुछ है 28 00:01:05,630 --> 00:01:08,030 हम आम तौर पर कोशिश करते हैं और बचना चाहते हैं। 29 00:01:08,030 --> 00:01:12,830 >> उदाहरण के लिए, एक नजर डालते हैं यहाँ इस सादे समारोह में। 30 00:01:12,830 --> 00:01:15,726 जाहिर है कोई डाटा नहीं है सी में टाइप कार्ड या डेक बुलाया। 31 00:01:15,726 --> 00:01:16,600 तो बस मेरे साथ सहन। 32 00:01:16,600 --> 00:01:18,910 यह एक छोटा सा है स्यूडोकोड यहाँ में मिलाया। 33 00:01:18,910 --> 00:01:21,050 यह कहा जाता है एक समारोह है जाहिर है कि कार्ड सौदा 34 00:01:21,050 --> 00:01:26,570 इसकी पैरामीटर के रूप में एक डेक लेता है, और मेरे लिए उत्पादन होगा एक ही कार्ड। 35 00:01:26,570 --> 00:01:30,990 >> और मैं यहाँ जहां मैं कुछ कर रहा हूँ , 0-52 चलता है कि एक पाश है 36 00:01:30,990 --> 00:01:33,394 और मैं एक कार्ड सौदा। 37 00:01:33,394 --> 00:01:35,310 खैर, हम एक जादू मिल गया है यहाँ में नंबर, सही है। 38 00:01:35,310 --> 00:01:38,790 आप जादुई संख्या है क्या देखते हैं? 39 00:01:38,790 --> 00:01:42,280 या अधिक महत्वपूर्ण बात, आप करते हैं यहाँ समस्या क्या है? 40 00:01:42,280 --> 00:01:44,310 विशेष रूप से इस करता है, तो सिर्फ एक समारोह है 41 00:01:44,310 --> 00:01:48,030 एक में अपनी फाइल में फ़ोल्डर है जिसमें 42 00:01:48,030 --> 00:01:49,970 अलग से एक गुच्छा फाइलें, जिनमें से प्रत्येक का 43 00:01:49,970 --> 00:01:51,670 ताश के पत्तों की एक डेक करने के लिए एक और बात करता है। 44 00:01:51,670 --> 00:01:57,310 शायद यह उन shuffles, या एक हाथ सौदों पांच कार्ड के बजाय एक ही कार्ड की। 45 00:01:57,310 --> 00:01:59,420 >> तुम क्या देखते हो यहाँ समस्या हो सकती है? 46 00:01:59,420 --> 00:02:03,220 आप जादुई संख्या को देखते हैं मैं कोड में इंजेक्शन है? 47 00:02:03,220 --> 00:02:04,390 यह सही है, 52 है। 48 00:02:04,390 --> 00:02:06,440 >> की तरह है, intuitively आप शायद जानते हैं, ठीक है। 49 00:02:06,440 --> 00:02:09,740 का एक मानक डेक की तरह कार्ड 52 कार्ड होते हैं। 50 00:02:09,740 --> 00:02:12,570 लेकिन हमारे कार्यक्रम में, यह सिर्फ है एक तरह से वहाँ में खाक छानने। 51 00:02:12,570 --> 00:02:15,280 अचानक एक 52 वहाँ की तरह है। 52 00:02:15,280 --> 00:02:18,290 >> इस को हल करने के लिए एक ही रास्ता समस्या यह करने के लिए है। 53 00:02:18,290 --> 00:02:22,724 अब हम बहुत स्पष्ट रूप से कर रहे हैं 52 के रूप में डेक आकार बाहर बुला रही है। 54 00:02:22,724 --> 00:02:25,390 ऐसा लगता है कि एक छोटे से अधिक सहज ज्ञान युक्त देता है जब पाश के लिए में अर्थ 55 00:02:25,390 --> 00:02:28,650 हम तो, मैं कहता हूँ पर बाद में डेक आकार की तुलना में कम है। 56 00:02:28,650 --> 00:02:32,666 यह सिर्फ 52 कह से बेहतर लगता है। 57 00:02:32,666 --> 00:02:34,290 अब यह वास्तव में इस समस्या को ठीक करता है। 58 00:02:34,290 --> 00:02:38,460 यह कुछ प्रतीकात्मक देता है स्थिर करने के लिए, जिसका अर्थ है। 59 00:02:38,460 --> 00:02:40,820 लेकिन यह एक तरह से वास्तव में है एक और समस्या का परिचय 60 00:02:40,820 --> 00:02:43,770 कि तुरंत स्पष्ट नहीं हो सकता है। 61 00:02:43,770 --> 00:02:45,859 यहां तक ​​कि इस चर यदि globally-- घोषित किया जाता है 62 00:02:45,859 --> 00:02:47,650 आप इसे क्या याद है हम घोषणा करते हैं जब इसका मतलब 63 00:02:47,650 --> 00:02:50,500 विश्व स्तर पर स्थानीय स्तर पर की तुलना में एक चर? 64 00:02:50,500 --> 00:02:53,340 हम एक चर घोषणा भले ही विश्व स्तर पर, क्या अगर वहाँ 65 00:02:53,340 --> 00:02:55,500 एक अन्य समारोह में कार्यों के हमारे कमरे 66 00:02:55,500 --> 00:02:59,750 कार्ड हेरफेर के साथ सौदा है कि कि अनजाने में, डेक आकार में परिवर्तन 67 00:02:59,750 --> 00:03:02,727 या इसके द्वारा यह बढ़ जाती है 1 या इसे 1 से कम हो जाती है। 68 00:03:02,727 --> 00:03:04,060 यह ठीक है, मुसीबत जादू सकता है? 69 00:03:04,060 --> 00:03:08,261 हम एक सेट के साथ काम कर रहे हैं, खासकर अगर कार्ड का पूरा डेक फेरबदल जहां 70 00:03:08,261 --> 00:03:08,760 आवश्यक है। 71 00:03:08,760 --> 00:03:12,804 डेक आकार कम हो जाती है तो 1 से, उदाहरण के लिए, 51 को, 72 00:03:12,804 --> 00:03:14,970 हम वास्तव में फेरबदल नहीं कर रहे हैं संभवतः सभी कार्ड। 73 00:03:14,970 --> 00:03:16,500 हम उनमें से एक बाहर जा रहे हैं। 74 00:03:16,500 --> 00:03:21,680 और कहा कि मूल्य शायद हो सकता है भविष्यवाणी की है या एक बुरा अभिनेता द्वारा शोषण किया। 75 00:03:21,680 --> 00:03:24,920 >> सी एक क्या कहा जाता है प्रदान करता है पूर्वप्रक्रमक निर्देश, जो 76 00:03:24,920 --> 00:03:27,764 यह भी एक मैक्रो के लिए कहा जाता है प्रतीकात्मक स्थिरांक बनाने। 77 00:03:27,764 --> 00:03:30,180 और वास्तव में, यदि आप पहले से ही है एक पूर्वप्रक्रमक निर्देश देखा, 78 00:03:30,180 --> 00:03:32,916 आप यह नहीं सुना है, भले ही # शामिल साथ कि कहा जाता है। 79 00:03:32,916 --> 00:03:37,150 यह एक मैक्रो का एक और उदाहरण है या पूर्वप्रक्रमक निर्देश। 80 00:03:37,150 --> 00:03:41,290 >> जिस तरह से प्रतीकात्मक स्थिरांक बनाने के लिए, या एक स्थिर करने के लिए एक नाम दे रही है 81 00:03:41,290 --> 00:03:43,740 यह अधिक है तो यह है कि जिसका अर्थ है, इस प्रकार है। 82 00:03:43,740 --> 00:03:47,030 #define, नाम, प्रतिस्थापन। 83 00:03:47,030 --> 00:03:49,140 एक तरफ वास्तव में महत्वपूर्ण यहाँ बहुत जल्दी। 84 00:03:49,140 --> 00:03:54,180 पर एक अर्धविराम मत डालो अपने #defines के अंत। 85 00:03:54,180 --> 00:03:57,310 तो यह #define, नाम, प्रतिस्थापन है। 86 00:03:57,310 --> 00:03:59,540 >> अपने कार्यक्रम संकलित किया जाता है, क्या वास्तव में होता है 87 00:03:59,540 --> 00:04:01,740 जा रहा है, तो संकलक है अपने कोड के माध्यम से जाने के लिए 88 00:04:01,740 --> 00:04:06,770 और के हर उदाहरण की जगह साथ जो कुछ शब्द "नाम" आप 89 00:04:06,770 --> 00:04:08,860 स्थानापन्न के रूप में डाल दिया। 90 00:04:08,860 --> 00:04:13,060 तुलनात्मक रूप से, # शामिल है, तो प्रकार की कॉपी करने और चिपकाने के समान है, 91 00:04:13,060 --> 00:04:15,700 तो #define की तरह है खोजने के लिए और जगह के लिए समान है, 92 00:04:15,700 --> 00:04:19,180 क्या तुमने कभी एक में है कि सुविधा का उपयोग किया है वर्ड प्रोसेसिंग प्रोग्राम, उदाहरण के लिए। 93 00:04:19,180 --> 00:04:26,345 >> उदाहरण के लिए, यदि ऐसा है तो मैं 3.14159265 के रूप में गड़बड़ी #define, 94 00:04:26,345 --> 00:04:28,720 क्या आप बेहतर गणितीय कर रहे हैं झुका और आप अचानक 95 00:04:28,720 --> 00:04:31,640 3.14159265 उड़ते देखा चारों ओर अपने कोड में, 96 00:04:31,640 --> 00:04:33,517 आप शायद यह गड़बड़ी के बारे में बात कर रहा है पता है। 97 00:04:33,517 --> 00:04:35,850 लेकिन हो सकता है कि हम इसे एक दे सकते हैं छोटे से अधिक प्रतीकात्मक अर्थ। 98 00:04:35,850 --> 00:04:39,850 और हम बजाय #define कह सकते हैं नंबरों की कि कौर के रूप में गड़बड़ी 99 00:04:39,850 --> 00:04:42,110 मैं रखने के लिए नहीं जा रहा हूँ कि और अधिक से अधिक पढ़ने। 100 00:04:42,110 --> 00:04:45,560 >> और क्या उसके बाद होने जा रहा है कार्यक्रम है जब संकलन समय है 101 00:04:45,560 --> 00:04:48,530 संकलित, पहली बात यह है कि क्या होगा इसके माध्यम से जाना होगा 102 00:04:48,530 --> 00:04:51,520 और यह हर समय बदल देगा आईटी, कैपिटल पी, पूंजी मैं देखता 103 00:04:51,520 --> 00:04:55,610 यह सचमुच के साथ की जगह लेंगे 3.14 और इतने पर, इतना है कि आप 104 00:04:55,610 --> 00:04:58,090 यह हर प्रकार की जरूरत नहीं है अभी भी समय अपने कार्यक्रम जबकि 105 00:04:58,090 --> 00:05:00,631 कार्यक्षमता है कि आप आप काम कर रहे हैं, क्योंकि उम्मीद 106 00:05:00,631 --> 00:05:05,090 छेड़खानी के साथ, गुणा, यह गड़बड़ी से जो कुछ भी है, विभाजित। 107 00:05:05,090 --> 00:05:08,230 >> आप इस तक सीमित नहीं हैं केवल संख्या के लिए प्रतिस्थापन। 108 00:05:08,230 --> 00:05:12,279 उदाहरण के लिए, मैं परिभाषित कर सकता है स्ट्रिंग CS50 के रूप में पाठ्यक्रम। 109 00:05:12,279 --> 00:05:14,070 इस मामले में, जब कार्यक्रम संकलित किया गया है, 110 00:05:14,070 --> 00:05:16,236 # परिभाषित के माध्यम से जाना होगा कोड, हर बार की जगह 111 00:05:16,236 --> 00:05:19,900 यह स्ट्रिंग CS50 के साथ "पाठ्यक्रम" देखता है। 112 00:05:19,900 --> 00:05:21,720 >> आप यहाँ पर ध्यान देंगे भी मुझे लगता है कि बार-बार 113 00:05:21,720 --> 00:05:26,090 #define मेरे सारे प्रतीकात्मक परिभाषित स्थिरांक, तो बात है, 114 00:05:26,090 --> 00:05:28,130 सभी टोपियां में हमेशा से रहे हैं। 115 00:05:28,130 --> 00:05:28,960 यह एक सम्मेलन है। 116 00:05:28,960 --> 00:05:30,170 यह आवश्यक नहीं है। 117 00:05:30,170 --> 00:05:33,900 कारण आम तौर पर लोगों का उपयोग करेगा सभी राजधानियों वे #defining रहे हैं जब 118 00:05:33,900 --> 00:05:37,590 सिर्फ इतना है कि यह वास्तव में स्पष्ट करने के लिए किया जाता है मेरे कोड के इस विशेष तत्व 119 00:05:37,590 --> 00:05:38,820 एक परिभाषित स्थिर है। 120 00:05:38,820 --> 00:05:43,730 यह लोअरकेस था, यह संभव है कि यह एक चर के साथ भ्रमित किया जा सकता है। 121 00:05:43,730 --> 00:05:46,120 और कहा कि शायद है एक अच्छी बात यह है कि ऐसा करने के लिए नहीं। 122 00:05:46,120 --> 00:05:48,910 >> इसलिए इस विशेष समाधान में ज्यादा बेहतर है 123 00:05:48,910 --> 00:05:50,550 पिछले वाले से किसी से भी। 124 00:05:50,550 --> 00:05:59,950 जब मैं पहली बार #define डेक आकार 52, तब तो अब यहां 52, या डेक आकार के मेरे प्रयोग, 125 00:05:59,950 --> 00:06:01,850 एक बहुत अधिक सहज और एक बहुत सुरक्षित है। 126 00:06:01,850 --> 00:06:03,280 आप एक निरंतर हेरफेर नहीं कर सकते। 127 00:06:03,280 --> 00:06:05,259 आप 52 प्लस प्लस नहीं कह सकता। 128 00:06:05,259 --> 00:06:06,800 यही कारण है कि 53 के लिए इसे बदलने के लिए नहीं जा रहा है। 129 00:06:06,800 --> 00:06:09,390 यदि आप कुछ करने के लिए 52 को बदल नहीं सकते। 130 00:06:09,390 --> 00:06:12,470 >> आप एक चर बदल सकते हैं जिसका मूल्य 52 है, 131 00:06:12,470 --> 00:06:14,870 जो हम पहले था पहले तय किया गया था। 132 00:06:14,870 --> 00:06:17,000 और अगर आप को बढ़ा सकता है 53 कि चर। 133 00:06:17,000 --> 00:06:21,100 लेकिन अगर आप 52 प्लस प्लस और नहीं कह सकता अचानक 53 में 52 की बारी है कि लोगों की है। 134 00:06:21,100 --> 00:06:23,350 52 हमेशा 52 है। 135 00:06:23,350 --> 00:06:28,860 और तो आप अनजाने में परिवर्तन नहीं कर सकते इसे यहाँ से छेड़छाड़ डेक आकार, 136 00:06:28,860 --> 00:06:29,940 137 00:06:29,940 --> 00:06:32,390 >> एक और अच्छी टीम हालांकि इस का असर है 138 00:06:32,390 --> 00:06:38,310 कि जैसा कि आप जानते हैं कि नहीं दुनिया भर के सभी देशों 139 00:06:38,310 --> 00:06:40,690 आकार 52 के कार्ड के डेक का उपयोग करें? 140 00:06:40,690 --> 00:06:45,630 उदाहरण के लिए, यह वास्तव में आम है जर्मनी, 32 की एक डेक के आकार का उपयोग करने के लिए 141 00:06:45,630 --> 00:06:48,020 वे कुछ बाहर पट्टी जहां कम मूल्य ताश के पत्तों की। 142 00:06:48,020 --> 00:06:50,960 और इस मामले में, मुझे लगता है पोर्ट मेरे कमरे चाहता था 143 00:06:50,960 --> 00:06:55,390 साथ सौदा है कि कार्यों की जर्मनी के लिए कार्ड में गड़बड़ी। 144 00:06:55,390 --> 00:06:59,440 मैं पहले उदाहरण में कर सकते थे हम पता चला है, जाने के लिए और जगह है 145 00:06:59,440 --> 00:07:03,570 32 के साथ अपने कोड में 52 के सभी उदाहरणों। 146 00:07:03,570 --> 00:07:07,940 >> लेकिन यहां मैं परिभाषित करता है, तो डेक आकार मेरे कोड के ऊपर से ही 32 के रूप में, 147 00:07:07,940 --> 00:07:11,730 मैं इसे बदलने की जरूरत है, तो मैं कर सकता हूँ बस जाओ और एक बात है कि बदल जाते हैं। 148 00:07:11,730 --> 00:07:15,010 मेरे कोड फिर कंपाइल करने, और सभी के अचानक यह माध्यम से प्रसारित। 149 00:07:15,010 --> 00:07:18,850 वास्तव में, हम डेक को बदल सकते हैं हम चाहते हैं कि किसी भी मूल्य के लिए आकार। 150 00:07:18,850 --> 00:07:22,500 >> मैं एक में आप ब्याज सकता है डेक आकार पिक के खेल? 151 00:07:22,500 --> 00:07:23,430 >> मैं डौग लॉयड हूँ। 152 00:07:23,430 --> 00:07:25,840 और इस CS50 है। 153 00:07:25,840 --> 00:07:27,772