1 00:00:00,000 --> 00:00:10,550 2 00:00:10,550 --> 00:00:14,050 >> Давид Ј Малан: Ово је ЦС50 и ово је почетак недеље четири. 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 -ЦАРС, Најпаметнији цхарацтерс на Фаст анд Фуриоус филмова. 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 >> -Волксваген Се спрема за милијардама у новчаним казнама, могуће кривичне пријаве 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 >> [Крај репродукције] 19 00:01:04,280 --> 00:01:05,220 >> Давид Ј Малан: Па хајде погледајте ово 20 00:01:05,220 --> 00:01:07,250 и видим како ово може бити имплементиран 21 00:01:07,250 --> 00:01:09,680 и како то може утицати толико аутомобили лике тхис. 22 00:01:09,680 --> 00:01:12,840 Дакле, у руци ево штампа релеасе који је издат од стране ЕПА-- 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 станица, али током нормалног рада емитују азота окидес-- или НОк-- 36 00:01:52,790 --> 00:01:54,950 на до 40 пута стандарда. 37 00:01:54,950 --> 00:01:58,220 Софтвер продуцед би Волксваген је под знацима навода, пораз уређај, 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 НОк, загађење доприноси азот-диоксид, приземног озона, 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 модуле-- или ЕЦМ-- од та возила која осетио 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 конкретно селективна каталитичка смањење Леан НОк трап-- 72 00:03:37,864 --> 00:03:39,280 што ћемо видети у тренутку. 73 00:03:39,280 --> 00:03:43,040 Као резултат тога, емисија НОк повећава за фактор од 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 Волксваген-коду. 79 00:03:57,830 --> 00:04:02,200 Ако сте у фази тестирања, а ако аутомобилу детектује одређене факторе животне средине 80 00:04:02,200 --> 00:04:04,330 као волана положаја или покрет 81 00:04:04,330 --> 00:04:06,710 или недостатак истог аута или било који број других фактора 82 00:04:06,710 --> 00:04:09,940 које су тренутно Претпоставља да буду део ове формуле, 83 00:04:09,940 --> 00:04:12,370 они једноставно укључите потпуну контролу емисије. 84 00:04:12,370 --> 00:04:15,670 Другим речима, они почињу емитују мање од загађивача. 85 00:04:15,670 --> 00:04:18,769 >> Иначе, у свакој другој ситуацији када није детектован као 86 00:04:18,769 --> 00:04:20,790 у лабораторији, они једноставно не. 87 00:04:20,790 --> 00:04:24,320 И тако, можете једноставно ово у више бетон Псеудокод са нечим 88 00:04:24,320 --> 00:04:24,820 овако. 89 00:04:24,820 --> 00:04:27,810 Ако се точкови окрећу али волан није, сугестивни 90 00:04:27,810 --> 00:04:30,060 да је ауто на некој врста ваљке 91 00:04:30,060 --> 00:04:32,550 али у некој врсти складиште се тестира, 92 00:04:32,550 --> 00:04:36,070 онда се понашају као ЕПА би вам се допасти. 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 >> Прошлу петак ЕПА саопштила да су неки Волксваген Ауди аутомобили разлика између 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 назива НОКС замка који је уређај који апсорбује и замке за азотних оксида 118 00:05:46,110 --> 00:05:48,880 да су загађивачи који би или пређите у атмосферу. 119 00:05:48,880 --> 00:05:53,040 А ефекат тог НОк замку је побољшана са несагорело гориво. 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 али НОк замка ради само добро када се користи више горива. 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 оздравити на НОк трап рад, Емисија ће бити у реду. 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 Па, ако сте један од пола милиона дизел Јеттас, Беатлес, голфови, Пассатс, 143 00:06:53,900 --> 00:06:56,220 или Ауди А3С извршити, добра вест је је 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 >> [Крај репродукције] 153 00:07:16,711 --> 00:07:19,960 Давид Ј Малан: Дакле, ово заправо подиже занимљиво питање већа слика 154 00:07:19,960 --> 00:07:20,660 као да верујем. 155 00:07:20,660 --> 00:07:21,160 Jel tako? 156 00:07:21,160 --> 00:07:24,300 Свако од нас има иПхонеа или андроиди или нешто у нашим џеповима највероватније 157 00:07:24,300 --> 00:07:26,500 Ових дана, или лаптопови на крилу који су 158 00:07:26,500 --> 00:07:28,510 руннинг софтвер направљен Аппле и Мицрософт 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 да телефонирам на вашем иПхоне или Андроид телефон или слично, 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 Сам систем као иОС или Андроид, или зато што сте преузели 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 или Направите компајлирати сопствени софтвер у ЦС50, како 171 00:08:02,590 --> 00:08:06,080 Да ли властито особље које ЦС50 је, путем стране ЦС50 библиотеке, 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 као ЦС50 библиотеци, ви да погледате изворни код 176 00:08:15,233 --> 00:08:18,170 за Линук оперативни систем ради на ЦС50 ИДЕ. 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 као- по имену Кен Тхомпсон који добио је награду која Туринг 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 Уник који је веома сличан дух шта користимо што је Линук. 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 У којој мери треба један веруј изјаву да програм-- комад 187 00:08:50,410 --> 00:08:53,010 од софтваре-- је слободан тројанаца? 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 -им на сајту ЦС50 је 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 ако приметите да је овај код користи ГетСтринг функција или Тоноване 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 о Волксвагена. Ako никада нисте видели, ја 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 када је комерцијални стране Волксваген-- и ово 233 00:10:55,300 --> 00:10:59,620 Скоро их чини допадљив Поново: емитован први пут на ТВ-у. 234 00:10:59,620 --> 00:11:04,039 То је други снимак 60 мислим да ћете уживати. 235 00:11:04,039 --> 00:11:04,705 [ВИДЕО РЕПРОДУКЦИЈА] 236 00:11:04,705 --> 00:11:08,198 [МУЗИКА - Тхеме Фром "Стар Варс"] 237 00:11:08,198 --> 00:11:35,643 238 00:11:35,643 --> 00:11:38,138 [Пас лаје] 239 00:11:38,138 --> 00:11:50,114 240 00:11:50,114 --> 00:11:53,607 [Аутомобила почиње] 241 00:11:53,607 --> 00:12:04,086 242 00:12:04,086 --> 00:12:05,955 [Крај репродукције] 243 00:12:05,955 --> 00:12:06,830 Давид Ј Малан: Да. 244 00:12:06,830 --> 00:12:07,663 Само сам проверавао. 245 00:12:07,663 --> 00:12:11,360 Тај ауто је на листи прекршаја. 246 00:12:11,360 --> 00:12:12,000 У реду. 247 00:12:12,000 --> 00:12:14,040 Тако смо погледамо неке псеудокоду малопре. 248 00:12:14,040 --> 00:12:15,380 И овде је већа фрагмент кода Псеудокод 249 00:12:15,380 --> 00:12:16,921 да смо до сада видели неколико пута. 250 00:12:16,921 --> 00:12:19,970 И хајде да користимо ово је прилика Сада да се уведе нови програм 251 00:12:19,970 --> 00:12:23,776 техника која смо види алгоритмички 252 00:12:23,776 --> 00:12:25,400 прошле недеље, када смо погледали стапања врсте. 253 00:12:25,400 --> 00:12:28,270 Али хајде да га формализује и видети како можемо га користити у стварном код, 254 00:12:28,270 --> 00:12:30,350 а онда ћемо користити техника низ пут највише 255 00:12:30,350 --> 00:12:32,000 вероватно да реше одређене друге проблеме. 256 00:12:32,000 --> 00:12:35,790 >> Дакле, ово је био један од првих програма које смо икада написао, иако у Псеудокод кода. 257 00:12:35,790 --> 00:12:37,790 А шта овај програм омогућило нам је да урадимо курс 258 00:12:37,790 --> 00:12:41,510 је да пронађе Мајк Смит у телефонском именику. 259 00:12:41,510 --> 00:12:46,216 А приметити у појединим линијама осам и 11 који су имали ту Иди на изјаву. 260 00:12:46,216 --> 00:12:48,090 И у ствари, извесна језици Ц међу њима, 261 00:12:48,090 --> 00:12:50,006 стварно имамо изјава да је буквално 262 00:12:50,006 --> 00:12:52,710 идите на који вам омогућава да јумп на одређеној линији. 263 00:12:52,710 --> 00:12:55,470 То је углавном пожељан, јер може се врло лако злостављани 264 00:12:55,470 --> 00:12:58,490 и можете почети скакање твој Програм свуда насупрот 265 00:12:58,490 --> 00:13:00,690 да користи врсту логика и контрола протока 266 00:13:00,690 --> 00:13:04,000 да смо користили до сада са само петље и услови и слично. 267 00:13:04,000 --> 00:13:08,660 >> Али можемо поједноставити овај алгоритам у псеудокоду код на следећи начин. 268 00:13:08,660 --> 00:13:11,250 Уместо тога понавља или петље приступ 269 00:13:11,250 --> 00:13:14,160 где смо стално враћамо и назад и назад да се построје три, 270 00:13:14,160 --> 00:13:18,300 зашто не бисмо некако пунт и више углавном кажу у складу седам и 10, 271 00:13:18,300 --> 00:13:20,570 Само замените та два пари линија са, 272 00:13:20,570 --> 00:13:22,810 иф Смитх је раније у књизи ћемо 273 00:13:22,810 --> 00:13:25,110 сеарцх фор Мике у лева половина књиге. 274 00:13:25,110 --> 00:13:28,560 Иф Смит је касније у Књига, потражите Мике у праву 275 00:13:28,560 --> 00:13:29,540 пола књиге. 276 00:13:29,540 --> 00:13:31,180 И приметити већ на кружни. 277 00:13:31,180 --> 00:13:31,680 Jel tako? 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 имамо само једну страницу лефт-- као наш волонтер прошле недеље 296 00:14:16,780 --> 00:14:18,684 дид-- смо имали једну страницу лево и онда не 297 00:14:18,684 --> 00:14:21,600 треба да задржи у потрази за Мике Смитх зато што је било на тој страници 298 00:14:21,600 --> 00:14:23,080 или није. 299 00:14:23,080 --> 00:14:27,480 >> Дакле, како можемо имплементирати ову идеју, овај врста циркуларности у стварном код? 300 00:14:27,480 --> 00:14:31,030 Па, можемо искористити технику да је опште познато као рекурзије. 301 00:14:31,030 --> 00:14:33,960 А видели смо ово у Псеудокод за стапања врсту прошле недеље. 302 00:14:33,960 --> 00:14:37,190 Подсетимо се да је ово Псеудокод за стапања врсте. 303 00:14:37,190 --> 00:14:40,560 То вероватно је још једноставније него балон или избор или уметање врста 304 00:14:40,560 --> 00:14:43,310 само у смислу једноставности са којима можете изразити. 305 00:14:43,310 --> 00:14:46,750 >> Али то је зато што некако смо кружно си 306 00:14:46,750 --> 00:14:51,350 каже, тражити нешто поновним потрази за њега. 307 00:14:51,350 --> 00:14:53,960 Али ми трагамо или на лева половина или десна половина 308 00:14:53,960 --> 00:14:56,070 и онда на крају смо спајања у овом случају. 309 00:14:56,070 --> 00:14:58,520 Али овде, такође, са те две линије, сорт 310 00:14:58,520 --> 00:15:01,320 смо поново имати ово Идеја рекурзије. 311 00:15:01,320 --> 00:15:05,350 А конкретно шта то значи, у контексту алгоритма, 312 00:15:05,350 --> 00:15:10,880 је да је алгоритам је рекурзивна ако користи или себе назива. 313 00:15:10,880 --> 00:15:14,330 >> Или у смислу Ц, функција је рецурсиве-- функцију која се зове 314 00:15:14,330 --> 00:15:18,510 Фоо је рекурзивни ако фоо, негде у свом изворном коду, 315 00:15:18,510 --> 00:15:21,250 позива функцију самог фоо. 316 00:15:21,250 --> 00:15:25,790 И то је лоше ако сви Фоо икада ради је себе опет и опет звати. 317 00:15:25,790 --> 00:15:30,600 У реду је ако Фоо на крају стане, као што то чини спајање врста, говорећи, чекај мало, 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 изворног кода на ЦС50 је сајт има коментаре ако 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 >> Дакле, на врху овог кодекса, имамо укључују ЦС50.х. 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 >> ПУБЛИКА: Тако да функција Тоноване ради. 337 00:16:14,160 --> 00:16:16,243 >> Давид Ј Малан: Тако да функција Тоноване ради. 338 00:16:16,243 --> 00:16:18,115 Због унутар овог Филе, ЦС50.х, која 339 00:16:18,115 --> 00:16:20,950 видећемо убрзо у Услови његовог изворног кода, 340 00:16:20,950 --> 00:16:23,270 има гомилу функција децларед-- Тоноване, ГетСтринг, 341 00:16:23,270 --> 00:16:26,950 и гомила Остали-- и ако ми имамо да Укључи линију, 342 00:16:26,950 --> 00:16:29,320 преводилац Цланг није ће знати да она постоји. 343 00:16:29,320 --> 00:16:32,400 И Исто важи и за линије два где је утврђен Инт 344 00:16:32,400 --> 00:16:35,101 принтф, која је функција чувамо користећи доста. 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 Па зашто смо бих-- ти си само гребање главу, али ја ћу га узети. 354 00:16:56,390 --> 00:16:57,302 Да. 355 00:16:57,302 --> 00:17:00,000 >> ПУБЛИКА: [неразумљиво] Функција након што је главни. 356 00:17:00,000 --> 00:17:01,000 Давид Ј Малан: Управо тако. 357 00:17:01,000 --> 00:17:04,089 Тако да вас преводилац зна на крају ће дефинисати или спроведе 358 00:17:04,089 --> 00:17:06,579 да функција након главни, вероватно. 359 00:17:06,579 --> 00:17:08,462 Дакле, кланг и већина компајлери су врста глупи 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 ИнтАнсвер. 370 00:17:31,570 --> 00:17:33,710 Који на левој руци страни ми даје Инт 371 00:17:33,710 --> 00:17:36,650 који могу сторе-- зове Ансвер-- који ће за складиштење, очигледно, 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 је да се један аргумент-- ми ћемо га звати Н у овом цасе-- 376 00:17:47,680 --> 00:17:52,280 и само да се износ од тог броја Плус сваки позитиван број који је 377 00:17:52,280 --> 00:17:53,200 мањи од њега. 378 00:17:53,200 --> 00:17:58,140 >> Дакле, ако прођем у броју 2 до Сигма, желим да додам 2, плус 1 379 00:17:58,140 --> 00:18:00,240 Плус 0-- не 0-- тако да ми даје 3. 380 00:18:00,240 --> 00:18:05,320 Ако прође у 3 до сигма, желим да Имам 3 плус 2 плус 1, што ми даје 6. 381 00:18:05,320 --> 00:18:05,900 И тако даље. 382 00:18:05,900 --> 00:18:09,750 Тако да само додаје се сви Бројеви мање или једнако на њу. 383 00:18:09,750 --> 00:18:12,040 >> Сада, овде доле ја ћу да одштампате одговор. 384 00:18:12,040 --> 00:18:17,330 Дакле, као брз проверу исправности, хајдемо да сигма 0-- тачка коса црта сигма 0-- 385 00:18:17,330 --> 00:18:18,690 и пусти ме укуцајте 2. 386 00:18:18,690 --> 00:18:19,960 И заиста добити 3. 387 00:18:19,960 --> 00:18:21,240 Пусти ме укуцајте 3. 388 00:18:21,240 --> 00:18:22,860 Ја заиста добити 6. 389 00:18:22,860 --> 00:18:27,636 А ако неко може да уради математику брзо, ако урадим 50 шта ћу добити? 390 00:18:27,636 --> 00:18:29,839 >> ПУБЛИКА: [неразумљиво]. 391 00:18:29,839 --> 00:18:30,880 Давид Ј Малан: Па, не. 392 00:18:30,880 --> 00:18:33,340 Али, 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 Ја сам инитиализинг променљиву зове суму на нулу, онда имам форелооп овде, 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 >> Тако сам итератинг толико дуго као што сам је мање од или једнака м, што 406 00:19:10,110 --> 00:19:11,671 је аргумент који је усвојен у. 407 00:19:11,671 --> 00:19:13,670 И онда сам само наставите инцрементинг И. и увид 408 00:19:13,670 --> 00:19:20,010 петље све што радим чини збир Плус једнако И. И то је намерна. 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 Овде је Сигма једног-- тако да је Друга верзија овог законика. 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 Ја сам сведено на само ово линес-- четири линије кода, заправо, 424 00:20:05,040 --> 00:20:06,980 плус неки цурли протезе и бела простор. 425 00:20:06,980 --> 00:20:07,930 >> Али шта ја то радим? 426 00:20:07,930 --> 00:20:11,050 Ако је м мања од или једнака нула, морам да некако руковање 427 00:20:11,050 --> 00:20:12,490 то супер једноставан случај. 428 00:20:12,490 --> 00:20:15,450 И ако ми даш нула или ништа негативан што је само чудно, 429 00:20:15,450 --> 00:20:17,909 Идем само да произвољно али доследно врати на нулу. 430 00:20:17,909 --> 00:20:20,200 Не желим ово да ући у неки чудан Инфините 431 00:20:20,200 --> 00:20:21,810 лооп због негативна вредност. 432 00:20:21,810 --> 00:20:25,070 Дакле, ја само кажем, ако ми даш нула или мање, ја враћам нула. 433 00:20:25,070 --> 00:20:28,220 >> Али то је добро, јер је то да једна страна именика 434 00:20:28,220 --> 00:20:28,790 што је остало. 435 00:20:28,790 --> 00:20:32,660 Ја сам гризе са врло специфичан проблем и не зове нешто рекурзивно. 436 00:20:32,660 --> 00:20:36,580 Али, у складу 31, што да изгледа да радиш? 437 00:20:36,580 --> 00:20:39,780 Заграде су само вођење ствари, надам се, мало јасније. 438 00:20:39,780 --> 00:20:42,110 Али све што радим је сам м-- враћа год 439 00:20:42,110 --> 00:20:45,790 ви ми-- плус предати вредност м-- је, 440 00:20:45,790 --> 00:20:49,052 плус вредност од сигма м минус 1. 441 00:20:49,052 --> 00:20:50,010 Дакле, шта то значи? 442 00:20:50,010 --> 00:20:53,965 Ако ми даш број 3 као улаз, одговор желим да на крају 443 00:20:53,965 --> 00:20:57,307 је 6 јер 3, плус 2 плус 1 ме 6 даје. 444 00:20:57,307 --> 00:20:59,390 Али како ја мислим о како се то ради код? 445 00:20:59,390 --> 00:21:03,070 Први пут ја зовем Сигма и ја проћи у вредности 3, 446 00:21:03,070 --> 00:21:07,960 То је као да кажете на комад папира, овде је вредност 3 447 00:21:07,960 --> 00:21:09,920 и ја сам прошао ово као сигма. 448 00:21:09,920 --> 00:21:13,090 3 очигледно не мање од 0 до услов ако не важе. 449 00:21:13,090 --> 00:21:14,020 Елсе доес. 450 00:21:14,020 --> 00:21:14,990 Па шта да радим? 451 00:21:14,990 --> 00:21:19,902 Желим да се вратим м, што је 3 плус сигма од м минус 1. 452 00:21:19,902 --> 00:21:21,110 Тако да ме пратите ово. 453 00:21:21,110 --> 00:21:22,710 Ја ћу ставити ово комад папира довн. 454 00:21:22,710 --> 00:21:24,668 А шта вредност, бити јасно, да ли сам ће проћи 455 00:21:24,668 --> 00:21:26,540 у сигма у овом тренутку у причи? 456 00:21:26,540 --> 00:21:28,080 Који број? 457 00:21:28,080 --> 00:21:28,610 2, зар не? 458 00:21:28,610 --> 00:21:29,670 3 минус 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 јер сада сам фокусиран сам на сигнал метара минус 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--, јер је м сада 2 до 2 минус 1 је 1. 470 00:21:59,650 --> 00:22:01,950 Тако да сада имам само вредност 1. 471 00:22:01,950 --> 00:22:04,810 Ја дајем само број 1 до функције сигма-- 472 00:22:04,810 --> 00:22:09,120 или ја овдје-- тако 1 очигледно није мање од нуле, још увек не примењује. 473 00:22:09,120 --> 00:22:12,970 >> Ретурн 1, плус сигма чега? 474 00:22:12,970 --> 00:22:13,470 0. 475 00:22:13,470 --> 00:22:14,678 Дакле, дозволите ми да се сетим тога. 476 00:22:14,678 --> 00:22:15,920 Ја ћу се вратити на то касније. 477 00:22:15,920 --> 00:22:18,060 Сада ћу да наставим и јота доле броја 0, јер је то 478 00:22:18,060 --> 00:22:19,470 мој аргумент или параметар. 479 00:22:19,470 --> 00:22:22,400 Ја сам положио број 0 и на крају овај процес 480 00:22:22,400 --> 00:22:25,760 да само себи понављао оглас наусеум не престаје, јер шта 481 00:22:25,760 --> 00:22:28,820 да одмах урадити кад видим ово 0? 482 00:22:28,820 --> 00:22:29,790 Враћам нула. 483 00:22:29,790 --> 00:22:31,790 Сада имате да премотате причу. 484 00:22:31,790 --> 00:22:34,430 >> Ако сада уназад кроз време, шта је најновија ствар 485 00:22:34,430 --> 00:22:36,670 Ја сам да си буквално премотавање видео? 486 00:22:36,670 --> 00:22:41,630 Идем да покупим најновији 1 и то ми даје 1 плус 0 је 1. 487 00:22:41,630 --> 00:22:44,100 Ако наставим премотавање Прича да ће ми дати 488 00:22:44,100 --> 00:22:46,880 2 плус ово трчање вредност, која је 1. 489 00:22:46,880 --> 00:22:47,789 Дакле, то је 3. 490 00:22:47,789 --> 00:22:49,330 И онда ћу задржати Премотавам. 491 00:22:49,330 --> 00:22:54,220 Када сам први пут спустио број 3-- тако да је 3 плус 3 ми даје 6. 492 00:22:54,220 --> 00:22:57,272 >> И сада, ако сте премотани видео до ове тачке, 493 00:22:57,272 --> 00:22:58,980 ово је био веома Прво питање сам. 494 00:22:58,980 --> 00:23:01,450 Када прошло 3, што је сигма 3? 495 00:23:01,450 --> 00:23:04,204 Заиста је 6, збир Сви ови комади папира. 496 00:23:04,204 --> 00:23:07,120 Дакле, ако је потребно мало времена да замотати ваш ум около, то је у реду. 497 00:23:07,120 --> 00:23:10,700 Али сматрам да је мало-- њега био врло намерно да наслагане 498 00:23:10,700 --> 00:23:12,990 ови бројеви на врху сваке друге. 499 00:23:12,990 --> 00:23:17,440 То је нека врста који има мемори-- рекорд у времену, 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 Претпостављам, на Гоогле-у. 504 00:23:29,614 --> 00:23:31,530 Да ли би неко ко је веома добар у виду гооглинг 505 00:23:31,530 --> 00:23:34,270 Долази само на тренутак и ми помогне да тражи нешто? 506 00:23:34,270 --> 00:23:35,650 Веома, веома ниско кључ. 507 00:23:35,650 --> 00:23:37,870 Неко ко никада није дошао раније, можда. 508 00:23:37,870 --> 00:23:38,370 ОК. 509 00:23:38,370 --> 00:23:39,030 Да? 510 00:23:39,030 --> 00:23:39,530 Хајде. 511 00:23:39,530 --> 00:23:41,410 Хајде доле. 512 00:23:41,410 --> 00:23:42,183 Како се зовеш? 513 00:23:42,183 --> 00:23:42,870 >> Сам Сам. 514 00:23:42,870 --> 00:23:44,290 >> Давид Ј Малан: Сем, хајде доле. 515 00:23:44,290 --> 00:23:45,320 Ово је исти. 516 00:23:45,320 --> 00:23:46,280 Драго ми је да смо се упознали. 517 00:23:46,280 --> 00:23:46,780 Хеј. 518 00:23:46,780 --> 00:23:47,580 Дођи овамо. 519 00:23:47,580 --> 00:23:51,290 Дакле, све што треба да урадите, ако можете, Сем, овде је Гоогле. 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 >> И сада хајде-- да. 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 Ne? 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 икада тражили Гоогле за анаграм? 534 00:24:14,520 --> 00:24:15,280 >> Сам: Не 535 00:24:15,280 --> 00:24:15,520 >> Давид Ј Малан: У реду. 536 00:24:15,520 --> 00:24:17,186 Сеарцх фор анаграм уместо рекурзије. 537 00:24:17,186 --> 00:24:22,540 538 00:24:22,540 --> 00:24:23,790 Како накриво. 539 00:24:23,790 --> 00:24:25,515 Да ли си икад тражили накриво? 540 00:24:25,515 --> 00:24:29,260 541 00:24:29,260 --> 00:24:32,692 Дакле, ово је мало тешко види али надамо се еверитхинг'с-- реду. 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 >> Дакле, на крају, ово оне'с-- то је мало накриво. 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 Па стварно, испод хаубе Гоогле милиони линија кода 554 00:24:55,640 --> 00:24:58,860 очигледно је неколико глупо АКО услови који су у суштини 555 00:24:58,860 --> 00:25:01,160 провјере да ли корисник има откуцан у овом фразом, 556 00:25:01,160 --> 00:25:03,760 уради нешто што вероватно узео нетривијална количину времена 557 00:25:03,760 --> 00:25:06,080 да спроведе само да бити забавно на овај начин. 558 00:25:06,080 --> 00:25:08,430 Али то је све што проври до испод хаубе. 559 00:25:08,430 --> 00:25:11,570 Али, наравно, рекурзије је више од геекиер 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 Ne? 571 00:25:40,980 --> 00:25:41,890 Хајде горе. 572 00:25:41,890 --> 00:25:42,390 Хајде горе. 573 00:25:42,390 --> 00:25:42,890 У реду. 574 00:25:42,890 --> 00:25:44,136 Дакле, твоје име је шта? 575 00:25:44,136 --> 00:25:44,810 >> Лаурен: Лорен. 576 00:25:44,810 --> 00:25:45,768 >> Давид Ј Малан: Лорен. 577 00:25:45,768 --> 00:25:46,890 Хајде горе, Лаурен. 578 00:25:46,890 --> 00:25:50,140 Дакле, Лорен је бити оспорава овде као следећи начин. 579 00:25:50,140 --> 00:25:52,310 Драго ми је да смо се упознали. 580 00:25:52,310 --> 00:25:55,730 Дакле, Лорен овде има пред њених две празне чаше. 581 00:25:55,730 --> 00:25:57,570 И ми имамо неке оранге сок и мало млека 582 00:25:57,570 --> 00:26:00,301 а ми ћемо ићи напред и урадите следеће. 583 00:26:00,301 --> 00:26:01,550 Ми ћемо испунити ово. 584 00:26:01,550 --> 00:26:07,840 Неколико грама млека овамо и хајде попуните мало сок од наранџе овде. 585 00:26:07,840 --> 00:26:11,475 >> А испред свих ови чланови публике, 586 00:26:11,475 --> 00:26:13,550 мењате две вредности ових пехара. 587 00:26:13,550 --> 00:26:16,970 Ставите сок од наранџе у шољи млека и млеко у шољу сока од наранџе. 588 00:26:16,970 --> 00:26:22,380 589 00:26:22,380 --> 00:26:26,150 Како бисте ви урадили ако сте били у кући и имао приступ другим залихе? 590 00:26:26,150 --> 00:26:27,400 Лаурен: Стави у другој шољи. 591 00:26:27,400 --> 00:26:28,191 Давид Ј Малан: У реду. 592 00:26:28,191 --> 00:26:31,940 Дакле, хајде да привремено променљива, ако хоћемо. 593 00:26:31,940 --> 00:26:35,871 И хајде сад и имплементирати тај исти премештају поступак. 594 00:26:35,871 --> 00:26:36,370 Тако добро. 595 00:26:36,370 --> 00:26:41,490 Ставили смо ОЈ у привремена променљива, млеко у ОВ променљиве, 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 Тако испада оут-- сматрају да Мислио само на тренутак. 600 00:26:50,990 --> 00:26:54,479 Ево, само да га геек се мало, ово би био одговарајући Ц шифра 601 00:26:54,479 --> 00:26:55,520 да смо спроводи. 602 00:26:55,520 --> 00:26:58,650 Имали смо два улаза, А и Б, обоје из који ћемо само рећи за једноставност су 603 00:26:58,650 --> 00:26:59,260 Инт је. 604 00:26:59,260 --> 00:27:02,780 И приметио овде, ако желим да замене вредности две променљиве, А и Б, 605 00:27:02,780 --> 00:27:06,890 ми заиста треба посредника, А привремена променљива, привремена чаша, 606 00:27:06,890 --> 00:27:10,830 у који сипати једна од вредности тако да имамо чувар места за њега. 607 00:27:10,830 --> 00:27:13,480 Али онда је код тачно као Лорен овде спроводи. 608 00:27:13,480 --> 00:27:15,500 >> Сада, само да добијем мало луђи, испада 609 00:27:15,500 --> 00:27:20,930 да можете урадити без привремени променљива. 610 00:27:20,930 --> 00:27:24,870 Да бисте то урадили правилно, међутим, ми идемо морати да превари са неком хемијом. 611 00:27:24,870 --> 00:27:26,380 Ми имамо неке додатне шоље овде. 612 00:27:26,380 --> 00:27:29,600 Тако најближи ствар која изгледа као млеко и воду перхапс-- 613 00:27:29,600 --> 00:27:34,090 или млеко и ОЈ-- је да имамо неки вода, тако да ћемо напунити ово горе 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 Давид Ј Малан: Нема друге чаше. 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 Dobro. 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 >> ДАВИД Ј. Малан Тхе ватер-- који је био шта је кључ последњи пут смо ово урадили. 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 Али, хемијски ако је ово радио од и-- 647 00:28:40,110 --> 00:28:41,200 >> Лаурен: Ово је вода. 648 00:28:41,200 --> 00:28:41,930 >> Давид Ј Малан: То је углавном вода. 649 00:28:41,930 --> 00:28:42,430 У реду. 650 00:28:42,430 --> 00:28:44,210 Али то је и даље исти пехар као и раније. 651 00:28:44,210 --> 00:28:47,570 Дакле, за то-- пробај тамо. 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 Тако сада бисмо-- лепо. 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 да се играју са, ако желите у ЦС50 ИД, можете, у ствари, замените две варијабле 663 00:29:08,660 --> 00:29:11,470 без коришћења привремени цијели број. 664 00:29:11,470 --> 00:29:13,060 А ово је одговарајући Ц кода. 665 00:29:13,060 --> 00:29:16,110 А ако се сећате из прошле Среда, увели смо, ако на кратко, 666 00:29:16,110 --> 00:29:19,720 неки нови оператери у Ц. и не ко сећате шта је мало шаргарепе 667 00:29:19,720 --> 00:29:23,660 Симбол је, тај мали троугласти Симбол са тастатуре представља? 668 00:29:23,660 --> 00:29:26,003 Шта битовима оператер? 669 00:29:26,003 --> 00:29:26,770 >> ПУБЛИКА: ЕКСОР. 670 00:29:26,770 --> 00:29:27,645 >> Давид Ј Малан: ЕКСОР. 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 Вредности попут било еигхт-- и И би изабрати осам битну вредност. 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 А онда користите дефиницију од КСОР из прошле сриједе, 678 00:29:46,810 --> 00:29:52,560 примењују тај мало по мало, сваки од те осам битова у свакој од А и Б, 679 00:29:52,560 --> 00:29:54,980 и онда то баш на том коду. 680 00:29:54,980 --> 00:29:58,170 И то није нетачно оно видите овде на екрану. 681 00:29:58,170 --> 00:30:02,100 Заиста се своди три операције КСОР 682 00:30:02,100 --> 00:30:05,910 и некако магично а и Б позиције ће разменити 683 00:30:05,910 --> 00:30:08,010 без губитка информација. 684 00:30:08,010 --> 00:30:11,580 >> Дакле, трик уље и вода је најближи стварни свет инкарнација 685 00:30:11,580 --> 00:30:12,980 Могао бих да мислим на то да имитирају. 686 00:30:12,980 --> 00:30:15,950 Али, то је сигурно лакше користите привремену променљиву, 687 00:30:15,950 --> 00:30:16,920 као у овом случају овде. 688 00:30:16,920 --> 00:30:21,190 И ово је још једна прилика кажу, такође, ова врста микро оптимизације, 689 00:30:21,190 --> 00:30:23,590 као компјутерски научник бих, док је врста забаве 690 00:30:23,590 --> 00:30:27,060 да се хвалим о томе како сте то урадили без као замене са додатним променљиве, 691 00:30:27,060 --> 00:30:28,640 није све то убедљиво. 692 00:30:28,640 --> 00:30:31,619 Зато да бисте сачували 32 бита, као у случају стварне инт, 693 00:30:31,619 --> 00:30:33,410 није све то убедљив на систему где 694 00:30:33,410 --> 00:30:36,722 можда користите десетине мегабајта или чак и више што су меморијске ових дана. 695 00:30:36,722 --> 00:30:38,680 И у ствари, кад се за касније проблема сет 696 00:30:38,680 --> 00:30:41,010 и имплементирати спелл Цхецкер па ћеш 697 00:30:41,010 --> 00:30:43,550 може оспоравати да то урадите са ово као мало РАМ-а као мало 698 00:30:43,550 --> 00:30:46,820 Време је то могуће на цомпутер-- вас и даље 699 00:30:46,820 --> 00:30:50,160 има недељу дана да спроведе то-- ћете бих-- бићеш 700 00:30:50,160 --> 00:30:51,799 изазов за смањење тих средстава. 701 00:30:51,799 --> 00:30:53,840 И то је заиста једина Поводом овог семестра 702 00:30:53,840 --> 00:30:57,940 где ћете бити охрабрени да се обрије са чак и најбољег учинка 703 00:30:57,940 --> 00:30:59,340 Трошкови другачије. 704 00:30:59,340 --> 00:31:02,200 >> Дакле, шта-- како можемо види ово у стварном код? 705 00:31:02,200 --> 00:31:04,530 Пусти ме само напред сада и отвори пример 706 00:31:04,530 --> 00:31:07,700 да намерно се зове Не свап јер не 707 00:31:07,700 --> 00:31:10,670 у ствари мењате променљиве као што стварно може очекивати. 708 00:31:10,670 --> 00:31:12,260 Дакле, хајде да погледамо. 709 00:31:12,260 --> 00:31:17,050 Ево програм који нема ЦС50 библиотека дешава, само Стандардни И / О. 710 00:31:17,050 --> 00:31:19,560 Сада имамо прототип за свап до врха који је управо 711 00:31:19,560 --> 00:31:21,540 значи да мора да се касније дефинисати. 712 00:31:21,540 --> 00:31:22,550 И овде је главни. 713 00:31:22,550 --> 00:31:26,000 >> И арбитрарно означени Кс и И, односно, једна вредности и два 714 00:31:26,000 --> 00:31:28,590 само зато што си мали и лако размишљати о томе. 715 00:31:28,590 --> 00:31:32,280 А онда сам само гомилу принтфс где имам проверу исправности. к је 1 716 00:31:32,280 --> 00:31:35,110 и и је 2 је вероватно шта ће ти рећи принтфс. 717 00:31:35,110 --> 00:31:36,530 Дакле, нема магије до сада. 718 00:31:36,530 --> 00:31:40,100 >> Онда ћу да тврдим принт Деф, замене Дот Дот Дот. 719 00:31:40,100 --> 00:31:43,730 Ја ћу да позовем свап функција, пролази к и и. 720 00:31:43,730 --> 00:31:47,350 И претпоставимо да је за сада Пребаци се тачно спроводи 721 00:31:47,350 --> 00:31:49,930 као што је био малопре са привременим променљиве. 722 00:31:49,930 --> 00:31:52,670 И тако сам смело тврдим, заменили. 723 00:31:52,670 --> 00:31:55,429 к је сада ово, а и је сада то. 724 00:31:55,429 --> 00:31:57,220 Али филе, наравно, се зове Но Свап. 725 00:31:57,220 --> 00:31:58,678 Дакле, хајде да ствари видимо шта се дешава. 726 00:31:58,678 --> 00:32:04,450 Ако саставити ни свап и онда чинити ./носвап, к је 1, и је 2. 727 00:32:04,450 --> 00:32:05,770 Замене заменили. 728 00:32:05,770 --> 00:32:07,200 к је 1, и је 2. 729 00:32:07,200 --> 00:32:11,980 Дакле, то је заправо изгледа да буде погрешна, чак иако свап-- хајде да спустимо сада-- 730 00:32:11,980 --> 00:32:16,542 је управо реализује по Код Предложио сам малопре. 731 00:32:16,542 --> 00:32:19,000 Дакле, нећемо добити фенси са КСОР ствари за сада. 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 Можда Ја не. 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 а је% И / н и хајдемо плуг-ин за вредност. 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 слично првој половини Дан Армендариз је видео у ПСЕТ3 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 Пусти ме само напред и покрените да опет нема свап ./носвап. 749 00:33:01,720 --> 00:33:04,370 750 00:33:04,370 --> 00:33:05,840 >> Занимљиво. 751 00:33:05,840 --> 00:33:11,670 Дакле, обратите пажњу шта чини да је истина. икс је 1, и једнако 2, али је 2 када је Б је 1. 752 00:33:11,670 --> 00:33:16,790 Дакле, њих двојица некако је замењен али кии не добијају заменили. 753 00:33:16,790 --> 00:33:21,090 Дакле, да буде јасно, шта се дешава се, овде имам к и и 754 00:33:21,090 --> 00:33:25,380 а то су променљиве локалне у Обим главни, ја пролазу у кии 755 00:33:25,380 --> 00:33:26,170 zameniti. 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 Некој или бар или Кс или И или А или Б. 759 00:33:33,280 --> 00:33:36,870 Само да буде јасно да су они није идентичан Кс и И пер се, 760 00:33:36,870 --> 00:33:38,020 Ја сам рекао а и б. 761 00:33:38,020 --> 00:33:40,040 Али можемо их назвати шта желимо. 762 00:33:40,040 --> 00:33:43,960 >> И тако то изгледа Свап се пролази 763 00:33:43,960 --> 00:33:48,980 к-- ТХЕ је-- и то је се прошли и-- ака Б. 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 Али када смо исписати вредности, А и Б 767 00:33:56,010 --> 00:34:01,340 су заиста свап али ки година немају промене на њих. 768 00:34:01,340 --> 00:34:03,150 Подсетимо се да су Кс и И су овде. 769 00:34:03,150 --> 00:34:05,320 >> Дакле, можемо видјети преко Друга техника такође. 770 00:34:05,320 --> 00:34:08,110 А и ово је техника уграђен у проблему сет три. 771 00:34:08,110 --> 00:34:10,780 Идемо напред и урадите то у ЦС50 ИД ако већ нисте. 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 Испада да изгради у ЦС50 ИДЕ, и много програмских окружења више 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 без прибегавања додајући принтфс и састављање и трчање 781 00:34:34,380 --> 00:34:37,588 и додавање иф је и састављање и трчање, која је већ у радног времена 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 Jel tako? 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 Само сам рекао је тачка прекида у посебно носвап.ц линија пет, 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 То ће отворити прво нешто Сцари лоокинг друга терминала виндов-- 815 00:36:00,680 --> 00:36:02,679 даљински отклањање грешака из домаћин што су и суцх-- 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 за отклањање грешака има намерно Застао екецутион-- 819 00:36:11,735 --> 00:36:15,560 не на тој линији по себи, али на први линија стварног кода на тој функцији. 820 00:36:15,560 --> 00:36:18,040 И то је разлог зашто линија седам је Сада је наглашено у жуто. 821 00:36:18,040 --> 00:36:20,550 >> А сада да бацимо поглед на десној страни. 822 00:36:20,550 --> 00:36:27,300 Изгледа да, по дефаулту, лепо довољно, к има какву вредност? 823 00:36:27,300 --> 00:36:27,860 0. 824 00:36:27,860 --> 00:36:29,750 И година има какву вредност? 825 00:36:29,750 --> 00:36:30,410 Нула. 826 00:36:30,410 --> 00:36:35,540 И то је за очекивати у смислу да је к и и-- да жута лине-- има 827 00:36:35,540 --> 00:36:36,770 још није извршена. 828 00:36:36,770 --> 00:36:38,510 Дакле, к не би требало да има вредност 1. 829 00:36:38,510 --> 00:36:41,470 То можда има неку другу вредност, тзв смеће вредност. 830 00:36:41,470 --> 00:36:44,320 И имамо среће да је у зеро у овом тренутку, у суштини. 831 00:36:44,320 --> 00:36:46,400 >> Дакле, сада постоји само неколико дугмад морамо да бринемо 832 00:36:46,400 --> 00:36:48,100 о томе када дебуггинг на овај начин. 833 00:36:48,100 --> 00:36:49,970 Обратите пажњу овде, имамо дугме Плаи. 834 00:36:49,970 --> 00:36:51,877 И ако будемо играли или притисните наставити, то је само 835 00:36:51,877 --> 00:36:53,710 ће трајати до остатак програма 836 00:36:53,710 --> 00:36:55,300 или док не удари друго тачку прекида. 837 00:36:55,300 --> 00:36:56,910 Али ја нисам било који други сет Бреакпоинтс тако да је само 838 00:36:56,910 --> 00:36:58,118 ће трајати до краја. 839 00:36:58,118 --> 00:37:00,280 Та врста пораза у Сврха гурају около. 840 00:37:00,280 --> 00:37:03,290 >> Умјесто тога, ми је стало Ове иконе десно. 841 00:37:03,290 --> 00:37:05,360 И ако лебде над их, као и ти треба, 842 00:37:05,360 --> 00:37:07,450 видећете мале типс-- савете алата. 843 00:37:07,450 --> 00:37:09,020 Ово је корак више. 844 00:37:09,020 --> 00:37:11,290 Сада то не значи Скип следећи линија кода. 845 00:37:11,290 --> 00:37:14,840 То само значи да га изврше и прећи на следећи, прећи на следећи, 846 00:37:14,840 --> 00:37:15,580 прешли на следећи. 847 00:37:15,580 --> 00:37:17,610 Другим речима, виа то дугме, могу да ходам 848 00:37:17,610 --> 00:37:20,390 кроз мој број један корак у исто време. 849 00:37:20,390 --> 00:37:21,914 Ред по ред, буквално. 850 00:37:21,914 --> 00:37:23,830 Сада, са десне стране да, има још један 851 00:37:23,830 --> 00:37:25,163 да ћемо видети за који тренутак. 852 00:37:25,163 --> 00:37:27,820 Ово је такозвани Степ Инто икону која је 853 00:37:27,820 --> 00:37:30,300 ће ми дозволити диве у неку другу функцију. 854 00:37:30,300 --> 00:37:31,800 Али хајде да видимо у само тренутак. 855 00:37:31,800 --> 00:37:33,280 Зато ћу да кликнете на корак преко. 856 00:37:33,280 --> 00:37:35,820 И сада приметио, као што сам кликните ово дугме у горњем десном углу, 857 00:37:35,820 --> 00:37:41,260 држите очи отприлике у локалној Променљиве и види шта се дешава са к. 858 00:37:41,260 --> 00:37:44,115 к је сада 1, јер је жута линија је сада извршено 859 00:37:44,115 --> 00:37:45,840 и ми смо прешли на линији 8. 860 00:37:45,840 --> 00:37:49,840 И у само тренутак и би било пожељно да постане 2. 861 00:37:49,840 --> 00:37:52,330 >> Сада, ништа што занимљиво дешава мало. 862 00:37:52,330 --> 00:37:53,390 Све ово је је иф. 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 Или ја заправо могу да уђу у њу и унутра саме Свап. 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 да нагласим први линија кода у Свап. 872 00:38:19,330 --> 00:38:20,710 То је линија 21. 873 00:38:20,710 --> 00:38:25,220 И сад, шта је врста Функи је то, ако погледате овде, као што је очекивано, 874 00:38:25,220 --> 00:38:29,720 зарез б је 1 и 2, респективно. 875 00:38:29,720 --> 00:38:33,840 Зашто је темп 32,767? 876 00:38:33,840 --> 00:38:36,560 Подсјећајући да је темп, попут празан чаша малопре, 877 00:38:36,560 --> 00:38:38,980 Овде се проглашава он лине 21. 878 00:38:38,980 --> 00:38:43,390 Зашто 32,000- Мислим, зашто је само нека чудна вредност? 879 00:38:43,390 --> 00:38:43,890 Да? 880 00:38:43,890 --> 00:38:45,190 >> ПУБЛИКА: Није покренут. 881 00:38:45,190 --> 00:38:46,940 >> Давид Ј Малан: То је није покренут. 882 00:38:46,940 --> 00:38:49,370 Дакле, наш рачунар увек има физичке меморије. 883 00:38:49,370 --> 00:38:50,544 Увек има физички РАМ. 884 00:38:50,544 --> 00:38:52,710 И увек постоји Зеро и један је тамо, зар не? 885 00:38:52,710 --> 00:38:54,626 Зато што смо користећи наш компјутер по цео дан, 886 00:38:54,626 --> 00:38:57,210 да ли користите ЦС50 ИДЕ или сервери цео дан. 887 00:38:57,210 --> 00:39:01,159 Тако да памет или има неке нуле или неко је или неке нуле и јединице. 888 00:39:01,159 --> 00:39:02,950 Без обзира да ли је или Не си их користите. 889 00:39:02,950 --> 00:39:05,270 Не можете само празно простори где желите бита. 890 00:39:05,270 --> 00:39:06,850 Они су или нула и јединица. 891 00:39:06,850 --> 00:39:09,610 >> Тако испада да је темп, јер ми нисмо га инитиализед ипак, 892 00:39:09,610 --> 00:39:14,580 имамо те 32 бита али нисам је иницијализују на све познате вредности. 893 00:39:14,580 --> 00:39:18,110 Дакле, шта год они били највише Недавно користи за-- тих 32 битс-- 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 Чим сам кликните Степ Овер ипак, Фуј, Температура ће добити вредност 1. 897 00:39:27,780 --> 00:39:31,600 И ако то урадим поново, а је ће бити дат вредност 2 898 00:39:31,600 --> 00:39:33,830 а онда ће б добити вредност 1. 899 00:39:33,830 --> 00:39:36,390 >> И шта је лепо сада на Ова тачка у причи 900 00:39:36,390 --> 00:39:39,750 је да је дебагер показујући ми супер полако 901 00:39:39,750 --> 00:39:42,640 у мојој темпом, што стање Свап је. 902 00:39:42,640 --> 00:39:47,490 Али приметите на врху овде, огласној да је позив стек ствари 903 00:39:47,490 --> 00:39:49,180 има два слоја на њега. 904 00:39:49,180 --> 00:39:53,240 Сада онај који је истакнут као Размена, ако кликнете на Главни уместо тога, 905 00:39:53,240 --> 00:39:57,100 Обратите пажњу како локалне променљиве мењају јер је програмер само да хоп 906 00:39:57,100 --> 00:39:59,740 се и иди у било коју различитог обима. 907 00:39:59,740 --> 00:40:04,070 Дакле, иако радимо све ово раде и исправно замене А и Б, 908 00:40:04,070 --> 00:40:09,080 ако сам и назад иде између Свап где је 2 и б је 1, а Маин, 909 00:40:09,080 --> 00:40:11,851 Главни је погођена уопште? 910 00:40:11,851 --> 00:40:12,350 Ne. 911 00:40:12,350 --> 00:40:13,930 Дакле, шта је овде понети? 912 00:40:13,930 --> 00:40:18,200 Па, испада да свако доба зовете функцију као Свап, 913 00:40:18,200 --> 00:40:21,600 и прођете ИТ аргументе, шта ви пролази у Свап функцију 914 00:40:21,600 --> 00:40:24,730 у овом случају је копија од тих аргумената. 915 00:40:24,730 --> 00:40:28,620 Дакле, ако Кс и И су сваки респективно 32 бита, што Пребаци се добија 916 00:40:28,620 --> 00:40:30,760 је два нова локална варијабле, или аргументи, 917 00:40:30,760 --> 00:40:34,380 назива и б-- али они су произвољно намес-- али образац нула 918 00:40:34,380 --> 00:40:39,520 и оне унутар А и Б су постројили бити исти као кии 919 00:40:39,520 --> 00:40:42,610 али они не и су иста ствар као и к и и. 920 00:40:42,610 --> 00:40:46,880 >> То је као да Главни је на свом парчету папир број 1 и 2 за Кс и И, 921 00:40:46,880 --> 00:40:49,260 и онда када се руке које комад папира на Свап, 922 00:40:49,260 --> 00:40:51,970 Пребаци врло брзо добија своју оловку, записује 923 00:40:51,970 --> 00:40:56,240 1 и 2 на свом папиру, руке назад оригинални ки на почетак 924 00:40:56,240 --> 00:40:58,790 и онда ради сопствене Ствар са а и б. 925 00:40:58,790 --> 00:41:01,940 И ово је сада важно, јер Супер то има импликације нетривијална 926 00:41:01,940 --> 00:41:06,260 за стварно писање исправног кода јер се чини да не могу заменити 927 00:41:06,260 --> 00:41:07,500 две варијабле. 928 00:41:07,500 --> 00:41:09,150 >> Написао сам исправан Свап функцију. 929 00:41:09,150 --> 00:41:12,770 Ми смо га реализује уз Лаурен као тачан замена функција у стварности, 930 00:41:12,770 --> 00:41:16,700 али изгледа ништа од тога ствари ако не можеш стварно 931 00:41:16,700 --> 00:41:19,530 свап две вредности трајно. 932 00:41:19,530 --> 00:41:21,970 Зато морамо други пут да заиста добити на ово, 933 00:41:21,970 --> 00:41:24,472 и морамо бити у стању да у ствари реше овај проблем. 934 00:41:24,472 --> 00:41:27,180 И испоставило оут--, па ћемо доћи назад на овом сликом 935 00:41:27,180 --> 00:41:30,500 пре лонг-- ово је један од начина да можда извући меморију рачунара. 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 И стек је само комад од РАМ-- комад мемори-- 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 је место где сви главних локалних променљивих је и орг Ц и цом В и све те ствари 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 >> И тако само да вам дам брз летимичан слика ово, ако одем преко овде-- 947 00:42:04,490 --> 00:42:09,450 и дозволите ми да одражавају ово на изнад као па-- оно што стварно јесам, 948 00:42:09,450 --> 00:42:12,100 Ако нам је стало само о дно ову слику за сада, 949 00:42:12,100 --> 00:42:15,070 је да када сам покренути програм Главни и бива зове, 950 00:42:15,070 --> 00:42:18,330 Главни даје комад РАМ-у мом компјутеру који је 951 00:42:18,330 --> 00:42:20,060 на дну ове тзв стек. 952 00:42:20,060 --> 00:42:22,143 И ја ћу да га нацртати намерно као квадрат. 953 00:42:22,143 --> 00:42:24,540 Дакле, то је као 32 бита или четири бајта. 954 00:42:24,540 --> 00:42:28,790 А ако ова основна функција има променљива зове к са вредношћу 1 955 00:42:28,790 --> 00:42:32,626 а има и променљиву названу година са вредношћу од 2, која је 956 00:42:32,626 --> 00:42:35,750 као узимање овог делић меморије која Главни је дат од стране оперативног 957 00:42:35,750 --> 00:42:38,850 Систем и подели је тако да прва локална променљива иде овде, 958 00:42:38,850 --> 00:42:40,930 друга иде овде, и то је то. 959 00:42:40,930 --> 00:42:45,590 >> Када Главни зове Свап, Замени добија своју кришку меморије 960 00:42:45,590 --> 00:42:48,280 да ћемо извући овако из оперативног система, 961 00:42:48,280 --> 00:42:50,820 и да ће имати своје сопствене локалне променљиве на бази 962 00:42:50,820 --> 00:42:53,825 на нашем имплементацији раније са локалним варијабли 963 00:42:53,825 --> 00:42:58,010 и б да на почетку гет вредности 1 и 2. 964 00:42:58,010 --> 00:43:00,450 Али онда, чим свап код извршава, 965 00:43:00,450 --> 00:43:03,760 и Лаурен заправо измењује ОВ и млеко, шта се дешава? 966 00:43:03,760 --> 00:43:09,030 Па, ово је 2 постане 1, ове 1 постаје 2, и, успут, 967 00:43:09,030 --> 00:43:13,360 постоји Температура променљива која је као користио ту цело време да на крају 968 00:43:13,360 --> 00:43:14,470 одлази. 969 00:43:14,470 --> 00:43:16,720 Али то није битно колико посао који обављате 970 00:43:16,720 --> 00:43:22,160 у овој линији од-- у овом меморијски простор, Кс и И су потпуно нетакнуте. 971 00:43:22,160 --> 00:43:26,320 >> Зато морамо неки начин давања Свап и функције као што су њега 972 00:43:26,320 --> 00:43:32,640 тајна приступ, ако хоћете, да Функције као-- у меморију као к и и. 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 Зато не брините ако ГДБ је убијен. 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 Ја користим ЦС50 библиотека у Стандардни И / О. 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 И приметите да су ове две жице се зове С и Т, респективно. 988 00:44:09,910 --> 00:44:12,910 И сада овај програм, упоредите Нула, његова сврха у животу, 989 00:44:12,910 --> 00:44:15,470 то би требало да ми кажеш, сам унесите исту ствар? 990 00:44:15,470 --> 00:44:16,910 И тако Враћам се Веек Оне. 991 00:44:16,910 --> 00:44:19,950 Ја користим једнак једнак оператор који је оператор квалитет. 992 00:44:19,950 --> 00:44:22,220 Није оператор задатак, Оператор једнакости. 993 00:44:22,220 --> 00:44:23,890 Ја сам само у односу С и Т. 994 00:44:23,890 --> 00:44:27,470 >> Па хајде да ствари иду напред и урадите то. 995 00:44:27,470 --> 00:44:32,680 И ја ћу ићи напред и да упоредите Зеро. 996 00:44:32,680 --> 00:44:35,110 Ја ћу да урадим ./цомпарезеро. 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 и размотрити шта ГетСтринг заправо ради. 1014 00:45:10,910 --> 00:45:13,385 Када позовете ГетСтринг, то је функција да 1015 00:45:13,385 --> 00:45:16,510 сами написали и некако постаје низ знакова од корисника. 1016 00:45:16,510 --> 00:45:20,280 И претпоставимо да је прва Време ја зовем ГетСтринг, који ми даје 1017 00:45:20,280 --> 00:45:21,930 комад меморије која изгледа овако. 1018 00:45:21,930 --> 00:45:26,990 И ако сам откуцао у свим малим словима М-О-м-- и шта се после тога? 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 И сећам се да смо играли около са именом Замила је 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 Ово је шта ГетСтринг се враћа у мени. 1027 00:45:40,160 --> 00:45:44,780 Сада, мој код малочас складиште повратак вредност ГетСтринг 1028 00:45:44,780 --> 00:45:47,510 у променљивој се зове ова. 1029 00:45:47,510 --> 00:45:51,390 А онда други пут сам га назвао, Ит чувају у променљивом зове т. 1030 00:45:51,390 --> 00:45:55,070 >> Дакле, ако одем тамо, морам да скрене ову локалну вариабле-- 1031 00:45:55,070 --> 00:45:59,610 и ја ћу генерално драв стринг као само-- ћемо 1032 00:45:59,610 --> 00:46:02,360 позовите га успела-- као мали квадрат овде. 1033 00:46:02,360 --> 00:46:09,760 А сада, сомехов-- како се мама уђемо ове променљиве с? 1034 00:46:09,760 --> 00:46:12,010 Па, морамо да се вратимо на прву принципима овде. 1035 00:46:12,010 --> 00:46:15,660 Шта се заправо ГетСтринг враћа? 1036 00:46:15,660 --> 00:46:19,030 >> Тако испада да је М-О-м обрнута коса црта нула, и било који број 1037 00:46:19,030 --> 00:46:22,364 других стрингс у меморији као Замила и Роб или Енди или неко други, 1038 00:46:22,364 --> 00:46:24,280 су наравно у нашим РАМ или меморија рачунара. 1039 00:46:24,280 --> 00:46:27,760 А твоја памет је као-- имате свирка РАМ-а, две свирке РАМ, 1040 00:46:27,760 --> 00:46:30,860 или милијарду или две милијарде бајтова, или можда чак и више ових дана. 1041 00:46:30,860 --> 00:46:34,070 Дакле, претпоставимо, за данашње потребе, да није битно како смо бројати 1042 00:46:34,070 --> 00:46:36,640 их, али можемо број Сваки оних милијарди или две милијарде 1043 00:46:36,640 --> 00:46:37,880 или четири милијарде бајтова. 1044 00:46:37,880 --> 00:46:42,240 >> И рецимо само произвољно рећи да ово је први угриз, други ујед, 1045 00:46:42,240 --> 00:46:43,380 трећи, четврти. 1046 00:46:43,380 --> 00:46:46,570 Ја намерно не користи нула за данас, али ћемо се вратити на то. 1047 00:46:46,570 --> 00:46:49,570 Другим речима, ако је ово Први пут сам помоћу програма, 1048 00:46:49,570 --> 00:46:52,715 Само се посрећило и први залогај је на локацију један онда два 1049 00:46:52,715 --> 00:46:53,590 затим три од четири. 1050 00:46:53,590 --> 00:46:57,430 И ако је цртао, број бокса две милијарде ће бити скроз овамо. 1051 00:46:57,430 --> 00:47:02,200 >> Па шта мислиш, онда, ГетСтринг заправо враћа? 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 Дакле, шта друго може да ГетСтринг ствари се вратити сви ови недеља? 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 >> Давид Ј Малан: Један. 1065 00:47:32,200 --> 00:47:33,021 А зашто једно? 1066 00:47:33,021 --> 00:47:35,520 ПУБЛИКА: Зато што ће рећи ти где да идете [неразумљиво]. 1067 00:47:35,520 --> 00:47:38,391 1068 00:47:38,391 --> 00:47:39,390 Давид Ј Малан: Управо тако. 1069 00:47:39,390 --> 00:47:44,300 Ја само да се врати адресу од низа који сам добио. 1070 00:47:44,300 --> 00:47:46,570 Адреса у овом Случај је локација један. 1071 00:47:46,570 --> 00:47:51,280 Дакле, оно што је заиста се складишти у успела-- и сваки низ променљива тако фар-- 1072 00:47:51,280 --> 00:47:53,430 је управо био адреса тог низа. 1073 00:47:53,430 --> 00:47:57,840 >> У међувремену, ако ја зовем ГетСтринг други пут и И 1074 00:47:57,840 --> 00:48:03,300 укуцајте буквално исти ствар-- М-О-М са ловерцасе-- М-О-м 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 Baš tako. 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 али је заправо корисно да схватимо јер када зовете ГетСтринг, 1091 00:48:46,820 --> 00:48:50,280 иако мислимо на то враћа М-О-м или стринг маму 1092 00:48:50,280 --> 00:48:53,120 или Енди или Замила или слично, технички 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 >> И тако данас обележава бегиннинг-- и пусти ме да ово драматично јер ми 1102 00:49:18,700 --> 00:49:21,800 је прошао кроз многе невоље у набавила овде обуку вхеелс-- 1103 00:49:21,800 --> 00:49:29,840 тако да данас точкови почну обуку да га скинем и да открије на леаст-- 1104 00:49:29,840 --> 00:49:31,373 >> [АППЛАУСЕ] 1105 00:49:31,373 --> 00:49:33,220 1106 00:49:33,220 --> 00:49:36,160 >> То је добро вреди путовање да Таргет јутрос, зар не? 1107 00:49:36,160 --> 00:49:39,600 Дакле, сада-- постоји, испоставило напоље, постоји таква ствар као стринг. 1108 00:49:39,600 --> 00:49:41,140 Стринг не постоји. 1109 00:49:41,140 --> 00:49:43,760 То је синоним које смо имали унутар ЦС50 библиотеке. 1110 00:49:43,760 --> 00:49:48,660 Од сада ћемо да почну да позивају С и Т не жице него цхар звезде. 1111 00:49:48,660 --> 00:49:51,180 И Чар звезда ћемо задиркивати осим пре времена. 1112 00:49:51,180 --> 00:49:53,510 Али ово је рећи, да чак и ако наставимо 1113 00:49:53,510 --> 00:49:56,180 користећи ГетСтринг за сада, технички Требало би 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 друго снимак из наше пријатељ Ник Парланте на Стенфорду 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 што Цлаиматион увођење у свет 1122 00:50:17,140 --> 00:50:20,010 карактер по имену Бинки са којима ћемо 1123 00:50:20,010 --> 00:50:22,010 да се уведе следећи пут да показивачима. 1124 00:50:22,010 --> 00:50:24,588 Дакле, овде је преглед онога што долази. 1125 00:50:24,588 --> 00:50:26,370 >> [ВИДЕО РЕПРОДУКЦИЈА] 1126 00:50:26,370 --> 00:50:27,510 >> Хеј, Бинки. 1127 00:50:27,510 --> 00:50:28,260 Пробудити. 1128 00:50:28,260 --> 00:50:30,672 Време је за показивач забаве. 1129 00:50:30,672 --> 00:50:31,616 >> -Шта је ово? 1130 00:50:31,616 --> 00:50:33,032 Сазнајте више о тројкама? 1131 00:50:33,032 --> 00:50:34,450 Ох, добро. 1132 00:50:34,450 --> 00:50:35,431 >> [Крај репродукције] 1133 00:50:35,431 --> 00:50:38,055 Давид Ј Малан: И у том смислу, видимо се у среду. 1134 00:50:38,055 --> 00:50:47,590 1135 00:50:47,590 --> 00:50:48,090 У реду. 1136 00:50:48,090 --> 00:50:48,740 Ко је плес? 1137 00:50:48,740 --> 00:50:49,240 Хајде. 1138 00:50:49,240 --> 00:50:50,330 Ко је плес? 1139 00:50:50,330 --> 00:50:51,820 Желиш да се то почело? 1140 00:50:51,820 --> 00:50:53,770 Ја ћу гет ит стартед. 1141 00:50:53,770 --> 00:50:54,270 Воооо! 1142 00:50:54,270 --> 00:51:04,070 1143 00:51:04,070 --> 00:51:07,580 >> Лаурен: Слатка фенси Мојсије.