DAVID J. MALAN: Hau CS50 da, eta aste honetan lau hasiera da. Eta, mutila, Volkswagen da aurkitu Arazo guztien software delako. Dezagun begirada bat eramango gaituzte. [Bideo-erreprodukzioa] -Cars, Pertsonaiak smartest Azkar eta amorruz filmak. Aste Alemaniako automaker hau Volkswagen aurkitu bera eskandalu baten erdian proportzio penala potentzialki. -Volkswagen Da milaka milioi bracing isunak, ahalik eta zigor-gastuak bere exekutiboak, gisa Enpresan apologizes 11 milioi auto rigging hasi da lagundu isuriak probak beat. -Certain Diesel eredu izan ziren software sofistikatuak diseinatu erabilitako informazioa barne gidari eta ibilgailu posizioa azkartzeko autoa izan zen zehazteko emisioak probak jasaten. Egoera horren pean, motorra isuriak toxikoak murriztea litzateke. Baina autoa saihesbidea nahi zutela zen Hori zenean bultzatuta ari. Emisioak handitu 10 40 aldiz onargarria EPA mailatik. [END erreprodukzioa] DAVID J. MALAN: Hargatik honetan begirada bat hartu eta ikusi nola hau inplementatu liteke eta hori nola liteke eraginik hau bezalako autoak hainbeste. Beraz, nire eskua hona hemen prentsa oharra EPA-- emana zen Ingurumen Babesteko Agentziak bertan AEBetako arautzaile agentzia da ingurumen kezkak maneiatzen, eta, ondoren, benetako Legezko abisua zela Volkswagen bidali egun gutxi batzuk besterik ez duela. Beraz EPA idazten, eta discloses orain publikoki, software sofistikatu bat Algoritmo batzurekin Volkswagen ibilgailu detektatzen autoa murgilduta dago igorpen ofizialak probak eta emisio osoa bihurtzen kontrolatzen proba bakarra zehar. Eraginkortasuna ibilgailuen kutsadura horiek isurien kontrol gailu da hein handi batean Gidatze normal guztian zehar murriztu egoerak. Hau betetzen duten autoak emaitzak laborategian edo probetan estandarrak geltokia, baina ohiko funtzionamenduan zehar igortzen nitrogeno oxides-- edo NOx-- gehienez 40 aldiz estandarra. Volkswagen sortutako software The aurrekontu unquote porrota gailu bat da, definitu Clean-ek Air Act AEBetan. Joan dira mutilzahar EPA eta beste bide agerian porrota gailua analisi independentea ondoren software West ikertzaileek Virginia University. NOx kutsadura laguntzen du nitrogeno dioxidoa, lurraren mailan ozonoa, eta partikula finak materia. Horien eraginpean kutsatzaile izan lotuta sorta zabal batekin osasun-ondorioak larriak, asma handitu barne erasoak eta beste arnas larria izan daiteke nahikoa gaixotasun Jende bidaltzeko ospitalera. Ozonoaren eraginpean eta partikulak ditu, halaber, izan goiztiarra lotutako heriotza arnas aparatuko ondorioz edo erlazionatutako kardiobaskularrak ondorioak. Haurrak, adinekoak, dituzten pertsonak lehengo arnas gaixotasun bereziki arriskuan daude osasun kutsatzaile horien ondorioak. Aski da esateko, nahiko larria da. Eta goazen on irakurtzeko Puska bat gehiago eta, ondoren, begirada bat hartuko dugu oinarrian dauden inplikazioak hau auto baten testuinguruan. Hain zuzen ere, Volkswagen fabrikatu eta instalatu deiturikoak ere software kontrol elektronikoa module-- edo ECM-- ibilgailu horiek sumatzen ibilgailuak probatu ari zela EPA igorpen estandarrak betetzen. Oinarritutako hainbat sarrera barne bolantea posizio, ibilgailu Abiadura, motorraren iraupena Eragiketa eta barometric presio, hain zuzen, sarrera horiek parametroak arloak egiteko erabilitako federal proba prozedura- isuriaren EPA ziurtagiria lortzeko probak helburuetarako. EPA-ren isuriaren Probetan ibilgailu ECM softwarea bertan ekoiztu software ran betetzen isuriak emaitzak. Beste une oro, eta Ibilgailua ECM software Aparteko errepide bat zuena calibration horrek murriztu eraginkortasuna igorpen oro har, kontrol-sistema, Zehazki selektiboa katalitikoa Lean NOx murriztea trap-- Hauei buruzko ikusiko dugu une batean. Ondorioz, NOx 10 eta 40 aldiz aldiz handitzen du EPA betetzen mailatik Pase zikloaren motaren arabera. Beraz, zer esan nahi du benetan, eta source software exekutatzen den kodea Volkswagen on ez dauka oraino publikoki kontuetarako, dela, bai, hori baliokidea han nonbait barruan Volkswagen kodearen. Zuk probatu ari bazara, eta autoa bada ingurumen faktore batzuk detektatzen bolantea bezala Posizio edo mugimendua edo falta autoaren kontratuan edo Edozein beste faktore batzuk Une horretan hipotesi daude formula honen parte izan nahi du, piztu dute, besterik gabe, emisioak osoa kontrolatzeko. Beste era batera esanda, hasten dira kutsatzaile gutxiago igortzen. Bestela, beste egoera guztietan denean, ez da ari, antzemandako laborategian, egin besterik ez dute. Eta, beraz, hau errazteko daiteke gehiago sartu zerbait pseudocode hormigoia horrela. Gurpilak inflexio baina bada bolantea ez da, iradokitzailea autoan batzuk abian da biratzen zilindro moduko baina nolabaiteko probatzen ari biltegia, orduan jokatzen duten bezala EPA duzu nahi. Bestela, ez. Beraz, dezagun begirada bat bideo labur batean dagoela zer inplikazio errepasatzen du Hori, egia esan, mekanikoki. [Bideo-erreprodukzioa] -Azken Ostiralean EPA iragarri batzuk Volkswagen Audi autoak 2009 artean egina eta aurten erabiliz Porrot gailu deiturikoak emisioak legeak mugitu airea garbi mantentzeko diseinatuta. Baina zer esan nahi du zehazki? Beno, auto moderno dute dozenaka horien barruan ordenagailuak. Eta ordenagailuak horietako batzuk funtzioak koordinatzeko laguntzeko ahalik eta motorraren performance bitartean ziur ez dagoela ez da gehiegi zabor ihes kanalizazio irteten. Nik, egia esan, lanean izan dute zenbait hamarkada oraingoz modu hau. Funtsean, zati bakoitza a auto moderno motorraren sentsore bat edo controller ditu da, eta ordenagailu horiek on dira irakurtzen datuak mila aldiz segundoko making doikuntzek erregai ratioa airea bezalakoa hori zilindro sartu. Iruzurra Volkswagen hauek eta Audi modeloak gasolioen dira, eta gasolioen bat gehiago ordenagailu benetan garrantzitsua parametroak kontrolatu, hau da, Erre gabeko erregai zenbatekoa joan ihes egin ondoren. Orain dela soinuak txarra. Ez du ematen, nahi duzun bezala litzateke Erre gabeko erregaia agortzen sartu. Baina baten kasuan ere diesel, zerbait egin behar duzu NOx tranpa bat gailu bat da deitzen duten xurgatu eta nitrogeno oxidoak tranpak kutsatzaile daude que iba bestela, atmosferara joaten. Eta NOx tranpa duten eragina da erre ez erregai indartu. Beraz porrota gailu bat programazio berezia da ordenagailu hauen barruan egin daiteke itxura auto betetzen ditu igorpen estandarrak ez ditu denean ere. Volkswagen arazo bat izan zuen bere eskuetan. Bere diesel motorren ziren ezagunak erregai ekonomia handia lortzeko, baina NOx tranpan bakarrik ondo funtzionatzen denean erregai gehiago erabiltzen ari da. Beraz, auto detektatzeko litzateke, Porrot Telefonoa erabiltzeko, denean isuriak bat zen lortzean Proba, erregai gehiago behar luke, the NOx tranpa lana ondo egiteko, isuriak, ondo egongo litzateke. Baina gero, errepidean, telefonoak itzaltzen, erregai gutxiago erretzea zu baina bezain 40 aldiz ari zara atmosferara kutsatzaile gehiago. Baina nola demontre egin Autoan jakin izan zela ari isuriak betetzeko probatu? EPA dioenez sofistikatu bat izan zen sistema gauza hautatuta dagoela bolantea posizio bezala, abiadura, zenbat denbora motorra izan zen, eta nahiz eta presio atmosferikoa. Beste era batera esanda, ez zen no modu hau zen ezustekoa software zegoelako diseinatu kontu handiz detektatzeko emisioak proba ofizial batean. Hori da, batzuk nahiko larriak iruzur eta hori da zergatik Volkswagen da hala nola arazoak larriak. Izan ere, bere zuzendari nagusia, Martin Winterkorn, urratsez urrats behera. Beraz, zer gertatzen da gero? Beno, milioi erdi bat bada diesel Jettas, Beatles, Golfs, Passats, edo Audi A3s gauzatu da, Berri ona da, da zure autoa gidatzeko segurua da oraindik. Ez daukazu vtzitera Volkswagen abisuaren bat egiten duen arte. Baina uneren batean ari dira ziurrenik behar joan Zure autoa barruan softwarea eguneratzeko. Hori gertatzen denean dituzun mila gutxiago depositua per lortu. Abokatuak dagoeneko engranaje demanda sortu beraz, jabeek ordaindu egin daitezke Etorkizunean uneren batean. Baina hori ez da joan gertatuko edonoiz laster. [END erreprodukzioa] DAVID J. MALAN: Beraz, hau benetan altxatzen Irudian question handiagoa interesgarri bat fidatu bezala. Eskuin? Guztiok iPhones edo Androids dute edo gure poltsikoetan zerbait ziurrenik egun hauetan, edo eramangarriak gure itzulietan diren on egin korrika software Apple eta Microsoft-ek eta beste enpresa-sortak. Baina nola dakigu zer software produktu hauek egiten ari benetan zer horiek Enpresak esan egiten ari dira? Esate baterako, nor den esaten duten aldi bakoitzean duzu Telefono dei bat zure iPhone egin edo Android telefono edo antzekoak, Telefono zenbaki hori, era berean, ez da ari konpainia batzuek en zerbitzari igotako programa batzuen dut duzulako idatzia, eragilea ote den sistema bera iOS edo Android bezalakoak, edo deskargatu delako Zenbait hirugarren batzuen aplikazioa nolabait entzuten ari dela Dena den zuk idazten ari edo guztia benetan esaten ari zaren. Nola dakizu hori, betiere you guys Clang exekutatzen ari edo Egin konpilatu zure CS50, nola, software propioa Egin duzu CS50 horren langileak, CS50 liburutegia bidez, Ez ditu behin saioa amaitzeko katea inoiz ahaztuak edo behin inoiz ahaztuak hazbeteko? Beno, zalantzarik gabe, ezin duzu begiratu source zerbait kodea at CS50 liburutegia bezala, zuk zitekeen jatorrizko kodean begiratzeko Linux sistema eragilea CS50 IDE exekutatzen. Baina aurkezpen bat harrigarria eman zitzaion atzera 1984. urtean Turing saria jaso batek ere ezagutzen ordenagailu oso ezaguna zientzialari as-- izeneko Ken Thompson nor Turing saria jaso duen informatikako en moduko da Nobel Saria, izango bada, Bere baten lanagatik izeneko sistema eragile Unix, eta bertan oso antzekoa da zer erabiltzen dugun espirituz Linux da. Eta galdera eskatu zion bere onarpen hitzaldian, funtsean esparrua finkatzen dituena urte eta eztabaidarako urte konfiantza eta segurtasuna buruz, hau izan zen. Zein neurritan beharko lukete konfiantza bat izan du adierazpena pieza bat programa bat ren software-- da Troiako zaldiak, doan? Agian gehiago garrantzitsua da fio duten pertsonen software idatzi zuen. Eta hain zuzen ere, lotuta izan dugu hitzaldia izango zuela Eman denean sari hau onartuz 'CS50 webgunean 80ko hamarkadan gaur egun orria Hitzaldiak azpian. Zer ikusiko duzu delako Benetan hori ematen zuen nola, nahiz eta adibide nahiko simple Clang edo dena bezalakoa konpilatzailea konpiladoreak beste batzuk iragan erabili behar izan zituzten, zer konpilatzailea dugu barneratua bada geure erabiltzen ari da pixka bat bada Egoera hori, funtsean, dio, kode hori erabiltzen ari da nabarituko duzu GetString funtzioa edo GetInt du funtzioa, aurrera eta txertatu atzeko ate bat edo Troiako zaldi bat besteak beste, programa hori orain zeroz batzuk eta zerbait maltzurren egiten direnak. Guztia hasten zure zanpatze, datu horiek igotzean zerbitzari batzuk, edo benetan ezer. Eta zer Ken Thompson Aurrera doa bere hitzaldia egin dela frogatzeko, nahiz iturburu sarbidea izango duzu Konpiladore baten Código maltzurki hori egiten liteke, Ez du axola duelako Han oilasko hau eta arrautza da Iraganean askoren errealitatea urte zeinaren konpiladoreak beraiek biltzeko erabilitako dira. Beste era batera esanda, modu back, norbaitek du lehen konpilatzailea idatzitako dute. Eta hortik aurrera, edozein momentutan eguneratu dute Bere kodea aldatuta konpilatzailea, ezaugarriak gehituz eta berriro konpilatu Gu bezalako jendeak erabili ahal izateko, bai eta, Oraindik zaharra erabiliz dute konpilatzailea bertsio berria biltzeko konpilatzailea bertsioa. Eta begirada bat hartu baduzu hitzaldia izango zuela eman zuen, egingo ikusten duelako zirkulartasunik hori, benetan ahal izango duzu bugs edo Troiako zaldiak software murgildurik erabiltzen ari gara. Eta begiratuz gero, are at source programa horiek kodea, Agian ez, nahiz agerikoa izan iruzurrak da benetan delako a bertsio zaharrago batzuetan Konpiladore duten geroztik Gure software sartu mehatxua injektatzen. Zein da bakarrik, esan nahi dugu Benetan ez eta behar ez Konfiantza software gure eramangarriak exekutatzen edo telefono edo edozein plaza kopurua. Eta hain zuzen ere, geroago seihileko honetan denean web programazioari buruz hitz egiten hasten garen eta benetan hasteko eraikitzeko web aplikazioen geure, horiei buruz hitz egingo dugu mehatxuak eta beste batzuk. Orain, zuk galdetu izan liteke, eta nabaritu Ez zela apur Darth txiki-txiki bat Klipak ere Vader dagoela Zorian ez zen erakusten Volkswagen buruz. Bada Nik inoiz ikusi, I pentsatu argitu behar dugu umore hori guztia delako Oso triste eta beldurgarria. Atzera begiratu noa Super Bowl 2011 denean by merkataritza Volkswagen-- eta honek ia egiten likable, berriro horiek Telebistan, lehen aldiz aired. Da 60 bigarren clip It gozatu ahal izango duzu uste dut. [Bideo-erreprodukzioa] [MUSIKA - gaitik "Star Wars"] [Txakur zaunka] [CAR hasten] [END erreprodukzioa] DAVID J. MALAN: Bai. I besterik ez egiaztatzea zen. Kotxe hori urratzeak zerrendan dago. Ados. Beraz, begiratu batzuk ditugu pseudocode une bat duela. Eta hemen handiago batean pseudocode kode Hori ikusi dugu hainbat aldiz, orain arte. Eta ez dezagun erabili hau aukera bat da orain programazioa aurkeztu berri Teknika hori egin genuen ikusi algorithmically azken astean, begiratu sort batu ginen. Baina dezagun formalizatzeko eta ikusi nola Baliteke erabiltzen dugun benetako kodea ere, eta, ondoren, goazen hau erabili joan Teknika errepidean behera gehien seguru asko, beste zenbait arazo konpontzeko. Beraz, hau izan zen lehen programa bat dugu inoiz idatzi zuen, pseudocode kodea bada ere. Eta zer Programaren baimenik ikastaroan egin gurekin Mike Smith aurkitu telefono-liburu bat izan zen. Eta lerro bereziki zortzi nabarituko eta 11 bertan Go To adierazpen hau izan. Eta hain zuzen ere, zenbait hizkuntzetan, C haien artean, Egia esan, ez dute adierazpen hori da, hitzez joan den aukera ematen dizu lerro jakin batera joateko. Honez oro har, baita frowned da, oso erraz neurriz dezake eta saltoka hasteko dezakezu zure programa guztiak leku baino ez bezala mota erabiliz Logika eta kontrol fluxua hori erabili dugu, orain arte baino ez dituzten loops eta egoerak eta antzekoak. Baina algoritmo hau errazteko dezakegu pseudocode kodea ere honela. Etorriko horren ordez edo begizta hurbilketa non ezkutatzen ditugu eta atzera eta atzera, hiru lerro, zergatik ez motatako punt dugu eta gehiago Oro har, zazpi eta 10 lerro esan, besterik ordezkatu bi horiek lerroak bikote, bestela Smith lehenago bada liburuan zaitugu bilatu Mike for the in ezker liburuaren erdia. Smith da geroago ez bada ere liburu, bilatu Mike egiteko eskubidea ere liburu seihilekoan. Eta konturatu dagoeneko zirkulartasunik du. Eskuin? Naiz bilatzen Mike batean telefono-liburua eta gero Hit azkenean dut, agian, Zazpi edo lerro agian linea 10 eta nire neure buruari instrukzioa bilaketa da Mike telefono liburuaren erdia. Beno, nola ez bilatu dut Mike egiteko? Naiz erdian Mike, zergatik bilatuz diren moduko bidaltzea duzu me biribilean? Baina hori OK zer dagoelako Arazoaren tamaina gertatzen, idatzitako gisa linea 7 eta 10 urtean? Ez gara besterik bilaketa esanez Mike, bilatu Mike da. Zehazki, esaten ari gara zer? Zion bilatzea ezkerreko erdia eskuineko erdia eta hori eraginkortasunez Arazoaren tamaina erdia. Beraz ondo dago garela motatako zirkulartasunik honetan parte, Argumentu zirkular honek, gutxienez garelako arazoa gero eta txikiagoa egiteko. Eta azkenean goaz iristeko joan oinarri hori kasu deiturikoak non orrialde bakar bat behar dugu ezker aldean gure boluntario joan den astean bezala did-- izan genuen orri bat utzi eta gero, ez dugu Mike Smith bila mantendu behar bai zuen orrialde horretan dagoelako edo ez da. Beraz, nola ideia hori, hau martxan jarri dugu Benetako kodea biribilkeriarik moduko? Beno, teknika bat leverage dugu hori, oro har, errekurtsio bezala ezagutzen. Eta ikusi dugu hau ere merge sort pseudocode joan den astean. Gogoratu hau zela merge sort pseudocode. Dudarik gabe, nahiz baino errazagoa burbuila edo hautaketa edo txertatzeko ordenatu besterik soiltasun dagokionez eta horrela izan, adierazi ahal izango duzu. Baina hori delako zirkularki moduko gaude , esanez bilatu zerbait egiteko horretarako berriro bilatuz. Baina ari banatan bilatzen dugu ezkerreko erdian edo eskuineko erdia eta gero, azkenean, ez gara Kasu honetan batuz. Baina hemen ere, batera horiek bi moduko lerroak, zuen berriro honetako dugu errekurtsio ideia. Eta zehazkiago, zer esan nahi, Algoritmo baten testuinguruan, da algoritmo hori errekurtsiboak da erabiltzen bada edo deiak bera. Edo C dagokionez, funtzio bat da izeneko funtzio bat recursive foo errekurtsiboak foo bada, nonbait bere iturburu-kodea ere, funtzio foo bera deiak. Eta hori txarra foo guztiak inoiz ez badu da behin eta berriro deitu bera. OK da foo azkenean gelditzen bada, egiten duen bezala batu, ordenatu, esanez, minutu bat itxaron, Arazo hau da super bada txikiak, adibidez, edo aurkitu nuen harekin naiz bila, besterik gabe. Ez errekurtsiboki, ez ziklikoki deitzen neure burua berriro. Eta beraz dezagun begirada bat Hau nola benetan lan egin dezake. Beraz, ez dut aurrera, eta irekia joan joan bi iturburu kodea adibide hemen. Horietako bat sigma 0 deritzo. Eta hori ez da batere errekurtsiboak, baina dezagun Programa honek egiten duenari begiratu. I biluztu Nik egindako guztiak da, baina guztietatik iruzkinak source CS50 on kodearen Webgune iruzkinak baduzu ditu bidez irakurri berriro beranduago nahi. Eta egin dezagun pare bat utzi behatu egiaztatzen hemen. Kode honen goialdean beraz, besteak beste cs50.h. Zer egin? Zergatik da hemen? Arrazoizkoa Layman en dagokionez. Zer egiten du? Bai. Ikusleak: GetInt funtzioa egiten du lan Beraz. DAVID J. MALAN: Beraz, GetInt funtzioa egiten du lan. Honen barruan duelako fitxategia, CS50.h, bertan luze baino lehen ikusiko dugu bere iturburu kodea dagokionez, funtzio sorta bat du declared-- GetInt, GetString, eta others-- eta ezean mordo bat Egia esan, ez dugu Besteak beste, hori line, Konpiladore Clang ez da existitzen dela jakin behar da. Eta bera lerroan doa Bi non int definitzen da printf, horrek funtzio bat da Pixka bat nahiko erabiltzen jarraitu genuen. Orain, lau lerro funky apur bat badirudi Bat liner bat besterik ez delako. Honez lortu, puntu eta koma, ez kizkur giltza, horren barruan kodea ez. Baina zer egin dugu deitu aste iragan kontu hau? Bai. Beraz prototipoa bat. Eta zergatik bat egin behar dugu prototipoa dela dirudien redundant apur bat izango da normalean dugulako normalean ikusi funtzioa berriro fitxategia beranduago, ezta? Beraz, zergatik ez zauden besterik ditugun Zure burua hazka baina hartu dut. Bai. Ikusleak: [INAUDIBLE] Funtzio nagusia ondoren. DAVID J. MALAN: Zehazki. Beraz, konpiladore daki Azkenean definitzeko edo ezarriko ditu Funtzio hori nagusien ondoren, ustez. Beraz Clang eta gehien konpiladoreak mota daude muda eta bakarrik egingo dute ezagutzen zer kontatu. Eta erabili nahi izanez gero Sigma izeneko funtzio bat, hobeto irakasteko konpilatzailea existitzen dela, aldez aurretik. Orain, bera nagusia, nahiz eta lerro sorta da, nahiz eta, da nahiko ezagunak Zorionez orain. Honez do begizta bitartean lortu horren helburua bizitzan Hemen da itxuraz bat lortzeko erabiltzaileari zenbaki positiboak. Eta besterik gabe, gorde zion pestering edo bere dute lankidetzan aritzea arte. Ondoren line 16 hasi nintzen dute deiaren interesgarri bat. IntAnswer. Zein ezquerrecoy Bigarren mailako ematen dit Int bat ezin diren store-- Answer-- izeneko hau da, gordetzeko, itxuraz, bueltan sigma balioa. Beraz sigma bat besterik ez da izen arbitrario baina esanguratsuak Dudan funtzio bat eman horren helburua bizitzan da argumentu bat hartu egiten zaitugu N deitu Beraz Kasu honetan eta besterik zenbaki hori batuketa hartu plus kopurua positiboren hori da hura baino txikiagoa. Beraz pasatzen dut 2 zenbakia ere bada sigma, gehitu nahi dut 2 plus 1 plus 0-- ez 0-- beraz, ematen dit 3. Pasatzen dut 3 sigma nahi izanez gero, nahi dut 3 gehi 2 plus 1, horrek ematen dit 6. Eta abar. Beraz, besterik gabe, gehitzen zuen beste guztien zenbakiak baino txikiagoa edo berdina da. Orain, behera hemen I besterik ez noa Erantzuna inprimatu. Azkar behatu txeke bat da, beraz, dezagun sigma 0-- dot barra sigma egin 0-- eta let me mota 2. Eta hain zuzen ere, lortu dut 3. Demagun idatzi 3 me. Hain zuzen ere, lortu dut 6. Eta edonork math azkar egin ahal izanez gero, egin nuen 50 zer naiz zerbait egiten badut? Ikusleak: [INAUDIBLE]. DAVID J. MALAN: Beno, ez. Baina 1.275 horrek nahiko hurbil. Beraz, hau 50 egitearen emaitza da plus 49 gehi 48 gehi 47 gehi 46 1 behera modu guztiak. Beraz, hori da sigma guztia egiten du. Baina ikus dezagun nola dugu orain martxan. Beraz, behera hemen funtzioa bera da. Eta hau ez dirudi dute ezer oraindik errekurtsio egin. Izan ere, bat erabiltzen ari gara Eskola teknika zaharra. Batura aldakorra izeneko bat naiz hasieratzean zero, gero foreloop bat daukat hemen, eta deitzen Int bat geratuko naiz I, ezartzean lortzen 1-- berdintasuna berdin da ezarri nezakeen arren zero, baina horrez gain, egiten ari naiz geroztik, Nork zaintzen da zero edo bat bada. Honez ez du eraginik izan behar. Beraz errepikatzean naiz hain luze jo i txikiago edo m, berdina bertan argudioa izan zen pasa da. Eta gero, mantendu besterik ez dut I. eta ikuspegi Incrementing Begizta guztiak egiten ari naiz batura egiten ari da plus berdintzen I. Eta hori da, nahita. Ez dut nahi ez, honetan Kasu, batuketa gehi plus bezala. Benetan gehitu nahi dut oraingoa dut balioa horrek mantentzen handiagoa eta handiagoa eta lasterka Tally handiagoa. Eta gero, batura itzuli nintzen. Eta beraz, erantzuna balio batura lortuko. Eta, ondoren, inprimatu egin nintzen. Beraz, ez dago aukera bat da hemen, nahiz eta, mota horretako sinplifikatzen Kode hori kontzeptualki eta kolpe mota bat da egiteari dagokionez axola soiltasun are arren ordenatzeko pixka bat hartzen eskertzen zergatik honetan Adibide txiki horiek ere indartsua da. Hemen sigma beraz one-- da Kode hori bigarren bertsioa. Dena eman goi-berdina da, beraz, istorioa bera baino lehenago aplikatzen. Baina, gaur egun dezagun at sigma ezartzeko bertan Whittled behera Nik besterik horiei lerroak lau kode lerro, benetan, plus batzuk kizkur giltza eta espazio zuria. Baina, zer egiten ari naiz? M baino txikiagoa edo berdina bada zero, mota horretako kudeatu behar dut Kasu super erraza. Eta entregatu me bada zero edo ezer negatiboa besterik ez da arraroa, Besterik ez naiz arbitrarioki joan baina koherentziaz itzuli zero. Ez dut gauza hori nahi infinitua bitxi batzuk sartu begizta delako balio negatiboa. Beraz, ez dut besterik gabe, esaten dut me ematen bada zero edo gutxiago, dut itzuli zero. Baina hori ona da hori delako Telefono Liburuaren orrialde bakar batean, Hori geratzen. Oso arazo jakin bati ziztada naiz off eta ez zerbait deituz errekurtsiboki. Baina line 31, zer ez da egiten, badirudi I? Parentesi besterik mantenduz Gauzak, zorionez, apur bat argiagoa. Baina guztiak egiten ari naiz da naiz m-- itzultzean edozein dela Niretzat gehi entregatu m-- Sentitzen balioa, plus m ken 1 sigma balioa. Beraz, zer esan nahi du horrek? 3 zenbakia ematen badidazu sarrera gisa, erantzuna, azken finean, lortu nahi dut 6 da 3 gehi 2 gehi 1 ematen dit 6 delako. Baina, nola egin pentsatu nuen nola kodea hau egiten ari da? Sigma deitu nuen lehen aldiz eta pasa 3 balioa dut, hori zati batean esaten duena bezalakoa da paper, hona hemen 3 balioa eta izan dut gainditu hau sigma bezala. 3 da, jakina, 0 baino gutxiago, beraz, ez IF baldintza ez aplikatzeko. Bestela ez. Beraz, zer egin dezaket? M itzuliko da, hau da, nahi dut 3, plus m ken 1 sigma. Hargatik honen segimendua me. Hau jarri noa paper behera pieza. Eta zer balio du, eta izan argi eta garbi, preso pasatzen dut joan Istorioa Puntu honetan sigma sartu? Zer kopurua? 2, ezta? 3 ken 1 2 da. Beraz, behar besterik ez dut pixka bat paper pusketa hemen. Beraz, orain sigma ohitu da berriro deitu. Eta nahita jarri dut behera hau da, zeren motatako gelditzea bezala ipuinaren bertsio hori nabilela nagoelako m ken 1 seinale on. Beraz m 3 m zen ken 1 2 da. Hortaz, hona 2 dudan gainditu da. 2 jakina da ez baino gutxiago 0, beraz, kasu horretan ez da aplikatu. Bestela m itzuliko naiz, eta hori da hau Gauza, plus zer balio-sigma? Beraz, bada Sigma 1-- delako m da oraintxe 2 orain 2 ken 1 1 da. Beraz, gaur egun besterik balioa 1 daukat. Besterik kopuruaren pasatzen ari naiz 1 funtzio sigma-- izateko edo neure burua hemen hain 1 jakina da, ez zero baino txikiagoa da, oraindik ere ez du aplikatzen. Ordainetan, bestela, 1 plus zer sigma? 0. Hargatik gogoratu besterik ez dit hori. Horretara itzuli dut geroago. Orain aurrera eta jot joan joan 0 kopuruak behera hori delako Nire argumentu edo parametro. 0 zenbakiaren I gainditu nabil eta prozesu hori azkenik besterik ez neure buruari errepikatuz ad nauseum du utziko zer duelako Zer egin behar dut berehala behin ikusi nuen 0 honek? Zero itzuliko naiz. Beraz, orain istorio atzeratzeko aukera izango duzu. Orain badut atzeraka bada denboran, zer zen berrienak gauza Literalki ez bazina egin nuen Bideo bat errebobinagarriaren? Recoger berrienetakoa noa 1 eta ematen dit 1 plus 0 1 da. The errebobinagarriaren jarraitzen badut Istorioa, hori niri emateko 2 plus hau martxan balio, hau da, 1. Beraz, hori da 3. Eta gero noa errebobinagarriaren jarraitzea. Noiz jarri nuen behera kopuruaren Izango da 3 beraz 3 plus 3 ematen dit 6. Eta orain, zuk berrasiera bada Bideo ireki du puntu honetan arte, Hau izan zen oso Lehenengo galdera galdetu nion. Igaro zenean 3, zer da 3ko sigma? Hain zuzen ere, 6, guztien batuketa paper pieza horiek guztiak. Beraz, hori pixka bat hartzen badu, berriz, your mind inguruan biltzea, hori da isuna. Baina kontuan hartu bat izan zen hura pixka Oso nahita pilatuta nuen bata bestearen gainean zenbaki horiek. Mota da bat izatea bezala erregistro bat, memoria denboran, bideo batean scrubber bat bezala, dudala, hain zuzen ere atzeratzeko ere. Eta ari gara itzultzea joan Pixka bat besterik metafora hori. Baina lehen, bihurtzen da, ez dagoela Geeks eta dibertigarria pertsona asko, Pentsatzen dut nik, Google at. Litzateke norbait da oso Googling kontuan onak Datozen une bat besterik ez da, eta lagundu bilatu zerbait da niretzat? Oso, oso baxua gakoa. Norbait da inoiz zatoz gora aurretik, agian. ONDO DA. Bai? Etorri. Goazen behera. Nola deitzen zara? SAM: Sam. DAVID J. MALAN: Sam, behera etorri dira. Hori bera da. Urte askotarako. Hey. Goazen gainetik. Beraz, guztiak, bada, ez duzu behar dut dezakegu, Sam, hemen da Google. Ahal izango dituzu bilatzeko zerbait errekurtsibitateko egiteko? Ez hondatu. Eta orain let's-- bai. OK klik egin. Hobeto egin klik. Ahh, lortuko da. No? ONDO DA. Beraz, egin besteei pare bat utzi. Ez hainbeste erlazionatutako akademiko hemen, baina egin behar duzu inoiz bilatuko Google anagrama egiteko? SAM: No. DAVID J. MALAN: OK. Search anagrama errekurtsio ordez. Nola okertu buruz. Inoiz bilatu duzu okertu egiteko? Orain, hau da, pixka bat gogorra ikusi baina zorionez everything's-- OK. Besterik ez da zu eta ni honetan gozatuz. ONDO DA. Beraz, azkenean, one's-- honetan okertu txiki bat da. Orain egiten kanoi roll. Wonderful. Ados. Big eskerrak Sam nahi duzu. Hemen duzu joan. Eskerrik asko. Beraz, zer gertatzen den guztietan Adibide txoro horiek? Beraz, benetan, kanpaia azpian Google-ren kode lerro milioika Nonbait, gutxi silly bat IF direla funtsean baldintza erabiltzaileari badu egiaztapena Esaldi hau idatzi, hori ziurrenik hartu zuen zerbait egin Denbora kopuru nontrivial bat besterik ezartzea modu horretan, dibertigarria izan. Baina hori guztia da irakiten kanpaia azpian behera. Baina, jakina, errekurtsio da geekier gehiago trikimailu berezia dutenen artean adibidez. Eta ziur aski ez da beste batzuk han baita agian ez dugu, nahiz eta besterik oraindik aurkitu. Beraz, itxura bat hartu, edo kontuan hartu orain honako programazioa, eta, zalantzarik gabe hartu duen horiek your way out of. Aurrera joan noa eta ireki, hori da programa bat Bi trukatzeko balio saiatuko da. Baina ez gara joan aurretik, eta egin dezagun. Ezin izan bat gehiago lortuko dugu boluntario, uste dut? Hala ere, boluntarioak nahi duzu? No? Goazen sortu. Goazen sortu. Ados. Beraz, zure izen-abizenak, zer da? LAUREN: Lauren. DAVID J. MALAN: Lauren. Goazen sortu, Lauren. Beraz, Lauren ari Hemen desafioa honela. Urte askotarako. Beraz, Lauren hemen aurrean dauzka Bere bi katilu hutsak dira. Eta laranja batzuk ditugu zukua eta esnea batzuk eta horretan ari gara joango Animatu eta honako hau. Ari gara hau bete beharko. Esnea ounces gutxira daude, bai eta goazen bete gutxi laranja zuku bat hemen baino. Eta guztien aurrean ikusle horiek, bi katilu horien balioak trukatzeko. Jarri laranja zukua esnea kopan eta laranja zukua kopa esnea. Nola egin nahi duzu hau bazeunde at etxeko eta gaurko beste izateko aukera? LAUREN: Jarri kopa bestean. DAVID J. MALAN: OK. Hargatik aldi baterako aldakorra, izango bagenu. Eta aurrera orain, eta martxan jarri bera aldaketa prozedura hori. Beraz, ona. Jarri dugu AO aldi baterako sartu aldakorra, AO aldagai sartu esnea, eta orain aldi baterako aldagai du esne aldagai sartu. ONDO DA. Beraz, oso ondo egin orain arte. Beraz out-- duten eduki bihurtzen da une bat besterik ez pentsatu. Hemen, besterik geek pixka bat, hau Dagokion C kodea izango litzateke hori aplikatu besterik ez dugu. Bi sarrera, a eta b, bai izan dugu bertan, besterik ez dugu esango sinpletasunagatik dira int en. Eta konturatu hemen, trukatu nahi badut bi aldagai, a eta b-ren balioak, Hain zuzen ere, middleman bat behar dugu, bat Aldi baterako aldagai, aldi baterako kopa, bertan sartu du balio hauetako bat bota Horrela, biltegia daukagu. Baina orduan kodea da zehazki Hemen abian jarritako Lauren bezala. Orain, besterik bat lortzeko eroago gutxi, bihurtzen Hau egiteko zu gabe Aldi baterako aldagai bat. Horretarako behar bezala, hala ere, goazen kimika batzuk iruzur dute. Edalontziak estra batzuk ditugu hemen. Beraz, gauza hurbilena itxura esnea eta ura, agian atsegin edo esne eta OJ-- da batzuk ditugu ura, beraz, hau bete beharko dugu sortu argi ura ontza gutxi batzuekin. Hori da, ziurrenik, gehiegi. Bai. Hori da, zalantzarik gabe, gehiegi. Sec bat askatu. Eta orain, olioa, eta horrek, gogoratzen dut daukagu erdiko eskola kimika klase batetik, zorionez, ez du ura nahasten. Baina mota Sort esnea eta AO itxura. Beraz, orain, erabili gabe Aldi baterako aldagai bat, daiteke bi balio horiek trukatu duzu? Beraz olioak ur kopa sartzen da, ura olio kopa sartzen da. LAUREN: No beste edalontziak? DAVID J. MALAN: No beste edalontziak. Eta ez dut dut benetan probatu hau aurten aurretik beraz, ez dut egingo hau bada jakin benetan kimikoki lan. Hori ez zen luke gertatu. Da lanean? Ados. Beraz, banantzen? Ona. Orain lortu genuen ur beste kopa sartu. Kimika kontzentratzaileak Smarter Could ziurrenik hau egin baino hobea. LAUREN: Ura behean da. DAVID J. MALAN: water-- hori izan zen Zer da gakoa azken denbora honetan egin dugu. Egin behar den ordena egokian egin behar duzu. Bai. Ondo da. Beraz, orain bi olio edalontziak ditugu. ONDO DA. Ondo da. Baina nola landu kimikoki bada nik baino LAUREN: Hau ura da. DAVID J. MALAN: Hori da, batez ere, ura. Ados. Baina hori kopa aurretik bera da oraindik. Beraz pour saiatu it han. ONDO DA. Klase denbora erabilera ona da gaur egun. ONDO DA. Beraz, gaur egun badugu polita. Gutxi gorabehera. Ados. Beraz, oso ona. Eskerrik asko Lauren izateko. Oso ondo egiten. Beraz, besterik gabe, zure adimenak kolpe, eta hori da, beharbada zerbait CS50 ID ere, nahi izanez gero, jolasteko, daiteke, hain zuzen ere, trukatu duzu bi aldagai aldi baterako, zenbaki oso bat erabili gabe. Eta hori, dagokien C kodea da. Eta gogoratzen duzu azken balitz , Asteazkena, sartu dugu laburki, C. Eta duela operadoreen berri batzuk Edozeinek gogoratzen zer azenarioa gutxi sinboloa da, triangular gutxi dagoela adierazten teklatuaren sinbolo? Zer bitekin operadorea? Ikusleak: EXOR. DAVID J. MALAN: EXOR. Esklusiboa edo. Beraz, nahi izanez gero, besterik gabe, ondo pasatzeko etxean, a eta b bi arbitrarioa emateko Edozein eight-- eta I like balioak zortzi bit balio bat aukeratuko luke. Hori eginez gero, 32 bit-ekin, Oso azkar duzu aspertuko. Baina besterik eman bat zortzi bit bat balio hori edozein dela ere, bat edo bi, eta eman antzeko balio bat b. Eta gero, definizioa erabiliz XOR joan den asteazkenean hasita, bit hori aplikatu pixka arabera, bakoitzari a eta b bakoitzean zortzi bit horiek, eta gero egin du zehazki kode hau per. Eta ez da okerra zer pantailan hemen ikusten duzu. Hain zuzen ere, irakiten behera It Hiru XOR operazioak izateko eta nolabait magikoki eta bat b posizioak trukatuko Edozein informazio galdu gabe. Beraz, olioa eta ura Trick da gertuen dagoen mundu errealean Enkarnazio Dut hori imitatzen uste. Baina da, ziur aski, errazagoa Aldi baterako aldagai bat erabili, Kasu honetan, hemen bezala. Eta hori ere ez dago aukera bat esan, gehiegi, mikro optimizazioa mota hau, ordenagailu zientzialari gisa esango, berriz, fun-mota Hau nola egin zu gabe brag Aparteko aldakorreko batekin trukea bezala, Ez da hori guztia sinesgarria. 32 bit, gisa gorde nahi duelako Benetako int baten kasuan, berriz, ez da hori guztia sinesgarria sistema bat non on den megabyte hamarnaka erabiliz dezakezu edo egun hauetan, besteak beste, memoria, are gehiago. Eta hain zuzen ere, noiz lortuko dugu geroago arazo multzo bati eta sorginkeria ezartzeko checker eta ikusiko duzu Zalantzan jarri dituzten hacerlo egon hau RAM gutxi bezala, eta txiki gisa denbora buruzko ahalik eta ordenagailu dituzu oraindik aste bat ezartzea it have-- izango dituzu dituzu Zalantzan jarri baliabide horiek gutxitzeko. Eta hori da benetan bakarrak seihileko honetan kausatu non bizarra bultzatu beharko dituzu nahiz eta performance onenetako off kostatzen bestela. Beraz what-- nola dezakegu ikusi honen benetako kodea ere? Dezagun aurrera me now eta ireki adibide bat nahita deritzo Ez Swap ez duelako Izan ere aldagai aldatu benetan espero liteke. Beraz, dezagun begirada bat. Hemen ez duela CS50 ditu programa bat da liburutegia gertatzen, I / O besterik estandarra. Orain prototipoa bat dugu swap gora goitik zein besterik esan nahi izan dadila geroago hautatu behar dela. Eta hemen nagusia. Arbitrarioki x eta y esleitutako dut, hurrenez hurren, baloreak eta bi besterik txiki Oraindik dutelako eta erraza pentsatzen. Eta gero, besterik ez dut printfs mordo bat non behatu kontrol bat daukat. x 1 eta y 2 ustez da zer printfs horiek esango du. Beraz, magia ez orain arte. Ondoren, naiz aldarrikatuko joan inprimatu def, dot dot dot aldaketa. Swap deitzen noa funtzioa, x eta y pasatuz. Eta demagun orain dela swap zehazki inplementatu duela une bat izan zen bezala Aldi baterako aldagai batekin. Eta beraz, boldly erreklamatzeko dut, trukatu. x da, hau eta y da orain. Baina fitxategiak orduan, noski, deritzo No Swap. Beraz, benetan ikusi zer gertatzen den. Bildu dut swap ez eta orduan bada egiten ./noswap, x 1, 2 y da. Aldaketa trukatu. x 1, y da 2. Beraz, egia esan, badirudi, nahiz eta zuzena egon behar da nahiz swap-- dezagun scroll down da gaur egun zehazki abian jarri den per kodea une bat duela proposatu dut. Beraz, ez gara gauza ederrak lor joan XOR oraingoz gauzak batera. Hau ere, funtzionatu beharko luke esnea eta AO bezala, baina ez dirudi lanean. Beraz Berriro egin dezagun. Agian dut besterik ez zen hura eskubidea martxan. Hargatik berriro exekutatu No Swap. Agian nik ez. Beraz, hau ez dabil. Beraz, egin apur bat behatu kontrol utzi. Dezagun aurrera me hemen Swap ere eta besterik gehitu, minutu bat itxaron, a% i da / n eta dezagun plug-in baten balioa. Benetan nahi dudalako zer gertatzen den ikusteko. Eta hain zuzen ere, hau da, arazketa-teknika bat izango duzula erabiliz agian bulego orduetan edo etxean dagoeneko, Dan lehen erdian Akin Armendarizen PSET3 bideoa dua inprimatu sartu dugu def gisa gomendatutako teknika bat, gutxienez kasu errazak egiteko. Dezagun aurrera me eta make swap no berriro, ./noswap. Interesgarria da. Beraz, konturatu zer badirudi egia izan. x da 1, 2 y da, baina bat da 2 denean b da 1. Beraz, bi horiek nolabait got trukatu baina x eta y ez dira ohitu trukatu. Beraz, argi izan, zer gertatzen ari hau da, hemen x eta y daukat eta horiek aldagai tokiko dira nagusia esparrua, x eta y pasatzen ari naiz trukatzeko. Orain, swap, beste funtzio gisa, da free bere argudioak deitzeko edo nahi duen bere parametro ezer. Foo edo taberna edo x edo y edo edo b. Just argi utzi zuten zarela Ez x berdin-berdina eta y per se, Nik esan nion eta b. Baina horiek ezer nahi dugu deitu genezake. Eta beraz, itxura swap ari gainditu da x-- Unzurrunzaga a-- eta hori da gainditu y-- Unzurrunzaga b ari. Nolabait hiru lerro hauek dira balio horiek zehazki aldaketa Lauren esnea eta AO egin zuen bezala. Baina duzunean inprimatu dugu balioak, a eta b dira, hain zuzen ere trukatu baina x eta y dute horiek aldatu gabe. Gogoratzen x eta y dira hemen. Beraz bidez ikusi ahal izango dugu beste teknika bat baita. Eta hori ere teknika da Arazoa murgildurik ezarri hiru. Goazen aurrera, eta hori ere CS50 NAN ez badaukazu Dagoeneko. Eskuin hegalean dugu buruzko Debugger fitxa hau eduki. Eta hau ireki nahi izanez gero, bada, han urrutira informazio batzuk hori bota duzu, hasiera batean. Baina dezagun aurre gain hau benetako azkar. Bat, beraz, aldagai lokalak ikusten duzu. Turns CS50 IDE sartu eraikiko dela, eta programazio inguruneak askoz gehiago oro har, araztailea da. Duten ikusmen ikusteko aukera ematen du tresna A zer gertatzen den zure programaren barruan gehituz jo beharrik gabe printfs eta bildu eta martxan eta printf en gehituz eta bilduz eta , martxan eta dagoeneko, bulego orduetan edo etxean, da seguruenik nahiko lapurtera lortzean. Beraz, hemen, une bat besterik ez, ez gara den denbora errealean ikusteko joan Gure tokiko aldagaien balioak. Ari gara, halaber ezarri ahal izango da zer dira eten izeneko aukerak dira nire programa eteteko ere Kode-lerro jakin batean exekuzioa Oso bitxia naiz. Eskuin? Programa horiek zatitu batean abiaraziko da bigarren. Mota polita egiten digu gizakiak motelagoa gelditzeko, une bat hartu ahal izateko, ikusi Zer ari den inguruan Kode-lerro jakin bat programa plowing gabe horren bidez, eta oso-osorik, amaitu du. Beraz, eten bat gaitu joan apurtu eta puntu jakin batean gelditu. Deia pila modu dotore bat da zer funtzio Une esanez ari da une honetan deitzen. Main beti deitzen da lehenengo. Baina Main deiak bada bat funtzioa aldatu deitu, benetan ari gara hau ikusteko joan funtzio dorrea izan diren kronologikoa alderantzizko ordena deitzen. Beraz, ikus dezagun hori. Urruntzeko noa. Atzera joan my kodea noa. Eta besterik nahi dudalako pedantekeriazko izan hemen, Aurrera joan eta egin klik noa besterik linea bost ezkerreko. Eta hori puntu gorri bat sortzen du. Eta eskuinaldean nabarituko araztailea dela badaki, beno, Esan dut at etendura bat Noswap.c linea bost, zehazki, kode-lerro honetan. Beraz araztailea daki dut eskatu duten hurrengo aldian Nire programa da pausatu exekutatu dut exekuzioa ez besterik beharrean gauza osoa super azkar korrika. Beraz, orain ez dut Debug klikatzen joan IDE oso goialdean botoi eta hori honako hau egin behar da joan. Honez bat irekitzeko, hasieran zertxobait joan scary begira bigarren terminal leiho urruneko arazketa antolatzailea, besteak beste, eta such-- eta egingo da itzuli dugu zer Hori guztia baino askoz lehenago esan. Baina zer da garrantzitsua oraingoz da puntu gorri hori jo zuten, araztailea ditu nahita pausatuta execution-- Ez se bakoitzeko lerro hori, baina lehen egunean benetako funtzioa duten kode lerro. Eta horregatik zazpi linea da orain horiz nabarmenduta. Eta orain dezagun begirada bat Eskuinean at. Dirudienez, besterik ezean, nicely nahikoa, x zer balio du? 0. Eta y dauka zer balio? Zero. Eta hori da, zentzu batean espero izatekoa x dela eta y-- lerroan horia duela oraindik ez exekutatu. Beraz, x ez luke balioa 1 izan. Baliteke beste edozein balio izan du, Zabor balio deiturikoak. Eta hori da ere zortea ginen puntu honetan zero, funtsean. Beraz, gaur egun gutxi batzuk bakarrik botoiak arreta behar dugu modu horretan, arazketa denean buruz. Iragarki hemen, Play botoi bat dugu. Eta jokatuko badugu edo hit berrekiteko, hori besterik to bidez exekutatu joan Programaren gainerako edo hits etendura beste arte. Baina ez dut beste edozein ezarri eten, beraz, besterik ez da to amaieran bidez exekutatu. Porrot egin mota horretako kuxkuxean aritzea du helburu. Beraz, horren ordez, zaintzen dut eskubidea ikono hauek. Eta gainean pasatzean badut horiek ere behar bezala, Ikusiko duzu pixka tips-- tresna aholkuak. Honek bat zapaldu baino gehiago da. Orain dela ez du esan nahi, skip Honakoa kode lerro. Bakarrik esan nahi exekutatu eta hurrengo mugitzeko, hurrengo mugitzeko, hurrengo mugitu. Beste era batera esanda, bidez botoia, ezin dut oinez Nire aldi berean urrats kode baten bidez. Lerroz lerro, hitzez hitz. Orain, eskubidea han beste bat egingo dugun une bat besterik ez ikusi. Hau da, llamado Into ikono hori Urratsera me baimendu murgiltze joan funtzio beste. Baina ikus dezagun une bat besterik ez. Beraz, ez dut Ezkutatu bat gaindituta. Eta orain konturatzen, I sakatu gisa botoia goiko eskuineko honetan, your eyes gutxi gorabehera mantendu Local azpian Aldagaiak eta ikusi zer x gertatzen. x da orain 1 delako lerro horiak orain abiarazi izan eta lerro 8 ikusi dugu mugitu. Eta besterik gabe, une y batean zorionez bihurtu behar 2. Orain, ezer ez dela interesgarria Pixka bat gertatzen da. Guztiak hau da printf da. Eta nabarituko, nire bigarren mailako terminal batean leiho, inprimatu def irteera ikusten dut. Eta orain, bat egin nahi izan dut Erabaki programatzaile gisa. Ezin dut lerro honen gainetik pasatzeko kodea exekutatzea baina ez zer barruan bitxi buruz lortzean. Edo Ezin dut egia esan, hori bide eta Swap beraren barruan joan. Beraz, azken hori egiten utzi. Dezagun aurrera me eta egin klik Ez Urratsera baino gehiago, baina urrats sartu. Oharra, bat-batean leiho aldaketak Lehenengo nabarmentzeko Swap in kode lerro. Hori line 21 da. Eta orain, zer da funky mota da hori, zuk baino gehiago hemen begiratuz gero, espero bezala, comma b a 1 eta 2, hurrenez hurren. Zergatik da temp 32.767? Temp hau gogora, askoz ere atsegin du hutsik kopa une bat lehenago, Hemen deklaratu on line 21. Zergatik 32,000- esan nahi dut, zergatik da Balio bitxi batzuk besterik ez? Bai? Ikusleak: Ez da hasieratu. DAVID J. MALAN: hasieratu egin dira. Beraz, gure ordenagailua beti memoria fisiko ditu. Beti RAM fisikoak ditu. Eta ez da beti zero da eta han inork, ezta? Erabiltzen ari garelako gure ordenagailu egun osoan zehar, CS50 IDE erabiltzen ari zarela edo zerbitzarietan egun osoan zehar. Beraz RAM hori bai zeroz batzuk edo bakarren baten edo zero batzuk. Ez dio axola ala Ez horiek erabiltzen ari zara. Ezin duzu besterik ez dute hutsik espazio bit nahi duzun. Zeroen eta bai Oraindik dute. Eta gertatu da aldi baterako, zeren ez dugu oraindik hasieratu da, 32 bit horiek izan dugu, baina ez dut dute izan balioak ezagutzen duen hasieratu. Beraz, edozein izanda ere izan ziren gehien Duela gutxi erabilitako For 32 horiek bit besterik zenbait objektu ikusten ari gara 32 partikular horien erabilera aurreko bit. Bezain laster urratsa egin ahala ordea klik dudan bezala, Phew, tenporala da balioa 1 iritsiko. Eta berriro egiten badut, bat da joan, eman behar da 2 balioa eta, ondoren, b dago joan da emandako balioa 1. Eta orain zer polita at Istorioa puntu honetan da araztailea dela me erakutsiz, super astiro nire erritmoan, zer Swap egoera da. Baina goian hemen, oharra nabarituko dei pila benetan bertan, bi mailetan ditu. Orain hori bezala nabarmenduta bat Swap, sakatu dut Main ordez, nabarituko aldagai lokalak nola aldatu delako sustatzailearen besterik hop inguruan eta edozein desberdinak esparrua sartu. Hori guztia gara egiten ditut, nahiz lan eta bat eta b behar bezala aldaketa, atzera eta aurrera joaten naiz Swap artean bada non a 2 da eta b da 1 eta Main, ditu Main kaltetutako guztietan? No. Beraz, zein da eramateko hemen? Beno, bihurtzen da, edozein dela Swap bezalako funtzio bat deitu, eta, argumentuak, pasatzen duzu zer Swap funtzioa nahi duzun pasatzen ari Kasu honetan, kopia bat da argumentuak horietako. Beraz, x eta y bakoitzak badira hurrenez hurren 32 bit, zer Swap ari da da bertako bi berria aldagai edo argumentuak, izeneko bat eta kentzea b baina horiek arbitrarioak dira names-- baina zero patroia eta bai barrutik eta b dira lerrokatuak x eta y berdina izan baina ez dira x eta y gauza bera. Da nagusia bere pieza ditu, nahiz eta gisa paper 2 x eta y zenbakia 1 eta, eta, ondoren, eskuak dela paper zati, swap Swap oso azkar lortzen bere luma propioa, idazten du behera 1 eta 2 bere paper orri kabuz, esku jatorrizko xy kopiak Main eta orduan ez du bere kabuz a eta b gauza. Eta hau da orain super garrantzitsua delako hau nontrivial inplikazio ditu benetan zuzena kodea idazteko badirudi lukeelako ezin ditugu trukatzeko bi aldagai. Swap funtzioa egoki bat idatzi dut. Nik inplementatu dugun Lauren batera jo swap errealitatean funtzio zuzena da, baina, antza denez, hori ere ez Ez benetan gaietan baduzu Bi trukatzeko balio betirako. Beraz, beste era bat behar dugu benetan honetan lortu, eta gai izan behar dugu benetan konpondu arazo hau. Eta bihurtzen da, eta etorri egingo dugu argazki hau, bereziki bizkarrean long-- aurretik modu bat da hori zure ordenagailuaren memorian marraztu dezakezu. Laukizuzen bat besterik ez da. Inolako marraztu izan duzu Modu baina da kopurua komenigarria da gisa marrazteko honako arrazoia dela eta laukizuzen. Gaur hasiko den eta haratago goaz pila deiturikoak buruz hitz egiten. Eta pila pusketa bat besterik ez da of RAM memoria zatia funtzio hori eskuratzeko aukera dute direnean, deitzen ari den. Eta horrela bihurtzen da aldi berean pila honen bukaerara Hor Main en tokiko aldagaiak eta org C eta org V eta guzti dira lehenetsita joango gara. Eta nagusia bada beste zenbait funtzio deiak Swap bezala, bai, Swap da beste lortzeko joan haren gainetik memoria up geruza. Eta horrela lortzen azaletik azkar bat emateko honen irudi baino gehiago, joan badut hemen eta utzi ispilu me honi buruzko overhead well-- gisa benetan zer daukat, buruzko bakarrik zaintzen badugu Argazki hau beheko oraingoz, dela programa bat exekutatzen I eta Main izeneko lortzen, Main zatia ematen da Nire ordenagailuan RAM dela deiturikoak pila honen behealdean. Eta ez dut marraztuko ditu nahita plaza gisa. Beraz, 32 bit edo lau byte bezala. Eta funtzio nagusiak honek badu bat aldakorra izeneko 1 balioa duten x eta aldakorra izeneko ditu 2 balio batera y, hori da memoria sliver hau hartuta bezala dagoela Main ha dado eragileak sistema eta zatituko da, beraz, lehen tokiko aldagai hemen doa, bigarren bat, hemen doa, eta hori da. Main deiak Swap, Swap bere memoria xerra lortzen egingo dugun Horrela marraztu sistema eragilearen, eta nik behar joan bere egin aldagai lokalak oinarritutako Gure ezartzeko lehenago tokiko aldagai bat eta b hasieran balioak 1 eta 2. Baina, ondoren, bezain laster Swap kodea exekutatzen, eta Lauren benetan trukeak du AO eta esnea, zer gertatzen da? Beno, 2 hau bihurtzen ari da 1 bat, hau 1 bihurtzen ari da 2 bat, eta, bide batez, ez temp aldagai bat hori izanik Denbora guztian hori erabiliko dela, azkenean ihes doa. Baina ez du axola lan zenbat ez duzu lerro honen memoria espazio honetan of--, x eta y erabat bereganatzea dira. Beraz emanez modu bat behar dugu Swap eta funtzioak Gustatu sarbide sekretua, izango bada, to funtzio x eta y bezalako oroimenari antzekoak. Beraz, dezagun begirada bat Adibide bat laguntzen duen zehazki zer egin digu ikusi denbora honetan guztian gertatzen. Aurrera joan noa eta ireki Tarifa Zero. Eta ez dut nahi itxi joan Gure araztaileak, noa bila-mezu beldurgarriak hau ixteko besterik ez dio, itxaron minutu bat, Oraindik erdialdera arazketa duzun. Fitxa hau ezkutatzeko hemen noa besterik soiltasun itzuli nahi. Beraz, ez kezkatu GDB hil bada. Bakarrik esan nahi duen programa ditu irten dira, nahita, kasu honetan, me arabera. Eta orain Tarifa Zero du honek. CS50 erabiltzen dut I / O standard liburutegia. Dut funtzio nagusia dela lehen dio, esan zerbait, eta kate bat lortzen. Gero, esaten du behin eta katea beste lortzen. Eta hori bi kateak nabarituko dira s eta t deitzen dira, hurrenez hurren. Eta, orain, programa honetan, Konparatu Zero, bere bizitza helburua, ustezko me kontatzeko, idatzi nuen gauza bera? Eta orain naiz atzera joan nintzen aste bat. Nire berdinak operadorea berdina erabiltzen dut kalitate operadorea da. Ez esleitzeko operadorea, berdintasun-operadorea. Besterik s eta t naiz alderatuz. Beraz, goazen benetan aurrera, eta hori. Eta aurrera noa joan eta alderatu zero. ./comparezero Ez noa. Eta naiz joango Animatu eta zerbait esaten bezala, egin dezagun ama minuskulaz utzi eta maiuskulaz ama buruz nola. Eta, jakina, idazten dudanean gauza desberdinak. Ados. Hori da, espero da. Dezagun exekutatu berriro. Biak aldiz egin minuskula, minuskulaz. Itxura super me berdina. Sartu. ONDO DA. Agian, bitxia delako Ez da nire gramatika gustuko. Beraz, egin capital ama bat utzi, capital Ama, berdin-berdina. Gauza ezberdinak. Beraz, zergatik da hori? Beno, zer benetan joan kanpaia Hemen azpian? Beraz, goazen atzera baino gehiago Hemen une bat besterik ez eta kontuan hartu zer GetString Benetan egiten. GetString deitu, duten funtzioa dugu bat idatzi zuen geure eta nolabait daukala bat erabiltzaileari karaktere adierazteko. Eta utzi du bere gain hartzen lehena, egungo denbora GetString deitu dut, ematen dit memoria zatia itxura hau. Eta idatzi dut minuskulaz guztietan bada m-o-m-- eta horren ondoren zer gertatzen den? Just azkar behatu kontrol bat. Backslash zero. Hori badakigu. Eta gogoratzen jokatu dugun Inguruan Zamila izen eta beste izen mordo bat denean Rob hemen ari zela Zer gertatzen ari den memoriaren barruan at. Beraz, istorio hori zehazki gauza bera da. Hau da, zer GetString niri itzuli. Orain, nire kodea une bat duela gordeta bueltan GetString balioa aldagai batean s izeneko. Eta gero, bigarren aldiz, deitzen dut, gordetzen da t aldakorra izeneko batean. Beraz, hemen baino gehiago joan badut, behar dut tokiko aldagai hau marrazteko eta, oro har, ez dut joan Kate bat just zaitugu marrazten deitu s-- plaza txiki bat hemen bezala. Eta orain, nolabait, nola egiten du ama s aldagai horren barruan joan? Beno, atzera egin behar dugu Hemen printzipioei. Zer da GetString benetan itzuli? Beraz, izarrekin bihurtzen da M-O-M backslash zero, eta edozein zenbaki beste bezalako memorian kateak Zamila eta Rob edo Andy edo beste edozein, Ikastaro dira gure ordenagailuaren RAM memoria. Eta zure RAM ditu antzekoak duzu RAM kontzertuan, bi RAM kontzertuak, edo milioi edo bi milioi byte, edo, agian, are gehiago egun hauetan. Hargatik bere gain, gaur egungo helburuetarako, Hori ez du axola nola ematen dugun horiek, baina bakoitzak zenbaki dezakegu horiek milioi edo bi milioi edo lau milioi byte. Eta dezagun arbitrarioki esan duten hau lehen ziztadak, bigarren ziztadak da, Hirugarren, laugarren. Nahita dut, ez zero erabiliz gaur egun, baina etorriko atzera egingo dugu. Beraz, beste era batera esanda, hau da baldin Lehen aldiz programa erabiltzen ari naiz, Besterik ez naiz zortea eta lehenengo hartzean mokadu kokapen bat da, ondoren, bi ondoren, hiru, lau baino. Eta marrazketa mantendu badut, kutxa zenbakia bi milioi baino gehiago modu hemen izango litzateke. Beraz, zer uste duzu, ondoren, GetString benetan itzultzen? Ez da M-O-M backslash itzuli zero per se, argi eta garbi duelako Ezin izango moldatzen direla idatzi dut herri koadroan. Beraz, zer gehiago GetString agian benetan egon itzuli aste horiek guztiak? Erantzuna piztuta board hemen nonbait. Ezin dituzu M-O-M backslash zero, beraz, zer zentzurik dezake ordez? Super azkarra izan da, jarriz bazenu ingeniaritza-hat deiturikoak, zer duzu itzultzeko daiteke? Zer da informazio gutxien hori oraindik itzuli ezin duzu litzateke M-O-M aurkituko dituzu oroimenean utzi? Bai? Ikusleak: One. DAVID J. MALAN: One. Eta zergatik? Ikusleak: esango luke delako duzu nora joan [INAUDIBLE]. DAVID J. MALAN: Zehazki. Besterik ez naiz helbidea itzuli egingo da ahaztuak nuen katea. Honen helbidea Kasu bat kokapena da. Beraz, zer da s-- gordetzen ari den eta katea aldagai beraz, orain arte besterik ez ditu izan da kate horren helbidea. Bien bitartean, I deitu izanez Bigarren aldiz eta I GetString idatz literalki gauza bera Minuskulaz M-O-M M-O-M eta backslash beste zero, eta orain agian nire programa dira, beraz, agian hau exekutatzen denbora pixka 10 da, hau kokapena 11 da, hau da, 12 hau 13 da. Ordenagailuak beste batzuk erabiliz edozein arrazoigatik memoria. Zer orain nire bigarren doa Nire programa t aldagaia? 10. Hain zuzen ere. Eta beraz, begiratu at dugu programa honen iturburu-kodea non I besterik saiatzen naiz Bi balio konparatzeko, S berdinak berdina t, zer da bistako giza erantzuna? 1 lukeen ez delako ez da berdina 10. Eta beraz, hortxe dago bat Gurekin aukera benetan besterik gabe, joan, itzuli, berriz ere, lehenengo printzipioak eta, buruz ondo pentsatzeko, zer ari den gertatzen kanpaia azpian? Izan gara buruz hitz egiten bit eta byte eta memoria, baina benetan erabilgarria da ulertzen GetString deitu duzulako, uste dugu, nahiz eta ez da M-O-M edo kate ama itzuli edo Andy edo Zamila edo bezala, teknikoki besterik ez da helbide itzuli memoria zatia dela. Baina hori OK. Nola ez dakit zeren non katea amaitu? Naiz bakarrik eman hasieran bada? Beno, backslash zero, ezta? Just denbora lineala I can batean inprimatu inprimatu def M-O-M. Eta backslash ikusi bezain laster zero, ez zait axola non hasi nintzen, Dagoeneko ezagutzen dut inplizituki non amaituko behar dut. Eta, beraz, gaur egun, hasieran du markatzen eta Horretarako me nabarmen dugulako arazoak asko bidez joan eskuratu hemen horiek entrenatzen wheels-- beraz, gaur egun, prestakuntza gurpilak hasteko alde batera utzi eta agerian egon ginen least-- [Txaloak] Hori izan zen, ondo bidaia merezi Gaur goizean helburu, bai? Beraz, orain ez dago, hura bihurtzen out, katea gauza, hala nola. Esaldia ez da existitzen. Hori izan dugu sinonimo da CS50 liburutegiaren barruan. Hemendik aurrera, deituz hasteko goaz s eta t ez kateak baina char izarrak. Eta char izar zaitugu aurre gain luze baino lehen. Baina honek esan nahi baita, jarraitzeko, nahiz eta dugun GetString oraingoz, teknikoki behar dut izan char izar eta char izar esanez. Eta bihurtzen da zer Izarrak den adierazteko joan da zerbait erakuslea edo helbide izenekoa. Eta hain zuzen ere, aurkezpenik bat zer datza aurretik 20 segundoko bideo hau da gure Lagun Nick Parlante Stanford izan ere, orain dela nahiko denbora pixka bat pasatzeko Denbora kopuru barregarria, onena bezala ezin dut esango bere sukaldea edo bere sotoan, claymation egiteko Mundu sartuz izeneko pertsonaia bat Hegazti harekin egingo dugu izango da sartu hurrengo aldian erakusleak. Hortaz, hona hemen zer etorriko aurrebista bat da. [Bideo-erreprodukzioa] -Aizu, Hegazti. Esnatu. Erakuslea pasatzeko garaia da. -Zer da hori? Erakusleak buruz ikasi? Oh, Goody. [END erreprodukzioa] DAVID J. MALAN: Eta ohar horretan, Asteazkenean ikusiko dugu. Ados. Nor dago dantzan? Etorri. Nor dago dantzan? Nahi izanez me get hasi zen? Lortuko dut hasi zen. Woooo! LAUREN: Sweet fancy Moises.