DAVID J. Malan: Hii ni CS50 na huu ni mwanzo wa wiki nne. Na, kijana, ni Volkswagen katika matatizo yote kwa sababu ya programu. Hebu tuangalie. [VIDEO avspelning] -Cars, Wahusika smartest katika haraka na hasira sinema. Wiki hii German automaker Volkswagen kupatikana yenyewe katikati ya kashfa ya idadi uwezekano jinai. -Volkswagen Ni bracing kwa mabilioni katika faini, inawezekana mashtaka ya jinai kwa watendaji wake, kama kampuni msamaha kwa wizi wa magari milioni 11 kwa kusaidia kuwapiga vipimo uzalishaji. Mifano -Certain dizeli walikuwa iliyoundwa na programu ya kisasa kwamba taarifa used ikiwa ni pamoja na msimamo wa uendeshaji na gari kasi ya kuamua gari ilikuwa wanaendelea na uzalishaji wa kupima. Chini ya hali hiyo, injini ingekuwa kupunguza uzalishaji sumu. Lakini gari ilikuwa wizi wa kura kwa bypass kwamba wakati ilikuwa inaendeshwa. Uzalishaji kuongezeka 10-40 mara juu kukubalika ngazi EPA. [Mwisho avspelning] DAVID J. Malan: Hivyo hebu tuangalie hii na kuona jinsi gani hii inaweza kutekelezwa na jinsi hii inaweza kuathiri magari mengi kama hii. Hivyo katika mkono wangu hapa ni vyombo vya habari kutolewa kwamba ilitolewa na EPA-- Mazingira Shirika la Kulinda ambayo ni Marekani udhibiti elimu kwamba kinafanya masuala ya mazingira, na kisha halisi ilani ya kisheria ambayo ilikuwa kutuma kwa Volkswagen siku chache tu zilizopita. Hivyo EPA anaandika, na discloses sasa hadharani, programu ya kisasa algorithm juu ya baadhi ya Magari Volkswagen hutambua wakati gari ni ya kufanyiwa uzalishaji rasmi kupima na anarudi uzalishaji kamili udhibiti juu ya tu wakati wa mtihani. Ufanisi wa magari hayo uchafuzi vifaa kudhibiti uzalishaji ni kiasi kikubwa kupunguzwa wakati wa kuendesha gari zote kawaida hali. Hii matokeo katika magari ambayo kukidhi viwango katika maabara au kupima kituo, lakini wakati wa operesheni ya kawaida emit nitrojeni oxides-- au NOx-- mara hadi 40 ya kiwango. Programu zinazozalishwa na Volkswagen ni kifaa quote unquote, kushindwa, kama inavyoelezwa na Safi Air Sheria nchini Marekani. Wao kwenda kusema kwamba EPA na wakala mwingine wazi kifaa kushindwa programu baada ya uchambuzi huru na watafiti katika West Virginia Chuo Kikuu. Nox uchafuzi inachangia oksidi kaboni, ngazi ya chini ozoni, na faini chembechembe jambo. Yatokanayo na hayo uchafuzi amekuwa akihusishwa na mbalimbali ya madhara makubwa ya afya, ikiwa ni pamoja na kuongezeka kwa pumu mashambulizi na kupumua mengine magonjwa ambayo inaweza kuwa kubwa ya kutosha kupeleka watu kwenda hospitali. Yatokanayo na ozoni na chembechembe jambo ina pia wamekuwa yanayohusiana na mapema kifo kutokana na kupumua kuhusiana na au moyo kuhusiana na madhara. Watoto, wazee, watu wenye ugonjwa preexisting kupumua ni hasa katika hatari kwa madhara ya afya ya uchafuzi haya. Inatosha ni kusema, ni kubwa kabisa. Na twende juu ya kusoma moja tu zaidi Excerpt na kisha tutaweza kuchukua kuangalia athari za msingi haya katika mazingira ya gari. Hasa, Volkswagen viwandani na imewekwa programu katika kile kinachoitwa udhibiti wa umeme module-- au ECM-- ya magari hayo kuwa nilihisi wakati gari mara kuwa kupimwa kwa kufuata viwango vya EPA chafu. Kulingana na pembejeo mbalimbali ikiwa ni pamoja msimamo wa usukani, gari kasi, muda wa injini ya operesheni, na shinikizo barometric, pembejeo hizi kwa usahihi kupatikana vigezo ya shirikisho mtihani utaratibu kutumika kwa ajili ya kupima chafu kwa vyeti EPA makusudi. Wakati chafu kupima EPA, programu magari ECM mbio programu ambayo zinazozalishwa kulaumu uzalishaji matokeo. Wakati mwingine wote, gari ECM programu mbio barabara tofauti calibration hivyo kupunguza ufanisi wa ujumla mfumo wa kudhibiti chafu, hasa kichocheo kuwachagua kupunguza Nox Lean trap-- ambayo tutaweza kuona kuhusu katika wakati huu. Matokeo yake, uzalishaji wa Nox iliongezeka kwa sababu ya nyakati 10-40 juu ya viwango vya EPA inavyotakikana kulingana na aina ya gari mzunguko. Kwa hiyo kile kweli hii ina maana, na chanzo kanuni kwa programu mbio juu ya Volkswagen ina si bado wazi kwa umma, ni kwamba, kwa ufanisi, hii sawa ni pale mahali fulani ndani ya Volkswagen ya kificho. Kama wewe ni kuwa majaribio, na kama gari hutambua mambo fulani ya mazingira kama usukani msimamo au harakati au ukosefu wake wa gari au idadi yoyote ya mambo mengine ambayo kwa sasa kinadharia kuwa sehemu ya utaratibu huu, wao tu kurejea kwenye uzalishaji kamili kudhibiti. Kwa maneno mengine, wao kuanza kutotoa chini ya uchafuzi wa mazingira. Kingine, katika kila hali wengine wakati ni si wanaona kama kuwa katika maabara, wao tu hawana. Na hivyo unaweza kurahisisha hii katika zaidi pseudocode thabiti na kitu kama hii. Kama magurudumu ni kugeuka lakini usukani si, kukisia kwamba gari ni juu ya baadhi aina ya kupokezana silinda lakini katika baadhi ya aina ya ghala kupimwa, kisha kuishi kama EPA ingekuwa kama wewe. Vinginevyo hawana. Hivyo hebu tuangalie katika video short kwamba inachukua kuangalia nini maana ni ya kweli hii mechanically. [VIDEO avspelning] -Last Ijumaa EPA alitangaza kuwa baadhi Volkswagen Audi magari yaliyotolewa kati ya mwaka 2009 na mwaka huu walikuwa wakitumia kinachojulikana kushindwa kifaa kupata kote sheria uzalishaji imeundwa ili kuweka hewa safi. Lakini hiyo ina maana gani hasa? Naam, magari ya kisasa na kadhaa ya kompyuta ndani yao. Na baadhi ya wale kompyuta kusaidia kuratibu kazi ya injini kwa optimum utendaji wakati kuhakikisha kuwa kuna si takataka sana kuja nje ya kutolea nje filimbi. Wameweza kweli ikifanya kazi njia hii kwa miongo kadhaa sasa. Kimsingi, kila sehemu ya injini ya kisasa ya gari ina chombo hicho au mtawala juu yake, na kompyuta hizi wanasoma katika data maelfu ya mara kwa pili maamuzi marekebisho kama uwiano wa mafuta kwa hewa ambayo inaenda ndani ya mitungi. Hizi Volkswagen udanganyifu na mifano Audi ni diesels, na diesels na moja zaidi kompyuta kweli ni muhimu vigezo kudhibitiwa, ambayo ni kiasi cha unburned mafuta kwenda ndani ya kutolea nje. Sasa kwa kuwa sauti mbaya. Haina sauti kama wewe unataka mafuta unburned kwenda katika kutolea nje. Lakini katika kesi ya dizeli, una kitu aitwaye Nox mtego ambao ni kifaa kwamba inachukua na mitego kwa vile oksidi za nitrojeni ambazo ni uchafuzi kwamba ingekuwa vinginevyo kwenda katika anga. Na athari za kuwa Nox mtego ni kuimarishwa na unburned mafuta. Hivyo kifaa kushindwa ni mpango maalum ndani ya kompyuta hizi kwamba wanaweza kufanya hivyo kuangalia kama gari hukutana chafu viwango hata wakati haina. Volkswagen alikuwa na tatizo kwenye mikono yake. Dizeli injini yake walijulikana kwa ajili ya kupata kubwa mafuta ya uchumi, lakini Nox mtego tu kazi vizuri wakati zaidi ya mafuta ni kuwa kutumika. Hivyo gari bila kuchunguza, kutumia kifaa hiki kushindwa, wakati ilikuwa kupata uzalishaji mtihani, ingekuwa kutumia zaidi ya mafuta, kufanya Nox mtego kazi vizuri, uzalishaji itakuwa nzuri. Lakini kisha kupata juu ya barabara, kifaa anarudi mbali, wewe ni kuungua chini ya mafuta lakini wewe ni kuweka mara kama vile 40 uchafuzi zaidi katika anga. Lakini jinsi heck alivyofanya gari kujua kwamba ilikuwa kupimwa kwa uzalishaji wa kufuata? EPA anasema ilikuwa kisasa mfumo kuwa kuchunguzwa mambo kama usukani msimamo, kasi, kwa muda gani injini ilikuwa juu, na hata shinikizo la anga. Kwa maneno mengine, kulikuwa na hakuna njia hii ilikuwa ajali kwa sababu programu ni iliyoundwa kwa makini sana kuchunguza rasmi uzalishaji mtihani. Hiyo ni baadhi pretty kubwa udanganyifu na kwamba kwa nini Volkswagen ni katika hayo makubwa shida. Kwa kweli, Mkurugenzi Mtendaji wao, Martin Winterkorn, tu kupitiwa chini. Hivyo kile kinachotokea baada ya hapo? Naam, kama wewe ni mmoja wa nusu milioni dizeli Jettas, Beatles, Golfs, Passats, au Audi A3s iliyosababisha, habari njema ni ni kwamba gari yako ni salama bado kuendesha gari. Huwezi kuwa na kuiweka mbali mpaka Volkswagen masuala kukumbuka. Lakini wakati fulani wao uko pengine ni kwenda kuwa update programu ndani ya gari. Inapotokea waweza kupata maili wachache kwa tank. Wanasheria tayari gearing hadi kwa kesi za kisheria darasa hatua hivyo wamiliki ili kupata fidia wakati fulani katika siku zijazo. Lakini hiyo si kwenda kutokea wakati wowote hivi karibuni. [Mwisho avspelning] DAVID J. Malan: Hivyo hii kweli huwafufua kuvutia kubwa picha swali kama kwa uaminifu. Sawa? Sisi sote tuna iphone au Androids au kitu katika mifuko yetu na uwezo mkubwa siku hizi, au Laptops juu ya laps wetu kwamba ni kuendesha programu alifanya na Apple na Microsoft na mashada ya makampuni mengine. Lakini ni jinsi gani tunajua kwamba kile bidhaa za programu hizi ni kufanya ni kweli nini hawa makampuni ya kusema wanafanya? Kwa mfano, ambaye kwa kusema kwamba kila wakati kupiga simu kwenye iPhone yako au Android simu au kama, kuwa kwamba namba ya simu pia ni si kuwa kupakiwa kwenye server baadhi ya kampuni hiyo kwa sababu ya mpango baadhi wameweza Imeandikwa, kama ni uendeshaji mfumo yenyewe kama iOS au Android, au kwa sababu umefanya kupakuliwa baadhi ya programu tatu kwamba kwa namna fulani ni kusikiliza kwa kila kitu wewe ni kuandika katika au kila kitu wewe ni kweli akisema. Je, unajua kwamba, wakati nyie ni mbio Clang au Tengeneza kukusanya yako programu mwenyewe katika CS50, jinsi je kuwa CS50 wafanyakazi wenyewe, kwa njia ya maktaba CS50, haijawahi magogo kila kamba wameweza milele wamezipata au kila inchi wameweza milele wamezipata? Naam, unaweza hakika kuangalia katika kanuni chanzo kwa ajili ya kitu kama maktaba CS50, wewe wangeweza kuangalia chanzo kanuni kwa Linux mfumo wa uendeshaji mbio juu ya CS50 IDE. Lakini kuwasilisha ajabu Alipewa nyuma mwaka 1984 katika ofisi ya tuzo Turing na maarufu sana mwanasayansi kompyuta inayojulikana as-- aitwaye Ken Thompson ambao alipokea tuzo Turing ambayo ni aina ya sayansi ya kompyuta Nobel, kama wewe, kwa kazi yake juu ya mfumo wa uendeshaji kuitwa Unix, ambayo ni sawa katika roho kwa nini tunatumia ambayo ni Linux. Na swali aliuliza katika wake kukubalika hotuba, kimsingi kuweka chini ya mfumo kwa miaka na miaka ya mjadala kuhusu imani na usalama, ilikuwa hii. Ni kwa kiasi gani lazima uaminifu moja a taarifa kwamba program-- kipande ya software-- ni bure ya farasi Trojan? Pengine ni muhimu zaidi kwa uaminifu watu ambao aliandika programu. Na kwa kweli, tumekuwa wanaohusishwa kwa majadiliano kwamba yeye alitoa wakati wa kupokea tuzo hii katika '80s kwenye tovuti CS50 chini ya Mihadhara ukurasa kwa leo. Kwa sababu nini utaona ni kwamba kwa kweli inatoa mfano haki rahisi wa jinsi hata compiler kama Clang au chochote compilers wengine wametumia huko nyuma, nini kama iliyoingia katika compiler sisi sisi wenyewe ni kutumia ni kidogo kama masharti kwamba kimsingi anasema, kama taarifa kwamba kanuni hii ni kwa kutumia GetString kazi au GetInt kazi, kwenda mbele na kuingiza mlango wa nyuma au Trojan farasi kiasi kwamba mpango huo sasa ina baadhi ya zeros na wale ambao kufanya kitu kwa makusudi. Magogo yote ya yako keystrokes, kuweka takwimu ambazo kwa baadhi kompyuta, au kweli chochote. Na nini Ken Thompson anaendelea kufanya katika majadiliano yake ni kuonyesha kwamba hata kama una upatikanaji wa chanzo kanuni za compiler kwamba kwa nia mbaya ili kuwa kufanya hivyo, haijalishi kwa sababu kuna kuku huu na mayai ukweli wa wengi wa zamani Miaka ambapo compilers hutumiwa kukusanya wenyewe. Kwa maneno mengine, njia ya nyuma wakati mtu alikuwa na wameandika compiler kwanza. Na baada ya hapo, wakati wowote wameweza updated compiler kwa kubadilisha kanuni zake chanzo, kuongeza makala na recompiling ni kwa watu kama sisi kutumia, vizuri, wao ni kutumia umri wa toleo la compiler kukusanya mpya toleo la mkusanyaji. Na kama wewe kuchukua kuangalia katika majadiliano kwamba akatoa, utaona kwamba kwa sababu ya kwamba circularity, unaweza kweli kuwa mende au Trojan farasi iliyoingia katika programu sisi ni kutumia. Na hata kama ukiangalia chanzo kanuni kwa programu hizo, inaweza hata kuwa dhahiri kwa sababu hila ni kweli katika baadhi toleo la wazee wa compiler kwamba tangu wakati huo imekuwa sindano tishio katika programu yetu. Ambayo ni tu kusema, sisi kweli hawezi na hawapaswi uaminifu programu mbio juu ya Laptops wetu au simu za au idadi yoyote ya maeneo. Na kwa kweli, baadaye katika muhula huu wakati sisi kuanza kuzungumza juu ya programu ya mtandao na kwa kweli kuanza kujenga maombi ya mtandao wenyewe, tutaweza majadiliano juu ya haya vitisho na wengine. Sasa, unaweza kuwa na kujiuliza na niliona kuwa kulikuwa na kidogo kidogo Darth Vader katika sehemu kwamba Hatihati alikuwa akionyesha huko kuhusu Volkswagen. Kama wewe sijawahi kuona, mimi walidhani tunapaswa uzito hisia kwa sababu hii yote ni inakatisha tamaa na ya kutisha. Mimi nina kwenda kuangalia nyuma katika bakuli Super 2011 wakati kibiashara na Volkswagen-- na hii karibu inawafanya likable again-- kurushwa hewani kwa mara ya kwanza kwenye TV. Ni 60 pili kipande cha nadhani utasikia kufurahia. [VIDEO avspelning] [Music - THEME KUTOKA "nyota vita"] [Ikibweka] [CAR huanza] [Mwisho avspelning] DAVID J. Malan: Yeah. Nilikuwa tu kuangalia. Gari kuwa ni katika orodha ya ukiukaji. Sawa. Hivyo sisi kuangalia baadhi pseudocode wakati iliyopita. Na hapa ni kubwa snippet ya pseudocode kificho kwamba tumeona mara kadhaa hivi sasa. Na hebu kutumia hii ni fursa sasa kuanzisha programu mpya mbinu ambayo tulivyofanya ona algorithmically wiki iliyopita wakati sisi inaonekana katika kuunganisha aina. Lakini hebu kurasimisha na kuona jinsi tupate kuitumia katika kanuni halisi, na kisha tunakwenda kutumia hii mbinu chini ya barabara nyingi uwezekano wa kutatua baadhi ya matatizo mengine. Hivyo hii ilikuwa moja ya mipango ya kwanza sisi milele aliandika, angalau katika pseudocode kanuni. Na mpango gani hii kuruhusiwa tufanye shaka ilikuwa kupata Mike Smith katika kitabu cha simu. Na taarifa katika mistari fulani nane na 11 ambazo alikuwa na haya kauli Go To. Na kwa kweli, baadhi ya lugha, C miongoni mwao, kweli kufanya kuwa Kauli kwamba ni halisi kwenda kwamba utapata Rukia line maalum. Ni kwa ujumla kipaji juu kwa sababu inaweza kwa urahisi sana vibaya na unaweza kuanza kuruka yako Mpango kila mahali kinyume kwa kutumia aina ya mantiki na mtiririko wa kudhibiti kwamba tumekuwa kutumika hivi sasa na tu mizunguko na hali na kadhalika. Lakini tunaweza kurahisisha algorithm hii katika pseudocode kificho kama ifuatavyo. Badala ya hii iterative au looping mbinu ambapo sisi kuendelea kurejea na nyuma na nyuma kujipanga tatu, kwa nini sio sisi tu aina ya Punt na zaidi ujumla kusema katika mstari saba na 10, tu kuchukua nafasi hizo mbili jozi ya mistari na, mwingine kama Smith ni mapema katika kitabu tutaweza kutafuta Mike katika kushoto nusu ya kitabu. Mwingine kama Smith ni baadaye katika kitabu, kutafuta Mike katika haki nusu kitabu. Na taarifa tayari circularity. Sawa? Mimi kwa ajili ya kutafuta Mike katika kitabu cha simu na kisha Mimi hatimaye kugonga labda mstari saba au labda mstari 10 na mafundisho yangu mwenyewe ni la kwa Mike katika nusu ya kitabu cha simu. Vizuri, jinsi gani mimi kutafuta Mike? Mimi nina katikati ya kwa ajili ya kutafuta Mike, kwa nini Unataka aina ya kutuma mimi katika mzunguko? Lakini hiyo ni sawa kwa sababu kile ni kinachotokea kwa ukubwa wa tatizo, kama yaliyoandikwa katika mstari 7 na 10? Sisi siyo tu kusema la kwa Mike, kutafuta Mike. Sisi ni hasa kusema nini? Kutafuta kwa ajili yake katika nusu ya kushoto ya nusu haki ambayo ni kwa ufanisi nusu ya ukubwa wa tatizo. Hivyo ni sawa kwamba sisi ni aina ya walioshiriki katika circularity hii, huu mduara hoja, kwa sababu angalau tuko kufanya tatizo na ndogo ndogo. Na hatimaye tunakwenda kufikia kwamba kinachojulikana msingi kesi ambapo tuna ukurasa mmoja tu left-- kama kujitolea yetu wiki iliyopita did-- tulikuwa ukurasa mmoja kushoto na kisha hatufanyi una kuweka kwa ajili ya kutafuta Mike Smith kwa sababu yeye ni aidha kwenye ukurasa kwamba au yeye si. Hivyo ni jinsi gani sisi kutekeleza wazo hili, hii aina ya circularity katika kanuni halisi? Naam, tunaweza kujiinua mbinu hiyo ni ujumla inayojulikana kama kujirudia. Na tumeona hii katika pseudocode kwa kuunganisha aina wiki iliyopita. Kumbuka kuwa hii ilikuwa pseudocode kwa kuunganisha aina. Ni arguably hata rahisi kuliko Bubble au uteuzi au kuingizwa aina tu katika suala la unyenyekevu na ambayo unaweza kueleza hayo. Lakini hiyo ni kwa sababu tuko aina ya circularly akisema, kutafuta kitu kwa ajili ya kutafuta tena. Lakini sisi ni kutafuta ama kwenye nusu ya kushoto au kulia nusu na kisha hatimaye tuko kuunganisha katika kesi hii. Lakini hapa, pia, pamoja na wale mistari miwili aina, hatukufanya tena na hii wazo la kujirudia. Na uthabiti nini maana ya hii, katika mazingira ya algorithm, ni kwamba algorithm ni kujirudia kama anatumia au wito yenyewe. Au katika suala la C, kazi ni recursive-- kazi kuitwa foo ni kujirudia kama foo, mahali fulani katika kanuni zake chanzo, wito kazi foo yenyewe. Na hiyo ndiyo mbaya kama wote foo milele gani ni kujiita tena na tena. Ni sawa kama foo hatimaye ataacha, kama ilivyo kwa kuunganisha aina, kwa kusema, kusubiri dakika, kama tatizo hili ni super dogo, kwa mfano, au nimeona yule mimi nina kutafuta, kurudi tu. Je, si recursively, hawana cyclically kuwaita mwenyewe tena. Na hivyo hebu tuangalie jinsi hii ili kweli kazi. Hivyo mimi nina kwenda mbele na wazi up miwili chanzo kanuni mifano hapa. Mmoja wa uitwao sigma 0. Na hii si wakati wote kujirudia, lakini hebu kuchukua a kuangalia nini mpango huu gani. Nimekuwa kuvuliwa nje wote maoni kutoka humo lakini wote ya chanzo kanuni juu ya CS50 tovuti ina maoni kama wewe wanataka kusoma kwa njia hiyo tena baadaye. Na hebu kufanya michache ya sanity hundi hapa. Hivyo juu ya kanuni hii, tuna pamoja CS50.h. Je, hii nini? Kwa nini ni hapa? Katika masharti nafuu layman. Je, ni nini? Naam. Watazamaji: Hivyo kwamba GetInt kazi kazi. DAVID J. Malan: Hivyo kwamba kazi GetInt kazi. Kwa sababu ndani ya hii file, CS50.h, ambayo tutaweza kuona kabla ya muda mrefu katika suala la kanuni zake chanzo, ina rundo la kazi declared-- GetInt, GetString, na kundi la others-- na isipokuwa sisi kweli kuwa kwamba pamoja na line, compiler Clang ni si kwenda kujua kwamba ipo. Na hiyo inakwenda kwa mstari mbili ambapo int inaelezwa printf, ambayo ni kazi sisi kuendelea kutumia kidogo kabisa. Sasa, mstari nne inaonekana funky kidogo kwa sababu ni tu mjengo moja. Ni got semicolon, hakuna curly braces, hakuna kificho ndani yake. Lakini nini alifanya tunatoa wito jambo hili katika kipindi cha wiki? Naam. Hivyo mfano. Na kwa nini tuna mfano ambayo inaonekana kuwa redundant kidogo kawaida kwa sababu sisi kwa kawaida ona kazi tena baadaye katika faili, sawa? Hivyo kwa nini sisi have-- uko tu scratching kichwa yako lakini mimi itabidi kuchukua hiyo. Naam. Watazamaji: [inaudible] kazi baada kuu. DAVID J. Malan: Hasa. Hivyo kwamba compiler anajua wewe hatimaye kufafanua au kutekeleza kwamba kazi baada kuu, labda. Hivyo Clang na zaidi compilers ni aina ya bubu na wao itabidi tu kujua nini kuwaambia. Na kama unataka kutumia kazi kuitwa sigma, wewe bora kufundisha compiler kwamba ipo mapema. Sasa, yenyewe kuu, hata ingawa ni kundi la mistari, ni pretty ukoo hopefully kwa sasa. Ni got kufanya wakati kitanzi kusudi lake katika maisha hapa inaonekana ni kupata sifuri kutoka kwa mtumiaji. Na kuweka tu kuwalazimisha yake au wake mpaka wao kushirikiana. Kisha katika mstari 16 nina wito kuvutia. IntAnswer. Ambayo upande wa kushoto upande anitiaye Int ambayo inaweza store-- aitwaye Answer-- ambayo ni kwenda kuhifadhi, inaonekana, thamani ya kurudi kwa assassin. Hivyo sigma ni holela lakini maana jina kwamba nimepata aliyopewa kazi kusudi lake katika maisha ni kuchukua argument-- moja tutaweza simu yake ya N katika kesi hii na tu kuchukua jumla ya hesabu kwamba pamoja na kila idadi chanya hiyo ni ndogo kuliko hiyo. Hivyo kama mimi kupita katika namba 2 kwa sigma, Nataka kuongeza 2 plus 1 pamoja na 0-- si 0-- ili anitiaye 3. Kama mimi kupita katika 3 kwa sigma, nataka 3 plus 2 pamoja na 1, ambayo inatoa mimi 6. Na kadhalika. Hivyo tu zinafikia zote nambari chini ya au sawa na hiyo. Sasa, chini hapa mimi nina kwenda tu magazeti nje jibu. Hivyo kama haraka sanity hundi, hebu kufanya sigma 0-- dot slash sigma 0-- na napenda aina katika 2. Na mimi kwa hakika kupata 3. Napenda aina katika 3. Mimi kweli kupata 6. Na kama mtu yeyote anaweza kufanya hesabu za haraka, kama mimi kufanya 50 nini mimi kwenda kupata? Watazamaji: [inaudible]. DAVID J. Malan: Sawa, hakuna. Lakini 1275 ambayo ni pretty karibu. Hivyo hii ni matokeo ya kufanya 50 pamoja na 49 pamoja 48 pamoja 47 pamoja 46 njia yote chini ya 1. Hivyo hiyo ni wote sigma gani. Lakini hebu angalia jinsi tumekuwa kutekelezwa sasa. Hivyo hapa chini ni kazi yenyewe. Na hii haina wanaonekana kuwa na kitu cha kufanya na kujirudia bado. Kwa kweli, sisi ni kutumia umri wa mbinu shule. Mimi initializing kutofautiana kuitwa kiasi na sifuri, basi nina foreloop hapa, na mimi nina kutangaza Int aitwaye Mimi, kuiandaa sawa na 1-- ingawa mimi naweza kuweka sawa na sifuri, lakini tangu mimi nina kufanya Aidha, anayejali kama ni zero au moja. Ni kwenda kuwa na athari. Hivyo mimi nina iterating kwa muda mrefu kama mimi ni chini ya au sawa na m, ambayo ni hoja kuwa ilipitishwa katika. Na kisha mimi tu kuweka incrementing I. Na ufahamu ya kitanzi zote mimi nina kufanya ni kufanya kiasi pamoja na ni sawa na mimi Na hiyo ndiyo makusudi. Sitaki kufanya, katika hii kesi, kama kiasi pamoja pamoja. Nataka kweli kuongeza thamani ya sasa ya mimi ambayo anaendelea kupata makubwa na kubwa na kubwa zaidi kwa mbio Tally. Na kisha mimi kurudi jibu. Na hivyo jibu anapata thamani jibu. Na kisha mimi magazeti ya nje. Hivyo kuna nafasi hapa, ingawa, kwa namna ya kurahisisha kanuni hii conceptually na aina ya pigo moja ni akili katika suala la unyenyekevu hata kama inachukua muda kutatua ya kufahamu nini hii ni nguvu katika mifano hii ndogo. Hapa ni sigma one-- hivyo toleo la pili la kanuni hii. Kila kitu juu juu ni kufanana hivyo kuwa hadithi hiyo inatumika kama kabla. Lakini sasa hebu tuangalie utekelezaji wa sigma ambayo Nimekuwa yameshuka na kufikia haya lines-- mistari minne ya kificho, kwa kweli, pamoja na baadhi ya braces curly na nafasi nyeupe. Lakini je, Mimi kufanya? Kama m ni chini ya au sawa na sifuri, nahitaji aina ya kushughulikia kwamba kesi super rahisi. Na kama wewe mkono mimi sifuri au kitu chochote hasi ambayo ni haki weird, Mimi nina kwenda tu kiholela lakini mara kwa mara kurudi sifuri. Sitaki jambo hili kwa kupata katika baadhi usio weird kitanzi kwa sababu ya thamani hasi. Hivyo Mimi tu kusema, kama wewe nipe sifuri au chini, mimi nina kurudi sifuri. Lakini hiyo ni nzuri kwa sababu hiyo ni kuwa moja ukurasa wa kitabu cha simu wa kushoto. Mimi kuuma mbali tatizo maalum sana na si kupiga kitu recursively. Lakini katika mstari 31, nini Je, mimi wanaonekana kuwa kufanya? Mabano ni kutunza tu mambo, hopefully, wazi kidogo. Lakini wote mimi nina kufanya ni mimi nina kurudi m-- chochote wewe mkono ME pamoja thamani ya m-- pole, pamoja na thamani ya sigma ya m bala 1. Hivyo hii ina maana gani? Kama wewe nipe namba 3 kama pembejeo, jibu Nataka kupata hatimaye ni 6 kwa sababu 3 plus 2 pamoja na 1 anitiaye 6. Lakini jinsi gani nadhani kuhusu jinsi kanuni hii ni mbio? Mara ya kwanza mimi wito sigma na mimi kupita katika thamani 3, hiyo ni kama kusema juu ya kipande cha karatasi, hapa ni thamani ya 3 na nimekuwa kupita hii kama assassin. 3 ni wazi si chini ya 0 hivyo Kama hali haina kuomba. Kingine gani. Hivyo nini mimi? Nataka kurudi m, ambayo ni 3, pamoja na sigma ya m bala 1. Hivyo basi mimi kuweka wimbo wa hii. Mimi naenda kuweka hii kipande cha karatasi chini. Na nini thamani, kuwa wazi, Mimi ni kwenda kupita ndani ya sigma katika hatua hii katika hadithi? Nini namba? 2, sawa? 3 bala 1 ni 2. Hivyo mimi tu haja kidogo chakavu ya karatasi hapa. Hivyo sasa sigma ni kupata kuitwa tena. Na nimekuwa makusudi kuweka huu chini kwa sababu ni aina ya kama pausing kwamba toleo la hadithi kwa sababu sasa mimi nina ililenga juu ya ishara ya m bala 1. Hivyo m ilikuwa 3, m bala 1 ni 2. Hivyo hapa ni 2 kwamba nimekuwa kupita. 2 ni wazi si chini ya 0 hivyo kesi hiyo haina kuomba. Mwingine mimi kurudi m, ambayo ni hii Jambo, pamoja na sigma ya thamani gani? Hivyo kama sigma ya 1-- kwa sababu m ni sasa hivi 2 hivyo 2 bala 1 ni 1. Hivyo sasa nina tu thamani 1. Mimi nina kupita tu idadi 1 kwa kazi sigma-- au mimi mwenyewe here-- hivyo 1 ni wazi si chini ya sifuri, bado haina kuomba. Mwingine kurudi 1 pamoja na sigma wa nini? 0. Hivyo basi mimi kumbuka tu kwamba. Mimi itabidi kupata nyuma na kwamba baadaye. Sasa mimi nina kwenda mbele na hata nukta chini ya idadi 0 kwa sababu hiyo ni hoja yangu au parameter. Mimi kupita idadi 0 na hatimaye mchakato huu ya kurudia tu mwenyewe tangazo nauseum haina kusitisha kwa sababu gani Je, mimi mara moja kufanya mara moja naona hii 0? Mimi kurudi sifuri. Hivyo sasa una rewind hadithi. Kama mimi sasa kurudi nyuma katika wakati, kitu gani hivi karibuni alikuwa Nilifanya kama ungekuwa literally rewinding video? Mimi nina kwenda kuchukua hivi karibuni 1 na kwamba anitiaye 1 pamoja na 0 ni 1. Kama mimi kuweka rewinding hadithi, ambayo inaenda nipe 2 pamoja na hii mbio thamani, ambayo ni 1. Hivyo hiyo ni 3. Na kisha mimi nina kwenda kuweka rewinding. Wakati mimi kwanza kuweka chini idadi 3-- hivyo 3 pamoja na 3 anitiaye 6. Na sasa, kama wameweza rewound video hadi hatua hii, hii ilikuwa sana swali la kwanza mimi aliuliza. Wakati kupita 3, ni nini sigma ya 3? Hakika ni 6, jumla ya vipande hayo yote ya karatasi. Hivyo kama kwamba inachukua muda kidogo kwa wrap akili yako karibu, hiyo ni nzuri. Lakini fikiria ilikuwa little-- ni ilikuwa makusudi kabisa kwamba mimi sifa nambari hizi juu ya kila mmoja. Ni aina ya kama kuwa memory-- rekodi kwa wakati, kama scrubber katika video, niweze kweli rewind katika. Na tunakwenda kurudi kuwa mfano katika kidogo tu. Lakini kwanza, zinageuka kuwa kuna mengi ya geeks na watu funny, Mimi nadhani, katika Google. Je, mtu ambaye sana vizuri katika googling akili kuja juu kwa muda tu na nisaidie kutafuta kitu? Sana, chini sana ufunguo. Mtu ambaye kamwe kuja kabla, labda. SAWA. Yeah? Kuja juu. Kuja juu chini. Jina lako ni nini? SAM: Sam. DAVID J. Malan: Sam, kuja juu chini. Hii ni Same. Vyema kukutana na wewe. Hey. Kuja juu juu. Hivyo wote nahitaji wewe kufanya, kama unaweza, Sam, hapa Google. Je, unaweza kutafuta mrefu kujirudia? Je, si nyara. Na sasa let's-- yeah. OK Bofya hiyo. Bora bonyeza hapo. Ahh, kupata huduma hiyo. Hakuna? SAWA. Basi hebu kufanya wengine kadhaa. Sio sana kuhusiana na kimasomo hapa, bali awe na wewe milele searched Google kwa anagram? SAM: Hapana DAVID J. Malan: Sawa. Tafuta kwa anagram badala ya kujirudia. Vipi kuhusu potovu. Je, umewahi msako potovu? Sasa, hii moja ngumu kidogo ona lakini hopefully everything's-- sawa. Ni tu wewe na mimi kufurahia hii. SAWA. Hivyo hatimaye, hii one's-- ni potovu kidogo. Sasa kufanya pipa roll. Ajabu. Sawa. Kubwa asante kwa Sam. Hapa kwenda. Shukrani. Hivyo nini kinaendelea katika yote ya mifano hii silly? Hivyo kweli, chini ya Hood ya Mamilioni ya mstari wa kanuni Google inaonekana ni chache silly IF hali ya kuwa ni kimsingi kuangalia kama mtumiaji ana typed katika maneno haya, kufanya kitu ambacho pengine alichukua Kiasi nontrivial ya muda kutekeleza tu kuwa amusing kwa njia hii. Lakini hiyo yote majipu chini ya chini ya Hood. Lakini, bila shaka, kujirudia ni zaidi ya geekier mfano miongoni mwa mbinu hizo maalum. Na hakika kuna watu wengine huko nje pamoja kwamba sisi labda na hata aligundua bado tu. Hivyo kuchukua kuangalia, au kufikiria sasa mpango yafuatayo, na kwa hakika kunyakua yoyote ya hizi njia yako nje. Mimi nina kwenda kwenda mbele na kufungua mpango hiyo ni kwenda kujaribu wabadilishane maadili miwili. Lakini kabla ya kwenda huko, hebu kufanya hivyo. Je, tunaweza kupata moja zaidi kujitolea, nadhani? Je, wewe kama kujitolea? Hakuna? Kuja juu juu. Kuja juu juu. Sawa. Hivyo jina lako ni lipi? LAUREN: Lauren. DAVID J. Malan: Lauren. Kuja juu juu, Lauren. Hivyo Lauren ni kuwa changamoto hapa kama ifuatavyo. Vyema kukutana na wewe. Hivyo Lauren hapa ina mbele vikombe yake tupu miwili. Na tuna baadhi ya machungwa juisi na baadhi ya maziwa na tunakwenda kwenda mbele na kufanya yafuatayo. Sisi ni kwenda tu kujaza hii. Ounces chache ya maziwa hapa na hebu kujaza kidogo maji ya machungwa zaidi ya hapa. Na mbele ya yote ya wanachama hao watazamaji, wabadilishane maadili wawili wa vikombe haya. Kuweka maji ya machungwa katika kikombe maziwa na maziwa katika maji ya machungwa kikombe. Jinsi gani unaweza kufanya hivyo kama wewe walikuwa katika nyumbani na alikuwa na upatikanaji wa vifaa vingine? LAUREN: Weka ndani ya kikombe mwingine. DAVID J. Malan: Sawa. Basi hebu na muda kutofautiana, ikiwa sisi. Na kwenda mbele sasa na kutekeleza hiyo swapping utaratibu. Hivyo, nzuri. Tumekuwa kuweka OJ katika muda kutofautiana, maziwa katika OJ kutofautiana, na sasa kutofautiana muda ndani ya kutofautiana maziwa. SAWA. Hivyo vizuri sana kufanyika hadi sasa. Hivyo ni zamu nje kushikilia kwamba wazo kwa muda tu. Hapa, tu geek ni juu kidogo, hii itakuwa sambamba C kificho kwamba sisi tu kutekelezwa. Tulikuwa na pembejeo mbili, a na b, wote wawili wa ambayo tutaweza kusema tu kwa unyenyekevu ni int ya. Na taarifa hapa, kama nataka wabadilishane maadili ya vigezo mbili, a na b, sisi kweli haja middleman, kutofautiana kwa muda, kikombe muda, ndani ambayo the kumwaga moja ya maadili hivyo kwamba tuna placeholder kwa ajili yake. Lakini basi ni sawa kabisa kificho kama Lauren hapa kutekelezwa. Sasa, tu kupata crazier kidogo, zinageuka kwamba unaweza kufanya hivyo bila kutofautiana kwa muda. Kwa kufanya hivyo vizuri, ingawa, tunakwenda kuwa na kudanganya kwa baadhi kemia. Tuna baadhi ya vikombe ziada hapa. Hivyo jambo karibu kwamba inaonekana kama maziwa na maji perhaps-- au maziwa na OJ-- ni tuna baadhi maji, hivyo tutaweza kujaza hii moja up kwa ounces chache ya maji safi. Kwamba pengine kupita kiasi. Naam. Hiyo ni dhahiri sana. Kushikilia sec moja. Na sasa tuna mafuta, ambayo, kama mimi kukumbuka kutoka katikati shule kemia darasani, hopefully haina kuchanganya na maji. Lakini aina ya aina ya Inaonekana kama maziwa na OJ. Hivyo sasa, bila ya kutumia kutofautiana kwa muda, Unaweza wabadilishane maadili hayo mawili? Hivyo mafuta huenda katika kikombe maji, maji huenda katika kikombe mafuta. LAUREN: Hakuna vikombe vingine? DAVID J. Malan: Hakuna vikombe vingine. Na nimekuwa si kweli kupimwa huu kabla ya mwaka huu hivyo mimi sijui kama hii mapenzi kweli kazi kemikali. Kwamba hakuwa walidhani kutokea. Je, ni kazi? Sawa. Hivyo kutenganisha? Nzuri. Sasa sisi got kupata maji, katika kikombe mengine. Nadhifu kemia concentrators naweza pengine kufanya hivyo bora kuliko mimi. LAUREN: maji ni juu ya chini. DAVID J. Malan: water-- iliyokuwa nini msingi mara ya mwisho sisi alifanya hivyo. Una kufanya hivyo ili haki. Naam. Hiyo ni sawa. Hivyo basi, tuna vikombe viwili vya mafuta. SAWA. Hiyo ni sawa. Lakini kemikali kama hii kazi ya I-- LAUREN: Hii ni maji. DAVID J. Malan: Hiyo ni hasa maji. Sawa. Lakini hiyo ni bado kikombe sawa mbele. Hivyo kumwaga it-- kujaribu zaidi ya hapo. SAWA. Hii ni matumizi mazuri ya muda darasani leo. SAWA. Hivyo sasa we-- nzuri. Aina ya. Sawa. Nzuri sana. Asante kwa Lauren. Vizuri sana kufanyika. Hivyo tu kwa pigo akili yako, na hii ni labda kitu kucheza na kama wewe kama katika CS50 ID, unaweza, kwa kweli, wabadilishane vigezo mbili bila kutumia integer muda. Na hii ni sambamba C kanuni. Na kama unakumbuka kutoka mwisho Jumatano, sisi kuletwa, ikiwa ufupi, baadhi ya kampuni mpya katika C. Na anafanya mtu yeyote kukumbuka yale karoti kidogo ishara ni kwamba pembe kidogo ishara kutoka keyboard inawakilisha? Nini bitwise operator? Watazamaji: EXOR. DAVID J. Malan: EXOR. Au kipekee. Hivyo kama unataka, kwa ajili ya kujifurahisha katika nyumbani, awape na b mbili holela maadili kama yoyote eight-- na mimi bila kuchagua thamani bit nane. Kama wewe kufanya hili kwa bits 32, itabidi haraka sana kupata kuchoka. Lakini tu kutoa kidogo nane thamani hiyo ni chochote, moja au mbili, na kutoa b thamani sawa. Na kisha kwa kutumia ufafanuzi ya XOR kutoka Jumatano iliyopita, kuomba kwamba kidogo kidogo, kila mmoja wale bits nane katika kila moja ya na b, na kisha kufanya hivyo hasa kwa kanuni hii. Na si sahihi kile unaweza kuona hapa kwenye screen. Ni kweli majipu chini tatu shughuli XOR na kwa namna fulani magically na b atawabadilishia vyeo bila ya kupoteza taarifa yoyote. Hivyo mafuta na maji hila ni karibu halisi dunia mwili Mimi naweza kufikiria kuiga jambo hilo. Lakini ni hakika rahisi kutumia variable muda, kama katika kesi hii hapa. Na hii pia ni fursa kusema, pia, aina hii ya optimization ndogo, kama kompyuta mwanasayansi kusema, wakati aina ya furaha BRAG kuhusu jinsi alifanya hivyo bila kama swapping na kutofautiana ziada, si wote kwamba kulazimisha. Kwa sababu kuokoa bits 32, kama katika kesi ya int halisi, si yote ya kulazimisha juu ya mfumo ambapo unaweza kuwa na kutumia mamia ya megabytes au hata zaidi kumbukumbu hizo siku hizi. Na kwa kweli, wakati tunapata kwa baadaye tatizo seti na wewe kutekeleza Spell kusahihisha na utasikia kuwa changamoto ya kufanya hivyo kwa hii RAM kidogo na kidogo wakati iwezekanavyo juu ya computer-- wewe bado na wiki kutekeleza it-- utasikia have-- wewe utakuwa na changamoto za kupunguza rasilimali hizo. Na kwamba ni kweli tu tukio muhula huu ambapo utasikia kuwa na moyo kunyoa mbali hata utendaji bora gharama vinginevyo. Hivyo what-- jinsi gani tunaweza kuona hii katika kanuni halisi? Hebu kwenda mbele sasa na kufungua mfano kwamba kwa makusudi inaitwa Hakuna Swap kwa sababu hana kwa kweli wabadilishane vigezo kama wewe kweli kutarajia. Hivyo hebu tuangalie. Hapa ni mpango kwamba hana CS50 maktaba kinachoendelea, tu kiwango I / O. Sasa tuna mfano kwa wabadilishane juu juu ambayo tu ina maana ni got kuelezwa baadaye. Na hapa ni kuu. Mimi kiholela kupewa x na y, mtiririko huo, maadili moja na mbili sababu tu wao ni mdogo na rahisi kufikiria. Na kisha mimi tu na kundi la printfs ambapo nina sanity hundi. x ni 1 na y ni 2 ni labda nini printfs wale watasema. Hivyo hakuna uchawi hivi sasa. Kisha mimi nina kwenda kudai kwa magazeti def, swapping nukta nukta nukta. Mimi nina kwenda kuwaita wabadilishane kazi, kupita katika x na y. Na hebu kudhani kwa sasa kwamba wabadilishane unatekelezwa hasa kama ilivyokuwa wakati iliyopita kwa variable muda. Na hivyo mimi kudai kwa ujasiri, walibadilishana. x ni sasa hii na y ni sasa huo. Lakini faili, bila shaka, inaitwa Hakuna Swap. Basi hebu kweli kuona nini kinatokea. Kama mimi kukusanya hakuna wabadilishane na kisha kufanya ./noswap, x ni 1, y ni 2. Swapping swapped. x ni 1, y ni 2. Hivyo ni kweli inaonekana kuwa kiujanja hata ingawa swap-- hebu kitabu chini now-- unatekelezwa hasa kwa kificho mimi mapendekezo wakati iliyopita. Hivyo sisi siyo kwenda kupata dhana na mambo XOR kwa sasa. Hii pia, wanapaswa kufanya kazi tu kama maziwa na OJ, lakini haina wanaonekana kuwa kazi. Basi hebu kufanya hivyo tena. Labda mimi tu hakuwa mbio haki. Basi hebu kukimbia Hakuna Swap tena. Labda I-- hakuna. Hivyo si tu kufanya kazi. Basi hebu kufanya kidogo sanity hundi. Hebu kwenda mbele hapa katika Swap na kuongeza tu, kusubiri dakika, a ni% i / n na hebu kuziba-katika thamani ya. Kwa sababu mimi kwa kweli wanataka kuona nini kinaendelea. Na hakika, huu ni debugging mbinu kwamba unaweza kuwa na kutumia katika masaa ya ofisi au nyumbani tayari, sawa na nusu ya kwanza ya Dan Video Armendáriz katika PSET3 eti sisi ilianzisha magazeti def kama mbinu ilipendekeza, angalau kwa ajili ya kesi rahisi. Hebu kwenda mbele na kukimbia kufanya hakuna wabadilishane tena, ./noswap. Kuvutia. Hivyo taarifa kile inaonekana kuwa kweli. x ni 1, y ni 2, lakini ni 2 wakati b ni 1. Hivyo wale wawili namna fulani got walibadilishana lakini x na y si kupata swapped. Hivyo kuwa wazi, nini kinatokea yaani, huku nina x na y na wale ni vigezo mitaa katika wigo wa kuu, mimi nina kupita katika x na y wabadilishane. Sasa, wabadilishane, kama kazi tofauti, ni huru na simu hoja yake au vigezo wake chochote anataka. Foo au bar au x au y au au b. Tu kufanya wazi kwamba wao ni si sawa na x na y per se, Nilivyosema a na b. Lakini tunaweza kuwaita chochote tunataka. Na hivyo inaonekana kama wabadilishane ni kuwa alipita x-- AKA a-- na ni kuwa alipita y-- AKA b. Kwa namna fulani mistari watatu hawa ni swapping maadili hayo hasa kama Lauren alifanya na maziwa na OJ. Lakini wakati sisi magazeti nje maadili, a na b ni kweli wabadilishane lakini x na y hawana mabadiliko kwao. Kumbuka kwamba x na y ni hapa. Ili tuweze kuona hii kupitia mbinu nyingine pia. Na hii pia ni mbinu iliyoingia katika tatizo kuweka tatu. Hebu kwenda mbele na kufanya hili katika CS50 ID ikiwa wewe si tayari. Upande wa kulia upande sisi na hii tabo Debugger. Na kama wewe kufungua hili, kuna baadhi ya taarifa arcane hiyo ni kutupwa katika wewe awali. Lakini hebu tease hii mbali kweli haraka. Hivyo moja, unaweza kuona vigezo mitaa. Zinageuka kuwa kujenga katika CS50 IDE, na mengi ya mazingira ya programu zaidi ujumla, ni HatiJava. Chombo kwamba utapata kuibua kuona nini kinaendelea ndani ya mpango wako bila ya kuwa na mapumziko kwa kuongeza printfs na kuandaa na kuendesha na kuongeza printf na kuandaa na mbio, ambayo tayari, katika masaa ya ofisi au nyumbani, pengine kupata pretty nyeti. Hivyo hapa, katika muda tu, tuko kwenda kuona katika muda halisi maadili ya vigezo yetu ya ndani. Sisi ni pia kwenda kuwa na uwezo wa kuweka kile kinachojulikana breakpoints ambayo fursa katika mpango wangu kutulia utekelezaji katika mstari maalum ya kificho kwamba mimi nina curious kuhusu. Sawa? Programu hizi kukimbia katika mgawanyiko wa pili. Ni aina ya nzuri kwa sisi binadamu polepole kuwa na uwezo wa kutulia, kuchukua muda, angalia nini kinaendelea karibu mstari fulani ya kificho bila mpango kulima kwa njia hiyo na kumaliza kabisa. Hivyo breakpoints kwenda kuruhusu sisi kuvunja na kutulia katika hatua fulani. Wito stack ni njia dhana ya kusema nini kazi kwa sasa kuitwa kwa sasa. Kuu daima wito kwanza. Lakini kama Kuu wito kazi kuitwa Swap, sisi ni kweli kwenda kuona hii mnara wa kazi ambayo yamekuwa kuitwa katika reverse chronological ili. Basi hebu angalia hiyo. Mimi nina kwenda kuvuta nje. Mimi nina kwenda nyuma kificho wangu. Na tu kwa sababu nataka kuwa pedantic hapa, Mimi nina kwenda mbele na bonyeza tu upande wa kushoto wa mstari tano. Na kwamba inajenga dot nyekundu. Na taarifa kwenye upande wa kulia kwamba HatiJava anajua, hey, I just alisema breakpoint katika mstari noswap.c tano, hasa katika mstari wa kanuni. Hivyo HatiJava anajua kwamba mimi kuwa ameomba kwamba wakati mwingine Mimi kuendesha mpango ni yangu pause utekelezaji huko badala ya mbio jambo zima super haraka. Hivyo sasa mimi nina kwenda bonyeza Debug kifungo juu sana ya IDE na kwamba itakuja kufanya yafuatayo. Ni kwenda kufungua awali kiasi fulani inatisha kuangalia wastaafu pili window-- debugging kijijini kutoka mwenyeji hizo na such-- na tutaweza kurudi kwa nini zote kwamba maana kabla ya muda mrefu. Lakini jambo muhimu kwa sasa ni kwamba kwamba dot nyekundu ilikumbwa, HatiJava ina makusudi paused execution-- si juu ya mstari huo per se lakini juu ya kwanza mstari wa kanuni halisi katika kazi hiyo. Na hii ndiyo maana mstari saba ni sasa yalionyesha katika njano. Na sasa hebu tuangalie katika upande wa kulia. Inaonekana kama, kwa default, vizuri kutosha, x ina thamani gani? 0. Na y ina thamani gani? Sifuri. Na hiyo ndiyo kutarajiwa kwa maana ya kwamba x na y-- kwamba njano line-- ina haitekelezwi bado. Hivyo x haipaswi kuwa thamani 1. Ni inaweza kuwa thamani nyingine yoyote, kinachojulikana takataka thamani. Na tulipata bahati kwa kuwa ni sifuri katika hatua hii, kimsingi. Hivyo sasa kuna wachache tu vifungo tunahitaji huduma kuhusu wakati debugging kwa njia hii. Taarifa hapa, tuna kifungo Play. Na kama sisi kucheza au kugongwa kuendelea, kwamba tu kwenda kukimbia kupitia wengine wa mpango au mpaka hits breakpoint mwingine. Lakini nimepata si kuweka yoyote nyingine breakpoints hivyo ni tu kwenda kukimbia kwa njia ya mwisho. Kwamba aina ya kushindwa Madhumuni ya poking kuzunguka. Hivyo badala yake, mimi huduma ya juu alama hizi na haki. Na kama mimi hover juu yao, kama ni lazima pia, utaona kidogo tips-- chombo tips. Hii ni moja ya hatua ya juu. Sasa kwa kuwa haina maana ruka mstari kufuatia wa kanuni. Hiyo ina maana tu nitafanya hivyo na hoja ya pili, hoja ya pili, hoja ya pili. Kwa maneno mengine, kupitia kuwa kifungo, naweza kutembea kupitia wangu hatua kificho moja kwa wakati mmoja. Mstari kwa mstari, literally. Sasa, na haki ya kwamba, kuna mtu mwingine kwamba tutaweza kuona katika muda tu. Hii ni kile kinachoitwa Hatua Katika icon hiyo ni inaenda naomba kupiga mbizi ndani ya kazi nyingine. Lakini hebu angalia hii katika muda tu. Hivyo nina kwenda click hatua ya juu. Na sasa taarifa kama mimi bonyeza kifungo hii kulia juu, macho yako takribani chini ya Mitaa Vigezo na kuona nini kinatokea kwa x. x ni sasa 1 kwa sababu njano mstari sasa kunyongwa na tumekuwa wakiongozwa juu ya mstari 8. Na katika muda tu y lazima hopefully kuwa 2. Sasa, kitu ambacho kuvutia hutokea kwa kidogo. Haya yote ni ni printf. Na taarifa, katika terminal yangu sekondari dirisha, naona pato la magazeti def. Na sasa nina kufanya uamuzi kama programu. Siwezi hatua ya juu ya mstari huu wa kanuni, utekelezaji yake lakini si kupata curious kuhusu nini ndani. Au mimi kweli anaweza hatua ndani yake na kuingia ndani ya Swap yenyewe. Basi hebu kufanya mwisho. Hebu kwenda mbele na bonyeza si Vuka lakini Hatua Ndani. Ilani, kwa ghafla mabadiliko dirisha kuonyesha kwanza mstari wa kanuni katika Swap. Hiyo ni mstari 21. Na sasa, nini aina ya funky ni kwamba, kama ukiangalia zaidi ya hapa, kama ilivyotarajiwa, comma b ni 1 na 2, kwa mtiririko huo. Kwa nini ni temp 32767? Kukumbuka kwamba temp, kiasi kama kikombe tupu wakati iliyopita, ni alitangaza hapa kwenye mstari 21. Kwa nini 32,000- I mean, kwa nini ni ni baadhi tu ya thamani weird? Yeah? Watazamaji: Ni si initialized. DAVID J. Malan: Ni si initialized. Hivyo kompyuta yetu siku zote ina kumbukumbu ya kimwili. Daima ina RAM kimwili. Na kuna siku zote sifuri ya na moja ni katika huko, sawa? Kwa sababu sisi ni kutumia wetu kompyuta mchana kutwa, unatumia CS50 IDE au watumishi mchana kutwa. Hivyo kwamba RAM ama ina baadhi zeros au baadhi ya mtu au baadhi zeros na ndio. Hakuna jambo kama au si unatumia yao. Huwezi tu na tupu nafasi ambapo unataka vipande. Wao ni ama zeros na ndio. Hivyo zinageuka kuwa temp, kwa sababu tumekuwa si initialized bado, tuna wale bits 32 lakini wameweza si wamekuwa initialized na maadili yoyote inayojulikana. Kwa hiyo chochote wao walikuwa wengi hivi karibuni kutumika for-- wale 32 bits-- sisi ni kuona mabaki ya baadhi tu ya matumizi ya awali ya wale hasa 32 bits. Haraka kama mimi bonyeza Vuka ingawa, phew, temp ni kwenda kupata thamani 1. Na kama mimi kufanya hivyo tena, a ni kwenda kuwa kutokana na thamani 2 na kisha b ni kwenda wapewe thamani 1. Na hivyo nini ni nzuri sasa katika hatua hii ya hadithi ni kwamba HatiJava ni kunionyeshea, super polepole kwa kasi yangu mwenyewe, nini hali ya Swap ni. Lakini taarifa juu hapa, taarifa kwamba wito stack kweli ina tabaka mbili na hiyo. Sasa moja hiyo yalionyesha kama Wabadilishane, ikiwa mimi bonyeza Kuu badala yake, taarifa jinsi vigezo mitaa mabadiliko kwa sababu developer unaweza tu hop karibu na kwenda katika wigo yoyote tofauti. Hivyo hata kama sisi ni kufanya yote haya kazi na usahihi swapping na b, kama mimi kwenda na kurudi kati ya Swap ambapo ni 2 na b ni 1 na Kuu, ina Kuu wameathirika wakati wote? Hakuna Basi nini takeaway hapa? Naam, ni zamu nje kwamba wakati wowote wewe piga kazi kama Swap, na kupita hoja yake, ni nini wewe ni kupita kwa Swap kazi katika kesi hii ni nakala ya hoja hizo. Hivyo kama x na y ni kila mtiririko 32 bits, nini Swap ni kupata ni mbili mpya za mitaa vigezo, au hoja, kuitwa na b-- lakini hayo ni holela names-- lakini mfano wa zeros na ndio ndani ya b na lined up kwa kuwa kufanana na x na y lakini siyo kitu kimoja kama x na y. Ni kana kwamba Kuu ina juu ya kipande wake wa karatasi namba 1 na 2 kwa x na y, na kisha wakati ni mikono kwamba kipande cha karatasi kwa Byta, Wabadilishane haraka sana anapata kalamu yake mwenyewe, anaandika chini 1 na 2 juu ya mwenyewe karatasi yake ya karatasi, mikono nyuma ya awali xy kwa Kuu na kisha anafanya yake mwenyewe Jambo kwa a na b. Na hii ni sasa super muhimu kwa sababu hii ina maana nontrivial kwa kweli kuandika kanuni sahihi kwa sababu inaweza kuonekana hatuwezi wabadilishane vigezo mbili. Nimeandika sahihi Swap kazi. Tumekuwa kutekelezwa kwa Lauren kama sahihi wabadilishane kazi katika hali halisi, lakini inaonekana hakuna hata mmoja kwamba masuala kama unaweza si kweli wabadilishane maadili mbili kwa moja. Hivyo tunahitaji njia nyingine kwa kweli kupata katika hili, na tunatakiwa kuwa na uwezo wa kweli kutatua tatizo hili. Na ni zamu nje na tutaweza kuja nyuma ya picha hii hasa kabla long-- hii ni njia moja ambayo unaweza kuteka kumbukumbu ya kompyuta yako. Ni tu mstatili. Unaweza kuteka ni yoyote idadi ya njia lakini ni rahisi kuteka ni kama mstatili kwa sababu zifuatazo. Sisi ni kwenda kuanza leo na zaidi ya kuzungumza juu ya kile kinachoitwa stack. Na stack ni tu chunk ya RAM-- chunk ya memory-- kwamba kazi wanapata kwa wakati wao ni kuitwa. Na hivyo zinageuka kuwa katika chini kabisa ya mkusanyiko huu Hapa ndipo wote wa Kuu ya vigezo mitaa na org C na org V na mambo ambayo yote ni kwenda na msingi. Na kama Kuu wito baadhi ya kazi nyingine kama Swap, vizuri, Swap ni kwenda kupata mwingine safu ya kumbukumbu up juu yake. Na hivyo tu kukupa haraka haraka haraka picha ya hii, kama mimi kwenda juu hapa na napenda kioo huu juu ya uendeshaji kama well-- nini kweli nina, kama sisi huduma tu kuhusu Chini ya picha hii kwa sasa, ni kwamba wakati mimi kuendesha programu na Kuu anapata kuitwa, Kuu ni kutolewa chunk ya RAM katika kompyuta yangu kuwa ni chini ya hii stack kinachojulikana. Na mimi nina kwenda kuteka ni makusudi kama mraba. Hivyo ni kama vipande 32 au ka nne. Na kama kazi hii kuu ina kutofautiana kuitwa x na thamani ya 1 na ina kutofautiana kuitwa y na thamani ya 2, hiyo ni kama kuchukua ikilinganishwa na kiasi hiki cha kumbukumbu kwamba Kuu amepewa na uendeshaji mfumo na kugawa it up ili kwanza kutofautiana ndani unaendelea hapa, moja ya pili inakwenda hapa, na hiyo ni yake. Wakati Kuu wito Swap, Swap anapata kipande yake mwenyewe ya kumbukumbu kwamba tutaweza kuteka kama hii kutoka mfumo wa uendeshaji, na ni kwenda kuwa na wake vigezo mwenyewe ndani kwa kuzingatia juu ya utekelezaji wetu wa awali kwa vigezo mitaa na b ambayo awali kupata maadili ya 1 na 2. Lakini basi, kwa haraka kama Swap kificho executes, na Lauren kweli swaps OJ na maziwa, nini kinatokea? Naam, hii 2 ni kuwa 1, hii 1 ni kuwa na 2, na, kwa njia, kuna temp kutofautiana hiyo kuwa Wakati huo zima kutumika kwamba hatimaye huenda zake. Lakini haijalishi ni kiasi gani kazi ya kufanya katika mstari huu of-- katika nafasi hii ya kumbukumbu, x na y ni bila kuguswa kabisa. Hivyo tunahitaji baadhi ya njia ya kutoa Wabadilishane na kazi kama hiyo upatikanaji wa siri, kama wewe, kwa kazi like-- kwa kumbukumbu kama x na y. Basi hebu tuangalie mfano ambayo husaidia tuone nini hasa imekuwa ni kinachoendelea wakati huu mzima. Mimi kwenda mbele na kufungua Linganisha sifuri. Na mimi nina kwenda kuifunga HatiJava yetu, mimi nina kwenda kuifunga hii inatisha kuangalia ujumbe tu anasema, kusubiri dakika, uko katika debugging katikati. Mimi nina kwenda kujificha tabo hii hapa tu kurudi unyenyekevu. Hivyo msiwe na wasiwasi kama GDB ni kuuawa. Hiyo ina maana tu kwamba mpango ina wamekuwa kujiondoa, kwa makusudi katika kesi hiyo, na mimi. Na sasa kulinganisha sifuri gani hii. Mimi nina kutumia CS50 maktaba katika kiwango I / O. Mimi nimepata kazi kuu kwamba kwanza anasema, kusema kitu, na anapata kamba. Kisha anasema tena na anapata kamba nyingine. Na taarifa kwamba masharti hayo mawili zinaitwa s na t, kwa mtiririko huo. Na sasa mpango huu, kulinganisha Sifuri, madhumuni yake katika maisha, ni walidhani kuniambia, Je, mimi aina kitu kimoja? Na hivyo mimi nina kwenda nyuma wiki moja. Mimi nina kutumia alama yangu sawa sawa ambayo ni alama ya ubora. Si operator zoezi, usawa operator. Mimi kulinganisha tu s na t. Basi hebu kweli kwenda mbele na kufanya hili. Na mimi nina kwenda mbele na kufanya kulinganisha sifuri. Mimi nina kwenda kufanya ./comparezero. Na mimi nina kwenda mbele na kusema kitu kama, hebu kufanya mama katika lowercase na vipi kuhusu mama katika uppercase. Na bila shaka mimi aina ya mambo mbalimbali. Sawa. Hiyo ni kutarajiwa. Hebu kukimbia tena. Mara zote mbili kufanya ndogo, ndogo. Kwamba inaonekana super kufanana na mimi. Kuingia. SAWA. Labda ni tu weird kwa sababu siyo liking sarufi yangu. Basi hebu kufanya mtaji Mama, mji mkuu Mama, kufanana. Mambo mbalimbali. Hivyo kwa nini ni kwamba? Naam, nini hasa kinachoendelea chini ya Hood hapa? Basi hebu kwenda nyuma zaidi hapa kwa muda tu na kufikiria nini GetString ni kweli kufanya. Wakati wewe piga GetString, hiyo ni kazi sisi sisi wenyewe aliandika na kwa namna fulani anapata mlolongo wa wahusika kutoka kwa mtumiaji. Na hebu kudhani kuwa kwanza wakati mimi wito GetString, kwamba anatoa mimi chunk ya kumbukumbu kwamba inaonekana kama hii. Na kama mimi niliandika katika yote lowercase m-o-m-- na yale yanayoendelea baada yake? Tu haraka sanity hundi. Backslash sifuri. Tunajua kwamba. Na kukumbuka kuwa sisi alicheza karibu na jina Zamila ya na kundi la majina mengine wakati Rob alikuwa hapa kuangalia katika nini kinaendelea ndani ya kumbukumbu. Hivyo hadithi hiyo ni sawa. Hii ni nini GetString ni kurudi kwangu. Sasa, kanuni wangu wakati iliyopita kuhifadhiwa thamani ya kurudi kwa GetString katika variable kuitwa s. Na kisha mara ya pili mimi kuitwa kuwa, ni kuhifadhiwa katika variable kuitwa t. Hivyo kama mimi kwenda juu hapa, nahitaji kuteka kutofautiana hii mitaa na mimi nina kwa ujumla kwenda kuteka kamba kama just-- tutaweza kuiita s-- kama mraba kidogo hapa. Na sasa, somehow-- jinsi gani mama kwenda ndani ya s hii kutofautiana? Naam, tunahitaji kurudi nyuma na kanuni ya kwanza hapa. Kile ni GetString kweli kurudi? Hivyo zinageuka kuwa M-O-M backslash sifuri, na idadi yoyote ya masharti mengine katika kumbukumbu kama Zamila na Rob au Andy au watu wengine wowote, ni mwendo katika yetu RAM ya kompyuta au kumbukumbu. Na RAM yako ina like-- una GIG ya RAM, gigs mbili ya RAM, au bilioni moja au mbili bilioni ka, au labda hata zaidi siku hizi. Basi hebu kudhani, kwa madhumuni ya leo, kwamba haijalishi jinsi sisi kuhesabu yao, lakini tunaweza kuhesabu kila wale bilioni au bilioni mbili au ka bilioni nne. Na hebu tu kiholela kusema kwamba hii ni kuumwa kwanza, kuumwa pili, tatu, nne. Mimi makusudi si kwa kutumia sifuri kwa leo lakini tutaweza kuja nyuma na kwamba. Hivyo kwa maneno mengine, kama hii ni mara ya kwanza mimi nina kutumia mpango, Mimi nina kupata tu bahati na kwanza kidonda ni katika eneo moja kisha wawili kisha tatu ya nne. Na kama mimi naendelea kuchora, sanduku bilioni mbili itakuwa ni njia zaidi ya hapa. Hivyo unafikiri nini, basi, GetString kweli anarudi? Ni si kurudi M-O-M backslash sifuri per se sababu kwamba kwa uwazi si fit katika sanduku kwamba nimekuwa inayotolewa. Hivyo kile kingine inaweza GetString kweli kuwa kurudi wiki haya yote? Jibu ni juu ya ubao hapa mahali fulani. Huwezi fit M-O-M backslash sifuri, hivyo nini kinaweza kufanya maana badala yake? Kama alikuwa na kuwa super wajanja, kuweka juu ya kile kinachoitwa uhandisi kofia, nini inaweza kurudi? Nini kiasi mdogo wa habari ungeweza kurudi kwamba ingekuwa bado basi wewe kupata M-O-M katika kumbukumbu? Yeah? Watazamaji: Moja. DAVID J. Malan: Moja. Na kwa nini moja? Watazamaji: Kwa sababu waliniambia wewe wapi pa kwenda [inaudible]. DAVID J. Malan: Hasa. I am just kwenda na kurudi anuani ya kamba kwamba Nimepata mtoto. Anwani katika hii kesi ni eneo moja. Kwa hiyo kile kweli ni kuwa kuhifadhiwa katika s-- na kila kamba kutofautiana hivyo far-- Imekuwa tu pepe ya kamba hiyo. Wakati huo huo, ikiwa mimi wito GetString mara ya pili na mimi aina katika halisi thing-- sawa M-O-M na lowercase-- M-O-M na mwingine sifuri backslash, na sasa labda mpango wangu imekuwa mbio kwa muda fulani hivyo labda hii ni 10, hii ni eneo 11, hii ni 12, hii ni 13. Kompyuta kwa kutumia baadhi ya wengine kumbukumbu kwa sababu yoyote. Nini sasa inakwenda katika pili yangu kutofautiana katika mpango wangu t? 10. Hasa. Na hivyo wakati sisi kuangalia chanzo kanuni za mpango huu ambapo mimi nina tu kujaribu kulinganisha maadili mbili, ni s sawa sawa na t, nini dhahiri jibu binadamu? Tu hakuna sababu 1 haina sawa 10. Na hivyo humu uongo fursa kwa sisi kweli tu kwenda nyuma, tena, kwanza kanuni na kufikiri juu ya, vizuri, nini kinaendelea chini ya Hood? Sisi tumekuwa kuzungumza kuhusu bits na ka na kumbukumbu, lakini ni kweli manufaa kwa kuelewa kwa sababu wakati wewe piga GetString, hata kama sisi kufikiria ni kurudi M-O-M au kamba mama au Andy au Zamila au kama, kitaalam ni kurudi tu anuani ya kwamba chunk ya kumbukumbu. Lakini hiyo ni sawa. Kwa sababu jinsi gani mimi kujua ambapo kamba mwisho? Kama mimi nina tu kutokana na mwanzo? Naam, sifuri backslash, sawa? Muda tu linear naweza magazeti nje na magazeti def M-O-M. Na haraka kama Mimi naona backslash sifuri, Sijali ambapo mimi kuanza, Tayari najua inamuunga ambapo mimi haja ya kumaliza. Na hivyo leo alama beginning-- na napenda kufanya hivyo kwa kasi kwa sababu sisi safari kwa kupitia matatizo mengi kwa kupata hizi hapa mafunzo wheels-- hivyo leo magurudumu mafunzo kuanza kufika mbali na sisi yatangaza katika least-- [Makofi] Hiyo ilikuwa ni pamoja na thamani ya safari na Uchumi leo asubuhi, ndiyo? Hivyo now-- kuna, ni zamu nje, hakuna kitu kama kamba. Kamba haipo. Ni kisawe kwamba tulikuwa na ndani ya maktaba CS50. Tangu sasa, tunakwenda kuanza wito s na t si masharti lakini nyota Char. Na nyota Char tutaweza tease mbali kabla ya muda mrefu. Lakini hii ni kusema, kwamba hata kama tunaendelea kutumia GetString kwa sasa, kitaalam mimi lazima kuwa akisema char nyota na nyota Char. Na zinageuka nini kwamba nyota ni kwenda kuashiria kitu aitwaye pointer au mahali. Na kwa kweli, teaser kwa nini uongo mbele ni hii 20 kipande cha pili kutoka wetu rafiki Nick Parlante katika Stanford ambao, kabisa baadhi ya wakati uliopita, kutumia kiasi ujinga wa muda, kama bora naweza kukuambia katika wake jikoni au basement yake, kufanya claymation kuanzisha kwa dunia tabia aitwaye Binky ambaye sisi kuletwa wakati mwingine kwa kuyatumia. Hivyo hapa ni hakikisho ya nini kuja. [VIDEO avspelning] -Hey, Binky. Amka. Ni wakati wa pointer na furaha. -Nini Hiyo? Kujifunza kuhusu kuyatumia? Loo, goody. [Mwisho avspelning] DAVID J. Malan: Na kumbuka kwamba, sisi kuona juu ya Jumatano. Sawa. Nani kucheza? Kuja juu. Nani kucheza? Unataka mimi kupata ilianza? Mimi itabidi kupata ilianza. Woooo! LAUREN: tamu dhana Musa.