Jason HIRSCHHORN: Maligayang Pagdating sa linggo tatlo, sa lahat. Mayroon kaming abala ngunit kapana-panabik na seksyon na nauna sa atin. Kaya una, dahil ginawa namin ang ilan usad sa mga kurso ngunit kami pa rin na may maraming mga pag-aaral ang natitira upang gawin, ako ay pagpunta upang ipakita sa iyo guys ilang mga mapagkukunan na dapat patunayan upang maging hindi mapaniniwalaan o kapani-paniwala kapaki-pakinabang bilang ikaw lapitan hindi lamang ang iyong mga Nagtatakda problema, ngunit din digest lahat ng ang materyal bigyan ka namin ng guys sa aralin at shorts at seksyon. Pagkatapos kami ay pagpunta sa gastusin ang unang 20 sa 25 minuto ng seksyon ng pagpunta sa paglipas ng GDB, na maaari o hindi maaaring magkaroon ng ginamit sa puntong ito, ngunit ito ay isang hindi mapaniniwalaan o kapani-paniwala kapaki-pakinabang na tool na habilin makatulong sa iyo na i-debug ang iyong mga program. Ang isang pulutong ng sa iyo ay maaaring ginamit printf sa gitna ng iyong programa upang malaman kung ano equaled isang variable. GDB ay mas mahusay kaysa sa printf at ay hindi magtaas ng iyong code dahil ikaw patakbuhin ito sa isang executable file. Kaya ipagpapatuloy namin sa ibabaw ng 10 pinaka-kapaki-pakinabang mga utos na kailangan mo para sa GDB, at kami ay pagpunta sa pumunta sa isang exercise magkasama kaya sa problema itakda ang tatlo at higit pa, mo Maaaring gamitin ng GDB upang matulungan ang debug ang iyong mga program. At sa wakas, kami ay pagpunta sa pumunta sa paglipas ng ilang pag-uuri at paghahanap ng mga algorithm na nakita mo sa lecture, at kami ay pagpunta sa aktwal na code, hindi lang pseudocode, ngunit code binary paghahanap, uri ng bubble, at uri pagpili. Kaya una sa lahat, gusto kong pumunta sa ibabaw ng mga mapagkukunan. Ito ay isang malawak na listahan, at ito ay mas maliit na font dahil nagkaroon ako ng maraming upang magkasya sa dito. Ngunit ang mga ito ay makatulong hindi lamang sa iyo, muli, na may mga hanay ng problema at impormasyon digesting mo natutunan, ngunit Talagang, dumating oras pagsusulit, ang mga ito ay maging hindi mapaniniwalaan o kapani-paniwala kapaki-pakinabang. Kaya unang, isinaad ang panayam. Kung pupunta ka sa cs50.net/lectures at mag-scroll sa mga tukoy na linggo at araw, makikita mo na may mga tala para sa bawat magbigay ng panayam, na kung saan ay hindi lamang isang transcript, ngunit isang edit na bersyon ng ano ang saklaw sa lecture na may code mga snippet at iba pang mga kapaki-pakinabang na kakanin. Masidhing kong inirerekumendang ng pagpunta sa paglipas ng mga. At pagkatapos pati na rin, may source code makukuha mula sa bawat panayam. At muli, ang mga slide ay magkakaroon din maging magagamit online sa cs50.net/sections ngayong gabi. Kaya pangalawang ay ang mga shorts bawat linggo na mga paksa na takip, karaniwang 5-15 minuto ang haba. At yaong sana ay magbibigay sa iyo ng isang mahusay na panimulang aklat sa pagbasa sa iba't ibang mga paksa. Third - at ito ay bagong-bagong ito taon - ay study.cs50.net. Kung hindi ka pa naka-check out ito, ako lubos na inirerekomenda na gagawin mo ito. Makakuha sa iyo upang pumili ng isang paksa. Mayroon kaming dose-dosenang mga paksa sa doon. Kaya halimbawa, kinuha mo ang Mga Pag-andar. Nagbibigay ito sa iyo ng ilang mga slide at mga tala sa mga pag-andar. Iyon ang aktwal na ang mga slide na TFs ay hinihikayat na gamitin sa panahon ng aming mga presentasyon sa seksyon. Mayroong mga tip at trick para sa pagharap rin may mga pag-andar, at mayroong mga problema na kasanayan na tutulong sa nagtatrabaho ka sa mga pag-andar. Bigyan din kami sa iyo ng mga link sa mga maikling sa mga pag-andar at ang mga oras na pag-andar na makabuo sa panayam. Bagong ito Kaya study.cs50.net, tatak taon, ang isang hindi kapani-paniwala mapagkukunan. Susunod, mayroon akong tao, na kung saan ay manu-manong ang utos na maaari mong patakbuhin sa linya ng command. Kaya kung mayroon kang anumang mga katanungan tungkol sa isang utos, halimbawa, ribete, na namin Nakaranas huling linggo sa panahon ng seksyon at malamang iyong nakaharap sa itakda ang iyong problema kapag pagpunta sa pamamagitan ng buuin ang code, ngunit kung nagta-type ka ng tao ribete, makakakuha ka ng mga pahinang iyon ay nagsasabi sa iyo ang lahat ng tungkol sa ribete. Binibigyan ka Nag ano na aabutin, ang mga parameter na aabutin, pati na rin ang balik uri at isang maikling paglalarawan ng na function. Kaya tingnan ang ribete. Maaari itong maging isang maliit na labis sa mga salita at nakakalito, kaya kung minsan mahanap ko na lang sa Pag-Google kung ano ang nais kong malaman ay ang pinakamahusay na paraan upang mahanap ang kasagutan. Kaya pagsasanay sa Google. Kumuha ng magandang sa Google. Ito ay ang iyong magiging matalik na kaibigan. Pati na rin ang Google, kung hindi ka maaaring mahanap ito sa Google, cs50.net/discuss, ito ay ang forum ng talakayan. Malamang kung may tanong ka, isa ng iyong 700 + mga kapantay din itong na pinag-uusapan at maaaring nagtanong ito nasa talakayin mga forum at ito sinasagot. Kaya kung mayroon kang isang karaniwang tanong o may tanong ka na sa tingin mo siguro iba pang mga tao ay maaaring magkaroon ng, tingnan ang cs50.net/discuss. Sa wakas, ang huling dalawang, kung nais mong makipag-usap sa isang tunay na tao, opisina oras Lunes hanggang Biyernes. Mayroong oras online office din para sa mga mag-aaral extension. At huling ngunit tiyak na hindi bababa sa, sa akin, exclamation point. Ikaw ang lahat ng mayroon ang aking impormasyon sa pakikipag-ugnay. Kung kailangan mo ng anumang bagay, mangyaring hindi kailanman mag-atubiling makipag-ugnay sa akin. Laging mag-atubili na gawin ito. Napakaluwag ilan sa ikaw ay nagdagdag sa akin sa Gchat, nang sa gayon ay naging disappointing, ngunit sana ay na kailangan baguhin sa pagitan ng ito at mga susunod na seksyon. Ang anumang mga katanungan sa ngayon sa mga mapagkukunan? Mahusay. Sa wakas, isa pang plug para sa feedback, sayat.me/cs50. Maaari mong ibigay sa akin ang hindi kilalang feedback sa kung paano ako paggawa. Iyon ay talagang kapaki-pakinabang na noong nakaraang linggo. Nakakuha ako ng ilang mga komento mula sa iyo guys karapatan pagkatapos seksyon, plus mula sa iba pang mga mag-aaral na napanood na ito sa panahon ng linggo, at ito ay hindi mapaniniwalaan o kapani-paniwala kapaki-pakinabang. Ako ay pagpunta sa subukan at limitahan ang aking paggamit ng ang salitang "matamis," ngunit ipapakita ko sa aking sigasig at kaguluhan sa ibang mga paraan. Ngunit mayroong iba pang mga karagdagang pangngalan feedbacks, parehong mga plus at delta. Kaya mangyaring, bigyan ako mo guys feedback sa iyong mga hanay ng problema. Huwag mag-atubiling magbigay sa akin ng feedback sa aking pagtuturo. Ako dito para sa iyo guys. Mahusay. Iyon ay ang lahat ng mayroon ako para sa ang unang seksyon. Kahit sinong mayroon ba anumang mga tanong sa ngayon? At mayroon akong isang tala para sa ang control center. Mga mag-aaral ng Extension na messaged sa akin sinasabi na hindi sila nakakakuha ng anumang mga audio, ngunit iyon ay wala na sa aking kapangyarihan upang ayusin. Kaya sana, na hindi nakakaabala nalutas sa ilang sandali. Kung na pinapanood mo sa online, hi, ngunit hindi ka maaaring marinig sa akin. Kaya unang, kami ay pagpunta upang pumunta sa pamamagitan ng GDB. GDB, bilang hinted ako sa mas maaga, ay isang tool sa pag-debug magkano ang mas mahusay kaysa sa printf. Kaya upang makapagsimula sa GDB, mo guys, kung gusto mong buksan up ang iyong appliance at gawin ang mga file na in-email ako sa iyo mas maaga - ang file na ito ay magkakaroon din maging magagamit sa online sa isang bit - at magpatakbo ng GDB. / ang pangalan ng file. Una, siyempre, kailangan mong mag-compile maghain dahil GDB gumagana lamang sa mga maipapatupad na file. Ngunit kung gusto mo mang magsimulang GDB, ang unang bagay na ginawa mo, patakbuhin mo ang GDB. / Caesar. Kaya iyon ang pangalan ng programa kami pagpunta sa pumunta sa mga ito sa ngayon. Kaya pupuntahan ko magsulat gumawa Caesar, na ay magbibigay sa akin ng isang executable file dito-highlight sa berde. At pagkatapos ay ako pagpunta sa magpatakbo ng GDB. / Cesar. At doon ka pumunta. Ang makikita mo na mayroon kami ng ilang mga teksto na nagsasabi sa akin tungkol sa mga bersyon ng GDB, na nagbibigay sa akin ilang impormasyon warranty, at pagkatapos namin magkaroon ng GDP prompt, na kamukha uri ng tulad ng ating linya prompt na utos, ngunit nakikita mo ito ay bukas paren, GDB, malapit paren. Bago kami magpatuloy at i-debug ang file na ito na ipinadala ko sa iyo ang lahat, tingnan natin hayaan ang ilang mga kapaki-pakinabang na mga utos sa gayon kami ay may isang katuturan ng kung ano kami ay pagpunta upang masakop. Ang mga utos ay nakalista dito sa pagkakasunud-sunod na sa pangkalahatan ay ko bang gamitin ang mga ito. Kaya ko sisimulan ang aking programa sa pamamagitan ng pagpapatakbo GBD. / Pangalan ng programa, sa kasong ito, Caesar. At pagkatapos ay ang unang bagay na gagawin ko 99.9% ng oras ay nangangahulugan na ang uri ng break. Na nagtatakda ng pahinga punto sa pangunahing. Mahalaga, kung ano ang ginagawa mo doon ay ang programa ay pagpunta sa itigil sa pangunahing sa gayon maaari mong simulan ang pagsusuri ng mga ito linya sa pamamagitan ng linya, sa halip na sa pagtakbo ang lahat ang paraan sa pamamagitan ng. Maaari mong hatiin sa iba't ibang mga punto sa ang iyong code, ngunit pangunahing ay karaniwang isang magandang lugar upang magsimula. Ang susunod na command ba akong magpatakbo ay run. Nagsisimula na ang pagtakbo ng programa, at kung kailangan mong ipasok ang command line mga argument, patakbuhin ito sa command na. Patakbuhin sa mga argumento. Kaya dahil pupunta kami sa isang bersyon ng C, na ang mo guys programa Sinulat ni para pset dalawang - ang isang ito, siyempre, ay may ilang mga bug sa loob nito na sana ay gagamitin namin mahanap ang - kami ay pagpunta upang tumakbo sa run na may ilang mga utos argumento linya dahil Caesar, bilang alam mo guys sa bawat ang problema itakda ang spec, tumatagal ng ilang utos argumento linya. Ang susunod na ilang mga command, ang susunod na isa ay aktwal na tinatawag na susunod. Isa na dadalhin ka linya sa pamamagitan ng linya sa pamamagitan ng iyong programa. Kaya pagpindot n pagkatapos Enter dadalhin ka sa susunod na linya, e-execute ang nakaraang mga line. Tumatagal ng hindi lamang sa iyo Hakbang sa sa susunod na linya, ngunit ito dadalhin ka sa loob ng function. Kaya kung kayo ay nagsulat ng isang function na sa ang iyong code o kung nais mong tuklasin ang isang upang i, halimbawa, maaari mong pindutin s, at sa halip ng pagpunta sa susunod na linya ng ang file na kayo ay pagpunta sa pamamagitan ng karapatan ngayon, magkakaroon ka talaga lusukin ito function at makita ang code nito. Ipinapakita sa iyo ng Listahan, sa mga lubhang user friendly na format, mga 10 o kaya mga linya sa paligid kung saan ka kasalukuyang nasa iyong code sa gayon maaari mong talagang makita ang file sa halip ng pagkakaroon upang magpalit pabalik at balik sa pagitan ng iba't ibang mga view. I-print ay tulad ng printf, nagpapahiwatig ng bilang ng pangalan nito. Iyon ay nagpapakita sa iyo kung ano ang katumbas ng isang variable. Lokal Impormasyon ay talagang kapaki-pakinabang. Ito ay isang espesyal na bersyon ng naka-print na. Ipinapakita sa iyo ng mga lokal Impormasyon ng lahat ng mga lokal variable, prints out ang mga ito sa lahat para sa iyo na magagamit sa kasalukuyan. Kaya ako sa pangkalahatan, sa halip ng pagkakaroon i-print ang apat na variable na ako malaman ang tungkol sa kung ako sa isang para sa loop, para sa Halimbawa, isulat ko lang ang mga lokal na impormasyon, at sasabihin nito ipakita sa akin kung ano ang aking counter i katumbas, pati na rin ang array na ako nagtatrabaho sa Kapantay. Sa wakas, magpatuloy. Ang pag-type ng break tumitigil mo sa break na punto. Pwede kang maglakad sa pamamagitan ng linya sa pamamagitan ng linya sa susunod at hakbang. Magpatuloy nagpapatakbo ng mga programa sa iyong susunod na masira punto o hanggang sa pagkumpleto ng kung wala nang mga puntos break. Huwag paganahin ang nag-aalis ng break sa mga puntos kung ikaw nagpasya ang bakasyon sa pangunahing noon ay hindi naaangkop, na nais mong itakda ito sa ibang lugar. At sa wakas q, quit, hindi nakakaabala GDB. Kaya ang program na ito,. / Caesar, kami ay pagpunta upang tumingin sa pamamagitan ng ngayon at kami pupunta na gamitin GDB upang mahanap ang mga bug sa programang ito. Pinatatakbo ko ang program na ito nang mas maaga sa Suriin 50, at Nakakuha ako ng isa pagsimangot. Lahat ito umiral, ito pinagsama-sama, ito pumasa sa isang pulutong ng mga pagsubok, ngunit para sa sa ilang kadahilanan, hindi ito pumasa sa ikalimang pagsubok, pag-on BARFOO, ang lahat ng caps, sa E-D-U-ko-R-R, ang lahat ng mga pag-cap, gamit ang tatlong bilang isang susi. Nakatanggap ako malapit sa katangian. Nakatanggap ako off sa pamamagitan ng isang liham. Kaya mayroong ilang maliliit na pagkakamali in dito. Ako ay tumingin sa pamamagitan ng aking code. Hindi ko maisip ito. Sana, ka guys ay maaaring makatulong sa akin malaman kung ano ang bug na ito ay. Kaya iyon ang error Ikinalulungkot namin naghahanap para sa. Ng ilipat sa GDB Hayaan. Muli, patakbuhin ko ang GDB. / Caesar, kaya ngayon kami sa GDB. At kung ano ay ang unang bagay na dapat kong gawin? Lamang na naipasok ko GDB. Isang tao ninyo ako ng magandang command upang ipasok. AARAL: Hatiin pangunahing. Jason HIRSCHHORN: Hatiin pangunahing. Hindi kapani-paniwala. Ni-type na in Hayaan Ikaw guys Pwedeng manood hanggang dito o sundin kasama sa iyong mga computer. Hatiin pangunahing, at makikita mo ang isang break na punto ay naitakda sa - nagbibigay ito sa akin ang ilang kakaiba memory address, at nagbibigay din ito sa akin ang numero ng linya. Kung ako ay upang lingunin ang file na ito, Gusto ko mapagtanto na pangunahing nangyari sa 21 linya. Ano ang dapat kong patakbuhin ang susunod? Tumatakbo ba ang aking programa? Hindi. Kaya ano ang dapat kong patakbuhin ang susunod? AARAL: Magpatakbo. Jason HIRSCHHORN: Magpatakbo. Dapat ba akong magpatakbo lamang run, o dapat Nagdagdag ako ng ilang iba pang mga bagay sa? AARAL: Patakbuhin sa mga argumento. Jason HIRSCHHORN: Patakbuhin sa ang mga argumento command. At dahil ako debugging isang napaka-tukoy na kaso, ang dapat kong ipasok na argumento command line. Kaya ko makikita pinatatakbo ng tatlong, na kung saan ay, muli, ang output ang nakuha ko mula sa Suriin ang 50. Simula sa programa. Pumunta kami sa pamamagitan ng isang pares ng mga linya. Makikita mo na ngayong makita na kami sa 21 linya. Paano ko malalaman na kami sa 21 linya? Dahil kung tiningnan mo sa kaliwa ng aking mga terminal na window, doon ito sabi ni 21 linya. At na nagbibigay sa akin, talaga, ang code na sa 21 linya. Kaya misspoke ako nang mas maaga. Main ay hindi tunay na sa 21 linya. Main ay isang pares ng mga linya sa itaas 21. Ngunit sa 21 linya, na kung saan kami naka-breaking. Ang linya ng code ay hindi pa pinaandar. Iyan ay mahalaga. Ang linya ng nakikita mo ay hindi pa pinaandar. Iyan ang susunod na linya ng code ikaw ay tungkol sa upang isakatuparan. Kaya sa susunod na linya, bilang ka guys ay marahil pamilyar sa, ay ito kondisyon ng pagsuri upang makita kung mayroon akong ipinasok isang argumento command line. At isang upang i, ano ay ang pangalawang bahagi ng na ginagawa? Ano ang isang upang i? AARAL: Ang pagbabago ng ito sa isang integer. Jason HIRSCHHORN: Paumanhin? AARAL: Ito ay ang pagbabago ng argumento sa isang integer. Jason HIRSCHHORN: Kaya isang upang i nagbabago ARG v1 mula sa isang string sa isang integer. At pagkatapos ay kung ano ang ito check? AARAL: Kung mayroong pangalawang linya ng command argumento, bukod mula sa pagtakbo sa programa. Jason HIRSCHHORN: At ano ang ang ikalawang kalahati ng ito Check ng Boolean expression? Ito bahagi sa ibabaw dito, isang upang i? AARAL: Kung ito ay negatibo. Jason HIRSCHHORN: Paggawa ng mga sigurado kung ano? AARAL: Pagtiyak ito ay, sa katunayan, positibo. Jason HIRSCHHORN: Mismong. Ito ay pagsuri upang makita kung ito ay negatibo, at kung ito ay negatibo, ako magkaroon ng isang pakiramdam ng susunod na linya baka ay sa akin yelling sa user. Kaya pindutin ng pagtatapos upang isakatuparan ang line ipaalam. Hindi namin makita na linya na guys siguro inaasahan upang makita ang yelling sa ng gumagamit at pagkatapos ay bumabalik, dahil ang linyang ito ay hindi nagsagawa. Naipasok ko 3. Kaya ko, sa katunayan, ipasok ang dalawang utos mga argument ng linya, at 3 ay mas mataas sa zero. Kaya nakita namin na linya, ipinatupad namin, ngunit hindi namin ginawa hakbang sa loob ng kung kondisyon. Kaya ngayon, susunod, nakikita ko ako pagtatakda int key ay katumbas ng isang upang ARG i v1. Kaya na sa akin ang paglikha ng isang variable na key. Kaya kung i-print ko out key ngayon, dahil na nagbibigay-daan sa iyo upang makita ang halaga sa loob ng variable, key ay katumbas ng 47. Iyan ay kakaiba, ngunit siyempre, na dahil mayroon akong hindi pinaandar na linya pa. Kaya ngayon kung pindutin ko n, gawin na linya, at gawin sa pag-print sa key, key ay magiging katumbas 3, na kung saan ay kung ano ang inaasahan namin ito upang pumatas. Kaya muli, sa GDB, ang linya mo tingnan hindi mo pa pinaandar. Mayroon kang i-hit n o s o isang numero ng iba pang mga command upang aktwal na isakatuparan na linya. I-print key. Key ng sa 3. Sa ngayon, kaya magandang. String ay plain text. Isakatuparan na linya Hayaan. Nakakuha ako ng isang string mula sa gumagamit. Tingnan sa aking Check 50 Hayaan, ako ipasok BARFOO lahat ng caps, kaya na kung ano ang makikita kong ipasok. Kung ngayong mag-print ko plain text. Makikita mo ito ay katumbas ng isang string. Nagbibigay ito sa akin ang ilang iba pang mga kakaiba hexadecimal numero, ngunit ginagawa nito sa katotohanang sinasabi na ang aking string ay BARFOO. Kung Nais kong makita kung ano ang key equaled sa puntong ito, paano ko ma-check key? AARAL: I-print ang key. Jason HIRSCHHORN: I-print ang key, eksakto. At talagang, mayroong isang shortcut. Kung makakuha ka ng pagod ng pag-type ng naka-print, Maaari mo lamang i-type p. Kaya p key gumagana ang parehong eksaktong bagay. At muli, makita ko ito ay katumbas ng 3. Kung Nais kong malaman kung ano ang parehong key at BARFOO equaled sa parehong oras ngunit ako ay pagod ng pag-type ng bawat isa out isa-isa, ako ma-type lokal na impormasyon. Iyon ay nagbibigay sa akin ang key ay katumbas ng 3. Plain text ay katumbas ng BARFOO. Ay nagbibigay sa akin din ito ng dalawang mga bagay na kakaiba sa tuktok, ito variable i at variable n ito. Yaong ay talagang umiiral sa aking pangunahing programa. Hindi pa namin nakatagpo ang mga ito, ngunit bilang isang preview, mga umiiral sa aking para sa loop. Kaya ngayon, kasing-halaga ng mga ito ng ilang kakaiba mga numero dahil hindi sila naging pa nasimulan, ngunit umiiral pa rin sila sa memory, sa gayon ito ay naka-set lamang sa ilang mga halaga ng basura. Ngunit namin makita susi sa plain text doon. Kaya pupuntahan ko maisagawa ang linyang ito, 34 linya, ang para sa loop. Kami ay pagpunta sa tumalon papunta sa para sa loop sa pamamagitan ng pagpindot n. At kami ay sa loob ng para sa loop. Humihingi kami sa aming unang tseke. At muli, ang mga ito ay dapat na uri ng hitsura pamilyar sa iyo dahil ito ay isang Caesar programa na ay isinulat, ngunit muli, ay may ilang uri ng mga bug. At ngayon kung gagawin ko lokal na impormasyon, dahil ako sa loob na para sa loop, makikita mo ang na katumbas i zero, bilang inaasahan namin. Iyon ay kung ano set namin ito sa at nasimulan ito sa sa para sa loop. n ay katumbas ng 6. Iyon din saysay dahil itinakda namin ito sa strlen ng plain text. Kaya gusto kong gawin lokal impormasyon o i-print upang variable madalas upang tiyakin na lahat ng bagay ay palaging kung ano Inaasahan ko ito upang pumatas. Sa kasong ito, lahat ng bagay ay kung ano ang aking inaasahan ito upang pumatas. Kaya ni magsimulang umusad sa pamamagitan ipaalam ito para sa loop. Ang linya ako sa 36 linya, kung plain teksto i ay mas malaki sa isang at plain teksto i mas mababa sa o katumbas ng z. Alam ko ang aking problema ay hindi kasama ang aking unang sulat, ito ay sa ikalawang sulat. Kung titingnan namin pabalik sa Check 50, B ang papunta sa E fine. Ako paglalaan ng A at nag-iiwan ito bilang isang A, hindi ang pagbabago nito sa D. Kaya isang bagay ang mali sa ang ikalawang sulat. Kaya ako pupunta upang ilipat doon sa isang segundo. Ngunit kung ko nais upang suriin kung anong plain teksto equaled ako sa ang partikular na kaso, sa tingin ko dapat itong maging ano? Ano ang dapat plain text na kasing-halaga ko sa ito unang pag-ikot sa pamamagitan ng para sa loop? AARAL: Zero? Jason HIRSCHHORN: Plain text ng ko? Kaya dapat itong maging capital B. ko, siyempre, ay katumbas ng zero, ngunit plain text bracket zero closed bracket ay katumbas ng B dahil string, bilang nakita natin noong nakaraang linggo, ay array, kaya namin nakukuha ang unang character mula iyon. Kaya muli, kung na-print ko out plain text ng Ako, ko, sa katunayan, kumuha ng character B. At na kapong baka, tama? Hindi ko talagang magkaroon ng plain text I. Iyon ay hindi isa sa mga variable ba akong magtakda o nasimulan, ngunit maaari kang mag-print ang isang buong host ng mga bagay kung nais mong. Ngunit ng ilipat sa pamamagitan ipaalam. Kung plain text ko ay mas malaki sa A at plain text ko ay mas mababa sa o katumbas ng Z, na malinaw na ay totoo dahil mayroon kaming may malaking titik B. Pupunta ako upang mapatakbo ilang mga command na ito. Nakita namin na ang math noong nakaraang linggo, kaya kami ay dalhin ito para sa ipinagkaloob na ito gumagana karapatan ayon sa Suriin ang 50. Ang mga kulot tirante, ang unang isa Nagpakita na ako ay exiting ang kung kondisyon, nagpakita ang pangalawang isa na ako sa paglabas ang para sa loop. At kaya ngayon kapag pindutin ko Susunod, namin makikita Ikinalulungkot namin pabalik sa para sa loop muli. Kami ay pagpunta sa pamamagitan ng para sa muli loop. Ni aktwal lusukin ang pangalawang Hayaan pag-ulit ng para sa loop at uri info lokal. Kaya kami sa pangalawang pag-ulit sa aming para sa loop. Ay katumbas ng 1 ko, na inaasahan namin. N ay katumbas ng 6, na inaasahan namin. Key ay katumbas ng 3, na inaasahan namin. At plain text, makikita mo, ay katumbas ng EARFOO ngayon, hindi BARFOO ngayon dahil sa aming nakaraang iteration, ang B ay pinalitan sa isang kabisera E. Kaya kami tungkol sa upang makaharap ang problema, kaya ito ay kung saan kami ay pagpunta sa sumisid sa pag-debug. Ngunit ang sinuman ay may anumang mga katanungan tungkol sa kung ano ang iyong nagawa namin sa ngayon? Hindi kapani-paniwala. Kaya hindi namin tungkol sa upang maisagawa ito kung kondisyon, plain text bracket ko sarado bracket mas malaki kaysa sa A at plain text ko mas mababa sa o katumbas ng Z. Ngunit bago Pumunta ako sa na, dahil ito ay kung saan Alam ko ang aking error na ito ay, gusto kong ituro out plain text ng I. Kaya maglagay ng print out ipaalam. Ito ang kasing-halaga ng character na A, kaya na Mukhang sa ngayon, ang lahat ay mahusay at magandang. Kaya inaasahan ko line na ito per aking logic, Dapat na totoo sa linyang ito. Ito ay isang malaking titik. Ngunit kung pindutin ko n, kami mapagtanto na ito linya, sa katunayan, ay hindi nagsagawa. Ako jumped down sa iba kung. Bakit mo na mangyayari? AARAL: Dahil mayroon kang ang iyong mga kondisyon ng plain text ay mas malaki kaysa A, hindi katumbas ng o mas mataas kaysa. Jason HIRSCHHORN: Kaya nagkaroon ko ang aking plain text Ko ay mas malaki sa A, hindi mas malaki mababa sa o patas sa. Kaya malinaw, ang kabisera A ginawang hindi magpalitaw ito kung kondisyon, at ginawa namin hindi lusukin ito, at ginawa namin hindi gawin ang mga kinakailangang shift. Kaya na ito, talagang. Naisip ko ang aking bug. Kaya kong bumalik sa aking source file, baguhin ito, at i-update ito at patakbuhin ang Suriin 50 ulit. Ngunit masisiyahan kaming makita, para lamang sa sining ng pagtuturo ni alang-alang, kung panatilihing ako pagpunta. Ang iba kung hindi nagsasagawa ng alinman sa, ngunit ano sa halip ay katumbas ay ang command na na ay hindi nagbabago. Kaya ito ay hindi nagbago sa lahat, at kung ako i-print dito plain text, ipapakita namin makita ng pagpunta sa pamamagitan ng na para sa loop ay hindi, sa katunayan, baguhin na pangalawa ng character sa lahat. Ito ay pa rin ng isang kabisera A. Kaya muli, debugged namin ang aming error. Namin natanto na nagkaroon Nawawala ang ilan logic. At debugged namin ito maagang ng panahon bago talagang e-execute na linya, ngunit sana ay napansin mo nagkaroon kami lamang pindutin ang Susunod at tumalon sa ibang tao na kung, Ibig sabihin nito na iyon na kung kundisyon ay hindi totoo. Kami ay hindi, sa katunayan, kumuha ng ang resulta sa inaasahan namin. Kaya pagkatapos ay maaari kaming na-prompt, nagkaroon hindi namin naging kaya matalas, upang tumingin sa na kung kondisyon at suriin kung, sa katunayan, ang aming mga kondisyon ay dapat suriin upang totoo sa kasalukuyang konteksto. Iyon lang ang pag-debug para sa programang ito. Kahit sino ay may anumang mga katanungan ba? Ano command na maaari kong pindutin na umalis GDB? Q. At pagkatapos ay makikita prompt ko, huminto pa rin? Oo o hindi. Makikita pindutin ko oo, at makikita na isinara ko ang GDB. Kaya na noon ay isang mabilis panimulang aklat sa pagbasa sa GDB. Talaga, sa isang tunay na sitwasyon, Ginawa ko ito sa oras ng opisina. GDBed ko ito eksaktong programa sa oras ng opisina sa isang mag-aaral. At kung pumunta kami pabalik sa mga utos Nakita namin bago, ginamit namin break na main, una bagay ginawa namin. Ginamit namin run may mga argumento command line, ikalawang bagay ginawa namin. Ginamit namin sa tabi ng maraming upang ilipat amin sa pamamagitan ng mga linya. At muli, ang maikling bersyon ng susunod ay n. Iyan ay sa mga panaklong sa kulay abong sa slide. Hindi namin gamitin ang hakbang na ito, ngunit kami ay hindi kinakailangang kailangang para sa kasong ito. Ngunit maaari naming gamitin ito sa isang bit mamaya sa ngayon kung dine-debug namin, para sa kapag binary Halimbawa, binary paghahanap paghahanap ay tinatawag na sa isang hiwalay na pag-andar ngunit mayroong ang ilang mga error sa mga ito. Kami ay pagpunta sa nais na lusukin ang tawag sa binary paghahanap at talagang i-debug ito. Ilista hindi namin ginawa gamitin ang alinman dahil nagkaroon kami ng mahusay na pakiramdam ng aming code, ngunit kung ako ay nais na magkaroon ng ideya ng kung ano ang code ko noon ay sa paligid, kaya kong gamitin na lamang ang listahan. I-print namin ginamit, mga lokal info namin gagamitin. Magpatuloy hindi namin ginawa kailangang gamitin sa na ito kaso, ni ay kailangan naming gamitin huwag paganahin, ngunit ginawa namin ang paggamit quit. Muli, ang mga 10 command, pagsasanay sa kanila. Kung nauunawaan mo ang mga 10 command, dapat kang magtakda para sa pag-debug sa anumang maglalabas may GDB. Kaya hindi namin tungkol sa upang pumunta sa, muli, upang ang pinakabuod ng seksyon ngayon, pagpunta sa ibabaw mga pag-uuri at paghahanap algorithm. Bago namin gawin ito, muli, anumang mga katanungan, mga komento, mga alalahanin para sa GDB? Kaya Pupunta lahat ng tao upang gamitin ang GDB sa halip na printf? Kaya lahat ng tao, alang-alang sa habang-buhay ni, lahat ng tao ay nodding kanilang ulo pakanan ngayon, kaya ako makakakita ka sa oras ng opisina at ang lahat ng mga TFs ay nakikita at Makikita nila sabihin, ipakita ninyo sa akin kung paano gamitin GDB, at magagawa mong upang ipakita ang mga ito, i-right? Uri ng? Siguro sana. Cool. Kaya kami ay pagpunta sa ilipat sa pag-uuri at paghahanap. Makikita mo ang mayroon akong isang listahan na pinagsunod-sunod para sa atin, ngunit iyon ay hindi papunta sa upang maging palagi ang kaso. Kaya sa mga problema set pagtutukoy para sa itakda ang problemang tatlong, mayroon kang shorts na maaari mong panoorin, at ito talaga humihiling sa iyo upang mapanood ang mga shorts. Gayundin sa panayam noong nakaraang linggo, nagpunta kami sa ibabaw ng maraming mga algorithm, sa gayon ako ay hindi pagpunta upang patagalin sa klase ng pagpunta higit sa muli mga algorithm o guhit mga larawan para sa kung paano ang mga algorithm gumagana. Muli, ang impormasyon na iyon maaari mong muling sa panonood magbigay ng panayam, o na impormasyon ay nakunan outstandingly sa shorts para sa mga paghahanap na ito, lahat ng na kung saan ay available sa cs50.net. Kaya sa halip, kung ano kami ay pagpunta sa gawin ay isulat ang mga programang ito. Mayroon kaming isang katuturan, isang sakit sa modelo, kung paano gumagana ang mga iyon, at kung ano ang kaya namin pagpunta upang gawin ay ang code ang mga ito para sa real. Kami ay pagpunta sa i-mental modelo na, na larawan, kung nasain mo, papunta sa aktwal na code. At kung ikaw ay isang maliit na nalilito o maaso sa mental modelo, ako lahat-lahat Nauunawaan. Hindi kami talaga ng pagpunta sa tumalon sa code kagayat. Kaya habang ang pagsenyas na ito sa slide na ito ay humihingi ng mo sa code ng binary paghahanap, at talaga, isang umuulit na bersyon ng binary paghahanap, ang unang bagay na ako gusto talaga mo lang gawin ay sumulat ng ilang pseudocode. Kaya ikaw ay may sakit sa modelo na ito ng kung paano gumagana ang binary paghahanap. Ilabas isang sheet ng papel kung mayroon kang isa maluwag sa loob magagamit, o magbukas ng isang text editor, at Gusto ko lahat ng tao na magsulat. Dalhin apat na minuto upang isulat ang pseudocode para sa binary paghahanap. Muli, isipin ang tungkol sa sakit sa modelo na iyon. Kukunin ko dumating sa paligid kung mayroon kang mga katanungan at maaari naming gumuhit ng larawan out. Ngunit una, bago namin simulan ang programming, Gusto kong isulat ang pseudocode para sa binary paghahanap kaya kung kailan namin makisalamuha, mayroon kaming ilang mga direksyon tulad upang kung saan dapat kami magtungo. AARAL: Maari naming ipagpalagay ang hanay ng mga mga halaga makuha namin ay naka-pinagsunod-sunod? Jason HIRSCHHORN: Kaya para sa binary paghahanap upang gumana - mahusay na tanong - sa iyo kailangang kumuha sa isang pinagsunod-sunod array ng mga halaga. Kaya ipinapalagay ay ito ay gagana. Susubukan naming bumalik sa slide na ito. Makikita mo sa mga lilang ang pag-andar pagpapahayag ay bool binary_search int halaga, int value, int n. Ito ay dapat magmukhang pamilyar kung ikaw ay na lumalapit o nakuha ang iyong mga kamay marumi gamit ang hanay ng problema. Ngunit iyon lamang ang iyong mga pag-andar na pagpapahayag. Muli, hindi dapat kailangang mag-alala tungkol sa na magkano sa panahon na ito. Ano gusto ko talagang gawin ay tumagal apat na minuto upang pseudocode binary maghanap, at pagkatapos ay gagamitin namin pumunta sa ibabaw na bilang isang grupo. At ako ay dumating sa paligid. Kung mayroon kang mga katanungan, huwag mag- libreng upang taasan ang iyong kamay. Bakit hindi magdadala sa iyo ng dalawang minuto nang higit pa upang tapusin na ang pseudocode? Alam ko na ito ay maaaring mukhang katawa-tawa na kami ay gumagastos nang sa gayon karaming oras sa isang bagay na hindi talaga kahit sa C, ngunit lalo na para sa mga nang higit pa mapaghamong mga algorithm at problema sets na mayroon kami upang malaman kung, nagsisimula sa hindi nag-aalala pseudocode tungkol sa syntax, nag-aalala lamang tungkol sa ang logic, ay hindi mapaniniwalaan o kapani-paniwala kapaki-pakinabang. At na paraan, hindi ka naka-solve ng dalawang hindi mapaniniwalaan o kapani-paniwala na problema nang sabay-sabay. Lamang tumutuon ka sa logic, at pagkatapos ay ilipat mo sa syntax. OK. Ni magsimula ng pagpunta sa pamamagitan ng Hayaan ang pseudocode. Ko na nakasulat up dito, binary paghahanap pseudocode. Susubukan naming isulat ito sa sasakay magkasama. O kaya makakakita isulat ko ito at bibigyan mo sa akin ang mga senyas na kailangan ko. Kaya maaari kahit sino bigyan ang unang akin linya ng pseudocode mo Sinulat ni para sa binary paghahanap? Oo, Annie? AARAL: Habang ang haba ng listahan ay mas mataas sa zero. Jason HIRSCHHORN: Habang haba ng ilista mas mataas sa zero. At muli, makita namin ang ilang C-naghahanap syntactical bagay sa dito. Ngunit karamihan sa mga ito ay nasa wikang Ingles. Ba ang sinuman magkaroon ng anumang mga line nila ilagay bago ito sa kanilang palsipikado-code? AARAL: Kumuha ng isang array ng pinagsunod-sunod ng mga numero. Jason HIRSCHHORN: Isinulat ni Ikaw "makakuha ng isang array ng pinagsunod-sunod ng mga numero. "Ayun sa function na deklarasyon, magpapadala kami ay pagpasa isang array ng pinagsunod-sunod ng mga numero. AARAL: [hindi marinig]. Jason HIRSCHHORN: Kaya magkakaroon kami ng iyon. Ngunit oo, kung kami ay hindi mayroon na, kami kakailanganin upang pagbukud-bukurin ang aming hanay ng mga mga numero, dahil binary paghahanap Gumagana lamang sa pinagsunod-sunod array. Kaya habang haba ng listahan ay katumbas ng zero, ako pagpunta sa ilagay sa ilang mga kulot tirante upang gawin itong hitsura ng kaunti mas katulad C. Ngunit habang, tila upang i-map sa isang habang loop, kaya sa loob ito habang loop kung ano ang kailangan namin upang gawin para sa binary paghahanap? May ibang na hindi sa akin ibinigay na isang sagutin pa ngunit sino ay sumulat na ito? AARAL: Pumunta sa gitna ng listahan. Jason HIRSCHHORN: Tom. Pumunta sa gitna ng listahan. At ang tanong follow-up, kung ano ang gagawin namin sa sandaling kami ay sa gitna ng listahan? AARAL: Gagawin ng isang tseke kung na ang numero na iyong hinahanap. Jason HIRSCHHORN: Mahusay. Pumunta sa gitna ng listahan at suriin kung ang aming halaga ay doon - hindi kapani-paniwala. Kahit sinong mayroon ba ng ano pa man na noon ay iba kaysa ito? Iyan ay akmang-akma. Ang unang bagay na aming ginagawa sa binary paghahanap ay pumunta sa gitna ng listahan at suriin upang makita kung ang aming halaga ay doon. Kaya ipinapalagay ko kung ang aming halaga ay doon, anong gagawin namin? AARAL: bumalik kami ng zero [hindi marinig]. Jason HIRSCHHORN: Oo, kung ang aming halaga ay doon, natuklasan namin na ito. Kaya maaari naming sabihin sa ilang mga paraan, gayunpaman ito function ay tinukoy, sabihin namin ang user natuklasan namin na ito. Kung ito ay hindi doon, bagaman, na kung saan nakakalito ito ay nakakakuha. Kaya kung ito ay hindi doon, ibang tao na nag- ay nagtatrabaho sa binary paghahanap o ay isang ideya na ngayon, anong gagawin namin? AARAL: Tanong. Jason HIRSCHHORN: Oo? AARAL: Ay ang array na pinagsunod-sunod? Jason HIRSCHHORN: Oo, ipinapadala namin sa pag-aakala ang array ay naka-pinagsunod-sunod. AARAL: Kaya pagkatapos ay mayroon kang upang suriin kung ang halaga na iyong nakikita ay mas malaki sa ang halaga na nais mo, maaari mong ilipat ang sa gitna ng iba pang kalahati. Jason HIRSCHHORN: Kaya kung sa gitna ng ang listahan ay mas malaki kaysa sa kung ano kami ay hinahanap, pagkatapos ko namin kung ano? Ilipat namin saan? AARAL: Gusto mong ilipat sa ang kalahati ng listahan na may mga numero ng mas mababa kaysa sa na. Jason HIRSCHHORN: Kaya kami ay tumawag na sa kaliwa. Kaya kung gitna ay mas malaki, maaari naming maghanap ang natitira kalahati ng listahan. At pagkatapos ay sa pamamagitan ng paghahanap, kung ano ang ibig sabihin ko sa pamamagitan ng paghahanap? AARAL: [hindi marinig]. Jason HIRSCHHORN: pumunta kami sa gitna. Talaga namin ulitin ang bagay na ito. Pumunta namin pabalik sa pamamagitan ng aming habang loop. Bibigyan kita ng ang huli - pa man, kung, gitna ay mas mababa sa kung ano ang namin, ano ang gagawin namin dito? AARAL: Pumunta sa kanan. Jason HIRSCHHORN: Paghahanap sa kanan. Mukhang ito ay mabuti, ngunit mayroon ang kahit sino anumang bagay na maaari naming nawawala o anumang bagay na inilagay mo sa iyong palsipikado-code? Kaya ito ay kung ano ang mayroon kami sa ngayon. Habang ang haba ng listahan ay mas malaki sa zero, kami ay pagpunta sa pumunta sa gitna ng listahan at suriin kung ang aming halaga ay doon. Kung gitna ay mas malaki, kami ay pagpunta sa maghanap kaliwa, iba kung ang gitna ay mas kaunti, kami ay pagpunta upang maghanap sa kanan. Kaya ang lahat ng mayroon kaming ilang lubos na pagkikilala sa ang mga tuntunin na ginagamit namin sa computer science at ang mga tool na mayroon kami. Ngunit masisiyahan na napansin mo kami ay nagsasalita sa Ingles, ngunit natagpuan namin ang isang maraming mga bagay na tila upang i-map sa sa mga tool na mayroon kami sa aming coding tool kit. Kaya karapatan off ang bat, hindi kami pagpunta sa aktwal pa code. Ano ang nakikita namin dito sa Ingles na mga mapa on sa mga bagay na maaari naming magsulat sa C? AARAL: Habang. Jason HIRSCHHORN: Habang. Kaya dito mismo ito habang mga mapa sa sa kung ano? AARAL: Ang isang habang loop. Jason HIRSCHHORN: Ang isang habang loop? O marahil, higit pa sa pangkalahatan, isang loop. Gusto naming gawin ang isang bagay nang paulit-ulit. Kaya kami ay pagpunta sa code ng loop. At namin alam, dahil nagawa mo na kami ito ng ilang beses at hindi na namin magkaroon ng maraming mga halimbawa out doon, kung paano talaga magsulat ng ito index para sa isang loop. Kaya na ay dapat na medyo madali. Dapat nating magagawang upang makakuha ng na Sinimulan medyo mabilis. Ano pa ang nakikita namin in dito? Ano ang iba pang mga istraktura syntaxes, mga bagay na kami ay pamilyar sa sa C, ang ginagawa namin ay mayroon ng isang pakiramdam ng pagkakaroon ng Batay off sa mga salita na ginamit namin? Oo, Anna? [Hindi marinig] lamang kidding. Anna, sige. AARAL: Kung at iba pa. Jason HIRSCHHORN: Kung at iba pa - dito mismo. Kaya ano ang mga hitsura? AARAL: Ang isang kung iba statement. Jason HIRSCHHORN: Oo, kundisyon, tama? Kaya makikita marahil na kailangan namin upang sumulat ng ilang mga kundisyon. At muli, kahit na siguro ay nakalilito sa una, sa pangkalahatan namin ay mayroon na ngayong isang katuturan ng kung paano sumulat ng mga kundisyon at ang syntax para sa mga kundisyon. At kung hindi namin, tingnan lamang namin ang hanggang sa syntax para sa mga kondisyon, cut at i-paste ang na, dahil alam namin namin kailangan kundisyon dito. Anumang iba pang mga bagay na nakikita namin na mapa papunta sa mga bagay na maaari kailangan naming gawin sa C? Oo, Aleha? AARAL: maaaring ito halata, sa pamamagitan lamang ng pagsuri kung ang isang halaga ay katumbas ng isang bagay. Jason HIRSCHHORN: Kaya paano suriin namin at - upang pumunta sa gitna ng listahan at suriin kung ang aming halaga ay doon? Paano ang gagawin namin na sa C? Ano ang syntax para sa iyon? AARAL: Kapantay, katumbas. Jason HIRSCHHORN: Kapantay, katumbas. Kaya ang pagsusuring ito ay marahil pagpunta upang maging isang katumbas, ay katumbas ng. Kaya makikita natin alam kailangan namin na sa isang lugar. At talagang, lamang sa pagsusulat ng mga ito, nakikita namin ang mga iba pang mga bagay. Kami ay pagpunta sa may upang gumawa ng ilang operator paghahambing sa doon - hindi kapani-paniwala. Kaya talaga ito kamukha, sa pamamagitan ng at malaki, hindi pa namin nagsulat ng isang salita ng C code pa. Ngunit nakuha namin ang sakit sa modelo pababa sa pamamagitan ng mga aralin at mga shorts. Sinulat ni namin palsipikado-code bilang isang grupo. At mayroon, mayroon kaming 80% kung hindi 90% ng kung ano ang kailangan naming gawin. Ngayon, kailangan lang namin sa code ito, na muli, ay isang non-walang halaga problema sa paglutas. Ngunit hindi bababa sa kami ay natigil sa mga logic. Hindi bababa sa ngayon kapag pumunta kami sa oras ng opisina, Maaari kong sabihin, alam ko kung ano ang kailangan ko upang gawin, ngunit maaari kang ipaalala sa akin ng syntax? O kaya kahit na oras ng opisina ay matao, mo Kaya ba ng Google para sa syntax, sa halip kaysa ini natigil sa logic. At muli, sa halip na sinusubukan mong i-solve ang logic at ang syntax problema lahat nang sabay-sabay, ito ay madalas na mas mas mahusay na masira ang dalawang matapang na mga problema sa off dalawang higit na mapapamahalaan mga bago at gawin ang hindi tunay na code muna at pagkatapos ay code sa C. Kaya sabihin makita kung ano ang aking ginawa para sa hindi tunay na code maagang ng panahon. Habang ang haba ng listahan ay mas malaki sa zero, tingnan sa gitna ng listahan. Kung nahanap numero ibinalik totoo, iba kung mas mataas ang numero, paghahanap kaliwa. Iba Pa kung numero ng mas mababa, paghahanap kanan, bumalik hindi totoo. Kaya mukhang halos magkapareho kung hindi na halos katulad sa kung ano ang sinulat ni namin. Talaga, Tom, kung ano ang iyong unang sinabi, breaking sa gitna ng listahan at kung numero natagpuan sa dalawang mga pahayag ay ang tunay kong ginawa. Pinagsama ko ang mga ito doon. Dapat ko pa nakinig sa mo sa unang pagkakataon. Kaya na ay ang palsipikado-code na mayroon kami. Kung nais mong ngayon, paumanhin, pumunta i-back sa aming paunang problema. Ni code binary.c Hayaan. Kaya ipatupad ang isang umuulit na bersyon ng binary paghahanap gamit ang mga sumusunod function na deklarasyon. At hindi mo kailangang kopyahin ito pababa pa lamang. Talagang pupuntahan ko buksan up dito mismo binary.c. Kaya doon ay ang function na pagpapahayag sa gitna ng screen. At makikita mo kinuha ko ang mga hindi tunay na code mula sa aking mga gilid, ngunit halos magkapareho sa kung ano ang namin ay sumulat, at ilagay na sa para sa iyo. Kaya ngayon, sabihin tumagal ng limang minuto sa code na ito function. At muli, kung mayroon kang anumang mga katanungan, itaas ang iyong mga kamay, ipaalam sa akin, idedetalye ko dumating sa paligid. AARAL: [hindi marinig]. Jason HIRSCHHORN: Kaya kinuha ko ang mga binary Kahulugan ng paghahanap sa tuktok, sa 12 linya. Iyon ay kung ano Nakatanggap ako para sa aking mga slide. At pagkatapos ang lahat ng ito palsipikado-code ko lang kopyahin at ilagay sa slide, hindi tunay na code slide. Pa rin ako hindi pandinig [hindi marinig]. Kaya kung natapos mo na ang iyong pagpapatupad, gusto kong suriin ito. Nag-email ako sa iyo ang helpers.h file mas maaga sa class na ito. At ito ang magiging online na magagamit pati na rin para sa pag-download para sa mga taong nanonood sa pagkakataong ito seksyon maantala. At ako ginamit lamang ang generic na pamamahagi code mula pset3. Kaya kinuha ko find.C, gamitin ang aking helpers.h file sa halip na ang helpers.h file na ibinigay sa code ng pamamahagi. At nagkaroon kong gumawa ng isa sa iba pang mga pagbabago sa find.C sa halip na sa pagtawag nang simple lamang paghahanap, tumawag binary_search. Kaya kung nais mong subukan ang iyong code, alam na iyon ay kung paano ito gawin. Sa katunayan, kapag magpapadala kami ay tumatakbo ang code na ito sa ngayon, kamakailan lamang ako ng isang kopya ng aking direktoryo pset3, muli, swapped out ang Katulong file at pagkatapos ay ginawa na baguhin sa find.C na tumawag binary_search sa halip na lamang sa paghahanap. Jason HIRSCHHORN: Oo. Mayroon kang isang katanungan? AARAL: Hindi bale na. Jason HIRSCHHORN: Huwag mag-alala. Well, sabihin makapagsimula. Gagamitin namin ang code na ito bilang isang grupo. Isa iba pang mga tala. Muli, ito ay, maaari madaling swapped in para sa Problema Set Tatlong. Mayroon akong aking helpers.h file na kung saan, sa halip kaysa sa helpers.h kami ay ibinigay, declares binary paghahanap, bubble -uri-uriin, at uri pagpili. At sa find.c mapapansin mo sa linya, ano ang na, 68 linya, tinatawag naming binary maghanap sa halip na paghahanap. Kaya muli, ang code na magagamit online o ang code na ikaw ay paglikha ngayon ay madaling swapped in para sa set p 3 upang suriin ito. Ngunit una, code ng binary paghahanap ipaalam. Ang aming mga pag-andar na pagpapahayag, bumalik kami ng isang bool. Tumagal kami ng isang integer value na tinatawag. Isinasaalang-alang namin ang isang hanay ng mga integer na tinatawag na mga halaga, at lubos naming n maging ang laki ng array. Sa linya 10, dito mismo, mayroon akong matalim isama stdbool.h. Kahit sino Alam ba kung bakit iyon doon? Kaya kung ano ang na linya ng code? AARAL: Pinapayagan ka nitong gumamit ng isang uri bool return. Jason HIRSCHHORN: Mismong. AARAL: O ito ay isang library na nagbibigay-daan gumamit ng isang uri bool return. Jason HIRSCHHORN: Kaya ang matalim isama Binibigyan ako stdbool.h linya ilan mga kahulugan at mga deklarasyon para sa mga bagay na ako ay pinapayagan na gamitin sa ito library. Kaya bukod sa mga ito ay nagsasabi na mayroong ganitong uri na tinatawag na bool, at maaari itong maging totoo o hindi. Kaya na kung ano ang ginagawa na linya. At kung hindi ko kinailangang na linya, nais ko kumuha sa problema para sa pagsusulat ng mga ito salita dito mismo, bool, mula doon. Akmang-akma. Kaya kailangan ko na sa code na ito. OK. Kaya ito, muli, ay isang umuulit bersyon, hindi isang isa recursive. Kaya ipaalam sa amin magsimula. Magsimula tayo sa unang ito Hayaan linya ng palsipikado code. At sana, kami ay - o hindi sana. Kami ay pagpunta sa pumunta sa paligid ng kuwarto. Susubukan naming pumunta linya sa pamamagitan ng linya, at ako ay tulungan mong malaman kung ang linya na kailangan namin sa unang magsulat. Kaya habang haba ng listahan ay mas mataas sa zero. Magsimula tayo sa harap Hayaan. Ano linya ang dapat kong isulat dito, sa code? AARAL: Habang panaklong n ay mas malaki kaysa sa 0. Jason HIRSCHHORN: Habang n ay mahusay kaysa sa 0. Kaya n ay ang laki ng isang listahan, at kami ay pagsusuri kung - [INTERPOSING tinig] Jason HIRSCHHORN: - paumanhin? AARAL: Paano ko malalaman namin na n ay ang laki ng mga listahan? Jason HIRSCHHORN: Paumanhin. Ayun sa pagtutukoy pset, ang paghahanap at uri mga pag-andar na kailangan mo upang sumulat, n ay ang laki ng mga listahan. Nakalimutan ko ang upang ipaliwanag na dito. Ngunit oo. n ay ang laki ng ang listahan, sa kasong ito. Kaya habang n ay mas malaki kaysa sa 0. OK. Na maaaring mapatunayan na medyo may problemang bagaman, kung bagay pumunta sa. Dahil patuloy naming malaman ang laki ng mga listahan sa buong ito function, ngunit sinasabi simulan namin off may isang hanay ng mga 5 integer. At pumunta kami sa pamamagitan ng at hindi namin ngayon narrowed ito pababa sa isang array ng 2 integer. Aling 2 integer ay na? Ang laki ay 2 ngayon na gusto naming tumingin sa, ngunit kung saan 2 ay na? Ba na magkaroon ng kahulugan, na katanungan? OK. Kukunin ko hilingin itong muli. Kaya simulan-off kami na may ganitong array ng 5 integer, at n ay katumbas ng 5, tama? Susubukan naming patakbuhin sa pamamagitan dito. ipapakita namin marahil baguhin ang laki, karapatan, bilang mga bagay na pumunta sa. Alin ang kung ano ang sinasabi namin na gusto naming gawin. Hindi namin gusto upang maghanap ang buong bagay muli. Kaya nating palitan namin ito sa 2. Isinasaalang-alang namin ang kalahati ng mga listahan na kakaiba. Kaya't piliin ang 2 lamang. Kaya ngayon n ay katumbas ng 2. Humihingi ako ng paumanhin para sa mahihirap dry Burahin marker. Mag-right? At kami ay naghahanap sa listahan muli gamit ang isang listahan ng mga sukat 2. Well, ang aming array ay ng laki 5 pa rin. Sasabihin namin na gusto lamang naming maghanap 2 spot sa loob nito. Kaya kung aling 2 spot ay ang mga? Ba na magkaroon ng kahulugan? Sigurado sila sa kaliwa 2 spot? Sigurado sila karapatan 2 spot? Sigurado nila sa gitna ng 2 spot? Sinuway namin ang problema down, ngunit namin talagang hindi alam kung aling mga bahagi ng ang problema kaming naghahanap pa rin sa, lamang sa pamamagitan ng pagkakaroon ng mga 2 mga variable. Kaya kailangan namin ng kaunti ang nalalaman pagkatapos, habang n ay mas malaki kaysa sa 0. Kailangan naming malaman kung saan na n ay nasa aming mga aktwal na array. Kaya ang kahit sino ay may isang baguhin upang ang linyang ito? Karamihan sa mga linyang ito ay ganap na ganap tama. Mayroon bang isa pang karagdagan? Puwede ba kaming magpalit ng isang bagay out para sa n gumawa ng linyang ito ng kaunti mas mahusay? Mm-Hm? AARAL: Maaari mong simulan ang isang variable tulad ng haba sa n na makikita pagkatapos gamitin sa ibang pagkakataon sa pag-andar? Jason HIRSCHHORN: Kaya initialize isang variable na haba sa n, at ginagamit namin na sa ibang pagkakataon? Ngunit pagkatapos ay i-update lang namin haba at kami tumakbo pa rin sa problemang ito kung saan kami cut down na ang haba ng aming mga problema, ngunit hindi namin alam kung saan, talaga, na haba maps papunta. AARAL: Ay hindi na mangyayari mamaya kapag tapos ka na nagsasabi, maghanap kaliwa, maghanap tama? Ikaw ay pagpunta sa pumunta sa isang iba't ibang mga lugar ng iyong - Jason HIRSCHHORN: Kami ay pagpunta sa pumunta sa isang lugar, ngunit kung paano ang kilala namin na kung saan ay upang pumunta sa? Kung kami ay may array at ito lamang n, paano ko malalaman namin kung saan upang pumunta sa sa array. Sa likod, yes? AARAL: Mayroon ka bang, tulad ng, ang isang mas mababang tumalbog at isang pang-itaas nakatali variable o ang isang bagay tulad na? Jason HIRSCHHORN: OK. Kaya ito ay isa pang ideya. Kaysa sa pagpapanatiling lamang track ng laki, panatilihin namin ang track ng mas mababa at itaas na nakatali variable. Kaya paano kinakalkula namin ang laki mula sa isang mas mababang nakatali at itaas na may balat? [INTERPOSING tinig] Jason HIRSCHHORN: palabawasan. At din pagpapanatiling track ng mas mababang nakatali at itaas na nakatali sa ipaalam sa amin, ay namin ang paghahanap sa dalawang? Sigurado namin ang paghahanap sa dalawang sa paglipas dito? Sigurado namin ang paghahanap sa dalawang gitna? Marahil hindi ito ang dalawang gitnang, dahil ito, sa katunayan, ay binary paghahanap. Ngunit ngayon magagawa naming upang makuha ang laki, kundi pati na rin ang mga limitasyon ng array. Sa kakanyahan, kung mayroon kaming ang aming higanteng phone book, rip namin ito sa kalahati. Namin ngayon alam kung saan na mas maliit libro ng telepono ay. Ngunit kami ay hindi talagang sa nakagugulat sa aklat ng telepono sa kalahati. Kailangan pa rin naming malaman kung saan ang bagong hanggahan ng aming mga problema ay. Kahit sinong mayroon ba kayong mga katanungan tungkol iyon? Oo? AARAL: Gusto ito gumagana sa pamamagitan ng paglikha ng isang variable, i, na sa iyo pagkatapos lamang shift ang posisyon ng i kamag-anak sa kanyang kasalukuyang posisyon, at ang haba, n? Jason HIRSCHHORN: At kung ano ay i? AARAL: Tulad ng tulad ng isang uri ng pagiging i - Tulad ng nais mong i initialize upang maging gitna posisyon ng array. At pagkatapos ay, kung ang halaga sa posisyon na i in sa gitna ng array sa alamang mas kaunti kaysa sa halaga na kailangan mo, i ngayon nagiging ang haba ng array, plus ang halaga ng i hinati sa 2. Tulad ng, makita, shift mo i - Jason HIRSCHHORN: Mag-right. AARAL: - hanggang sa ang - Jason HIRSCHHORN: Kaya ako ay halos positive na gagana. Ngunit ang pagkatao punto, kailangan mo ng dalawang piraso ng impormasyon dito. Maaari mo itong gawin sa simula at dulo, o maaari mo itong gawin sa laki, at pagkatapos ay ilang marker. Ngunit mo kailangang dalawang piraso ng impormasyon dito. Hindi ka maaaring makakuha sa pamamagitan ng gamit ang isa lamang. Ba na ang may katuturan? Kaya kami ay pagpunta sa pumunta sa pamamagitan ng, at kami ay pagpunta sa gawin [hindi marinig] at lumikha ng ilang mga marker. Kaya what'd isulat mo sa iyong code? AARAL: int ko sinabi lang tumalbog isa ay katumbas ng 0. Jason HIRSCHHORN: Sabihin tumawag na int, simula. AARAL: OK. Jason HIRSCHHORN: Tinitiyak Iyon higit pang mga kahulugan para sa akin. At? AARAL: Sinabi ko, hulaan ko, int nagtatapos. Jason HIRSCHHORN: int nagtatapos. AARAL: hulaan ko, n minus 1, o ang isang bagay tulad na. Tulad ng, ang huling elemento. Jason HIRSCHHORN: Kaya mo na sinulat, int simula ay katumbas ng 0, tuldok-kuwit, at int Magtatapos ang katumbas n minus 1, tuldok-kuwit. Kaya't mahalagang, kung anong ginagawa namin dito, 0 ang unang posisyon. At bilang alam namin sa array, hindi sila pumunta hanggang sa n, pumunta sila hanggang sa n minus 1. Kaya mayroon kaming ilang mga hanggahan ng aming array. At ang mga paunang hangganan mangyari upang maging ang paunang hanggahan ng aming mga problema. OK. Kaya na Maganda iyan. Pagkatapos kung pumunta namin pabalik sa linyang ito, habang haba ng listahan ay mas malaki kaysa sa 0, ano, sa halip na n, dapat naming ilagay in dito? AARAL: Sumulat na nagtatapos minus simula. Jason HIRSCHHORN: Habang nagtatapos minus nagsisimula ay mas malaki kaysa sa 0? OK. At maaari naming, kung gusto naming gumawa na ng kaunti nicer, kung ano iba pa naming gawin? Kung gusto naming upang linisin ang code na ito up ng isang bit? Paano natin mapupuksa ang mga 0? Ito ay lamang ng isang katanungan ng estilo. Ito ay tama ngayon. AARAL: Pagtatapos ng hindi katumbas simula? Jason HIRSCHHORN: Maaari naming gawin kung ano? [INTERPOSING tinig] AARAL: Nagtatapos ay mas malaki? Jason HIRSCHHORN: Oo. Maaari lang namin gawin habang nagtatapos ay mas malaki sa simula. Mag-right. Nagdagdag kami na nagsisimula sa kabilang bahagi ng na, at Mayroon kaming mapupuksa ng 0. Kaya ito lang ang itsura ng Medyo mas malinis. OK. Kaya, habang haba ng listahan ay 0, isinulat namin na, habang nagtatapos ay mas malaki kaysa sa simula. Kami ay pagpunta sa ilagay sa aming mga kinakailangan kulot tirante, at pagkatapos ay ang unang bagay na gusto naming gawin ay tumingin sa mga ito sa isang maliit na listahan. Ikaw? Maaaring magbigay sa iyo sa akin ang - AARAL: Kung panaklong halaga square bracket - Jason HIRSCHHORN: Kung panaklong halaga square bracket. AARAL: Nagtatapos nang hinati sa 2. Jason HIRSCHHORN: Nagtatapos? AARAL: nakakakita ako ng isang problema sa iyong - Jason HIRSCHHORN: OK. Well, tingnan sa gitna. Paano ko malalaman namin kung ano ang gitna ay? Oo. Kaya ipaalam sa akin tanggalin ang code na iyon. Paano ko malalaman namin kung ano ang gitna ay? Sa anumang bagay, kapag mayroon kang ang simula at sa dulo, paano mo mahanap sa gitna? AARAL:-average mo. AARAL: idagdag mo ang mga ito sama-sama at pagkatapos - Jason HIRSCHHORN: Idagdag ang mga ito sama-sama at pagkatapos? AARAL: At-average mo. Hatiin ito sa pamamagitan ng 2. Jason HIRSCHHORN: Idagdag ang mga ito sama-sama at hatiin sa pamamagitan ng 2. Kaya int gitna katumbas? Tom, maaari mong ibigay ito sa akin? AARAL: Simula plus na nagtatapos - Jason HIRSCHHORN: Simula plus nagtatapos. AARAL: Lahat, bracket, na hinati sa 2. Jason HIRSCHHORN: Lahat, sa mga panaklong, hinati sa 2. Kaya na nagbibigay sa akin ang gitna ng anumang bagay, itama? AARAL: Kailangan mo ring tipunin ito. Jason HIRSCHHORN: Ano ang ginagawa mo ibig sabihin, kailangan ko upang tipunin ito? [INTERPOSING tinig] AARAL: Dahil kung Ito ay isang kakaiba numero, pagkatapos ito ay tulad ng - Jason HIRSCHHORN: Well, OK. Kaya ko ito paglilikom. Ngunit kung ito ay isang kakaiba numero, 5, maaari ko paglalaan 1 ang layo mula sa gitna. O kung ito ay isang kahit na numero, sa halip, na ang isang mas mahusay na kaso. Kung ito ay 4, mayroon lamang namin 4, maaari ba akong kumuha ang unang "gitna", quote, magpanipi o ang pangalawang "gitna" ng isa. Alinman gagana para sa isang binary paghahanap, kaya hindi ko talagang kailangan upang isalin ito. Subalit mayroong isa iba pang mga bagay ako kailangan upang tumingin sa linyang ito. Maaaring hindi namin ito pa mapagtanto, ngunit gagamitin namin bumalik dito. Dahil sa linyang ito talaga pa rin Kailangan ng isa sa iba pang mga bagay. Ngunit sa ngayon, na naisulat namin apat na linya ng code. Mayroon din kaming ang aming simula at pangwakas na mga marker. Mayroon kaming ang aming habang loop, na maps sa direkta sa aming mga pseudocode. Naghahanap kami sa gitna na maps direkta papunta sa aming pseudocode. Gusto ko sabihin na ito ang papunta sa gitna ng listahan, ito linya ng code. At pagkatapos, sa sandaling pumunta kami sa gitna ng ang listahan, ang susunod na bagay na kailangan namin upang gawin ay suriin kung ang aming halaga ay doon para sa ang pseudocode na sinulat namin ng mas maaga. Kaya paano ko tingnan namin kung ang aming halaga ay nasa gitna ng listahan? Ikaw. Bakit hindi gawin mo ito? AARAL: Kung ang aming halaga ay sa gitna ng ay katumbas sa kahit anong itinakda namin ang - Ibig kong sabihin pantay pantay sa - Jason HIRSCHHORN: Nag - OK. AARAL: Hindi ako sigurado kung ano ang variable na kaming naghahanap ng para sa bagaman, ay dahil - [INTERPOSING tinig] AARAL: [hindi marinig]. Jason HIRSCHHORN: Mismong. Per ang function ng deklarasyon, kaming naghahanap para sa isang halaga. Kaya kami ay naghahanap para sa isang halaga sa isang array ng mga halaga. Kaya ikaw ay akmang-akma sa iyo. Ikaw ay gagawin, kung halaga bukas paren bracket gitna sarado bracket ay katumbas ng ay katumbas ng halaga, at sa loob doon ano ang kailangan naming gawin? Kung ang aming halaga ng doon, kung ano kailangan naming gawin? [INTERPOSING tinig] AARAL: Bumalik sa zero. Jason HIRSCHHORN: Bumalik totoo. AARAL: Bumalik totoo. Jason HIRSCHHORN: Michael, ano ang linyang ito gawin? AARAL: [hindi marinig] ay tumakbo sa programa Siyempre nito, at iyon ay higit sa, at ikaw ay kung ano ang kailangan mong gawin? Jason HIRSCHHORN: Ang programa o kung ano? Sa kasong ito? AARAL: Ang pag-andar. Jason HIRSCHHORN: function na ang. At kaya, upang bumalik sa kahit anong tinatawag na ito at bigyan ito ang halaga, totoo. Akmang-akma. Main. Ano ang uri ng return ng pangunahing, Michael? AARAL: int, integer? Jason HIRSCHHORN: int, eksakto. Ang isang integer. Iyon ay isang katanungan lamang upang matiyak na ka guys ay naging sa tuktok ng ito. Ano ang karaniwang ibalik ito, kung lahat ng bagay ay mahusay na gumagana? AARAL: Zero. Jason HIRSCHHORN: Zero. Akmang-akma. AARAL: Kung ito lamang ay nagbabalik totoo, walang impormasyon na ibinigay tungkol sa kung ano ang - Oh, ito ay lamang na nagsasabi na iyon halaga ang nasa loob ng array. Jason HIRSCHHORN: Mismong. Ang program na ito ay hindi pagbibigay ng impormasyon ng kung saan eksakto ang halaga ay. Ang sinasabi lamang nito, oo, nakita namin ito, o hindi, hindi kami nakahanap ito. Kaya kung nahanap numero, nagbabalik ng tunay. Well, talagang ginawa namin lamang na talaga mabilis na may isang linya ng code. Kaya makikita ilipat ko na linya ng pseudocode. AARAL: Huwag kailangan namin upang baguhin ang array? Dapat itong mga halaga, hindi na halaga, tama? Jason HIRSCHHORN: Paumanhin. Salamat sa inyo. AARAL: Oo. Jason HIRSCHHORN: linyang ito Dapat na halaga. Akmang-akma. OK. Kaya nagbigay kami ay tumingin sa gitna listahan. Kung numero nahanap return totoo. Ang pagpapatuloy sa sa aming pseudocode, kung gitna ay mas malaki, ang natitira paghahanap. Kaya nagkaroon ako in dito, kung numero mas mataas, ang natitira paghahanap. Constantine, maaari mong ibigay sa akin ito linya ng code? AARAL: Kung halaga ng gitnang - Jason HIRSCHHORN: Kaya kung halaga - kung mga halaga bukas paren bracket gitna malapit bracket - AARAL: Ay mas maliit kaysa sa halaga? Jason HIRSCHHORN: Ay mas maliit. AARAL: Mas mababa sa halaga. Jason HIRSCHHORN: Halaga. Well, talaga, na nais mong suriin kung ang numero ng - Sorry. Ito ay isang maliit na nakalilito. Ngunit iba kung ang numero sa gitna ng listahan ang mas mataas. AARAL: Oh, OK. Jason HIRSCHHORN: ako makakakita baguhin iyon. Iba Pa kung gitna ay mas mataas, namin gusto upang maghanap kaliwa, OK? At kung ano ang gagawin sa loob namin ito kung kondisyon? AARAL: Maaari ba akong gumawa ng maliit na pagbabago sa ang kundisyon, baguhin ito sa ibang tao kung? Jason HIRSCHHORN: Iba Pa kung? OK. Kaya ay isakatuparan ang code na ito tungkol sa pareho. Ngunit ang magandang bagay tungkol sa paggamit ng kung, iba kung, iba kung o kung, iba kung, iba ay nangangahulugan na ang isa lamang sa mga ito ay pagpunta sa naka-check, hindi lahat ng tatlong ng mga ito, potensyal na. At na ginagawang mas kaunti nicer sa computer na tumatakbo ang iyong mga programa. Kaya [? Constantine,?] Ikinalulungkot namin sa loob linyang ito, iba kung halaga, bracket gitna malapit bracket ay mas malaki sa halaga. Ano ang kailangan naming gawin? Kailangan namin upang maghanap sa kaliwa. Paano ginagawa namin iyon? Pupunta ako upang mabigyan ka ng isang panimula. Mayroon kaming dalawang mga bagay na tinatawag na nagsisimula at nagtatapos. Kaya kung ano ang kailangang mangyari sa simula? Kung nais mong hanapin sa kaliwa ng listahan, makuha namin ang aming kasalukuyang simula. Ano ang kailangan naming gawin ito? AARAL: Itinakda namin ang simula sa gitna plus 1. Jason HIRSCHHORN: Kaya, kung hindi kami naghahanap sa kaliwa? AARAL: Paumanhin, gitnang minus - kaya ang Magtatapos ang magiging gitnang minus 1 at simula - Jason HIRSCHHORN: At kung ano ang mangyayari sa umpisa? AARAL: Ito ay nananatiling pareho. Jason HIRSCHHORN: Kaya ang kahulugan ang nanatiling pareho. Kung kami ay naghahanap sa kaliwa, kami ay gamit ang parehong simula - akmang-akma. At ang nagtatapos? Paumanhin, ano ang ginagawa ng nagtatapos katumbas muli? AARAL: Gitnang minus 1. Jason HIRSCHHORN: Gitnang minus 1. Ngayon, bakit minus 1, gitna hindi lang? AARAL: gitna ay wala na sa ang Picture na, dahil nagkaroon kami naka-check na ito ay out? Jason HIRSCHHORN: Iyon akmang-akma. Gitna ay wala na sa mga larawan. Namin na naka-check sa gitna. Kaya hindi kami gusto "sa gitna," quote magpanipi, upang patuloy na maging sa array na kaming naghahanap. Kaya ito ay hindi kapani-paniwala. Iba Pa kung halaga bracket gitna ay mas malaki kaysa sa halaga na nagtatapos Kapantay gitna minus 1. Jeff, ano ang tungkol sa huling linya? AARAL: Iba Pa. Halaga gitna ay mas mababa sa halaga? Jason HIRSCHHORN: idedetalye namin ka pagbibigay sa akin ng iba pa. Kaya kung hindi mo akong bigyan - AARAL: Kaya pagkatapos ay nagsisimula magiging gitnang plus 1. Jason HIRSCHHORN: Simula Kapantay gitna plus 1, muli, para sa parehong dahilan na Constantine Ibinigay sa amin ng mas maaga. At sa dulo, na hindi pa naibigay sa akin ng isang linya ng code pa? Bumalik false, Aleha, kung ano huwag isulat namin dito? AARAL: Bumalik false. Jason HIRSCHHORN: Bumalik false. At kailangan namin upang gawin iyon, dahil kung namin huwag mahanap ito, kailangan naming sabihin namin ay hindi mahanap ito. At sinabi namin kami ay pagpunta upang magbalik ng bool, kaya siguradong mayroon kaming upang bumalik isang bool sa isang lugar. Magpatakbo ng ang code na ito Kaya ipaalam. Talagang pupuntahan ko - kaya kami sa terminal. Susubukan naming i-clear ang aming window. Ni Gawing Ang lahat ng Hayaan. Natagpuan namin mayroong isang error. Mayroong isang error sa 15 linya, inaasahan tuldok-kuwit sa dulo ng deklarasyon. Kaya kung ano nakalimutan ko? AARAL: tuldok-kuwit. Jason HIRSCHHORN: tuldok-kuwit karapatan up dito. Sa tingin ko na code kay Pedro. Kaya Tom, [hindi marinig]. Kidding lang. Ni huwag Gawing Lahat muli Hayaan. AARAL: Ano direktoryo Dropbox dapat naming maging in para sa ito? Jason HIRSCHHORN: Kaya maaari mong panoorin para lamang sa mga ito bit. Ngunit muli, kung nais mong ilipat ito code sa inyong direktoryo pset3 upang subukan ito, na kung ano ang aking ginawa. Kung mapapansin mo dito - Paumanhin, ang mahusay na tanong. [? LS,?] Mayroon akong in dito ang find.c code mula sa distro code na ito linggong ito. Mayroon akong helpers.h. Mayroon akong Magsagawa ng file na ko talaga na-edit nang kaunti upang isama ang mga bagong mga file kami ay sumusulat. Lahat ng na code ay magagamit, hindi code ng pamamahagi, ngunit ang bagong Gumawa ng file, ang mga bagong helpers.h file habilin magiging available online para sa pag-download. Muli, kaya doon sa mga dagdag na mga code na mayroon kami. Kaya gawin ang lahat, bawat linyang ito, ginagawang mahanap, binary, pagpili ng bubble - Ginagawang lahat ng tatlong ng mga ito at compiles sa ito executable code find. Kaya sa pangkalahatan, hindi namin nais upang diretso sa check50. Gusto naming tumakbo ang ilang mga pagsubok sa aming sariling. Ngunit kaya lang maaari naming mapabilis ito ng kaunti, check50 2013 pset3.find ay pumasa sa helpers.c-- aking masama. Wala akong na ngayon. Kaya kami ay talagang pagpunta sa patakbuhin ang code para sa real. Usage.find /, alam mo kung ano ang ibig sabihin nito ay? AARAL: Kailangan mo ng pangalawang command line dito. Jason HIRSCHHORN: Kailangan ko isang pangalawang linya ng command. At alinsunod sa mga pagtutukoy, Kailangan ko upang ipasok ang kung ano ang aming hinahanap. Kaya tumingin para sa 42 ipaalam. Susubukan naming panatilihin ito sa pinagsunod-sunod, dahil kami hindi pa nagsulat ng isang function ng uri - 42, 43, 44. At Control D hindi makatagpo ng karayom ​​sa mandala ng dayami. Iyan ay masama. Ito ay talagang doon. Subukan ang ibang bagay Hayaan. Siguro ito ay dahil ko bang ilagay ito sa simula. Ni gawin 41, 42, 43 Hayaan. May pumunta namin. Napag-alaman na ito. Maglagay ng ito sa dulo ngayon, lang Hayaan upang maaari naming maging maingat - 40, 41, 42. Hindi mo nakita ang karayom. Kaya ko nabanggit ito nang mas maaga. Sa kasamaang palad, alam ko na ito ay mangyayari. Ngunit para sa mga layuning pang-pedagohiko, ito ay handa na upang galugarin ito. Hindi ito gumagana. Para sa ilang mga dahilan, hindi ito maaaring mahanap ito. Alam namin kung ano ang sa doon, ngunit kami ay hindi sa paghahanap ng mga ito. Kaya ang isang bagay na maaari kaming gawin ay pumunta sa pamamagitan ng GDB upang hanapin ito, ngunit ang kahit sino, nang walang pagpunta sa pamamagitan ng GDB, magkaroon ng isang kahulugan ng kung saan screwed namin up? [? Madu? ?] AARAL: Sa tingin ko ito ay maaaring kapag nagtatapos ay katumbas sa simula, at ito ay lamang ng isang listahan ng isa-element. Pagkatapos ay binabalewala lamang ito sa halip ito ng tunay na pag-check nito. Jason HIRSCHHORN: Iyon akmang-akma. Kapag nagtatapos ay katumbas ng simula, ang ginagawa namin mayroon pa ring isang elemento sa aming listahan? AARAL: Oo. Jason HIRSCHHORN: Oo, sa katunayan, namin magkaroon ng isa at sangkap lamang ng isa. At iyon ay pinaka-malamang na mangyari kapag, alinsunod sa mga code sinuri namin, hindi namin sa harap ng mandala ng dayami o sa sa dulo ng mandala ng dayami. Iyon ay kung saan simula at Magtatapos ay pagpunta sa pantay na isa, na may mga binary paghahanap. Kaya sa dalawang mga kaso ng mga hindi ito gumana, dahil nagtatapos noon ay katumbas ng simula. Ngunit kung nagtatapos ay katumbas sa simula, ay isakatuparan ito habang loop? Ito ay hindi. At maaari kaming Sinuri na muli sa pamamagitan ng GDB. Kaya kung paano maaari naming ayusin ang code na ito, dahil kapag habang nagtatapos ay katumbas ng simula, nais din namin ito habang loop upang tumakbo. Kaya kung ano fix maaari naming gawin sa line 18? AARAL: [hindi marinig] ay mas malaki mababa sa o patas sa. Jason HIRSCHHORN: Eksaktong karapatan. Habang nagtatapos ay mas malaki sa o patas sa simula. Kaya ngayon, tiyaking upang makakuha ng na namin sulok kaso sa dulo. At ni makita ipaalam. Magpatakbo ng ito nang isa pang beses Hayaan. Ni gawin ang lahat ng Hayaan. Muli, magkakaroon ka upang lamang sundin kasama dito. Maghanap ng 41 oras na ito. Panatilihin lamang ito pare-pareho. Maghanap ng mga 42. Ilagay ni ito sa simula Hayaan - 42, 43, 44. Natagpuan namin ito. Kaya na noon ay sa katunayan ang pagbabago namin na kailangan upang gumawa. Iyon ay isang pulutong ng coding namin May ginawang lamang, binary paghahanap. Kahit sinong mayroon ba kayong mga katanungan bago Ilipat ko sa sa mga linya namin ay sumulat sa binary paghahanap o sa kung paano namin may korte kung ano maisip namin ginawa out? Bago ilipat namin sa, gusto ko rin upang ituro out na sa pamamagitan ng at malalaking, nama-map namin ang aming hindi tunay na code ng isa upang isa sa aming mga code. Ay namin mayroon na nakakalito bagay para malaman kung may nagsisimula at nagtatapos. Ngunit hindi ka si may korte na out, mo sana ay nakasulat halos ang magkamukha code, i-save para sa ang dalawang nangungunang mga linya. At pagkatapos sana ay natanto mo kapag na ginawa mo ito sa mga pagsusuri at mga kaso na kailangan mo ng ibang bagay. Kaya kahit na pinili mo ay sumunod sa aming linya palsipikado-code sa linya, makikita mo na nai nakuha lahat maliban sa dalawang linya ng code na iyong kailangan upang magsulat. At gusto ko ay payag kang Taya na kayo guys sana ay lahat may korte na out medyo mabilis, na iyong kailangan upang ilagay isang uri ng marker sa doon upang malaman kung saan ikaw ay. Muli iyon, ay ang kapangyarihan ng paggawa hindi tunay na code maagang ng panahon. Kaya namin unang gawin ang logic, at pagkatapos ay maaari naming mag-alala tungkol sa syntax. Ay namin nai-lito tungkol sa logic habang sinusubukang isulat ang code na ito sa C, Gusto namin nakuha ang lahat ng messed up. At pagkatapos ay nais na nagtatanong namin tanong tungkol sa logic at syntax at meshing ang lahat ng ito nang sama-sama. At gusto namin nakuha nawalang sa kung ano ang maaaring mabilis na naging isang Napakahirap ng problema. Kaya sabihin ilipat sa ngayon sa uri pagpili. Mayroon kaming 20 minuto ang natitira. Kaya Mayroon akong isang pakiramdam hindi namin magagawang upang makakuha ng sa pamamagitan ng lahat ng uri seleksyon at bubble sort. Ngunit ipaalam sa amin ng hindi bababa sa pagtatangka upang tapusin ang uri pagpili. Kaya ipatupad ang seleksyon-uri gamit ang sumusunod na pag-andar na pagpapahayag. Muli, ito ay nakuha mula sa set ng detalye ng problema. Int mga halaga ay bracket, ay isang array ng integer. At int.n ay ang laki ng na array. -Uri-uriin ang Pinili ay pagpunta upang ayusin ito ng array. Kaya alinsunod sa aming modelo ng pagpili ng kaisipan -uri-uriin, hilahin namin ang - una, pumunta kami sa listahan ang unang oras, hanapin ang pinakamaliit na numero, ilagay ito sa simula, hanapin ang pangalawang pinakamaliliit na numero, ilagay ito sa ang pangalawang posisyon kung gusto naming -uri-uriin sa pataas na pagkakasunod-sunod. Hindi ako ng pagpilit mong magsulat hindi tunay na code sa ngayon. Ngunit bago namin gawin ang code bilang isang klase sa limang minuto, kami ay pagpunta sa magsulat hindi tunay na code sa gayon mayroon kaming ilang mga kahulugan ng kung saan kami ay pagpunta. Kaya subukan na isulat hindi tunay na code sa inyong sarili. At pagkatapos ay subukan na i-na hindi tunay na code sa code. Gagawin namin na bilang isang grupo sa loob ng limang minuto. At syempre, ipaalam sa akin kung mayroon kang anumang mga katanungan. AARAL: Iyon ito? Jason HIRSCHHORN: Tingnan kung gaano kalayo sa iyo maaaring makipag-dalawang higit pang mga minuto. Nauunawaan kong hindi mo magagawang upang matapos. Ngunit magpapatuloy kami sa paglipas ng ito bilang isang grupo. Lahat ka sa coding kaya [hindi marinig], kaya ako ay paumanhin i-pause kung ano ang iyong ginagawa. Ngunit ng pumunta sa pamamagitan ng ito bilang isang pangkat ipaalam. At muli, binary paghahanap, mo ang lahat ng ibigay sa akin ng isa kung hindi higit pang mga linya ng code. Salamat sa iyo para sa na. Kami ay pagpunta sa gawin ang parehong bagay dito, code nang magkasama bilang isang grupo. Kaya uri seleksyon - ni sumulat ipaalam ilang mabilis na palsipikado-code. Bawat sakit sa modelo, maaari isang tao bigyan ako ang unang linya ng palsipikado-code, mangyaring? Ano ang gusto kong gawin? AARAL: Habang ang listahan ay wala na sa order. Jason HIRSCHHORN: OK, habang ang listahan ay wala sa pagkakasunod-sunod. At kung ano ang ibig sabihin sa iyo "out ng order?" AARAL: Habang [hindi marinig] ay hindi pa nakaayos. Jason HIRSCHHORN: Habang ang listahan Wala na sa pagkakasunud-sunod, ano ang gagawin namin gawin? Bigyan mo ako ng pangalawang linya, mangyaring, Marcus. AARAL: Kaya mahanap ang susunod na pinakamaliliit na numero. Na ito ay naka-indent. Jason HIRSCHHORN: Kaya mahanap ang susunod pinakamaliliit na numero. At pagkatapos ay ibang tao? Sa sandaling matagpuan namin ang susunod pinakamaliliit numero, anong gagawin namin? Pupunta ako sa sinasabi mahanap sa pinakamaliliit na numero. Iyon ay kung ano ang gusto naming gawin. Kaya mahanap ang pinakamaliit na numero. Pagkatapos, anong gagawin namin? AARAL: [hindi marinig] sa simula. Jason HIRSCHHORN: Paumanhin? AARAL: Ilagay ito sa simula ng listahan. Jason HIRSCHHORN: Kaya ilagay ito sa sa simula ng listahan. At kung ano ang gagawin namin sa mga bagay na noon ay sa simula ng listahan, tama? Kami ay patungan ang isang bagay. Kaya kung saan ko ilalagay namin iyon? Oo, Anna? AARAL: Saan na ang pinakamaliit na number ay? Jason HIRSHHORN: Kaya ilagay ang simula ng mga listahan kung saan ang pinakamaliliit na numero ay. Kaya habang ang listahan ay wala sa pagkakasunod-sunod, hanapin sa pinakamaliliit na numero, ilagay ito sa sa simula ng listahan, ilagay ang simula ng listahan kung saan ang pinakamaliliit na numero ay. Marcus, maaari mong rephrase ang linyang ito habang ang listahan ay wala na sa order? AARAL: Habang ang mga numero Hindi pa nai-pinagsunod-sunod? Jason HIRSHHORN: OK, kaya upang malaman na ang mga numero ay hindi naging pinagsunod-sunod, ano ang kailangan namin upang gawin? Magkano ang kailangan naming i- pumunta sa pamamagitan ng listahan na ito? AARAL: Kaya hulaan ko ang isang para sa loop, o habang, habang ang mga numero ng check Mababa kaysa sa haba ng listahan? Jason HIRSHHORN: OK, na maganda. Sa tingin ko misphrased ko aking tanong na hindi maganda. Lamang ako ay sinusubukan upang makakuha ng sa kami ay pagpunta sa may upang pumunta sa pamamagitan ng buong listahan. Kaya habang ang listahan ay wala sa pagkakasunod-sunod, para sa akin, mahirap i-map sa. Ngunit isa lamang, na kung paano Sa tingin ko ang tungkol dito. Pumunta sa pamamagitan ng buong listahan, hanapin ang pinakamaliliit na numero, ilagay ito sa nagsisimula - talaga, handa kanan mo. Maglagay ng parehong mga ito Hayaan. Kaya habang ang listahan ay wala na sa order, namin kailangan upang pumunta sa pamamagitan ng buong listahan isang beses, hanapin ang pinakamaliit na numero, lugar ito sa simula ng listahan, ilagay sa simula ng listahan kung saan ang pinakamaliliit na numero ay, at pagkatapos ay kung ang listahan ay sira pa rin, hindi namin Nakakuha upang pumunta sa pamamagitan na ito proseso muli, tama? Iyon ang dahilan kung bakit uriin seleksyon, Big-O runtime ng uri seleksyon, kahit na sino? AARAL: n nakalapat. Jason HIRSHHORN: n nakalapat. Dahil tulad lamang natanto Marcus at ako dito, kami ay pagpunta sa may upang pumunta sa pamamagitan ng listahan listahan bilang ng beses. Kaya pagpunta sa pamamagitan ng isang bagay ng haba n n dami ng beses ay sa katunayan n nakalapat. Kaya ito ay ang aming pseudocode. Mukhang ito napakabuti. Kahit sinong mayroon ba kayong mga katanungan tungkol sa pseudocode? Dahil talagang uri seleksyon dapat marahil ay 12:59, code mula sa pseudocode. Kaya ang anumang mga katanungan tungkol sa logic ng pseudocode? Mangyaring hilingin ito ngayon. -Uri-uriin ang Pinili - habang ang listahan ay out ng order, kami ay pagpunta sa pumunta sa pamamagitan nito at hanapin ang pinakamaliit sa bawat oras at ilagay ito sa harap. Kaya habang ang listahan ay wala sa pagkakasunod-sunod, maaari isang tao ninyo akong bigyan na linya ng code na nag- Hindi kayo binigyan ako ng isang linya ng code pa, mangyaring? Ito tunog tulad ng isang ano? AARAL: Iyan ay isang para sa loop. Jason HIRSHHORN: Ito tunog nais ang isang para sa loop. OK, maaari mong ibigay sa akin ang para sa loop? Para sa - AARAL: i Kapantay 0. Jason HIRSHHORN: i o - ano ay ang mga nawawalang namin? Ano pumupunta dito mismo? AARAL: int. Jason HIRSHHORN: Mismong. (Int i = 0; - AARAL: i