[MUSIC nagpe-play] David MALAN: Lahat ng karapatan. Ito ay CS50, at ito ay ang katapusan ng linggo 2. Pasensya na hindi ko maaaring maging doon sa iyo ang lahat ng mga araw na ito, ngunit ikaw ay nasa napakahusay na mga kamay. Payagan ako upang ipakilala Sariling Rob Bowden CS50. Rob BOWDEN: At siyempre, pagkatapos ay na namin na gumawa ng masaya ng ang katunayan na siya ay nagpadala sa amin ng isang vertical video at ipakita ito. [Playback ng video] [MUSIC nagpe-play] [Yapak] -Ang Video ay hindi may upang tumingin sa ganitong paraan. Ito ay maaaring pumigil. Say hindi sa vertical mga video. Mangyari kapag ikaw -Vertical video hold ang iyong camera sa maling paraan. Tatapusin nito ang iyong video up naghahanap tulad ng crap. - [Ingit] -May Mga mas at mas maraming mga tao gumon sa paggawa ng vertical video araw-araw. Hindi ito pumutok o wala, ngunit pa rin ito ganap na hindi maayos. Mayroong dalawang mga iba't ibang uri ng mga tao na nagdadalamhati sa VVS. Tinatrato Ang unang grupo ng mga video shoot sila tulad ng mga larawan. Hindi nila ibig sabihin ng anumang pinsala. Sila lamang ay hindi maunawaan na ang habang maaari mong i-on ng isang larawan, talagang hindi mo maaaring i-isang video. [CRASH] - [Mga tunog unggoy] -Ang Iba pang mga grupo ay mga tao na hindi magbigay ng isang [BLEEP]. -Vertical Video Syndrome ay mapanganib. May mga larawan Motion palaging horizontal. Telebisyon ay pahalang. Screen ng Computer ay pahalang. Ang mga tao ay mga mata ay pahalang. Hindi namin ay binuo upang panoorin vertical video. Ibig -I vertical video. -Nobody Nagmamalasakit sa iyo. -Kung Ang problemang ito ni kaliwa malaya, masyado kang ay magsisimulang magpakita ng apat na mga video nang sabay-sabay upang i-save lamang ng bandwidth. -Letterboxed Vertical video gagawin ay ang laki ng isang selyo. -At Ito ay kumalat sa lahat ng dako. May screen Movie palaging horizontal. Kung ikaw ay naging vertical video tinanggap, sinehan ay kailangang maging matangkad at payat. -At Sa lahat ng mga sinehan ng pelikula gagawin may upang makakuha ng punit-punit down at itinayong muli. At sa oras na sila ay itinayong muli, Kunis ay luma at pangit. Makikita -Birds crash sa kanila at mamatay. -We'll Lahat makakuha ng matigas leeg mula sa mga naghahanap up. -at Hindi isa ay umupo sa harap hilera kailanman muli. -George Lucas ay muling release Star Wars again-- ang paglangoy ng edition. Hindi talaga maaaring sabihin -I ay ang kuwento na nais kong sabihin. Ito ay isang mahusay na pagkakataon para sa akin upang eksperimento sa isang bagong teknolohiya. -You're Isang haltak. -Sa Bawat oras na ang isang mobile na aparato ay ginagamit upang record ng video, ang tukso ay doon. Sabihin lang no. Say hindi sa George Lucas. Say hindi sa lumang Kunis. Say hindi sa vertical mga video. -At Kung makita mo ang isang tao na ginagawa ito, sabihin, "Hindi ka shooting na kanang dummy!" [MUSIC nagpe-play] [END playback] [Palakpakan] [Audio out] Rob BOWDEN: --simple anyo ng cryptography, na talaga ang pag-encrypt at decryption ng mga lihim na mensahe. Kaya dito mayroon kaming isang napaka-simpleng laruan. At ang mga ideya ay ang panlabas na singsing umiikot sa paligid ng panloob na singsing. At makikita mo, siguro kung ako mag-zoom in, na- ito ay mahirap na makita. Subalit, tulad ng, ang bilang 1-- rin, na inilipat. Ang bilang 1 maps sa sulat X, number 2 na mga mapa sa sulat J. Hindi kapani-paniwalang mahirap hindi upang laktawan forward. Letter 2 mga mapa sa J. Number 3 mga mapa sa D. Kaya may singsing na ito maaari mong ibigay isang tao ng mensahe 1, 2, 3. Para sa ilang mga dahilan kung bakit mo nais na sabihin sa kanila XJD. Ngunit maaari mong bigyan sila ng ang ilang mga mensahe ng mga numero, at hangga't sila ay may singsing na ito, ang mga ito maaaring i-decrypt kung ano ang iyong sinusubukan na sabihin. Kaya ikaw ay maaaring tumingin sa mga ito partikular na halimbawa ng cryptography bago kung buong panahon ng Pasko na iyong napanood A Christmas Story. Kung hindi mo pa nakikita ito bago, at pagkatapos lamang i-on TBS sa literal anumang oras sa Bisperas ng Pasko, dahil ipakita lang nila ito pabalik sa likod upang i-back i-back upang i-back ang buong araw. At ang mga kaugnay na video ay na ito. [Playback ng video] -Maging Ito kilala sa lahat at sari-sari na Ralph Parker ay sa pamamagitan nito itinalaga ng isang miyembro ng Little Ulila Annie Secret Circle at may karapatan sa lahat ng mga parangal at sa mga pakinabang na nagaganap dito. Signed Little ulila Annie. Countersigned Pierre Andre sa tinta! Mga parangal at mga benepisyo narito na sa edad na siyam! [Yelling mula RADIO] -Come On. Sabihin makakuha sa sa mga ito. Hindi ko kailangan ang lahat na jazz tungkol sa smugglers at pirates. -Listen Bukas ng gabi sa ang pangwakas na pakikipagsapalaran ng Black Pirate Ship. Ngayon, oras na para sa Lihim na mensahe Annie para sa inyo mga miyembro ng Secret Circle. Tandaan mga bata, ang mga kasapi lamang ng Annie Secret Circle maaaring mabasa lihim na mensahe Annie. Tandaan, Annie ay depende sa iyo. Itakda ang iyong mga pin sa B2. Narito ang mensahe. 12. 11. 2. -ako Sa aking unang lihim na pulong. -25. 14. 11. 18. 16. -Oh, Pierre ay sa malakas na tinig na ngayong gabi. Maaari ko bang sabihin na ngayong gabi mensahe ay talagang mahalaga. -3. 25. Iyan ay isang mensahe mula sa Annie sarili. Tandaan, huwag sabihin sa kahit sino. Limang segundo mamaya, ako sa ang tanging kuwarto sa bahay kung saan ang isang batang lalaki ng siyam maaaring umupo sa privacy at mabasa. Aha! B! Nagpunta ako sa susunod. E. Ang unang salita ay "maging." S. Ito ay darating na mas madali na ngayon. U. 25. Iyan ay R. -Come On, Ralphie! Gotta na pumunta ako! -I'll Maging kanan down, Ma! GEE matalinong. T. O. "Maging sigurado na" - siguraduhin na kung ano? Ano ang Little ulila Annie sinusubukan mong sabihin? Maging sigurado sa kung ano? Ay nakuha -Randy puntahan Babaguhin ba ninyo ang mangyaring dumating out? -Ang Lahat ng mga karapatan, ina! Kukunin ko ang karapatan out! Ako ay nakakakuha ng mas malapit na ngayon. Malamig ang samahan ay napakahirap. Ano iyon? Ang kapalaran ng mga planeta Maaaring maging ang balanse! -Ralphie, Randy ay nakuha upang pumunta! -I'll Maging karapatan out, para sa mga umiiyak nang malakas! Malapit na! Nagsakay aking mga daliri. Ang aking isip ay isang bakal bitag. Vibrated bawat napakaliit na butas. Ito ay halos malinaw! Oo. Oo. Oo. Oo. Siguraduhin na uminom ng iyong Ovaltine. Ovaltine? Isang pangit commercial? Anak ng isang asong babae. [END playback] Rob BOWDEN: Kaya na kung paano Ovaltine kaugnayan sa cryptography. Talaga lang advertised CS50 Ovaltine, kaya maaaring namin maging isang pangit komersyal para Ovaltine. Lahat tama. Kaya ngayon aktwal na computer science. Tandaan sa Lunes iniwanan namin off diving mas malalim sa mga string. Kaya tayo ay pagharap sa ang string "Zamyla." At kami ay makilala ang katunayan na maaari naming ituring "Zamyla" bilang isang pagkakasunod-sunod ng mga character. At tandaan na ang aming natutunan bracket pagtatanda. Kaya kung ito ay naka-imbak sa isang string "s," at pagkatapos ay kung sinabi namin s bracket 0, na gagawin ipahiwatig ang sulat capital Z. At kung sinabi namin s bracket 1, na nais ipahiwatig ang unang lowercase a, at iba pa hanggang sa s bracket 5, na kung saan ay nagpapahiwatig ng huling a. Ngayon tandaan na ang haba ng string na ito ay 6, ngunit ang mga indeks sa string ay 0 hanggang 5, Z sa pamamagitan ng na ang huling a. Kaya ito ngayon magkasya sa isang mas malaking larawan ng memory ng iyong computer, ang iyong RAM. Kaya tabi-tabi ang mga programa na ikaw ay nagpapatakbo ng iyong computer kailangang tandaan Zamyla lugar sa memorya. Kaya ako ay maaaring magkaroon ng isang volunteer? Oo pakiusap. At kung ano ang pangalan mo? DEAN: Dean. Rob BOWDEN: Dean? Masaya akong makilala kayo, Dean. Kaya dumating sa paglipas dito, at kami ay pagpunta sa mayroon kang gumuhit sa aming magandang nakakatawang layout ng memory. Ngayon gusto kong isipin ng memory bilang isa pang strip ng bytes, ngunit para lamang sa mga layunin ng display bibigyan namin ng lamang ay kaliwa hanggang kanan, itaas sa ibaba. SIGE? Kaya ako pagpunta upang ipakita ang isang program-- Getstrings.c. At sa gayon ang lahat ng programang ito ay ginagawa ay humihiling ng apat na string mula sa mga user na may GetString at pagkatapos ay pag-print kahit na ano na unang string ipinasok ay. Kami ay hindi papansin dalawang sa pamamagitan ng apat. SIGE. Kaya sa paglipas dito now-- kapag Una kong s1 kahilingan. Kaya ikaw ang computer. At ikaw ay pagpapatupad ng GetString. Kaya humiling ka ng isang string mula sa akin, at ako sabihin, OK, Dean. Bigyan ang string "Dean." Kaya tabi-tabi sa memory mo kailangang tandaan "Dean." Kaya isulat ito sa memory sa isang lugar. Perpekto. SIGE. Kaya ngayon ay may s2 namin. At s2 ay magiging isang kahilingan sa GetString. Kaya ako pagpunta upang ipasok ang isang string. Pupunta ako upang ipasok ang "Hannah." Kaya ipasok "Hannah" sa isang lugar sa memorya. Oo. A-H. OK, kaya s3 ngayon. At ito ay pagpunta sa maging isa pang humiling na GetString. At kaya ngayon ipasok ang "Maria." Lahat tama. At pagkatapos ay may isang huling kahilingan sa GetString, s4. Kaya, hindi ko alam. Paano ang tungkol sa pumunta kami sa antidisestablishmentarianism. Kaya ipasok na sa memory. Oo. Kaya gawin lamang "Rob." SIGE. Kaya ngayon explain-- kung bakit ginawa iniwan mo ang mga puwang? Bakit kailangan mo itong blangko space dito, dito, at hanggang dito? Oo. Kaya paunawa kapag pumunta ako upang i-print s1-- kaya kung tayo ay may "Hannah" na tumatakbo karapatan up sa tabi ng "Dean," paano namin malalaman kung kailan ang string "Dean" ay nagtatapos? Kaya maaaring magkaroon ng pag-print ang string s1 lamang nakalimbag "DeanHannahMariaRob" kung ito ay hindi magkakaroon ng anumang mga palatandaan kapag "Dean" tunay na nagtatapos. Lahat tama. Kaya sa memory ang paraan namin ay talagang kumakatawan ito sa dulo ng isang string ay may backslash zero. Kaya ang puwang na ito ay eksakto kung ano ang aming nais. Dapat ito ay isang backslash zero. Ito ay magiging isang backslash zero, at ito ay magiging isang backslash zero. At maaari kang magkaroon ng isang hindi kapani-paniwala na premyo para sa pagiging isang perpektong volunteer. Kumuha ng isang stress ball! SIGE. Kaya ito ng character backslash zero ay kung paano namin ipahiwatig ang katapusan ng isang string. Ito ay kung paano kapag ang anumang ibinigay na programa nais na i-print ang isang string, ito ay how-- tandaan namin natutunan ang strlen function na noong nakaraang linggo? Haba String? Ito ay kung paano length string ay may kakayahan upang matukoy kung gaano katagal ang isang string ay. Ito ay para mapigil lang iterating sa ibabaw ng mga letra hanggang nahahanap nito ang backslash zero character. Kaya ang mga mahalagang bagay upang mapagtanto tungkol sa backslash zero karakter ay ito ay kinakatawan sa pamamagitan ng lahat ng mga zero sa bits. Kaya mapapansin na ito ay naiiba mula sa zero character. Kaya ang zero character, kung tandaan mo sa halimbawa na ibinigay niya sa dulo ng panayam kung saan map character to-- tulad capital A mga mapa upang 65. Lowercase ng mga mapa sa 97. Lowercase b ay 98. Kaya ang numero ng 0 na mga mapa to-- hindi ako Alam off sa tuktok ng aking ulo. 44 o 45. Sa isang lugar sa rehiyon na iyon. Kaya ang character 0 ay isang aktwal na numero. Ngunit backslash zero mga mapa sa lahat zero bits. Kaya mayroong isang pagkakaiba pagitan ng backslash zero, na kung saan kami ay tumawag ang null Terminator. Mayroong isang pagkakaiba sa pagitan ng backslash zero at ang character zero. Lahat tama. Kaya ang pakikipag-usap ng kaunti pa tungkol string. Kaya nga nakikita natin dito na ito ay kung paano ay ito ay inilatag sa memory. Kaya ang ideya na ito ng mga string bilang isang pagkakasunod-sunod ng characters-- kaya ang opisyal na computer sciency kataga para sa sequence ay isang array. Kaya gusto naming tumawag sa isang string isang hanay ng mga character. At may mga tunay ibang data uri na maaari naming gumawa ng mga array sa labas ng. Kaya upang mag-udyok ito, tumingin sa isang halimbawa. Susubukan naming tumawag ito ages0.c idedetalye ko kopyahin at i-paste ang aming template. SIGE. Kaya sa programang ito kung ano ang aming gusto mong gawin ay grab ang edad ng tatlong mag-aaral sa kurso. Upang malaman namin ang int age-- at ngayon ako pagpunta sa sabihin sa 0. Kaya maaari mong sabihin age1, ngunit para sa mga layunin kami makita napaka ilang sandali, Sasabihin kong int age0 katumbas GetInt. Kaya ang parehong tawag sa GetInt na namin ang ginagamit ko hindi nangyari mang pagdikta sinasabi, "bigyan mo ako ng edad." Ngunit kahilingan lamang ito. At age1 katumbas GetInt. At int age2 katumbas GetInt. Kaya, muli, tatlong mag-aaral, ngunit sa huli ang variable indeks mga age0 pamamagitan age2. SIGE. Ganito rin ang gagawin sa programa na ito sa kahit anong gusto naming may age0, age1, at age2, ngunit ang program na ito sa huli gumagana para sa tatlong mag-aaral. SIGE. Kaya ngayon kung ano ang gusto ko ang apat na mga mag-aaral? Well, ako pagpunta sa may upang bumalik sa aking code, baguhin ang mga comment, at ngayon kami ay may isang int age3 katumbas GetInt. SIGE. Kaya kung sino ang makakakita ang problema dito? Ano ang problema na may ganitong uri ng setup? Oo. Oo. Kaya kami ay ang paglikha ng isang variable para sa bawat mag-aaral. Ngayon na gumagana, ngunit sa huli kung ano kung ako ngayon sabihin, "Gusto kong i-grab ang edad ng walong mga mag-aaral o 16 mga mag-aaral o ang gayunpaman maraming mga mag-aaral ng ang daan-daang mga mag-aaral sa CS50 o ang libu-libong mga mag-aaral sa campus o ang bilyun-bilyong tao sa mundo? Kaya sa huli ito ay hindi napapanatiling. Anumang oras na makita mo ang iyong sarili sa pagkopya at pag-paste ang code na ito, dapat mong maramdaman sa pangkalahatan na may isang mas mahusay na paraan. Kaya ito ay kung saan namin ipakilala isang array deklarasyon. Kaya kapag ipinapahayag sa iyo ng isang array, ito ay kung ano ang pangkalahatang format ay pagpunta sa hitsura. Kami ay pagpunta sa sabihin ang uri. at pagkatapos kami ay pagpunta sa ibigay ang pangalan ng na array, tulad namin tukuyin ang anumang ibinigay na variable. At pagkatapos ay sa wakas kami ay gumagamit ng ito bracket pagtatanda muli ngunit sa ibang konteksto mula sa kung paano namin ay ang paggamit nito ng mas maaga. Kaya dito ito ay mukhang isang normal variable na deklarasyon na nasaksihan namin. Kaya nakita namin na ang int x semi-colon bago. Well ngayon ay maaaring makita natin ang isang bagay tulad ng int x bracket 5. At sa paglagay ng mga ideya sa GetInt program na kami have-- upang maaari naming ipatupad ito sa parehong paraan. Sabihin natin sa CS namin madalas na gamitin ang n rin ang bilang ng isang bagay. Kaya dito kami ng pagpunta sa tindahan ng apat na estudyante. At ngayon maaari naming sabihin int edad bracket hindi n-- ganap kumuha ito yet-- upang magpahayag ng isang hanay ng mga apat na mga mag-aaral. Kaya kung paano ang magiging hitsura sa ito memory ay katulad na ito. I-clear ang mga ito. At kami ay pagpunta sa may tabi-tabi in na memorya makikita ko bang ilagay ito up doon. So lugar sa memorya. Isa dalawa tatlo apat. Mayroon kaming apat na integer sa isang hilera para sa mga ito ang dami ng mga apat na integer. Kaya, sa kasalukuyan, ano ang laki ng isa sa mga kahon? Oo. Ito ay apat na bytes. Ito ay 32 bits. Kaya ngayon ito ay iba mula sa array na tayo Nakita mas maaga, ang hanay ng mga character. Sa isang string ang bawat kahon ay isa lamang byte, dahil ang isang karakter ay isa lamang byte. Ngunit sa isang array ng mga integer, ang bawat isa box ay dapat na apat bytes sa order upang magkasya ang isang buong integer. Kaya ito ay kung ano ang isang hanay ng mga apat ints ay ang hitsura. At pagkatapos ay bumalik sa code. Ngayon gusto naming aktwal na tindahan integer sa array. Kaya ngayon ito ay isang tunay, tunay, tunay karaniwang pattern na ay sa ilang mga punto maging kalamnan memorya. Kaya int i katumbas ng 0. i mas mababa sa n. i plus plus. Bracket Edad i katumbas GetInt. Kaya na ito para sa loop, format na ito, makakuha ka dapat masyadong ginagamit sa. Kaya ito ay sa pangkalahatan ay kung paano namin ay umulit sa halos lahat ng anumang array. Ngayon pansinin ang ganitong uri ng nagpapaliwanag kung bakit mula sa simula hindi namin ay may para sa mga loop pagpunta para sa int i ay katumbas ng 1, i mas mababa sa o patas sa 10. Ang dahilan ay na nagsisimula mula sa zero gumagawa ng trabaho na ito ng maayos sa array. Kaya array ay zero-index. Kung ito array ay ng haba 4, ang indeks ay 0 hanggang 3. Kaya sa pamamagitan ng unang pag-ulit ng para sa loop kami ay pagpunta sa maging setting edad bracket 0 katumbas ng isang tawag sa GetInt. Kaya kahit anong ko ang nangyari na pumasok sa keyboard. Sa pangalawang pass, hindi namin pagtatakda age1 katumbas ng GetInt. Third pass, age2. Final pass age3. Kaya kung sa unang pass ng loop Ipasok ko ang number 4 sa keyboard, pagkatapos kami ay ipasok ang isang 4 dito. Kung sa ikalawang pass ipasok ko 50, maglalagay kami ng isang 50 dito. Sa ikatlong pass maaari ko ipasok ang negatibong 1, negatibong 1, at pagkatapos ay sa wakas kung ipasok ko 0-- at ngayon tandaan na ito ay index tatlo. Pagkatapos naming loop back, i ay pagpunta sa incremented sa 4. i ay hindi na mas mababa kaysa n, kung saan ay 4. At break namin sa labas ng loop. Kaya kung ano ang magiging mali sa mga ito? [Hindi marinig]? Madla: [hindi marinig] Oo. Kaya lamang ay may apat na mga lugar ng array, na nangangahulugan ng mga indeks na 0 hanggang 3. Kaya kung ito ay ang kaso, gusto ko kumuha sa ang halaga ng 4 sa ilang mga punto. edad bracket 4 ay setting ano man ang mangyayari sa paglipas dito sa kung ano ang kailangan kong sabihin, ipasok 6. Na kailangan maging setting ito sa 6. Ngunit hindi namin alam kung ano ang sa dito. Ito ay hindi memory na nagkaroon kami ng access sa. Kaya kung iyong naaalala mula ang nakaraang panayam, siya ay pag-print out mga halaga ng Zamyla at sa ilang mga punto siya hit ito segmentation kasalanan. Kaya ikaw ay maaaring maging nakakakita maraming segmentation faults bilang ka ipatupad ang ilan sa mga hanay ng problema. Ngunit ito ay isa sa mga paraan kung saan ang maaari kang makakita ng isang segmentation kasalanan, kapag nagsimula ka sa pag-access memory sa mga paraan na hindi mo dapat. Kaya hindi namin ay may access sa ang lokasyon na ito at ito ay isang bug. Kaya ito ay mas mahusay. Ngayon ay may isang maliit pa rin isyu sa code na ito. At iyon ay isa lamang na hindi namin mapagmataas pa rin sa apat na mga mag-aaral. Ngayon kung gusto kong gumamit ng walong mga mag-aaral, OK. Ito ay hindi na isang malaking pakikitungo. Maaari ba akong pumunta sa, baguhin ang magkomento, at baguhin n. Ngayon na ito ay gagana sa walong mag-aaral. Kung ako sumulat ng libro na ito at patakbuhin ito, ito ay magpapakita me-- ito ay humiling ng integer para sa walong mag-aaral at ito ay gumagana lamang. Ngunit ito ay mas mababa kaysa sa ideal na kailangan upang recompile sa programa ng lahat ng oras Gusto kong baguhin ang bilang ng mga mag-aaral na gusto kong ipasok ang edad para. Kaya ang huling pagpapabuti sa ito, dahil kakailanganin namin makita here-- hindi namin pagpunta sa hilingin ang bilang ng mga tao. Narito kami ay may isang numero ng mga tao sa mga kuwarto o anumang mga edad ng tao sa kuwarto. Ngunit kami ay pagpunta upang hilingin ang numero ng mga tao sa kuwarto mula sa user. Kaya ito ay ang eksaktong parehong do-habang loop na nasaksihan namin bago. Ito ay ang eksaktong parehong gawin-habang loop na kayo maaaring pagpapatupad sa hanay problema. Kaya't hangga't ang mga ito ay pagpasok ng isang n mas mababa sa 1, upang doon ay nakuha na sa bababa sa isang tao sa kuwarto. Hangga't ang mga ito pagpasok ng isang n mas mababa sa 1, pagkatapos kami ay pagpunta upang panatilihin ang pagtatanong muli. Mangyaring ipasok ang numero ng ng mga tao sa room. Ngayon, sa sandaling mayroon kaming ang bilang ng mga tao sa room-- kaya maaaring ipasok ko na may ay 200 mga tao sa kuwartong ito. Pagkatapos pababa dito kami ay pagpunta sa dumating at ipinapahayag ng isang array ng laki 200. Kami ay deklarasyon array na malaki sapat na humawak 200 edad. Pagdating down, ito ay ang para sa loop na makakakuha ka ng masyadong ginagamit sa. Kaya iterating sa array na ito, pagtatalaga sa bawat lokasyon sa array na isang integer, at pagkatapos ay sa huli dito hindi namin pagkuha lamang ng isang halimbawa ng iterating sa paglipas na array, hindi upang magtalaga ng mga halaga, ngunit upang ma-access ang mga halaga. Kaya sa paglipas dito nakita namin na kami ay ang sinasabi, isang taon mula ngayon, tao% ay i% i na taong gulang, kung saan ang unang% i ay i plus 1. Kaya ako ay index variable na ito. At ang pangalawang% i ay magiging ang halaga na naka-imbak sa mga kapanahunan ng array plus 1. Kaya ito plus 1 ay dahil lamang hindi namin saying-- ito plus 1, edad i plus 1. Ito plus 1 ay dahil lamang hindi namin sinasabi, isang taon mula ngayon tao ang ay ito old. Kaya bakit ito ay i plus 1? Bakit kami ay may isang plus 1 doon? Oo. Oo. Kaya tandaan array ay zero-index. Kaya kung pag-print namin ay ito ang para sa isang tao na basahin lamang ang output, pagkatapos ay marahil gusto nilang makita ang isang bagay tulad ng isang tao, ang taong numero ng isa, ay 20 years old. Taong dalawang numero ay 15 years old. Gusto nila sa halip hindi makita tao numerong zero ay 15 years old. Kaya ipon na ito at lamang kung ano ang nakikita ito ay mukhang like-- Lumikha ng ilang espasyo. Gumawa ng edad compiles. Pagpapatakbo ng edad. Nakakakita kami ng bilang ng mga tao sa kuwarto. Kaya Sasabihin kong may mga tatlong tao sa kuwarto. Edad ng tao bilang isa, sabihin natin 15, 20, 25. At ngayon sasabihin ko ng isang taon mula sa ngayon ang mga ito ay 16, 21, 26. Tayo'y makita na ito ay gumagana sa Ipaalam isang n iyon ay hindi katumbas ng 3. Kaya kung sinasabi ko bilang ng mga tao ay 5, isa, dalawa, tatlo, dalawa, isa, isang taon mula ngayon ang mga ito ay dalawa, tatlo, apat, tatlo, dalawang taong gulang. Kaya maaari ko lamang bilang madaling magkaroon n maging 10,000. Ngayon ay ako ay nakaupo dito para sa ganap isang habang nagpapasok ng edad, ngunit ito ay gumagana. Kaya ngayon sa memory sa tabi-tabi namin magkaroon ng isang hanay ng mga laki 10,000, kaya sa huli 40,000 bytes, dahil may mga apat na bytes para sa bawat isa sa mga integer. Kaya mayroong isang hanay ng mga size 10,000 kung saan maaari naming tindahan ng mga edad ng mga 10,000 mga tao. Lahat tama. Mga tanong tungkol sa anuman sa mga ito? Oo. Paano kung nagbigay ka ng isang negatibong numero? Tingnan natin kung ano ang mangyayari. Kaya sa ganitong partikular na numero case-- ng mga tao sa room, negatibong isa. Tinanggihan, na, dahil dito namin mangyari na paghawak sa katotohanan na kung ang n ay mas mababa sa isang kami ng pagpunta sa magtanong muli. Kung susubukan mong magpahayag ng isang ang dami ng mga negatibong laki, ito sa pangkalahatan ay hindi gumagana. Kaya sabihin subukan. Sabihin na huwag pansinin ang anumang halaga ng mga ito input para n at sabihin lamang int edad negatibong isa. Tayo'y makita kung ito kahit na compiles Hayaan. Hindi ako sigurado. Hindi. Kaya edad ay ipinahayag bilang isang array na may isang negatibong laki. Kaya upfront kinikilala nito ang isang array ay maaaring hindi maging ng mga negatibong laki at tumatanggi ito. Ngayon, kung kami ay hindi mahawakan ito gawin-habang loop nang tama, kung hindi namin checking kung n ay mas mababa sa 1-- sabihin nating namin lamang ay hindi na ito sa lahat ng at sa halip ay grab lamang kami ng isang integer. Hindi mahalaga kung ano na ang integer ay, ipinahahayag namin ang isang hanay ng mga laki na iyon. Kaya ang tagatala ay hindi maaaring posibleng magreklamo ngayon. Kung ako sumulat ng libro this-- kaya hindi ito maaaring magreklamo, dahil hindi ito maaaring malaman na ako pagpunta sa ipasok ang isang negatibong numero, na maaaring maging hindi wasto. Para sa lahat ng alam ito, maaari ko ipasok ang isang positibong numero, na kung saan ay ganap na wasto. Kaya kong isipin kung ipasok ko negatibong 1 mga tao sa kuwarto, segmentation fault. So, OK. Kaya sabihin maidagdag ito bumalik lamang panatilihin ito sa kung ano ang orihinal na ito ay. Kaya gumawa ng edad. Ngayon kung gusto kong subukan ang isang negatibong age-- kaya sabihin sabihin may mga limang tao sa kuwarto. Edad ng tao bilang isa ay negatibo 4, ang taong tatlong ay zero, ang taong three-- OK. Kaya dito, isang taon mula ngayon, ang bilang na tao isa ay negatibo 3 taong gulang. Kaya marahil ay hindi magkaroon ng kahulugan. Dahil Ngunit ito lamang ay naghahanap sa code sa lahat ng aming ginagawa Humihiling GetInt. Ngayon, kung kami ay nagkaroon ng GetPositiveInt function na o kami ay lamang na lamang tapos na ito uri ng parehong habang loop down doon, pagkatapos na ito ay gumagana ganap na multa. Ngunit sa partikular kaso, gawin lang namin hindi mangyari na paghawak negatibong halaga. Anumang iba pang mga katanungan tungkol sa array? SIGE. Kaya makikita na ngayon na namin ang mga array. At kami ay pagpunta sa kailangan upang gamitin na ito para sa command-line argumento. Kaya sa hanay ng problema two-- Alam ko marami sa inyo maaari pa rin ang pagtatrabaho sa hanay problema isa, ngunit problema magtakda ng dalawang ay paparating na. Sa set ng problema sa dalawa, ikaw ay pagpunta sa kailangan na pakikitungo sa mga string, array, at command-line argumento. Kaya ano ang mga argumento command line? Ngayon, maaari mong makita ang down dito ng isang maliit na teaser para sa eksakto kung ano ang pupunta na nangyayari. Nakakakita kami ng int main, Inc. argc, string argv brackets. Kaya sabihin subukan upang bigyang-kahulugan ang unang hayaan kung ano na sinusubukan mong sabihin. Ngayon, OK. Kaya sa command line ay dapat ikaw ay pagkuha ng ginagamit sa ilan sa mga utos ngayon, at marahil patakbuhin mo cd sa terminal bago. Kaya kung sinasabi namin cd pset1, alam mo na na dapat maging ang pagbabago sa direktoryo ng pset1. Paunawa Ngayon na hindi mo nakasulat sa isang programa tulad nito bago. Ang bawat programa na iyong isinulat, Gusto mong tumakbo, sabihin nating, tuldok slash Mario, dot slash sakim, at pagkatapos nito maaaring i-prompt ka para sa input. Ngayon, na hindi kung ano palitan ang directory ay. Kapag nagpatakbo ka ng cd, ito ay hindi pagkatapos ay sabihin, na direktoryo ang gusto mong cd sa? Sa halip, sinasabi mo lang, cd pset1, at ito lamang ay pumunta sa direktoryo ng pset1. Kaya parehas kami ng iba pang mga halimbawa. gumawa ng halo. Kapag nagpatakbo ka ng gumawa, ito ay hindi pagkatapos ay sabihin, kung aling mga programa ang nais mong gawin? Sabihin mo lamang, sa command line gumawa ng halo. Ilipat ay isa pang halimbawa. Ito ang isa sa paglipat namin ay ang mario.c maghain up isang direktoryo. Kaya ngayon ay alam namin na may mga halimbawa na ito talagang kami ay pagpasa ng dalawang argumento. May mario.c bilang unang argumento, at tuldok tuldok ay ang pangalawang argumento. At pagkatapos ay kapag ikaw ay tatakbo gumawa, ikaw makita na talagang mahaba utos line-- na tunay na matagal na command naka-print sa command line. Kaya na long command-- ito ay isang maikling bahagi lamang ng mga ito, ngunit ngayon kami ay may tatlong command-line argumento. Dot dash zero, hello, at hello.c. Kaya ito ang mga command-line argumento, argumento na ikaw ay pagpasa sa command line upang ito ay hindi na-prompt kapag tumakbo ang program. Gusto Ito ay nakakabigo kung kailan mo ran kalatungin ito sinabi, "OK, saan program-- saan file ikaw ay kino-compile? Hello.c. Ano flags ng ginagawa mo ay nais na pumasok? dash o. Anong gusto mo ang file na tinatawag? Kamusta. Hindi, ikaw lang tumakbo clang gitling o kumusta hello.c. Kaya naghahanap bumalik sa ito. Ngayon argc argc ay ang mga bilang argument. Ito ay ang bilang ng mga command-line argumento pumasok sa linya ng command. Well, argv-- technically ang v nakatayo para sa vector, kung saan talaga ay nangangahulugan array. Ngunit maaari mong huwag pansinin iyon. Argv-- mayroon kaming string argv, kaya string argv brackets. Kaya ito ay isa pang porma ng bracket hindi mo pa nakikita dati. Kaya nasaksihan namin bracket notation kapag kami ay nagsabi, tulad ng, string s ay katumbas Zamyla. s bracket 0 access ang character Z. Nasaksihan din namin ang mga bracket kapag sinabi namin int edad bracket 5. Na ipinahayag ng isang hanay ng mga laki 5. Kaya dito ay isang bersyon ng bracket hindi namin nakita bago. Kaya ito uri ng mga string argv na ay magiging ganap na pamilyar na ito ay magiging lamang ng isang string. Ngayon ang mga bracket ipahiwatig na ito ay isang array. Kaya string argv bracket paraan na argv ay isang array ng mga string. Ngayon technically isang string ay isang hanay ng mga character. Kaya ito ay ngayon ng isang array ng isang hanay ng mga character. Ngunit ito ay lubhang mas madaling mag-isip tungkol ito bilang lamang ng isang hanay ng mga string. Kaya bakit maaaring ang mga bracket ay walang laman? Tulad ng, kung bakit hindi maaari naming sabihin, bracket 5, bracket n? Oo. Oo. Hindi namin alam kung gaano karaming input may mga pagpunta sa maging. Kaya't kung tiningnan namin sa clang halimbawa, sinasabi namin kalatungin dash o kumusta hello.c. Sa partikular na kasong, may mangyayari upang maging tatlong command-line argumento. At upang ang mga brackets-- kami makita sa isang segundo hindi ito magiging tatlo. Ito technically ay magiging apat. Ngunit ang mga bracket, gagawin namin sabihin nating, may tatlong. Ngunit ngayon kung kami ay tumingin sa ilipat mario.c tuldok tuldok, ang mga bracket Gusto namin nais na ilagay ang dalawang sa mga ito. At doon ay isang pulutong ng mga command na may isang variable na bilang ng mga command line argumento. Kaya kung ano ang bersyon na ito ng bracket pagtatanda nagpapahiwatig ay na argv ay isang array ng mga string. Ngunit hindi pa namin alam kung gaano karaming string ay sa na array. At paano pagkatapos ay alam namin kung paano maraming mga string ay sa array? Iyon ang buong point argc. Sinasabi sa amin ng argc gaano katagal argv ay. Kaya ang huling bagay na dapat isip na, technically, ang utos mismo maituturing bilang isa sa mga argumento command-line. Kaya cd pset1, mayroong dalawang command-line argumento. Ang programa sa kanyang sarili, cd, at pagkatapos ay ang aktwal na bahagi argument ng mga ito, pset1. Ang anumang programa na iyong nakasulat sa gayon ay malayo ay nagkaroon ng dot isa command-line argument-- slash Mario. Iyon ay ang tanging command-line argumento. Kaya ngayon ay naghahanap sa clang gitling o kumusta hello.c. Kaya kung ano ang argc? 4. Kaya argc ay 4. Clang, kaya argv bracket 0 ay kumalatong. argv bracket 1 ay dash 0. argv bracket 2 ay hello, at argv bracket 3 ay hello.c. OK, kaya mga katanungan sa mga ito, at pagkatapos ay makikita natin tingnan ang mga ilang halimbawa programmatic. SIGE. Kaya kami ay kumuha ng isang pagtingin sa hello3.c. Kaya ito ay dapat na pamilyar sa isa sa mga unang c halimbawa nagkaroon kami kung saan kami lang sabihin, hello mundo, ngunit ngayon ito ay mas pangkalahatang. Kaya dito kami ay sinasabi kumusta % s backslash n argv bracket 1. Notice-- kaya up hanggang sa puntong ito, ito ay kung ano ang aking mga template file ay mukhang. Nagkaroon na ako int pangunahing (walang bisa), at pagkatapos ay gagawin ko gawin ang isang bagay sa pangunahing pag-andar. Sa halip Ngayon, sa sandaling simulan namin pakikitungo may mga argumento command-line, kailangan namin sa estado ng isang iba't ibang anyo ng main. Kaya naghahanap sa hello3 muli, ang mga pangunahing ay pagpunta upang kumuha ng dalawang argumento now-- int argc, ang bilang ng mga argumento command-line, at string argv bracket, ang aktwal na string ipinasok sa linya ng command. Kaya ako ng pagpunta upang baguhin na template para mapakita na ang katotohanan. Ngayon kapag mong isulat isang programa, kung hindi mo gusto kailangang gumawa ng anumang command-line argumento, pagkatapos ay gamitin lamang int pangunahing (walang bisa). Ngunit ngayon kapag sumusulat ka programs argument command-line, na ikaw ay pupunta sa paggawa para sa mga problemang itakda two-- kaya ngayon na ikaw ay nagpapatakbo ng mga programa na kailangan na kumuha ng argumento command-line, kailangan mong magkaroon ng pangunahing ng form na ito. Kaya here-- ito ay ang malaking paggamit ng argumento command-line. Kaya sa pag-print argv 1. OK ni compile kaya hayaan at patakbuhin ang program na ito. Gumawa hello3. Compiles. Dot slash hello3. At sabihin natin, "Rob." Kamusta Rob. Kung aking sabihin, "hello Maria," hello Maria. Kamusta Maria. Hannah pa rin nagsasabing, "hello Maria, "dahil hindi ako paggawa ng anumang bagay sa aming argv 2. Argv 2 ngayon ay magiging "Hannah." Argc ay 3. Paano kung ginawa ko ito? So kumusta null. Sa madaling sabi niya hinawakan sa katunayan na, technically, GetString maaaring bumalik null, ngunit kami ay kumuha ng isang pulutong ng higit sa kung ano null ay tunay. Ngunit dalhin ito bilang isang bagay ng katunayan na walang ay karaniwang masama. Ginawa namin ang isang bagay na mali kung ito ay pag-print "hello null." At ang dahilan ng ginawa namin sira is-- rin, kapag nagpatakbo ako tuldok slash hello3, argc ay 1. Kaya ito ay nangangahulugan na ang haba ng argv ay 1. Kung ang isang array ay haba ng 1, ang tanging wastong index ay zero. At kaya dito argv 1 ay nasa labas ang hanay ng array na ito. Ito ay katulad sa bago kapag sinubukan ko sa tindahan ng 6 sa labas ng dulo ng array. Kaya ako sinusubukang i-access ang isang bagay sa labas ng mga bilang argv, at kami ay nakakakuha null. Kaya ang isang mas mahusay na bersyon ng ito, isang pagpapabuti, ay tahasang pagsuri argc. Kaya kung argc katumbas ng 2, na ang ibig sabihin namin ang bumangga isang bagay tulad ng tuldok slash hello3 Rob. At ito ay i-print "hello Rob." Kung argc ay hindi katumbas ng 2, pagkatapos ito ay lamang ang pagpunta upang huwag pansinin ang anumang ilagay mo sa argument command-line bilang argumento command-line. O kung hindi mo ilagay ang anumang sa lahat, ito ay lamang ang pagpunta upang huwag pansinin iyon at sabihin lamang, "hello sa inyo." Kaya ipon na ito. Gumawa hello4. At sa pagtakbo hello4. Tumatakbo ito sa ganitong paraan, kung ano ang dapat na ipi-print? "Hello sa inyo." Kamusta ka. Ano ang tungkol hello4 Rob? "Hello Rob." At sa wakas, hello Rob Maria ay lamang ng "Ikaw hello" muli, dahil ikaw ay hindi tunay na ipasok isang bagay na ito ay inaasahan. Nagpasok ka ng higit pang mga pangalan kaysa sa maaaring hawakan ito, kaya naka-default lang na ang hello mo pag-uugali. Kaya mga katanungan sa mga ito? O argumento command-line? OK, kaya ang pagkuha ng isang pagtingin sa isang ilang higit pang mga halimbawa ng paggamit ng unang command-line arguments-- may argv namin dash 1 dot c. Kaya ang mga komento bigyan ang layo ng kung ano ang dapat na ginagawa ng programang ito. Ngunit mapansin now-- ito para sa loop, ito ay tumutugma sa eksaktong pattern Ang sinasabi ko dati. Mangyari lang namin na maging gamit argc halip ng n. Ngayon argc ay talagang ang n. Ito ay ang haba ng argv array. Kaya ikaw ay iterating sa ibabaw ng argv array printf-ing bawat halaga argv. Kaya kapag gumawa ako ito. Gumawa argv 1. Compiles ito. Dot slash argv 1. Tumatakbo na ito lamang, ito prints dot slash argv 1 dahil na ay ang tanging command-line argument-- ang pangalan ng programa. Palaging may sa least-- argc hindi maaaring mas mababa kaysa sa isa, dahil doon ay palaging hindi bababa sa ang pangalan ng programa upang tumakbo. Kaya argv 1 Rob ay i-print argv 1 at pagkatapos ay sa bagong line "Rob." Kaya sa unang pag-ulit ng loop na ito, i ay 0. Argv 0 ay ang pangalan ng programa. Dot slash argv 1. At pagkatapos argv 1 ay ang aking unang argument command-line, na kung saan ay Rob. Sa puntong ito, kami ay pantay-pantay sa argc. Masira namin sa labas ng loop at tapos na kami. Kaya ito ay gumagana para sa isang arbitrary bilang ng mga argumento command-line. Pansinin ito ng mga kopya argv 0, argv 1, argv 2, argv 3, argv 4. At walang argv 5. argc ay katumbas ng 5. Kaya sa argc sa katumbas i 5, break namin sa labas ng loop. SIGE. Kaya katanungan sa na bago tayo tumingin sa isang mas kumplikadong halimbawa? Kaya argv 2. Lahat tama. Kaya kami ay pa rin sa pag-print ang command-line argumento. Ngunit mapansin ngayon kami ay may isang nested para sa loop. Kaya kung ano ito ginagawa? Kaya ang unang loop ay ginagawa kung ano mismo ang mga ito ay bago. Pa rin kami looping sa ibabaw bawat argument command-line, ngunit ngayon ito pangalawang loop-- na namin nakita rin ng isang bagay na tulad nito bago. Kapag siya ay iterating sa paglipas ng Zamyla print out Z-A-M-Y-L-A. Kaya ito pangalawang loop para sa int j katumbas 0, n katumbas strlen ng argv bracket i. Kaya sabihin unang tingin para sa the-- ni maglakad sa pamamagitan ng ipaalam. Isipin kung ano ang gagawin sa computer Ipaalam gawin kung nagpatakbo ako ng programang ito bilang tuldok lang slash argv dash 2. Kaya kung nagpatakbo ako ng code, at pagkatapos ay argc ay magiging katumbas ng 1. At string argv-- mayroon lamang magiging isa index sa argv, at na ang nangyayari na maging patas sa tuldok slash argv 2-- ang pangalan ng programa. OK, kaya ngayon i katumbas ng 0, i mas mababa sa 1, i plus plus para sa int j katumbas ng 0, n ay katumbas ng strlen ng argv bracket 0, para sa unang pag-ulit ng loop na ito. argv bracket 0 ay tuldok slash argv 2. Kaya kung ano ang haba ng na string? Well, tuldok slash A-R-G-V dash 2. Kaya strlen ng iyon ay magiging 8. Kaya j katumbas ng 0, n katumbas 8. Hangga't j ay mas mababa sa 8, j ++. At kasama na namin ang pagpunta sa maging pag-print ng isang solong character, na ay argv bracket bracket i j. Kaya ang tanging i ay zero. Kami ay pa rin magkaroon ng isa lamang argument command-line. Sa unang pag-ulit ng para sa loop, hindi namin magiging printing argv bracket 0 bracket 0. At pagkatapos j ay pagpunta sa dagdagan. At kami ay pagpunta sa pag-print argv bracket 0 bracket 1. At pagkatapos argv bracket 0 bracket 2. Kaya ito ay ang aming unang nakatagpo ng multi-dimensional array. Tandaan na mas maaga na sinabi ko na argv ay technically isang array ng mga array ng mga character. Kaya dito kung sinabi ko ang isang bagay tulad ng string s ay katumbas argv bracket i, at pagkatapos ay sinabi ko, s bracket j, ito ay tinutupad ang mga parehong bagay. Ngayon, nakita mo na s bracket j bago. Na-access lamang ng ika-j ang katangian ng ang string na ito. Kaya sa mga ito, kami ay ang pagkuha ng j-ika na katangian ng i-ika argv. Kaya kung ano ang dapat na ito sa huli output? Gumawa argv 2. Compiles ito. Dot slash argv 2. "Rob Maria Hannah," at bigyan kami ng ilang mga kuwarto. Kaya makikita natin na ito ay outputting dot sa sarili nitong linya at slash sa sarili nitong linya at ang isang sa sarili nitong linya. Ito ay pag-print out ang bawat indibidwal na mga character ng bawat argument command-line. At pagkatapos ay sa pagitan ng mga ito, dahil sa ito bagong linya kami ay pag-print down dito, sa sa pagitan nila makikita ito i-print ang isang bagong linya. Kaya ito ay katulad ng sa ang naunang argv dash 1, na inilalathala bawat argument command-line, ngunit ngayon kami ay sa pag-print ang mga argumento command-line at pagkatapos iterating sa pamamagitan ng bawat karakter ng bawat argument command-line upang makuha ang output. SIGE? Kaya mga katanungan sa mga ito? Ang isang bagay na kailangang tandaan na command-line arguments-- kaya sila ay pinaghihiwalay ng puwang bilang Gusto mong natural inaasahan sa kanila na maging. Kaya ang isang string ay maaaring magkaroon ng mga puwang sa loob nito. Ito ay hindi sobrang mahalaga, ngunit kung ako Nais ikatlong command-line argument na magkaroon ng isang puwang sa loob nito, pagkatapos ay ako maaaring sabihin ng isang bagay tulad nito. SIGE? Kaya ito pa rin ngayon ay may lamang tatlong command-line arguments-- well 4. Dot slash argv dash 2, Rob, Maria, at Hannah Bloomberg. SIGE. Tanong sa mga ito? May walang espesyal ay tungkol sa mga puwang ng character. Ito ay nangyayari lamang upang maging na ang itinuturing ng command-line mga puwang ng character ng kung paano ihiwalay mo ang bawat argumento. Lahat tama. Kaya nga ang Problema set two-- ka na magiging pagtingin sa lihim-susi cryptography. Kaya, katulad ng halimbawa na Nakita namin mula A Christmas Story, ikaw ay pupunta sa pagpapatupad ng ilang algorithm na, na ibinigay ng isang mensahe, ikaw ay pagpunta sa ma upang i-encrypt na mensahe na na lamang ng isang tao na may na lihim key, na may na decoder ring, dapat ma-decrypt. Kaya na ang standard edition. Ikaw ay pagpunta sa pagpapatupad dalawang magkaibang mga bersyon. Kung mangyari sa iyo upang tingnan sa hacker Edition ngayon, kami ay pagpunta sa magbibigay ikaw ay isang string na tulad nito, na kung saan ay kumakatawan sa isang naka-encrypt na password. Kaya ang iyong layunin ay upang malaman kung ano ang decrypted password ay. Ngayon, ito ay tunay na kung paano ang mga password ay naka-imbak sa isang pulutong ng mga computer, at nag-iimbak ng mga ito ito lamang random string ng mga character. Kailangan mong malaman kung paano makakuha ng na ito mula sa random string ng mga character sa kung ano ang orihinal na password ay. At sa wakas, matapos na ito itakda ang problema, dapat mong maaaring maunawaan kung ano ang ibig sabihin nito. Kaya ikaw ay matuto kung paano i-decrypt ito uri ng mga random na string. Katulad nito, kung tandaan mo mula sa linggo 0, maaaring nakakita ka ng URL na ito. At dapat mo na decrypt ito sa kalaunan. Ikaw ay hindi maaaring maging masaya kapag ikaw decrypt ito at i-click ang link. Lahat tama. Iyon lang para sa araw na ito. Kaya tingnan mo sa susunod na linggo! [ELECTRONIC MUSIC nagpe-play]