1 00:00:00,000 --> 00:00:10,550 2 00:00:10,550 --> 00:00:14,050 >> Дејвид Џ MALAN: Ова е CS50 и ова е почеток на четири недели. 3 00:00:14,050 --> 00:00:18,630 И, момче, е во Фолксваген проблеми на сите, бидејќи на софтвер. 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 -Cars, Најумен карактери во Брзи и бесни филмови. 7 00:00:25,560 --> 00:00:29,100 Оваа недела германскиот производител на автомобили Фолксваген се нашла 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 >> Последица на било какви дизел модели беа дизајниран со софистициран софтвер 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 пати над прифатливите нивоа ЕПА. 18 00:01:03,320 --> 00:01:04,280 >> [END репродукција] 19 00:01:04,280 --> 00:01:05,220 >> Дејвид Џ MALAN: Значи, да се погледнете овој 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 испрати на Фолксваген пред само неколку дена. 27 00:01:22,420 --> 00:01:26,530 >> Па на ЕПА пишува и објавува сега јавно, софистициран софтвер 28 00:01:26,530 --> 00:01:29,390 алгоритам на одредени Возила Фолксваген детектира 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 Софтверот произведен од страна на Фолксваген е цитат unquote, уред за управување, 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 Поточно, Фолксваген произведена и инсталирана 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 кога возилото бил тестиран за усогласеност со стандардите за емисија ЕПА. 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 на постапката за федерални тест кој се користи за тестирање на издувните гасови за сертификација ЕПА 65 00:03:17,600 --> 00:03:18,400 цели. 66 00:03:18,400 --> 00:03:21,850 >> Во текот на тестирањето емисија ЕПА, софтвер возилата СКМ 67 00:03:21,850 --> 00:03:25,060 трчаше софтвер која го произведе резултати во согласност емисиите. 68 00:03:25,060 --> 00:03:28,340 На сите други времиња, на СКМ возилото софтвер 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 Посно 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 погоре во согласност нивото на ЕПА во зависност од видот на диск циклус. 75 00:03:47,450 --> 00:03:50,800 >> Значи она што е ова навистина значи, и на изворниот код на водењето на софтвер 76 00:03:50,800 --> 00:03:53,190 на Фолксваген не има уште не е јавно објавено, 77 00:03:53,190 --> 00:03:56,460 е во тоа што, ефикасно, овој еквивалент е таму некаде во внатрешноста 78 00:03:56,460 --> 00:03:57,830 на кодот на Volkswagen. 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 И за да можете да се поедностави овој во повеќе бетон pseudocode со нешто 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 тогаш се однесуваат како на ЕПА ќе ви се допаѓаат. 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 >> -Last Петок ЕПА објави дека околу Автомобили Фолксваген Ауди направени помеѓу 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 >> Овие мамење Фолксваген и Ауди модели се дизели, 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 Фолксваген имаше проблем во свои раце. 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 Зошто Фолксваген е во како сериозна неволја. 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, Битлси, Golfs, Passats, 143 00:06:53,900 --> 00:06:56,220 или Ауди A3s остварува, добрата вест е 144 00:06:56,220 --> 00:06:57,886 дека вашиот автомобил се уште е безбедно да се вози. 145 00:06:57,886 --> 00:07:00,510 Вие не мора да го стави настрана додека Фолксваген издава потсетиме. 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 >> [END репродукција] 153 00:07:16,711 --> 00:07:19,960 Дејвид Џ MALAN: Значи ова всушност покренува интересна поголема слика прашање 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 Секој од нас има iPhone-или андроидите или нешто во нашите џебови, најверојатно, 157 00:07:24,300 --> 00:07:26,500 овие денови, или лап-топ компјутери на нашата круга, кои се 158 00:07:26,500 --> 00:07:28,510 водење на софтвер, направена од страна на Apple и 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 или Андроид телефон или слично, 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 самиот систем како iOS или Андроид, или затоа што сте ги преземале 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 Како да знаете дека, кога вие момци се работи ѕвекот 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 ИРО. 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, кој е многу сличен во духот на она што ние ги користиме која е Линукс. 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 прилично едноставен пример за тоа како дури и компајлер како ѕвекот или што 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 во врска со Фолксваген. Ако никогаш не сум видел, јас 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 Одам да се погледне назад на Супер Боул 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 [END репродукција] 243 00:12:05,955 --> 00:12:06,830 Дејвид Џ MALAN: Да. 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 Значи ние се погледне во некои pseudocode пред некој миг. 248 00:12:14,040 --> 00:12:15,380 И тука е поголем програмка на pseudocode код 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 >> Значи, ова беше една од првите програми ние некогаш напишал, иако во pseudocode код. 257 00:12:35,790 --> 00:12:37,790 И она што оваа програма ни овозможи да се направи се разбира 258 00:12:37,790 --> 00:12:41,510 беше да се најде Мајк Смит во телефонот книга. 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 >> Но, ние може да се поедностави овој алгоритам во pseudocode код како што следува. 268 00:13:08,660 --> 00:13:11,250 Наместо ова итеративен или looping пристап 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 И што сум го видел ова во pseudocode за спојување вид минатата недела. 302 00:14:33,960 --> 00:14:37,190 Потсетиме дека ова е pseudocode за спојување вид. 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 >> Дејвид Џ MALAN: Така што функцијата 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 компајлерот ѕвекот не е ќе знаат дека тоа постои. 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 Сега, алинеја четири изгледа малку фанки затоа што тоа е само еден лагер. 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 Дејвид Џ MALAN: Токму така. 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 Па ѕвекот и повеќето компајлери се вид на нем 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 Што се од левата страна страна ми дава инт 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 Дејвид Џ MALAN: Добро, не. 392 00:18:30,880 --> 00:18:33,340 Но 1.275 што е прилично блиску. 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 и јас сум со прогласување на инт наречен Јас, поставување тоа еднаква на 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 >> Па јас сум процесирањето толку долго како што е помалку од или еднакво на m, кои 406 00:19:10,110 --> 00:19:11,671 е аргумент кој беше донесен во. 407 00:19:11,671 --> 00:19:13,670 А потоа јас само задржи ја зголемува I. А увид 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 Сакам да всушност додадете сегашната вредност на јас 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 Еве сигма one-- па Втората верзија на овој законик. 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 Ако m е помалку од или еднакво на нула, јас треба да се справи со вид на 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 плус вредноста на сигма на m минус 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, плус сигма од m минус 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 минус 1 е 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 затоа сега сум фокусиран на сигнал на m минус 1. 464 00:21:40,720 --> 00:21:42,660 Така беше 3 м, м минус 1 е 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-- затоа што m е во моментов, па 2 2 1 минус е 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 само се повторувам реклама nauseum престанува затоа што 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 Би некој кој е многу добар во Googling умот 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 >> Дејвид Џ MALAN: Сем, ајде долу. 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 >> Дејвид Џ MALAN: Во ред. 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 направи нешто што веројатно се nontrivial на износот на време 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 >> Дејвид Џ MALAN: Лорен. 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 Дејвид Џ MALAN: Во ред. 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 Ние се стави во ОВ привременото променлива, млеко во променлива ОВ, 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 Тука, само да го geek малку, ова ќе биде соодветните C код 601 00:26:54,479 --> 00:26:55,520 дека ние само спроведува. 602 00:26:55,520 --> 00:26:58,650 Имавме два елемента, a и b, и двете од која ние само ќе кажам за едноставност се 603 00:26:58,650 --> 00:26:59,260 int е. 604 00:26:59,260 --> 00:27:02,780 И ќе забележите дека овде, ако сакате да се разменуваат вредностите на две променливи, a и b, 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 Но тој вид на вид на изгледа како млеко и ОВ. 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 Дејвид Џ MALAN: Нема други чаши. 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 Попаметни хемија концентратори можев веројатно се направи ова подобро од мене. 638 00:28:27,630 --> 00:28:28,510 >> Лорен: Водата е на дното. 639 00:28:28,510 --> 00:28:31,910 >> Дејвид Џ MALAN: На 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 Во ред е. 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 >> Дејвид Џ MALAN: Тоа е претежно вода. 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 проект, можете да се, всушност, се разменуваат две променливи 663 00:29:08,660 --> 00:29:11,470 без користење на привремена цел број. 664 00:29:11,470 --> 00:29:13,060 И ова е соодветната C код. 665 00:29:13,060 --> 00:29:16,110 И ако се сеќавате од минатата Среда, воведовме, ако за кратко, 666 00:29:16,110 --> 00:29:19,720 некои нови оператори во C. И дали некој се потсетиме што малку морков 667 00:29:19,720 --> 00:29:23,660 Симболот е, дека малку триаголен Симболот од тастатура претставува? 668 00:29:23,660 --> 00:29:26,003 Што bitwise оператор? 669 00:29:26,003 --> 00:29:26,770 >> ПУБЛИКАТА: EXOR. 670 00:29:26,770 --> 00:29:27,645 >> Дејвид Џ MALAN: 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-- и јас би ја одбрале осум малку вредност на. 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 примени тоа малку од малку, секој од оние осум битови во секоја од a и b, 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 и некако магично a и б ќе разменат ставови 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 се соочат со предизвикот да го стори тоа со тоа што малку RAM и малку 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 >> Па what-- како можеме да видите ова во вистинскиот код? 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 Библиотеката се случува, само стандард на I / O. 710 00:31:17,050 --> 00:31:19,560 Сега имаме прототип за swap до врвот кој само 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 >> I произволно доделен x и y, соодветно, на една вредности и две 714 00:31:26,000 --> 00:31:28,590 само затоа што тие се мали и лесно да се размислува за. 715 00:31:28,590 --> 00:31:32,280 И тогаш јас само имаат еден куп на printfs каде што имам разумност провери. x е 1 716 00:31:32,280 --> 00:31:35,110 и y е 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 Одам да се јавите на swap функција, кој поминува во x и y. 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 Х сега е ова и y сега е тоа. 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, x е 1, y е 2. 727 00:32:04,450 --> 00:32:05,770 Замена заменети. 728 00:32:05,770 --> 00:32:07,200 x е 1, y е 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 Ова, исто така, треба да работат само како и со млекото и ОВ, 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 Можеби I-- бр. 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 a е% i / n и ајде plug-in-на вредноста на. 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 назначено со тоа, воведовме како дефиниција за печатење препорачана техника, барем 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 Па се забележи она што се чини дека е вистина. x е 1, y е 2, но а е 2 кога b е 1. 752 00:33:11,670 --> 00:33:16,790 Па тие две некако доби заменети но x и y не се добива заменети. 753 00:33:16,790 --> 00:33:21,090 Значи да биде јасно, што се случува е, тука имам x и y 754 00:33:21,090 --> 00:33:25,380 а тоа се локалните променливи во ПРЕДМЕТ НА ОСНОВНИТЕ, јас сум се поминува во x и y 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 или бар или x или y или a или b. 759 00:33:33,280 --> 00:33:36,870 Само да појаснам дека тие се не е идентична со x и y, сама по себе, 760 00:33:36,870 --> 00:33:38,020 Сум рече a и b. 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-- АКА б. 764 00:33:48,980 --> 00:33:51,900 Некако овие три линии се Замена на оние вредности што точно 765 00:33:51,900 --> 00:33:53,510 како Лорен направив со млекото и ОВ. 766 00:33:53,510 --> 00:33:56,010 Но, кога ќе се печати вредностите, a и b 767 00:33:56,010 --> 00:34:01,340 се навистина трампа но x и y немаат промена на нив. 768 00:34:01,340 --> 00:34:03,150 Потсетиме дека x и y се до тука. 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 проект, ако веќе не сте. 772 00:34:10,780 --> 00:34:13,730 На страна ние десната рака имаат ова јазиче грешки. 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 >> Па сега јас ќе одам да кликнете на грешки копчето во самиот врв на ИРО 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 Се чини дека, по правило, доволно убаво, x има она што вредност? 823 00:36:27,300 --> 00:36:27,860 0. 824 00:36:27,860 --> 00:36:29,750 И y го има она што вредност? 825 00:36:29,750 --> 00:36:30,410 Нула. 826 00:36:30,410 --> 00:36:35,540 А тоа е да се очекува, во смисла што x и y-- дека жолта line-- има 827 00:36:35,540 --> 00:36:36,770 уште не е извршена. 828 00:36:36,770 --> 00:36:38,510 Па x не треба да има вредност 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 Забележи овде, имаме копчето Play. 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 И во само еден миг y се надевам дека треба да станат 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 И известување, во моето средно терминал прозорец, гледам излез на печати дефиниција. 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 >> Дозволете ми да оди напред и да кликнете не прејдеш но влезете во. 870 00:38:15,550 --> 00:38:17,300 Известување, одеднаш промените на прозорецот 871 00:38:17,300 --> 00:38:19,330 да се потенцира на првата линија код во Swap. 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 запирка b е 1 и 2, соодветно. 875 00:38:29,720 --> 00:38:33,840 Зошто е temp 32.767? 876 00:38:33,840 --> 00:38:36,560 Потсетувајќи дека Temp, слично како празната чаша пред еден миг, 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 >> Дејвид Џ MALAN: Тоа е не била иницијализирана. 882 00:38:46,940 --> 00:38:49,370 Значи нашиот компјутер секогаш има физичка меморија. 883 00:38:49,370 --> 00:38:50,544 Тоа секогаш има физички RAM меморија. 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 сте со користење на CS50 ИРО или серверите на целиот ден. 887 00:38:57,210 --> 00:39:01,159 Така што RAM меморија или има некои нули или некој е или некои нули и единици. 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 >> Значи излегува дека Temp, бидејќи ние не сме го иницијализира уште, 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 Веднаш штом ќе кликнете прејдеш иако, Phew, Temp се случува да се добие вредност 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 Сега оној кој е потенциран како Swap, ако јас кликнете на Main, наместо тоа, 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 и b е 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 Па ако x и y се секое соодветно 32 бита, што Трампа е добивање 916 00:40:28,620 --> 00:40:30,760 е на две нови локални променливи, или аргументи, 917 00:40:30,760 --> 00:40:34,380 нарекува и b-- но оние кои се произволни names-- но моделот на нули 918 00:40:34,380 --> 00:40:39,520 и оние внатре од a и b се построи да биде идентична со x и y 919 00:40:39,520 --> 00:40:42,610 но тие не се истото како x и y. 920 00:40:42,610 --> 00:40:46,880 >> Тоа е како да Главна има на парче хартија бројот 1 и 2 за x и y, 921 00:40:46,880 --> 00:40:49,260 и тогаш кога се рацете кои парче хартија да се разменуваат, 922 00:40:49,260 --> 00:40:51,970 Swap многу брзо се добива сопствени пенкало, пишува долу 923 00:40:51,970 --> 00:40:56,240 1 и 2 на свој лист хартија, рацете се врати на оригиналниот xy до главната 924 00:40:56,240 --> 00:40:58,790 а потоа прави свој работа со a и b. 925 00:40:58,790 --> 00:41:01,940 А сега ова е супер важно, бидејќи ова има импликации nontrivial 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 >> Имам напишано точната функција Swap. 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 е местото каде што сите локални променливи Главно е org и Ц и org 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 Главните е дадено парче RAM меморија во мојот компјутер, кој е 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 И ако оваа главна функција има променлива наречена x со вредност од 1 955 00:42:28,790 --> 00:42:32,626 и има променлива наречена y со вредноста на 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 и Лорен, всушност, врши размена на ОВ и млеко, што се случува? 966 00:43:03,760 --> 00:43:09,030 Па, ова 2 станува 1, овој 1 станува 2, и, патем, 967 00:43:09,030 --> 00:43:13,360 таму е Temp променлива и тоа е се користат, кои цело време додека на крајот 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-- во овој мемориски простор, x и y се целосно недопрена. 971 00:43:22,160 --> 00:43:26,320 >> Значи ние треба некој начин да им Swap и функции како што е тоа 972 00:43:26,320 --> 00:43:32,640 Тајната пристап, ако сакате, да се функции like-- до меморија како x и y. 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 Одам да се оди напред и ќе отвори Споредба нула. 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 Јас сум само споредување s и t. 994 00:44:23,890 --> 00:44:27,470 >> Значи, да се, всушност, оди напред и да го направите тоа. 995 00:44:27,470 --> 00:44:32,680 А јас ќе одам да се оди напред и да се направи споредба нула. 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 Влезе. 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 Значи, да се направи капитал мама, капитал мама, идентични. 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 во променлива наречена s. 1029 00:45:47,510 --> 00:45:51,390 А потоа и по втор пат го нарекуваат, тоа што се чуваат во променлива наречена т. 1030 00:45:51,390 --> 00:45:55,070 >> Значи, ако јас одам во текот тука, ми треба да се подготви оваа локална variable-- 1031 00:45:55,070 --> 00:45:59,610 и јас сум генерално ќе подготви низа како just-- ние ќе 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 >> Значи излегува дека М-О-М обратна коса црта нула, и било кој број 1037 00:46:19,030 --> 00:46:22,364 на други низи во меморијата како Zamila и Роб или Енди или било кој други, 1038 00:46:22,364 --> 00:46:24,280 се разбира во нашата RAM меморија или мемориската компјутер. 1039 00:46:24,280 --> 00:46:27,760 И вашата RAM меморија има like-- имате свирка на RAM меморија, две свирки на RAM меморија, 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 И ако јас се чуваат цртеж, на PO Сандаче две милијарди ќе биде начин да се овде. 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 да те најдат М-О-М во меморијата? 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 >> Дејвид Џ MALAN: Еден. 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 Дејвид Џ MALAN: Токму така. 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-- M-O-M со lowercase-- M-O-M 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 е е еднаков еднаков на Т, што е очигледните човечки одговор? 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 и покрај тоа што ние мислиме за тоа е враќајќи М-О-М или стринг мајка 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 Само во линеарно време можам испечатите со печати дефиниција М-О-М. 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 па денес обука тркала почнат да падне и да ги откриваме во least-- 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 Отсега натаму, ние ќе треба да почне повикувајќи s и t нема жици, но знак ѕвездите. 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 ликот наречен Binky со кои ќе 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 >> -Hey, Binky. 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 >> [END репродукција] 1133 00:50:35,431 --> 00:50:38,055 Дејвид Џ MALAN: И на тој белешка, Ние ќе се видиме во средата. 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 >> Лорен: Слатка фенси Мојсеј.