DAVID J. Malan: Dan huwa CS50 u dan huwa l-bidu ta 'erba' ġimgħat. U, boy, huwa Volkswagen fil trouble kollha minħabba software. Let us tagħti ħarsa. [Daqq video] -Cars, Il-karattri smartest fil-films Fast u Furious. Din il-ġimgħa automaker Ġermaniż Volkswagen sabet ruħha fin-nofs ta 'skandlu ta proporzjonijiet potenzjalment kriminali. -Volkswagen Huwa bracing għal biljuni fil-multi, ħlasijiet kriminali possibbli għall-uffiċjali eżekuttivi tagħha, kif il-kumpanija apologizes għall armar 11 miljun karozza li jgħinuha taħbit testijiet ta 'emissjoni. Mudelli tad-diżil -Certain kienu mfassla ma 'softwer sofistikati dik l-informazzjoni użata inkluż il- pożizzjoni tal-istering u l-vettura veloċità li jiddetermina l-karozza kienet għaddejjin minn ittestjar tal-emissjonijiet. Taħt din iċ-ċirkustanza, il-magna inaqqas l-emissjonijiet tossiċi. Iżda l-karozza kienet armati li bypass li meta kien qed tiġi misjuqa. Emissjonijiet żdiedu 10 sa 40 ħinijiet ogħla mil-livelli EPA aċċettabbli. [END Daqq] DAVID J. Malan: Mela ejja tagħti ħarsa lejn din u jara eżattament kif dan jista 'jiġi implimentat u kif dan jista 'jaffettwa karozzi tant bħal dan. Allura fl-idejn tiegħi hawn huma l-istampa rilaxx li nħarġet mill-EPA-- l Ambjentali Aġenzija għall-Protezzjoni li huwa l-aġenzija regolatorja Istati Uniti li mankijiet tħassib ambjentali, u mbagħad l-attwali Avviż Legali li kien jibagħtu lill Volkswagen ftit jiem ilu. Allura l-EPA jikteb, u tiżvela issa pubblikament, softwer sofistikati algoritmu fuq ċerti Vetturi Volkswagen jiskopri meta l-karozza għaddejja ittestjar tal-emissjonijiet uffiċjali u dawriet emissjonijiet sħiħa kontrolli fuq biss waqt it-test. L-effettività ta ' dawn it-tniġġis vetturi mezzi ta 'kontroll emissjonijiet huwa ferm mnaqqas matul kull sewqan normali sitwazzjonijiet. Dan jirriżulta fil-karozzi li jilħqu l- istandards fil-laboratorju jew l-ittestjar istazzjon, iżda matul l-operazzjoni normali jarmu oxides-- nitroġenu jew NOx-- fuq sa 40 darba l-istandard. Is-software prodott mill Volkswagen huwa mezz unquote kwotazzjoni, telfa, kif definit mill-Nadif Air Act fl-Istati Uniti. Jitilgħu jgħid li l-EPA u l-aġenzija oħra mikxufa l-mekkaniżmu ta 'telf softwer wara analiżi indipendenti mir-riċerkaturi fl West Virginia Università. Tniġġis NOx tikkontribwixxi għall dijossidu tan-nitroġenu, l-ożonu troposferiku, u partiċelli fini. Espożizzjoni għal dawn pollutanti ġiet marbuta ma 'firxa wiesgħa ta' effetti serji ta 'saħħa, fosthom aktar ażżma attakki u respiratorju ieħor mard li jistgħu jkunu serji biżżejjed li tibgħat lin-nies l-isptar. Espożizzjoni għall-ożonu u materja partikulata għandha wkoll kien assoċjat ma 'prematur mewt minħabba respiratorja relatati jew kardjovaskulari effetti relatati. It-tfal, l-anzjani, persuni mard respiratorju preexisting huma partikolarment f'riskju għall effetti tas-saħħa ta 'dawn l-inkwinanti. Huwa biżżejjed li jingħad, huwa pjuttost serji. U ejja jmorru biex taqra wieħed biss silta aktar u mbagħad aħna ser tagħti ħarsa lejn l-implikazzjonijiet sottostanti ta 'dan fil-kuntest ta' karozza. Speċifikament, Volkswagen immanifatturata u installata softwer fl-hekk imsejħa kontroll elettroniku module-- jew ECM-- ta dawn il-vetturi li nħassu meta l-vettura kienet qed tiġi ttestjata għall konformità ma 'standards ta' emissjoni EPA. Ibbażat fuq inputs varji inkluż il- pożizzjoni tal-isteering wheel, tal-vettura veloċità, it-tul tal-magna tal operazzjoni, u l-pressjoni barometrika, dawn l-inputs preċiżament tracked-parametri tal-proċedura tat-test federali użata għall ittestjar ta 'emissjoni għal ċertifikazzjoni EPA skopijiet. Matul l-ittestjar ta 'emissjoni EPA, is-softwer vetturi ECM dam software li pproduċiet riżultati emissjonijiet konformi. F'kull żmien ieħor, l softwer ECM vettura dam triq separata kalibrazzjoni li naqqset l-effettività tal- sistema ġenerali ta 'kontroll ta' emissjoni, speċifikament l katalitiku selettiv tnaqqis tal-NOx Lean trap-- li aħna ser tara dwar fil-mument. Bħala riżultat, l-emissjonijiet ta 'NOx miżjuda b'fattur ta '10 sa 40 darba fuq mil-livelli konformi EPA skond it-tip ta 'ċiklu drive. Allura dak li dan verament ifisser, u l kodiċi tas-sors għall-software running DWAR L-Volkswagen ma jkunx ġewx żvelati b'mod pubbliku, hija li, effettivament, dan ekwivalenti hemm x'imkien ġewwa tal-kodiċi Volkswagen. Jekk inti qed jiġu ttestjati, u jekk il-karozza jiskopri ċerti fatturi ambjentali bħall-isteering wheel pożizzjoni jew il-moviment jew in-nuqqas tiegħu tal-karozza jew kwalunkwe numru ta 'fatturi oħra li bħalissa qed hypothesized li jkun parti minn din il-formula, huma sempliċiment dawwar fuq tikkontrolla l-emissjonijiet sħiħa. Fi kliem ieħor, dawn jibdew li jarmu inqas tal-pollutanti. Else, f'kull sitwazzjoni oħra meta huwa ma jinstabux bħala fil-laboratorju, huma biss ma. U għalhekk inti tista 'tissimplifika dan in aktar pseudocode konkreta ma 'xi ħaġa bħal dan. Jekk ir-roti qed iduru iżda l- isteering wheel hija le, suġġestivi li l-karozza hija fuq xi tip ta 'ċilindru li jdur iżda f'xi tip ta ' maħżen qed jiġi ttestjat, imbagħad jaġixxu bħala l- EPA tixtieq inti. Inkella ma. Mela ejja tagħti ħarsa fi video qasir li jagħti ħarsa lejn dak li l-implikazzjonijiet huma ta 'dan fil-fatt mekkaniku. [Daqq video] -Last Ġimgħa l-EPA ħabbret li xi Karozzi Volkswagen Audi magħmula bejn l-2009 u din is-sena kienu qed jużaw hekk imsejħa strumenti ta 'riduzzjoni li tikseb madwar liġijiet emissjonijiet maħsuba biex iżommu l-arja nadifa. Imma xi jfisser eżattament? Ukoll, karozzi moderni għexieren ta 'kompjuters ġo fihom. U xi wħud minn dawn il-kompjuters jgħin jikkoordina l-funzjonijiet tal-magna għal aħjar prestazzjoni filwaqt li niżguraw li ma jkunx hemm wisq żibel ġejjin mill-pajp. Huma ħadthom attwalment qegħdin jaħdmu B'dan il-mod għal diversi għexieren ta 'snin issa. Bażikament, kull parti ta 'magna ta' karozza moderna għandha sensor jew kontrollur fuqha, u dawn il-kompjuters qari fid-dejta eluf ta darba kull sekonda aġġustamenti teħid bħall-proporzjon ta 'fjuwil fl-arja li għaddej fis-ċilindri. Dawn Volkswagen qerq u mudelli Audi huma Bijodiżils, u Bijodiżils jkollhom waħda aktar kompjuter verament importanti parametri kkontrollati, li huwa l-ammont ta 'fjuwil mhux maħruq għaddej fil-exhaust. Issa li l-ħsejjes ħażina. Ma ħoss bħal inti tixtieq fjuwil mhux maħruq jmorru fil-exhaust. Iżda fil-każ ta ' diesel, għandek xi ħaġa imsejħa nassa NOx li huwa mezz li jassorbi u nases għall-ossidi tan-nitroġenu li huma pollutanti li kieku inkella jmorru fl-atmosfera. U l-effett ta 'dik nassa NOx hija msaħħa bil-karburant mhux maħruq. Allura apparat manipulattiv huwa programm speċjali ġewwa dawn il-kompjuters li jista 'jagħmilha jidhru bħall-karozza jissodisfa emissjoni standards anki meta ma. Volkswagen kellhom problema fuq idejh. Magni diesel tagħha kienu magħrufa biex jinkiseb ekonomija tal-karburant kbir, iżda l-nassa NOx biss jaħdem tajjeb meta jkun qed jintuża aktar fjuwil. Allura l-karozza jagħrfux, jużaw dan il-mezz telfa, meta kien jkollna emissjonijiet test, għandha tuża aktar fjuwil, jagħmel ix-xogħol nassa NOx sew, emissjonijiet tkun multa. Imma mbagħad ikollok fuq it-triq, l-apparat tintefa, int ħruq inqas fjuwil imma int tqegħid kemm 40 darba aktar inkwinanti fl-atmosfera. Imma kif l-Heck ma il-karozza jafu li kien qed jiġi ttestjat għall-konformità emissjonijiet? L-EPA jgħid li kien sofistikat sistema li iċċekkjata affarijiet bħal pożizzjoni isteering wheel, veloċità, kemm żmien il-magna kienet fuq, u anki l-pressjoni atmosferika. Fi kliem ieħor, kien hemm ebda mod dan kien aċċidentali minħabba li l-software kien mfassla b'attenzjoni kbira biex jikxfu test emissjonijiet uffiċjali. Li xi pretty serji qerq u li għaliex Volkswagen hija bħal problemi serji. Fil-fatt, CEO tagħhom, Martin Winterkorn, biss irriżenja. Allura x'jiġri li jmiss? Ukoll, jekk int wieħed mill-nofs miljun jettas diesel, Beatles, golfs, Passats, jew Audi A3s effettwata, l-aħbar tajba hija hija li l-karozza tiegħek għadu sikur biex issuq. Inti ma għandekx li tqiegħed lilha bogħod sakemm Volkswagen joħroġ recall. Iżda f'xi punt dawn qed probabbilment se jkollhom li taġġorna s-software ġewwa karozza tiegħek. Meta dan iseħħ inti tista jiksbu inqas mil fis tank. L-avukati huma diġà gearing up għall kawżi ta 'azzjoni klassi hekk sidien tista 'tikseb kkumpensati f'xi punt fil-futur. Iżda dan mhux se jiġri kwalunkwe ħin hekk. [END Daqq] DAVID J. Malan: Allura dan fil-fatt iqajjem interessanti akbar mistoqsija istampa kif l-fiduċja. Dritt? Lkoll iPhones jew Androids jew xi ħaġa fil-bwiet tagħna aktar probabbli f'dawn il-jiem, jew laptops fuq dawriet tagħna li huma softwer li jaħdem magħmula minn Apple u Microsoft u għenieqed ta 'kumpanniji oħra. Imma kif nafu li dak li dawn il-prodotti ta 'softwer qed jagħmlu huwa attwalment liema dawn kumpaniji jgħidu li qed jagħmlu? Per eżempju, li li jgħidu li kull darba li inti jagħmlu telefonata fuq iPhone tiegħek jew telefon Android jew bħalhom, li dak in-numru tat-telefon huwa wkoll mhux qed tittella server xi kumpanija minħabba xi program inti stajt bil-miktub, jekk huwa l-operattiva sistema nnifisha bħal IOS jew Android, jew għaliex inti ħadthom jitniżżel xi app parti terza li b'xi mod huwa smigħ li kollox int ittajpjar fi jew kollox int tgħid attwalment. Kif tkun taf li, meta inti guys qed jitħaddmu Clang jew Agħmel biex jikkompilaw tiegħek software stess fl CS50, kif do inti persunal li CS50 stess, permezz tal-librerija CS50, ma kienx qtugħ kull string inti stajt qatt gotten jew kull pulzier inti stajt qatt gotten? Well, inti tista 'ċertament tfittex fil-kodiċi tas-sors għal xi ħaġa bħall-librerija CS50, inti tista 'tħares lejn il-kodiċi tas-sors għas-sistema operattiva Linux taħdem fuq IDE CS50. Iżda preżentazzjoni aqwa ingħata lura fl-1984 jirċievi l-Premju Turing minn xjentist kompjuter famużi ħafna magħruf as-- jismu Ken Thompson li irċieva l-Premju Turing li huwa tip ta 'xjenza tal-kompjuter Premju Nobel, jekk inti se, għall-ħidma tiegħu fuq sistema operattiva imsejħa Unix, li hija simili ħafna fl ispirtu li dak li nużaw li huwa Linux. U l-kwistjoni huwa talab fil tiegħu diskors aċċettazzjoni, essenzjalment li jippreskrivi l-qafas għall snin u snin ta 'diskussjoni dwar il-fiduċja u s-sigurtà, kien dan. Safejn għandha fiduċja waħda minn dikjarazzjoni li program-- biċċa tal software-- huwa mingħajr Trojan horses? Forsi huwa aktar importanti li l-fiduċja il-persuni li kiteb l-software. U fil-fatt, konna marbuta għall-talk li hu taw meta jaċċettaw dan il-premju fis-snin 80 fuq il-websajt CS50 s taħt il-paġna Lectures għal-lum. Minħabba dak li int ser tara hu li fil-fatt jagħti eżempju pjuttost sempliċi ta 'kif anke kompilatur bħal Clang jew kwalunkwe kompilaturi oħrajn użati fil-passat, X'jiġri jekk inkorporati fil-kompilatur aħna lilna nfusna qed tuża huwa xi ftit jekk kundizzjoni li essenzjalment jgħid, jekk tinnota li dan il-kodiċi qed tuża il-funzjoni GetString jew l GetInt , il-funzjoni imorru quddiem u daħħal a bieb ta 'wara jew Trojan horse b'tali mod li dak il-programm issa għandha xi żerijiet u dawk li jagħmlu xi ħaġa malizzjużi. Qtugħ kollha ta 'tiegħek keystrokes, uploading li d-data għal xi server, jew verament xi ħaġa. U dak Ken Thompson tmur fuq li jagħmlu fil talk tiegħu huwa li turi li anke jekk ikollok aċċess għall-sors kodiċi ta kompilatur li malizzjuż jista 'jkun tagħmel dan, ma jimpurtax għax hemm dan tiġieġ u l-bajd realtà mill-ħafna passat snin li biha kompilaturi huma użati biex jikkompilaw infushom. Fi kliem ieħor, mod lura meta xi ħadd kellhom kitbu l-ewwel kompilatur. U wara, kull darba li ħadthom aġġornati kompilatur billi jbiddlu kodiċi sors tagħha, jżid karatteristiċi u recompiling dan għall-persuni bħalna għall-użu, ukoll, li qed jużaw l-qodma Verżjoni tal-kompilatur biex jikkompilaw l-ġdida Verżjoni tal-kompilatur. U jekk inti tagħti ħarsa fil-taħdita li taw, tkun taf tara li minħabba ta 'dak ċirkolarità, inti tista 'attwalment jkollhom bugs jew Trojan horses inkorporati fis-software aħna qed jużaw. U anki jekk inti tħares lejn l- kodiċi tas-sors għall dawk il-programmi, ma jista 'anke jkun evidenti minħabba li l-trickery huwa attwalment f'xi verżjoni anzjani ta ' kompilatur li peress li qatt kien tinjetta t-theddida fis-softwer tagħna. Liema hija biss jgħidu, aħna verament ma tistax u m'għandhiex software fiduċja li jaħdem fuq laptops tagħna jew tat-telefons jew kwalunkwe numru ta 'postijiet. U fil-fatt, aktar tard f'dan semestru meta nibdew nitkellmu dwar l-ipprogrammar tal-web u fil-fatt jibda jinbena applikazzjonijiet web nfusna, aħna ser nitkellmu dwar dawn theddid u oħrajn. Issa, inti jista 'jkollok staqsiet u ndunat li kien hemm ftit Darth żgħira Vader fil-clips li Il-ponta kien juri hemmhekk dwar Volkswagen. Jekk inti stajt qatt rat, I ħsibt aħna għandu jħaffef l-burdata għaliex dan huwa kollu ħafna deprimenti u biża. Jien ser inħarsu lura fil Super Bowl 2011 meta kummerċjali mill Volkswagen-- u dan kważi jagħmilhom likable again-- imxandra għall-ewwel darba fuq it-TV. Hu l-tieni clip 60 li naħseb li inti ser igawdu. [Daqq video] [MUSIC - TEMA minn "Star Wars"] [Barks kelb] [CAR Tibda] [END Daqq] DAVID J. Malan: Yeah. I kien biss verifika. Dik il-karozza hija fuq il-lista ta 'vjolazzjonijiet. Kull dritt. Allura aħna nħarsu lejn uħud pseudocode mument ilu. U hawnhekk akbar snippet ta 'kodiċi pseudocode li Rajna xi ftit drabi s'issa. U ejja jużaw din hija opportunità issa li tintroduċi pprogrammar ġdid teknika li għamilna tara algorithmically ġimgħa li għaddiet meta ħarisna lejn sort jingħaqdu. Imma ejja jifformalizzaw u tara kif nistgħu jużawha fil-kodiċi attwali, u allura aħna qed tmur biex jużaw dan teknika fl-triq l-aktar probabbli li jiġu solvuti ċerti problemi oħra. Allura dan kien wieħed mill-ewwel programmi we qatt kiteb, għalkemm kodiċi pseudocode. U dak dan il-programm ħallietna nsiru biex jagħmlu kors kienet li jsibu Mike Smith fil-ktieb tat-telefon. U avviż f'xi linji ta 'tmien u 11 li kellhom din l-istqarrija Go To. U fil-fatt, ċerti lingwi, C fosthom, fil-fatt do jkollhom dikjarazzjoni li hu litteralment mur li jippermettilek li tiżdied għal linja speċifika. Huwa ġeneralment frowned fuq għaliex jista 'jiġi faċilment abbużati u inti tista 'tibda jaqbeż tiegħek programm kollu fuq il-post għall-kuntrarju għall-użu it-tip ta ' loġika u l-fluss kontroll li konna użati s'issa ma biss loops u kondizzjonijiet u simili. Iżda nistgħu jissimplifika dan algoritmu fil-kodiċi pseudocode kif ġej. Minflok dan iterattiv jew looping approċċ fejn inżommu tmur lura u lura u lura għal-linja tlieta, għaliex ma we biss tip ta 'Punt u aktar ġeneralment jgħidu konformi seba u 10, biss jissostitwixxu dawn iż-żewġ pari ta 'linji, inkella jekk Smith tiġi qabel fil-ktieb aħna ser tfittxija għall Mike fil- nofs tax-xellug tal-ktieb. Else jekk Smith tkun iktar tard fil- ktieb, tfittxija għal Mike fid-dritt nofs il-ktieb. U avviż diġà l-ċirkolarità. Dritt? Jien tiftix għal Mike fil il-ktieb tat-telefon u mbagħad I eventwalment hit forsi line seba 'jew forsi linja 10 u l-istruzzjoni tiegħi li myself huwa tfittxija għall Mike fil nofs il-ktieb tat-telefon. Ukoll, kif nista tfittxija għal Mike? Jien fin-nofs ta tiftix għal Mike, għaliex huma inti tip ta 'jibghatni f'ċirku? Imma dak li OK għaliex dak li hu jiġri għad-daqs tal-problema, kif miktun fid linja 7 u 10? Aħna mhux biss qal tfittxija għall Mike, tfittxija għal Mike. Aħna qed tgħid speċifikament liema? Fittex għalih fl-ewwel nofs tax-xellug tal in-nofs dritt li huwa effettivament nofs id-daqs tal-problema. Allura huwa OK li aħna qed tip ta ' involviment f'dan ċirkolarità, dan l-argument ċirkolari, għaliex mill-inqas aħna qed jagħmlu l-problema iżgħar. U eventwalment aħna qed tmur biex jilħqu li l-hekk imsejħa każ bażi fejn għadna kemm paġna waħda left-- kif voluntier tagħna aħħar ġimgħa did-- kellna paġna waħda xellug u mbagħad aħna ma għandhom iżommu tiftix għal Mike Smith għaliex huwa jew fuq dik il-paġna jew huwa ma jkunx. Allura kif nistgħu nimplimentaw din l-idea, dan tip ta 'ċirkolarità fil-kodiċi attwali? Well, nistgħu lieva teknika thats ġeneralment magħrufa bħala recursion. U Rajna dan fil- pseudocode għall tip jingħaqdu ġimgħa li għaddiet. Ifakkar li dan kien il- pseudocode għall tip jingħaqdu. Huwa probabbli ħafna aktar sempliċi milli bużżieqa jew għażla jew inserzjoni tip biss f'termini tal-sempliċità li magħhom inti tista 'tesprimi lilha. Iżda dan għaliex aħna qed tip ta 'circularly qal, tfittex xi ħaġa minn tiftix għal darb'oħra. Iżda aħna qed tfittex jew fuq in-nofs tax-xellug jew il-nofs tal-lemin u mbagħad eventwalment aħna qed jingħaqdu f'dan il-każ. Iżda hawnhekk, wisq, ma dawn iż-żewġ linji sort, aħna ma jerġa 'jkollhom dan idea ta 'recursion. U konkret dak li dan ifisser, fil-kuntest ta 'algoritmu, hija li algoriżmu huwa rikursivi jekk hija tuża jew sejħiet innifsu. Jew f'termini ta C, funzjoni hija recursive-- funzjoni msejħa foo huwa rikursivi jekk foo, x'imkien fil-kodiċi sors tagħha, jitlob l-foo funzjoni hija stess. U li ħażina jekk kollox foo qatt ma huwa sejħa nnifisha mill-ġdid u għal darb'oħra. Huwa OK jekk foo eventwalment waqfiet, bħal ma jingħaqdu sort, billi qal, stenna minuta, jekk din il-problema huwa super żgħar, per eżempju, jew I sabuh min jien tfittex, biss jirritorna. Ma recursively, ma ċiklikament sejħa myself darb'oħra. U hekk ejja tagħti ħarsa lejn kif dan jista 'attwalment jaħdmu. Hekk jien ser jimxi 'l quddiem u miftuħa żewġ eżempji source code hawn. Li waħda minnhom huwa msejjaħ sigma 0. U dan mhuwiex f'kull rikursivi, imma ejja tieħu ħarsa lejn dak il-programm ma. Stajt imqaxxar barra kollha kummenti minnha iżda kollha tas-source code fuq l CS50 websajt kummenti jekk inti trid taqra permezz ta 'dan again later. U ejja jagħmlu koppja tal sanità kontrolli hawn. Allura fil-quċċata ta 'dan il-kodiċi, għandna jinkludu CS50.h. Xi jfisser dan do? Għaliex huwa hawnhekk? F'termini layman raġonevoli tal. X'tikkontrolla do? Yeah. UDJENZA: Allura dik il-funzjoni GetInt jaħdem. DAVID J. Malan: Allura li il-funzjoni GetInt xogħlijiet. Minħabba ġewwa ta 'dan fajl, CS50.h, li Ser naraw qabel twil fil termini tal-kodiċi sors tagħha, għandha mazz ta 'funzjonijiet declared-- GetInt, GetString, u mazz ta 'others-- u sakemm għandna attwalment ikollhom li Inkludi linja, l Clang kompilatur mhuwiex ser tkun taf li jeżisti. U istess jgħodd għal-linja tnejn fejn int huwa definit printf, li huwa funzjoni inżommu użu pjuttost ftit. Issa, linja erbgħa jidher funky ftit għaliex huwa biss inforra wieħed. Huwa ltqajna punto virgola, l-ebda kaboċċi ċingi, l-ebda kodiċi ġewwa ta 'dan. Imma dak li għamilt li nsejħu dan ħaġa fil-ġimgħat passat? Yeah. Allura prototip. U għaliex għandna prototip li jidher li jkun żejjed ftit tipikament għaliex aħna normalment tara l-funzjoni mill-ġdid aktar tard fil-fajl, id-dritt? Allura għaliex għandna have-- int biss grif ras tiegħek imma jien ser teħodha. Yeah. UDJENZA: [inaudible] funzjoni wara l-prinċipali. DAVID J. Malan: Eżattament. Sabiex il-kompilatur jaf int eventwalment se tiddefinixxi jew timplimenta dik il-funzjoni wara ewlenija, preżumibbilment. Allura Clang u aktar kompilaturi huma tip ta 'dumb u dawn ser jafu biss dak li jgħidulhom. U jekk inti tixtieq li tuża funzjoni msejħa sigma, inti aħjar jgħallmu l-kumpilatur li jeżisti minn qabel. Issa, hija stess prinċipali, anki għalkemm huwa mazz ta 'linji, huwa pjuttost familjari nisperaw minn issa. Huwa ltqajna do filwaqt loop iskop li fil-ħajja hawn apparentement huwa li tikseb numru sħiħ pożittiv mill-utent. U biss iżommu pestering lilu jew tagħha sakemm jikkooperaw. Imbagħad konformi 16 I jkollhom sejħa interessanti. IntAnswer. Li min-naħa tax-xellug naħa tagħti me Int li jistgħu store-- imsejħa Answer-- li se taħżen, apparentement, il-valur ritorn ta 'sigma. Allura sigma huwa biss isem arbitrarja iżda sinifikanti li stajt mogħtija għal funzjoni iskop li fil-ħajja huwa li jieħdu argument-- wieħed aħna ser sejħa hija N f'din case-- u biss biex jieħdu s-somma ta 'dak in-numru plus kull numru pożittiv li l- iżgħar minn dan. Mela jekk jien jgħaddu fin-numru 2 li sigma, I tixtieq iżżid 2 flimkien ma '1 plus 0-- mhux 0-- sabiex tagħti me 3. Jekk I jgħaddu fi 3 sa sigma, nixtieq li jkollhom 3 flimkien ma '2 flimkien ma' 1, li tagħti me 6. U oħrajn. Allura hija biss iżid up kollha l- numri inqas minn jew ugwali għal dan. Issa, stabbiliti hawn jien biss se li jistampa l-risposta. Allura bħala kontroll sanità malajr, ejja jagħmlu sigma 0-- sigma dot slash 0-- u let me tip fil 2. U jien tassew nikseb 3. Let me tip fi 3. I tabilħaqq nikseb 6. U jekk kulħadd jista 'jagħmel l-matematika malajr, jekk nagħmel 50 dak li jien ser nikseb? UDJENZA: [inaudible]. DAVID J. Malan: Well, no. Iżda 1,275 li huwa pjuttost qrib. Allura dan huwa r-riżultat ta 'kif isir 50 plus 49 plus 48 plus 47 plus 46 it-triq kollha sa 1. Allura li kollox sigma ma. Imma ejja naraw kif konna implimentat dan issa. Allura stabbiliti hawn hija l-funzjoni nnifisha. U dan ma jidhirx li xejn x'jaqsmu ma 'recursion s'issa. Fil-fatt, aħna qed jużaw teknika iskola antika. Jien initializing varjabbli imsejjaħ somma għal żero, imbagħad I jkollhom foreloop hawn, u jien ddikjarata Int imsejħa I, dan ikun iffissat ugwali għal 1-- għalkemm I jistgħu jistabbilixxu li egwali għal żero, imma peress li jien qed nagħmel minn hekk, quién jekk huwa żero jew wieħed. Huwa ser ikollha effett. Hekk jien mtennija sakemm I huwa inqas minn jew ugwali għal m, li huwa l-argument li kienet għaddiet. U mbagħad I biss iżommu inkrementazzjoni I. U ħarsa tal-linja kollha li qed nagħmel qed tagħmel somma plus ugwali I. U li intenzjonat. Ma rridx li tagħmel, f'dan każ, bħal somma plus plus. Irrid li attwalment iżidu il-valur kurrenti ta 'I li jżomm dejjem akbar u akbar u akbar għall-jaqblu running. U mbagħad I jirritornaw somma. U għalhekk tweġiba gets-somma valur. U mbagħad I ipprintjaha. Allura hemm opportunità hawn, għalkemm, li tip ta 'jissimplifikaw dan il-kodiċi kunċettwalment u t-tip ta 'blow wieħed huwa mind f'termini tal- sempliċità anki jekk tieħu filwaqt li sort ta japprezzaw għaliex dan hija qawwija f'dawn l-eżempji żgħar. Hawnhekk huwa sigma one-- hekk il- tieni verżjoni ta 'din il-kodiċi. Kollox top up huwa identiku hekk l-istess storja tapplika qabel. Imma issa ejja nħarsu lejn il- implimentazzjoni ta 'sigma li Stajt fadal biss dawn lines-- erba 'linji ta' kodiċi, verament, flimkien ma 'xi braces kaboċċi u l-ispazju abjad. Imma dak am I tagħmel? Jekk m hija inqas minn jew ugwali għal żero, I-ħtieġa li tip ta 'jimmaniġġjaw F'dak il-każ super sempliċi. U jekk inti idejn lili żero jew xejn negattiva li huwa biss stramb, Jien biss ser arbitrarjament imma dejjem jirritorna żero. Ma rridx dan ħaġa li jsibu rwieħhom xi infinita stramb loop minħabba valur negattiv. Hekk jien biss qal, jekk inti tagħti me żero jew inqas, jien jirritornaw żero. Imma dak li tajba għaliex dan huwa dik il-paġna waħda tal-ktieb tat-telefon li ħalla. Jien gdim off problema speċifika ħafna u mhux ssejjaħ xi ħaġa recursively. Iżda fil-linja 31, dak do I jidhru li tkun qiegħda tagħmel? Il-parentesi huma biss iż-żamma affarijiet, wieħed jittama, ftit aktar ċara. Imma kollha li qed nagħmel huwa jien jirritornaw m-- x'ikun inti naħa me-- flimkien mal- valur tal sorry m--, flimkien mal-valur tal sigma tal m minus 1. Allura dak li jfisser dan? Jekk inti tagħti me-numru 3 bħala input, ir-risposta I rridu nġibu finalment hija ta '6 għaliex 3 u 2 flimkien ma' 1 tagħti me 6. Imma kif nista jaħsbu dwar kif din il-kodiċi tkun qed taħdem? L-ewwel darba I call sigma u I jgħaddu fil-valur 3, dan huwa simili qal fuq biċċa tal-karta, hawn l-valur 3 u stajt ġiet mgħoddija dan bħala sigma. 3 hija ovvjament mhux inqas minn 0 hekk il-kundizzjoni IF ma japplikax. Il ieħor ma. Mela xi do I do? I jridu jirritornaw m, li huwa 3, flimkien ma sigma ta m minus 1. So let me jżommu rekord ta 'dan. Jien ser tpoġġi din biċċa karta isfel. U liema valur, li tkun ċara, am I se jgħaddu fis sigma f'dan il-punt fl-istorja? Liema numru? 2, id-dritt? 3 minus 1 hija ta '2. So I biss bżonn ftit Ruttam ta 'karti hawn. Allura issa sigma huwa jkollna msejjaħ mill-ġdid. U stajt deliberatament tqiegħed din stabbiliti għaliex dan huwa tip simili espressjonijiet fit dik il-verżjoni tal-istorja għaliex issa jien iffukat fuq sinjal ta 'm minus 1. Allura m kien 3, m minus 1 hija ta '2. Allura hawnhekk huwa 2 li stajt ġiet mgħoddija. 2 hija ovvjament mhux inqas minn 0 hekk il-każ ma japplikax. Inkella I ritorn m, li huwa dan ħaġa, flimkien ma sigma ta 'dak il-valur? Mela jekk sigma tal 1-- minħabba m hija dritt issa 2 hekk 2 minus 1 huwa 1. Allura issa I jkollhom biss il-valur 1. Jien tgħaddi biss in-numru 1 għall-sigma-- funzjoni jew myself here-- hekk 1 hija ovvjament mhux inqas minn żero, xorta ma japplikax. Ritorn Else 1 plus sigma ta 'dak? 0. So let me biss ftakar li. I ser terġa 'lura li aktar tard. Issa jien ser jimxi 'l quddiem u LOGHOME l-għadd 0 minħabba li l argument tiegħi jew parametru. Jien għadda n-numru 0 u finalment dan il-proċess ta 'ftit tirrepeti myself ad nauseum ma jieqfu għaliex dak do I immedjatament tagħmel darba nara dan 0? I-ritorn żero. Allura issa inti għandek kontrina l-istorja. Jekk I issa jmorru lura fil-ħin, dak li kien il-ħaġa aktar riċenti Jien għamilt jekk inti kienu litteralment rewinding video? Jien ser jittellgħu l-aktar reċenti 1 u li tagħti me 1 plus 0 hija l-1. Jekk I iżommu rewinding l istorja, li għaddej biex jagħti me 2 flimkien ma 'dan il-valur running, li hija l-1. Allura li għamilhom 3. U allura jien ser iżommu rewinding. Meta I-ewwel darba l-għadd 3-- hekk 3 miżjuda bi 3 tagħti me 6. U issa, jekk inti ħadthom rewound l-video sa dan il-punt, dan kien il-ħafna ewwel domanda staqsejt. Meta għadda 3, dak li huwa sigma tat-3? Huwa tabilħaqq 6, is-somma ta ' dawn il-biċċiet kollha ta 'karti. Hekk jekk li tieħu ftit filwaqt li wrap moħħok madwar, li l-multa. Iżda jikkunsidraw kien little-- it kien intenzjonat ħafna li I f'munzelli dawn in-numri fuq quċċata ta 'xulxin. Huwa tip ta 'prodotti simili li jkollhom memory-- rekord fil-ħin, bħal scrubber fil-video, li I tista 'tabilħaqq kontrina fil. U aħna qed tmur biex terga 'lura għal li metafora fi ftit ftit. Iżda l-ewwel, jirriżulta li hemm ħafna geeks u nies umoristiċi, I raden, fuq Google. Would xi ħadd li ħafna tajba fil Googling mind ġejjin għal ftit mument u għinni tfittex xi ħaġa? Ħafna, ta 'ċavetta baxx ħafna. Xi ħadd li qatt toħroġ qabel, forsi. KOLLOX SEW. Yeah? Come fuq. Come fuq l isfel. X'hemm isem tiegħek? SAM: Sam. DAVID J. Malan: Sam, jaqgħu fuq l isfel. Dan huwa Istess. Għandi pjaċir. Ħej. Come fuq matul. So I kollha bżonn li inti tagħmel, jekk inti tista ', Sam, hawn Google. Inti tista 'tfittex għall-recursion tul? Ma jħassru. U issa let's-- yeah. OK Ikklikkja dik. Aħjar ikklikkja dan. Ahh, ġġibu. Nru? KOLLOX SEW. Mela ejja do a oħrajn koppja. Mhux tant relatati akkademikament hawn, iżda jkunu inti qatt mfittxija Google għall anagram? SAM: Le DAVID J. Malan: OK. Tiftix għal anagram minflok recursion. Kif dwar askew. Inti qatt mfittxija għall askew? Issa, dan wieħed huwa ftit diffiċli biex tara iżda nisperaw everything's-- OK. Huwa biss int u jien jgawdu dan. KOLLOX SEW. Allura finalment, dan one's-- huwa askew ftit. Issa do a roll barmil. Wonderful. Kull dritt. Big nirringrazzjak għall Sam. Hawnhekk inti tmur. Grazzi. Allura x'inhu għaddej fl- ta 'dawn l-eżempji iblah? Allura verament, taħt il-barnuża ta Miljuni Google ta 'linji ta' kodiċi apparentement huwa iblah ftit IF kondizzjonijiet li huma essenzjalment verifika jekk l-utent ikollu ittajpjat fil din il-frażi, tagħmel xi ħaġa li probabbilment ħa ammont nontrivial ta 'żmien biex jimplimentaw biss biex tkun divertenti b'dan il-mod. Imma li kollox tagħli u ddur ma 'hood. Imma, naturalment, recursion huwa aktar ta 'l-geekier Eżempju fost dawk tricks speċjali. U żgur hemm oħrajn hemmhekk kif ukoll li aħna forsi lanqas biss skoperti għadha biss. Allura tagħti ħarsa, jew jikkunsidra issa l-programm li ġej, u ċertament grab xi minn dawn fuq tiegħek mod out. Jien ser jimxi 'l quddiem u jiftħu programm li s ser jippruvaw li tpartit żewġ valuri. Iżda qabel immorru hemm, ejja tagħmel dan. Nistgħu tikseb wieħed aktar voluntier, I think? Tixtieq li voluntier? Nru? Come fuq up. Come fuq up. Kull dritt. Allura isem tiegħek huwa dak? Lauren: Lauren. DAVID J. Malan: Lauren. Come on up, Lauren. Allura Lauren qed kkontestat hawnhekk kif ġej. Għandi pjaċir. Allura Lauren hawn kellha għad ta 'żewġ tazzi vojta tagħha. U aħna għandna xi oranġjo meraq u xi ħalib u aħna qed tmur biex tmur quddiem u tagħmel dan li ġej. Aħna biss ser timla din. Ftit uqija ta 'ħalib minn hawn u ejja timla meraq tal-larinġ ftit hawn. U quddiem kollha dawn membri tal-udjenza, tpartit iż-żewġ valuri ta 'dawn tazzi. Poġġi l-meraq tal-larinġ fil-tazza ħalib u l-ħalib fit-tazza meraq tal-larinġ. Kif inti tagħmel dan jekk inti kienu fil dar u kellhom aċċess għal provvisti oħra? Lauren: Poġġi dan fil-tazza ieħor. DAVID J. Malan: OK. Mela ejja jkollhom temporanju varjabbli, jekk aħna se. U jimxi 'l quddiem issa u jimplimentaw l-istess proċedura iskambji. Allura, tajba. Imxejna tpoġġi ĠU fil-temporanju varjabbli, ħalib fil-ĠU varjabbli, u issa l-varjabbli temporanju fil-varjabbli ħalib. KOLLOX SEW. Hekk ukoll ħafna sar s'issa. Għalhekk jirriżulta out-- tiddeċiedi li maħsub għal ftit mument. Hawnhekk, għal ftit geek it up a bit, dan ikun l-kodiċi C li jikkorrispondi li aħna biss implimentati. Kellna żewġ inputs, au b, it-tnejn li aħna ser ngħidu biss għall-sempliċità huma s int. U avviż hawn, jekk irrid li tpartit il-valuri ta 'żewġ varjabbli, A u B, aħna tabilħaqq bżonn middleman, a varjabbli temporanju, tazza temporanju, li fih l-pour wieħed mill-valuri hekk li għandna placeholder għal dan. Imma mbagħad il-kodiċi huwa eżattament kif Lauren hawn implimentati. Issa, biss li tikseb ftit crazier, jirriżulta li inti tista 'tagħmel dan mingħajr varjabbli temporanju. Biex tagħmel dan b'mod xieraq, għalkemm, aħna qed tmur li jkollhom iqarrqu ma 'xi kimika. Għandna xi tazzi żejda hawn. Allura l-eqreb ħaġa li jistenna bħall-ħalib u l-ilma perhaps-- jew ħalib u OJ-- hija li għandna xi ilma, hekk aħna ser jimlew dan wieħed up bi ftit uqija ta 'ilma ċar. Li probabbilment wisq. Yeah. Li definittivament wisq. Żomm fuq waħda taqs. U issa għandna żejt, li, kif niftakar minn nofs klassi kimika iskola, nisperaw li ma jitħallatx mas-ilma. Iżda huwa tip ta 'tip ta' Dehra ħalib u ĠU. Allura issa, mingħajr l-użu varjabbli temporanju, inti tista 'tpartit dawn iż-żewġ valuri? Allura żjut tmur fil-tazza ilma, ilma tmur fil-tazza żejt. Lauren: L-ebda tazzi oħra? DAVID J. Malan: L-ebda tazzi oħra. U stajt ma attwalment ttestjati dan qabel din is-sena so I do not know jekk dan se attwalment jaħdmu kimikament. Li ma kienx suppost li jiġri. Huwa jaħdem? Kull dritt. So separazzjoni? Tajba. Issa aħna ltqajna biex jiksbu l- ilma fil-tazza oħra. Konċentraturi kimika Smarter tista probabbilment jagħmlu dan aħjar minn lili. Lauren: L-ilma huwa fuq il-qiegħ. DAVID J. Malan: Il-water-- li kienet x'hemm ewlenin l-aħħar darba għamilna dan. Inti għandek tagħmel dan fl-ordni dritt. Yeah. OK That's--. Allura issa għandna żewġ tazzi ta 'żejt. KOLLOX SEW. Li OK. Imma kimikament jekk dan maħduma milli I-- Lauren: Dan huwa l-ilma. DAVID J. Malan: Li l-aktar ilma. Kull dritt. Imma dak li għadu l-istess tazza bħal qabel. Allura pour it-- jippruvaw dan hemmhekk. KOLLOX SEW. Dan huwa użu tajjeb ta 'żmien tal-klassi llum. KOLLOX SEW. Allura issa we-- sbieħ. Tip ta '. Kull dritt. Hekk tajjeb ħafna. Grazzi għall Lauren. Isir ħafna tajjeb. Hekk biss blow imħuħ tiegħek, u din hija forsi xi ħaġa jilagħbu ma jekk inti tixtieq fil CS50 ID, inti tista ', fil-fatt, tpartit żewġ varjabbli mingħajr l-użu ta 'numru sħiħ temporanju. U dan huwa l-kodiċi C korrispondenti. U jekk inti recall mill-aħħar L-Erbgħa, aħna introdotti, jekk fil-qosor, xi operaturi ġodda fis C. U ma xi ħadd jiftakar dak il-karrotta ftit simbolu hija, li trijangolari ftit simbolu mill-keyboard jirrappreżenta? Liema bitwise operatur? UDJENZA: Exor. DAVID J. Malan: Exor. Esklussiva Or. Mela jekk inti tixtieq, biss għall-gost fil dar, li tagħti u b 'żewġ arbitrarja Valuri bħal kull eight-- u I se jagħżlu valur ta 'tmien bit. Jekk inti tagħmel dan ma '32 bit, inti ser malajr ħafna niddejjaq. Iżda biss jagħtu l tmien bits valur li l-x'ikun, wieħed jew tnejn, u jagħtu b valur simili. U mbagħad tuża d-definizzjoni tal XOR minn l-Erbgħa li għadda, tapplika din ftit ftit, kull wieħed dawk it-tmien bits f'kull wieħed mill au b, u mbagħad jagħmluh eżattament per dan il-kodiċi. U m'humiex korretti dak tara hawn fuq l-iskrin. Hija tabilħaqq jeħodna tliet operazzjonijiet XOR u b'xi mod magically au b ser jiskambjaw pożizzjonijiet mingħajr ma jitilfu ebda informazzjoni. Allura l-żejt u l-ilma trick huwa l- eqreb Inkarnazzjoni dinja reali I jista 'jaħseb biex jimitaw dak. Iżda huwa żgur aktar faċli li użu ta 'varjabbli temporanju, bħal f'dan il-każ hawnhekk. U din ukoll opportunità jgħidu, wisq, dan it-tip ta 'ottimizzazzjoni mikro, bħala xjenzat kompjuter ngħid, filwaqt tip ta 'gost li brag dwar kif għamilt dan mingħajr bħal iskambji ma 'varjabbli żejda, huwa mhux kollha li konvinċenti. Minħabba li jiffranka 32 bits, kif fil-każ ta 'int attwali, mhux kollha li konvinċenti fuq sistema fejn inti tista 'tuża għexieren ta' megabytes jew saħansitra aktar memorja bħal dawn il-jiem. U fil-fatt, meta nikbru għal sett problema aktar tard u inti jimplimentaw jespliċitaw kontrollur u tkun taf jiġu kkontestati li jagħmlu dan mal dan RAM inqas u inqas żmien possibbli fuq il- computer-- inti xorta jkollhom ġimgħa biex jimplimentaw it-- inti ser have-- inti ser tkun isfida li jimminimizzaw dawn ir-riżorsi. U li tassew l-uniku okkażjoni dan is-semestru fejn inti ser ikunu mħeġġa biex tqaxxar off anki l-prestazzjoni ifjen ispejjeż mod ieħor. Allura what-- kif nistgħu tara dan fil-kodiċi attwali? Let me imorru quddiem issa u jiftħu eżempju li deliberatament tissejjaħ Nru Swap minħabba li ma fil-fatt tpartit-varjabbli kif int attwalment tista 'tistenna. Mela ejja tagħti ħarsa. Hawn programm li m'għandha l-ebda CS50 librerija għaddejjin, I biss standard / O. Issa għandna prototip għall swap up top li ftit ifisser huwa ltqajna biex jiġu ddefiniti aktar tard. U hawnhekk prinċipali. I arbitrarju assenjat xuy, rispettivament, il-wieħed valuri u tnejn sempliċiment minħabba li qed żgħar u faċli li wieħed jaħseb dwar. U mbagħad I biss mazz ta printfs fejn I jkollhom kontroll sanità. x hija l-1 u y hija 2 huwa preżumibbilment x'inhuma dawn printfs se ngħid. Allura l-ebda magic s'issa. Imbagħad jien ser titlob bil jistampa def, jagħmlu skambju dot dot dot. Jien ser sejħa-tpartit funzjoni, li jgħaddi fil x uy. U ejja nassumu għal issa li tpartit huwa implimentat eżattament kif kien mument ilu ma 'varjabbli temporanju. U so I jallegaw boldly, skambjati. x issa huwa issa dan u y hija dik. Iżda l-fajl, naturalment, huwa msejjaħ Nru Swap. Mela ejja attwalment tara x'jiġri. Jekk I jikkompilaw l-ebda swap u mbagħad do ./noswap, x hija l-1, y hija 2. Iskambji biddlu. x hija l-1, y hija 2. Allura fil-fatt jidher li jkun żbaljat anke għalkemm swap-- ejja iscroll down now-- hija implimentata eżattament kull l- kodiċi I propost mument ilu. Allura aħna ma tkunx qed tmur biex tikseb fancy mal-għalf XOR għal issa. Dan, ukoll, għandhom jaħdmu biss bħal ma l-ħalib u l ĠU iżda ma jidhirx li tkun qed taħdem. Mela ejja tagħmel dan mill-ġdid. Forsi I biss ma kien għaddej dan id-dritt. Mela ejja jimxu Nru Swap mill-ġdid. Forsi I-- ebda. Allura huwa biss mhux qed jaħdem. Mela ejja tagħmel verifika sanità ftit. Let me imorru quddiem hawn fil Swap u biss żid, stenna minuta, a huwa% i / nu ejja plug-in-valur ta '. Minħabba I verament irridu biex tara x'inhu għaddej. U fil-fatt, dan huwa teknika debugging li tista 'tkun tuża fil ħinijiet tal-uffiċċju jew fid-dar diġà, simili għall-ewwel nofs ta 'Dan Video Armendáriz fil PSET3 fejn aħna introdotti print def bħala a teknika rakkomandata, mill-inqas għall-każijiet sempliċi. Let me imorru quddiem u run jagħmlu ebda tpartit darb'oħra, ./noswap. Interessanti. Allura avviż dak li jidher li jkun veru. x huwa 1, y hija 2, iżda huwa 2 meta b hija l-1. Allura dawn iż-żewġ b'xi ltqajna biddlu iżda xuy mhux qed skambjati. Allura biex tkun ċara, dak li qed jiġri huwa, up here I jkollhom xuy u dawk huma varjabbli lokali fil- ambitu ta 'prinċipali, jien tgħaddi fil xuy li tpartit. Issa, tpartit, bħala funzjoni separata, huwa liberu li call argumenti tagħha jew parametri xejn tagħha trid. Foo jew bar jew x jew y jew jew b. Just biex tagħmilha ċara li dawn qed mhux identiku għal xuy per se, Stajt qal aub. Iżda nistgħu jsejħulhom xejn li rridu. U hekk jidher qisu tpartit qed jiġi mgħoddi x-- AKA a-- u huwa li jiġu mgħoddija y-- AKA b. B'xi dawn it-tliet linji huma iskambji dawk il-valuri eżattament kif Lauren għamlet mal-ħalib u ĠU. Iżda meta aħna jistampa il-valuri, au b huma tabilħaqq tpartit iżda x u y jkollhom l-ebda bidla lilhom. Ifakkar li x uy huma up here. Allura nistgħu naraw dan permezz teknika oħra kif ukoll. U dan ukoll hija teknika inkorporati fl problema stabbiliti tlieta. Ejja imorru quddiem u tagħmel dan fi CS50 ID jekk inti ma jkunux diġà. Fuq in-naħa tal-lemin aħna jkollhom din tab Debugger. U jekk inti tiftaħ dan up, hemm xi informazzjoni arcane li l-jintefgħu fil int inizjalment. Imma ejja tease dan apparti reali fast. Allura wieħed, tara varjabbli lokali. Jirriżulta li jibnu fis IDE CS50, u ħafna ta 'ambjenti ta' programmazzjoni aktar ġeneralment, huwa debugger. A għodda li tippermetti li inti tara viżwalment x'inhu għaddej ġewwa tal-programm tiegħek mingħajr ma jkollhom jirrikorru għal żieda printfs u kompilazzjoni u t-tmexxija u żżid l printf u l-kumpilazzjoni u tmexxija, li diġà, fil-ħinijiet uffiċċju jew dar, huwa probabbilment jkollna pretty tedious. Allura hawnhekk, fi ftit mument, aħna qed ser tara fil-ħin reali il-valuri ta 'varjabbli lokali tagħna. Aħna wkoll qed tmur biex ikunu jistgħu jistabbilixxu liema huma msejħa breakpoints li opportunitajiet fil-programm tiegħi biex nieqaf eżekuzzjoni fi linja speċifika tal-kodiċi li jien kurjużi dwar. Dritt? Dawn il-programmi mmexxija fit-tieni qasma. Huwa tip ta 'sbieħ għalina l-bnedmin kajman li tkun tista 'nieqaf, tieħu mument, ara x'inhu għaddej madwar linja partikolari ta 'kodiċi mingħajr il-ħrit programm permezz ta 'dan u l-irfinar kompletament. Allura breakpoints se jippermettilna naslu biex tinkiser u nieqaf f'ċertu punt. Sejħa munzell huwa mod fancy ta qal liema funzjonijiet huma bħalissa qed jissejjaħ fil-mument. Main huwa dejjem jissejjaħ ewwel. Imma jekk Main sejħiet funzjoni msejħa Swap, aħna qed attwalment għaddejjin biex tara dan torri ta 'funzjonijiet li jkunu ġew jissejħu f'ordni kronoloġika reverse. Mela ejja ara dak. Jien ser zoom out. Jien se jmorru lura għall-kodiċi tiegħi. U biss għaliex nixtieq li jkun pedantic hawn, Jien ser jimxi 'l quddiem u kklikkja biss għall-xellug tal-linja ħamsa. U li toħloq tikka ħamra. U avviż fuq il-lemin li l-debugger jaf, ħej, I biss qal breakpoint fil linja noswap.c ħames, speċifikament fil din il-linja tal-kodiċi. Allura l-debugger jaf li I talbu li l-ħin li jmiss I run tiegħi program pause eżekuzzjoni hemm aktar milli biss jmexxu l-ħaġa sħiħa super fast. Allura issa jien ser ikklikkja l-debug buttuna fil-quċċata nett tal-IDE u li għaddej biex jagħmlu dan li ġej. Huwa ser tiftaħ inizjalment kemmxejn scary tieni terminal tfittex window-- debugging bogħod mill ospitanti tali u such-- u aħna ser terga 'lura għal dak dak kollu li jfisser qabel twil. Imma x'inhu importanti għal issa huwa li dan dot aħmar ntlaqtet, l debugger ikun deliberatament waqfa qasira execution-- mhux fuq dik il-linja per se imma fuq l-ewwel linja ta 'kodiċi attwali f'dik il-funzjoni. U hu għalhekk line seba hija issa enfasizzati bl-isfar. U issa ejja tagħti ħarsa fuq in-naħa tal-lemin. Jidher qisu, awtomatikament, nicely biżżejjed, x ikollu liema valur? 0. U y għandu liema valur? Zero. U li jkun mistenni fis-sens li x u y-- li line-- isfar għandu mhux esegwiti s'issa. Allura x m'għandhomx ikollhom l-valur 1. Jista 'jkollhom kwalunkwe valur ieħor, valur żibel hekk imsejħa. U aħna ltqajna xxurtjati f'dak li huwa żero f'dan il-punt, essenzjalment. Allura issa hemm biss ftit buttuni għandna bżonn kura dwar meta debugging b'dan il-mod. Avviż hawnhekk, għandna buttuna Play. U jekk aħna play jew jolqtu jerġa, li jinsab biss ser tgħaddi minn ġos il-bqija tal-programm jew sakemm hits breakpoint ieħor. Imma stajt ma jistabbilixxi l-ebda oħra breakpoints dan huwa biss ser jgħaddi mill-aħħar. Dak it-tip ta 'telfiet l iskop ta 'poking madwar. Allura minflok, I care about dawn ikoni fuq il-lemin. U jekk I imbagħad jerġgħu jsiru fuq minnhom, kif inti għandek wisq, tkun taf tara ftit tips għodda tips--. Dan huwa wieħed pass fuq. Issa dan ma jfissirx skip il-linja tal-kodiċi ta 'wara. Li sempliċiment ifisser esegwit u jimxu għall-ieħor, jimxu għall-ieħor, jimxu għall-ieħor. Fi kliem ieħor, permezz li buttuna, jista I walk permezz my pass kodiċi wieħed kull darba. Linja b'linja, litteralment. Issa, id-dritt ta li, hemm ieħor li aħna ser tara fi ftit mument. Dan huwa l-hekk imsejħa Pass Into ikona li l- ser ippermettuli adsa fil-funzjoni ieħor. Imma ejja naraw dan fi ftit mument. Hekk jien ser ikklikkja pass fuq. U issa avviż, kif I ikklikkja din il-buttuna fil kantuniera, żżomm għajnejk bejn wieħed u ieħor taħt Lokali Varjabbli u tara x'jiġri lill x. x issa huwa 1 minħabba l- linja isfar issa esegwita u konna ċċaqalqu sal-linja 8. U fi ftit mument y għandhom nisperaw isiru 2. Issa, xejn li interessanti jiġri għal bit. Dan kollu huwa huwa printf. U avviż, fl terminal sekondarja tiegħi tieqa, nara l-output ta 'def print. U issa I għandhom jagħmlu deċiżjoni dwar l-programmer. I tista 'pass fuq din il-linja ta' kodiċi, eżekuzzjoni iżda mhux jkollna kurjużi dwar x'hemm ġewwa. Jew I jistgħu attwalment pass lejn it u jmorru ġewwa ta 'Swap innifsu. Mela ejja jagħmlu l-aħħar. Let me imorru quddiem u kklikkja mhux Pass Over iżda Pass Into. Avviż, kollha f'daqqa il-bidliet tieqa li tenfasizza l-ewwel linja tal-kodiċi fil-Swap. C'est linja 21. U issa, liema tip ta 'funky hija li, jekk inti tħares fuq hawn, kif mistenni, comma b hija l-1 u 2, rispettivament. Għaliex hija temperatura 32767? Waqt li jfakkar li temperatura, simili ħafna l-tazza vojta mument ilu, hija dikjarata hawn fuq il-linja 21. Għaliex 32,000- I mean, għaliex hija hija biss xi valur stramb? Yeah? UDJENZA: Mhuwiex initialized. DAVID J. Malan: Huwa ma ġewx initialized. Allura kompjuter tagħna dejjem memorja fiżika. Hija dejjem għandha RAM fiżiku. U dejjem hemm żero ta u wieħed fil hemm, id-dritt? Għaliex aħna qed tuża tagħna kompjuter il-ġurnata kollha, inti qed tuża l-IDE CS50 jew l-servers kollha jum twil. Allura li RAM jew għandha xi żerijiet jew xi s membru jew iktar żerijiet u dawk. Ma jimpurtax jekk jew Ma inti qed jużawhom. Inti ma tistax sempliċiment għandek vojt spazji fejn inti tixtieq bits. Huma qed kemm żerijiet u dawk. Għalhekk jirriżulta li temperatura, minħabba konna ma initialized encore, għandna dawk 32 bits iżda li ħadthom mhux ġew initialized għal kwalunkwe valuri magħrufa. Allura kull ma kienu l-aktar użat reċentement for-- dawk 32 bits-- aħna qed biss tara l-artifacts ta 'xi użu preċedenti ta 'dawk partikolari 32 bits. Hekk kif I ikklikkja pass fuq għalkemm, Phew, temperatura hija se tikseb l-valur 1. U jekk jien tagħmel dan mill-ġdid, a huwa se tkun minħabba l-valur 2 u mbagħad b se jingħataw il-valur 1. U hekk x'hemm sbieħ issa fil dan il-punt fl-istorja huwa li l-debugger hija juru lili, super bil-mod fil-pass tiegħi stess, liema l-istat ta 'Swap huwa. Iżda avviż fil-quċċata hawn, avviż li l-munzell sejħa attwalment għandha żewġ saffi lilha. Issa l-wieħed li enfasizzati bħala Swap, jekk I ikklikkja fuq Main minflok, avviż kif il-varjabbli lokali bidla minħabba li l-iżviluppatur jista ħops biss madwar u jmorru fi kwalunkwe ambitu differenti. Allura anke jekk aħna qed tagħmel dan kollu xogħol u iskambji korrett u b, jekk immur quddiem u lura bejn Swap fejn a hija 2 u b hija l-1 u Main, tkun Main ġie affettwat xejn? No Allura x'inhu l-takeaway hawn? Ukoll, jirriżulta li kull ħin inti sejħa funzjoni bħal Swap, u inti tgħaddi l-argumenti it, dak int tgħaddi għall-funzjoni Swap f'dan il-każ hija kopja ta 'dawn l-argumenti. Mela jekk x uy huma kull rispettivament 32 bits, dak Swap huwa jkollna huwa lokali żewġ ġdida varjabbli, jew argumenti, jissejjaħ u b-- iżda dawk huma arbitrarji names-- iżda l-mudell ta 'żerijiet u dawk ġewwa ta aub huma ħejjew biex tkun identika għall xuy iżda mhumiex l- istess ħaġa bħat xuy. Huwa bħallikieku Main għandha fuq biċċa tagħha ta karta in-numru 1 u 2 għall xuy, u mbagħad meta idejn li biċċa karta li tpartit, Swap malajr ħafna gets pinna tiegħu stess, jikteb isfel 1 u 2 fuq folja tal-karta tagħha stess, idejn lura l xy oriġinali Main u mbagħad ma tagħha stess ħaġa ma aub. U issa dan huwa super importanti għaliex dan għandu implikazzjonijiet nontrivial għall-fatt kitba kodiċi korrett għaliex jidher ma nistgħux tpartit żewġ varjabbli. Ktibtu funzjoni Swap korretta. Imxejna implimentati bl Lauren bħala funzjoni tpartit korretta fir-realtà, imma apparentement ebda wieħed li kwistjonijiet jekk inti ma tistax attwalment tpartit żewġ valuri permanenti. Allura għandna bżonn mod ieħor li fil-fatt tikseb fuq dan, u għandna bżonn biex ikunu jistgħu attwalment issolvi din il-problema. U jirriżulta out-- u aħna ser jiġu lura għall din l-istampa partikolari qabel long-- dan huwa mod wieħed li inti tista 'tiġbed memorja tal-kompjuter tiegħek. Huwa biss rettangolu. Inti tista 'tiġbed xi numru ta 'modi iżda huwa konvenjenti biex tiġbed bħala rettangolu għar-raġuni li ġejja. Aħna qed tmur biex tibda llum u lil hinn jitkellem dwar l-hekk imsejħa munzell. U l-munzell huwa biss blokki ta RAM-- blokki ta 'memory-- li l-funzjonijiet jkollhom aċċess li meta jkunu qed jissejjaħ. U għalhekk jirriżulta li fl -qiegħ nett ta 'dan munzell huwa fejn kollha ta 'varjabbli lokali ewlenin tal u org C u V org u dak kollu li Jittieħed se jmorru awtomatikament. U jekk Main jitlob xi funzjoni oħra bħal Swap, ukoll, Swap hija se tikseb ieħor saff ta 'memorja up hawn fuq. U hekk biss biex jagħtuk sommarju ta 'malajr stampa ta 'dan, jekk immur fuq here-- u let me mera dan fuq il- overhead kif well-- dak li verament jien, jekk aħna kura biss dwar il- qiegħ ta 'din l-istampa għal issa, hija li meta I run program u Main gets imsejħa, Main jingħata blokki ta ' RAM fil-kompjuter tiegħi li hija fil-qiegħ ta 'din l-hekk imsejħa munzell. U jien ser tiġbed deliberatament bħala kwadru. Allura huwa simili 32 bits jew erba bytes. U jekk din il-funzjoni prinċipali għandha varjabbli imsejħa x b'valur ta 1 u għandu varjabbli imsejjaħ y mal-valur ta '2, li l- bħal li jieħdu din sliver ta 'memorja li Main tkun ingħatat mill-makkinarju tal- sistema u jaqsmuh, b'tali mod li l-ewwel varjabbli lokali tmur hawn, it-tieni wieħed imur hawn, u li hu. Meta Main jitlob Swap, Swap gets porzjon tagħha stess ta 'memorja li aħna ser jiġbed bħal dan mis-sistema operattiva, u li għaddej biex ikollhom tiegħu varjabbli lokali stess ibbażati dwar l-implimentazzjoni tagħna aktar kmieni bil varjabbli lokali ta ' u b li inizjalment jiksbu l-valuri 1 u 2. Iżda mbagħad, hekk kif il-kodiċi Swap tesegwixxi, u Lauren attwalment swaps l ĠU u ħalib, dak li qed jiġri? Ukoll, dan 2 qed isir 1, dan 1 qed issir 2, u, mill-mod, hemm varjabbli temperatura li l-jiġu użati dak iż-żmien kollu li eventwalment tmur bogħod. Iżda dan ma jimpurtax kemm ix-xogħol li tagħmel f'dan il-linja of-- f'dan l-ispazju memorja, x uy huma kompletament mhux mittiefsa. Allura għandna bżonn xi mod kif tingħata Swap u funzjonijiet bhalu aċċess sigriet, jekk inti se, biex funzjonijiet like-- memorja bħal xuy. Mela ejja tagħti ħarsa lejn eżempju li jgħin naraw eżattament dak kien għaddej dan iż-żmien kollu. Jien ser jimxi 'l quddiem u jiftħu Qabbel Zero. U jien ser tagħlaq debugger tagħna, jien ser li tagħlaq dan scary tfittex messaġġ l-ftit jgħid, stenna minuta, int fil-debugging nofs. Jien ser jaħbu dan tab hawn biss li jmorru lura għall-sempliċità. Għalhekk tinkwetax jekk GDB jinqatel. Li biss ifisser li l-programm ġew nieqaf, deliberatament f'dan il-każ, minni. U issa Qabbel Zero ma dan. Jien bl-użu CS50 librerija fl-I standard / O. Stajt ltqajna funzjoni ewlenija li l-ewwel jgħid, jgħidu xi ħaġa, u gets string. Imbagħad jgħid mill-ġdid u gets string ieħor. U Avviż li dawn iż-żewġ kordi huma msejħa iu t, rispettivament. U issa dan il-programm, Qabbel Żero, l-iskop tagħha fil-ħajja, huwa suppost li tell me, ma I tip l-istess ħaġa? U hekk jien ser lura għal ġimgħa. Jien jużaw operatur ugwali tiegħi ugwali li hija l-operatur kwalità. Mhux l-operatur assenjazzjoni, l-operatur ugwaljanza. Jien biss jqabbel iu t. Mela ejja fil-fatt imorru quddiem u tagħmel dan. U jien ser jimxi 'l quddiem u jagħmlu Qabbel Zero. Jien ser tagħmel ./comparezero. U jien se jmorru quddiem u ngħid xi ħaġa simili, ejja jagħmlu mom fil lowercase u kif madwar mom fil uppercase. U ovvjament I tip affarijiet differenti. Kull dritt. Dak li jkun mistenni. Ejja run mill-ġdid. Iż-żewġ ħinijiet do zghar, zghar. Li tidher super identiċi lili. Ikteb. KOLLOX SEW. Forsi huwa biss stramb għaliex mhuwiex Predisposizzjoni grammatika tiegħi. Mela ejja do a MOM kapital, kapital MOM, identiċi. Affarijiet differenti. Allura għaliex huwa li? Ukoll, dak li attwalment għaddejjin fuq minn taħt il-barnuża hawn? Mela ejja jmorru lura fuq hawn għal ftit mument u jikkunsidraw liema GetString huwa fil-fatt jagħmlu. Meta inti sejħa GetString, li l-funzjoni aħna nfusna kiteb u qualche gets sekwenza ta 'karattri mill-utent. U ejja nassumu li l-ewwel darba I call GetString, li tagħti me blokki ta 'memorja li tidher bħal dan. U jekk I ittajpjat fil kollha lowercase m-o-m-- u dak li jmur wara dan? Just verifika sanità malajr. Żero backslash. Aħna nafu li. U tfakkar li aħna lagħbu madwar bl-isem Zamila tal u mazz ta 'ismijiet oħra meta Rob hawn kien qed ifittex lejn dak li jiġri ġewwa tal-memorja. Allura li l-istorja eżattament l-istess. Dan huwa dak GetString huwa jirritorna lili. Issa, il-kodiċi tiegħi mument ilu maħżun il-valur ritorn ta GetString fil-varjabbli imsejħa s. U mbagħad it-tieni darba I sejħitilha, dan maħżuna dan fil-varjabbli imsejjaħ t. Mela jekk jien jmorru fuq hawn, I bżonn tiġbed dan variable-- lokali u jien ġeneralment ser jiġbed string kif just-- aħna ser sejħa hija s-- bħala kwadru ftit hawn. U issa, somehow-- kif ma mom mur ġewwa ta 'dan il-varjabbli i? Well, għandna bżonn immorru lura li ewwel prinċipji hawn. X'inhu GetString attwalment jirritornaw? Għalhekk jirriżulta li M-O-M backslash żero, u kull numru ta 'spag oħra fil-memorja bħall Zamila u Rob jew Andy jew xi oħrajn, huma ta 'kors fil tagħna RAM kompjuter jew memorja. U RAM tiegħek għandu like-- għandek GIG ta 'RAM, żewġ gigs ta' RAM, jew biljun jew tnejn biljun bytes, jew forsi saħansitra aktar dawn il-jiem. Mela ejja nassumu, għal skopijiet tal-lum, li ma jimpurtax kif aħna numru minnhom, iżda nistgħu tagħti numru lil kull ta 'dawk biljun jew tnejn biljun jew erba 'biljun bytes. U ejja biss jgħidu li b'mod arbitrarju dan huwa l-ewwel gidma, it-tieni gidma, tielet, ir-raba. Jien deliberatament ma jużawx żero għall lum, iżda aħna ser terga 'lura għal dan. Allura fi kliem ieħor, jekk dan huwa l- ewwel darba jien jużaw il-programm, Jien biss jkollna xortik tajba u l-ewwel gidma huwa fil waħda lokazzjoni imbagħad tnejn imbagħad tlieta minn erba '. U jekk I tinżamm tpinġija, numru Kaxxa żewġ biljun ikun mod minn hawn. Allura dak li taħseb, imbagħad, GetString attwalment prospetti? Mhuwiex jirritornaw backslash M-O-M żero nnifisha għaliex li b'mod ċar mhux se jaqbel fil-kaxxa li stajt mfassla. Allura dak li inkella jista GetString attwalment jirritorna kollha dawn il-ġimgħat? It-tweġiba hija fuq il- board hawn x'imkien. Inti ma jistgħux jitwaħħlu backslash M-O-M żero, hekk dak li jista 'jagħmel sens minflok? Jekk kellek li tkun super għaqlija, it-tqegħid fuq l-hekk imsejħa hat inġinerija, dak li jista inti tirritorna? X'inhu l-inqas ammont ta 'informazzjoni inti tista 'ritorn li xorta let issib M-O-M fil-memorja? Yeah? UDJENZA: One. DAVID J. Malan: One. U għaliex wieħed? UDJENZA: Minħabba li se tell inti fejn imorru [inaudible]. DAVID J. Malan: Eżattament. I am biss ser jirritorna l-indirizz tas-sekwenza li jien gotten. L-indirizz f'dan każ huwa post wieħed. Allura dak li verament qed jiġi maħżun fil s-- u kull varjabbli string b'hekk far-- għadu kif ġie l- indirizz ta 'dak string. Sadanittant, jekk I call GetString tieni darba u I tip fil litteralment l-istess thing-- M-O-M ma lowercase-- M-O-M u backslash ieħor żero, u issa forsi l-programm tiegħi ilu għaddej għal xi żmien hekk forsi din huwa 10, dan huwa post 11, dan huwa 12, dan huwa 13. Il-kompjuters li jużaw xi oħra memorja għal kwalunkwe raġuni. Dak li issa tmur fit-tieni tiegħi varjabbli f't programm tiegħi? 10. Eżattament. U hekk meta nħarsu lejn l- kodiċi tas-sors ta 'dan il-programm fejn jien sempliċiment jippruvaw li jitqabblu ż-żewġ valuri, huwa s ugwali daqs ta 't, x'hemm ir-risposta tal-bniedem ovvja? Biss l-ebda għax 1 mhuwiex ugwali għal 10. U hekk hawnhekk tinsab l opportunità għalina verament li jmorru biss lura għall-, għal darb'oħra, l-ewwel prinċipji u jaħsbu dwar, sew, x'inhu għaddej taħt il-barnuża? Imxejna ġiet jitkellem dwar bits u bytes u l-memorja, iżda huwa attwalment utli li wieħed jifhem għaliex meta inti sejħa GetString, anke jekk aħna jaħsbu li huwa jirritornaw M-O-M jew string mom jew Andy jew Zamila jew bħalhom, teknikament huwa biss jirritorna l-indirizz ta 'dak blokki ta' memorja. Imma dak li OK. Minħabba kif inkun naf fejn il-sekwenza jispiċċa? Jekk jien biss minħabba l-bidu? Ukoll, il-backslash żero, id-dritt? Just fil-ħin lineari nista ' jistampa mal def print M-O-M. U hekk kif nara backslash żero, I do not care fejn bdejt, I diġà jafu impliċitament I fejn jeħtieġ biex tintemm. U hekk illum jimmarka l-beginning-- u let me tagħmel dan b'mod drammatiku għaliex aħna għaddiet minn ħafna problemi li tikseb dawn taħriġ wheels-- hawn hekk illum ir-roti ta 'taħriġ jibdew li ġejjin off u aħna jiżvelaw fi least-- [Applause] Dan kien ukoll jiswa l-vjaġġ ma 'Target dalgħodu, iva? Allura now-- hemm, jirriżulta out, l-ebda ħaġa bħal string. String ma teżistix. Huwa sinonimu li aħna kellna ġewwa tal-librerija CS50. Minn issa, aħna qed tmur biex tibda sejħa iu t mhux kordi iżda istilel char. U l-istilla char Aħna ser tease apparti qabel fit-tul. Iżda dan fi kliem ieħor, li anke jekk aħna nkomplu użu GetString għal issa, teknikament I għandu tkun tgħid star char u stilla char. U jirriżulta liema dik star se juri hija xi ħaġa imsejħa pointer jew indirizz. U fil-fatt, teaser għall dak li jinsab quddiem hija din 20 sekonda clip minn tagħna ħabib Nick Parlante fil Stanford li, pjuttost xi żmien ilu, iqattgħu redikoli ammont ta 'żmien, bħala l-aħjar I tista 'tgħid fil tiegħu kċina jew kantina tiegħu, jagħmlu claymation introduzzjoni għad-dinja karattru jismu Binky li magħhom aħna se jiġu introdotti ħin li jmiss biex pointers. Allura hawnhekk hija preview tal dak li ġejjin. [Daqq video] -Hey, Binky. Wake up. Wasal iż-żmien għall-gost pointer. -Dak X'inhu? Tgħallem dwar pointers? Oh, Goody. [END Daqq] DAVID J. Malan: U fuq din in-nota, aħna se tara int nhar l-Erbgħa. Kull dritt. Min hu żfin? Come fuq. Min hu żfin? Inti trid lili biex tikseb dan beda? I ser tingħata dan beda. Woooo! Lauren: fancy Sweet Mosè.