1 00:00:00,000 --> 00:00:09,572 2 00:00:09,572 --> 00:00:12,030 Роб Боуден: Прывітанне, я Роб Боуден, і давайце пагаворым аб 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 Лягчэй чынам, 127128 мінус адзін. 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 магчымых значэння 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 Мы кажам, што пераменная I а затым павялічваючы I на 1. 66 00:03:05,000 --> 00:03:09,580 Цяпер мы хочам зрабіць, што ў С. Ёсць некалькі спосабаў мы маглі б зрабіць гэта. 67 00:03:09,580 --> 00:03:12,840 Тут мы выпадкова закадаваць назаўжды пятля як некаторы час (праўда). 68 00:03:12,840 --> 00:03:16,600 Такім чынам, мы аб'яўляем зменную I, проста у нас быў зменную я ў пустым. 69 00:03:16,600 --> 00:03:21,950 Абвясьцеце зменную I, і назаўжды у той час як (праўда), мы кажам, зменную я. 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 Цяпер мы хочам зрабіць нешта вельмі падобнае Марыё кропка з з праблемы ўсталюйце адзін. 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 Добра. 120 00:05:16,720 --> 00:05:19,090 Так растлумачце, чаму лінія адна прысутнічае. 121 00:05:19,090 --> 00:05:20,920 #include CS50 кропка ч. 122 00:05:20,920 --> 00:05:23,820 Чаму мы павінны #include 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 Так што, калі ў нас не было #include 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 Так стандарт ю кропка ч. 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 Так вось у нас Int асноўны (пустэчу). 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 Памятаеце, што мы маглі б сказаць Int Асноўныя INT 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 Таму, калі складаецца i выконваецца гэтая праграма 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 май 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 што функцыя вяртае ісціну, калі п няцотная і ілжыва, калі п цотна. 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 Таму наша аргумент п, калі н модулю 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 некалькі спосабаў вы маглі б зрабіць што мы пачынаем з гэтага Int прадукту 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, I ++. 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 Ну, калі б я быў адзін, то 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 >> Зараз, калі п больш 1, то мы збіраемся 243 00:10:54,660 --> 00:10:56,550 рабіць па меншай меры адзін ітэрацыі гэтага цыклу. 244 00:10:56,550 --> 00:11:00,630 Так скажам, п 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 п? 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 >> Так што цяпер гэта нешта, гэта і амега н лог н, і вялікая O н лог н. 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 >> Што-тое, што гэта амега п, і O п квадрат? 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 то ў нас ёсць O п квадраце свопы. 284 00:12:48,270 --> 00:12:49,330 285 00:12:49,330 --> 00:12:55,610 І, нарэшце, у нас ёсць выбар роду для п квадрат, як амега і вялікі О. 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 >> Хіба з кранштэйнам 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 Пасля таго, як мы знайшлі яго, то п ўтрымлівае агульная даўжыня радка, 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 Такім чынам, на першай лініі, мы бачым у нашым Табліца, што ў, а, бы, і TMP ўсе 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 Так х ўяўляе 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, а таксама адрас у з'яўляецца 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 >> Зараз на трэцяй лініі, якія хну? 394 00:17:26,250 --> 00:17:28,554 Ну, нічога не змянілася аб х і у ў гэтай кропцы. 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 Так х роўны 1, у роўны 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 Так што цяпер мы сказалі INT 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 Ну, а кропкі х, так зоркі збіраецца роўнай х, які з'яўляецца 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 Ну, мы толькі што сказалі, зорка з'яўляецца х. 413 00:18:13,720 --> 00:18:16,400 Такім чынам, мы мяняем х на роўную зоркі б. 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 Так мы ўсталёўваем х роўна у, а ўсё астатняе тое ж самае. 417 00:18:25,140 --> 00:18:29,130 Такім чынам, мы бачым у наступным шэрагу, што х з'яўляецца цяпер 2, а астатнія проста капіююцца ўніз. 418 00:18:29,130 --> 00:18:31,120 >> Цяпер у наступным радку, зорка б роўная TMP. 419 00:18:31,120 --> 00:18:34,740 Ну, мы толькі што сказалі, зорка Ь у, так мы ўсталёўваем у роўна TMP. 420 00:18:34,740 --> 00:18:37,450 Усё астатняе тое ж самае, такім чынам, усе капіюецца ўніз. 421 00:18:37,450 --> 00:18:42,050 Мы ўсталёўваем ў роўную 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 мы проста скапіяваць хну ўніз. 428 00:18:52,800 --> 00:18:56,490 І мы бачым, што х і ў Цяпер 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 ніжэй на працягу працоўнага дня ў наступным годзе, як Каліфорнія або 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 кропка ч, каб уключыць бібліятэку 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 мы маглі б адсоткаў, што мы маглі б надрукаваць што-небудзь 460 00:20:08,890 --> 00:20:11,380 як адсоткаў я зваротны слэш н. 461 00:20:11,380 --> 00:20:15,310 Ці мы маглі б надрукаваць, як працэнт I, прастору, адсоткаў я, прастора, адсоткаў я. 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 дужка адсоткаў я зваротны слэш н цесныя Хлопец, 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