David MALAN: Lahat ng karapatan. Kaya ito ay CS50, at ito ay ngayon ang simula ng linggo tatlo. Kaya hanggang ngayon, hindi namin nagsusulat mga programa sa C na mukhang ng kaunti isang bagay na tulad nito dito. Kaya Nakakuha kami ng ilang mga matalim Kabilang sa tuktok. Mayroon kaming int, pangunahing, walang bisa, at pagkatapos ng isang bagay na gawin sa gitna, ilang sandali ng code sa loob ng ng na function. Ngunit key ay ang katotohanan na Na-sinasabi namin walang bisa dito. Kaya walang silbi, ang lahat ng mga oras na ito, tinutukoy ang programang ito, kapag tumakbo, Maaari lamang tumakbo sa pamamagitan ng pangalan nito. Hindi mo maaaring i-type ang anumang iba pang mga salita o mga numero pagkatapos ng pangalan ng program kapag tumatakbo ito. Kaya, halimbawa, kung ang programa ay pinagsama-sama sa isang file na tinatawag na kumusta, maaari mong gawin ./hello, ngunit na ito. Ang tanging paraan na maaari mong magbigay ng pag-input sa program na ito ay sa pamamagitan ng pagtawag ng isang function. Halimbawa, kung ano ang function na nakagawa kami ng gamit kaya malayo upang makakuha ng input mula sa user? Madla: Kumuha ng string. David MALAN: Upang makakuha ng mga string, o makakuha ng int, o na iyong nakita sa iba, kahit na hindi ka pa ginamit ang mga ito, tulad makakuha ng mahaba, mahaba at mga katulad. Ngunit ipagpalagay na kami talagang gusto mong simulan ang mga programa ng pagsulat na ang kaunti pa versatile, at, tapat, ng kaunti pa tulad ng mga utos na hindi mo Na-pagkuha, sana, Medyo Nakasanayan na. Tulad ng cd espasyo Dropbox. Ito, siyempre, ang mga pagbabago iyong direktoryo, ipagpalagay ikaw ay nasa bahay John Harvard ni direktoryo, upang ang iyong mga folder Dropbox. Samantala, isang command na tulad nito ay lumikha ng isang bagong direktoryo na tinatawag na pset2, bilang na maaaring mayroon ka na o ay lalong madaling panahon para sa problema magtakda ng dalawang. Gawing Kamusta, siyempre, ay isang command na na Bumubuo ang isang programa na tinatawag na kumusta mula sa isang file na tinatawag na kumusta na tuldok c. At sa bawat isa sa mga kaso, ngayon, mayroon kaming magbigay ng isang argumento sa tinatawag na command line, ang mga kumikislap na prompt, kaya na alam ng make na ano upang bumuo, at sa gayon alam na kung ano mkdir folder upang lumikha, at nang sa gayon ay alam na cd kung saan mo gustong pumunta. Pero hanggang ngayon, panatilihin namin sinasabi na pangunahing, ang iyong default na function, May bisa expression sa loob ng mga panaklong, na nangangahulugan na ito hindi maaaring gumawa ng anumang mga argumento. Kaya simula ngayon, kung ano ang namin ang pagpunta sa gawin ay, kami ay pagpunta sa simulan pagsuporta sa mga bagay na tulad nito kahit. Sa katunayan, sa kasong ito, kung saan mo Hindi ko karaniwang sa mano-manong i-type, Gawing ay ginagawa ito para sa atin, wala isa maliban sa isa, dalawa, tatlo karagdagang mga string pagkatapos ng program na may pangalang clang. Kaya paano ko namin makamit ito? Well, simula ngayon, sa mga kaso kung saan kami gusto upang magbigay ng input sa pamamagitan ng tinatawag na command line, kami ay pagpunta upang magsimulang magdagdag ng dito kung ano ang sa yellow-- pinapalitan walang bisa sa int argc kuwit string argv bukas bracket malapit bracket. Ngayon ito ay kawili-wiling para sa ilang mga kadahilanan. Isa na itong ibang mapupuntahan upang ipaalam sa amin sumulat mga programa na mas dynamic ang kaunti. Ngunit, higit compellingly, ito ang nangyayari upang buksan ang ngayon ng isang pag-uusap bilang sa kung ano ang array maaari talaga gagamitin, para sa kung ano ang isang string ay tunay na sa ilalim ng hood, hanggang sa susunod na linggo kung kailan sisimulan namin ang diving sa kahit na mas malalim na bilang sa kung paano ang mga machine ay paggawa ng lahat ng ito bagay-bagay sa trabaho. Ngunit sa ngayon, gumuhit ng ipaalam, marahil, ang isang litrato. Kapag sumulat ka ng isang programa may pangunahing ipinahayag sa ganitong paraan, katulad na pangunahing tumatagal ng dalawang argumento, isang int and-- kung anong uri ng data ay ang pangalawang argumento? Madla: Ang array. David MALAN: Ang array. Kaya tinitingnan nito unang sulyap tulad ng ito ay isang string, ngunit mapansin ang mga square bracket. Isipin ang huling beses na ipinakilala namin ang paniwala ng isang array. At array gamitin ang square bracket sa loob ng ilang konteksto. Maaari mong gamitin ang square bracket upang pumunta sa isang array at kumuha ng isang partikular na elemento, gaya ng bracket 0 o bracket 1 o 2 bracket. Ngunit nakita namin, kung panandalian, noong nakaraang linggo na rin gamitin ang mga square bracket upang ipinahahayag ang laki ng isang array, kung alam mo nang maaga kung gaano karaming mga ints o kung gaano karaming mga string o kahit anong ka talaga gusto. Kaya ito ay lumiliko out doon ni isang third konteksto dito na may loob walang numero ng mga square bracket. Kapag tinukoy mo, pati na mayroon akong dito, ang pangalan ng isang bagay tulad ng argv, na kung saan ay lamang ng isang magarbong paraan ng sinasabi ng argumento ng vector, na ay isa pang magarbong paraan ng sinasabi ng isang array ng mga argument, bukas bracket malapit bracket lamang ay nangangahulugan na gawin mo ay hindi kinakailangang alam nang maaga kung gaano kalaki ang array ay magiging, ngunit alam mo ito ay pagpunta sa isang array. Kaya kung hindi mo alam ang numero huwag ilagay ito sa doon, para bukas bracket malapit bracket ay nangangahulugan na ang argv ay hindi isang string, ngunit isang array ng mga string. Kaya syntactically, kung ikaw sa tingin bumalik noong nakaraang linggo, ito ay halos kapareho sa sinasabi isang bagay tulad ng int edad bukas bracket, at pagkatapos ay isang bagay pagkatapos. Kaya kung ano ang ibig ito hitsura? Aktwal na gumuhit ng larawan Hayaang. Kaya kapag nagpatakbo ka ng programa na ito sa Main pagkakaroon ng dalawang argumento ng nilinaw sa loob ng mga panaklong, mo mahalagang magkaroon ng hindi bababa sa dalawang chunks ng memorya ipinasa sa iyo sa ilalim ng hood. Ang isa, pati na idedetalye ko at kumukuha ng mga ito na parihaba, Pupunta na tinatawag na argc. At tulad ng isang mabilis na pagbabalik-tanaw, kung ano ang uri ng data ng argc? Kaya ito ay isang int. Kaya isang numero ay pagpunta upang pumunta sa argc-- mga liko out na ang ibig sabihin ay ang bilang argumento. Samantala, iginuhit ko ang argv bilang isang array. At hindi ko talaga alam kung gaano katagal ito ay magiging, kaya para sa mga layuning ngayong araw na tuldok tuldok tuldok. Maaaring makakuha ng ilang haba. Ngunit na nakalarawan ko dito hindi bababa sa apat na mga parihaba. Kaya argv isang chunk ng memorya na tindahan string string string tuldok tuldok tuldok, at argc ay isa lamang chunk ng memory para sa isang integer. Kaya ngayon, maging higit pa ng kaunti tumpak na ipaalam. Kung, kapag mayroon akong mga string sa array na ito, na tinatawag na argv, gusto kong makakuha sa kanila nang paisa-isa, tulad ng nakaraang linggo, kami ay pagpunta sa gumamit ng pagtatanda tulad ng argv bracket 0 upang makuha ang unang bagay na isang array. Argv bracket 1 upang makuha ang ikalawang bagay, at iba pa. Ang susi dito pagiging handa pa rin namin 0 indexed-- namin ang pagbibilang pa rin mula sa 0. Kaya ngayon sabihin aktwal maglagay ng isang bagay sa ito. Kung ako ay upang makatipon ng isang programa na tinatawag na kumusta mula sa isang file na tinatawag na kumusta na tuldok c, at pagkatapos ay ba akong magpatakbo ng programa na may tuldok iwa kumusta, ano ang ginagawa sa aking computer, ang aking laptop, mukhang sa ilalim ng hood sa sandaling ito ba akong magpatakbo ng tuldok iwa kumusta at pindutin ang Enter? Well, ito ay marahil ano ang maaari naming ilarawan bilang ang nilalaman ng iyong computer memorya, o RAM-- Random Access Memory. Sa ibang salita, ang computer, kahit papaano para sa iyo magically, Inilalagay ang numero 1 sa argc, aka argcount, at ito ay nilalagay sa literal na string ./hello sa argv bracket 0. Wala akong mga ideya, tapat, kung ano ang sa argv bracket 1 o 2 o 3, dahil kung ang gumagamit ay hindi nai-type ng kahit ano bukod sa ./hello, kami ay pagpunta sa ipagpalagay na ang mga ay pinaka-malamang na basura mga halaga, kaya upang makipag-usap. Yaong chunks ng memory umiiral, ngunit ito ay hindi hanggang sa amin upang tumingin sa kanila, dahil ang argcount ay isa lamang. Ngayon, samantala, kung ako sumulat makapagpatakbo ng isa pang programa, cd, na kung saan ay mas maayos ang isang command, sa iyong mga kumikislap prompt-- espasyo cd Dropbox-- kapag tumatakbo ko na, mabisa, kapag ang cd programa ay tatakbo, argc, sa loob ng memorya aking computer, ay para sa mga ang pinaka-briefest ikalawang ang bilang 2. At pagkatapos ay argv bracket o may cd, argv bracket 1 ay may Dropbox, at pagkatapos ng kurso ang command na makumpleto, kaya ang lahat ng ito memory lubos na mawala at ay ginagamit para sa ibang bagay. At iyon ang dahilan kung bakit sinasabi ko may split lamang segundo. Samantala, kung gagawin namin mkdir pset2, ang larawan ay mukhang parehong halos, subalit may ibang mga string sa loob argv. Kung gagawin ko clang gitling kumusta kumusta na tuldok c, parehong ideya. Higit pang mga bagay-bagay ay napunan na para sa argv, argc at, siyempre, ay 4. Kaya sa ibang salita, kahit na ito array Maaaring tuldok tuldok tuldok, ng ilang variable na haba, kaya upang makipag-usap, palagi mong alam kung saan ang dulo ng ito , dahil ang argc ay pagpunta sa sabihin sa iyo sa kung ano ang punto mayroon kang upang ihinto ang pagtingin sa mga elemento sa argv. Maaari mo lamang tumingin sa apat sa kabuuang sa kasong ito. Kaya sabihin ngayon tumingin sa, di kaya, isang simpleng programa. Isa na lamang sabi kumusta sa isang tao na tulad ng Zamyla. Kaya inaangkin ko ang pupuntahan ko magsulat ng isang programa sa sandali lamang sa pamamagitan ng kung saan maaaring kong gawin ./hello espasyo Zamyla, at pagkatapos ay nais ko ang aking mga programa upang i-print ang isang bagay super-simple tulad ng "kumusta, Zamyla." Ngayon sa nakalipas na ginamit namin ang getstring. Kaya sa nakaraan, kahit na ikaw ay bago sa programming, logro ay maaari mong whip up ng isang program na gumagamit ng getstring at pagkatapos ay gumagamit ng printf upang sabihin hi sa Zamyla. Ngunit hindi na gamitin getstring oras na ito ipaalam. Hayaan akong pumunta sa halip sa Appliant at huwag magsama ng karaniwang ko O tuldok h. Hayaan akong Kasama rin sa CS50 tuldok h. Ngayon int pangunahing, at ngayon ako Hindi pagpunta sa gawin walang silbi ngayon. Sa halip, ako ako pagpunta sa gawin int argc string argv bukas bracket malapit bracket, hindi tumutukoy ng isang numero. At ngayon dito ay ang aking tinatawag na gawin. Ano pupuntahan ko na gawin ngayon ay, ako pagpunta sa gawin ang isang bit ng isang hakbang ng pananampalataya, Pupunta ako sa ipinapalagay na ang user pagpunta sa gamitin ang program na ito ng tama, at ako lamang ang pagpunta sa gawin printf kumusta,% SN. Kaya walang bagong doon. Pero gusto kong ngayon ilagay ang kahit anong salita ang mga uri ng user pagkatapos ng pangalan ng program. Kaya kung gagawin ko ./hello espasyo Zamyla, ako Gusto upang kahit papaano ng programming access quote unquote "Zamyla." kaya ko maaaring pumunta sa aking argumento vector, ang aking mga array ng mga string, at kung ang utos, muli, ay ./hello espasyo Zamyla, kung ano ang numero ang gusto ko ang ilalagay sa argv dito? Madla: 1. David MALAN: 1, dahil bracket 0 lumiliko out ay magiging ang pangalan ng program, pati na nakita natin. Kaya bracket 1 ay ang unang salita na ako, user, na-type. Pupunta ako sa magpatuloy at i-save ito. Pupunta ako sa pumunta sa aking folder kung saan inilagay ko ang file na ito. Pupunta ako sa gawin gumawa kumusta 3. OK Comp IO ni. ./hello Zamyla ang Enter. Ano ang gagawin ko mali? Ako ay nakuha sa pamamagitan ng sorpresa aking sarili para lamang ng ilang sandali doon. Ano ang gagawin ko mali? Madla: Pangalan. David MALAN: Ang file ay ni aktwal na tinatawag na hello3.c. At ginawa ko na lang para sa pagkakapare-pareho, dahil hindi namin Nagkaroon hello.c ni sa nakaraang sa online code. Kaya ni ayusin ito ./hello hayaan bracket gitling 3 Zamyla. Ipasok. At ngayon ay mayroon kaming kumusta, Zamyla. Samantala, ang maaari kong baguhin ito sa maging Rob, o talagang anumang iba pang mga salita. Ngunit Isaalang-alang natin ang isang sulok kaso ipaalam. Kung ano ang maaaring asahan mo ang mangyayari kung Hindi ko type ang pangalan ng sinuman sa lahat? Madla: Error. David MALAN: May error na ng isang uri, marahil. Ni makita Hayaan. Ipasok. Null. Kaya printf ay aktwal na pagiging isang maliit na proteksiyon sa atin dito, at literal na pag-print ng bukas paren null, ngunit kahit na mas masahol pa bagay na maaaring mangyari. At lamang upang ipakita isang bagay kung talagang hindi dapat gawin, sabihin pumunta sa dito at simulan poking sa paligid. Mag-right? Kung alam ko na ang larawan sa memorya ay lubos na ito, argv bracket 1 ay may Zamyla, argv bracket ay may 0 ./hello, o ./hello-3. Ano ang sa bracket 2? Kaya ang maaari kong sagutin na tanungin ang sarili ko, tama? Maaari ko bang baguhin lamang ang 1 hanggang 2. Maaari ba akong mag-recompile ngayon kumusta 3, ./hello3 ng mag-zoom in at pindutin ang Enter Hayaan. Oops. Walang markang panipi. Kawili-wili. Kaya na uri ng mga cool na tingnan kung ano ang iba ay in dito. Kaya ano pa ay nasa loob ng aking laptop? I-save ni ito sa bracket 3 Hayaan. Gawing hello3, ./hello-3. Nagtataka. At ngayon hayaan makakuha ng talagang bold-- 50. Kaya na talagang diving malalim sa memorya ng aking computer. 50-i-index sa. Kaya gumawa kumusta 3 ./hello-3. Nagtataka. Ang lahat ng mga karapatan, ngayon lang ako pagpunta upang makakuha ng walang ingat. Sabihin pumunta sa 5,000. Lahat ng karapatan. Kaya hayaan mo akong mag-recompile. Gawing hello3, ./hello-3. OK. Ngayon ilan sa inyo, doon maaari maging mapusyaw na bombilya ng pagpunta off. Ilan sa mayroon kang Nakita ang mensaheng ito bago? OK. Kaya, bakit? Logro are-- at mayroong iba't ibang mga bagay na maaaring maging sanhi ito, at malinaw na ikaw ay nasa mabuting company-- mayroon kaming malinaw sanhi kung ano ang tinatawag na isang segmentation fault. At mahaba kuwento maikli para sa ngayon, ako ay hinawakan ng isang segment ng memory na hindi ko dapat mayroon. Saan isang segment lamang ay nangangahulugang isang chunk ng memorya na hindi ko dapat mayroon. Ngayon tinitiyak na ang computer kung ako tumakbo ./helloZamyla na maaari kong pindutin ang argv maging bracket 0 at argv bracket 1. Ngunit argc ay ang halaga 2, na nangangahulugang Ako lamang allowed-- ito ay isang uri ng karangalan system-- sa pagpindot bracket 0 at bracket 1. Kung pumunta ako sa anumang mas malayo, mayroong talagang pagpunta sa maging doon memorya. Aking RAM umiiral pisikal na sa computer. Ngunit sino ang nakakaalam kung ano ang doon? Sa katunayan, ako ako tumatakbo maramihang mga programa sa isang pagkakataon. Maaaring mayroon ako seen-- kung ako ay hindi ginagawa ito sa Appliant ngunit sa aking Mac o PC-- maaaring mayroon ako nakita ang mga nilalaman ng isang email. Maaaring nakakita ako ng instant mensahe ko na ipinadala kamakailan. Anumang bagay na maaaring maging lingering sa paligid sa memory ay maaaring na-access sa pamamagitan ng paraan ng ito di-makatwirang square bracket pagtatanda. O kaya naman, mas masama pa, maaaring mayroon ka natagpuan ang isa sa aking mga password na kamakailan ko na nais nai-type sa, na ang isang programa ay naka-imbak sa memorya ng sa gayon ay upang patunayan sa akin, at pagkatapos lamang uri ng pakaliwa ito sa RAM hanggang isinara ko ang programang iyon. At sa katunayan, ito ay isa sa ang panganib at isa sa mga kapangyarihan ng paggamit ng isang wika tulad ng C. Mayroon kang unfettered access upang ang buong mga nilalaman ng memorya ng programa, at kung ano ang masamang guys maaari kahit na gawin sa mga cases-- lalo na kapag ating makapunta sa web programming patungo sa dulo ng semestre, ipapakita namin muling bisitahin ito topic-- ay poke sa paligid, potensyal na, ang isang tao ay computer memorya at hanapin tulad malaman bagay bilang nakita natin doon. O kahit na mas masahol pa, password na siya o maaari niyang pagkatapos ay gamitin upang gawin masamang bagay. Kaya malinaw na hindi dapat ginawa ko ito, dahil kakaiba bagay simulan mangyari. Sa katunayan, ito ay isang Pag-crash programa. Ito ang magiging katumbas ng Mac OS o sa Windows isang window ng programa lamang mawala. May hindi inaasahang error na naganap. Sa kapaligiran command-line tingnan kami ng isang bagay na katulad nito. Ngunit iyon ang dahilan kung bakit, ay ako lang ng pagpindot sa memorya na ay hindi nabibilang sa akin. Kaya sabihin ipagtanggol laban sa isang Medyo sa ibang paraan pamamagitan ng pagtingin sa ito ng programa dito. Kaya, muli, ang balangkas ng na nakita natin earlier-- at nai-highlight ko ang oras int. At lahat ng ito panahon ay may pangunahing sa katunayan nagbalik ng halaga. Kahit na sa karamihan sa aming mga panayam halimbawa hindi kailanman namin ang isang beses na ginamit bumalik sa kahit ano sa pangunahing. Isulat lang namin printf malapit kulot Brace at iyon ito. Ngunit para sa libre, kung ano ang Compiler ay ginagawa para sa iyo, mabisa, ay bumabalik na 0 para sa iyo. Ginagawang out-- at medyo counterintuitive-- na 0 ay mabuti. Hindi ito ang ibig sabihin ng hindi totoo per se. 0 ay mabuti, at anumang di-0 halaga, ang mundo ay nagpasya, Maaari magpahiwatig ng isang error. Kaya kung sakaling mo na messed isang bagay up sa iyong computer, o isang programa ay namatay na lamang sa iyo at sa na iyong nakuha ang ilang mga liko window sa iyong screen, na sinasabi error 49 mga negatibong o error 23-- ilang mistulang di-makatwirang value-- na dahil ang isang programmer ay hard-code ng halaga tulad ng mga negatibong 49 o positibong 23 na kumatawan sa anumang numero, Dare sinasabi, ng 4000000000 posibleng bagay na maaaring magkamali sa isang programa. Kaya kung paano maaaring kong kumuha Samantalahin ang mga ito sa aking sarili? Well, hayaan mo akong magbukas ng isang programa na sinulat ni ako nang maaga, at poke sa paligid ng online na tinatawag na kumusta 4. At ito ay halos magkapareho, maliban sa ang Nakakuha nito Medyo ng error-checking. Sa kasong ito, muli ko na ipinahayag pangunahing bilang pagkuha ng dalawang argumento, ngunit oras na ito, sa 17 na linya, abiso Ako ang paggawa ng isang bit ng isang tseke katinuan. Ako sa paggawa ko bang na argc ay katumbas ay katumbas ng 2. Dahil kung ito ay, na Ibig sabihin ligtas na makakaya ko pindutin ang hindi lamang bracket 0, ngunit bracket 1. At pumunta ako magpatuloy at i-print out, sa kasong ito, Zamyla o Rob o kahit anong salita ko nai-type out. At ngayon lamang upang makakuha ng ng kaunti pa sa tamang, Pupunta ako sa tahasang bumalik 0 upang magpahiwatig lahat ay mahusay. Walang masamang nangyari. Ngunit sa pamamagitan ng convention, pupuntahan ko bumalik 1, o tapat ng anumang hindi-0 halaga, kung may nangyaring mali. Ngayon ang user ay hindi pagpunta sa talaga mapapansin kung ano ang nangyayari sa. Sa katunayan kung pumunta ako sa direktoryong ito, mag-zoom in kami at huwag gumawa kumusta 4, ./hello-4 Zamyla behaves tulad ng iyong inaasahan ko. Ngunit kung sa halip ko hindi nagta-type anumang bagay, walang Mukhang nangyari, ngunit hindi ito nagka-crash. At kung sa halip gagawin ko ng isang bagay tulad ng Rob ay isang Proctor Thayer-- sa pagbabahagi di-makatwirang impormasyon. Ngunit paunawa, argv 1, 2, 3, 4, at 5 dapat na ngayong umiiral sa memorya. Iyon, masyadong, ay hindi kung ano ang aking mga programa inaasahan, dahil na-check ko kung argc ay katumbas ay katumbas ng 2 o hindi. Kaya ako ngayon ang pagtatanggol laban ito. Ngayon, bilang isang bukod, namin ang programmer-- o sa halip namin ang users-- hindi kailanman makita na 0 o 1 ngunit gamit ang isang tool na tinatawag na Debugger, o iba pang mga tool, dahil kakailanganin namin makita ang bago ang haba, ikaw ang programmer talaga ang makakakita kung ano ang maaaring maging pagpunta mali sa loob ng iyong programa. Kaya, anumang mga katanungan sa argc? Oo. Madla: Nakita ko na kung saan sila ay hindi nagkaroon ng character, [INAUDIBLE] Sinabi lamang string star d, tulad ng karakter asterisk kuwit. Ang mga ito ay katumbas dito? David MALAN: Ang mga ito. Kaya ang tanong ay, mayroon kang paminsan-minsan nakikita programa tulad nito na hindi sabihin string argv bracket ngunit sa halip ay sinasabi ng isang bagay tulad ng char star argv bracket. At mayroong kahit iba pang variant na maaari kang makakita. Ang mga ito sa katunayan katumbas. Sa ngayon, mayroon kaming mga uri ng mga gulong pagsasanay sa sa anyo ng mga string sa CS50 library, ngunit sa higit lamang sa isang linggo o kaya kami ay pagpunta sa alisin na bara nang sama-sama at talagang tumingin sa kung ano ang char at ang star , at kung paano mga tumutukoy sa memorya pagkatawan sa mas pangkalahatang paraan. Kaya makikita namin bumalik sa iyon. Iba pang mga tanong sa aming argv o argc? Oo. Madla: Bakit ito bumalik ng isang error [INAUDIBLE]? David MALAN: Bakit ito ginawa bumalik ng isang error only-- oh! Sa nakaraang kaso, kung kailan namin ay futzing sa paligid sa memorya, bakit bumalik lamang ito ng isang error kapag ako ay talagang na-type ng isang malaking bilang? Maikling sagot ay, Nalaman lamang namin masuwerteng. Sa pangkalahatan, ang isang computer naglalaan ng memory sa chunks, at ito ay nagbigay sa akin ng isang malaking sapat na chunk Nakatanggap ako ang layo, nang hindi napansin, ng hinahawakan bracket 2, 3 bracket, bracket 50, ngunit sa lalong madaling matutulak ko ang aking swerte, nagpunta ako sa ibayo ng hangganan ng chunk ng memorya sa operating system ay naibigay na sa akin. At iyon ang kapag ito clamp down at sinabi, hindi. Error sa pagse-segment. Oo. Madla: Paano gumagana ang computer alam ang halaga ng argc? David MALAN: Paano gumagana ang computer na alam ang halaga ng argc? Kapag nagpatakbo ka ng isang programa, programa na iyon, sa pamamagitan ng likas na katangian ng ang mga kumikislap na prompt, ay ipinasa ang hanay ng mga mga salita na na-type sa prompt, na noon ay nai-type sa prompt. At kaya ito ay ang iyong operating sistema na mahalagang populates argumento pangunahing para sa iyo. Kaya na ang isa sa mga serbisyo na iyong nakuha, uri ng lihim sa ilalim ng hood ng isang operating system. Iba pang mga tanong? Oo. Madla: Ano ang ibig sabihin ng core dump? David MALAN: Ano ang ibig sabihin ng core dump? Nang sa gayon ay isang mahusay na tanong. At hayaan mo akong bumalik sa direktoryong ito dito. At mapapansin mo na Mayroon akong isang bagong file na may. Sa katunayan Ito ay tinatawag na core, at ito ay aktwal na karaniwang sa isang disenteng-sized na file. Iyon ay mahalagang isang snapshot ng ang mga nilalaman ng memory aking program o RAM kapag ito crash. At ito ay maging kapaki-pakinabang, potensyal, diagnostically, sa sandaling makipag-usap namin sa isang susunod na lecture at seksyon tungkol sa pag-debug, dahil maaari mong aktwal na gawin ang katumbas ng isang digital autopsy sa file na iyon upang makatulong na malaman kung ano ang iyong ginawa mali sa iyong programa. Oo. Madla: Ay argc isang command sa mismo, o maaari mong pangalanan ito kahit ano? David MALAN: Magandang katanungan. Ay argc isang command sa sarili nito, o maaari mong pangalanan ito kahit ano? Ito ay talagang hindi isang command. Ito ay lamang ng isang variable ng pangalanan o pangalan ng isang argument, ang at sa gayon walang pasubali namin maaaring tumawag ito foo, maaari naming tumawag ito bar, na may posibilidad maging ang go-to mga salita na isang computer siyentipiko ang papunta sa. Ngunit sa pamamagitan ng convention, ginagamit namin argc at argv. Ngunit iyon lamang ang isang tao lamang convention, walang higit pa. Lahat ng karapatan. Kaya lumiliko out, naging ako na nagsasabi sa isang bit ng isang puting lie-- at tapat, sa hinaharap, makikita mo nagsi-pagsabi namin ng iba pang mga puting mga kasinungalingan. Ngunit sa ngayon, ipinapadala namin sa pagpunta Peel sa likod ng isa sa mga ito. Sa kasong ito dito kapag ako dati Pinatatakbo ng isang programa tulad ng ./hello o ./hello-3 Zamyla, nagkaroon kami ng mga nilalaman ng aking memory computer naghahanap halos tulad ng ito. Ngunit isipin kung ano ang isang string ay. Ano ang sinabi namin sa isang linggo nakaraan kung ano ang isang string aktwal ay sa ilalim ng hood? Madla: Array ng char. David MALAN: Ito ay isang hanay ng mga karakter, tama? Kaya maaaring mayroon kaming isang array ng mga string, ngunit, sa pagliko, isang string ay isang hanay ng mga character. Kaya kung talagang nais kong maging anal kapag gumuhit ko ang larawang ito, Ko dapat talaga mai-pagguhit ito ng kaunti pa tulad nito, kung saan sa bawat isa sa mga ini-index ng aking argv array, may sarili nito sa kabuuan string na mismo ay nasa isang array. At ngayon sa puting kasinungalingan sinasabi namin ngayon ay ang larawan ay hindi tumingin pa masyadong tulad nito. Sa katunayan, ang maliit na mga parisukat ay Karaniwang sa labas ng malaking parihaba doon. Ngunit kami ay bumalik sa na bago ang haba. Ngunit ito ay ./hello backslash 0, na ang pagiging espesyal na character na demarcates sa dulo ng isang string, at nakuha namin ang isa pa matapos Pangalan Zamyla ni. Kaya kung ano ang ibig sabihin nito? Well, hayaan mo akong sige at buksan ang dalawang iba pang mga halimbawa na magagamit sa online. Ang isa ay tinatawag na argv1.c at ang iba pa ay argv2. Ito ay isang programa super-simple na ay naiiba mula sa mga nakaraang mga programa sa ngayon na gumagamit ako argc at argv up dito. At ngayon ako sa pagsasama ng may para sa loop sa 18 linya, mula sa i = 0 sa hanggang sa argc. At kung ano ako pagpunta sa gawin na may ganitong linya ng code dito? Sa Ingles. Ito malinaw naman ay nagpapakita ng paggamit ng argc. Ngunit sa Ingles, ano ang ginagawa ito gawin kung nagpatakbo ako ng programang ito? Oo? Madla: Ito ay pagpunta sa i-print ang iyong screen nang maraming beses hangga't gusto mo. David MALAN: Eksaktong. Kaya kahit anong salita ko nagta-type sa prompt, ito ay pagpunta sa regurgitate ang mga ito sa akin isa sa bawat linya. Kaya sabihin magpatuloy at gawin ito. Hayaan akong pumunta sa aking direktoryo at gawin gumawa argv1 ./argv1. At ngayon, panatilihing ni itong simple ipaalam. Ni walang gawin sa unang Hayaan. Ito ginawa i-print ang isang bagay, at na sa katunayan ang pangalan ng programa, dahil na nasa bracket 0. Kung ngayon ko sasabihin sa foo, ito ay pagpunta sa gawin mga dalawang, at kung sinasabi ko sa foo bar, ito ang nangyayari upang sabihin na ang mga tatlong bagay. Ngayon na medyo kawili-wiling, siguro. Ngunit isipin na argv ay isang hanay ng mga string, ngunit isang string ay isang array ng char, upang maaari naming gumawa ng mga bagay up ng isang bingaw at ilapat ang pangunahing pag logic at gumawa ng code na mukhang higit pa ng kaunti cryptic, admittedly. Ngunit sa pamamagitan ng pagkakaroon ng isang Nested loop, isang bagay Akın sa kung ano ang maaari mong isipin ang mula sa Mario, halimbawa, kung ginawa mo ito sa ganitong paraan. Kaya mapansin ngayon sa 19 linya, ako muling iterating sa paglipas ng aking mga argumento, mula sa 0 hanggang sa argc. At ngayon sa linya 21-- ako paghiram ng isang nanlilinlang mula sa huling week-- Ako ay check kung ano ang haba ng argv bracket i. Ako sa pag-iimbak na sagot sa n. At pagkatapos ay ako pagsasama mula sa j hanggang sa n, kung saan j ay nasimulan sa 0. Kaya, convention para sa pagbilang. Sa sandaling nagamit mo na i, kung mayroon kang isang Nested loop, maaari mong hindi gamitin muli i, kung hindi man ay makikita mo clobber, potensyal, ang halaga sa labas ng panloob na loop. Kaya ako ang aking ginagamit j sa pamamagitan ng convention. Maaari naming gamitin k. Kung mayroon kang higit sa k, malamang na may masyadong maraming nesting, karaniwan. Ngunit ngayon, mapansin ang aking printf linya ay bahagyang naiiba. Hindi ako nagpi-print ng% s, ako pag-print% c, na kung saan, siyempre, ay isang placeholder para sa isang char. At ngayon mapansin ang syntax na ito. Bagong. Hindi namin nakita ito bago. Ngunit lohikal, ito lamang ay nangangahulugan makuha ang ith string sa argv at makuha ang jth kung ano? Madla: Character. David MALAN: Character sa na string. Kaya sa pamamagitan ng paggamit ng mga square bracket sinundan ng mga square bracket, ito ay diving unang sa mga string argv, ang at pagkatapos ay ang pangalawang square bracket na may j ay diving sa ang mga character ng na partikular na string sa argv. At pagkatapos ay, para lamang sa mabuting panukala, Ako sa pag-print ng isang bagong linya dito. Kaya ngayon hayaan mo akong sige at buksan up ng isang bahagyang mas malaking window upang maaari naming makita ito sa aksyon. Hayaan akong pumunta sa folder na iyon. At ngayon gawin gumawa ng argv-2-- whoops-- gumawa ng argv-2, ./argv 2. Ipasok. At medyo matapang upang basahin nang patayo, ngunit iyan ay sa katunayan ang pangalan ng programa, na sinusundan ng isang blangkong linya. Ngayon ipaalam sa akin sige at gawin foo. Katulad nito mahirap basahin, ngunit ito ay sa katunayan pag-print ng isang character sa bawat linya. At kung gagawin ko bar, ito ay ngayon pag-print ng mga linya sa pamamagitan ng linya. Kaya ang takeaway dito ay hindi kaya magkano iyon, Wow, tingnan ang kapong baka bagong nanlilinlang kung saan maaari kang makakuha sa nilalaman ng mga tukoy na character ng isang array, ang ngunit sa halip kung paano namin ang paglalaan ng mga pangunahing tulad ng mga ideya sa pag-index sa isang array, at pagkatapos ay pag-index sa isang array na sa array na, at lamang ng paglalapat ng mga parehong mga ideya sa bahagyang mas sopistikadong mga halimbawa. Ngunit ang mga pangunahing kaalaman talagang may hindi nagbago, kahit na mula noong huling linggo. Ngayon ito ay isang uri ng nasa oras, sa iyon, isipin ang, sa linggo zero namin na nag-play sa isang aklat ng telepono na tulad nito. At kahit na ito ay malinaw naman pisikal na piraso ng papel, maaari mong uri ng isipin isang libro ng telepono bilang isang array. Ay tiyak na, kung ikaw ay upang reimplement ito piraso mga piraso ng papel sa isang computer, marahil gagamit ka ng isang bagay tulad ng isang array upang i-imbak ang lahat ng mga mga pangalan at mga numero mula sa isang lahat ng mga paraan sa pamamagitan ng Z. Kaya ito ay magaling, dahil ito ay nagbibigay-daan sa amin ng pagkakataon, di kaya, isaalang-alang kung paano maaari mong aktwal na ipatupad ang isang bagay tulad na. Tulad ng sa isang serye ng mga pinto dito. Kaya kung could-- ko kailangan namin ng isa magboluntaryo upang makabuo sa up. Ni makita Hayaan. Ng hindi pamilyar na mukha marahil, pamilyar na mukha marahil. Paano ang tungkol sa orange? Narito. Orange shirt, dumating sa up. Sabihin sige ngayon at ilipat mga pintuan sa ibabaw ng mga gilid, ilipat ang mga palabas ng paraan para sa isang sandali. Ano ang inyong pangalan? AJAY: David MALAN: Ajay. David. Nice upang matugunan mo. Lahat ng karapatan. Kaya mayroon sa likod ng mga anim na namin pinto digital na sa screen-- o, sa halip, pitong mga pinto sa screen-- ang maramihang mga numero. At ako sinabi sa iyo walang sa advance-- sumang-ayon? AJAY: Wala nang maaga. David MALAN: Ang lahat ng gusto kong mong gawin ngayon ay upang mahanap para sa akin, at para sa amin, talaga, ang bilang 50, isang hakbang sa isang pagkakataon. AJAY: Bilang 50? David MALAN: Ang bilang 50. At maaari kang magbunyag ng kung ano ang sa likod ng bawat isa sa mga pinto lamang sa pamamagitan ng pagpindot ito ng isang daliri. Damn ito. [Tawa] [APPLAUSE] Napakaluwag na rin tapos na. OK. Mayroon kaming kaibig-ibig na regalo premyo para sa iyo dito. Ang iyong pick ng mga pelikula namin napag-usapan noong nakaraang linggo. AJAY: Oh, tao. Oh, hindi ko nakita Spaceballs. David MALAN: Spaceballs. Lahat ng karapatan. Kaya hawakan lamang ng isa sandali. Ni gumawa ito How-- hayaan isang teachable moment-- kung paano pumunta ka tungkol sa paghahanap ng mga numero ng 50? AJAY: ko pinili nang random. David MALAN: Kaya na pinili mo sapalaran at nakuha masuwerteng. AJAY: Oo. David MALAN: OK. Mahusay. Kaya ngayon, nagkaroon ka ng hindi nakuha masuwerteng, ano pa Maaaring nangyari sa likod ng mga pinto? Kaya kung pumunta ako magpatuloy at magbunyag ng mga numerong ito dito, talaga sila ay nasa random order. At ang pinakamahusay na maaari mong magkaroon ng tapos, tapat, ay sa pamamagitan ng, sa huli, sa pinakamalala kaso, pagsusuri ang lahat ng ito. Kaya ba kayong mga super-masuwerteng, na ay hindi kung ano ang gusto namin tumawag sa isang algorithm. Oo, Malugod na pagbati. Ngunit ngayon let's-- katatawanan sa akin, kung maaari mo. Sabihin pumunta sa tab na ito dito. At narito ang mga numero sa mga malinaw na kung ano tila may random na pagkakasunud-sunod, at sila ay. Ngunit ngayon kung sa halip ko ang claim na sa likod ng mga pintuan ang mga numero na pinagsunod-sunod. Ang layunin ay upang ngayon din hanapin sa amin ang numero 50. Ngunit gawin ito algorithm, at sabihin sa amin kung paano ka ng pagpunta tungkol dito. At kung iyong makita ito, panatiliin ninyo ang pelikula. Hindi mo ito makita, magbibigay sa iyo ng ito pabalik. AJAY: Kaya ako pupunta upang suriin ang mga dulo una, upang matukoy kung there's-- [Tawa AT APPLAUSE] David MALAN: Narito kang pumunta. Tingnan natin ang isang pagtingin sa isa ng predecessors Ajay ni, Sean, na naging hindi masyadong bilang masuwerteng. OK, kaya ang iyong gawain dito, Sean, ay ang sumusunod. Ko na maitago sa likod ng mga pinto sa bilang ng pitong, ngunit nakatago ang layo sa ilan sa mga pinto pati na rin ang iba pang mga hindi-negatibong numero. At ang iyong layunin ay upang mag-isip ng ito tuktok na hilera ng mga numero tulad ng isang array. Humihingi kami ng pagkakasunud-sunod lamang ng mga piraso ng papel na may mga numero sa likod ng mga ito. At ang iyong layunin ay, lamang gamit ang tuktok array dito, hanapin sa akin ang bilang pitong. At kami ay pagkatapos ng pagpunta sa pumupuna kung paano mo pumunta tungkol sa paggawa nito. Hanapin sa amin ang numero ng pitong, mangyaring. Bilang 5, 19, 13. Ito ay hindi isang nanlilinlang tanong. 1. Sa puntong ito ang iyong iskor ay hindi sadyang mabuti, sa gayon maaari mong pati na rin panatilihin ang pagpunta. 3. Pumunta sa. Tapat, hindi ko maaaring makatulong ngunit magtaka kung ano ang kahit pinag-iisipan mo tungkol sa. Seán: Maaari bang kumuha ng hilera mula sa tuktok lamang. David MALAN: hilera sa tuktok lamang. Kaya mayroon kang tatlong kaliwa. Kaya mahanap ako ng 7. [Madla sigaw SUGGESTIONS] Kaya pareho ng mga kamangha-manghang mga para sa napaka iba't ibang mga kadahilanan. Kaya ito ay kung saan namin tumigil ng isang sandali ang nakalipas, at ang mga key na pananaw dito ay ang mga pinto ay may mga numero sa likod ng mga ito na pinagsunod-sunod, ang perpektong takeaway na kung saan ay na maaari mong gawin fundamentally mas mahusay sa ang pangalawang example-- at, sa katunayan, iyon ay Sean ni unang pagtatangka na may random na numero tulad ng before-- ngunit sa lalong madaling bilang mga numero ay pinagsunod-sunod, halos tulad ng phone book, kung ano ang maaari malinaw naman mong gawin? O kaya kung paano maaari mong pakinabangan kaalaman na? Oo. Madla: pumunta ka nang kalahating [INAUDIBLE]. David MALAN: Oo. Mismong. Kaya paunang instinct Ajay ni noon ay upang suriin ang mga dulo, pati na isipin ko, at pagkatapos ay i-uri-uriin kami ng tapos halimbawa sa mabilis. Ngunit kung sinimulan namin upang magawa ito nang higit pa methodically sa kahabaan ng mga linya, ngunit marahil na nagsisimula sa gitna, dahil ang mga ito ay pinagsunod-sunod, sa lalong madaling magbunyag namin ang bilang 16, samakatuwid namin know-- at sabihin gawin nang eksakto that-- namin samakatuwid malaman na 50, sa kasong ngayong araw, Na nakuha upang maging sa kanan. Kaya lang tulad ng sa linggo zero kapag tore namin ang aklat ng telepono sa kalahati at threw kalahati ng problema ang layo, parehong ideya dito. Maaari naming itapon ito sa kalahati ng problema ang layo. At marahil kung ano ang iyong maaaring gawin algorithm, sa sandaling alam mo na 50 ay dapat na sa kanan, kung ito ay kahit saan, ay subukang doon, sa gitna ng mga natitirang mga pinto. Siyempre, 50 ay mas mataas kaysa sa 42, kaya magagawa namin magtapon ito natitirang -kapat ng problema ang layo, at, sa wakas, kilalanin isang bagay tulad ng 50. Ngunit tulad lamang ng sa phone book, ang mga numerong ito ay ibinigay sa atin na nasa Pinagbukud-bukod pagkakasunud-sunod, na nag-iiwan sa amin may pinag-uusapan, kung paano ito gawin makakuha ng mga bagay sa pinagsunod-sunod order? At, tapat, sa kung ano ang gastos? Ito ay isang bagay upang maging ipinasa ang phone book at pagkatapos ay mapabilib ang iyong mga kaibigan sa pamamagitan ng paghahanap ng mga isang numero ng telepono talagang mabilis, i-right? Tearing 32 mga pahina out upang makahanap ng isang tao sa labas ng 4000000000 mga pahina, sinabi namin ay isa sa matinding halimbawa. Ngunit kung magkano ang oras ay tumagal Verizon upang ayusin na ang aklat na telepono? Magkano oras ay tumagal sa amin upang pagbukud-bukurin ang mga pitong numero? Iyon ay isang katanungan na hindi namin kaya ngayon ganap na hindi pinansin. Kaya sagutin ng tanong na ito ngayon hayaan. At nagpapaumanhin kami sa lahat out sa mga pelikula ngayon, ngunit mayroon kaming ilang mga bola ng stress. Kung, sabihin nating, walong boluntaryo hindi kuhanan pagsali sa amin dito? Sabihin sige at gawin, kung paano tungkol sa ang apat sa iyo, tatlo sa iyo dito? Kumuha ng ilang mga bagong mukha. At ang apat sa iyo doon? At now-- sabihin hindi bias here-- at numero ng walong sa paglipas dito sa dulo. Halika sa up. Lahat ng karapatan. Kaya kung ano ang mayroon kami dito para sa bawat isa sa iyo ay isang numero. Kung nais mong pumunta Magpatuloy, dalhin ang bilang na ito. Ano ang inyong pangalan? ARTIE: Artie. David MALAN: Artie, okay. Ikaw ang numero 1. Amin: Amin. David MALAN: Amin. David. Ikaw ang numero 2. At sige, pati na ipasa ko mo ang mga sheet ng papel, line up inyong sarili sa harapan ng musika ay nakatayo sa parehong pagkakasunud-sunod bilang up doon. Andy: Hi, Andy. David MALAN: Andy, ito ay maganda upang makita ka. Numero ng 3. Jacob: Jacob. David MALAN: Jacob, numero 4. Maligayang pagdating sakay. Grant: Grant. David MALAN: Grant. Numero 5. ALANNA: Alanna. David MALAN: Alanna, numero 6. Frances: Frances. David MALAN: Frances, numero ng 7. At? Rachel: Rachel. David MALAN: Rachel, numero 8. Lahat ng karapatan. Sige at makakuha ng iyong sarili sa order na ito. Hayaan akong ilagay ang isa natitirang musika tumayo sa lugar. Saan kailangan mo ng isang stand? OK. Magpatuloy at ilagay lamang ang iyong mga numero ng kung saan ang mga mambabasa ay maaaring makita ang mga ito sa, ang musika tumayo nakaharap palabas. At sana, ang aming unang katinuan check here-- 4, 2, 6. Oh-oh. Maghintay ng isang minuto. Wala kaming 8. Kailangan kong evict ka mula sa halimbawa sa kahit papaano. Bilang Hindi, na OK lang. Ni makita Hayaan. Maaari naming gawin ito. Stand sa pamamagitan ng. May pumunta namin. Tama. Lahat ng karapatan. Kaya, ngayon ay mayroon kaming 8, 1, 3 7, 5. OK. Mahusay. Kaya ang tanong sa kamay ay, sa kung ano ang gastos, at sa pamamagitan ng kung ano ang pamamaraan, maaari naming aktwal na-uri-uriin ang mga numerong ito dito sa gayon ay maaari uri ng namin gumana paurong, sa huli, at decide-- ito talaga kahanga-hanga, ito ay talagang mahusay, na maaari kong hatiin at talunin ang isang libro ng telepono? Ito ba ay talagang mahusay na Maaari ko bang hatiin at lupigin mga digital na piraso ng papel sa board, kung siguro ito ang nangyayari sa amin ng gastos ng isang kapalaran sa oras o enerhiya o CPU cycle upang aktwal na makakuha ng aming data sa ilang mga Pinagbukud-bukod order? Kaya tanungin na tanong ipaalam. Kaya unang off, mga numerong ito ay sa halos random na pagkakasunud-sunod, at Pupunta ako sa ipanukala isa algorithm, o proseso sa pamamagitan ng kung saan maaari naming uri-uriin ang mga tao. Pupunta ako sa lumapit itong maganda naively. At pupuntahan ko nakikilala na ito ay uri ng marami para sa akin balutin sa aking isip sa buong buong data set nang sabay-sabay. Pero alam mo kung ano? Pupunta ako sa gumawa ng ilang mga napakasimpleng marginal na pagsasaayos. 4 at 2 ay sira, kung ang layunin ay upang pumunta mula sa 1 sa hanggang 8. Kaya alam mo kung ano? Pupunta ako sa mayroon kang magpalit guys, kung ikaw ay lumipat pisikal na mga posisyon at ang iyong mga piraso ng papel. Ngayon 4 at 6, ang mga ito ay sa pagkakasunud-sunod. Pupunta ako sa umalis mga maging. 6 at 8, mga nasa order. Pagpunta sa iwan ang mga ito maging. 8 and1, sa labas ng order. Kung hindi mo nais na bale dalawang pagpapalit. Ngayon 8 at 3, kung maaaring magpalit ka guys. 8 at 7, kung maaaring magpalit ka guys. At 8 at 5, kung maaari magpalit ka guys. Ngayon, ako tapos? Hindi, malinaw naman hindi. Pero ginawa ko ang sitwasyon ng mas mahusay, tama? Ano ang muli ang iyong pangalan, numero ng 8? Rachel: Rachel. David MALAN: Kaya Rachel ay mabisa bubbled up medyo malayo, ang lahat ng mga paraan sa dulo ng ang aking mga hanay ng mga numero dito. At kaya problema na uri ng nalutas na. Ngayon, malinaw, 2 kailangan pang ilipat ang isang bit, at 4 at 6 at 1. Ngunit mukhang kong na makakakuha ito ng maliit na mas malapit sa ang solusyon. Kaya sabihin ilapat ang parehong ito walang muwang muli heuristic. 2 at 4, OK. 4 at 6, OK. 6 at 1, mm-mm. Ni swap Hayaan. 6 at 3, mm-mm. Ni swap Hayaan. 6 at 7 ay OK. 7 at 5, nope. Ni swap Hayaan. At ngayon 7 at 8. At kung ano muli ang inyong pangalan? Frances: Frances. David MALAN: Frances. Kaya ngayon ay Frances sa kahit na isang mas mahusay na posisyon, dahil ngayon 7 at 8 ay nasa tamang bubbled hanggang sa tuktok. Kaya 2 at 4, OK. 4 at 1, magpalitan ng let. 4 at 3, magpalitan ng let. 4 at 6, ikaw ay OK. 6 at 5, magpalitan ng let. At ngayon ang mga guys ang mga magandang. Kami ay halos doon. 2 at 1, sa labas ng order, kaya magpalit. At ngayon hayaan mo akong gawin ang isang tseke katinuan. 2 at 3, 3 at 4, at 4 5, 5 at 6, 6 at 7, 8. OK, kaya tapos na kami. Ngunit sa kung ano ang ginawa ko gastos -uri-uriin ang mga numerong ito dito? Well, kung gaano karaming mga hakbang na ginawa ko potensyal na tumagal kapag pagbubukod-bukod ng mga tao? Well, kami ay bumalik sa na pinag-uusapan. Ngunit, tapat, kung nakakuha ka ng kaunti nababato, na uri ng pagbubunyag sa na hindi ito ay siguro ang pinaka-mahusay na algorithm. At sa katunayan, tapat, ako pagpapawis ang lahat ng higit sa paglalakad papunta at pabalik. Iyon ay hindi huwag mag-lalo na mahusay. Kaya ipaalam sa subukan ang ibang bagay. Kung ikaw guys ma-reset ang inyong sarili sa mga walong mga halaga. Mahusay. Tingnan natin ang isang hitsura digital na, para lang ng ilang sandali bago namin subukan ibang bagay, sa kung ano lamang ang nangyari. Hanggang dito, handa ka tungkol sa upang makita ang isang visualization ng mga walong mga kawani na tao kung saan ang kulay asul at pula mga bar ang mga numero. Ang taller ang bar, ang mas malaki ang bilang. Ang mas maikli ang bar, ang mas maliit na mga numero. At kung ano ang iyong pagpunta upang makita ay nasa random na pagkakasunud-sunod ng higit sa walong ng mga ito. Ka ng pagpunta upang makita ang mga bar nagsisimula pa nakaayos ayon na parehong algorithm, o hanay ng mga tagubilin, na Makikita kami tatawag sa henceforth bubble-uuri. Kaya mapansin, bawat segundo o kaya, dalawang bar ay lighting up sa pula, Sini-kumpara sa pamamagitan ng mga computer. At pagkatapos ay kung ang malaking bar at ang maliit na bar ay sira, sila ay swapped para sa akin. Ngayon ito ay hindi kapani-paniwalang nakakainip upang panoorin ito, tiyak, para sa napaka-haba, ngunit mapansin ang takeaway-- malaki bar gumagalaw sa kanan, maliit na bar paglipat sa kaliwa. I-abort ang prosesong ito Hayaan at mapabilis ang mga ito up upang maging mas mabilis, sa gayon aming makakaya makakuha ng isang mataas na antas na kamalayan ng kung ano, sa katunayan, isang uri ng bubble ang ginagawa. Sa katunayan, ito ay bubbling hanggang sa ang kanang bahagi ng listahan, o ang array, ang mas malaking bar. At kabaligtaran, ang maliit na mga bar ay mga bubbling kanilang mga paraan pababa sa kaliwa, albeit sa isang mas mabilis na tulin kaysa sa dati namin. Kaya, mas mahirap makita sa mga kawani na tao, ngunit biswal na sa katunayan kung ano ang nangyayari. Subalit ng subukan ang isang fundamentally hayaan ibang diskarte ngayon. Subukan ang ibang Hayaan algorithm kung saan mayroon kami sa iyo guys magsimula sa mga orihinal mga posisyon, na kung saan ay ang order na ito dito. At ni sige ngayon hayaan. At ako pagpunta sa gawin ang isang bagay kahit na mas simple, i-right? Sa retrospect, pagpapalit muli pairwise at muli, halos isang maliit na matalino. Ni gawin ang mga bagay kahit na higit pa naively Hayaan, kung saan kung gusto ko upang pagbukud-bukurin ang mga tao, hayaan panatilihin lamang sa akin hinahanap para sa mga pinakamaliliit na elemento. Kaya ngayon, 4 ay ang pinakamaliliit na numero na iyong nakita ko. Pupunta ako sa tandaan na. Hindi, 2 ay mas mahusay, at tandaan na. 1 ay kahit na mas maliit. 3, 7, 5. OK. One-- kung ano muli ang inyong pangalan? ARTIE: Artie. David MALAN: Artie. Kaya, Artie, sige. Pupunta ako upang hilahin out ng linya mo. Kung maaari kang bumalik dito. At kailangan kong gumawa nang lugar para sa kanya. Mayroon kaming desisyon point dito. Paano maaari naming gumawa ng room para sa Artie dito sa simula kung saan numero 1 nabibilang? Madla: Shift. David MALAN: OK, namin maaaring ilipat sa lahat. Ngunit ipanukala ang isang pag-optimize. Na pakiramdam ng isang maliit na nakakainis para sa akin upang hilingin sa apat na tao upang ilipat ang lahat ng mga paraan pababa. Ano pa ang maaari kong gawin? Madla: Lumipat ang mga ito. David MALAN: Lumipat ang mga ito. At kung ano muli ang inyong pangalan? Jacob: Jacob. David MALAN: Jacob, ilipat. Lubos na mas mahusay na magkaroon lamang Jacob lokasyon swap Artie, bilang kabaligtaran sa pagpilit na lahat ng apat na ng mga tao, salamat sa inyo, upang kanilang wastong posisyon. Ano ang maganda ang tungkol sa Artie ngayon, siya ay nasa kanyang tamang posisyon. Ni gawin muli ito Hayaan. 2, na ang pinakamaliit na bilang na iyong nakita ko. 3, 7, 5. OK. 2 ay talagang sa pinakamaliliit na. Hindi mo na kailangang gawin ang anumang trabaho. Gawin ni itong muli Hayaan. 6. Pinakamaliit? 8. Nope. 4? Ooh. Hayaan akong tandaan 4. 3. Hayaan akong tandaan 3. 7, 5. Pinakamaliit na numero na hindi ko na nakikita sa mga ito pass ay 3. Kung nais mong dumating sa labas. Saan kami makapupunta sa inilagay mo? At kung ano ang iyong pangalan? ALANNA: Alanna. David MALAN: Alanna, hindi namin pagpunta sa may upang evict iyo. Ngunit iyon ay mas mahusay, magpalit lamang ng dalawang tao, kaysa magkaroon ng maraming mga tao talaga sidestep sa ibabaw. Ngayon gawin muli ito ipaalam. Pupunta ako upang piliin 4, kaya dumating sa labas. At kung sino ang pagpunta sa ilipat? Numero ng 8, siyempre. Kung ngayon mahanap ko ang numero 5, dumating sa labas. Numero ng 8 pupuntahan upang muli evicted. Ngayon pupuntahan ko makita ang numero ng 6 na nasa lugar. 7 sa lugar. 8 sa lugar. Ang ginawa lang namin ngayon ay isang bagay na tinatawag na-uri-uriin seleksyon, at kung ilarawan sa isip namin ito, ito ay pagpunta sa pakiramdam ng isang maliit na naiiba. Sabihin sige at mula sa na ito menu dito, ito visualization-- ni baguhin ang to-- dumating sa, Firefox ipaalam. Ni baguhin ito sa isang uri seleksyon Hayaan. At mapabilis ni ito pataas tulad ng dati ipaalam, at simulan ang visualization ngayon. At algorithm na ito ay may ng ibang pakiramdam dito. Sa bawat iteration, tapat, ito ay mas higit pang prangka. Ako lamang ng pagpili sa pinakamaliliit na elemento. Ngayon, tapat, Nakatanggap ako ng maliit na mapalad na oras, sa mga na ito pinagsunod-sunod napakabilis. Ang mga elemento ay random. Hindi ito, pati na aming kalaunan makita, fundamentally nang mas mabilis. Ngunit sabihin makita ang isang third at huling lumapit dito tulad sa kung ano ang nangyayari sa. Kaya sabihin sige at i-reset mo guys isang huling oras upang maging sa ayos na ito dito. At ngayon, pupuntahan ko maging mas ng kaunti matalino, upang isalin lamang ang aming mga algorithm. Pupunta ako upang gawin ito. Pupunta ako sa hindi pumunta pabalik-balik kaya magkano. Tapat, ako pagod ng lahat ng traversing ito. Lamang ako ng pagpunta sa tumagal ng kung ano ang ako ibinigay sa simula ng listahan, at Pupunta ako upang ayusin na pagkatapos at doon. Kaya dito tayo. Numero 4. Pupunta ako sa magpasok ng numero 4 sa isang pinagsunod-sunod na listahan. Tapos na. Inaangkin ko ngayon, at upang gumawa lamang ito nang higit pa malinaw, ang bahaging ito ng aking listahan ay pinagsunod-sunod. Ito ay uri ng isang hangal claim, ngunit sa katunayan 4 ay pinagsunod-sunod sa isang listahan ng mga laki ng isa. Ngayon, ako ako pagpunta sa tumagal sa numero 2. Numero 2 ako ngayon ng pagpunta sa magpasok sa tamang lugar. Kaya kung saan ang 2 nabibilang? Malinaw, sa paglipas dito. Kaya sige lang at ilipat pabalik, kung magagawa mo. At bakit hindi mo guys tumagal lamang ang iyong musika ay nakatayo sa iyo oras na ito. At ipasok mo sabihin forcibly sa simula ng listahan. Kaya ng kaunti pang trabaho. Nagkaroon na ako upang ilipat Jacob sa paligid, at kung ano ang iyong pangalan? Amin: Amin. David MALAN: Amin. Ngunit hindi bababa sa hindi ko pumunta nang pabalik-balik. Tingin lang ako sa pagkuha ng mga bagay bilang pumunta ko. Lamang ako ng pagpasok ng mga ito sa tamang lugar. 6, ito ay aktwal na medyo madali. Magpasok ng ka banda roon, kung mong hayaan Nais lamang upang ilipat sa paglipas ng bahagyang. Numero ng 8, din medyo madali. I-right doon. Damn ito. Numero 1 hindi namin maaari lamang magpalit sa Amin dito, dahil iyon ang nangyayari sa gulo up ang order. Kaya mayroon kaming upang maging mas ng kaunti matalino. Kaya, Artie, kung dati mo i-back up para sa isang sandali. Sabihin sige at ilipat ngayon, hindi tulad ng aming nakaraang mga algorithm, para gumawa nang lugar para sa Artie dito mismo sa simula. Kaya sa katapusan ng araw, ako uri ng ginagawa kung ano ang nais kong upang maiwasan ang bago. At sa gayon ang aking mga algorithm ay isang uri ng reverse, intellectually, mula sa kung ano ito ay orihinal. Lamang ako ng paggawa ng nagbabagong sa ibang punto. Ngayon ako sa 3. Oh, damn. Mayroon kaming gawin muli pang trabaho. Kaya itulak ka ni out ipaalam. Ni ilipat Hayaan 8, 6, 4-- oh oh-- at 3 ay pagpunta upang pumunta doon. Kaya hindi bababa sa bahagyang matitipid oras na ito. 7, hindi masyadong maraming trabaho na dapat gawin. Kaya kung nais mong mag-pop pabalik, magpasok ng mong hayaan. At Panghuli, 5, kung ikaw nais mag-pop pabalik, namin Kailangan upang ilipat sa iyo, sa iyo, sa iyo, hanggang sa limang ay nasa lugar. Kaya ngayon upang makita ito sa isang mataas na antas graphically, ni gawin algorithm na ito hayaan visualization sa isang karagdagang panahon. Kaya dapat namin ito tumawag sa uri pagpapasok. Susubukan naming patakbuhin ito tulad ng mabilis, at simulan ito dito. At ito, masyadong, ay may iba't ibang mga pandama. Ito ay isang uri ng mas mahusay na pagkuha at mas mahusay, ngunit ito ay hindi kailanman perpekto hanggang pumunta ako sa makinis at sa mga gaps. Dahil, muli, ako lamang pagkuha ng kung ano ang Ako na ibinigay mula kaliwa papuntang kanan. Kaya ako ay hindi makakuha ng kaya masuwerteng na ang lahat ng bagay ay perpekto. Iyon ang dahilan kung bakit namin ay may mga kaunting mispositions na namin naayos na sa paglipas ng panahon. Kaya lahat ng mga algorithm ay tila tumakbo sa bahagyang naiiba paces. Sa katunayan, na sasabihin sa iyo ay ang pinakamahusay na o ang pinakamabilis na sa ngayon? Bubble-uri-uriin, ang unang? Pinili uri, ang pangalawang? Pagpapasok ng uri, ang mga third? Marinig bang makakuha ng ilang mga uri pagpipilian. Iba pang mga saloobin? Kaya ito ay lumiliko out na lahat ng mga algorithm ay fundamentally tulad ng mahusay na bilang bawat other-- o, kabaligtaran, tulad lamang ng hindi mabisa bilang bawat isa, dahil maaari naming gawin fundamentally mas mahusay kaysa sa lahat ng tatlong mga ng mga algorithm. At iyon ang isang bit ng isang puting kasinungalingan, masyadong. kapag sinabi ko bilang mahusay o bilang hindi mabisa, na hindi bababa sa para sa sobrang laking halaga ng n. Kapag mayroon kaming mga tao walong lang dito, o marahil 50 o kaya bar sa screen, makikita mo talagang mapansin ang mga pagkakaiba kasama ang tatlong mga algorithm. Ngunit bilang n, ang bilang ng mga tao, o ang bilang ng mga numero, o ang bilang ng mga tao sa telepono aklat, o ang bilang ng mga web page sa database ng Google ay makakakuha ng mas malaki at mas malalaking, ipapakita namin makita na ang lahat ng tatlong ng mga algorithm ay aktwal na medyo mababa. At maaari naming gawin fundamentally mas mahusay kaysa sa na. Tingnan natin ang isang hitsura, sa wakas, sa kung ano ang mga algorithm maaari tunog tulad ng sa konteksto ng ilang mga iba pa pati na rin sa pamamagitan ng paraan ng visualization dito na ipakikilala sa amin upang ng isang bilang ng mga algorithm. Sabihin sige at congratulate ang aming mga kalahok dito, ang lahat ng kanino pinagsunod-sunod sa kanilang sarili nang mahusay. Kung nais mong gumawa ng isang regalo pamamaalam. Maaari mong panatilihin pati na rin ang iyong mga numero. At ano ang makikita mo, o sa halip marinig, ngayon, ay ang bilang inilalagay namin ang tunog sa bawat isa sa mga bar at iugnay ito sa ang software, iba't ibang mga dalas ng tunog, maaari mong balutin ang iyong isip nang higit pa audioly sa paligid ng kung ano ang bawat isa sa mga bagay na ito magmukhang. Ang unang ng kung saan ay isang uri ng pagpapasok ng [Tono] Ito ay isang uri ng bubble. [Tono] Pinili uri. [Tono] Isang bagay na tinatawag na pag-uuri-merge. [Tono] Gnome-uri. [Tono] Iyon lang para sa CS50. Makikita natin sa iyo sa Miyerkules. NARRATOR: At ngayon, "Deep Mga pananaw, "sa pamamagitan ng Daven Farnham. Bakit ito ang isang ay para sa loop? Bakit hindi gawing mas mahusay ito? Gusto ko gumawa ng limang loop. [Tawa]