1 00:00:00,000 --> 00:00:09,572 2 00:00:09,572 --> 00:00:12,030 روب BOWDEN: مرحبا، أنا روب بودين، ودعونا نتحدث عن quiz0. 3 00:00:12,030 --> 00:00:13,280 4 00:00:13,280 --> 00:00:14,545 >> لذلك، السؤال الأول. 5 00:00:14,545 --> 00:00:17,750 هذا هو السؤال أين كنت في حاجة إلى رمز العدد 6 00:00:17,750 --> 00:00:21,270 127 في المصابيح الثنائية. 7 00:00:21,270 --> 00:00:23,550 إذا كنت تريد، هل يمكن قيام التحويل المنتظم 8 00:00:23,550 --> 00:00:25,950 من bi-- أو من عشري إلى ثنائي. 9 00:00:25,950 --> 00:00:28,300 ولكن هذا سيكون على الارجح أن تأخذ الكثير من الوقت. 10 00:00:28,300 --> 00:00:31,750 أعني، هل يمكن معرفة ذلك، موافق، 1 هو في هناك، و 2 في هناك، 11 00:00:31,750 --> 00:00:33,650 4 في هناك، 8 في هناك. 12 00:00:33,650 --> 00:00:39,280 طريقة أسهل، 127 128 ناقص واحد. 13 00:00:39,280 --> 00:00:42,013 أن المصباح الكهربائي أقصى اليسار هي 128 بت. 14 00:00:42,013 --> 00:00:43,490 15 00:00:43,490 --> 00:00:47,860 حتى 127 هو حقا فقط كل من المصابيح الأخرى، 16 00:00:47,860 --> 00:00:51,420 منذ هذا هو أقصى اليسار المصباح الكهربائي ناقص 1. 17 00:00:51,420 --> 00:00:52,800 هذا كل شيء عن هذا السؤال. 18 00:00:52,800 --> 00:00:54,060 >> سؤال واحد. 19 00:00:54,060 --> 00:00:56,710 حتى مع 3 بت يمكنك تمثل 8 قيم متميزة. 20 00:00:56,710 --> 00:01:01,000 لماذا، إذن، هو أكبر 7 غير سالب صحيح عشري يمكنك تمثيل؟ 21 00:01:01,000 --> 00:01:04,050 حسنا، إذا استطعنا فقط 8 تمثيل قيم واضحة، 22 00:01:04,050 --> 00:01:07,430 فما نحن في طريقنا لنكون يمثل هو من 0 إلى 7. 23 00:01:07,430 --> 00:01:08,745 0 يستغرق فترة تصل إحدى القيم. 24 00:01:08,745 --> 00:01:09,980 25 00:01:09,980 --> 00:01:11,190 >> السؤال الثاني. 26 00:01:11,190 --> 00:01:14,610 مع بت ن، وكم متميزة يمكنك تمثل القيم؟ 27 00:01:14,610 --> 00:01:19,080 لذلك، مع بت ن، لديك 2 القيم الممكنة لكل قليلا. 28 00:01:19,080 --> 00:01:22,300 لذلك لدينا 2 القيم المحتملة ل بت الأول، 2 القيم المحتملة 29 00:01:22,300 --> 00:01:24,450 للمرة الثانية، 2 ممكن للثالث. 30 00:01:24,450 --> 00:01:28,730 وذلك أن 2 مرات 2 مرات 2، و في نهاية المطاف فإن الجواب هو 2 إلى ن. 31 00:01:28,730 --> 00:01:30,010 32 00:01:30,010 --> 00:01:31,100 >> السؤال الثالث. 33 00:01:31,100 --> 00:01:33,450 ما هو 0x50 في ثنائي؟ 34 00:01:33,450 --> 00:01:39,490 هكذا نتذكر أن لديه عشري جدا تحويل مباشر إلى ثنائي. 35 00:01:39,490 --> 00:01:43,180 حتى هنا، نحن بحاجة فقط للنظر في 5 و0 مستقل. 36 00:01:43,180 --> 00:01:45,110 فما هو 5 في ثنائي؟ 37 00:01:45,110 --> 00:01:48,400 0101، وهذا هو الشيء 1 والشيء 4. 38 00:01:48,400 --> 00:01:49,900 ما هو 0 في ثنائي؟ 39 00:01:49,900 --> 00:01:50,520 لا صعبة. 40 00:01:50,520 --> 00:01:52,180 0000. 41 00:01:52,180 --> 00:01:54,970 حتى مجرد وضعها معا، و هذا هو العدد الكامل في ثنائي. 42 00:01:54,970 --> 00:01:57,640 01010000. 43 00:01:57,640 --> 00:02:00,439 وإذا أردت هل يمكن خلع أن أقصى اليسار من الصفر. 44 00:02:00,439 --> 00:02:01,105 انها لا صلة لها بالموضوع. 45 00:02:01,105 --> 00:02:02,920 46 00:02:02,920 --> 00:02:05,733 >> حتى ذلك الحين بدلا من ذلك، ما هو 0x50 في العشرية؟ 47 00:02:05,733 --> 00:02:08,649 إذا أردت، يمكنك could-- إذا كنت أكثر راحة مع ثنائي، 48 00:02:08,649 --> 00:02:11,340 هل يمكن أن تأخذ الجواب الثنائية وتحويل ذلك إلى عشري. 49 00:02:11,340 --> 00:02:13,870 أو أننا يمكن أن نتذكر فقط أن عشري. 50 00:02:13,870 --> 00:02:21,140 بحيث 0 هو في المقام 0-التاسع، و 5 في ال 16 إلى المركز الأول. 51 00:02:21,140 --> 00:02:25,990 حتى هنا، لدينا 5 مرات إلى 16 أولا، بالإضافة إلى 0 مرات 16 إلى الصفر، 52 00:02:25,990 --> 00:02:27,520 80. 53 00:02:27,520 --> 00:02:29,710 وإذا نظرت إلى اللقب على السؤال، 54 00:02:29,710 --> 00:02:32,920 كان CS 80، والتي كانت نوع من تلمح إلى إجابة لهذه المشكلة. 55 00:02:32,920 --> 00:02:34,460 56 00:02:34,460 --> 00:02:35,420 >> السؤال الخامس. 57 00:02:35,420 --> 00:02:40,320 لدينا هذا السيناريو خدش، وهو تكرار 4 مرات زبدة الفول السوداني جيلي. 58 00:02:40,320 --> 00:02:42,800 فكيف نفعل نحن الآن التعليمات البرمجية التي في C؟ 59 00:02:42,800 --> 00:02:47,730 حسنا، لدينا here-- الجزء بالخط العريض هو الجزء الوحيد كان لديك لتنفيذها. 60 00:02:47,730 --> 00:02:51,950 لذلك لدينا 4 حلقة هذا ما حلقات 4 مرات، جي printf زبدة الفول السوداني وهلام، 61 00:02:51,950 --> 00:02:53,910 مع خط جديد كما تطلب المشكلة ل. 62 00:02:53,910 --> 00:02:55,250 63 00:02:55,250 --> 00:02:57,490 >> السؤال الستة، مشكلة خدش آخر. 64 00:02:57,490 --> 00:03:00,210 ونحن نرى أننا في حلقة إلى الأبد. 65 00:03:00,210 --> 00:03:05,000 نقوله ط متغير ثم تزايد ط بنسبة 1. 66 00:03:05,000 --> 00:03:09,580 الآن نريد أن نفعل ذلك في C. وهناك طرق متعددة يمكن أن فعلنا هذا. 67 00:03:09,580 --> 00:03:12,840 هنا حدث علينا أن المدونة حلقة إلى الأبد باعتباره بينما (صحيح). 68 00:03:12,840 --> 00:03:16,600 لذلك فإننا نعلن من المتغير الأول، فقط كما كان لدينا ط متغير في خدش. 69 00:03:16,600 --> 00:03:21,950 إعلان ط متغير، وإلى الأبد بينما (صحيح)، ونحن نقول المتغير الأول. 70 00:03:21,950 --> 00:03:25,260 هكذا printf٪ i-- أو هل يمكن أن استخدمتها٪ د. 71 00:03:25,260 --> 00:03:27,985 نقول هذا المتغير، و ثم زيادة ذلك، وأنا + +. 72 00:03:27,985 --> 00:03:29,560 73 00:03:29,560 --> 00:03:30,830 >> السؤال سبعة. 74 00:03:30,830 --> 00:03:35,560 الآن نحن نريد أن نفعل شيئا مشابها جدا لماريو النقطة ج من مشكلة مجموعة واحدة. 75 00:03:35,560 --> 00:03:39,110 نحن نريد لطباعة هذه الهاش، نحن نريد لطباعة خمسة 76 00:03:39,110 --> 00:03:40,700 قبل ثلاثة مستطيل من هذه التجزئة. 77 00:03:40,700 --> 00:03:41,770 78 00:03:41,770 --> 00:03:43,162 فكيف نحن ذاهبون للقيام بذلك؟ 79 00:03:43,162 --> 00:03:45,370 حسنا، نقدم لك كله مجموعة من الرموز، وكنت للتو 80 00:03:45,370 --> 00:03:47,560 لدينا لملء وظيفة الشبكة الطباعة. 81 00:03:47,560 --> 00:03:49,540 >> فماذا PrintGrid تبدو وكأنها؟ 82 00:03:49,540 --> 00:03:51,480 كذلك كنت في الماضي العرض والارتفاع. 83 00:03:51,480 --> 00:03:53,520 لذلك لدينا صلة خارجية 4 حلقة، وهذا التكرار 84 00:03:53,520 --> 00:03:57,650 على جميع الصفوف من هذا الشبكة التي نريد طباعتها. 85 00:03:57,650 --> 00:04:01,250 ثم لدينا ما بين 4 حلقة متداخلة، هذا هو الطباعة على كل عمود. 86 00:04:01,250 --> 00:04:06,210 لذلك لكل صف، ونحن طباعة ل كل عمود، تجزئة واحدة. 87 00:04:06,210 --> 00:04:10,045 ثم في نهاية الصف نحن طباعة خط جديد واحد للذهاب إلى الصف التالي. 88 00:04:10,045 --> 00:04:11,420 وهذا كل شيء عن الشبكة بأكملها. 89 00:04:11,420 --> 00:04:12,810 90 00:04:12,810 --> 00:04:13,675 >> السؤال الثامن. 91 00:04:13,675 --> 00:04:17,170 ويقال إن وظيفة مثل PrintGrid ل يكون أحد الآثار الجانبية، ولكن ليس عودة 92 00:04:17,170 --> 00:04:17,670 القيمة. 93 00:04:17,670 --> 00:04:19,209 شرح تمييز. 94 00:04:19,209 --> 00:04:23,080 لذلك هذا يعتمد عليك التذكر ما هي الآثار الجانبية. 95 00:04:23,080 --> 00:04:25,180 حسنا، بالعودة value-- نحن نعرف PrintGrid لا 96 00:04:25,180 --> 00:04:28,180 لها قيمة المقابل، منذ هنا يقول باطلا. 97 00:04:28,180 --> 00:04:31,150 لذا فان أي شيء أن يعود الفراغ لا يعيد حقا أي شيء. 98 00:04:31,150 --> 00:04:32,200 99 00:04:32,200 --> 00:04:33,620 فما هي الآثار الجانبية؟ 100 00:04:33,620 --> 00:04:36,620 حسنا، أحد الآثار الجانبية هو أي شيء الذي لا يزال قائما نوع من 101 00:04:36,620 --> 00:04:39,500 بعد انتهاء وظيفة لم يكن ذلك عاد لتوه، 102 00:04:39,500 --> 00:04:41,340 وأنه لم يكن فقط من المدخلات. 103 00:04:41,340 --> 00:04:44,970 >> هكذا، على سبيل المثال، فإننا قد تغيير متغير عمومي. 104 00:04:44,970 --> 00:04:46,590 من شأنها أن تكون الآثار الجانبية. 105 00:04:46,590 --> 00:04:49,000 في هذه الحالة بالذات، و أثر جانبي مهم جدا 106 00:04:49,000 --> 00:04:51,070 والطباعة على الشاشة. 107 00:04:51,070 --> 00:04:53,110 بحيث هو أحد الآثار الجانبية أن PrintGrid ديه. 108 00:04:53,110 --> 00:04:54,980 نحن طباعة هذه الأشياء على الشاشة. 109 00:04:54,980 --> 00:04:56,370 ويمكن ان يخطر لك أن كأثر جانبي، 110 00:04:56,370 --> 00:04:58,690 منذ هذا شيء استمرت بعد انتهاء هذه المهمة. 111 00:04:58,690 --> 00:05:01,481 هذا شيء خارج نطاق هذه الوظيفة التي في نهاية المطاف 112 00:05:01,481 --> 00:05:03,380 ويتم تغييرها، و محتويات الشاشة. 113 00:05:03,380 --> 00:05:05,200 114 00:05:05,200 --> 00:05:05,839 >> السؤال تسعة. 115 00:05:05,839 --> 00:05:07,880 النظر في البرنامج أدناه، إلى أي أرقام الأسطر 116 00:05:07,880 --> 00:05:09,740 وقد أضيفت لل من أجل المناقشة. 117 00:05:09,740 --> 00:05:13,480 حتى في هذا البرنامج أننا فقط داعيا GetString، تخزينه 118 00:05:13,480 --> 00:05:16,220 في هذا S متغيرة، ومن ثم طباعة هذا المتغير S. 119 00:05:16,220 --> 00:05:16,720 موافق. 120 00:05:16,720 --> 00:05:19,090 ذلك يفسر لماذا سطر واحد موجود. 121 00:05:19,090 --> 00:05:20,920 تتضمن # cs50 نقطة ح. 122 00:05:20,920 --> 00:05:23,820 لماذا نحتاج إلى # تضمين cs50 نقطة ح؟ 123 00:05:23,820 --> 00:05:26,180 كذلك نحن استدعاء GetString وظيفة، 124 00:05:26,180 --> 00:05:28,840 ويعرف GetString في المكتبة cs50. 125 00:05:28,840 --> 00:05:31,600 حتى إذا لم يكن لدينا # تشمل cs50 نقطة ح، 126 00:05:31,600 --> 00:05:35,760 سوف نحصل على هذا الإعلان الضمني من الخطأ وظيفة GetString 127 00:05:35,760 --> 00:05:36,840 من المترجم. 128 00:05:36,840 --> 00:05:40,110 لذلك نحن بحاجة لتشمل library-- نحن في حاجة إلى تضمين ملف الرأس، 129 00:05:40,110 --> 00:05:42,870 أو آخر سوف المترجم لا ندرك أن GetString موجودا. 130 00:05:42,870 --> 00:05:44,380 131 00:05:44,380 --> 00:05:46,140 >> شرح لماذا سطرين موجودا. 132 00:05:46,140 --> 00:05:47,890 IO القياسية حتى النقطة ح. 133 00:05:47,890 --> 00:05:50,430 انها بالضبط نفس الشيء كما المشكلة السابقة، 134 00:05:50,430 --> 00:05:53,310 باستثناء بدلا من التعامل مع GetString، ونحن نتحدث عن printf. 135 00:05:53,310 --> 00:05:56,654 حتى لو لم نكن نقول أننا بحاجة لتشمل القياسية IO نقطة ح، 136 00:05:56,654 --> 00:05:58,820 ثم أننا لن نكون قادرين لاستخدام وظيفة printf، 137 00:05:58,820 --> 00:06:00,653 لأن المترجم لن يعلم ذلك. 138 00:06:00,653 --> 00:06:01,750 139 00:06:01,750 --> 00:06:05,260 >> Why-- ما هو المغزى للباطل في أربعة أسطر؟ 140 00:06:05,260 --> 00:06:08,010 حتى هنا لدينا كثافة العمليات الرئيسي (الفراغ). 141 00:06:08,010 --> 00:06:10,600 إن مجرد القول بأننا لم يتم الحصول على أي سطر الأوامر 142 00:06:10,600 --> 00:06:12,280 الحجج الرئيسية ل. 143 00:06:12,280 --> 00:06:17,390 نتذكر أننا يمكن أن نقول الباحث الرئيسية كثافة العمليات ARGC قوسين سلسلة ARGV. 144 00:06:17,390 --> 00:06:20,400 حتى هنا نحن نقول فقط أن نقول أننا باطل وتجاهل وسائط سطر الأوامر. 145 00:06:20,400 --> 00:06:21,840 146 00:06:21,840 --> 00:06:25,225 >> شرح، فيما يتعلق الذاكرة، وبالضبط ما GetString في خط ستة العوائد. 147 00:06:25,225 --> 00:06:27,040 148 00:06:27,040 --> 00:06:31,640 GetString يعود كتلة من الذاكرة، ومجموعة من الشخصيات. 149 00:06:31,640 --> 00:06:34,870 انها حقا العودة المؤشر إلى الحرف الأول. 150 00:06:34,870 --> 00:06:37,170 تذكر أن السلسلة نجم شار. 151 00:06:37,170 --> 00:06:41,360 هكذا S هو مؤشر إلى أول شخصية كل ما في السلسلة 152 00:06:41,360 --> 00:06:43,510 أن المستخدم دخلت على لوحة المفاتيح. 153 00:06:43,510 --> 00:06:47,070 ويحدث أن الذاكرة ليتم malloced، ذلك أن الذاكرة في كومة. 154 00:06:47,070 --> 00:06:49,080 155 00:06:49,080 --> 00:06:50,450 >> السؤال 13. 156 00:06:50,450 --> 00:06:51,960 النظر في البرنامج أدناه. 157 00:06:51,960 --> 00:06:55,579 لذلك كل ما يقوم به هذا البرنامج وprintf جي 1 مقسوما على 10. 158 00:06:55,579 --> 00:06:57,370 لذلك عندما جمعت و أعدم، وهذا البرنامج 159 00:06:57,370 --> 00:07:01,170 مخرجات 0.0، على الرغم من 1 مقسوما على 10 هو 0.1. 160 00:07:01,170 --> 00:07:02,970 فلماذا هو 0.0؟ 161 00:07:02,970 --> 00:07:05,510 حسنا، هذا هو ل من قسمة عدد صحيح. 162 00:07:05,510 --> 00:07:08,580 حتى 1 هو عدد صحيح، 10 هو عدد صحيح. 163 00:07:08,580 --> 00:07:11,980 حتى 1 مقسوما على 10، كل شيء وتعامل على أنها صحيحة، 164 00:07:11,980 --> 00:07:16,380 وC، عندما نفعل قسمة عدد صحيح، نحن اقتطاع أي نقطة العشرية. 165 00:07:16,380 --> 00:07:19,590 حتى 1 مقسوما على 10 و 0، ومن ثم نحاول 166 00:07:19,590 --> 00:07:24,410 لطباعة هذا بمثابة تعويم، لذلك الصفر المطبوعة بمثابة تعويم هو 0.0. 167 00:07:24,410 --> 00:07:27,400 وهذا هو السبب نحصل على 0.0. 168 00:07:27,400 --> 00:07:28,940 >> النظر في البرنامج أدناه. 169 00:07:28,940 --> 00:07:31,280 نحن الآن طباعة 0.1. 170 00:07:31,280 --> 00:07:34,280 لذلك لا قسمة عدد صحيح، نحن فقط طباعة 0.1، 171 00:07:34,280 --> 00:07:37,100 لكننا طباعته إلى 28 منازل عشرية. 172 00:07:37,100 --> 00:07:41,810 ونحصل على هذه 0.1000، في مجمله مجموعة من الأصفار، 5 5 5، بلاه بلاه بلاه. 173 00:07:41,810 --> 00:07:45,495 لذا فإن السؤال هنا هو لماذا يفعل ذلك طباعة هذا، بدلا من 0.1 بالضبط؟ 174 00:07:45,495 --> 00:07:46,620 175 00:07:46,620 --> 00:07:49,640 >> لذلك السبب هنا هو الآن العائمة نقطة الدقة. 176 00:07:49,640 --> 00:07:53,410 تذكر أن تطفو هو 32 بت فقط. 177 00:07:53,410 --> 00:07:57,540 ولذا فإننا يمكن أن تمثل سوى عدد محدود القيم النقطة العائمة مع تلك 32 178 00:07:57,540 --> 00:07:58,560 بت. 179 00:07:58,560 --> 00:08:01,760 كذلك هناك في نهاية المطاف بلا حدود العديد من القيم النقطة العائمة، 180 00:08:01,760 --> 00:08:04,940 وهناك عدد لانهائي من العائمة قيم نقطة في بين 0 و 1، 181 00:08:04,940 --> 00:08:07,860 ونحن بالطبع قادرون على تمثل أكثر حتى من تلك القيم. 182 00:08:07,860 --> 00:08:13,230 لذلك لدينا لتقديم التضحيات ل تكون قادرة على تمثيل معظم القيم. 183 00:08:13,230 --> 00:08:16,960 >> حتى قيمة 0.1 مثل، على ما يبدو نحن لا يمكن أن تمثل بالضبط. 184 00:08:16,960 --> 00:08:22,500 وذلك بدلا من يمثلون 0.1 نفعل أفضل ما يمكن أن تمثل هذه 0.100000 5 5 185 00:08:22,500 --> 00:08:23,260 5. 186 00:08:23,260 --> 00:08:26,306 وهذا قريب جدا، ولكن بالنسبة للكثير من التطبيقات 187 00:08:26,306 --> 00:08:28,430 لديك ما يدعو للقلق العائمة نقطة الدقة، 188 00:08:28,430 --> 00:08:30,930 لأننا لا يمكن أن تمثل كل نقطة عائمة بالضبط. 189 00:08:30,930 --> 00:08:32,500 190 00:08:32,500 --> 00:08:33,380 >> السؤال 15. 191 00:08:33,380 --> 00:08:34,679 النظر في الكود بالأسفل. 192 00:08:34,679 --> 00:08:36,630 نحن فقط طباعة 1 زائد 1. 193 00:08:36,630 --> 00:08:38,289 لذلك ليس هناك خدعة هنا. 194 00:08:38,289 --> 00:08:41,780 1 زائد 1 إلى 2 تقييم، و ثم نقوم بطباعة ذلك. 195 00:08:41,780 --> 00:08:42,789 هذا يطبع فقط 2. 196 00:08:42,789 --> 00:08:43,850 197 00:08:43,850 --> 00:08:44,700 >> السؤال 16. 198 00:08:44,700 --> 00:08:49,450 نحن الآن طباعة الطابع 1 زائد 1 شخصية. 199 00:08:49,450 --> 00:08:52,110 فلماذا لا يفعل ذلك طباعة نفس الشيء؟ 200 00:08:52,110 --> 00:08:57,680 كذلك الطابع 1 بالإضافة إلى الطابع 1، 1 الطابع له قيمة ASCII 49. 201 00:08:57,680 --> 00:09:04,840 لذلك هذا هو حقا قائلا 49 زائد 49، و في النهاية هذا هو الذهاب الى طباعة 98. 202 00:09:04,840 --> 00:09:06,130 لذلك هذا لا يطبع 2. 203 00:09:06,130 --> 00:09:08,070 204 00:09:08,070 --> 00:09:09,271 >> السؤال 17. 205 00:09:09,271 --> 00:09:11,520 استكمال تنفيذ من الغريب أدناه في مثل هذه الطريقة 206 00:09:11,520 --> 00:09:14,615 أن وظيفة بإرجاع True إذا ن أمر غريب وكاذب إذا كان n هو حتى. 207 00:09:14,615 --> 00:09:16,710 208 00:09:16,710 --> 00:09:19,330 هذا هو الهدف الكبير للمشغل وزارة الدفاع. 209 00:09:19,330 --> 00:09:24,530 حتى نأخذ لدينا حجة ن، إذا كان n وزارة الدفاع 2 يساوي 1، وأيضا 210 00:09:24,530 --> 00:09:28,030 وهذا يعني أن تنقسم ن بنسبة 2 كان الباقي. 211 00:09:28,030 --> 00:09:33,270 إذا قسمت ن بنسبة 2 كان الباقي، أن يعني أن ن هو الغريب، لذلك نعود صحيح. 212 00:09:33,270 --> 00:09:34,910 آخر نعود كاذبة. 213 00:09:34,910 --> 00:09:39,070 أنت أيضا يمكن أن تفعل وزارة الدفاع ن 2 متساوين الصفر، والعودة كاذبة، إلا بالعودة الحقيقية. 214 00:09:39,070 --> 00:09:41,600 215 00:09:41,600 --> 00:09:43,640 >> النظر في وظيفة متكررة أدناه. 216 00:09:43,640 --> 00:09:46,920 حتى إذا كان n أقل من أو يساوي 1، والعودة 1، 217 00:09:46,920 --> 00:09:50,430 عودة شيء آخر ن مرات و ن ناقص 1. 218 00:09:50,430 --> 00:09:52,556 فما هي هذه المهمة؟ 219 00:09:52,556 --> 00:09:54,305 حسنا، هذا هو فقط وظيفة عاملية. 220 00:09:54,305 --> 00:09:55,410 221 00:09:55,410 --> 00:09:57,405 ويمثل هذا لطيف كما ن مضروب. 222 00:09:57,405 --> 00:09:58,720 223 00:09:58,720 --> 00:10:02,310 >> حتى السؤال 19 الآن، نحن نريد ل تأخذ هذه الوظيفة متكررة. 224 00:10:02,310 --> 00:10:04,530 نحن نريد لجعله تكرارية. 225 00:10:04,530 --> 00:10:05,874 فكيف نفعل ذلك؟ 226 00:10:05,874 --> 00:10:07,790 فضلا عن الموظفين حل، ومرة ​​أخرى هناك 227 00:10:07,790 --> 00:10:11,090 طرق متعددة يمكن أن فعلت هذا، ونحن نبدأ مع هذا المنتج الباحث 228 00:10:11,090 --> 00:10:11,812 يساوي 1. 229 00:10:11,812 --> 00:10:13,520 وطوال هذه للحلقة، نحن ذاهبون 230 00:10:13,520 --> 00:10:17,590 ليتم في نهاية المطاف إلى مضاعفة المنتج في نهاية المطاف مع مضروب الكامل. 231 00:10:17,590 --> 00:10:21,870 وذلك لكثافة العمليات ط يساوي 2، وأنا غير أقل من أو يساوي ن، ط + +. 232 00:10:21,870 --> 00:10:24,130 >> هل يمكن أن يتساءل لماذا أنا يساوي 2. 233 00:10:24,130 --> 00:10:28,380 كذلك، تذكر أن لدينا هنا ل تأكد من الحالة الأساسية لدينا هي الصحيحة. 234 00:10:28,380 --> 00:10:32,180 حتى إذا كان n أقل من أو يساوي إلى 1، ونحن مجرد العودة 1. 235 00:10:32,180 --> 00:10:34,830 حتى أكثر من هنا، نبدأ في الاول يساوي 2. 236 00:10:34,830 --> 00:10:39,090 كذلك لو كنت 1، ثم the-- أو إذا كان ن 1، ثم للحلقة 237 00:10:39,090 --> 00:10:40,600 لن تنفيذ على الإطلاق. 238 00:10:40,600 --> 00:10:43,190 ولذا فإننا فقط عودة المنتج، الذي هو 1. 239 00:10:43,190 --> 00:10:45,920 وبالمثل، إذا كان ن أي شيء أقل من 1-- 240 00:10:45,920 --> 00:10:49,290 لو كان 0، 1 سلبية، whatever-- لكنا لا يزالون يعودون 1، 241 00:10:49,290 --> 00:10:52,260 وهو بالضبط ما نسخة العودية يقوم به. 242 00:10:52,260 --> 00:10:54,660 >> الآن، إذا كان n هو أكبر من 1، ثم نحن ذاهبون 243 00:10:54,660 --> 00:10:56,550 لفعل واحد على الأقل التكرار لهذه الحلقة. 244 00:10:56,550 --> 00:11:00,630 لذلك دعونا نقول أن n 5، ثم نحن تنوي القيام به مرة المنتج يساوي 2. 245 00:11:00,630 --> 00:11:02,165 حتى الآن المنتج هو 2. 246 00:11:02,165 --> 00:11:04,040 الآن نحن في طريقنا للقيام المنتج تساوي 3 أضعاف. 247 00:11:04,040 --> 00:11:04,690 الآن حان 6. 248 00:11:04,690 --> 00:11:07,500 الأوقات المنتج يساوي 4، والآن حان 24. 249 00:11:07,500 --> 00:11:10,420 المنتج يساوي 5 مرات، والآن حان 120. 250 00:11:10,420 --> 00:11:16,730 حتى ذلك الحين في نهاية المطاف، نحن العودة 120، وهو صحيح 5 مضروب. 251 00:11:16,730 --> 00:11:17,510 >> السؤال 20. 252 00:11:17,510 --> 00:11:22,480 هذا هو واحد حيث لديك لملء في هذا الجدول مع أي خوارزمية معينة، 253 00:11:22,480 --> 00:11:25,735 كل ما رأيناه، أن يناسب هذه المدى حسابي 254 00:11:25,735 --> 00:11:28,060 مرة هذه الأوقات المدى مقارب. 255 00:11:28,060 --> 00:11:33,270 فما هو خوارزمية هو أوميغا 1، ولكن يا كبير من ن؟ 256 00:11:33,270 --> 00:11:35,970 لذلك يمكن أن تكون هناك بلا حدود العديد من الإجابات هنا. 257 00:11:35,970 --> 00:11:39,790 تلك التي شهدناها ربما أكثر في كثير من الأحيان هو البحث الخطي فقط. 258 00:11:39,790 --> 00:11:42,050 >> حتى في أفضل الأحوال السيناريو، هذا البند نحن 259 00:11:42,050 --> 00:11:44,050 تبحث عن في بداية القائمة 260 00:11:44,050 --> 00:11:47,400 وذلك في أوميغا 1 خطوات، أول شيء علينا التحقق، 261 00:11:47,400 --> 00:11:49,740 نحن فقط العودة فورا وجدنا هذا البند. 262 00:11:49,740 --> 00:11:52,189 في أسوأ الحالات، هذا البند هو في النهاية، 263 00:11:52,189 --> 00:11:53,730 أو البند ليست في قائمة على الإطلاق. 264 00:11:53,730 --> 00:11:56,700 لذلك لدينا للبحث قائمة بأكملها، كل ن 265 00:11:56,700 --> 00:11:58,480 العناصر، وهذا هو السبب في أنه من س ن. 266 00:11:58,480 --> 00:11:59,670 267 00:11:59,670 --> 00:12:04,880 >> حتى الآن انها شيء على حد سواء أوميغا ن ن سجل، ويا ​​كبير من ن ن السجل. 268 00:12:04,880 --> 00:12:08,650 كذلك الشيء الأكثر أهمية رأيناه هنا هو دمج النوع. 269 00:12:08,650 --> 00:12:12,950 حتى دمج النوع، تذكر، في نهاية المطاف هو ثيتا 270 00:12:12,950 --> 00:12:16,920 ن ن السجل، حيث يتم تعريف ثيتا إذا كان كل من أوميغا ويا كبير هي نفسها. 271 00:12:16,920 --> 00:12:17,580 كل من ن ن تسجيل. 272 00:12:17,580 --> 00:12:18,690 273 00:12:18,690 --> 00:12:21,970 >> ما هو الشيء الذي أوميغا ن، و يا ن المربعة؟ 274 00:12:21,970 --> 00:12:23,990 حسنا، مرة أخرى هناك الأجوبة المحتملة متعددة. 275 00:12:23,990 --> 00:12:26,440 هنا يحدث لأننا نقول فقاعة النوع. 276 00:12:26,440 --> 00:12:28,840 سيكون الإدراج نوع العمل أيضا هنا. 277 00:12:28,840 --> 00:12:31,400 تذكر هذا النوع فقاعة لديه حيث أن التحسين، 278 00:12:31,400 --> 00:12:34,630 إذا كنت قادرا على الحصول على من خلال القائمة بالكامل 279 00:12:34,630 --> 00:12:37,402 دون الحاجة إلى القيام أي مقايضة، ثم، أيضا، 280 00:12:37,402 --> 00:12:40,110 يمكننا العودة فورا أن تم فرز القائمة لتبدأ. 281 00:12:40,110 --> 00:12:43,185 حتى في أفضل السيناريوهات، انها مجرد أوميغا ن. 282 00:12:43,185 --> 00:12:45,960 اذا لم يكن مجرد طيف قائمة لتبدأ فرز، 283 00:12:45,960 --> 00:12:48,270 ثم لدينا يا ن مربع مقايضة. 284 00:12:48,270 --> 00:12:49,330 285 00:12:49,330 --> 00:12:55,610 وأخيرا، لدينا اختيار نوع لن تربيع، سواء أوميغا وكبيرة O. 286 00:12:55,610 --> 00:12:56,850 >> السؤال 21. 287 00:12:56,850 --> 00:12:58,870 ما هو عدد صحيح فيض؟ 288 00:12:58,870 --> 00:13:02,160 حسنا مرة أخرى، على غرار وقت سابق، لدينا العديد محدود بت فقط 289 00:13:02,160 --> 00:13:04,255 لتمثيل عدد صحيح، ولذلك ربما يكون 32 بت. 290 00:13:04,255 --> 00:13:06,300 291 00:13:06,300 --> 00:13:09,180 دعونا نقول لدينا عدد صحيح وقعت. 292 00:13:09,180 --> 00:13:12,800 ثم في نهاية المطاف أعلى رقم موجب يمكننا أن نمثل 293 00:13:12,800 --> 00:13:15,910 هو 2 إلى 31 ناقص 1. 294 00:13:15,910 --> 00:13:19,370 فماذا يحدث لو كنا في محاولة لل ثم أن زيادة عدد صحيح؟ 295 00:13:19,370 --> 00:13:25,320 حسنا، نحن ذاهبون للذهاب في الفترة من 2 إلى 31 ناقص 1، على طول الطريق وصولا الى سلبي 2 296 00:13:25,320 --> 00:13:26,490 إلى 31. 297 00:13:26,490 --> 00:13:29,470 لذلك هذا هو تجاوز عدد صحيح عندما كنت ابقاء تزايد، 298 00:13:29,470 --> 00:13:32,330 وفي نهاية المطاف لا يمكنك الحصول على أي أعلى وأنها مجرد 299 00:13:32,330 --> 00:13:34,520 يلتف كل في طريق العودة حول إلى قيمة سالبة. 300 00:13:34,520 --> 00:13:35,850 301 00:13:35,850 --> 00:13:37,779 >> ماذا عن تجاوز سعة المخزن المؤقت؟ 302 00:13:37,779 --> 00:13:39,820 لذلك عازلة overflow-- نتذكر ما هو العازلة. 303 00:13:39,820 --> 00:13:41,000 انها مجرد جزء من الذاكرة. 304 00:13:41,000 --> 00:13:43,350 شيء من هذا القبيل هو مجموعة العازلة. 305 00:13:43,350 --> 00:13:46,120 لذلك تجاوز سعة المخزن المؤقت هو عندما حاولت الوصول إلى الذاكرة 306 00:13:46,120 --> 00:13:47,880 بعد نهاية تلك المصفوفة. 307 00:13:47,880 --> 00:13:50,410 حتى إذا كان لديك مجموعة من حجم 5 و لك 308 00:13:50,410 --> 00:13:53,700 محاولة الوصول إلى قوس مجموعة 5 أو 6 أو قوس قوس 7، 309 00:13:53,700 --> 00:13:56,610 أو أي شيء خارج نهاية، أو حتى أي شيء 310 00:13:56,610 --> 00:14:00,790 below-- قوس مجموعة سلبي 1-- كل هذه هي عازلة الفيضانات. 311 00:14:00,790 --> 00:14:02,810 كنت لمس الذاكرة بطرق سيئة. 312 00:14:02,810 --> 00:14:04,090 313 00:14:04,090 --> 00:14:04,730 >> السؤال 23. 314 00:14:04,730 --> 00:14:05,760 315 00:14:05,760 --> 00:14:09,100 حتى في هذا واحد تحتاج لتنفيذ strlen. 316 00:14:09,100 --> 00:14:11,630 ونقول لكم ان استطعت نفترض أن ليست أن يكون لاغيا، 317 00:14:11,630 --> 00:14:13,790 لذلك لم يكن لديك ل القيام بأي الاختيار لاغيا. 318 00:14:13,790 --> 00:14:16,190 وهناك طرق متعددة كنت قد فعلت ذلك. 319 00:14:16,190 --> 00:14:18,440 نحن هنا فقط اتخاذ مباشرة. 320 00:14:18,440 --> 00:14:21,780 نبدأ مع عداد، ن. ن هو عد عدد الحروف هناك. 321 00:14:21,780 --> 00:14:25,560 حتى نبدأ في 0، ومن ثم نحن تكرار عبر القائمة بأكملها. 322 00:14:25,560 --> 00:14:29,092 >> هو S قوس 0 يساوي اغيا شخصية فاصل؟ 323 00:14:29,092 --> 00:14:31,425 نتذكر نحن نبحث عن الطابع فاصل باطل 324 00:14:31,425 --> 00:14:33,360 لتحديد متى سلسلة لدينا. 325 00:14:33,360 --> 00:14:35,890 ما يجري لإنهاء أي سلسلة ذات الصلة. 326 00:14:35,890 --> 00:14:39,400 ذلك هو S قوس 0 يساوي إلى فاصل باطل؟ 327 00:14:39,400 --> 00:14:42,850 إذا لم تكن كذلك، ثم نحن ذاهبون الى ننظر إلى S قوس 1، ق 2 قوس. 328 00:14:42,850 --> 00:14:45,050 نحن تستمر حتى نحن العثور على فاصل فارغة. 329 00:14:45,050 --> 00:14:48,580 مرة واحدة وجدنا عليه، ثم ن يحتوي على إجمالي طول السلسلة، 330 00:14:48,580 --> 00:14:49,942 ويمكننا فقط أن يعود. 331 00:14:49,942 --> 00:14:51,180 332 00:14:51,180 --> 00:14:51,865 >> السؤال 24. 333 00:14:51,865 --> 00:14:53,010 334 00:14:53,010 --> 00:14:56,050 لذلك هذا هو واحد حيث كنت لدينا لجعل المفاضلة. 335 00:14:56,050 --> 00:14:59,810 ذلك شيء واحد هو جيد في واحدة الطريق، ولكن ما هي الطريقة هي سيئة؟ 336 00:14:59,810 --> 00:15:02,980 حتى هنا، ودمج النوع يميل ل يكون أسرع من فقاعة نوع. 337 00:15:02,980 --> 00:15:06,530 وقد قلت that-- جيدا، هناك هي الأجوبة متعددة هنا. 338 00:15:06,530 --> 00:15:12,930 ولكن الشيء الرئيسي هو أن نوع فقاعة هو أوميغا ن للحصول على قائمة تم فرزها. 339 00:15:12,930 --> 00:15:14,950 >> تذكر أن الجدول نحن فقط رأيت في وقت سابق. 340 00:15:14,950 --> 00:15:17,600 حتى تفرز فقاعة أوميغا لل ن، وأفضل سيناريو 341 00:15:17,600 --> 00:15:20,010 غير انها قادرة على الذهاب فقط خلال قائمة مرة واحدة، وتحديد 342 00:15:20,010 --> 00:15:22,270 يا هذا الشيء هو بالفعل فرزها، والعودة. 343 00:15:22,270 --> 00:15:25,960 دمج النوع، مهما يمكنك القيام به، هو أوميغا ن ن السجل. 344 00:15:25,960 --> 00:15:29,200 حتى لائحة فرزها، فقاعة النوع سيكون أسرع. 345 00:15:29,200 --> 00:15:30,870 346 00:15:30,870 --> 00:15:32,430 >> الآن ماذا عن القوائم المرتبطة؟ 347 00:15:32,430 --> 00:15:36,070 حتى قائمة مرتبطة يمكن أن تنمو وتتقلص لتناسب العديد من العناصر حسب الحاجة. 348 00:15:36,070 --> 00:15:38,489 أما وقد قلت ذلك that-- عادة المقارنة المباشرة 349 00:15:38,489 --> 00:15:40,280 وستكون مرتبطة قائمة مع صفيف. 350 00:15:40,280 --> 00:15:41,600 351 00:15:41,600 --> 00:15:44,050 ذلك على الرغم من المصفوفات يمكن تنمو بسهولة ويتقلص 352 00:15:44,050 --> 00:15:47,130 لتناسب العديد من العناصر حسب الحاجة، قائمة مرتبطة 353 00:15:47,130 --> 00:15:49,600 مقارنة لarray-- مجموعة لديها الوصول العشوائي. 354 00:15:49,600 --> 00:15:52,960 نستطيع المؤشر في أي عنصر معين للمجموعة. 355 00:15:52,960 --> 00:15:56,430 >> حتى لقائمة مرتبطة، لا يمكننا اذهبوا إلى العنصر الخامس، 356 00:15:56,430 --> 00:16:00,260 علينا أن تعبر من البداية حتى نصل إلى العنصر الخامس. 357 00:16:00,260 --> 00:16:03,990 وهذا ما سوف يمنعنا من تفعل شيئا مثل البحث الثنائي. 358 00:16:03,990 --> 00:16:08,150 الحديث عن البحث الثنائي، بحث ثنائي يميل إلى أن يكون أسرع من البحث الخطي. 359 00:16:08,150 --> 00:16:11,120 وقد قلت that-- لذلك، الشيء الوحيد الممكن 360 00:16:11,120 --> 00:16:13,380 هو أنك لا تستطيع أن تفعل ثنائي البحث على القوائم المرتبطة، 361 00:16:13,380 --> 00:16:14,730 يمكنك أن تفعل ذلك فقط على المصفوفات. 362 00:16:14,730 --> 00:16:18,030 ولكن ربما الأهم من ذلك، لا يمكنك أن تفعل البحث ثنائي 363 00:16:18,030 --> 00:16:20,690 على صفيف وغير مصنفة. 364 00:16:20,690 --> 00:16:23,990 مقدما قد تحتاج إلى فرز مجموعة، وعندها فقط يمكن 365 00:16:23,990 --> 00:16:25,370 يمكنك القيام به خاصية البحث الثنائي. 366 00:16:25,370 --> 00:16:27,660 حتى إذا كان لديك شيء ليس فرزها لتبدأ، 367 00:16:27,660 --> 00:16:29,250 ثم بحث الخطي قد يكون أسرع. 368 00:16:29,250 --> 00:16:30,620 369 00:16:30,620 --> 00:16:31,740 >> السؤال 27. 370 00:16:31,740 --> 00:16:34,770 حتى النظر في البرنامج أدناه، والتي سوف تكون في الشريحة التالية. 371 00:16:34,770 --> 00:16:37,790 وهذا هو واحد حيث نحن تريد الذهاب الى صراحة 372 00:16:37,790 --> 00:16:39,980 قيم المتغيرات المختلفة. 373 00:16:39,980 --> 00:16:41,990 لذلك دعونا ننظر في ذلك. 374 00:16:41,990 --> 00:16:43,160 >> حتى سطر واحد. 375 00:16:43,160 --> 00:16:45,457 لدينا الباحث س يساوي 1. 376 00:16:45,457 --> 00:16:47,040 هذا هو الشيء الوحيد الذي حدث. 377 00:16:47,040 --> 00:16:50,440 وذلك في سطر واحد، ونحن نرى في منطقتنا الجدول، أن ذ، أ، ب، وكلها تمة 378 00:16:50,440 --> 00:16:51,540 ظلام دامس. 379 00:16:51,540 --> 00:16:52,280 فما هو العاشر؟ 380 00:16:52,280 --> 00:16:53,860 حسنا نحن فقط تعيين يساوي 1. 381 00:16:53,860 --> 00:16:55,020 382 00:16:55,020 --> 00:16:58,770 ثم سطرين، حسنا، ونحن نرى أن يتم تعيين ص إلى 2، 383 00:16:58,770 --> 00:17:00,550 والجدول هو بالفعل ملأت بالنسبة لنا. 384 00:17:00,550 --> 00:17:03,040 لذلك x هو 1 و y هو 2. 385 00:17:03,040 --> 00:17:05,890 >> الآن، السطر الثالث، ونحن الآن داخل وظيفة المبادلة. 386 00:17:05,890 --> 00:17:07,560 ما لم نعبر لمبادلة؟ 387 00:17:07,560 --> 00:17:11,609 مررنا العطف العاشر ل لذلك، والعطف لذ ب. 388 00:17:11,609 --> 00:17:15,160 أين المشكلة في وقت سابق وذكر أن عنوان X 389 00:17:15,160 --> 00:17:17,520 هو 0x10، وعنوان Y هو 0x14. 390 00:17:17,520 --> 00:17:18,970 391 00:17:18,970 --> 00:17:21,909 لذلك وب سواسية ل 0x10 0x14 و، على التوالي. 392 00:17:21,909 --> 00:17:23,670 393 00:17:23,670 --> 00:17:26,250 >> الآن في خط ثلاثة، ما هي x و y؟ 394 00:17:26,250 --> 00:17:28,554 كذلك، لم يتغير شيء حول x و y في هذه المرحلة. 395 00:17:28,554 --> 00:17:30,470 على الرغم من انهم داخل إطار مكدس الرئيسي، 396 00:17:30,470 --> 00:17:32,469 لا يزال لديهم نفس قيم فعلوا من قبل. 397 00:17:32,469 --> 00:17:34,030 ونحن لا تعديل أي الذاكرة. 398 00:17:34,030 --> 00:17:35,710 ذلك أن x 1، y هي 2. 399 00:17:35,710 --> 00:17:36,550 400 00:17:36,550 --> 00:17:37,050 حسنا. 401 00:17:37,050 --> 00:17:40,300 قال ذلك ونحن الآن الباحث تمة يساوي نجم أ. 402 00:17:40,300 --> 00:17:44,410 وذلك في أربعة أسطر، كل شيء هو نفسه باستثناء تمة. 403 00:17:44,410 --> 00:17:47,130 ونحن لم يتغير أي القيم من أي شيء باستثناء تمة. 404 00:17:47,130 --> 00:17:49,230 نحن وضع تمة يساوي نجم أ. 405 00:17:49,230 --> 00:17:50,620 ما هو نجم و؟ 406 00:17:50,620 --> 00:17:56,240 حسنا، نقطة إلى x، لذا ستار سوف المساواة السينية، الذي هو 1. 407 00:17:56,240 --> 00:18:00,080 هكذا يتم نسخ كل شيء إلى أسفل، وضبط تمة إلى 1. 408 00:18:00,080 --> 00:18:01,110 >> الآن السطر التالي. 409 00:18:01,110 --> 00:18:03,380 نجم من نجوم يساوي ب. 410 00:18:03,380 --> 00:18:10,000 ذلك الخط جيدا five-- مرة أخرى، كل شيء هو نفسه إلا كل ما هو نجم و. 411 00:18:10,000 --> 00:18:10,830 ما هو نجم و؟ 412 00:18:10,830 --> 00:18:13,720 حسنا، نحن فقط قال نجم لهو س. 413 00:18:13,720 --> 00:18:16,400 لذلك نحن تغيير X في المساواة نجوم ب. 414 00:18:16,400 --> 00:18:18,960 ما هو نجم ب؟ ذ. نقطة ب لذ. 415 00:18:18,960 --> 00:18:21,030 ذلك هو نجم ب ذ. 416 00:18:21,030 --> 00:18:25,140 لذلك نحن بوضع X يساوي Y، وكل شيء آخر هو نفسه. 417 00:18:25,140 --> 00:18:29,130 ولذا فإننا نرى في الصف التالي أن x هو الآن 2، والباقي يتم نسخ فقط بانخفاض. 418 00:18:29,130 --> 00:18:31,120 >> الآن في السطر التالي، نجم ب يساوي تمة. 419 00:18:31,120 --> 00:18:34,740 حسنا، قلنا مجرد نجم ب هي ذ، لذلك نحن وضع Y يساوي تمة. 420 00:18:34,740 --> 00:18:37,450 كل شيء آخر هو نفسه، حتى يحصل على نسخ كل شيء إلى أسفل. 421 00:18:37,450 --> 00:18:42,050 اننا وضع Y يساوي TMP، وهو واحد، وكل شيء آخر هو نفسه. 422 00:18:42,050 --> 00:18:43,210 >> الآن أخيرا، خط سبعة. 423 00:18:43,210 --> 00:18:44,700 نعود في الوظيفة الرئيسية. 424 00:18:44,700 --> 00:18:46,350 نحن بعد الانتهاء المبادلة. 425 00:18:46,350 --> 00:18:48,972 فقدنا أ، ب، و تمة، ولكن في النهاية نحن 426 00:18:48,972 --> 00:18:51,180 لم يتم تغيير أي من القيم من أي شيء في هذه المرحلة، 427 00:18:51,180 --> 00:18:52,800 نحن مجرد نسخ x و y أسفل. 428 00:18:52,800 --> 00:18:56,490 ونحن نرى أن x و y و الآن 2 و 1 بدلا من 1 و 2. 429 00:18:56,490 --> 00:18:58,160 نفذت المبادلة بنجاح. 430 00:18:58,160 --> 00:18:59,500 431 00:18:59,500 --> 00:19:00,105 >> السؤال 28. 432 00:19:00,105 --> 00:19:01,226 433 00:19:01,226 --> 00:19:03,100 لنفترض أن واجهتك رسائل الخطأ 434 00:19:03,100 --> 00:19:06,790 أدناه خلال ساعات الدوام العام المقبل باعتباره CA أو فريق العمل. 435 00:19:06,790 --> 00:19:08,930 تقديم المشورة حول كيفية إصلاح كل هذه الأخطاء. 436 00:19:08,930 --> 00:19:11,160 المرجعية غير معرفة حتى لGetString. 437 00:19:11,160 --> 00:19:12,540 ماذا يمكن أن ترى هذا؟ 438 00:19:12,540 --> 00:19:15,380 حسنا، إذا كان الطالب يستخدم GetString في مدوناتها، 439 00:19:15,380 --> 00:19:20,310 فقد تضمنت بشكل صحيح التجزئة cs50 نقطة ح لتشمل المكتبة cs50. 440 00:19:20,310 --> 00:19:22,380 >> حسنا، ماذا تحتاج إلى إصلاح هذا الخطأ؟ 441 00:19:22,380 --> 00:19:26,810 انهم بحاجة للقيام lcs50 شرطة في سطر الأوامر عندما كنت تجميع. 442 00:19:26,810 --> 00:19:29,501 حتى إذا كانت لا تمر رنة شرطة lcs50، وانهم 443 00:19:29,501 --> 00:19:32,000 لن يكون الفعلية التعليمات البرمجية التي تنفذ GetString. 444 00:19:32,000 --> 00:19:33,190 445 00:19:33,190 --> 00:19:34,170 >> السؤال 29. 446 00:19:34,170 --> 00:19:36,190 معلنا ضمنا وظيفة المكتبة strlen. 447 00:19:36,190 --> 00:19:37,550 448 00:19:37,550 --> 00:19:40,360 حسنا هذا الآن، لديهم لا يتم تجزئة المناسبة تشمل. 449 00:19:40,360 --> 00:19:41,440 450 00:19:41,440 --> 00:19:45,410 في هذه الحالة بالذات، ملف الرأس التي يحتاجونها لتشمل سلسلة من نقطة ح، 451 00:19:45,410 --> 00:19:48,710 وبما في ذلك سلسلة نقطة ح، الآن والآن student-- المترجم 452 00:19:48,710 --> 00:19:51,750 لديه حق الوصول إلى تصريحات strlen، 453 00:19:51,750 --> 00:19:54,120 وأنه يعلم أن التعليمات البرمجية وباستخدام strlen بشكل صحيح. 454 00:19:54,120 --> 00:19:55,380 455 00:19:55,380 --> 00:19:56,580 >> السؤال 30. 456 00:19:56,580 --> 00:20:00,240 المزيد من التحويلات في المئة من الحجج البيانات. 457 00:20:00,240 --> 00:20:01,540 فما هو هذا؟ 458 00:20:01,540 --> 00:20:06,470 كذلك تذكر أن هذه بالمئة signs-- كيف انهم ذات الصلة printf. 459 00:20:06,470 --> 00:20:08,890 حتى في printf أننا قد percent-- كنا قد طبع شيء 460 00:20:08,890 --> 00:20:11,380 مثل في المئة ط ن مائل. 461 00:20:11,380 --> 00:20:15,310 أو ربما نحن طباعة مثل بالمئة ط، الفضاء، ط المئة، والفضاء، وأنا في المئة. 462 00:20:15,310 --> 00:20:18,950 لذلك لكل من تلك علامات النسبة المئوية، ونحن بحاجة 463 00:20:18,950 --> 00:20:21,560 لتمرير متغير في نهاية printf. 464 00:20:21,560 --> 00:20:26,980 >> حتى إذا قلنا paren printf في المئة ط ن مائل paren وثيقة، 465 00:20:26,980 --> 00:20:30,270 حسنا، نحن نقول أننا الذهاب لطباعة عدد صحيح، 466 00:20:30,270 --> 00:20:33,970 ولكن بعد ذلك نحن لا تمر printf عدد صحيح لطباعة الواقع. 467 00:20:33,970 --> 00:20:37,182 حتى هنا المزيد من المئة التحويلات من الحجج البيانات؟ 468 00:20:37,182 --> 00:20:39,390 هذا ما يقول أن لدينا في مجمله مجموعة من النسب المئوية، 469 00:20:39,390 --> 00:20:42,445 وليس لدينا ما يكفي من المتغيرات لسد الواقع في تلك النسب المئوية. 470 00:20:42,445 --> 00:20:44,850 471 00:20:44,850 --> 00:20:50,010 >> ثم بالتأكيد، بالنسبة للسؤال 31، بالتأكيد فقدت 40 بايت في كتل واحد. 472 00:20:50,010 --> 00:20:52,350 لذلك هذا هو الخطأ Valgrind. 473 00:20:52,350 --> 00:20:54,720 هذا يقول ان في مكان ما في التعليمات البرمجية، 474 00:20:54,720 --> 00:20:59,010 لديك التخصيص الذي هو 40 بايت كبيرة حتى تتمكن malloced 40 بايت، 475 00:20:59,010 --> 00:21:00,515 وأبدا أنت تحريرها. 476 00:21:00,515 --> 00:21:02,480 477 00:21:02,480 --> 00:21:05,140 على الأرجح أنت بحاجة فقط العثور على بعض تسرب الذاكرة، 478 00:21:05,140 --> 00:21:07,650 وتجد فيها ما تحتاجه ل تحرير هذه الكتلة من الذاكرة. 479 00:21:07,650 --> 00:21:08,780 480 00:21:08,780 --> 00:21:11,910 >> والسؤال 32، الكتابة غير صالحة للحجم 4. 481 00:21:11,910 --> 00:21:13,250 مرة أخرى هذا هو الخطأ Valgrind. 482 00:21:13,250 --> 00:21:15,440 لا تملك أن تفعل هذا مع تسرب الذاكرة الآن. 483 00:21:15,440 --> 00:21:20,750 وهذا هو، الأكثر likely-- أعني، انها ل نوعا من حقوق ذاكرة غير صالحة. 484 00:21:20,750 --> 00:21:23,270 وعلى الأرجح هذا هو بعض نوع من تجاوز سعة المخزن المؤقت. 485 00:21:23,270 --> 00:21:26,560 حيث لديك صفيف، ربما صفيف صحيحا، ودعونا 486 00:21:26,560 --> 00:21:30,115 يقولون انها من حجم 5، وكنت محاولة للمس مجموعة قوس 5. 487 00:21:30,115 --> 00:21:34,150 لذلك إذا حاولت أن أكتب القيمة، وهذا ليس قطعة من الذاكرة 488 00:21:34,150 --> 00:21:37,440 أن لديك بالفعل الوصول إلى، و حتى وأنت تسير في الحصول على هذا الخطأ، 489 00:21:37,440 --> 00:21:39,272 تقول الكتابة غير صالحة للحجم 4. 490 00:21:39,272 --> 00:21:42,480 Valgrind يجري الاعتراف كنت في محاولة للمس الذاكرة بشكل غير لائق. 491 00:21:42,480 --> 00:21:43,980 >> وهذا كل شيء عن quiz0. 492 00:21:43,980 --> 00:21:47,065 أنا روب بودين، وهذا هو CS50. 493 00:21:47,065 --> 00:21:51,104