DAVID J. Malan: Þetta er CS50 og þetta er upphaf viku fjögur. Og drengur, er Volkswagen í vandræði allt vegna hugbúnaðar. Leyfðu okkur að líta. [Vídeó spilun] -Cars, Smartest stafir í The Fast og Trylltur bíó. Þessi vika Þýska automaker Volkswagen fann sig í miðju hneyksli hugsanlega glæpamaður hlutföll. -Volkswagen Er spelkum fyrir milljarða í sektir, hugsanlegar glæpsamlegt gjöld fyrir stjórnendur þess, sem fyrirtækið afsökunar fyrir rigging 11 milljónir bíla til hjálpa því að slá losun próf. -Certain Dísel módel voru hannað með háþróaður hugbúnaður sem notað, þar með talið staða stýrisins og ökutæki hraða til að ákvarða bíllinn var gangast losun próf. Samkvæmt þeim aðstæðum, vélin myndi draga úr eitruðum útblæstri. En bíllinn var rigged að framhjá að þegar það var verið ekið. Útstreymi jókst 10 til 40 sinnum meiri viðunandi EPA stigum. [END spilun] DAVID J. Malan: Svo skulum taka a líta á þetta og sjá nákvæmlega hvernig þetta gæti komið til framkvæmda og hvernig þetta gæti haft áhrif á svo margir bílar eins og þetta. Svo í hendi minni hér eru stutt útgáfu sem var gefin út af EPA-- Umhverfis Protection Agency sem er US reglur stofnunarinnar sem annast umhverfismál, og þá í raun Tilkynning um lagaleg atriði sem var senda Volkswagen bara nokkra daga síðan. Svo skrifar EPA og getur um nú opinberlega, a háþróaður hugbúnaður reiknirit á víst Volkswagen ökutæki skynjar þegar bíllinn er verða opinberar losun próf og snýr fullt losun stjórnar á aðeins meðan á prófuninni. Virkni þessir bílar mengun losun stjórn tæki er mjög minnkað á öllum venjulegum akstri aðstæður. Þetta leiðir í bíla sem uppfylla að staðla í rannsóknarstofu eða prófun stöð, en í venjulegum rekstri losa köfnunarefni oxides-- eða NOx-- á allt að 40 sinnum staðall. Hugbúnaðurinn framleitt af Volkswagen er tilvitnun unquote, ósigur tæki, eins og skilgreint er í Clean Air Act í Bandaríkjunum. Þeir fara að segja að sem EPA og annað auglýsingastofu afhjúpa temprunarbúnað hugbúnaður eftir sjálfstæðum greiningu sókna á Vesturlöndum Virginia University. NOx mengun stuðlar að köfnunarefnisdíoxíð, jarðhæð óson, og fínn agnir. Útsetning fyrir þessum mengunarefni hefur verið tengd með a breiður svið af alvarleg áhrif á heilsu, þ.mt aukin astma árásir og öðrum öndunarfæra sjúkdóma sem geta verið alvarleg nóg að senda fólk á sjúkrahús. Exposure óson og agnir hefur einnig verið tengd við ótímabært dauða vegna öndunarfæra skyld eða hjarta- tengjast áhrifum. Börn, aldraðir, fólk með vanstarfsemi öndunarfærasjúkdóma eru sérstaklega í hættu á að heilsufarsleg áhrif þessara mengunarefna. Látum nægja er að segja, það er alveg alvarlega. Og við skulum fara að lesa bara einn útdráttur og þá munum við taka a líta á undirliggjandi áhrif um þetta í tengslum við bíl. Sérstaklega, Volkswagen framleidd og sett hugbúnaður í svokölluðum rafeindastýrieininguna module-- eða ECM-- af þessir bílar sem skynjaði þegar ökutækið var verið að prófa fyrir fylgni við EPA losun staðla. Byggist á ýmsum aðföngum þ.mt stöðu stýrishjóls, ökutæki hraði, tímalengd vélin er rekstur og loftþrýstingur, Þessi aðföng nákvæmlega fylgst breytur sambands prófunaraðferð sem notuð fyrir losun próf fyrir EPA vottun tilgangi. Á EPA losun próf, ökutækin ECM hugbúnaður hljóp hugbúnað sem framleitt samhæft losun niðurstöður. Á öllum öðrum tímum, ökutæki ECM hugbúnaður hljóp sérstakt veginn kvörðun sem minnkar skilvirkni í heild mengunarvarnarkerfið, sérstaklega sértækur hvatar lækkun á Lean NOx trap-- sem við munum sjá um í smá stund. Þar af leiðandi, losun NOx faldast á 10 til 40 sinnum yfir EPA samhæft stigum eftir því hvaða gerð af ökuferð hringrás. Svo er það þetta raunverulega þýðir, og Kóðinn til hugbúnaður hlaupandi á Volkswagen hefur ekki enn verið birt opinberlega, er að, á áhrifaríkan hátt, þetta jafngildi er einhvers staðar inni af kóða Volkswagen. Ef þú ert að prófa, og ef bílnum skynjar ákveðna umhverfisþætti eins stýrinu stöðu eða hreyfingu eða skortur þar á bílnum eða fjölda annarra þátta sem eru nú tilgáta að vera hluti af þessari formúlu, þeir snúa einfaldlega á fullur losun stjórna. Með öðrum orðum, þeir byrja emitting minna af mengandi efna. Annars, í öllum öðrum aðstæðum þegar það er ekki greind eins og að vera í rannsóknarstofu, þeir gera bara ekki. Og svo þú getur einfalda þetta í fleiri steypu sauðakóðanum með eitthvað svona. Ef hjólin eru að snúa en stýri er ekki, sem bendir til að bíllinn er á sumum konar snúningur strokka en í einhvers konar vörugeymsla verið að prófa, þá hegða sér eins á EPA langar þig til að. Annars ekki. Svo skulum taka a líta á stutt myndband sem tekur a líta á hvaða þýðingu eru þetta í raun vélrænt. [Vídeó spilun] -Last Föstudaginn EPA tilkynnt að sumir Volkswagen Audi bíla á milli 2009 og á þessu ári voru með svonefndan temprunarbúnaður að komast í kringum losun lögum sem ætlað er að halda loftinu hreinu. En hvað þýðir það nákvæmlega? Jæja, hafa nútíma bílar heilmikið Tölvur inni þá. Og sumir af þeim tölvum hjálpa samræma aðgerðir hreyfilsins fyrir bestur flutningur en gættu að það er ekki of mikið sorp að koma út úr útblástursrörinu. Þeir hafa í raun verið að vinna þannig fyrir nokkrum áratugum nú. Í grundvallaratriðum, sérhver hluti hreyfils A nútíma bílsins hefur skynjara eða stjórnandi á það, og þessar tölvur eru að lesa í gögnum þúsundir sinnum á sekúndu breytingar að við gerum eins hlutfall af eldsneyti til loft það er að fara inn á vélina. Þetta svindla Volkswagen og Audi módel eru dísilvélar, og diesels hafa eitt mjög mikilvægt tölva stjórnað breytum, sem er fjárhæð óbrunnu eldsneyti fara í útblæstri. Nú hljómar svo slæmt. Hljómar ekki eins og þú vilt óbrunnu eldsneyti fara í útblæstri. En í dæminu er dísel, hefur þú eitthvað kallað NOx gildra sem er tæki sem sig og gildrur fyrir köfnunarefnisoxíð sem eru mengunarefni sem myndi annars fara út í andrúmsloftið. Og áhrif þess NOx gildru er auka með óbrunnu eldsneyti. Svo temprunarbúnaður er sérstakt forrit inni þessum tölvum sem getur gert það líta út eins og bíllinn uppfyllir losun staðla jafnvel þegar það er ekki. Volkswagen hafði vandamál á höndum sínum. Dísilvélar hennar voru þekktir fyrir að fá mikla sparneytni en NOx gildru virkar bara vel þegar meira eldsneyti er notað. Þannig að bíllinn myndi uppgötva, nota þessa temprunarbúnað, þegar það var að fá losun próf, það myndi nota meira eldsneyti, gera NOx gildru vinna vel, losun væri í lagi. En þá færðu á veginum, tækið slokknar, þú ert brennandi minna eldsneyti en þú ert að setja eins mikið og 40 sinnum fleiri mengunarefni í andrúmslofti. En hvernig Heck gerði bíllinn veit að það var verið er að prófa fyrir losun farið? The EPA segir að það var háþróuð kerfi sem skoðaði hlutina eins stýrishjólið, hraði, hversu lengi vélin var á, og jafnvel loftþrýstingur. Með öðrum orðum, það var engin leið að þetta var óviljandi vegna þess að hugbúnaður var hannað mjög vandlega til að greina opinbert losunarprófunin. Það er sumir laglegur alvarlegar blekkingar og það er hvers vegna Volkswagen er í svo alvarleg vandræði. Í raun, forstjóri þeirra, Martin Winterkorn, bara steig niður. Svo hvað gerist næst? Jæja, ef þú ert einn af hálfa milljón dísel Jettas, Beatles, Golfs, Passats, eða Audi A3s fram, the góður fréttir er er að bíllinn þinn er enn í lagi að aka. Þú þarft ekki að setja það í burtu þar Volkswagen gefur muna. En á einhverjum tímapunkti að þeir eru líklega að fara að hafa að uppfæra hugbúnað inni bílnum. Þegar það gerist að þú gætir færri mílur á skriðdreka. Lögfræðingar eru nú þegar býr upp fyrir tegund aðgerðar málsókn svo eigendur gætu fá bætur á einhverjum tímapunkti í framtíðinni. En það er ekki að fara að gerast hvenær sem er bráðum. [END spilun] DAVID J. Malan: Þannig að þetta reyndar vekur áhugaverð stærri mynd spurning að treysta. Ekki satt? Allar okkar hafa iPhone eða Androids eða eitthvað í vasa okkar líklega þessa dagana, eða fartölvur á hringi okkar sem eru gangi hugbúnaður gerður Apple og Microsoft og bunches annarra fyrirtækja. En hvernig vitum við að það þessi hugbúnaður vara ert að gera er í raun hvað þetta fyrirtæki segja þeir eru að gera? Til dæmis, hver er að segja að í hvert skipti sem þú hringt á iPhone eða Android síma eða þess háttar, sem að símanúmerið er einnig ekki verið hlaðið á miðlara sumir félagsins vegna sumir forrit sem þú hefur skrifað, hvort sem það er um starfsleyfi Kerfið sjálft eins IOS eða Android, eða vegna þess að þú hefur hlaðið niður sumir þriðja aðila app sem einhvern veginn er að hlusta að allt sem þú ert að skrifa eða allt sem þú ert í raun að segja. Hvernig veistu að þegar þið eru í gangi Clang eða gera til að safna saman þinn eigin hugbúnað í CS50, hvernig Ert þú átt starfsfólk að CS50 er, með því að CS50 bókasafn, hefur ekki verið að skrá þig á hverjum band sem þú hefur alltaf fengið eða sérhver tomma sem þú hefur alltaf fengið? Jæja, þú vissulega líta á the uppspretta merkjamál fyrir eitthvað eins CS50 bókasafn, þú getur litið á the uppspretta merkjamál fyrir Linux stýrikerfi gangi á CS50 IDE. En ótrúlega kynningu var gefið til baka í 1984 í móttöku Turing verðlaunin frá a mjög frægur tölva vísindamaður þekkt as-- heitir Ken Thompson sem fékk Turing verðlaunin sem er tegund af tölvunarfræði er Nobel Prize, ef þú vilt, fyrir vinnu sína á stýrikerfi sem heitir Unix, sem er mjög svipað í anda að það sem við notum sem er Linux. Og spurningin sem hann spurði í hans þakkarræðu, fyrst og fremst um ramma fyrir ár og ára umræðu um traust og öryggi, var þetta. Að hve miklu leyti ætti maður að treysta yfirlýsing um að program-- stykki af software-- er ókeypis Trójuhestar? Kannski er það enn mikilvægara að treysta fólk sem skrifaði hugbúnað. Og í raun höfum við tengt að tala um að hann gaf þegar hann hefur tekið þessi verðlaun í '80s á heimasíðu CS50 er undir Fyrirlestrar síðu fyrir í dag. Því það sem þú munt sjá er að hann gefur í raun nokkuð einfalt dæmi um hvernig jafnvel þýðanda eins Clang eða hvað Vistþýðendur aðrir hafa notað í fortíðinni, hvað ef embed in þýðanda vér sjálf erum að nota er lítið ef ástand sem í raun segir, ef þú tekur eftir að þetta númer er að nota GetString virka eða GetInt virka, fara á undan og setja a bakdyramegin eða Trojan hestur þannig að þessi áætlun nú hefur sumir núll og þau sem gera eitthvað illgjarn. Skrái allt þitt mínútum, hlaða þessi gögn að einhverjum miðlara, eða í raun neitt. Og hvað Ken Thompson fer að gera í ræðu hans er að sýna fram á að jafnvel þótt þú hefur aðgang að upptökum Kóðinn í þýðanda sem illgirni gæti verið að gera þetta, það skiptir ekki máli vegna þess að það er þetta kjúklingur og egg veruleiki undanförnum ára hvorved vistþýðendur eru notuð til að safna saman sjálfir. Með öðrum orðum, leiðin til baka þegar einhver þurfti að hafa skrifað fyrstu þýðanda. Og eftir það, hvenær þeir hafa uppfært þýðanda með því að breyta kóðann hennar, bæta lögun og recompiling það fyrir fólk eins og okkur til að nota vel, þeir eru að nota gamla útgáfa af þýðanda að safna saman nýja útgáfa af þýðanda. Og ef þú taka a líta á tal, sem hann gaf, þú munt sjá að vegna þess circularity, þú getur í raun hafa galla eða Trójuhestar innbyggð í hugbúnaði við erum að nota. Og jafnvel ef þú horfir á Kóðinn fyrir þá forrit, það gæti ekki einu sinni að vera augljóst vegna þess að brögð er í raun í sumum eldri útgáfu af a þýðanda sem síðan hefur verið sprauta ógn í hugbúnaði okkar. Sem er bara að segja, að við í raun getur ekki og ætti ekki traust hugbúnaður hlaupandi á fartölvur okkar eða sími eða allir tala af stöðum. Og í raun, síðar í þessari önn þegar við byrjum að tala um forritun vefur og í raun að byrja að byggja vefur umsókn okkur, við munum tala um þetta ógnir og aðrir. Nú, þú gætir hafa furða og tekið að það var agnarsmár Darth Vader í úrklippum sem The Verge var að sýna það um Volkswagen. Ef þú hefur aldrei séð, ég hélt að við ættum að létta skapi vegna þess að þetta er allt mjög niðurdrepandi og ógnvekjandi. Ég ætla að horfa til baka á Super Bowl 2011 þegar auglýsing með Volkswagen-- og þetta nánast gerir þá likable again-- frumsýnd í fyrsta sinn í sjónvarpinu. Það er 60 annað myndband að ég held að þú munt njóta. [Vídeó spilun] [TÓNLIST - Þema frá "Star Wars"] [Hundur Barks] [Bíllinn byrjar] [END spilun] DAVID J. Malan: Já. Ég var bara að skoða. Að bíllinn er á lista yfir brot. Allt í lagi. Þannig að við líta á sumir sauðakóðanum smá stund síðan. Og hér er stærri bút af sauðakóðanum kóða sem við höfum séð nokkrum sinnum svona langt. Og við skulum nota þetta tækifæri nú að kynna nýja forritun tækni sem við gerðum sjá algorithmically í síðustu viku þegar við skoðuðum mergesort. En við skulum móta það og sjá hvernig við gætum notað það í raun kóða, og þá erum við að fara að nota þetta tækni niður götuna mest líklegt til að leysa ákveðin önnur vandamál. Þannig að þetta var einn af fyrstu verkefnum við alltaf skrifaði, að vísu í sauðakóðanum kóða. Og hvað þetta forrit leyft okkur að gera námskeið var að finna Mike Smith í símaskránni. Og taka einkum línum átta og 11 sem höfðu þetta að fara að yfirlýsingu. Og í raun, víst tungumál, C meðal þeirra, í raun gera hafa a Yfirlýsing um að er bókstaflega fara til að leyfa þér að hoppa á tiltekna línu. Það er almennt hleypa brúnum því það getur verið mjög auðvelt misnotuð og þú getur byrjað að stökkva þinn program um allt öfugt að nota hvers konar rökfræði og stjórn rennsli sem við höfum notað svona langt með bara lykkjur og skilyrði og þess háttar. En við getum einfalda þetta reiknirit í sauðakóða kóða sem hér segir. Í stað þess að þetta endurtekningu eða lykkja nálgun þar sem við höldum að fara til baka og aftur og aftur til að stilla þremur, Hvers vegna eigum við ekki punt bara svona og fleira almennt segja í takt sjö og 10, bara skipta þessir tveir pör af línum með, annars ef Smith er fyrr í bókinni við munum leita Mike í vinstri hluta bókarinnar. Annars ef Smith er síðar í bók, leita Mike í hægri helmingur bók. Og taka nú þegar circularity. Ekki satt? Ég er að leita að Mike í símaskrá og þá Ég lenti að lokum kannski lína sjö eða kannski lína 10 og kennsla mín að mér er að leita fyrir Mike í helmingi símaskránni. Jæja, hvernig leita ég að Mike? Ég er í miðjum leita Mike, hvers vegna ert þú svona að senda mig í hring? En það er allt í lagi vegna þess að það er gerast við stærð af the vandamál, eins og skrifað í línu 7 og 10? Við erum ekki bara að segja leit fyrir Mike, leita Mike. Við erum sérstaklega að segja það? Leita eftir honum í vinstri hluta hægri helminginn sem er í raun helmingur the stærð af the vandamál. Svo það er í lagi að við erum konar taka þátt í þessu circularity, þetta hringlaga rök, því að minnsta kosti að við erum gera vandamálið minni og minni. Og að lokum við erum að fara að ná að svokölluð grunn tilfelli þar við höfum bara eina síðu left-- sem sjálfboðaliði okkar í síðustu viku did-- við höfðum eina síðu vinstri og þá erum við ekki að halda áfram að leita að Mike Smith vegna þess að hann er annað hvort á þessari síðu eða hann er ekki. Og hvernig getum við innleiða þessa hugmynd, þetta konar circularity í raun kóða? Jæja, við getum nýta tækni sem er almennt þekktur eins og endurkvæmni. Og við höfum séð þetta í sauðakóðanum fyrir mergesort síðustu viku. Muna að þetta var sauðakóðanum fyrir sameiningu tagi. Það er að öllum líkindum jafnvel einfaldara en kúla eða val eða innsetning konar bara hvað varðar einfaldleika sem þú getur tjáð það. En það er vegna við erum konar circularly sagði, að leita að einhverju með því að leita að því aftur. En við erum að leita annað hvort á vinstri helminginn eða hægri helminginn og þá loksins erum við sameina í þessu tilfelli. En hér líka, með þessir tveir Raða línur, gerði við höfum aftur á þessu Hugmyndin um endurkvæmni. Og concretely hvað þetta þýðir, í samhengi við reiknirit, er að reiknirit er endurkvæma ef það notar eða kallar sig. Eða sem kröfur um C, fall er recursive-- fall sem kallast foo er endurkvæma ef foo, einhvers staðar í frumkóða hans, kallar virka foo sjálft. Og það er slæmt ef allt foo alltaf gerir er að hringja sig aftur og aftur. Það er allt í lagi ef foo hættir að lokum, sem gerir Mergesort, með því að segja, bíddu í eina mínútu, ef þetta vandamál er frábær lítill, til dæmis, eða fann ég þann sem ég er að leita að, bara aftur. Ekki endurkvæmt, ekki lotubundið kalla mig aftur. Og svo skulum taka a líta á hvernig þetta gæti raunverulega vinnu. Þannig að ég ætla að fara á undan og opna upp tvö Kóðinn dæmi hér. Einn sem er kallað Sigma 0. Og þetta er alls ekki endurkvæma, en við skulum taka a líta á hvað þetta forrit gerir. Ég hef færðu út allt athugasemdir frá henni en allt af the uppspretta merkjamál á CS50 er website hefur athugasemdir ef þú vilja til að lesa í gegnum það aftur seinna. Og við skulum gera a par af heilindarathugunum hér. Svo efst á þennan kóða, við höfum eru cs50.h. Hvað þýðir þetta að gera? Hvers vegna er það hér? Í skilmálum sanngjarnt leikmaður. Hvað þýðir það að gera? Já. Áhorfendur: Svo að GetInt aðgerð virkar. DAVID J. Malan: Svo að sem GetInt aðgerð virkar. Vegna inni þessa skrá, CS50.h, sem við munum sjá áður en langt í Skilmálar kóða þess, hefur fullt af störfum declared-- GetInt, GetString, og fullt af others-- og nema við höfum í raun að Hafa línu, þýðandinn Clang er ekki fara að vita að það er til staðar. Og sama gildir um línu Tveir þar Int er skilgreint printf, sem er fall við halda áfram að nota töluvert. Nú, lína fjögur virðast a lítill Funky vegna þess að það er bara einn Ferja. Það fékk semíkommu, ekki hrokkið axlabönd, ekki númer innan þess. En hvað gerði við köllum þetta hlutur í vikur áður? Já. Svo frumgerð. Og hvers vegna eigum við að hafa frumgerð sem virðist að vera svolítið óþarfi oftast vegna þess að við venjulega sjá virka aftur síðar í skránni, ekki satt? Svo hvers vegna ekki að have-- þú ert bara þú klóra höfuð þitt en ég tek það. Já. Áhorfendur: [inaudible] virka eftir helstu. DAVID J. Malan: Einmitt. Svo sem þýðandinn þekkir þig mun að lokum að skilgreina eða framkvæma að virka eftir helstu, væntanlega. Svo Clang og mest Þýðendur eru konar heimsk og þeir bara vita hvað þú segir þeim. Og ef þú vilt nota fall sem heitir Sigma, þú kenna betri þýðanda að það er til staðar fyrirfram. Nú, helstu sjálft, jafnvel þó að það er fullt af línum, er nokkuð kunnuglegt vonandi við nú. Það fékk að gera á meðan lykkja en tilgangur hennar í lífinu hér virðist er að fá heila tölu frá notanda. Og bara halda pestering honum eða hana þar til þeir vinna. Þá í samræmi 16 Ég hef áhugavert símtal. IntAnswer. Sem á vinstri hönd hlið gefur mér Int sem getur store-- heitir Answer-- sem er að fara að geyma, greinilega, skilagildi sigma. Svo er Sigma bara handahófskennt en þroskandi nafn sem ég hef gefið í aðgerð en tilgangur hennar í lífinu er að taka einn argument-- við munum kalla það N í þessu case-- og bara til að taka manntal þeim fjölda plús hvert jákvæð tala sem er minni en það. Svo ef ég fara í númer 2 til að Sigma, ég vil bæta við 2 plús 1 auk 0-- ekki 0-- svo gefur það mér 3. Ef ég fara í 3 til morðingja, ég vil hafa 3 plús 2 plús 1, sem gefur mér 6. Og svo framvegis. Svo það bætir bara upp alla tölur minna en eða jafnt og henni. Nú, hérna ég ætla bara að fara að prenta út svarið. Svo eins og a fljótur andleg heilbrigði stöðva, við skulum gera Sigma 0-- punktur rista Sigma 0-- og láta mig slá í 2. Og ég fæ reyndar 3. Leyfðu mér að slá í 3. Ég fæ örugglega 6. Og ef einhver getur gert stærðfræði fljótt, ef ég geri 50 það er ég að fara að fá? Áhorfendur: [inaudible]. DAVID J. Malan: Jæja, engin. En 1.275 sem er nokkuð nálægt. Þannig að þetta er afleiðing af að gera 50 plús 49 plús 48 plús 47 plús 46 alla leið niður í 1. Svo það er allt Sigma gerir. En við skulum sjá hvernig við höfum framkvæmda það núna. Svo er hérna fallið sjálft. Og þetta virðist ekki hafa nokkuð að gera með endurkvæmni enn. Í raun erum við með því að nota gamla skólanum tækni. Ég er að virkja breytilega heitir summan núll, þá hef ég foreloop hér, og ég er að lýsa yfir Int heitir Ég, setja það jafn 1-- þó að ég gæti sett það jafn núll, en þar sem ég er að gera viðbót, Hverjum er ekki sama ef það er núll eða einn. Það er að fara að hafa engin áhrif. Þannig að ég ætla iterating svo lengi sem ég er minna en eða jafnt og m, sem er rök sem var samþykkt í. Og þá er ég að halda bara incrementing I. og innsýn lykkju allt sem ég er að gera er að gera summan plús jafngildir I. Og það er vísvitandi. Ég vil ekki að gera, í þessu ræða, eins og summa plús plús. Ég vil í raun og veru að bæta núverandi gildi I sem heldur að fá stærri og stærri og stærri í gangi stemma. Og þá er ég aftur summa. Og svo svarið fær gildi summa. Og þá er ég að prenta það út. Svo er það tækifæri hér, þó að eins konar einfalda þetta númer eðli og hvers konar höggi einn er hugur í skilmálar af the einfaldleiki jafnvel þótt það tekur tíma að raða af þakka hvers vegna þetta er öflugur í þessum litlu dæmum. Hér er Sigma one-- svo önnur útgáfa af þessum kóða. Allt upp efst er eins svo sama sagan gildir eins og áður. En nú skulum líta á framkvæmd sigma sem Ég hef tálga niður í aðeins þessir lines-- fjórar línur af kóða, í raun, auk sumir hrokkið axlabönd og hvítt rúm. En hvað er ég að gera? Ef m er minna en eða jafnt og núll, ég þarf að eins konar höndla að frábær einfalt mál. Og ef þú rétt mér núll eða eitthvað neikvæð sem er bara skrýtið, Ég ætla bara að fara að geðþótta en stöðugt aftur núll. Ég vil ekki þetta að komast í einhverju skrýtnu Infinite lykkja vegna þess að neikvætt gildi. Þannig að ég ætla bara að segja, ef þú gefur mér núll eða minna, ég er aftur á núlli. En það er gott því það er að einni síðu af símaskránni sem er eftir. Ég er að ætla mjög sérstaka vandamál og ekki að kalla eitthvað endurkvæmt. En í línu 31, hvað get ég virðist vera að gera? Svigar eru bara að halda það vonandi svolítið skýrari. En allt sem ég er að gera er ég aftur m-- hvað þú hönd me-- plús á gildi m-- miður, að viðbættu virði morðingja af m mínus 1. Svo hvað þýðir þetta? Ef þú gefur mér númer 3 sem inntak, svarið sem ég vil fá að lokum er 6 vegna 3 plús 2 plús 1 gefur mér 6. En hvernig get ég hugsa um hvernig þetta númer er í gangi? Í fyrsta skipti sem ég kalla Sigma og ég fara í verðmæti 3, það er eins og að segja á stykki pappír, hér er gildi 3 og ég hef verið samþykkt þetta sem morðingja. 3 er augljóslega ekki minna en 0 svo sem IF skilyrði gildir ekki um. The annar gerir það. Svo hvað á ég að gera? Ég vil aftur m, sem er 3, auk Sigma af m mínus 1. Svo láta mig halda utan um þetta. Ég ætla að setja þetta stykki af pappír niður. Og hvers virði, að vera ljóst, er ég að fara að fara í morðingja á þessum tímapunkti í sögunni? Hvað fjölda? 2, ekki satt? 3 mínus 1 er 2. Þannig að ég þarf bara smá rusl úr pappír hér. Svo nú Sigma er að fá aftur kallað. Og ég hef vísvitandi sett þetta niður vegna þess að það er svona eins og stansa að útgáfa af sögunni því nú er ég áherslu á merki af m mínus 1. Svo m var 3, m mínus 1 er 2. Svo hér er 2 sem ég hef verið samþykkt. 2 er augljóslega ekki minna en 0 þannig að mál ekki við. Annað sem ég aftur m, sem er þetta hlutur, auk Sigma hvers virði? Svo ef Sigma af 1-- vegna m er núna 2 þannig 2 mínus 1 er 1. Svo nú hef ég bara gildið 1. Ég er liggur bara númer 1 við virka sigma-- eða mig here-- svo 1 er augljóslega ekki minna en núll, enn ekki við. Else aftur 1 plus Sigma hvað? 0. Svo láta mig muna bara það. Ég næ aftur að því síðar. Nú ætla ég að fara á undan og hripa niður fjölda 0 því það er rök mín eða breytu. Ég stóðst tölunni 0 og að lokum þetta ferli þess bara að endurtaka mig auglýsingu nauseum er hætta vegna þess að það á ég að gera strax þegar ég sé þetta 0? Ég aftur á núlli. Svo nú þú ert að baka söguna. Ef ég fer nú aftur í tímann, hvað var nýjasta hlutur Ég gerði ef þú værir bókstaflega trekkja myndskeið? Ég ætla að taka upp nýjustu 1 og það gefur mér 1 plús 0 er 1. Ef ég halda trekkja að Sagan, sem er að fara að gefa mér 2 plús þetta gangi gildi, sem er 1. Svo er það 3. Og þá er ég að fara að halda trekkja. Þegar ég setti fyrst niður fjölda 3-- svo 3 plús 3 gefur mér 6. Og nú, ef þú hefur rewound vídeó upp að þessu stigi, þetta var mjög Fyrsta spurningin sem ég spurði. Þegar liðin 3, hvað er Sigma af 3? Það er reyndar 6, summan af öll þessi stykki af pappír. Þannig að ef það tekur smá stund að vefja um skoðun um, það er fínt. En íhuga það var little-- það var mjög vísvitandi að ég staflað þessar tölur ofan á hvor aðra. Það er góður af eins og að hafa memory-- met í tíma, eins og hreinsinn í vídeó, sem ég get örugglega baka í. Og við erum að fara að koma aftur til sem samlíking í réttlátur a lítill hluti. En fyrst, það kemur í ljós að það er a einhver fjöldi af geeks og fyndið fólk, Ég giska á Google. Myndi einhver sem er mjög góður á Googling huga að koma upp fyrir réttlátur a augnablik og hjálpa mér að leita að einhverju? Mjög, mjög lágt lykill. Einhver sem er aldrei koma upp áður, kannski. OK. Já? Láttu ekki svona. Koma niður. Hvað heitir þú? SAM: Sam. DAVID J. Malan: Sam, koma niður. Þetta er sama. Gaman að hitta þig. Hey. Komdu yfir. Svo allt sem ég þarf að gera, ef þú gætir, Sam, hér er Google. Getur þú leitar að hugtakið endurkvæmni? Spilla ekki. Og nú let's-- já. OK Smelltu það. Betri smell sem. Ahh, fá það. Nei? OK. Svo skulum gera nokkrar aðra. Ekki svo mikið skyld námslega hér, en hefur þú alltaf leitað á Google að anagram? SAM: Nei DAVID J. Malan: OK. Leita að anagram stað endurkvæmni. Hvernig væri út og suður. Þú alltaf leitað til og suður? Nú, þetta er svolítið erfitt að sjá en vonandi everything's-- lagi. Það er bara þú og ég að njóta þessa. OK. Svo að lokum, þetta one's-- það er lítið út og suður. Nú gera tunnu rúlla. Wonderful. Allt í lagi. Kærar þakkir til Sam. Gjörðu svo vel. Takk. Svo hvað er að gerast í öllum þessara vitleysu dæmum? Svo í raun, undir hetta Milljónir Google línur af kóða greinilega er nokkur kjánalegt IF skilyrði sem eru í raun stöðva ef notandi hefur slegið í þessari setningu, gera eitthvað sem líklega tók nontrivial magn af tími að innleiða bara að vera skemmtilegur á þennan hátt. En það er allt það snýst niður undir hetta. En, auðvitað, Recursion er af geekier dæmi meðal þeirra sérstökum bragðarefur. Og vafalaust er það öðrum þarna úti eins vel að við höfum kannski ekki einu sinni komst bara ennþá. Svo taka a líta, eða íhuga nú eftirfarandi forrit, og vissulega grípa eitthvað af þessum á leið út. Ég ætla að fara á undan og opna forrit sem er ætla að reyna að skipta tvö gildi. En áður en við förum þangað, við skulum gera þetta. Gætum við fengið eitt sjálfboðaliði, ég held? Vilt þú áhuga á að gerast sjálfboðaliði? Nei? Komdu upp. Komdu upp. Allt í lagi. Þannig að nafn þitt er hvað? LAUREN: Lauren. DAVID J. Malan: Lauren. Komdu upp, Lauren. Svo Lauren er að vera áskorun hér eins og hér segir. Gaman að hitta þig. Svo hefur Lauren hér fyrir framan af tveimur hennar tómum bolla. Og við höfum sumir appelsínugult safa og mjólk og við erum að fara að fara undan og gera eftirfarandi. Við erum bara að fara að fylla þetta. Nokkrar aura af mjólk hérna og við skulum fylla smá appelsínusafa hérna. Og fyrir framan öllum þessi áhorfendur meðlimir, skipti á tvö gildi þessara bolla. Setja appelsínusafa í mjólk bikarnum og mjólk í appelsínusafa bikarnum. Hvernig myndir þú gera þetta ef þú værir á heim og hafði aðgang að öðrum birgðum? LAUREN: Setjið það í annan bolla. DAVID J. Malan: OK. Svo skulum við hafa tímabundið breyta, ef við munum. Og fara á undan núna og innleiða þetta sama swap aðferð. Svo gott. Við höfum sett OJ í tímabundið breyta, mjólk í Stjtíð breytu, og nú tímabundið breyta í mjólk breytu. OK. Svo mjög vel gert hingað til. Svo kemur out-- halda að hélt fyrir réttlátur a augnablik. Hér bara gáfuð það upp a hluti, þetta væri samsvarandi C póstnúmer að við framkvæmd bara. Við höfðum tvær inntak, a og b, sem báðar sem við munum bara segja fyrir einfaldleika eru INT er. Og eftir hér, ef ég vil skipta gildin tveimur breytum, A og B, við þurfum örugglega milliliður, a tímabundin breyta, tímabundið bolli, sem má smella hella einum af þeim gildum þannig að við höfum tákn fyrir það. En þá er kóðinn nákvæmlega sem Lauren hér til framkvæmda. Nú, bara til að fá lítið geggjaðri, kemur í ljós að þú getur gert þetta án þess að tímabundið breyta. Til að gera þetta almennilega, þó, við erum að fara að þurfa að svindla með einhverjum efnafræði. Við höfum nokkrar auka bolla hér. Svo næsta hlutur sem lítur eins og mjólk og vatn perhaps-- eða mjólk og OJ-- er við hafa sumir vatn, þannig að við munum fylla þennan upp með nokkrum aura af skýrum vatni. Það er líklega of mikið. Já. Það er örugglega of mikið. Halda á einni sek. Og nú höfum við olíu, sem, eins og ég man frá miðjum skóla efnafræði bekknum, vonandi er það ekki blanda með vatni. En það er góður af eins konar lítur út eins og mjólk og OJ. Svo nú, án þess að nota tímabundið breyta, getur þú skipta þeim tvö gildi? Svo olíur fer í vatn bolla, vatn fer inn í olíu bolla. LAUREN: Engin önnur bollar? DAVID J. Malan: Engin önnur bollar. Og ég hef í raun ekki prófað þetta áður en þetta ár svo ég veit ekki hvort þetta verður raunverulega vinna efnafræðilega. Það var ekki að gerast. Er það að vinna? Allt í lagi. Svo aðgreina? Good. Nú fengum að fá vatn í hinn bolla. Klárari efnafræði útstöðvar gat sennilega gera þetta betur en ég. LAUREN: Vatnið er á botninum. DAVID J. Malan: The water-- sem var hvað er lykillinn að síðast þegar við gerðum þetta. Þú þarft að gera það í réttri röð. Já. Það er allt í lagi. Svo nú höfum við tvo bolla af olíu. OK. Það er allt í lagi. En efnafræðilega ef þetta virkaði en I-- LAUREN: Þetta er vatn. DAVID J. Malan: Það er að mestu leyti vatn. Allt í lagi. En það er samt sama bolli og áður. Svo hella it-- reyna það þarna. OK. Þetta er gott að nota bekknum tíma í dag. OK. Svo we-- nú gott. Eiginlega. Allt í lagi. Svo mjög góður. Þakka þér að Lauren. Mjög vel gert. Svo bara til að blása huga þínum, og þetta er ef til vill eitthvað að spila með ef þú vilt í CS50 ID, þú getur í raun skipta tvær breytur án þess að nota tímabundið heiltölu. Og þetta er samsvarandi C póstnúmer. Og ef þú manst frá síðasta Miðvikudagur, við kynntum, ef stuttlega, sumir nýir rekstraraðilar C og gerir einhver minnist hvað litla gulrót tákn er, að lítið þríhyrningslaga Táknið frá lyklaborðinu táknar? Hvað Bita rekstraraðila? Áhorfendur: EXOR. DAVID J. Malan: EXOR. Exclusive Or. Svo ef þú vilt, bara til gamans á heim, til að gefa a og b Two handahófskennt gildi eins og allir eight-- og I myndi velja átta bita gildi. Ef þú gerir þetta með 32 bita, þú munt mjög fljótt fá leiðindi. En bara að gefa sér átta bita gildi sem er hvað, einn eða tveir, og gefa b svipuðum gildi. Og þá með skilgreiningu af XOR frá síðasta miðvikudag, beita þeirri smátt og smátt, hver þessir átta bitar í hverju a og b, og þá gera það nákvæmlega á þessum kóða. Og það er ekki rangt það þú sérð hér á skjánum. Það snýst örugglega um að þremur XOR rekstri og einhvern veginn dularfullur a og b munu skiptast stöðu án þess að tapa öllum upplýsingum. Svo er olía og vatn bragð er Næst raunverulega heimi endurfæðingu Ég gæti hugsað að líkja því. En það er örugglega auðveldara að nota tímabundið breytu, eins og í þessu tilfelli hér. Og þetta líka er tækifæri að segja, of, svona ör hagræðingu, sem tölvunarfræðingur myndi segja, en góður af gaman að brag um hvernig þú gerðir þetta án eins skipta með auka breytu, það er ekki allt sem sannfærandi. Vegna þess að vista 32 bita, sem um er að ræða raunveruleg int, er ekki allt sem sannfærandi á kerfi þar þú gætir verið að nota tugum megabæti eða jafnvel meira svo minni þessa dagana. Og í raun, þegar við fáum til síðari Heimadæmi og þú framkvæma álög afgreiðslumaður og þú munt vera áskorun að gera það með þetta eins lítið RAM og eins lítið tími og hægt á computer-- þér enn hafa viku til að hrinda í framkvæmd it-- þú munt have-- þú munt vera áskorun að draga þessar auðlindir. Og það er í raun eina tilefni þessa önn þar sem þú munt vera hvattir til að raka burt jafnvel besta árangur kostar annars. Svo what-- hvernig getum við sjá þetta í raun kóða? Leyfðu mér að fara á undan núna og opna dæmi sem vísvitandi er kallað Nei Swap því það er ekki í raun skipta breytur eins og þú í raun getur átt von á. Svo skulum taka a líta. Hér er forrit sem hefur ekki CS50 Bókasafn gangi, bara venjulegu I / O. Nú höfum við frumgerð fyrir skipti áðan sem bara þýðir það er got að vera skilgreind síðar. Og hér er aðal. Ég úthlutað geðþótta x og y, hver um sig, gildin I og II bara vegna þess að þeir eru lítið og auðvelt að hugsa um. Og þá hef ég bara fullt af printfs þar sem ég hef geðheilsu stöðva. x er 1 og Y er 2 er væntanlega hvað þessir printfs segja. Svo engin galdur svona langt. Þá ætla ég að halda því fram með prenta def, skipta punktur punktur punktur. Ég ætla að hringja í skipti virka, sem liggur í x og y. Og við skulum gera ráð fyrir því hér að skipti er hrint í framkvæmd nákvæmlega eins og það var í smá stund síðan með tímabundna breytu. Og svo ég kröfu djarflega, skipti. x er nú þetta og y er nú það. En the skrá, að sjálfsögðu, heitir No Víxla. Svo skulum sjá raunverulega hvað gerist. Ef ég safna saman enga skipti og þá do ./noswap, x er 1, y er 2. Makaskipti skipti. x er 1, y er 2. Svo það virðist í raun að vera gölluð jafnvel þó swap-- skulum fletta niður now-- er framkvæmd nákvæmlega á því númer Ég lagði stund síðan. Þannig að við erum ekki að fara að fá ímynda með XOR efni fyrir nú. Þetta líka, ætti að virka eins og með mjólk og OJ, en það virðist ekki vera að virka. Svo skulum gera þetta aftur. Kannski ég var bara ekki að keyra það rétt. Svo skulum hlaupa No Víxla aftur. Kannski I-- nr. Svo það er bara ekki að virka. Svo skulum gera smá geðheilsu stöðva. Leyfðu mér að fara á undan hér í Swap og bara bæta við, bíddu í eina mínútu, a er% i / n og við skulum stinga í verðmæti a. Vegna þess að ég vil virkilega til að sjá hvað er að gerast. Og reyndar, þetta er a kembiforrit tækni sem þú gætir verið að nota í vinnutíma eða heima þegar, ætt við fyrri hluta Dans Video Armendáriz í PSET3 þar sem við kynnt prenta skýring sem sem mælt er með tækni, að minnsta kosti til einfaldra tilvikum. Leyfðu mér að fara á undan og keyra gera nei skipti aftur, ./noswap. Áhugavert. Svo eftir það virðist vera satt. x er 1, y er 2, en er 2, þegar B er 1. Svo þessir tveir einhvern veginn fékk skipti en x og y eru ekki að fá skipti. Svo til að vera skýr, hvað er að gerast er, hér hef ég x og y og þeir eru breytur sveitarfélaga í Umfang helstu, ég liggur í x og y að skipta. Nú, skipti, sem sérstakt fall, er ókeypis að hringja röksemdir eða breytur eitthvað þess sem það vill. Foo eða bar eða X eða Y eða a eða b. Bara til að gera ljóst að þeir eru ekki sá sami og X og Y eru í sjálfu sér, Ég hef sagt a og b. En við gátum kalla þá eitthvað sem við viljum. Og svo það lítur út eins og skipti er samþykkt x-- AKA a-- og það er berist y-- AKA b. Einhvern veginn þessar þrjár línur eru skipta þau gildi nákvæmlega eins Lauren gerði með mjólk og OJ. En þegar við að prenta út Gildin, a og b eru örugglega skipta en x og Y hefur engin breyting þá. Muna að X og Y eru upp hér. Svo við getum séð þetta í gegnum Önnur aðferð eins vel. Og þetta er líka tækni innbyggð í Heimadæmi þrjú. Við skulum fara á undan og gera þetta í CS50 ID ef þú hefur ekki nú þegar. Á hægri hönd hlið við hafa þetta Kembiforrit flipann. Og ef þú opnar þetta upp, það er einhver yfirnáttúrulegt upplýsingar sem er kastað á þig í upphafi. En við skulum stríða þetta sundur alvöru hratt. Svo einn, þú sérð staðværar breytur. Kemur í ljós að byggja inn CS50 IDE og a einhver fjöldi af umhverfi forritun meira almennt, er aflúsara. A tól sem gerir þér kleift að sjónrænt séð hvað er að gerast inni í forritinu án þess að þurfa að grípa til að bæta printfs og byggja og keyra og bæta printf er og setja saman og gangi, sem þegar hafa í skrifstofutíma eða heimili, er líklega fá ansi leiðinlegur. Svo hér, í aðeins augnablik, erum við fara að sjá í rauntíma gildin staðbundnar breytur okkar. Við erum líka að fara að vera fær um að setja það sem kallast Viðmiðunarmörk sem eru tækifæri í áætlun mína til að gera hlé framkvæmd á tilteknum línu af kóða sem ég er forvitinn um. Ekki satt? Þessi forrit keyra í hættu annað. Það er góður af gaman fyrir okkur hægari mönnum að vera fær um að gera hlé, taka a augnablik, sjá hvað er að gerast í kringum ákveðin lína af kóða án áætluninni plægja í gegnum það og klára alveg. Svo a Rofstaðir að fara að leyfa okkur að brjóta og hlé á ákveðnum stað. Call stafla er fínt leið segja hvaða aðgerðir eru nú vera kölluð í augnablikinu. Main er alltaf kallaður fyrsta. En ef Main kallar virka heitir Swap, við erum í raun að fara að sjá þetta turn af störfum sem hafa verið kallað í öfugri tímaröð. Svo skulum sjá það. Ég ætla að minnka hann. Ég ætla að fara aftur í númerið mitt. Og bara vegna þess að ég vil að vera smámunasamur hér, Ég ætla að fara á undan og smelltu bara vinstra megin við línu fimm. Og það skapar rauða punktur. Og taka á hægri hönd hlið að aflúsara veit, hey, Ég sagði bara breakpoint á noswap.c lína fimm, sérstaklega á þessari línu af kóða. Svo aflúsara veit að ég hafa beðið um að í næsta skipti Ég keyrt forrit það hlé minn framkvæmd þar frekar en bara keyra allt hlutur frábær fljótur. Svo nú er ég að fara að smella á Debug hnappur á the mjög toppur af the IDE og það er að fara að gera eftirfarandi. Það er að fara að opna upphaflega nokkuð skuggalegir að öðru tengi window-- Remote kembiforrit frá hýsa svo og such-- og við munum koma aftur til það allt sem þýðir fyrir löngu. En hvað er mikilvægt fyrir nú er sú að rauður punktur var laminn, aflúsara hefur vísvitandi bið execution-- ekki á þeirri línu per se en á fyrsta lína af raunverulegu kóða í að virka. Og það er hvers vegna línan sjö er nú auðkenndur með gulum. Og nú skulum kíkja á hægri hönd. Það lítur út eins, við vanræksla, fallega nóg, x er hvaða gildi? 0. Og y hefur hvaða gildi? Zero. Og það er að vænta í þeim skilningi sem x og y-- að gula line-- hefur ekki framkvæmd enn. Svo x ætti ekki að hafa gildið 1. Það gæti hafa önnur gildi, svokölluð sorp gildi. Og við fengum heppinn í því það er núll á þessum tímapunkti, í raun. Svo nú er það bara nokkrar hnappar við þurfum að hugsa um þegar kembiforrit á þennan hátt. Tilkynning hér, höfum við play takkann. Og ef við spilum eða högg halda áfram, það er bara að fara að keyra í gegnum restin af the program eða þar til hann lendir annar mörk. En ég hef ekki sett önnur Viðmiðunarmörk svo er það bara að fara að keyra í gegnum enda. Sem eins konar sigraði í Tilgangur poking í kring. Þannig að í stað, mér þykir vænt um Þessi tákn til hægri. Og ef ég sveima yfir þá, eins og þú ættir líka, þú munt sjá litla tips-- tól ábendingar. Þetta er skref yfir. Nú það þýðir ekki að Sleppa Eftirfarandi lína af kóða. Það þýðir bara framkvæma það og að færa í næsta, að færa í næsta, að færa í næsta. Með öðrum orðum, í gegnum sem hnappur, get ég gengið gegnum minn númer eitt skref í einu. Línu fyrir línu, bókstaflega. Nú, til hægri á það, það er annað að við munum sjá í bara smá stund. Þetta er svokölluð Skref Into táknið sem er að fara að leyfa mér kafa í annan valkost. En við skulum sjá þetta í aðeins augnablik. Þannig að ég ætla að fara að smella stíga yfir. Og nú eftir, eins og ég smelli þessi hnappur efst til hægri, hafa augun u.þ.b. undir Local Breytur og sjá hvað gerist x. x er nú 1 vegna þess að Gula línan hefur nú framkvæmt og við höfum flutt á línu 8. Og í bara smá stund y ætti vonandi að verða 2. Nú, ekkert áhugavert gerist fyrir a hluti. Allt þetta er er printf. Og taka í efri flugstöðinni minn glugga, ég sjá framleiðsla prenta def. Og nú þarf ég að gera Ákvörðun sem forritari. Ég get stíga yfir þessari línu númer, framkvæma það en ekki fá forvitinn um hvað er inni. Eða ég get í raun stíga inn í það og fara inni Víxla sig. Svo skulum gera hið síðarnefnda. Leyfðu mér að fara á undan og smelltu ekki farið, yfir en skref inn. Tilkynning, allt í einu gluggi breytingar að varpa ljósi á fyrsta lína af kóða í Víxla. Það er lína 21. Og nú, hvað er svona funky er að ef þú lítur yfir hér, eins og búist, komma b er 1 og 2, í þessari röð. Hvers vegna er afleysingamanneskja 32.767? Hugfast að afleysingamanneskja, líkt tóm bolli í smá stund síðan, er lýst hér á línu 21. Hvers vegna 32,000- Ég meina, hvers vegna er það bara sumir furðulegur gildi? Já? Áhorfendur: Það er ekki frumstilla. DAVID J. Malan: Það er ekki verið forsniðin. Svo tölvan okkar alltaf hefur líkamlegur minni. Það hefur alltaf líkamlega RAM. Og það er alltaf núll 's og einn er í það, ekki satt? Þar sem við erum að nota okkar tölva allan daginn, þú ert að nota CS50 IDE eða netþjóna allan daginn. Svo að RAM annaðhvort hefur sumir núll eða einhver eða einhverjum núll og sjálfur. Sama hvort ekki að þú ert að nota þau. Þú getur ekki bara auður rými þar sem þú vilt bita. Þeir eru annaðhvort núll og sjálfur. Svo kemur í ljós að afleysingamanneskja, því við höfum ekki frumstilla hana ennþá, við höfum þá 32 bita en þeir hafa ekki verið forsniðin að neinn þekktra gildi. Svo hvað þeir voru flestir nýlega verið notuð for-- þeim 32 bits-- við erum bara að sjá minjar um sum fyrri notkun þessara tilteknu 32 bitar. Um leið og ég smelli Skref Over þó, phew, afleysingamanneskja er að fara að fá gildið 1. Og ef ég geri það aftur, a er fara að gefa verðmæti 2 og þá b er að fara að að gefa gildið 1. Og svo er það gott nú þetta atriði í sögunni er að aflúsara er sýna mér, frábær rólega á mínum hraða, hvað ástand Víxla er. En taka efst hér, taka að kalla stafla raun hefur tvö lög á henni. Nú sá sem er merkt sem Skipti, ef ég smelli á Main staðinn, Takið eftir hvernig staðbundnar breytur breytast vegna þess að verktaki getur bara hoppa um og fara inn í mismunandi umfangi. Svo jafnvel þótt við erum að gera þetta allt vinna og rétt að skipta a og b, ef ég fer fram og til baka á milli Heimilisskipti þar sem a er 2 og b sé 1 og Main, hefur Main orðið fyrir áhrifum á öllum? Nei Svo er það takeaway hér? Jæja, það kemur í ljós að hvenær þú hringja í aðgerð eins Víxla, og þú fara rök það, hvað þú ert liggur við Víxla virka í þessu tilfelli er afrit af þessum rifrildum. Þannig að ef X og Y eru hvor um hver um sig 32 bita, hvað Swap er að fá er tvö ný staðbundin breytur, eða rök, kallað og b-- en þeir eru handahófskennt names-- en mynstrið núllum og sjálfur inni í A og B er raðað upp til að vera eins og x og y en þeir eru ekki sama og x og y. Það sem þó Main hefur á stykki hennar pappír númer 1 og 2 fyrir X og Y, og svo þegar það hendur að stykki af pappír til að skipta, Swap mjög fær fljótt eigin penni, skrifar niður 1 og 2 á eigin blaði sínu pappír, hendur afrit upprunalega XY til Main og þá er eigin Málið með a og b. Og þetta er nú frábær mikilvægt vegna þess að þetta hefur nontrivial áhrif fyrir í raun að skrifa rétt númer vegna þess að það virðist sem við getum ekki skipta tvær breytur. Ég hef skrifað rétt Víxla virka. Við höfum innleitt það Lauren sem rétta skipti virka í raun og veru, en svo virðist sem ekkert af því mál ef þú getur ekki í raun skipta tvö gildi til frambúðar. Þannig að við þurfum aðra leið til raunverulega fá á þessu, og við þurfum að vera fær um að reyndar leysa þetta vandamál. Og það kemur out-- og við munum koma aftur á þessa tilteknu mynd áður long-- þetta er ein leið til að þú gætir draga minni tölvunnar. Það er bara rétthyrningur. Þú gætir teiknað það eitthvað ýmsan hátt en það er þægilegt að teikna það sem rétthyrningur af eftirfarandi ástæðu. Við erum að fara að byrja í dag og víðar að tala um svokallaða stafla. Og stafla er bara klumpur af RAM-- klumpur af memory-- sem aðgerðir hafa aðgang að þegar þeir eru kallaðir. Og svo kemur í ljós að á mjög botn af þessari stafla er þar sem allar staðbundnar breytur helstu er og org C og org V og allt það efni eru að fara að fara sjálfgefið. Og ef Main kallar einhverja aðra virka eins Víxla, vel, Swap er að fara að fá aðra lag af minni upp yfir það. Og svo bara til að gefa þér á fljótlegan lauslega mynd af þessu, ef ég fer yfir here-- og láta mig spegla þetta á kostnaður sem well-- hvað raunverulega sem ég hef, Ef okkur er annt aðeins um Neðst á þessari mynd fyrir nú, er að þegar ég keyra forrit og Main fær kallað, Main er gefið klumpur af RAM í tölvunni minni sem er neðst á þessari svokölluðu stafla. Og ég ætla að draga það vísvitandi sem ferningur. Svo það er eins og 32 bita eða fjórum bæti. Og ef þetta Helsta hlutverk hefur breytu sem heitir x með gildið 1 og það hefur breytu sem heitir Y með verðmæti 2, sem er eins og að taka þessa flís af minni sem Main hefur verið gefið með því að stjórna kerfi og skipta því þannig að fyrsta staðbundin breytu fer hér, sá seinni fer hér, og það er það. Þegar Main kallar Víxla, Swap fær eigin sneið sína af minni sem við munum draga svona frá stýrikerfi, og það er að fara að hafa til þess eigin staðbundnar breytur byggjast um framkvæmd okkar fyrr með staðbundnum breytur a og b sem upphaflega fá gildin 1 og 2. En þá, eins fljótt og Skiptigengi kóða framkvæmir, og Lauren raun skiptasamninga OJ og mjólk, hvað er að gerast? Jæja, þetta 2 er að verða 1, þessa 1 er að verða 2, og, við the vegur, það er afleysingamanneskja breyta sem er að vera notað sem allan tímann sem á endanum fer í burtu. En það skiptir ekki máli hversu mikið verk að gera Í þessari línu of-- í þessum minni, X og Y eru alveg ósnortið. Þannig að við þurfum á einhvern hátt að gefa Skipti og virka eins og það leyndarmál aðgang, ef þú vilt, til aðgerðir like-- að minni eins x og y. Svo skulum taka a líta á dæmi sem hjálpar okkur að sjá nákvæmlega hvað er verið fara á allri þessari tíma. Ég ætla að fara á undan og opna Berðu Zero. Og ég ætla að loka aflúsara okkar, ég ætla að loka þessari skelfilegur útlit skilaboð sem bara segir, bíddu í eina mínútu, þú ert í miðju kembiforrit. Ég ætla að fela þennan flipa hér bara til að fara aftur til einfaldleika. Svo ekki hafa áhyggjur ef GDB er drepinn. Það þýðir bara að forritið hefur verið hætta, vísvitandi í þessu tilfelli, af mér. Og nú bera saman Zero er þetta. Ég er að nota CS50 Bókasafnið í venjulegu I / O. Ég hef fengið meginhlutverki sem fyrst segir, segja eitthvað, og fær band. Þá segir það aftur og fær annað band. Og eftir að þessar tvær strengi eru kallaðir S og T, hver um sig. Og nú þetta program, Bera Zero, tilgangur þess í lífinu, það er ætlast til að segja mér, gerði ég slá það sama? Og svo ég ætla aftur að viku eitt. Ég er að nota jafnan jafnan mitt rekstraraðila sem er gæði stjórnandi. Ekki framsal rekstraraðila, jafnrétti rekstraraðila. Ég ætla bara að bera saman s og t. Svo skulum í raun að fara á undan og gera þetta. Og ég ætla að fara á undan og gera Berðu Zero. Ég ætla að gera ./comparezero. Og ég ætla að fara á undan og segja eitthvað eins, við skulum gera mömmu með lágstöfum og hvernig um mömmu í hástafi. Og auðvitað ég að slá mismunandi hluti. Allt í lagi. Það er að vænta. Skulum keyra hana aftur. Bæði sinnum gera lágstafir, lágstafi. Sem lítur frábær eins og mig. Sláðu. OK. Kannski er það bara skrýtið því það er ekki mætur málfræði mína. Svo skulum gera höfuðborg mömmu, höfuðborg MOM, eins. Mismunandi hluti. Svo hvers vegna er það? Jæja, hvað er raunverulega að gerast á undir hetta hér? Svo skulum við fara aftur yfir hér fyrir réttlátur a augnablik og íhuga hvað GetString er í raun að gera. Þegar þú hringir GetString, það er hlutverk við sjálf skrifaði og það fær einhvern veginn röð af stöfum frá notanda. Og við skulum gera ráð fyrir að fyrsta þegar ég kalla GetString, sem gefur mér klumpur af minni sem lítur svona út. Og ef ég slóst í öllum lágstöfum m-o-m-- og hvað fer eftir því? Just a fljótur geðheilbrigði athuga. Sviga núll. Við vitum að. Og muna að við spiluðum kring með nafni Zamila er og fullt af öðrum nöfnum þegar Rob var hér að á hvað er að gerast inni minni. Svo er það sagan nákvæmlega sama. Þetta er það sem GetString er aftur að mér. Nú, númerið mitt smá stund síðan geymd skilagildi GetString í breytu sem heitir s. Og þá í annað sinn sem ég kallaði það, það geymt það í breytu sem heitir t. Svo ef ég fer hérna, ég þarf að draga þessa staðbundnu variable-- og ég almennt að fara að draga band sem just-- við munum kalla það s-- sem litla torginu hér. Og nú, somehow-- hvernig er mömmu fara inni þessa breytu s? Jæja, þurfum við að fara aftur til fyrstu meginreglum hér. Hvað er GetString raun aftur? Svo kemur í ljós að M-O-M sviga núll, og allir tala annarra strengi í minni eins og Zamila og Rob eða Andy eða aðrir, eru að sjálfsögðu í okkar RAM tölvunnar eða minni. Og RAM þinn hefur like-- þú a tónleikar RAM, tveir gigs af RAM, eða milljarð eða tvo milljarða bytes, eða kannski jafnvel meira þessa dagana. Svo skulum gera ráð fyrir, vegna í dag, að það skiptir ekki máli hvernig við telja þá, en við getum tala hver þeirra milljarðar eða tvo milljarða eða fjórum milljörðum bæti. Og við skulum bara geðþótta segja að þetta er fyrsta bit, annað bit, þriðja, fjórða. Ég er vísvitandi ekki með núll í dag en við munum koma aftur til að. Svo í öðrum orðum, ef þetta er fyrsta skipti sem ég er að nota forritið, Ég ætla bara að fá heppinn og fyrsta bit er staðsetningu einn þá tveir þá þrír en fjórir. Og ef ég hélt að teikna, kassi númer tveir milljarðar væri leið hérna. Svo hvað finnst þér þá GetString skilar í raun? Það er ekki aftur M-O-M sviga núll í sjálfu vegna þess að greinilega mun ekki passa í rammann sem ég hef dregið. Svo hvað annað gæti getstring raun vera aftur öll þessi vikur? Svarið er á borð hér einhvers staðar. Þú getur ekki passa M-O-M sviga núll, svo hvað gæti skynsamleg staðinn? Ef þú þurftir að vera frábær snjall, setja á svokölluðu verkfræði húfu, Hvað getur þú aftur? Hver er minnstur magn upplýsinga þú gætir farið aftur sem myndi enn láta þig finna M-O-M í minni? Já? Áhorfendur: Einn. DAVID J. Malan: One. Og hvers vegna einn? Áhorfendur: Vegna þess að það myndi segja þú hvar á að fara [inaudible]. DAVID J. Malan: Einmitt. Ég er bara að fara að skila á netfangið strengsins sem ég hef fengið. Heimilisfangið á þessu Málið er staðsetning einn. Svo hvað raunverulega er geymt í s-- og sérhver string breyta þannig far-- hefur bara verið netfang strengsins. Á sama tíma, ef ég kalla Getstring í annað sinn og ég tegund í bókstaflega sama thing-- M-O-M með lowercase-- M-O-M og annar sviga núll, og nú kannski er forritið mitt verið í gangi um nokkurt skeið svo kannski þetta er 10, þetta er staðsetning 11, þetta er 12, Þetta er 13. Tölvur nota einhver önnur minni fyrir hvað sem ástæða. Hvað nú fer í annað minni breyta í áætluninni t minn? 10. Nákvæmlega. Og svo þegar við skoðum kóðann á þessari áætlun þar sem ég er einfaldlega að reyna að bera saman tvö gildi, er s jafnt jafn t, hvað er augljóst manna svarið? Bara ekki vegna þess að 1 ekki jafn 10. Og svo er hér liggur að tækifæri fyrir okkur í raun að fara bara aftur til, aftur, fyrst meginreglur og hugsa um, vel, hvað er að gerast undir hetta? Við höfum verið að tala um bitar og bæti og minni, en það er í raun gagnlegt að skilja vegna þess að þegar þú hringir GetString, jafnvel þó að við hugsum um það er aftur M-O-M eða band mömmu eða Andy eða Zamila eða þess háttar, tæknilega það er bara aftur heimilisfangið þess klumpur af minni. En það er allt í lagi. Vegna þess hvernig veit ég þar sem strengurinn endar? Ef ég er bara að gefa í upphafi? Jæja, sviga núll, ekki satt? Bara í línulegum tíma ég get prenta út með letur def M-O-M. Og um leið og ég sé sviga núll, ég hugsa ekki þar sem ég byrjaði, Ég veit nú þegar óbeint þar sem ég þarf að enda. En það markar dag á beginning-- og Leyfðu mér að gera þetta verulega vegna þess að við fór í gegnum mikið af vandræðum að fá þessar hér þjálfun wheels-- svo í dag að þjálfun hjól byrja að koma burt og við ljós á least-- [Applause] Það var vel þess virði að ferð að miða í morgun, já? Svo now-- það er, það kemur í út, ekkert sem heitir band. String er ekki til. Það er samheiti sem við höfum haft inni í CS50 bókasafn. Héðan í frá, við erum að fara að byrja að kalla s og t ekki strengir en bleikju stjörnur. Og bleikju stjörnu munum við stríða í sundur áður en langur. En þetta er að segja, að jafnvel ef við höldum áfram nota GetString nú, tæknilega ég ætti verið að segja bleikju stjörnu og bleikju stjörnu. Og það kemur í ljós hvað það stjörnuna er að fara til að tákna er eitthvað kallað bendi eða netfang. Og í raun, stríðnispúki fyrir hvað er framundan er þetta 20 annað myndband frá okkar vinur Nick Parlante í Stanford sem, alveg sumir tími síðan, eyða fáránlegt magn af tíma, sem best ég get sagt í hans eldhús eða kjallara hans, gera claymation kynna heiminum eðli heitir Binky sem við munum kynnt næst ábendingum. Svo hér er sýnishorn af hvað er að koma. [Vídeó spilun] -Hey, Binky. Vaknaðu. Það er kominn tími til bendillinn gaman. -Hvað er þetta? Lærðu um ábendingum? Oh, Goody. [END spilun] DAVID J. Malan: Og á að huga, við munum sjá þig á miðvikudag. Allt í lagi. Hver er dans? Láttu ekki svona. Hver er dans? Þú vilt að ég fá það byrjaði? Ég fá það byrjaði. Woooo! LAUREN: Sweet ímynda Moses.