[Powered by Google Translate] [Seksyon 3] [Mas kaunti kumportableng]
>> [Nate Hardison] [Harvard University]
>> [Ito ay CS50.] [CS50.TV]
>> Lahat ng karapatan, sabihin makapagsimula.
Maligayang pagdating sa Linggo 4 ng CS50.
Kung ikaw guys buksan up ng isang web browser at buksan up pset 3,
Mang-uayabit may CS50, kami ay pagpunta upang simulan ang pagpunta
sa pamamagitan ng seksyon ng mga katanungan doon.
Tulad lamang noong nakaraang linggo, gagawa kami sa CS50 puwang,
kung makikita mo ring hilahin na up pati na rin,
at kung pumunta ka magpatuloy at bisitahin ang link na ito na Mayroon akong dito sa tuktok.
Ito ay oras na upang makapagsimula.
Mayroon namin ang aming maliit na programa hi dito. Walang mabaliw.
Isa ng ang unang bagay na gusto kong gawin sa iyo guys ngayon ay pumunta sa paglipas ng ilang mga solusyon
Problema Set 1, uri ng mga solusyon sa halimbawa,
lamang sa gayon ay maaari kang makakuha ng isang pakiramdam para sa kung ano ang mga uri ng kawani ng code pagsusulat,
kung ano ang mga uri ng code sa iba pang mga mag-aaral ay sumusulat,
at mayroon kang tingnan ito dahil alam ko na ito ay kakaiba
kapag isinumite mo ang isang solusyon sa isang hanay ng problema at makakuha ng mga komento
sa iyong sariling bersyon, ngunit kung minsan ito ay kapaki-pakinabang upang makita kung paano ginawa ito ng ibang tao,
lalo na mga na magaling hinahanap.
Para sa nakararaming bahagi, talagang ako ay impressed na may mga solusyon na iyong guys gumawa.
Hindi pa ako makapagsimula ng pagtingin sa iyong mga Problema Itakda 2s, ngunit kung sila ay anumang bagay tulad ng sa unang,
ito ay nangangahulugan na ang walang anuman kundi mabuting bagay.
>> Kung tumingin ka sa aking mga pagbabago, sabihin simulan ang lahat ng mga paraan sa Rebisyon 1,
at kami ay pagpunta sa tumagal ng isang mabilis na pagtingin sa isang solusyon ng Mario.
Kung hilahin mo up na ito, ang mga programang ito na kami ay pagpunta sa ipakita tama.
May mga hindi kawastuhan ng mga isyu na may mga problemang ito, ngunit sa halip,
gusto naming makipag-usap ng kaunti tungkol sa iba't ibang mga isyu ng disenyo
na ginagamit dito.
Isa ng mga bagay na kawili-wili tungkol sa solusyon
ay na ginamit ang bagong bumuo tinatawag na pound tukuyin,
minsan din-refer ng hash ng tukuyin.
Hayaan akong mag-zoom in dito dito.
A # tukuyin ay nagbibigay-daan sa iyo upang bigyan ang mga pangalan sa mga numerong ito sa iyong programa.
Sa kasong ito, ang maximum na taas ng isang pyramid sa Mario
ay 23 at sa halip na paglalagay ng 23 sa aking code-
nais naming sumangguni sa bilang mahirap coding 23 -
sa halip, ito ay nagbibigay sa ang pangalan MAX_HEIGHT sa numerong iyon,
kaya na down na dito sa aking do-habang loop
maaari mong aktwal na sumangguni sa MAX_HEIGHT
sa halip ng paglalagay ng bilang 23.
[Mag-aaral] Ano ang bentahe ng paggawa na?
Iyon ay isang mahusay na tanong.
Isa ay sa pagiging madaling mabasa.
Isang bentahe ng gamit ang # tukuyin ang pagiging madaling mabasa.
Kapag ako binabasa ang code na ito, maaari ba akong makita kung ano ang nangyayari sa.
>> Ang maaari kong makita sa ang kundisyong ito dito na sinusubukan namin
para sa taas pagiging <0, na maaaring rin namin natukoy
sa isang minimum na taas o taas ng min.
Ang iba pang bentahe ko pagkatapos basahin ang iba ng linya upang makita
na rin namin check upang matiyak na ang taas ay hindi mas malaki kaysa sa taas ng max,
dahil kami ay pagpunta upang magpatuloy habang taas ay mas mataas kaysa sa taas ng max.
Ang iba pang bentahe kung ako mag-zoom out ng kaunti dito-
kung nagpatakbo ako sa programang ito at nagpatakbo ako ng, sabihin nating, may 23 ngayon,
ito ay i-print ang lahat ng 23 mga hilera tulad na.
Ngunit sasabihin Nais kong baguhin ang max na taas,
at ngayon ay nais ko upang limitahan ang maximum na taas ng pyramids
lamang sabihin-tao, na funky.
# Include , tukuyin # MAX_HEIGHT,
at sabihin nating gusto naming i-set ito katumbas sa 10.
Ngayon sa puntong ito, ang lahat ng Mayroon akong gawin ay baguhin ito sa isang lokasyon.
Maaari kong mag-recompile ang code, at ngayon kung ako subukan at i-type sa 12,
ito ay prompt sa akin muli.
Sa kasong ito, lamang namin ginagamit MAX_HEIGHT sabay-sabay.
Ito ay hindi na malaki ng isang abala upang pumunta sa
at baguhin ang mga ito sa loop habang kung kailangan mo.
Ngunit sa mga programa na kung saan ka na tumutukoy sa ang parehong bilang ng magic
nang paulit-ulit, ito # tukuyin ang mekanismo ay talagang madaling gamiting
dahil mo lamang baguhin ang mga ito isang beses sa tuktok ng file na ito ay karaniwang kung saan mo ilagay ang mga ito-
at pagbabago percolates sa pamamagitan ng iba pang mga bahagi ng file.
>> Iba pang mga bagay Nais kong tandaan sa pagtatalaga na ito na naisip ko na mukhang talagang magaling,
ay isa sa pagpapangalan ng mga variable.
Nakikita dito na kami nakakuha ng integer variable na tinatawag na hilera at tinatawag taas.
Puwang, hashes, tumutulong sa mga code ng kaunti pa nababasa,
ginagawang ito ng kaunti pa naiintindihan kung ano ang aktwal na pagpunta sa.
Ito ay sa kaibahan sa paggamit ng, sabihin nating, random na titik
o gobbledygook kabuuan.
Ang isang pangwakas na bagay na makikita ko ituro ang para sa loop,
madalas mga iterator variable, mga counter na gamitin mo sa iyong para sa loop,
standard at maginoo upang simulan ang mga ito sa alinman sa i at pagkatapos j at pagkatapos k
at pagpunta sa mula doon kung kailangan mo ng karagdagang variable,
at ito lamang ang convention.
Mayroong maraming mga convention.
Depende sa programming language na ginagamit mo.
Ngunit sa C, namin karaniwang magsimula sa i.
Hindi ito magkaroon ng kahulugan upang gamitin, sabihin nating, o b
depende sa sitwasyon.
Iyon ay para sa.
Kung ikaw ngayon makuha ang Rebisyon 2, makikita mo ang isa pang Mario,
at ang isang ito ay katulad sa iba pang isa na lamang namin nakita,
ngunit ang isang bagay na uri ng mga cool.
Kung titingnan namin sa seksyong ito dito mismo sa loob ng inner loop,
ginagamit nila ang ilang mga nakatutuwang naghahanap syntax dito sa linya na ito.
Ito ay tinatawag na isang tatluhan operator.
Ay isang kung pang tao pahayag na condensed sa isang linya.
Kondisyon ay ang bahaging ito sa loob ng mga panaklong.
Katumbas sa sinasabi kung j <taas - i - 1.
At pagkatapos ay kung ano ang mga nilalaman na kung block ay ang mga espasyo
at pagkatapos ay ang mga nilalaman ng ano pa ay ito #.
Mahalagang ito ay nagtatalaga ng isang puwang na ito variable.
Ito ng paglalagay ng espasyo sa mga nilalaman ng variable bloke,
kung ang kondisyon na ito ay nakamit, at kung ang kalagayan ay hindi pa nakikilala,
pagkatapos block variable ay nakakakuha ito #.
At pagkatapos, siyempre, sa halip ng pagbuo ng isang buong string
at pag-print ng lahat sa dulo solusyong ito ng mga Kopya ito isang character sa isang pagkakataon.
Medyo cool.
>> Isa pang dalawang mga bagay upang tumingin sa. Susubukan naming lumipat sa matakaw.
Ngayon kung tinitingnan namin ang matakaw, ang unang solusyon
ginagamit ang mga # tumutukoy medyo ng kaunti.
Mayroon kaming isang pare-pareho na tinukoy para sa bawat isa ng iba't ibang mga numero sa programang ito.
Mayroon kaming isa para sa mga cents kada dolyar, isa para sa mga quarters, dimes, nickels, at pennies,
at ngayon kung mag-scroll namin down at basahin ang code,
maaari naming makita ang isang karaniwang gawin-habang loop sa pagpi-print ng lahat.
Uri ng suliranin sa problemang ito ay napagtatanto na
kailangan mo i-convert ang Float na iyong basahin mula sa user sa isang integer
tumpak na gawin ang matematika, at ito ay dahil
may lumulutang point numero, tulad ng usapan natin ang tungkol sa panayam sa maikling,
ito ay hindi posible sa tumpak na kumakatawan sa bawat solong halaga sa linya ng numero
dahil may walang hanggan maraming mga halaga sa pagitan ng 3 at, sabihin nating, 3.1 kahit.
Maaari kang magkaroon ng 3.01 at 3.001 at 3.0001, at maaari mong panatilihin ang pagpunta.
Ito lumiliko out tuwing nakikipagtulungan ka sa pera, madalas kang gustong i-convert ito
sa integer format upang hindi ka mawala ang pennies at ang uri ng mga bagay-bagay.
Paggawa na at rounding ay key.
Solusyon na ito ay gumamit ng isang perpektong tuwiran, mahusay na algorithm,
kung saan decremented ang bilang ng mga sentimo na natitira, una sa pamamagitan ng quarters,
pagkatapos ay sa pamamagitan ng dimes, pagkatapos ng mga nickels, pagkatapos ay sa pamamagitan ng pennies,
at pagdaragdag sa ang bilang ng mga barya sa bawat oras.
>> Ang isa pang solusyon na namin makita, bilang ako mag-zoom out at pumunta sa Pagbabago 4,
may katulad na simula ngunit sa halip ginamit div at mod
karapatan sa paglipas dito upang kalkulahin ang bilang ng mga sentimo.
Na ito, ang bilang ng mga quarters ay katumbas ng bilang ng mga sentimo na hinati sa pamamagitan ng 25,
at ang dahilan ito gumagana ay dahil ginagawa namin integer division,
kaya discarding anumang natitira.
[Mag-aaral] ba naming magkomento sa paghahanap?
Ito ay talagang dumedepende.
[Mag-aaral] ka pagkomento higit sa code sa dito.
Oo, at kaya ng grupo ng mga iba't ibang mga philosophies sa.
Ang aking personal na pilosopiya ay na ang iyong code ay talagang ang katotohanan,
tulad ng iyong code ay kung ano ang aktwal na execute sa computer,
at sa gayon ang iyong code ay dapat na bilang nababasa hangga't maaari hindi mangailangan ng maraming mga komento.
Na sinabi, kapag gumagawa ka ng mga bagay na uri ng nakakalito mathematically
o algorithm, ito ay handa na upang magkomento doon sa gayon ay maaari mong
magdagdag ng dagdag na dimensyon, isang dagdag na layer sa sinumang nagbabasa ng iyong code.
Sa mga solusyon na ito, ay madalas na sila ay nagkomento mas mabigat dahil lang
nais namin upang ipamahagi ang mga ito at may tao pick up ang mga ito
at basahin ang mga ito nang medyo madali.
Ngunit tiyak, Gusto ko sumang-ayon na ito ay mabigat.
[Mag-aaral] Ngunit kapag may pagdududa, pumunta mas mabibigat na?
Kapag may pagdududa, pumunta mas mabibigat na.
Ang ilang mga tao ay minsan sabihin ng return 0 o isang bagay tulad na.
Tingin ko na ang isang katawa-tawa komento.
Malinaw na kung ano ang nangyayari.
Hindi ko kailangan ang Ingles sa sabihin sa akin na.
Minsan mga tao ay sumulat ng mga bagay-bagay tulad ng "kthxbai!"
Na uri ng nakatutuwa ngunit Hindi rin-
na hindi gumagawa ng pagkakaiba sa pagitan ng pagkomento sa mga puntos o hindi.
Yaong mga uri ng mga komento ay ha, ha.
Cool.
>> Sa puntong ito, sabihin simulan ang nagtatrabaho sa Problema Set 3 seksyon ng mga tanong.
Kung ikaw guys hilahin ito up muli,
tulad ng sa nakaraang linggo, hindi namin ay pagpunta upang panoorin ang mga shorts sa seksyon na ito.
Ipapaalam namin ka guys gawin iyon sa iyong sariling oras at makipag-usap tungkol sa mga tanong.
Ngunit ngayon sa seksyon na ito kami ay pagpunta sa gastusin ng konting oras
pinag-uusapan wala ng coding mga pangunahing kaalaman
tulad ng ginawa namin noong nakaraang linggo, at sa halip, kami ay pagpunta upang tumuon sa higit pa sa
kaunti higit pa ng teorya, kaya pakikipag-usap tungkol sa binary paghahanap at pagkatapos ay pag-uuri-uri.
Mula sa mga mo na sumusunod na kasama ang panayam,
Maaari isang tao ninyo akong bigyan ng pagbabalik-tanaw ng kung ano ang pagkakaiba sa
sa pagitan ng binary paghahanap at linear paghahanap?
Ano kaya ang nangyari? Sigurado.
Linear paghahanap ng paghahanap sa pamamagitan ng bawat elemento sa ang pinagsunod-sunod na listahan
ng isa sa pamamagitan ng isa sa pamamagitan ng isa sa pamamagitan ng isa-isa,
at binary paghahanap divides sa listahan sa 2 group,
tseke kung ang halaga ng key na naghahanap ka para sa higit pa o mas mababa kaysa sa halaga ng Gitnang
na iyong nakita, at kung ito ay mas mababa sa, pupunta na may mas mababang listahan
at pagkatapos ay divides na muli, ang parehong function na
ang lahat ng mga paraan pababa hanggang nahahanap nito sa Gitnang katumbas ng ang halaga mismo.
Kanan.
>> Bakit kami pakialam?
Bakit namin makipag-usap tungkol sa binary paghahanap kumpara sa linear paghahanap?
Oo.
Binary ng maraming mas mabilis, kaya kung double ang laki ng problema
ito ay tumatagal ng isa pang hakbang kaysa sa dalawang beses ng maraming mga.
Eksakto.
Iyon ay isang mahusay na sagot.
Linear paghahanap napaka-check ang isang elemento sa isang pagkakataon,
at tulad ng nakita natin sa unang araw ng panayam
kapag nagpunta David sa pamamagitan ng kanyang phone book halimbawa
at natastas ang isang pahina ng libro ng telepono sa isang pagkakataon
at iningatan paggawa na muli nang paulit-ulit at mahigit,
ito na kumuha sa kanya talagang mahabang panahon upang mahanap ang sinuman sa aklat ng telepono,
maliban kung, siyempre, siya ay naghahanap para sa isang tao sa pinakadulo simula ng alpabeto.
Sa binary paghahanap, maaari kang pumunta ng maraming mas mabilis,
at hindi lamang nang dalawang beses bilang mabilis o 3 beses na mas mabilis o 4 na beses na mas mabilis.
Ngunit ang problema ay nakakakuha ng mas maliit at mas maliit at mas maliit mas mabilis.
Upang ilarawan ito, sisimulan namin ang pakikipag-usap tungkol sa kung anong nangyayari sa
kapag isulat namin ang binary paghahanap.
Ang problema sa kamay ay na kung mayroon akong isang array ng mga numero,
sabihin, 1, 2, 3, 5, 7, 23, 45, 78, 12,323,
at pagkatapos ay 9 na may isang tonelada ng 0s matapos na ito,
nais namin upang malaman kung talagang mabilis kung ano ang sa
ito array ng mga numero.
Alam ko ito tila isang maliit na ulok at ng kaunti contrived,
dahil ngayon ito ay.
Mayroon kaming isang array na ay hindi napaka maraming elemento sa loob nito,
at kung hinihiling ko ang isa mo upang malaman kung o hindi
23 sa array, maaari mong gawin na medyo mabilis
sa pamamagitan lamang ng glancing sa at nagsasabi sa akin oo o hindi.
Ang analog na isaalang-alang isipin kung ito ay, sabihin nating,
isang Excel spreadsheet na may 10,000 na mga hilera, 20,000 hilera.
Siyempre, maaari mong gawin ang command F o ang control F at tumingin ng isang bagay up.
Maaari mo ring gamitin ang mga filter at ang paghahanap ng mga bagay-bagay,
ngunit kung mayroon kang upang tumingin sa pamamagitan ng na linya ng file sa pamamagitan ng linya sa pamamagitan ng linya,
tumagal ng isang mahabang panahon upang hanapin ito.
Ito ay uri ng tulad ng sa halimbawa ng phone book, masyadong, kung saan
walang sinuman tumingin sa pamamagitan ng pahina ng libro ng telepono isa sa isang pagkakataon.
Karaniwan, sila buksan ito sa gitna,
o sa kaso ng isang maraming ng mga libro ng telepono at diksyunaryo kung saan
iyong aktwal na ito isinara sa pamamagitan ng susi sa unang titik,
mong i-flip na unang titik at buksan at simulan ang pagpunta sa pamamagitan ng doon.
>> Ipaalala sa akin muli ng iyong pangalan. >> Sam.
Sam.
Tulad ng sinabi Sam, na linear na proseso ng paghahanap ay talagang mabagal,
at sa halip na may binary paghahanap, ang paraan kung paano ito gumagana ay na
sa bawat oras na pumunta kami sa pamamagitan ng pag-ulit ng aming algorithm sa paghahanap,
kami ay pagpunta sa hatiin ang listahan sa kalahati, mahalagang,
sa dalawang mas maliit na listahan.
At pagkatapos ay sa susunod na pag-ulit ng loop, makikita namin hatiin itong muli
sa iba pang mga mas maliit na listahan.
Tulad ng iyong nakikita, ang problema ay patuloy na pagkuha ng mas maliit at mas maliit
dahil panatilihin namin discarding kalahati ng listahan ng bawat solong oras.
Paano ito Itapon trabaho?
Lamang bilang isang paalala, ano kami ay pagpunta sa gawin kung kami ay isang computer
at kami ay, halimbawa, ang paghahanap para sa numero 5 sa listahang ito
na namin pumili ng isang numero sa gitna.
Sa gitna ng listahang ito, dahil may 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 mga numero,
nais naming piliin ang numero sa alinman sa ika-4 na posisyon o sa ika-5 na posisyon,
at gusto naming tumawag na ang gitna ng aming listahan.
Pumili ng numero sa gitna.
Pagkatapos, tulad ng Sam sinabi, makikita namin subukan ang upang makita kung ang numero na ay katumbas
ang bilang na gusto namin upang makakuha ng o sa aming nais na numero.
Kung ito ang katumbas, pagkatapos namin natagpuan ito. Manalo kami.
Kung ito ay hindi katumbas, pagkatapos ay may ilang mga kaso.
Ang dalawang mga kaso ay maaaring numero na mas malaki kaysa sa bilang namin ang pagtingin sa,
o mas mababa.
Kung ito ay mas malaki, aming ilipat sa kanan.
At kung ito ay mas mababa, ilipat namin sa kaliwa.
At pagkatapos namin ulitin ang buong proseso muli
sa alinman sa kanang kalahati o kaliwang kalahati ng listahan.
>> Ang unang problema sa seksyon ngayon upang malaman kung
kung paano namin maaaring aktwal na simulan upang ipahayag ito sa C code.
Mayroon kaming dito ang pseudocode.
Ano ang magsisimula kaming ginagawa ay kukunin ko na makuha ang isang tatak-bagong espasyo,
i-save ang pagbabago na ito upang mayroon kaming mga tala para sa mamaya,
ipapakita namin tanggalin ang lahat ng ito, at pagkatapos ay kopyahin at i-paste mula sa hanay ng problema
ang impormasyong ito sa aming mga puwang, at sana ay ito ay hindi masira.
Perpekto.
Kung ikaw guys lahat gawin na, kopyahin at i-paste ang code na ito sa iyong bagong espasyo,
sa isang blangko isa.
Subukan nating Daniel. Kung ikaw makatipon at patakbuhin ang program na ito, ito gumagana?
No. >> Ano ang sinasabi?
Sabi ang control na ay umabot sa dulo ng non-void function na.
Oo, kaya hayaan mo akong subukang patakbuhin ito.
Mo ba ang guys nakita ito bago? Alam mo ba kung ano ang ibig sabihin nito ay?
Okay, sabihin lapain ito ng kaunti.
Ito sinasabi sa file.c sa linya 9, haligi 1 mayroon kaming isang error, tulad ng sinabi mo,
at sinasabi nito na ito stemming mula sa error babala at ang babala ng uri ng return.
Mukhang isang bagay ay pagpunta sa may return uri, na saysay.
Mayroon kaming isang non-void function na, na nangangahulugan na Mayroon namin ang isang function
na hindi nagbabalik walang bisa.
Isang walang bisa function na ay isa na ganito ang hitsura:
walang bisa foo (), at ito ay walang bisa dahil ang uri ng return ay walang bisa,
na nangangahulugan na kung nagkaroon kami ng isang bagay in dito
tulad ng return 1, gusto namin makakuha ng isang tagatala error para sa.
Gayunpaman, mayroon kaming isang non-void function na.
Aming non-void function na sa kasong ito ay ang aming paghahanap na paggana
dahil ito ay may return uri ng bool.
Kapag ito ay nagsasabi na ang control ang umabot sa dulo ng isang non-void function na,
ito ay dahil ang paghahanap ay hindi magkaroon ng return statement.
Hindi ito nagbabalik ng anumang bagay ng uri bool.
>> Maaari naming ayusin na, at ano ang gagawin mo guys sa tingin
sa paghahanap ay dapat na bumalik sa pamamagitan ng default?
Ano ang dapat ang default na halaga ng pagbabalik ng paghahanap?
Dahil na kung ano ang maaari naming ilagay sa dulo.
Charlotte, mayroon kang anumang-?
Totoo o hindi? >> True o false.
Aling isa?
Hindi. Hindi ko alam.
Maling? Hayaan ang subukan ito.
Bakit gusto mong sabihin return false? Mabuti iyan Swersey.
[Charlotte] Hindi ko alam.
Kami ay pagpunta sa bumalik maling sa kasong ito dahil ito ay ang aming default
kung para sa ilang kadahilanan ang listahan ay walang laman o ang karayom
na namin iyong hinahanap ay hindi umiiral.
Pagkatapos ay sa pinakadulo, kung hindi kami nagbabalik ng tunay na mas maaga sa andar,
lagi naming alam na ang function na ito ay sabihin nope, hindi sa array.
Hindi sa mandala ng dayami.
Ngayon kung namin makatipon at patakbuhin ito hayaan mo akong i-save ito upang maaari naming hilahin ito.
Ngayon kung makatipon namin at patakbuhin ang aming programa, Bumubuo.
Namin ang aming maliit na prompt.
Kung pindutin ko 4-uh-oh.
Hindi ito i-print ang anumang. Mukhang natapos na okay ang lahat.
Mayroon kaming upang punan ito.
Usapan natin ang tungkol sa mga algorithm sa pseudocode ilang sandali ang nakalipas.
Hayaan akong makita, i-save ito,
at kukunin ko na pull na algorithm-back up muli.
Pindutin natin ito tao. Nope.
May ito ay.
Paano namin gawin ito?
Ano ang isang mahusay na diskarte para sa pagsisimula ng off ang code na ito?
Mayroon kang pumili ng bilang sa gitna.
Paano namin pumili ng isang numero sa gitna ng isang array?
Anumang mga mungkahi?
[Mag-aaral] Strlen na hinati sa pamamagitan ng 2.
Strlen hinati sa pamamagitan ng 2. Iyon ay isang mahusay na.
Strlen gawa na may mga espesyal na uri ng array.
Anong mga uri ng array?
String array, na character array.
Ito na parehong uri ng konsepto na gusto naming mag-aplay,
ngunit hindi namin maaaring gamitin ang strlen dahil hindi namin magkaroon ng isang hanay ng mga character.
Mayroon kaming isang array ng ints.
Ngunit kung ano ang strlen para sa amin?
Alam mo ba kung ano ang nakakakuha ng para sa amin?
[Mag-aaral] Strlen ay nakakakuha sa amin ang haba.
Eksakto, ay nakakakuha sa amin ang haba.
Strlen nakakakuha ang haba ng array para sa amin.
>> Paano kami makakuha ng na sa aming programa ng paghahanap ng binary?
Paano mo makuha ang haba ng array?
[Mag-aaral] Strlen?
Maaari mong makuha ang haba ng isang maayos na format C string array na may strlen.
Ang problema, bagaman, na hindi namin magkaroon ng isang array ng string.
Kung titingnan namin pabalik sa ang code na ito, mayroon kaming ito integer array.
Paano namin malalaman kung gaano ito kahaba?
[Mag-aaral] Mayroon bang isang katumbas endpoint, tulad ng int l o isang bagay?
Ito ay lumiliko out doon ay hindi aktwal na, at iba pa sa isang paraan, ito ay
isa sa mga bagay na lang magandang malaman tungkol sa C,
na walang paraan upang makuha ang haba ng array
kung ang lahat bigyan ko sa iyo ay ang array.
Ang dahilan kung bakit ito gumagana sa mga string, ang dahilan strlen gawa,
ay dahil sa kung ang isang string ay maayos na na-format,
ito na espesyal \ 0 character sa pinakadulo.
>> Maaari mo ring isipin kung mayroon kang isang wastong nai-format na string
at walang \ 0 karakter doon, pagkatapos ay ang buong bagay ay hindi gumagana.
[Mag-aaral] Maaari mong idagdag ang \ 0?
Maaari namin sa kasong ito.
Maaari naming magdagdag ng ilang uri ng \ 0
o ilang uri ng signifying character at pagkatapos ay gamitin iyon.
Ngunit na hindi pa upang gumana
dahil ang \ 0 ay para sa uri ng pansamantalang trabaho,
at dito namin Mayroon ints.
Ang iba pang bagay ay kung kami ay upang gumamit ng isang espesyal na halaga
tulad ng -1 upang markahan ang mga dulo ng isang array
pagkatapos ay hindi namin ma-imbak ng -1 sa aming mga integer array.
Gusto naming natigil.
Ito ay lumiliko out na ang tanging paraan upang makakuha ang haba
ng isang array sa C ay aktwal na tandaan ang mga ito
kapag ikaw ay set up ito at pagkatapos ay pumasa ito sa paligid na may array
kaya na kapag mayroon akong isang function na pagpunta sa gawin ang ilang mga trabaho
sa isang hanay ng mga integer o sa kamay o doubles o kung ano ang mayroon ka,
Kailangan ko rin upang magbigay ng pag-andar haba ang array,
at na eksakto kung ano ang ginawa namin dito sa pag-andar ng paghahanap.
Kung titingnan mo, kung ano ang ginawa namin kapag pumasa kami sa aming array dito,
din namin pumasa sa haba, ang laki.
Ito lamang ang mangyayari na namin tinatawag na variable na ito dito,
ang parameter na ito o argumento.
Ito ay tinatawag na argumento ng listahan ng isang function o listahan ng parameter,
at ang mga ito ay tinatawag din na mga argumento o mga parameter.
Ginagamit ng mga tao ng iba't ibang mga tuntunin sa iba't ibang oras.
Ako minsan Interchange sa kanila ang aking sarili.
Lang kaya ang mangyayari na ito variable dito ay katulad na pinangalanang
ito # tukuyin ang hanggang dito.
Ngunit hindi sila ang parehong bagay.
Capitalization ang ginagawa ng bagay na ito.
>> Kung tumingin ka sa kung ano ang mangyayari dito, idedeklara namin
aming int array, na namin ang tinatawag na numero.
Nagbigay kami sa aming laki, na tumutugon sa aming # tukuyin ang hanggang sa tuktok.
Ito ay pagpunta sa 8.
At pagkatapos ay kapag kami pagkatapos tawagan ang aming paghahanap function na pababa sa ibaba,
pumasa namin sa bilang gusto naming upang maghanap para sa, na namin ang prompt,
nakuha mula sa user.
Pumasa kami sa array, ang numero na ito,
at pagkatapos namin ay mayroon ding upang pumasa sa laki ng array,
at pagkatapos ay ang halaga ng laki 8 ay makakakuha ng naka-imbak
o ang pumasa sa ito integer variable na tinatawag na laki.
Mayroon kaming ang laki ng array.
Ngayon kung pumunta namin pabalik sa kung ano ang namin ang pakikipag-usap tungkol sa mas maaga,
Tingin ko Missy nagdala sa punto na kung ano ang kailangan naming gawin ay ang haba ng array
at hatiin ang mga ito sa pamamagitan ng 2, at na ay magbibigay sa amin ang Gitnang.
Natin makita.
Maaari ba akong magkaroon ng isang tao na magsulat ito at i-save ang mga ito sa kanilang mga espasyo?
Paano tungkol Leila?
Maaari ba akong magkaroon sa iyo na isulat ito sa?
Isulat ang unang linya kung saan mo ang haba ng array at makakuha ng Gitnang
at mag-imbak ito sa isang bagong variable.
Bibigyan kita ng isang segundo ilang. Handa ka na ba?
[Hindi marinig na Estudyante]
Sigurado, maaaring ko kayo na kalkulahin ang Gitnang
ng mandala ng dayami array sa loob ng katangian ng paghahanap
gamit ang haba ng array mandala ng dayami, na ang laki variable?
Walang nakakalito dito.
[Leila] lang laki / 2 at-
At i-save ito, at pindutin ang pindutang I-save hanggang dito sa tuktok,
at kami na hilahin ito.
Perpekto.
Doon kami. Kahanga-hanga.
>> Tulad ng, ito makatipon?
[Leila] Hindi, kailangan nito upang maging mas mataas.
[Nate] Oo, kaya kung ano ang kailangan namin upang gawin?
[Leila] Tulad int Gitnang o isang bagay.
Kahanga-hanga. Oo, sabihin na, int ang Gitnang = laki.
Ay ito makatipon?
Natin tanggalin ang komentong ito at kumuha ng mga ito ng paraan.
Ano ang hindi ipunin ang tungkol dito?
Hindi namin ginagawa anumang bagay na may integer,
kaya kailangan namin upang i-print ito o ang isang bagay tulad na.
Oo, eksakto.
Kami makakuha ng isang hindi nagamit na variable.
Ano pa ay hindi tungkol sa?
Tingin ko na sinabi mo ang isang bagay, Sam. Semicolons.
Oo, ako ang nawawalang mga semicolons iyon.
Ito ay pagpunta sa isang pare-pareho ang bagay sa buong kurso ng termino.
Ang huling bagay ko ay makikita ko bang ilagay ang ilang mga puting espasyo sa magkabilang panig
ng ang operator na ito dito, dahil na karaniwang kung paano namin ito gawin
ayon sa aming gabay sa estilo.
Mayroon namin sa Gitnang ng aming mga array.
Ngayon kung tandaan namin pabalik sa aming algorithm,
kung ano ay ang ikalawang hakbang na nagkaroon kami na gawin sa sandaling kami ay may sa Gitnang?
[Mag-aaral] Kung ito ay mas malaki [hindi marinig].
Oo, kaya kami ay may sa gawin ang ilang mga uri ng paghahambing, at kung ano ang kami ng paghahambing dito?
Sinabi mo kung ito ay mas mataas kaysa. Ano ang sa na pangungusap na tumutukoy sa?
Ang bilang ay up, kung na mas malaki kaysa sa Gitnang, pagkatapos ay pumunta sa array?
Eksakto, kaya ang bilang ay kapag kami-
Karayom, kaya kami ay naghahambing sa karayom,
at kung ano ang kami ng paghahambing laban sa karayom?
Dahil karayom ​​ay kung ano ang iyong hinahanap namin.
Kami ng paghahambing nito upang makakuha ng sa Gitnang.
>> Ngunit hindi ito gumawa ng kahulugan upang suriin upang makita
kung karayom ​​= Gitnang?
Ba na magkaroon ng kahulugan?
Ba ang sinuman hindi sumasang-ayon?
Natin subukan na ito, kung (karayom ​​== Gitnang).
[Mag-aaral] Huwag printf na iyong natagpuan ito.
[Nate] Printf ("Natagpuan namin ito \ n!");
Kung hindi-I'm pagpunta upang simulan ang paggawa ng isang bagay ibang dito.
Ako pagpunta sa magsimula ng paglalagay ng mga tirante sa paligid ng kung pahayag sa lahat ng oras
dahil lang sa kung namin magdagdag ng higit pang mga bagay-bagay, at pagkatapos
hindi namin makuha ang mga compiler.
Oo, Sam. Mayroon kang isang punto.
Ang problema ay na ang Gitnang kumakatawan sa isang posisyon sa array,
ngunit maaari kang makakuha ng ito ay kumakatawan sa mga halaga sa na posisyon ng array.
Iyon ay isang mahusay na punto.
Ba lahat marinig kung ano ang Sam sinabi?
Sinabi niya Gitnang na bilang ay
kumakatawan lamang ng isang posisyon sa array, ngunit ito ay hindi ang aktwal na elemento sa array.
Kung sa tingin mo tungkol sa code bilang nakasulat na ngayon,
kung tiningnan namin sa array pababa dito, na may 8 mga elemento sa loob nito,
kung ano ang halaga ng Gitnang na sa function na ito?
[Mag-aaral] 4.
[Nate] 4.
Kung titingnan namin para sa numero 4 -
at maaari lamang namin patakbuhin ang code na ito at maglagay ng maliit na malungkot na mukha in dito
dahil hindi kami nakahanap ng ito-kung nagpapatakbo namin ang code na ito
bilang ngayon, i-upload itong, gusali, ipaalam sa akin na mag-scroll pababa,
at kung tiningnan namin para sa numero 4,
nakita namin ito, ngunit hindi namin makuha ang printf oo.
Isang kadahilanan na hindi namin nagbabalik ng tunay,
ngunit namin talagang makita ang bilang 4?
At Sam ay sinasabi ng walang.
Ano ang naming makita?
Talaga namin natagpuan ang Gitnang, na kung tiningnan namin sa array pababa dito,
ito ay pagpunta sa elemento sa index 4 na kaming naghahanap sa,
na 23.
>> Paano kami makakuha ng aktwal na elemento sa Gitnang
at hindi lamang sa Gitnang mismo?
[Mag-aaral] ay namin ipasok ang pansamantalang trabaho o isang bagay?
Ano ang gusto na, lamang sa labas ng pagkausyoso?
Maaari mong dagdagan ng mga paliwanag ng kaunti pa?
Mayroon kang na baguhin ang posisyon sa numero,
kaya na kailangan mong gumawa ng ilang mga koneksyon-tingin ko ito ay pansamantalang trabaho, ngunit maaaring hindi ito.
Oo, na isang magandang punto.
Namin ang paggawa ng maraming ng mga ito nagko-convert na mga posisyon sa mga karakter, ang mga character na ito,
sa unang dalawang set ng problema.
Ito lumiliko out na dito, ito ay halos katulad sa
access sa ith karakter sa loob ng isang string, kung na saysay.
Narito nais naming upang ma-access ang Gitnang elemento.
Paano namin gawin iyon?
Kevin, mayroon kang anumang mga mungkahi kung paano namin gawin iyon?
Maaari mong gawin mandala ng dayami, bukas bracket, mid, sarado bracket.
Maaari mong isulat ang mga iyon para sa amin?
I-save ang mga ito in dito, at makikita namin hilahin na up.
Kaming naghahanap sa linya 9 na ito,
at kami ay napagtatanto na hindi namin nais upang ihambing ang karayom ​​sa Gitnang,
ngunit sa halip, nais namin upang ihambing ang karayom
sa elemento sa Gitnang posisyon sa loob ng aming mandala ng dayami array.
Cool.
Doon kami.
Oo, na mukhang medyo magandang, kung (karayom ​​== mandala ng dayami [Gitnang]).
Natagpuan namin ito.
Ngayon kung patatakbuhin namin ang code na we'll back up ng kaunti-
ito compiles, ito tumatakbo, at ngayon kung tiningnan namin para sa 4,
hindi namin mahanap ang mga ito dahil ngayon aktwal na kami ay pagkuha ng bilang 23.
Kami ay nakakakuha ng ang halaga 23, at na kung ano ang kami ay naghahambing sa aming karayom.
Ngunit iyon lamang ang mabuti. Na ang isang hakbang sa tamang direksyon.
>> Iyon ay kung ano ang sinusubukan naming gawin.
Hindi namin sinusubukan upang ihambing ang karayom ​​laban sa mga posisyon sa array
kundi laban sa mga aktwal na mga elemento sa array.
Kung titingnan namin muli ngayon sa susunod na hakbang sa aming algorithm,
kung ano ang susunod na hakbang?
Leila na binanggit ito maikling.
[Mag-aaral] Suriin upang makita kung ito ay mas malaki kaysa sa o mas mababa at pagkatapos ay magpasya kung aling paraan upang ilipat.
[Nate] Oo, kaya kung paano namin ang gawin iyon?
Maaari mong ilagay sa ilang I'll i-save ang pagbabago na ito,
at pagkatapos ay kung inilagay mo sa ilang mga linya na gawin iyon.
Oo, Charlotte. >> Mayroon akong tanong.
Hindi dapat Gitnang - 1 dahil ang unang bagay ay
0-index, kaya kung inilalagay namin ang 4, na hindi tunay ang mga character na kaming naghahanap ng mga?
Oo, at ang iba pang mga problema sa na-
na ang isang mahusay na catch, dahil kung ano ang pagpunta sa nangyayari posibleng
kung panatilihin namin ang paglipat at hindi namin kailanman ayusin simula?
Hulaan ko kung ano ang maaari naming up paggawa ay sinusubukang i-access
elemento sa ika-8 na posisyon ng array,
na sa kasong ito ay hindi umiiral.
Kami ay nais na gawin ang ilang mga uri ng accounting para sa katotohanan
mayroon kaming ilang zero na pag-i-index.
[Charlotte] Paumanhin, nilalayong ko Gitnang - 1 sa mga square bracket.
Maaari naming gawin iyon.
Susubukan naming bumalik sa ang isyu na ito sa loob lamang ng kaunti.
Sa sandaling simulan namin upang makakuha ng sa aktwal na looping,
na kapag namin talagang makita ito ay sa pag-play.
Sa ngayon, maaari naming gawin ito, ngunit hindi ka lubos na karapatan.
Na zero ang pag-i-index ay magkaroon ng epekto na kailangan namin upang account para sa.
Natin makita.
>> Paano ang mas mataas kaysa at mas mababa sa-?
[Mag-aaral] nakukuha ko kung paano gawin ang mas mataas kaysa at mas mababa sa bahagi.
Ko lang ay hindi sigurado kung ano upang i-print kung nakita mo na ito ay mas mababa kaysa sa Gitnang mandala ng dayami o mas mataas kaysa.
Narito ang maaari kong i-save ang kung ano ang I've-
[Nate] Oo, kung ikaw ay i-save ang kung ano ang mayroon ka, at makikita namin hilahin ito.
Doon kami.
[Mag-aaral] At ko bang ilagay ang mga marka ng tanong para sa kung ano ang hindi ko alam.
[Nate] Iyon ay mukhang mahusay.
Narito namin na nakuha ng mga marka ng tanong dahil hindi pa rin namin alam
kung ano ang kami ay pagpunta sa medyo gawin pa.
Ano ang gusto namin nais na gawin-oops, Mayroon namin ang ilang mga tirante lahat ng funky sa amin.
Susubukan naming iwasto ang mga tirante na ito.
Doon kami.
At kaya kung ano ang gusto naming gawin, ayon sa aming algorithm,
kung hindi namin mahanap ang karayom?
Sabihing sa kaso na karayom ​​ay mas mababa kaysa sa kung ano ang iyong hinahanap namin sa. Kevin.
Lamang tumingin sa kaliwang kalahati.
Karapatan, kaya ipapakita namin maglagay ng komento dito na nagsasabing "tumingin sa kaliwang kalahati."
At kung ang karayom ​​ay mas malaki kaysa sa mandala ng dayami sa Gitnang, ano ang gusto naming gawin?
[Mag-aaral] Pagkatapos kang tumingin sa kanang kalahati.
Hanapin sa kanang kalahati, "tumingin sa kanang kalahati."
Hindi na masama.
Okay, kaya sa puntong ito, bagay hinahanap medyo magandang.
Ang problema sa code bilang nakasulat kung ano?
[Mag-aaral] Hindi mo endpoints para sa halves.
Karapatan, hindi namin endpoints para sa halves.
Lamang din kami pagpunta sa pumunta sa pamamagitan ng sabay-sabay.
Lamang namin ay pagpunta sa tumingin sa isang Gitnang.
Alinman elemento ay doon, o hindi.
Upang makumpleto ito, kakailanganin naming gawin ang ilang mga uri ng pag-uulit.
Kailangan namin upang panatilihin ang paulit-ulit hanggang sa mahanap namin na
alinman elemento doon dahil kami narrowed down at sa wakas nahanap na ito,
o hindi ito sa doon dahil kami ay tumingin sa pamamagitan ng lahat ng mga bagay
sa naaangkop na mga halves ng array at natagpuan na wala doon.
>> Tuwing Mayroon namin ang pag-uulit na ito pagpunta sa, kung ano ang kami pagpunta sa gamitin?
[Mag-aaral] Ang isang loop.
Ang ilang mga uri ng loop. Oo.
[Mag-aaral] Maaari ba kaming do-habang loop at may gawin ito at pagkatapos habang
karayom ​​hindi katumbas-I'm hindi sigurado kung saan ako pagpunta na iyon.
Ngunit uri ng tulad ng ginagawa na hangga't ito ay hindi katumbas ng ang halaga na ang input ng user.
Oo, kaya sabihin makita, kung paano ito sumulat mismo?
Sinabi mong gamitin natin ang do-habang loop.
Kung saan ay ang gawin ang simula?
[Mag-aaral] Kanan matapos ang laki / 2.
[Nate] Okay, at kung ano ang namin gawin?
Susubukan naming punan sa habang mamaya.
Ano kami gawin?
[Mag-aaral] Huwag gusto naming gawin ang lahat ng mga bagay-bagay na mayroon kami sa kung bahagi?
[Nate] ba ang lahat ng ito bagay-bagay, mahusay.
Kopyahin at i-paste.
Oh, tao.
Natin makita kung ito gumagana, kung maaari namin ang tab na ito sa paglipas ng.
Magandang.
Okay, at i-save namin ito upang guys na mayroon ito.
Lahat ng karapatan, at kami ay pagpunta sa gawin ito habang-
kung ano ang mga kondisyon ng habang ikaw ay matapos?
[Mag-aaral] Habang hindi katumbas ang karayom, kaya tulad ng exclamation point.
Ngunit hindi ako sigurado kung ano mismo ang na ay pa.
[Nate] Oo, ito ay isang paraan upang gawin ito.
Sam, mayroon kang isang komento?
[Sam] remembered ko kapag ako ay tumingin sa video,
Kinuha ko ng isang screenshot ng isa ng tulad ng kapag ginawa namin ang pseudocode para dito,
nagkaroon ng ilang mga ugnayan sa pagitan ng max at min.
Tingin ko ito ay isang bagay tulad ng kung max ay kailanman mas mababa kaysa sa min.
Nakuha ko.
[Sam] O gusto kung ang max ay hindi mas mababa kaysa sa min o isang bagay tulad na,
dahil na nangangahulugan na hinanap mo ang lahat.
>> Oo, kaya kung ano ang tunog tulad ng max at min ay tumutukoy sa?
[Sam] Halaga ng na-integer na upang baguhin
na may kaugnayan sa kung saan inilalagay namin ang Gitnang.
Eksakto.
[Sam] Sa puntong iyon, ito pagpunta sa [hindi marinig] makalkula ang max at min.
Gitnang ang max at min ideya.
Ba na gumawa ng pakiramdam sa mga tao?
Kung kami ay upang simulan ang pagtingin sa kung paano namin ay pagpunta sa gawin ito ulit,
hindi ka lubos na karapatan na gusto naming gamitin ang ilang mga uri ng gawin-habang loop.
Ngunit hulaan ko kung tandaan namin kung ano ang nangyayari sa lugar ng array na ito
at kung ano ang talagang nangyayari-I'm pagpunta sa sumulat sa paglipas dito-
sa unang pag-ulit ng binary paghahanap, mayroon-namin
Ako pagpunta upang gamitin ang b at e upang tukuyin ang simula.
At pagkatapos ay ang dulo ng aming array.
Alam namin na ang simula ay sa 4 karapatan sa paglipas dito,
at alam namin na nagtatapos sa 108.
Sabihing kami ay naghahanap para sa bilang 15.
Ang unang pagkakataon na gawin namin ito, tulad ng nakita natin mas maaga,
Gitnang ang alinman sa 16 o 23
depende sa kung paano namin kinakalkula ang mga bagay ang.
Dahil pantay-pantay na paghahati sa gitna ay bigyan kami ng puwang na ito
sa pagitan ng 16 at 23, hindi pantay-pantay namin maaaring hatiin ito
o hatiin ito at makakuha ng sa isang tunay na Gitnang.
Titingnan namin sa 16.
Susubukan naming mapagtanto ang "Uy, 16> 15 na kaming naghahanap ng para sa."
Upang pagkatapos ay tumingin sa kaliwang kalahati ng array
kung ano ang makikita namin hanggang paggawa discarding
ang buong itaas na bahagi
at sinasabi, "Okay, ngayon aming Dulo ng pagpunta sa dito."
Ang susunod na pag-ulit ng aming loop, na namin ngayon ang iyong hinahanap sa array,
epektibong pag-itinapon bahagi na ito dahil ngayon
kung namin ang paglalaan ng Gitnang ang pagkakaiba sa pagitan ng simula at sa katapusan,
nakita namin na ang aming Gitnang na 8,
kung saan maaari naming pagkatapos ay subukan ang 8 upang makita kung saan ito ay na may kaugnayan sa numero kaming naghahanap ng mga,
15, hanapin na 15 ay mas malaki,
kaya kami ay may upang lumipat sa kanang bahagi ng listahan,
kung saan alam namin dahil hindi namin ang mga tao, at maaari naming makita ito.
Alam namin na ang kanang bahagi ay magiging kung saan nakita namin ito,
ngunit ang computer ay hindi alam na, kaya kung ano ang gagawin namin ay bibigyan namin ng aktwal
na ito pumunta up, at ngayon ang simula at sa katapusan
sa parehong lugar, kaya Gitnang ang nagiging lamang ang numero sa listahan sa puntong iyon,
na 15, at nalaman namin ito.
Ba na malaglag sa ilang ilaw sa kung saan ang buong max at min pagtatanda pagpunta,
pinapanatili ng track ng endpoints ng array upang malaman kung
kung paano upang paliitin ang mga bagay down?
>> Kung ano ang mangyayari kung ito ay hindi katumbas sa 15 ngayon?
Ano kung kami ay naghahanap para sa 15 at, sa halip, ang bilang na ito ay din 16?
Gusto naming sabihin, "Oh, ito ay mas malaki.
Gusto naming upang bumalik sa kaliwa. "
At nais naming ilipat ang aming e sa kanan,
sa puntong mayroon kaming isang endpoint na nagko-conflict.
Hindi ito upang maghanap para sa anumang higit pang mga elemento
dahil ngayon mayroon kaming aming Dulo ng at sa aming punto ng simula,
aming max at ang aming min, na ngayon Binaligtad.
Kami ay maghanap sa pamamagitan ng buong array. Hindi namin mahanap ang anumang bagay.
Na ang punto sa kung saan namin gusto mong sabihing, "Okay, kami ay pagpunta sa itigil ang algorithm.
Hindi namin nahanap ang anumang. Alam namin na ito ay hindi in dito. "
Paano ay ito dumalo?
[Mag-aaral] Paano eksaktong ang computer lumipat sa dulo?
Paano ang pagtatapos magtapos up bago ang simula?
Pagtatapos Nagtatapos ang bago sa simula
dahil sa matematika na kami ay pagpunta sa gawin sa bawat oras na gawin namin ito.
Ang paraan na aming swap kung titingnan mo sa unang pagkakataon namin ito makipagpalitan ng
kung saan mayroon kaming simula sa 4 at sa katapusan
ang lahat ng mga paraan pababa sa 108 at ang aming Gitnang, sabihin, sa 16 -
Pupunta ako upang i-reset ito pabalik sa 15-kung kaming naghahanap ng para sa 15,
alam namin na kung ano ang ginawa namin kapag naka-check namin ang 16 at nakita na ito ay mas malaki
at gusto mong itapon ang buong kanang bahagi ng listahan,
Nakita namin na kung ano ang gusto naming gawin ay ilipat ang e dito mismo.
Epektibo, e Nakakuha inilipat sa isa bago ang Gitnang.
Gayundin, kapag ginawa namin ito ulit ng algorithm
at Gitnang sa 8,
nakita namin na 8 <15, kaya gusto naming ilipat ang b
isang nakaraang ang Gitnang.
Ngayon, sa simula at sa katapusan ay parehong kasama sa 15.
>> Kung nais namin na nangyayari upang tumingin para sa ilang iba pang mga halaga, hindi 15,
o kung ito ay sa halip ay ang 15 16,
ay nalaman naming e ang gusto naming ilipat ang isa bago ang Gitnang.
Ngayon e ay may Binaligtad nang mas mababa kaysa sa b.
Lakad natin sa pamamagitan ng kung paano namin aktwal na coding ito algorithm.
Alam namin na gusto naming magkaroon ng Gitnang pagkalkula na ito.
Alam din namin na gusto naming subaybayan ang simula at dulo ng array
ng aming kasalukuyang array upang maaari naming malaman kung
kung saan ang kaliwang kalahati ng listahan ay at kung saan ang kanang kalahati ng listahan ay.
Ginagawa namin na na may alinman sa nagsisimula at nagtatapos,
o maaari naming tumawag sa kanila min at max.
Kailangan ko bang gamitin ang nagsisimula at nagtatapos ang oras na ito.
Kapag sinimulan namin, kung tiningnan namin pabalik sa aming halimbawa dito,
aming simula ay nakatakda sa pinakadulo simula ng array, bilang natural.
Ano ang index ay ito? Ano ang dapat aming magsimula na?
Daniel.
[Daniel] mandala ng dayami [0].
[Nate] Oo, kaya kami itakda ito katumbas ng mandala ng dayami [0].
Ang problema, bagaman, ay na ito ay nagbibigay sa amin hindi ang posisyon ng unang elemento.
Ito ay nagbibigay sa amin ang index ng unang elemento o ang aktwal na halaga na unang posisyon.
[Mag-aaral] Iyon ay convert sa .20?
[Nate] Ano ito ay gawin ay-mabuti, hindi ito gawin ang anumang nagko-convert.
Ano ito ay ang pag-imbak ng 4 sa magsimula,
at pagkatapos ay ito ay mahirap upang gumawa ng mga paghahambing laban magsimula
dahil BEGIN ay hinahawakan ang halaga ng 4,
na ang simula ng aming array,
ngunit nais naming upang subaybayan ang mga indeks ng sa array
kumpara sa halaga.
Namin ang aktwal na gumamit ng 0, tulad na.
Para sa dulo ng array-Charlotte dinala ito up ng kaunti mas maaga.
Ito ay kung saan isasaalang-alang namin patungo sa account na zero ang pag-i-index.
>> Charlotte, kung ano ang dulo ng array?
Ano ang index ng pagtatapos?
[Charlotte] Laki - 1.
Oo, at kung aling laki ang dapat naming gamitin?
Dapat naming gamitin ang kabisera ng laki o lowercase laki?
Capital laki.
Sa kasong ito, maaari naming gamitin ang kabisera laki.
Kung gusto namin ang function na ito upang maging portable
at gamitin ang function na ito sa iba pang mga programa,
maaari naming aktwal na gumamit ng lowercase na laki.
Ito ay fine masyadong.
Ngunit Charlotte ay lubos na karapatan na gusto naming magkaroon ng laki - 1.
Sa puntong ito-
[Mag-aaral] Paano ay ito na maaari mong gamitin ang mga uppercase laki?
Paano ay ito na maaari kaming gumamit ng uppercase laki?
Ito lumiliko out na ang mga # tumutukoy talaga,
sa ilalim ng hood, ang teksto tulad ng mahanap at palitan, kung na saysay.
Kapag mong ipunin ang iyong code, ang phase ng preprocessing
ng tagatala napupunta sa pamamagitan ng file,
at hitsura para sa lahat ng dako na iyong nakasulat na kabisera laki,
at pumapalit na teksto literal na may 8, katulad nito.
Sa na kahulugan, ito ay lubos na naiiba mula sa isang variable.
Hindi ito tumagal ng hanggang ang anumang puwang sa memorya.
Ito ay isang simpleng nanlilinlang Palitan ang teksto.
Sa kasong ito, kami ay pagpunta sa gamitin ang laki.
Mula dito namin nais na gawin ang ilang mga uri ng pag-uulit,
at hindi namin sa kanan track sa aming Do-habang loop.
Gusto naming gawin ang isang bagay hanggang ang isang kondisyon ay hindi hold ang ito,
at tulad ng nakita natin mas maaga, nakita namin na kondisyon
ay katunayan na hindi namin nais sa dulo
upang maging mas mababa kaysa sa magsimula.
>> Ito ay aming pagtigil kondisyon.
Kung nangyari ito, gusto naming upang ihinto at ipinapahayag tulad ng, "Uy, hindi namin natagpuan ang anumang."
Na ipahayag ito, namin nais na gamitin ang ilang mga uri ng loop.
Sa kasong ito, ito ay isang Do-habang loop, loop, habang loop?
Mayroon kaming Do-habang loop dito.
Gusto mo guys tulad na diskarte?
Sa tingin ba ninyo dapat naming subukan ang isang iba't ibang mga diskarte?
Kevin, anumang saloobin?
Maaari naming magkaroon ng isang habang loop dahil alam namin ang maximum na
ay mas malaki kaysa sa min sa anyways simula.
Oo, kaya walang Pinasimulan na kailangang mangyari.
Yaong gawin-habang loop ay mahusay na kapag mayroon kang simulan ang isang bagay
bago at pagkatapos ng pagsubok, kung saan dito
alam namin na hindi namin upang panatilihin ang reinitializing parehong nagsisimula at nagtatapos
bawat ikot ng loop.
Alam namin na gusto naming simulan ang mga ito, at pagkatapos ay tingnan ang aming kalagayan.
Sa kasong ito, makikita ko aktwal na may isang simpleng habang loop.
Ito lumiliko out na gawin-habang loop ay ginagamit medyo madalang.
Isang maraming ng mga lugar ay hindi maturuan ang habang loop.
Ito ay mabuti para sa paghawak ng input ng user, kaya nakakita kami ng maraming ng mga ito nang sa gayon ay malayo.
Ngunit normal para sa at habang loop ng maraming mas karaniwang.
Ito lumiliko out na ang kondisyon na ito ay tulad ng nakasulat
ay hindi talagang gawin sa amin mas mahusay, at bakit iyon?
Ikinalulungkot ko, hindi ko alam ang iyong pangalan.
Ako Jerry. >> Paumanhin?
B-O-R-U-ko.
Oh, okay.
Hindi ko nakikita sa aking listahan.
Oh, ito ay dahil-oh, na saysay.
Mayroon ba kayong ng ideya ng kung bakit ito habang loop ay hindi maaaring gumana tulad ng nilalayon,
tulad ng nakasulat sa mga kondisyon?
[Jerry] ibig sabihin mo tulad ng gusto mo ang lahat ng mga bagay-bagay matapos na ito sa ng?
Oo, kaya na ang isa.
Maaaring namin upang ilagay ang lahat ng ito bagay sa habang loop, kung saan ay lubos na totoo.
Ang iba pang mga bagay na ng kaunti pa sa problemang, bagaman, ay na ang kondisyon na ito ay hindi gumagana.
[Mag-aaral] kailangan mo upang i-flip ito.
Kanan, kaya't ang kondisyon na ito ay hindi kailanman totoo paunang paraan na usapan natin ang tungkol dito.
Gusto naming gawin ang isang bagay hanggang sa pagtatapos <magsimula,
ngunit nais naming upang gawin ang isang bagay habang
simulan ang ≤ pagtatapos.
>> Mayroon na pagkabaligtad ng logic doon.
Ako na nagkasala ng paggawa ng mga pagkakamali sa lahat ng oras.
[Mag-aaral] Bakit ang ito sa mas mababa sa o katumbas ng?
Dahil mo matandaan ang kaso na nakuha namin sa
kung saan nagkaroon ng isang elemento lamang, at kami ay pababa,
at kami ay naghahanap sa lamang sa 15 sa aming array?
At ang aming simula at ang aming pagtatapos ay ang parehong mga elemento.
Gusto naming tiyakin na namin panghahawakan ang kasong iyon.
Kung ginawa namin isang tuwid na mas mababa kaysa sa,
nais lamang namin upang makakuha ng pababa sa 2-elemento array.
Sa sandaling nakuha namin down na huling elemento, kung na aming elemento, hindi namin nais na makita ito.
Ngayon dito, maaari naming gawin nang eksakto tulad ng ikaw ay sinasabi.
Maaari naming simulan plopping bagay pakanan papunta sa kalagitnaan ng aming habang loop.
Aming makakaya magsabuwatan sa aming Gitnang.
Namin ang lahat ng mga ito kung pahayag,
hilahin ang mga ito ng ito do-habang loop,
magsabuwatan ito sa,
linisin ang mga bagay up ng kaunti,
at makikita ko sige at i-save ang pagbabago na ito.
At sa puntong ito, kami ay nakakakuha ng medyo malapit.
Sam.
Tingin ko mayroon ka ring int Gitnang = laki - 1/2.
Nakuha ko, laki - 1/2.
Mayroon bang anumang bagay na kailangan namin upang baguhin ang tungkol sa na linya?
Iyon ay isang mahusay na catch.
>> Ano ang laki gawin? Ay namin kailanman pagbabago ng laki?
Upang panatilihin ang mga linya tulad nito, mayroon kaming upang baguhin ang laki.
Mayroon kaming upang baguhin ang laki sa bawat oras na pumunta kami sa paligid ng para sa loop.
Ngunit tandaan kapag kami ay pagpunta sa pamamagitan ng aming halimbawa lamang ng kaunti mas maaga,
at nagkaroon kami simula sa 4
at sa katapusan ang lahat ng mga paraan sa paglipas ng sa 108?
Paano kinakalkula namin ang ang Gitnang?
Ay namin ang paggamit sa laki?
O namin ay ginagamit nagsisimula at nagtatapos sa halip?
Ito ay ang pagkakaiba sa pagitan ng pagtatapos at simula.
Eksakto, at kung paano eksaktong dapat kong isulat iyon, Charlotte?
Lamang magtapos - magsimula.
Hindi mo kailangang gawin ang - 1
dahil ang - 1 ay kasama sa pagtatapos at magsisimula na.
[Nate] Mahusay, ikaw ay lubos na karapatan.
Hindi namin na gawin ang - 1 dahil iyon - 1 ay kasama
at alang kapag namin initialize ang katapusan variable.
>> Mayroon bang anumang bagay kailangan kong gawin syntactically linya na ito may kabuluhan ang?
[Mag-aaral] Plus magsimula. >> Plus magsimula?
[Mag-aaral] Sa dulo.
Dahil lamang ito ay kinakalkula sa kalahati ng haba.
Kailangan mong idagdag ang magsimula.
[Nate] Ano ang gusto ito kalkulahin para sa amin?
Kung sa tingin namin tungkol sa pagtatapos sa unang pag-ulit ng loop,
pagtatapos ay pagpunta sa posisyon index 7.
Simulan sa posisyon 0.
Tandaan, kami ay naghahanap para sa alinman sa
posisyon 3 o posisyon 4.
Kung titingnan namin sa matematika, upang gumawa ng mga ito ng kaunti pa tiyak,
ilagay ang ilang mga numero sa dito, mayroon kaming 7, 0,
kaya 7 - 0, at pagkatapos ay / 2
3 sa integer division, na.
Pagkatapos ay kailangan naming pagkatapos ay idagdag muli ang aming magsimula?
Ginagawa namin hindi sa kasong ito.
Sa unang pag-ulit, ito ay pinong dahil BEGIN ay 0.
Ngunit bilang namin progreso, gawin namin talagang lahat kailangan lang
pagtatapos - simulan / 2.
May isa pang nanlilinlang dito, at lalo na isa sa mangingibabaw.
[Mag-aaral] ba namin kailangan ang mga panaklong?
[Nate] Mismong, at na dahil kung hindi namin ilagay ang mga ito ng mga panaklong,
linya na ito ay kahulugan sa halip
ng (wakas) - (simulan / 2), na hindi namin talagang gusto.
Panoorin ang para sa mga panuntunan mangingibabaw.
[Mag-aaral] Bakit hindi ito magtapos + magsimula?
Bakit hindi ito magtapos + magsimula?
[Mag-aaral] Bakit hindi?
Bakit ito ay +?
Tingin ko ikaw ay kanan.
[Mag-aaral] Dahil ito ang average?
[Nate] End + magsimula, ikaw ay lubos na karapatan.
Wow, lubos ko goofed. Tama ka.
Kung tayo ay ginagawa sa minus, gusto namin nais upang idagdag ang magsimulang muli.
Sa kasong ito, hindi ka maka-kanan na gusto naming gawin ang average ng dalawang,
kaya namin nais na idagdag ang mga ito, bilang kabaligtaran sa ibawas ang mga ito.
[Mag-aaral] din ito gumana kung ginawa mo ang pagtatapos - simulan / 2 + magsimula.
Gagawin ito kung namin gawin-ako naniniwala kaya.
>> Halimbawa, kung tayo ay tumitingin sa magsimula,
at Paglipat namin ito sa paglipas dito
sa 15.
Ngayon simulan sa posisyon 2.
End ay sa posisyon 7.
Kung ibabawas namin ang mga ito, makuha namin 5.
Hatiin na sa pamamagitan ng 2, makuha namin 2.
At pagkatapos namin magdagdag ng 2 pabalik sa,
at na hindi nakakaabala sa amin sa ika-4 na posisyon,
na dito mismo, na ang Gitnang.
[Mag-aaral] ba namin kailangang alagaan ng wrapping?
Sa anong kahulugan namin kailangang pangangalaga ng pambalot?
Kung ang kabuuan o ang pagkakaiba sa pagitan ng
depende sa kung paano gawin namin ito ay hindi isang kahit na bilang.
Pagkatapos ang computer ay makakakuha ng nalilito kung kapag ito ay 2.5;
mong ilipat sa kaliwa o sa kanan upang matukoy kung aling ang Gitnang?
Nakuha ko.
Ito lumiliko out na may integer division,
hindi namin kailanman makakuha ng mga lumulutang point numero.
Namin kailanman makakuha ng decimal.
Lubos Ito ay iwinaksi.
Kung mayroon kang computer ng isang hatiin sa dalawang int variable,
at ang isa ay 7, at ang isa ay 2,
hindi ka makakakuha ng 3.5 bilang isang resulta.
Ito ay 3.
Natitira Itatapon, kaya ito ang epektibong rounding-
hindi isang ikot kundi isang palapag, kung ikaw guys ay pamilyar sa sa matematika,
kung saan ganap na itapon ang mga decimal,
at kaya mahalagang ka Pinuputol ito sa pinakamalapit na
buo posisyon, sa pinakamalapit na buong numero.
[Mag-aaral] Ngunit pagkatapos na ang problemang dahil kung mayroon kang isang hanay ng mga 7 elemento
pagkatapos na awtomatikong tumatagal 3rd elemento ng Gitnang sa halip ng ika-4.
Paano namin haharapin ang mga iyon?
Ang problemang ito dahil kung kami ay may isang array ng 7,
piliin ang 3rd sa halip ng ika-4.
Maaari mong ipaliwanag ng kaunti pa?
[Mag-aaral] Dahil kung mayroon kang 7 elemento pagkatapos ay ang ika-4 na elemento
ang Gitnang, i-right?
Matandaan ang iyong komento tungkol sa pagiging zero-index, bagaman.
[Mag-aaral] Oo, kaya sa posisyon 3. Na ang Gitnang.
Oo.
Oh, okay. Nakikita ko kung ano ang ibig mong sabihin.
Ito ay uri ng kakaiba, bilang namin masanay sa buong paniwala ng
inaalis ng decimal.
Iyon ay isang mahusay na punto.
Tapusin natin ito up.
Kinakalkula namin ang aming Gitnang.
>> Naming sinusubukan upang makita kung ang aming karayom ​​ay katumbas sa gitna halaga.
Kami ng pag-print na nakita namin ito, ngunit talaga, kung ano ang gusto naming gawin sa sitwasyong ito?
Napag-alaman namin ito, kaya gusto naming ipaalam tumatawag ang malaman na nakita namin ito.
Mayroon kaming isang function na ang isang boolean function na-type.
Ang paraan na magsenyas namin ang tumatawag sa aming mga function na na handa na kami upang pumunta
ay sinasabi namin, "Hey, ito ay totoo."
Paano namin gawin iyon, Kevin?
Ka nodding iyong ulo. >> [Kevin] Idagdag ang return totoo.
[Nate] Mismong, nagbabalik ng tunay.
Ngayon, kung ito ay hindi katumbas, kung paano namin tumingin sa kaliwang kalahati?
Anumang mga ideya?
Stella, ang anumang mga ideya?
Kailangan mong magtakda ng isang bagong posisyon para sa mga end.
Oo.
Kaya naming gawin ang posisyon ng Gitnang - sa dulo.
Mahusay.
Kailangan namin upang magtakda ng isang bagong posisyon para sa dulo
tumingin sa kaliwang kalahati.
Ito ay kung ano ang usapan natin ang tungkol bago kung saan
Panatilihing ako pagpunta sa halimbawang ito.
Ako magsisimula dito, at pagkatapos ay mayroon akong sa katapusan ang lahat ng mga paraan sa paglipas dito.
>> Muli, kung kaming naghahanap ng para sa 15, at ang aming Gitnang sa 16,
at Napagtanto namin, "Oops, 16 ay mas malaki.
Gusto naming upang ilipat sa kaliwa kalahati. "
Nais naming ilipat ang pagtatapos sa 15,
at ginagawa namin na sa pamamagitan ng pagsasagawa ng isa ang layo mula sa Gitnang
at pag-set na bilang aming bagong pagtatapos.
Gayundin, kung gusto namin upang tumingin sa kanang kalahati, kung paano namin gawin iyon?
Mayroon ba kayong ng ideya?
[Mag-aaral]-set mo lang magsimula sa Gitnang + 1.
[Nate] Mahusay.
At ngayon sa kaso na hindi namin mahanap ang anumang bagay,
ay na kinuha pag-aalaga ng para sa amin?
Daniel, ay na makapag kinuha pangangalaga ng para sa amin?
[Daniel] No.
[Nate] Kung gagawin namin ito sa pamamagitan ng buong array at hindi namin mahanap ang anumang bagay,
kung saan na dadalhin pag-aalaga ng, o dapat namin pag-aasikaso nito?
[Daniel] Ang habang kundisyon.
[Nate] Oo, habang kundisyon, eksakto.
Tumagal ng pangangalaga ng pagpunta sa pamamagitan ng buong array kung hindi namin mahanap ang anumang bagay.
Ang habang loop ay magtapos.
Hindi namin ay nagkaroon ng kondisyon na ito,
at maaari naming bumalik false.
Maaari din namin iwanan ito kung in dito tulad nito
dahil kung ito kung ang pahayag ay totoo,
at ang aming function na ay magbabalik,
at kaya bibigyan namin ng mahalagang i-abort ang function na sa puntong ito
kapag bumalik kami totoo.
Ngunit ano ang mangyayari may istrakturang ito dito?
Ay ito gumana ganap, o mayroong ilang mga lohikal na basag doon?
>> May ilang mga lohikal na basag doon, gamit ang paraan na ito set up.
Ano ang maaari itong maging?
[Mag-aaral] Bakit kailangan ang - at + 1s?
Na nagtatakda sa aming array up sa aming bagong kaliwang kalahati at kanang kalahati.
[Mag-aaral] Ngunit kung bakit hindi maaari mong gawin ito nang walang - 1s at + 1s?
[Nate] Itinakda namin ito katumbas sa Gitnang?
Ano ang maaaring problemang tungkol doon?
[Mag-aaral] hulaan ko ito ay hindi mabisa dahil naka-check sa isang halaga na na-check.
[Nate] Mismong, kaya Sam ay lubos na karapatan.
Kung itinakda mo ang pagtatapos at magsimula ang katumbas sa Gitnang
sa halip na - 1 at + 1 reflectively,
sa ilang mga punto sa hinaharap, gagamitin namin pagsuri muli ang Gitnang.
[Mag-aaral] ko nagsimula ang pset, at pagkatapos ko ay may isang bagay tulad na
kung saan Nakalimutan ko ang + 1, at Nakakuha natigil sa isang walang-katapusang loop.
Karapatan, dahil sa isang punto ay hindi ka pagpunta upang magsimula at magtapos
upang aktwal na nagsasapawan.
Cool.
Mayroong isa pang lohikal kapintasan, at na ay na ito ay dapat talagang maging
isang pang tao kung.
Bakit maaaring na maging?
>> Ang dahilan dito ay kung ito ay hindi isang pang tao kung mo makita ang mga ito, Kevin?
[Kevin] Oo, dahil iyong binabago ang end point.
[Nate] Mismong.
Binabago namin ang endpoint,
at kung ito ay nakasulat tulad nito we'll gumawa ng mga puwang sa pagitan ng-
ito ang kasong ito.
Ang kasong ito, kung ito ay magtagumpay, Ititigil ng pag-andar.
Pagkatapos ay suriin ito sa tabi kaso,
at kung magtagumpay ito, ito ay ayusin ang endpoint,
at pagkatapos ito ay magpatuloy sa at suriin ang kasong ito.
Ngunit sa puntong ito, hindi namin nais ito upang magpatuloy check.
Kabutihang palad, hindi namin i-reset ang Gitnang dito,
at alam namin na ang kaso na ito ay hindi magtagumpay.
Ngunit namin talagang nais upang ilagay ang pang tao kung doon
kahit na kapangyarihan-sa kasong ito
dahil hindi namin ang pag-aayos ng Gitnang, na gumagawa ng isang pagkakaiba?
Hindi, dahil sa mga kasong ito ay ang lahat ng eksklusibo.
Muli, ang aking masama.
Hindi namin, sa tingin ko, kailangan pang tao na ito kung.
Maaari naming bigyan ito ng isang subukan at patakbuhin ito at makita kung ano ang mangyayari.
Gusali, may naganap na error.
Marahil ito ay dahil ako pakaliwa mga b at e in dito.
Mayroon akong anumang higit pa sa mga up sa tuktok?
Hindi ito hitsura ito.
Namin mag-zoom out, bumuo,
may ito napupunta, kaya ngayon kung kami maghanap para sa 15,
Oo.
Hayaan akong mag-zoom in.
15, oo. Maaari naming patakbuhin itong muli.
Nag-a-upload ng source code, pagbuo, pagtakbo.
Maaari naming maghanap para sa isang bagay tulad ng 13,
at hindi kami makakuha ng anumang pag-print out, nang sa gayon ay hindi ito paghahanap na para sa amin.
Mabuti iyan, dahil hindi ito sa aming listahan.
>> Na kami ngayon ng panahon.
Na pagpunta sa ito para sa linggong ito.
Salamat para sa pagsali, at nakikita mo sa ibang pagkakataon.
>> [CS50.TV]