1 00:00:00,000 --> 00:00:10,550 2 00:00:10,550 --> 00:00:14,050 >> DAVID J. Malan: To je CS50 a to je začiatok štvrtého týždňa. 3 00:00:14,050 --> 00:00:18,630 A chlapec, je Volkswagen v ťažkosti všetko kvôli softvéru. 4 00:00:18,630 --> 00:00:20,264 Poďme sa pozrieť. 5 00:00:20,264 --> 00:00:20,930 [Videoprehrávanie] 6 00:00:20,930 --> 00:00:25,560 -Cars, Najmúdrejšie znaky v Rýchlo a zbesilo filmy. 7 00:00:25,560 --> 00:00:29,100 Tento týždeň nemecký výrobca automobilov Volkswagen ocitlo 8 00:00:29,100 --> 00:00:32,490 v uprostred škandálu potenciálne kriminálnej pomery. 9 00:00:32,490 --> 00:00:36,060 >> -Volkswagen Sa pripravuje o miliardy pokuty, možné obvinenie z trestného činu 10 00:00:36,060 --> 00:00:38,560 pre jeho vedenie, as spoločnosť ospravedlňuje 11 00:00:38,560 --> 00:00:41,840 pre rigging 11 miliónov vozidiel pomôcť mu poraziť emisných skúšok. 12 00:00:41,840 --> 00:00:44,950 >> -Certain Dieselové modely boli navrhnutý s sofistikovaný softvér 13 00:00:44,950 --> 00:00:48,440 že použitá informácie vrátane Postavenie a riadenie vozidla 14 00:00:48,440 --> 00:00:51,870 rýchlosť určiť, auto bolo prebieha meranie emisií. 15 00:00:51,870 --> 00:00:55,650 Podľa tohto okolností, motor by sa znížiť toxické emisie. 16 00:00:55,650 --> 00:00:59,070 Ale auto bolo zmanipulované do bypassu že keď to bolo v prevádzke. 17 00:00:59,070 --> 00:01:03,320 Emisie zvýšil 10 až 40 krát nad prijateľnú úroveň EPA. 18 00:01:03,320 --> 00:01:04,280 >> [END Prehrávanie] 19 00:01:04,280 --> 00:01:05,220 >> DAVID J. Malan: Takže poďme sa pozrieť na to 20 00:01:05,220 --> 00:01:07,250 a presne vidieť, ako to by mohol byť realizovaný 21 00:01:07,250 --> 00:01:09,680 a ako to môže mať vplyv na tak veľa áut, ako je tento. 22 00:01:09,680 --> 00:01:12,840 Takže v mojej ruke tu sú lis správe, ktorá bola vydaná v EPA-- 23 00:01:12,840 --> 00:01:14,620 Environmental Protection Agency, ktorá 24 00:01:14,620 --> 00:01:18,032 je regulačná agentúra USA, že spracováva otázky životného prostredia, 25 00:01:18,032 --> 00:01:19,740 a potom aktuálne Právne upozornenie, že bol 26 00:01:19,740 --> 00:01:22,420 poslať Volkswagen len pred pár dňami. 27 00:01:22,420 --> 00:01:26,530 >> Takže EPA píše, a zverejňuje teraz verejne, sofistikovaný softvér 28 00:01:26,530 --> 00:01:29,390 algoritmus na určitý Volkswagen detekuje 29 00:01:29,390 --> 00:01:32,630 keď auto prechádza Testovanie oficiálnych emisií 30 00:01:32,630 --> 00:01:36,505 a otáčky Plné emisií Kontroly iba v priebehu testu. 31 00:01:36,505 --> 00:01:38,380 Účinnosť Tieto znečistenia vozidlá 32 00:01:38,380 --> 00:01:43,260 ovládanie emisie zariadenia je značne znižovať v priebehu celého bežnej prevádzky 33 00:01:43,260 --> 00:01:44,320 situácie. 34 00:01:44,320 --> 00:01:48,190 To má za následok v autách, ktoré spĺňajú normy v laboratóriu alebo testovanie 35 00:01:48,190 --> 00:01:52,790 stanice, ale pri normálnej prevádzke vyžarovať dusíka oxides-- alebo NOx-- 36 00:01:52,790 --> 00:01:54,950 rýchlosťou až 40 krát štandardné. 37 00:01:54,950 --> 00:01:58,220 Tento softvér produkoval Volkswagen je citácie koniec citátu, separačné zariadenie, 38 00:01:58,220 --> 00:02:00,650 ako je definovaný čistého Zákon o ovzduší v USA. 39 00:02:00,650 --> 00:02:03,410 >> Idú na to povedať, že EPA a ďalšie agentúrou 40 00:02:03,410 --> 00:02:07,020 odhalil odpojovacie zariadenie Softvér po samostatnej analýzy 41 00:02:07,020 --> 00:02:09,660 výskumníkmi na Západ Virginia University. 42 00:02:09,660 --> 00:02:14,160 Znečistenie NOx prispieva oxid dusičitý, prízemný ozón, 43 00:02:14,160 --> 00:02:15,700 a jemné častice. 44 00:02:15,700 --> 00:02:18,090 Vystavenia týmto znečisťujúce látky bola spojená 45 00:02:18,090 --> 00:02:20,870 so širokou škálou závažné účinky na zdravie, 46 00:02:20,870 --> 00:02:23,637 vrátane väčšej astmy útoky a iné respiračné 47 00:02:23,637 --> 00:02:26,470 choroby, ktoré môžu byť natoľko závažné posielať ľudí do nemocnice. 48 00:02:26,470 --> 00:02:28,660 Expozícia ozónu a častíc má tiež 49 00:02:28,660 --> 00:02:31,960 boli spojené s predčasným úmrtí v dôsledku respiračnej súvisiace 50 00:02:31,960 --> 00:02:35,690 alebo kardiovaskulárne súvisiace účinky. 51 00:02:35,690 --> 00:02:38,940 Deti, starší ľudia, ľudia s Vopred pripravený respiračné ochorenie 52 00:02:38,940 --> 00:02:42,840 sú mimoriadne ohrozené zdravotné účinky týchto znečisťujúcich látok. 53 00:02:42,840 --> 00:02:45,056 >> Postačí teda, že je to veľmi vážne. 54 00:02:45,056 --> 00:02:46,930 A poďme k čítať len jeden úryvok 55 00:02:46,930 --> 00:02:49,370 a potom sa budeme sa pozrieť na podkladové dôsledky 56 00:02:49,370 --> 00:02:50,920 z toho v kontexte automobile. 57 00:02:50,920 --> 00:02:53,730 Konkrétne, Volkswagen vyrobené a inštalované 58 00:02:53,730 --> 00:02:56,210 softvér v tzv Elektronická riadiaca 59 00:02:56,210 --> 00:02:59,320 module-- alebo ECM-- of tieto vozidlá, ktoré snímaných 60 00:02:59,320 --> 00:03:03,580 kedy sa skúšané vozidlo pre spĺňajúce emisné normy EPA. 61 00:03:03,580 --> 00:03:07,510 Na rôznych vstupov vrátane tých na báze poloha volantu, vozidlo 62 00:03:07,510 --> 00:03:11,280 rýchlosť, dĺžka motora prevádzku, a barometrický tlak, 63 00:03:11,280 --> 00:03:13,720 tieto vstupy presne sledoval parametre 64 00:03:13,720 --> 00:03:17,600 federálneho použitého skúšobného postupu na meranie emisií pre certifikáciu EPA 65 00:03:17,600 --> 00:03:18,400 účely. 66 00:03:18,400 --> 00:03:21,850 >> Počas skúšok emisií EPA, softvér vozidlá ECM 67 00:03:21,850 --> 00:03:25,060 bežal softvér, ktorý produkoval Výsledky zhody s emisnými limitmi. 68 00:03:25,060 --> 00:03:28,340 Vo všetkých ostatných prípadoch sa ECM vozidlo softvér 69 00:03:28,340 --> 00:03:31,090 prevádzkoval samostatnú cestu kalibrácia ktorý znížil 70 00:03:31,090 --> 00:03:34,360 Účinnosť Celková systému riadenia emisií, 71 00:03:34,360 --> 00:03:37,864 konkrétne selektívna katalytická Zníženie NOx trap-- 72 00:03:37,864 --> 00:03:39,280 ktorý uvidíme asi za chvíľu. 73 00:03:39,280 --> 00:03:43,040 V dôsledku toho sa emisie NOx zvýšená o faktor 10 až 40 krát 74 00:03:43,040 --> 00:03:47,450 nad úrovňou vyhovujúce dohodách o hospodárskom partnerstve v závislosti od typu pohonu cyklu. 75 00:03:47,450 --> 00:03:50,800 >> Takže to, čo to naozaj znamená, a Zdrojový kód k softvéru bežiaceho 76 00:03:50,800 --> 00:03:53,190 na Volkswagen nemá doteraz zverejnené, 77 00:03:53,190 --> 00:03:56,460 je, že účinne, toto ekvivalent je niekde vo vnútri 78 00:03:56,460 --> 00:03:57,830 kódu Volkswagen. 79 00:03:57,830 --> 00:04:02,200 Ak sú testované, a ak je do auta rozpozná niektoré faktory životného prostredia 80 00:04:02,200 --> 00:04:04,330 ako volantu polohy alebo pohyb 81 00:04:04,330 --> 00:04:06,710 alebo jeho nedostatok v aute alebo akýkoľvek počet ďalších faktorov 82 00:04:06,710 --> 00:04:09,940 ktoré sú v súčasnej dobe predpokladal, byť súčasťou tohto vzorca, 83 00:04:09,940 --> 00:04:12,370 jednoducho zapnúť Úplná kontrola emisií. 84 00:04:12,370 --> 00:04:15,670 Inými slovami, začnú emitujúce menej znečisťujúcich látok. 85 00:04:15,670 --> 00:04:18,769 >> Inak, v každej inej situácii ak to nie je detekovaný ako bytia 86 00:04:18,769 --> 00:04:20,790 v laboratóriu, oni jednoducho nemajú. 87 00:04:20,790 --> 00:04:24,320 A tak si môžete zjednodušiť to do viac betón pseudokód s niečím 88 00:04:24,320 --> 00:04:24,820 ako toto. 89 00:04:24,820 --> 00:04:27,810 Ak kolesá sa otáčajú, ale volantu nie je, sugestívne 90 00:04:27,810 --> 00:04:30,060 že auto je na niektorých druh rotačného valca 91 00:04:30,060 --> 00:04:32,550 ale v nejakom sklad testuje, 92 00:04:32,550 --> 00:04:36,070 potom sa správajú ako EPA by som vám. 93 00:04:36,070 --> 00:04:37,960 Inak nie. 94 00:04:37,960 --> 00:04:40,420 Takže poďme sa pozrieť v krátkej video, ktoré 95 00:04:40,420 --> 00:04:45,391 sa pozrieť na to, čo o dôsledkoch sú to vlastne mechanicky. 96 00:04:45,391 --> 00:04:48,620 >> [Videoprehrávanie] 97 00:04:48,620 --> 00:04:52,800 >> -Last Piatok EPA oznámila, že niektorí Vozy Volkswagen Audi medzi 2009 98 00:04:52,800 --> 00:04:55,840 a tento rok boli pomocou tzv odpojovacie zariadenie 99 00:04:55,840 --> 00:04:59,060 obísť zákony o emisiách navrhnuté tak, aby vzduch čistý. 100 00:04:59,060 --> 00:05:01,700 Ale čo to presne znamená? 101 00:05:01,700 --> 00:05:04,666 >> No, moderné autá majú desiatky počítačov vnútri nich. 102 00:05:04,666 --> 00:05:07,040 A niektoré z týchto počítačov pomoc koordinovať funkcie 103 00:05:07,040 --> 00:05:09,590 motora pre optimálnu výkon a zároveň zabezpečiť, 104 00:05:09,590 --> 00:05:12,340 že tam nie je príliš veľa odpadkov vychádzajúce z výfuku. 105 00:05:12,340 --> 00:05:15,170 Už skutočne pracuje Týmto spôsobom už niekoľko desaťročí. 106 00:05:15,170 --> 00:05:17,380 V podstate, každá časť motora moderného automobilu 107 00:05:17,380 --> 00:05:20,080 má snímač alebo radič na tom, a tieto počítače 108 00:05:20,080 --> 00:05:23,460 číta v dátach tisíce krát za sekundu úprav making 109 00:05:23,460 --> 00:05:26,220 ako pomer paliva k vzduchu že to bude do valcov. 110 00:05:26,220 --> 00:05:28,730 >> Tieto podvádzanie Volkswagen a Audi modely sú diesely, 111 00:05:28,730 --> 00:05:30,890 a diesely majú ešte jeden naozaj dôležité počítač 112 00:05:30,890 --> 00:05:34,030 kontrolované parametre, čo je množstvo nespáleného paliva sa 113 00:05:34,030 --> 00:05:35,200 do výfuku. 114 00:05:35,200 --> 00:05:36,310 Teraz to znie zle. 115 00:05:36,310 --> 00:05:39,642 Neznie to ako by ste chceli nespálené palivo sa do výfuku. 116 00:05:39,642 --> 00:05:41,600 Ale v prípade diesel, máte niečo 117 00:05:41,600 --> 00:05:46,110 nazýva NOx pást, čo je zariadenie, ktoré absorbuje a pasce na oxidy dusíka 118 00:05:46,110 --> 00:05:48,880 že sú znečisťujúce látky, ktoré by v opačnom prípade prejdite do atmosféry. 119 00:05:48,880 --> 00:05:53,040 A účinok tohto NOx pasce je obohatený nespáleného paliva. 120 00:05:53,040 --> 00:05:56,650 Takže odpojovacie zariadenie je špeciálny program vo vnútri týchto počítačov, ktoré môžu robiť to 121 00:05:56,650 --> 00:05:59,527 vyzerať vozidlo spĺňa emisnú normy, aj keď to tak nie je. 122 00:05:59,527 --> 00:06:01,110 Volkswagen mal problém so založenými rukami. 123 00:06:01,110 --> 00:06:04,050 Jeho dieselové motory boli známe pre získanie veľkú spotrebu paliva, 124 00:06:04,050 --> 00:06:07,510 ale NOx pasca funguje len dobre ak sa používa viac paliva. 125 00:06:07,510 --> 00:06:10,460 Takže auto by zistiť, pomocou tohto rušiace zariadenie, 126 00:06:10,460 --> 00:06:13,870 keď to bolo získanie emisií test, by spotrebovávať viac paliva, 127 00:06:13,870 --> 00:06:16,830 aby NOx depeše prácu dobre, Emisie by bolo v poriadku. 128 00:06:16,830 --> 00:06:21,130 Ale potom sa dostanete na ceste, zariadení vypne, ste pálenie menej paliva 129 00:06:21,130 --> 00:06:24,256 ale ste uvedenie ako veľa ako 40 krát viac znečisťujúcich látok do ovzdušia. 130 00:06:24,256 --> 00:06:26,130 Ale ako to sakra urobil auto viem, že to bolo 131 00:06:26,130 --> 00:06:27,720 testovaný na dodržiavanie úrovne emisií? 132 00:06:27,720 --> 00:06:30,590 EPA hovorí, že to bol dômyselný systém, ktorý kontroluje veci 133 00:06:30,590 --> 00:06:34,090 ako polohy volantu, rýchlosť, ako dlho motor bol zapnutý, 134 00:06:34,090 --> 00:06:35,507 a dokonca aj atmosférický tlak. 135 00:06:35,507 --> 00:06:37,673 Inými slovami, existuje žiadny spôsob, ako to bolo náhodné 136 00:06:37,673 --> 00:06:40,260 preto, že softvér bol navrhnutá veľmi opatrne k detekcii 137 00:06:40,260 --> 00:06:41,630 oficiálna skúška emisií. 138 00:06:41,630 --> 00:06:43,588 To je nejaký docela vážne podvod, a to je 139 00:06:43,588 --> 00:06:45,420 Preto je v Volkswagen ako vážny problém. 140 00:06:45,420 --> 00:06:48,600 V skutočnosti sa ich CEO, Martin Winterkorn, len odstúpil. 141 00:06:48,600 --> 00:06:49,820 >> Takže čo sa stane ďalej? 142 00:06:49,820 --> 00:06:53,900 No, ak ste jeden z pol milióna diesel Jettas, Beatles, podkolienky, Passat, 143 00:06:53,900 --> 00:06:56,220 alebo Audi A3S uskutočnili, Dobrou správou je, je 144 00:06:56,220 --> 00:06:57,886 že vaše auto je stále bezpečne riadiť. 145 00:06:57,886 --> 00:07:00,510 Nemusíte dať to preč kým Volkswagen vydá odvolanie. 146 00:07:00,510 --> 00:07:02,509 Ale v určitom okamihu, že sú pravdepodobne bude mať 147 00:07:02,509 --> 00:07:04,230 aktualizovať softvér v aute. 148 00:07:04,230 --> 00:07:06,927 Keď sa to stane, by mohol dostať menej míľ na nádrž. 149 00:07:06,927 --> 00:07:09,260 Právnici sú už chystajú up pre triedu žalôb 150 00:07:09,260 --> 00:07:12,500 aby majitelia mohli dostať kompenzované v určitom okamihu v budúcnosti. 151 00:07:12,500 --> 00:07:15,832 Ale to nebude čoskoro stať kedykoľvek. 152 00:07:15,832 --> 00:07:16,711 >> [END Prehrávanie] 153 00:07:16,711 --> 00:07:19,960 DAVID J. Malan: Takže to vlastne vyvoláva zaujímavá väčší obrázok otázka 154 00:07:19,960 --> 00:07:20,660 pokiaľ ide o dôveru. 155 00:07:20,660 --> 00:07:21,160 Je to tak? 156 00:07:21,160 --> 00:07:24,300 Každý z nás má iPhone alebo androidi alebo niečo, čo v našich vreckách s najväčšou pravdepodobnosťou 157 00:07:24,300 --> 00:07:26,500 V týchto dňoch, alebo notebooky na našich bicykloch, ktoré sú 158 00:07:26,500 --> 00:07:28,510 beží softvér vyrobený Apple a Microsoft 159 00:07:28,510 --> 00:07:30,710 a zväzky iných spoločností. 160 00:07:30,710 --> 00:07:34,240 Ale ako vieme, že to, čo Tieto softvérové ​​produkty robia 161 00:07:34,240 --> 00:07:37,680 je vlastne to, čo títo spoločnosti tvrdia, že robia? 162 00:07:37,680 --> 00:07:39,610 >> Napríklad, ktorý je na hovoria, že zakaždým, keď 163 00:07:39,610 --> 00:07:42,200 uskutočniť telefónny hovor na vašom iPhone alebo Android telefón alebo podobne, 164 00:07:42,200 --> 00:07:45,650 že telefónne číslo je tiež nie je nahrávané na server nejakej spoločnosti 165 00:07:45,650 --> 00:07:48,399 kvôli nejakej programu, ktorý som napísané, či už je to operačný 166 00:07:48,399 --> 00:07:51,070 systém sám o sebe ako je iOS alebo Android, alebo preto, že ste si stiahli 167 00:07:51,070 --> 00:07:53,880 niektoré aplikácie tretej strany že nejakým spôsobom je počúvanie 168 00:07:53,880 --> 00:07:57,120 na všetko, čo píšete alebo všetko, čo ste vlastne hovoril. 169 00:07:57,120 --> 00:07:59,500 Ako viete, že keď vy ste beží Clang 170 00:07:59,500 --> 00:08:02,590 alebo Vytvoriť kompilovať vlastný softvér v CS50, ako 171 00:08:02,590 --> 00:08:06,080 Máte vlastný personál, ktorý je CS50, pomocou knižnice CS50, 172 00:08:06,080 --> 00:08:08,690 nebol prihlásenie každý string ste niekedy dostali 173 00:08:08,690 --> 00:08:10,276 alebo každým cólom, aký ste kedy dostal? 174 00:08:10,276 --> 00:08:12,900 No, mohli by ste sa rozhodne netvári do zdrojového kódu na niečo 175 00:08:12,900 --> 00:08:15,233 ako knižnice CS50, vy sa mohli pozrieť do zdrojového kódu 176 00:08:15,233 --> 00:08:18,170 pre operačný systém Linux beží na CS50 IDE. 177 00:08:18,170 --> 00:08:23,090 Ale úžasná prezentácia bol daný v roku 1984 178 00:08:23,090 --> 00:08:26,730 v prijatí Turing Zadanie zákazky veľmi slávny počítačový odborník známy 179 00:08:26,730 --> 00:08:29,750 as-- menom Ken Thompson, ktorí obdržal Turing cena, ktorá 180 00:08:29,750 --> 00:08:33,500 je druh počítačovej vedy je Nobelova cena, ak chcete, 181 00:08:33,500 --> 00:08:35,309 za jeho prácu na operačný systém s názvom 182 00:08:35,309 --> 00:08:39,039 Unix, ktorý je veľmi podobný ducha toho, čo používame, ktorý je Linux. 183 00:08:39,039 --> 00:08:41,960 A otázka opýtal sa jeho prijatie reč, v podstate 184 00:08:41,960 --> 00:08:44,910 ktorým sa stanovuje rámec pre roky a roky diskusií 185 00:08:44,910 --> 00:08:46,970 o dôvere a bezpečnosti, bola táto. 186 00:08:46,970 --> 00:08:50,410 Do akej miery by jedného veriť vyhlásenie, že program-- kus 187 00:08:50,410 --> 00:08:53,010 z software-- je bez trójskych koní? 188 00:08:53,010 --> 00:08:56,500 Možno je to oveľa dôležitejšie dôverovať ľudia, ktorí písali softvér. 189 00:08:56,500 --> 00:08:58,650 >> A v skutočnosti, sme spojený do reči, že 190 00:08:58,650 --> 00:09:02,400 dal pri prijímaní tohto ocenenia v 80. rokoch na internetových stránkach CS50 je 191 00:09:02,400 --> 00:09:04,030 pod stránke prednášky pre dnešok. 192 00:09:04,030 --> 00:09:06,071 Pretože to, čo uvidíte je to, že on vlastne dáva 193 00:09:06,071 --> 00:09:09,430 pomerne jednoduchý príklad, ako aj kompilátor ako je Clang alebo čokoľvek 194 00:09:09,430 --> 00:09:13,950 kompilátory iní používané v minulosti, Čo keď vložený v kompilátora my 195 00:09:13,950 --> 00:09:18,190 sami používate je málo, pokiaľ podmienka, ktorá v podstate hovorí, 196 00:09:18,190 --> 00:09:22,360 ak si všimnete, že tento kód je pomocou Funkcie GetString alebo GetInt 197 00:09:22,360 --> 00:09:26,600 funkcie, pokračujte a vložte zadné dvere alebo trójskym koňom 198 00:09:26,600 --> 00:09:29,340 tak, že tento program Teraz má nejaké nuly 199 00:09:29,340 --> 00:09:30,930 a tie, ktoré robia niečo škodlivého. 200 00:09:30,930 --> 00:09:33,080 Prihlasovanie všetky vaše úderov, nahrávanie, že dáta 201 00:09:33,080 --> 00:09:35,100 k nejakému serveru, alebo naozaj čokoľvek. 202 00:09:35,100 --> 00:09:37,290 >> A čo Ken Thompson pokračuje robiť v reči 203 00:09:37,290 --> 00:09:40,580 je preukázať, že aj v prípade, máte prístup k zdroju 204 00:09:40,580 --> 00:09:43,794 kód prekladača, ktorý zlomyselne môže robiť to, 205 00:09:43,794 --> 00:09:46,210 to nevadí, pretože Tam je to kurča a vajcia 206 00:09:46,210 --> 00:09:49,500 realita minulosti veľa rokov pricom kompilátory 207 00:09:49,500 --> 00:09:51,960 sa používajú na zostavovanie sami. 208 00:09:51,960 --> 00:09:55,440 Inými slovami, pri ceste späť niekto musel písali prvý kompilátor. 209 00:09:55,440 --> 00:09:59,060 A potom, kedykoľvek že som aktualizované kompilátor zmenou jeho zdrojový kód, 210 00:09:59,060 --> 00:10:02,020 pridávanie funkcií a překompilování ju Pre ľudí ako my používať, dobre, 211 00:10:02,020 --> 00:10:04,270 Používajú starý verzia kompilátora 212 00:10:04,270 --> 00:10:06,370 zostaviť nový verzia kompilátora. 213 00:10:06,370 --> 00:10:08,370 A ak ste sa pozrieť v rozhovore, ktorý dal, 214 00:10:08,370 --> 00:10:10,970 uvidíte, že preto, tohto kruhovitosti, 215 00:10:10,970 --> 00:10:14,330 môžete skutočne mať chyby alebo Trójske kone vložené do softvéru 216 00:10:14,330 --> 00:10:14,990 sme pomocou. 217 00:10:14,990 --> 00:10:18,010 A aj keď sa pozriete na zdrojový kód pre tieto programy, 218 00:10:18,010 --> 00:10:21,550 to by mohlo byť ani zrejmé pretože podvod je vlastne 219 00:10:21,550 --> 00:10:24,710 v niektorých starších verzií kompilátor, ktorý od tej doby bola 220 00:10:24,710 --> 00:10:27,340 vstrekovanie hrozbu do nášho softvéru. 221 00:10:27,340 --> 00:10:29,740 >> Čo je len hovoriť, my naozaj nemôže a nemal by 222 00:10:29,740 --> 00:10:32,939 dôvera softvér bežiaci na našich notebookov alebo telefóny alebo akýkoľvek počet miest. 223 00:10:32,939 --> 00:10:36,230 A v skutočnosti, ďalej v tomto polroku, kedy začneme hovoriť o programovaní webe 224 00:10:36,230 --> 00:10:38,521 a skutočne začať stavať webové aplikácie sami, 225 00:10:38,521 --> 00:10:40,285 budeme hovoriť o týchto hrozby a ďalšie. 226 00:10:40,285 --> 00:10:43,410 Teraz, možno ste premýšľal a všimol že to tam bolo malinké Darth 227 00:10:43,410 --> 00:10:45,842 Vader na klipy, ktoré Krajnici tam ukazovať 228 00:10:45,842 --> 00:10:47,550 o Volkswagen. Ak ste nikdy nevideli, ja 229 00:10:47,550 --> 00:10:49,190 myslel, že by sme mali uľahčiť nálada, pretože to je všetko 230 00:10:49,190 --> 00:10:50,780 veľmi deprimujúce a desivé. 231 00:10:50,780 --> 00:10:52,910 Idem sa pozrieť späť na Super Bowl 2011 232 00:10:52,910 --> 00:10:55,300 kedy je obchodná od Volkswagen-- a to 233 00:10:55,300 --> 00:10:59,620 Takmer z nich robí sympatický again-- vysielal prvýkrát v televízii. 234 00:10:59,620 --> 00:11:04,039 Je tu druhý klip 60 si myslím, že sa vám bude páčiť. 235 00:11:04,039 --> 00:11:04,705 [Videoprehrávanie] 236 00:11:04,705 --> 00:11:08,198 [MUSIC - tému z "hviezdnej vojny"] 237 00:11:08,198 --> 00:11:35,643 238 00:11:35,643 --> 00:11:38,138 [DOG šteká] 239 00:11:38,138 --> 00:11:50,114 240 00:11:50,114 --> 00:11:53,607 [CAR ZAČÍNA] 241 00:11:53,607 --> 00:12:04,086 242 00:12:04,086 --> 00:12:05,955 [END Prehrávanie] 243 00:12:05,955 --> 00:12:06,830 DAVID J. Malan: Jo. 244 00:12:06,830 --> 00:12:07,663 Len som kontrolu. 245 00:12:07,663 --> 00:12:11,360 To auto je na zozname porušovania ľudských práv. 246 00:12:11,360 --> 00:12:12,000 Dobre. 247 00:12:12,000 --> 00:12:14,040 Takže sa pozrieme na niektoré pseudokód pred chvíľou. 248 00:12:14,040 --> 00:12:15,380 A tu je väčší úryvok pseudokódu kódu 249 00:12:15,380 --> 00:12:16,921 že sme videli niekoľkokrát tak ďaleko. 250 00:12:16,921 --> 00:12:19,970 A poďme použitie je to príležitosť Teraz zavedenie nového programovania 251 00:12:19,970 --> 00:12:23,776 technika, ktorú sme urobili pozri algoritmickým 252 00:12:23,776 --> 00:12:25,400 minulý týždeň, kedy sme sa pozreli na zlúčenie druhu. 253 00:12:25,400 --> 00:12:28,270 Ale poďme formalizovať a uvidíte, ako sa nám to môže používať v skutočnom kódu, 254 00:12:28,270 --> 00:12:30,350 a potom budeme používať túto Technika po ceste najviac 255 00:12:30,350 --> 00:12:32,000 pravdepodobné, že na riešenie niektorých ďalších problémov. 256 00:12:32,000 --> 00:12:35,790 >> Takže to bol jeden z prvých programov sme kedy napísal, aj keď v pseudokódu kódu. 257 00:12:35,790 --> 00:12:37,790 A to, čo tento program povolená, aby sme robili kurz 258 00:12:37,790 --> 00:12:41,510 bolo nájsť Mike Smith v telefónnom zozname. 259 00:12:41,510 --> 00:12:46,216 A všimnite si v jednotlivých línií osem a 11, ktoré mal tento výkaz ísť. 260 00:12:46,216 --> 00:12:48,090 A v skutočnosti, isté jazyky, C medzi nimi, 261 00:12:48,090 --> 00:12:50,006 vlastne robiť majú vyhlásenie, že je doslova 262 00:12:50,006 --> 00:12:52,710 prejsť na ktorý vám umožní prejsť na konkrétny linke. 263 00:12:52,710 --> 00:12:55,470 To je všeobecne odsudzovaný pretože to môže byť veľmi ľahko zneužité 264 00:12:55,470 --> 00:12:58,490 a môžete začať skákať svoj Program všade na rozdiel 265 00:12:58,490 --> 00:13:00,690 k používaniu druh logika a riadenie toku 266 00:13:00,690 --> 00:13:04,000 že sme použili doteraz len s slučky a podmienky a podobne. 267 00:13:04,000 --> 00:13:08,660 >> Ale môžeme zjednodušiť tento algoritmus v pseudokódu kóde spôsobom. 268 00:13:08,660 --> 00:13:11,250 Namiesto toho, aby tento opakovaný či smyčkovací prístup 269 00:13:11,250 --> 00:13:14,160 kde sme neustále vracať späť a späť do riadku tri, 270 00:13:14,160 --> 00:13:18,300 prečo nie my len trochu punt a viac sa všeobecne povedať, v súlade siedmich a 10, 271 00:13:18,300 --> 00:13:20,570 stačí vymeniť tie dva párov liniek s, 272 00:13:20,570 --> 00:13:22,810 else if Smith je staršia v knihe budeme 273 00:13:22,810 --> 00:13:25,110 hľadať Mike v Ľavá polovica knihy. 274 00:13:25,110 --> 00:13:28,560 Else ak Smith neskôr vo kniha, hľadať Mike v práve 275 00:13:28,560 --> 00:13:29,540 polovica knihy. 276 00:13:29,540 --> 00:13:31,180 A všimnite si už na kruhovitosť. 277 00:13:31,180 --> 00:13:31,680 Je to tak? 278 00:13:31,680 --> 00:13:34,250 Ja som hľadal Mike v telefónneho zoznamu a potom 279 00:13:34,250 --> 00:13:37,090 Nakoniec som hit možná linka sedem alebo možno riadok 10 280 00:13:37,090 --> 00:13:41,089 a moje inštrukcie pre seba, je vyhľadávanie Mike v polovici telefónneho zoznamu. 281 00:13:41,089 --> 00:13:42,380 No, ako mám vyhľadať Mike? 282 00:13:42,380 --> 00:13:44,213 Som v polovici hľadal Mike, prečo 283 00:13:44,213 --> 00:13:45,860 sa mi nejako odoslanie v kruhu? 284 00:13:45,860 --> 00:13:49,590 Ale to je v poriadku, pretože to, čo je deje na rozsahu problému, 285 00:13:49,590 --> 00:13:52,630 ako je napísané v riadku 7 a 10? 286 00:13:52,630 --> 00:13:54,989 Nie sme len hovorím, hľadanie Mike, hľadať mike. 287 00:13:54,989 --> 00:13:56,280 My konkrétne hovoriť, čo? 288 00:13:56,280 --> 00:13:58,694 289 00:13:58,694 --> 00:14:01,610 Hľadať pre neho v ľavej polovici pravá polovica, ktorá je v skutočnosti 290 00:14:01,610 --> 00:14:03,440 polovičnej veľkosti problému. 291 00:14:03,440 --> 00:14:07,170 Takže je to v poriadku, že sme trochu zapojenie do tejto kruhovitosti, 292 00:14:07,170 --> 00:14:09,180 Tento argument obežníku, pretože aspoň sme 293 00:14:09,180 --> 00:14:11,090 čo je problém menšie a menšie. 294 00:14:11,090 --> 00:14:14,220 A nakoniec budeme dosiahnuť že takzvané referenčné prípad, kedy 295 00:14:14,220 --> 00:14:16,780 Máme len jednu stránku left-- ako náš dobrovoľník minulý týždeň 296 00:14:16,780 --> 00:14:18,684 did-- sme mali jednu stránku doľava a potom my nie 297 00:14:18,684 --> 00:14:21,600 mať na hľadanie Mike Smith preto, že je to buď na tejto stránke 298 00:14:21,600 --> 00:14:23,080 alebo nie je. 299 00:14:23,080 --> 00:14:27,480 >> Tak ako môžeme realizovať túto myšlienku, tento druh kruhovosti pri skutočnom kódu? 300 00:14:27,480 --> 00:14:31,030 No, môžeme využiť techniku ktorá je všeobecne známa ako rekurzia. 301 00:14:31,030 --> 00:14:33,960 A my sme videli to v pseudokód pre zlučovacie druhu minulý týždeň. 302 00:14:33,960 --> 00:14:37,190 Pripomeňme si, že to bolo pseudokód pre zlučovacie druhu. 303 00:14:37,190 --> 00:14:40,560 Je to pravdepodobne ešte jednoduchšie ako bublina, alebo výber alebo insertion sort 304 00:14:40,560 --> 00:14:43,310 nielen z hľadiska jednoduchosti s ktorou môžete vyjadriť. 305 00:14:43,310 --> 00:14:46,750 >> Ale to je preto, sme nejako kruhovo 306 00:14:46,750 --> 00:14:51,350 povediac, hľadať niečo, tým, že hľadá to znova. 307 00:14:51,350 --> 00:14:53,960 Ale my sme vyhľadávanie buď na ľavá polovica alebo pravá polovica 308 00:14:53,960 --> 00:14:56,070 a nakoniec sme zlučovanie v tomto prípade. 309 00:14:56,070 --> 00:14:58,520 Ale aj tu sa tieto dve linky, radenie 310 00:14:58,520 --> 00:15:01,320 sme zase sa to idea rekurzia. 311 00:15:01,320 --> 00:15:05,350 A konkrétne to, čo znamená, v rámci algoritmu, 312 00:15:05,350 --> 00:15:10,880 je, že algoritmus je rekurzívny ak sa používa alebo volá sama seba. 313 00:15:10,880 --> 00:15:14,330 >> Alebo, pokiaľ ide o C, je funkcia recursive-- funkciu nazvanú 314 00:15:14,330 --> 00:15:18,510 foo je rekurzívne, ak foo, kdesi v jeho zdrojovom kóde, 315 00:15:18,510 --> 00:15:21,250 volá funkciu sám foo. 316 00:15:21,250 --> 00:15:25,790 A to je zlé, ak všetko foo niekedy robí je sám znovu a znovu zavolať. 317 00:15:25,790 --> 00:15:30,600 Je to OK, ak foo nakoniec prestane, rovnako ako merge sort, tým, že hovorí, počkaj, 318 00:15:30,600 --> 00:15:32,980 ak k tomuto problému je super malý, napríklad, 319 00:15:32,980 --> 00:15:35,840 alebo som ho našiel, koho, že som hľadáte, jednoducho vráti. 320 00:15:35,840 --> 00:15:41,000 Nenechajte rekurzívne, nie sám cyklicky znovu zavolať. 321 00:15:41,000 --> 00:15:44,200 >> A tak sa poďme pozrieť na ako to môže skutočne pracujú. 322 00:15:44,200 --> 00:15:48,430 Takže budem pokračovať a otvorený up dvoch príkladoch tu zdrojového kódu. 323 00:15:48,430 --> 00:15:50,321 Jedným z nich je nazývaný sigma 0. 324 00:15:50,321 --> 00:15:52,320 A to nie je vôbec rekurzívne, ale poďme sa 325 00:15:52,320 --> 00:15:53,694 sa pozrieť na to, čo tento program robí. 326 00:15:53,694 --> 00:15:55,737 Ja som vyzliekol si všetko pripomienky od nej, ale všetky 327 00:15:55,737 --> 00:15:58,070 zdrojového kódu na CS50 je webové stránky má komentáre Ak ste 328 00:15:58,070 --> 00:15:59,570 chcieť čítať cez to znova neskôr. 329 00:15:59,570 --> 00:16:02,010 A poďme urobiť pár zdravého rozumu kontroluje tu. 330 00:16:02,010 --> 00:16:06,640 >> Takže v hornej časti tohto kódu, máme patrí CS50.h. 331 00:16:06,640 --> 00:16:07,650 Čo to robí? 332 00:16:07,650 --> 00:16:08,990 Prečo je to tu? 333 00:16:08,990 --> 00:16:11,740 Z hľadiska primeraných laicky. 334 00:16:11,740 --> 00:16:12,424 Čo to robí? 335 00:16:12,424 --> 00:16:12,858 Jo. 336 00:16:12,858 --> 00:16:14,160 >> Divákov: Tak, že funkcia GetInt funguje. 337 00:16:14,160 --> 00:16:16,243 >> DAVID J. Malan: Takže to Funkcie GetInt funguje. 338 00:16:16,243 --> 00:16:18,115 Vzhľadom k tomu, vnútornej strane tejto Súbor, CS50.h, ktorý 339 00:16:18,115 --> 00:16:20,950 uvidíme onedlho v podmienky jej zdrojového kódu, 340 00:16:20,950 --> 00:16:23,270 má veľa funkcií declared-- GetInt, GetString, 341 00:16:23,270 --> 00:16:26,950 a veľa others-- a pokiaľ nie je v skutočnosti máme, že Zahrnúť linku, 342 00:16:26,950 --> 00:16:29,320 kompilátor Clang nie je bude vedieť, že existuje. 343 00:16:29,320 --> 00:16:32,400 A to isté platí pre linky dvoch, kde je definovaná int 344 00:16:32,400 --> 00:16:35,101 printf, čo je funkcia budeme naďalej používať celkom dosť. 345 00:16:35,101 --> 00:16:37,850 Teraz, linka štyroch zdá málo funky pretože je to len jeden vložka. 346 00:16:37,850 --> 00:16:41,570 Má to bodkočiarka, nie kučeravé traky, žiadny kód vnútri nej. 347 00:16:41,570 --> 00:16:44,640 Ale to, čo urobil nazývame táto vec v týždňoch minulosti? 348 00:16:44,640 --> 00:16:45,140 Jo. 349 00:16:45,140 --> 00:16:46,060 Takže prototyp. 350 00:16:46,060 --> 00:16:48,390 A prečo máme prototyp, ktorý sa zdá 351 00:16:48,390 --> 00:16:51,050 byť trochu nadbytočný zvyčajne preto, že sme sa zvyčajne 352 00:16:51,050 --> 00:16:53,474 pozri funkcie znova neskôr v súbore, je to tak? 353 00:16:53,474 --> 00:16:56,390 Tak prečo have-- ste len poškriabaniu vašej hlave, ale ja to beriem. 354 00:16:56,390 --> 00:16:57,302 Jo. 355 00:16:57,302 --> 00:17:00,000 >> Divákov: [Nepočuteľné] Funkcie po hlavnej. 356 00:17:00,000 --> 00:17:01,000 DAVID J. Malan: Presne tak. 357 00:17:01,000 --> 00:17:04,089 Tak, že prekladač vás pozná bude nakoniec definovať alebo zaviesť 358 00:17:04,089 --> 00:17:06,579 že funkcie po hlavnej, pravdepodobne. 359 00:17:06,579 --> 00:17:08,462 Tak Clang a najviac kompilátory sú trochu hlúpy 360 00:17:08,462 --> 00:17:10,510 a budú vedieť, len to, čo im poviete. 361 00:17:10,510 --> 00:17:12,569 A ak chcete používať funkcia nazvaná sigma, 362 00:17:12,569 --> 00:17:15,710 lepšie učiť kompilátor že existuje vopred. 363 00:17:15,710 --> 00:17:17,970 >> Teraz, hlavné sama, dokonca aj aj keď je to banda liniek, 364 00:17:17,970 --> 00:17:19,839 je celkom oboznámený snáď teraz. 365 00:17:19,839 --> 00:17:21,942 Má to robiť, zatiaľ čo slučky ktorého účel života 366 00:17:21,942 --> 00:17:24,400 Tu vraj je dostať kladné celé číslo od užívateľa. 367 00:17:24,400 --> 00:17:27,349 A len držať otravovať ho alebo ju, kým sa spolupracovať. 368 00:17:27,349 --> 00:17:30,670 Potom v riadku 16, mám zaujímavý hovor. 369 00:17:30,670 --> 00:17:31,570 IntAnswer. 370 00:17:31,570 --> 00:17:33,710 Ktorý je na ľavej ruke strana dáva mi Int 371 00:17:33,710 --> 00:17:36,650 ktorý môže store-- nazýva Answer-- ktorý bude ukladať, zdá sa, 372 00:17:36,650 --> 00:17:39,090 návratová hodnota sigma. 373 00:17:39,090 --> 00:17:41,840 Takže sigma je len ľubovoľný, ale zmysluplné meno 374 00:17:41,840 --> 00:17:44,500 že som dal do funkcie ktorého účel života 375 00:17:44,500 --> 00:17:47,680 je vziať jednu argument-- budeme hovoriť N v tomto case-- 376 00:17:47,680 --> 00:17:52,280 a len preto, aby súčet tohto čísla a každé kladné číslo, ktoré je 377 00:17:52,280 --> 00:17:53,200 menšie, než to. 378 00:17:53,200 --> 00:17:58,140 >> Takže keď som sa prejsť v počte 2 sigma, chcem pridať 2 plus 1 379 00:17:58,140 --> 00:18:00,240 a 0-- nie 0-- tak, že mi dáva 3. 380 00:18:00,240 --> 00:18:05,320 Keby som prejsť, počas 3 až sigma, chcem majú 3 + 2 plus 1, čo mi dáva 6. 381 00:18:05,320 --> 00:18:05,900 A tak ďalej. 382 00:18:05,900 --> 00:18:09,750 Tak to jednoducho spočíta všetky Čísla menšie ako alebo rovná k nemu. 383 00:18:09,750 --> 00:18:12,040 >> A teraz, tu ja som jednoducho ísť vytlačiť odpoveď. 384 00:18:12,040 --> 00:18:17,330 Takže ako rýchlu kontrolu sanitačného, ​​poďme aby sigma 0-- bodka lomítko sigma 0-- 385 00:18:17,330 --> 00:18:18,690 a dovoľte mi, aby som zadajte 2. 386 00:18:18,690 --> 00:18:19,960 A ja naozaj dostať 3. 387 00:18:19,960 --> 00:18:21,240 Dovoľte mi, aby som zadajte 3. 388 00:18:21,240 --> 00:18:22,860 Ja naozaj dostať 6. 389 00:18:22,860 --> 00:18:27,636 A ak niekto môže robiť matematiku rýchlo, keď to urobím 50 čo mám dostať? 390 00:18:27,636 --> 00:18:29,839 >> Divákov: [Nepočuteľné]. 391 00:18:29,839 --> 00:18:30,880 DAVID J. Malan: No, no. 392 00:18:30,880 --> 00:18:33,340 Ale 1275, čo je dosť blízko. 393 00:18:33,340 --> 00:18:38,850 Tak toto je výsledok robí 50 a 49 a 48 a 47 a 46 394 00:18:38,850 --> 00:18:40,349 celú cestu až do 1. 395 00:18:40,349 --> 00:18:41,390 Tak to je všetko sigma robí. 396 00:18:41,390 --> 00:18:43,350 Ale poďme sa pozrieť, ako máme implementovaná to teraz. 397 00:18:43,350 --> 00:18:45,790 Tak sem je samotná funkcia. 398 00:18:45,790 --> 00:18:49,000 A to sa nezdá mať niečo do činenia s rekurzia doteraz. 399 00:18:49,000 --> 00:18:51,070 V skutočnosti, sme za použitia old school technika. 400 00:18:51,070 --> 00:18:56,680 Som inicializáciu premennú s názvom čiastku na nulu, potom mám foreloop tu, 401 00:18:56,680 --> 00:19:00,790 a ja som deklarovanie Int názvom Ja, nastavenie je rovná 1-- 402 00:19:00,790 --> 00:19:04,080 keď som mohol nastaviť, že sa rovná nula, ale od tej doby robím sčítanie, 403 00:19:04,080 --> 00:19:05,340 Koho zaujíma, či to je nula alebo jedna. 404 00:19:05,340 --> 00:19:06,660 Bude to mať žiadny vplyv. 405 00:19:06,660 --> 00:19:10,110 >> Takže som iterácie tak dlho, ako som ich menšie ako alebo rovné M, ktorý 406 00:19:10,110 --> 00:19:11,671 je argument, ktorý bol odovzdaný v. 407 00:19:11,671 --> 00:19:13,670 A potom som sa len udržať zvyšovanie I. a pohľad 408 00:19:13,670 --> 00:19:20,010 slučky všetko, čo robím robí súčet a rovná I. A to je úmyselné. 409 00:19:20,010 --> 00:19:22,326 Nechcem robiť, v tomto Rovnako tak ako súčet navyše plus. 410 00:19:22,326 --> 00:19:24,790 Chcem skutočne pridať aktuálna hodnota I, 411 00:19:24,790 --> 00:19:28,190 ktorý je čím ďalej väčšie a väčšie a väčší na priebežný. 412 00:19:28,190 --> 00:19:30,210 >> A potom som sa vrátiť sumu. 413 00:19:30,210 --> 00:19:33,850 A tak odpoveď dostane hodnotu sumu. 414 00:19:33,850 --> 00:19:35,282 A potom som ho vytlačiť. 415 00:19:35,282 --> 00:19:37,740 Takže je tu príležitosť tu, aj keď sa trochu zjednodušiť 416 00:19:37,740 --> 00:19:41,260 tento kód koncepčne a druh úderu niečí 417 00:19:41,260 --> 00:19:43,250 myseľ v termínoch jednoduchosť, aj keď to 418 00:19:43,250 --> 00:19:45,700 chvíľu trvá zoradiť z oceniť, prečo sa to 419 00:19:45,700 --> 00:19:47,330 je silný v týchto malých príkladoch. 420 00:19:47,330 --> 00:19:50,380 Tu je sigma one--, takže Druhá verzia tohto kódu. 421 00:19:50,380 --> 00:19:55,290 Všetko up vrchole je rovnaká, aby že rovnaký príbeh, platí ako predtým. 422 00:19:55,290 --> 00:19:59,220 Ale teraz poďme pozrieť na vykonávanie sigma, ktoré 423 00:19:59,220 --> 00:20:05,040 Ja som scvrkol na iba týchto lines-- štyri riadky kódu, naozaj, 424 00:20:05,040 --> 00:20:06,980 plus niekoľko zložené zátvorky a biely priestor. 425 00:20:06,980 --> 00:20:07,930 >> Ale čo mám robiť? 426 00:20:07,930 --> 00:20:11,050 Ak je m je menšia ako alebo sa rovná nula, musím trochu zvládnuť 427 00:20:11,050 --> 00:20:12,490 že mimoriadne jednoduchý prípad. 428 00:20:12,490 --> 00:20:15,450 A ak sa mi podať nula, alebo nič negatívne, čo je práve divné, 429 00:20:15,450 --> 00:20:17,909 Ja som jednoducho ísť ľubovoľne ale konzistentne vrátiť nulu. 430 00:20:17,909 --> 00:20:20,200 Nechcem, aby túto vec dostať sa do nejakej podivné nekonečna 431 00:20:20,200 --> 00:20:21,810 slučka, pretože so zápornou hodnotou. 432 00:20:21,810 --> 00:20:25,070 Takže ja len hovorím, či mi dáš nula alebo menej, Vraciam nula. 433 00:20:25,070 --> 00:20:28,220 >> Ale to je dobre, pretože to je že jednu stránku z telefónneho zoznamu 434 00:20:28,220 --> 00:20:28,790 , Čo zostalo. 435 00:20:28,790 --> 00:20:32,660 Som odhryzol veľmi špecifický problém, a nie niečo, čo volá rekurzívne. 436 00:20:32,660 --> 00:20:36,580 Avšak v rade 31, čo Zdá sa mi to robiť? 437 00:20:36,580 --> 00:20:39,780 Zátvorky sú len udržať veci, dúfajme, trochu jasnejšie. 438 00:20:39,780 --> 00:20:42,110 Ale všetko, čo robím, je, že som vracať m-- čokoľvek 439 00:20:42,110 --> 00:20:45,790 odovzdáte me-- plus Hodnota m-- ľúto, 440 00:20:45,790 --> 00:20:49,052 plus hodnota sigma m mínus 1. 441 00:20:49,052 --> 00:20:50,010 Takže čo to znamená? 442 00:20:50,010 --> 00:20:53,965 Ak by ste mi dať číslo 3 ako vstup, odpoveď Chcem sa dostať nakoniec 443 00:20:53,965 --> 00:20:57,307 je 6, pretože 3 plus 2 plus 1 6 mi dáva. 444 00:20:57,307 --> 00:20:59,390 Ale ako si myslím, že o ako sa spustením tohto kódu? 445 00:20:59,390 --> 00:21:03,070 Prvýkrát som zavolať sigma a ja sa prejsť v hodnote 3, 446 00:21:03,070 --> 00:21:07,960 to je ako hovoriť na kuse papiera, tu je hodnota 3 447 00:21:07,960 --> 00:21:09,920 a ja som bol odovzdaný to ako Sigma. 448 00:21:09,920 --> 00:21:13,090 3 je samozrejme menšie ako 0, takže podmienka IF neplatí. 449 00:21:13,090 --> 00:21:14,020 Else robí. 450 00:21:14,020 --> 00:21:14,990 Tak čo mám robiť? 451 00:21:14,990 --> 00:21:19,902 Chcem sa vrátiť m, čo je 3 plus sigma M mínus 1. 452 00:21:19,902 --> 00:21:21,110 Dovoľte mi teda sledovať to. 453 00:21:21,110 --> 00:21:22,710 Chystám sa dať to kus papiera nadol. 454 00:21:22,710 --> 00:21:24,668 A aká hodnota, aby sa jasné, mám ísť prejsť 455 00:21:24,668 --> 00:21:26,540 do Sigmy v tejto chvíli v príbehu? 456 00:21:26,540 --> 00:21:28,080 Aké číslo? 457 00:21:28,080 --> 00:21:28,610 2, že jo? 458 00:21:28,610 --> 00:21:29,670 3 mínus 1 je 2. 459 00:21:29,670 --> 00:21:32,000 Tak som len potrebujete trochu zdrap papiera sem. 460 00:21:32,000 --> 00:21:33,931 Takže teraz sigma je stále znovu zavolal. 461 00:21:33,931 --> 00:21:35,930 A ja som úmyselne to dole, pretože je to 462 00:21:35,930 --> 00:21:38,070 niečo ako pozastavenie že verzia príbehu 463 00:21:38,070 --> 00:21:40,720 pretože teraz som sústredený na signál M mínus 1. 464 00:21:40,720 --> 00:21:42,660 Tak bola 3 m, m mínus 1 je 2. 465 00:21:42,660 --> 00:21:45,110 Takže tu je 2, že som bol odovzdaný. 466 00:21:45,110 --> 00:21:48,510 2 je samozrejme menší než 0 tak, že prípad nevzťahuje. 467 00:21:48,510 --> 00:21:53,445 Inak sa vrátim m, čo je to vec, a sigma z aké hodnoty? 468 00:21:53,445 --> 00:21:56,160 469 00:21:56,160 --> 00:21:59,650 Takže ak sigma of 1-- pretože m je teraz 2 tak 2 mínus 1 je 1. 470 00:21:59,650 --> 00:22:01,950 Takže teraz mám len hodnotu 1. 471 00:22:01,950 --> 00:22:04,810 Ja som okolo len číslo 1 do funkcie sigma-- 472 00:22:04,810 --> 00:22:09,120 alebo ja here-- tak 1 zjavne nie je menšia ako nula, stále ešte neplatí. 473 00:22:09,120 --> 00:22:12,970 >> Else return 1 plus sigma čoho? 474 00:22:12,970 --> 00:22:13,470 0. 475 00:22:13,470 --> 00:22:14,678 Takže mi dovoľte pripomenúť, že. 476 00:22:14,678 --> 00:22:15,920 Vrátim sa k tomu neskôr. 477 00:22:15,920 --> 00:22:18,060 Teraz budem pokračovať a drobek dole číslo 0, pretože to je 478 00:22:18,060 --> 00:22:19,470 môj argument alebo parameter. 479 00:22:19,470 --> 00:22:22,400 Ja som prešiel číslo 0 a nakoniec sa tento proces 480 00:22:22,400 --> 00:22:25,760 toho len opakujem inzerát najmenších podrobností sa ukončí, pretože to, čo 481 00:22:25,760 --> 00:22:28,820 mám hneď robiť, akonáhle vidím túto 0? 482 00:22:28,820 --> 00:22:29,790 Aj vrátiť nulu. 483 00:22:29,790 --> 00:22:31,790 Takže teraz budete musieť pretočiť príbeh. 484 00:22:31,790 --> 00:22:34,430 >> Keby som teraz ísť späť v čase, čo bola posledná vec, 485 00:22:34,430 --> 00:22:36,670 Urobil som, keď ste boli doslova prevíjanie videa? 486 00:22:36,670 --> 00:22:41,630 Idem vyzdvihnúť najnovšie 1, a to mi dáva 1 plus 0 je 1. 487 00:22:41,630 --> 00:22:44,100 Ak mám držať prevíjanie príbeh, ktorý sa chystá dať mi 488 00:22:44,100 --> 00:22:46,880 2 plus tento beh hodnota, ktorá je 1. 489 00:22:46,880 --> 00:22:47,789 Tak to je 3. 490 00:22:47,789 --> 00:22:49,330 A potom budem držať prevíjanie. 491 00:22:49,330 --> 00:22:54,220 Keď som prvýkrát zapísať číslo 3-- tak 3 plus 3 mi dáva 6. 492 00:22:54,220 --> 00:22:57,272 >> A teraz, ak ste pretočil video až do tohto bodu, 493 00:22:57,272 --> 00:22:58,980 toto bolo veľmi Prvá otázka, spýtal som sa. 494 00:22:58,980 --> 00:23:01,450 Pri odovzdaní 3, čo je sigma z 3? 495 00:23:01,450 --> 00:23:04,204 Je to vskutku 6, súčet všetky tieto kusy papiera. 496 00:23:04,204 --> 00:23:07,120 Takže ak to trvá trochu kým na zabaliť svoju myseľ okolo, to je v poriadku. 497 00:23:07,120 --> 00:23:10,700 Ale za to bol little-- nej bol veľmi úmyselné, že som naskladané 498 00:23:10,700 --> 00:23:12,990 tieto čísla na seba. 499 00:23:12,990 --> 00:23:17,440 Je to niečo ako mať memory-- záznam v čase, 500 00:23:17,440 --> 00:23:19,940 ako práčke vo videu, že môžem skutočne pretočiť v. 501 00:23:19,940 --> 00:23:24,350 A budeme sa vrátiť do že metafora v len trochu. 502 00:23:24,350 --> 00:23:28,240 >> Ale najprv, ukazuje sa, že je tu kopa mágov a ľudia, smiešny, 503 00:23:28,240 --> 00:23:29,614 Myslím, že na Googlu. 504 00:23:29,614 --> 00:23:31,530 Chceli niekoho, kto je veľmi dobrý na Googling mysli 505 00:23:31,530 --> 00:23:34,270 prísť na chvíľku a pomôžte mi niečo hľadať? 506 00:23:34,270 --> 00:23:35,650 Veľmi, veľmi nízka kľúč. 507 00:23:35,650 --> 00:23:37,870 Niekto, kto je nikdy prísť skôr, možno. 508 00:23:37,870 --> 00:23:38,370 OK. 509 00:23:38,370 --> 00:23:39,030 Jo? 510 00:23:39,030 --> 00:23:39,530 No ták. 511 00:23:39,530 --> 00:23:41,410 Poď dole. 512 00:23:41,410 --> 00:23:42,183 Ako sa voláš? 513 00:23:42,183 --> 00:23:42,870 >> SAM: Sam. 514 00:23:42,870 --> 00:23:44,290 >> DAVID J. Malan: Sam, poď dole. 515 00:23:44,290 --> 00:23:45,320 To je rovnaká. 516 00:23:45,320 --> 00:23:46,280 Rád som ťa spoznal. 517 00:23:46,280 --> 00:23:46,780 Ahoj. 518 00:23:46,780 --> 00:23:47,580 Poď. 519 00:23:47,580 --> 00:23:51,290 Takže všetko, čo potrebujem, aby si urobil, ak ste mohli, Same, tu je Google. 520 00:23:51,290 --> 00:23:53,240 Môžete hľadať termíne rekurzia? 521 00:23:53,240 --> 00:23:55,770 522 00:23:55,770 --> 00:23:56,270 Nikdy nepokazí. 523 00:23:56,270 --> 00:23:59,940 524 00:23:59,940 --> 00:24:00,970 >> A teraz let's-- jo. 525 00:24:00,970 --> 00:24:03,380 Kliknite na tlačidlo OK, že. 526 00:24:03,380 --> 00:24:04,315 Lepšie kliknite na to. 527 00:24:04,315 --> 00:24:07,020 528 00:24:07,020 --> 00:24:08,020 Ach, to chápem. 529 00:24:08,020 --> 00:24:08,520 Nie? 530 00:24:08,520 --> 00:24:09,050 OK. 531 00:24:09,050 --> 00:24:10,430 Takže poďme urobiť pár ďalších. 532 00:24:10,430 --> 00:24:12,830 Ani nie tak súvisiace akademicky tu, ale už ste 533 00:24:12,830 --> 00:24:14,520 niekedy hľadal Google pre anagram? 534 00:24:14,520 --> 00:24:15,280 >> SAM: Nie. 535 00:24:15,280 --> 00:24:15,520 >> DAVID J. Malan: OK. 536 00:24:15,520 --> 00:24:17,186 Hľadať prešmyčka miesto rekurzia. 537 00:24:17,186 --> 00:24:22,540 538 00:24:22,540 --> 00:24:23,790 Ako sa o nakrivo. 539 00:24:23,790 --> 00:24:25,515 Už ste niekedy hľadali nakrivo? 540 00:24:25,515 --> 00:24:29,260 541 00:24:29,260 --> 00:24:32,692 Teraz, toto je trochu ťažké vidieť, ale dúfajme, že everything's-- OK. 542 00:24:32,692 --> 00:24:34,150 Je to len ty a ja sa teší to. 543 00:24:34,150 --> 00:24:34,690 OK. 544 00:24:34,690 --> 00:24:38,950 >> Takže nakoniec, to one's-- je to trochu nakrivo. 545 00:24:38,950 --> 00:24:40,810 Teraz už výkrut. 546 00:24:40,810 --> 00:24:44,460 547 00:24:44,460 --> 00:24:45,310 Wonderful. 548 00:24:45,310 --> 00:24:45,910 Dobre. 549 00:24:45,910 --> 00:24:47,110 Veľké poďakovanie patrí tiež Sam. 550 00:24:47,110 --> 00:24:49,416 Nech sa páči. 551 00:24:49,416 --> 00:24:50,400 Vďaka. 552 00:24:50,400 --> 00:24:52,807 >> Takže, čo sa deje vo všetkých z týchto príkladov hlúpe? 553 00:24:52,807 --> 00:24:55,640 Takže naozaj, pod kapotu Milióny Googlu riadkov kódu 554 00:24:55,640 --> 00:24:58,860 vraj je niekoľko hlúpe IF podmienky, ktoré sú v podstate 555 00:24:58,860 --> 00:25:01,160 kontrolovať, či má používateľ napísaný v tejto vety, 556 00:25:01,160 --> 00:25:03,760 urobiť niečo, čo pravdepodobne vzal netriviálne množstvo času 557 00:25:03,760 --> 00:25:06,080 realizovať len preto, aby bolo zábavné týmto spôsobom. 558 00:25:06,080 --> 00:25:08,430 Ale to je všetko, to sa varí dolu pod kapotu. 559 00:25:08,430 --> 00:25:11,570 Ale, samozrejme, rekurzia je viac z geekier 560 00:25:11,570 --> 00:25:13,880 príkladom z týchto špeciálnych trikov. 561 00:25:13,880 --> 00:25:16,880 A určite tam iní tam vonku ako aj, že majú možno ani 562 00:25:16,880 --> 00:25:18,230 objavil ešte nie. 563 00:25:18,230 --> 00:25:22,830 >> Tak sa pozrite, alebo zvážte Teraz nasledujúci program, 564 00:25:22,830 --> 00:25:24,830 a určite chytiť akýkoľvek z nich na svojej ceste von. 565 00:25:24,830 --> 00:25:28,820 Chystám sa ísť dopredu a otvoriť program, ktorý je 566 00:25:28,820 --> 00:25:30,920 bude snažiť vymeniť dve hodnoty. 567 00:25:30,920 --> 00:25:33,210 Ale skôr, než sme sa tam ísť, ideme na to. 568 00:25:33,210 --> 00:25:38,500 Mohli by sme získať ešte jeden dobrovoľník, myslím, že? 569 00:25:38,500 --> 00:25:40,480 Chceli by ste, aby dobrovoľne? 570 00:25:40,480 --> 00:25:40,980 Nie? 571 00:25:40,980 --> 00:25:41,890 Poď hore. 572 00:25:41,890 --> 00:25:42,390 Poď hore. 573 00:25:42,390 --> 00:25:42,890 Dobre. 574 00:25:42,890 --> 00:25:44,136 Takže Vaše meno je čo? 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 Poď hore, Lauren. 578 00:25:46,890 --> 00:25:50,140 Takže Lauren je byť tu napadla nasledovne. 579 00:25:50,140 --> 00:25:52,310 Rád som ťa spoznal. 580 00:25:52,310 --> 00:25:55,730 Takže Lauren tu má vpredu z jej dvoch prázdnych šálok. 581 00:25:55,730 --> 00:25:57,570 A máme nejaký oranžový šťava a niektoré mlieko 582 00:25:57,570 --> 00:26:00,301 a budeme pokračovať vpred a vykonajte nasledujúce. 583 00:26:00,301 --> 00:26:01,550 Sme len tak naplniť toto. 584 00:26:01,550 --> 00:26:07,840 Niekoľko uncí mlieka sem a poďme vyplniť trochu pomarančovej šťavy tu. 585 00:26:07,840 --> 00:26:11,475 >> A v prednej časti všetkých títo členovia publikum, 586 00:26:11,475 --> 00:26:13,550 prehodiť dve hodnoty týchto poháre. 587 00:26:13,550 --> 00:26:16,970 Dajte pomarančový džús v sektore mlieka pohár a mlieko v šálke pomarančovej šťavy. 588 00:26:16,970 --> 00:26:22,380 589 00:26:22,380 --> 00:26:26,150 Ako by ste to robili, keby ste boli na domov a mal prístup k inej zásoby? 590 00:26:26,150 --> 00:26:27,400 LAUREN: Daj to do iného šálky. 591 00:26:27,400 --> 00:26:28,191 DAVID J. Malan: OK. 592 00:26:28,191 --> 00:26:31,940 Takže poďme sa dočasné premenná, ak budeme chcieť. 593 00:26:31,940 --> 00:26:35,871 A do toho teraz a realizovať Rovnaký postup vymieňania. 594 00:26:35,871 --> 00:26:36,370 Tak dobré. 595 00:26:36,370 --> 00:26:41,490 My sme dali OJ do dočasného premenná, mlieko do premennej OJ, 596 00:26:41,490 --> 00:26:44,481 a teraz dočasné premenná do premennej mlieka. 597 00:26:44,481 --> 00:26:44,980 OK. 598 00:26:44,980 --> 00:26:48,740 Takže veľmi dobre robili doteraz. 599 00:26:48,740 --> 00:26:50,990 Tak to dopadá out-- si myslí, že Myslel len na chvíľu. 600 00:26:50,990 --> 00:26:54,479 Tu, na len geek to trochu, to by bol zodpovedajúci C kód 601 00:26:54,479 --> 00:26:55,520 že sme práve realizovaná. 602 00:26:55,520 --> 00:26:58,650 Mali sme dva vstupy, a a b, a to ako z ktorý budeme len povedať, pre jednoduchosť sú 603 00:26:58,650 --> 00:26:59,260 int je. 604 00:26:59,260 --> 00:27:02,780 A všimnite si tu, keď chcem vymeniť hodnoty dvoch premenných, a a b, 605 00:27:02,780 --> 00:27:06,890 my naozaj potrebujeme sprostredkovateľa, je dočasné premenné, dočasné pohár, 606 00:27:06,890 --> 00:27:10,830 do ktorého sa naleje jednu z hodnôt takže máme vyhradené miesto pre to. 607 00:27:10,830 --> 00:27:13,480 Ale potom je kód je presne ako Lauren tu vykonávané. 608 00:27:13,480 --> 00:27:15,500 >> Teraz, len sa dostať trochu bláznivejšie, dopadá 609 00:27:15,500 --> 00:27:20,930 že môžete to urobiť bez toho, aby dočasné premenné. 610 00:27:20,930 --> 00:27:24,870 Ak chcete to správne, keď ideme musieť podvádzať s nejakou chémiu. 611 00:27:24,870 --> 00:27:26,380 Máme nejaké ďalšie poháre tu. 612 00:27:26,380 --> 00:27:29,600 Takže najbližšia vec, ktorá vyzerá ako je mlieko a vodných perhaps-- 613 00:27:29,600 --> 00:27:34,090 alebo mlieko a OJ-- je máme nejaký voda, takže budeme naplniť tento nahor 614 00:27:34,090 --> 00:27:36,486 s niekoľkými uncí čistou vodou. 615 00:27:36,486 --> 00:27:38,332 To je asi moc. 616 00:27:38,332 --> 00:27:38,832 Jo. 617 00:27:38,832 --> 00:27:39,934 To je rozhodne príliš veľa. 618 00:27:39,934 --> 00:27:40,600 Vydržte sec. 619 00:27:40,600 --> 00:27:43,520 620 00:27:43,520 --> 00:27:48,420 >> A teraz máme olej, ktorý, ak si spomínam zo strednej školy chémia triedy, 621 00:27:48,420 --> 00:27:49,990 Dúfajme, že to nebude miešať s vodou. 622 00:27:49,990 --> 00:27:53,650 Ale je to trochu druh vyzerá ako mlieko a úradnom vestníku. 623 00:27:53,650 --> 00:27:55,760 Takže teraz, bez použitia dočasnú premennú, 624 00:27:55,760 --> 00:27:59,260 môžete ich presunúť tieto dve hodnoty? 625 00:27:59,260 --> 00:28:03,884 Takže oleja ide do vody pohára, voda ide do olejovej šálky. 626 00:28:03,884 --> 00:28:04,800 LAUREN: Bez ďalších pohároch? 627 00:28:04,800 --> 00:28:05,940 DAVID J. Malan: Žiadne ďalšie poháre. 628 00:28:05,940 --> 00:28:07,860 A ja som vlastne skúšať to pred týmto rokom 629 00:28:07,860 --> 00:28:10,110 takže si nemyslím, pokiaľ to nebude vedieť skutočne pracujú chemicky. 630 00:28:10,110 --> 00:28:16,130 631 00:28:16,130 --> 00:28:18,650 To sa nemalo stať. 632 00:28:18,650 --> 00:28:19,761 Funguje to? 633 00:28:19,761 --> 00:28:20,260 Dobre. 634 00:28:20,260 --> 00:28:20,990 Tak oddeľovanie? 635 00:28:20,990 --> 00:28:21,490 Dobre. 636 00:28:21,490 --> 00:28:24,714 Teraz musíme získať voda do druhého šálky. 637 00:28:24,714 --> 00:28:27,630 Múdrejší chémia koncentrátory mohol Pravdepodobne to malo podariť lepšie ako ja. 638 00:28:27,630 --> 00:28:28,510 >> LAUREN: Voda je na dne. 639 00:28:28,510 --> 00:28:31,910 >> DAVID J. Malan: water--, ktorá bola čo je kľúč v poslednej dobe sme to urobili. 640 00:28:31,910 --> 00:28:33,950 Musíte to urobiť v správnom poradí. 641 00:28:33,950 --> 00:28:34,450 Jo. 642 00:28:34,450 --> 00:28:35,270 To je v poriadku. 643 00:28:35,270 --> 00:28:37,290 Takže teraz máme dve šálky oleja. 644 00:28:37,290 --> 00:28:37,790 OK. 645 00:28:37,790 --> 00:28:38,510 To je v poriadku. 646 00:28:38,510 --> 00:28:40,110 Ale chemicky ak to fungovalo ako já-- 647 00:28:40,110 --> 00:28:41,200 >> Lauren: To je voda. 648 00:28:41,200 --> 00:28:41,930 >> DAVID J. Malan: To je väčšinou voda. 649 00:28:41,930 --> 00:28:42,430 Dobre. 650 00:28:42,430 --> 00:28:44,210 Ale to je stále rovnaký pohár ako predtým. 651 00:28:44,210 --> 00:28:47,570 Tak naliať to-- skúste to tam. 652 00:28:47,570 --> 00:28:49,300 OK. 653 00:28:49,300 --> 00:28:51,010 To je dobré využitie triedy času dnes. 654 00:28:51,010 --> 00:28:51,510 OK. 655 00:28:51,510 --> 00:28:53,890 Takže teraz we-- pekné. 656 00:28:53,890 --> 00:28:55,460 Druh. 657 00:28:55,460 --> 00:28:55,960 Dobre. 658 00:28:55,960 --> 00:28:56,690 Takže veľmi dobré. 659 00:28:56,690 --> 00:29:00,006 Ďakujem Lauren. 660 00:29:00,006 --> 00:29:01,950 Veľmi dobre. 661 00:29:01,950 --> 00:29:04,570 >> Takže len vyhodiť svoju myseľ, a to je niečo, čo možno 662 00:29:04,570 --> 00:29:08,660 hrať s, ak sa vám páči v CS50 ID, môžete v skutočnosti, vymeniť dve premenné 663 00:29:08,660 --> 00:29:11,470 bez použitia dočasného celé číslo. 664 00:29:11,470 --> 00:29:13,060 A to je zodpovedajúci C kód. 665 00:29:13,060 --> 00:29:16,110 A ak si spomínam z poslednej Streda, sme zaviedli, ak je krátko, 666 00:29:16,110 --> 00:29:19,720 niektoré nové operátormi v C a robí niekto spomenúť, čo tú malú mrkvu 667 00:29:19,720 --> 00:29:23,660 symbol je, že malá trojuholníková symbol z klávesnice znamená? 668 00:29:23,660 --> 00:29:26,003 Čo bitový operátor? 669 00:29:26,003 --> 00:29:26,770 >> Divákov: Exor. 670 00:29:26,770 --> 00:29:27,645 >> DAVID J. Malan: Exor. 671 00:29:27,645 --> 00:29:28,560 Exclusive Or. 672 00:29:28,560 --> 00:29:32,920 Takže ak chcete, len tak pre zábavu na domov, čím sa získa a a b dva ľubovoľné 673 00:29:32,920 --> 00:29:36,072 hodnoty ako akýkoľvek eight-- a I by si vybral osem bitovou hodnotu. 674 00:29:36,072 --> 00:29:38,530 Ak to budete robiť s 32 bitmi, budete veľmi rýchlo nudiť. 675 00:29:38,530 --> 00:29:42,150 Ale len dať osembitovým Hodnota, ktorá je čo, jedna alebo dva, 676 00:29:42,150 --> 00:29:43,790 a dať b podobnú hodnotu. 677 00:29:43,790 --> 00:29:46,810 A potom pomocou definície XOR od minulej stredy, 678 00:29:46,810 --> 00:29:52,560 platí, že kúsok po kúsku, každý tieto osem bitov v každej z a a b, 679 00:29:52,560 --> 00:29:54,980 a potom to urobiť presne to, za týmto kódom. 680 00:29:54,980 --> 00:29:58,170 A nie je to nesprávne, čo tu vidíte na obrazovke. 681 00:29:58,170 --> 00:30:02,100 Je to naozaj scvrkáva na tri operácie XOR 682 00:30:02,100 --> 00:30:05,910 a nejako magicky a a b vymenia pozície 683 00:30:05,910 --> 00:30:08,010 bez straty akejkoľvek informácie. 684 00:30:08,010 --> 00:30:11,580 >> Takže olej a voda trik je Najbližší reálny svet inkarnácia 685 00:30:11,580 --> 00:30:12,980 Som mohol myslieť, že napodobňovať. 686 00:30:12,980 --> 00:30:15,950 Ale je to určite jednoduchšie použite dočasné premenné, 687 00:30:15,950 --> 00:30:16,920 ako v tomto prípade tu. 688 00:30:16,920 --> 00:30:21,190 A aj toto je príležitosť povedať, Aj tento druh mikro optimalizácie, 689 00:30:21,190 --> 00:30:23,590 ako erudovaný by som, zatiaľ čo druh zábavy 690 00:30:23,590 --> 00:30:27,060 chváliť, ako ste to urobil, bez ako vymieňať s extra premennú, 691 00:30:27,060 --> 00:30:28,640 že to nie je všetko, čo presvedčivé. 692 00:30:28,640 --> 00:30:31,619 Vzhľadom k tomu, aby ušetriť 32 bitov, as v prípade skutočného int, 693 00:30:31,619 --> 00:30:33,410 nie je všetko, že presvedčivé na systéme, v ktorom 694 00:30:33,410 --> 00:30:36,722 môžete používať desiatky megabajtov alebo dokonca viac ako pamäť v týchto dňoch. 695 00:30:36,722 --> 00:30:38,680 A v skutočnosti, keď dostaneme na neskoršie Zadanie problému 696 00:30:38,680 --> 00:30:41,010 a implementovať kúzlo Kontrola a budete 697 00:30:41,010 --> 00:30:43,550 byť vyzvaní, aby tak urobili s to tak málo RAM a tak málo, 698 00:30:43,550 --> 00:30:46,820 čas pokiaľ možno na computer-- vám ešte 699 00:30:46,820 --> 00:30:50,160 majú za týždeň pre vykonávanie to-- budete have-- budete 700 00:30:50,160 --> 00:30:51,799 vyzval k minimalizácii týchto zdrojov. 701 00:30:51,799 --> 00:30:53,840 A to je naozaj len OCCASION tento semester 702 00:30:53,840 --> 00:30:57,940 kde budete povzbudzovaní k holenie off aj najlepší výkon 703 00:30:57,940 --> 00:30:59,340 náklady na inak. 704 00:30:59,340 --> 00:31:02,200 >> Tak what-- ako môžeme vidieť v skutočnej kódu? 705 00:31:02,200 --> 00:31:04,530 Nechaj ma ísť napred teraz a otvoriť príklad 706 00:31:04,530 --> 00:31:07,700 ktorý zámerne sa nazýva Nie Swap, pretože to nie je 707 00:31:07,700 --> 00:31:10,670 v skutočnosti vymeniť premenné ako ste vlastne by sa dalo očakávať. 708 00:31:10,670 --> 00:31:12,260 Takže poďme sa pozrieť. 709 00:31:12,260 --> 00:31:17,050 Tu je program, ktorý nemá CS50 Knižnica sa deje, len Standard I / O. 710 00:31:17,050 --> 00:31:19,560 Teraz máme prototyp ako odkladací priestor do hornej, ktoré práve 711 00:31:19,560 --> 00:31:21,540 znamená, že to musí byť definované neskôr. 712 00:31:21,540 --> 00:31:22,550 A tu je hlavné. 713 00:31:22,550 --> 00:31:26,000 >> Aj ľubovoľne pridelený X a Y v tomto poradí, jeden hodnoty a dva 714 00:31:26,000 --> 00:31:28,590 len preto, že sú malé a ľahko sa premýšľať. 715 00:31:28,590 --> 00:31:32,280 A potom som jednoducho veľa printfs kde mám kontrolu zdravý rozum. x je 1 716 00:31:32,280 --> 00:31:35,110 a y je 2, je podľa všetkého čo tieto printfs povie. 717 00:31:35,110 --> 00:31:36,530 Takže žiadna mágia tak ďaleko. 718 00:31:36,530 --> 00:31:40,100 >> Potom budem tvrdiť, s tlačiť def, vymieňať dot dot bodky. 719 00:31:40,100 --> 00:31:43,730 Chystám sa zavolať swap Funkcie, odovzdávanie v x a y. 720 00:31:43,730 --> 00:31:47,350 A predpokladajme, že pre túto chvíľu Swap je implementovaný presne 721 00:31:47,350 --> 00:31:49,930 ako to bolo pred chvíľou s dočasné premenné. 722 00:31:49,930 --> 00:31:52,670 A tak som sa tvrdiť, smelo, vymenil. 723 00:31:52,670 --> 00:31:55,429 x je teraz to, a y je teraz, že. 724 00:31:55,429 --> 00:31:57,220 Ale súbor, samozrejme, sa nazýva No Prepnúť. 725 00:31:57,220 --> 00:31:58,678 Takže poďme sa skutočne vidieť, čo sa stane. 726 00:31:58,678 --> 00:32:04,450 Ak mám zostaviť bez swapu a potom do ./noswap, x je 1, y je 2. 727 00:32:04,450 --> 00:32:05,770 Swapping vymenil. 728 00:32:05,770 --> 00:32:07,200 x je 1, y je 2. 729 00:32:07,200 --> 00:32:11,980 Takže to vlastne sa zdá byť chybný aj hoci swap-- poďme posunúť nadol now-- 730 00:32:11,980 --> 00:32:16,542 sa vykonáva presne podľa kód, ktorý som navrhol pred chvíľou. 731 00:32:16,542 --> 00:32:19,000 Takže my nebudeme mať fantázie s XOR veci zatiaľ. 732 00:32:19,000 --> 00:32:21,890 Aj to by malo fungovať len rovnako ako s mliekom a úradnom vestníku, 733 00:32:21,890 --> 00:32:25,820 ale nezdá sa, že funguje. 734 00:32:25,820 --> 00:32:27,180 >> Takže poďme to urobiť znova. 735 00:32:27,180 --> 00:32:29,310 Možno som jednoducho nebol v chode vpravo. 736 00:32:29,310 --> 00:32:32,010 Takže poďme bežať Bez Prepnúť znova. 737 00:32:32,010 --> 00:32:32,900 Možno Já-- nie. 738 00:32:32,900 --> 00:32:34,400 Tak to jednoducho nefunguje. 739 00:32:34,400 --> 00:32:36,060 Takže poďme urobiť malý kontrolu zdravý rozum. 740 00:32:36,060 --> 00:32:39,690 Nechajte ma ísť napred tu v Swap a stačí pridať, počkajte chvíľu, 741 00:32:39,690 --> 00:32:43,856 a je% i / n, a poďme plug-in hodnoty a. 742 00:32:43,856 --> 00:32:45,730 Pretože naozaj chcem aby videli, čo sa deje. 743 00:32:45,730 --> 00:32:47,570 A skutočne, to je ladiace technika 744 00:32:47,570 --> 00:32:50,028 že by ste mohli byť použitie v úradné hodiny, alebo doma už, 745 00:32:50,028 --> 00:32:53,560 podobný v prvej polovici roka Dan Armendariz je video v PSET3 746 00:32:53,560 --> 00:32:56,870 kde sme predstavili tlač def as odporúčaná technika, aspoň 747 00:32:56,870 --> 00:32:58,080 Pre jednoduché prípady. 748 00:32:58,080 --> 00:33:01,720 Nechaj ma ísť dopredu a spustite make opäť bez swapu, ./noswap. 749 00:33:01,720 --> 00:33:04,370 750 00:33:04,370 --> 00:33:05,840 >> Zaujímavé. 751 00:33:05,840 --> 00:33:11,670 Takže si všimnúť, čo sa zdá byť pravda. x je 1, y je 2, ale je 2, keď b je 1. 752 00:33:11,670 --> 00:33:16,790 Takže tí dvaja sa nejako vymenili ale x a y nie sú stále prehodené. 753 00:33:16,790 --> 00:33:21,090 Tak aby bolo jasno, čo sa deje sa, tu mám x a y 754 00:33:21,090 --> 00:33:25,380 a tie, ktoré sú premenné miestne v Rozsah hlavné, som okolo v x a y 755 00:33:25,380 --> 00:33:26,170 vymeniť. 756 00:33:26,170 --> 00:33:29,080 Teraz, swapu, ako samostatná funkcia, je zadarmo zavolať svoje argumenty 757 00:33:29,080 --> 00:33:30,590 alebo jeho parametre niečo chce. 758 00:33:30,590 --> 00:33:33,280 Foo či bar alebo X alebo Y a alebo b. 759 00:33:33,280 --> 00:33:36,870 Len aby bolo jasné, že sú nie je totožný s x a y per sa, 760 00:33:36,870 --> 00:33:38,020 Povedal som, a a b. 761 00:33:38,020 --> 00:33:40,040 Ale my sme im mohli nazvať, čo chceme. 762 00:33:40,040 --> 00:33:43,960 >> A tak to vyzerá, swap odovzdávaný 763 00:33:43,960 --> 00:33:48,980 x-- AKA je-- a to je odovzdaním y- AKA b. 764 00:33:48,980 --> 00:33:51,900 Nejako sa tieto tri riadky sú vymieňať presne tieto hodnoty 765 00:33:51,900 --> 00:33:53,510 ako Lauren urobil s mliekom a vestníku. 766 00:33:53,510 --> 00:33:56,010 Ale keď sme vytlačiť Hodnoty, a a b 767 00:33:56,010 --> 00:34:01,340 sú síce vymenia, ale aj x y mať žiadnu zmenu k nim. 768 00:34:01,340 --> 00:34:03,150 Pripomeňme si, že x a y sú tu. 769 00:34:03,150 --> 00:34:05,320 >> Takže môžeme vidieť cez ďalšia technika tiež. 770 00:34:05,320 --> 00:34:08,110 Aj to je technika vložené do problému nastaviť tri. 771 00:34:08,110 --> 00:34:10,780 Poďme ďalej a robiť to v CS50 ID ak ste tak už neurobili. 772 00:34:10,780 --> 00:34:13,730 Na pravej strane my majú túto kartu debugger. 773 00:34:13,730 --> 00:34:16,159 A ak otvoríte toto hore, tam je nejaký tajomný informácie 774 00:34:16,159 --> 00:34:17,530 že je hodená na vás spočiatku. 775 00:34:17,530 --> 00:34:19,310 Ale poďme podpichovať to od seba naozaj rýchlo. 776 00:34:19,310 --> 00:34:21,620 >> Takže človek, vidíte lokálne premenné. 777 00:34:21,620 --> 00:34:26,230 Ukázalo sa, že stavať na CS50 IDE, a mnoho programovacích prostredí viac 778 00:34:26,230 --> 00:34:28,060 všeobecne, je debugger. 779 00:34:28,060 --> 00:34:31,340 Nástroj, ktorý vám umožní vizuálne vidieť čo sa deje vo vnútri vášho programu 780 00:34:31,340 --> 00:34:34,380 aby bolo nutné uchýliť sa k pridanie printfs a kompiláciu a spúšťanie 781 00:34:34,380 --> 00:34:37,588 a pridanie printf je a kompiláciu a beh, ktorý už v úradných hodinách 782 00:34:37,588 --> 00:34:40,070 alebo doma, je zrejme stále dosť únavné. 783 00:34:40,070 --> 00:34:43,090 >> Tak tu, za chvíľu, my sme bude vidieť v reálnom čase 784 00:34:43,090 --> 00:34:44,760 hodnoty našich lokálnych premenných. 785 00:34:44,760 --> 00:34:47,880 Sme tiež bude môcť nastaviť čo sa nazýva zarážky, ktoré 786 00:34:47,880 --> 00:34:52,570 sú možnosti v mojom programe pre pozastavenie spracovanie od určitého riadku kódu 787 00:34:52,570 --> 00:34:53,710 že som zvedavý. 788 00:34:53,710 --> 00:34:54,210 Je to tak? 789 00:34:54,210 --> 00:34:55,969 Tieto programy beží v zlomku sekundy. 790 00:34:55,969 --> 00:35:00,450 Je to celkom pekné pre nás pomalší človeka aby bolo možné pozastaviť, chvíľku, viď 791 00:35:00,450 --> 00:35:02,380 čo sa deje okolo určitý riadok kódu 792 00:35:02,380 --> 00:35:05,050 bez programu orbe cez to a dokončovacie úplne. 793 00:35:05,050 --> 00:35:08,510 Takže zarážky bude nám umožňujú zlomiť a pauza v určitom okamihu. 794 00:35:08,510 --> 00:35:12,990 >> Zásobník volaní je ozdobný spôsob, hovoriť, aké funkcie sú v súčasnej dobe 795 00:35:12,990 --> 00:35:14,140 volaná v túto chvíľu. 796 00:35:14,140 --> 00:35:15,370 Hlavné je vždy najskôr zavolať. 797 00:35:15,370 --> 00:35:17,230 Ale ak Hlavný volá volanie funkcie Swap, 798 00:35:17,230 --> 00:35:20,470 my vlastne bude vidieť tower funkcií, ktoré boli 799 00:35:20,470 --> 00:35:22,400 volal v obrátenom chronologickom poradí. 800 00:35:22,400 --> 00:35:23,310 Takže poďme sa pozrieť, že. 801 00:35:23,310 --> 00:35:24,327 >> Idem oddialiť. 802 00:35:24,327 --> 00:35:25,660 Chystám sa vrátiť do svojho kódu. 803 00:35:25,660 --> 00:35:27,540 A len preto, že chcem, byť pedantská tu, 804 00:35:27,540 --> 00:35:31,100 Chystám sa ísť ďalej a kliknite na tlačidlo len na ľavej strane linky päť. 805 00:35:31,100 --> 00:35:32,830 A to vytvára červenú bodku. 806 00:35:32,830 --> 00:35:36,200 A všimnite si na pravej strane že ladiaci program vie, hej, 807 00:35:36,200 --> 00:35:41,020 Len som povedal, zarážku na noswap.c linka päť, konkrétne 808 00:35:41,020 --> 00:35:42,480 v tomto riadku kódu. 809 00:35:42,480 --> 00:35:45,090 Takže debugger vie, že požiadali, aby nabudúce 810 00:35:45,090 --> 00:35:48,530 Vediem môj program pozastavíte poprava tam skôr než len 811 00:35:48,530 --> 00:35:50,390 beží celú vec veľmi rýchle. 812 00:35:50,390 --> 00:35:53,889 >> Takže teraz budem kliknite na Debug Tlačidlo na samom vrchole IDE 813 00:35:53,889 --> 00:35:55,430 a to bude robiť nasledujúce. 814 00:35:55,430 --> 00:36:00,680 Bude to otvoriť spočiatku trochu desivo vyzerajúci druhý terminál window-- 815 00:36:00,680 --> 00:36:02,679 vzdialenej ladenie od hostiť také a such-- 816 00:36:02,679 --> 00:36:04,970 a my sa vrátime k tomu, čo všetko to znamená, že onedlho. 817 00:36:04,970 --> 00:36:09,020 Ale čo je dôležité pre túto chvíľu je to, že červená bodka bol zasiahnutý, 818 00:36:09,020 --> 00:36:11,735 ladiaci má úmyselne pozastavená execution-- 819 00:36:11,735 --> 00:36:15,560 nie na tejto linke sám o sebe, ale na prvý riadok aktuálny kód v tejto funkcii. 820 00:36:15,560 --> 00:36:18,040 A to je dôvod, prečo je rad siedmych teraz zvýraznený žlto. 821 00:36:18,040 --> 00:36:20,550 >> A teraz poďme sa pozrieť na pravej strane. 822 00:36:20,550 --> 00:36:27,300 Vyzerá to, že v predvolenom nastavení, dosť pekne, x má akú hodnotu? 823 00:36:27,300 --> 00:36:27,860 0. 824 00:36:27,860 --> 00:36:29,750 A y má akú hodnotu? 825 00:36:29,750 --> 00:36:30,410 Zero. 826 00:36:30,410 --> 00:36:35,540 A to je potrebné očakávať v tom zmysle, že x a y-, že žltý line-- má 827 00:36:35,540 --> 00:36:36,770 nevykoná doteraz. 828 00:36:36,770 --> 00:36:38,510 Takže x by nemali mať hodnotu 1. 829 00:36:38,510 --> 00:36:41,470 To by mohlo mať inú hodnotu, tzv hodnota odpadky. 830 00:36:41,470 --> 00:36:44,320 A máme to šťastie, že je to nulu v tomto okamihu, v podstate. 831 00:36:44,320 --> 00:36:46,400 >> Takže teraz je tu len málo Tlačidlá musíme starať 832 00:36:46,400 --> 00:36:48,100 o tom, kedy ladenie týmto spôsobom. 833 00:36:48,100 --> 00:36:49,970 Všimnite si, máme tlačidlo Play. 834 00:36:49,970 --> 00:36:51,877 A ak budeme hrať, alebo hit pokračovať, to je len 835 00:36:51,877 --> 00:36:53,710 sa prejsť zvyšok programu 836 00:36:53,710 --> 00:36:55,300 alebo kým nenarazí ďalšie zarážku. 837 00:36:55,300 --> 00:36:56,910 Ale ja som to nastaviť ľubovoľný iný Zlomové body, takže je to len 838 00:36:56,910 --> 00:36:58,118 bude prevádzkovať až do konca. 839 00:36:58,118 --> 00:37:00,280 Tento druh porazí Účelom šťourat. 840 00:37:00,280 --> 00:37:03,290 >> Takže namiesto toho, o čo sa starám tieto ikony doprava. 841 00:37:03,290 --> 00:37:05,360 A keď som sa vznášať sa nad je, ako by ste mali taky, 842 00:37:05,360 --> 00:37:07,450 uvidíte malé tips-- tipy nástrojov. 843 00:37:07,450 --> 00:37:09,020 Tento je prekračovať. 844 00:37:09,020 --> 00:37:11,290 Teraz to neznamená, že preskočiť nasledujúci riadok kódu. 845 00:37:11,290 --> 00:37:14,840 To len znamená, vykonať ho a presunúť na ďalšie, presunúť na ďalšie, 846 00:37:14,840 --> 00:37:15,580 presunúť na ďalšie. 847 00:37:15,580 --> 00:37:17,610 Inými slovami, pomocou toto tlačidlo, môžem chodiť 848 00:37:17,610 --> 00:37:20,390 cez môj kód jeden krok v čase. 849 00:37:20,390 --> 00:37:21,914 Riadok po riadku, a to doslova. 850 00:37:21,914 --> 00:37:23,830 Teraz, na pravej strane to, že je tu ešte jeden 851 00:37:23,830 --> 00:37:25,163 že uvidíme za chvíľu. 852 00:37:25,163 --> 00:37:27,820 Jedná sa o tzv Step Into ikonu, ktorá je 853 00:37:27,820 --> 00:37:30,300 bude dovoľte mi ponor do inej funkcie. 854 00:37:30,300 --> 00:37:31,800 Ale pozrime sa to za chvíľu. 855 00:37:31,800 --> 00:37:33,280 Takže idem na tlačidlo prekročiť. 856 00:37:33,280 --> 00:37:35,820 A teraz nevšimol, keď som kliknite Toto tlačidlo v pravom hornom rohu, 857 00:37:35,820 --> 00:37:41,260 majte oči zhruba v lokálnej Premenné a uvidíme, čo sa stane s x. 858 00:37:41,260 --> 00:37:44,115 x je teraz 1, pretože žltá linka je teraz vykonaný 859 00:37:44,115 --> 00:37:45,840 a my sme sa presunul k linke 8. 860 00:37:45,840 --> 00:37:49,840 A za chvíľu y by sa snáď stane 2. 861 00:37:49,840 --> 00:37:52,330 >> Teraz, nič, čo by zaujímavé sa stane na chvíľu. 862 00:37:52,330 --> 00:37:53,390 To všetko je, je printf. 863 00:37:53,390 --> 00:37:58,010 A všimnite si, v mojom sekundárnom termináli okná, vidím výstup tlačového def. 864 00:37:58,010 --> 00:38:01,080 A teraz musím urobiť Rozhodnutie ako programátor. 865 00:38:01,080 --> 00:38:04,360 Môžem prekročiť túto líniu kód, spustením to, ale nie 866 00:38:04,360 --> 00:38:06,220 dostať zvedavý, čo je vo vnútri. 867 00:38:06,220 --> 00:38:11,130 Alebo som si skutočne krok do nej a ísť dovnútra Swap sám. 868 00:38:11,130 --> 00:38:12,340 Takže poďme urobiť to druhé. 869 00:38:12,340 --> 00:38:15,550 >> Nechaj ma ísť dopredu a kliknite na tlačidlo Nie je Krok cez, ale krok do. 870 00:38:15,550 --> 00:38:17,300 Oznámenia, zrazu okenné zmeny 871 00:38:17,300 --> 00:38:19,330 zvýraznite prvé riadok kódu v swapu. 872 00:38:19,330 --> 00:38:20,710 To je linka 21. 873 00:38:20,710 --> 00:38:25,220 A teraz, čo je druh funky je to, keď sa pozriete sem, ako sa očakávalo, 874 00:38:25,220 --> 00:38:29,720 čiarka b je 1 a 2, v danom poradí. 875 00:38:29,720 --> 00:38:33,840 Prečo je temp 32767? 876 00:38:33,840 --> 00:38:36,560 Pripomínajúc, že ​​teplota, podobne ako prázdny šálku pred chvíľou, 877 00:38:36,560 --> 00:38:38,980 Tu je deklarovaná na riadku 21. 878 00:38:38,980 --> 00:38:43,390 Prečo 32,000- Chcem povedať, prečo je to len nejaký divný hodnota? 879 00:38:43,390 --> 00:38:43,890 Jo? 880 00:38:43,890 --> 00:38:45,190 >> Divákov: To nie je inicializovaný. 881 00:38:45,190 --> 00:38:46,940 >> DAVID J. Malan: Je to nebol inicializovaný. 882 00:38:46,940 --> 00:38:49,370 Takže náš počítač vždy má fyzickej pamäte. 883 00:38:49,370 --> 00:38:50,544 To má vždy fyzickej pamäte RAM. 884 00:38:50,544 --> 00:38:52,710 A je tu vždy Zero a jeden je tam, že jo? 885 00:38:52,710 --> 00:38:54,626 Vzhľadom k tomu, že sme pomocou nášho počítač po celý deň, 886 00:38:54,626 --> 00:38:57,210 používate CS50 IDE alebo servery po celý deň. 887 00:38:57,210 --> 00:39:01,159 Tak, že RAM buď má nejaké nuly, alebo niekto je alebo niektoré nuly a jednotky. 888 00:39:01,159 --> 00:39:02,950 Bez ohľadu na to, či je alebo nie, že ich máte používať. 889 00:39:02,950 --> 00:39:05,270 Nemôžete len tak prázdny priestory, kde chcete bitov. 890 00:39:05,270 --> 00:39:06,850 Sú to buď nuly a jednotky. 891 00:39:06,850 --> 00:39:09,610 >> Tak to dopadá, že teplota, pretože sme nie je inicializovaná to ešte, 892 00:39:09,610 --> 00:39:14,580 máme tie 32 bitov, ale som nie bol inicializovaný na akejkoľvek známej hodnoty. 893 00:39:14,580 --> 00:39:18,110 Takže všetko, čo boli najviac naposledy použitej for-- tých 32 bits-- 894 00:39:18,110 --> 00:39:23,000 sme len vidieť artefakty niektorých predchádzajúce použitie týchto osobitných 32 895 00:39:23,000 --> 00:39:23,500 bitov. 896 00:39:23,500 --> 00:39:27,780 Akonáhle som kliknite na tlačidlo Krok cez hoci, uf, temp dostane hodnotu 1. 897 00:39:27,780 --> 00:39:31,600 A ak by som to znova, a je Chystáte sa mať hodnotu 2 898 00:39:31,600 --> 00:39:33,830 a potom b sa chystá mať hodnotu 1. 899 00:39:33,830 --> 00:39:36,390 >> A tak to, čo je teraz pekná na tento bod v príbehu 900 00:39:36,390 --> 00:39:39,750 je to, že je debugger mi ukazoval, super pomaly 901 00:39:39,750 --> 00:39:42,640 v mojom vlastnom tempom, aké stav swapu je. 902 00:39:42,640 --> 00:39:47,490 Nevšimnúť hore tu, oznámenia že zásobník volania skutočne 903 00:39:47,490 --> 00:39:49,180 má dve vrstvy na to. 904 00:39:49,180 --> 00:39:53,240 Teraz sa ten, ktorý je označený ako Swap, keď som kliknite na hlavné miesto, 905 00:39:53,240 --> 00:39:57,100 Všimnite si, ako miestni premenné zmeniť preto, že autor môže len hop 906 00:39:57,100 --> 00:39:59,740 okolo a ísť do akéhokoľvek iného rozsahu. 907 00:39:59,740 --> 00:40:04,070 Takže aj keď to robíme toto všetko pracovať a správne vymieňať A a B, 908 00:40:04,070 --> 00:40:09,080 keď pôjdem tam a späť medzi Swap kde a je 2 a b je 1 a Main, 909 00:40:09,080 --> 00:40:11,851 bol hlavný bol ovplyvnený vôbec? 910 00:40:11,851 --> 00:40:12,350 Nie. 911 00:40:12,350 --> 00:40:13,930 Takže to, čo je tu stánok s jedlom? 912 00:40:13,930 --> 00:40:18,200 No, to ukáže, že kedykoľvek volanie funkcie, ako Swap, 913 00:40:18,200 --> 00:40:21,600 a odovzdať ju argumenty, čo budete prechádzať k funkcii Swap 914 00:40:21,600 --> 00:40:24,730 V tomto prípade je kópia z týchto argumentov. 915 00:40:24,730 --> 00:40:28,620 Takže v prípade, x a y sú každý v tomto poradí 32 bitov, čo Swap je stále 916 00:40:28,620 --> 00:40:30,760 je dva nové miestne premenné, alebo argumenty, 917 00:40:30,760 --> 00:40:34,380 volal a B- ale tie sú ľubovoľné names-- ale vzor núl 918 00:40:34,380 --> 00:40:39,520 a tie vo vnútri A a B sú zoradili že je totožný s x a y 919 00:40:39,520 --> 00:40:42,610 ale oni nie sú to isté ako x a y. 920 00:40:42,610 --> 00:40:46,880 >> Je to ako keby Main má na svojom kúsku papier číslo 1 a 2 pre x a y, 921 00:40:46,880 --> 00:40:49,260 a potom, keď to ruky, ktoré kus papiera Swap, 922 00:40:49,260 --> 00:40:51,970 Swap veľmi rýchlo dostane jeho vlastné pero, zapíše 923 00:40:51,970 --> 00:40:56,240 1 a 2 na vlastnom liste papiera, ruky späť pôvodný XY Hlavné 924 00:40:56,240 --> 00:40:58,790 a potom robí jeho vlastný tá vec s a a b. 925 00:40:58,790 --> 00:41:01,940 A toto je teraz mimoriadne dôležité, pretože to má netriviálne dôsledky 926 00:41:01,940 --> 00:41:06,260 pre skutočne písanie správny kód pretože to by sa zdalo, že nemôžeme vymeniť 927 00:41:06,260 --> 00:41:07,500 dve premenné. 928 00:41:07,500 --> 00:41:09,150 >> Napísal som správnu funkciu Zameniť. 929 00:41:09,150 --> 00:41:12,770 Vytvorili sme to s Lauren as správna funkcia swapu v skutočnosti, 930 00:41:12,770 --> 00:41:16,700 ale zrejme nič z toho záležitosti, ak nemôžete vlastne 931 00:41:16,700 --> 00:41:19,530 zameniť dve hodnoty trvalo. 932 00:41:19,530 --> 00:41:21,970 Takže potrebujeme iný spôsob sa skutočne dostať na to, 933 00:41:21,970 --> 00:41:24,472 a musíme byť schopní tento problém skutočne vyriešiť. 934 00:41:24,472 --> 00:41:27,180 A ukazuje out-- a my prídeme späť do tohto konkrétneho obrázku 935 00:41:27,180 --> 00:41:30,500 Pred long-- to je jedným zo spôsobov, môžete čerpať pamäte počítača. 936 00:41:30,500 --> 00:41:31,460 Je to len obdĺžnik. 937 00:41:31,460 --> 00:41:32,960 Mohol by si ho nakresliť akýkoľvek rad spôsobov, ale je to 938 00:41:32,960 --> 00:41:35,740 vhodné nakresliť to ako obdĺžnik z nasledujúceho dôvodu. 939 00:41:35,740 --> 00:41:40,040 >> Chystáme sa začať dnes a za hovorí o tzv zásobníka. 940 00:41:40,040 --> 00:41:43,870 A stack je len kus z RAM-- kus memory-- 941 00:41:43,870 --> 00:41:47,100 že funkcie majú prístup , Keď sa im hovorí. 942 00:41:47,100 --> 00:41:49,800 A tak sa ukáže, že na na samé dno tohto zásobníka 943 00:41:49,800 --> 00:41:53,590 je miesto, kde všetky hlavné je lokálnych premenných a org C a org V a všetky tie veci 944 00:41:53,590 --> 00:41:56,950 sa chystáte ísť v predvolenom nastavení. A ak Main volá nejakú inú funkciu, ako Swap, 945 00:41:56,950 --> 00:42:00,330 dobre, Swap sa chystá získať ďalšie Vrstva pamäte až nad ňou. 946 00:42:00,330 --> 00:42:04,490 >> A tak len aby vám rýchle zbežnú obrázok o tom, či som ísť cez here-- 947 00:42:04,490 --> 00:42:09,450 a dovoľte mi, aby som zrkadliť to na nad hlavou as well-- čo sa skutočne mám, 948 00:42:09,450 --> 00:42:12,100 ak sa staráme len o Spodná časť obrázka pre túto chvíľu, 949 00:42:12,100 --> 00:42:15,070 je, že keď som spustení programu a Main sa zavolá, 950 00:42:15,070 --> 00:42:18,330 Hlavné je daná kus RAM v mojom počítači, ktorý je 951 00:42:18,330 --> 00:42:20,060 v spodnej časti tejto takzvanej zásobníka. 952 00:42:20,060 --> 00:42:22,143 A ja budem kresliť zámerne ako štvorec. 953 00:42:22,143 --> 00:42:24,540 Takže je to ako 32 bitov alebo štyri byty. 954 00:42:24,540 --> 00:42:28,790 A ak je táto hlavná funkcia má premennú s názvom x s hodnotou 1 955 00:42:28,790 --> 00:42:32,626 a to má premennú s názvom y s hodnotou 2, to je 956 00:42:32,626 --> 00:42:35,750 ako pri tento plátok pamäti Hlavný bol daný prevádzkovými 957 00:42:35,750 --> 00:42:38,850 Systém a rozdelí to tak, aby prvá miestna premenná ide tu, 958 00:42:38,850 --> 00:42:40,930 druhá ide tu, a to je všetko. 959 00:42:40,930 --> 00:42:45,590 >> Keď Hlavné volá swap, Swap získa svoju vlastnú krajec pamäte 960 00:42:45,590 --> 00:42:48,280 že budeme čerpať takhle z operačného systému, 961 00:42:48,280 --> 00:42:50,820 a bude to mať svoje vlastné lokálne premenné na báze 962 00:42:50,820 --> 00:42:53,825 Na našej implementácia skôr s lokálnymi premennými 963 00:42:53,825 --> 00:42:58,010 a b, ktoré spočiatku získať hodnoty 1 a 2. 964 00:42:58,010 --> 00:43:00,450 Ale potom, akonáhle swap kód vykoná, 965 00:43:00,450 --> 00:43:03,760 a Lauren vlastne swapov EÚ a mlieko, čo sa deje? 966 00:43:03,760 --> 00:43:09,030 No, to 2 sa stáva 1, túto 1 sa stáva 2, a mimochodom, 967 00:43:09,030 --> 00:43:13,360 tam je teplota premenná, ktorá je bytia použité, že celú tú dobu, že nakoniec 968 00:43:13,360 --> 00:43:14,470 zmizne. 969 00:43:14,470 --> 00:43:16,720 Ale to nezáleží na tom, koľko práce robíte 970 00:43:16,720 --> 00:43:22,160 v tomto riadku of-- v tejto pamäti, x a y sú úplne nedotknuté. 971 00:43:22,160 --> 00:43:26,320 >> Takže potrebujeme nejaký spôsob, ako dať Swap a funkcie ako to 972 00:43:26,320 --> 00:43:32,640 tajný prístup, ak chcete, aby Funkcie jako-- do pamäti ako x a y. 973 00:43:32,640 --> 00:43:35,110 Takže poďme sa pozrieť na príklad, ktorá pomáha 974 00:43:35,110 --> 00:43:38,220 nám vidieť presne to, čo je to deje na celom tomto období. 975 00:43:38,220 --> 00:43:40,284 Chystám sa pokračovať a otvoriť si porovnajte Zero. 976 00:43:40,284 --> 00:43:42,200 A ja idem zavrieť naše debugger, idem 977 00:43:42,200 --> 00:43:44,360 zatvorte túto desivé vyzerajúce správu spravodlivý hovorí, počkaj, 978 00:43:44,360 --> 00:43:45,800 ste v stredu ladenie. 979 00:43:45,800 --> 00:43:48,383 Chystám sa tu schovať túto záložku jednoducho sa vrátiť k jednoduchosti. 980 00:43:48,383 --> 00:43:50,160 Takže nebojte sa, ak je zabitý GDB. 981 00:43:50,160 --> 00:43:53,910 To jednoducho znamená, že program má bolo skončiť, zámerne v tomto prípade, 982 00:43:53,910 --> 00:43:54,820 mnou. 983 00:43:54,820 --> 00:43:57,700 >> A teraz si porovnajte Zero to robí. 984 00:43:57,700 --> 00:44:00,110 Som pomocou CS50 Knižnica v štandardnom I / O. 985 00:44:00,110 --> 00:44:04,319 Mám ten prvý hlavnú funkciu hovorí, niečo povedať, a dostane reťazec. 986 00:44:04,319 --> 00:44:06,110 Potom hovorí, že znovu a dostane ďalší reťazec. 987 00:44:06,110 --> 00:44:09,910 A všimnite si, že tieto dva reťazce sa nazývajú S a T, v danom poradí. 988 00:44:09,910 --> 00:44:12,910 A teraz tento program, Porovnať Zero, jeho účel v živote, 989 00:44:12,910 --> 00:44:15,470 to má sa mi povedať, som zadajte to isté? 990 00:44:15,470 --> 00:44:16,910 A tak som sa vraciam do týždňa jednu. 991 00:44:16,910 --> 00:44:19,950 Ja používam svoj rovný rovného operátor ktorá je prevádzkovateľom kvalita. 992 00:44:19,950 --> 00:44:22,220 Nie operátor priradenia, operátor rovnosti. 993 00:44:22,220 --> 00:44:23,890 Ja som len porovnaním s a t. 994 00:44:23,890 --> 00:44:27,470 >> Takže poďme skutočne ísť do toho a to urobiť. 995 00:44:27,470 --> 00:44:32,680 A budem pokračovať a robiť si porovnajte Zero. 996 00:44:32,680 --> 00:44:35,110 Budem robiť ./comparezero. 997 00:44:35,110 --> 00:44:37,150 A ja idem vpred a povedať niečo 998 00:44:37,150 --> 00:44:43,450 ako, poďme robiť mamu malými písmenami a ako sa o matke veľkými písmenami. 999 00:44:43,450 --> 00:44:45,034 A samozrejme som písať rôzne veci. 1000 00:44:45,034 --> 00:44:45,533 Dobre. 1001 00:44:45,533 --> 00:44:46,570 To je to, aby sa dalo očakávať. 1002 00:44:46,570 --> 00:44:47,640 >> Poďme ho spustiť znova. 1003 00:44:47,640 --> 00:44:49,740 V oboch prípadoch robiť malé písmená, malé písmená. 1004 00:44:49,740 --> 00:44:51,490 To vyzerá super totožný so mnou. 1005 00:44:51,490 --> 00:44:52,930 Enter. 1006 00:44:52,930 --> 00:44:53,430 OK. 1007 00:44:53,430 --> 00:44:55,804 Možno je to len trochu divné, pretože to nepáčilo mojej gramatiku. 1008 00:44:55,804 --> 00:44:59,930 Takže poďme urobiť kapitálu MOM, kapitál MOM, identické. 1009 00:44:59,930 --> 00:45:01,490 Rozdielne veci. 1010 00:45:01,490 --> 00:45:03,907 >> Tak prečo je to? 1011 00:45:03,907 --> 00:45:06,240 No, čo sa vlastne bude Na pod pokrievku tu? 1012 00:45:06,240 --> 00:45:08,180 Takže poďme sa cez Tu na chvíľku 1013 00:45:08,180 --> 00:45:10,910 a zvážiť, čo GetString je v skutočnosti robí. 1014 00:45:10,910 --> 00:45:13,385 Pri volaní getString, to je funkcia sme 1015 00:45:13,385 --> 00:45:16,510 Sami písal a to nejako dostane sled charakterov od užívateľa. 1016 00:45:16,510 --> 00:45:20,280 A predpokladajme, že prvý Tentokrát som zavolať getString, že mi dáva 1017 00:45:20,280 --> 00:45:21,930 kus pamäte, ktorá vyzerá takto. 1018 00:45:21,930 --> 00:45:26,990 A keď som napísal v malými m-o-m-- a to, čo ide po ňom? 1019 00:45:26,990 --> 00:45:28,840 Len rýchly check zdravý rozum. 1020 00:45:28,840 --> 00:45:29,780 >> Spätné lomítko nula. 1021 00:45:29,780 --> 00:45:30,510 Vieme, že. 1022 00:45:30,510 --> 00:45:32,784 A pripomenul, že sme hrali okolo Zamil menom 1023 00:45:32,784 --> 00:45:34,950 a veľa ďalších mien keď Rob sa sem pozerá 1024 00:45:34,950 --> 00:45:36,280 na to, čo sa deje v pamäti. 1025 00:45:36,280 --> 00:45:37,780 Tak, že príbeh je to presne to isté. 1026 00:45:37,780 --> 00:45:40,160 To je to, čo GetString sa vracia ku mne. 1027 00:45:40,160 --> 00:45:44,780 A teraz, môj kód pred chvíľou uložený vrátená hodnota getString 1028 00:45:44,780 --> 00:45:47,510 v premennej nazvaný s. 1029 00:45:47,510 --> 00:45:51,390 A potom druhýkrát som volal to, to uložená v premennej s názvom t. 1030 00:45:51,390 --> 00:45:55,070 >> Takže keď som ísť sem, potrebujem kresliť tejto miestnej proměnná-- 1031 00:45:55,070 --> 00:45:59,610 a ja všeobecne ísť do kresliť reťazec ako jenom-- my budeme 1032 00:45:59,610 --> 00:46:02,360 hovoria S- ako malé námestie tu. 1033 00:46:02,360 --> 00:46:09,760 A teraz, ako sa mama somehow-- ísť dovnútra tejto premennej s? 1034 00:46:09,760 --> 00:46:12,010 No, musíme sa vrátiť späť na prvých princípov tu. 1035 00:46:12,010 --> 00:46:15,660 Čo je to vlastne GetString vracia? 1036 00:46:15,660 --> 00:46:19,030 >> Tak to dopadá, že M-O-M backslash nula, a akýkoľvek počet 1037 00:46:19,030 --> 00:46:22,364 ostatných reťazcov v pamäti, ako je Zamil a Rob alebo Andy, alebo akékoľvek iné, 1038 00:46:22,364 --> 00:46:24,280 sú samozrejme v našom RAM počítača alebo pamäte. 1039 00:46:24,280 --> 00:46:27,760 A vaše RAM má jako-- máte koncert pamäte RAM, dva koncerty RAM, 1040 00:46:27,760 --> 00:46:30,860 alebo miliarda alebo dve miliardy bajtov, alebo možno ešte v týchto dňoch. 1041 00:46:30,860 --> 00:46:34,070 Takže poďme sa predpokladať, pre dnešné účely, že nezáleží na tom, ako sme sa počítať 1042 00:46:34,070 --> 00:46:36,640 je, ale môžeme počítať každý z tých miliárd, alebo dve miliardy 1043 00:46:36,640 --> 00:46:37,880 alebo štyri miliardy bajtov. 1044 00:46:37,880 --> 00:46:42,240 >> A nech to len povedať, že svojvoľne toto je prvé sústo, druhým skus, 1045 00:46:42,240 --> 00:46:43,380 Tretí, štvrtý. 1046 00:46:43,380 --> 00:46:46,570 Ja zámerne nepoužívajú nula dnes ale vrátime k tomu. 1047 00:46:46,570 --> 00:46:49,570 Takže inými slovami, či sa jedná o vôbec prvýkrát som pomocou programu, 1048 00:46:49,570 --> 00:46:52,715 Ja som len na to, šťastie a prvý uhryznutie je v jednom mieste potom dve 1049 00:46:52,715 --> 00:46:53,590 potom tri ako štyri. 1050 00:46:53,590 --> 00:46:57,430 A keď som si kreslenie, číslo schránky dvoch miliárd by cesta sem. 1051 00:46:57,430 --> 00:47:02,200 >> Tak čo si myslíš, a potom, GetString vlastne vracia? 1052 00:47:02,200 --> 00:47:06,010 Nie je to vracia M-O-M spätného lomítka zero per sa, pretože to jasne 1053 00:47:06,010 --> 00:47:08,180 sa nezmestí do poľa, ktoré som natiahnutý. 1054 00:47:08,180 --> 00:47:11,210 Takže čo iné by mohlo getString vlastne sa vrátia všetky tieto týždne? 1055 00:47:11,210 --> 00:47:14,410 1056 00:47:14,410 --> 00:47:16,820 Odpoveď je na board niekde tu. 1057 00:47:16,820 --> 00:47:20,390 Môžete nezmestí M-O-M spätné lomítko nula, Takže to, čo by mohlo mať zmysel miesto? 1058 00:47:20,390 --> 00:47:23,424 Ak by ste mali byť super šikovný, uvedenie na tzv inžinierstva klobúk, 1059 00:47:23,424 --> 00:47:24,340 čo by ste mohli vrátiť? 1060 00:47:24,340 --> 00:47:27,340 Čo je to najmenšie množstvo informácií ste mohli vrátiť, že by stále 1061 00:47:27,340 --> 00:47:30,610 vám umožní nájsť M-O-M v pamäti? 1062 00:47:30,610 --> 00:47:31,270 Jo? 1063 00:47:31,270 --> 00:47:31,950 >> Divákov: One. 1064 00:47:31,950 --> 00:47:32,200 >> DAVID J. Malan: One. 1065 00:47:32,200 --> 00:47:33,021 A prečo jeden? 1066 00:47:33,021 --> 00:47:35,520 Divákov: Vzhľadom na to, že by sa povedať, vám kam ísť [nepočuteľný]. 1067 00:47:35,520 --> 00:47:38,391 1068 00:47:38,391 --> 00:47:39,390 DAVID J. Malan: Presne tak. 1069 00:47:39,390 --> 00:47:44,300 Ja som len ísť na spiatočnú adresu reťazce, ktoré som dostala. 1070 00:47:44,300 --> 00:47:46,570 Adresa v tomto Prípad je lokalita raz. 1071 00:47:46,570 --> 00:47:51,280 Takže to, čo naozaj je uložený v S- a každý reťazec variabilný tak far-- 1072 00:47:51,280 --> 00:47:53,430 práve bolo adresa tohto reťazca. 1073 00:47:53,430 --> 00:47:57,840 >> Medzitým, keď som volať GetString druhýkrát a ja 1074 00:47:57,840 --> 00:48:03,300 zadajte doslova rovnaký thing-- M-O-M s lowercase-- M-O-M 1075 00:48:03,300 --> 00:48:06,200 a ďalšie spätné lomítko nula, a teraz možno môj program je 1076 00:48:06,200 --> 00:48:09,820 beží už dlhšiu dobu, takže možno to je 10, to je miesto 11, to je 12, 1077 00:48:09,820 --> 00:48:10,700 to je 13. 1078 00:48:10,700 --> 00:48:13,590 Počítače používajúce iné pamäť z akéhokoľvek dôvodu. 1079 00:48:13,590 --> 00:48:18,172 Čo teraz chodí do mojej druhej premenná v mojom program T? 1080 00:48:18,172 --> 00:48:19,390 10. 1081 00:48:19,390 --> 00:48:20,050 Presne tak. 1082 00:48:20,050 --> 00:48:23,910 >> A tak, keď sa pozrieme na Zdrojový kód tohto programu 1083 00:48:23,910 --> 00:48:26,550 kde som proste snaží pre porovnanie dvoch hodnôt, 1084 00:48:26,550 --> 00:48:32,180 Je to rovná rovná t, čo je zrejmá ľudská odpoveď? 1085 00:48:32,180 --> 00:48:34,890 Práve preto, že nie 1 sa nerovná 10. 1086 00:48:34,890 --> 00:48:36,861 A tak tu táboria príležitosť pre nás naozaj 1087 00:48:36,861 --> 00:48:39,610 jednoducho ísť späť do znovu, najprv princípy a premýšľať o tom, dobre, 1088 00:48:39,610 --> 00:48:41,110 čo sa deje pod kapotou? 1089 00:48:41,110 --> 00:48:43,240 Hovorili sme o bity a bajty a pamäť, 1090 00:48:43,240 --> 00:48:46,820 ale v skutočnosti je to užitočné pre pochopenie preto, že keď zavoláte getString, 1091 00:48:46,820 --> 00:48:50,280 aj keď si myslíme, že to je vrátenie M-O-M alebo reťazec mama 1092 00:48:50,280 --> 00:48:53,120 alebo Andy alebo Zamil alebo podobne, technicky 1093 00:48:53,120 --> 00:48:55,510 je to len vracia adresu tohto kusu pamäti. 1094 00:48:55,510 --> 00:48:56,910 >> Ale to je v poriadku. 1095 00:48:56,910 --> 00:49:00,570 Vzhľadom k tomu, ako mám vedieť kde reťazec končí? 1096 00:49:00,570 --> 00:49:03,840 Ak som len dal na začiatku? 1097 00:49:03,840 --> 00:49:05,380 No, spätné lomítko nula, nie? 1098 00:49:05,380 --> 00:49:08,800 Práve v lineárnom čase môžem vytlačiť s potlačou def M-O-M. 1099 00:49:08,800 --> 00:49:11,820 A akonáhle vidím spätné lomítko nula, je mi jedno, kde som začal, 1100 00:49:11,820 --> 00:49:14,950 Ja už viem, implicitne kde musím skončiť. 1101 00:49:14,950 --> 00:49:18,700 >> A tak dnes označuje beginning-- a dovoľte mi, aby som to dramaticky, pretože sme 1102 00:49:18,700 --> 00:49:21,800 prešiel veľa problémov na získať tieto tu školenie wheels-- 1103 00:49:21,800 --> 00:49:29,840 tak dnes školiace kola začiatok zložiť a my odhaliť na least-- 1104 00:49:29,840 --> 00:49:31,373 >> [APPLAUSE] 1105 00:49:31,373 --> 00:49:33,220 1106 00:49:33,220 --> 00:49:36,160 >> To bolo dobre stojí za výlet k TARGET dnes ráno, áno? 1107 00:49:36,160 --> 00:49:39,600 Takže now-- existuje, sa ukazuje out, žiadna taká vec ako reťazec. 1108 00:49:39,600 --> 00:49:41,140 Reťazec neexistuje. 1109 00:49:41,140 --> 00:49:43,760 Je to synonymum, že sme mali vnútri knižnice CS50. 1110 00:49:43,760 --> 00:49:48,660 Od tej doby, budeme začať volať s a t nie sú reťazce, ale char hviezdy. 1111 00:49:48,660 --> 00:49:51,180 A char hviezda my budeme srandista oddelene onedlho. 1112 00:49:51,180 --> 00:49:53,510 Ale to znamená, že aj keď budeme pokračovať 1113 00:49:53,510 --> 00:49:56,180 použitie getString teraz, technicky by som mal 1114 00:49:56,180 --> 00:49:59,010 hovoriť char hviezda a char hviezdu. 1115 00:49:59,010 --> 00:50:01,720 >> A ukázalo sa, čo to hviezdu bude pre označenie je niečo 1116 00:50:01,720 --> 00:50:04,340 nazývaný ukazovateľ alebo adresa. 1117 00:50:04,340 --> 00:50:06,110 A v skutočnosti, teaser za to, čo je pred nami 1118 00:50:06,110 --> 00:50:09,760 Je to 20 sekúnd klip z nášho priateľ Nick Parlante na Stanforde 1119 00:50:09,760 --> 00:50:12,927 kto, pred nejakou dobou, strávi smiešne množstvo času, 1120 00:50:12,927 --> 00:50:15,010 ako najlepšie môžem povedať vo svojom kuchynské alebo jeho suteréne, 1121 00:50:15,010 --> 00:50:17,140 Vďaka claymation zavádza do sveta 1122 00:50:17,140 --> 00:50:20,010 charakter menoval Binky s kým budeme 1123 00:50:20,010 --> 00:50:22,010 byť zavedené nabudúce na ukazovateli. 1124 00:50:22,010 --> 00:50:24,588 Takže tu je náhľad na to, čo príde. 1125 00:50:24,588 --> 00:50:26,370 >> [Videoprehrávanie] 1126 00:50:26,370 --> 00:50:27,510 >> Hej, Binky. 1127 00:50:27,510 --> 00:50:28,260 Zobudiť sa. 1128 00:50:28,260 --> 00:50:30,672 Je čas na ukazovateľ zábavu. 1129 00:50:30,672 --> 00:50:31,616 >> -Čo je to? 1130 00:50:31,616 --> 00:50:33,032 Ďalšie informácie o ukazovatele? 1131 00:50:33,032 --> 00:50:34,450 Oh, dobrota. 1132 00:50:34,450 --> 00:50:35,431 >> [END Prehrávanie] 1133 00:50:35,431 --> 00:50:38,055 DAVID J. Malan: A v takom prípade, Vás budeme vidieť v stredu. 1134 00:50:38,055 --> 00:50:47,590 1135 00:50:47,590 --> 00:50:48,090 Dobre. 1136 00:50:48,090 --> 00:50:48,740 Kto je tanec? 1137 00:50:48,740 --> 00:50:49,240 No ták. 1138 00:50:49,240 --> 00:50:50,330 Kto je tanec? 1139 00:50:50,330 --> 00:50:51,820 Chceš, aby som si to začalo? 1140 00:50:51,820 --> 00:50:53,770 Budem si to začalo. 1141 00:50:53,770 --> 00:50:54,270 Wooo! 1142 00:50:54,270 --> 00:51:04,070 1143 00:51:04,070 --> 00:51:07,580 >> LAUREN: Sladké fantázie Mojžiš.