1 00:00:00,000 --> 00:00:09,572 2 00:00:09,572 --> 00:00:12,030 راب BOWDEN: سلام، من راب 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 منظور من، شما می توانید کشف کردن که، OK، 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 با n بیت، که چگونه بسیاری از مشخص ارزش می تواند به شما نشان می دهد؟ 27 00:01:14,610 --> 00:01:19,080 بنابراین، با n بیت، شما باید 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 به n است. 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-- و یا شما می توانید از D٪ استفاده می شود. 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 در حال حاضر ما می خواهم به انجام کاری بسیار شبیه به ماریو نقطه C از مجموعه مشکل است. 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 در این متغیرها، و پس از آن چاپ که متغیر است. 119 00:05:16,220 --> 00:05:16,720 OK. 120 00:05:16,720 --> 00:05:19,090 بنابراین توضیح دهد که چرا یک خط موجود است. 121 00:05:19,090 --> 00:05:20,920 # شامل cs50 نقطه H. 122 00:05:20,920 --> 00:05:23,820 چرا ما نیاز به # شامل cs50 نقطه H؟ 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 نقطه H، 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 نقطه H، 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 بنابراین یک اشاره گر به اول شخصیت در هر رشته است 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 که تابع اگر درست برمی گرداند n فرد و نادرست است اگر 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 ما، اگر n مد 2 برابر 1، و 210 00:09:24,530 --> 00:09:28,030 که بدان معنی است که N تقسیم 2 باقی مانده بود. 211 00:09:28,030 --> 00:09:33,270 اگر N 2 تقسیم به حال باقی مانده، که بدان معنی است که n فرد است، بنابراین ما به راست. 212 00:09:33,270 --> 00:09:34,910 دیگر ما بازگشت نادرست است. 213 00:09:34,910 --> 00:09:39,070 شما همچنین می تواند انجام داده اند N مد 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 بازگشت دیگری n بار از F N منهای 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 این سادگی به نمایندگی به عنوان N فاکتوریل. 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، من است کمتر یا مساوی N، من + +. 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-- یا اگر n 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 به طور مشابه، اگر N بود هر چیزی کمتر از 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، ولی O بزرگ N است؟ 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 بنابراین ما باید به جستجو لیست کل، تمام N 265 00:11:56,700 --> 00:11:58,480 عناصر، و به همین دلیل آن را از درجه n است. 266 00:11:58,480 --> 00:11:59,670 267 00:11:59,670 --> 00:12:04,880 >> بنابراین در حال حاضر این چیزی است که هر دو امگا از n log n است، و O بزرگ N log n است. 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 از n log n استفاده، که در آن تعریف شده است تتا اگر هر دو امگا و O بزرگ یکسان است. 271 00:12:16,920 --> 00:12:17,580 هر دو N log n است. 272 00:12:17,580 --> 00:12:18,690 273 00:12:18,690 --> 00:12:21,970 >> چیزی است که امگا چیست از N و O از N مربع؟ 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 بنابراین در بهترین حالت، آن را فقط از امگا N است. 282 00:12:43,185 --> 00:12:45,960 اگر آن را فقط به سادگی نمی طبقه بندی شده اند لیست برای شروع، 283 00:12:45,960 --> 00:12:48,270 پس ما باید از N O معاوضه مربع. 284 00:12:48,270 --> 00:12:49,330 285 00:12:49,330 --> 00:12:55,610 و در نهایت، ما باید انتخاب مرتب سازی بر برای n مربع، هر دو امگا و بزرگ 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 و دوباره، مشابه قبل از آن، ما تنها بسیاری از finitely بیت دارند 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 ما با یک شمارنده شروع، N. N است شمارش چند حرف وجود دارد. 321 00:14:21,780 --> 00:14:25,560 بنابراین ما در 0 شروع، و پس از آن ما تکرار بیش از لیست کل. 322 00:14:25,560 --> 00:14:29,092 >> آیا این براکت 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 بنابراین بازدید کنندگان براکت 0 برابر است با به نابودگر پوچ؟ 327 00:14:39,400 --> 00:14:42,850 اگر این طور نیست، پس از آن ما در حال رفتن به در این براکت 1، S 2 براکت نگاه کنید. 328 00:14:42,850 --> 00:14:45,050 ما تا جایی که ما پیدا کردن نابودگر تهی. 329 00:14:45,050 --> 00:14:48,580 هنگامی که ما آن را در بر داشت، و سپس N شامل طول رشته، 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 اما یکی از اصلی که مرتب سازی بر حباب است امگا از N برای یک لیست مرتب شده است. 339 00:15:12,930 --> 00:15:14,950 >> به یاد داشته باشید که جدول ما فقط قبل از آن دیدم. 340 00:15:14,950 --> 00:15:17,600 بنابراین حباب مرتب امگا از N، بهترین شرایط 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 مرتبسازی ادغامی، بدون توجه به آنچه شما انجام دهد، امگا از n log n استفاده شده است. 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 بنابراین در خط یک، ما در دیدن ما جدول، که y، A، B، و TMP همه 378 00:16:50,440 --> 00:16:51,540 محذوف. 379 00:16:51,540 --> 00:16:52,280 پس چه X است؟ 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 و پس از آن خط دو، به خوبی، ما می بینیم که Y به 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 ما علامت X برای تصویب ، و y علامت برای ب. 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 بنابراین A و B برابر است 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 بنابراین در حال حاضر ما گفت TMP اعضای هیات برابر به ستاره. 402 00:17:40,300 --> 00:17:44,410 بنابراین در خط چهار، همه چیز همان به جز برای TMP است. 403 00:17:44,410 --> 00:17:47,130 ما هر مقدار تغییر نکرده است از هر چیزی به جز برای TMP. 404 00:17:47,130 --> 00:17:49,230 ما در حال TMP برابر به ستاره. 405 00:17:49,230 --> 00:17:50,620 ستاره چیست؟ 406 00:17:50,620 --> 00:17:56,240 خب، یک امتیاز به X، بنابراین ستاره رفتن به برابر X است که 1. 407 00:17:56,240 --> 00:18:00,080 بنابراین همه چیز کپی شده است کردن، و TMP به 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 خب، ما فقط گفت: ستاره X است. 413 00:18:13,720 --> 00:18:16,400 بنابراین ما در حال تغییر X برابر ستاره ب. 414 00:18:16,400 --> 00:18:18,960 ستاره ب چیست؟ Y. نقاط B به Y. 415 00:18:18,960 --> 00:18:21,030 بنابراین ستاره B Y است. 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 >> در حال حاضر در خط بعدی، ستاره B برابر TMP. 419 00:18:31,120 --> 00:18:34,740 خب، ما فقط گفت: ستاره B Y است، بنابراین ما در حال تنظیم Y برابر با TMP. 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 ما از دست داده اند، A، B، و TMP، اما در نهایت ما 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 یا TF. 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 نقطه H شامل کتابخانه 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 در این مورد خاص، فایل هدر آنها نیاز به رشته نقطه H است، 451 00:19:45,410 --> 00:19:48,710 و از جمله رشته در حال حاضر نقطه H، 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 مانند درصد من بک اسلش N. 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 >> بنابراین اگر ما می گویند چون printf پرانتز درصد من بک اسلش پرانتز N نزدیک، 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 من راب Bowden هستم، و این CS50 است. 493 00:21:47,065 --> 00:21:51,104