1 00:00:00,000 --> 00:00:10,550 2 00:00:10,550 --> 00:00:14,050 >> Дэвід Дж малая: Гэта CS50 і гэта пачатак тыдня чатыры. 3 00:00:14,050 --> 00:00:18,630 І, хлопчык, Volkswagen у Бяда ўсё з-за праграмнага забеспячэння. 4 00:00:18,630 --> 00:00:20,264 Давайце зірнем. 5 00:00:20,264 --> 00:00:20,930 [Прайграванне відэа] 6 00:00:20,930 --> 00:00:25,560 -автомобили, Самыя разумныя персанажы у Фарсаж фільмаў. 7 00:00:25,560 --> 00:00:29,100 На гэтым тыдні нямецкі аўтавытворца Volkswagen апынуўся 8 00:00:29,100 --> 00:00:32,490 ў сярэдзіне скандалу патэнцыйна крымінальныя маштабы. 9 00:00:32,490 --> 00:00:36,060 >> -Volkswagen Рыхтуецца мільярды штрафаў, магчымыя крымінальныя абвінавачванні 10 00:00:36,060 --> 00:00:38,560 для яе кіраўнікоў, а Кампанія прыносіць свае прабачэнні 11 00:00:38,560 --> 00:00:41,840 за фальсіфікацыю 11 мільёнаў аўтамабіляў у дапамагчы яму перамагчы тэсты выкідаў. 12 00:00:41,840 --> 00:00:44,950 >> -Certain Дызельныя мадэлі былі распрацаваны з складанае праграмнае забеспячэнне 13 00:00:44,950 --> 00:00:48,440 што б інфармацыя ў тым ліку становішча руля і аўтамабіль 14 00:00:48,440 --> 00:00:51,870 паскорыць, каб вызначыць, што аўтамабіль быў праходзіць тэставанне выкідаў. 15 00:00:51,870 --> 00:00:55,650 Пад гэтым акалічнасцю, рухавік дазволіць знізіць выкіды таксічных рэчываў. 16 00:00:55,650 --> 00:00:59,070 Але машына была абсталявана абысці што, калі ён быў гоняць. 17 00:00:59,070 --> 00:01:03,320 Выкіды павялічыліся ад 10 да 40 раз вышэй дапушчальных узроўняў EPA. 18 00:01:03,320 --> 00:01:04,280 >> [КАНЕЦ ПРАГЛЯДУ] 19 00:01:04,280 --> 00:01:05,220 >> Дэвід Дж малая: Дык давайце зірніце на гэта 20 00:01:05,220 --> 00:01:07,250 і паглядзець, як менавіта гэта можа быць рэалізавана 21 00:01:07,250 --> 00:01:09,680 і як гэта можа паўплываць на так шмат машын, як гэта. 22 00:01:09,680 --> 00:01:12,840 Такім чынам, у маёй руцэ вось прэс- рэліз, які быў выпушчаны ў EPA-- 23 00:01:12,840 --> 00:01:14,620 Экалагічны Агенцтва па ахове, якія 24 00:01:14,620 --> 00:01:18,032 гэта рэгулюе орган ЗША, што ручкі экалагічных праблем, 25 00:01:18,032 --> 00:01:19,740 і затым фактычны афіцыйнае апавяшчэнне, што было 26 00:01:19,740 --> 00:01:22,420 адправіць Volkswagen ўсяго некалькі дзён таму. 27 00:01:22,420 --> 00:01:26,530 >> Такім чынам, па ахове навакольнага асяроддзя, піша, і ў цяперашні час раскрывае публічна, складаныя праграмнае забеспячэнне 28 00:01:26,530 --> 00:01:29,390 Алгарытм на некаторых Аўтамабілі Volkswagen выяўляе 29 00:01:29,390 --> 00:01:32,630 калі аўтамабіль праходзіць Тэставанне афіцыйныя выкіды 30 00:01:32,630 --> 00:01:36,505 і ператвараецца поўныя выкідаў кантралюе толькі падчас тэсту. 31 00:01:36,505 --> 00:01:38,380 Эфектыўнасць Гэтыя транспартныя сродкі забруджванне 32 00:01:38,380 --> 00:01:43,260 Прылады кіравання выкіды моцна зніжаецца ва ўсіх нармальных ваджэння 33 00:01:43,260 --> 00:01:44,320 сітуацыі. 34 00:01:44,320 --> 00:01:48,190 Гэта прыводзіць у аўтамабілях, якая задавальняе як Стандарты ў лабараторыі тэставання або 35 00:01:48,190 --> 00:01:52,790 станцыя, але падчас нармальнай працы выпраменьваюць oxides-- азоту або NOx-- 36 00:01:52,790 --> 00:01:54,950 з хуткасцю да 40 разоў стандарт. 37 00:01:54,950 --> 00:01:58,220 Праграмнае забеспячэнне вытворчасці Volkswagen цытата канец цытаты, паражэнне прылады, 38 00:01:58,220 --> 00:02:00,650 як вызначана чыстага Закон Паветра ў ЗША. 39 00:02:00,650 --> 00:02:03,410 >> Яны ідуць на кажуць, што па ахове навакольнага асяроддзя і іншае агенцтва 40 00:02:03,410 --> 00:02:07,020 раскрылі паразу прылады Праграмнае забеспячэнне пасля незалежнага аналізу 41 00:02:07,020 --> 00:02:09,660 даследчыкамі Захаду Універсітэт Вірджыніі. 42 00:02:09,660 --> 00:02:14,160 Забруджванне NOx спрыяе дыяксід азоту, прыземнага азону, 43 00:02:14,160 --> 00:02:15,700 і дробных часціц справа. 44 00:02:15,700 --> 00:02:18,090 Ўздзеянне гэтых забруджвальнікі была звязана 45 00:02:18,090 --> 00:02:20,870 з шырокім дыяпазонам сур'ёзныя наступствы для здароўя, 46 00:02:20,870 --> 00:02:23,637 у тым ліку падвышанай астмы атакі і іншыя рэспіраторныя 47 00:02:23,637 --> 00:02:26,470 хваробы, якія могуць быць дастаткова сур'ёзнымі, адправіць людзей у бальніцу. 48 00:02:26,470 --> 00:02:28,660 Ўздзеянне азону і цвёрдых часціц таксама мае 49 00:02:28,660 --> 00:02:31,960 былі звязаны з заўчасным смерць з-за дыхання, звязаныя 50 00:02:31,960 --> 00:02:35,690 або сардэчна-сасудзістых эфектаў. 51 00:02:35,690 --> 00:02:38,940 Дзеці, пажылыя людзі, людзі з існавалі раней рэспіраторныя захворванні 52 00:02:38,940 --> 00:02:42,840 асабліва схільныя рызыцы наступствы для здароўя гэтых забруджвальнікаў. 53 00:02:42,840 --> 00:02:45,056 >> Дастаткова сказаць, гэта даволі сур'ёзна. 54 00:02:45,056 --> 00:02:46,930 І давайце на чытаць яшчэ адзін урывак 55 00:02:46,930 --> 00:02:49,370 і тады мы будзем глядзець на асноўныя наступствы 56 00:02:49,370 --> 00:02:50,920 гэта ў кантэксце машыне. 57 00:02:50,920 --> 00:02:53,730 У прыватнасці, Volkswagen выраблены і ўстаноўлены 58 00:02:53,730 --> 00:02:56,210 Праграмнае забеспячэнне ў так званы электроннае кіраванне 59 00:02:56,210 --> 00:02:59,320 module-- або ECM-- з гэтыя транспартныя сродкі, якія зандзіравання 60 00:02:59,320 --> 00:03:03,580 калі транспартны сродак быў апрабаваны для захаванне нормаў выкідаў EPA. 61 00:03:03,580 --> 00:03:07,510 Грунтуючыся на розных уваходаў у тым ліку Становішча рулявога колы, аўтамабіль 62 00:03:07,510 --> 00:03:11,280 Хуткасць, працягласць рухавіка эксплуатацыя і бараметрычнага ціску, 63 00:03:11,280 --> 00:03:13,720 гэтыя ўваходы дакладна адсочваюцца параметры 64 00:03:13,720 --> 00:03:17,600 федэральнага працэдуры выпрабаванні, якая выкарыстоўваецца для Тэставанне выкідаў для сертыфікацыі EPA 65 00:03:17,600 --> 00:03:18,400 мэтаў. 66 00:03:18,400 --> 00:03:21,850 >> Падчас тэставання выкідаў ера, праграмнае забеспячэнне транспартных сродкаў ECM 67 00:03:21,850 --> 00:03:25,060 пабег праграмнае забеспячэнне, якое вырабляецца Вынікі сумяшчальныя выкідаў. 68 00:03:25,060 --> 00:03:28,340 На ўсіх іншых выпадках, аўтамабіль ECM праграмнае забеспячэнне 69 00:03:28,340 --> 00:03:31,090 пабег асобны дарогу Каліброўка што знізіла 70 00:03:31,090 --> 00:03:34,360 Эфектыўнасць працы Агульная сістэма кантролю за выкідамі, 71 00:03:34,360 --> 00:03:37,864 у прыватнасці, селектыўнага каталітычнага зніжэнне NOx Lean trap-- 72 00:03:37,864 --> 00:03:39,280 які мы ўбачым праз імгненне. 73 00:03:39,280 --> 00:03:43,040 У выніку, выкіды NOx павялічана з каэфіцыентам 10 да 40 разоў 74 00:03:43,040 --> 00:03:47,450 вышэй за ўзровень, адпаведных EPA У залежнасці ад тыпу прывада цыклу. 75 00:03:47,450 --> 00:03:50,800 >> Дык што ж гэта на самай справе азначае, і Зыходны код праграмнага забеспячэння працуючым 76 00:03:50,800 --> 00:03:53,190 на Volkswagen мае не яшчэ былі публічна раскрытыя, 77 00:03:53,190 --> 00:03:56,460 з'яўляецца тое, што, фактычна, гэта эквівалентна дзесьці там унутры 78 00:03:56,460 --> 00:03:57,830 кода Фальксвагена. 79 00:03:57,830 --> 00:04:02,200 Калі вы праходзяць выпрабаванні, і калі аўтамабіль выяўляе пэўныя экалагічныя фактары 80 00:04:02,200 --> 00:04:04,330 як рулявое кола становішча або рух 81 00:04:04,330 --> 00:04:06,710 або яе адсутнасць у машыне або любую колькасць іншых фактараў 82 00:04:06,710 --> 00:04:09,940 якія ў цяперашні час гіпотэза каб быць часткай гэтай формулы, 83 00:04:09,940 --> 00:04:12,370 яны проста уключыце Поўны кантроль выкідаў. 84 00:04:12,370 --> 00:04:15,670 Іншымі словамі, яны пачынаюць выпраменьвальныя менш забруджвальных рэчываў. 85 00:04:15,670 --> 00:04:18,769 >> У адваротным выпадку, у любой іншай сітуацыі калі ён не знойдзены як 86 00:04:18,769 --> 00:04:20,790 у лабараторыі, яны проста не робяць. 87 00:04:20,790 --> 00:04:24,320 І так можна спрасціць гэта ў больш бетон псевдокод з чымсьці 88 00:04:24,320 --> 00:04:24,820 як гэта. 89 00:04:24,820 --> 00:04:27,810 Калі колы паварочваюцца, але руль няма, наводзіць на думку 90 00:04:27,810 --> 00:04:30,060 што аўтамабіль знаходзіцца на некаторыя выгляд верціцца цыліндру 91 00:04:30,060 --> 00:04:32,550 але ў нейкі склад праходзяць выпрабаванні, 92 00:04:32,550 --> 00:04:36,070 то, як паводзяць сябе EPA хачу, каб вы. 93 00:04:36,070 --> 00:04:37,960 У адваротным выпадку няма. 94 00:04:37,960 --> 00:04:40,420 Такім чынам, давайце зірнем на кароткім відэа, 95 00:04:40,420 --> 00:04:45,391 глядзіць на тое, што наступствы маюць гэта на самай справе механічна. 96 00:04:45,391 --> 00:04:48,620 >> [Прайграванне відэа] 97 00:04:48,620 --> 00:04:52,800 >> -за Пятніцу па ахове навакольнага асяроддзя абвясціла, што некаторыя Аўтамабілі Volkswagen Audi паміж 2009 98 00:04:52,800 --> 00:04:55,840 і ў гэтым годзе былі з дапамогай так званы паразу прылада 99 00:04:55,840 --> 00:04:59,060 каб абыйсці законы выкідаў прызначаны для падтрымання чысціні паветра. 100 00:04:59,060 --> 00:05:01,700 Але што гэта азначае? 101 00:05:01,700 --> 00:05:04,666 >> Ну, сучасныя аўтамабілі маюць дзесяткі кампутараў ўнутры іх. 102 00:05:04,666 --> 00:05:07,040 І некаторыя з гэтых кампутараў дапамагчы каардынаваць функцыі 103 00:05:07,040 --> 00:05:09,590 рухавіка для аптымальнай прадукцыйнасць, пераканаўшыся, 104 00:05:09,590 --> 00:05:12,340 што ёсць не занадта шмат смецця выходзіць з выхлапной трубы. 105 00:05:12,340 --> 00:05:15,170 Яны на самой справе працуе Такім чынам на працягу некалькіх дзесяцігоддзяў. 106 00:05:15,170 --> 00:05:17,380 У прынцыпе, кожная частка рухавіка сучаснага аўтамабіля 107 00:05:17,380 --> 00:05:20,080 мае датчык або кантролер на ім, і гэтыя кампутары 108 00:05:20,080 --> 00:05:23,460 чытаюць у дадзеных тысячы раз у секунду карэкціроўкі гарбаты 109 00:05:23,460 --> 00:05:26,220 як стаўленне паліва да паветра што адбываецца ў цыліндры. 110 00:05:26,220 --> 00:05:28,730 >> Яны падманваюць Volkswagen і Audi мадэляў дызеляў, 111 00:05:28,730 --> 00:05:30,890 і дызелі маюць яшчэ адзін сапраўды важная кампутарная 112 00:05:30,890 --> 00:05:34,030 кантраляваныя параметры, што з'яўляецца колькасць несгоревшего паліва адбываецца 113 00:05:34,030 --> 00:05:35,200 у выхлап. 114 00:05:35,200 --> 00:05:36,310 Зараз гэта гучыць дрэнна. 115 00:05:36,310 --> 00:05:39,642 Не гучыць, як вы хацелі б, несгоревшего паліва адбываецца ў выхлап. 116 00:05:39,642 --> 00:05:41,600 Але ў выпадку ўключэння дызель, у вас ёсць што 117 00:05:41,600 --> 00:05:46,110 называецца пастка NOx, які з'яўляецца прыладай, якое паглынае і пасткі для аксідаў азоту 118 00:05:46,110 --> 00:05:48,880 што забруджвальныя рэчывы, якія у адваротным выпадку перайсці ў атмасферу. 119 00:05:48,880 --> 00:05:53,040 І эфект ад гэтага NOx пастку ўзмацняецца з несгоревшего паліва. 120 00:05:53,040 --> 00:05:56,650 Такім чынам, паражэнне прылада з'яўляецца спецыяльная праграма ўнутры гэтых кампутараў, якія могуць зрабіць гэта 121 00:05:56,650 --> 00:05:59,527 выглядаць аўтамабіль адказвае выпраменьванне стандарты, нават калі ён гэтага не робіць. 122 00:05:59,527 --> 00:06:01,110 Volkswagen былі праблемы на сваіх руках. 123 00:06:01,110 --> 00:06:04,050 Яго дызельныя рухавікі былі вядомыя для атрымання вялікую эканомію паліва, 124 00:06:04,050 --> 00:06:07,510 але пастка NOx добра працуе толькі калі больш паліва выкарыстоўваецца. 125 00:06:07,510 --> 00:06:10,460 Такім чынам, аўтамабіль будзе выявіць, з дапамогай гэтай прылады паразу, 126 00:06:10,460 --> 00:06:13,870 калі ён быў атрымліваць выкіды Тэст, ён будзе выкарыстоўваць больш паліва, 127 00:06:13,870 --> 00:06:16,830 зрабіць пасткі працу NOx таксама, выкіды будзе ў парадку. 128 00:06:16,830 --> 00:06:21,130 Але тады вы атрымаеце на дарозе, прылада выключаецца, вы спальванне меншага колькасці паліва 129 00:06:21,130 --> 00:06:24,256 але вы пакладзеце столькі, колькі 40 разоў больш забруджвальных рэчываў у атмасферу. 130 00:06:24,256 --> 00:06:26,130 Але як, чорт вазьмі аўтамабіль ведаю, што гэта было 131 00:06:26,130 --> 00:06:27,720 выпрабоўваецца на адпаведнасць выкідаў? 132 00:06:27,720 --> 00:06:30,590 Ера кажа, што гэта быў складаны сістэма, якая правяраецца рэчы 133 00:06:30,590 --> 00:06:34,090 як руля, Хуткасць, як доўга рухавік быў уключаны, 134 00:06:34,090 --> 00:06:35,507 і нават атмасферны ціск. 135 00:06:35,507 --> 00:06:37,673 Іншымі словамі, было няма спосаб гэта не было выпадковым 136 00:06:37,673 --> 00:06:40,260 таму што праграмнае забеспячэнне было прызначаны вельмі старанна, каб выявіць 137 00:06:40,260 --> 00:06:41,630 афіцыйны камінара. 138 00:06:41,630 --> 00:06:43,588 Вось некаторыя даволі сур'ёзныя падман і гэта 139 00:06:43,588 --> 00:06:45,420 чаму Volkswagen у такія сур'ёзныя непрыемнасці. 140 00:06:45,420 --> 00:06:48,600 На самай справе, іх генеральны дырэктар, Марцін Винтеркорн, толькі з'ехаў. 141 00:06:48,600 --> 00:06:49,820 >> Так што ж адбываецца далей? 142 00:06:49,820 --> 00:06:53,900 Ну, калі вы адзін з паўтары мільёнаў дызельныя Jettas, Бітлз, Гольфы, Пасаты, 143 00:06:53,900 --> 00:06:56,220 ці Audi A3s ажыццяўляецца, добрыя навіны ёсць 144 00:06:56,220 --> 00:06:57,886 што ваш аўтамабіль па-ранейшаму бяспечна ездзіць. 145 00:06:57,886 --> 00:07:00,510 Вы не павінны пакласці яго прэч да Volkswagen не выдае водгук. 146 00:07:00,510 --> 00:07:02,509 Але ў нейкі момант яны верагодна, прыйдзецца 147 00:07:02,509 --> 00:07:04,230 абнавіць праграмнае забеспячэнне ўнутры вашага аўтамабіля. 148 00:07:04,230 --> 00:07:06,927 Калі гэта адбудзецца, вы маглі б атрымліваць менш міль у баку. 149 00:07:06,927 --> 00:07:09,260 Адвакаты ўжо рыхтуецца на пазоваў 150 00:07:09,260 --> 00:07:12,500 Такім чынам, уладальнікі, магчыма, атрымаць кампенсацыю у нейкі момант у будучыні. 151 00:07:12,500 --> 00:07:15,832 Але гэта не збіраецца адбудзецца ў хуткім часе. 152 00:07:15,832 --> 00:07:16,711 >> [КАНЕЦ ПРАГЛЯДУ] 153 00:07:16,711 --> 00:07:19,960 Дэвід Дж малая: Так гэта на самай справе падымае цікавая карціна пытанне больш 154 00:07:19,960 --> 00:07:20,660 а давяраць. 155 00:07:20,660 --> 00:07:21,160 Дакладна? 156 00:07:21,160 --> 00:07:24,300 Ва ўсіх нас ёсць айфонаў або Андроіды або што-то ў нашых кішэнях, хутчэй за ўсё, 157 00:07:24,300 --> 00:07:26,500 у гэтыя дні, ці наўтбукі на нашых каленях, якія 158 00:07:26,500 --> 00:07:28,510 працуе праграмнае забеспячэнне зрабіў Яблыкам і Microsoft 159 00:07:28,510 --> 00:07:30,710 і гронкі іншых кампаній. 160 00:07:30,710 --> 00:07:34,240 Але як мы ведаем, што тое, што Гэтыя праграмныя прадукты робяць 161 00:07:34,240 --> 00:07:37,680 на самай справе, што гэта кампаніі кажуць, што яны робяць? 162 00:07:37,680 --> 00:07:39,610 >> Напрыклад, хто павінен сказаць, што кожны раз, калі вы 163 00:07:39,610 --> 00:07:42,200 зрабіць тэлефонны званок на ваш iPhone або Android-тэлефон або да т.п., 164 00:07:42,200 --> 00:07:45,650 што гэта нумар тэлефона таксама ня загружаецца на сервер які-небудзь кампаніі 165 00:07:45,650 --> 00:07:48,399 з-за некаторых праграме вы маеце напісаў, няхай гэта будзе аперацыйная 166 00:07:48,399 --> 00:07:51,070 Сама сістэма, як прашыўкай або Android, ці таму, што вы спампавалі 167 00:07:51,070 --> 00:07:53,880 некаторыя прыкладання трэціх бакоў што-то слухае 168 00:07:53,880 --> 00:07:57,120 каб усе вы друкуеце або усё, што вы на самой справе кажуць. 169 00:07:57,120 --> 00:07:59,500 Як вы ведаеце, што, калі вы, хлопцы, працуеце Clang 170 00:07:59,500 --> 00:08:02,590 або зрабіць, каб скампіляваць уласнае праграмнае забеспячэнне ў CS50, як 171 00:08:02,590 --> 00:08:06,080 У вас ёсць персанал, які CS50, у шляхам бібліятэцы CS50, 172 00:08:06,080 --> 00:08:08,690 не было ўваходу кожны радок, якую вы калі-небудзь атрымлівалі 173 00:08:08,690 --> 00:08:10,276 або кожны цаля вы калі-небудзь атрымлівалі? 174 00:08:10,276 --> 00:08:12,900 Ну, вы, безумоўна, можа выглядаць у зыходным кодзе нешта 175 00:08:12,900 --> 00:08:15,233 як бібліятэкі CS50, вы мог глядзець на зыходны код 176 00:08:15,233 --> 00:08:18,170 для аперацыйнай сістэмы Linux працуе на CS50 IDE. 177 00:08:18,170 --> 00:08:23,090 Але дзіўнае прадстаўленне было дадзена ў 1984 годзе 178 00:08:23,090 --> 00:08:26,730 ў атрыманні прэміі Цьюрынга на а вельмі вядомы вучоны вядомы 179 00:08:26,730 --> 00:08:29,750 as-- імя Кен Томпсан, які атрымаў прэмію Цьюрынга, якая 180 00:08:29,750 --> 00:08:33,500 з'яўляецца свайго роду кампутар Навукі Нобелеўская прэмія, калі хочаце, 181 00:08:33,500 --> 00:08:35,309 за працу па Аперацыйная сістэма называецца 182 00:08:35,309 --> 00:08:39,039 Unix, які вельмі падобны на дух, што мы выкарыстоўваем, які з'яўляецца Linux. 183 00:08:39,039 --> 00:08:41,960 І пытанне спытаў ён яго прыняцце гаворка, па сутнасці, 184 00:08:41,960 --> 00:08:44,910 ўстанаўлівае рамкі для гады і гады абмеркавання 185 00:08:44,910 --> 00:08:46,970 аб даверы і бяспекі, гэта было. 186 00:08:46,970 --> 00:08:50,410 У якой меры адным давяраць Зацвярджэнне, што program-- кавалак 187 00:08:50,410 --> 00:08:53,010 з software-- бясплатна траянскіх коней? 188 00:08:53,010 --> 00:08:56,500 Можа быць, гэта больш важна давяраць людзі, якія напісалі праграмнае забеспячэнне. 189 00:08:56,500 --> 00:08:58,650 >> І на самай справе, мы звязаны да размовы, што ён 190 00:08:58,650 --> 00:09:02,400 даў, прымаючы гэтую ўзнагароду у 80-х на сайце CS50 ў 191 00:09:02,400 --> 00:09:04,030 пад стар лекцыі на сённяшні дзень. 192 00:09:04,030 --> 00:09:06,071 Таму што тое, што вы ўбачыце з'яўляецца тое, што ён на самай справе дае 193 00:09:06,071 --> 00:09:09,430 даволі просты прыклад таго, як нават кампілятар Clang, як або што- 194 00:09:09,430 --> 00:09:13,950 кампілятары іншыя, якія выкарыстоўваюцца ў мінулым, што, калі убудаваныя ў кампілятара 195 00:09:13,950 --> 00:09:18,190 самі карыстаецеся мала, калі стан, якое па сутнасці кажа, 196 00:09:18,190 --> 00:09:22,360 калі вы заўважылі, што гэты код выкарыстоўвае функцыя GetString або GetInt 197 00:09:22,360 --> 00:09:26,600 Функцыя, ісці наперад і ўстаўце задняя дзверы або траянскі конь 198 00:09:26,600 --> 00:09:29,340 напрыклад, што гэтая праграма у цяперашні час мае некаторыя нулі 199 00:09:29,340 --> 00:09:30,930 і тыя, якія робяць нешта шкоднаснае. 200 00:09:30,930 --> 00:09:33,080 Уваход ўсе вашы націску клавіш, загрузка гэтых дадзеных 201 00:09:33,080 --> 00:09:35,100 у нейкі сервер, або сапраўды што-небудзь. 202 00:09:35,100 --> 00:09:37,290 >> І тое, што Кен Томпсан ідзе на зрабіць у гутарцы 203 00:09:37,290 --> 00:09:40,580 каб прадэманстраваць, што нават калі ў вас ёсць доступ да крыніцы 204 00:09:40,580 --> 00:09:43,794 код кампілятара, які якія злосна можа рабіць гэта, 205 00:09:43,794 --> 00:09:46,210 гэта не мае значэння, таму што ёсць гэтая курыца і яйка 206 00:09:46,210 --> 00:09:49,500 Рэальнасць мінулым многія гадоў у выніку чаго складальнікі 207 00:09:49,500 --> 00:09:51,960 выкарыстоўваюцца для кампіляцыі саміх сябе. 208 00:09:51,960 --> 00:09:55,440 Іншымі словамі, шлях назад, калі хто-то давялося б напісаць першы кампілятар. 209 00:09:55,440 --> 00:09:59,060 І пасля гэтага, у любы час яны абнаўляюцца кампілятар, змяніўшы зыходны код, 210 00:09:59,060 --> 00:10:02,020 дадаючы новыя магчымасці і перакампіляванні для людзей накшталт нас, каб выкарыстоўваць, ну, 211 00:10:02,020 --> 00:10:04,270 яны выкарыстоўваюць стары версія кампілятарам 212 00:10:04,270 --> 00:10:06,370 сабраць новы версія кампілятара. 213 00:10:06,370 --> 00:10:08,370 І калі вы паглядзіце на размовы, што ён даў, 214 00:10:08,370 --> 00:10:10,970 вы ўбачыце, што з-за гэтай круглявасці, 215 00:10:10,970 --> 00:10:14,330 Вы можаце на самой справе маюць памылкі або Траянскія коні ўбудаваны ў праграмнае забеспячэнне 216 00:10:14,330 --> 00:10:14,990 мы выкарыстоўваем. 217 00:10:14,990 --> 00:10:18,010 І нават калі вы паглядзіце на Зыходны код для гэтых праграм, 218 00:10:18,010 --> 00:10:21,550 яна не можа быць нават відаць таму што падман на самай справе 219 00:10:21,550 --> 00:10:24,710 у нейкай старой версіі кампілятар, які з тых часоў быў 220 00:10:24,710 --> 00:10:27,340 ін'екцыйных пагрозу ў нашым праграмным забеспячэнні. 221 00:10:27,340 --> 00:10:29,740 >> Якія толькі казаць, што мы сапраўды не можа і не павінен 222 00:10:29,740 --> 00:10:32,939 давер праграмнае забеспячэнне працуе на нашых наўтбуках або тэлефоны або любую колькасць месцаў. 223 00:10:32,939 --> 00:10:36,230 І на самай справе, пазней у гэтым семестры, калі мы пачынаем казаць аб вэб-праграмаванні 224 00:10:36,230 --> 00:10:38,521 а на самай справе пачаць будаваць вэб-прыкладанні, самастойна выходзіць 225 00:10:38,521 --> 00:10:40,285 мы пагаворым пра іх пагрозы і інш. 226 00:10:40,285 --> 00:10:43,410 Цяпер вы, напэўна, задаваліся і заўважыў, што было малюсенькае Дарт 227 00:10:43,410 --> 00:10:45,842 Вейдер ў кліпах, што Грань паказваў там 228 00:10:45,842 --> 00:10:47,550 аб Volkswagen. Калі Вы ніколі не бачылі, я 229 00:10:47,550 --> 00:10:49,190 думаў, што мы павінны палегчыць настрой, таму што гэта ўсё 230 00:10:49,190 --> 00:10:50,780 вельмі гняце і палохае. 231 00:10:50,780 --> 00:10:52,910 Я збіраюся азірацца назад на Super Bowl 2011 232 00:10:52,910 --> 00:10:55,300 калі камерцыйная па Volkswagen-- і гэта 233 00:10:55,300 --> 00:10:59,620 амаль робіць іх сімпатычным again-- эфір ўпершыню на тэлебачанні. 234 00:10:59,620 --> 00:11:04,039 Гэта другі заціск 60 Я думаю, што вы будзеце атрымліваць асалоду ад. 235 00:11:04,039 --> 00:11:04,705 [Прайграванне відэа] 236 00:11:04,705 --> 00:11:08,198 [МУЗЫКА - тэма з "Зорных войнаў"] 237 00:11:08,198 --> 00:11:35,643 238 00:11:35,643 --> 00:11:38,138 [Сабака брэша] 239 00:11:38,138 --> 00:11:50,114 240 00:11:50,114 --> 00:11:53,607 [Машына пачынае] 241 00:11:53,607 --> 00:12:04,086 242 00:12:04,086 --> 00:12:05,955 [КАНЕЦ ПРАГЛЯДУ] 243 00:12:05,955 --> 00:12:06,830 Дэвід Дж малая: Так. 244 00:12:06,830 --> 00:12:07,663 Я проста правяраў. 245 00:12:07,663 --> 00:12:11,360 Гэты аўтамабіль знаходзіцца ў спісе парушэнняў. 246 00:12:11,360 --> 00:12:12,000 Добра. 247 00:12:12,000 --> 00:12:14,040 Такім чынам, мы разгледзім некаторыя ПСЕВДОКОД хвіліну таму. 248 00:12:14,040 --> 00:12:15,380 А вось больш фрагмент псевдокода кода 249 00:12:15,380 --> 00:12:16,921 што мы бачылі некалькі разоў да гэтага часу. 250 00:12:16,921 --> 00:12:19,970 І давайце выкарыстоўваць гэта магчымасць Зараз, каб ўвесці новыя праграмы 251 00:12:19,970 --> 00:12:23,776 метад, які мы зрабілі см алгарытмічных 252 00:12:23,776 --> 00:12:25,400 на мінулым тыдні, калі мы глядзелі на сартавання зліццём. 253 00:12:25,400 --> 00:12:28,270 Але давайце фармалізаваць яго і паглядзець, як мы маглі б выкарыстоўваць яго ў рэальны код, 254 00:12:28,270 --> 00:12:30,350 а затым мы збіраемся выкарыстоўваць гэта Тэхніка па дарозе найбольш 255 00:12:30,350 --> 00:12:32,000 верагодна, каб вырашыць пэўныя іншыя праблемы. 256 00:12:32,000 --> 00:12:35,790 >> Так што гэта быў адзін з першых праграм, якія мы небудзь пісаў, хоць і ў псевдокода кода. 257 00:12:35,790 --> 00:12:37,790 І тое, што гэтая праграма дазволіла нам зрабіць курс 258 00:12:37,790 --> 00:12:41,510 было знайсці Mike Smith у тэлефоннай кнізе. 259 00:12:41,510 --> 00:12:46,216 І звярніце ўвагу, у прыватнасці ліній восем і 11, якія былі гэта заяву Go To. 260 00:12:46,216 --> 00:12:48,090 І на самай справе, некаторыя мовы, З сярод іх, 261 00:12:48,090 --> 00:12:50,006 на самай справе ёсць Зацвярджэнне, што літаральна 262 00:12:50,006 --> 00:12:52,710 перайсці да таго, што дазваляе перайсці да пэўнай радку. 263 00:12:52,710 --> 00:12:55,470 Гэтае правіла, з неадабрэннем, паколькі гэта можа быць вельмі лёгка злоўжываць 264 00:12:55,470 --> 00:12:58,490 і вы можаце пачаць скакаць вашага Праграма паўсюль, у адрозненне 265 00:12:58,490 --> 00:13:00,690 да выкарыстання такой логіка і струмень кіравання 266 00:13:00,690 --> 00:13:04,000 што мы выкарыстоўвалі да гэтага часу толькі з Завесы і ўмовы і да таго падобнае. 267 00:13:04,000 --> 00:13:08,660 >> Але мы можам спрасціць гэты алгарытм у псевдокода кода наступным чынам. 268 00:13:08,660 --> 00:13:11,250 Замест гэтага итеративного або цыкл падыход 269 00:13:11,250 --> 00:13:14,160 дзе мы ўвесь час вяртаюся і таму і вярнуцца да лініі тры, 270 00:13:14,160 --> 00:13:18,300 чаму мы не проста выгляд Пунт і больш як правіла, кажуць, у адпаведнасці сем і 10, 271 00:13:18,300 --> 00:13:20,570 проста замяніць гэтыя два пар ліній з, 272 00:13:20,570 --> 00:13:22,810 інакш, калі Сміт раней у кнізе мы будзем 273 00:13:22,810 --> 00:13:25,110 шукаць Майка ў левая палова кнігі. 274 00:13:25,110 --> 00:13:28,560 Інакш, калі Сміт пазней у Кніга, пошук Майка ў праве 275 00:13:28,560 --> 00:13:29,540 палова кнігі. 276 00:13:29,540 --> 00:13:31,180 І заўважце, ужо круглявасці. 277 00:13:31,180 --> 00:13:31,680 Дакладна? 278 00:13:31,680 --> 00:13:34,250 Я шукаю Майка ў тэлефонная кніга, а затым 279 00:13:34,250 --> 00:13:37,090 У рэшце рэшт я трапіў, можа быць, Лінія сем ці, можа быць радок 10 280 00:13:37,090 --> 00:13:41,089 і мая інструкцыя сабе гэта пошук Майка ў палове тэлефоннай кнізе. 281 00:13:41,089 --> 00:13:42,380 Ну, як мне знайсці Майка? 282 00:13:42,380 --> 00:13:44,213 Я ў сярэдзіне пошук Майка, чаму 283 00:13:44,213 --> 00:13:45,860 вы, здаецца, адпраўкі мяне ў кола? 284 00:13:45,860 --> 00:13:49,590 Але гэта нармальна, таму што тое, што адбываецца з памерам праблемы, 285 00:13:49,590 --> 00:13:52,630 як напісана ў радку 7 і 10? 286 00:13:52,630 --> 00:13:54,989 Мы не проста кажу пошуку Майка, шукаць майка. 287 00:13:54,989 --> 00:13:56,280 Мы спецыяльна кажу, што? 288 00:13:56,280 --> 00:13:58,694 289 00:13:58,694 --> 00:14:01,610 Пошук для яго ў левай палове правая палова якога эфектыўна 290 00:14:01,610 --> 00:14:03,440 палова памер праблемы. 291 00:14:03,440 --> 00:14:07,170 Так што гэта нармальна, што мы накшталт Удзельнічаючы ў гэтым круглявасці, 292 00:14:07,170 --> 00:14:09,180 гэта заганны круг, таму што, па меншай меры, мы 293 00:14:09,180 --> 00:14:11,090 што робіць праблему ўсё менш і менш. 294 00:14:11,090 --> 00:14:14,220 І ў рэшце рэшт мы збіраемся дасягнуць што так званая база выпадак, калі 295 00:14:14,220 --> 00:14:16,780 у нас ёсць толькі адна старонка left-- як наш валанцёр мінулым тыдні 296 00:14:16,780 --> 00:14:18,684 did-- мы мелі адну старонку налева, а затым мы не 297 00:14:18,684 --> 00:14:21,600 павінны працягваць шукаць Майк Сміт таму што ён альбо на гэтай старонцы 298 00:14:21,600 --> 00:14:23,080 ці ён не з'яўляецца. 299 00:14:23,080 --> 00:14:27,480 >> Так як мы можам рэалізаваць гэтую ідэю, гэта Сартаваць круглявасці у рэальны код? 300 00:14:27,480 --> 00:14:31,030 Ну, мы можам выкарыстоўваць метад які звычайна называюць Рэкурсія. 301 00:14:31,030 --> 00:14:33,960 І мы бачылі гэта ў псевдокод для сартавання зліццём на мінулым тыдні. 302 00:14:33,960 --> 00:14:37,190 Нагадаем, што гэта быў псевдокод для сартавання зліццём. 303 00:14:37,190 --> 00:14:40,560 Гэта магчыма нават прасцей, чым бурбалка выбар або ўстаўкі роду 304 00:14:40,560 --> 00:14:43,310 толькі з пункту гледжання прастаты з дапамогай якога можна выказаць гэта. 305 00:14:43,310 --> 00:14:46,750 >> Але гэта таму, што Мы накшталт кругавой 306 00:14:46,750 --> 00:14:51,350 кажучы, шукаць нешта шукаючы яго зноў. 307 00:14:51,350 --> 00:14:53,960 Але мы шукаем альбо на левая палова ці правая палова 308 00:14:53,960 --> 00:14:56,070 і затым у канчатковым рахунку мы зліцця ў гэтым выпадку. 309 00:14:56,070 --> 00:14:58,520 Але тут, таксама, з гэтыя два сартавання лініі, 310 00:14:58,520 --> 00:15:01,320 ж мы зноў гэта Ідэя рэкурсіі. 311 00:15:01,320 --> 00:15:05,350 І канкрэтна гэта азначае, што, у кантэксце алгарытму, 312 00:15:05,350 --> 00:15:10,880 з'яўляецца тое, што алгарытм з'яўляецца рэкурсіўнай калі ён выкарыстоўвае або называе сябе. 313 00:15:10,880 --> 00:15:14,330 >> Або з пункту гледжання C, функцыя з'яўляецца recursive-- функцыю пад назвай 314 00:15:14,330 --> 00:15:18,510 Foo з'яўляецца рэкурсіўнай, калі Foo, дзесьці ў яго зыходным кодзе, 315 00:15:18,510 --> 00:15:21,250 выклікае сама функцыя Foo. 316 00:15:21,250 --> 00:15:25,790 І гэта дрэнна, калі ўсё Foo-небудзь робіць гэта называць сябе зноў і зноў. 317 00:15:25,790 --> 00:15:30,600 Гэта нармальна, калі Foo ў канчатковым выніку спыняецца, як гэта робіць сартаванне зліццём, кажучы, пачакай, 318 00:15:30,600 --> 00:15:32,980 Калі гэтая праблема супер Невялікі, напрыклад, 319 00:15:32,980 --> 00:15:35,840 ці я знайшла таго, якога я шукаю, проста вярнуць. 320 00:15:35,840 --> 00:15:41,000 Ня рэкурсіўна, ня цыклічна называць сябе зноў. 321 00:15:41,000 --> 00:15:44,200 >> І так давайце зірнем на як гэта можа на самай справе працуюць. 322 00:15:44,200 --> 00:15:48,430 Так што я збіраюся ісці наперад і адкрытым да двух прыкладах зыходнага кода тут. 323 00:15:48,430 --> 00:15:50,321 Адзін з якіх называюць сігма 0. 324 00:15:50,321 --> 00:15:52,320 І гэта зусім не рэкурсіўная, але давайце 325 00:15:52,320 --> 00:15:53,694 Погляд на тое, што гэтая праграма робіць. 326 00:15:53,694 --> 00:15:55,737 Я распранулі ўсе каментары ад яго, але ўсё 327 00:15:55,737 --> 00:15:58,070 зыходнага кода на CS50-х Сайт мае каментары, калі вы 328 00:15:58,070 --> 00:15:59,570 хачу, каб прачытаць гэта пазней. 329 00:15:59,570 --> 00:16:02,010 І давайце зробім пару разважнасці правярае тут. 330 00:16:02,010 --> 00:16:06,640 >> Такім чынам, у верхняй часткі гэтага кода, у нас ёсць ўключаць CS50.h. 331 00:16:06,640 --> 00:16:07,650 Што гэта рабіць? 332 00:16:07,650 --> 00:16:08,990 Чаму гэта тут? 333 00:16:08,990 --> 00:16:11,740 Ва ўмовах разумныя непрафесіянала. 334 00:16:11,740 --> 00:16:12,424 Што ён робіць? 335 00:16:12,424 --> 00:16:12,858 Так. 336 00:16:12,858 --> 00:16:14,160 >> АЎДЫТОРЫЯ: Так што функцыя GetInt працуе. 337 00:16:14,160 --> 00:16:16,243 >> Дэвід Дж малая: Так што функцыя GetInt працуе. 338 00:16:16,243 --> 00:16:18,115 З-за гэтага ўнутры Файл, CS50.h, што 339 00:16:18,115 --> 00:16:20,950 мы ўбачым у хуткім часе ў тэрміны яго зыходны код, 340 00:16:20,950 --> 00:16:23,270 мае кучу функцый declared-- GetInt, GetString, 341 00:16:23,270 --> 00:16:26,950 і куча others-- і калі мы на самай справе ёсць, што Уключыць лінію, 342 00:16:26,950 --> 00:16:29,320 кампілятар Clang ня будзе ведаць, што ён існуе. 343 00:16:29,320 --> 00:16:32,400 І ж самае тычыцца лініі два, дзе INT вызначаецца 344 00:16:32,400 --> 00:16:35,101 Printf, якая з'яўляецца функцыяй мы працягваць выкарыстоўваць зусім няшмат. 345 00:16:35,101 --> 00:16:37,850 Цяпер, чацвёртая радок, здаецца, трохі Funky таму што гэта проста адзін лайнер. 346 00:16:37,850 --> 00:16:41,570 Гэта не мае кропку з коскі, ня кучаравыя брекеты, няма кода ўнутры яго. 347 00:16:41,570 --> 00:16:44,640 Але тое, што мы называем зрабіў гэтая рэч у мінулым тыдні? 348 00:16:44,640 --> 00:16:45,140 Так. 349 00:16:45,140 --> 00:16:46,060 Такім чынам, прататып. 350 00:16:46,060 --> 00:16:48,390 І чаму ў нас ёсць Прататып, які, здаецца, 351 00:16:48,390 --> 00:16:51,050 каб быць крыху залішнім як правіла, таму, што мы звычайна 352 00:16:51,050 --> 00:16:53,474 паглядзець функцыю яшчэ раз пазней у файле, ці не так? 353 00:16:53,474 --> 00:16:56,390 Дык чаму ж мы have-- вы проста чухаць галаву, але я вазьму яго. 354 00:16:56,390 --> 00:16:57,302 Так. 355 00:16:57,302 --> 00:17:00,000 >> АЎДЫТОРЫЯ: [неразборліва] Функцыя пасля асноўнай. 356 00:17:00,000 --> 00:17:01,000 Дэвід Дж малая: Дакладна. 357 00:17:01,000 --> 00:17:04,089 Так што кампілятар ведае, што вы у канчатковым рахунку вызначаюць або ажыццяўляць 358 00:17:04,089 --> 00:17:06,579 што функцыя пасля асноўнай, па-відаць. 359 00:17:06,579 --> 00:17:08,462 Так Clang і найбольш кампілятары роду нямы 360 00:17:08,462 --> 00:17:10,510 і яны будуць ведаць толькі тое, што вы кажаце ім. 361 00:17:10,510 --> 00:17:12,569 І калі вы хочаце выкарыстоўваць функцыя называецца сігма, 362 00:17:12,569 --> 00:17:15,710 Вам лепш вучыць кампілятар што яна існуе ў загадзя. 363 00:17:15,710 --> 00:17:17,970 >> Цяпер, галоўны сама, нават хоць гэта куча ліній, 364 00:17:17,970 --> 00:17:19,839 даволі знаёмыя, мы спадзяемся, у цяперашні час. 365 00:17:19,839 --> 00:17:21,942 Гэта значыць рабіць падчас цыкла чыя мэта ў жыцці 366 00:17:21,942 --> 00:17:24,400 тут, відаць, каб атрымаць цэлае станоўчае лік ад карыстальніка. 367 00:17:24,400 --> 00:17:27,349 І проста трымаць прыставаць да яго або яе, пакуль яны не супрацоўнічаюць. 368 00:17:27,349 --> 00:17:30,670 Затым у радку 16 у мяне ёсць цікавы выклік. 369 00:17:30,670 --> 00:17:31,570 IntAnswer. 370 00:17:31,570 --> 00:17:33,710 Які на левай руцэ бок дае мне Int 371 00:17:33,710 --> 00:17:36,650 якія могуць store-- называецца Answer-- які збіраецца захоўваць, па-відаць, 372 00:17:36,650 --> 00:17:39,090 вяртаецца значэнне сігма. 373 00:17:39,090 --> 00:17:41,840 Так сігма гэта проста адвольным, але значнае імя 374 00:17:41,840 --> 00:17:44,500 што я даў, каб функцыі чыя мэта ў жыцці 375 00:17:44,500 --> 00:17:47,680 ўзяць адзін argument-- мы будзем называць яго N ў гэтым case-- 376 00:17:47,680 --> 00:17:52,280 і проста ўзяць суму ад гэтага ліку плюс кожны станоўчае лік, што гэта 377 00:17:52,280 --> 00:17:53,200 менш, чым гэта. 378 00:17:53,200 --> 00:17:58,140 >> Так што, калі я праходжу ў ліку 2 да сігма, я хачу, каб дадаць 2 плюс 1 379 00:17:58,140 --> 00:18:00,240 плюс 0-- ня 0-- так, што дае мне 3. 380 00:18:00,240 --> 00:18:05,320 Калі я праходжу ў 3 сігма, я хачу, каб ёсць 3 плюс 2 плюс 1, што дае мне 6. 381 00:18:05,320 --> 00:18:05,900 І гэтак далей. 382 00:18:05,900 --> 00:18:09,750 Так гэта толькі дадае да ўсё лік менш або роўны яму. 383 00:18:09,750 --> 00:18:12,040 >> Цяпер, тут я толькі збіраюся раздрукаваць адказ. 384 00:18:12,040 --> 00:18:17,330 Так як хуткая праверка на дурня, давайце зрабіць сігма 0-- кропка слэш сігма 0-- 385 00:18:17,330 --> 00:18:18,690 і дазвольце мне ўвесці 2. 386 00:18:18,690 --> 00:18:19,960 І я сапраўды атрымаць 3. 387 00:18:19,960 --> 00:18:21,240 Дазвольце мне ўвесці 3. 388 00:18:21,240 --> 00:18:22,860 Я сапраўды атрымаеце 6. 389 00:18:22,860 --> 00:18:27,636 І калі хто-небудзь можа зрабіць матэматыку хутка, калі я 50, што я збіраюся атрымаць? 390 00:18:27,636 --> 00:18:29,839 >> АЎДЫТОРЫЯ: [неразборліва]. 391 00:18:29,839 --> 00:18:30,880 Дэвід Дж малая: Ну, няма. 392 00:18:30,880 --> 00:18:33,340 Але 1275, які даволі блізка. 393 00:18:33,340 --> 00:18:38,850 Так што гэта вынік таго, 50 плюс 49 плюс 48 плюс 47 плюс 46 394 00:18:38,850 --> 00:18:40,349 усё, аж да 1. 395 00:18:40,349 --> 00:18:41,390 Так што ўсё сігма робіць. 396 00:18:41,390 --> 00:18:43,350 Але давайце паглядзім, як мы рэалізаваны цяпер. 397 00:18:43,350 --> 00:18:45,790 Так тут з'яўляецца сама функцыя. 398 00:18:45,790 --> 00:18:49,000 І гэта, падобна, не нічога агульнага з рэкурсіі яшчэ. 399 00:18:49,000 --> 00:18:51,070 На самай справе, мы выкарыстоўваючы старая тэхніка школы. 400 00:18:51,070 --> 00:18:56,680 Я ініцыялізацыі зменнай называецца суму да нуля, то ў мяне ёсць foreloop тут, 401 00:18:56,680 --> 00:19:00,790 і я абвясціўшы Int назвай Я, мяркуючы яго роўным 1-- 402 00:19:00,790 --> 00:19:04,080 хоць я мог ўсталяваць яго роўным нуля, але так як я раблю даданне, 403 00:19:04,080 --> 00:19:05,340 хто клапоціцца, калі гэта нуль або адзін. 404 00:19:05,340 --> 00:19:06,660 Гэта адбываецца не мае ніякага эфекту. 405 00:19:06,660 --> 00:19:10,110 >> Так што я ітэрацыі да таго часу, як я гэта менш або роўны м, што 406 00:19:10,110 --> 00:19:11,671 з'яўляецца аргументам, які быў прыняты ў. 407 00:19:11,671 --> 00:19:13,670 А потым я проста трымаць павялічваючы І. і разуменне 408 00:19:13,670 --> 00:19:20,010 завесы ўсё, што я раблю робіць суму плюс роўная I. І гэта наўмысным. 409 00:19:20,010 --> 00:19:22,326 Я не хачу рабіць, у гэтым так, як сумы плюс плюс. 410 00:19:22,326 --> 00:19:24,790 Я хачу, каб на самой справе дадаць бягучае значэнне I 411 00:19:24,790 --> 00:19:28,190 якія становіцца ўсё больш і больш і больш у праточнай падлік. 412 00:19:28,190 --> 00:19:30,210 >> А потым я вярнуся суму. 413 00:19:30,210 --> 00:19:33,850 І так адказ атрымлівае значэнне сумы. 414 00:19:33,850 --> 00:19:35,282 І тады я раздрукаваць яго. 415 00:19:35,282 --> 00:19:37,740 Так ёсць магчымасць тут, хоць, накшталт спрашчэння 416 00:19:37,740 --> 00:19:41,260 гэты код канцэптуальна і выгляд ўдару аднаго гэта 417 00:19:41,260 --> 00:19:43,250 розум у тэрмінах Прастата, нават калі гэта 418 00:19:43,250 --> 00:19:45,700 патрабуецца час, каб разабрацца з зразумець, чаму гэта 419 00:19:45,700 --> 00:19:47,330 з'яўляецца магутным у гэтых невялікіх прыкладаў. 420 00:19:47,330 --> 00:19:50,380 Вось сігма одно-- так Другая версія гэтага кода. 421 00:19:50,380 --> 00:19:55,290 Усе наверсе ідэнтычны так што ж гісторыя ставіцца, як і раней. 422 00:19:55,290 --> 00:19:59,220 Але цяпер давайце паглядзім на Рэалізацыя сігма, якія 423 00:19:59,220 --> 00:20:05,040 Я скараціўся да толькі гэтыя lines-- чатыры радкі кода, на самай справе, 424 00:20:05,040 --> 00:20:06,980 плюс некаторыя фігурныя дужкі і прабелы. 425 00:20:06,980 --> 00:20:07,930 >> Але што я раблю? 426 00:20:07,930 --> 00:20:11,050 Калі т менш або роўная нуля, мне трэба, каб выгляд апрацоўкі 427 00:20:11,050 --> 00:20:12,490 што супер просты выпадак. 428 00:20:12,490 --> 00:20:15,450 І калі вы перадаць мне нуль ці нічога негатыў, які з'яўляецца проста дзіўна, 429 00:20:15,450 --> 00:20:17,909 Я проста хачу, каб адвольна але паслядоўна вяртаць нуль. 430 00:20:17,909 --> 00:20:20,200 Я не хачу гэтую рэч да трапіць у нейкай дзіўнай бясконцасць 431 00:20:20,200 --> 00:20:21,810 цыкл з-за адмоўнага значэння. 432 00:20:21,810 --> 00:20:25,070 Так што я проста кажу, што калі вы дасце мне нуля або менш, я вяртаюся да нуля. 433 00:20:25,070 --> 00:20:28,220 >> Але гэта добра, таму што гэта што адной старонкі тэлефоннай кнігі 434 00:20:28,220 --> 00:20:28,790 што засталося. 435 00:20:28,790 --> 00:20:32,660 Я адкусваючы вельмі канкрэтную праблему і не называючы нешта рэкурсіўна. 436 00:20:32,660 --> 00:20:36,580 Але ў радку 31, то я, здаецца, робяць? 437 00:20:36,580 --> 00:20:39,780 Дужкі проста трымаць рэчы, спадзяюся, трохі ясней. 438 00:20:39,780 --> 00:20:42,110 Але ўсё, што я раблю, я вяртанне M-- ўсе 439 00:20:42,110 --> 00:20:45,790 Вы ўручаліся me-- плюс Значэнне M-- прабачце, 440 00:20:45,790 --> 00:20:49,052 плюс значэнне сігма М мінус 1. 441 00:20:49,052 --> 00:20:50,010 Такім чынам, што ж гэта значыць? 442 00:20:50,010 --> 00:20:53,965 Калі вы дасце мне нумар 3 у якасці ўваходных, адказ, які я хачу, каб атрымаць, у канчатковым рахунку 443 00:20:53,965 --> 00:20:57,307 6, таму што 3 плюс 2 плюс 1 дае мне 6. 444 00:20:57,307 --> 00:20:59,390 Але як я магу думаць аб як гэты код працуе? 445 00:20:59,390 --> 00:21:03,070 У першы раз я называю сігма і я праходжу ў значэнне 3, 446 00:21:03,070 --> 00:21:07,960 гэта, як кажуць на кавалку паперы, вось значэнне 3 447 00:21:07,960 --> 00:21:09,920 і я быў прыняты ў якасці сігма гэта. 448 00:21:09,920 --> 00:21:13,090 3, відавочна, не менш, чым 0, так стан КАЛІ не ўжываецца. 449 00:21:13,090 --> 00:21:14,020 Астатнія. 450 00:21:14,020 --> 00:21:14,990 Так што мне рабіць? 451 00:21:14,990 --> 00:21:19,902 Я хачу, каб вярнуцца м, што з'яўляецца 3, плюс сігма мінус 1 м. 452 00:21:19,902 --> 00:21:21,110 Такім чынам, дазвольце мне адсочваць гэта. 453 00:21:21,110 --> 00:21:22,710 Я збіраюся паставіць гэта ліст паперы ўніз. 454 00:21:22,710 --> 00:21:24,668 І тое, што значэнне, каб быць ясна, я збіраюся прайсці 455 00:21:24,668 --> 00:21:26,540 у сігма ў гэтай кропцы ў гісторыі? 456 00:21:26,540 --> 00:21:28,080 Які нумар? 457 00:21:28,080 --> 00:21:28,610 2, дакладна? 458 00:21:28,610 --> 00:21:29,670 3 мінус 2 Студзень. 459 00:21:29,670 --> 00:21:32,000 Так што я проста трэба трохі кавалак паперы тут. 460 00:21:32,000 --> 00:21:33,931 Так што цяпер сігма выклікаўся зноў. 461 00:21:33,931 --> 00:21:35,930 І я свядома паклаў гэта ўніз, таму што гэта 462 00:21:35,930 --> 00:21:38,070 накшталт як паўзу што версія гісторыі 463 00:21:38,070 --> 00:21:40,720 таму што цяпер я засяроджаны па сігнале ад мінус 1 м. 464 00:21:40,720 --> 00:21:42,660 Так м быў 3, м мінус студзені 2. 465 00:21:42,660 --> 00:21:45,110 Дык вось 2, што я быў прыняты. 466 00:21:45,110 --> 00:21:48,510 2, відавочна, не менш 0, так што справа не прымяняюцца. 467 00:21:48,510 --> 00:21:53,445 Інакш я вярнуся м, што гэта рэч, плюс сігма якому кошту? 468 00:21:53,445 --> 00:21:56,160 469 00:21:56,160 --> 00:21:59,650 Так што, калі сігма 1-- таму з'яўляецца м цяпер 2 SO 2 мінус 1 студзень. 470 00:21:59,650 --> 00:22:01,950 Так што зараз у мяне ёсць толькі значэнне 1. 471 00:22:01,950 --> 00:22:04,810 Я перадаю толькі нумар 1 да функцыі sigma-- 472 00:22:04,810 --> 00:22:09,120 ці сам here-- так 1, відавочна, не менш за нуль, да гэтага часу не прымяняюцца. 473 00:22:09,120 --> 00:22:12,970 >> Інакш вяртанне 1 плюс сігма што? 474 00:22:12,970 --> 00:22:13,470 0. 475 00:22:13,470 --> 00:22:14,678 Такім чынам, дазвольце мне проста памятаеце, што. 476 00:22:14,678 --> 00:22:15,920 Я вярнуся да гэтага пазней. 477 00:22:15,920 --> 00:22:18,060 Цяпер я збіраюся ісці наперад і йота ўніз нумарам 0, таму што гэта 478 00:22:18,060 --> 00:22:19,470 мой аргумент або параметр. 479 00:22:19,470 --> 00:22:22,400 Я прайшоў шэраг 0 і, нарэшце, гэты працэс 480 00:22:22,400 --> 00:22:25,760 проста паўтараючы сабе аб'яву млоснасці зусім спыніць, таму што тое, што 481 00:22:25,760 --> 00:22:28,820 я адразу рабіць, калі я бачу гэтую 0? 482 00:22:28,820 --> 00:22:29,790 Я вяртаюся да нуля. 483 00:22:29,790 --> 00:22:31,790 Так што зараз у вас ёсць, каб пераматаць гісторыю. 484 00:22:31,790 --> 00:22:34,430 >> Калі я цяпер ідуць назад у часе, тое, што было самым апошнім, што 485 00:22:34,430 --> 00:22:36,670 Я зрабіў, калі б вы былі ў літаральным сэнсе перамоткі відэа? 486 00:22:36,670 --> 00:22:41,630 Я збіраюся забраць апошняе 1, і гэта дае мне 1 плюс 0 роўна 1. 487 00:22:41,630 --> 00:22:44,100 Калі я буду перамоткі гісторыя, што збіраецца даць мне 488 00:22:44,100 --> 00:22:46,880 2 плюс гэта працуе значэнне, якое роўна 1. 489 00:22:46,880 --> 00:22:47,789 Дык вось 3. 490 00:22:47,789 --> 00:22:49,330 А потым я збіраюся трымаць перамотваць. 491 00:22:49,330 --> 00:22:54,220 Калі я ўпершыню паклаў лік 3-- так 3 плюс 3 дае мне 6. 492 00:22:54,220 --> 00:22:57,272 >> А цяпер, калі вы пераматаная відэа аж да гэтага моманту, 493 00:22:57,272 --> 00:22:58,980 гэта было вельмі Я спытаў першае пытанне. 494 00:22:58,980 --> 00:23:01,450 Калі прайшло 3, што сігма 3? 495 00:23:01,450 --> 00:23:04,204 Гэта сапраўды 6, сума усе гэтыя кавалачкі паперы. 496 00:23:04,204 --> 00:23:07,120 Так што, калі патрабуецца некаторы час, каб абгарнуць ваш розум вакол, гэта нармальна. 497 00:23:07,120 --> 00:23:10,700 Але ўлічыце, што гэта little-- яго быў вельмі наўмысным, што я складзеныя 498 00:23:10,700 --> 00:23:12,990 гэтыя лікі адзін на аднаго. 499 00:23:12,990 --> 00:23:17,440 Гэта накшталт як якія маюць memory-- запіс часу, 500 00:23:17,440 --> 00:23:19,940 як скруббер ў відэа, што я магу сапраўды назад ст. 501 00:23:19,940 --> 00:23:24,350 І мы збіраемся вярнуцца да што метафара толькі няшмат. 502 00:23:24,350 --> 00:23:28,240 >> Але спачатку, аказваецца, што ёсць шмат вундэркіндаў і смешных людзей, 503 00:23:28,240 --> 00:23:29,614 Я думаю, на Google. 504 00:23:29,614 --> 00:23:31,530 Хтосьці, хто вельмі добра трошкі ўвазе 505 00:23:31,530 --> 00:23:34,270 падышоўшы на імгненне і дапамагчы мне шукаць нешта? 506 00:23:34,270 --> 00:23:35,650 Вельмі, вельмі нізкі ключ. 507 00:23:35,650 --> 00:23:37,870 Хтосьці, хто ніколі не Перад прыдумаць, мабыць. 508 00:23:37,870 --> 00:23:38,370 ДОБРА. 509 00:23:38,370 --> 00:23:39,030 Да? 510 00:23:39,030 --> 00:23:39,530 Давай. 511 00:23:39,530 --> 00:23:41,410 Ідзем ўніз. 512 00:23:41,410 --> 00:23:42,183 Ваша імя? 513 00:23:42,183 --> 00:23:42,870 >> СЭМ: Сэм. 514 00:23:42,870 --> 00:23:44,290 >> Дэвід Дж малая: Сэм, давай ўніз. 515 00:23:44,290 --> 00:23:45,320 Гэта тое ж самае. 516 00:23:45,320 --> 00:23:46,280 Вельмі прыемна. 517 00:23:46,280 --> 00:23:46,780 Эй. 518 00:23:46,780 --> 00:23:47,580 Прыходзьце. 519 00:23:47,580 --> 00:23:51,290 Так што мне трэба, каб ты, калі Вы маглі б, Сэм, вось Google. 520 00:23:51,290 --> 00:23:53,240 Вы можаце шукаць тэрмін рэкурсіі? 521 00:23:53,240 --> 00:23:55,770 522 00:23:55,770 --> 00:23:56,270 Не сапсаваць. 523 00:23:56,270 --> 00:23:59,940 524 00:23:59,940 --> 00:24:00,970 >> А цяпер let's-- так. 525 00:24:00,970 --> 00:24:03,380 Націсніце ОК, што. 526 00:24:03,380 --> 00:24:04,315 Лепш націсніце што. 527 00:24:04,315 --> 00:24:07,020 528 00:24:07,020 --> 00:24:08,020 Ах, атрымаць яго. 529 00:24:08,020 --> 00:24:08,520 Няма? 530 00:24:08,520 --> 00:24:09,050 ДОБРА. 531 00:24:09,050 --> 00:24:10,430 Так давайце зробім пару іншых. 532 00:24:10,430 --> 00:24:12,830 Не так шмат, звязаныя акадэмічна тут, але вы 533 00:24:12,830 --> 00:24:14,520 альбо шукалі Google для анаграмы? 534 00:24:14,520 --> 00:24:15,280 >> СЭМ: Не. 535 00:24:15,280 --> 00:24:15,520 >> Дэвід Дж малая: ОК. 536 00:24:15,520 --> 00:24:17,186 Пошук анаграмы замест рэкурсіі. 537 00:24:17,186 --> 00:24:22,540 538 00:24:22,540 --> 00:24:23,790 Як наконт крыва. 539 00:24:23,790 --> 00:24:25,515 Вы калі-небудзь шукалі крыва? 540 00:24:25,515 --> 00:24:29,260 541 00:24:29,260 --> 00:24:32,692 Цяпер, гэты трохі цяжка бачыць, але мы спадзяемся, everything's-- ОК. 542 00:24:32,692 --> 00:24:34,150 Гэта толькі ты і я атрымліваю асалоду ад гэтым. 543 00:24:34,150 --> 00:24:34,690 ДОБРА. 544 00:24:34,690 --> 00:24:38,950 >> Такім чынам, нарэшце, гэта one's-- гэта крыху крыва. 545 00:24:38,950 --> 00:24:40,810 Цяпер зрабіць бочку. 546 00:24:40,810 --> 00:24:44,460 547 00:24:44,460 --> 00:24:45,310 Выдатна. 548 00:24:45,310 --> 00:24:45,910 Добра. 549 00:24:45,910 --> 00:24:47,110 Вялікі дзякуй Сэму. 550 00:24:47,110 --> 00:24:49,416 Тут вы ідзяце. 551 00:24:49,416 --> 00:24:50,400 Дзякуючы. 552 00:24:50,400 --> 00:24:52,807 >> Так што ж адбываецца на ўсяго з гэтых дурных прыкладаў? 553 00:24:52,807 --> 00:24:55,640 Так на самой справе, пад капотам Мільёны Google, радкоў кода 554 00:24:55,640 --> 00:24:58,860 па-відаць, некалькі дурное, калі Ўмовы, якія па сутнасці 555 00:24:58,860 --> 00:25:01,160 праверкі, калі карыстальнік мае набралі ў гэтай фразе, 556 00:25:01,160 --> 00:25:03,760 зрабіць што-то, што, верагодна, узяў нетрывіяльная колькасць часу 557 00:25:03,760 --> 00:25:06,080 ажыццявіць толькі пацешна у гэтым шляху. 558 00:25:06,080 --> 00:25:08,430 Але гэта ўсё, што кіпіць да пад капотам. 559 00:25:08,430 --> 00:25:11,570 Але, вядома, Рэкурсія больш з geekier 560 00:25:11,570 --> 00:25:13,880 прыклад сярод тых асаблівых хітрасцяў. 561 00:25:13,880 --> 00:25:16,880 І, вядома, ёсць іншыя там а таксама, што мы, магчыма, нават не 562 00:25:16,880 --> 00:25:18,230 выявіў толькі пакуль. 563 00:25:18,230 --> 00:25:22,830 >> Так зірніце, або разгледзець Цяпер наступная праграма, 564 00:25:22,830 --> 00:25:24,830 і, вядома, захапіць любы з іх на выхад. 565 00:25:24,830 --> 00:25:28,820 Я збіраюся ісці наперад і адкрыць праграму, якая 566 00:25:28,820 --> 00:25:30,920 збіраюся паспрабаваць памяняць два значэння. 567 00:25:30,920 --> 00:25:33,210 Але перш чым мы туды, давайце зробім гэта. 568 00:25:33,210 --> 00:25:38,500 Ці можам мы атрымаць яшчэ адзін Праца на грамадскіх пачатках, я думаю? 569 00:25:38,500 --> 00:25:40,480 Хочаце стаць валанцёрам? 570 00:25:40,480 --> 00:25:40,980 Няма? 571 00:25:40,980 --> 00:25:41,890 Давай до. 572 00:25:41,890 --> 00:25:42,390 Давай до. 573 00:25:42,390 --> 00:25:42,890 Добра. 574 00:25:42,890 --> 00:25:44,136 Так ваша імя чаго? 575 00:25:44,136 --> 00:25:44,810 >> Ларэн: Ларэн. 576 00:25:44,810 --> 00:25:45,768 >> Дэвід Дж малая: Ларэн. 577 00:25:45,768 --> 00:25:46,890 Прыходзьце на уверх, Ларэн. 578 00:25:46,890 --> 00:25:50,140 Так Ларэн быць выклік тут наступным чынам. 579 00:25:50,140 --> 00:25:52,310 Вельмі прыемна. 580 00:25:52,310 --> 00:25:55,730 Так Ларэн тут ёсць перад яе двума пустымі кубкамі. 581 00:25:55,730 --> 00:25:57,570 І ў нас ёсць некаторыя аранжавы сок і трохі малака 582 00:25:57,570 --> 00:26:00,301 і мы збіраемся пайсці наперад і рабіць наступнае. 583 00:26:00,301 --> 00:26:01,550 Мы проста збіраемся, каб запоўніць гэты. 584 00:26:01,550 --> 00:26:07,840 Праз некалькі унцый малака сюды і давайце запоўніць невялікую апельсінавы сок тут. 585 00:26:07,840 --> 00:26:11,475 >> І наадварот ўсіх гэтыя гледачы, 586 00:26:11,475 --> 00:26:13,550 памяняць месцамі два значэння гэтых кубкаў. 587 00:26:13,550 --> 00:26:16,970 Пастаўце апельсінавы сок у кубак малака і малако ў кубак апельсінавага соку. 588 00:26:16,970 --> 00:26:22,380 589 00:26:22,380 --> 00:26:26,150 Як бы вы гэта зрабіць, калі вы былі ў дадому і мелі доступ да іншых паставак? 590 00:26:26,150 --> 00:26:27,400 Ларэн: Пакладзеце яго ў іншую кубак. 591 00:26:27,400 --> 00:26:28,191 Дэвід Дж малая: ОК. 592 00:26:28,191 --> 00:26:31,940 Такім чынам, давайце часова Пераменная, калі мы зробім гэта. 593 00:26:31,940 --> 00:26:35,871 І ісці наперад сёння, а ажыццявіць Такую ж працэдуру замены. 594 00:26:35,871 --> 00:26:36,370 Так, добра. 595 00:26:36,370 --> 00:26:41,490 Мы змясцілі OJ у часовае Пераменная, малако ў зменнай OJ, 596 00:26:41,490 --> 00:26:44,481 і ў цяперашні час часовая пераменная ў зменную малака. 597 00:26:44,481 --> 00:26:44,980 ДОБРА. 598 00:26:44,980 --> 00:26:48,740 Так вельмі добра зроблена да гэтага часу. 599 00:26:48,740 --> 00:26:50,990 Так што атрымліваецца, што out-- правесці думаў на імгненне. 600 00:26:50,990 --> 00:26:54,479 Тут проста вырадак гэта крыху, гэта будзе адпаведная З-код 601 00:26:54,479 --> 00:26:55,520 што мы проста рэалізуецца. 602 00:26:55,520 --> 00:26:58,650 У нас было два ўваходу, а і б, абодва якія мы проста скажам, для прастаты 603 00:26:58,650 --> 00:26:59,260 INT гадоў. 604 00:26:59,260 --> 00:27:02,780 І звярніце ўвагу, тут, калі я хачу памяняць значэння двух зменных А і В, 605 00:27:02,780 --> 00:27:06,890 мы сапраўды патрэбны пасярэднік, А часовая пераменная, часовае кубкі, 606 00:27:06,890 --> 00:27:10,830 у якой заліваюць адно з значэнняў так што ў нас ёсць запаўняльнік для яго. 607 00:27:10,830 --> 00:27:13,480 Але затым код у дакладнасці а Ларэн тут рэалізаваныя. 608 00:27:13,480 --> 00:27:15,500 >> Цяпер, толькі, каб атрымаць трохі вар'ятам, аказваецца 609 00:27:15,500 --> 00:27:20,930 што вы можаце зрабіць гэта без часовая пераменная. 610 00:27:20,930 --> 00:27:24,870 Каб зрабіць гэта правільна, хоць, мы збіраемся каб падмануць з некаторымі хіміі. 611 00:27:24,870 --> 00:27:26,380 У нас ёсць некаторыя дадатковыя кубкі тут. 612 00:27:26,380 --> 00:27:29,600 Такім чынам, бліжэй за ўсё, што выглядае як малако і ваду perhaps-- 613 00:27:29,600 --> 00:27:34,090 ці малака і OJ-- гэта ў нас ёсць некаторыя вада, так што мы будзем запаўняць гэта адно уверх 614 00:27:34,090 --> 00:27:36,486 з некалькі унцый чыстай вады. 615 00:27:36,486 --> 00:27:38,332 Гэта, верагодна, занадта шмат. 616 00:27:38,332 --> 00:27:38,832 Так. 617 00:27:38,832 --> 00:27:39,934 Гэта, безумоўна, занадта шмат. 618 00:27:39,934 --> 00:27:40,600 Трымаеце на адной сек. 619 00:27:40,600 --> 00:27:43,520 620 00:27:43,520 --> 00:27:48,420 >> А зараз у нас ёсць нафта, якая, як я ўспамінаю ад сярэдняй школы хіміі класа, 621 00:27:48,420 --> 00:27:49,990 мы спадзяемся, гэта не змешваецца з вадой. 622 00:27:49,990 --> 00:27:53,650 Але гэта свайго роду выгляд выглядае, як малако і OJ. 623 00:27:53,650 --> 00:27:55,760 Так што цяпер, без выкарыстання часовая пераменная, 624 00:27:55,760 --> 00:27:59,260 Вы можаце памяняць гэтыя два значэння? 625 00:27:59,260 --> 00:28:03,884 Так алею ідзе ў кубак вады, вада ідзе ў кубак алею. 626 00:28:03,884 --> 00:28:04,800 Ларэн: Няма іншыя кубкі? 627 00:28:04,800 --> 00:28:05,940 Дэвід Дж малая: Ніякія іншыя кубкі. 628 00:28:05,940 --> 00:28:07,860 І я на самой справе не адчуў гэта перш, чым у гэтым годзе 629 00:28:07,860 --> 00:28:10,110 так што я не ведаю, калі гэта будзе на самай справе працуюць хімічна. 630 00:28:10,110 --> 00:28:16,130 631 00:28:16,130 --> 00:28:18,650 Гэта не павінна было здарыцца. 632 00:28:18,650 --> 00:28:19,761 Гэта працуе? 633 00:28:19,761 --> 00:28:20,260 Добра. 634 00:28:20,260 --> 00:28:20,990 Так падзелу? 635 00:28:20,990 --> 00:28:21,490 Добра. 636 00:28:21,490 --> 00:28:24,714 Зараз мы атрымалі, каб атрымаць вады ў іншы кубку. 637 00:28:24,714 --> 00:28:27,630 Smarter канцэнтратары хімія мог верагодна, зрабіць гэта лепш за мяне. 638 00:28:27,630 --> 00:28:28,510 >> Lauren: вады на дне. 639 00:28:28,510 --> 00:28:31,910 >> Дэвід Дж малая: The water--, што было што ключ у апошні раз мы зрабілі гэта. 640 00:28:31,910 --> 00:28:33,950 Вы павінны зрабіць гэта ў правільным парадку. 641 00:28:33,950 --> 00:28:34,450 Так. 642 00:28:34,450 --> 00:28:35,270 That's-- ОК. 643 00:28:35,270 --> 00:28:37,290 Так што цяпер у нас ёсць два кубкі алею. 644 00:28:37,290 --> 00:28:37,790 ДОБРА. 645 00:28:37,790 --> 00:28:38,510 Гэта нармальна. 646 00:28:38,510 --> 00:28:40,110 Але калі гэта хімічна працаваў, чым i-- 647 00:28:40,110 --> 00:28:41,200 >> Ларэн: Гэта вада. 648 00:28:41,200 --> 00:28:41,930 >> Дэвід Дж малая: Гэта ў асноўным вада. 649 00:28:41,930 --> 00:28:42,430 Добра. 650 00:28:42,430 --> 00:28:44,210 Але гэта ўсё той жа шклянку, як раней. 651 00:28:44,210 --> 00:28:47,570 Так заліць it-- паспрабаваць там. 652 00:28:47,570 --> 00:28:49,300 ДОБРА. 653 00:28:49,300 --> 00:28:51,010 Гэта добрае выкарыстанне часу класа сёння. 654 00:28:51,010 --> 00:28:51,510 ДОБРА. 655 00:28:51,510 --> 00:28:53,890 Так што цяпер we-- прыемна. 656 00:28:53,890 --> 00:28:55,460 Накшталт таго. 657 00:28:55,460 --> 00:28:55,960 Добра. 658 00:28:55,960 --> 00:28:56,690 Так вельмі добра. 659 00:28:56,690 --> 00:29:00,006 Дзякуй Ларэн. 660 00:29:00,006 --> 00:29:01,950 Вельмі добра зроблена. 661 00:29:01,950 --> 00:29:04,570 >> Так што проста падарваць вашыя розумы, і гэта, мабыць, што-то 662 00:29:04,570 --> 00:29:08,660 гуляць з, калі вам падабаецца ў CS50 ID, Вы можаце, на самай справе, памяняць дзве зменныя 663 00:29:08,660 --> 00:29:11,470 без выкарыстання часовага цэлы лік. 664 00:29:11,470 --> 00:29:13,060 І гэта адпаведны код С. 665 00:29:13,060 --> 00:29:16,110 І калі вы памятаеце з мінулага Серада, мы ўвялі, калі коратка, 666 00:29:16,110 --> 00:29:19,720 некаторыя новыя аператары ў С і робіць хто ўспомніць, што маленькі моркву 667 00:29:19,720 --> 00:29:23,660 сімвал, што мала трохкутнай Сімвал з клавіятуры ўяўляе? 668 00:29:23,660 --> 00:29:26,003 Што пабітавае аператар? 669 00:29:26,003 --> 00:29:26,770 >> АЎДЫТОРЫЯ: EXOR. 670 00:29:26,770 --> 00:29:27,645 >> Дэвід Дж малая: EXOR. 671 00:29:27,645 --> 00:29:28,560 Эксклюзіўны Або. 672 00:29:28,560 --> 00:29:32,920 Так што, калі вы хочаце, проста для задавальнення на дадому, каб даць і б два адвольных 673 00:29:32,920 --> 00:29:36,072 такія каштоўнасці, як любы eight-- і I будзе выбраць восем бітнае значэнне. 674 00:29:36,072 --> 00:29:38,530 Калі вы зробіце гэта з 32 біт, Вы вельмі хутка надакучае. 675 00:29:38,530 --> 00:29:42,150 Але проста даць восем біт Значэнне гэта ўсё, адзін ці два, 676 00:29:42,150 --> 00:29:43,790 і даць б аналагічнай кошту. 677 00:29:43,790 --> 00:29:46,810 А потым, выкарыстоўваючы вызначэнне з XOR з мінулага сераду, 678 00:29:46,810 --> 00:29:52,560 прымяняць гэтую патроху, кожны з гэтыя восем бітаў у кожнай з А і В, 679 00:29:52,560 --> 00:29:54,980 а затым зрабіць яго менавіта за гэтым кодам. 680 00:29:54,980 --> 00:29:58,170 І гэта не тое, што няправільна Вы бачыце тут на экране. 681 00:29:58,170 --> 00:30:02,100 Гэта сапраўды зводзіцца трох аперацый XOR 682 00:30:02,100 --> 00:30:05,910 і нейкім чароўным а і б абмяняюцца пазіцыі 683 00:30:05,910 --> 00:30:08,010 без страты інфармацыі. 684 00:30:08,010 --> 00:30:11,580 >> Такім чынам, нафту і вада трук з'яўляецца Бліжэйшы рэальны свет ўвасабленне 685 00:30:11,580 --> 00:30:12,980 Я мог думаць аб тым, што, каб імітаваць. 686 00:30:12,980 --> 00:30:15,950 Але, безумоўна, гэта прасцей выкарыстоўваць часовую зменную, 687 00:30:15,950 --> 00:30:16,920 як у гэтым выпадку тут. 688 00:30:16,920 --> 00:30:21,190 І гэта таксама магчымасць сказаць, таксама такая мікра аптымізацыі, 689 00:30:21,190 --> 00:30:23,590 у якасці камп'ютэрнага вучонага хацеў бы сказаць, у той час як пацешна 690 00:30:23,590 --> 00:30:27,060 выхваляцца аб тым, як вы зрабілі гэта без як абмен з дадатковай зменнай, 691 00:30:27,060 --> 00:30:28,640 гэта яшчэ не ўсё, што пераканаўча. 692 00:30:28,640 --> 00:30:31,619 Таму што, каб захаваць 32 біт, як у выпадку фактычнага Int, 693 00:30:31,619 --> 00:30:33,410 гэта не ўсё, што пераканаўчых у сістэме, дзе 694 00:30:33,410 --> 00:30:36,722 вы маглі б выкарыстоўваць дзясяткі мегабайт ці нават больш, напрыклад памяці ў гэтыя дні. 695 00:30:36,722 --> 00:30:38,680 І на самай справе, калі мы атрымліваем на больш позні пастаўленай задачы 696 00:30:38,680 --> 00:30:41,010 і вы рэалізуеце загавор праверкі, і вы будзеце 697 00:30:41,010 --> 00:30:43,550 быць аспрэчаныя, каб зрабіць гэта з гэта як маленькая аператыўная памяць і толькі 698 00:30:43,550 --> 00:30:46,820 Час, як можна на computer-- вас яшчэ 699 00:30:46,820 --> 00:30:50,160 ёсць тыдзень, каб рэалізаваць it-- вы have-- вы будзеце 700 00:30:50,160 --> 00:30:51,799 выклік, каб мінімізаваць гэтыя рэсурсы. 701 00:30:51,799 --> 00:30:53,840 І гэта на самай справе толькі Выпадак гэты семестр 702 00:30:53,840 --> 00:30:57,940 дзе вы будзеце заахвочваць галіцца ад нават лепшых прадукцыйнасці 703 00:30:57,940 --> 00:30:59,340 варта інакш. 704 00:30:59,340 --> 00:31:02,200 >> Так што-як мы можам убачыць іх у кодзе? 705 00:31:02,200 --> 00:31:04,530 Дазвольце мне ісці наперад з прадпрыемствам і адкрыць прыклад 706 00:31:04,530 --> 00:31:07,700 што наўмысна называюць Няма своп, таму што гэта не 707 00:31:07,700 --> 00:31:10,670 на самай справе памяняць зменныя як вы на самой справе маглі б чакаць. 708 00:31:10,670 --> 00:31:12,260 Такім чынам, давайце зірнем. 709 00:31:12,260 --> 00:31:17,050 Вось праграма, якая не мае CS50 Бібліятэка адбываецца, проста стандартны ўвод / выснова. 710 00:31:17,050 --> 00:31:19,560 Цяпер у нас ёсць прататып для падпампоўкі наверсе, які толькі 711 00:31:19,560 --> 00:31:21,540 азначае, што ён павінен быць вызначаны пазней. 712 00:31:21,540 --> 00:31:22,550 А вось галоўны. 713 00:31:22,550 --> 00:31:26,000 >> Я адвольна прызначаныя х і у, адпаведна, адным значэння і два 714 00:31:26,000 --> 00:31:28,590 толькі таму, што яны маленькія і лёгка, каб думаць. 715 00:31:28,590 --> 00:31:32,280 А потым я проста ёсць куча printfs дзе ў мяне ёсць просты тэст. х 1 716 00:31:32,280 --> 00:31:35,110 і ў з'яўляецца 2 меркавана што гэтыя printfs скажу. 717 00:31:35,110 --> 00:31:36,530 Так што няма магіі да гэтага часу. 718 00:31:36,530 --> 00:31:40,100 >> Тады я збіраюся сцвярджаць з друкаваць выразнасці, абмен кропка кропка кропка. 719 00:31:40,100 --> 00:31:43,730 Я збіраюся патэлефанаваць своп Функцыя, праходзячы па х і у. 720 00:31:43,730 --> 00:31:47,350 І давайце выкажам здагадку, што зараз своп ажыццяўляецца дакладна 721 00:31:47,350 --> 00:31:49,930 як гэта было некаторы час таму з часовай зменнай. 722 00:31:49,930 --> 00:31:52,670 І так я сцвярджаю, смела, месцамі. 723 00:31:52,670 --> 00:31:55,429 х цяпер гэта і зараз у гэтага. 724 00:31:55,429 --> 00:31:57,220 Але файл, вядома, не называецца Няма своп. 725 00:31:57,220 --> 00:31:58,678 Такім чынам, давайце на самай справе паглядзець, што адбываецца. 726 00:31:58,678 --> 00:32:04,450 Калі я не кампіляцыі ня своп, а затым зрабіць ./noswap, х 1, у 2. 727 00:32:04,450 --> 00:32:05,770 Падпампоўка месцамі. 728 00:32:05,770 --> 00:32:07,200 х роўны 1, у 2. 729 00:32:07,200 --> 00:32:11,980 Так што на самай справе, здаецца, нават недахопы хоць swap-- давайце пракруціць ўніз now-- 730 00:32:11,980 --> 00:32:16,542 рэалізуецца менавіта ў адпаведнасці з Код я прапанаваў некаторы час таму. 731 00:32:16,542 --> 00:32:19,000 Такім чынам, мы не збіраемся, каб атрымаць фантазіі з XOR рэчы на ​​дадзены момант. 732 00:32:19,000 --> 00:32:21,890 Гэта таксама павінна працаваць як з малаком і OJ, 733 00:32:21,890 --> 00:32:25,820 але гэта, здаецца, не працуе. 734 00:32:25,820 --> 00:32:27,180 >> Так давайце зробім гэта зноў. 735 00:32:27,180 --> 00:32:29,310 Можа быць, я проста не працуе правільна. 736 00:32:29,310 --> 00:32:32,010 Так што давайце не працаваць Няма своп зноў. 737 00:32:32,010 --> 00:32:32,900 Можа быць, я-- няма. 738 00:32:32,900 --> 00:32:34,400 Так што гэта проста не працуе. 739 00:32:34,400 --> 00:32:36,060 Так давайце зробім невялікі праверку наяўнасці свядомасці. 740 00:32:36,060 --> 00:32:39,690 Дазвольце мне ісці наперад тут, у своп і проста дадаць, пачакайце хвіліну, 741 00:32:39,690 --> 00:32:43,856 а ёсць% I / N і давайце убудова у значэнні а. 742 00:32:43,856 --> 00:32:45,730 Таму што я сапраўды хачу каб убачыць, што адбываецца. 743 00:32:45,730 --> 00:32:47,570 І на самай справе, гэта тэхніка адладкі 744 00:32:47,570 --> 00:32:50,028 што вы маглі б выкарыстоўваць у офіс гадзіны ці ва ўжо дома, 745 00:32:50,028 --> 00:32:53,560 падобна першай палове Дана Відэа Armendariz ў PSET3 746 00:32:53,560 --> 00:32:56,870 дзе мы ўвялі друку Def, як рэкамендуемы метад, па меншай меры, 747 00:32:56,870 --> 00:32:58,080 для простых выпадкаў. 748 00:32:58,080 --> 00:33:01,720 Дазвольце мне ісці наперад і працаваць зрабіць няма замены зноў, ./noswap. 749 00:33:01,720 --> 00:33:04,370 750 00:33:04,370 --> 00:33:05,840 >> Цікава. 751 00:33:05,840 --> 00:33:11,670 Так заўважыць, што, здаецца, каб быць праўдай. х 1, у 2, але гэта 2, калі У 1. 752 00:33:11,670 --> 00:33:16,790 Так гэтыя двое нейкім чынам памяняліся але х і ў не атрымліваюць месцамі. 753 00:33:16,790 --> 00:33:21,090 Такім чынам, каб было ясна, што адбываецца ёсць, тут у мяне ёсць х і ў 754 00:33:21,090 --> 00:33:25,380 і тыя лакальныя зменныя ў Асноўная сфера, я перадаю ў х і ў 755 00:33:25,380 --> 00:33:26,170 памяняць. 756 00:33:26,170 --> 00:33:29,080 Цяпер, своп, як асобнай функцыі, бясплатна патэлефанаваць свае аргументы 757 00:33:29,080 --> 00:33:30,590 або яго параметры усё, што ён хоча. 758 00:33:30,590 --> 00:33:33,280 Foo або бар або х ці ў або А ці В. 759 00:33:33,280 --> 00:33:36,870 Проста каб зразумець, што яны не супадае з х і ў па сабе, 760 00:33:36,870 --> 00:33:38,020 Я сказаў і б. 761 00:33:38,020 --> 00:33:40,040 Але мы маглі б назваць іх, што мы хочам. 762 00:33:40,040 --> 00:33:43,960 >> І так, падобна, Своп прайшло 763 00:33:43,960 --> 00:33:48,980 x-- АКА a-- і гэта перадаецца y-- AKA б. 764 00:33:48,980 --> 00:33:51,900 Нейкім чынам гэтыя тры лініі абмен менавіта тыя каштоўнасці, 765 00:33:51,900 --> 00:33:53,510 як гэта зрабіў Ларэн з малаком і OJ. 766 00:33:53,510 --> 00:33:56,010 Але калі мы раздрукаваць каштоўнасці, а і б 767 00:33:56,010 --> 00:34:01,340 сапраўды памяняць, але і х у няма ніякіх зменаў у іх. 768 00:34:01,340 --> 00:34:03,150 Нагадаем, што х і ў тут. 769 00:34:03,150 --> 00:34:05,320 >> Такім чынам, мы можам бачыць гэта з дапамогай іншая тэхніка, а таксама. 770 00:34:05,320 --> 00:34:08,110 І гэта таксама тэхніка убудаваныя ў задачы ўсталяваць тры. 771 00:34:08,110 --> 00:34:10,780 Давайце ісці наперад і рабіць гэта ў CS50 ID, калі вы яшчэ гэтага не зрабілі. 772 00:34:10,780 --> 00:34:13,730 На бакавой боку мы прама ёсць гэтую ўкладку Debugger. 773 00:34:13,730 --> 00:34:16,159 І калі вы адкрыць гэта, ёсць некаторыя таемныя звесткі 774 00:34:16,159 --> 00:34:17,530 што кінуў на вас першапачаткова. 775 00:34:17,530 --> 00:34:19,310 Але давайце дражніць гэта акрамя вельмі хутка. 776 00:34:19,310 --> 00:34:21,620 >> Такім чынам, адна, вы бачыце лакальныя зменныя. 777 00:34:21,620 --> 00:34:26,230 Аказваецца, што будаваць у CS50 IDE, і шмат асяроддзяў праграмавання больш 778 00:34:26,230 --> 00:34:28,060 Як правіла, гэта адладчык. 779 00:34:28,060 --> 00:34:31,340 Інструмент, які дазваляе наглядна ўбачыць тое, што адбываецца ўнутры вашай праграмы 780 00:34:31,340 --> 00:34:34,380 без неабходнасці звяртацца да дадання printfs і кампіляцыі і запуску 781 00:34:34,380 --> 00:34:37,588 і даданне Printf-х і кампіляцыі і бег, які ўжо ў непрацоўны час 782 00:34:37,588 --> 00:34:40,070 ці дома, верагодна, становіцца даволі стомным. 783 00:34:40,070 --> 00:34:43,090 >> Дык вось, у імгненне, мы збіраюся бачыць у рэжыме рэальнага часу 784 00:34:43,090 --> 00:34:44,760 значэння нашых лакальных зменных. 785 00:34:44,760 --> 00:34:47,880 Мы таксама збіраемся быць у стане ўсталяваць тое, што называецца супыну, якія 786 00:34:47,880 --> 00:34:52,570 ёсць магчымасці ў маёй праграме, каб прыпыніць выкананне ў пэўнай радку кода 787 00:34:52,570 --> 00:34:53,710 што мне цікава, а. 788 00:34:53,710 --> 00:34:54,210 Дакладна? 789 00:34:54,210 --> 00:34:55,969 Гэтыя праграмы працуюць у секунду. 790 00:34:55,969 --> 00:35:00,450 Гэта свайго роду добры для нас павольных людзей каб мець магчымасць зрабіць паўзу, скарыстацца момантам, см 791 00:35:00,450 --> 00:35:02,380 што адбываецца вакол пэўная радок кода 792 00:35:02,380 --> 00:35:05,050 без ўзворвання праграмы праз яго і сканчаючы цалкам. 793 00:35:05,050 --> 00:35:08,510 Такім чынам, кропкі супыну збіраецца дазволіць нам перапынак і паўза ў пэўнай кропцы. 794 00:35:08,510 --> 00:35:12,990 >> Стэк выклікаў гэта мудрагелісты спосаб кажучы, што ў цяперашні час функцыі 795 00:35:12,990 --> 00:35:14,140 называюць у цяперашні час. 796 00:35:14,140 --> 00:35:15,370 Галоўная заўсёды выклікаецца першым. 797 00:35:15,370 --> 00:35:17,230 Але калі Асноўны называе Функцыя называецца своп, 798 00:35:17,230 --> 00:35:20,470 мы на самай справе адбываецца, каб убачыць гэта Вежа функцый, якія былі 799 00:35:20,470 --> 00:35:22,400 называецца ў зваротным храналагічным парадку. 800 00:35:22,400 --> 00:35:23,310 Такім чынам, давайце паглядзім, што. 801 00:35:23,310 --> 00:35:24,327 >> Я збіраюся, каб паменшыць. 802 00:35:24,327 --> 00:35:25,660 Я збіраюся вярнуцца да маіх кодам. 803 00:35:25,660 --> 00:35:27,540 І толькі таму, што я хачу, быць педантычным тут, 804 00:35:27,540 --> 00:35:31,100 Я збіраюся ісці наперад і націсніце толькі з левага боку лініі пяці. 805 00:35:31,100 --> 00:35:32,830 І, што стварае чырвоную кропку. 806 00:35:32,830 --> 00:35:36,200 І звярніце ўвагу, на правай баку што адладчык ведае, эй, 807 00:35:36,200 --> 00:35:41,020 Я проста сказаў, што кропкі супыну noswap.c лініі пяць, спецыяльна 808 00:35:41,020 --> 00:35:42,480 на гэтай радкі кода. 809 00:35:42,480 --> 00:35:45,090 Так адладчык ведае, што я прасілі ў наступны раз 810 00:35:45,090 --> 00:35:48,530 Я бягу мая праграма яго паўзу выкананне там, а не проста 811 00:35:48,530 --> 00:35:50,390 працуе ўсё гэта вельмі хутка. 812 00:35:50,390 --> 00:35:53,889 >> Так што цяпер я збіраюся націснуць на Debug Кнопка на самым версе IDE 813 00:35:53,889 --> 00:35:55,430 і што збіраецца рабіць наступнае. 814 00:35:55,430 --> 00:36:00,680 Гэта збіраецца адкрыць першапачаткова некалькі страшна гледзячы другі тэрмінал window-- 815 00:36:00,680 --> 00:36:02,679 выдаленай адладкі з правесці такое і such-- 816 00:36:02,679 --> 00:36:04,970 і мы вернемся да таго, што Усё гэта азначае, што ў хуткім часе. 817 00:36:04,970 --> 00:36:09,020 Але, што важна цяпер з'яўляецца тое, што, што чырвоная кропка трапіў, 818 00:36:09,020 --> 00:36:11,735 адладчык наўмысна спыніўся execution-- 819 00:36:11,735 --> 00:36:15,560 Ня на гэтай лініі як такой, а на першым лініі фактычнага кода ў гэтай функцыі. 820 00:36:15,560 --> 00:36:18,040 І вось чаму лінія знаходзіцца сем Цяпер вылучаныя жоўтым колерам. 821 00:36:18,040 --> 00:36:20,550 >> А цяпер давайце зірнем на правай баку. 822 00:36:20,550 --> 00:36:27,300 Падобна на тое, па змаўчанні, дастаткова добра, х мае значэнне, які? 823 00:36:27,300 --> 00:36:27,860 0. 824 00:36:27,860 --> 00:36:29,750 І ў мае значэнне, які? 825 00:36:29,750 --> 00:36:30,410 Нуль. 826 00:36:30,410 --> 00:36:35,540 І гэта можна чакаць у тым сэнсе, што х і y--, што жоўты line-- мае 827 00:36:35,540 --> 00:36:36,770 яшчэ не выкананы. 828 00:36:36,770 --> 00:36:38,510 Так х не павінна мець значэнне 1. 829 00:36:38,510 --> 00:36:41,470 Гэта можа мець любое іншае значэнне, так званы смецце значэнне. 830 00:36:41,470 --> 00:36:44,320 І нам пашанцавала ў тым, што гэта нуля ў гэтай кропцы, па сутнасці. 831 00:36:44,320 --> 00:36:46,400 >> Так што цяпер ёсць толькі некалькі Кнопкі мы павінны клапаціцца 832 00:36:46,400 --> 00:36:48,100 аб пры адладцы такім чынам. 833 00:36:48,100 --> 00:36:49,970 Звярніце ўвагу, тут мы маем кнопку прайгравання. 834 00:36:49,970 --> 00:36:51,877 І калі мы будзем гуляць або націсніце рэзюмэ, гэта проста 835 00:36:51,877 --> 00:36:53,710 збіраецца запусціць праз астатняя частка праграмы 836 00:36:53,710 --> 00:36:55,300 або да таго часу, пакуль парад яшчэ адну кропку супыну. 837 00:36:55,300 --> 00:36:56,910 Але я не ўсталяваў любой іншай супыну, дык гэта проста 838 00:36:56,910 --> 00:36:58,118 збіраецца запусціць да канца. 839 00:36:58,118 --> 00:37:00,280 Гэта выгляд паражэнняў Мэта калупацца. 840 00:37:00,280 --> 00:37:03,290 >> Так замест гэтага, я клапачуся пра Гэтыя значкі справа. 841 00:37:03,290 --> 00:37:05,360 І калі я навядзіце курсор мышы на іх, як вы павінны таксама, 842 00:37:05,360 --> 00:37:07,450 Вы ўбачыце маленькія tips-- падказкі. 843 00:37:07,450 --> 00:37:09,020 Гэта адзін пераступіць. 844 00:37:09,020 --> 00:37:11,290 Зараз гэта не значыць, пропуск наступная радок кода. 845 00:37:11,290 --> 00:37:14,840 Гэта проста азначае, выканаць яго і перайсці да наступнай, перайсці да наступнай, 846 00:37:14,840 --> 00:37:15,580 перайсці да наступнага. 847 00:37:15,580 --> 00:37:17,610 Іншымі словамі, з дапамогай што кнопка, я магу хадзіць 848 00:37:17,610 --> 00:37:20,390 праз мой код адзін крок за адзін раз. 849 00:37:20,390 --> 00:37:21,914 Лінія за лініяй, у літаральным сэнсе. 850 00:37:21,914 --> 00:37:23,830 Цяпер справа што ёсць яшчэ адзін 851 00:37:23,830 --> 00:37:25,163 што мы ўбачым у хвіліну. 852 00:37:25,163 --> 00:37:27,820 Гэта так званы Крок у іконе, што гэта 853 00:37:27,820 --> 00:37:30,300 збіраецца дазволіць мне апусканне ў іншую функцыю. 854 00:37:30,300 --> 00:37:31,800 Але давайце паглядзім гэта ў імгненне. 855 00:37:31,800 --> 00:37:33,280 Так што я збіраюся націснуць пераступіць. 856 00:37:33,280 --> 00:37:35,820 А цяпер звярніце ўвагу, як я націсніце гэтая кнопка ў верхнім правым куце, 857 00:37:35,820 --> 00:37:41,260 трымаць вочы прыкладна пад мясцовай Зменныя і бачыць тое, што адбываецца з х. 858 00:37:41,260 --> 00:37:44,115 х цяпер 1, паколькі жоўтая лінія ў цяперашні час выконваецца ўжо 859 00:37:44,115 --> 00:37:45,840 і мы пераехалі на лініі 8. 860 00:37:45,840 --> 00:37:49,840 І праз хвіліну ў варта спадзявацца, стане 2. 861 00:37:49,840 --> 00:37:52,330 >> Цяпер, што цікава нічога адбываецца няшмат. 862 00:37:52,330 --> 00:37:53,390 Усё гэта з'яўляецца Printf. 863 00:37:53,390 --> 00:37:58,010 І звярніце ўвагу, у маёй сярэдняй тэрмінала вокны, я бачу выхад друку DEF. 864 00:37:58,010 --> 00:38:01,080 І зараз у мяне ёсць, каб зрабіць Рашэнне праграміста. 865 00:38:01,080 --> 00:38:04,360 Я магу пераступіць гэтую лінію Код, выкананне яго, але не 866 00:38:04,360 --> 00:38:06,220 атрымліваць цікава, што ўнутры. 867 00:38:06,220 --> 00:38:11,130 Ці я магу на самой справе крок у гэтым і ісці ўнутры самой Swap. 868 00:38:11,130 --> 00:38:12,340 Так давайце зробім апошняга. 869 00:38:12,340 --> 00:38:15,550 >> Дазвольце мне ісці наперад і націсніце ня Step Over, але Step Into. 870 00:38:15,550 --> 00:38:17,300 Заўважце, усё раптам змены вокны 871 00:38:17,300 --> 00:38:19,330 каб вылучыць першы радок кода ў своп. 872 00:38:19,330 --> 00:38:20,710 Гэта лінія 21. 873 00:38:20,710 --> 00:38:25,220 А цяпер, што выгляд фанкі, што, калі вы паглядзіце сюды, як і чакалася, 874 00:38:25,220 --> 00:38:29,720 коскі б 1 і 2, адпаведна. 875 00:38:29,720 --> 00:38:33,840 Чаму тэмпература 32,767? 876 00:38:33,840 --> 00:38:36,560 Нагадваючы, што тэмп, гэтак жа, як пустая кубак імгненне таму, 877 00:38:36,560 --> 00:38:38,980 абвешчаны тут, на лініі 21. 878 00:38:38,980 --> 00:38:43,390 Чаму 32,000- Я маю на ўвазе, чаму гэта проста некаторыя дзіўныя значэнне? 879 00:38:43,390 --> 00:38:43,890 Да? 880 00:38:43,890 --> 00:38:45,190 >> АЎДЫТОРЫЯ: Гэта не ініцыялізаваны. 881 00:38:45,190 --> 00:38:46,940 >> Дэвід Дж малая: Гэта ня быў ініцыялізаваны. 882 00:38:46,940 --> 00:38:49,370 Такім чынам, наш кампутар заўсёды мае фізічную памяць. 883 00:38:49,370 --> 00:38:50,544 Гэта заўсёды мае фізічную памяць. 884 00:38:50,544 --> 00:38:52,710 І заўсёды ёсць Зеро і адзін знаходзіцца ў там, праўда? 885 00:38:52,710 --> 00:38:54,626 Таму што мы, выкарыстоўваючы нашы кампутар на працягу ўсяго дня, 886 00:38:54,626 --> 00:38:57,210 Вы карыстаецеся IDE CS50 або серверы на працягу ўсяго дня. 887 00:38:57,210 --> 00:39:01,159 Так што АЗП альбо мае некалькі нулёў або хто-небудзь ці якім-небудзь нулі і адзінкі. 888 00:39:01,159 --> 00:39:02,950 Незалежна ад таго, ці ня вы іх выкарыстання. 889 00:39:02,950 --> 00:39:05,270 Вы не можаце проста пусты прасторы, дзе вы хочаце біт. 890 00:39:05,270 --> 00:39:06,850 Яны альбо нулі і адзінкі. 891 00:39:06,850 --> 00:39:09,610 >> Так што атрымліваецца, што тэмп, таму што мы не ініцыялізаваны яшчэ, 892 00:39:09,610 --> 00:39:14,580 у нас ёсць гэтыя 32 біта, але яны ўжо не ініцыялізаваны любым вядомым значэнняў. 893 00:39:14,580 --> 00:39:18,110 Таму, што б яны былі найбольш у апошні час выкарыстоўваецца for-- тых 32 bits-- 894 00:39:18,110 --> 00:39:23,000 мы проста бачым артэфакты некаторых папярэдняя выкарыстанне гэтых канкрэтных 32 895 00:39:23,000 --> 00:39:23,500 біт. 896 00:39:23,500 --> 00:39:27,780 Як толькі я націскаю Step Over, хоць, уф, тэмпература будзе атрымаць значэнне 1. 897 00:39:27,780 --> 00:39:31,600 І калі я зраблю гэта зноў, а з'яўляецца будзе дадзена значэнне 2 898 00:39:31,600 --> 00:39:33,830 а затым б збіраецца прысвойваюць значэнне 1. 899 00:39:33,830 --> 00:39:36,390 >> І так, што ў цяперашні час добра на гэтая кропка ў гісторыі 900 00:39:36,390 --> 00:39:39,750 з'яўляецца тое, што адладчык паказваючы мне, супер павольна 901 00:39:39,750 --> 00:39:42,640 у сваім уласным тэмпе, тое, што стан своп. 902 00:39:42,640 --> 00:39:47,490 Але звярніце ўвагу, у верхняй тут, апавяшчэння што стэк выклікаў сапраўды 903 00:39:47,490 --> 00:39:49,180 мае два пласта да яго. 904 00:39:49,180 --> 00:39:53,240 Цяпер той, які, як падкрэсліў Абмен, калі я націскаю на Галоўнае замест 905 00:39:53,240 --> 00:39:57,100 звярніце ўвагу, як змяніць лакальныя зменныя таму што распрацоўшчык можа проста скакаць 906 00:39:57,100 --> 00:39:59,740 і пайсці ў любой іншай вобласці. 907 00:39:59,740 --> 00:40:04,070 Таму, нават калі мы робім усё гэта працаваць і правільна замены А і В, 908 00:40:04,070 --> 00:40:09,080 калі я іду туды і назад паміж своп дзе а роўна 2 і б роўна 1 і Асноўны, 909 00:40:09,080 --> 00:40:11,851 Галоўная мае пацярпелі наогул? 910 00:40:11,851 --> 00:40:12,350 Няма. 911 00:40:12,350 --> 00:40:13,930 Так што вынас тут? 912 00:40:13,930 --> 00:40:18,200 Ну, атрымліваецца, што любы час Вы выклікаеце функцыю як своп, 913 00:40:18,200 --> 00:40:21,600 і вы перадаеце яго аргументы, тое, што вы перадаеце ў функцыю падпампоўкі 914 00:40:21,600 --> 00:40:24,730 У гэтым выпадку з'яўляецца копіяй з тых аргументаў. 915 00:40:24,730 --> 00:40:28,620 Так што, калі х і ў кожны адпаведна 32 біта, тое, што Своп атрымліваць 916 00:40:28,620 --> 00:40:30,760 у два новых мясцовых пераменныя або аргументы, 917 00:40:30,760 --> 00:40:34,380 завецца і У-, але тыя, з'яўляюцца адвольнымі names-- але мадэль нулёў 918 00:40:34,380 --> 00:40:39,520 і тыя, ўнутры А і У выстраіліся павінна быць ідэнтычная х і ў 919 00:40:39,520 --> 00:40:42,610 але яны не з'яўляюцца Тое ж самае, як х і у. 920 00:40:42,610 --> 00:40:46,880 >> Гэта як калі б Асноўнае мае на сваёй частцы папера лік 1 і 2 для х і у, 921 00:40:46,880 --> 00:40:49,260 а затым, калі ён перадае, што ліст паперы, каб своп, 922 00:40:49,260 --> 00:40:51,970 Абмен вельмі хутка атрымлівае уласны ручка, запісвае 923 00:40:51,970 --> 00:40:56,240 1 і 2 па сваёй лісце паперы, рукі назад арыгінальны ху да асноўнага 924 00:40:56,240 --> 00:40:58,790 а затым робіць свой уласны што з а і Ь. 925 00:40:58,790 --> 00:41:01,940 І зараз гэта супер важна, таму што гэта мае нетрывіяльныя наступствы 926 00:41:01,940 --> 00:41:06,260 за фактычна пісаць правільны код таму што, здавалася б, мы не можам памяняць 927 00:41:06,260 --> 00:41:07,500 дзве зменныя. 928 00:41:07,500 --> 00:41:09,150 >> Я напісаў правільную функцыю падпампоўкі. 929 00:41:09,150 --> 00:41:12,770 Мы ажыццявілі гэта з Ларэн, як правільны функцыя падпампоўкі на самай справе, 930 00:41:12,770 --> 00:41:16,700 але не па-відаць, ні адно з гэтых пытанні, калі вы не можаце на самой справе 931 00:41:16,700 --> 00:41:19,530 памяняць два значэння пастаянна. 932 00:41:19,530 --> 00:41:21,970 Такім чынам, мы павінны яшчэ адзін спосаб на самой справе атрымаць на гэта, 933 00:41:21,970 --> 00:41:24,472 і мы павінны быць у стане на самай справе вырашыць гэтую праблему. 934 00:41:24,472 --> 00:41:27,180 І атрымліваецца out-- і мы прыйдзем вярнуцца да гэтай канкрэтнай карціны 935 00:41:27,180 --> 00:41:30,500 Перад long-- гэта адзін са спосабаў, што Вы маглі б зрабіць памяць кампутара. 936 00:41:30,500 --> 00:41:31,460 Гэта проста прастакутнік. 937 00:41:31,460 --> 00:41:32,960 Вы можаце зрабіць гэта любы рознымі спосабамі, але гэта 938 00:41:32,960 --> 00:41:35,740 зручна маляваць яго як прастакутнік па наступнай прычыне. 939 00:41:35,740 --> 00:41:40,040 >> Мы збіраемся пачаць сёння і за казаць аб так званай стэк. 940 00:41:40,040 --> 00:41:43,870 І стэк проста кавалак з RAM-- кавалак memory-- 941 00:41:43,870 --> 00:41:47,100 што функцыі маюць доступ , Калі яны называюць. 942 00:41:47,100 --> 00:41:49,800 А так атрымліваецца, што на У самым нізе гэтай чаркі 943 00:41:49,800 --> 00:41:53,590 дзе ўсе лакальныя зменныя ў асноўных і орг С і орг V і ўсё такое 944 00:41:53,590 --> 00:41:56,950 збіраюцца пайсці па змаўчанні. І калі Майне называе некаторыя іншыя функцыі, як абмен, 945 00:41:56,950 --> 00:42:00,330 добра, Абмен збіраецца атрымаць яшчэ пласт памяць над ім. 946 00:42:00,330 --> 00:42:04,490 >> І так проста, каб даць вам хуткі беглы карціна гэтая, калі я іду па here-- 947 00:42:04,490 --> 00:42:09,450 і дазвольце мне люстэрка гэта на накладныя, як well-- што на самой справе ў мяне ёсць, 948 00:42:09,450 --> 00:42:12,100 калі мы клапоцімся толькі пра Дно гэтай карціны зараз, 949 00:42:12,100 --> 00:42:15,070 з'яўляецца тое, што, калі я запускаю праграму і галоўны выклікаецца, 950 00:42:15,070 --> 00:42:18,330 Галоўная даецца кавалак Аператыўная памяць у маім кампутары, які 951 00:42:18,330 --> 00:42:20,060 у ніжняй частцы гэтай так званай стэк. 952 00:42:20,060 --> 00:42:22,143 І я збіраюся зрабіць гэта наўмысна ў выглядзе квадрата. 953 00:42:22,143 --> 00:42:24,540 Так як 32 біт або чатыры байта. 954 00:42:24,540 --> 00:42:28,790 І калі гэта асноўная функцыя мае пераменная называецца х са значэннем 1 955 00:42:28,790 --> 00:42:32,626 і мае зменную у са значэннем 2, гэта 956 00:42:32,626 --> 00:42:35,750 як прымаць гэты кавалачак памяці, Галоўная дадзена аперацыйнай 957 00:42:35,750 --> 00:42:38,850 Сістэма і дзялення яго так, што першы лакальная пераменная ідзе тут, 958 00:42:38,850 --> 00:42:40,930 другі ідзе тут, і гэта ўсё. 959 00:42:40,930 --> 00:42:45,590 >> Калі Галоўная заклікае падпампоўка, своп атрымлівае свой уласны кавалачак памяці 960 00:42:45,590 --> 00:42:48,280 што мы будзем маляваць, як гэта ад аперацыйнай сістэмы, 961 00:42:48,280 --> 00:42:50,820 і гэта будзе мець свае ўласныя лакальныя зменныя на аснове 962 00:42:50,820 --> 00:42:53,825 на нашым рэалізацыі раней з мясцовымі зменных а 963 00:42:53,825 --> 00:42:58,010 і б, што першапачаткова атрымаць значэння 1 і 2. 964 00:42:58,010 --> 00:43:00,450 Але тады, як толькі Своп код выконвае, 965 00:43:00,450 --> 00:43:03,760 і Ларэн сапраўды змяняе месцамі OJ і малако, што адбываецца? 966 00:43:03,760 --> 00:43:09,030 Ну, гэта 2 у 1 становіцца, гэта 1 становіцца 2, і, дарэчы, 967 00:43:09,030 --> 00:43:13,360 ёсць пераменная тэмпература, якая з'яўляецца выкарыстоўвалі гэтую ўвесь час, што ў выніку 968 00:43:13,360 --> 00:43:14,470 сыходзіць. 969 00:43:14,470 --> 00:43:16,720 Але гэта не мае значэння, колькі працы вы 970 00:43:16,720 --> 00:43:22,160 У гэтай лініі of-- у гэтай прасторы памяці, х і ў з'яўляюцца цалкам некранутым. 971 00:43:22,160 --> 00:43:26,320 >> Такім чынам, мы павінны нейкім чынам даючы Абмен і функцыі, як гэта 972 00:43:26,320 --> 00:43:32,640 Сакрэт доступу, калі хочаце, каб Функцыі like-- памяці як х і у. 973 00:43:32,640 --> 00:43:35,110 Такім чынам, давайце зірнем на прыклад, які дапамагае 974 00:43:35,110 --> 00:43:38,220 нам убачыць тое, што было адбываецца ўвесь гэты час. 975 00:43:38,220 --> 00:43:40,284 Я збіраюся ісці наперад і адкрыць Параўнаць Zero. 976 00:43:40,284 --> 00:43:42,200 І я збіраюся зачыніць наш адладчык, я збіраюся 977 00:43:42,200 --> 00:43:44,360 каб закрыць гэтую страшную гледзячы паведамленне толькі што кажа, пачакай хвілінку, 978 00:43:44,360 --> 00:43:45,800 Вы знаходзіцеся ў сярэдняй адладкі. 979 00:43:45,800 --> 00:43:48,383 Я збіраюся хаваць гэтую ўкладку тут проста вярнуцца да прастаты. 980 00:43:48,383 --> 00:43:50,160 Так што не хвалюйцеся, калі GDB забіты. 981 00:43:50,160 --> 00:43:53,910 Гэта проста азначае, што праграма мае было кінуць, наўмысна ў гэтым выпадку, 982 00:43:53,910 --> 00:43:54,820 па мне. 983 00:43:54,820 --> 00:43:57,700 >> А цяпер Параўнаць нуля гэта робіць. 984 00:43:57,700 --> 00:44:00,110 Я выкарыстоўваю CS50 Бібліятэка ў стандартным I / O. 985 00:44:00,110 --> 00:44:04,319 Я атрымаў асноўную функцыю, што спачатку кажа, што нешта сказаць, і атрымлівае радок. 986 00:44:04,319 --> 00:44:06,110 Тады кажа гэта зноў і атрымлівае іншую радок. 987 00:44:06,110 --> 00:44:09,910 І заўважце, што гэтыя два радкі называюцца S і T, адпаведна. 988 00:44:09,910 --> 00:44:12,910 А цяпер гэтая праграма, параўнанне Нуль, яго мэта ў жыцці, 989 00:44:12,910 --> 00:44:15,470 ён павінен сказаць мне, я тыпу тое ж самае? 990 00:44:15,470 --> 00:44:16,910 І таму я збіраюся назад у тыдзень адзін. 991 00:44:16,910 --> 00:44:19,950 Я выкарыстоўваю свой роўны роўнага аператара якая з'яўляецца аператарам якасці. 992 00:44:19,950 --> 00:44:22,220 Ня аператар прысвойвання, аператар роўнасці. 993 00:44:22,220 --> 00:44:23,890 Я проста параўноўваючы з і т. 994 00:44:23,890 --> 00:44:27,470 >> Такім чынам, давайце на самай справе ісці наперад і рабіць гэта. 995 00:44:27,470 --> 00:44:32,680 І я збіраюся ісці наперад і зрабіць параўнанне Zero. 996 00:44:32,680 --> 00:44:35,110 Я збіраюся зрабіць ./comparezero. 997 00:44:35,110 --> 00:44:37,150 І я збіраюся пайсці наперад і нешта сказаць 998 00:44:37,150 --> 00:44:43,450 як, давайце рабіць маме ў ніжнім рэгістры а як наконт мамы ў верхнім рэгістры. 999 00:44:43,450 --> 00:44:45,034 І, вядома, я друкую розныя рэчы. 1000 00:44:45,034 --> 00:44:45,533 Добра. 1001 00:44:45,533 --> 00:44:46,570 Гэта варта было чакаць. 1002 00:44:46,570 --> 00:44:47,640 >> Давайце запусціць яго зноў. 1003 00:44:47,640 --> 00:44:49,740 Абодва разы зрабіць ніжні рэгістр, ніжні рэгістр. 1004 00:44:49,740 --> 00:44:51,490 Гэта выглядае супер ідэнтычныя для мяне. 1005 00:44:51,490 --> 00:44:52,930 Enter. 1006 00:44:52,930 --> 00:44:53,430 ДОБРА. 1007 00:44:53,430 --> 00:44:55,804 Можа быць, гэта проста дзіўна, таму што гэта не падабаецца мой граматыкі. 1008 00:44:55,804 --> 00:44:59,930 Так давайце зробім капіталу MOM, Сталіца MOM, ідэнтычныя. 1009 00:44:59,930 --> 00:45:01,490 Розныя рэчы. 1010 00:45:01,490 --> 00:45:03,907 >> Дык чаму ж гэта? 1011 00:45:03,907 --> 00:45:06,240 Ну, што на самой справе адбываецца на пад капотам тут? 1012 00:45:06,240 --> 00:45:08,180 Такім чынам, давайце вернемся на працягу тут на імгненне 1013 00:45:08,180 --> 00:45:10,910 і разгледзець, што GetString на самай справе робіць. 1014 00:45:10,910 --> 00:45:13,385 Калі вы тэлефануеце GetString, што гэта функцыя, якую мы 1015 00:45:13,385 --> 00:45:16,510 самі пісалі і гэта неяк атрымлівае паслядоўнасць знакаў ад карыстальніка. 1016 00:45:16,510 --> 00:45:20,280 І давайце выкажам здагадку, што першы Час я называю GetString, што дае мне 1017 00:45:20,280 --> 00:45:21,930 кавалак памяці, які выглядае, як гэта. 1018 00:45:21,930 --> 00:45:26,990 І калі я набраў у ніжнім рэгістры м-о-m-- і тое, што ідзе пасьля яго? 1019 00:45:26,990 --> 00:45:28,840 Проста хуткая праверка здаровае. 1020 00:45:28,840 --> 00:45:29,780 >> Зваротная касая рыса нуля. 1021 00:45:29,780 --> 00:45:30,510 Мы ведаем, што. 1022 00:45:30,510 --> 00:45:32,784 І памятайце, што мы гулялі вакол з імем Zamila ў 1023 00:45:32,784 --> 00:45:34,950 і куча іншых імёнаў калі Роб быў тут шукаеце 1024 00:45:34,950 --> 00:45:36,280 на тое, што адбываецца ўнутры памяці. 1025 00:45:36,280 --> 00:45:37,780 Так што гісторыя сапраўды такі ж. 1026 00:45:37,780 --> 00:45:40,160 Гэта тое, што GetString вяртаецца да мяне. 1027 00:45:40,160 --> 00:45:44,780 Цяпер, мой код хвіліну таму захоўвацца вяртаецца значэнне GetString 1028 00:45:44,780 --> 00:45:47,510 ў зменнай называецца с. 1029 00:45:47,510 --> 00:45:51,390 І тады ў другі раз я назваў яго, ён захоўваў яго ў зменнай называецца т. 1030 00:45:51,390 --> 00:45:55,070 >> Так што, калі я іду сюды, мне трэба звярнуць на гэта мясцовы переменная-- 1031 00:45:55,070 --> 00:45:59,610 і я, як правіла збіраецца намаляваць радок як просто-- мы будзем 1032 00:45:59,610 --> 00:46:02,360 называюць яго S-- як невялікі плошчы тут. 1033 00:46:02,360 --> 00:46:09,760 А цяпер, як робіць somehow-- мама перайсці ўнутры гэтага пераменнага х? 1034 00:46:09,760 --> 00:46:12,010 Ну, мы павінны вярнуцца да першапачатковых прынцыпам тут. 1035 00:46:12,010 --> 00:46:15,660 Што на самой справе вяртання GetString? 1036 00:46:15,660 --> 00:46:19,030 >> Так што атрымліваецца, што M-O-M Зваротная касая рыса нуля, і любы лік 1037 00:46:19,030 --> 00:46:22,364 іншых радкоў у памяці, як Zamila і Роб або Эндзі, або любыя іншыя, 1038 00:46:22,364 --> 00:46:24,280 , Вядома, у нашым Аператыўная памяць або памяць кампутара. 1039 00:46:24,280 --> 00:46:27,760 І ваша памяць мае like-- ў вас ёсць гігабайт аператыўнай памяці, два гігабайта аператыўнай памяці, 1040 00:46:27,760 --> 00:46:30,860 або мільярд, або два мільярды байт, ці, можа быць, нават больш у гэтыя дні. 1041 00:46:30,860 --> 00:46:34,070 Такім чынам, давайце выкажам здагадку, для сённяшніх мэтаў, што гэта не мае значэння, як мы нумар 1042 00:46:34,070 --> 00:46:36,640 ім, але мы можам нумар кожны з тых, мільярд або два мільярды 1043 00:46:36,640 --> 00:46:37,880 або чатыры мільярды байт. 1044 00:46:37,880 --> 00:46:42,240 >> І давайце проста сказаць, што заўгодна гэта першы ўкус, па-другое прыкус, 1045 00:46:42,240 --> 00:46:43,380 трэці, чацвёрты. 1046 00:46:43,380 --> 00:46:46,570 Я наўмысна не выкарыстоўваю нуль для сёння, але мы вернемся да гэтага. 1047 00:46:46,570 --> 00:46:49,570 Такім чынам, іншымі словамі, калі гэта Самы першы раз, калі я з дапамогай праграмы, 1048 00:46:49,570 --> 00:46:52,715 Я проста шанцуе, і першы ўкус на месцы аднаго потым два 1049 00:46:52,715 --> 00:46:53,590 потым тры, чым чатыры. 1050 00:46:53,590 --> 00:46:57,430 І, калі я не малюнак, нумар скрыні два мільярды б спосаб тут. 1051 00:46:57,430 --> 00:47:02,200 >> Так што вы думаеце, то, GetString фактычна вяртае? 1052 00:47:02,200 --> 00:47:06,010 Гэта не вяртанне М-О-М зваротны слэш нулявы такой, таму што гэта відавочна 1053 00:47:06,010 --> 00:47:08,180 ня будзе ўпісвацца ў акно, што я намаляваў. 1054 00:47:08,180 --> 00:47:11,210 Так што яшчэ можа на самай справе GetString вяртацца ўсе гэтыя тыдні? 1055 00:47:11,210 --> 00:47:14,410 1056 00:47:14,410 --> 00:47:16,820 Адказ на дошка дзе-то тут. 1057 00:47:16,820 --> 00:47:20,390 Вы не можаце змясціць М-О-М зваротны слэш нулявы, так, што можа мець сэнс, а? 1058 00:47:20,390 --> 00:47:23,424 Калі вы павінны былі быць супер разумным, паклаўшы на так званай інжынернай капелюшы, 1059 00:47:23,424 --> 00:47:24,340 Што б вы маглі вярнуцца? 1060 00:47:24,340 --> 00:47:27,340 Што найменшую колькасць інфармацыі Вы маглі б вярнуцца, што б яшчэ 1061 00:47:27,340 --> 00:47:30,610 дазваляюць знайсці M-O-M ў памяці? 1062 00:47:30,610 --> 00:47:31,270 Да? 1063 00:47:31,270 --> 00:47:31,950 >> АЎДЫТОРЫЯ: Адно. 1064 00:47:31,950 --> 00:47:32,200 >> Дэвід Дж малая: Адно. 1065 00:47:32,200 --> 00:47:33,021 І чаму адзін? 1066 00:47:33,021 --> 00:47:35,520 АЎДЫТОРЫЯ: Таму што скажа Вы куды ісці [неразборліва]. 1067 00:47:35,520 --> 00:47:38,391 1068 00:47:38,391 --> 00:47:39,390 Дэвід Дж малая: Дакладна. 1069 00:47:39,390 --> 00:47:44,300 Я проста хачу, каб вярнуць адрас радкі, якія я атрымаў. 1070 00:47:44,300 --> 00:47:46,570 Адрас у гэты выпадак месца адным. 1071 00:47:46,570 --> 00:47:51,280 Так што на самай справе захоўваецца ў S-- і кожная пераменная радок, такім чынам, far-- 1072 00:47:51,280 --> 00:47:53,430 толькі было адрас гэтага радка. 1073 00:47:53,430 --> 00:47:57,840 >> Між тым, калі я называю GetString другі раз, і я 1074 00:47:57,840 --> 00:48:03,300 ўвядзіце ў літаральным сэнсе той жа thing-- М-О-М з lowercase-- M-O-М 1075 00:48:03,300 --> 00:48:06,200 і яшчэ адзін знак нуля, і цяпер, можа быць, мая праграма-х 1076 00:48:06,200 --> 00:48:09,820 працуе ўжо на працягу некаторага часу, так, можа быць, гэта 10, гэта размяшчэнне 11, гэта 12, 1077 00:48:09,820 --> 00:48:10,700 гэта 13. 1078 00:48:10,700 --> 00:48:13,590 Кампутары, якія выкарыстоўваюць некаторыя іншыя памяці па якой прычыне. 1079 00:48:13,590 --> 00:48:18,172 Што цяпер ідзе ў маю секунду пераменная ў маёй праграме т? 1080 00:48:18,172 --> 00:48:19,390 10. 1081 00:48:19,390 --> 00:48:20,050 Дакладна. 1082 00:48:20,050 --> 00:48:23,910 >> І таму, калі мы глядзім на Зыходны код гэтай праграмы 1083 00:48:23,910 --> 00:48:26,550 дзе я проста спрабую параўнаць два значэння, 1084 00:48:26,550 --> 00:48:32,180 гэта S роўная роўная т, што відавочнае чалавека адказ? 1085 00:48:32,180 --> 00:48:34,890 Проста няма, таму што 1 ня роўна 10. 1086 00:48:34,890 --> 00:48:36,861 І так тут, ляжыць магчымасць для нас на самай справе 1087 00:48:36,861 --> 00:48:39,610 проста вярнуцца, зноў жа, у першую прынцыпы і думаць, добра, 1088 00:48:39,610 --> 00:48:41,110 што адбываецца пад капотам? 1089 00:48:41,110 --> 00:48:43,240 Мы гаворым пра біты і байты і памяць, 1090 00:48:43,240 --> 00:48:46,820 але гэта на самай справе карысна, каб зразумець таму што, калі вы тэлефануеце GetString, 1091 00:48:46,820 --> 00:48:50,280 нават калі мы думаем, што гэта з вяртанне M-O-м ці радок маму 1092 00:48:50,280 --> 00:48:53,120 або Эндзі, або Zamila або і да т.п., тэхнічна 1093 00:48:53,120 --> 00:48:55,510 гэта проста вяртанне адрас гэтага кавалка памяці. 1094 00:48:55,510 --> 00:48:56,910 >> Але гэта нармальна. 1095 00:48:56,910 --> 00:49:00,570 Таму што, як я ведаю, дзе радок заканчваецца? 1096 00:49:00,570 --> 00:49:03,840 Калі я толькі даў пачатак? 1097 00:49:03,840 --> 00:49:05,380 Ну, зваротны слеш нуль, праўда? 1098 00:49:05,380 --> 00:49:08,800 Проста ў лінейным часу я магу раздрукаваць з друкам выразнасці M-O-М. 1099 00:49:08,800 --> 00:49:11,820 І як толькі я бачу зваротны слэш нуля, я не хвалюе, дзе я пачаў, 1100 00:49:11,820 --> 00:49:14,950 Я ўжо ведаю, няяўна дзе мне трэба, каб скончыць. 1101 00:49:14,950 --> 00:49:18,700 >> І таму сёння адзначае beginning-- і дазвольце мне зрабіць гэта рэзка, таму што мы 1102 00:49:18,700 --> 00:49:21,800 пайшоў праз шмат непрыемнасцяў атрымаць іх тут навучанне wheels-- 1103 00:49:21,800 --> 00:49:29,840 так што сёння навучальныя колы пачынаюць адарвацца і мы раскрываем у меры: 1104 00:49:29,840 --> 00:49:31,373 >> [Апладысменты] 1105 00:49:31,373 --> 00:49:33,220 1106 00:49:33,220 --> 00:49:36,160 >> Гэта было добра варта паездка на мэта ў гэтую раніцу, так? 1107 00:49:36,160 --> 00:49:39,600 Так now-- ёсць, атрымліваецца з, няма такой рэчы, як радка. 1108 00:49:39,600 --> 00:49:41,140 Радок не існуе. 1109 00:49:41,140 --> 00:49:43,760 Гэта сінонім, што мы мелі ўнутры бібліятэкі CS50. 1110 00:49:43,760 --> 00:49:48,660 З гэтага часу мы збіраемся пачаць называць з і т не радкі, але знакавыя зоркі. 1111 00:49:48,660 --> 00:49:51,180 І сімвал зоркі мы будзем дражніць адзін ад аднаго, перш чым доўгі. 1112 00:49:51,180 --> 00:49:53,510 Але гэта ёсць, што нават калі мы будзем працягваць 1113 00:49:53,510 --> 00:49:56,180 выкарыстоўваючы GetString зараз, тэхнічна я павінен 1114 00:49:56,180 --> 00:49:59,010 быць кажучы сЬаг зорку і голец зорку. 1115 00:49:59,010 --> 00:50:01,720 >> І атрымліваецца, што гэта за зорка будзе пазначаць нешта 1116 00:50:01,720 --> 00:50:04,340 называецца паказальнікам або адрас. 1117 00:50:04,340 --> 00:50:06,110 І на самай справе, тізер за тое, што ляжыць наперадзе 1118 00:50:06,110 --> 00:50:09,760 гэта 20 другі кліп ад нашага сябар Нік Parlante ў Стэнфардзе 1119 00:50:09,760 --> 00:50:12,927 які, некаторы час таму, выдаткаваць смешнае колькасць часу, 1120 00:50:12,927 --> 00:50:15,010 як лепш я магу сказаць у яго кухня або яго склеп, 1121 00:50:15,010 --> 00:50:17,140 робіць claymation ўвядзення ў свет 1122 00:50:17,140 --> 00:50:20,010 персанаж па імі Бинки, з якімі мы будзем 1123 00:50:20,010 --> 00:50:22,010 быць уведзеныя ў наступны раз паказальнікаў. 1124 00:50:22,010 --> 00:50:24,588 Дык вось прагляд таго, што павінна прыйсці. 1125 00:50:24,588 --> 00:50:26,370 >> [Прайграванне відэа] 1126 00:50:26,370 --> 00:50:27,510 >> Эй, Бинки. 1127 00:50:27,510 --> 00:50:28,260 Прачніся. 1128 00:50:28,260 --> 00:50:30,672 Гэта час для паказальніка задавальнення. 1129 00:50:30,672 --> 00:50:31,616 >> -Што Гэта? 1130 00:50:31,616 --> 00:50:33,032 Даведайцеся аб паказальнікаў? 1131 00:50:33,032 --> 00:50:34,450 О, станоўчы герой. 1132 00:50:34,450 --> 00:50:35,431 >> [КАНЕЦ ПРАГЛЯДУ] 1133 00:50:35,431 --> 00:50:38,055 Дэвід Дж малая: І на гэтай ноце, мы будзем бачыць Вас у сераду. 1134 00:50:38,055 --> 00:50:47,590 1135 00:50:47,590 --> 00:50:48,090 Добра. 1136 00:50:48,090 --> 00:50:48,740 Хто танчыць? 1137 00:50:48,740 --> 00:50:49,240 Давай. 1138 00:50:49,240 --> 00:50:50,330 Хто танчыць? 1139 00:50:50,330 --> 00:50:51,820 Вы хочаце, каб я, каб ён пачаў? 1140 00:50:51,820 --> 00:50:53,770 Я атрымаю гэта пачалося. 1141 00:50:53,770 --> 00:50:54,270 Woooo! 1142 00:50:54,270 --> 00:51:04,070 1143 00:51:04,070 --> 00:51:07,580 >> Ларэн: Салодкі фантазіі Майсей.