1 00:00:00,000 --> 00:00:10,550 2 00:00:10,550 --> 00:00:14,050 >> David J. MALAN: Tämä on CS50 ja tämä on alku viikolla neljä. 3 00:00:14,050 --> 00:00:18,630 Ja poika, on Volkswagen vaivaa kaikki, koska ohjelmisto. 4 00:00:18,630 --> 00:00:20,264 Olkaamme katsomaan. 5 00:00:20,264 --> 00:00:20,930 [VIDEOTOISTOSTA] 6 00:00:20,930 --> 00:00:25,560 -Cars, Älykkäin merkkiä Fast and Furious elokuvia. 7 00:00:25,560 --> 00:00:29,100 Tällä viikolla saksalainen autovalmistaja Volkswagen löytyi itse 8 00:00:29,100 --> 00:00:32,490 keskellä skandaali mahdollisesti rikollista mittasuhteet. 9 00:00:32,490 --> 00:00:36,060 >> -Volkswagen On piristävä miljardeja sakkoja, mahdollinen syyte 10 00:00:36,060 --> 00:00:38,560 sen johtajat, kuten Yhtiö pahoittelee 11 00:00:38,560 --> 00:00:41,840 varten takila 11000000 autoja auttaa se voittaa päästöjä testejä. 12 00:00:41,840 --> 00:00:44,950 >> -Certain Diesel mallit olivat suunniteltu ohjemistosovellukset 13 00:00:44,950 --> 00:00:48,440 että käytetyt tiedot, mukaan lukien ohjausmekanismin asennoissa ja ajoneuvon 14 00:00:48,440 --> 00:00:51,870 nopeus määrittää auto oli olevien päästöjen testausta. 15 00:00:51,870 --> 00:00:55,650 Tämän seikka, moottori vähentäisi myrkyllisiä päästöjä. 16 00:00:55,650 --> 00:00:59,070 Mutta auto oli väärennetty ohitus että kun se ajetaan. 17 00:00:59,070 --> 00:01:03,320 Päästöt kasvoivat 10-40 kertaiseksi hyväksyttävä EPA tasolle. 18 00:01:03,320 --> 00:01:04,280 >> [Lopeta toisto] 19 00:01:04,280 --> 00:01:05,220 >> DAVID J. MALAN: Joten katsomaan tämä 20 00:01:05,220 --> 00:01:07,250 ja nähdä, miten tämä voitaisiin toteuttaa 21 00:01:07,250 --> 00:01:09,680 ja miten tämä voisi vaikuttaa niin paljon autoja kuin tämä. 22 00:01:09,680 --> 00:01:12,840 Joten kädessäni täällä ovat lehdistö julkaistujen on antanut EPA-- 23 00:01:12,840 --> 00:01:14,620 Environmental Protection Agency joka 24 00:01:14,620 --> 00:01:18,032 on USA: n virasto, joka kahvat ympäristönäkökohdat, 25 00:01:18,032 --> 00:01:19,740 ja sitten varsinainen oikeudellinen huomautus, joka oli 26 00:01:19,740 --> 00:01:22,420 Lähetä Volkswagen vain muutama päivä sitten. 27 00:01:22,420 --> 00:01:26,530 >> Joten EPA kirjoittaa, ja esittää nyt julkisesti, hienostunut ohjelmisto 28 00:01:26,530 --> 00:01:29,390 algoritmi tietyistä Volkswagen ajoneuvot havaitsee 29 00:01:29,390 --> 00:01:32,630 kun auto on käynnissä virallinen päästöt testaus 30 00:01:32,630 --> 00:01:36,505 ja muuttuu koko päästöt ohjaa vain testin aikana. 31 00:01:36,505 --> 00:01:38,380 Tehokkuus näiden ajoneuvojen saastuminen 32 00:01:38,380 --> 00:01:43,260 päästöt ohjauslaitteet on suuresti vähennetään kaikissa tavanomaisissa ajo 33 00:01:43,260 --> 00:01:44,320 tilanteissa. 34 00:01:44,320 --> 00:01:48,190 Tämä johtaa autojen, jotka täyttävät standardit laboratoriossa tai testaus 35 00:01:48,190 --> 00:01:52,790 asemalla, mutta normaalin toiminnan aikana päästää typen oxides-- tai NOx-- 36 00:01:52,790 --> 00:01:54,950 jopa 40-kertainen. 37 00:01:54,950 --> 00:01:58,220 Ohjelmisto tuottama Volkswagen on lainaus lainaus päättyy, estolaitteena, 38 00:01:58,220 --> 00:02:00,650 määritelty Clean Air Act Yhdysvalloissa. 39 00:02:00,650 --> 00:02:03,410 >> He menevät edelleen, että EPA ja toinen virasto 40 00:02:03,410 --> 00:02:07,020 paljastui estolaite ohjelmistot jälkeen riippumaton analyysi 41 00:02:07,020 --> 00:02:09,660 tutkijat West Virginia University. 42 00:02:09,660 --> 00:02:14,160 NOx pilaantuminen lisää osaltaan typpidioksidin, alailmakehän otsonin, 43 00:02:14,160 --> 00:02:15,700 ja pienhiukkasten. 44 00:02:15,700 --> 00:02:18,090 Altistumista näille yhdisteistä onkin linkitetty 45 00:02:18,090 --> 00:02:20,870 jossa on laaja valikoima vakavia terveysvaikutuksia, 46 00:02:20,870 --> 00:02:23,637 mukaan lukien lisääntynyt astma iskut ja muut hengityselinten 47 00:02:23,637 --> 00:02:26,470 sairauksia, jotka voivat olla niin vakavia lähettää ihmisiä sairaalaan. 48 00:02:26,470 --> 00:02:28,660 Otsonille altistumisen ja hiukkasten on myös 49 00:02:28,660 --> 00:02:31,960 liittynyt ennenaikaista kuolema johtuu hengitysteiden liittyvä 50 00:02:31,960 --> 00:02:35,690 tai sydän liittyviä vaikutuksia. 51 00:02:35,690 --> 00:02:38,940 Lapset, vanhukset, preexisting hengityselinten sairaus 52 00:02:38,940 --> 00:02:42,840 ovat erityisen alttiina terveysvaikutukset näiden epäpuhtauksien. 53 00:02:42,840 --> 00:02:45,056 >> Riittää sanoen, se on melko vakava. 54 00:02:45,056 --> 00:02:46,930 Ja mennään edelleen lukea vain yksi ote 55 00:02:46,930 --> 00:02:49,370 ja sitten me katsomaan taustalla vaikutukset 56 00:02:49,370 --> 00:02:50,920 Tämän yhteydessä auton. 57 00:02:50,920 --> 00:02:53,730 Erityisesti Volkswagen valmistetaan ja asennetaan 58 00:02:53,730 --> 00:02:56,210 ohjelmisto ns elektroninen ohjaus 59 00:02:56,210 --> 00:02:59,320 module-- tai ECM-- on nämä ajoneuvot, jotka aisti 60 00:02:59,320 --> 00:03:03,580 kun ajoneuvo oli testataan noudattaminen EPA päästönormit. 61 00:03:03,580 --> 00:03:07,510 Perustuu eri panokset lukien asento ohjauspyörä, ajoneuvojen 62 00:03:07,510 --> 00:03:11,280 nopeus, kesto moottorin toimintaa, ja ilmanpaine, 63 00:03:11,280 --> 00:03:13,720 nämä tulot tarkasti seurataan parametrit 64 00:03:13,720 --> 00:03:17,600 liittovaltion testausmenettelyn käytetty päästöjen testaus EPA sertifiointi 65 00:03:17,600 --> 00:03:18,400 tarkoituksiin. 66 00:03:18,400 --> 00:03:21,850 >> Aikana EPA: n päästöjen testausta, ajoneuvot ECM ohjelmisto 67 00:03:21,850 --> 00:03:25,060 juoksi ohjelmisto joka tuotti yhteensopiva päästöjen tuloksia. 68 00:03:25,060 --> 00:03:28,340 Kaikkina muina aikoina, ajoneuvon ECM ohjelmisto 69 00:03:28,340 --> 00:03:31,090 juoksi erillinen tie kalibrointi mikä vähensi 70 00:03:31,090 --> 00:03:34,360 tehokkuutta yleinen päästöjenrajoitusjärjestelmän, 71 00:03:34,360 --> 00:03:37,864 erityisesti selektiivinen katalyyttinen vähentäminen Lean NOx trap-- 72 00:03:37,864 --> 00:03:39,280 joka näemme hetken kuluttua. 73 00:03:39,280 --> 00:03:43,040 Tämän seurauksena NOx-päästöt kasvoivat kertoimella 10-40 kertaa 74 00:03:43,040 --> 00:03:47,450 yläpuolella EPA tasot riippuen drive cycle. 75 00:03:47,450 --> 00:03:50,800 >> Joten mitä tämä todella tarkoittaa, ja lähdekoodin ohjelmisto käynnissä 76 00:03:50,800 --> 00:03:53,190 on Volkswagenin ei ole vielä julkisesti, 77 00:03:53,190 --> 00:03:56,460 on se, että käytännössä, tämä vastaava on jossain siellä sisällä 78 00:03:56,460 --> 00:03:57,830 Volkswagenin koodin. 79 00:03:57,830 --> 00:04:02,200 Jos testataan, ja jos auto havaitsee tietyt ympäristötekijät 80 00:04:02,200 --> 00:04:04,330 kuten ohjauspyörä asento tai liike 81 00:04:04,330 --> 00:04:06,710 tai sen puuttuminen auton tai useita muita tekijöitä 82 00:04:06,710 --> 00:04:09,940 että tällä hetkellä arveltu olla osa tätä kaavaa, 83 00:04:09,940 --> 00:04:12,370 ne yksinkertaisesti päälle täysi päästöjen valvontaa. 84 00:04:12,370 --> 00:04:15,670 Toisin sanoen, ne alkavat säteilevät vähemmän epäpuhtauksia. 85 00:04:15,670 --> 00:04:18,769 >> Else, joka toisessa tilanteessa kun se ei ole havainnut olevan 86 00:04:18,769 --> 00:04:20,790 laboratoriossa, he eivät vain. 87 00:04:20,790 --> 00:04:24,320 Ja niin voit yksinkertaistaa tämä useampaan betoni pseudokoodilla jotain 88 00:04:24,320 --> 00:04:24,820 kuten tämä. 89 00:04:24,820 --> 00:04:27,810 Jos pyörät pyörivät mutta ohjauspyörä ei ole, suggestiivinen 90 00:04:27,810 --> 00:04:30,060 että auto on joissakin sellainen pyörivän sylinterin 91 00:04:30,060 --> 00:04:32,550 mutta jonkinlainen varasto testataan, 92 00:04:32,550 --> 00:04:36,070 sitten käyttäytyä EPA haluaisivat sinun. 93 00:04:36,070 --> 00:04:37,960 Muuten ei. 94 00:04:37,960 --> 00:04:40,420 Joten katsomaan lyhyen videon, joka 95 00:04:40,420 --> 00:04:45,391 ottaa tarkasteluun mitä seurauksia ovat tämän todella mekaanisesti. 96 00:04:45,391 --> 00:04:48,620 >> [VIDEOTOISTOSTA] 97 00:04:48,620 --> 00:04:52,800 >> -Last Perjantaina EPA ilmoitti, että jotkut Volkswagen Audi tehty vuodesta 2009 98 00:04:52,800 --> 00:04:55,840 ja tänä vuonna käyttivät ns estolaite 99 00:04:55,840 --> 00:04:59,060 kiertää päästöjen lakeja suunniteltu pitämään ilman puhtaana. 100 00:04:59,060 --> 00:05:01,700 Mutta mitä se tarkoittaa tarkalleen? 101 00:05:01,700 --> 00:05:04,666 >> No, nykyaikaiset autot on kymmeniä tietokoneita niiden sisällä. 102 00:05:04,666 --> 00:05:07,040 Ja jotkin näistä tietokoneista auttaa koordinoimaan toimintoja 103 00:05:07,040 --> 00:05:09,590 moottorin optimaalisen suorituskykyä samalla on huolehdittava, 104 00:05:09,590 --> 00:05:12,340 että ei ole liikaa roskaa tulossa ulos pakoputkesta. 105 00:05:12,340 --> 00:05:15,170 He todella työskennelleet Näin useita vuosikymmeniä nyt. 106 00:05:15,170 --> 00:05:17,380 Periaatteessa jokainen osa nykyaikaisen auton moottori 107 00:05:17,380 --> 00:05:20,080 on anturi tai ohjain sitä, ja nämä tietokoneet 108 00:05:20,080 --> 00:05:23,460 lukevat tietojen tuhansia kertaa sekunnissa säätöjen 109 00:05:23,460 --> 00:05:26,220 kuten suhde polttoaineen ja ilman että menee sylintereihin. 110 00:05:26,220 --> 00:05:28,730 >> Nämä huijaaminen Volkswagen ja Audi mallit ovat dieselit, 111 00:05:28,730 --> 00:05:30,890 ja dieselit on vielä yksi todella tärkeä tietokone 112 00:05:30,890 --> 00:05:34,030 ohjatut muuttujat, joka on määrä palamattoman polttoaineen menossa 113 00:05:34,030 --> 00:05:35,200 osaksi pakoputki. 114 00:05:35,200 --> 00:05:36,310 Nyt kuulostaa pahalta. 115 00:05:36,310 --> 00:05:39,642 Ei kuulosta mitä haluaisi palamattoman polttoaineen menee pakokaasun. 116 00:05:39,642 --> 00:05:41,600 Mutta kun kyseessä on diesel, sinulla on jotain 117 00:05:41,600 --> 00:05:46,110 kutsutaan NOx-trap, joka on laite, joka imee ja ansoja typen oksidien 118 00:05:46,110 --> 00:05:48,880 jotka ovat epäpuhtauksia, jotka muuten mennä ilmakehään. 119 00:05:48,880 --> 00:05:53,040 Ja vaikutus, että NOx-trap- on parannettu palamattoman polttoaineen. 120 00:05:53,040 --> 00:05:56,650 Joten estolaite on erityinen ohjelma sisällä näitä tietokoneita, jotka voivat tehdä sen 121 00:05:56,650 --> 00:05:59,527 näyttää auto täyttää päästöjen standardit, vaikka se ei ole. 122 00:05:59,527 --> 00:06:01,110 Volkswagen oli ongelma sen käsissä. 123 00:06:01,110 --> 00:06:04,050 Sen dieselmoottorit olivat tiedossa saada suuri polttoainetalouden, 124 00:06:04,050 --> 00:06:07,510 mutta NOx-trap vain toimii hyvin kun enemmän polttoainetta käytetään. 125 00:06:07,510 --> 00:06:10,460 Niin auto olisi havaita, käyttämällä tätä estolaitteena, 126 00:06:10,460 --> 00:06:13,870 kun se oli tulossa päästöt testi, se käyttää enemmän polttoainetta, 127 00:06:13,870 --> 00:06:16,830 tehdä NOx-trap toimivat hyvin, päästöt olisi hienoa. 128 00:06:16,830 --> 00:06:21,130 Mutta sitten saat tiellä, laite sammuu, poltat vähemmän polttoainetta 129 00:06:21,130 --> 00:06:24,256 mutta olet laskemisesta peräti 40 kertaa enemmän epäpuhtauksia ilmakehään. 130 00:06:24,256 --> 00:06:26,130 Mutta miten hitossa auton tietää, että se oli 131 00:06:26,130 --> 00:06:27,720 testataan päästöjen noudattamista? 132 00:06:27,720 --> 00:06:30,590 EPA sanoo, että se oli hienostunut joka tarkastetaan asiat 133 00:06:30,590 --> 00:06:34,090 kuten ohjauspyörän asento, nopeus, kuinka kauan moottori oli, 134 00:06:34,090 --> 00:06:35,507 ja jopa ilmanpaine. 135 00:06:35,507 --> 00:06:37,673 Toisin sanoen, oli mitenkään tämä oli vahingossa 136 00:06:37,673 --> 00:06:40,260 koska ohjelmisto oli suunniteltu erittäin huolellisesti havaitsemaan 137 00:06:40,260 --> 00:06:41,630 virkamies päästötesti. 138 00:06:41,630 --> 00:06:43,588 Se on joitakin melko vakavia petos ja se on 139 00:06:43,588 --> 00:06:45,420 miksi Volkswagen on tällaisia ​​vakavia ongelmia. 140 00:06:45,420 --> 00:06:48,600 Itse asiassa niiden toimitusjohtaja, Martin Winterkorn, juuri astui alas. 141 00:06:48,600 --> 00:06:49,820 >> Joten mitä tapahtuu seuraavaksi? 142 00:06:49,820 --> 00:06:53,900 No, jos olet yksi puoli miljoonaa diesel jettas, Beatles, golfs, Passatin, 143 00:06:53,900 --> 00:06:56,220 tai Audi A3S suoritettu, hyvä uutinen on on 144 00:06:56,220 --> 00:06:57,886 että auto on edelleen turvallista ajaa. 145 00:06:57,886 --> 00:07:00,510 Sinun ei tarvitse laittaa sen pois kunnes Volkswagen antaa muistaa. 146 00:07:00,510 --> 00:07:02,509 Mutta jossain vaiheessa he luultavasti menossa on 147 00:07:02,509 --> 00:07:04,230 päivittää ohjelmisto autoosi. 148 00:07:04,230 --> 00:07:06,927 Kun näin tapahtuu saatat saada vähemmän mailia tankki. 149 00:07:06,927 --> 00:07:09,260 Asianajajat ovat jo valmistautuu up ryhmäkanteen oikeusjuttuja 150 00:07:09,260 --> 00:07:12,500 joten omistajat voisivat saada korvauksen jossain vaiheessa tulevaisuudessa. 151 00:07:12,500 --> 00:07:15,832 Mutta se ei aio tapahtua milloin tahansa pian. 152 00:07:15,832 --> 00:07:16,711 >> [Lopeta toisto] 153 00:07:16,711 --> 00:07:19,960 DAVID J. MALAN: Eli tämä todella herättää mielenkiintoinen isompi kuva kysymys 154 00:07:19,960 --> 00:07:20,660 kuten luottaa. 155 00:07:20,660 --> 00:07:21,160 Oikea? 156 00:07:21,160 --> 00:07:24,300 Kaikilla meillä on iPhone tai Androids tai jotain meidän taskuihin todennäköisimmin 157 00:07:24,300 --> 00:07:26,500 näinä päivinä, tai kannettavat tietokoneet meidän kierrosta, jotka ovat 158 00:07:26,500 --> 00:07:28,510 käynnissä ohjelmisto tehty Apple ja Microsoft 159 00:07:28,510 --> 00:07:30,710 ja rypäleterttuja muiden yritysten. 160 00:07:30,710 --> 00:07:34,240 Mutta miten me tiedämme, että mitä näistä ohjelmista tekevät 161 00:07:34,240 --> 00:07:37,680 on oikeastaan ​​mitä nämä yritykset sanovat he tekevät? 162 00:07:37,680 --> 00:07:39,610 >> Esimerkiksi kuka on sanoa, että aina kun 163 00:07:39,610 --> 00:07:42,200 soittaa iPhonella tai Android-puhelinta tai vastaavaa, 164 00:07:42,200 --> 00:07:45,650 että puhelinnumero ei myöskään ole latautumisen jonkin yrityksen palvelimelle 165 00:07:45,650 --> 00:07:48,399 koska joidenkin ohjelman olet kirjoitettu, onko se toiminta 166 00:07:48,399 --> 00:07:51,070 itse järjestelmän kuten iOS tai Android, tai koska olet ladannut 167 00:07:51,070 --> 00:07:53,880 jotkut kolmannen osapuolen sovellus että jotenkin kuuntelee 168 00:07:53,880 --> 00:07:57,120 kaikki mitä kirjoitat tai kaiken, mitä olet todella sanovat. 169 00:07:57,120 --> 00:07:59,500 Mistä tiedät, että kun te ovat käynnissä kalahtaa 170 00:07:59,500 --> 00:08:02,590 tai Tee kokoat oma ohjelmisto CS50, miten 171 00:08:02,590 --> 00:08:06,080 oletteko että CS50 oma henkilökunta, Poiketen CS50 kirjasto, 172 00:08:06,080 --> 00:08:08,690 ei ole kirjautumisen joka string olet koskaan saanut 173 00:08:08,690 --> 00:08:10,276 tai jokaisen sentin olet koskaan saanut? 174 00:08:10,276 --> 00:08:12,900 No, voit varmasti etsiä klo lähdekoodi jotain 175 00:08:12,900 --> 00:08:15,233 kuten CS50 kirjasto, sinua voisi katsoa lähdekoodia 176 00:08:15,233 --> 00:08:18,170 Linux-käyttöjärjestelmä käynnissä CS50 IDE. 177 00:08:18,170 --> 00:08:23,090 Mutta hämmästyttävä esitys sai takaisin vuonna 1984 178 00:08:23,090 --> 00:08:26,730 jotka saavat Turing Award hyvin kuuluisa tietokone tiedemies tiedossa 179 00:08:26,730 --> 00:08:29,750 as-- nimeltään Ken Thompson jotka sai Turing Award joka 180 00:08:29,750 --> 00:08:33,500 on eräänlainen tietokoneen tieteen Nobelin, jos haluatte, 181 00:08:33,500 --> 00:08:35,309 hänen työstään käyttöjärjestelmä nimeltään 182 00:08:35,309 --> 00:08:39,039 Unix, joka on hyvin samankaltainen henki, mitä käytämme joka on Linux. 183 00:08:39,039 --> 00:08:41,960 Ja kysymys hän kysyi hänen hyväksymistä puhe, lähinnä 184 00:08:41,960 --> 00:08:44,910 koskevista puitteista vuodet keskustelu 185 00:08:44,910 --> 00:08:46,970 noin luottamusta ja turvallisuutta, oli tämä. 186 00:08:46,970 --> 00:08:50,410 Missä määrin yksi luottamus maininta siitä, että program-- pala 187 00:08:50,410 --> 00:08:53,010 on software-- on vapaa troijalaiset? 188 00:08:53,010 --> 00:08:56,500 Ehkä se on tärkeää luottaa ihmiset, jotka kirjoittivat ohjelmisto. 189 00:08:56,500 --> 00:08:58,650 >> Ja itse asiassa olemme sidoksissa on puhua, että hän 190 00:08:58,650 --> 00:09:02,400 antoi Hyväksyessään tämän palkinnon 80-luvulla on CS50: n verkkosivuilla 191 00:09:02,400 --> 00:09:04,030 alle Luennot sivun tänään. 192 00:09:04,030 --> 00:09:06,071 Koska mitä näet on, että hän todella antaa 193 00:09:06,071 --> 00:09:09,430 melko yksinkertainen esimerkki siitä, miten jopa kääntäjä kuten kalahtaa tai mitä tahansa 194 00:09:09,430 --> 00:09:13,950 kääntäjät toiset ovat käyttäneet aiemmin, mitä jos upotettu kääntäjä me 195 00:09:13,950 --> 00:09:18,190 itse käyttävät on vähän, jos edellyttäen, että pohjimmiltaan sanoo, 196 00:09:18,190 --> 00:09:22,360 jos huomaat, että tämä koodi on käytössä GetString toiminto tai GetInt 197 00:09:22,360 --> 00:09:26,600 toiminto, mennä eteenpäin ja lisätä takaoven tai Troijan hevonen 198 00:09:26,600 --> 00:09:29,340 siten, että kyseinen ohjelma nyt joitakin nollia 199 00:09:29,340 --> 00:09:30,930 ja ne, jotka tekevät jotain haittaohjelmia. 200 00:09:30,930 --> 00:09:33,080 Kirjautumalla kaikki näppäimistön, lataat että tiedot 201 00:09:33,080 --> 00:09:35,100 Joidenkin palvelimelle, tai oikeastaan ​​mitään. 202 00:09:35,100 --> 00:09:37,290 >> Ja mitä Ken Thompson jatkuu tehdä hänen puhua 203 00:09:37,290 --> 00:09:40,580 on osoittaa, että vaikka voit käyttää lähde 204 00:09:40,580 --> 00:09:43,794 koodi kääntäjä, joka Haitallisen voisi tehdä tätä, 205 00:09:43,794 --> 00:09:46,210 sillä ei ole väliä, koska on tämä kana ja muna 206 00:09:46,210 --> 00:09:49,500 todellisuus menneisyyden monet vuotta jolloin kerääjiä 207 00:09:49,500 --> 00:09:51,960 käytetään koota itse. 208 00:09:51,960 --> 00:09:55,440 Toisin sanoen, paluumatkalla kun joku oli kirjoittaneen ensimmäinen kääntäjä. 209 00:09:55,440 --> 00:09:59,060 Ja tämän jälkeen, milloin he ovat päivitetty kääntäjä muuttamalla sen lähdekoodia, 210 00:09:59,060 --> 00:10:02,020 lisäämällä ominaisuuksia ja kääntää uudelleen sen ihmisiä kuin voimme käyttää, hyvin, 211 00:10:02,020 --> 00:10:04,270 he käyttävät vanhaa versio kääntäjä 212 00:10:04,270 --> 00:10:06,370 koota uuteen versio kääntäjä. 213 00:10:06,370 --> 00:10:08,370 Ja jos olet katsomaan klo puhua että hän antoi, 214 00:10:08,370 --> 00:10:10,970 näet, että koska Tämän kierron 215 00:10:10,970 --> 00:10:14,330 voit itse olla vikoja tai Troijan hevoset upotettu ohjelmisto 216 00:10:14,330 --> 00:10:14,990 käytämme. 217 00:10:14,990 --> 00:10:18,010 Ja vaikka jos tarkastellaan lähdekoodi näiden ohjelmien, 218 00:10:18,010 --> 00:10:21,550 se ei ehkä ole edes ilmeistä koska huijaukseen on todella 219 00:10:21,550 --> 00:10:24,710 Joissakin vanhempi versio kääntäjä, joka siitä lähtien on ollut 220 00:10:24,710 --> 00:10:27,340 ruiskuttamalla uhka meidän ohjelmisto. 221 00:10:27,340 --> 00:10:29,740 >> Joka on vain sanoa, me todellakaan voi ja pitäisi 222 00:10:29,740 --> 00:10:32,939 Trust Software käynnissä meidän läppäreissä tai puhelimia tai useita paikkoja. 223 00:10:32,939 --> 00:10:36,230 Ja itse asiassa myöhemmin tämän lukukauden kun alamme puhua web ohjelmointi 224 00:10:36,230 --> 00:10:38,521 ja todella alkaa rakentaa web-sovelluksia itse, 225 00:10:38,521 --> 00:10:40,285 me puhumme näistä uhkia ja muut. 226 00:10:40,285 --> 00:10:43,410 Nyt, olet ehkä miettinyt ja huomasin että oli pikku Darth 227 00:10:43,410 --> 00:10:45,842 Vaderin leikkeet että Verge näytti siellä 228 00:10:45,842 --> 00:10:47,550 noin Volkswagen. Jos et ole koskaan nähnyt, minä 229 00:10:47,550 --> 00:10:49,190 ajattelin meidän pitäisi keventää mieliala koska tämä on kaikki 230 00:10:49,190 --> 00:10:50,780 erittäin masentava ja pelottavaa. 231 00:10:50,780 --> 00:10:52,910 Aion katsoa taaksepäin Super Bowl 2011 232 00:10:52,910 --> 00:10:55,300 kun kaupallinen mukaan Volkswagen-- ja tämä 233 00:10:55,300 --> 00:10:59,620 melkein tekee niistä sympaattinen again-- esitettiin ensimmäistä kertaa televisiossa. 234 00:10:59,620 --> 00:11:04,039 Se on 60 sekunnin leike mielestäni voit nauttia. 235 00:11:04,039 --> 00:11:04,705 [VIDEOTOISTOSTA] 236 00:11:04,705 --> 00:11:08,198 [MUSIC - Theme from "Star Wars"] 237 00:11:08,198 --> 00:11:35,643 238 00:11:35,643 --> 00:11:38,138 [DOG KUORII] 239 00:11:38,138 --> 00:11:50,114 240 00:11:50,114 --> 00:11:53,607 [Auto alkaa] 241 00:11:53,607 --> 00:12:04,086 242 00:12:04,086 --> 00:12:05,955 [Lopeta toisto] 243 00:12:05,955 --> 00:12:06,830 DAVID J. MALAN: Joo. 244 00:12:06,830 --> 00:12:07,663 Olin juuri tarkkailun. 245 00:12:07,663 --> 00:12:11,360 Tämä auto on rikkomusten luettelo. 246 00:12:11,360 --> 00:12:12,000 Selvä. 247 00:12:12,000 --> 00:12:14,040 Joten me tarkastelemme joitakin pseudokoodi hetki sitten. 248 00:12:14,040 --> 00:12:15,380 Ja tässä on isompi pätkä pseudokoodina koodi 249 00:12:15,380 --> 00:12:16,921 että olemme nähneet muutaman kerran toistaiseksi. 250 00:12:16,921 --> 00:12:19,970 Ja nyt käyttää tätä on tilaisuus nyt ottaa käyttöön uuden ohjelmakauden 251 00:12:19,970 --> 00:12:23,776 tekniikka että teimme katso algoritmisesti 252 00:12:23,776 --> 00:12:25,400 viime viikolla, kun me katsoimme yhdistämisen lajitella. 253 00:12:25,400 --> 00:12:28,270 Mutta katsotaanpa virallistaa se ja miten voisimme käyttää sitä itse koodi, 254 00:12:28,270 --> 00:12:30,350 ja sitten me aiomme käyttää tätä tekniikka tiellä eniten 255 00:12:30,350 --> 00:12:32,000 todennäköisesti ratkaisemaan tiettyjä muita ongelmia. 256 00:12:32,000 --> 00:12:35,790 >> Joten tämä oli yksi ensimmäisistä ohjelmat me koskaan kirjoitti, vaikkakin pseudokoodilla koodi. 257 00:12:35,790 --> 00:12:37,790 Ja mitä tämä ohjelma pystyimme tekemään kurssi 258 00:12:37,790 --> 00:12:41,510 oli löytää Mike Smith puhelinluettelosta. 259 00:12:41,510 --> 00:12:46,216 Ja huomaa erityisesti linjat kahdeksan ja 11, jotka oli tämän siirry julkilausuman. 260 00:12:46,216 --> 00:12:48,090 Ja itse asiassa, tietyissä kielet, C joukossa, 261 00:12:48,090 --> 00:12:50,006 itse tehdä on ilmoitus, että on kirjaimellisesti 262 00:12:50,006 --> 00:12:52,710 Siirry jonka avulla voit hypätä tietylle riville. 263 00:12:52,710 --> 00:12:55,470 On yleisesti paheksuttavaa, koska se voidaan helposti käyttää väärin 264 00:12:55,470 --> 00:12:58,490 ja voit aloittaa hyppääminen teidän Ohjelman koko paikka vastakohtana 265 00:12:58,490 --> 00:13:00,690 käyttämään sellaista logiikka ja ohjausvuo 266 00:13:00,690 --> 00:13:04,000 että olemme käyttäneet tähän mennessä vain silmukat ja olosuhteet ja vastaavat. 267 00:13:04,000 --> 00:13:08,660 >> Mutta voimme yksinkertaistaa tämä algoritmi pseudokoodilla koodi seuraavasti. 268 00:13:08,660 --> 00:13:11,250 Sen sijaan tämän iteratiivisen tai looping lähestymistapa 269 00:13:11,250 --> 00:13:14,160 jossa pidämme menossa takaisin ja takaisin ja takaisin linja kolme, 270 00:13:14,160 --> 00:13:18,300 miksi emme juuri sellainen punt ja lisää yleensä sanoa linjassa seitsemän ja 10, 271 00:13:18,300 --> 00:13:20,570 vain korvata nämä kaksi paria linjat, 272 00:13:20,570 --> 00:13:22,810 if Smith on aikaisempi kirjan me will 273 00:13:22,810 --> 00:13:25,110 etsi Mike vasen puoli kirjan. 274 00:13:25,110 --> 00:13:28,560 If Smith on myöhemmin kirja, etsiä Mike oikeaan 275 00:13:28,560 --> 00:13:29,540 puolet kirja. 276 00:13:29,540 --> 00:13:31,180 Ja huomaa jo kiertomuuttoa. 277 00:13:31,180 --> 00:13:31,680 Oikea? 278 00:13:31,680 --> 00:13:34,250 Etsin Mike puhelinluettelosta ja sitten 279 00:13:34,250 --> 00:13:37,090 Olen lopulta osuma ehkä line seitsemän tai ehkä linja 10 280 00:13:37,090 --> 00:13:41,089 ja minun opetus itselleni on haku Mike puolessa puhelinluettelosta. 281 00:13:41,089 --> 00:13:42,380 No, miten voin etsiä Mike? 282 00:13:42,380 --> 00:13:44,213 Olen keskellä etsivät Mike, miksi 283 00:13:44,213 --> 00:13:45,860 sinä tavallaan lähettää minulle ympyrän? 284 00:13:45,860 --> 00:13:49,590 Mutta se on OK, koska mitä on tapahtuu koko ongelman, 285 00:13:49,590 --> 00:13:52,630 kuten kirjoitettu rivillä 7 ja 10? 286 00:13:52,630 --> 00:13:54,989 Emme vain sano haku Mike, etsi Mike. 287 00:13:54,989 --> 00:13:56,280 Me nimenomaan sanoa mitä? 288 00:13:56,280 --> 00:13:58,694 289 00:13:58,694 --> 00:14:01,610 Etsi hänet vasemmalla puolella oikea puoli, joka on tehokkaasti 290 00:14:01,610 --> 00:14:03,440 puolet koko ongelman. 291 00:14:03,440 --> 00:14:07,170 Niin se on OK, että olemme tavallaan harjoittaa tämän kierron 292 00:14:07,170 --> 00:14:09,180 tämä kehäpäätelmä, koska ainakin olemme 293 00:14:09,180 --> 00:14:11,090 jolloin ongelma pienempiä. 294 00:14:11,090 --> 00:14:14,220 Ja lopulta me aiomme päästä että ns pohja tapauksessa 295 00:14:14,220 --> 00:14:16,780 meillä on vain yksi sivu left-- meidän vapaaehtoinen viime viikolla 296 00:14:16,780 --> 00:14:18,684 did-- meillä oli yksi sivu vasemmalle ja sitten emme 297 00:14:18,684 --> 00:14:21,600 on pidettävä etsivät Mike Smith koska hän on joko sivun 298 00:14:21,600 --> 00:14:23,080 tai hän ei ole. 299 00:14:23,080 --> 00:14:27,480 >> Joten kuinka voimme toteuttaa tätä ajatusta, tämä eräänlainen kehämäisyys todellisessa koodi? 300 00:14:27,480 --> 00:14:31,030 No, voimme hyödyntää tekniikkaa joka on yleisesti kutsutaan rekursio. 301 00:14:31,030 --> 00:14:33,960 Ja olemme nähneet tämän pseudokoodi yhdistäminen lajitella viime viikolla. 302 00:14:33,960 --> 00:14:37,190 Muista, että tämä oli pseudokoodi yhdistäminen lajitella. 303 00:14:37,190 --> 00:14:40,560 Se on todennäköisesti jopa helpompaa kuin kupla tai valinta tai lisäyslajittelun 304 00:14:40,560 --> 00:14:43,310 pelkästään ehtojen yksinkertaisuuden jolla voit ilmaista se. 305 00:14:43,310 --> 00:14:46,750 >> Mutta se johtuu olemme tavallaan circularly 306 00:14:46,750 --> 00:14:51,350 sanomalla, etsi jotain etsimällä se uudelleen. 307 00:14:51,350 --> 00:14:53,960 Mutta me hakuja joko vasen puoli tai oikea puoli 308 00:14:53,960 --> 00:14:56,070 ja sitten lopulta olemme sulautuvat tässä tapauksessa. 309 00:14:56,070 --> 00:14:58,520 Mutta täällä, liian kanssa nämä kaksi lajitella riviä, 310 00:14:58,520 --> 00:15:01,320 ei meillä on jälleen tämä Ajatus rekursio. 311 00:15:01,320 --> 00:15:05,350 Ja konkreettisesti, mitä tämä tarkoittaa, yhteydessä algoritmi, 312 00:15:05,350 --> 00:15:10,880 on, että algoritmi on rekursiivinen jos se käyttää tai kutsuu itseään. 313 00:15:10,880 --> 00:15:14,330 >> Tai kannalta C, toiminto on recursive-- toiminto nimeltään 314 00:15:14,330 --> 00:15:18,510 foo on rekursiivinen jos foo, jossain sen lähdekoodi, 315 00:15:18,510 --> 00:15:21,250 kehottaa toiminto foo itse. 316 00:15:21,250 --> 00:15:25,790 Ja se on paha, jos kaikki foo koskaan ei on kutsua itseään uudelleen ja uudelleen. 317 00:15:25,790 --> 00:15:30,600 Se on OK, jos foo lopulta pysähtyy, samoin yhdistää lajitella, sanomalla, odota minuutti, 318 00:15:30,600 --> 00:15:32,980 jos tämä ongelma on super pieni, esimerkiksi, 319 00:15:32,980 --> 00:15:35,840 tai löysin minä, jota minä olen etsivät, vain palata. 320 00:15:35,840 --> 00:15:41,000 Älä rekursiivisesti, älä syklisesti itseäni uudelleen. 321 00:15:41,000 --> 00:15:44,200 >> Ja niin katsotaanpa katsomaan miten tämä voisi todella toimivat. 322 00:15:44,200 --> 00:15:48,430 Joten aion mennä eteenpäin ja avoin kaksi koodiesimerkkejä täällä. 323 00:15:48,430 --> 00:15:50,321 Joista yksi on nimeltään Sigma 0. 324 00:15:50,321 --> 00:15:52,320 Ja tämä ei ole ollenkaan rekursiivinen, mutta sallikaa 325 00:15:52,320 --> 00:15:53,694 katsokaa mitä tämä ohjelma tekee. 326 00:15:53,694 --> 00:15:55,737 Olen riisuttu pois kaikki huomautuksia siitä, mutta kaikki 327 00:15:55,737 --> 00:15:58,070 lähteen koodi CS50: n sivusto on kommentteja, jos olet 328 00:15:58,070 --> 00:15:59,570 halua lukea läpi uudelleen myöhemmin. 329 00:15:59,570 --> 00:16:02,010 Ja tehkäämme pari mielenterveyden tarkistaa täältä. 330 00:16:02,010 --> 00:16:06,640 >> Joten yläreunassa tämän koodin, meillä ovat CS50.h. 331 00:16:06,640 --> 00:16:07,650 Mitä tämä tekee? 332 00:16:07,650 --> 00:16:08,990 Miksi se on täällä? 333 00:16:08,990 --> 00:16:11,740 Kohtuullisessa Maallikon termein. 334 00:16:11,740 --> 00:16:12,424 Mitä se tekee? 335 00:16:12,424 --> 00:16:12,858 Joo. 336 00:16:12,858 --> 00:16:14,160 >> Yleisö: Jotta GetInt toiminto toimii. 337 00:16:14,160 --> 00:16:16,243 >> DAVID J. MALAN: Jotta GetInt toiminto toimii. 338 00:16:16,243 --> 00:16:18,115 Koska sisällä tämän tiedosto, CS50.h, joka 339 00:16:18,115 --> 00:16:20,950 näemme ennen pitkää ehdot sen lähdekoodi, 340 00:16:20,950 --> 00:16:23,270 on joukko toimintoja declared-- GetInt, GetString, 341 00:16:23,270 --> 00:16:26,950 ja joukko others-- ja ellei meillä on todellakin että Sisällytä linja, 342 00:16:26,950 --> 00:16:29,320 kääntäjä kalahtaa ei ole menossa tietää, että se on olemassa. 343 00:16:29,320 --> 00:16:32,400 Ja sama pätee linja kaksi jossa int määritellään 344 00:16:32,400 --> 00:16:35,101 printf, joka on funktio pidämme käyttäen melko vähän. 345 00:16:35,101 --> 00:16:37,850 Nyt linja neljä tuntuu hieman outoja koska se on vain yksi linjaliikennettä. 346 00:16:37,850 --> 00:16:41,570 Se sai puolipiste, ei kihara henkselit, ei koodia sen sisälle. 347 00:16:41,570 --> 00:16:44,640 Mutta mitä me kutsumme tämä asia viikkoa aikaisemmin? 348 00:16:44,640 --> 00:16:45,140 Joo. 349 00:16:45,140 --> 00:16:46,060 Niin prototyyppi. 350 00:16:46,060 --> 00:16:48,390 Ja miksi meillä prototyyppi joka näyttää 351 00:16:48,390 --> 00:16:51,050 olla hieman tarpeeton tyypillisesti koska me yleensä 352 00:16:51,050 --> 00:16:53,474 katso toiminto uudelleen myöhemmin tiedoston, eikö? 353 00:16:53,474 --> 00:16:56,390 Joten miksi me have-- olet vain naarmuuntumisen pään mutta otan sen. 354 00:16:56,390 --> 00:16:57,302 Joo. 355 00:16:57,302 --> 00:17:00,000 >> Yleisö: [äänetön] toiminto jälkeen tärkein. 356 00:17:00,000 --> 00:17:01,000 DAVID J. MALAN: Aivan. 357 00:17:01,000 --> 00:17:04,089 Niin että kääntäjä tuntee teidät lopulta määrittää tai toteuttaa 358 00:17:04,089 --> 00:17:06,579 että toiminto jälkeen tärkein, oletettavasti. 359 00:17:06,579 --> 00:17:08,462 Niin Clang ja kaikkein kääntäjät ovat eräänlainen tyhmiä 360 00:17:08,462 --> 00:17:10,510 ja he vain tietää mitä kerrot heille. 361 00:17:10,510 --> 00:17:12,569 Ja jos haluat käyttää toiminto nimeltään sigma, 362 00:17:12,569 --> 00:17:15,710 sinun on parasta opettaa kääntäjä että se on olemassa etukäteen. 363 00:17:15,710 --> 00:17:17,970 >> Nyt tärkein itse, jopa vaikka se on joukko viivoja, 364 00:17:17,970 --> 00:17:19,839 on melko tuttu toivottavasti nyt. 365 00:17:19,839 --> 00:17:21,942 Se sai tehdä, kun silmukka jonka tarkoitus elämässä 366 00:17:21,942 --> 00:17:24,400 tässä ilmeisesti on saada positiivinen kokonaisluku käyttäjältä. 367 00:17:24,400 --> 00:17:27,349 Ja vain pitää kiusanneet häntä tai hänen kunnes ne tekevät yhteistyötä. 368 00:17:27,349 --> 00:17:30,670 Sitten linja 16 Minulla mielenkiintoinen puhelu. 369 00:17:30,670 --> 00:17:31,570 IntAnswer. 370 00:17:31,570 --> 00:17:33,710 Joka vasemmalla puoli antaa minulle Int 371 00:17:33,710 --> 00:17:36,650 joka voi store-- kutsutaan Answer-- joka tulee tallentaa, ilmeisesti 372 00:17:36,650 --> 00:17:39,090 palauttaa arvon sigma. 373 00:17:39,090 --> 00:17:41,840 Joten sigma on vain mielivaltainen mutta kuvaava nimi 374 00:17:41,840 --> 00:17:44,500 että olen antanut toiminto jonka tarkoitus elämässä 375 00:17:44,500 --> 00:17:47,680 on otettava yksi argument-- me kutsumme sitä N tässä case-- 376 00:17:47,680 --> 00:17:52,280 ja vain ottaa summa, että määrä plus jokainen positiivinen luku, joka on 377 00:17:52,280 --> 00:17:53,200 pienempi kuin se. 378 00:17:53,200 --> 00:17:58,140 >> Jos siis kulkea numero 2 sigma, haluan lisätä 2 plus 1 379 00:17:58,140 --> 00:18:00,240 plus 0-- ei 0-- niin että antaa minulle 3. 380 00:18:00,240 --> 00:18:05,320 Jos välitän 3 Sigma, haluan on 3 plus 2 plus 1, joka antaa minulle 6. 381 00:18:05,320 --> 00:18:05,900 Ja niin edelleen. 382 00:18:05,900 --> 00:18:09,750 Niin se vain lisää jopa kaikki numerot vähemmän kuin tai yhtä suuri kuin se. 383 00:18:09,750 --> 00:18:12,040 >> Nyt, täällä olen juuri menossa tulostaa vastaus. 384 00:18:12,040 --> 00:18:17,330 Niin nopeasti järki tarkistaa, katsotaanpa tehdä sigma 0-- piste slash sigma 0-- 385 00:18:17,330 --> 00:18:18,690 ja haluan kirjoittaa 2. 386 00:18:18,690 --> 00:18:19,960 Ja minä todellakin saada 3. 387 00:18:19,960 --> 00:18:21,240 Saanen tyypin 3. 388 00:18:21,240 --> 00:18:22,860 Olen todellakin saat 6. 389 00:18:22,860 --> 00:18:27,636 Ja jos joku voi tehdä matematiikka nopeasti, jos teen 50 mitä olen menossa saada? 390 00:18:27,636 --> 00:18:29,839 >> Yleisö: [äänetön]. 391 00:18:29,839 --> 00:18:30,880 DAVID J. MALAN: No, ei. 392 00:18:30,880 --> 00:18:33,340 Mutta 1275 joka on melko lähellä. 393 00:18:33,340 --> 00:18:38,850 Joten tämä on tulos tehdä 50 plus 49 plus 48 plus 47 plus 46 394 00:18:38,850 --> 00:18:40,349 kaikki alas 1. 395 00:18:40,349 --> 00:18:41,390 Niin, että kaikki Sigma tekee. 396 00:18:41,390 --> 00:18:43,350 Mutta katsotaanpa kuinka olemme toteutetaan se nyt. 397 00:18:43,350 --> 00:18:45,790 Joten täällä on toiminto itse. 398 00:18:45,790 --> 00:18:49,000 Ja tämä ei näytä olevan mitään tekemistä rekursion vielä. 399 00:18:49,000 --> 00:18:51,070 Itse asiassa käytämme vanhan koulun tekniikka. 400 00:18:51,070 --> 00:18:56,680 Olen alustetaan muuttuja nimeltä summa nollaan, niin minulla on foreloop täällä, 401 00:18:56,680 --> 00:19:00,790 ja olen julistamisesta Int nimeltään I, jossa se vastaa 1-- 402 00:19:00,790 --> 00:19:04,080 vaikka voisin asettaa sen yhtä nolla, mutta koska olen tekemässä Lisäksi 403 00:19:04,080 --> 00:19:05,340 Ketä kiinnostaa, jos se on nolla tai yksi. 404 00:19:05,340 --> 00:19:06,660 Se tulee ole vaikutusta. 405 00:19:06,660 --> 00:19:10,110 >> Joten olen iteroimalla niin kauan kuin minä on vähemmän kuin tai yhtä suuri kuin m, mikä 406 00:19:10,110 --> 00:19:11,671 on väite, että hyväksyttiin. 407 00:19:11,671 --> 00:19:13,670 Ja sitten vain pitää lisäävä I ja oivalluksia 408 00:19:13,670 --> 00:19:20,010 silmukan kaikkien Mulla tekee summa plus vastaa I. Ja se on tahallista. 409 00:19:20,010 --> 00:19:22,326 En halua tehdä, tässä tapauksessa, kuten summa plus plus. 410 00:19:22,326 --> 00:19:24,790 Haluan todella lisätä nykyinen arvo, 411 00:19:24,790 --> 00:19:28,190 joka pitää saada isompi ja isompi ja isompi käynnissä vastaavuuden. 412 00:19:28,190 --> 00:19:30,210 >> Ja sitten palaan summa. 413 00:19:30,210 --> 00:19:33,850 Ja niin vastaus saa arvon summa. 414 00:19:33,850 --> 00:19:35,282 Ja sitten tulostaa sen. 415 00:19:35,282 --> 00:19:37,740 Joten ei tilaisuus täällä, kuitenkin sellaista yksinkertaistaa 416 00:19:37,740 --> 00:19:41,260 tämä koodi käsitteellisesti ja sellainen isku oman 417 00:19:41,260 --> 00:19:43,250 mielessä kannalta yksinkertaisuus vaikka se 418 00:19:43,250 --> 00:19:45,700 vie aikaa lajitella on ymmärtää, miksi tämä 419 00:19:45,700 --> 00:19:47,330 on voimakas nämä pienet esimerkeissä. 420 00:19:47,330 --> 00:19:50,380 Tässä on sigma one-- niin toinen versio tämän koodin. 421 00:19:50,380 --> 00:19:55,290 Kaikki ylös on sama niin että sama juttu pätee kuin ennen. 422 00:19:55,290 --> 00:19:59,220 Mutta nyt katsokaamme täytäntöönpano sigma joka 423 00:19:59,220 --> 00:20:05,040 Olen supistettu vain nämä lines-- neljä riviä koodia, todella, 424 00:20:05,040 --> 00:20:06,980 plus joitakin kihara henkselit ja valkoinen tila. 425 00:20:06,980 --> 00:20:07,930 >> Mutta mitä teen? 426 00:20:07,930 --> 00:20:11,050 Jos m on pienempi kuin tai yhtä suuri kuin nolla, minun täytyy sellainen käsitellä 427 00:20:11,050 --> 00:20:12,490 että Super yksinkertainen asia. 428 00:20:12,490 --> 00:20:15,450 Ja jos käsi minulle nolla tai mitään negatiivinen joka on vain outo, 429 00:20:15,450 --> 00:20:17,909 Olen juuri menossa mielivaltaisesti mutta johdonmukaisesti palaa nolla. 430 00:20:17,909 --> 00:20:20,200 En halua tätä asia päästä outoja ääretön 431 00:20:20,200 --> 00:20:21,810 silmukka koska negatiivinen arvo. 432 00:20:21,810 --> 00:20:25,070 Joten Sanon vain, jos annat minulle nolla tai vähemmän, olen palaamassa nolla. 433 00:20:25,070 --> 00:20:28,220 >> Mutta se on hyvä, koska se on että yhden sivun puhelinluettelosta 434 00:20:28,220 --> 00:20:28,790 on jäljellä. 435 00:20:28,790 --> 00:20:32,660 Olen puree pois hyvin erityinen ongelma ja emme vaadi jotain rekursiivisesti. 436 00:20:32,660 --> 00:20:36,580 Mutta linjassa 31, mitä voin näyttää tekevän? 437 00:20:36,580 --> 00:20:39,780 Suluissa ovat vain pitämällä asioita, toivottavasti, hieman selkeämpi. 438 00:20:39,780 --> 00:20:42,110 Mutta kaikki Mulla on minä olen palaavat m-- riippumatta 439 00:20:42,110 --> 00:20:45,790 annat me-- plus arvo m-- pahoillani, 440 00:20:45,790 --> 00:20:49,052 plus arvo sigma m miinus 1. 441 00:20:49,052 --> 00:20:50,010 Mitä tämä tarkoittaa? 442 00:20:50,010 --> 00:20:53,965 Jos annat minulle numero 3 syötteenä vastaus Haluan saada lopulta 443 00:20:53,965 --> 00:20:57,307 on 6, koska 3 plus 2 plus 1 antaa minulle 6. 444 00:20:57,307 --> 00:20:59,390 Mutta miten voin ajatella miten tämä koodi on käynnissä? 445 00:20:59,390 --> 00:21:03,070 Ensimmäistä kertaa kutsun sigma ja välitän arvon 3, 446 00:21:03,070 --> 00:21:07,960 Se on kuin sanoisi pala paperin, tässä on arvo 3 447 00:21:07,960 --> 00:21:09,920 ja olen kulkenut tätä sigma. 448 00:21:09,920 --> 00:21:13,090 3 ei tietenkään ole pienempi kuin 0 niin Jos ehto ei koske. 449 00:21:13,090 --> 00:21:14,020 Muu ei. 450 00:21:14,020 --> 00:21:14,990 Joten mitä teen? 451 00:21:14,990 --> 00:21:19,902 Haluan palata m, joka on 3, sekä sigma m miinus 1. 452 00:21:19,902 --> 00:21:21,110 Joten haluan seurata tätä. 453 00:21:21,110 --> 00:21:22,710 Aion laittaa tämän paperille alas. 454 00:21:22,710 --> 00:21:24,668 Ja mitä arvo, on kirkas, olen menossa ohi 455 00:21:24,668 --> 00:21:26,540 osaksi sigma tässä vaiheessa tarina? 456 00:21:26,540 --> 00:21:28,080 Mikä numero? 457 00:21:28,080 --> 00:21:28,610 2, eikö? 458 00:21:28,610 --> 00:21:29,670 3 miinus 1 on 2. 459 00:21:29,670 --> 00:21:32,000 Joten Tarvitsen vain vähän romu paperi tähän. 460 00:21:32,000 --> 00:21:33,931 Joten nyt sigma on tulossa kutsutaan uudelleen. 461 00:21:33,931 --> 00:21:35,930 Ja olen tietoisesti tämä alas, koska se on 462 00:21:35,930 --> 00:21:38,070 ikään kuin keskeyttämällä että versio tarinasta 463 00:21:38,070 --> 00:21:40,720 koska nyt olen keskittynyt signaalin m miinus 1. 464 00:21:40,720 --> 00:21:42,660 Joten m oli 3, m miinus 1 on 2. 465 00:21:42,660 --> 00:21:45,110 Joten tässä on 2 että olen kulkenut. 466 00:21:45,110 --> 00:21:48,510 2 ei tietenkään vähintään 0 jotta asia ei koske. 467 00:21:48,510 --> 00:21:53,445 Else palaan m, mikä on tämän asia, plus Sigma mitä arvo? 468 00:21:53,445 --> 00:21:56,160 469 00:21:56,160 --> 00:21:59,650 Joten jos sigma on 1-- koska m on nyt 2 niin 2 miinus 1 on 1. 470 00:21:59,650 --> 00:22:01,950 Joten nyt minulla on vain arvo 1. 471 00:22:01,950 --> 00:22:04,810 Olen ohimennen vain numero 1 toiminto sigma-- 472 00:22:04,810 --> 00:22:09,120 tai itse here-- joten 1 ei tietenkään ole pienempi kuin nolla, ei vieläkään sovelleta. 473 00:22:09,120 --> 00:22:12,970 >> Else paluu 1 plus sigma mitä? 474 00:22:12,970 --> 00:22:13,470 0. 475 00:22:13,470 --> 00:22:14,678 Joten haluan vain muistaa, että. 476 00:22:14,678 --> 00:22:15,920 Palaan tähän myöhemmin. 477 00:22:15,920 --> 00:22:18,060 Nyt aion mennä eteenpäin ja JOT alas numero 0, koska se on 478 00:22:18,060 --> 00:22:19,470 minun argumentti tai parametrin. 479 00:22:19,470 --> 00:22:22,400 Olen läpäissyt numero 0 ja lopulta tämä prosessi 480 00:22:22,400 --> 00:22:25,760 vain toistan itseäni ilmoitus nauseum ei lakkaa sillä mitä 481 00:22:25,760 --> 00:22:28,820 voin heti tehdä, kun näen tämän 0? 482 00:22:28,820 --> 00:22:29,790 Palaan nolla. 483 00:22:29,790 --> 00:22:31,790 Joten nyt sinun täytyy kelata tarina. 484 00:22:31,790 --> 00:22:34,430 >> Jos minä nyt mennä ajassa taaksepäin, mikä oli viimeisin asia 485 00:22:34,430 --> 00:22:36,670 Tein jos olisit kirjaimellisesti kelaus video? 486 00:22:36,670 --> 00:22:41,630 Aion poimia viimeisimmän 1 ja joka antaa minulle 1 plus 0 on 1. 487 00:22:41,630 --> 00:22:44,100 Jos pidän kelaus tarina, joka on menossa antaa minulle 488 00:22:44,100 --> 00:22:46,880 2 plus tämä käynnissä arvo, joka on 1. 489 00:22:46,880 --> 00:22:47,789 Niin, että 3. 490 00:22:47,789 --> 00:22:49,330 Ja sitten aion pitää uudelleenkelaus. 491 00:22:49,330 --> 00:22:54,220 Kun ensimmäisen kerran laittaa alas numero 3-- joten 3 + 3 antaa minulle 6. 492 00:22:54,220 --> 00:22:57,272 >> Ja nyt, jos olet uudelleenkelattua video tähän saakka, 493 00:22:57,272 --> 00:22:58,980 tämä oli hyvin Ensimmäinen kysymys kysyin. 494 00:22:58,980 --> 00:23:01,450 Kun kulunut 3, mikä on sigma 3? 495 00:23:01,450 --> 00:23:04,204 Se on itse asiassa 6, summa kaikki nämä paperille. 496 00:23:04,204 --> 00:23:07,120 Joten jos joka vie vähän aikaa kääri mieltäsi ympärille, se käy hyvin. 497 00:23:07,120 --> 00:23:10,700 Mutta pitävät sitä oli little-- se oli hyvin tahallinen että olen pinottu 498 00:23:10,700 --> 00:23:12,990 nämä numerot päällekkäin. 499 00:23:12,990 --> 00:23:17,440 Se on tavallaan kuin ottaa memory-- ennätys aikaa, 500 00:23:17,440 --> 00:23:19,940 kuten pesuri on video, että voin todellakin kelata sisään. 501 00:23:19,940 --> 00:23:24,350 Ja aiomme palata että metafora vain vähän. 502 00:23:24,350 --> 00:23:28,240 >> Mutta ensin, käy ilmi, että on olemassa paljon geeks ja hauskoja ihmisiä, 503 00:23:28,240 --> 00:23:29,614 Oletan, Google. 504 00:23:29,614 --> 00:23:31,530 Olisiko joku on hyvin hyvä Googling mieli 505 00:23:31,530 --> 00:23:34,270 tulossa vain hetken ja auttaa minua etsiä jotain? 506 00:23:34,270 --> 00:23:35,650 Hyvin, hyvin pieni avain. 507 00:23:35,650 --> 00:23:37,870 Joku, joka ei ole koskaan keksiä ennen, ehkä. 508 00:23:37,870 --> 00:23:38,370 OK. 509 00:23:38,370 --> 00:23:39,030 Joo? 510 00:23:39,030 --> 00:23:39,530 Tule. 511 00:23:39,530 --> 00:23:41,410 Tule alas. 512 00:23:41,410 --> 00:23:42,183 Mikä on nimesi? 513 00:23:42,183 --> 00:23:42,870 >> SAM: Sam. 514 00:23:42,870 --> 00:23:44,290 >> DAVID J. MALAN: Sam, tule alas. 515 00:23:44,290 --> 00:23:45,320 Tämä on sama. 516 00:23:45,320 --> 00:23:46,280 Kiva tavata. 517 00:23:46,280 --> 00:23:46,780 Hei. 518 00:23:46,780 --> 00:23:47,580 Tule tänne. 519 00:23:47,580 --> 00:23:51,290 Joten kaikki mitä tarvitsemme sinua tekemään, jos voisit, Sam, tässä on Google. 520 00:23:51,290 --> 00:23:53,240 Voitteko etsiä termin rekursio? 521 00:23:53,240 --> 00:23:55,770 522 00:23:55,770 --> 00:23:56,270 Älä pilaa. 523 00:23:56,270 --> 00:23:59,940 524 00:23:59,940 --> 00:24:00,970 >> Ja nyt let's-- joo. 525 00:24:00,970 --> 00:24:03,380 OK Valitse että. 526 00:24:03,380 --> 00:24:04,315 Parempi klikkaa sitä. 527 00:24:04,315 --> 00:24:07,020 528 00:24:07,020 --> 00:24:08,020 Ahh, saat sen. 529 00:24:08,020 --> 00:24:08,520 Ei? 530 00:24:08,520 --> 00:24:09,050 OK. 531 00:24:09,050 --> 00:24:10,430 Joten tehdä pari toiset. 532 00:24:10,430 --> 00:24:12,830 Ei niin paljon liittyvä akateemisesti täällä, mutta oletko 533 00:24:12,830 --> 00:24:14,520 koskaan etsinyt Googlen anagram? 534 00:24:14,520 --> 00:24:15,280 >> SAM: Ei. 535 00:24:15,280 --> 00:24:15,520 >> DAVID J. MALAN: OK. 536 00:24:15,520 --> 00:24:17,186 Etsi anagram sijasta rekursion. 537 00:24:17,186 --> 00:24:22,540 538 00:24:22,540 --> 00:24:23,790 Entä vinossa. 539 00:24:23,790 --> 00:24:25,515 Oletko etsinyt vinossa? 540 00:24:25,515 --> 00:24:29,260 541 00:24:29,260 --> 00:24:32,692 Nyt, tämä on hieman vaikea nähdä, mutta toivottavasti everything's-- OK. 542 00:24:32,692 --> 00:24:34,150 Se on vain sinä ja minä nauttia tästä. 543 00:24:34,150 --> 00:24:34,690 OK. 544 00:24:34,690 --> 00:24:38,950 >> Joten lopuksi, tämä one's-- se on vähän vinossa. 545 00:24:38,950 --> 00:24:40,810 Nyt tehdä tynnyri roll. 546 00:24:40,810 --> 00:24:44,460 547 00:24:44,460 --> 00:24:45,310 Ihana. 548 00:24:45,310 --> 00:24:45,910 Selvä. 549 00:24:45,910 --> 00:24:47,110 Suuri kiitos Sam. 550 00:24:47,110 --> 00:24:49,416 Ole hyvä. 551 00:24:49,416 --> 00:24:50,400 Kiitos. 552 00:24:50,400 --> 00:24:52,807 >> Joten mitä tapahtuu kaikissa Näiden typerä esimerkkejä? 553 00:24:52,807 --> 00:24:55,640 Siis todella, alla huppu Googlen miljoonia rivejä koodia 554 00:24:55,640 --> 00:24:58,860 ilmeisesti on muutama typerä IF ehdot, jotka ovat olennaisesti 555 00:24:58,860 --> 00:25:01,160 tarkistaa, jos käyttäjä on kirjoitettu tämän lauseen, 556 00:25:01,160 --> 00:25:03,760 tehdä jotain, joka luultavasti otti triviaali aikaa 557 00:25:03,760 --> 00:25:06,080 toteuttaa vain olla huvittavaa tällä tavalla. 558 00:25:06,080 --> 00:25:08,430 Mutta siinä kaikki se kiehuu alas alla huppu. 559 00:25:08,430 --> 00:25:11,570 Mutta tietenkin, rekursio on enemmän geekier 560 00:25:11,570 --> 00:25:13,880 Esimerkiksi joukossa erikoistemppuja. 561 00:25:13,880 --> 00:25:16,880 Ja varmasti siellä muut siellä myös, että meillä ehkä ole edes 562 00:25:16,880 --> 00:25:18,230 löydetty vielä. 563 00:25:18,230 --> 00:25:22,830 >> Joten katsomaan, tai harkita nyt seuraava ohjelma, 564 00:25:22,830 --> 00:25:24,830 ja varmasti napata kaikki Näiden matkalla ulos. 565 00:25:24,830 --> 00:25:28,820 Aion mennä eteenpäin ja avata ohjelma, joka on 566 00:25:28,820 --> 00:25:30,920 yrittävät vaihtaa kahden arvon. 567 00:25:30,920 --> 00:25:33,210 Mutta ennen kuin menemme sinne, tehdään tämä. 568 00:25:33,210 --> 00:25:38,500 Voisimmeko saada yhden vapaaehtoinen, luulen? 569 00:25:38,500 --> 00:25:40,480 Haluatko tehdä vapaaehtoistyötä? 570 00:25:40,480 --> 00:25:40,980 Ei? 571 00:25:40,980 --> 00:25:41,890 Tule ylös. 572 00:25:41,890 --> 00:25:42,390 Tule ylös. 573 00:25:42,390 --> 00:25:42,890 Selvä. 574 00:25:42,890 --> 00:25:44,136 Joten nimi on mitä? 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 Tule ylös, Lauren. 578 00:25:46,890 --> 00:25:50,140 Joten Lauren ollaan haastoi täällä seuraavasti. 579 00:25:50,140 --> 00:25:52,310 Kiva tavata. 580 00:25:52,310 --> 00:25:55,730 Joten Lauren tässä on edessä hänen kaksi tyhjää kuppia. 581 00:25:55,730 --> 00:25:57,570 Ja meillä on joitakin oranssi mehua ja maitoa 582 00:25:57,570 --> 00:26:00,301 ja aiomme mennä eteenpäin ja toimi seuraavasti. 583 00:26:00,301 --> 00:26:01,550 Olemme juuri menossa täyttämään tämän. 584 00:26:01,550 --> 00:26:07,840 Muutama unssia maitoa tänne ja lähdetään Täytä hieman appelsiinimehua tänne. 585 00:26:07,840 --> 00:26:11,475 >> Ja edessä kaikki Näiden yleisön jäsenet, 586 00:26:11,475 --> 00:26:13,550 vaihtaa kaksi arvoa näiden kupit. 587 00:26:13,550 --> 00:26:16,970 Laita appelsiinimehu maitoon kuppi ja maidon appelsiinimehua kuppi. 588 00:26:16,970 --> 00:26:22,380 589 00:26:22,380 --> 00:26:26,150 Miten teet tämän, jos olit kotiin ja oli pääsy muita tarvikkeita? 590 00:26:26,150 --> 00:26:27,400 LAUREN: Laita se toisen kupin. 591 00:26:27,400 --> 00:26:28,191 DAVID J. MALAN: OK. 592 00:26:28,191 --> 00:26:31,940 Joten on väliaikainen muuttuja, jos me. 593 00:26:31,940 --> 00:26:35,871 Ja mennä eteenpäin nyt ja toteuttaa tämä sama vaihtamalla menettelyä. 594 00:26:35,871 --> 00:26:36,370 Niin hyvä. 595 00:26:36,370 --> 00:26:41,490 Laitoimme EYVL tilapäiseen muuttuja, maitoa EYVL muuttuja, 596 00:26:41,490 --> 00:26:44,481 ja nyt väliaikainen muuttuja maitoon muuttuja. 597 00:26:44,481 --> 00:26:44,980 OK. 598 00:26:44,980 --> 00:26:48,740 Joten hyvin tehty toistaiseksi. 599 00:26:48,740 --> 00:26:50,990 Joten se kääntyy out-- katsonut, että Vaikka vain hetken. 600 00:26:50,990 --> 00:26:54,479 Täällä vain pelle sitä hieman, tämä olisi vastaava C-koodia 601 00:26:54,479 --> 00:26:55,520 että me vain täytäntöön. 602 00:26:55,520 --> 00:26:58,650 Meillä oli kaksi tuloa, a ja b, sekä joka meidän täytyy vain sanoa yksinkertaisuuden ovat 603 00:26:58,650 --> 00:26:59,260 int n. 604 00:26:59,260 --> 00:27:02,780 Ja huomaa täällä, jos haluan vaihtaa arvot kaksi muuttujaa, a ja b, 605 00:27:02,780 --> 00:27:06,890 me todellakin tarvitsemme välikäsi, väliaikainen muuttuja, väliaikainen kuppi, 606 00:27:06,890 --> 00:27:10,830 johon kaada yksi arvoista niin että meillä on paikkamerkki sen. 607 00:27:10,830 --> 00:27:13,480 Mutta sitten koodi on täsmälleen kuten Lauren täällä täytäntöön. 608 00:27:13,480 --> 00:27:15,500 >> Nyt vain saada pikku hullumpi, osoittautuu 609 00:27:15,500 --> 00:27:20,930 että voit tehdä tämän ilman väliaikainen muuttuja. 610 00:27:20,930 --> 00:27:24,870 Voit tehdä tämän oikein, vaikka aiomme on huijata joidenkin kemia. 611 00:27:24,870 --> 00:27:26,380 Meillä on joitakin ylimääräisiä kupit täällä. 612 00:27:26,380 --> 00:27:29,600 Joten lähinnä asia, joka näyttää kuten maito ja vesi perhaps-- 613 00:27:29,600 --> 00:27:34,090 tai maitoa ja OJ-- on meillä on joitakin vesi, joten me täyttää tämä ylös 614 00:27:34,090 --> 00:27:36,486 muutaman unssia puhdasta vettä. 615 00:27:36,486 --> 00:27:38,332 Se on luultavasti liikaa. 616 00:27:38,332 --> 00:27:38,832 Joo. 617 00:27:38,832 --> 00:27:39,934 Se on ehdottomasti liikaa. 618 00:27:39,934 --> 00:27:40,600 Odota yksi sekuntia. 619 00:27:40,600 --> 00:27:43,520 620 00:27:43,520 --> 00:27:48,420 >> Ja nyt meillä on öljyä, joka, muistaakseni alkaen yläasteella kemian luokka, 621 00:27:48,420 --> 00:27:49,990 toivottavasti se ei sekoitu veteen. 622 00:27:49,990 --> 00:27:53,650 Mutta se tavallaan eräänlainen näyttää maitoa ja lehdessä. 623 00:27:53,650 --> 00:27:55,760 Joten nyt, ilman väliaikainen muuttuja, 624 00:27:55,760 --> 00:27:59,260 voit vaihtaa näitä kahta arvoa? 625 00:27:59,260 --> 00:28:03,884 Joten öljyt menee veteen cup, vesi menee öljykuppiin. 626 00:28:03,884 --> 00:28:04,800 LAUREN: Ei muita kupit? 627 00:28:04,800 --> 00:28:05,940 DAVID J. MALAN: Ei muita kupit. 628 00:28:05,940 --> 00:28:07,860 Ja en ole oikeastaan testannut tätä ennen tämän vuoden 629 00:28:07,860 --> 00:28:10,110 joten en tiedä, jos tämä todella toimivat kemiallisesti. 630 00:28:10,110 --> 00:28:16,130 631 00:28:16,130 --> 00:28:18,650 Tämä ei pitänyt tapahtua. 632 00:28:18,650 --> 00:28:19,761 Toimiiko se? 633 00:28:19,761 --> 00:28:20,260 Selvä. 634 00:28:20,260 --> 00:28:20,990 Joten erottaa? 635 00:28:20,990 --> 00:28:21,490 Hyvä. 636 00:28:21,490 --> 00:28:24,714 Nyt täytyy saada vettä toiseen kuppiin. 637 00:28:24,714 --> 00:28:27,630 Fiksumpia kemia keskittimien voisi luultavasti tehdä tämän paremmin kuin minä. 638 00:28:27,630 --> 00:28:28,510 >> LAUREN: vesi on pohjassa. 639 00:28:28,510 --> 00:28:31,910 >> David J. MALAN: water--, joka oli Mikä avain viimeksi teimme tämän. 640 00:28:31,910 --> 00:28:33,950 Sinun täytyy tehdä se oikeassa järjestyksessä. 641 00:28:33,950 --> 00:28:34,450 Joo. 642 00:28:34,450 --> 00:28:35,270 Se on ok. 643 00:28:35,270 --> 00:28:37,290 Joten nyt meillä on kaksi kuppia öljyä. 644 00:28:37,290 --> 00:28:37,790 OK. 645 00:28:37,790 --> 00:28:38,510 Se on ok. 646 00:28:38,510 --> 00:28:40,110 Mutta kemiallisesti jos tämä toimi kuin I-- 647 00:28:40,110 --> 00:28:41,200 >> LAUREN: Tämä on vesi. 648 00:28:41,200 --> 00:28:41,930 >> DAVID J. MALAN: Se on enimmäkseen vettä. 649 00:28:41,930 --> 00:28:42,430 Selvä. 650 00:28:42,430 --> 00:28:44,210 Mutta se on silti sama kuppi kuin ennen. 651 00:28:44,210 --> 00:28:47,570 Joten kaada it-- kokeile sitä tuolla. 652 00:28:47,570 --> 00:28:49,300 OK. 653 00:28:49,300 --> 00:28:51,010 Tämä on hyvä käyttää luokan aikaa tänään. 654 00:28:51,010 --> 00:28:51,510 OK. 655 00:28:51,510 --> 00:28:53,890 Joten nyt we-- mukavaa. 656 00:28:53,890 --> 00:28:55,460 Tavallaan. 657 00:28:55,460 --> 00:28:55,960 Selvä. 658 00:28:55,960 --> 00:28:56,690 Niin erittäin hyvä. 659 00:28:56,690 --> 00:29:00,006 Kiitos Lauren. 660 00:29:00,006 --> 00:29:01,950 Erittäin hyvin tehty. 661 00:29:01,950 --> 00:29:04,570 >> Joten vain räjäyttää mielenne, ja tämä on ehkä jotain 662 00:29:04,570 --> 00:29:08,660 pelata jos pidät CS50 tunnus, voit itse asiassa vaihtaa kahden muuttujan 663 00:29:08,660 --> 00:29:11,470 ilman väliaikaista kokonaisluku. 664 00:29:11,470 --> 00:29:13,060 Ja tämä on vastaava C-koodia. 665 00:29:13,060 --> 00:29:16,110 Ja jos muistaa viime Keskiviikkona esittelimme, jos lyhyesti, 666 00:29:16,110 --> 00:29:19,720 joitakin uusia toimijoita C. eikä kukaan muistaa, mitä pikku porkkana 667 00:29:19,720 --> 00:29:23,660 symboli on, että pieni kolmiomainen symboli näppäimistö edustaa? 668 00:29:23,660 --> 00:29:26,003 Mikä bittioperaattori? 669 00:29:26,003 --> 00:29:26,770 >> Yleisö: EXOR. 670 00:29:26,770 --> 00:29:27,645 >> DAVID J. MALAN: EXOR. 671 00:29:27,645 --> 00:29:28,560 Exclusive Or. 672 00:29:28,560 --> 00:29:32,920 Joten jos haluat, vain hauskaa kotiin, antaa ja b kaksi mielivaltaista 673 00:29:32,920 --> 00:29:36,072 arvot kuten kaikki eight-- ja minä valitsisin kahdeksan bitin arvo. 674 00:29:36,072 --> 00:29:38,530 Jos teet tämän kanssa 32 bittiä, voit hyvin nopeasti kyllästy. 675 00:29:38,530 --> 00:29:42,150 Mutta vain antaa kahdeksan bitin arvo, joka on mitä tahansa, yksi tai kaksi, 676 00:29:42,150 --> 00:29:43,790 ja antaa b samanlainen arvo. 677 00:29:43,790 --> 00:29:46,810 Ja sitten käyttämällä määritelmän XOR viime keskiviikkona 678 00:29:46,810 --> 00:29:52,560 sovelletaan, että pala palalta, kukin nämä kahdeksan bittiä kussakin a ja b, 679 00:29:52,560 --> 00:29:54,980 ja sitten tehdä se juuri kohti tämän koodin. 680 00:29:54,980 --> 00:29:58,170 Ja se ei ole virheellinen mitä näet täällä ruudulla. 681 00:29:58,170 --> 00:30:02,100 Se todellakin kuihtuu kolme XOR toimintaa 682 00:30:02,100 --> 00:30:05,910 ja jotenkin maagisesti ja b vaihtavat kannat 683 00:30:05,910 --> 00:30:08,010 menettämättä mitään tietoja. 684 00:30:08,010 --> 00:30:11,580 >> Niin öljy ja vesi temppu on lähimpänä reaalimaailman inkarnaatio 685 00:30:11,580 --> 00:30:12,980 Voisin ajatella matkia että. 686 00:30:12,980 --> 00:30:15,950 Mutta se on varmasti helpompi käyttää väliaikainen muuttuja, 687 00:30:15,950 --> 00:30:16,920 kuten tässä tapauksessa täällä. 688 00:30:16,920 --> 00:30:21,190 Ja tämäkin on mahdollisuus sanoa, Myös tällainen mikro optimointi, 689 00:30:21,190 --> 00:30:23,590 kuten tietojenkäsittelytieteessä sanoisi, vaikka tavallaan hauskaa 690 00:30:23,590 --> 00:30:27,060 kehuskella miten teit tämän ilman kuten vaihtamalla ylimääräinen muuttuja, 691 00:30:27,060 --> 00:30:28,640 se ei ole kaikki, että pakottavia. 692 00:30:28,640 --> 00:30:31,619 Koska tallentaa 32 bittiä, kuten jos kyseessä todellinen int, 693 00:30:31,619 --> 00:30:33,410 ei ole kovin pakottavia järjestelmään, jossa 694 00:30:33,410 --> 00:30:36,722 saatat käyttää kymmeniä megatavuja tai jopa enemmän kuten muistia näinä päivinä. 695 00:30:36,722 --> 00:30:38,680 Ja itse asiassa, kun saamme myöhempään Harjoitus 696 00:30:38,680 --> 00:30:41,010 ja käytät oikeinkirjoituksen ruudullinen ja sinun 697 00:30:41,010 --> 00:30:43,550 haastetaan tekemään niin tämä niin vähän muistia ja niin vähän 698 00:30:43,550 --> 00:30:46,820 aika kuin mahdollista computer-- silti 699 00:30:46,820 --> 00:30:50,160 on viikko toteuttaa it-- sinun have-- voit olla 700 00:30:50,160 --> 00:30:51,799 haastoi minimoimiseksi näitä resursseja. 701 00:30:51,799 --> 00:30:53,840 Ja se on oikeastaan ​​ainoa tilaisuus tämä lukukausi 702 00:30:53,840 --> 00:30:57,940 jossa voit kannustettava ajella pois pienimmätkin suorituskyky 703 00:30:57,940 --> 00:30:59,340 maksaa muuten. 704 00:30:59,340 --> 00:31:02,200 >> Joten what-- kuinka voimme nähdä tämän itse koodi? 705 00:31:02,200 --> 00:31:04,530 Anna minun mennä eteenpäin nyt ja avata esimerkki 706 00:31:04,530 --> 00:31:07,700 että tarkoituksella kutsutaan Ei Swap koska se ei 707 00:31:07,700 --> 00:31:10,670 itse asiassa vaihtaa muuttujat kuten itse voisi odottaa. 708 00:31:10,670 --> 00:31:12,260 Joten katsomaan. 709 00:31:12,260 --> 00:31:17,050 Tässä ohjelma, joka ei ole CS50 kirjasto tekeillä, vain vakio I / O. 710 00:31:17,050 --> 00:31:19,560 Nyt meillä on prototyyppi swap ylös joka vain 711 00:31:19,560 --> 00:31:21,540 tarkoittaa se sai määriteltävä myöhemmin. 712 00:31:21,540 --> 00:31:22,550 Ja tässä on tärkein. 713 00:31:22,550 --> 00:31:26,000 >> En mielivaltaisesti x ja y, vastaavasti, arvot yksi ja kaksi 714 00:31:26,000 --> 00:31:28,590 vain koska he pieni ja helppo ajatella. 715 00:31:28,590 --> 00:31:32,280 Ja sitten vain on nippu printfs jossa minulla on järki tarkistaa. x on 1 716 00:31:32,280 --> 00:31:35,110 ja y on 2 on oletettavasti mitä nämä printfs sanovat. 717 00:31:35,110 --> 00:31:36,530 Joten mitään maagista toistaiseksi. 718 00:31:36,530 --> 00:31:40,100 >> Sitten aion vaatia kanssa tulostaa def, vaihtamalla piste piste piste. 719 00:31:40,100 --> 00:31:43,730 Aion soittaa swap toiminto, kulkee x ja y. 720 00:31:43,730 --> 00:31:47,350 Ja Oletetaan nyt, että swap on toteutettu täsmälleen 721 00:31:47,350 --> 00:31:49,930 koska se oli hetki sitten tilapäinen muuttuja. 722 00:31:49,930 --> 00:31:52,670 Ja niin Väitän rohkeasti, vaihtuneet. 723 00:31:52,670 --> 00:31:55,429 X on nyt tämä, ja y on nyt. 724 00:31:55,429 --> 00:31:57,220 Mutta tiedoston, tietenkin, kutsutaan Ei Vaihda. 725 00:31:57,220 --> 00:31:58,678 Joten itse nähdä mitä tapahtuu. 726 00:31:58,678 --> 00:32:04,450 Jos minä koota ei swap ja sitten do ./noswap, x on 1, y on 2. 727 00:32:04,450 --> 00:32:05,770 Vaihtaminen vaihtuneet. 728 00:32:05,770 --> 00:32:07,200 x on 1, y on 2. 729 00:32:07,200 --> 00:32:11,980 Joten se todella näyttää olevan virheellinen jopa vaikka swap-- katsotaanpa selaa now-- 730 00:32:11,980 --> 00:32:16,542 toteutetaan täsmälleen kohti koodi Ehdotin hetki sitten. 731 00:32:16,542 --> 00:32:19,000 Joten emme aio saada fancy kanssa XOR juttuja nyt. 732 00:32:19,000 --> 00:32:21,890 Tämäkin pitäisi toimia vain kuten maidon ja EYVL, 733 00:32:21,890 --> 00:32:25,820 mutta se ei tunnu toimivan. 734 00:32:25,820 --> 00:32:27,180 >> Joten tehdä tätä uudelleen. 735 00:32:27,180 --> 00:32:29,310 Ehkä en vain ollut käynnissä oikein. 736 00:32:29,310 --> 00:32:32,010 Joten ajaa Ei Swap uudelleen. 737 00:32:32,010 --> 00:32:32,900 Ehkä I-- ei. 738 00:32:32,900 --> 00:32:34,400 Niin se vain ei toimi. 739 00:32:34,400 --> 00:32:36,060 Joten tehdä vähän järki tarkistaa. 740 00:32:36,060 --> 00:32:39,690 Anna minun mennä eteenpäin täällä Swap ja vain lisätä, odota minuutti, 741 00:32:39,690 --> 00:32:43,856 on% i / n ja lähdetään plug-arvon. 742 00:32:43,856 --> 00:32:45,730 Koska en todellakaan halua nähdä, mitä tapahtuu. 743 00:32:45,730 --> 00:32:47,570 Ja itse asiassa tämä on virheenkorjaus tekniikka 744 00:32:47,570 --> 00:32:50,028 että saatat olla käyttämästä virka tai kotona jo, 745 00:32:50,028 --> 00:32:53,560 muistuttaa alkupuoliskolla Dan Armendariz n video PSET3 746 00:32:53,560 --> 00:32:56,870 jossa esittelimme tulostaa def kuin suositeltava tekniikka, ainakin 747 00:32:56,870 --> 00:32:58,080 yksinkertaisia ​​tapauksia. 748 00:32:58,080 --> 00:33:01,720 Anna minun mennä eteenpäin ja suorita make ei swap uudelleen, ./noswap. 749 00:33:01,720 --> 00:33:04,370 750 00:33:04,370 --> 00:33:05,840 >> Mielenkiintoinen. 751 00:33:05,840 --> 00:33:11,670 Joten huomaa, mitä näyttää pitävän paikkansa. X on 1, y on 2, mutta on 2, kun b on 1. 752 00:33:11,670 --> 00:33:16,790 Joten nämä kaksi jotenkin vaihtoivat mutta x ja y eivät saa vaihdettu. 753 00:33:16,790 --> 00:33:21,090 Joten tehdä selväksi, mitä tapahtuu on, täällä minulla on x ja y 754 00:33:21,090 --> 00:33:25,380 ja ne ovat muuttujia paikallisia laajuus tärkein, olen ohimennen x- ja y- 755 00:33:25,380 --> 00:33:26,170 vaihtaa. 756 00:33:26,170 --> 00:33:29,080 Nyt, swap, erillisenä toiminto, on vapaasti soittaa sen perustelut 757 00:33:29,080 --> 00:33:30,590 tai sen parametrien mitään se haluaa. 758 00:33:30,590 --> 00:33:33,280 Foo baariin vai X tai Y tai tai b. 759 00:33:33,280 --> 00:33:36,870 Vain tehdä selväksi, että he ole sama kuin x ja y sinänsä, 760 00:33:36,870 --> 00:33:38,020 Olen sanonut ja b. 761 00:33:38,020 --> 00:33:40,040 Mutta voisimme kutsua heille mitään haluamme. 762 00:33:40,040 --> 00:33:43,960 >> Ja niin se näyttää swap on siirrellään 763 00:33:43,960 --> 00:33:48,980 x-- AKA a-- ja se on siirrellään y-- AKA b. 764 00:33:48,980 --> 00:33:51,900 Jotenkin nämä kolme riviä ovat vaihtamalla nämä arvot tarkalleen 765 00:33:51,900 --> 00:33:53,510 kuten Lauren teki maidon ja OJ. 766 00:33:53,510 --> 00:33:56,010 Mutta kun me tulostaa arvot, a ja b 767 00:33:56,010 --> 00:34:01,340 ovat todellakin vaihtaa mutta X ja y ei ole muutosta niihin. 768 00:34:01,340 --> 00:34:03,150 Muista, että x ja y ovat täällä. 769 00:34:03,150 --> 00:34:05,320 >> Jotta voimme nähdä tämän kautta toinen tekniikka samoin. 770 00:34:05,320 --> 00:34:08,110 Ja tämäkin on tekniikka upotettu ongelma asettaa kolme. 771 00:34:08,110 --> 00:34:10,780 Mennään eteenpäin ja tehdä tämän CS50 ID jos et ole jo. 772 00:34:10,780 --> 00:34:13,730 Oikealla puolella me on tämä Debugger välilehti. 773 00:34:13,730 --> 00:34:16,159 Ja jos avaat tämän ylös, siellä on mystistä tietoa 774 00:34:16,159 --> 00:34:17,530 joka on heittänyt sinua aluksi. 775 00:34:17,530 --> 00:34:19,310 Mutta katsotaanpa tease tämä toisistaan ​​todella nopeasti. 776 00:34:19,310 --> 00:34:21,620 >> Joten, näet paikallisia muuttujia. 777 00:34:21,620 --> 00:34:26,230 Osoittautuu, että rakentaa osaksi CS50 IDE, ja paljon ohjelmointiympäristöjä lisää 778 00:34:26,230 --> 00:34:28,060 yleensä, on debuggeri. 779 00:34:28,060 --> 00:34:31,340 Työkalu, jonka avulla voit visuaalisesti nähdä mitä tapahtuu sisällä oman ohjelman 780 00:34:31,340 --> 00:34:34,380 tarvitsematta turvautua lisäämällä printfs ja kokoaminen ja käynnissä 781 00:34:34,380 --> 00:34:37,588 ja lisäämällä printf ja koota ja käynnissä, joka jo vuonna virka 782 00:34:37,588 --> 00:34:40,070 tai koti, on luultavasti tulossa melko tylsiä. 783 00:34:40,070 --> 00:34:43,090 >> Joten tässä, vain hetken, olemme menossa nähdä reaaliajassa 784 00:34:43,090 --> 00:34:44,760 arvoja paikallisia muuttujia. 785 00:34:44,760 --> 00:34:47,880 Olemme myös menossa voitava asettaa mitä kutsutaan breakpoints joka 786 00:34:47,880 --> 00:34:52,570 mahdollisuuksia omassa ohjelmassa tauko suoritus tietyllä koodiriviä 787 00:34:52,570 --> 00:34:53,710 että olen utelias. 788 00:34:53,710 --> 00:34:54,210 Oikea? 789 00:34:54,210 --> 00:34:55,969 Nämä ohjelmat toimivat sekunnin murto-osassa. 790 00:34:55,969 --> 00:35:00,450 Se on tavallaan mukavaa meille hitaammin ihmisille pystyä keskeyttää, hetki, katso 791 00:35:00,450 --> 00:35:02,380 mitä tapahtuu noin tietty koodiriviä 792 00:35:02,380 --> 00:35:05,050 ilman ohjelma auraus sen läpi ja viimeistely kokonaan. 793 00:35:05,050 --> 00:35:08,510 Joten raja-arvot menee jotta voimme tauko ja tauko tietyssä vaiheessa. 794 00:35:08,510 --> 00:35:12,990 >> Kutsupino on hieno tapa sanomalla mitkä toiminnot ovat tällä hetkellä 795 00:35:12,990 --> 00:35:14,140 kutsutaan tällä hetkellä. 796 00:35:14,140 --> 00:35:15,370 Tärkein on aina kutsutaan ensin. 797 00:35:15,370 --> 00:35:17,230 Mutta jos Main kutsuu toiminto nimeltään Swap, 798 00:35:17,230 --> 00:35:20,470 olemme todella menossa nähdä tämän torni toimintoja, jotka ovat olleet 799 00:35:20,470 --> 00:35:22,400 nimeltään käänteisessä kronologisessa järjestyksessä. 800 00:35:22,400 --> 00:35:23,310 Joten nähdä, että. 801 00:35:23,310 --> 00:35:24,327 >> Aion loitontaa. 802 00:35:24,327 --> 00:35:25,660 Aion mennä takaisin minun koodi. 803 00:35:25,660 --> 00:35:27,540 Ja vain koska haluan olla pikkutarkka täällä, 804 00:35:27,540 --> 00:35:31,100 Aion mennä eteenpäin ja valitse vain vasemmalla linjan viisi. 805 00:35:31,100 --> 00:35:32,830 Ja joka luo punainen piste. 806 00:35:32,830 --> 00:35:36,200 Ja huomaa oikealla puolella että debuggeri tietää, hei, 807 00:35:36,200 --> 00:35:41,020 Sanoin vain keskeytyskohdan noswap.c linja viisi, erityisesti 808 00:35:41,020 --> 00:35:42,480 Tämän koodiriviä. 809 00:35:42,480 --> 00:35:45,090 Joten debuggeri tietää, että minä ovat pyytäneet, että seuraavan kerran 810 00:35:45,090 --> 00:35:48,530 Juoksen minun ohjelma se tauko suorittamisen siellä eikä vain 811 00:35:48,530 --> 00:35:50,390 käynnissä koko juttu huippunopea. 812 00:35:50,390 --> 00:35:53,889 >> Joten nyt aion klikkaa Debug -painiketta hyvin alkuun IDE 813 00:35:53,889 --> 00:35:55,430 ja että menee toimi seuraavasti. 814 00:35:55,430 --> 00:36:00,680 Se tulee avata ensin hieman pelottavan näköinen toinen napa window-- 815 00:36:00,680 --> 00:36:02,679 etävianmääritystä alkaen isäntänä ja such-- 816 00:36:02,679 --> 00:36:04,970 ja me palaamme mitä kaikki tämä tarkoittaa ennen pitkää. 817 00:36:04,970 --> 00:36:09,020 Mutta mikä on tärkeää nyt on, että punainen piste osui, 818 00:36:09,020 --> 00:36:11,735 debuggeri on tahallisesti keskeytetty execution-- 819 00:36:11,735 --> 00:36:15,560 ei radalla sinänsä vaan ensimmäisenä rivi itse koodi tähän toimintaan. 820 00:36:15,560 --> 00:36:18,040 Ja siksi linja seitsemän on nyt on korostettu keltaisella. 821 00:36:18,040 --> 00:36:20,550 >> Ja Nyt katsomaan oikealla puolella. 822 00:36:20,550 --> 00:36:27,300 Näyttää siltä, ​​oletuksena, kauniisti tarpeeksi, x on mitä arvo? 823 00:36:27,300 --> 00:36:27,860 0. 824 00:36:27,860 --> 00:36:29,750 Ja y on mitä arvo? 825 00:36:29,750 --> 00:36:30,410 Nolla. 826 00:36:30,410 --> 00:36:35,540 Ja se on odotettavissa mielessä että x ja y-- että keltainen line-- on 827 00:36:35,540 --> 00:36:36,770 ei toteutettu vielä. 828 00:36:36,770 --> 00:36:38,510 Joten X ei pitäisi olla arvoa 1. 829 00:36:38,510 --> 00:36:41,470 Se voi olla jokin muu arvo, ns roskat arvo. 830 00:36:41,470 --> 00:36:44,320 Ja me onnekas, että se on nolla tässä vaiheessa lähinnä. 831 00:36:44,320 --> 00:36:46,400 >> Joten nyt on vain muutama painikkeet meidän tarvitse välittää 832 00:36:46,400 --> 00:36:48,100 noin kun virheenkorjaus tällä tavalla. 833 00:36:48,100 --> 00:36:49,970 Huomata täällä, meillä toistopainiketta. 834 00:36:49,970 --> 00:36:51,877 Ja jos me pelata tai lyödä jatkaa, se on vain 835 00:36:51,877 --> 00:36:53,710 menossa ajaa läpi loput ohjelman 836 00:36:53,710 --> 00:36:55,300 tai kunnes se osuu toiseen murtuessa. 837 00:36:55,300 --> 00:36:56,910 Mutta en ole asettanut mitään muuta raja-arvot niin se on vain 838 00:36:56,910 --> 00:36:58,118 menossa läpi loppuun. 839 00:36:58,118 --> 00:37:00,280 Tällainen tappioita tarkoituksena tönäisi ympäri. 840 00:37:00,280 --> 00:37:03,290 >> Joten sen sijaan, välitän nämä kuvakkeet oikealle. 841 00:37:03,290 --> 00:37:05,360 Ja jos minä hääriä ne, kuin pitäisi liian, 842 00:37:05,360 --> 00:37:07,450 näet vähän tips-- työkalu vinkkejä. 843 00:37:07,450 --> 00:37:09,020 Tämä on askel yli. 844 00:37:09,020 --> 00:37:11,290 Nyt se ei tarkoita Ohita seuraava rivi koodia. 845 00:37:11,290 --> 00:37:14,840 Se vain tarkoittaa toteuttaa sitä ja siirtyä seuraavalle, siirry seuraavaan, 846 00:37:14,840 --> 00:37:15,580 siirtyä seuraavaan. 847 00:37:15,580 --> 00:37:17,610 Toisin sanoen, kautta että painike, voin kävellä 848 00:37:17,610 --> 00:37:20,390 kautta minun koodi yksi askel kerrallaan. 849 00:37:20,390 --> 00:37:21,914 Rivi riviltä, ​​kirjaimellisesti. 850 00:37:21,914 --> 00:37:23,830 Nyt, oikealle että siellä toinen 851 00:37:23,830 --> 00:37:25,163 että näemme vain hetken. 852 00:37:25,163 --> 00:37:27,820 Tämä on ns Astu ikoni, joka on 853 00:37:27,820 --> 00:37:30,300 aio sallia minulle sukellus toiseen toiminto. 854 00:37:30,300 --> 00:37:31,800 Mutta katsotaanpa tämä vain hetken. 855 00:37:31,800 --> 00:37:33,280 Joten aion klikkaa askel yli. 856 00:37:33,280 --> 00:37:35,820 Ja nyt huomaa, koska olen klikkaa tätä painiketta oikeassa yläkulmassa, 857 00:37:35,820 --> 00:37:41,260 pitää silmät suunnilleen alle Paikallinen Muuttujat ja katso mitä tapahtuu x. 858 00:37:41,260 --> 00:37:44,115 X on nyt 1, koska keltainen viiva on nyt suoritettu 859 00:37:44,115 --> 00:37:45,840 ja olemme siirtyneet rivillä 8. 860 00:37:45,840 --> 00:37:49,840 Ja vain hetken y olisi toivottavasti tulee 2. 861 00:37:49,840 --> 00:37:52,330 >> Nyt, ei mitään kiinnostavaa tapahtuu hieman. 862 00:37:52,330 --> 00:37:53,390 Kaikki tämä on on printf. 863 00:37:53,390 --> 00:37:58,010 Ja huomaa, minun toissijainen terminaali ikkuna, näen tuotos tulostaa def. 864 00:37:58,010 --> 00:38:01,080 Ja nyt minun täytyy tehdä Päätös sellaisena kuin ohjelmoija. 865 00:38:01,080 --> 00:38:04,360 Voin astua yli tämän linjan koodi, sen suorittamista mutta ei 866 00:38:04,360 --> 00:38:06,220 saada tietää, mitä sisällä. 867 00:38:06,220 --> 00:38:11,130 Tai voin itse astua se ja mennä sisälle swap itse. 868 00:38:11,130 --> 00:38:12,340 Tehdäänpä jälkimmäinen. 869 00:38:12,340 --> 00:38:15,550 >> Anna minun mennä eteenpäin ja valitse ei askel yli vaan Step Into. 870 00:38:15,550 --> 00:38:17,300 Ilmoitus, yhtäkkiä ikkuna muutokset 871 00:38:17,300 --> 00:38:19,330 Korosta ensimmäinen koodirivin Vaihda. 872 00:38:19,330 --> 00:38:20,710 Se on linja 21. 873 00:38:20,710 --> 00:38:25,220 Ja nyt, mikä on tavallaan funky on että, jos tarkastellaan tänne, odotetusti, 874 00:38:25,220 --> 00:38:29,720 pilkku b on 1 ja 2, vastaavasti. 875 00:38:29,720 --> 00:38:33,840 Miksi temp 32767? 876 00:38:33,840 --> 00:38:36,560 Muistuttaa, että lämpötila, aivan kuten tyhjä kuppi hetki sitten, 877 00:38:36,560 --> 00:38:38,980 julistetaan täällä line 21. 878 00:38:38,980 --> 00:38:43,390 Miksi 32,000- Tarkoitan, miksi se vain outoja arvo? 879 00:38:43,390 --> 00:38:43,890 Joo? 880 00:38:43,890 --> 00:38:45,190 >> Yleisö: Se ei ole alustettu. 881 00:38:45,190 --> 00:38:46,940 >> DAVID J. MALAN: Se ei ole alustettu. 882 00:38:46,940 --> 00:38:49,370 Joten meidän tietokone aina on fyysistä muistia. 883 00:38:49,370 --> 00:38:50,544 Se on aina keskusmuistia. 884 00:38:50,544 --> 00:38:52,710 Ja siellä on aina Zeron ja yksi on siellä, eikö? 885 00:38:52,710 --> 00:38:54,626 Koska käytämme meidän tietokone koko päivän, 886 00:38:54,626 --> 00:38:57,210 käytät CS50 IDE tai palvelimet koko päivän. 887 00:38:57,210 --> 00:39:01,159 Jotta RAM joko on joitakin nollia tai jotkut oman tai jonkin nollia ja ykkösiä. 888 00:39:01,159 --> 00:39:02,950 Ei ole väliä onko tai ei käytät niitä. 889 00:39:02,950 --> 00:39:05,270 Et voi vain olla tyhjä tiloissa, joissa haluat bittiä. 890 00:39:05,270 --> 00:39:06,850 He joko nollia ja ykkösiä. 891 00:39:06,850 --> 00:39:09,610 >> Joten käy ilmi, että lämpötila, koska olemme ole alustettu sitä vielä, 892 00:39:09,610 --> 00:39:14,580 meillä on ne 32 bittiä mutta he eivät ole alustettu tahansa tunnettuja arvoja. 893 00:39:14,580 --> 00:39:18,110 Joten mitä he olivat eniten viimeksi käytetyt for-- ne 32 bits-- 894 00:39:18,110 --> 00:39:23,000 me vain nähdä esineitä joidenkin aiemmasta käytöstä kyseisiä 32 895 00:39:23,000 --> 00:39:23,500 bittiä. 896 00:39:23,500 --> 00:39:27,780 Heti kun klikkaa askel yli kuitenkin, huh huh, lämpötila on menossa arvoon 1. 897 00:39:27,780 --> 00:39:31,600 Ja jos teen sen uudelleen, on Menossa annetaan arvo 2 898 00:39:31,600 --> 00:39:33,830 ja sitten b aikoo annetaan arvo 1. 899 00:39:33,830 --> 00:39:36,390 >> Ja niin mitä mukavaa nyt tässä vaiheessa tarina 900 00:39:36,390 --> 00:39:39,750 on, että debuggeri on osoittaa minulle, Super hitaasti 901 00:39:39,750 --> 00:39:42,640 minun omaan tahtiin, mitä tila Swap on. 902 00:39:42,640 --> 00:39:47,490 Mutta huomaa huipulla täällä, ilmoitus että kutsupino todella 903 00:39:47,490 --> 00:39:49,180 on kaksi kerrosta siihen. 904 00:39:49,180 --> 00:39:53,240 Nyt yksi, joka on korostettu Swap, jos napsautan Main sijaan, 905 00:39:53,240 --> 00:39:57,100 huomaa kuinka paikalliset muuttujat muuttuvat koska kehittäjä voi vain hypätä 906 00:39:57,100 --> 00:39:59,740 ympäri ja mennä mihin tahansa eri soveltamisala. 907 00:39:59,740 --> 00:40:04,070 Joten vaikka me teemme kaiken tämän toimivat ja oikein vaihtamalla ja b, 908 00:40:04,070 --> 00:40:09,080 jos menen edestakaisin Swap jossa on 2 ja b on 1 ja Main, 909 00:40:09,080 --> 00:40:11,851 on Main vaikuttanut lainkaan? 910 00:40:11,851 --> 00:40:12,350 Ei. 911 00:40:12,350 --> 00:40:13,930 Niin mitä takeaway täällä? 912 00:40:13,930 --> 00:40:18,200 No, käy ilmi, että aina soitat toimivat kuten Swap, 913 00:40:18,200 --> 00:40:21,600 ja ohitat sen argumentteja, mitä olet ohimennen Swap toiminto 914 00:40:21,600 --> 00:40:24,730 tässä tapauksessa on kopio näistä perusteluista. 915 00:40:24,730 --> 00:40:28,620 Joten jos x ja y ovat kukin vastaavasti 32 bittiä, mikä vaihto on tulossa 916 00:40:28,620 --> 00:40:30,760 on kaksi uutta paikallista muuttujia, tai väitteitä, 917 00:40:30,760 --> 00:40:34,380 kutsutaan ja b-- mutta ne ovat mielivaltaisia names-- mutta kuvio nollia 918 00:40:34,380 --> 00:40:39,520 ja ne sisällä a ja b ovat rivissä olevan identtinen x ja y 919 00:40:39,520 --> 00:40:42,610 mutta ne eivät ole sama asia kuin x ja y. 920 00:40:42,610 --> 00:40:46,880 >> Se on ikään kuin Main on sen pala paperi numero 1 ja 2 x ja y, 921 00:40:46,880 --> 00:40:49,260 ja sitten kun se kädet että paperinpala Swap, 922 00:40:49,260 --> 00:40:51,970 Swap hyvin nopeasti saa oma kynä, kirjoittaa alas 923 00:40:51,970 --> 00:40:56,240 1 ja 2 omasta paperiarkille, kädet takaisin alkuperäisen xy Main 924 00:40:56,240 --> 00:40:58,790 ja sitten tekee omat juttu ja b. 925 00:40:58,790 --> 00:41:01,940 Ja tämä on nyt erittäin tärkeää, koska tämä on triviaali vaikutuksia 926 00:41:01,940 --> 00:41:06,260 sillä todella kirjoittamista oikea koodi koska vaikuttaa siltä, ​​emme voi vaihtaa 927 00:41:06,260 --> 00:41:07,500 kaksi muuttujaa. 928 00:41:07,500 --> 00:41:09,150 >> Olen kirjoittanut oikean Swap toiminto. 929 00:41:09,150 --> 00:41:12,770 Olemme toteutettu sen Lauren kuin oikea swap toiminto todellisuudessa, 930 00:41:12,770 --> 00:41:16,700 mutta ilmeisesti mikään että asiat jos et voi itse 931 00:41:16,700 --> 00:41:19,530 vaihtaa kaksi arvoa pysyvästi. 932 00:41:19,530 --> 00:41:21,970 Joten tarvitsemme toisella tavalla todella saada tämän, 933 00:41:21,970 --> 00:41:24,472 ja meidän on pystyttävä itse asiassa tämän ongelman ratkaisemiseksi. 934 00:41:24,472 --> 00:41:27,180 Ja se kääntyy out-- ja tulemme takaisin tähän nimenomaiseen kuva 935 00:41:27,180 --> 00:41:30,500 ennen long-- tämä on yksi tapa, että saatat kiinnittää tietokoneen muistiin. 936 00:41:30,500 --> 00:41:31,460 Se on vain suorakulmion. 937 00:41:31,460 --> 00:41:32,960 Voisit piirtää se mitään monin tavoin, mutta se on 938 00:41:32,960 --> 00:41:35,740 kätevä tehdä sitä suorakulmio seuraavasta syystä. 939 00:41:35,740 --> 00:41:40,040 >> Aiomme aloittaa tänään ja sen jälkeen puhutaan ns pino. 940 00:41:40,040 --> 00:41:43,870 Ja pino on vain murikka of RAM-- kimpale memory-- 941 00:41:43,870 --> 00:41:47,100 että toiminnot on pääsy milloin niitä kutsutaan. 942 00:41:47,100 --> 00:41:49,800 Ja niin se kääntyy pois, että hyvin alareunassa tämän pinon 943 00:41:49,800 --> 00:41:53,590 on, jos kaikki Mainin paikallisia muuttujia ja Org C ja org V ja kaikki jutut 944 00:41:53,590 --> 00:41:56,950 eivät mene oletuksena. Ja jos Main kehottaa muuna kuten Vaihto, 945 00:41:56,950 --> 00:42:00,330 hyvin, Swap on menossa toiseen kerros muistia jopa sen yläpuolella. 946 00:42:00,330 --> 00:42:04,490 >> Ja niin vain antaa sinulle nopeasti pintapuolinen kuva tästä, jos menen yli here-- 947 00:42:04,490 --> 00:42:09,450 ja haluan heijastavat tätä piirtoheitin kuten well-- mitä todella olen, 948 00:42:09,450 --> 00:42:12,100 jos välitämme vain pohjassa tätä kuvaa nyt, 949 00:42:12,100 --> 00:42:15,070 on että kun olen suorittanut ohjelman ja Main saa kutsutaan, 950 00:42:15,070 --> 00:42:18,330 Tärkein annetaan kimpale RAM minun tietokone, joka on 951 00:42:18,330 --> 00:42:20,060 alareunassa tämän ns pino. 952 00:42:20,060 --> 00:42:22,143 Ja aion tehdä sitä tarkoituksella kuten neliö. 953 00:42:22,143 --> 00:42:24,540 Joten se on kuin 32 bittiä tai neljä tavua. 954 00:42:24,540 --> 00:42:28,790 Ja jos tämä päätehtävä on muuttuja nimeltä x arvo on 1 955 00:42:28,790 --> 00:42:32,626 ja se on muuttuja nimeltä Y arvo 2, joka on 956 00:42:32,626 --> 00:42:35,750 kuin ottaa tämä suikale muistin Main on antanut toiminta 957 00:42:35,750 --> 00:42:38,850 järjestelmä ja jakamalla sen niin, että ensimmäinen paikallinen muuttuja menee täällä, 958 00:42:38,850 --> 00:42:40,930 toinen menee täällä, ja se on siinä. 959 00:42:40,930 --> 00:42:45,590 >> Kun Main kehottaa Swap, Vaihda saa oman siivu muisti 960 00:42:45,590 --> 00:42:48,280 että me tehdä näin käyttöjärjestelmästä, 961 00:42:48,280 --> 00:42:50,820 ja se tulee olla sen oma paikalliset muuttujat perustuvat 962 00:42:50,820 --> 00:42:53,825 meidän täytäntöönpanosta aiemmin paikallisten muuttujien 963 00:42:53,825 --> 00:42:58,010 ja b, että aluksi saada arvoja 1 ja 2. 964 00:42:58,010 --> 00:43:00,450 Mutta sitten, heti kun Swap koodi suorittaa, 965 00:43:00,450 --> 00:43:03,760 ja Lauren todella swap OJ ja maito, mitä tapahtuu? 966 00:43:03,760 --> 00:43:09,030 No, tämä 2 on tulossa 1, tämä 1 on tulossa 2, ja, muuten, 967 00:43:09,030 --> 00:43:13,360 on temp muuttuja, joka on on käytetty että koko sen ajan, lopulta 968 00:43:13,360 --> 00:43:14,470 menee pois. 969 00:43:14,470 --> 00:43:16,720 Mutta se ei ole väliä kuinka paljon työtä teet 970 00:43:16,720 --> 00:43:22,160 tämän linjan of-- tässä muistia, x ja y ovat täysin koskematon. 971 00:43:22,160 --> 00:43:26,320 >> Joten tarvitsemme tapa antaa Swap ja toimintoja, kuten se 972 00:43:26,320 --> 00:43:32,640 salainen yhteys, jos haluatte, että toiminnot like-- muistiin, kuten x ja y. 973 00:43:32,640 --> 00:43:35,110 Joten katsomaan esimerkki, joka auttaa 974 00:43:35,110 --> 00:43:38,220 meitä nähdä, mitä on ollut käynnissä koko tämän ajan. 975 00:43:38,220 --> 00:43:40,284 Aion mennä eteenpäin ja avata Vertaa Zero. 976 00:43:40,284 --> 00:43:42,200 Ja aion sulkea meidän debuggeri, aion 977 00:43:42,200 --> 00:43:44,360 sulkea tämän pelottavan näköinen viesti vain sanoo, odota minuutti, 978 00:43:44,360 --> 00:43:45,800 olet keskellä virheenkorjaus. 979 00:43:45,800 --> 00:43:48,383 Aion piilottaa tämän välilehden täällä vain palata yksinkertaisuus. 980 00:43:48,383 --> 00:43:50,160 Joten älä huolestu, jos GDB kuolee. 981 00:43:50,160 --> 00:43:53,910 Se vain tarkoittaa, että ohjelma on on lopettaa, tarkoituksella tässä tapauksessa, 982 00:43:53,910 --> 00:43:54,820 minun. 983 00:43:54,820 --> 00:43:57,700 >> Ja nyt Vertaa Zero tekee tämän. 984 00:43:57,700 --> 00:44:00,110 Olen käyttäen CS50 kirjasto vakio I / O. 985 00:44:00,110 --> 00:44:04,319 Minulla päätehtävä, että ensin sanoo, sanoa jotain, ja saa merkkijono. 986 00:44:04,319 --> 00:44:06,110 Sanoo sitten uudelleen ja saa toisen merkkijono. 987 00:44:06,110 --> 00:44:09,910 Ja huomaa, että nämä kaksi merkkijonoa kutsutaan s ja t, vastaavasti. 988 00:44:09,910 --> 00:44:12,910 Ja nyt tämä ohjelma, Vertaa Nolla, sen elämän tarkoitus, 989 00:44:12,910 --> 00:44:15,470 sen pitäisi kertoa minulle, minä kirjoita sama asia? 990 00:44:15,470 --> 00:44:16,910 Ja niin aion takaisin viikko yksi. 991 00:44:16,910 --> 00:44:19,950 Olen käyttäen yhtä suuri yhtä suuri operaattori joka on laatu operaattori. 992 00:44:19,950 --> 00:44:22,220 Ei Sijoitusoperaattori, yhtäsuuruusoperaattorin. 993 00:44:22,220 --> 00:44:23,890 Olen vain vertaamalla s ja t. 994 00:44:23,890 --> 00:44:27,470 >> Joten itse mennä eteenpäin ja tehdä tämän. 995 00:44:27,470 --> 00:44:32,680 Ja aion mennä eteenpäin ja tehdä Vertaa Zero. 996 00:44:32,680 --> 00:44:35,110 Aion tehdä ./comparezero. 997 00:44:35,110 --> 00:44:37,150 Ja aion mennä eteenpäin ja sanoa jotain 998 00:44:37,150 --> 00:44:43,450 kuten, tehdään äiti pienillä kirjaimilla ja miten äiti isoja kirjaimia. 999 00:44:43,450 --> 00:44:45,034 Ja tietenkin kirjoitan eri asioita. 1000 00:44:45,034 --> 00:44:45,533 Selvä. 1001 00:44:45,533 --> 00:44:46,570 Se on odotettavissa. 1002 00:44:46,570 --> 00:44:47,640 >> Katsotaanpa ajaa se uudelleen. 1003 00:44:47,640 --> 00:44:49,740 Molemmilla kerroilla tehdä pieniä, pieniä. 1004 00:44:49,740 --> 00:44:51,490 Joka näyttää Super sama minulle. 1005 00:44:51,490 --> 00:44:52,930 Anna. 1006 00:44:52,930 --> 00:44:53,430 OK. 1007 00:44:53,430 --> 00:44:55,804 Ehkä se on vain outoa, koska se ei miellytä minun kielioppia. 1008 00:44:55,804 --> 00:44:59,930 Tehdäänpä pääoman MOM, pääoman MOM, identtiset. 1009 00:44:59,930 --> 00:45:01,490 Eri asiat. 1010 00:45:01,490 --> 00:45:03,907 >> Niin miksi? 1011 00:45:03,907 --> 00:45:06,240 No, mitä todella tapahtuu on alla huppu täällä? 1012 00:45:06,240 --> 00:45:08,180 Joten mennään takaisin yli täällä vain hetken 1013 00:45:08,180 --> 00:45:10,910 ja miettiä, mitä GetString todella tekee. 1014 00:45:10,910 --> 00:45:13,385 Kun soitat GetString, se funktio me 1015 00:45:13,385 --> 00:45:16,510 itse kirjoitti ja se jotenkin saa merkkijono käyttäjältä. 1016 00:45:16,510 --> 00:45:20,280 Ja oletetaan, että ensimmäinen aika Pyydän GetString, joka antaa minulle 1017 00:45:20,280 --> 00:45:21,930 kimpale muisti, joka näyttää tältä. 1018 00:45:21,930 --> 00:45:26,990 Ja jos olen kirjoittanut pienillä m-o-m-- ja mitä tapahtuu sen jälkeen? 1019 00:45:26,990 --> 00:45:28,840 Vain nopeasti järki tarkistaa. 1020 00:45:28,840 --> 00:45:29,780 >> Backslash nolla. 1021 00:45:29,780 --> 00:45:30,510 Tiedämme, että. 1022 00:45:30,510 --> 00:45:32,784 Ja muistuttaa, että me pelasimme ympäriinsä Zamila nimi 1023 00:45:32,784 --> 00:45:34,950 ja joukko muita nimiä kun Rob oli täällä etsimässä 1024 00:45:34,950 --> 00:45:36,280 mitä tapahtuu sisällä muistia. 1025 00:45:36,280 --> 00:45:37,780 Niin, että tarina on täsmälleen sama. 1026 00:45:37,780 --> 00:45:40,160 Tämä on mitä GetString palaa minulle. 1027 00:45:40,160 --> 00:45:44,780 Nyt minun koodi hetki sitten tallennettu palauttaa arvon GetString 1028 00:45:44,780 --> 00:45:47,510 muuttujaan nimeltä s. 1029 00:45:47,510 --> 00:45:51,390 Ja sitten toisen kerran kutsuin sitä, se tallennetaan se muuttujaan nimeltä t. 1030 00:45:51,390 --> 00:45:55,070 >> Joten jos menen tänne, tarvitsen tehdä tämä paikallinen variable-- 1031 00:45:55,070 --> 00:45:59,610 ja olen yleensä menossa piirtää merkkijonon just-- me will 1032 00:45:59,610 --> 00:46:02,360 kutsuvat sitä s-- kuin pienen aukion täällä. 1033 00:46:02,360 --> 00:46:09,760 Ja nyt, somehow-- miten äiti mennä sisälle tämän muuttujan s? 1034 00:46:09,760 --> 00:46:12,010 No, meidän täytyy mennä takaisin ensin periaatteita täällä. 1035 00:46:12,010 --> 00:46:15,660 Mikä on GetString todella palaamassa? 1036 00:46:15,660 --> 00:46:19,030 >> Joten käy ilmi, että M-O-M kenoviiva nolla, ja rajoittamattoman määrän 1037 00:46:19,030 --> 00:46:22,364 Muiden jousille muisti kuin Zamila ja Rob tai Andy tai muilta, 1038 00:46:22,364 --> 00:46:24,280 ovat tietenkin meidän tietokoneen RAM tai muistin. 1039 00:46:24,280 --> 00:46:27,760 Ja RAM on like-- olet keikka RAM, kaksi keikkaa RAM, 1040 00:46:27,760 --> 00:46:30,860 tai miljardia kaksi miljardia tavua, tai ehkä jopa enemmän näinä päivinä. 1041 00:46:30,860 --> 00:46:34,070 Joten Oletetaan, päivän tarkoituksiin, että sillä ei ole väliä kuinka me numero 1042 00:46:34,070 --> 00:46:36,640 heitä, mutta voimme numeroitava näiden miljardia tai kaksi miljardia 1043 00:46:36,640 --> 00:46:37,880 tai neljä miljardia tavua. 1044 00:46:37,880 --> 00:46:42,240 >> Ja haluan vain mielivaltaisesti sanoa, että tämä on ensimmäinen purra, toisen purema, 1045 00:46:42,240 --> 00:46:43,380 kolmas, neljäs. 1046 00:46:43,380 --> 00:46:46,570 En tarkoituksella käytä nolla tänään, mutta me palaamme siihen. 1047 00:46:46,570 --> 00:46:49,570 Eli toisin sanoen, jos tämä on Ensimmäistä kertaa olen käyttäen ohjelmaa, 1048 00:46:49,570 --> 00:46:52,715 Olen vain saada onnekas ja ensimmäinen purema on sijainti yksi sitten kaksi 1049 00:46:52,715 --> 00:46:53,590 sitten kolme kuin neljä. 1050 00:46:53,590 --> 00:46:57,430 Ja jos Pidin piirustus, laatikko numero kaksi miljardia olisi tapa täällä. 1051 00:46:57,430 --> 00:47:02,200 >> Mitä mieltä olet, sitten, GetString todella palauttaa? 1052 00:47:02,200 --> 00:47:06,010 Se ei ole tulossa takaisin M-O-M kenoviiva nolla sinänsä koska selvästi 1053 00:47:06,010 --> 00:47:08,180 ei mahdu ruutuun että olen laatinut. 1054 00:47:08,180 --> 00:47:11,210 Mitä muuta voisi GetString todella palaamme kaikki näistä viikoista? 1055 00:47:11,210 --> 00:47:14,410 1056 00:47:14,410 --> 00:47:16,820 Vastaus on aluksella täällä jossain. 1057 00:47:16,820 --> 00:47:20,390 Ei mahdu M-O-M kenoviiva nolla, joten mitä saattaisi olla järkevää sen sijaan? 1058 00:47:20,390 --> 00:47:23,424 Jos piti olla erittäin fiksu, laskemisesta on ns engineering hattu, 1059 00:47:23,424 --> 00:47:24,340 mitä voisit palata? 1060 00:47:24,340 --> 00:47:27,340 Mikä on vähiten tietoa voisit tuottoa, joka olisi vielä 1061 00:47:27,340 --> 00:47:30,610 voit löytää M-O-M muistia? 1062 00:47:30,610 --> 00:47:31,270 Joo? 1063 00:47:31,270 --> 00:47:31,950 >> Yleisö: Yksi. 1064 00:47:31,950 --> 00:47:32,200 >> DAVID J. MALAN: One. 1065 00:47:32,200 --> 00:47:33,021 Ja miksi? 1066 00:47:33,021 --> 00:47:35,520 Yleisö: Koska se kertoisi minne mennä [kuulumattomiin]. 1067 00:47:35,520 --> 00:47:38,391 1068 00:47:38,391 --> 00:47:39,390 DAVID J. MALAN: Aivan. 1069 00:47:39,390 --> 00:47:44,300 Olen juuri menossa palauttaa osoitteeseen merkkijonon, että olen saanut. 1070 00:47:44,300 --> 00:47:46,570 Osoite tähän asia on sijainti yksi. 1071 00:47:46,570 --> 00:47:51,280 Joten mitä todella on tallennettu s-- ja jokainen merkkijono muuttujan näin far-- 1072 00:47:51,280 --> 00:47:53,430 on juuri osoitteen merkkijono. 1073 00:47:53,430 --> 00:47:57,840 >> Samaan aikaan, jos kutsun GetString toisen kerran ja minä 1074 00:47:57,840 --> 00:48:03,300 kirjoita kirjaimellisesti samassa thing-- M-O-M lowercase-- M-O-M 1075 00:48:03,300 --> 00:48:06,200 ja toinen kenoviiva nolla, ja nyt ehkä minun ohjelman 1076 00:48:06,200 --> 00:48:09,820 olleet käynnissä jo jonkin aikaa, joten ehkä tämä on 10, tämä on paikka 11, tämä on 12, 1077 00:48:09,820 --> 00:48:10,700 tämä on 13. 1078 00:48:10,700 --> 00:48:13,590 Tietokoneissa muulla muisti jostain syystä. 1079 00:48:13,590 --> 00:48:18,172 Mitä nyt menee minun toinen muuttuja minun ohjelma t? 1080 00:48:18,172 --> 00:48:19,390 10. 1081 00:48:19,390 --> 00:48:20,050 Aivan. 1082 00:48:20,050 --> 00:48:23,910 >> Ja niin kun katsomme lähdekoodi tämän ohjelman 1083 00:48:23,910 --> 00:48:26,550 missä olen yksinkertaisesti yrittää vertailla kahta arvot, 1084 00:48:26,550 --> 00:48:32,180 on S yhtä suuri yhtä t, mikä on inhimillisestä vastaus? 1085 00:48:32,180 --> 00:48:34,890 Vain ei koska 1 ei ole sama 10. 1086 00:48:34,890 --> 00:48:36,861 Ja niin tässä piilee mahdollisuus meille todella 1087 00:48:36,861 --> 00:48:39,610 vain mennä takaisin, jälleen, ensimmäinen periaatteet ja miettiä, hyvin, 1088 00:48:39,610 --> 00:48:41,110 mitä tapahtuu alla huppu? 1089 00:48:41,110 --> 00:48:43,240 Olemme puhuneet bitit ja tavut ja muisti, 1090 00:48:43,240 --> 00:48:46,820 mutta se on todella hyödyllistä ymmärtää koska kun soitat GetString, 1091 00:48:46,820 --> 00:48:50,280 vaikka ajattelemme se on palaavat M-O-M tai merkkijono äiti 1092 00:48:50,280 --> 00:48:53,120 tai Andy tai Zamila tai kuten, teknisesti 1093 00:48:53,120 --> 00:48:55,510 se on vain palauttamalla osoite Kyseisen murikka muistia. 1094 00:48:55,510 --> 00:48:56,910 >> Mutta se on OK. 1095 00:48:56,910 --> 00:49:00,570 Koska mistä tiedän jossa merkkijono päättyy? 1096 00:49:00,570 --> 00:49:03,840 Jos olen vain antanut alkua? 1097 00:49:03,840 --> 00:49:05,380 No, kenoviiva nolla, eikö? 1098 00:49:05,380 --> 00:49:08,800 Vain lineaarisessa ajassa voin tulostaa tulostetun def M-O-M. 1099 00:49:08,800 --> 00:49:11,820 Ja kun näen kenoviiva nolla, en välitä, mistä aloitin, 1100 00:49:11,820 --> 00:49:14,950 Tiedän jo epäsuorasti jossa minun täytyy lopettaa. 1101 00:49:14,950 --> 00:49:18,700 >> Ja niin tänään merkitsee beginning-- ja anna minun tehdä tämä dramaattisesti, koska me 1102 00:49:18,700 --> 00:49:21,800 meni läpi paljon vaivaa saada nämä täällä koulutus wheels-- 1103 00:49:21,800 --> 00:49:29,840 joten tänään apupyörät alkaa irrota ja me paljastaa klo least-- 1104 00:49:29,840 --> 00:49:31,373 >> [APPLAUSE] 1105 00:49:31,373 --> 00:49:33,220 1106 00:49:33,220 --> 00:49:36,160 >> Se oli matkan arvoinen Target tänä aamuna, kyllä? 1107 00:49:36,160 --> 00:49:39,600 Joten now-- on, se kääntyy , mitään sellaista asiaa kuin merkkijono. 1108 00:49:39,600 --> 00:49:41,140 String ei ole olemassa. 1109 00:49:41,140 --> 00:49:43,760 Se on synonyymi että meillä on ollut sisällä CS50 kirjaston. 1110 00:49:43,760 --> 00:49:48,660 Vastedes aiomme aloittaa kutsuvan s ja t ei jouset vaan merkkiä tähteä. 1111 00:49:48,660 --> 00:49:51,180 Ja nieriä tähti me will tease erilleen ennen pitkää. 1112 00:49:51,180 --> 00:49:53,510 Mutta tämä on sanottava, että vaikka jatkamme 1113 00:49:53,510 --> 00:49:56,180 käyttäen GetString nyt, teknisesti minun pitäisi 1114 00:49:56,180 --> 00:49:59,010 sanovan char tähti ja nieriää tähti. 1115 00:49:59,010 --> 00:50:01,720 >> Ja käy ilmi, mitä että tähti on menossa kuvaamaan on jotain 1116 00:50:01,720 --> 00:50:04,340 kutsutaan osoitin tai osoite. 1117 00:50:04,340 --> 00:50:06,110 Ja itse asiassa, teaser mitä on edessä 1118 00:50:06,110 --> 00:50:09,760 on tämä 20 sekunnin klippi meidän ystävä Nick Parlante Stanfordin 1119 00:50:09,760 --> 00:50:12,927 joka jo jonkin aikaa sitten, viettää naurettava aikaa, 1120 00:50:12,927 --> 00:50:15,010 kuten parhaiten voin kertoa hänen keittiö tai hänen kellarissa, 1121 00:50:15,010 --> 00:50:17,140 mikä claymation käyttöön maailmalle 1122 00:50:17,140 --> 00:50:20,010 hahmo nimeltä Binky jonka kanssa me 1123 00:50:20,010 --> 00:50:22,010 otetaan käyttöön seuraavan kerran viitteitä. 1124 00:50:22,010 --> 00:50:24,588 Joten tässä on esikatselu siitä, mitä on tulossa. 1125 00:50:24,588 --> 00:50:26,370 >> [VIDEOTOISTOSTA] 1126 00:50:26,370 --> 00:50:27,510 >> Hei, Binky. 1127 00:50:27,510 --> 00:50:28,260 Herää. 1128 00:50:28,260 --> 00:50:30,672 On aika osoitin hauskaa. 1129 00:50:30,672 --> 00:50:31,616 >> -Mikä tuo on? 1130 00:50:31,616 --> 00:50:33,032 Lisätietoja viitteitä? 1131 00:50:33,032 --> 00:50:34,450 Voi, Goody. 1132 00:50:34,450 --> 00:50:35,431 >> [Lopeta toisto] 1133 00:50:35,431 --> 00:50:38,055 DAVID J. MALAN: Ja että huomautuksen, näemme sinut keskiviikkona. 1134 00:50:38,055 --> 00:50:47,590 1135 00:50:47,590 --> 00:50:48,090 Selvä. 1136 00:50:48,090 --> 00:50:48,740 Kuka tanssii? 1137 00:50:48,740 --> 00:50:49,240 Tule. 1138 00:50:49,240 --> 00:50:50,330 Kuka tanssii? 1139 00:50:50,330 --> 00:50:51,820 Haluat minun päästä se alkoi? 1140 00:50:51,820 --> 00:50:53,770 Haen se alkoi. 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: Makea fancy Mooses.