1 00:00:00,000 --> 00:00:10,550 2 00:00:10,550 --> 00:00:14,050 >> David J. Malan: Tai CS50 ir tai yra iš keturių savaitę pradžia. 3 00:00:14,050 --> 00:00:18,630 Ir, berniukas, yra "Volkswagen" į Bėda visi, nes programinės įrangos. 4 00:00:18,630 --> 00:00:20,264 Leiskite mums pažvelgti. 5 00:00:20,264 --> 00:00:20,930 [Vaizdo įrašų atkūrimas] 6 00:00:20,930 --> 00:00:25,560 -Cars, Protingiausias Veikėjai į Greiti ir įsiutę filmus. 7 00:00:25,560 --> 00:00:29,100 Šią savaitę Vokietijos Automobilių Volkswagen atsidūrusi 8 00:00:29,100 --> 00:00:32,490 viduryje nuo skandalo potencialiai nusikalstama proporcijas. 9 00:00:32,490 --> 00:00:36,060 >> -Volkswagen Yra ruošiasi milijardus baudų, galimi kriminaliniai kaltinimai 10 00:00:36,060 --> 00:00:38,560 savo vadovų, kaip bendrovė atsiprašo 11 00:00:38,560 --> 00:00:41,840 už takelažas 11 milijonų automobilius padėti jai įveikti išmetamų teršalų bandymai. 12 00:00:41,840 --> 00:00:44,950 >> -apibrėžimai Dyzeliniai modeliai buvo suprojektuoti su sudėtingos programinės įrangos 13 00:00:44,950 --> 00:00:48,440 kuri naudojama informacija, įskaitant pozicija valdymo ir transporto priemonės 14 00:00:48,440 --> 00:00:51,870 pagreitinti, siekiant nustatyti automobilis buvo vyksta išmetamųjų teršalų bandymo. 15 00:00:51,870 --> 00:00:55,650 Pagal šią aplinkybę, variklis būtų sumažinti toksinių kiekį. 16 00:00:55,650 --> 00:00:59,070 Tačiau automobilis buvo suklastoti apeiti kad kai jis buvo išstumti. 17 00:00:59,070 --> 00:01:03,320 Išmetamųjų teršalų kiekis padidėjo nuo 10 iki 40 kartų virš priimtino EPS lygiais. 18 00:01:03,320 --> 00:01:04,280 >> [PABAIGA PLAYBACK] 19 00:01:04,280 --> 00:01:05,220 >> David J. Malan: tad Pažvelkite į šį išvaizdą 20 00:01:05,220 --> 00:01:07,250 ir pamatyti, kaip tiksliai tai gali būti įgyvendinama 21 00:01:07,250 --> 00:01:09,680 ir kaip tai gali paveikti tiek daug automobilių tai patinka. 22 00:01:09,680 --> 00:01:12,840 Taigi mano rankos čia yra spauda atleiskite, kad buvo išduotas EPA-- 23 00:01:12,840 --> 00:01:14,620 Aplinkos Apsaugos agentūra, kuri 24 00:01:14,620 --> 00:01:18,032 yra JAV reguliavimo agentūra, rankenos aplinkosaugos problemas, 25 00:01:18,032 --> 00:01:19,740 ir tada tikrasis teisinis pranešimas, kad buvo 26 00:01:19,740 --> 00:01:22,420 siųsti Volkswagen vos prieš keletą dienų. 27 00:01:22,420 --> 00:01:26,530 >> Taigi EPA rašo, ir atskleidžia dabar viešai, sudėtingas programinė įranga 28 00:01:26,530 --> 00:01:29,390 algoritmas tikras Volkswagen transporto aptinka 29 00:01:29,390 --> 00:01:32,630 kai automobilis patiria oficialūs Išmetamų teršalų bandymų 30 00:01:32,630 --> 00:01:36,505 ir paverčia visą emisiją kontroliuoja apie tik bandymo metu. 31 00:01:36,505 --> 00:01:38,380 Veiksmingumo Šios transporto priemonės taršos 32 00:01:38,380 --> 00:01:43,260 išmetamųjų teršalų kontrolės įtaisai yra labai sumažinti per visą įprastą vairavimo 33 00:01:43,260 --> 00:01:44,320 situacijos. 34 00:01:44,320 --> 00:01:48,190 Tai lemia automobilių, kurie atitinka standartai laboratorijoje arba bandymų 35 00:01:48,190 --> 00:01:52,790 stotis, bet normalaus veikimo metu išmeta azoto oxides-- arba NOx-- 36 00:01:52,790 --> 00:01:54,950 ne iki 40 kartų standartą. 37 00:01:54,950 --> 00:01:58,220 Pagaminta Volkswagen programinė įranga yra citata citatos pabaiga, išderinimo įtaisas, 38 00:01:58,220 --> 00:02:00,650 kaip apibrėžta Švaraus Oro aktas JAV. 39 00:02:00,650 --> 00:02:03,410 >> Jie eina pasakyti, kad EPA ir kita agentūra 40 00:02:03,410 --> 00:02:07,020 atidengta išderinimo įrenginio Programinė įranga po nepriklausomos analizės 41 00:02:07,020 --> 00:02:09,660 mokslininkai Vakaruose Virdžinijos universitete. 42 00:02:09,660 --> 00:02:14,160 NOx taršos prisideda prie azoto dioksidas, pažemio ozonas, 43 00:02:14,160 --> 00:02:15,700 ir smulkių kietųjų dalelių. 44 00:02:15,700 --> 00:02:18,090 Ekspozicijos į juos teršalai buvo susijęs 45 00:02:18,090 --> 00:02:20,870 su įvairiomis rimtų poveikis sveikatai, 46 00:02:20,870 --> 00:02:23,637 įskaitant didesnį astma išpuolių ir kitų kvėpavimo takų 47 00:02:23,637 --> 00:02:26,470 ligų, kurios gali būti pakankamai rimti siųsti žmones į ligoninę. 48 00:02:26,470 --> 00:02:28,660 Ozono poveikį ir kietųjų dalelių taip pat 49 00:02:28,660 --> 00:02:31,960 buvo susijęs su per anksti mirtis dėl kvėpavimo susijusios 50 00:02:31,960 --> 00:02:35,690 arba širdies ir kraujagyslių susijęs poveikis. 51 00:02:35,690 --> 00:02:38,940 Vaikai, vyresnio amžiaus žmonės, su nesieja kvėpavimo takų liga 52 00:02:38,940 --> 00:02:42,840 yra ypač gresia poveikis sveikatai teršalų. 53 00:02:42,840 --> 00:02:45,056 >> Užtenka tariant, tai gana rimta. 54 00:02:45,056 --> 00:02:46,930 Ir tegul eiti skaityti tik dar vienas ištrauka 55 00:02:46,930 --> 00:02:49,370 ir tada mes pažvelgti pagrindinės pasekmės 56 00:02:49,370 --> 00:02:50,920 tai yra su automobilio kontekste. 57 00:02:50,920 --> 00:02:53,730 Tiksliau, "Volkswagen" pagaminta ir sumontuota 58 00:02:53,730 --> 00:02:56,210 programinė įranga vadinamoji elektroninis valdymas 59 00:02:56,210 --> 00:02:59,320 module-- arba ECM-- nuo šios transporto priemonės kuris jautė 60 00:02:59,320 --> 00:03:03,580 kai transporto priemonė buvo išbandytas atitiktis EPS emisijos standartus. 61 00:03:03,580 --> 00:03:07,510 Remiantis įvairių įėjimų įskaitant pozicija vairo, transporto priemonės 62 00:03:07,510 --> 00:03:11,280 greitis, variklio trukmę operacija, ir barometrinis slėgis, 63 00:03:11,280 --> 00:03:13,720 šios sąnaudos tiksliai stebimi parametrai 64 00:03:13,720 --> 00:03:17,600 federalinės bandymo procedūrą naudojamą išmetalų bandymas EPS sertifikavimo 65 00:03:17,600 --> 00:03:18,400 tikslais. 66 00:03:18,400 --> 00:03:21,850 >> Per EPA išmetamųjų teršalų kiekio bandymą, transporto ECM programinė įranga 67 00:03:21,850 --> 00:03:25,060 bėgo programinę įrangą, kuri pagaminta atitinkantys išmetamųjų teršalų rezultatai. 68 00:03:25,060 --> 00:03:28,340 Visais kitais laikais, transporto ECM programinė įranga 69 00:03:28,340 --> 00:03:31,090 bėgo atskirą kelią kalibravimas, kuris sumažino 70 00:03:31,090 --> 00:03:34,360 iš veiksmingumas Bendras išmetamųjų teršalų kontrolės sistema, 71 00:03:34,360 --> 00:03:37,864 specialiai selektyvus katalitinis sumažinimas Lean NOx trap-- 72 00:03:37,864 --> 00:03:39,280 kuri matysime apie per akimirką. 73 00:03:39,280 --> 00:03:43,040 Kaip rezultatas, NOx padidintas 10 iki 40 kartų faktoriaus 74 00:03:43,040 --> 00:03:47,450 virš EPS atitinkančių lygių priklausomai nuo važiavimo ciklą tipo. 75 00:03:47,450 --> 00:03:50,800 >> Taigi, kas tai iš tikrųjų reiškia, ir kodo į programinės įrangos, veikiančios 76 00:03:50,800 --> 00:03:53,190 ant Volkswagen neturi dar nebuvo viešai atskleista, 77 00:03:53,190 --> 00:03:56,460 yra tai, kad, efektyviai, šis ekvivalentas yra kažkur viduje 78 00:03:56,460 --> 00:03:57,830 Volkswagen kodu. 79 00:03:57,830 --> 00:04:02,200 Jei yra išbandyta, o jei automobilyje aptinka tam tikrų aplinkos veiksnių 80 00:04:02,200 --> 00:04:04,330 kaip vairo pozicija arba judėjimas 81 00:04:04,330 --> 00:04:06,710 arba jos nebuvimas iš automobilio arba bet kiti veiksniai 82 00:04:06,710 --> 00:04:09,940 kad šiuo metu iškėlė hipotezę, būti dalis šios formulės, 83 00:04:09,940 --> 00:04:12,370 jie tiesiog įjunkite pilnas teršalų kontrolės. 84 00:04:12,370 --> 00:04:15,670 Kitaip tariant, jie pradeda skleidžiančios mažiau teršalų. 85 00:04:15,670 --> 00:04:18,769 >> Kita, kiekvienoje kitoje situacijoje kai jis neaptinkamas kaip 86 00:04:18,769 --> 00:04:20,790 laboratorijoje, jie tiesiog neturi. 87 00:04:20,790 --> 00:04:24,320 Ir todėl jūs galite supaprastinti į daugiau tai betono Pseudocode su kažkuo 88 00:04:24,320 --> 00:04:24,820 kaip šitas. 89 00:04:24,820 --> 00:04:27,810 Jei ratai yra posūkio bet vairas nėra, įtaigus 90 00:04:27,810 --> 00:04:30,060 kad automobilis yra dėl kai kurių rūšies besisukančio cilindro 91 00:04:30,060 --> 00:04:32,550 bet kai natūra Sandėlyje yra išbandyta, 92 00:04:32,550 --> 00:04:36,070 tada elgtis kaip EPS norėčiau, kad jūs. 93 00:04:36,070 --> 00:04:37,960 Priešingu atveju ne. 94 00:04:37,960 --> 00:04:40,420 Taigi leiskite pažvelgti ne trumpą vaizdo įrašą, kuris 95 00:04:40,420 --> 00:04:45,391 mano ne ką pasekmes išvaizdą yra tai faktiškai mechaniškai. 96 00:04:45,391 --> 00:04:48,620 >> [Vaizdo įrašų atkūrimas] 97 00:04:48,620 --> 00:04:52,800 >> -Last Penktadienį EPA paskelbė, kad kai Volkswagen Audi automobiliai pagaminti nuo 2009 98 00:04:52,800 --> 00:04:55,840 o šiemet buvo naudojama vadinamasis išderinimo įtaisas 99 00:04:55,840 --> 00:04:59,060 gauti aplink emisijos įstatymus suprojektuota taip, kad švaraus oro. 100 00:04:59,060 --> 00:05:01,700 Bet ką tai reiškia tiksliai? 101 00:05:01,700 --> 00:05:04,666 >> Na, šiuolaikiniai automobiliai turi dešimtis Kompiuterių jų viduje. 102 00:05:04,666 --> 00:05:07,040 Ir kai kurie iš šių kompiuterių padėti koordinuoti funkcijas 103 00:05:07,040 --> 00:05:09,590 variklio optimaliam veiklos, o todėl, kad 104 00:05:09,590 --> 00:05:12,340 kad yra ne per daug šiukšlių išeina iš išmetimo vamzdžio. 105 00:05:12,340 --> 00:05:15,170 Jie iš tikrųjų dirba Tokiu būdu jau keletą dešimtmečių. 106 00:05:15,170 --> 00:05:17,380 Iš esmės, kiekvienas dalis šiuolaikinio automobilio variklio 107 00:05:17,380 --> 00:05:20,080 turi jutiklis arba valdiklio apie tai, ir šių kompiuterių 108 00:05:20,080 --> 00:05:23,460 skaito iš duomenų tūkstančiai kartų per sekundę, atliekant koregavimus 109 00:05:23,460 --> 00:05:26,220 kaip ir kuro santykis su oru kad vyksta į cilindrus. 110 00:05:26,220 --> 00:05:28,730 >> Tai oszukiwanie Volkswagen ir Audi modeliai yra dyzeliai, 111 00:05:28,730 --> 00:05:30,890 ir dyzeliai turi dar vieną tikrai svarbu kompiuteris 112 00:05:30,890 --> 00:05:34,030 kontroliuojami parametrai, kurie yra iš nesudegusių kuro kiekis bus 113 00:05:34,030 --> 00:05:35,200 į išmetamosiose dujose. 114 00:05:35,200 --> 00:05:36,310 Dabar tai skamba neblogai. 115 00:05:36,310 --> 00:05:39,642 Neskamba kaip jūs norėtumėte nesudegusių degalų vyksta į išmetamąsias dujas. 116 00:05:39,642 --> 00:05:41,600 Bet jeigu tai yra dyzelinas, turite kažką 117 00:05:41,600 --> 00:05:46,110 vadinama NOx gaudyklė, kuri yra įrenginys, kuris sugeria ir spąstai azoto oksidų 118 00:05:46,110 --> 00:05:48,880 kad yra teršalais, kurie kitaip eiti į atmosferą. 119 00:05:48,880 --> 00:05:53,040 Ir tos NOx gaudyklė poveikis yra tvirtesnis nesudegusių kuro. 120 00:05:53,040 --> 00:05:56,650 Taigi išderinimo įtaisas yra speciali programa viduje šių kompiuterių, kurie gali padaryti jį 121 00:05:56,650 --> 00:05:59,527 atrodo automobilis atitinka emisiją standartai, net jei jis nėra. 122 00:05:59,527 --> 00:06:01,110 "Volkswagen" turėjo problemų dėl savo rankose. 123 00:06:01,110 --> 00:06:04,050 Jos dyzeliniai varikliai buvo žinomi gauti didelę kuro ekonomiją, 124 00:06:04,050 --> 00:06:07,510 bet NOx gaudyklė veikia tik gerai kai daugiau kuras yra naudojamas. 125 00:06:07,510 --> 00:06:10,460 Taigi automobilis būtų aptikti, Naudojant šią išderinimo įrenginio, 126 00:06:10,460 --> 00:06:13,870 kai ji buvo gauti išmetamųjų teršalų testas, tai naudoja daugiau kuro, 127 00:06:13,870 --> 00:06:16,830 padaryti NOx gaudyklė darbą gerai, kiekis būtų gerai. 128 00:06:16,830 --> 00:06:21,130 Bet tada jūs gausite kelyje, prietaisą išsijungia, jūs dega mažiau kuro 129 00:06:21,130 --> 00:06:24,256 bet jūs pateikėte tiek, kiek 40 kartus daugiau teršalų į atmosferą. 130 00:06:24,256 --> 00:06:26,130 Bet kaip gi tai padarė automobilis žinoti, kad jis buvo 131 00:06:26,130 --> 00:06:27,720 bandomą emisijų atitiktį? 132 00:06:27,720 --> 00:06:30,590 EPA sako, kad ji buvo sudėtingas sistema, kuri patikrinta dalykus 133 00:06:30,590 --> 00:06:34,090 kaip vairaratis, greitis, kiek laiko variklis buvo įjungtas, 134 00:06:34,090 --> 00:06:35,507 ir net atmosferos slėgis. 135 00:06:35,507 --> 00:06:37,673 Kitaip tariant, ten buvo jokiu būdu tai buvo atsitiktinis 136 00:06:37,673 --> 00:06:40,260 nes programinė įranga buvo sukurta labai atidžiai, siekiant nustatyti 137 00:06:40,260 --> 00:06:41,630 oficialus išmetamų teršalų bandymas. 138 00:06:41,630 --> 00:06:43,588 Štai keletas gana rimtas apgaulė, ir kad 139 00:06:43,588 --> 00:06:45,420 Kodėl "Volkswagen" yra tokių rimtų problemų. 140 00:06:45,420 --> 00:06:48,600 Tiesą sakant, jų direktorius Martin Winterkornas, tiesiog atsistatydino. 141 00:06:48,600 --> 00:06:49,820 >> Taigi, kas bus toliau? 142 00:06:49,820 --> 00:06:53,900 Na, jei jūs esate vienas iš puse milijono dyzeliniai jettas, "The Beatles", Golfas, Passats, 143 00:06:53,900 --> 00:06:56,220 arba "Audi A3s vykdomas, Geros naujienos yra tai yra 144 00:06:56,220 --> 00:06:57,886 kad jūsų automobilis yra dar saugu vairuoti. 145 00:06:57,886 --> 00:07:00,510 Jūs neturite įdėti ją šalin iki Volkswagen išduoda prisiminti. 146 00:07:00,510 --> 00:07:02,509 Bet tam tikru momentu jie tikriausiai teks 147 00:07:02,509 --> 00:07:04,230 atnaujinti viduje jūsų automobilį programinę įrangą. 148 00:07:04,230 --> 00:07:06,927 Kai tai atsitiks jums gali gauti mažiau mylių per baką. 149 00:07:06,927 --> 00:07:09,260 Teisininkai jau ruošiasi už klasės ieškinių 150 00:07:09,260 --> 00:07:12,500 taip savininkai gali gauti kompensuojamas tam tikru momentu ateityje. 151 00:07:12,500 --> 00:07:15,832 Bet, kad nesiruošia atsitikti bet kada vėliau. 152 00:07:15,832 --> 00:07:16,711 >> [PABAIGA PLAYBACK] 153 00:07:16,711 --> 00:07:19,960 David J. Malan: Taigi tai iš tiesų kelia įdomi didesnį vaizdą klausimas 154 00:07:19,960 --> 00:07:20,660 kaip pasitikėti. 155 00:07:20,660 --> 00:07:21,160 Teisė? 156 00:07:21,160 --> 00:07:24,300 Visi mes turime "iPhone" ar Androids ar kažkas mūsų kišenės greičiausiai 157 00:07:24,300 --> 00:07:26,500 Šių dienų, ar nešiojamieji kompiuteriai mūsų ratus, kurie yra 158 00:07:26,500 --> 00:07:28,510 veikia programinė įranga padarė "Apple" ir "Microsoft" 159 00:07:28,510 --> 00:07:30,710 ir kekių kitų įmonių. 160 00:07:30,710 --> 00:07:34,240 Bet kaip mes žinome, kad tai, ką Šios programinės įrangos produktai darai 161 00:07:34,240 --> 00:07:37,680 yra iš tikrųjų, kas tai Įmonės sako, kad jie daro? 162 00:07:37,680 --> 00:07:39,610 >> Pavyzdžiui, kuris yra prie pasakyti, kad kiekvieną kartą, kai 163 00:07:39,610 --> 00:07:42,200 skambinti jūsų iPhone arba Android telefonas ar panašiai, 164 00:07:42,200 --> 00:07:45,650 kad telefono numeris, taip pat nėra buvo įkeltas į kai kurių įmonės serveryje 165 00:07:45,650 --> 00:07:48,399 nes kai programa jūs parašyta, ar tai operacinė 166 00:07:48,399 --> 00:07:51,070 pati sistema kaip iOS ar Android, arba todėl, kad jūs įkėlėte 167 00:07:51,070 --> 00:07:53,880 kai trečioji šalis app kad kažkaip klausosi 168 00:07:53,880 --> 00:07:57,120 viską įvedate arba viskas jūs iš tikrųjų sako. 169 00:07:57,120 --> 00:07:59,500 Kaip jūs žinote, kad kai vaikinai veikia klingsėti 170 00:07:59,500 --> 00:08:02,590 ar Padaryti sudaryti savo savo programinės įrangos CS50, kaip 171 00:08:02,590 --> 00:08:06,080 padaryti, kad CS50 savo darbuotojus, būdu į CS50 bibliotekoje, 172 00:08:06,080 --> 00:08:08,690 nebuvo prisijungdami kiekvieną styginių jūs kada nors Dotarłeś 173 00:08:08,690 --> 00:08:10,276 ar kas colių jūs kada nors Dotarłeś? 174 00:08:10,276 --> 00:08:12,900 Na, jūs tikrai galėtų atrodyti tuo kodo kažko 175 00:08:12,900 --> 00:08:15,233 kaip CS50 bibliotekoje, galite gali pažvelgti į kodą 176 00:08:15,233 --> 00:08:18,170 Linux operacinė sistema veikia CS50 IDE. 177 00:08:18,170 --> 00:08:23,090 Bet nuostabi pristatymas buvo suteiktas atgal 1984 178 00:08:23,090 --> 00:08:26,730 gauna Tiuringo apdovanojimas pagal labai garsus kompiuterių mokslininkas žinomas 179 00:08:26,730 --> 00:08:29,750 as-- pavadintas Ken Thompson, kuris gavo Tiuringo apdovanojimas, kuris 180 00:08:29,750 --> 00:08:33,500 yra tarsi kompiuteris Science " Nobelio premijos, jei norite, 181 00:08:33,500 --> 00:08:35,309 už savo darbą ant operacinė sistema, vadinama 182 00:08:35,309 --> 00:08:39,039 Unix, kuris yra labai panašios dvasia, ką mes naudojame, kuris yra "Linux". 183 00:08:39,039 --> 00:08:41,960 Ir klausimas, jis paklausė jo priėmimo kalboje, iš esmės 184 00:08:41,960 --> 00:08:44,910 nustatantis už sistemą metų metus trukusių diskusijų 185 00:08:44,910 --> 00:08:46,970 apie pasitikėjimą ir saugumą, buvo tai. 186 00:08:46,970 --> 00:08:50,410 Kokiu mastu viena pasitikėti pareiškimas, kad program-- gabalas 187 00:08:50,410 --> 00:08:53,010 iš software-- yra nemokama Trojos arklių? 188 00:08:53,010 --> 00:08:56,500 Galbūt tai yra svarbesnis pasitikėti žmonės, kurie parašė programinę įrangą. 189 00:08:56,500 --> 00:08:58,650 >> Ir iš tiesų, mes susiję į aptarimas, kad jis 190 00:08:58,650 --> 00:09:02,400 davė priimdamas šį apdovanojimą 80-ųjų apie CS50 tinklapyje 191 00:09:02,400 --> 00:09:04,030 pagal paskaitų puslapyje šiandien. 192 00:09:04,030 --> 00:09:06,071 Nes tai, ką pamatysite yra tai, kad jis iš tikrųjų suteikia 193 00:09:06,071 --> 00:09:09,430 gana paprastas pavyzdys, kaip net panašus klingsėti ar kas sudarytojas 194 00:09:09,430 --> 00:09:13,950 Kompiliatoriai kiti naudojami praeityje, Ką daryti, jei įdėta į kompiliatorių mes 195 00:09:13,950 --> 00:09:18,190 patys naudojate yra, jei mažai Sąlyga, kad iš esmės teigia, 196 00:09:18,190 --> 00:09:22,360 jei pastebėjote, kad šis kodas yra naudojant GetString funkcija arba GetInt 197 00:09:22,360 --> 00:09:26,600 funkcija, eiti į priekį ir įdėkite galines duris ar Trojos arklys 198 00:09:26,600 --> 00:09:29,340 pavyzdžiui, kad ši programa dabar turi keletą nulių 199 00:09:29,340 --> 00:09:30,930 ir tie, kurie kažką daryti kenksmingą. 200 00:09:30,930 --> 00:09:33,080 Prisijungimas visus savo klavišų, įkelti, kad duomenys 201 00:09:33,080 --> 00:09:35,100 tam tikru serveriu, ar tikrai nieko. 202 00:09:35,100 --> 00:09:37,290 >> Ir kas Ken Thompson eina daryti savo aptarimas 203 00:09:37,290 --> 00:09:40,580 yra parodyti, kad net jei jūs turite prieigą prie šaltinio 204 00:09:40,580 --> 00:09:43,794 kodas sudarytojas, kad piktavališkai gali daryti tai, 205 00:09:43,794 --> 00:09:46,210 nesvarbu, nes ten tai vištienos ir kiaušinių 206 00:09:46,210 --> 00:09:49,500 tikrovė per pastaruosius keletą metų pagal kurias kompiliatoriai 207 00:09:49,500 --> 00:09:51,960 yra naudojami sudarant patys. 208 00:09:51,960 --> 00:09:55,440 Kitaip tariant, kelio atgal, kai kas nors turėjo būti parašyta pirmąjį kompiliatorių. 209 00:09:55,440 --> 00:09:59,060 Ir po to, bet kuriuo metu jie neatnaujino šalutinis keičia savo kodą sudarytojas, 210 00:09:59,060 --> 00:10:02,020 įtraukti daugiau funkcijų ir recompiling ją žmonės, kaip mums naudoti, gerai, 211 00:10:02,020 --> 00:10:04,270 jie naudoja senas versija kompiliatorių 212 00:10:04,270 --> 00:10:06,370 sudaryti naujas versija sudarytojas. 213 00:10:06,370 --> 00:10:08,370 O jei pažvelgsime tuo aptarimas, kad jis davė, 214 00:10:08,370 --> 00:10:10,970 pamatysite, kad dėl tos apykaitinį, 215 00:10:10,970 --> 00:10:14,330 jūs iš tikrųjų gali turėti klaidų arba Trojos arkliai įterptųjų programinės įrangos 216 00:10:14,330 --> 00:10:14,990 mes naudojame. 217 00:10:14,990 --> 00:10:18,010 Ir net jei peržvelgsite kodo šių programų, 218 00:10:18,010 --> 00:10:21,550 tai gali būti net akivaizdu, nes apgaulė yra iš tikrųjų 219 00:10:21,550 --> 00:10:24,710 kai vyresnio amžiaus versija kompiliatorius, kad bet kada, nes buvo 220 00:10:24,710 --> 00:10:27,340 švirkščiamųjų grėsmę į mūsų programinę įrangą. 221 00:10:27,340 --> 00:10:29,740 >> Kuris yra tik pasakyti, mes tikrai negali ir neturėtų 222 00:10:29,740 --> 00:10:32,939 pasitikėjimas programinė įranga veikia mūsų nešiojamieji kompiuteriai ar telefonus arba bet vietų skaičius. 223 00:10:32,939 --> 00:10:36,230 Ir iš tiesų, vėliau šį semestrą, kai mes pradedame kalbėti apie interneto programavimo 224 00:10:36,230 --> 00:10:38,521 ir iš tikrųjų pradėti statyti interneto programų save, 225 00:10:38,521 --> 00:10:40,285 mes kalbame apie tai grėsmes ir kt. 226 00:10:40,285 --> 00:10:43,410 Dabar, jums gali tekti susimąstėte, ir pastebėjau kad ten buvo maža maža Darth 227 00:10:43,410 --> 00:10:45,842 Vader klipų kad Slenksčio buvo ten rodo 228 00:10:45,842 --> 00:10:47,550 apie Volkswagen. Jeigu Jūs niekada matė, aš 229 00:10:47,550 --> 00:10:49,190 maniau, kad mes turėtų palengvinti nuotaika, nes visa tai 230 00:10:49,190 --> 00:10:50,780 labai slegia ir bauginantis. 231 00:10:50,780 --> 00:10:52,910 Aš ruošiuosi atsigręžti Super Bowl 2011 232 00:10:52,910 --> 00:10:55,300 kai komercinės paskirties Volkswagen-- ir tai 233 00:10:55,300 --> 00:10:59,620 beveik daro juos simpatiškas again-- eteryje pirmą kartą per televiziją. 234 00:10:59,620 --> 00:11:04,039 Tai 60 sekundžių klipas kad aš manau, jums patiks. 235 00:11:04,039 --> 00:11:04,705 [Vaizdo įrašų atkūrimas] 236 00:11:04,705 --> 00:11:08,198 [Muzika - TEMA iš "Žvaigždžių karai"] 237 00:11:08,198 --> 00:11:35,643 238 00:11:35,643 --> 00:11:38,138 [ŠUO loja] 239 00:11:38,138 --> 00:11:50,114 240 00:11:50,114 --> 00:11:53,607 [AUTOMOBILIŲ STARTS] 241 00:11:53,607 --> 00:12:04,086 242 00:12:04,086 --> 00:12:05,955 [PABAIGA PLAYBACK] 243 00:12:05,955 --> 00:12:06,830 David J. Malan: Taip. 244 00:12:06,830 --> 00:12:07,663 Aš tiesiog patikrinti. 245 00:12:07,663 --> 00:12:11,360 Tai automobilis apie pažeidimus sąrašą. 246 00:12:11,360 --> 00:12:12,000 Gerai. 247 00:12:12,000 --> 00:12:14,040 Taigi, mes pažvelgti į kai Pseudocode akimirką prieš. 248 00:12:14,040 --> 00:12:15,380 Ir čia yra didesni fragmentas Pseudocode kodas 249 00:12:15,380 --> 00:12:16,921 kad mes matėme kelis kartus iki šiol. 250 00:12:16,921 --> 00:12:19,970 Ir tegul naudoja tai galimybė dabar įvesti naują programavimo 251 00:12:19,970 --> 00:12:23,776 technika, kuri mes padarėme matyti algoritmiškai 252 00:12:23,776 --> 00:12:25,400 Praėjusią savaitę, kai mes pažvelgė merge rūšiuoti. 253 00:12:25,400 --> 00:12:28,270 Bet tegul formalizuoti jį ir pamatyti, kaip mes galime jį naudoti faktinio kodas, 254 00:12:28,270 --> 00:12:30,350 ir tada mes ketiname naudoti šią technika žemyn kelio dauguma 255 00:12:30,350 --> 00:12:32,000 Tikėtina, išspręsti tam tikras kitas problemas. 256 00:12:32,000 --> 00:12:35,790 >> Taigi, tai buvo vienas iš pirmųjų programų mes kada rašė, nors Pseudocode kodą. 257 00:12:35,790 --> 00:12:37,790 Ir ką ši programa leido mums padaryti kursą 258 00:12:37,790 --> 00:12:41,510 buvo rasti Mike Smith telefonų knygoje. 259 00:12:41,510 --> 00:12:46,216 Ir pranešimas ypač aštuonių eilučių ir 11, kurie turėjo šią Eiti į pareiškimą. 260 00:12:46,216 --> 00:12:48,090 Ir iš tiesų, tam tikra kalbos C tarp jų, 261 00:12:48,090 --> 00:12:50,006 iš tikrųjų turėti teiginys, kad yra tiesiog 262 00:12:50,006 --> 00:12:52,710 eiti, kad leidžia jums peršokti į konkrečią eilutę. 263 00:12:52,710 --> 00:12:55,470 Tai paprastai frowned nes ji gali būti labai lengvai piktnaudžiaujama 264 00:12:55,470 --> 00:12:58,490 ir jūs galite pradėti savo šokinėja programa visur, o ne 265 00:12:58,490 --> 00:13:00,690 į naudojant rūšies logika ir kontrolės srauto 266 00:13:00,690 --> 00:13:04,000 kad mes naudojamas iki šiol tik su kilpos ir sąlygos ir panašiai. 267 00:13:04,000 --> 00:13:08,660 >> Tačiau mes galime supaprastinti šį algoritmą į Pseudocode kodas taip. 268 00:13:08,660 --> 00:13:11,250 Vietoj to kartotinis arba kilpų metodą, 269 00:13:11,250 --> 00:13:14,160 kur mes nuolat grįžta ir atgal atgal į liniją trys, 270 00:13:14,160 --> 00:13:18,300 kodėl ne mes tiesiog rūšies punt ir daugiau paprastai pasakyti septyniose linijos ir 10, 271 00:13:18,300 --> 00:13:20,570 tiesiog pakeisti šių dviejų poros linijos su, 272 00:13:20,570 --> 00:13:22,810 else if Smith anksčiau knygoje mes 273 00:13:22,810 --> 00:13:25,110 ieškoti Mike į kairė pusė knygos. 274 00:13:25,110 --> 00:13:28,560 Kita, jei Smith vėliau, knyga, ieškoti Mike į dešinę 275 00:13:28,560 --> 00:13:29,540 pusė knyga. 276 00:13:29,540 --> 00:13:31,180 Ir pastebėsite jau su apykaitą. 277 00:13:31,180 --> 00:13:31,680 Teisė? 278 00:13:31,680 --> 00:13:34,250 Aš ieško mike telefonų knyga ir tada 279 00:13:34,250 --> 00:13:37,090 Aš galų gale nukentėjo gal arba linija septyni gal 10 eilutė 280 00:13:37,090 --> 00:13:41,089 ir mano nurodymas sau yra paieška Mike pusėje telefonų knygoje. 281 00:13:41,089 --> 00:13:42,380 Na, kaip man ieškoti Mike? 282 00:13:42,380 --> 00:13:44,213 Aš viduryje ieškoti Mike, kodėl 283 00:13:44,213 --> 00:13:45,860 tu tarsi siunčia mane ratu? 284 00:13:45,860 --> 00:13:49,590 Bet tai gerai, nes tai, kas yra vyksta su problemos dydžio, 285 00:13:49,590 --> 00:13:52,630 kaip parašyta 7 ir 10 eilutė? 286 00:13:52,630 --> 00:13:54,989 Mes ne tik kalbėjo, paiešką Mike, ieškoti Mike. 287 00:13:54,989 --> 00:13:56,280 Mes specialiai sakydamas ką? 288 00:13:56,280 --> 00:13:58,694 289 00:13:58,694 --> 00:14:01,610 Paieška jam kairėje pusėje teisė pusė, kuri yra efektyviai 290 00:14:01,610 --> 00:14:03,440 pusė problemos dydį. 291 00:14:03,440 --> 00:14:07,170 Taigi viskas OK, kad mes rūšies užsiima šiuo apykaitinį, 292 00:14:07,170 --> 00:14:09,180 Tai apskritas argumentas, nes bent jau mes 293 00:14:09,180 --> 00:14:11,090 priėmimo problema mažesni ir mažesni. 294 00:14:11,090 --> 00:14:14,220 Ir galiausiai mes ketiname pasiekti kad vadinamasis pagrindas tuo atveju, kai 295 00:14:14,220 --> 00:14:16,780 mes turime tik vieną puslapį left-- kaip mūsų savanorio praėjusią savaitę 296 00:14:16,780 --> 00:14:18,684 did-- mes turėjome vieną puslapį į kairę ir tada mes ne 297 00:14:18,684 --> 00:14:21,600 turi toliau ieškoti Mike Smith nes jis arba tame puslapyje 298 00:14:21,600 --> 00:14:23,080 ar jis nėra. 299 00:14:23,080 --> 00:14:27,480 >> Taigi, kaip mes galime įgyvendinti šią idėją, šį rūšiuoti apykaitinį faktinio kodas? 300 00:14:27,480 --> 00:14:31,030 Na, mes galime išnaudoti technika kad manimi paprastai žinomas kaip rekursijos. 301 00:14:31,030 --> 00:14:33,960 Ir mes matėme tai į Pseudocode už merge rūšiuoti praėjusią savaitę. 302 00:14:33,960 --> 00:14:37,190 Prisiminkite, kad tai buvo Pseudocode už merge rūšiuoti. 303 00:14:37,190 --> 00:14:40,560 Tai, be abejo, net paprastesnis nei burbulas ar atranka arba įterpimo Rūšiuoti 304 00:14:40,560 --> 00:14:43,310 tik kalbant apie paprastumą su kuria jūs galite ją išreikšti. 305 00:14:43,310 --> 00:14:46,750 >> Bet tai todėl, kad mes tarsi cikliškai 306 00:14:46,750 --> 00:14:51,350 sakydamas, ieškoti kažko ieškant jį dar kartą. 307 00:14:51,350 --> 00:14:53,960 Bet mes ieškome tiek ant kairė pusė ar teisingas pusę 308 00:14:53,960 --> 00:14:56,070 o galiausiai mes sujungus šiuo atveju. 309 00:14:56,070 --> 00:14:58,520 Bet čia, taip pat su šie du rūšiuoti linijos, 310 00:14:58,520 --> 00:15:01,320 Ar mes vėl turime tai idėja rekursijos. 311 00:15:01,320 --> 00:15:05,350 Ir konkrečiai, ką tai reiškia, į algoritmą kontekste, 312 00:15:05,350 --> 00:15:10,880 yra tai, kad algoritmas yra rekursywny jei jis naudoja, arba save vadina. 313 00:15:10,880 --> 00:15:14,330 >> Arba, kalbant apie C, funkcija yra recursive-- funkcija vadinama 314 00:15:14,330 --> 00:15:18,510 foo yra grįžtamojo jei foo, kažkur savo kodą, 315 00:15:18,510 --> 00:15:21,250 ragina pati funkcija foo. 316 00:15:21,250 --> 00:15:25,790 Ir tai blogai, jei visi rūšys nors daro yra skambinti save vėl ir vėl. 317 00:15:25,790 --> 00:15:30,600 Tai gerai, jei foo galiausiai sustoja, kaip tai daro sujungti rūšiuoti, sakydamas, palauk, 318 00:15:30,600 --> 00:15:32,980 jei tai problema yra super mažas, pavyzdžiui, 319 00:15:32,980 --> 00:15:35,840 arba radau tą, kurį aš ieško, tiesiog grįžti. 320 00:15:35,840 --> 00:15:41,000 Negalima rekursyviai, ne cikliškai vadintis dar kartą. 321 00:15:41,000 --> 00:15:44,200 >> Ir todėl galime pažvelgti kaip tai iš tiesų gali dirbti. 322 00:15:44,200 --> 00:15:48,430 Taigi, aš ruošiuosi eiti į priekį ir atvira iki dviejų šaltinis kodų pavyzdžių čia. 323 00:15:48,430 --> 00:15:50,321 Iš kurių vienas yra vadinamas sigma 0. 324 00:15:50,321 --> 00:15:52,320 Ir tai yra ne visi rekursywny, bet galime imtis 325 00:15:52,320 --> 00:15:53,694 pažvelgti, ką ši programa daro. 326 00:15:53,694 --> 00:15:55,737 Aš atimta iš visų komentarai iš jo bet visi 327 00:15:55,737 --> 00:15:58,070 šaltinio kodą CS50 s svetainė turi pastabų Jei 328 00:15:58,070 --> 00:15:59,570 noriu perskaityti jį dar kartą vėliau. 329 00:15:59,570 --> 00:16:02,010 Ir darykime pora apie sveiką protą tikrina čia. 330 00:16:02,010 --> 00:16:06,640 >> Taigi, šio kodo viršuje, mes turime įtraukti CS50.h. 331 00:16:06,640 --> 00:16:07,650 Ką tai daryti? 332 00:16:07,650 --> 00:16:08,990 Kodėl tai čia? 333 00:16:08,990 --> 00:16:11,740 Protingais profanas sąlygomis. 334 00:16:11,740 --> 00:16:12,424 Ką tai daro? 335 00:16:12,424 --> 00:16:12,858 Taip. 336 00:16:12,858 --> 00:16:14,160 >> Auditorija: Kad GetInt funkcija veikia. 337 00:16:14,160 --> 00:16:16,243 >> David J. Malan: Taigi, kad GetInt funkcija veikia. 338 00:16:16,243 --> 00:16:18,115 Kadangi šis vidų failą, CS50.h, kuris 339 00:16:18,115 --> 00:16:20,950 matysime prieš ilgai Terminai jos kodo, 340 00:16:20,950 --> 00:16:23,270 turi funkcijų krūva declared-- GetInt, GetString, 341 00:16:23,270 --> 00:16:26,950 ir tarnauja kitiems, ir jeigu krūva mes iš tikrųjų turime, kad Įtraukti linija, 342 00:16:26,950 --> 00:16:29,320 kompiliatorius klingsėti nėra vyksta žinoti, kad jis egzistuoja. 343 00:16:29,320 --> 00:16:32,400 Ir pats pasakytina linija du, kur tarpinis junginys yra apibrėžta 344 00:16:32,400 --> 00:16:35,101 printf, kuris yra funkcija mes nuolat naudojant gana didelis. 345 00:16:35,101 --> 00:16:37,850 Dabar, keturių linija atrodo truputį Funky nes tai tik vienas įdėklas. 346 00:16:37,850 --> 00:16:41,570 Jis atšoko kabliataškį, ne garbanotas petnešos, ne viduje ji kodą. 347 00:16:41,570 --> 00:16:44,640 Bet ką darė mes vadiname šis dalykas savaitėmis anksčiau? 348 00:16:44,640 --> 00:16:45,140 Taip. 349 00:16:45,140 --> 00:16:46,060 Taigi prototipas. 350 00:16:46,060 --> 00:16:48,390 Ir kodėl mes turime prototipas, kuris atrodo 351 00:16:48,390 --> 00:16:51,050 būti šiek tiek nereikalingas paprastai, nes mes paprastai 352 00:16:51,050 --> 00:16:53,474 matyti funkcija vėl vėliau į bylą, ar ne? 353 00:16:53,474 --> 00:16:56,390 Tad kodėl mes have-- jūs tiesiog braižymo ant galvos, bet aš jį priimti. 354 00:16:56,390 --> 00:16:57,302 Taip. 355 00:16:57,302 --> 00:17:00,000 >> Auditorija: [nesigirdi] funkcija po pagrindine. 356 00:17:00,000 --> 00:17:01,000 David J. Malan: Būtent. 357 00:17:01,000 --> 00:17:04,089 Taigi, kad kompiliatorius žino jus ilgainiui nustatyti arba įgyvendinti 358 00:17:04,089 --> 00:17:06,579 kad funkcija po Pagrindinis, matyt. 359 00:17:06,579 --> 00:17:08,462 Taigi klingsėti ir labiausiai kompiliatoriai yra rūšies kvailas 360 00:17:08,462 --> 00:17:10,510 ir jie bus žinoti tik ką jūs pasakykite jiems. 361 00:17:10,510 --> 00:17:12,569 Ir jei jūs norite naudoti funkcija vadinama Sigma, 362 00:17:12,569 --> 00:17:15,710 jums geriau mokyti kompiliatorius kad jis egzistuoja iš anksto. 363 00:17:15,710 --> 00:17:17,970 >> Dabar pagrindinis pati, net nors tai linijų krūva, 364 00:17:17,970 --> 00:17:19,839 yra gana susipažinę tikiuosi dabar. 365 00:17:19,839 --> 00:17:21,942 Ji atšoko, o kilpa do kurio tikslas gyvenime 366 00:17:21,942 --> 00:17:24,400 Čia, matyt, yra gauti teigiamas sveikas skaičius nuo naudotojo. 367 00:17:24,400 --> 00:17:27,349 Ir tiesiog laikyti jį paerzinti ar jai kol jie bendradarbiauja. 368 00:17:27,349 --> 00:17:30,670 Tada pagal 16 Turiu įdomi skambutis. 369 00:17:30,670 --> 00:17:31,570 IntAnswer. 370 00:17:31,570 --> 00:17:33,710 Kuris kairėje pusė suteikia man Int 371 00:17:33,710 --> 00:17:36,650 kuris gali store-- vadinamas Answer-- kurie ketina laikyti, matyt, 372 00:17:36,650 --> 00:17:39,090 grįžti vertė sigma. 373 00:17:39,090 --> 00:17:41,840 Taigi Sigma yra tiesiog savavališkas, bet prasmingas vardas 374 00:17:41,840 --> 00:17:44,500 kad aš suteikti funkcijos kurio tikslas gyvenime 375 00:17:44,500 --> 00:17:47,680 yra imtis vieną argument-- mes jį vadiname N šį case-- 376 00:17:47,680 --> 00:17:52,280 ir tiesiog imtis šio skaičiaus sumą plius kiekvienas teigiamas skaičius, kad tai 377 00:17:52,280 --> 00:17:53,200 mažesnis negu jos. 378 00:17:53,200 --> 00:17:58,140 >> Taigi, jei aš pereiti į numerį nuo 2 iki Sigma, noriu pridėti 2 plius 1 379 00:17:58,140 --> 00:18:00,240 plius 0-- ne 0--, kad man duoda 3. 380 00:18:00,240 --> 00:18:05,320 Jei aš praeiti 3 Sigma, aš noriu turi 3 plius 2 plius 1, kuris suteikia man 6 d. 381 00:18:05,320 --> 00:18:05,900 Ir taip toliau. 382 00:18:05,900 --> 00:18:09,750 Taigi tai tik prideda visus numeriai yra mažesnis arba lygus jai. 383 00:18:09,750 --> 00:18:12,040 >> Dabar, žemyn čia aš tik ketina spausdinti atsakymą. 384 00:18:12,040 --> 00:18:17,330 Taigi, kaip greitai normalumas patikrinti, tegul kad Sigma 0-- dot velniop sigma 0-- 385 00:18:17,330 --> 00:18:18,690 ir leiskite man įrašykite 2. 386 00:18:18,690 --> 00:18:19,960 Ir aš iš tikrųjų Gauk 3. 387 00:18:19,960 --> 00:18:21,240 Leiskite įveskite 3. 388 00:18:21,240 --> 00:18:22,860 Aš iš tikrųjų gauti 6 d. 389 00:18:22,860 --> 00:18:27,636 Ir jei kas nors gali padaryti matematikos greitai, jei aš 50 ką aš ketinu gauti? 390 00:18:27,636 --> 00:18:29,839 >> Auditorija: [nesigirdi]. 391 00:18:29,839 --> 00:18:30,880 David J. Malan: Na, ne. 392 00:18:30,880 --> 00:18:33,340 Tačiau 1275 kuri yra gana arti. 393 00:18:33,340 --> 00:18:38,850 Taigi, tai yra daro 50 rezultatas plius 49 plius 48 plius 47 plius 46 394 00:18:38,850 --> 00:18:40,349 visą kelią žemyn iki 1. 395 00:18:40,349 --> 00:18:41,390 Taigi, kad viskas Sigma daro. 396 00:18:41,390 --> 00:18:43,350 Bet pažiūrėkime, kaip mes įgyvendinti jį dabar. 397 00:18:43,350 --> 00:18:45,790 Taigi žemyn čia yra pati funkcija. 398 00:18:45,790 --> 00:18:49,000 Ir tai neatrodo, kad nieko daryti su rekursijos dar. 399 00:18:49,000 --> 00:18:51,070 Tiesą sakant, mes naudojant senosios mokyklos technika. 400 00:18:51,070 --> 00:18:56,680 Aš Inicijuojama kintama pavadino sumą nuliui, tada aš turiu foreloop čia 401 00:18:56,680 --> 00:19:00,790 ir aš, skelbiantys Int vadinamas Aš, kuriame jis lygus 1-- 402 00:19:00,790 --> 00:19:04,080 nors galėčiau nustatyti, kad jis lygus nulis, bet kadangi aš darau to, 403 00:19:04,080 --> 00:19:05,340 who cares, jei tai nulis arba vienas. 404 00:19:05,340 --> 00:19:06,660 Ji ketina turėti jokio poveikio. 405 00:19:06,660 --> 00:19:10,110 >> Taigi, aš Iteracja taip ilgai, kaip aš yra mažiau nei arba lygus m, kuris 406 00:19:10,110 --> 00:19:11,671 yra argumentas, kad buvo priimtas. 407 00:19:11,671 --> 00:19:13,670 Ir tada aš tiesiog laikyti incrementing I ir įžvalga 408 00:19:13,670 --> 00:19:20,010 kilpos visi darau daro sumą plius lygus I. Ir tai sąmoningas. 409 00:19:20,010 --> 00:19:22,326 Aš nenoriu daryti, šiame atveju, kaip ir sumos, plius plius. 410 00:19:22,326 --> 00:19:24,790 Noriu, kad iš tikrųjų pridėti dabartinė vertė I 411 00:19:24,790 --> 00:19:28,190 kuri saugo vis didesni ir didesni ir daugiau į einamuosius. 412 00:19:28,190 --> 00:19:30,210 >> Ir tada aš grįžti sumą. 413 00:19:30,210 --> 00:19:33,850 Ir taip atsakymas gauna suma. 414 00:19:33,850 --> 00:19:35,282 Ir tada aš jį atspausdinti. 415 00:19:35,282 --> 00:19:37,740 Taigi yra galimybė čia nors, rūšies supaprastinti 416 00:19:37,740 --> 00:19:41,260 šis kodas konceptualiai ir smūgis natūra vienas yra 417 00:19:41,260 --> 00:19:43,250 omenyje kalbant iš paprastumas, nors ji 418 00:19:43,250 --> 00:19:45,700 užtrunka kol rūšiuoti iš vertiname kodėl šis 419 00:19:45,700 --> 00:19:47,330 yra galinga šių mažų pavyzdžių. 420 00:19:47,330 --> 00:19:50,380 Čia yra Sigma one-- todėl Antroji versija šį kodą. 421 00:19:50,380 --> 00:19:55,290 Viskas iki viršaus yra identiški taip kad pati istorija taikomas kaip anksčiau. 422 00:19:55,290 --> 00:19:59,220 Bet dabar pažiūrėkime ne įgyvendinimas sigma, kuri 423 00:19:59,220 --> 00:20:05,040 Aš whittled tiesiog jų lines-- keturios eilutės kodo, tikrai, 424 00:20:05,040 --> 00:20:06,980 plius kai garbanotas petnešos ir balta erdvę. 425 00:20:06,980 --> 00:20:07,930 >> Bet ką aš darau? 426 00:20:07,930 --> 00:20:11,050 Jei m yra mažesnis nei arba lygus nulis, man reikia kokios rankena 427 00:20:11,050 --> 00:20:12,490 kad super paprasta byla. 428 00:20:12,490 --> 00:20:15,450 O jei ranka man nulį arba nieko neigiami, tai yra tik keistai, 429 00:20:15,450 --> 00:20:17,909 Aš tik ketina savavališkai bet nuosekliai grįžti prie nulio. 430 00:20:17,909 --> 00:20:20,200 Nenoriu šį dalyką į patekti į kažkokiam keistam begalybės 431 00:20:20,200 --> 00:20:21,810 kilpa dėl neigiamo vertės. 432 00:20:21,810 --> 00:20:25,070 Taigi, aš tiesiog pasakyti, jei jūs suteikiate man nuliui arba mažesnė, aš grįžti prie nulio. 433 00:20:25,070 --> 00:20:28,220 >> Bet tai gerai, nes tai kad vieno puslapis telefonų knygoje 434 00:20:28,220 --> 00:20:28,790 Liko. 435 00:20:28,790 --> 00:20:32,660 Aš kramtymas išjungtas labai konkrečią problemą ir neplaukia kažką rekursyviai. 436 00:20:32,660 --> 00:20:36,580 Tačiau 31 eilutėje, kas man atrodo, darai? 437 00:20:36,580 --> 00:20:39,780 Skliaustuose yra tiesiog laikyti viskas, tikiuosi, šiek tiek aiškiau. 438 00:20:39,780 --> 00:20:42,110 Bet viskas, ką aš darau yra aš grįžti m-- kokia 439 00:20:42,110 --> 00:20:45,790 Jums perduoti me-- plius vertė m-- Atsiprašome, 440 00:20:45,790 --> 00:20:49,052 plius sigma M minus 1 vertė. 441 00:20:49,052 --> 00:20:50,010 Taigi, ką tai reiškia? 442 00:20:50,010 --> 00:20:53,965 Jei galite man duoti numerį 3, įvesties, atsakymas Noriu gauti galiausiai 443 00:20:53,965 --> 00:20:57,307 yra 6, nes 3 plius 2 plius 1 man duoda 6. 444 00:20:57,307 --> 00:20:59,390 Bet kaip man galvoti apie kaip šis kodas veikia? 445 00:20:59,390 --> 00:21:03,070 Pirmą kartą aš vadinu Sigma ir aš praeiti vertės 3, 446 00:21:03,070 --> 00:21:07,960 tai tarsi sakydamas ant gabalas popieriaus, čia vertė 3 447 00:21:07,960 --> 00:21:09,920 ir aš buvo perduota tai kaip sigma. 448 00:21:09,920 --> 00:21:13,090 3 yra akivaizdu, kad ne mažiau kaip 0, todėl IF sąlyga netaikoma. 449 00:21:13,090 --> 00:21:14,020 Else daro. 450 00:21:14,020 --> 00:21:14,990 Taigi, ką aš galiu padaryti? 451 00:21:14,990 --> 00:21:19,902 Noriu grįžti m, kuris yra 3, plius Sigma M minus 1. 452 00:21:19,902 --> 00:21:21,110 Taigi leiskite man sekti tai. 453 00:21:21,110 --> 00:21:22,710 Aš ruošiuosi įdėti šią popieriaus lapo žemyn. 454 00:21:22,710 --> 00:21:24,668 Ir kas vertė, būti aišku, aš ketina perduoti 455 00:21:24,668 --> 00:21:26,540 į sigma Šiuo istorija? 456 00:21:26,540 --> 00:21:28,080 Kas numeris? 457 00:21:28,080 --> 00:21:28,610 2, tiesa? 458 00:21:28,610 --> 00:21:29,670 3 atėmus 1 yra 2. 459 00:21:29,670 --> 00:21:32,000 Taigi aš tiesiog reikia šiek tiek makulatūra čia. 460 00:21:32,000 --> 00:21:33,931 Taigi dabar Sigma vis vadinamas dar kartą. 461 00:21:33,931 --> 00:21:35,930 Ir aš sąmoningai įdėti tai žemyn, nes tai 462 00:21:35,930 --> 00:21:38,070 lyg sustoja kad istorijos versija 463 00:21:38,070 --> 00:21:40,720 nes dabar aš dėmesio nuo signalo M minus 1. 464 00:21:40,720 --> 00:21:42,660 Taigi m buvo 3 m atėmus 1 yra 2. 465 00:21:42,660 --> 00:21:45,110 Taigi čia yra 2, kad aš buvo perduota. 466 00:21:45,110 --> 00:21:48,510 2 yra akivaizdu, kad ne mažiau kaip 0 kad atvejis netaikomas. 467 00:21:48,510 --> 00:21:53,445 Kitaip aš grįžti m, kuris yra tai dalykas, plius Sigma ir kas vertė? 468 00:21:53,445 --> 00:21:56,160 469 00:21:56,160 --> 00:21:59,650 Taigi, jei sigma iš 1--, nes m yra dabar 2 SO 2 atėmus 1 yra 1. 470 00:21:59,650 --> 00:22:01,950 Taigi dabar turiu tik vertę 1. 471 00:22:01,950 --> 00:22:04,810 Aš artimųjų tik skaičių 1 funkcija sigma-- 472 00:22:04,810 --> 00:22:09,120 arba pats here-- tiek 1, žinoma, nėra mažiau nei nulis, dar netaikomas. 473 00:22:09,120 --> 00:22:12,970 >> Else return 1 plius Sigma ką? 474 00:22:12,970 --> 00:22:13,470 0. 475 00:22:13,470 --> 00:22:14,678 Taigi leiskite man tiesiog prisiminti, kad. 476 00:22:14,678 --> 00:22:15,920 Aš grįžti į vėliau. 477 00:22:15,920 --> 00:22:18,060 Dabar aš ruošiuosi eiti į priekį ir jota žemyn 0, nes tai 478 00:22:18,060 --> 00:22:19,470 mano argumentas ar parametras. 479 00:22:19,470 --> 00:22:22,400 Aš išlaikė skaičių 0 ir, galiausiai, šis procesas 480 00:22:22,400 --> 00:22:25,760 tiesiog kartoti sau skelbimą nauseum ar nutraukti, nes tai, ką 481 00:22:25,760 --> 00:22:28,820 aš iš karto daryti, kai matau šį 0? 482 00:22:28,820 --> 00:22:29,790 Grįžtu prie nulio. 483 00:22:29,790 --> 00:22:31,790 Taigi, dabar jūs turite atsukti istoriją. 484 00:22:31,790 --> 00:22:34,430 >> Jei aš dabar grįžti atgal laiku, kas buvo paskutinis dalykas, 485 00:22:34,430 --> 00:22:36,670 Aš, jei buvo pažodžiui pervyniojimas video? 486 00:22:36,670 --> 00:22:41,630 Aš ruošiuosi pasiimti naujausias 1 ir tai suteikia man 1 plius 0 yra 1. 487 00:22:41,630 --> 00:22:44,100 Jei aš nuolat prisukimo istorija, kad ketina suteikti man 488 00:22:44,100 --> 00:22:46,880 2 plius tai veikia vertė, kuri yra 1. 489 00:22:46,880 --> 00:22:47,789 Štai 3. 490 00:22:47,789 --> 00:22:49,330 Ir tada aš ruošiuosi laikyti pervyniojimas. 491 00:22:49,330 --> 00:22:54,220 Kai aš pirmą kartą pribaigti skaičių 3-- taip 3 plius 3 suteikia man 6. 492 00:22:54,220 --> 00:22:57,272 >> Ir dabar, jei jūs vynioti vaizdo iki šio taško, 493 00:22:57,272 --> 00:22:58,980 tai buvo labai Pirmasis klausimas, aš paklausiau. 494 00:22:58,980 --> 00:23:01,450 Kai praėjo 3, kas yra Sigma 3? 495 00:23:01,450 --> 00:23:04,204 Tai iš tiesų 6, sumos ir Visi šie popieriaus gabalus. 496 00:23:04,204 --> 00:23:07,120 Taigi, jei tai trunka šiek tiek laiko wrap savo mintis aplinkui, tai gerai. 497 00:23:07,120 --> 00:23:10,700 Tačiau mano, kad tai buvo little-- jį buvo labai sąmoningas, kad aš sukrauti 498 00:23:10,700 --> 00:23:12,990 šie numeriai ant kito viršaus. 499 00:23:12,990 --> 00:23:17,440 Tai tipo kaip turintys memory-- įrašą laiku, 500 00:23:17,440 --> 00:23:19,940 tarsi vaizdo skruberyje, kad aš iš tiesų gali atsukti į. 501 00:23:19,940 --> 00:23:24,350 Ir mes ketiname grįžti į kad metafora tik šiek tiek. 502 00:23:24,350 --> 00:23:28,240 >> Bet pirmiausia, it turns out, kad ten iš Geeks ir juokingų žmonių, 503 00:23:28,240 --> 00:23:29,614 Manau, ne "Google". 504 00:23:29,614 --> 00:23:31,530 Ar kažkas, kas labai gerai "Google" paiešką proto 505 00:23:31,530 --> 00:23:34,270 artėja tik už momentą ir man padėti ieškoti kažko? 506 00:23:34,270 --> 00:23:35,650 Labai, labai mažas raktas. 507 00:23:35,650 --> 00:23:37,870 Kažkas, kas niekada sugalvoti prieš, galbūt. 508 00:23:37,870 --> 00:23:38,370 GERAI. 509 00:23:38,370 --> 00:23:39,030 Taip? 510 00:23:39,030 --> 00:23:39,530 Nagi. 511 00:23:39,530 --> 00:23:41,410 Nagi žemyn. 512 00:23:41,410 --> 00:23:42,183 Koks tavo vardas? 513 00:23:42,183 --> 00:23:42,870 >> SAM: Sam. 514 00:23:42,870 --> 00:23:44,290 >> David J. Malan: Sam, nagi žemyn. 515 00:23:44,290 --> 00:23:45,320 Tai yra ta pati. 516 00:23:45,320 --> 00:23:46,280 Malonu susipažinti. 517 00:23:46,280 --> 00:23:46,780 Ei. 518 00:23:46,780 --> 00:23:47,580 Nagi daugiau. 519 00:23:47,580 --> 00:23:51,290 Taigi, visi man reikia daryti, jei galite Sam, čia "Google". 520 00:23:51,290 --> 00:23:53,240 Ar jums ieškoti terminas rekursijos? 521 00:23:53,240 --> 00:23:55,770 522 00:23:55,770 --> 00:23:56,270 Negalima sugadinti. 523 00:23:56,270 --> 00:23:59,940 524 00:23:59,940 --> 00:24:00,970 >> Ir dabar let's-- taip. 525 00:24:00,970 --> 00:24:03,380 Gerai Spauskite, kad. 526 00:24:03,380 --> 00:24:04,315 Geriau spustelėkite, kad. 527 00:24:04,315 --> 00:24:07,020 528 00:24:07,020 --> 00:24:08,020 Ahh, jį gauti. 529 00:24:08,020 --> 00:24:08,520 Nėra? 530 00:24:08,520 --> 00:24:09,050 GERAI. 531 00:24:09,050 --> 00:24:10,430 Taigi padarykime keletą kitų. 532 00:24:10,430 --> 00:24:12,830 Ne tiek daug, susijusios akademiškai čia, bet ar 533 00:24:12,830 --> 00:24:14,520 kada nors ieškojote Google Anagram? 534 00:24:14,520 --> 00:24:15,280 >> SAM: Ne 535 00:24:15,280 --> 00:24:15,520 >> David J. Malan: Gerai. 536 00:24:15,520 --> 00:24:17,186 Ieškoti Anagram vietoj rekursijos. 537 00:24:17,186 --> 00:24:22,540 538 00:24:22,540 --> 00:24:23,790 Kaip apie kreivai. 539 00:24:23,790 --> 00:24:25,515 Jūs kada nors ieškojote kreivai? 540 00:24:25,515 --> 00:24:29,260 541 00:24:29,260 --> 00:24:32,692 Dabar, tai vienas yra šiek tiek sunku pamatyti, bet tikiuosi everything's-- Gerai. 542 00:24:32,692 --> 00:24:34,150 Tai tiesiog jums ir man naudojasi tai. 543 00:24:34,150 --> 00:24:34,690 GERAI. 544 00:24:34,690 --> 00:24:38,950 >> Taigi, pagaliau, tai one's-- tai šiek tiek kreivai. 545 00:24:38,950 --> 00:24:40,810 Dabar tai padaryti barelį ritinėlį. 546 00:24:40,810 --> 00:24:44,460 547 00:24:44,460 --> 00:24:45,310 Nuostabus. 548 00:24:45,310 --> 00:24:45,910 Gerai. 549 00:24:45,910 --> 00:24:47,110 Didelis ačiū Sam. 550 00:24:47,110 --> 00:24:49,416 Čia jūs einate. 551 00:24:49,416 --> 00:24:50,400 Ačiū. 552 00:24:50,400 --> 00:24:52,807 >> Taigi, kas vyksta visiems Šių kvailas pavyzdžių? 553 00:24:52,807 --> 00:24:55,640 Taigi tikrai, prispaudžia gaubtu "Google" milijonai eilučių kodo 554 00:24:55,640 --> 00:24:58,860 matyt yra keletas kvailas JEI sąlygos, kurios yra iš esmės 555 00:24:58,860 --> 00:25:01,160 tikrinti, ar vartotojas turi įvedėte šios frazės, 556 00:25:01,160 --> 00:25:03,760 kažką daryti, kad tikriausiai paėmė nontrivial daug laiko 557 00:25:03,760 --> 00:25:06,080 įgyvendinti tik būti smagu tokiu būdu. 558 00:25:06,080 --> 00:25:08,430 Bet tai viskas užverda iki po gaubtu. 559 00:25:08,430 --> 00:25:11,570 Bet, žinoma, rekursija yra daugiau iš geekier 560 00:25:11,570 --> 00:25:13,880 pavyzdys tarp tų specialių triukų. 561 00:25:13,880 --> 00:25:16,880 Ir tikrai ten kiti ten kaip gerai, kad mes galbūt net ne 562 00:25:16,880 --> 00:25:18,230 atrado tik dar. 563 00:25:18,230 --> 00:25:22,830 >> Taigi pažvelgsime, ar mano dabar taip programa, 564 00:25:22,830 --> 00:25:24,830 ir tikrai patraukti bet iš jų savo išeitį. 565 00:25:24,830 --> 00:25:28,820 Aš ruošiuosi eiti į priekį ir atverti programą, kad yra 566 00:25:28,820 --> 00:25:30,920 ketiname bandyti sukeisti dvi reikšmes. 567 00:25:30,920 --> 00:25:33,210 Bet kol mes ten, tegul tai padaryti. 568 00:25:33,210 --> 00:25:38,500 Ar mes dar vieną savanoris, manau? 569 00:25:38,500 --> 00:25:40,480 Ar norėtumėte savanoriauti? 570 00:25:40,480 --> 00:25:40,980 Nėra? 571 00:25:40,980 --> 00:25:41,890 Nagi iki. 572 00:25:41,890 --> 00:25:42,390 Nagi iki. 573 00:25:42,390 --> 00:25:42,890 Gerai. 574 00:25:42,890 --> 00:25:44,136 Taigi jūsų vardas yra kas? 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 Nagi iki Lauren. 578 00:25:46,890 --> 00:25:50,140 Taigi Lauren yra yra ginčijo čia taip. 579 00:25:50,140 --> 00:25:52,310 Malonu susipažinti. 580 00:25:52,310 --> 00:25:55,730 Taigi Lauren čia yra priešais jos dviejų tuščių puodeliai. 581 00:25:55,730 --> 00:25:57,570 Ir mes turime šiek tiek oranžinė sulčių ir kai pienas 582 00:25:57,570 --> 00:26:00,301 ir mes ketiname eiti į priekį ir daryti toliau. 583 00:26:00,301 --> 00:26:01,550 Užtenka tik ketina užpildyti šią. 584 00:26:01,550 --> 00:26:07,840 Keletas uncijos pieno Čionai ir tegul užpildyti šiek tiek apelsinų sulčių čia. 585 00:26:07,840 --> 00:26:11,475 >> Ir priešais visus Šios auditorijos nariai, 586 00:26:11,475 --> 00:26:13,550 apsikeitimo dviejų verčių šių puodeliai. 587 00:26:13,550 --> 00:26:16,970 Įdėkite apelsinų sulčių, pieno puodelis ir į apelsinų sulčių stiklinė pieno. 588 00:26:16,970 --> 00:26:22,380 589 00:26:22,380 --> 00:26:26,150 Kaip jūs tai padaryti, jei jums buvo ne Namai ir turėjo prieigą prie kitų tiekimo? 590 00:26:26,150 --> 00:26:27,400 LAUREN: Padėkite ją į kitą puodelį. 591 00:26:27,400 --> 00:26:28,191 David J. Malan: Gerai. 592 00:26:28,191 --> 00:26:31,940 Taigi leiskite turėti laikiną kintamasis, jei mes. 593 00:26:31,940 --> 00:26:35,871 Ir eiti į priekį dabar ir įgyvendinti tas pats Swapping procedūra. 594 00:26:35,871 --> 00:26:36,370 Labai gerai. 595 00:26:36,370 --> 00:26:41,490 Mes įdėti OL į laikinas kintamasis, pienas į OL kintamojo, 596 00:26:41,490 --> 00:26:44,481 ir dabar laikinas kintamasis į pieno kintamąjį. 597 00:26:44,481 --> 00:26:44,980 GERAI. 598 00:26:44,980 --> 00:26:48,740 Taigi labai gerai padaryta iki šiol. 599 00:26:48,740 --> 00:26:50,990 Taigi paaiškėja out-- konstatuoti, kad pagalvojo tik akimirką. 600 00:26:50,990 --> 00:26:54,479 Čia tiesiog geek jį šiek tiek, tai būtų atitinkamas kodas C 601 00:26:54,479 --> 00:26:55,520 kad mes tik įgyvendinti. 602 00:26:55,520 --> 00:26:58,650 Mes turėjome du įėjimus, abu A ir B kuri mes tiesiog pasakyti paprastumo yra 603 00:26:58,650 --> 00:26:59,260 INT-aisiais. 604 00:26:59,260 --> 00:27:02,780 Ir pastebėsite čia, jei noriu sukeisti Iš dviejų kintamųjų A ir B vertes, 605 00:27:02,780 --> 00:27:06,890 mes iš tiesų reikia tarpininkus A laikinas kintamasis, laikinas puodelis, 606 00:27:06,890 --> 00:27:10,830 į kurią supilti viena vertybių, kad mes turime už jį vietos rezervavimo ženklą. 607 00:27:10,830 --> 00:27:13,480 Bet tada kodas yra būtent kaip Lauren čia įgyvendinta. 608 00:27:13,480 --> 00:27:15,500 >> Dabar, tik gauti mažai crazier, paaiškėja, 609 00:27:15,500 --> 00:27:20,930 kad jūs galite padaryti tai be laikinas kintamasis. 610 00:27:20,930 --> 00:27:24,870 Norėdami tai padaryti tinkamai, nors mes ketiname turėti apgauti su kai chemija. 611 00:27:24,870 --> 00:27:26,380 Mes turime keletą papildomų puodeliai čia. 612 00:27:26,380 --> 00:27:29,600 Taigi arčiausiai dalykas, kad atrodo kaip pieno ir vandens perhaps-- 613 00:27:29,600 --> 00:27:34,090 arba pieno ir OJ-- yra mes turime kai vandens, todėl mes užpildyti šią vieną iki 614 00:27:34,090 --> 00:27:36,486 su keletą uncijų švariu vandeniu. 615 00:27:36,486 --> 00:27:38,332 Tai tikriausiai per daug. 616 00:27:38,332 --> 00:27:38,832 Taip. 617 00:27:38,832 --> 00:27:39,934 Tai tikrai per daug. 618 00:27:39,934 --> 00:27:40,600 Laikykite ant vienos sek. 619 00:27:40,600 --> 00:27:43,520 620 00:27:43,520 --> 00:27:48,420 >> Ir dabar mes turime aliejaus, kuris, kaip prisimenu nuo vidurinės mokyklos chemijos klasę, 621 00:27:48,420 --> 00:27:49,990 tikiuosi, ji neturi sumaišoma su vandeniu. 622 00:27:49,990 --> 00:27:53,650 Bet tai kokios rūšies atrodo pieno ir OL. 623 00:27:53,650 --> 00:27:55,760 Taigi dabar, nenaudojant laikinas kintamasis, 624 00:27:55,760 --> 00:27:59,260 galite sukeisti šiuos du vertybes? 625 00:27:59,260 --> 00:28:03,884 Taigi aliejai eina į puodelį vandens, vanduo teka į naftos puodelio. 626 00:28:03,884 --> 00:28:04,800 LAUREN: Jokių kitų puodeliai? 627 00:28:04,800 --> 00:28:05,940 David J. Malan: Jokių kitų puodeliai. 628 00:28:05,940 --> 00:28:07,860 Ir aš ne iš tikrųjų išbandyti tai prieš šių metų 629 00:28:07,860 --> 00:28:10,110 todėl aš nežinau, jei tai bus faktiškai dirba chemiškai. 630 00:28:10,110 --> 00:28:16,130 631 00:28:16,130 --> 00:28:18,650 Tai nebuvo nutikti. 632 00:28:18,650 --> 00:28:19,761 Ar tai veikia? 633 00:28:19,761 --> 00:28:20,260 Gerai. 634 00:28:20,260 --> 00:28:20,990 Taigi atskiriant? 635 00:28:20,990 --> 00:28:21,490 Geras. 636 00:28:21,490 --> 00:28:24,714 Dabar mes turime gauti vandens į kitą puodelį. 637 00:28:24,714 --> 00:28:27,630 Gudresni chemija koncentratoriai galėtų tikriausiai tai padaryti geriau už mane. 638 00:28:27,630 --> 00:28:28,510 >> LAUREN: Vanduo yra ant dugno. 639 00:28:28,510 --> 00:28:31,910 >> David J. Malan: The water--, kad buvo kas svarbiausia paskutinį kartą mes tai padarėme. 640 00:28:31,910 --> 00:28:33,950 Jūs turite padaryti ją į teisingą tvarka. 641 00:28:33,950 --> 00:28:34,450 Taip. 642 00:28:34,450 --> 00:28:35,270 That's-- Gerai. 643 00:28:35,270 --> 00:28:37,290 Taigi dabar mes turime du puodeliai aliejaus. 644 00:28:37,290 --> 00:28:37,790 GERAI. 645 00:28:37,790 --> 00:28:38,510 Tai gerai. 646 00:28:38,510 --> 00:28:40,110 Bet chemiškai jei tai neapdoroti I-- 647 00:28:40,110 --> 00:28:41,200 >> LAUREN: Šis yra vanduo. 648 00:28:41,200 --> 00:28:41,930 >> David J. Malan: Tai daugiausia vandens. 649 00:28:41,930 --> 00:28:42,430 Gerai. 650 00:28:42,430 --> 00:28:44,210 Bet tai vis dar tas pats puodelis, kaip ir anksčiau. 651 00:28:44,210 --> 00:28:47,570 Taigi užpilkite it-- pabandykite jį ten. 652 00:28:47,570 --> 00:28:49,300 GERAI. 653 00:28:49,300 --> 00:28:51,010 Tai yra geras panaudojimas klasės laiko šiandien. 654 00:28:51,010 --> 00:28:51,510 GERAI. 655 00:28:51,510 --> 00:28:53,890 Taigi dabar we-- gražus. 656 00:28:53,890 --> 00:28:55,460 Rūšiuoti. 657 00:28:55,460 --> 00:28:55,960 Gerai. 658 00:28:55,960 --> 00:28:56,690 Taigi labai geras. 659 00:28:56,690 --> 00:29:00,006 Dėkojame Lauren. 660 00:29:00,006 --> 00:29:01,950 Labai gerai padaryta. 661 00:29:01,950 --> 00:29:04,570 >> Taigi tiesiog susprogdinti savo mintis, ir tai turbūt kažkas 662 00:29:04,570 --> 00:29:08,660 žaisti su, jei jums patinka CS50 ID, galite, iš tiesų, apsikeitimo dviejų kintamųjų 663 00:29:08,660 --> 00:29:11,470 nenaudojant laikiną sveikasis skaičius. 664 00:29:11,470 --> 00:29:13,060 Ir tai yra, atitinkantis kodas C. 665 00:29:13,060 --> 00:29:16,110 Ir jei jūs prisimenate iš paskutinės Trečiadienis, mes pristatėme, jei trumpai, 666 00:29:16,110 --> 00:29:19,720 keletas naujų operatoriai C ir neturi kas prisiminti, kas mažai morkų 667 00:29:19,720 --> 00:29:23,660 simbolis yra, kad mažai trikampio simbolį klaviatūroje reiškia? 668 00:29:23,660 --> 00:29:26,003 Kas Bitinis operatorius? 669 00:29:26,003 --> 00:29:26,770 >> Auditorija: EXOR. 670 00:29:26,770 --> 00:29:27,645 >> David J. Malan: EXOR. 671 00:29:27,645 --> 00:29:28,560 Arba išimtines. 672 00:29:28,560 --> 00:29:32,920 Taigi, jei norite, tiesiog for fun ne Namai duoti a ir b du savavališkas 673 00:29:32,920 --> 00:29:36,072 vertės kaip ir bet eight-- ir aš rinktųsi aštuonių bitų reikšmę. 674 00:29:36,072 --> 00:29:38,530 Jei tai padaryti su 32 bitais, jūs labai greitai atsibosta. 675 00:29:38,530 --> 00:29:42,150 Bet tik suteikti aštuonių bitų vertė tai ką, vienas ar du, 676 00:29:42,150 --> 00:29:43,790 ir duoti b panašiai vertę. 677 00:29:43,790 --> 00:29:46,810 Ir tada naudojant apibrėžimas iš XOR nuo paskutinio trečiadienį, 678 00:29:46,810 --> 00:29:52,560 taikyti tą truputį, kiekvienas tie aštuoni bitai kiekvienam iš a ir b 679 00:29:52,560 --> 00:29:54,980 ir tada daryti tiksliai už šį kodą. 680 00:29:54,980 --> 00:29:58,170 Ir tai ne neteisingas, ką čia matote ekrane. 681 00:29:58,170 --> 00:30:02,100 Iš tiesų suvesta tris XOR operacijų 682 00:30:02,100 --> 00:30:05,910 ir kažkaip stebuklingai A ir b keisis pozicijas 683 00:30:05,910 --> 00:30:08,010 neprarandant informacijos. 684 00:30:08,010 --> 00:30:11,580 >> Taigi naftos ir vandens triukas yra Artimiausias realaus pasaulio įsikūnijimas 685 00:30:11,580 --> 00:30:12,980 Galėčiau galvoti imituoti, kad. 686 00:30:12,980 --> 00:30:15,950 Bet tai tikrai lengviau naudoti laikiną kintamąjį 687 00:30:15,950 --> 00:30:16,920 kaip šiuo atveju. 688 00:30:16,920 --> 00:30:21,190 Ir tai taip pat yra puiki galimybė pasakyti, taip pat, šis mikro optimizavimo rūšies, 689 00:30:21,190 --> 00:30:23,590 kaip kompiuterio mokslininkas sakyčiau, o rūšies įdomus 690 00:30:23,590 --> 00:30:27,060 girtis apie tai, kaip tu tai be kaip Swapping su papildomu kintamuoju, 691 00:30:27,060 --> 00:30:28,640 tai dar ne viskas, kad įtikinamos. 692 00:30:28,640 --> 00:30:31,619 Nes taupyti kaip 32 bitai, į realų int atveju, 693 00:30:31,619 --> 00:30:33,410 yra ne visi, kad įtikinamų dėl sistemos, kurioje 694 00:30:33,410 --> 00:30:36,722 jums gali būti naudojant dešimtis megabaitų ar net daugiau tokių atminties šių dienų. 695 00:30:36,722 --> 00:30:38,680 Ir iš tiesų, kai mes gauname vėlesniam problemų rinkinys 696 00:30:38,680 --> 00:30:41,010 ir jums įgyvendinti rašybos tikrintuvą ir jūs 697 00:30:41,010 --> 00:30:43,550 galima ginčyti tai padaryti su tai taip mažai RAM ir taip mažai 698 00:30:43,550 --> 00:30:46,820 laiko, kiek įmanoma dėl computer-- jūs vis dar 699 00:30:46,820 --> 00:30:50,160 turi per savaitę įgyvendinti it-- jums have-- jūs būsite 700 00:30:50,160 --> 00:30:51,799 ginčijo sumažinti šiuos išteklius. 701 00:30:51,799 --> 00:30:53,840 Ir tai tikrai vienintelis tam reikia tik šį semestrą 702 00:30:53,840 --> 00:30:57,940 kur jums bus skatinami skustis išjungti net smulkiausias veiklos 703 00:30:57,940 --> 00:30:59,340 kainuoja kitaip. 704 00:30:59,340 --> 00:31:02,200 >> Taigi what-- kaip mes galime tai matome tikrąjį kodą? 705 00:31:02,200 --> 00:31:04,530 Leiskite man eiti į priekį dabar ir atverti pavyzdį 706 00:31:04,530 --> 00:31:07,700 kad sąmoningai vadinamas Nėra Sukeisti nes ji neturi 707 00:31:07,700 --> 00:31:10,670 Iš tiesų apsikeitimo kintamuosius kaip jūs iš tikrųjų galima tikėtis. 708 00:31:10,670 --> 00:31:12,260 Taigi leiskite pažvelgti. 709 00:31:12,260 --> 00:31:17,050 Štai programa, kuri neturi CS50 biblioteka vyksta, tiesiog standartinė i / o. 710 00:31:17,050 --> 00:31:19,560 Dabar mes turime prototipą už apsikeitimo iki viršaus, kuri tiesiog 711 00:31:19,560 --> 00:31:21,540 tai reiškia, kad turiu būti apibrėžta vėliau. 712 00:31:21,540 --> 00:31:22,550 Ir čia pagrindinis. 713 00:31:22,550 --> 00:31:26,000 >> I sutartinai priskiriamas x ir y, atitinkamai, vertės vieno ir dviejų 714 00:31:26,000 --> 00:31:28,590 tik todėl, kad jie maži ir lengva galvoti apie tai. 715 00:31:28,590 --> 00:31:32,280 Ir tada aš tiesiog turėti printfs krūva kur turiu normalumas patikrinti. x yra 1 716 00:31:32,280 --> 00:31:35,110 ir y yra nuo 2, matyt, ką tie printfs pasakys. 717 00:31:35,110 --> 00:31:36,530 Taigi ne magija šiol. 718 00:31:36,530 --> 00:31:40,100 >> Tada aš ruošiuosi teigia su spausdinti def, Swapping dot dot dot. 719 00:31:40,100 --> 00:31:43,730 Aš ruošiuosi skambinti apsikeitimo funkcija, einančios į x ir y. 720 00:31:43,730 --> 00:31:47,350 Ir tegul prielaidą, kad dabar apsikeitimo įgyvendinama tiksliai 721 00:31:47,350 --> 00:31:49,930 kaip tai buvo prieš momentas su laikina kintamąjį. 722 00:31:49,930 --> 00:31:52,670 Ir todėl aš teigti drąsiai, pavertė. 723 00:31:52,670 --> 00:31:55,429 x yra dabar dabar tai ir y yra tai, kad. 724 00:31:55,429 --> 00:31:57,220 Tačiau failo, žinoma, vadinamas Nėra Sukeisti. 725 00:31:57,220 --> 00:31:58,678 Taigi leiskite realiai pamatyti, kas atsitiks. 726 00:31:58,678 --> 00:32:04,450 Jei aš kaupia jokios apsikeitimo ir tada do ./noswap, x yra 1, y yra 2. 727 00:32:04,450 --> 00:32:05,770 Swapping pavertė. 728 00:32:05,770 --> 00:32:07,200 x yra 1, y yra 2. 729 00:32:07,200 --> 00:32:11,980 Taigi ji iš tikrųjų atrodo ydinga net nors swap-- tegul slinkite žemyn now-- 730 00:32:11,980 --> 00:32:16,542 įgyvendinama tiksliai vienam kodas siūliau prieš momentas. 731 00:32:16,542 --> 00:32:19,000 Taigi mes nesiruošia gauti išgalvotas su XOR stuff dabar. 732 00:32:19,000 --> 00:32:21,890 Tai taip pat turėtų dirbti tik kaip su pienu ir OL, 733 00:32:21,890 --> 00:32:25,820 bet neatrodo, kad reikia dirbti. 734 00:32:25,820 --> 00:32:27,180 >> Taigi leiskite tai padaryti dar kartą. 735 00:32:27,180 --> 00:32:29,310 Gal aš tiesiog nebuvo paleisti jį į dešinę. 736 00:32:29,310 --> 00:32:32,010 Taigi leiskite paleisti Nėra Sukeisti dar kartą. 737 00:32:32,010 --> 00:32:32,900 Gal I-- Nr. 738 00:32:32,900 --> 00:32:34,400 Taigi tai tiesiog neveikia. 739 00:32:34,400 --> 00:32:36,060 Taigi leiskite padaryti šiek tiek sveiko proto patikrinimą. 740 00:32:36,060 --> 00:32:39,690 Leiskite man eiti į priekį čia Swap ir tiesiog pridėti, palauk, 741 00:32:39,690 --> 00:32:43,856 a yra% i / n ir tegul plug-in į vertės. 742 00:32:43,856 --> 00:32:45,730 Nes aš tikrai noriu pamatyti, kas vyksta. 743 00:32:45,730 --> 00:32:47,570 Ir iš tikrųjų, tai yra Derinimo technika 744 00:32:47,570 --> 00:32:50,028 kad jums gali būti naudojant iš Darbo valandos ar namie jau, 745 00:32:50,028 --> 00:32:53,560 panašus į pirmojo pusmečio Dano Armendariz Vaizdo PSET3 746 00:32:53,560 --> 00:32:56,870 kuriame mes pristatėme Spausdinti def kaip rekomenduojama technika, bent jau 747 00:32:56,870 --> 00:32:58,080 paprastų atvejų. 748 00:32:58,080 --> 00:33:01,720 Leiskite man eiti į priekį ir paleisti padaryti nėra apsikeitimo vėl ./noswap. 749 00:33:01,720 --> 00:33:04,370 750 00:33:04,370 --> 00:33:05,840 >> Įdomu. 751 00:33:05,840 --> 00:33:11,670 Taigi pastebėti tai, ką, atrodo, kad būtų tiesa. x yra 1, y yra 2, bet a yra 2, jei b yra 1. 752 00:33:11,670 --> 00:33:16,790 Taigi tie du kažkaip gavo pavertė bet X ir Y yra ne gauti pavertė. 753 00:33:16,790 --> 00:33:21,090 Taigi, kad būtų aišku, kas vyksta yra, čia turiu x ir y 754 00:33:21,090 --> 00:33:25,380 ir tie, kurie kintamieji vietos į apimtis pagrindinis, aš einančios į x ir y 755 00:33:25,380 --> 00:33:26,170 apsikeitimo. 756 00:33:26,170 --> 00:33:29,080 Dabar, apsikeitimo, kaip atskiras funkciją, yra nemokama skambinti savo argumentus 757 00:33:29,080 --> 00:33:30,590 arba jo parametrai nieko ji nori. 758 00:33:30,590 --> 00:33:33,280 "Foo ar baro arba X arba Y arba A arba B. 759 00:33:33,280 --> 00:33:36,870 Tiesiog, kad būtų aišku, kad jie nėra identiškas X ir Y per se, 760 00:33:36,870 --> 00:33:38,020 Sakiau a ir b. 761 00:33:38,020 --> 00:33:40,040 Bet mes galime skambinti jiems nieko mes norime. 762 00:33:40,040 --> 00:33:43,960 >> Ir taip atrodo apsikeitimo yra perduodama 763 00:33:43,960 --> 00:33:48,980 x-- AKA a-- ir tai pravažiuojamas y-- AKA b. 764 00:33:48,980 --> 00:33:51,900 Kažkaip šios trys linijos Swapping šias vertybes būtent 765 00:33:51,900 --> 00:33:53,510 kaip Lauren padarė su pienu ir OL. 766 00:33:53,510 --> 00:33:56,010 Bet kai mes atsispausdinti vertybėms, a ir b 767 00:33:56,010 --> 00:34:01,340 iš tiesų yra sukeisti, bet X ir Y neturi juos pakeisti. 768 00:34:01,340 --> 00:34:03,150 Prisiminkite, kad X ir Y yra čia. 769 00:34:03,150 --> 00:34:05,320 >> Taigi, mes galime pamatyti tai per Kitas būdas, kaip gerai. 770 00:34:05,320 --> 00:34:08,110 Ir tai taip pat yra technika įdėta į problemą nustatyti trys. 771 00:34:08,110 --> 00:34:10,780 Vykime į priekį ir tai padaryti CS50 ID, jei dar neturite. 772 00:34:10,780 --> 00:34:13,730 Dešinėje pusėje mes turėti šią Debugger skirtuką. 773 00:34:13,730 --> 00:34:16,159 Ir jeigu Jūs atidarote tai aukštyn, ten kai paslaptinga informacija 774 00:34:16,159 --> 00:34:17,530 kad manimi išmesti į tave iš pradžių. 775 00:34:17,530 --> 00:34:19,310 Bet tegul erzinti tai be labai greitai. 776 00:34:19,310 --> 00:34:21,620 >> Taigi vienas, pamatysite vietinius kintamuosius. 777 00:34:21,620 --> 00:34:26,230 Pasirodo, kad statyti į CS50 IDE ir iš programavimo aplinkoje daug daugiau 778 00:34:26,230 --> 00:34:28,060 Apskritai, yra debugeris. 779 00:34:28,060 --> 00:34:31,340 Įrankis, kuris leidžia vizualiai pamatyti kas vyksta viduje jūsų programa 780 00:34:31,340 --> 00:34:34,380 nereikia griebtis pridedant printfs ir kompiliuoti ir paleisti 781 00:34:34,380 --> 00:34:37,588 ir pridedant printf "ir renkant ir veikia, jau iš darbo valandomis 782 00:34:37,588 --> 00:34:40,070 arba namuose, tikriausiai gauti gana varginantis. 783 00:34:40,070 --> 00:34:43,090 >> Taigi čia, tik akimirkai, mes ketina pamatyti realiu laiku 784 00:34:43,090 --> 00:34:44,760 Mūsų vietos kintamųjų reikšmės. 785 00:34:44,760 --> 00:34:47,880 Mes taip pat bus galima nustatyti kas yra vadinama ribinės reikšmės, kurios 786 00:34:47,880 --> 00:34:52,570 Yra galimybių, mano programos, jei norite sustabdyti vykdymas konkrečiu eilutę kodo 787 00:34:52,570 --> 00:34:53,710 kad aš smalsu. 788 00:34:53,710 --> 00:34:54,210 Teisė? 789 00:34:54,210 --> 00:34:55,969 Šios programos paleisti sekundės. 790 00:34:55,969 --> 00:35:00,450 Tai tipo gražus mus lėčiau žmonėms gebėti sustabdyti, skirkite laiko, pamatyti 791 00:35:00,450 --> 00:35:02,380 tai, kas vyksta aplink tam tikra linija kodą 792 00:35:02,380 --> 00:35:05,050 be programos arimo per ją ir apdailos visiškai. 793 00:35:05,050 --> 00:35:08,510 Taigi A ribinės reikšmės ketina leisti mums pertrauka, ir sustabdyti tam tikru. 794 00:35:08,510 --> 00:35:12,990 >> Skambučių kamino yra išgalvotas būdas sakydamas, kokias funkcijas šiuo metu 795 00:35:12,990 --> 00:35:14,140 yra vadinamas šiuo metu. 796 00:35:14,140 --> 00:35:15,370 Pagrindinė visada vadinamas pirmas. 797 00:35:15,370 --> 00:35:17,230 Bet jei Pagrindinė vadina funkcija vadinama Sukeisti, 798 00:35:17,230 --> 00:35:20,470 mes iš tikrųjų ketiname pamatyti šį bokštas funkcijų, kurios buvo 799 00:35:20,470 --> 00:35:22,400 vadinama atvirkštine chronologine tvarka. 800 00:35:22,400 --> 00:35:23,310 Taigi pažiūrėkime, kad. 801 00:35:23,310 --> 00:35:24,327 >> Aš ruošiuosi nutolinti. 802 00:35:24,327 --> 00:35:25,660 Aš ruošiuosi grįžti į savo kodą. 803 00:35:25,660 --> 00:35:27,540 Ir tik todėl, kad aš noriu būti pedantiškas čia 804 00:35:27,540 --> 00:35:31,100 Aš ruošiuosi eiti į priekį ir spustelėkite tik į linija penkių kairę. 805 00:35:31,100 --> 00:35:32,830 Ir tai sukuria raudoną taškelį. 806 00:35:32,830 --> 00:35:36,200 Ir pastebėti dešinėje pusėje kad debugeris žino, ei, 807 00:35:36,200 --> 00:35:41,020 Aš tiesiog pasakė ne atskaitos tašką noswap.c linija penki, specialiai 808 00:35:41,020 --> 00:35:42,480 šiuo kodu linija. 809 00:35:42,480 --> 00:35:45,090 Taigi debugeris žino, kad aš prašėte, kad kitą kartą 810 00:35:45,090 --> 00:35:48,530 Aš paleisti savo programos, kurią ji pauzę vykdymas yra, o ne tik 811 00:35:48,530 --> 00:35:50,390 veikia visa tai super greitai. 812 00:35:50,390 --> 00:35:53,889 >> Taigi, dabar aš ruošiuosi spustelėkite debug mygtuką pačiame viršuje IDE 813 00:35:53,889 --> 00:35:55,430 ir tai ketina daryti toliau. 814 00:35:55,430 --> 00:36:00,680 Ji ketina atidaryti iš pradžių šiek tiek baisu ieškote antrasis terminalas window-- 815 00:36:00,680 --> 00:36:02,679 nuotolinio derinimo iš surengti tokia ir such-- 816 00:36:02,679 --> 00:36:04,970 ir mes grįžti į tai, kas visi tai reiškia, kad prieš ilgas. 817 00:36:04,970 --> 00:36:09,020 Bet tai, kas svarbu dabar yra tai, kad, kad "red dot" smogė, 818 00:36:09,020 --> 00:36:11,735 Debugger tyčia stabtelėjo execution-- 819 00:36:11,735 --> 00:36:15,560 ne tą per se linijos, bet pirmas linija faktinio kodą tą funkciją. 820 00:36:15,560 --> 00:36:18,040 Ir štai kodėl linija septyni yra dabar paryškinamas geltonai. 821 00:36:18,040 --> 00:36:20,550 >> O dabar leiskite pažvelgti dešinėje pusėje. 822 00:36:20,550 --> 00:36:27,300 Atrodo, pagal nutylėjimą, pakankamai gražiai, X yra kas vertė? 823 00:36:27,300 --> 00:36:27,860 0. 824 00:36:27,860 --> 00:36:29,750 Ir Y yra kas vertė? 825 00:36:29,750 --> 00:36:30,410 Nulis. 826 00:36:30,410 --> 00:36:35,540 Ir tai galima tikėtis, ta prasme, kad X ir y-- kad geltona line-- turi 827 00:36:35,540 --> 00:36:36,770 nebuvo įvykdyta dar. 828 00:36:36,770 --> 00:36:38,510 Taigi x neturėtų turėti vertę 1. 829 00:36:38,510 --> 00:36:41,470 Tai gali turėti bet kurią kitą vertę, taip vadinama šiukšlių vertė. 830 00:36:41,470 --> 00:36:44,320 Ir mes pasisekė, kad tai nuliui ne šiame punkte, iš esmės. 831 00:36:44,320 --> 00:36:46,400 >> Taigi, dabar ten tik nedaugelis mygtukai turime rūpintis 832 00:36:46,400 --> 00:36:48,100 kai derinate šiuo būdu. 833 00:36:48,100 --> 00:36:49,970 Atkreipkite dėmesį, čia mes turime Play mygtuką. 834 00:36:49,970 --> 00:36:51,877 Ir jei mes žaisti ar nukentėjo tęsti, tai tik 835 00:36:51,877 --> 00:36:53,710 ketina paleisti per programos poilsio 836 00:36:53,710 --> 00:36:55,300 arba tol, kol ji hitai kitą atskaitos tašką. 837 00:36:55,300 --> 00:36:56,910 Bet aš ne nustatyti bet kokį kitą Ribinės todėl tik 838 00:36:56,910 --> 00:36:58,118 ketina paleisti per pabaigoje. 839 00:36:58,118 --> 00:37:00,280 Tai pralaimėjimus natūra tikslas išnyra aplink. 840 00:37:00,280 --> 00:37:03,290 >> Taigi vietoj to, aš rūpi Šios piktogramos į dešinę. 841 00:37:03,290 --> 00:37:05,360 Ir jei aš užveskite pelės žymeklį ant juos, kaip jūs turite per daug, 842 00:37:05,360 --> 00:37:07,450 pamatysite mažai tips-- įrankių patarimų. 843 00:37:07,450 --> 00:37:09,020 Tai vienas peržengti. 844 00:37:09,020 --> 00:37:11,290 Dabar tai nereiškia Pereiti taip linija kodą. 845 00:37:11,290 --> 00:37:14,840 Tai tiesiog reiškia, paleiskite jį ir judėti į kitą, judėti į kitą, 846 00:37:14,840 --> 00:37:15,580 pereiti į kitą. 847 00:37:15,580 --> 00:37:17,610 Kitaip tariant, per kad mygtuką, galiu vaikščioti 848 00:37:17,610 --> 00:37:20,390 per savo kodas vienu žingsniu metu. 849 00:37:20,390 --> 00:37:21,914 Eilutė po eilutės, pažodžiui. 850 00:37:21,914 --> 00:37:23,830 Dabar, į dešinę kad ten dar vienas 851 00:37:23,830 --> 00:37:25,163 kad mes matome tik akimirką. 852 00:37:25,163 --> 00:37:27,820 Tai yra taip vadinamas Žingsnis į piktogramą, kad manimi 853 00:37:27,820 --> 00:37:30,300 ketina leisti man neria į kitą funkciją. 854 00:37:30,300 --> 00:37:31,800 Bet pažiūrėkime, tai tik akimirkai. 855 00:37:31,800 --> 00:37:33,280 Taigi, aš ruošiuosi spustelėkite peržengti. 856 00:37:33,280 --> 00:37:35,820 Ir dabar pastebėsite, kaip aš spustelėkite Ši viršuje dešinėje mygtuką, 857 00:37:35,820 --> 00:37:41,260 saugoti savo akis maždaug pagal Vietinis Kintamieji ir pamatyti, kas atsitiks su x. 858 00:37:41,260 --> 00:37:44,115 x yra 1, nes dabar geltona linija jau įvykdytas 859 00:37:44,115 --> 00:37:45,840 ir mes persikėlė į 8 eilutę. 860 00:37:45,840 --> 00:37:49,840 Ir akimirką y turėtų tikiuosi tapti 2. 861 00:37:49,840 --> 00:37:52,330 >> Dabar nieko, įdomi atsitinka truputį. 862 00:37:52,330 --> 00:37:53,390 Visa tai yra printf. 863 00:37:53,390 --> 00:37:58,010 Ir pastebėsite, mano antrinio terminalo langas, matau spausdinimo def produkcija. 864 00:37:58,010 --> 00:38:01,080 Ir dabar aš turiu padaryti sprendimas, kaip programuotojas. 865 00:38:01,080 --> 00:38:04,360 Galiu žingsnis virš šios linijos kodas, jį paleidus, bet ne 866 00:38:04,360 --> 00:38:06,220 vis smalsu apie tai, kas viduje. 867 00:38:06,220 --> 00:38:11,130 Arba aš iš tikrųjų galėtų dėti į jį ir vidun pati Sukeisti. 868 00:38:11,130 --> 00:38:12,340 Taigi darykime pastarasis. 869 00:38:12,340 --> 00:38:15,550 >> Leiskite man eiti į priekį ir spustelėkite ne peržengti bet žingsnis į. 870 00:38:15,550 --> 00:38:17,300 Pranešimas, visi staiga langų pokyčiai 871 00:38:17,300 --> 00:38:19,330 pabrėžti pirmas eilutę kodo keitimas. 872 00:38:19,330 --> 00:38:20,710 Štai linija 21. 873 00:38:20,710 --> 00:38:25,220 Ir dabar, kas natūra funky yra tai, kad Jei atrodo per čia, kaip ir tikėtasi, 874 00:38:25,220 --> 00:38:29,720 kablelis b yra 1, ir 2, atitinkamai. 875 00:38:29,720 --> 00:38:33,840 Kodėl temp 32767? 876 00:38:33,840 --> 00:38:36,560 Primindama, kad temp, panašiai kaip tuščias puodelis prieš momentas, 877 00:38:36,560 --> 00:38:38,980 deklaruojama čia on-line 21. 878 00:38:38,980 --> 00:38:43,390 Kodėl 32,000- Aš turiu galvoje, kodėl jis tiesiog kažkokiam keistam vertė? 879 00:38:43,390 --> 00:38:43,890 Taip? 880 00:38:43,890 --> 00:38:45,190 >> Auditorija: Tai ne inicializuoti. 881 00:38:45,190 --> 00:38:46,940 >> David J. Malan: Tai nebuvo inicijuotas. 882 00:38:46,940 --> 00:38:49,370 Taigi, mūsų kompiuteris visada turi fizinę atmintį. 883 00:38:49,370 --> 00:38:50,544 Jis visada turi fizinę RAM. 884 00:38:50,544 --> 00:38:52,710 Ir visada Zero ir vienas yra ten, tiesa? 885 00:38:52,710 --> 00:38:54,626 Kadangi mes naudojame mūsų kompiuterio visą dieną, 886 00:38:54,626 --> 00:38:57,210 jūs naudojate CS50 IDE arba serveriai visą dieną. 887 00:38:57,210 --> 00:39:01,159 Taigi, kad RAM arba turi keletą nulių arba kai One arba kai nulių ir. 888 00:39:01,159 --> 00:39:02,950 Nesvarbu, ar ne jūs naudojate juos. 889 00:39:02,950 --> 00:39:05,270 Jūs negalite tiesiog tuščias erdves, kur norite bitai. 890 00:39:05,270 --> 00:39:06,850 Jie nei su nulių ir. 891 00:39:06,850 --> 00:39:09,610 >> Taigi paaiškėja, kad temp, nes mes neinicijuota ją dar, 892 00:39:09,610 --> 00:39:14,580 mes turime tuos 32 bitus, bet jie jau nėra buvo inicijuoti visoms žinomoms vertybėms. 893 00:39:14,580 --> 00:39:18,110 Taigi, kas jiems buvo dauguma neseniai vartojote for-- tų 32 bits-- 894 00:39:18,110 --> 00:39:23,000 mes tiesiog matome kai kurių artefaktų Ankstesnis naudoti tose ypač 32 895 00:39:23,000 --> 00:39:23,500 bitai. 896 00:39:23,500 --> 00:39:27,780 Kaip tik aš spustelėkite peržengti nors, Na ir na temp ketina gauti vertę 1. 897 00:39:27,780 --> 00:39:31,600 Ir jei aš tai padaryti dar kartą, a yra bus suteikta vertės 2 898 00:39:31,600 --> 00:39:33,830 , tuomet b ketina būti suteikta vertę 1. 899 00:39:33,830 --> 00:39:36,390 >> Ir kas taip malonu dabar šis punktas į istoriją 900 00:39:36,390 --> 00:39:39,750 yra tai, kad debugeris yra rodo man, super lėtai 901 00:39:39,750 --> 00:39:42,640 mano tempu, koks apsikeitimo sandorių valstybė. 902 00:39:42,640 --> 00:39:47,490 Tačiau pastebėti ne čia viršuje, pranešimas kad skambutis kamino tikrųjų 903 00:39:47,490 --> 00:39:49,180 turi du sluoksnius į jį. 904 00:39:49,180 --> 00:39:53,240 Dabar tas, kuris manimi pabrėžė, kaip Sukeisti, jei aš spustelėkite Pagrindinė vietoj to, 905 00:39:53,240 --> 00:39:57,100 Atkreipkite dėmesį, kaip vietiniai kintamieji keisti nes kūrėjas gali tik apynių 906 00:39:57,100 --> 00:39:59,740 aplink ir eiti į bet skirtingos apimties. 907 00:39:59,740 --> 00:40:04,070 Taigi, nors mes darome visa tai dirbti ir teisingai Swapping a ir b 908 00:40:04,070 --> 00:40:09,080 jei aš einu atgal ir pirmyn tarp Swap kur a yra 2, ir b yra 1, ir Main, 909 00:40:09,080 --> 00:40:11,851 jau Pagrindinė turėjo įtakos ne visi? 910 00:40:11,851 --> 00:40:12,350 Ne. 911 00:40:12,350 --> 00:40:13,930 Taigi, kas yra Takeaway čia? 912 00:40:13,930 --> 00:40:18,200 Na, it turns out, kad bet kuriuo metu skambinate funkciją kaip apsikeitimo sandoriai, 913 00:40:18,200 --> 00:40:21,600 ir jūs perduoti jį argumentus, kas Jūs pereiti į Swap funkcijos 914 00:40:21,600 --> 00:40:24,730 šiuo atveju yra kopija šių argumentų. 915 00:40:24,730 --> 00:40:28,620 Taigi, jei x ir y yra kiekvienas atitinkamai 32 bitų, kas Sukeisti gauti 916 00:40:28,620 --> 00:40:30,760 yra dvi naujos vietos kintamieji, ar argumentų, 917 00:40:30,760 --> 00:40:34,380 vadinamas ir b-- bet tie yra savavališkas names-- bet nulių modelis 918 00:40:34,380 --> 00:40:39,520 ir tie, viduje a ir b yra pamušalu iki būti identiškos x ir y 919 00:40:39,520 --> 00:40:42,610 tačiau jie yra ne tas pats, kaip x ir y. 920 00:40:42,610 --> 00:40:46,880 >> Tai tarsi Pagrindinė turi savo gabalas popieriaus numeris 1-ą ir 2 x ir y, 921 00:40:46,880 --> 00:40:49,260 ir tada, kai jis rankas, kad gabalas popieriaus Sukeisti, 922 00:40:49,260 --> 00:40:51,970 Sukeisti labai greitai gauna savo rašiklis, rašo žemyn 923 00:40:51,970 --> 00:40:56,240 1 ir 2 savo popieriaus lapo, rankos atgal originalų xy į pagrindinį 924 00:40:56,240 --> 00:40:58,790 ir tada daro savo dalykas su a ir b. 925 00:40:58,790 --> 00:41:01,940 Ir tai yra svarbu, nes dabar super tai turi nontrivial pasekmių 926 00:41:01,940 --> 00:41:06,260 už faktiškai raštu teisingą kodą nes atrodytų, mes negalime apsikeitimo 927 00:41:06,260 --> 00:41:07,500 du kintamuosius. 928 00:41:07,500 --> 00:41:09,150 >> Parašiau teisingą apsikeitimo funkciją. 929 00:41:09,150 --> 00:41:12,770 Mes jį įgyvendino kartu su Lauren, kaip teisingas apsikeitimo funkcija iš tikrųjų, 930 00:41:12,770 --> 00:41:16,700 bet, matyt, nė vienas iš šių klausimai, jei jūs negalite iš tikrųjų 931 00:41:16,700 --> 00:41:19,530 apsikeitimo dvi reikšmes visam laikui. 932 00:41:19,530 --> 00:41:21,970 Taigi, mes turime kitą būdą faktiškai gauti ne tai, 933 00:41:21,970 --> 00:41:24,472 ir turime, kad būtų galima tikrųjų išspręsti šią problemą. 934 00:41:24,472 --> 00:41:27,180 Ir paaiškėja out-- ir mes ateiti Atgal į šio konkretaus paveikslėlio 935 00:41:27,180 --> 00:41:30,500 prieš long-- tai yra vienas iš būdų, kad jums gali atkreipti jūsų kompiuterio atminties. 936 00:41:30,500 --> 00:41:31,460 Tai tiesiog stačiakampis. 937 00:41:31,460 --> 00:41:32,960 Jūs galite piešti bet skaičius būdais, tačiau tai 938 00:41:32,960 --> 00:41:35,740 patogu piešti kaip stačiakampis dėl šios priežasties. 939 00:41:35,740 --> 00:41:40,040 >> Mes ketiname pradėti šiandien ir už jos ribų kalbame apie vadinamąją kamino. 940 00:41:40,040 --> 00:41:43,870 Ir kamino yra tik riekė iš RAM-- iš memory-- riekė 941 00:41:43,870 --> 00:41:47,100 kad funkcijos turi prieigą kada jie vadinami. 942 00:41:47,100 --> 00:41:49,800 Ir taip paaiškėja, kad ne pačioje apačioje šio kamino 943 00:41:49,800 --> 00:41:53,590 kur visi pagrindiniai vietinių kintamųjų ir org C org V ir visi, kad kita 944 00:41:53,590 --> 00:41:56,950 ketinate eiti pagal nutylėjimą. Ir jeigu pagrindinis ragina kai kurias kitas funkcijas, pavyzdžiui apsikeitimo sandoriai, 945 00:41:56,950 --> 00:42:00,330 gerai, Sukeisti ketina gauti kitą sluoksnis atmintį iki virš jo. 946 00:42:00,330 --> 00:42:04,490 >> Ir taip tiesiog suteikti jums greitai paviršutiniškai nuotrauka tai, jei aš einu per here-- 947 00:42:04,490 --> 00:42:09,450 ir leiskite man veidrodis tai dėl Pakabinami kaip well-- kas tikrai turiu, 948 00:42:09,450 --> 00:42:12,100 jei mums rūpi tik apie apatinė šio paveikslėlio dabar, 949 00:42:12,100 --> 00:42:15,070 yra tai, kad, kai aš paleisti programą ir pagrindiniai iškviečiamas, 950 00:42:15,070 --> 00:42:18,330 Pagrindinė skiriamas iš riekė RAM mano kompiuteryje, kad yra 951 00:42:18,330 --> 00:42:20,060 šio vadinamosios pluošto apačioje. 952 00:42:20,060 --> 00:42:22,143 Ir aš ruošiuosi padaryti ją sąmoningai, kaip aikštėje. 953 00:42:22,143 --> 00:42:24,540 Taigi, tai, kaip 32 bitų ar keturi baitai. 954 00:42:24,540 --> 00:42:28,790 Ir jei tai pagrindinė funkcija turi kintami vadinamas x, kurių vertė yra 1 955 00:42:28,790 --> 00:42:32,626 ir ji turi kintamąjį vadinamą y su 2 vertės, tai 956 00:42:32,626 --> 00:42:35,750 kaip vartoti šį atminties rakštis, kad Pagrindinė buvo suteikta pagal veiklos 957 00:42:35,750 --> 00:42:38,850 sistema ir dalijant jį taip, kad pirmasis vietinis kintamasis eina čia 958 00:42:38,850 --> 00:42:40,930 antras eina čia, ir tai viskas. 959 00:42:40,930 --> 00:42:45,590 >> Kai Pagrindinė ragina apsikeitimo sandoriai, apsikeitimo gauna savo gabaliuką atminties 960 00:42:45,590 --> 00:42:48,280 kad mes, kaip tai padaryti iš operacinės sistemos, 961 00:42:48,280 --> 00:42:50,820 ir jis ketina turėti savo pačių vietos kintamieji remiantis 962 00:42:50,820 --> 00:42:53,825 Mūsų įgyvendinti anksčiau su vietos rodikliams 963 00:42:53,825 --> 00:42:58,010 ir b, kad iš pradžių gauti vertybes 1 ir 2. 964 00:42:58,010 --> 00:43:00,450 Bet tada, kai tik SWAP kodas vykdo, 965 00:43:00,450 --> 00:43:03,760 Lauren tikrųjų apsikeitimo sandorių OL ir pienas, kas vyksta? 966 00:43:03,760 --> 00:43:09,030 Na, tai 2 tapti 1 dalį, šis 1 tampa 2, ir, beje, 967 00:43:09,030 --> 00:43:13,360 yra temp kintamasis, kuris manimi yra naudojamas, kad visą laiką, kad ilgainiui 968 00:43:13,360 --> 00:43:14,470 nueina. 969 00:43:14,470 --> 00:43:16,720 Bet tai nesvarbu kiek dirbate 970 00:43:16,720 --> 00:43:22,160 Šioje eilutėje of-- šiame atminties, X ir Y yra visiškai nepaliesti. 971 00:43:22,160 --> 00:43:26,320 >> Taigi, mes turime tam tikrą užleidimas Sukeisti ir funkcijos, kaip ji 972 00:43:26,320 --> 00:43:32,640 Paslaptis prieiga, jei norite, kad funkcijos like-- į atmintį kaip x ir y. 973 00:43:32,640 --> 00:43:35,110 Taigi leiskite pažvelgti pavyzdys, kuris padeda 974 00:43:35,110 --> 00:43:38,220 mums pamatyti, ką praėjo vyksta visą šį laiką. 975 00:43:38,220 --> 00:43:40,284 Aš ruošiuosi eiti į priekį ir atverti palyginkite nulio. 976 00:43:40,284 --> 00:43:42,200 Ir aš ruošiuosi uždaryti Mūsų debugeris, aš ruošiuosi 977 00:43:42,200 --> 00:43:44,360 uždaryti šį baisu ieškote pranešimą ką tik sako, palauk, 978 00:43:44,360 --> 00:43:45,800 Jūs esate vidurinėje derinti. 979 00:43:45,800 --> 00:43:48,383 Aš ruošiuosi paslėpti šį skirtuką čia tiesiog grįžti į paprastumą. 980 00:43:48,383 --> 00:43:50,160 Taigi nesijaudinkite, jei GDB žūsta. 981 00:43:50,160 --> 00:43:53,910 Tai tiesiog reiškia, kad programa turi buvo mesti, tyčia šiuo atveju, 982 00:43:53,910 --> 00:43:54,820 man. 983 00:43:54,820 --> 00:43:57,700 >> O dabar palyginkite nulis tai daro. 984 00:43:57,700 --> 00:44:00,110 Aš naudoju CS50 biblioteka standarto I / O. 985 00:44:00,110 --> 00:44:04,319 Aš turiu pagrindinę funkciją, kad pirmoji sako, ką nors pasakyti, ir gauna eilutę. 986 00:44:04,319 --> 00:44:06,110 Tada sako, kad ji ir vėl gauna kitą eilutę. 987 00:44:06,110 --> 00:44:09,910 Ir pastebėti, kad šie du stygos yra vadinami s ir t, atitinkamai. 988 00:44:09,910 --> 00:44:12,910 Ir dabar ši programa, palyginkite Nulis, jo gyvenimo tikslas, 989 00:44:12,910 --> 00:44:15,470 jis turėjo man pasakyti, aš įrašykite tą patį? 990 00:44:15,470 --> 00:44:16,910 Ir todėl aš ruošiuosi grįžti į savaitę vieną. 991 00:44:16,910 --> 00:44:19,950 Aš naudoju mano vienodas vienodas operatorių kuris yra kokybės operatorius. 992 00:44:19,950 --> 00:44:22,220 Ne perleidimas operatorius, lygybės operatorius. 993 00:44:22,220 --> 00:44:23,890 Aš tiesiog lyginant su S ir T. 994 00:44:23,890 --> 00:44:27,470 >> Tad iš tikrųjų eiti į priekį ir tai padaryti. 995 00:44:27,470 --> 00:44:32,680 Ir aš ruošiuosi eiti į priekį ir padaryti palyginkite nulio. 996 00:44:32,680 --> 00:44:35,110 Aš ruošiuosi daryti ./comparezero. 997 00:44:35,110 --> 00:44:37,150 Ir aš ruošiuosi eiti į priekį ir ką nors pasakyti 998 00:44:37,150 --> 00:44:43,450 kaip, darykime mama mažosiomis raidėmis ir kaip apie mama didžiosiomis raidėmis. 999 00:44:43,450 --> 00:44:45,034 Ir, žinoma, aš tipo skirtingus dalykus. 1000 00:44:45,034 --> 00:44:45,533 Gerai. 1001 00:44:45,533 --> 00:44:46,570 Štai galima tikėtis. 1002 00:44:46,570 --> 00:44:47,640 >> Leiskite paleisti jį dar kartą. 1003 00:44:47,640 --> 00:44:49,740 Abu kartus padaryti mažosiomis raidėmis, mažosiomis raidėmis. 1004 00:44:49,740 --> 00:44:51,490 Tai atrodo super identiškas mane. 1005 00:44:51,490 --> 00:44:52,930 Įveskite. 1006 00:44:52,930 --> 00:44:53,430 GERAI. 1007 00:44:53,430 --> 00:44:55,804 Gal tai tiesiog keista, nes tai ne mylėti savo gramatiką. 1008 00:44:55,804 --> 00:44:59,930 Taigi darykime kapitalo mama, kapitalo Mama, identiški. 1009 00:44:59,930 --> 00:45:01,490 Skirtingi dalykai. 1010 00:45:01,490 --> 00:45:03,907 >> Taigi, kodėl taip yra? 1011 00:45:03,907 --> 00:45:06,240 Na, kas iš tikrųjų vyksta apie po gaubtu čia? 1012 00:45:06,240 --> 00:45:08,180 Taigi grįžkime per čia tik akimirkai 1013 00:45:08,180 --> 00:45:10,910 ir apsvarstyti, ką GetString yra iš tikrųjų daro. 1014 00:45:10,910 --> 00:45:13,385 Kai skambinate GetString, tai funkcija, mes 1015 00:45:13,385 --> 00:45:16,510 patys rašė ir tai kažkaip gauna seka simbolių iš vartotojui. 1016 00:45:16,510 --> 00:45:20,280 Ir galime manyti, kad pirmasis laikas man skambinti GetString, kuri suteikia man 1017 00:45:20,280 --> 00:45:21,930 iš atminties riekė, kad atrodo taip. 1018 00:45:21,930 --> 00:45:26,990 Ir jei aš įvedėte mažosiomis M-O-m-- ir tai, kas vyksta po to? 1019 00:45:26,990 --> 00:45:28,840 Tiesiog greitai normalumas patikrinti. 1020 00:45:28,840 --> 00:45:29,780 >> Kairinis pasvirasis brūkšnys nulis. 1021 00:45:29,780 --> 00:45:30,510 Mes žinome, kad. 1022 00:45:30,510 --> 00:45:32,784 Ir prisiminti, kad mes žaidėme aplink su Zamila pavadinimas 1023 00:45:32,784 --> 00:45:34,950 ir kitų pavadinimų krūva kai Robas buvo čia ieškome 1024 00:45:34,950 --> 00:45:36,280 ne tai, kas vyksta viduje atmintį. 1025 00:45:36,280 --> 00:45:37,780 Taigi, kad istorija yra lygiai tas pats. 1026 00:45:37,780 --> 00:45:40,160 Tai yra tai, ką GetString grįžta į mane. 1027 00:45:40,160 --> 00:45:44,780 Dabar, mano kodas momentas prieš saugomi grįžti vertė GetString 1028 00:45:44,780 --> 00:45:47,510 į kintamąjį vadinamas s. 1029 00:45:47,510 --> 00:45:51,390 Ir tada antrą kartą aš jį pavadino, jis saugomas jį kintamojo vadinamas t. 1030 00:45:51,390 --> 00:45:55,070 >> Taigi, jei aš einu per čia, man reikia atkreipti šį vietinį variable-- 1031 00:45:55,070 --> 00:45:59,610 ir aš paprastai vyksta atkreipti eilutę kaip just-- mes 1032 00:45:59,610 --> 00:46:02,360 vadina jį s-- kaip mažai aikštėje čia. 1033 00:46:02,360 --> 00:46:09,760 Ir dabar, somehow-- kaip veikia mama vidun šio kintamojo s? 1034 00:46:09,760 --> 00:46:12,010 Na, mes turime grįžti kad pirmųjų principų čia. 1035 00:46:12,010 --> 00:46:15,660 Ką GetString tikrųjų grįžta? 1036 00:46:15,660 --> 00:46:19,030 >> Taigi, Pasirodo, kad M-O-M Backslash nulis, ir bet koks skaičius 1037 00:46:19,030 --> 00:46:22,364 Kitų styginiams atminties kaip Zamila ir Robas arba Andy ar bet kokius kitus, 1038 00:46:22,364 --> 00:46:24,280 yra, žinoma, mūsų kompiuterio RAM arba atminties. 1039 00:46:24,280 --> 00:46:27,760 Ir jūsų RAM turi like-- turite RAM koncertą, du koncertai RAM, 1040 00:46:27,760 --> 00:46:30,860 arba milijardo ar du milijardas baitų, arba gal net daugiau šių dienų. 1041 00:46:30,860 --> 00:46:34,070 Taigi tarkime, šiandienos tikslais, kad nesvarbu, kaip mes numeruoti 1042 00:46:34,070 --> 00:46:36,640 juos, bet mes galime suskaičiuoti kiekvieną iš tų milijardų ar du milijardai 1043 00:46:36,640 --> 00:46:37,880 ar keturis milijardas baitų. 1044 00:46:37,880 --> 00:46:42,240 >> Ir tegul tiesiog pasakyti, kad savavališkai tai yra pirmasis įkandimo, antroji įkandimo, 1045 00:46:42,240 --> 00:46:43,380 trečia, ketvirta. 1046 00:46:43,380 --> 00:46:46,570 Aš sąmoningai nenaudoja prilyginamas nuliui šiandien, bet mes grįžti prie to. 1047 00:46:46,570 --> 00:46:49,570 Taigi, kitaip tariant, jei tai yra labai pirmą kartą aš naudoju šią programą, 1048 00:46:49,570 --> 00:46:52,715 Aš tiesiog sekasi ir pirmasis įkandimas yra vietos vienoje, o vėliau du 1049 00:46:52,715 --> 00:46:53,590 tada tris kaip keturi. 1050 00:46:53,590 --> 00:46:57,430 Ir jei aš nuolat piešimas, dėžutės numeris du milijardus būtų būdas čia. 1051 00:46:57,430 --> 00:47:02,200 >> Taigi, ką jūs manote, tada, GetString tikrųjų grįžta? 1052 00:47:02,200 --> 00:47:06,010 Jis negrįžta M-O-M Atgal nerijos velniop nulis savaime, nes tai aiškiai 1053 00:47:06,010 --> 00:47:08,180 netilps langelį, kad aš sudarytas. 1054 00:47:08,180 --> 00:47:11,210 Taigi, ką dar gali GetString tikrųjų grįžta visi šie savaites? 1055 00:47:11,210 --> 00:47:14,410 1056 00:47:14,410 --> 00:47:16,820 Atsakymas dėl Pagrindinis diskusijų čia kažkur. 1057 00:47:16,820 --> 00:47:20,390 Jūs negalite tilptų M-O-M Atgal nerijos velniop nulis, Taigi, kas gali prasmės vietoj? 1058 00:47:20,390 --> 00:47:23,424 Jei jums teko būti itin protingas, išleisti nuo vadinamojo inžinerijos skrybėlę, 1059 00:47:23,424 --> 00:47:24,340 Ką galėtumėte grįžti? 1060 00:47:24,340 --> 00:47:27,340 Kas yra mažiausia suma informacijos galite grįžti, kad vis dar 1061 00:47:27,340 --> 00:47:30,610 tegul Jums susirasti M-O-M atmintyje? 1062 00:47:30,610 --> 00:47:31,270 Taip? 1063 00:47:31,270 --> 00:47:31,950 >> Auditorija: Vienas. 1064 00:47:31,950 --> 00:47:32,200 >> David J. Malan: Vienas. 1065 00:47:32,200 --> 00:47:33,021 Ir kodėl vieną? 1066 00:47:33,021 --> 00:47:35,520 Auditorija: Nes ji pasakys kur eiti [nesigirdi]. 1067 00:47:35,520 --> 00:47:38,391 1068 00:47:38,391 --> 00:47:39,390 David J. Malan: Būtent. 1069 00:47:39,390 --> 00:47:44,300 Aš tik ketina grįžti adresą Virvės, kad aš Dotarłeś. 1070 00:47:44,300 --> 00:47:46,570 Į šis adresas atvejis yra vieta viena. 1071 00:47:46,570 --> 00:47:51,280 Taigi kas iš tiesų yra saugomi s-- ir kiekvieną eilutę kintamasis taip far-- 1072 00:47:51,280 --> 00:47:53,430 ką tik buvo adresas tą eilutę. 1073 00:47:53,430 --> 00:47:57,840 >> Tuo tarpu, jei aš vadinu GetString antrą kartą ir aš 1074 00:47:57,840 --> 00:48:03,300 įveskite pažodžiui tą patį thing-- M-O-M su lowercase-- M-O-M 1075 00:48:03,300 --> 00:48:06,200 o kitas Backslash nulis, o dabar gal mano programa s 1076 00:48:06,200 --> 00:48:09,820 veikia jau kurį laiką, tai gal tai yra 10, tai yra vietą 11, tai yra 12, 1077 00:48:09,820 --> 00:48:10,700 tai yra 13. 1078 00:48:10,700 --> 00:48:13,590 Kompiuteriai, naudojantys kai kurie kiti Atminties dėl kokios nors priežasties. 1079 00:48:13,590 --> 00:48:18,172 Kas dabar eina mano antras kintamasis mano programa t? 1080 00:48:18,172 --> 00:48:19,390 10. 1081 00:48:19,390 --> 00:48:20,050 Būtent. 1082 00:48:20,050 --> 00:48:23,910 >> Ir todėl, kai mes žiūrime ne kodo šią programą 1083 00:48:23,910 --> 00:48:26,550 kur aš tiesiog bando palyginti dvi vertybes, 1084 00:48:26,550 --> 00:48:32,180 yra S lygi lygi t, kas akivaizdus žmogaus atsakymas? 1085 00:48:32,180 --> 00:48:34,890 Tiesiog nėra, nes 1 nėra lygi 10. 1086 00:48:34,890 --> 00:48:36,861 Ir taip čia glūdi galimybė mums tikrai 1087 00:48:36,861 --> 00:48:39,610 tiesiog grįžti į vėl pirmas principai ir galvoti apie, gerai, 1088 00:48:39,610 --> 00:48:41,110 kas vyksta po gaubtu? 1089 00:48:41,110 --> 00:48:43,240 Mes jau kalbame apie bitai ir baitai ir atmintį, 1090 00:48:43,240 --> 00:48:46,820 bet tai tikrai naudinga suprasti nes kai skambinate GetString, 1091 00:48:46,820 --> 00:48:50,280 nors mes galvojame apie tai grįžti M-O-M arba string mama 1092 00:48:50,280 --> 00:48:53,120 arba Andy arba Zamila arba panašiai, techniškai 1093 00:48:53,120 --> 00:48:55,510 tai tik grįžimas adresą tos atminties riekė. 1094 00:48:55,510 --> 00:48:56,910 >> Bet tai viskas OK. 1095 00:48:56,910 --> 00:49:00,570 Nes kaip man sužinoti, kur eilutė baigiasi? 1096 00:49:00,570 --> 00:49:03,840 Jei aš tik atsižvelgiant į pradžią? 1097 00:49:03,840 --> 00:49:05,380 Na, Backslash nulis, tiesa? 1098 00:49:05,380 --> 00:49:08,800 Tiesiog linijinio laiko galiu spausdinti su spausdinimo def M-O-M. 1099 00:49:08,800 --> 00:49:11,820 Ir kuo greičiau matau Atgal nerijos velniop nulis, man nerūpi, kur aš pradėjau, 1100 00:49:11,820 --> 00:49:14,950 Aš jau žinau, netiesiogiai kur man reikia baigti. 1101 00:49:14,950 --> 00:49:18,700 >> Ir taip šiandien sukanka beginning-- ir leiskite man tai padaryti dramatiškai, nes mes 1102 00:49:18,700 --> 00:49:21,800 išgyveno daug problemų gauti juos čia mokymas wheels-- 1103 00:49:21,800 --> 00:49:29,840 Taigi, šiandien mokymo ratai pradėti pleiskanoti ir mes atskleisti ne least-- 1104 00:49:29,840 --> 00:49:31,373 >> [Plojimai] 1105 00:49:31,373 --> 00:49:33,220 1106 00:49:33,220 --> 00:49:36,160 >> Tai buvo verta kelionės Tikslinė šį rytą, taip? 1107 00:49:36,160 --> 00:49:39,600 Taigi, now-- yra, pasirodo out, nėra tokio dalyko kaip eilutę. 1108 00:49:39,600 --> 00:49:41,140 Styginių neegzistuoja. 1109 00:49:41,140 --> 00:49:43,760 Tai sinonimas, kad mes turėjome viduje CS50 bibliotekoje. 1110 00:49:43,760 --> 00:49:48,660 Nuo šiol, mes ketiname pradėti skambinti s ir t ne įsipareigojimų bet char žvaigždžių. 1111 00:49:48,660 --> 00:49:51,180 Ir char žvaigždutė mes erzinti, išskyrus prieš ilgas. 1112 00:49:51,180 --> 00:49:53,510 Tačiau tai yra, kad net jei mes ir toliau 1113 00:49:53,510 --> 00:49:56,180 naudojant GetString dabar, techniškai turėčiau 1114 00:49:56,180 --> 00:49:59,010 sakydamas char žvaigždė ir char žvaigždė. 1115 00:49:59,010 --> 00:50:01,720 >> Ir it turns out, kas tai žvaigždė ketina reikšti kažką 1116 00:50:01,720 --> 00:50:04,340 vadinamas žymeklis ar adresą. 1117 00:50:04,340 --> 00:50:06,110 Ir iš tiesų, kibinimas už tai, kas yra priekyje 1118 00:50:06,110 --> 00:50:09,760 tai 20 Antras klipas iš mūsų draugas Nikas Parlante Stanfordo 1119 00:50:09,760 --> 00:50:12,927 kurie prieš gana ilgą laiką, praleisti juokinga suma laiko, 1120 00:50:12,927 --> 00:50:15,010 kaip geriausiai galiu pasakyti iš savo virtuvės arba jo rūsyje, 1121 00:50:15,010 --> 00:50:17,140 priėmimo Claymation Įvadas į pasaulį 1122 00:50:17,140 --> 00:50:20,010 personažas pavadintas Binky, su kuriais mes 1123 00:50:20,010 --> 00:50:22,010 būti įvesta kitą laiko rodykles. 1124 00:50:22,010 --> 00:50:24,588 Taigi čia yra, kas turi ateiti peržiūra. 1125 00:50:24,588 --> 00:50:26,370 >> [Vaizdo įrašų atkūrimas] 1126 00:50:26,370 --> 00:50:27,510 >> -hey, Binky. 1127 00:50:27,510 --> 00:50:28,260 Kelkis. 1128 00:50:28,260 --> 00:50:30,672 Atėjo laikas rodykle įdomus. 1129 00:50:30,672 --> 00:50:31,616 >> -Kas tai? 1130 00:50:31,616 --> 00:50:33,032 Sužinokite daugiau apie rodykles? 1131 00:50:33,032 --> 00:50:34,450 Oi, Goody. 1132 00:50:34,450 --> 00:50:35,431 >> [PABAIGA PLAYBACK] 1133 00:50:35,431 --> 00:50:38,055 David J. Malan: Ir dėl šio rašto, matysime jus trečiadienį. 1134 00:50:38,055 --> 00:50:47,590 1135 00:50:47,590 --> 00:50:48,090 Gerai. 1136 00:50:48,090 --> 00:50:48,740 Kas yra šokis? 1137 00:50:48,740 --> 00:50:49,240 Nagi. 1138 00:50:49,240 --> 00:50:50,330 Kas yra šokis? 1139 00:50:50,330 --> 00:50:51,820 Jūs norite man gauti ji pradėjo? 1140 00:50:51,820 --> 00:50:53,770 Aš gausiu ji pradėjo. 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: Saldūs išgalvotas Mozė.