1 00:00:00,000 --> 00:00:10,550 2 00:00:10,550 --> 00:00:14,050 >> DAVID J. Malan: Jen CS50 kaj tiu estas la komenco de semajno kvar. 3 00:00:14,050 --> 00:00:18,630 Kaj, knabo, estas Volkswagen en problemojn cxiuj pro programaro. 4 00:00:18,630 --> 00:00:20,264 Ni rigardu. 5 00:00:20,264 --> 00:00:20,930 [VIDEO reprodukto] 6 00:00:20,930 --> 00:00:25,560 -Cars, La plej inteligenta karakteroj en la Rapida kaj Furioza filmoj. 7 00:00:25,560 --> 00:00:29,100 Ĉi semajno germana fabrikanto Volkswagen trovis sin 8 00:00:29,100 --> 00:00:32,490 en la mezo de skandalo de potenciale kriman proporcioj. 9 00:00:32,490 --> 00:00:36,060 >> -Volkswagen Estas fiksante por miliardoj en monpunas, eblaj kriminalaj postenoj 10 00:00:36,060 --> 00:00:38,560 por liaj ekzekutivoj, kiel la kompanio senkulpigas 11 00:00:38,560 --> 00:00:41,840 por falsigi 11 milionoj aŭtoj helpi batis emisiones testoj. 12 00:00:41,840 --> 00:00:44,950 >> -Certain Dizelaj modeloj estis desegnita kun altnivela softvaro 13 00:00:44,950 --> 00:00:48,440 kiu uzis informo inkludante la pozicio de la stirrado kaj veturilo 14 00:00:48,440 --> 00:00:51,870 rapidigi determini la aŭto estis travivanta emisiones testado. 15 00:00:51,870 --> 00:00:55,650 Sub tiu cirkonstanco, la motoro reduktus toksaj emisioj. 16 00:00:55,650 --> 00:00:59,070 Sed la aŭto estis rigita por bypass ke kiam ĝi estis pelataj. 17 00:00:59,070 --> 00:01:03,320 Emisiones pliigis 10 ĝis 40 fojojn super akcepteblaj niveloj EPA. 18 00:01:03,320 --> 00:01:04,280 >> [FINO reprodukto] 19 00:01:04,280 --> 00:01:05,220 >> DAVID J. Malan: Do ni rigardu ĉi 20 00:01:05,220 --> 00:01:07,250 kaj vidi ĝuste kiel ĉi povus esti implementado 21 00:01:07,250 --> 00:01:09,680 kaj kiel tiu povus afekcii tiel multaj aŭtoj kiel ĉi. 22 00:01:09,680 --> 00:01:12,840 Do en mia mano jen la gazetaro gazetaro kiu estis elsendita de la EPA-- 23 00:01:12,840 --> 00:01:14,620 la Media Protektado Agentejo kiu 24 00:01:14,620 --> 00:01:18,032 estas la usona reguligaj agentejo kiu pritraktas mediaj konzernoj, 25 00:01:18,032 --> 00:01:19,740 kaj tiam la efektiva jura avizo kiu estis 26 00:01:19,740 --> 00:01:22,420 sendu al Volkswagen nur kelkaj tagoj. 27 00:01:22,420 --> 00:01:26,530 >> Do la EPA skribas, kaj diskonigas nun publike, kompleksa programaro 28 00:01:26,530 --> 00:01:29,390 algoritmo sur certaj Volkswagen veturiloj detektas 29 00:01:29,390 --> 00:01:32,630 kiam la aŭto estas travivanta oficiala emisiones testado 30 00:01:32,630 --> 00:01:36,505 kaj turnas plena emisiones kontrolas sur nur dum la testo. 31 00:01:36,505 --> 00:01:38,380 La efikeco de tiuj veturiloj poluado 32 00:01:38,380 --> 00:01:43,260 emisiones kontrolo aparatoj estas tre reduktis dum ĉiuj normalaj kondukado 33 00:01:43,260 --> 00:01:44,320 situacioj. 34 00:01:44,320 --> 00:01:48,190 Ĉi tiuj rezultoj en aŭtoj kiuj plenumas la normoj en la laboratorio aŭ testado 35 00:01:48,190 --> 00:01:52,790 stacidomo, sed dum normala operacio elsendas nitrogeno oxides-- aŭ NOx-- 36 00:01:52,790 --> 00:01:54,950 ĉe ĝis 40 fojojn la norma. 37 00:01:54,950 --> 00:01:58,220 La programaro produktita de Volkswagen citajxo unquote, malvenko aparato, 38 00:01:58,220 --> 00:02:00,650 kiel difinita de la Pura Aero-Leĝo en Usono. 39 00:02:00,650 --> 00:02:03,410 >> Ili daŭriĝus por diri ke la EPA kaj alia agentejo 40 00:02:03,410 --> 00:02:07,020 briligis malvenko aparato programaro post sendependa analizo 41 00:02:07,020 --> 00:02:09,660 de esploristoj ĉe Okcidenta Virginia University. 42 00:02:09,660 --> 00:02:14,160 NOx polucio kontribuas nitrogena dioksido, ternivelo ozono, 43 00:02:14,160 --> 00:02:15,700 kaj fajna partikla afero. 44 00:02:15,700 --> 00:02:18,090 Ekspona al tiuj malpurigaĵoj estis ligita 45 00:02:18,090 --> 00:02:20,870 kun larĝa gamo de seriozaj sano efektoj, 46 00:02:20,870 --> 00:02:23,637 inkluzive pliigis astmo atakoj kaj aliaj spiraj 47 00:02:23,637 --> 00:02:26,470 malsanoj kiuj povas esti serioza sufiĉe sendi homojn al la hospitalo. 48 00:02:26,470 --> 00:02:28,660 Ekspona al ozono kaj partikla materio havas ankaŭ 49 00:02:28,660 --> 00:02:31,960 estis asociitaj kun antaŭtempa morto pro spira rilatajn 50 00:02:31,960 --> 00:02:35,690 aŭ cardiovasculares rilatigis efikojn. 51 00:02:35,690 --> 00:02:38,940 Infanoj, maljunuloj, personoj kun preexistente spira malsano 52 00:02:38,940 --> 00:02:42,840 estas aparte ĉe risko por sano efektoj de ĉi tiuj contaminantes. 53 00:02:42,840 --> 00:02:45,056 >> Sufiĉu estas, ĝi estas tre grava. 54 00:02:45,056 --> 00:02:46,930 Kaj ni iru sur legi nur unu pli eltiraĵo 55 00:02:46,930 --> 00:02:49,370 kaj tiam ni rigardu la subkuŝantaj implikaĵoj 56 00:02:49,370 --> 00:02:50,920 de ĉi tio en la kunteksto de aŭto. 57 00:02:50,920 --> 00:02:53,730 Specife, Volkswagen fabrikita kaj instalita 58 00:02:53,730 --> 00:02:56,210 programaro en la tn elektronika kontrolo 59 00:02:56,210 --> 00:02:59,320 module-- aŭ ECM-- de tiuj veturiloj kiuj sentis 60 00:02:59,320 --> 00:03:03,580 kiam la veturilo estis elprovita por plenumo EPA emisión normoj. 61 00:03:03,580 --> 00:03:07,510 Bazita sur diversaj enigoj inkludante la pozicio de la stirrado, veturilo 62 00:03:07,510 --> 00:03:11,280 rapido, la daŭro de la motoro operacio kaj premo barométrica, 63 00:03:11,280 --> 00:03:13,720 tiuj enigoj precize spuris la parametroj 64 00:03:13,720 --> 00:03:17,600 de la federacia testo proceduro uzita por emisión testado por EPA atestado 65 00:03:17,600 --> 00:03:18,400 celoj. 66 00:03:18,400 --> 00:03:21,850 >> Dum EPA emisión testado la veturiloj ECM programaro 67 00:03:21,850 --> 00:03:25,060 kuris programaro kiu produktis konsentemaj emisiones rezultoj. 68 00:03:25,060 --> 00:03:28,340 Ĉe ĉiuj aliaj tempoj, la veturilo ECM programaro 69 00:03:28,340 --> 00:03:31,090 kuris aparta vojo calibración kio reduktis 70 00:03:31,090 --> 00:03:34,360 la efikeco de la entuta emisión kontrolo sistemo, 71 00:03:34,360 --> 00:03:37,864 specife la selektema kataliza redukto de la Lean NOx trap-- 72 00:03:37,864 --> 00:03:39,280 kiun ni vidos pri en momento. 73 00:03:39,280 --> 00:03:43,040 Kiel rezulto, la emisiones de NOx pliigita je faktoro de 10 al 40 fojoj 74 00:03:43,040 --> 00:03:47,450 super la EPA observema niveloj Dependanta sur la tipo de stirado ciklo. 75 00:03:47,450 --> 00:03:50,800 >> Do kio ĉi vere signifas, kaj la fontkodon la programaro kurado 76 00:03:50,800 --> 00:03:53,190 sur la Volkswagen havas ne tamen estis publike diskonigita, 77 00:03:53,190 --> 00:03:56,460 estas ke, efektive, tiu ekvivalento estas ie tie interne 78 00:03:56,460 --> 00:03:57,830 de Volkswagen kodon. 79 00:03:57,830 --> 00:04:02,200 Se vi estas estanta elprovita, kaj se la aŭto detektas iuj mediaj faktoroj 80 00:04:02,200 --> 00:04:04,330 kiel la stirrado pozicio aŭ la movado 81 00:04:04,330 --> 00:04:06,710 aŭ manko de la aŭto aŭ ajna nombro da aliaj faktoroj 82 00:04:06,710 --> 00:04:09,940 ke aktuale hipotezis esti parto de ĉi tiu formulo, 83 00:04:09,940 --> 00:04:12,370 Ili simple ŝalti plena emisiones kontroli. 84 00:04:12,370 --> 00:04:15,670 En aliaj vortoj, ili komencas elsendante malpli de la contaminantes. 85 00:04:15,670 --> 00:04:18,769 >> Alie, en ĉiu alia situacio kiam ĝi ne estas detektita kiel estante 86 00:04:18,769 --> 00:04:20,790 en la laboratorio, ili simple ne faras. 87 00:04:20,790 --> 00:04:24,320 Kaj tiel vi povas simpligi tion ĉi en pli konkreta _pseudocode_ kun io 88 00:04:24,320 --> 00:04:24,820 kiel tio. 89 00:04:24,820 --> 00:04:27,810 Se la radoj turniĝas sed la stirrado ne, sugesta 90 00:04:27,810 --> 00:04:30,060 ke la aŭto estas ĉe iuj speco de rotacianta cilindro 91 00:04:30,060 --> 00:04:32,550 sed en ia magazeno estanta elprovita, 92 00:04:32,550 --> 00:04:36,070 tiam kondutas kiel la EPA ŝatus vin. 93 00:04:36,070 --> 00:04:37,960 Alie ne. 94 00:04:37,960 --> 00:04:40,420 Do ni rigardu ĉe mallonga video kiu 95 00:04:40,420 --> 00:04:45,391 prenas rigardi kion la implikaĵoj estas de ĉi tiu praktiko mekanike. 96 00:04:45,391 --> 00:04:48,620 >> [VIDEO reprodukto] 97 00:04:48,620 --> 00:04:52,800 >> -Last Vendredo la EPA sciigis ke iuj Volkswagen Audi aŭtoj fabrikitaj inter 2009 98 00:04:52,800 --> 00:04:55,840 kaj ĉi jaro estis uzantaj tn malvenko aparato 99 00:04:55,840 --> 00:04:59,060 akiri ĉirkaŭ emisiones leĝoj desegnita por gardi la aero pura. 100 00:04:59,060 --> 00:05:01,700 Sed kion tio signifas ekzakte? 101 00:05:01,700 --> 00:05:04,666 >> Nu, modernaj aŭtoj havas dekduojn de komputiloj ene de ili. 102 00:05:04,666 --> 00:05:07,040 Kaj iuj de tiuj komputiloj helpi kunordigi la funkciojn 103 00:05:07,040 --> 00:05:09,590 de la motoro por optimuma agado dum certigi 104 00:05:09,590 --> 00:05:12,340 ke estas ne tro da rubo eliranta el la tubo de ellasilo. 105 00:05:12,340 --> 00:05:15,170 Ili fakte estis laboranta tiu vojo dum pluraj jardekoj nun. 106 00:05:15,170 --> 00:05:17,380 Esence, ĉiu parto de moderna aŭto motoro 107 00:05:17,380 --> 00:05:20,080 havas sensor aŭ regilo sur ĝi, kaj tiuj komputiloj 108 00:05:20,080 --> 00:05:23,460 legas en datumoj miloj da fojoj sekunde farado ĝustigas 109 00:05:23,460 --> 00:05:26,220 kiel la rilatumo de karburaĵo al aero tio tuj en la cilindroj. 110 00:05:26,220 --> 00:05:28,730 >> Tiuj trompas Volkswagen kaj Audi modeloj estas dizeloj, 111 00:05:28,730 --> 00:05:30,890 kaj dizeloj havas pli vere grava komputilo 112 00:05:30,890 --> 00:05:34,030 kontrolis parametroj, kiuj estas la kvanto de brulaĵo unburned iranta 113 00:05:34,030 --> 00:05:35,200 en la ellasilo. 114 00:05:35,200 --> 00:05:36,310 Nun tio sonas malbona. 115 00:05:36,310 --> 00:05:39,642 Ĝi ne sonas kiel vi volus unburned brulaĵo iranta en la ellasilo. 116 00:05:39,642 --> 00:05:41,600 Sed en la kazo de diesel, vi havas ion 117 00:05:41,600 --> 00:05:46,110 nomiĝas NOx kaptilo kiu estas mekanismo kiu sorbas kaj kaptiloj por nitrogeno oksidoj 118 00:05:46,110 --> 00:05:48,880 ke estas contaminantes kiu volus alie iru al la atmosfero. 119 00:05:48,880 --> 00:05:53,040 Kaj la efiko de tiu NOx kaptilo estas plibonigita kun unburned brulaĵo. 120 00:05:53,040 --> 00:05:56,650 Do malvenko aparato estas speciala programo interne tiuj komputiloj kiuj povas fari ĝin 121 00:05:56,650 --> 00:05:59,527 aspekti la aŭto renkontas emisión normoj eĉ kiam ĝi ne. 122 00:05:59,527 --> 00:06:01,110 Volkswagen havis problemon sur liaj manoj. 123 00:06:01,110 --> 00:06:04,050 Lia dizelaj motoroj estis konataj por interesigi granda brulaĵo ekonomio, 124 00:06:04,050 --> 00:06:07,510 sed la NOx kaptilo nur funkcias bone kiam pli karburaĵo estas uzita. 125 00:06:07,510 --> 00:06:10,460 Do la ĉaro detektus, uzante tiu malvenko aparato, 126 00:06:10,460 --> 00:06:13,870 kiam atingante emisiones testo, ĝi uzus pli brulaĵo, 127 00:06:13,870 --> 00:06:16,830 fari la NOx kaptilo laboron bone, emisiones estus bone. 128 00:06:16,830 --> 00:06:21,130 Sed tiam vi akiras sur la vojo, la aparato malŝaltas, vi brulanta malpli brulaĵo 129 00:06:21,130 --> 00:06:24,256 sed vi metas tiel kiel 40 fojojn pli contaminantes en la atmosfero. 130 00:06:24,256 --> 00:06:26,130 Sed kiel la heck faris la aŭto scias ke estis 131 00:06:26,130 --> 00:06:27,720 testata por emisiones observon? 132 00:06:27,720 --> 00:06:30,590 La EPA Diras estis kompleksa sistemo kiu kontrolis aferoj 133 00:06:30,590 --> 00:06:34,090 kiel stirrado pozicio, rapido, kiom longe la motoro estis sur, 134 00:06:34,090 --> 00:06:35,507 kaj eĉ la atmosfera premo. 135 00:06:35,507 --> 00:06:37,673 En aliaj vortoj, ekzistis neniel ĉi estis accidental 136 00:06:37,673 --> 00:06:40,260 ĉar la programaro estis desegnita tre atente detekti 137 00:06:40,260 --> 00:06:41,630 oficialan emisiones testo. 138 00:06:41,630 --> 00:06:43,588 Jen kelkaj belaj serioza seniluziiĝo kaj jen 139 00:06:43,588 --> 00:06:45,420 kial Volkswagen estas en tiaj seriozaj problemoj. 140 00:06:45,420 --> 00:06:48,600 Fakte, liaj CEO, Martin Winterkorn, nur paŝis malsupren. 141 00:06:48,600 --> 00:06:49,820 >> Do kio okazas nun? 142 00:06:49,820 --> 00:06:53,900 Nu, se vi estas unu el la duono milionoj dizela Jettas, Beatles, Golfs, Passats, 143 00:06:53,900 --> 00:06:56,220 aŭ Audi A3s efektivigxos, La bona novaĵo estas estas 144 00:06:56,220 --> 00:06:57,886 ke via aŭto estas ankoraŭ sekuraj funkciigi. 145 00:06:57,886 --> 00:07:00,510 Vi ne devas meti ĝin for ĝis Volkswagen diktas revokon. 146 00:07:00,510 --> 00:07:02,509 Sed en iu momento ili estas probable tuj havos 147 00:07:02,509 --> 00:07:04,230 ĝisdatigi la programaron en via aŭto. 148 00:07:04,230 --> 00:07:06,927 Kiam tio okazas vi eble akiri pli malmultaj mejloj por benzinujo. 149 00:07:06,927 --> 00:07:09,260 Advokatoj jam preparas ĉe klaso agado procesoj 150 00:07:09,260 --> 00:07:12,500 tiel posedantoj povus akiri kompensita ĉe iu punkto en la estonteco. 151 00:07:12,500 --> 00:07:15,832 Sed tio ne tuj okazi ajnan tempon baldaŭ. 152 00:07:15,832 --> 00:07:16,711 >> [FINO reprodukto] 153 00:07:16,711 --> 00:07:19,960 DAVID J. Malan: Do tiu fakte levas interesa granda bildo demando 154 00:07:19,960 --> 00:07:20,660 kiel protekton. 155 00:07:20,660 --> 00:07:21,160 Dekstra? 156 00:07:21,160 --> 00:07:24,300 Ni ĉiuj iPhones aŭ androides aŭ ion en niaj poŝoj plej verŝajna 157 00:07:24,300 --> 00:07:26,500 kelkan tempon aux tekkomputiloj sur nia rondiroj kiuj estas 158 00:07:26,500 --> 00:07:28,510 kurante faris programaro Apple kaj Microsoft 159 00:07:28,510 --> 00:07:30,710 kaj gxibo de aliaj kompanioj. 160 00:07:30,710 --> 00:07:34,240 Sed kiel ni scias ke kio tiuj programaro produktoj faras 161 00:07:34,240 --> 00:07:37,680 estas fakte kion tiuj kompanioj diri ili faras? 162 00:07:37,680 --> 00:07:39,610 >> Ekzemple, kiu estas al diri ke ĉiufoje kiam vi 163 00:07:39,610 --> 00:07:42,200 fari telefonvokon en via iPhone aŭ Android telefono aŭ simile, 164 00:07:42,200 --> 00:07:45,650 ke tio telefonnumero ankaŭ ne estanta uploaded al iu firmao servilo 165 00:07:45,650 --> 00:07:48,399 pro iu programo vi havas skribita, ĉu ĝi estas la mastruma 166 00:07:48,399 --> 00:07:51,070 sistemon kiel iOS aŭ Android, aŭ ĉar vi elŝutis 167 00:07:51,070 --> 00:07:53,880 iu tria partio app ke iel estas aŭskultanta 168 00:07:53,880 --> 00:07:57,120 al ĉiu vi tajpas en aŭ ĉio vi reale diras. 169 00:07:57,120 --> 00:07:59,500 Kiel vi scias ke, kiam you guys kurante Clang 170 00:07:59,500 --> 00:08:02,590 aŭ Faru al kompili via propra programaro en CS50, kiom 171 00:08:02,590 --> 00:08:06,080 ĉu vi ke CS50 propra stabo, tra la CS50 biblioteko, 172 00:08:06,080 --> 00:08:08,690 ne estis ensalutanta ĉiun string vi iam alveninta 173 00:08:08,690 --> 00:08:10,276 aŭ tutplene vi iam alveninta? 174 00:08:10,276 --> 00:08:12,900 Nu, vi certe povus rigardi ĉe la fontkodon por io 175 00:08:12,900 --> 00:08:15,233 kiel la CS50 biblioteko, vi povis rigardi la fontkodo 176 00:08:15,233 --> 00:08:18,170 por Linukso operaciumo kurante sur CS50 IDE. 177 00:08:18,170 --> 00:08:23,090 Sed miriga prezento estis redonita en 1984 178 00:08:23,090 --> 00:08:26,730 en kvitanco de la Premio Turing de Tre fama komputila sciencisto konata 179 00:08:26,730 --> 00:08:29,750 as-- nomita Ken Thompson kiu ricevis la Premio Turing kiu 180 00:08:29,750 --> 00:08:33,500 estas speco de komputila scienco La Nobelpremio, se vi volas, 181 00:08:33,500 --> 00:08:35,309 por lia laboro sur mastruma sistemo nomita 182 00:08:35,309 --> 00:08:39,039 Unikso, kiu estas tre simila en spirito al kion ni uzas kio estas Linukso. 183 00:08:39,039 --> 00:08:41,960 Kaj la demando li demandis en sia akcepto parolado, esence 184 00:08:41,960 --> 00:08:44,910 formetante la kadron por jaroj kaj jaroj de diskuto 185 00:08:44,910 --> 00:08:46,970 pri konfido kaj sekureco, estis jena. 186 00:08:46,970 --> 00:08:50,410 Ĝis kio punkto povus unu konfidon al deklaro ke program-- peco 187 00:08:50,410 --> 00:08:53,010 de software-- estas libera de Trojan ĉevaloj? 188 00:08:53,010 --> 00:08:56,500 Eble estas pli grava fidi la homoj kiuj skribis la programaron. 189 00:08:56,500 --> 00:08:58,650 >> Kaj fakte, ni ligitaj al la diskuto, ke li 190 00:08:58,650 --> 00:09:02,400 donis akceptinte ĉi premio en la 80'oj sur CS50 la paĝaro 191 00:09:02,400 --> 00:09:04,030 sub la Prelegoj paĝon por hodiaŭ. 192 00:09:04,030 --> 00:09:06,071 Pro kio vi vidos estas ke li efektive donas 193 00:09:06,071 --> 00:09:09,430 sufiĉe simpla ekzemplo de kiel eĉ tradukilo kiel Clang aŭ kio ajn 194 00:09:09,430 --> 00:09:13,950 kompililoj aliaj uzis en pasinteco, kio se enigita en la tradukilo ni 195 00:09:13,950 --> 00:09:18,190 mem estas uzanta estas iom se kondiĉo kiu esence diras, 196 00:09:18,190 --> 00:09:22,360 se vi rimarkas ke tiu kodo estas uzanta la GetString funkcio aŭ la GetInt 197 00:09:22,360 --> 00:09:26,600 funkcio, antaŭeniri kaj enmeti malantaŭa pordo aŭ Troja ĉevalo 198 00:09:26,600 --> 00:09:29,340 tia ke ke programo nun havas iuj nuloj 199 00:09:29,340 --> 00:09:30,930 kaj tiuj kiuj faras ion malican. 200 00:09:30,930 --> 00:09:33,080 Ensalutas ĉiuj viaj pulsbatoj, alŝutas ke datumoj 201 00:09:33,080 --> 00:09:35,100 al iu servilo, aŭ vere nenion. 202 00:09:35,100 --> 00:09:37,290 >> Kaj kion Ken Thompson daŭriĝas por fari per interparolado 203 00:09:37,290 --> 00:09:40,580 estas pruvi ke eĉ se vi havas aliron al la fonto 204 00:09:40,580 --> 00:09:43,794 kodo de compilador ke malice povus fari tion, 205 00:09:43,794 --> 00:09:46,210 ne gravas ĉar ekzistas tiu kokido kaj ovo 206 00:09:46,210 --> 00:09:49,500 realo de la pasinteco multaj jaroj per kompililoj 207 00:09:49,500 --> 00:09:51,960 estas uzataj por kompili sin. 208 00:09:51,960 --> 00:09:55,440 Alivorte, vojon reen kiam iu devis esti skribinta la unuan tradukilon. 209 00:09:55,440 --> 00:09:59,060 Kaj poste, iam ili ĝisdatigis kompililon ŝanĝante lia fontkodon, 210 00:09:59,060 --> 00:10:02,020 aldonante funcionalidades kaj recompiling ĝi por personoj kiel ni uzi, nu, 211 00:10:02,020 --> 00:10:04,270 ili uzas la malnovan versio de la tradukilo 212 00:10:04,270 --> 00:10:06,370 kompili la nova versio de la tradukilo. 213 00:10:06,370 --> 00:10:08,370 Kaj se vi rigardu ĉe la diskutpaĝo ke li donis, 214 00:10:08,370 --> 00:10:10,970 vi vidos ke ĉar de tiu circularidad, 215 00:10:10,970 --> 00:10:14,330 vi efektive povas havi misfunkciadojn aŭ Troja ĉevaloj enigita en softvaro 216 00:10:14,330 --> 00:10:14,990 ni uzas. 217 00:10:14,990 --> 00:10:18,010 Kaj eĉ se vi rigardas la fontkodon por tiuj programoj, 218 00:10:18,010 --> 00:10:21,550 ĝi povus eĉ esti evidenta ĉar jxonglado estas reale 219 00:10:21,550 --> 00:10:24,710 en iu malnova versio de tradukilo ke ekde estis 220 00:10:24,710 --> 00:10:27,340 injekti la minaco en nia programaro. 221 00:10:27,340 --> 00:10:29,740 >> Kiu estas nur por diri, ni vere ne povas kaj ne devus 222 00:10:29,740 --> 00:10:32,939 konfido programaro kurante sur niaj tekkomputiloj aŭ telefonoj aŭ ajna nombro da lokoj. 223 00:10:32,939 --> 00:10:36,230 Kaj fakte, poste en ĉi semestro kiam ni komencu paroli pri ttt programado 224 00:10:36,230 --> 00:10:38,521 kaj fakte komenci konstrui aplikoj retejo mem, 225 00:10:38,521 --> 00:10:40,285 ni parolos pri tiuj minacoj kaj aliaj. 226 00:10:40,285 --> 00:10:43,410 Nun, vi eble scivolus kaj rimarkis ke ekzistis eta Darth 227 00:10:43,410 --> 00:10:45,842 Vader en la klipoj kiuj La Rando estis montrante tie 228 00:10:45,842 --> 00:10:47,550 pri Volkswagen. Se vi neniam vidis, mi 229 00:10:47,550 --> 00:10:49,190 pensis ke ni devus malpligrandigi la humoro ĉar tiu estas ĉiuj 230 00:10:49,190 --> 00:10:50,780 tre deprimente kaj timiga. 231 00:10:50,780 --> 00:10:52,910 Mi tuj retrorigardas ĉe Super Bowl 2011 232 00:10:52,910 --> 00:10:55,300 kiam komerca per Volkswagen-- kaj ĉi 233 00:10:55,300 --> 00:10:59,620 preskaŭ faras ilin ŝatinda again-- elsendiĝis unuafoje en televido. 234 00:10:59,620 --> 00:11:04,039 Ĝi estas la 60 dua tranĉeto ke mi opinias ke vi ĝuos. 235 00:11:04,039 --> 00:11:04,705 [VIDEO reprodukto] 236 00:11:04,705 --> 00:11:08,198 [MUZIKO - TEMO DE "Star Wars"] 237 00:11:08,198 --> 00:11:35,643 238 00:11:35,643 --> 00:11:38,138 [HUNDO Barks] 239 00:11:38,138 --> 00:11:50,114 240 00:11:50,114 --> 00:11:53,607 [CAR startas] 241 00:11:53,607 --> 00:12:04,086 242 00:12:04,086 --> 00:12:05,955 [FINO reprodukto] 243 00:12:05,955 --> 00:12:06,830 DAVID J. Malan: Yeah. 244 00:12:06,830 --> 00:12:07,663 Mi ĵus kontrolanta. 245 00:12:07,663 --> 00:12:11,360 Ke aŭto estas sur la listo de seksperfortadoj. 246 00:12:11,360 --> 00:12:12,000 Bone. 247 00:12:12,000 --> 00:12:14,040 Do ni rigardu kelkajn _Pseudocode_ antaŭ momento. 248 00:12:14,040 --> 00:12:15,380 Kaj jen granda fragmento de _pseudocode_ kodo 249 00:12:15,380 --> 00:12:16,921 ke ni vidis kelkajn fojojn tiom. 250 00:12:16,921 --> 00:12:19,970 Kaj ni uzas ĉi estas ŝanco nun enkonduki novan programado 251 00:12:19,970 --> 00:12:23,776 tekniko ke ni faris vidi algorítmicamente 252 00:12:23,776 --> 00:12:25,400 lasta semajno, kiam ni rigardis merge varon. 253 00:12:25,400 --> 00:12:28,270 Sed ni formaligi gxin kaj vidu kiel Ni povus uzi ĝin en reala kodo, 254 00:12:28,270 --> 00:12:30,350 kaj tiam ni tuj uzi ĉi teknikon laŭ la vojo plej 255 00:12:30,350 --> 00:12:32,000 verŝajna solvi kelkajn aliajn problemojn. 256 00:12:32,000 --> 00:12:35,790 >> Do tiu estis unu el la unuaj programoj ni iam skribis, kvankam en _pseudocode_ kodon. 257 00:12:35,790 --> 00:12:37,790 Kaj kio ĉi programo permesis al ni fari kurson 258 00:12:37,790 --> 00:12:41,510 estis trovi Mike Smith en telefono libro. 259 00:12:41,510 --> 00:12:46,216 Kaj rimarku precipe linioj ok kaj 11 kiu havis tion iru al deklaro. 260 00:12:46,216 --> 00:12:48,090 Kaj fakte, iuj lingvoj, C inter ili, 261 00:12:48,090 --> 00:12:50,006 fakte ja havas aserto ke estas laŭvorte 262 00:12:50,006 --> 00:12:52,710 iri al kiu permesas salti al specifa linio. 263 00:12:52,710 --> 00:12:55,470 Ĝi estas ĝenerale malaprobita ĉar ĝi povas tre facile trouzita 264 00:12:55,470 --> 00:12:58,490 kaj vi povas komenci salti vian programo tuta loko kontraste 265 00:12:58,490 --> 00:13:00,690 uzi la specon de logiko kaj la kontrolo de fluo 266 00:13:00,690 --> 00:13:04,000 ke ni uzis ĝis nun kun nur maŝojn kaj kondiĉoj kaj similaj. 267 00:13:04,000 --> 00:13:08,660 >> Sed ni povas simpligi ĉi tiu algoritmo en _pseudocode_ kodon jene. 268 00:13:08,660 --> 00:13:11,250 Anstataŭ ĉi ripeta aŭ looping alproksimiĝo 269 00:13:11,250 --> 00:13:14,160 kie ni daǔre revenanta kaj tien kaj reen al linio tri, 270 00:13:14,160 --> 00:13:18,300 kial ni ne nur speco de Punt kaj pli ĝenerale diras en linio sep kaj 10, 271 00:13:18,300 --> 00:13:20,570 nur anstataŭi tiujn du paroj de linioj kun, 272 00:13:20,570 --> 00:13:22,810 alie se Smith estas pli frua en la libro ni 273 00:13:22,810 --> 00:13:25,110 serĉi Mike en la maldekstra duono de la libro. 274 00:13:25,110 --> 00:13:28,560 Else se Smith estas poste en la libro, serĉi Mike en la dekstra 275 00:13:28,560 --> 00:13:29,540 duonon de la libro. 276 00:13:29,540 --> 00:13:31,180 Kaj rimarki jam la circularidad. 277 00:13:31,180 --> 00:13:31,680 Dekstra? 278 00:13:31,680 --> 00:13:34,250 Mi sercxas Mike en la telefono libro kaj poste 279 00:13:34,250 --> 00:13:37,090 Mi finfine atingis eble linio sep aŭ eble linion 10 280 00:13:37,090 --> 00:13:41,089 kaj mia instruado al mi mem estas serĉo Mike en duono de la telefono libro. 281 00:13:41,089 --> 00:13:42,380 Nu, kiel mi serĉu por Mike? 282 00:13:42,380 --> 00:13:44,213 Mi estas en la mezo de serĉanta Mike, kial 283 00:13:44,213 --> 00:13:45,860 vi ian forpelas min en cirklo? 284 00:13:45,860 --> 00:13:49,590 Sed tio estas bone ĉar kio estas okazante al la grandeco de la problemo, 285 00:13:49,590 --> 00:13:52,630 kiel skribite en la linio 7 kaj 10? 286 00:13:52,630 --> 00:13:54,989 Ni ne nur diras serĉo Mike, serĉu por Mike. 287 00:13:54,989 --> 00:13:56,280 Ni specife dirante kion? 288 00:13:56,280 --> 00:13:58,694 289 00:13:58,694 --> 00:14:01,610 Serĉi en la maldekstra duono de la dekstra duono kiu estas efike 290 00:14:01,610 --> 00:14:03,440 duono de la grandeco de la problemo. 291 00:14:03,440 --> 00:14:07,170 Do ĝi estas BONE ke ni estas speco de okupiĝado ĉi circularidad, 292 00:14:07,170 --> 00:14:09,180 tiu cirkla argumento, ĉar almenaŭ ni estas 293 00:14:09,180 --> 00:14:11,090 farante la problemo pli kaj pli malgranda. 294 00:14:11,090 --> 00:14:14,220 Kaj fine ni tuj atingos ke tn baza kazo kie 295 00:14:14,220 --> 00:14:16,780 ni havas nur unu paĝo left-- kiel nia volontulo pasintsemajne 296 00:14:16,780 --> 00:14:18,684 did-- ni havis unu paĝo maldekstra kaj tiam ni ne 297 00:14:18,684 --> 00:14:21,600 devas teni serĉanta Mike Smith ĉar li estas ĉu sur tiu paĝo 298 00:14:21,600 --> 00:14:23,080 aŭ li ne estas. 299 00:14:23,080 --> 00:14:27,480 >> Do kiel ni povas apliki tiun ideon, tiun ia circularidad en reala kodo? 300 00:14:27,480 --> 00:14:31,030 Nu, ni povas utiligi teknikon kiu estas ĝenerale konata kiel rekursio. 301 00:14:31,030 --> 00:14:33,960 Kaj ni vidis tion en la _pseudocode_ por merge varo pasintsemajne. 302 00:14:33,960 --> 00:14:37,190 Memoru ke ĉi tiu estis la _pseudocode_ por merge varon. 303 00:14:37,190 --> 00:14:40,560 Estas defendeble ech pli simpla ol bobelo aŭ selektado aŭ inserción varo 304 00:14:40,560 --> 00:14:43,310 nur en terminoj de la simpleco kun kiu vi povas esprimi ĝi. 305 00:14:43,310 --> 00:14:46,750 >> Sed tio estas ĉar ni estas speco de cirkle 306 00:14:46,750 --> 00:14:51,350 dirante, serĉi ion per serĉanta ĝin denove. 307 00:14:51,350 --> 00:14:53,960 Sed ni sercxas ĉu sur la maldekstra duono aŭ la dekstra duono 308 00:14:53,960 --> 00:14:56,070 kaj tiam fine ni estas kunfando en tiu kazo. 309 00:14:56,070 --> 00:14:58,520 Sed ankaŭ tie ĉi, kun tiuj du speco linioj, 310 00:14:58,520 --> 00:15:01,320 ni denove havos tiun ideo de rekursio. 311 00:15:01,320 --> 00:15:05,350 Kaj konkrete kion tio signifas, en la kunteksto de algoritmo, 312 00:15:05,350 --> 00:15:10,880 estas ke algoritmo estas rekursia se ĝi uzas aŭ nomas sin. 313 00:15:10,880 --> 00:15:14,330 >> Aŭ en terminoj de C, funkcio estas recursive-- funkcio nomita 314 00:15:14,330 --> 00:15:18,510 umo estas rekursia, se foo, ie en lia fontkodon, 315 00:15:18,510 --> 00:15:21,250 vokas la funkcio foo mem. 316 00:15:21,250 --> 00:15:25,790 Kaj tio estas malbona, se ĉiu umo iam faras estas voki mem denove kaj denove. 317 00:15:25,790 --> 00:15:30,600 Estas bone se foo finfine haltas, kiel faras kunfandi speco, dirante, atendu minuton, 318 00:15:30,600 --> 00:15:32,980 se tiu problemo estas súper malgrandajn, ekzemple, 319 00:15:32,980 --> 00:15:35,840 aŭ mi renkontis tiun, kiun mi serĉas, simple reveni. 320 00:15:35,840 --> 00:15:41,000 Ne rekursie, do ne cikle nomi min denove. 321 00:15:41,000 --> 00:15:44,200 >> Kaj do ni preni rigardi kiel tiu povus fakte funkcii. 322 00:15:44,200 --> 00:15:48,430 Do mi tuj iros antaŭen kaj malfermi supren du fontkodo ekzemplojn ĉi tie. 323 00:15:48,430 --> 00:15:50,321 Unu el kiu estas nomita sigma 0. 324 00:15:50,321 --> 00:15:52,320 Kaj tio estas tute ne rekursie, sed ni prenu 325 00:15:52,320 --> 00:15:53,694 Rigardu kion tiu programo faras. 326 00:15:53,694 --> 00:15:55,737 Mi senvestigis ĉiujn komentoj de ĝi sed ĉiuj 327 00:15:55,737 --> 00:15:58,070 de la fontkodo sur CS50 retejo havas komentojn se vi 328 00:15:58,070 --> 00:15:59,570 volas legi tra ĝi denove poste. 329 00:15:59,570 --> 00:16:02,010 Kaj ni faru paro de prudento kontrolas tie. 330 00:16:02,010 --> 00:16:06,640 >> Do ĉe la supro de ĉi tiu kodo, ni havos inkludas cs50.h. 331 00:16:06,640 --> 00:16:07,650 Kion tio do? 332 00:16:07,650 --> 00:16:08,990 Kial estas tie? 333 00:16:08,990 --> 00:16:11,740 En racia laiko La terminoj. 334 00:16:11,740 --> 00:16:12,424 Kion ĝi faras? 335 00:16:12,424 --> 00:16:12,858 Yeah. 336 00:16:12,858 --> 00:16:14,160 >> Publiko: Por ke GetInt funkcion laboras. 337 00:16:14,160 --> 00:16:16,243 >> DAVID J. Malan: Do tiu la GetInt funkcion laboras. 338 00:16:16,243 --> 00:16:18,115 Ĉar ene de tiu dosiero, CS50.h, kiu 339 00:16:18,115 --> 00:16:20,950 ni vidos post nelonge en Kondiĉoj de sia fontkodo, 340 00:16:20,950 --> 00:16:23,270 havas aron da funkcioj declared-- GetInt, GetString, 341 00:16:23,270 --> 00:16:26,950 kaj faskon da others-- kaj krom se ni fakte havas tiun Inkluzivi linio, 342 00:16:26,950 --> 00:16:29,320 la kompililo Clang estas ne tuj scias ke ĝi ekzistas. 343 00:16:29,320 --> 00:16:32,400 Kaj sama iras por linio du kie int estas difinita 344 00:16:32,400 --> 00:16:35,101 printf, kiu estas funkcio ni plu uzi tre iom. 345 00:16:35,101 --> 00:16:37,850 Nun, linio kvar ŝajnas iom funky ĉar estas nur unu liner. 346 00:16:37,850 --> 00:16:41,570 Oni alvenis punktokomo, neniu krispa krampoj, neniu kodo ene de ĝi. 347 00:16:41,570 --> 00:16:44,640 Sed kion ni nomas tion en semajnoj pasinteco? 348 00:16:44,640 --> 00:16:45,140 Yeah. 349 00:16:45,140 --> 00:16:46,060 Do prototipo. 350 00:16:46,060 --> 00:16:48,390 Kaj kial ni havas prototipo kiu ŝajnas 351 00:16:48,390 --> 00:16:51,050 esti iom redundaj tipe ĉar ni kutime 352 00:16:51,050 --> 00:16:53,474 vidi la funkcion denove poste en la arkivon, dekstra? 353 00:16:53,474 --> 00:16:56,390 Do kial ni have-- vi estas nur gratante la kapon sed mi prenos ĝin. 354 00:16:56,390 --> 00:16:57,302 Yeah. 355 00:16:57,302 --> 00:17:00,000 >> Spektantaro: [inaudible] funkcio post la ĉefa. 356 00:17:00,000 --> 00:17:01,000 DAVID J. Malan: Ĝuste. 357 00:17:01,000 --> 00:17:04,089 Por ke la tradukilo scias vin eventuale difini aŭ efektivigi 358 00:17:04,089 --> 00:17:06,579 domadministranto post ĉefa, supozeble. 359 00:17:06,579 --> 00:17:08,462 Do Clang kaj plej tradukiloj estas speco de mutaj 360 00:17:08,462 --> 00:17:10,510 kaj ili diros nur scias kion vi diros al ili. 361 00:17:10,510 --> 00:17:12,569 Kaj se vi volas uzi funkcio nomita sigma, 362 00:17:12,569 --> 00:17:15,710 vi pli bone instrui la tradukilo ke ekzistas anticipe. 363 00:17:15,710 --> 00:17:17,970 >> Nun, ĉefa mem, eĉ kvankam ĝi estas aro de linioj, 364 00:17:17,970 --> 00:17:19,839 Estas bela familiara espereble de nun. 365 00:17:19,839 --> 00:17:21,942 Oni alvenis al fari dum buklo kies celo en la vivo 366 00:17:21,942 --> 00:17:24,400 tie ŝajne estas akiri pozitiva entjero de la uzanto. 367 00:17:24,400 --> 00:17:27,349 Kaj simple observu tedante lin aŭ ŝi ĝis ili kunlaboru. 368 00:17:27,349 --> 00:17:30,670 Tiam en linio 16 Mi havas interesan alvokon. 369 00:17:30,670 --> 00:17:31,570 IntAnswer. 370 00:17:31,570 --> 00:17:33,710 Kiu maldekstre flanko donas min int 371 00:17:33,710 --> 00:17:36,650 kiu povas store-- nomita Answer-- kiu iras al stoki, ŝajne, 372 00:17:36,650 --> 00:17:39,090 la reveno valoro de sigmo. 373 00:17:39,090 --> 00:17:41,840 Do sigma estas nur arbitra sed signifoplena nomo 374 00:17:41,840 --> 00:17:44,500 ke mi donis al funkcio kies celo en la vivo 375 00:17:44,500 --> 00:17:47,680 prenos unu argument-- ni nomas ĝin N en ĉi case-- 376 00:17:47,680 --> 00:17:52,280 kaj simple preni la sumo de tiu nombro plus ĉiu pozitiva nombro tio 377 00:17:52,280 --> 00:17:53,200 pli malgranda ol ĝi. 378 00:17:53,200 --> 00:17:58,140 >> Do se mi pasas en la numero 2 al sigma, mi volas aldoni 2 plus 1 379 00:17:58,140 --> 00:18:00,240 plus 0-- ne 0-- tiel ke donas min 3. 380 00:18:00,240 --> 00:18:05,320 Se mi pasas en 3 al sigma, mi volas havas 3 plus 2 plus 1, kiu donas al mi 6. 381 00:18:05,320 --> 00:18:05,900 Kaj tiel plu. 382 00:18:05,900 --> 00:18:09,750 Do ĝi nur aldonas la tutan nombroj malpli ol aŭ egala al ĝi. 383 00:18:09,750 --> 00:18:12,040 >> Nun, cxi tie mi simple tuj presi la respondo. 384 00:18:12,040 --> 00:18:17,330 Do kiel rapida prudento ĉeko, ni fari sigma 0-- dot oblikvo sigma 0-- 385 00:18:17,330 --> 00:18:18,690 kaj mi entajpas 2. 386 00:18:18,690 --> 00:18:19,960 Kaj mi ja ricevas 3. 387 00:18:19,960 --> 00:18:21,240 Lasu min tajpi en 3. 388 00:18:21,240 --> 00:18:22,860 Mi ja akiras 6. 389 00:18:22,860 --> 00:18:27,636 Kaj se iu povas fari la math rapide, se mi faras 50 kion mi ricevis? 390 00:18:27,636 --> 00:18:29,839 >> Spektantaro: [inaudible]. 391 00:18:29,839 --> 00:18:30,880 DAVID J. Malan: Bone, ne. 392 00:18:30,880 --> 00:18:33,340 Sed 1,275 kiu estas sufiĉe proksima. 393 00:18:33,340 --> 00:18:38,850 Do tiu estas la rezulto de fari 50 plus 49 plus 48 plus 47 plus 46 394 00:18:38,850 --> 00:18:40,349 tuta vojo malsupren al 1. 395 00:18:40,349 --> 00:18:41,390 Do jen ĉio sigma faras. 396 00:18:41,390 --> 00:18:43,350 Sed ni vidu kiel ni havas implementado ĝin nun. 397 00:18:43,350 --> 00:18:45,790 Do cxi tie estas la funkcio mem. 398 00:18:45,790 --> 00:18:49,000 Kaj ĉi tiu ne ŝajnas havi iel koncernas rekursio ankoraŭ. 399 00:18:49,000 --> 00:18:51,070 Fakte, ni estas uzanta malnova lernejo tekniko. 400 00:18:51,070 --> 00:18:56,680 Mi inicialización variablon nomita sumo al nulo, tiam mi havas foreloop tie, 401 00:18:56,680 --> 00:19:00,790 kaj mi deklarante int vokis Mi, fiksante ĝin egala al 1-- 402 00:19:00,790 --> 00:19:04,080 kvankam mi povus instali ĝin egala al nulo, sed ekde mi faras krome, 403 00:19:04,080 --> 00:19:05,340 Kiu zorgas se ĝi estas nulo aŭ unu. 404 00:19:05,340 --> 00:19:06,660 Ĝi tuj ne havas efekton. 405 00:19:06,660 --> 00:19:10,110 >> Do mi ripetanta tiel longe kiel mi estas malpli ol aŭ egala al m, kiu 406 00:19:10,110 --> 00:19:11,671 estas la argumento kiu estis pasita en. 407 00:19:11,671 --> 00:19:13,670 Kaj tiam mi daŭre pliigante I. Kaj enrigardo 408 00:19:13,670 --> 00:19:20,010 de la buklo ĉiuj mi faras estas faranta sum plus egalas I. Kaj tio estas intenca. 409 00:19:20,010 --> 00:19:22,326 Mi ne volas fari, en tiu kazo, kiel sumo plus alpago. 410 00:19:22,326 --> 00:19:24,790 Mi volas reale aldonu la nunan valoro de mi 411 00:19:24,790 --> 00:19:28,190 kiu tenas akiranta pli kaj pli grandaj kaj pli granda al la kurado kalkulrezulto. 412 00:19:28,190 --> 00:19:30,210 >> Kaj tiam mi revenos sumo. 413 00:19:30,210 --> 00:19:33,850 Kaj do respondo ricevas la valoron sumo. 414 00:19:33,850 --> 00:19:35,282 Kaj tiam mi presas ĝin. 415 00:19:35,282 --> 00:19:37,740 Do ekzistas ŝanco tie, kvankam, por ia simpligi 416 00:19:37,740 --> 00:19:41,260 tiun kodon koncepte kaj la speco de bato onia 417 00:19:41,260 --> 00:19:43,250 gravas en terminoj de la simpleco kvankam 418 00:19:43,250 --> 00:19:45,700 prenas tempon por ordigi de estimi kial ĉi 419 00:19:45,700 --> 00:19:47,330 estas potenca en tiuj malgrandaj ekzemploj. 420 00:19:47,330 --> 00:19:50,380 Jen sigma one-- tiel la dua versio de tiu kodo. 421 00:19:50,380 --> 00:19:55,290 Ĉio supren supro estas identaj tiel tiu sama rakonto validas kiel antaŭe. 422 00:19:55,290 --> 00:19:59,220 Sed nun ni rigardu la efektivigo de sigma kiu 423 00:19:59,220 --> 00:20:05,040 Mi ĉizis malsupren al nur tiuj lines-- kvar linioj de kodo, vere, 424 00:20:05,040 --> 00:20:06,980 plus kelkaj krispaj krampoj kaj blanka spaco. 425 00:20:06,980 --> 00:20:07,930 >> Sed kion mi faras? 426 00:20:07,930 --> 00:20:11,050 Se m estas malpli ol aŭ egala al nulo, Mi bezonas specon de manipuli 427 00:20:11,050 --> 00:20:12,490 ke super simpla kazo. 428 00:20:12,490 --> 00:20:15,450 Kaj se vi transdonos min nulo aŭ ion negativa kiu estas nur stranga, 429 00:20:15,450 --> 00:20:17,909 Mi simple tuj arbitre sed konsekvence reveni nula. 430 00:20:17,909 --> 00:20:20,200 Mi ne volas tion al enir iuj strangaj senfina 431 00:20:20,200 --> 00:20:21,810 buklo pro negativa valoro. 432 00:20:21,810 --> 00:20:25,070 Do mi nur diras, se vi donos al mi nul aŭ malpli, mi reveni nula. 433 00:20:25,070 --> 00:20:28,220 >> Sed tio estas bona ĉar tio estas ke unuopa paĝo de la telefono libro 434 00:20:28,220 --> 00:20:28,790 la restaĵo. 435 00:20:28,790 --> 00:20:32,660 Mi mordi ekstere tre specifa problemo kaj ne nomante ion rekursie. 436 00:20:32,660 --> 00:20:36,580 Sed en linio 31, kio mi ŝajnas esti faranta? 437 00:20:36,580 --> 00:20:39,780 La parentezoj estas nur tenanta aferojn, espereble, iom pli klara. 438 00:20:39,780 --> 00:20:42,110 Sed ĉiuj mi faras estas mi reveninte m-- ajn 439 00:20:42,110 --> 00:20:45,790 vi transdonu kunulinon plus la valoro de m-- bedaŭras, 440 00:20:45,790 --> 00:20:49,052 plus la valoro de sigmo de m minus 1. 441 00:20:49,052 --> 00:20:50,010 Do kio faras ĉi tiun mezumon? 442 00:20:50,010 --> 00:20:53,965 Se vi donos al mi la numeron 3 kiel enigo, la respondo mi volas akiri finfine 443 00:20:53,965 --> 00:20:57,307 estas 6 ĉar 3 plus 2 plus 1 donas min 6. 444 00:20:57,307 --> 00:20:59,390 Sed kiel mi pensas pri kiamaniere tiu kodo kuras? 445 00:20:59,390 --> 00:21:03,070 La unuan fojon mi nomas sigma kaj mi pasas en la valoro 3, 446 00:21:03,070 --> 00:21:07,960 ke estas kiel diri sur peco da papero, jen la valoron 3 447 00:21:07,960 --> 00:21:09,920 kaj Mi estis pasita ĉi kiel sigma. 448 00:21:09,920 --> 00:21:13,090 3 estas evidente ne malpli ol 0 por la IF kondiĉo ne validas. 449 00:21:13,090 --> 00:21:14,020 La alia faras. 450 00:21:14,020 --> 00:21:14,990 Do kion mi faru? 451 00:21:14,990 --> 00:21:19,902 Mi volas reveni m, kio estas 3, plus sigma de m minus 1. 452 00:21:19,902 --> 00:21:21,110 Do lasu min sekvigi ĉi. 453 00:21:21,110 --> 00:21:22,710 Mi tuj metos ĉi paperfolion malsupren. 454 00:21:22,710 --> 00:21:24,668 Kaj kio valoro, esti klara, mi tuj pasos 455 00:21:24,668 --> 00:21:26,540 en sigma ĉe tiu punkto en la rakonto? 456 00:21:26,540 --> 00:21:28,080 Kio numeron? 457 00:21:28,080 --> 00:21:28,610 2, ĉu ne? 458 00:21:28,610 --> 00:21:29,670 3 minus 1 estas 2. 459 00:21:29,670 --> 00:21:32,000 Do mi simple bezonas iom peceto de papero tie. 460 00:21:32,000 --> 00:21:33,931 Do nun sigma estas akiranta reprovis. 461 00:21:33,931 --> 00:21:35,930 Kaj mi intence metis tiun malsupren ĉar ĝi estas 462 00:21:35,930 --> 00:21:38,070 ia kiel paŭzante ke versio de la rakonto 463 00:21:38,070 --> 00:21:40,720 ĉar nun mi estas enfokusigita sur signalo de m minus 1. 464 00:21:40,720 --> 00:21:42,660 Do m estis 3, m minus 1 estas 2. 465 00:21:42,660 --> 00:21:45,110 Do tie estas 2 ke mi estis pasita. 466 00:21:45,110 --> 00:21:48,510 2 estas evidente ne malpli ol 0 do tiukaze ne aplikeblas. 467 00:21:48,510 --> 00:21:53,445 Alie mi revenos m, kio estas tiu aferon, plus sigma de kio valoro? 468 00:21:53,445 --> 00:21:56,160 469 00:21:56,160 --> 00:21:59,650 Do se sigma de 1-- ĉar m estas nun 2 do 2 minus 1 estas 1. 470 00:21:59,650 --> 00:22:01,950 Do nun mi havas nur la valoro 1. 471 00:22:01,950 --> 00:22:04,810 Mi pasante ĵus la nombro 1 por la funkcio sigma-- 472 00:22:04,810 --> 00:22:09,120 aŭ mi here-- tiel 1 estas evidente ne malpli ol nulo, ankoraŭ ne aplikeblas. 473 00:22:09,120 --> 00:22:12,970 >> Else reveno 1 plus sigma de kio? 474 00:22:12,970 --> 00:22:13,470 0. 475 00:22:13,470 --> 00:22:14,678 Do mi simple memoras tion. 476 00:22:14,678 --> 00:22:15,920 Mi reiros al tio poste. 477 00:22:15,920 --> 00:22:18,060 Nun mi tuj iros antaŭen kaj joto malsupren la numeron 0 ĉar tio estas 478 00:22:18,060 --> 00:22:19,470 mia argumento aŭ parametro. 479 00:22:19,470 --> 00:22:22,400 Mi pasis la nombro 0 kaj fine tiu procezo 480 00:22:22,400 --> 00:22:25,760 de ĵus ripetante mem ad nauseum does militantoj kio 481 00:22:25,760 --> 00:22:28,820 mi tuj faros iam mi vidu tiun 0? 482 00:22:28,820 --> 00:22:29,790 Mi revenos nulo. 483 00:22:29,790 --> 00:22:31,790 Do nun vi devas malantaŭenigi la rakonton. 484 00:22:31,790 --> 00:22:34,430 >> Se mi nun iras malantaŭen en tempo, kio estis la plej lastatempa afero 485 00:22:34,430 --> 00:22:36,670 Mi faris se vi estis laŭvorte malantaŭeniganta video? 486 00:22:36,670 --> 00:22:41,630 Mi tuj reprenos la plej lastatempaj 1 kaj kiu donas al mi 1 plus 0 estas 1. 487 00:22:41,630 --> 00:22:44,100 Se mi tenas malantaŭeniganta la rakonto, kiu tuj donos al mi 488 00:22:44,100 --> 00:22:46,880 2 pli ĉi kuranta valoro, kiu estas 1. 489 00:22:46,880 --> 00:22:47,789 Do jen 3. 490 00:22:47,789 --> 00:22:49,330 Kaj tiam mi tuj teni Rewinding. 491 00:22:49,330 --> 00:22:54,220 Kiam mi unue metis malsupren la nombron 3-- do 3 plus 3 donas min 6. 492 00:22:54,220 --> 00:22:57,272 >> Kaj nun, se vi jam rewound la video supren ĝis tiu punkto, 493 00:22:57,272 --> 00:22:58,980 tiu estis la tre unua demando mi demandis. 494 00:22:58,980 --> 00:23:01,450 Kiam pasis 3, kio estas sigmo de 3? 495 00:23:01,450 --> 00:23:04,204 Estas ja 6, la sumo de ĉiuj tiuj pecoj de papero. 496 00:23:04,204 --> 00:23:07,120 Do se tio prenas iom da tempo por envolver vian menson ĉirkaŭe, ke estas bone. 497 00:23:07,120 --> 00:23:10,700 Sed konsideru estis little-- ĝi estis tre intencaj ke mi stakigita 498 00:23:10,700 --> 00:23:12,990 tiuj nombroj sur supro de unu la alian. 499 00:23:12,990 --> 00:23:17,440 Estas speco de kiel havi memory-- rekordon en tempo, 500 00:23:17,440 --> 00:23:19,940 kiel scrubber en video, ke mi ja povas malantaŭenigi en. 501 00:23:19,940 --> 00:23:24,350 Kaj ni tuj revenos al ke metaforo en nur iomete. 502 00:23:24,350 --> 00:23:28,240 >> Sed unue, ĝi rezultas ke ekzistas multaj geeks kaj stranguloj, 503 00:23:28,240 --> 00:23:29,614 Mi supozas, ĉe Google. 504 00:23:29,614 --> 00:23:31,530 Ĉu iu kiu estas tre bona ĉe Googling menso 505 00:23:31,530 --> 00:23:34,270 venante supren por nur momento kaj helpi min serĉi ion? 506 00:23:34,270 --> 00:23:35,650 Tre, tre malalta ŝlosilo. 507 00:23:35,650 --> 00:23:37,870 Iu kiu estas neniam supreniru antaŭe, eble. 508 00:23:37,870 --> 00:23:38,370 BONE. 509 00:23:38,370 --> 00:23:39,030 Yeah? 510 00:23:39,030 --> 00:23:39,530 Venu. 511 00:23:39,530 --> 00:23:41,410 Venu malsupren. 512 00:23:41,410 --> 00:23:42,183 Kio estas via nomo? 513 00:23:42,183 --> 00:23:42,870 >> Sam: Sam. 514 00:23:42,870 --> 00:23:44,290 >> DAVID J. Malan: Sam, venu malsupren. 515 00:23:44,290 --> 00:23:45,320 Tiu estas sama. 516 00:23:45,320 --> 00:23:46,280 Agrable renkonti vin. 517 00:23:46,280 --> 00:23:46,780 Hej. 518 00:23:46,780 --> 00:23:47,580 Venu super. 519 00:23:47,580 --> 00:23:51,290 Do ĉiuj mi bezonas vin fari, se vi povis, Sam, jen Google. 520 00:23:51,290 --> 00:23:53,240 Ĉu vi povas serĉi por la termino rekursio? 521 00:23:53,240 --> 00:23:55,770 522 00:23:55,770 --> 00:23:56,270 Ne difektu. 523 00:23:56,270 --> 00:23:59,940 524 00:23:59,940 --> 00:24:00,970 >> Kaj nun let's-- yeah. 525 00:24:00,970 --> 00:24:03,380 OK Klaku tio. 526 00:24:03,380 --> 00:24:04,315 Better klaku tio. 527 00:24:04,315 --> 00:24:07,020 528 00:24:07,020 --> 00:24:08,020 Ahh, ricevas ĝin. 529 00:24:08,020 --> 00:24:08,520 Neniu? 530 00:24:08,520 --> 00:24:09,050 BONE. 531 00:24:09,050 --> 00:24:10,430 Do ni faru kelkajn aliajn. 532 00:24:10,430 --> 00:24:12,830 Ne tiel rilatajn akademie tie, sed ĉu vi 533 00:24:12,830 --> 00:24:14,520 iam traserĉis Google por anagramo? 534 00:24:14,520 --> 00:24:15,280 >> SAM: No. 535 00:24:15,280 --> 00:24:15,520 >> DAVID J. Malan: Bone. 536 00:24:15,520 --> 00:24:17,186 Serĉi anagramo anstataŭ rekursio. 537 00:24:17,186 --> 00:24:22,540 538 00:24:22,540 --> 00:24:23,790 Kion pri malrekta. 539 00:24:23,790 --> 00:24:25,515 Vi iam serĉis malrekta? 540 00:24:25,515 --> 00:24:29,260 541 00:24:29,260 --> 00:24:32,692 Nun, ĉi tiu estas iom malfacile vidi sed espereble everything's-- OK. 542 00:24:32,692 --> 00:24:34,150 Estas nur vi kaj mi ĝuas tion. 543 00:24:34,150 --> 00:24:34,690 BONE. 544 00:24:34,690 --> 00:24:38,950 >> Do fine, ĉi one's-- ĝi estas iom malrekta. 545 00:24:38,950 --> 00:24:40,810 Nun faru barelo rulo. 546 00:24:40,810 --> 00:24:44,460 547 00:24:44,460 --> 00:24:45,310 Mirinda. 548 00:24:45,310 --> 00:24:45,910 Bone. 549 00:24:45,910 --> 00:24:47,110 Grandan dankon al Sam. 550 00:24:47,110 --> 00:24:49,416 Jen. 551 00:24:49,416 --> 00:24:50,400 Dankon. 552 00:24:50,400 --> 00:24:52,807 >> Do kio okazas en ĉiuj de tiuj ridindaj ekzemploj? 553 00:24:52,807 --> 00:24:55,640 Do vere, sub la kapuĉo de Google milionoj de linioj de kodo 554 00:24:55,640 --> 00:24:58,860 ŝajne estas kelkaj stulta IF kondiĉoj kiuj estas esence 555 00:24:58,860 --> 00:25:01,160 kontrolanta se la uzanto havas tajpita en ĉi tiu frazo, 556 00:25:01,160 --> 00:25:03,760 fari iun kiu verŝajne prenis netriviala kvanto de tempo 557 00:25:03,760 --> 00:25:06,080 implementar nur al esti amuzaj tiamaniere. 558 00:25:06,080 --> 00:25:08,430 Sed jen ĉio bolas malsupren al sub la kapuĉo. 559 00:25:08,430 --> 00:25:11,570 Sed, kompreneble, rekursio Estas pli de la geekier 560 00:25:11,570 --> 00:25:13,880 Ekzemple inter tiuj specialaj lertaĵoj. 561 00:25:13,880 --> 00:25:16,880 Kaj certe ekzistas aliaj tie tiel ke ni eble eĉ ne 562 00:25:16,880 --> 00:25:18,230 malkovris ĵus ankoraŭ. 563 00:25:18,230 --> 00:25:22,830 >> Do rigardu, aŭ konsideri nun la jena programo, 564 00:25:22,830 --> 00:25:24,830 kaj certe ekpreni ajnan de tiuj sur vian vojon ekstere. 565 00:25:24,830 --> 00:25:28,820 Mi tuj iros antaŭen kaj malfermi programon tio 566 00:25:28,820 --> 00:25:30,920 provos interŝanĝi du valoroj. 567 00:25:30,920 --> 00:25:33,210 Sed antaŭ ol ni iras tien, ni faru tion. 568 00:25:33,210 --> 00:25:38,500 Ni povus preni pli volontulo, mi pensas? 569 00:25:38,500 --> 00:25:40,480 Ĉu vi ŝatus volontuli? 570 00:25:40,480 --> 00:25:40,980 Neniu? 571 00:25:40,980 --> 00:25:41,890 Venu supren. 572 00:25:41,890 --> 00:25:42,390 Venu supren. 573 00:25:42,390 --> 00:25:42,890 Bone. 574 00:25:42,890 --> 00:25:44,136 Do via nomo estas kio? 575 00:25:44,136 --> 00:25:44,810 >> Lauren Lauren. 576 00:25:44,810 --> 00:25:45,768 >> DAVID J. Malan: Lauren. 577 00:25:45,768 --> 00:25:46,890 Venu supren, Lauren. 578 00:25:46,890 --> 00:25:50,140 Do Lauren estas estanta defiita tie jene. 579 00:25:50,140 --> 00:25:52,310 Agrable renkonti vin. 580 00:25:52,310 --> 00:25:55,730 Do Lauren tie havas antaŭ de ŝi du malplenaj tasoj. 581 00:25:55,730 --> 00:25:57,570 Kaj ni havas kelkajn oranĝo suko kaj lakton 582 00:25:57,570 --> 00:26:00,301 kaj ni tuj iru antaŭen kaj fari la sekvan. 583 00:26:00,301 --> 00:26:01,550 Ni nur tuj plenigos ĉi. 584 00:26:01,550 --> 00:26:07,840 Kelkaj gramoj da lakto tien por ke la plenigi iom oranĝsuko super tie. 585 00:26:07,840 --> 00:26:11,475 >> Kaj antaŭ ĉiuj tiuj aŭskultantoj, 586 00:26:11,475 --> 00:26:13,550 interŝanĝi la du valoroj de tiuj tasoj. 587 00:26:13,550 --> 00:26:16,970 Metu la oranĝa suko en la lakto taso kaj la lakto en la oranĝa suko taso. 588 00:26:16,970 --> 00:26:22,380 589 00:26:22,380 --> 00:26:26,150 Kiel vi farus tion se vi estis hejmo kaj havis aliron al aliaj provizoj? 590 00:26:26,150 --> 00:26:27,400 Lauren: Metu ĝin en alian tason. 591 00:26:27,400 --> 00:26:28,191 DAVID J. Malan: Bone. 592 00:26:28,191 --> 00:26:31,940 Do ni havas portempan variablo, se ni volas. 593 00:26:31,940 --> 00:26:35,871 Kaj iri antaŭen nun kaj efektivigi tiu sama swapping proceduro. 594 00:26:35,871 --> 00:26:36,370 Tiel bona. 595 00:26:36,370 --> 00:26:41,490 Ni metis OJ en la portempa variablo, lakton en la OJ ŝanĝiĝema, 596 00:26:41,490 --> 00:26:44,481 kaj nun la provizora variablo en la lakto variablo. 597 00:26:44,481 --> 00:26:44,980 BONE. 598 00:26:44,980 --> 00:26:48,740 Do tre bone farita ĝis nun. 599 00:26:48,740 --> 00:26:50,990 Do rezultas fjordon teni ke pensis por nur momento. 600 00:26:50,990 --> 00:26:54,479 Ĉi tie, je justaj geek ĝin iom, tiu estus la responda kodo C 601 00:26:54,479 --> 00:26:55,520 ke ni ĵus efektivigita. 602 00:26:55,520 --> 00:26:58,650 Ni havis du enigoj, a kaj b, ambaŭ kiun ni nur diros por simpleco estas 603 00:26:58,650 --> 00:26:59,260 int a. 604 00:26:59,260 --> 00:27:02,780 Kaj rimarki tie, se mi volas interŝanĝi la valoroj de du variabloj, a kaj b, 605 00:27:02,780 --> 00:27:06,890 ni ja bezonas peranto, oni provizora variablo, portempa taso, 606 00:27:06,890 --> 00:27:10,830 en kiun la versxu unu el la valoroj tiel ke ni havas lokokupilo por ĝi. 607 00:27:10,830 --> 00:27:13,480 Sed tiam la kodo precize kiel Lauren tie implementado. 608 00:27:13,480 --> 00:27:15,500 >> Nun, nur por akiri iom pli freneza, rezultas 609 00:27:15,500 --> 00:27:20,930 ke vi povas fari tion sen portempa variablo. 610 00:27:20,930 --> 00:27:24,870 Por fari tion adekvate, kvankam, ni tuj havi trompi kun iuj kemio. 611 00:27:24,870 --> 00:27:26,380 Ni havas iuj ekstra tasoj tie. 612 00:27:26,380 --> 00:27:29,600 Do la plej proksima afero kiu aspektas kiel lakto kaj akvo perhaps-- 613 00:27:29,600 --> 00:27:34,090 aŭ lakto kaj OJ-- estas ni havas iun akvo, do ni plenigas tiun unu supren 614 00:27:34,090 --> 00:27:36,486 kun kelkaj uncoj de klara akvo. 615 00:27:36,486 --> 00:27:38,332 Tio probable tro multe. 616 00:27:38,332 --> 00:27:38,832 Yeah. 617 00:27:38,832 --> 00:27:39,934 Tio certe tro multe. 618 00:27:39,934 --> 00:27:40,600 Atendu unu sek. 619 00:27:40,600 --> 00:27:43,520 620 00:27:43,520 --> 00:27:48,420 >> Kaj nun ni havas oleo, kiu, kiel mi memoras de meza lernejo kemio klaso, 621 00:27:48,420 --> 00:27:49,990 espereble ne miksi kun akvo. 622 00:27:49,990 --> 00:27:53,650 Sed speco de ia aspektas kiel lakto kaj OJ. 623 00:27:53,650 --> 00:27:55,760 Do nun, sen uzi provizora variablo, 624 00:27:55,760 --> 00:27:59,260 vi povas interŝanĝi tiujn du valoroj? 625 00:27:59,260 --> 00:28:03,884 Do oleoj iras en la akvon taso, akvo iras en la oleo taso. 626 00:28:03,884 --> 00:28:04,800 Lauren: Neniu alia tasoj? 627 00:28:04,800 --> 00:28:05,940 DAVID J. Malan: Neniu alia tasoj. 628 00:28:05,940 --> 00:28:07,860 Kaj mi havas ne reale testis ĉi antaŭe ĉi tiu jaro 629 00:28:07,860 --> 00:28:10,110 do mi ne scias se tiu volas reale funkcias kemie. 630 00:28:10,110 --> 00:28:16,130 631 00:28:16,130 --> 00:28:18,650 Kiu ne estis supozita okazi. 632 00:28:18,650 --> 00:28:19,761 Ĉu funkcias? 633 00:28:19,761 --> 00:28:20,260 Bone. 634 00:28:20,260 --> 00:28:20,990 Do disigi? 635 00:28:20,990 --> 00:28:21,490 Bona. 636 00:28:21,490 --> 00:28:24,714 Nun ni alvenis al akiri la akvo en la alian tason. 637 00:28:24,714 --> 00:28:27,630 Smarter kemio concentradores povis probable fari tion pli bone ol mi. 638 00:28:27,630 --> 00:28:28,510 >> Lauren: La akvo estas sur la fundo. 639 00:28:28,510 --> 00:28:31,910 >> DAVID J. Malan: La akvo; kiu estis kio estas ŝlosila la lasta tempo ni faris ĉi. 640 00:28:31,910 --> 00:28:33,950 Vi devi fari ĝin en la dekstra ordo. 641 00:28:33,950 --> 00:28:34,450 Yeah. 642 00:28:34,450 --> 00:28:35,270 Estas bone. 643 00:28:35,270 --> 00:28:37,290 Do nun ni havas du tasoj da oleo. 644 00:28:37,290 --> 00:28:37,790 BONE. 645 00:28:37,790 --> 00:28:38,510 Estas bone. 646 00:28:38,510 --> 00:28:40,110 Sed kemie se tiu laboris ol I-- 647 00:28:40,110 --> 00:28:41,200 >> Lauren: tio estas akvo. 648 00:28:41,200 --> 00:28:41,930 >> DAVID J. Malan: Tio plejparte akvo. 649 00:28:41,930 --> 00:28:42,430 Bone. 650 00:28:42,430 --> 00:28:44,210 Sed tio estas ankoraŭ la sama kiel antaŭ taso. 651 00:28:44,210 --> 00:28:47,570 Do pour it-- provi ĝin tien. 652 00:28:47,570 --> 00:28:49,300 BONE. 653 00:28:49,300 --> 00:28:51,010 Tio estas bona uzo de klaso tempon hodiaŭ. 654 00:28:51,010 --> 00:28:51,510 BONE. 655 00:28:51,510 --> 00:28:53,890 Do nun we-- bela. 656 00:28:53,890 --> 00:28:55,460 Ia. 657 00:28:55,460 --> 00:28:55,960 Bone. 658 00:28:55,960 --> 00:28:56,690 Do tre bone. 659 00:28:56,690 --> 00:29:00,006 Dankon al Lauren. 660 00:29:00,006 --> 00:29:01,950 Tre bone farita. 661 00:29:01,950 --> 00:29:04,570 >> Do simple por forblovi mensoj, kaj tio estas eble io 662 00:29:04,570 --> 00:29:08,660 ludi kun se vi ŝatas en CS50 ID, vi povas, fakte, interŝanĝi du variabloj 663 00:29:08,660 --> 00:29:11,470 sen uzi temporal entjera. 664 00:29:11,470 --> 00:29:13,060 Kaj estas la responda C kodo. 665 00:29:13,060 --> 00:29:16,110 Kaj se vi memoras de lasta Merkredo, ni enkondukis, se mallonge, 666 00:29:16,110 --> 00:29:19,720 iuj novaj operatoroj en C. Kaj faras iu memoras kion diris la malgranda karoto 667 00:29:19,720 --> 00:29:23,660 simbolo estas, ke iom triangula simbolo de la klavaro reprezentas? 668 00:29:23,660 --> 00:29:26,003 Kio bitlarĝa operatoro? 669 00:29:26,003 --> 00:29:26,770 >> Publiko: EXOR. 670 00:29:26,770 --> 00:29:27,645 >> DAVID J. Malan: EXOR. 671 00:29:27,645 --> 00:29:28,560 Ekskluziva Aŭ. 672 00:29:28,560 --> 00:29:32,920 Do se vi volas, nur por amuzo ĉe hejmo, doni kaj b du arbitraj 673 00:29:32,920 --> 00:29:36,072 valorolisto ajna eight-- kaj mi elektus ok bita valoro. 674 00:29:36,072 --> 00:29:38,530 Se vi fari tion ĉi kun 32 bitoj, vi tre rapide enuiĝos. 675 00:29:38,530 --> 00:29:42,150 Sed nur doni ok iom valoron tio ajn, unu aŭ du, 676 00:29:42,150 --> 00:29:43,790 kaj donu b similan valoron. 677 00:29:43,790 --> 00:29:46,810 Kaj tiam uzanta la difino de XOR de lasta merkredo, 678 00:29:46,810 --> 00:29:52,560 Apliki ke iom post iom, ĉiu el tiuj ok pecoj en ĉiu de a kaj b, 679 00:29:52,560 --> 00:29:54,980 kaj poste fari ĝin ĝuste por tiu kodo. 680 00:29:54,980 --> 00:29:58,170 Kaj ĝi ne estas malĝusta kion vi vidas tie sur la ekrano. 681 00:29:58,170 --> 00:30:02,100 Ĝi ja abscesoj malsupren al tri XOR operacioj 682 00:30:02,100 --> 00:30:05,910 kaj iel magie a kaj b interŝanĝos pozicioj 683 00:30:05,910 --> 00:30:08,010 sen perdi iun informon. 684 00:30:08,010 --> 00:30:11,580 >> Do la oleo kaj akvo lertaĵo estas la proksima reala mondo enkarniĝo 685 00:30:11,580 --> 00:30:12,980 Mi povus elpensi imiti tion. 686 00:30:12,980 --> 00:30:15,950 Sed estas certe pli facile uzi portempa variablo, 687 00:30:15,950 --> 00:30:16,920 kiel en ĉi tiu kazo tie. 688 00:30:16,920 --> 00:30:21,190 Kaj ĉi tro estas ŝanco diri, tro, tiu speco de mikro optimumigo, 689 00:30:21,190 --> 00:30:23,590 por komputila sciencisto dirus, dum ia amuza 690 00:30:23,590 --> 00:30:27,060 fanfaroni pri kiel vi faris tion sen kiel interŝanĝante kun ekstra ŝanĝiĝema, 691 00:30:27,060 --> 00:30:28,640 ĝi estas ne ĉiuj, ke konvinka. 692 00:30:28,640 --> 00:30:31,619 Ĉar por ŝpari 32 bitoj, kiel en la kazo de reala int, 693 00:30:31,619 --> 00:30:33,410 ne estas ĉiuj kiuj deviganta sur sistemo kie 694 00:30:33,410 --> 00:30:36,722 vi povus uzi dekojn da megabajtoj aŭ eĉ pli tia memoro tiujn tagojn. 695 00:30:36,722 --> 00:30:38,680 Kaj fakte, kiam ni atingos al posta problemo aro 696 00:30:38,680 --> 00:30:41,010 kaj vi apliki sorĉon kontrolilo kaj vi 697 00:30:41,010 --> 00:30:43,550 esti defiita tiel fari kun tiu kiel iom RAM kaj tiom malmulte 698 00:30:43,550 --> 00:30:46,820 tempo kiel eble sur la computer-- vi ankoraŭ 699 00:30:46,820 --> 00:30:50,160 havas semajnon implementar it-- vi have-- vi estos 700 00:30:50,160 --> 00:30:51,799 defiita minimumigi tiujn rimedojn. 701 00:30:51,799 --> 00:30:53,840 Kaj tio estas vere la sola okazo ĉi semestro 702 00:30:53,840 --> 00:30:57,940 kie vi estos kuraĝigitaj razi malproksime eĉ la plej bona elfaro 703 00:30:57,940 --> 00:30:59,340 kostas alie. 704 00:30:59,340 --> 00:31:02,200 >> Do what-- kiel ni vidi tion en reala kodo? 705 00:31:02,200 --> 00:31:04,530 Lasu min nun kaj malfermu ekzemplo 706 00:31:04,530 --> 00:31:07,700 ke intence nomiĝas Neniu Swap ĉar ĝi ne 707 00:31:07,700 --> 00:31:10,670 fakte interŝanĝu la variabloj kiel vi efektive povus atendi. 708 00:31:10,670 --> 00:31:12,260 Do ni rigardu. 709 00:31:12,260 --> 00:31:17,050 Jen programo kiu ne havas CS50 biblioteko okazadas, nur normo / S. 710 00:31:17,050 --> 00:31:19,560 Nun ni havas prototipon por interŝanĝa supren supro kiu ĵus 711 00:31:19,560 --> 00:31:21,540 signifas ĝi estas alvenis al esti difinita poste. 712 00:31:21,540 --> 00:31:22,550 Kaj jen ĉefa. 713 00:31:22,550 --> 00:31:26,000 >> Mi arbitre atribuita x kaj y, respektive, la valoroj kaj du 714 00:31:26,000 --> 00:31:28,590 nur ĉar ili estas malgrandaj kaj facile pensi pri. 715 00:31:28,590 --> 00:31:32,280 Kaj tiam mi simple havas faskon de printfs kie mi havas prudento ĉeko. x estas 1 716 00:31:32,280 --> 00:31:35,110 kaj y estas 2 estas supozeble kio tiuj printfs diros. 717 00:31:35,110 --> 00:31:36,530 Do neniu magio tiom. 718 00:31:36,530 --> 00:31:40,100 >> Tiam mi tuj aserti kun presi def, interŝanĝante dot dot dot. 719 00:31:40,100 --> 00:31:43,730 Mi tuj vokos la interŝanĝa funkcio, pasante en x kaj y. 720 00:31:43,730 --> 00:31:47,350 Kaj ni supozu por nun ke interŝanĝa estas implementado ĝuste 721 00:31:47,350 --> 00:31:49,930 kiel ĝi estis antaŭ momento kun portempa variablo. 722 00:31:49,930 --> 00:31:52,670 Kaj tial mi postulas sentime interŝanĝitaj. 723 00:31:52,670 --> 00:31:55,429 x estas nun tiu kaj y estas nun. 724 00:31:55,429 --> 00:31:57,220 Sed la dosiero, kompreneble, nomiĝas Neniu Swap. 725 00:31:57,220 --> 00:31:58,678 Do ni vere vidi kion okazas. 726 00:31:58,678 --> 00:32:04,450 Se mi kompilos neniu swap kaj tiam fari ./noswap, x estas 1, y estas 2. 727 00:32:04,450 --> 00:32:05,770 Interŝanĝante interŝanĝitaj. 728 00:32:05,770 --> 00:32:07,200 x estas 1, y estas 2. 729 00:32:07,200 --> 00:32:11,980 Do ĝi vere ŝajnas esti mankhava eĉ kvankam swap-- ni rulumu malsupren now-- 730 00:32:11,980 --> 00:32:16,542 estas implementado ĝuste po la kodo mi proponis antaŭ momento. 731 00:32:16,542 --> 00:32:19,000 Do ni ne ricevos imago kun la XOR ajxojn nun. 732 00:32:19,000 --> 00:32:21,890 Ĉi tio, ankaŭ, devus labori nur kiel kun la lakto kaj OJ, 733 00:32:21,890 --> 00:32:25,820 sed ne ŝajnas esti laborante. 734 00:32:25,820 --> 00:32:27,180 >> Do ni faru ĉi denove. 735 00:32:27,180 --> 00:32:29,310 Eble mi simple ne kurante ĝin dekstra. 736 00:32:29,310 --> 00:32:32,010 Do ni kuras Neniu Swap denove. 737 00:32:32,010 --> 00:32:32,900 Eble I-- ne. 738 00:32:32,900 --> 00:32:34,400 Do ĝi estas nur ne laboranta. 739 00:32:34,400 --> 00:32:36,060 Do ni faru iom prudento ĉeko. 740 00:32:36,060 --> 00:32:39,690 Lasu min ĉi tie en Swap kaj nur aldoni, atendu minuton, 741 00:32:39,690 --> 00:32:43,856 a estas% i / n kaj ni plug-in la valoro de. 742 00:32:43,856 --> 00:32:45,730 Ĉar mi vere volas vidi kio okazas. 743 00:32:45,730 --> 00:32:47,570 Kaj efektive, tiu estas a elpuriganta tekniko 744 00:32:47,570 --> 00:32:50,028 ke vi povus uzi en oficejo horoj aŭ hejme jam, 745 00:32:50,028 --> 00:32:53,560 parenca al la unua duono de Dan Armendáriz video en PSET3 746 00:32:53,560 --> 00:32:56,870 kiun ni enkondukis presaĵo def kiel rekomendita tekniko, almenaŭ 747 00:32:56,870 --> 00:32:58,080 por simplaj kazoj. 748 00:32:58,080 --> 00:33:01,720 Lasu min antaŭeniri kaj kuri fari neniu interŝanĝa denove, ./noswap. 749 00:33:01,720 --> 00:33:04,370 750 00:33:04,370 --> 00:33:05,840 >> Interesaj. 751 00:33:05,840 --> 00:33:11,670 Do rimarki kio ŝajnas esti vera. x estas 1, y estas 2, sed estas 2 kiam b estas 1. 752 00:33:11,670 --> 00:33:16,790 Do tiuj du iel interŝanĝita sed x kaj y ne akiranta interŝanĝitaj. 753 00:33:16,790 --> 00:33:21,090 Do esti klara, kio okazas estas, ĝis tie mi havas x kaj y 754 00:33:21,090 --> 00:33:25,380 kaj tiuj estas variabloj lokaj en la medio de ĉefa, mi pasante en x kaj y 755 00:33:25,380 --> 00:33:26,170 interŝanĝi. 756 00:33:26,170 --> 00:33:29,080 Nun, swap, kiel aparta funkcio, estas libera nomi sian argumentadon 757 00:33:29,080 --> 00:33:30,590 aŭ liaj parametroj ion ajn. 758 00:33:30,590 --> 00:33:33,280 Foo aŭ trinkejo aŭ x aŭ y aŭ aŭ b. 759 00:33:33,280 --> 00:33:36,870 Nur fari certe ke ili estas ne identa al x kaj y per, 760 00:33:36,870 --> 00:33:38,020 Mi jam diris al kaj b. 761 00:33:38,020 --> 00:33:40,040 Sed ni povus nomi ilin ion ni volas. 762 00:33:40,040 --> 00:33:43,960 >> Kaj tiel ĝi aspektas kiel interŝanĝa estas aprobotaj 763 00:33:43,960 --> 00:33:48,980 x-- AKA a-- kaj ĝi estas aprobotaj y-- AKA b. 764 00:33:48,980 --> 00:33:51,900 Iel tiuj tri linioj estas interŝanĝante tiujn valorojn ĝuste 765 00:33:51,900 --> 00:33:53,510 kiel Lauren faris kun la lakto kaj OJ. 766 00:33:53,510 --> 00:33:56,010 Sed kiam ni presi la valoroj, a kaj b 767 00:33:56,010 --> 00:34:01,340 ja interŝanĝu sed x kaj y havas neniun ŝanĝon al ili. 768 00:34:01,340 --> 00:34:03,150 Memoru ke x kaj y estas supren tie. 769 00:34:03,150 --> 00:34:05,320 >> Do ni povas vidi ĉi tra alian teknikon ankaŭ. 770 00:34:05,320 --> 00:34:08,110 Kaj ĉi tro estas tekniko enigita en problemo starigis tri. 771 00:34:08,110 --> 00:34:10,780 Ni iru antaŭen kaj fari tion en CS50 ID se vi ne jam. 772 00:34:10,780 --> 00:34:13,730 Sur la dekstra flanko ni havas ĉi sencimigilo langeto. 773 00:34:13,730 --> 00:34:16,159 Kaj se vi malfermos ĉi supre, ekzistas kelkaj arkaikaj informojn 774 00:34:16,159 --> 00:34:17,530 kiu estas ĵetita ĉe vi komence. 775 00:34:17,530 --> 00:34:19,310 Sed ni turmentus ĉi dise reala rapida. 776 00:34:19,310 --> 00:34:21,620 >> Do, vi vidos lokaj variabloj. 777 00:34:21,620 --> 00:34:26,230 Rezultas ke konstrui en CS50 IDE, kaj multajn programado medioj pli 778 00:34:26,230 --> 00:34:28,060 ĝenerale, estas erarserĉilo. 779 00:34:28,060 --> 00:34:31,340 Ilo kiu permesas vide vidi kio okazas ene de via programo 780 00:34:31,340 --> 00:34:34,380 sen devi recurrir al aldono printfs kaj kompilante kaj kurado 781 00:34:34,380 --> 00:34:37,588 kaj aldonante printf aj kaj kompilante kaj kurante, kiu jam, en oficejo horoj 782 00:34:37,588 --> 00:34:40,070 aŭ hejmo, estas probable ricevas belajn teda. 783 00:34:40,070 --> 00:34:43,090 >> Do jen, en nur momente, ke ni estas tuj vidi en reala tempo 784 00:34:43,090 --> 00:34:44,760 la valoroj de nia loka variabloj. 785 00:34:44,760 --> 00:34:47,880 Ni ankaŭ tuj povos agordi kio estas nomitaj breakpoints kiu 786 00:34:47,880 --> 00:34:52,570 estas ŝancoj en mia programo paŭzi ekzekuto je specifa linio de kodo 787 00:34:52,570 --> 00:34:53,710 ke mi estas scivolema pri. 788 00:34:53,710 --> 00:34:54,210 Dekstra? 789 00:34:54,210 --> 00:34:55,969 Tiuj programoj funkcias en ono de sekundo. 790 00:34:55,969 --> 00:35:00,450 Estas ia bela por ni malrapidaj homoj povi paŭzi, preni momenton, vidu 791 00:35:00,450 --> 00:35:02,380 kio okazas ĉirkaŭ certan linion de kodo 792 00:35:02,380 --> 00:35:05,050 sen la programo plugado tra ĝi kaj finante tute. 793 00:35:05,050 --> 00:35:08,510 Do breakpoints tuj permesos nin rompi kaj paŭzo je certa punkto. 794 00:35:08,510 --> 00:35:12,990 >> Voko stako estas ornama metodo dirante kion funkcioj estas aktuale 795 00:35:12,990 --> 00:35:14,140 vokite nuntempe. 796 00:35:14,140 --> 00:35:15,370 Ĉefa ĉiam nomis unue. 797 00:35:15,370 --> 00:35:17,230 Sed se Ĉefa vokas funkcio nomita Swap, 798 00:35:17,230 --> 00:35:20,470 ni vere tuj vidos ĉi turo de funkcioj kiuj estis 799 00:35:20,470 --> 00:35:22,400 nomita en inversa kronologia ordo. 800 00:35:22,400 --> 00:35:23,310 Do ni vidas ke. 801 00:35:23,310 --> 00:35:24,327 >> Mi tuj malzomi. 802 00:35:24,327 --> 00:35:25,660 Mi tuj iros reen al mia kodo. 803 00:35:25,660 --> 00:35:27,540 Kaj ĝuste ĉar mi volas esti pedanta tie, 804 00:35:27,540 --> 00:35:31,100 Mi tuj iros antaŭen kaj klaku nur maldekstren de linio kvin. 805 00:35:31,100 --> 00:35:32,830 Kaj tio kreas ruĝa punkto. 806 00:35:32,830 --> 00:35:36,200 Kaj rimarki sur la dekstra flanko ke la erarserĉilo scias, hej, 807 00:35:36,200 --> 00:35:41,020 Mi nur diris al Haltpunkto ĉe noswap.c linio kvin, specife 808 00:35:41,020 --> 00:35:42,480 ĉe ĉi tiu linio de kodo. 809 00:35:42,480 --> 00:35:45,090 Do la erarserĉilo scias ke mi petis ke la venontan fojon 810 00:35:45,090 --> 00:35:48,530 Mi kuros mia programo paŭzo ekzekuto tie anstataŭ nur 811 00:35:48,530 --> 00:35:50,390 kurante la tutan aferon super rapida. 812 00:35:50,390 --> 00:35:53,889 >> Do nun mi tuj klaku la Debug butono ĉe la plejsupro de la IDE 813 00:35:53,889 --> 00:35:55,430 kaj tio tuj fari la sekvajn. 814 00:35:55,430 --> 00:36:00,680 Ĝi tuj malfermi komence iom timiga rigardanta dua terminalo window-- 815 00:36:00,680 --> 00:36:02,679 fora depuración de gastigi tian kaj such-- 816 00:36:02,679 --> 00:36:04,970 kaj ni revenos al kio ĉiuj kiuj signifas antaŭ longe. 817 00:36:04,970 --> 00:36:09,020 Sed kio estas grava de momento estas ke tiu ruĝa punkto estis trafita, 818 00:36:09,020 --> 00:36:11,735 la erarserĉilo havas intence paŭzis execution-- 819 00:36:11,735 --> 00:36:15,560 ne sur tiu linio si mem sed sur la unuan linio de reala kodo en tiu funkcio. 820 00:36:15,560 --> 00:36:18,040 Kaj jen kial linio sep estas nun elstarigitaj en flava. 821 00:36:18,040 --> 00:36:20,550 >> Kaj nun rigardu ĉe la dekstra flanko. 822 00:36:20,550 --> 00:36:27,300 Ŝajnas, implicite, bele sufiĉe, x havas valoron kion? 823 00:36:27,300 --> 00:36:27,860 0. 824 00:36:27,860 --> 00:36:29,750 Kaj y havas kio valoro? 825 00:36:29,750 --> 00:36:30,410 Nulo. 826 00:36:30,410 --> 00:36:35,540 Kaj tio estas de atendi en la senco ke x kaj y-- ke flava line-- havas 827 00:36:35,540 --> 00:36:36,770 Ne ekzekutita ankoraŭ. 828 00:36:36,770 --> 00:36:38,510 Do x ne havas la valoro 1. 829 00:36:38,510 --> 00:36:41,470 Ĝi povus havi iun alian valoron, tn rubo valoro. 830 00:36:41,470 --> 00:36:44,320 Kaj ni akiris bonŝanca en tio ĝi estas nulo je tiu punkto, esence. 831 00:36:44,320 --> 00:36:46,400 >> Do nun estas nur kelkaj butonoj ni bezonas zorgi 832 00:36:46,400 --> 00:36:48,100 pri kiam elpurigi tiamaniere. 833 00:36:48,100 --> 00:36:49,970 Rimarku tie, ni havas Play butonon. 834 00:36:49,970 --> 00:36:51,877 Kaj se ni ludas aŭ bati rekomenci, tio estas nur 835 00:36:51,877 --> 00:36:53,710 tuj kuri tra la resto de la programo 836 00:36:53,710 --> 00:36:55,300 aŭ ĝis ĝi trafas alian Haltpunkto. 837 00:36:55,300 --> 00:36:56,910 Sed mi ne metis ajnan alian breakpoints Do estas nur 838 00:36:56,910 --> 00:36:58,118 tuj kuri tra la fino. 839 00:36:58,118 --> 00:37:00,280 Tia malvenkoj la celo ŝovas ĉirkaŭ. 840 00:37:00,280 --> 00:37:03,290 >> Do anstataŭ, mi zorgas pri tiuj ikonoj dekstre. 841 00:37:03,290 --> 00:37:05,360 Kaj se mi ŝvebi super ilin, kiel vi devus ankaŭ, 842 00:37:05,360 --> 00:37:07,450 vi vidos iom tips-- ilo konsiletoj. 843 00:37:07,450 --> 00:37:09,020 Ĉi tiu estas ne transpaŝas. 844 00:37:09,020 --> 00:37:11,290 Nun tio ne signifas skip la sekva linio de kodo. 845 00:37:11,290 --> 00:37:14,840 Tio simple signifas ekzekuti ĝin kaj movi al la sekva, movi al la venonta, 846 00:37:14,840 --> 00:37:15,580 movi al la sekva. 847 00:37:15,580 --> 00:37:17,610 Alivorte, pere ke butono mi povas marŝi 848 00:37:17,610 --> 00:37:20,390 tra mia kodo unu paŝon samtempe. 849 00:37:20,390 --> 00:37:21,914 Linio por linio, laŭvorte. 850 00:37:21,914 --> 00:37:23,830 Nun, dekstre de ke, ekzistas alia 851 00:37:23,830 --> 00:37:25,163 ke ni vidos en nur momento. 852 00:37:25,163 --> 00:37:27,820 Tio estas la tn Step Into ikono tio 853 00:37:27,820 --> 00:37:30,300 tuj permesos min plonĝo en alian funkcion. 854 00:37:30,300 --> 00:37:31,800 Sed ni vidu tion en nur momento. 855 00:37:31,800 --> 00:37:33,280 Do mi tuj klaku transpaŝas. 856 00:37:33,280 --> 00:37:35,820 Kaj nun rimarkas, kiel mi klakas tiun butonon ĉe supra dekstra, 857 00:37:35,820 --> 00:37:41,260 teni viajn okulojn malglate sub Loka Variabloj kaj vidu kio okazas al x. 858 00:37:41,260 --> 00:37:44,115 x estas nun 1 ĉar la flava linio nun ekzekutita 859 00:37:44,115 --> 00:37:45,840 kaj ni pluiris al la linio 8. 860 00:37:45,840 --> 00:37:49,840 Kaj en nur momento y devus espereble iĝi 2. 861 00:37:49,840 --> 00:37:52,330 >> Nun, nenion interesan okazas por iom. 862 00:37:52,330 --> 00:37:53,390 Ĉio ĉi estas estas printf. 863 00:37:53,390 --> 00:37:58,010 Kaj rimarku, miaj malĉefaj terminalo fenestro, mi vidas la eligo de presaĵo def. 864 00:37:58,010 --> 00:38:01,080 Kaj nun mi devas fari decido kiel la programisto. 865 00:38:01,080 --> 00:38:04,360 Mi povas transpaŝas tiun linion de kodon, ekzekuti ĝin sed ne 866 00:38:04,360 --> 00:38:06,220 atingi scivola pri kio estas ene. 867 00:38:06,220 --> 00:38:11,130 Aŭ mi povas vere treti en ĝin kaj iras ene de Swap mem. 868 00:38:11,130 --> 00:38:12,340 Do ni faru la lastan. 869 00:38:12,340 --> 00:38:15,550 >> Lasu min kaj klaku Ne Transpaŝi sed Step Into. 870 00:38:15,550 --> 00:38:17,300 Avizo, subite la fenestro ŝanĝoj 871 00:38:17,300 --> 00:38:19,330 reliefigi la unua linio de kodo en Swap. 872 00:38:19,330 --> 00:38:20,710 Tio linio 21. 873 00:38:20,710 --> 00:38:25,220 Kaj nun, kio estas speco de funky estas ke, se vi rigardas ĉi tien, kiel atendita, 874 00:38:25,220 --> 00:38:29,720 komo b estas 1 kaj 2, respektive. 875 00:38:29,720 --> 00:38:33,840 Kial temp 32.767? 876 00:38:33,840 --> 00:38:36,560 Memorigante ke temp, tre kiel la malplena taso antaŭ momento, 877 00:38:36,560 --> 00:38:38,980 estas deklarita tie sur linio 21. 878 00:38:38,980 --> 00:38:43,390 Kial 32,000- mi volas diri, kial estas ĝi nur iuj strangaj valoron? 879 00:38:43,390 --> 00:38:43,890 Yeah? 880 00:38:43,890 --> 00:38:45,190 >> Spektantaro: Ĝi ne pravalorizitaj. 881 00:38:45,190 --> 00:38:46,940 >> DAVID J. Malan: Estas ne pravalorizitaj. 882 00:38:46,940 --> 00:38:49,370 Do nia komputilo ĉiam havas fizikan memoron. 883 00:38:49,370 --> 00:38:50,544 Ĝi ĉiam havas fizikan RAM. 884 00:38:50,544 --> 00:38:52,710 Kaj ĉiam Zero kaj unu estas tie interne, ĉu ne? 885 00:38:52,710 --> 00:38:54,626 Ĉar ni uzas nian komputilo tutan tagon, 886 00:38:54,626 --> 00:38:57,210 vi uzas la CS50 IDE aŭ la serviloj tuttage. 887 00:38:57,210 --> 00:39:01,159 Por ke RAM aŭ havas iuj nuloj aŭ iuj onia aŭ iuj nuloj kaj aĵoj. 888 00:39:01,159 --> 00:39:02,950 Negrave ĉu aŭ Ne vi uzas ilin. 889 00:39:02,950 --> 00:39:05,270 Vi ne povas simple havi malplenan spacoj, kie vi volas bitoj. 890 00:39:05,270 --> 00:39:06,850 Ili estas ĉu nuloj kaj aĵoj. 891 00:39:06,850 --> 00:39:09,610 >> Do rezultas ke temp, ĉar ni ne pravalorizitaj ĝin ankoraŭ, 892 00:39:09,610 --> 00:39:14,580 ni havas tiuj 32 bitoj sed ili ne estis pravalorizitaj al ajna konata valoroj. 893 00:39:14,580 --> 00:39:18,110 Do negrave kion ili plej lastatempe uzata for-- tiuj 32 bits-- 894 00:39:18,110 --> 00:39:23,000 ni nur vidante la artefaktoj de iuj antaŭa uzo de tiuj apartaj 32 895 00:39:23,000 --> 00:39:23,500 bitojn. 896 00:39:23,500 --> 00:39:27,780 Apenaŭ mi klakas Transpaŝi kvankam, Phew, temp tuj akiri la valoron 1. 897 00:39:27,780 --> 00:39:31,600 Kaj se mi faros ĝin denove, a estas tuj estos transdonita la valoron 2 898 00:39:31,600 --> 00:39:33,830 kaj tiam b tuj estos donita la valoro 1. 899 00:39:33,830 --> 00:39:36,390 >> Kaj do kio estas bela hodiaŭ je tiu punkto en la rakonto 900 00:39:36,390 --> 00:39:39,750 estas ke la erarserĉilo estas montrante min súper malrapide 901 00:39:39,750 --> 00:39:42,640 ĉe mia propra ritmo, kio la stato de Swap estas. 902 00:39:42,640 --> 00:39:47,490 Sed rimarki ĉe la supro tie, rimarki ke la alvoko stako reale 903 00:39:47,490 --> 00:39:49,180 havas du tavolojn al ĝi. 904 00:39:49,180 --> 00:39:53,240 Nun kiu estas elstarigita kiel Swap, se mi klakas sur Ĉefa anstataŭe, 905 00:39:53,240 --> 00:39:57,100 Rimarku kiel la lokaj variabloj ŝanĝi ĉar la ellaboranto povas simple hop 906 00:39:57,100 --> 00:39:59,740 ĉirkaŭe kaj iri en ajna malsama medio. 907 00:39:59,740 --> 00:40:04,070 Do kvankam ni faras ĉion ĉi labori kaj korekte interŝanĝante a kaj b, 908 00:40:04,070 --> 00:40:09,080 se mi iras tien kaj reen inter Swap kie a estas 2 kaj b estas 1 kaj Main, 909 00:40:09,080 --> 00:40:11,851 jam Ĉefa estis trafitaj entute? 910 00:40:11,851 --> 00:40:12,350 No. 911 00:40:12,350 --> 00:40:13,930 Do kio estas la takeaway tie? 912 00:40:13,930 --> 00:40:18,200 Nu, Ĝi rezultas ke ajna momento vi nomas funkcio kiel Swap, 913 00:40:18,200 --> 00:40:21,600 kaj vi pasi ĝin argumentoj, kio vi pasas al la Swap funkcio 914 00:40:21,600 --> 00:40:24,730 en tiu kazo estas kopio de tiuj argumentoj. 915 00:40:24,730 --> 00:40:28,620 Do se x kaj y estas ĉiu respektive 32 bitoj, kio Swap fariĝas 916 00:40:28,620 --> 00:40:30,760 Estas du novaj lokaj variabloj, aŭ argumentoj, 917 00:40:30,760 --> 00:40:34,380 nomis kaj b-- sed tiuj estas arbitra names-- sed la mastro de nuloj 918 00:40:34,380 --> 00:40:39,520 kaj aĵoj ene de a kaj b estas vicigita al esti identa al x kaj y 919 00:40:39,520 --> 00:40:42,610 Sed ili ne estas la samon kiel x kaj y. 920 00:40:42,610 --> 00:40:46,880 >> Estas kvazaŭ Ĉefa havas sur lia peco de papero la nombro 1 kaj 2 por x kaj y, 921 00:40:46,880 --> 00:40:49,260 kaj tiam kiam mano tion peco de papero al Permuta, 922 00:40:49,260 --> 00:40:51,970 Permuta tre rapide ricevas lia propra plumo, skribas malsupren 923 00:40:51,970 --> 00:40:56,240 1 kaj 2 sur ĝia propra paperfolion, manoj malantaŭeniri la originalan xy al Main 924 00:40:56,240 --> 00:40:58,790 kaj tiam faras sian propran afero kun a kaj b. 925 00:40:58,790 --> 00:41:01,940 Kaj estas nun super grava ĉar tiu havas netriviala implikaĵoj 926 00:41:01,940 --> 00:41:06,260 por vere skribi korektan kodon ĉar ĝi similus ni ne povas interŝanĝi 927 00:41:06,260 --> 00:41:07,500 du variabloj. 928 00:41:07,500 --> 00:41:09,150 >> Mi skribis ĝentilan Swap funkcio. 929 00:41:09,150 --> 00:41:12,770 Ni implementado ĝin kun Lauren kiel ĝentilan interŝanĝa funkcio en realo, 930 00:41:12,770 --> 00:41:16,700 sed ŝajne neniu el kiuj aferoj se vi ne povas reale 931 00:41:16,700 --> 00:41:19,530 interŝanĝi du valoroj konstante. 932 00:41:19,530 --> 00:41:21,970 Do ni bezonas alian vojon por fakte atingi tion, 933 00:41:21,970 --> 00:41:24,472 kaj ni bezonas por povi reale solvi tiun problemon. 934 00:41:24,472 --> 00:41:27,180 Kaj ĝi rezultas fjordon kaj ni venos reen al tiu aparta bildo 935 00:41:27,180 --> 00:41:30,500 antaŭ long-- ĉi estas unu vojo, ke vi eble desegni via komputilo memoro. 936 00:41:30,500 --> 00:41:31,460 Estas nur rektangulo. 937 00:41:31,460 --> 00:41:32,960 Vi povus desegni ĝin ajnan nombro de manieroj sed estas 938 00:41:32,960 --> 00:41:35,740 konvena desegni ĝin kiel rektangulo pro jena kialo. 939 00:41:35,740 --> 00:41:40,040 >> Ni tuj komencos hodiaŭ kaj pretere parolas pri la tn pilo. 940 00:41:40,040 --> 00:41:43,870 Kaj la stako estas nur eron de RAM-- eron de memory-- 941 00:41:43,870 --> 00:41:47,100 ke funkcioj havas aliron al kiam ili estas nomata. 942 00:41:47,100 --> 00:41:49,800 Kaj tiel rezultas ke ĉe la tre malsupro de tiu pilo 943 00:41:49,800 --> 00:41:53,590 estas kie ĉiuj Ĉefa loka variabloj kaj org C kaj org V kaj ĉiuj tiu aĵo 944 00:41:53,590 --> 00:41:56,950 tuj iri defaŭlte. Kaj se Ĉefa vokas alian funkcion kiel Swap, 945 00:41:56,950 --> 00:42:00,330 bone, Swap estas iranta akiri alian tavolo de memoro super ĝi. 946 00:42:00,330 --> 00:42:04,490 >> Kaj tiel nur por doni al vi rapidan supraĵa bildo de tiu, se mi transiru here-- 947 00:42:04,490 --> 00:42:09,450 kaj mi speguli tiun sur la superkape kiel well-- kio vere mi havas, 948 00:42:09,450 --> 00:42:12,100 se ni zorgas nur pri la fundo de tiu bildo nun, 949 00:42:12,100 --> 00:42:15,070 estas ke kiam mi kuras programon kaj Main gets vokis, 950 00:42:15,070 --> 00:42:18,330 Ĉefa ricevas eron de RAM en mia komputilo kiu estas 951 00:42:18,330 --> 00:42:20,060 ĉe la malsupro de tiu tn pilo. 952 00:42:20,060 --> 00:42:22,143 Kaj mi tuj desegni ĝin intence kiel kvadrato. 953 00:42:22,143 --> 00:42:24,540 Do estas kiel 32 bitoj aŭ kvar bitokoj. 954 00:42:24,540 --> 00:42:28,790 Se tiu ĉefa funkcio havas variablo nomata x kun valoro de 1 955 00:42:28,790 --> 00:42:32,626 kaj ĝi havas variablo nomita y kun la valoro de 2, tio estas 956 00:42:32,626 --> 00:42:35,750 kiel preni ĉi Sliver de memoro kiu Ĉefa doniĝis per la mastruma 957 00:42:35,750 --> 00:42:38,850 sistemo kaj dividante ĝin supren tiel ke la unua loka variablo iras tie, 958 00:42:38,850 --> 00:42:40,930 la dua unu iras tien, kaj jen ĝi. 959 00:42:40,930 --> 00:42:45,590 >> Kiam Ĉefa nomas Swap, Swap ricevas sian propran tranĉaĵo de memoro 960 00:42:45,590 --> 00:42:48,280 ke ni desegni ŝatas tion de la mastruma sistemo, 961 00:42:48,280 --> 00:42:50,820 kaj ĝi tuj havos lia propra loka variabloj bazitaj 962 00:42:50,820 --> 00:42:53,825 sur nia pli frua efektivigo kun lokaj variabloj a 963 00:42:53,825 --> 00:42:58,010 kaj b kiuj komence akiri la valoroj 1 kaj 2. 964 00:42:58,010 --> 00:43:00,450 Sed tiam, tuj kiam la Swap kodo ekzekutas, 965 00:43:00,450 --> 00:43:03,760 kaj Lauren reale interŝanĝas la OJ kaj lakto, kio okazas? 966 00:43:03,760 --> 00:43:09,030 Nu, tiu 2 iĝas 1, ĉi 1 iĝas 2, kaj, cetere, 967 00:43:09,030 --> 00:43:13,360 estas temp variablo ke tio estas uzis tiun tutan tempon ke eventuale 968 00:43:13,360 --> 00:43:14,470 iras. 969 00:43:14,470 --> 00:43:16,720 Sed ne gravas kiom da laboro vi faras 970 00:43:16,720 --> 00:43:22,160 en tiu linio of-- en ĉi memorspaco, x kaj y estas tute netuŝita. 971 00:43:22,160 --> 00:43:26,320 >> Do ni bezonas iel donadon Swap kaj funkcioj kiel ĝi 972 00:43:26,320 --> 00:43:32,640 sekreta aliro, se vi volas, al funkcioj like-- al memoro kiel x kaj y. 973 00:43:32,640 --> 00:43:35,110 Do ni rigardu ekzemplo kiu helpas 974 00:43:35,110 --> 00:43:38,220 nin vidi ĝuste kio estas estita irante sur tiu tuta tempo. 975 00:43:38,220 --> 00:43:40,284 Mi tuj iros antaŭen kaj malfermu Komparu Nulo. 976 00:43:40,284 --> 00:43:42,200 Kaj mi tuj fermi nia erarserĉilo, mi tuj 977 00:43:42,200 --> 00:43:44,360 fermi ĉi timiga rigardanta mesaĝon la nur diras, atendu minuton, 978 00:43:44,360 --> 00:43:45,800 vi estas en la mezo elpuriganta. 979 00:43:45,800 --> 00:43:48,383 Mi tuj kaŝi tiun langeto tie nur reiri al simpleco. 980 00:43:48,383 --> 00:43:50,160 Do ne maltrankviliĝu se GDB estas mortigita. 981 00:43:50,160 --> 00:43:53,910 Tio simple signifas ke la programo havas estis rezignis, intence en tiu kazo, 982 00:43:53,910 --> 00:43:54,820 apud mi. 983 00:43:54,820 --> 00:43:57,700 >> Kaj nun Komparu Zero tion faras. 984 00:43:57,700 --> 00:44:00,110 Mi uzas la CS50 biblioteko en normo / S. 985 00:44:00,110 --> 00:44:04,319 Mi havas ĉefan funkcion kiu unua diras, ekparoli, kaj ricevas ŝnuro. 986 00:44:04,319 --> 00:44:06,110 Tiam diras ĝin denove kaj ricevas alian ĉenon. 987 00:44:06,110 --> 00:44:09,910 Kaj rimarki ke ĉi tiuj du kordoj nomas s kaj t, respektive. 988 00:44:09,910 --> 00:44:12,910 Kaj nun ĉi tiu programo, Compare Nulo, lia celo en la vivo, 989 00:44:12,910 --> 00:44:15,470 ĝi estas supozeble diru al mi, cxu mi tajpu la saman aferon? 990 00:44:15,470 --> 00:44:16,910 Kaj do mi tuj reen al semajno unu. 991 00:44:16,910 --> 00:44:19,950 Mi uzas mian egala egala operatoro kiu estas la kvalito operatoro. 992 00:44:19,950 --> 00:44:22,220 Ne la asigno operatoro, la egaleco operatoro. 993 00:44:22,220 --> 00:44:23,890 Mi simple komparante s kaj t. 994 00:44:23,890 --> 00:44:27,470 >> Do ni vere iru antaŭen kaj fari tion. 995 00:44:27,470 --> 00:44:32,680 Kaj mi tuj iros antaŭen kaj fari Komparu Nulo. 996 00:44:32,680 --> 00:44:35,110 Mi tuj faros ./comparezero. 997 00:44:35,110 --> 00:44:37,150 Kaj mi tuj iri antaŭen kaj diru ion 998 00:44:37,150 --> 00:44:43,450 kiel, ni faru panjo en minuskla kaj kion pri panjo en majuskle. 999 00:44:43,450 --> 00:44:45,034 Kaj kompreneble mi tajpas malsamaj aferoj. 1000 00:44:45,034 --> 00:44:45,533 Bone. 1001 00:44:45,533 --> 00:44:46,570 Tio atendi. 1002 00:44:46,570 --> 00:44:47,640 >> Ni ruli ĝin denove. 1003 00:44:47,640 --> 00:44:49,740 Ambaŭ fojojn fari minuskla, minuskla. 1004 00:44:49,740 --> 00:44:51,490 Tio aspektas súper identaj al mi. 1005 00:44:51,490 --> 00:44:52,930 Enter. 1006 00:44:52,930 --> 00:44:53,430 BONE. 1007 00:44:53,430 --> 00:44:55,804 Eble estas nur stranga ĉar ĝi ne ŝatante mia gramatiko. 1008 00:44:55,804 --> 00:44:59,930 Do ni faru majuskla MOM, ĉefurbo MOM, identaj. 1009 00:44:59,930 --> 00:45:01,490 Malsamaj aferoj. 1010 00:45:01,490 --> 00:45:03,907 >> Do kial estas tio? 1011 00:45:03,907 --> 00:45:06,240 Nu, kio efektive iranta sur sub la kapuĉo ĉi tie? 1012 00:45:06,240 --> 00:45:08,180 Do ni iru reen super tie por nur momento 1013 00:45:08,180 --> 00:45:10,910 kaj pripensu kion GetString fakte faras. 1014 00:45:10,910 --> 00:45:13,385 Kiam vi nomas GetString, jen funkcio ni 1015 00:45:13,385 --> 00:45:16,510 mem skribis kaj ĝi iel ricevas sekvenco de karakteroj de la uzanto. 1016 00:45:16,510 --> 00:45:20,280 Kaj ni supozu, ke la unuajn tempo mi vokas GetString, kiuj donas al mi 1017 00:45:20,280 --> 00:45:21,930 eron de memoro kiu similas ĉi. 1018 00:45:21,930 --> 00:45:26,990 Kaj se mi tajpis en ĉiuj minuskla m-o-m-- kaj kio iras post ĝi? 1019 00:45:26,990 --> 00:45:28,840 Nur rapidan prudento ĉeko. 1020 00:45:28,840 --> 00:45:29,780 >> Backslash nulo. 1021 00:45:29,780 --> 00:45:30,510 Ni scias tion. 1022 00:45:30,510 --> 00:45:32,784 Kaj memoras ke ni ludis ĉirkaŭe kun Zamila nomon 1023 00:45:32,784 --> 00:45:34,950 kaj estas multaj aliaj nomoj kiam Rob estis tie rigardante 1024 00:45:34,950 --> 00:45:36,280 ĉe kio daŭriĝas ene de memoro. 1025 00:45:36,280 --> 00:45:37,780 Por ke rakonto estas ekzakte la sama. 1026 00:45:37,780 --> 00:45:40,160 Jen kion GetString estas reveni al mi. 1027 00:45:40,160 --> 00:45:44,780 Nun, mia kodo antaŭ momento stokitaj la reveno valoro de GetString 1028 00:45:44,780 --> 00:45:47,510 en variablo nomita s. 1029 00:45:47,510 --> 00:45:51,390 Kaj tiam la dua tempo mi nomis ĝin, ĝi gardis ŝin en variablo nomas t. 1030 00:45:51,390 --> 00:45:55,070 >> Do, se mi iros tien, mi bezonas desegni ĉi lokaj variable-- 1031 00:45:55,070 --> 00:45:59,610 kaj mi ĝenerale iranta tiri ŝnuron kiel just-- ni 1032 00:45:59,610 --> 00:46:02,360 nomas ĝin s-- kiel kvadrateto tie. 1033 00:46:02,360 --> 00:46:09,760 Nun somehow-- kiel faras panjo iri ene de tiu variablo s? 1034 00:46:09,760 --> 00:46:12,010 Nu, ni devas iri reen al unuaj principoj tie. 1035 00:46:12,010 --> 00:46:15,660 Kio GetString vere reveni? 1036 00:46:15,660 --> 00:46:19,030 >> Do rezultas ke M-Aŭ-M backslash nulo, kaj ajna nombro 1037 00:46:19,030 --> 00:46:22,364 de aliaj kordoj en memoro kiel Zamila kaj Rob aŭ Andy aŭ ajna aliaj, 1038 00:46:22,364 --> 00:46:24,280 estas kompreneble en nia komputilo RAM aŭ memoro. 1039 00:46:24,280 --> 00:46:27,760 Kaj via memoro RAM havas like-- vi havas koncerton de RAM, du koncertoj de RAM, 1040 00:46:27,760 --> 00:46:30,860 aŭ miliardo aux du miliardoj bajtoj, aŭ eble eĉ pli ĉi tiuj tagoj. 1041 00:46:30,860 --> 00:46:34,070 Do ni supozu, por hodiaŭa celoj, ke ne gravas kiom ni kalkuli 1042 00:46:34,070 --> 00:46:36,640 ilin, sed ni povos kalkuli ĉiun de tiuj miliardoj aŭ du miliardoj 1043 00:46:36,640 --> 00:46:37,880 aŭ kvar miliardoj bajtoj. 1044 00:46:37,880 --> 00:46:42,240 >> Kaj ni nur arbitre diras ke tiu estas la unua mordo, dua mordo, 1045 00:46:42,240 --> 00:46:43,380 tria, kvara. 1046 00:46:43,380 --> 00:46:46,570 Mi intence ne uzante nulo por hodiaŭ sed ni revenos al tio. 1047 00:46:46,570 --> 00:46:49,570 Do alivorte, se tiu estas la tre unua tempo mi uzas la programon, 1048 00:46:49,570 --> 00:46:52,715 Mi nur nun bonŝanca kaj la unua mordo estas ĉe situo unu tiam du 1049 00:46:52,715 --> 00:46:53,590 tiam tri ol kvar. 1050 00:46:53,590 --> 00:46:57,430 Kaj se mi daŭre desegnado, skatolo nombro du miliardoj estus maniero super tie. 1051 00:46:57,430 --> 00:47:02,200 >> Do kio vi do pensas, GetString vere revenas? 1052 00:47:02,200 --> 00:47:06,010 Ĝi ne reveni M-Aŭ-M backslash nulo per si ĉar tio klare 1053 00:47:06,010 --> 00:47:08,180 ne taŭgas en la skatolo ke mi desegnis. 1054 00:47:08,180 --> 00:47:11,210 Do kion alian povus GetString reale revenanta ĉiuj tiuj semajnoj? 1055 00:47:11,210 --> 00:47:14,410 1056 00:47:14,410 --> 00:47:16,820 La respondo estas en la tabulo tie ie. 1057 00:47:16,820 --> 00:47:20,390 Vi ne povas persvadi M-Aŭ-M backslash nulo, do kion povus fari senton anstataŭe? 1058 00:47:20,390 --> 00:47:23,424 Se vi devis esti super inteligenta, metante sur la tn inĝenierio ĉapelon, 1059 00:47:23,424 --> 00:47:24,340 kion vi povus reveni? 1060 00:47:24,340 --> 00:47:27,340 Kio estas la malplej kvanto de informo vi povus reveni kiuj volus ankoraŭ 1061 00:47:27,340 --> 00:47:30,610 lasu vi trovas M-Aŭ-M en memoro? 1062 00:47:30,610 --> 00:47:31,270 Yeah? 1063 00:47:31,270 --> 00:47:31,950 >> Publiko: Unu. 1064 00:47:31,950 --> 00:47:32,200 >> DAVID J. Malan: Unu. 1065 00:47:32,200 --> 00:47:33,021 Kaj kial unu? 1066 00:47:33,021 --> 00:47:35,520 Publiko: Ĉar ĝi rakontus vi kien iri [inaudible]. 1067 00:47:35,520 --> 00:47:38,391 1068 00:47:38,391 --> 00:47:39,390 DAVID J. Malan: Ĝuste. 1069 00:47:39,390 --> 00:47:44,300 Mi nur tuj revenos la adreso de la kordo ke Mi akiris. 1070 00:47:44,300 --> 00:47:46,570 La adreson en tiu kazo estas loko unu. 1071 00:47:46,570 --> 00:47:51,280 Do kio vere estas stokitaj en s-- kaj ĉiun ĉenon variablo tiel far-- 1072 00:47:51,280 --> 00:47:53,430 ĵus estis la adreso de tiu ĉeno. 1073 00:47:53,430 --> 00:47:57,840 >> Dume, se mi nomas GetString duafoje kaj mi 1074 00:47:57,840 --> 00:48:03,300 entajpi laŭvorte la sama thing-- M-Aŭ-M kun lowercase-- M-Aŭ-M 1075 00:48:03,300 --> 00:48:06,200 kaj alia backslash nulo, kaj nun eble mia programo 1076 00:48:06,200 --> 00:48:09,820 kuris por iu tempo do eble tiu Estas 10, tio estas loko 11, tio estas 12, 1077 00:48:09,820 --> 00:48:10,700 ĉi estas 13. 1078 00:48:10,700 --> 00:48:13,590 La komputiloj uzante alian memoro ial ajn. 1079 00:48:13,590 --> 00:48:18,172 Kio nun iras en mian duan ŝanĝiĝema en mia programo t? 1080 00:48:18,172 --> 00:48:19,390 10. 1081 00:48:19,390 --> 00:48:20,050 Ekzakte. 1082 00:48:20,050 --> 00:48:23,910 >> Kaj tial kiam ni rigardas la fontkodon de tiu ĉi programo 1083 00:48:23,910 --> 00:48:26,550 kie mi simple provas kompari la du valoroj, 1084 00:48:26,550 --> 00:48:32,180 estas s egala egala al t, kio estas la evidenta homa respondo? 1085 00:48:32,180 --> 00:48:34,890 Nur ne ĉar 1 ne egalas 10. 1086 00:48:34,890 --> 00:48:36,861 Kaj tiel ene difinitaj kuŝas ŝanco por ni vere 1087 00:48:36,861 --> 00:48:39,610 nur iri reen al, denove, unua principoj kaj pensas pri, nu, 1088 00:48:39,610 --> 00:48:41,110 kio okazas sub la kapuĉo? 1089 00:48:41,110 --> 00:48:43,240 Ni parolis pri bitoj kaj bajtoj kaj memoro, 1090 00:48:43,240 --> 00:48:46,820 sed ĝi estas fakte utila por kompreni ĉar kiam vi vokas GetString, 1091 00:48:46,820 --> 00:48:50,280 eĉ se ni pensas lin estas reveninte M-Aŭ-M aŭ ŝnuro panjo 1092 00:48:50,280 --> 00:48:53,120 aŭ Andy aŭ Zamila aŭ simile, teknike 1093 00:48:53,120 --> 00:48:55,510 ĝi estas nur reveni la adreso de tiu bloko de memoro. 1094 00:48:55,510 --> 00:48:56,910 >> Sed tio estas bone. 1095 00:48:56,910 --> 00:49:00,570 Ĉar kiel mi scias kie la ŝnuro finiĝas? 1096 00:49:00,570 --> 00:49:03,840 Se mi nur donita la komenco? 1097 00:49:03,840 --> 00:49:05,380 Nu, la backslash nulo, ĉu ne? 1098 00:49:05,380 --> 00:49:08,800 Ĝuste en lineara tempo mi povas presi kun presitaj def M-Aŭ-M. 1099 00:49:08,800 --> 00:49:11,820 Kaj kiam mi vidos backslash nulo, Mi ne zorgas, kie mi komencis, 1100 00:49:11,820 --> 00:49:14,950 Mi jam scias implice kie mi devas fini. 1101 00:49:14,950 --> 00:49:18,700 >> Kaj tiel hodiaŭ markas la beginning-- kaj permesu min fari tion draste ĉar ni 1102 00:49:18,700 --> 00:49:21,800 trairis multajn ĝenojn al akiri tiujn ĉi tie trejni wheels-- 1103 00:49:21,800 --> 00:49:29,840 tial hodiaŭ la trejnado radoj komenci elspezi kaj ni malkaŝi en least-- 1104 00:49:29,840 --> 00:49:31,373 >> [Aplaŭdo] 1105 00:49:31,373 --> 00:49:33,220 1106 00:49:33,220 --> 00:49:36,160 >> Tio estis bone valoras la vojaĝon Celi ĉimatene, jes? 1107 00:49:36,160 --> 00:49:39,600 Do now-- ekzistas, rezultas ekstere, ne tia aĵo kiel ŝnuro. 1108 00:49:39,600 --> 00:49:41,140 String ne ekzistas. 1109 00:49:41,140 --> 00:49:43,760 Estas sinonimo ke ni havis ene de la CS50 biblioteko. 1110 00:49:43,760 --> 00:49:48,660 Nun, ni tuj komencu nomante s kaj t ne kordojn sed char steloj. 1111 00:49:48,660 --> 00:49:51,180 Kaj la char stelo Ni turmentus aparte antaŭ longe. 1112 00:49:51,180 --> 00:49:53,510 Sed tiu estas, ke eĉ se ni daŭre 1113 00:49:53,510 --> 00:49:56,180 uzante GetString por nun, teknike mi devas 1114 00:49:56,180 --> 00:49:59,010 esti dirante char stelo kaj char stelo. 1115 00:49:59,010 --> 00:50:01,720 >> Kaj ĝi rezultas ke kion stelo tuj signifi estas io 1116 00:50:01,720 --> 00:50:04,340 nomita puntero aŭ adreson. 1117 00:50:04,340 --> 00:50:06,110 Kaj fakte, teaser por kio kuŝas antaŭen 1118 00:50:06,110 --> 00:50:09,760 estas tiu 20 dua tranĉeto de nia amiko Noĉjo Parlante Stanford 1119 00:50:09,760 --> 00:50:12,927 kiu, vere tempo antaŭ, elspezi ridinda kvanto de tempo, 1120 00:50:12,927 --> 00:50:15,010 kiel bona mi povas rakonti en lia kuirejo aŭ lia kelo, 1121 00:50:15,010 --> 00:50:17,140 farante Claymation enkondukanta al la mondo 1122 00:50:17,140 --> 00:50:20,010 nomita gravulo Binky kun kiu ni volas 1123 00:50:20,010 --> 00:50:22,010 enkondukus venontfoje al punteros. 1124 00:50:22,010 --> 00:50:24,588 Do tie estas antaŭrigardo de kio estas por veni. 1125 00:50:24,588 --> 00:50:26,370 >> [VIDEO reprodukto] 1126 00:50:26,370 --> 00:50:27,510 >> -Hey, Binky. 1127 00:50:27,510 --> 00:50:28,260 Vekiĝu. 1128 00:50:28,260 --> 00:50:30,672 Estas tempo por montrilo amuza. 1129 00:50:30,672 --> 00:50:31,616 >> -Kio estas tio? 1130 00:50:31,616 --> 00:50:33,032 Lernu pri punteros? 1131 00:50:33,032 --> 00:50:34,450 Ho, Goody. 1132 00:50:34,450 --> 00:50:35,431 >> [FINO reprodukto] 1133 00:50:35,431 --> 00:50:38,055 DAVID J. Malan: Kaj sur tiu noto, Ni vidos vin merkredon. 1134 00:50:38,055 --> 00:50:47,590 1135 00:50:47,590 --> 00:50:48,090 Bone. 1136 00:50:48,090 --> 00:50:48,740 Kiu estas dancado? 1137 00:50:48,740 --> 00:50:49,240 Venu. 1138 00:50:49,240 --> 00:50:50,330 Kiu estas dancado? 1139 00:50:50,330 --> 00:50:51,820 Vi volas min akiri ĝin komencis? 1140 00:50:51,820 --> 00:50:53,770 Mi havos ĝin komencis. 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 >> Lauren: Dolĉa imago Moseo.