[Powered by Google Translate] [Walkthrough - Problema Set 2] [Zamyla Chan - Harvard University] [Ito ay CS50. CS50.TV] Ayos lang. Hello, lahat, at maligayang pagdating sa walkthrough 2. Una, gusto kong batiin para sa pagtatapos pset 1. Alam ko na ito ng kaunti matigas para sa ilan sa inyo, maaaring iyong unang computer program na iyong sinulat ni, ngunit lamang tandaan na sa dulo ng ito, kapag tiningnan mo sa katapusan ng semestre, makikita mo tumingin sa pset 1 at makikita mo sabihing, "Uy, maaari ko tapos na sa loob ng 5 minuto." Upang malaman at pinagkakatiwalaan na sa dulo ng makikita mo talagang mahanap pset 1 medyo simple. Ngunit sa ngayon ito ay isang malaking katuparan, at binabati kita para sa nagsisimula tapos. Ngayon, din ng isang mabilis na tandaan bago makuha namin sa karne ng walkthrough. Gusto ko lang upang makagawa ng isang mabilis na tandaan na ako minsan ay hindi magkakaroon ng sapat na oras sa panahon ng walkthroughs upang pumunta sa pamamagitan ng bawat solong paraan ng paggawa ang problema set at sa halip lamang maaaring tumutok sa 1 o 2 uri ng pagpapatupad, mga paraan na maaari mong gawin ito. Ngunit iyon ay hindi upang sabihin na ikaw ay ipinagbabawal mula sa paggawa sa ito ng isa pang paraan. Mayroong madalas, sa computer science, maraming mga paraan ng paggawa ng mga bagay, at kaya talagang huwag mag-atubiling gumamit ng ibang uri ng solusyon kaysa sa maaari ko ipinakita. [Pset 2: Crypto - Zamyla Chan - zamyla@cs50.net] [Pset2 - 0. Isang Seksyon ng mga Tanong - 1. Caesar - 2. Vigenere] Ayos lang. Kaya ang problema magtakda ng 2: Crypto ay isang masaya. Muli, sa bawat pset makikita mong magsimula sa isang seksyon ng mga katanungan na pagpunta sa isagawa sa iyong mga seksyon sa iyong itinalaga na pagtuturo ng kapwa. Hindi namin ay pagpunta sa pumunta sa pamamagitan ng mga ibabaw ng walkthrough, ngunit tiyak na sila ay makakatulong sa mong kumpletuhin ang pset. Kaya ang unang bahagi ng hanay ng problema ay Caesar. At iba pa sa Caesar isang tao ay pumasa sa iyo ng isang susi sa isang integer, at i-encrypt mo ang isang string ng teksto na nagbibigay ka nila at bigyan sila ng isang naka-encrypt na bagay. Kung sinuman ang pinanood A Christmas Story, ang isang halimbawa ng na mayroong. Pagkatapos ang ikalawang bahagi ng hanay ng problema ay Vigenere, na ang mas advanced na diskarte sa pag-encrypt. At sa gayon kami ay pagpunta sa ensayper isang piraso ng teksto, maliban sa halip ng isang integer, aktwal na kami ay upang i-encode ito na may isang keyword na ang gumagamit ay magbigay sa amin. Okay, kaya ang unang tool sa toolbox ngayon ay talagang pagpunta sa pag-update ng appliance. Sa board ng talakayan namin makita ang mga bagay tulad ng, "Bakit hindi ito gumagana?" "Bakit hindi Isumite ang 50 trabaho?" at madalas solusyon ay talagang lamang upang i-update ang iyong appliance. At kaya kung mo lamang tumakbo sa isang terminal na window sa iyong appliance sudo yum-y - na isang flag na nagsasabi oo, i-update ang lahat - update, pagkatapos ay mag-a-update ang iyong appliance kung kailangan maging. At hindi ito ay nasaktan kung ka na sa pinakabagong bersyon ng appliance. Pagkatapos ay lamang ito sabihin walang mga bagong update na magagamit at maaari mong patuloy na nagtatrabaho sa kahabaan. Ngunit ito ay handa na upang isakatuparan kahit na sa bawat oras na buksan mo ang appliance dahil hindi namin pa rin napaka - minsan kung dumating kami sa isang bug - pag-aayos ng ito sa appliance. Kaya't tiyakin na mayroon ka ng pinakabagong bersyon ng appliance at magpatakbo ng na-update doon. Ayos lang. Kaya dahil kami ay pagharap sa mga titik at pagbabago, enciphering ng mga bagay, kami ay pagpunta sa talagang gusto upang maging pinakamahusay na mga kaibigan sa aming ASCII chart. Mayroong maraming mga online, kung nakita mo. Siguro kahit na gumawa ng iyong sariling. Talaga, sa bawat titik at bawat numero at bawat karakter may isang numero na nauugnay sa mga ito, at kaya magandang upang makita ang kanilang mga ASCII halaga sa tabi ng aktwal na sulat. Na ay tiyak na makakatulong sa iyo sa hanay ng problema. Isang bagay na talagang nakatulong sa akin sa set na ito ng problema ay sa aktwal na i-print ito, at bilang ako ay pagpunta sa pamamagitan ng, Gusto ko aktwal na gumuhit dito, sumulat, "Kung ito ay pumunta sa doon, pagkatapos ..." Uri ng gumuhit ito at markahan ang mga ito, maging ang pinakamahusay na mga kaibigan gamit ang iyong ASCII talahanayan. Pagkatapos mayroon kaming ilang iba pang mga tool sa aming itapon. Oras na ito sa halip na aktwal na pagdikta sa gumagamit para sa lahat ng kanilang mga input kami ay pagpunta sa gawin ang isang kumbinasyon. Kami ay pagpunta upang i-prompt ang mga ito para sa ilang mga input, ngunit din namin ay lamang gamitin ang mga argumento sa command line. Kaya kapag pinatakbo nila ang kanilang mga programa, karaniwang sabihin sa iyo. / Kumusta, halimbawa, kung ang iyong programa ay hello.c. Ngunit ang oras na ito sa halip na lamang na nagsasabi na, maaari silang maglagay ng mga salita, argumento pagkatapos. At sa gayon kami ay pagpunta upang gamitin ang anumang mga pumasa ang mga iyon sa sa amin bilang kanilang input pati na rin, kaya gumagalaw na lampas lamang pagdikta para sa integer ngunit din gamit ang mga utos line argumento. At pagkatapos ay gagamitin namin pumunta sa array at string, na makikita namin ang paggamit ng maraming pati na rin. Narito ang isang halimbawa lamang ng 1 mini ASCII chart. Tulad ng aking sinabi, ang bawat titik ay kumakatawan sa isang numero, at kaya ay gawing pamilyar ang iyong sarili sa na. Ito ay darating sa madaling-gamiting. At ibang pagkakataon kapag nagsimula namin ang paggawa ng ilang ASCIIMath pagharap sa ang mga numero - pagdaragdag, pagbabawas sa kanila - pagkatapos ay tiyak magandang upang sumangguni sa tsart na ito. Kaya narito ang isang halimbawa ng isang Caesar cipher - isang bagay na maaari mong-play na may. Ito ay isang wheel. Mahalaga, may ay isang panlabas na alpabeto at pagkatapos ay isang panloob na alpabeto. Kaya karapatan dito ay isang halimbawa ng Caesar cipher ngunit may isang key ng 0. Mahalaga, ay nakahanay na A, B ay nakahanay sa B, ang lahat ng mga paraan sa Z. Ngunit pagkatapos ay sabihin gusto namin ng key ng 3, halimbawa. Pagkatapos ay namin ikutin ang inner wheel upang ang A ngayon aligns may D, atbp. At kaya ito ay mahalagang kung ano ang kami ay pagpunta sa gawin. Hindi namin wheel, ngunit kung ano ang kami ay pagpunta sa gawin ay gumawa ng aming programa uri ng shift ang alpabeto kasama ang sa amin ng isang tiyak na halaga ng mga numero. Kaya bilang ko sinabi bago, kami ay pagpunta sa pagharap sa mga argumento command line pati na rin ang pagkuha ng isang integer. Kaya ang paraan na ang isang gumagamit ay patakbuhin ang iyong mga programa sa Caesar sa pamamagitan ng sinasabi. / Caesar at pagkatapos ng pagpasok ng isang numero pagkatapos na. At bilang na kumakatawan sa key, ang shift, kung gaano karaming beses ka na umiikot ang inner wheel ng iyong Caesar cipher. At kaya makikita mo dito ang isang halimbawa. Kung ipinasok namin ang mga titik mula sa A hanggang L sa aming Caesar cipher, pagkatapos ay gagawin ito input D sa pamamagitan ng O dahil na ang bawat titik na Paglipat higit sa 3 beses, tulad ng ang halimbawa ng wheel na aking ipinakita sa iyo. Kaya kung ikaw ipinasok, halimbawa, ito ay CS50! pagkatapos ay ito ring ilipat ang lahat ng ang mga titik. At na ang isang mahalagang bagay sa parehong Caesar at Vigenere na kami ay pagpunta upang laktawan ang anumang hindi-titik. Kaya ang anumang mga puwang, mga character, atbp, numero, kami ay pagpunta upang panatilihin ang mga ito sa parehong. Lamang namin ay upang ilipat ang mga titik sa kasong ito. Upang makita ka sa wheel, kami lamang ang mga titik na magagamit sa amin, kaya nais lamang namin upang ilipat ang mga titik at i-encrypt ang mga titik. Kaya ang unang bagay na gawin, nakita mo na ang paggamit para sa Caesar sa problema itakda 2 ay upang patakbuhin ang Caesar at pagkatapos ay ipasok ang isang numero kapag kang magpatakbo ang mga ito sa terminal. Kaya kung ano ang kailangan namin upang gawin ay sa paanuman makakuha ng na key at i-access ito. At kaya gusto naming sa paanuman makita ito ay pagpunta sa pangalawang linya ng command argumento. Ang unang. / Caesar, at sa susunod na ang key bilang. Kaya bago nagkaroon kami int pangunahing (walang bisa) upang simulan ang aming mga programa sa C. Kami ay pagpunta sa alisan ng balat likod ng layer ng kaunti at makita ang aktwal na sa halip ng pagpasa sa walang bisa sa aming pangunahing function na aktwal na kami ay pagharap sa 2 parameter. Mayroon kaming isang int na may pangalang argc at pagkatapos ay isang array ng mga string na tinatawag argv. Kaya argc ay isang integer, at kumakatawan sa bilang ng mga argumento na ang pumasa sa iyong programa. At pagkatapos argv ay talagang ang listahan ng argumento pumasa sa. Lahat ng argumento ay string, at iba pa argv ay kumakatawan sa isang array, isang listahan, ng mga string. Natin makipag-usap tungkol sa mga array ng ilang sandali. Array ay mahalagang isang bagong istraktura ng data. Mayroon kaming ints, namin doubles, mayroon kami ng mga string, at ngayon ay mayroon kaming array. Array ay mga istraktura ng data na maaaring magkaroon ng maramihang mga halaga ng parehong uri, kaya mahalagang, ang isang listahan ng anumang uri na nais mong. Mahalaga, kung gusto mo ang isang listahan ng mga integer lahat sa 1 variable, nais mong lumikha ng isang bagong variable na ng uri int array. Kaya array ay zero-naka-index, ibig sabihin na ang unang elemento ng array ay sa index 0. Kung array ay ng haba 4, tulad ng sa halimbawang ito, ang iyong huling elemento sa index 3, na 4 na - 1. Kaya upang lumikha ng array, gusto mong gawin ang isang bagay tulad nito. Sinabi mong gusto double array. Ito napupunta para sa anumang uri ng mga uri ng data, bagaman. Kaya nating gusto mo ng double array. Natin na nais mong tawagan ito mailbox. Tulad lamang ng gusto mong simulan ang anumang iba pang mga double, nais mong sabihin double at pagkatapos ang pangalan, ngunit ang oras na ito na inilalagay namin ang mga square bracket, at pagkatapos ay ang bilang ay magkakaroon ang haba ng array. Tandaan na sa array ay hindi kailanman namin maaaring baguhin ang haba, upang lagi mong upang tukuyin at piliin kung gaano karaming mga kahon, kung gaano karaming mga halaga ang iyong array ay pagpunta upang i-hold. Kaya upang magtakda ng iba't ibang mga halaga sa iyong array, ka pagpunta sa gamitin ang sumusunod na syntax na ito, tulad ng makikita mo sa slide. Mayroon kang 0 sa index ng mailbox ay itatakda sa 1.2, mailbox index 1 set sa 2.4, atbp. Kaya ngayon na nasuri namin ang array bit ng, sabihin bumalik sa argc at argv. Alam namin na ang argv na ngayon ang isang array ng mga string. Kaya kapag ang isang gumagamit ay ipinapasa sa - sabihin nila ang pagpapatakbo ng isang programa - sinasabi nila. / kumusta David Malan, kung ano ang programa ay gawin para sa iyo ay aktwal ay sa kung ano argc at argv. Kaya hindi mo kailangang mag-alala tungkol sa na. Argc sa kasong ito ay magiging 3 dahil ito ay nakikita ng mga 3 natatanging mga salita na pinaghiwalay ng mga puwang. At kaya ang array sa halimbawang ito, ang unang na-index ay. / Kumusta, sa susunod David, sa susunod na Malan. Ba ang sinuman makita kaagad kung ano ang kaugnayan sa pagitan ng argv,  array, at argc ay? Oo. Susubukan naming makakuha ng sa na sa isang halimbawa sa args.c. Natin makita kung maaari naming samantalahin ang relasyon sa pagitan ng 2. Dito maaari mong makita na sa appliance ang default na application upang buksan. file c ay minsan Emacs. Ngunit nais naming humarap sa gedit, kaya kung ano ang maaari mong gawin ay maaari mong i-right click sa iyong file na C, pumunta sa Properties, Buksan Gamit, at pagkatapos ay piliin ang gedit, Itakda bilang default, at ngayon ang iyong programa ay dapat buksan sa gedit sa halip ng Emacs. Perpekto. Kaya dito Mayroon akong isang programa na gusto kong i-print ang bawat argument ng linya ng command na. Kaya anumang ang user input, gusto kong mahalagang ibalik ito pabalik sa kanila sa isang bagong linya. Kaya kung ano ang isang istraktura na maaari naming gamitin upang umulit sa isang bagay - isang bagay na malamang na ginamit sa iyong pset 1? Kung gusto mong pumunta sa pamamagitan ng isang nakatakda na bilang ng mga bagay? >> [Mag-aaral] Para sa loop. Para sa loop. Eksakto. Kaya ipaalam sa magsimula sa para sa loop. Na mayroon kami para sa int i = 0. Sabihin lang magsimula gamit ang isang karaniwang Pinasimulan variable. Ako pagpunta sa iwan ang mga kondisyon para sa isang hanay at pagkatapos ay sabihin i + +, upang gawin ang mga bagay doon. Ayos lang. Kaya iniisip pabalik sa argv, kung argv ang listahan ng mga argumento na nakapasa sa sa programa at argc ay ang bilang ng mga argumento sa programa, pagkatapos na nangangahulugan na argc ay mahalagang ang haba ng argv, kanan, dahil doon ng maraming mga argumento bilang ang halaga ng argc. Kaya kung gusto naming upang umulit sa bawat elemento sa argv, kami ay pagpunta sa gusto sa bawat oras na ma-access ang variable sa argv sa ibinigay na index. Na maaaring katawanin na ito, i-right? Ito variable sa kumakatawan sa partikular na string sa pagkakataong ito dahil ito ay isang string array - partikular na string sa na ibinigay na index. Ano ang gusto naming gawin, sa kasong ito, gusto naming i-print ito, kaya sabihin nating printf. At ngayon argv ay isang string, kaya gusto naming maglagay na placeholder doon. Gusto namin ng isang bagong linya lamang upang gawin itong tumingin magandang. Kaya dito mayroon kami ng para sa loop. Hindi namin ang kundisyon. Kaya i nagsisimula sa 0, at pagkatapos ay sa bawat oras na ito upang i-print ang ibinigay na string sa na partikular na index sa array. Kaya kapag gusto naming upang ihinto ang pag-print ang mga elemento sa array? Kapag tapos kami, tama? Kapag namin Naabot mo na ang dulo ng array. Kaya hindi namin nais na lumampas sa nakaraan ang haba ng array, at alam namin na hindi namin kailangan sa aktwal na aktibong malaman kung ano ang haba ng argv dahil ito ibinigay sa atin, at kung ano ang na? Argc. Eksakto. Kaya gusto naming gawin ang prosesong ito number argc ng beses. Hindi ako sa tamang directory. Ayos lang. Ngayon sabihin gumawa args. Walang mga error, na kung saan ay mahusay. Kaya sabihin lang patakbuhin ang mga args. Ano ito upang bumalik sa amin? Lamang ito upang i-print muli ang mga ito. "Ikaw inputted args sa programa; ako pagpunta sa bigyan ito pabalik sa iyo." Kaya sabihin nating gusto naming sabihin mga args pagkatapos foo bar. Kaya pagkatapos ito ng mga Kopya ito pabalik sa amin. Lahat ng karapatan? Kaya may isang halimbawa ng kung paano maaari mong gamitin ang argc at argv alam na argc kumakatawan ang haba ng argv. Tiyakin na hindi mo kailanman na may mga array ng access isa higit sa haba ng array dahil C ay talagang shout sa iyo. Makakakuha ka ng isang bagay na tinatawag ng segmentation fault, kung saan ay hindi kailanman masaya, talaga sinasabi sinusubukan mong i-access ang isang bagay na hindi umiiral, ay hindi nabibilang sa iyo. Kaya tiyaking, at lalo na ang zero-pag-index, hindi namin nais na - Gusto halimbawa, kung kami ay may isang array ng haba 4, na array index 4 ay hindi umiiral dahil sisimulan namin sa 0, sa zero index. Ito ay maging pangalawang kalikasan tulad ng para sa loop kapag nagsimula kami sa 0. Kaya lamang panatilihin na sa isip. Hindi mo nais na sakaling ma-access ang index ng isang array na lagpas sa iyong abot. Upang maaari naming makita ngayon kung paano maaari namin ang uri ng pag-access ang command line argument na pumasa sa. Ngunit bilang na nakita mo ang string, ang argv ay talagang isang string array. Kaya aktwal hindi isang integer, ngunit sa Caesar gusto naming harapin ang mga integer. Sa kabutihang-palad, may isang function na nilikha para sa atin na maaaring aktwal na-convert ng isang string sa isang integer. Din in dito ay hindi kami ay pagharap sa input ng user kung saan kami ay pagdikta sa kanila para sa input dito para sa key, kaya hindi tunay na namin maaaring reprompt at sabihin, "Oh, bigyan ako ng isa pang integer, sabihin nating, kung ito ay hindi wasto." Ngunit pa rin namin kailangang mag-check para sa tamang paggamit. Sa Caesar lamang ang pinapayagan upang pumasa sa 1 numero, at sa gayon mayroon silang upang tumakbo. / Caesar at pagkatapos nilang upang bigyan ka ng isang numero. Kaya argc ay isang tiyak na numero. Anong numero ang nais na na kung mayroon silang pumasa ka sa. / Caesar at pagkatapos ay isang susi? Ano ang argc? >> [Mag-aaral] 2. >> Dalawang. Eksakto. Kaya nais mong upang matiyak na ang argc ay 2. Kung hindi mo talaga tanggihan upang patakbuhin ang program. Sa pangunahing ito ay isang function na nagsasabing int pangunahing, kaya lagi naming sa mahusay na kasanayan 0 balik sa dulo ng isang matagumpay na programa. Kaya kung, sabihin, binibigyan ka nila 3 utos mga argumento ng linya sa halip ng 2 o bigyan ka ng 1, halimbawa, pagkatapos ay kung ano ang kailangan mong gawin ay gugustuhin mong i-check para sa at pagkatapos ay bumalik sa 1 sinasabi, hindi, hindi ako makapag-magpatuloy sa programang ito. [Mag-aaral] May hindi maaaring maging isang puwang sa iyong teksto. >> Pagpasensiyahan mo ako? [Mag-aaral] ay hindi maaaring maging isang puwang sa teksto na sinusubukan mong i-encrypt. Ah! Sa mga tuntunin ng teksto na kami ay sinusubukan upang i-encrypt, na aktwal ay paglaon kapag bigyan namin na teksto. Kaya ngayon lang kami ay tumatanggap ng bilang argumento utos ang aktwal na bilang, ang aktwal na shift para sa pag-encrypt ng Caesar. [Mag-aaral] Bakit kailangan mong 2 kumpara sa 1 argc lang? Mayroon talagang 1 numero. Kanan. Ang dahilan kung bakit kailangan namin 2 para sa argc sa halip ng 1 ay dahil kapag kang magpatakbo ng isang programa at sabihin. / Caesar o. / kumusta, na aktwal na binibilang bilang isang argument ng linya ng command. Kaya pagkatapos na tumatagal ng hanggang 1 at kaya kami ay inputting 1 extrang. Inputting Kaya ka talagang isang string sa argument ng linya ng command. Ano ang gusto mong gawin, para sa Caesar gusto naming humarap sa isang integer, sa gayon ay maaari mong gamitin ang function na sa atoi. At isa lamang, kayo na ipasa ito sa isang string at pagkatapos ito ay bumalik ka muli ng isang integer kung posible upang gumawa ng na string sa isang integer. Ngayon tandaan kapag kami ay pagharap sa printf o GetString, ang mga bagay tulad na, isinama namin ang library na partikular sa amin. Kaya sa simula simulan namin na may hash tag isang bagay standard I / O, h, tulad na. Well, atoi ay hindi sa loob ng isa sa mga aklatan, kaya kung ano ang mayroon kaming gawin ay mayroon kaming upang isama ang tamang library para sa. Kaya isipin ang bumalik sa walkthrough 1 kung saan tinalakay ko ang manu-manong function na. Nag-type ka ng tao sa iyong terminal at pagkatapos ay sinusundan ng pangalan ng isang function. At kaya na ilabas ang isang buong listahan ng mga nito sa paggamit, ngunit pati na rin ito ilabas kung saan library na nabibilang sa. Kaya ko bang iwan na sa iyo upang gamitin ang manu-manong function na may atoi at malaman kung aling library na kailangan mo upang isama ang upang gamitin ang function na sa atoi. Kaya Mayroon namin ang key at ngayon pagdating sa pagkuha ng mga plain text, at iba pa na aktwal na pagpunta sa input ng user kung saan mo prompt. Namin Aaksyunan may GetInt at GetFloat, at kaya sa parehong ugat kami ay pagpunta sa pagharap sa GetString. Ngunit sa kasong ito hindi namin kailangan na gawin ang anumang Do habang o habang loop sa check. GetString ay tiyak bigyan kami ng isang string, at kami ay pagpunta upang i-encrypt ang anumang ang user ay nagbibigay sa amin. Kaya maaari mong ipagpalagay na ang lahat ng mga user inputted string ay tama. Mahusay. Kaya pagkatapos sa sandaling mayroon ang susi at sa sandaling mayroon ang teksto, ngayon kung ano ang sa kaliwa ay mayroon kang ensayper ang plaintext. Lang upang mabilis na masakop ang paglipas ng salita, plaintext ay kung ano ang nagbibigay sa iyo ng ang user, at ang ciphertext ay kung ano ang bumalik ka sa kanila. Kaya string, upang pumunta sa pamamagitan ng aktwal na sulat sa pamamagitan ng sulat dahil mayroon kaming upang ilipat ang bawat titik, Nauunawaan namin na string, kung namin uri ng alisan ng balat pabalik layer, nakita namin na hindi lang nila talaga ng isang listahan ng mga character. Isa ay pagkatapos ng isa. At sa gayon ay maaari naming ituring ang mga string bilang array dahil ang mga ito ay mga array ng mga character. Kaya sabihin nating mayroon kang isang string na may pangalang teksto, at loob na variable na teksto ay naka-imbak na ito ay CS50. Pagkatapos teksto sa index 0 isang capital T, index 1 ay h, atbp. At pagkatapos ay sa array, sa argc halimbawa sa args.c, Nakita namin na nagkaroon kami upang umulit sa isang array at kaya namin ay upang umulit mula sa i = 0 hanggang i ay mas mababa kaysa sa haba. Kaya kailangan namin ng ilang mga paraan na ang pag-uunawa kung ano ang haba ng aming mga string kung kami ay umulit sa paglipas ng mga ito. Sa kabutihang-palad muli, may isang function doon para sa amin, kahit na sa paglaon sa CS50 makikita mo talagang ipatupad at gawin ang iyong sariling function na na kalkulahin ang haba ng isang string. Ngunit sa ngayon kami ay pagpunta sa gamitin ang haba ng string, kaya strlen. Pumasa ka sa isang string, at pagkatapos ito ay bumalik sa isang int na kumakatawan sa haba ng iyong mga string. Tingnan natin sa isang halimbawa ng kung paano namin upang umulit sa ibabaw ng bawat character sa isang string at gawin ang isang bagay na iyon. Ano ang gusto naming gawin ay umulit sa ibabaw ng bawat character ng string, at kung ano ang gusto naming gawin ay naming i-print muli ang bawat character na 1 ng 1 maliban namin magdagdag ng isang bagay na sa tabi nito. Kaya ipaalam sa magsimula sa para sa loop. Int i = 0. Kami ay mag-iwan ng puwang para sa kundisyon. Gusto naming upang umulit hanggang sa maabot namin ang dulo ng string, i-right? Kaya pagkatapos ay kung ano ang function na ay nagbibigay sa amin ang haba ng string? [Hindi marinig na mag-aaral ng tugon] Na ang haba ng argumento command line. Ngunit para sa isang string gusto naming gamitin ang isang function na nagbibigay sa amin ang haba ng string. Kaya, na string haba. At sa gayon mayroon kang upang pumasa sa isang string nito. Kailangang malaman kung ano ang string kailangang kalkulahin ang haba ng. Kaya sa kasong ito kami ay pagharap sa string s. Mahusay. Kaya pagkatapos kung ano ang gusto naming gawin, sabihin printf. Ngayon, gusto naming humarap sa mga character. Gusto naming upang i-print ang bawat indibidwal na character. Kapag nais mo ito upang i-print ang isang Float, nais mong gamitin ang placeholder tulad ng% f. Sa isang int nais mong gamitin% d. At kaya katulad, may isang character gumamit ka ng c% upang sabihin ako pagpunta sa pag-print ng isang character na naka-imbak sa loob ng isang variable. Kaya mayroon kaming ito, at sabihin magdagdag ng isang panahon at espasyo dito. Aling mga character na namin ang paggamit? Kami ay pagpunta sa gumagamit sa anumang karakter na kami ng string. Kaya pagkatapos namin ay pagpunta sa gumagamit ng isang bagay na may string, ngunit nais naming i-access sa ilang mga character na doon. Kaya kung ang isang string ay isang array, pagkatapos ay kung paano namin ma-access ang mga elemento ng array? Mayroon kami ng mga square bracket na iyon, at pagkatapos ay inilalagay namin ang index sa doon. Kaya mayroon kami ng mga square bracket. Aming index sa kasong ito, maaari naming gamitin lamang i. Eksakto. Kaya dito namin sinasabi na kami ay pagpunta sa pag-print ng isang character na sinundan sa pamamagitan ng isang tuldok at isang puwang, at ang character na ith sulat sa aming string s. Ako pagpunta upang i-save na. Okay. Ngayon ako pagpunta upang patakbuhin ang haba ng string. Kaya nagkaroon kami ng isang string na tinatawag na OMG, at ngayon bigyang-diin ang higit pang. Katulad nito, sabihin nating aktwal na namin nais upang makakuha ng isang string mula sa user. Paano maaari naming gawin ito? Bago, kung paano namin sa isang int? Namin sinabi GetInt, i-right? Ngunit ito ay hindi int, kaya sabihin GetString. Natin gumawa ng string na haba. Narito hindi namin magpasok ng isang tukoy na prompt. Kaya hindi ko alam. Ako pagpunta sa ilagay ang aking pangalan sa dito at sa gayon ay maaari kong gawin ang isa sa mga bagay kung saan magtalaga ako ng salita para sa bawat titik o isang bagay tulad na. Cool. Kaya, na string haba. Kaya hindi namin pabalik sa Caesar. Mayroon kaming ilang mga tool sa kung paano namin umulit sa loob ng isang string, kung paano namin ma-access ang bawat indibidwal na elemento. Kaya ngayon maaari naming bumalik sa programa. Tulad ng nabanggit ko bago, sa ASCII table, ang iyong pinakamatalik na kaibigan, ka pagpunta upang makita ang mga numero na nauugnay sa bawat titik. Kaya dito sabihin aming plaintext ako nahihilo! Pagkatapos bawat isa sa mga character na ito ay pagpunta sa magkaroon ng isang numero at ASCII halaga na nauugnay dito, kahit ang kudlit, kahit ang espasyo, kahit na ang tandang padamdam, kaya makikita mo gusto upang panatilihin sa isip. Kaya sabihin ang aming susi na ang mga user na kasama sa kanilang mga argumento sa command line ay 6. Iyon ay nangangahulugang para sa ang unang titik, na ako, na kung saan ay kinakatawan ng 73, gusto mong bumalik sa kanila anumang titik ay kinakatawan ng ASCII halaga ng 73 + 6. Sa kasong ito na 79. Ngayon nais namin upang pumunta sa susunod na character. Kaya ang susunod sa index 1 ng plaintext ang kudlit. Ngunit tandaan nais lamang namin upang ensayper ang mga titik. Kaya gusto namin upang matiyak na ang ang mga kudlit aktwal na nananatili ang parehong, na hindi namin baguhin mula 39 sa anumang 45. Gusto naming panatilihin ang mga ito bilang isang kudlit. Kaya gusto naming tandaan lamang ensayper ang mga titik dahil gusto naming ang lahat ng iba pang mga simbolo upang hindi magbabago sa aming programa. Isa pang bagay na gusto namin ay upang mapanatili ang capitalization. Kaya kapag mayroon kang isang uppercase sulat, dapat itong manatili bilang isang uppercase. Dapat manatili bilang lowercase ang mga Lowercases. Kaya ilang mga kapaki-pakinabang na function upang humarap sa lamang enciphering titik at patuloy na pinapanatili ang capitalization ng mga bagay ang isalpha, isupper, islower function. At kaya ang mga function na bumalik ka ng Boolean halaga. Talaga, totoo o hindi. Ito ay isang uppercase? Ang alphanumeric na ito? Ito ay isang sulat, mahalagang. Kaya narito ang 3 mga halimbawa ng kung paano mo gamitin na function na. Isa lamang, maaari mong subukan kung ang halaga ay bumalik sa iyo sa pamamagitan ng na function na ay totoo o hindi batay sa input na. Alinman ang hindi ensayper isang bagay o Cipher ito o tiyakin na ito ay malalaki, atbp. [Mag-aaral] Maaari mo lamang ipaliwanag ang mga ng kaunti pa at kung paano mo ginagamit ang mga ito? >> Oo, para sigurado. Kaya't kung tiningnan namin pabalik, narito mayroon kaming isang kabisera ko, i-right? Upang malaman namin na pupunta ako sa O dahil ako + 6 ay O. Ngunit nais naming upang matiyak na na O isang kabisera O. Kaya talaga, na uri ng pagpunta sa baguhin ang aming mga input. Kaya kung ito ay malalaki o hindi uri ng baguhin ang paraan na harapin namin dito. Kaya pagkatapos kung ginagamit namin ang isupper function na sa partikular na index, kaya isupper ("ako"), na nagbabalik para sa amin totoo, upang malaman namin na itaas. Kaya pagkatapos ay batay sa na, mamaya makikita namin pumunta sa isang formula na ikaw ay ginagamit upang ilipat ang mga bagay sa Caesar, kaya pagkatapos talaga, may nangyayari sa isang bahagyang iba't-ibang formula kung uppercase kumpara sa lowercase. Kabuluhan? Oo. Walang alalahanin. Uusapang ko ng kaunti tungkol sa pagdaragdag ng 6 ng sulat, na kung saan ay hindi masyadong kabuluhan maliban kung namin uri ng maunawaan na ang mga character na ito uri ng mapagpapalit may integer. Ano ang ginagawa namin ay namin uri ng paggamit implicit Casting. Susubukan naming pumunta sa paghahagis ng kaunti mamaya sa kung saan mong gawin ang isang halaga at i-on ito sa isang iba't ibang mga uri kaysa sa orihinal na ito ay. Ngunit sa ito pset magagawa naming uri ng salitan gamitin ang mga character at ang kanilang mga kaukulang integer na halaga. Kaya kung lamang balutin ng character lang sa mga single quote, makikita mo magagawang upang gumana sa mga ito sa mga integer, pagharap sa mga ito bilang isang integer. Kaya ang kabisera C nauugnay sa 67. Lowercase f nauugnay sa 102. Muli, kung nais mong malaman ang mga halagang ito, tumingin sa iyong ASCII talahanayan. Kaya ipaalam sa pumunta sa ilang mga halimbawa ng kung paano mo maaaring ibawas at idagdag, kung paano mo maaaring aktwal na talagang gumagana sa mga character na ito, gamitin ang mga ito salitan. Sinasabi ko ASCIIMath na pagpunta sa kalkulahin ang karagdagan ng isang character sa isang integer at pagkatapos ay ipinapakita ang nagreresultang character pati na rin ang nagreresultang ASCII halaga. At kaya dito ako sinasabi - we'll deal na may bahaging ito mamaya - ngunit isa lamang, ako sinasabi na ang gumagamit ay dapat na nagsasaad ang magpatakbo ng ASCIIMath kasama ang isang susi, at ako na nagsasabi na ang susi na ang numero na kung saan kami ay pagpunta upang idagdag ito ng character. Kaya dito mapansin na dahil ako hinihingi ng key, dahil ako hinihingi na sila ay nagbibigay sa akin 1 bagay, Gusto ko lang tanggapin. / Asciimath at isang susi. Kaya ako pagpunta sa hinihiling na argc ay katumbas sa 2. Kung ito ay hindi, pagkatapos ay ako pagpunta sa bumalik 1 at ang programa ay lumabas. Kaya ako sinasabi Ang susi ay hindi pagpunta sa unang linya ng command argumento, ito ay ang pangalawang, at tulad ng makikita mo dito, Ako pagpunta upang i-na sa isang integer. Pagkatapos ako pagpunta upang itakda ang isang character na r. Pansinin na ang uri ng variable chr ay talagang isang integer. Ang paraan na ako ay upang gamitin ang r bilang isang integer sa pamamagitan ng encasing ito sa mga single quote. Kaya-back sa aming printf pahayag kung saan mayroon kaming isang placeholder para sa isang character at pagkatapos ay isang placeholder para sa isang integer, karakter ay kinakatawan ng chr, at integer ay ang susi. At kaya pagkatapos namin ay pagpunta sa resulta idagdag ang 2 sama-sama. Kaya kami ay pagpunta sa magdagdag ng r + anumang susi ay, at pagkatapos namin ay pagpunta sa i-print ang resulta ng na. Kaya sabihin gumawa asciimath. Ito ay hanggang sa petsa, kaya sabihin lang patakbuhin ang asciimath. Oh, ngunit tingnan, hindi ito gawin dahil hindi namin aktwal bigyan ito ng isang susi. Kaya kapag ito lamang ibinalik 1, ang aming pangunahing function na, ito ay ibinalik pabalik sa amin. Kaya pagkatapos ay sabihin pumasa sa isang susi. Isang tao bigyan ako ng isang numero. >> [Mag-aaral] 4. 4. Okay. Kaya r nadagdagan ng 4 ay upang bigyan kami ng v, na tumutugon sa ASCII halaga ng 118. Kaya ito uri ng saysay na - Aktwal, maaari kong tanungin ka, ano sa tingin mo ang ASCII halaga ng r kung r + 4 ay 118? Pagkatapos oo, r ay 114. Kaya't kung tiningnan mo sa ASCII table pagkatapos, bang sapat, makikita mo ang r na kinakatawan ng 114. Kaya ngayon na alam namin na maaari naming magdagdag ng mga integer sa character, ito tila medyo simple. Kami ay pagpunta upang umulit sa isang string tulad ng nakita natin sa isang halimbawa bago. Susuriin namin kung ito ay isang sulat. Kung ito ay, pagkatapos makikita namin shift ito sa pamamagitan ng anumang susi ay. Medyo simple, maliban kapag nakakuha ka upang gustuhin ang, makikita mo na z, kinakatawan ng 122, pagkatapos ay magbibigay sa iyo ng ibang character. Namin ang aktwal na gusto upang manatili sa loob ng aming alpabeto, i-right? Kaya kailangan namin upang malaman ang ilang mga paraan ng uri ng pambalot sa paligid. Kapag naabot mo na ang zed at gusto mong taasan ng isang tiyak na numero, hindi mo nais na pumunta sa higit sa ASCII na seksyon ng alpabeto; gusto mong I-wrap ang lahat ng mga paraan sa A. Ngunit tandaan ka pa rin pinapanatili ang kaso. Kaya alam na mga titik ay hindi maaaring maging simbolo tulad ng mga simbolo ay hindi na pagbabago pati na rin. Sa huling pset tiyak ay hindi kailangang, ngunit isang pagpipilian ay upang ipatupad ang iyong matakaw pset sa pamamagitan ng paggamit ng modulus function na. Ngunit ngayon aktwal na kami ay pagpunta sa kailangan upang gamitin ang modulus, kaya sabihin pumunta lamang sa paglipas ng ito nang kaunti. Mahalaga, kapag mayroon kang x modulo y, na nagbibigay sa iyo ng ang natitira sa mga x na hinati sa pamamagitan ng y. Narito ang ilang mga halimbawa dito. Mayroon kaming 27% 15. Talaga, kapag ikaw ay ibawas 15 mula sa 27 bilang maraming beses hangga't maaari na walang pagkuha ng negatibong makakakuha ka ng 12 kaliwa sa. Kaya na uri ng tulad ng sa konteksto ng matematika, ngunit kung paano namin maaaring aktwal na gamitin ito? Ito ay upang maging kapaki-pakinabang para sa aming mga wrapover. Para sa, sabihin lang sabihin ko tinanong mo ang lahat upang hatiin sa 3 group. Minsan gagawin mo ito sa mga pangkat at isang bagay tulad na. Sinasabi ko sinabi, "Okay, gusto ko sa iyo ang lahat ng mga nahahati sa 3." Kung paano mo maaaring gawin iyon? [Hindi marinig na mag-aaral tugon] Oo, eksakto. Bilang off. Okay. Natin ang aktwal na gawin na. Nais mong simulan? [Mag-aaral na pagbibilang off] 1, 2, 3, 4. Ngunit tandaan ... >> [Mag-aaral] Oh, paumanhin. Na talagang magandang punto. Sinabi mo 4, ngunit namin ang aktwal na nais mong sabihin 1 dahil nais lamang namin 3 group. Kaya pagkatapos, kung paano - Hindi, na talagang magandang halimbawa dahil pagkatapos kung paano mo maaaring sabihin 1? Ano ang kaugnayan sa pagitan ng 4 at 1? Well, 4 mod 3 1. Kaya kung magpapatuloy ka, gusto mo na ang 2. Kaya mayroon kami ng 1, 2, 3, 1, 2. Muli, ikaw ay talagang sa ika-5 tao. Paano mo malaman upang sabihin 2 sa halip ng 5? Sinabi mong 5 mod 3 ay 2. Gusto kong makita kung gaano karaming mga grupo ng 3 natira, pagkakasunud-sunod ang am I. At kaya pagkatapos kung patuloy namin sa kahabaan ng buong room, pagkatapos ay maaari naming makita na palagi naming ay aktwal na ng paglalapat ng mga mod function na sa ating sarili uri ng bilang ng off. Na higit pang uri ng tiyak na halimbawa ng kung paano mo maaaring gamitin ang modulo dahil ako bang karamihan sa atin na maaaring sumailalim sa proseso na kung saan kami ay upang mabilang off. Anumang mga katanungan sa modulo? Ito ay medyo mahalaga upang maunawaan ang mga konsepto ng ito, kaya gusto kong tiyakin mo guys maunawaan. [Mag-aaral] Kung may natitira hindi, ang magbibigay sa iyo ang aktwal na numero? Kung ang isa ng unang 3 sa kanila ay tapos na ito, nagbigay sa kanila kung ano ang kanilang aktwal na, o ito ibinigay sa kanila [hindi marinig] >> Iyon ay isang mahusay na tanong. Kapag walang natitira para sa modulo - kaya nating mayroon kang 6 mod 3 - na aktwal na nagbibigay sa iyo ng pabalik 0. Susubukan naming makipag-usap tungkol sa na ng kaunti mamaya. Oh oo, halimbawa, ang 3rd tao - 3 mod 3 ay talagang 0 ngunit sinabi niya 3. Kaya na uri ng tulad ng isang panloob na catch, halimbawa, tulad ng okay, kung ang mod ang 0 pagkatapos ay ako pagpunta sa ika-3 tao. Ngunit namin sa uri ng kung paano namin nais humarap sa kung ano ang 0 ay mamaya. Kaya ngayon namin sa paanuman ay isang paraan ng pagma-map ang zed sa kanan sulat. Kaya na namin ngayon ang sumailalim sa mga halimbawa, namin uri ng makita kung paano Caesar maaaring gumana. Makikita mo ang 2 titik at pagkatapos ay makikita mo ang mga ito paglilipat. Kaya sabihin subukan at ipahayag na sa mga tuntunin ng formula. Ang formula na ito ay aktwal na ibinigay sa iyo sa spec, ngunit sabihin uri ng hitsura sa pamamagitan ng kung ano ang bawat variable ay nangangahulugan. Aming resulta ng pagtatapos ay ang ciphertext. Kaya ito sabi ni na ith character ng ciphertext ay tumutugma sa ith katangian ng plaintext. Na saysay dahil gusto naming palaging lining ang mga bagay na ito. Kaya ith character ng ciphertext plus k, na ang aming key - na saysay - at pagkatapos namin ito mod 26. Tandaan muli kapag nagkaroon kami ng zed hindi namin gusto upang makakuha ng sa na character, kaya gusto naming mod ito at uri ng pambalot sa paligid ng alpabeto. Pagkatapos zed gusto mong pumunta sa isang, b, c, d, hanggang sa ikaw ay nakuha sa tamang bilang. Upang malaman namin na zed, kung + 6, ay magbibigay sa amin ng f dahil pagkatapos zed ay a, b, c, d, e, f. Kaya ipaalam tandaan na alam namin para siguraduhin na zed + 6 ay upang bigyan kami ng f. ASCII halaga, z ay 122 at f ay 102. Kaya mayroon kaming upang mahanap ang ilang mga paraan ng paggawa ng aming Caesar formula bigyan kami ng 102 pagkatapos pagkuha sa 122. Kaya kung lang namin ilapat ito formula, ang ('z' + 6)% 26, na aktwal na nagbibigay sa iyo ng 24 dahil 122 + 6 ay 128; 128% 26 ay nagbibigay sa iyo ng 24 natitira. Ngunit iyon ay hindi talaga ibig sabihin ng f. Na ang talagang hindi 102. Na rin hindi ika-6 na titik sa alpabeto. Kaya malinaw naman, kailangan namin na magkaroon ng ilang mga paraan ng pag-aayos ng ito nang kaunti. Sa mga tuntunin ng mga regular na alpabeto, alam namin na z ang ika-26 na titik at f ay ang ika-6. Ngunit hindi namin sa computer science, kaya kami ay pagpunta sa index sa 0. Kaya pagkatapos ay sa halip ng z ang bilang 26, kami ay pagpunta sa sabihin number 25 dahil may isang 0. Kaya ngayon sabihin ilapat ito formula. Mayroon kaming z kinakatawan ng 25 + 6, na kung saan ay nagbibigay sa iyo ng 31. At 31 mod 26 ay nagbibigay sa iyo ng 5 bilang isang natitira. Iyan ay perpekto dahil alam namin na ang f ang 5th titik sa alpabeto. Ngunit pa rin ito ay hindi f, i-right? Ay hindi pa rin 102. Kaya pagkatapos para sa pset, hamon ng ay sinusubukan upang malaman ang relasyon sa pagitan ng nagko-convert sa pagitan ng mga ASCII halaga at ang alpabetikong index. Mahalaga, kung ano ang gusto mong gawin, nais mong simulan ang gamit ang ASCII na mga halaga, ngunit nais mong sa paanuman isalin ang na sa isang alpabetikong index pagkatapos ay kalkulahin kung ano ang sulat na ito ay dapat - talaga, kung ano ang alpabetikong index nito ng character ng cipher - translate na bumalik sa ASCII halaga. Kaya kung ikaw manlatigo iyong ASCII talahanayan, pagkatapos subukan at maghanap ng mga relasyon sa pagitan ng, sabihin nating, 102 at 5 o ang 122 at 25. Nakuha namin ang aming key mula sa linya ng command argumento, hindi namin nakuha plaintext, kami enciphered ito. Ngayon ang lahat ng namin ang natitira upang gawin ay i-print ito. Maaari naming gawin ito ng ilang iba't ibang mga paraan. Ano ang maaari naming gawin ay aktwal na i-print ang bilang pumunta kami kasama. Bilang namin umulit sa ibabaw ng character sa string, kami lang lang i-print ang karapatan pagkatapos ay kapag namin makalkula ang mga ito. Bilang kahalili, maaari mo ring-imbak ito sa isang array at magkaroon ng isang hanay ng mga character at sa dulo umulit na buong array at i-print ito. Kaya mayroon kang ilang mga pagpipilian para sa. At tandaan na% c placeholder para sa pag-print ng isang character. Kaya mayroon kaming Caesar, at ngayon namin lumipat sa Vigenere, na na halos kapareho sa Caesar ngunit lamang bahagyang mas kumplikado. Kaya mahalagang may Vigenere ay ka pagpunta sa pagpasa sa isang keyword. Kaya sa halip ng isang numero, ikaw ay pagpunta sa magkaroon ng isang string, at sa gayon ay pagpunta sa kumilos bilang iyong keyword. Pagkatapos, gaya ng dati, ka upang makakuha ng isang prompt para sa isang string mula sa gumagamit at pagkatapos ensayper ito at pagkatapos ay bigyan sila ng ciphertext likod. Kaya bilang ko sinabi, na halos kapareho sa Caesar, maliban sa halip ng paglilipat sa pamamagitan ng isang tiyak na numero, numero ay talagang pagpunta upang baguhin ang bawat oras na character sa karakter. Upang kumatawan na aktwal na bilang upang ilipat, ito ay kinakatawan ng ang mga titik sa keyboard. Kaya kung ipinasok mo sa isang shift ng, halimbawa, pagkatapos ay tumutugma sa isang shift ng 0. Kaya muli pabalik sa alpabetikong index. Ano ang maaaring maging kapaki-pakinabang kung nakakakita ka na aktwal na kami ay pagharap sa ASCII halaga pati na rin ang mga titik, pati na rin ang alpabetikong index, maaaring mahanap o gumawa ng iyong sariling ASCII talahanayan na nagpapakita ang alpabetikong index ng 0 sa pamamagitan ng 25, ng sa pamamagitan ng z, at ang mga ASCII halaga sa gayon na maaari mong uri ng makita ang relasyon at Sketch out at subukan at mahanap ang ilang mga pattern. Gayundin, kung ikaw ay paglilipat sa ang ilang mga halimbawa sa pamamagitan ng f - at ito ay alinman sa lowercase o uppercase f - pagkatapos na tumutugma sa 5. Sigurado namin magandang sa ngayon? Ang formula para sa Vigenere ng kaunti ibang. Talaga, makikita mo na ito ay tulad ng Caesar, maliban sa halip ng k mayroon kaming k index j. Pansinin na hindi namin ginagamit i dahil mahalagang, ang haba ng keyword ay hindi nangangahulugang ang haba ng aming ciphertext. Ito ay isang bit mas malinaw kapag nakita namin ang isang halimbawa na mayroon akong isang bit sa paglaon. Talaga, kung mong patakbuhin ang iyong mga programa na may isang keyword ng ohai, pagkatapos na nangangahulugan na ang bawat oras, ohai ay pagpunta sa maging iyong shift. Kaya depende sa kung anong posisyon sa iyong keyword, ka pagpunta upang ilipat ang iyong mga ilang ciphertext character sa pamamagitan ng halagang iyon. Muli, tulad ng Caesar, nais naming tiyakin na namin mapanatili ang capitalization ng mga bagay at lamang namin mga titik ng ensayper, hindi character o puwang. Kaya tumingin pabalik sa Caesar sa mga function na maaaring ginamit mo, ang paraan na napagpasyahan mo kung paano upang ilipat ang mga bagay, at ilapat na sa iyong programa dito. Kaya sabihin map ito. Mayroon kaming plaintext na aming nakuha mula sa user GetString sinasabi ito ... ay CS50! Pagkatapos kami ay may isang keyword ng ohai. Ang unang 4 na mga character ay medyo simple. Alam namin na ang T ay pagpunta sa Paglipat sa pamamagitan ng o, pagkatapos ay h ay pagpunta sa Paglipat sa pamamagitan ng h, i pagpunta sa Paglipat ng isang. Narito mong makita na ang isang kumakatawan 0, kaya pagkatapos ang halaga ng pagtatapos ay talagang ang parehong mga titik tulad ng dati. Pagkatapos s Paglipat sa pamamagitan ng i. Ngunit mayroon kang mga tagal na ito dito. Hindi namin gusto upang ensayper na, kaya hindi namin baguhin ito sa pamamagitan ng anumang at i-print ang panahon hindi nabago. [Mag-aaral] hindi ko maintindihan kung paano alam mo na ito ay Paglipat sa pamamagitan ng - Saan ginawa mo - >> Oh, paumanhin. Sa tuktok dito mo makita na ang linya ng command argumento ohai dito, na ang keyword. At kaya talaga, ka umiikot sa ibabaw ng mga character sa keyword. [Mag-aaral] Kaya o ay pagpunta sa paglilipat sa parehong - Kaya o kumakatawan sa isang tiyak na numero sa alpabeto. [Mag-aaral] Kanan. Ngunit kung saan ay makuha mo ang CS50 bahagi mula sa? Oh. Na nasa na GetString kung saan ikaw ay tulad ng, "Bigyan mo ako ng isang string upang i-encode." [Mag-aaral] Sila ay pagpunta sa bigyan mo na argumento upang ilipat sa pamamagitan ng at pagkatapos mong hilingin para sa iyong unang string. >> Oo. Kaya kapag nagpatakbo sila sa programa, sila ay upang isama ang mga keyword sa kanilang mga argumento sa linya ng command na kapag tumakbo ang mga ito. Pagkatapos ay sa sandaling nasuri na aktwal na nagbigay sa iyo ng 1 at hindi higit pa, hindi mas mababa, ka upang i-prompt ang mga ito para sa isang string, sabihin nating, "Bigyan mo ako ng isang string." Kaya na kung saan sa kasong ito Nagbigay mo ito ... ay CS50! Kaya ka upang gamitin na at gamitin ang ohai at umulit sa paglipas ng. Pansinin na dito namin nilaktawan sa paglipas ng encrypt ang tagal, ngunit sa mga tuntunin ng aming posisyon para sa ohai, sa susunod na ginamit namin o. Sa kasong ito ng kaunti mahirap upang makita dahil na 4, kaya sabihin ipagpatuloy ng kaunti. Lamang dumikit sa akin dito. Pagkatapos mayroon kaming i at s, na pagkatapos ay isinalin sa pamamagitan ng o at h ayon sa pagkakasunud-sunod. Pagkatapos kami ay may isang puwang, at kaya alam namin na hindi namin sa ensayper ang mga puwang. Ngunit paunawa na sa halip ng pagpunta sa isang lugar na ito dito mismo, kami ay encrypt ng isang - Hindi ko alam kung maaari mong makita na - dito mismo. Kaya hindi ito gusto mo aktwal na paunang natukoy na, sabihin nating, o pupunta dito, h pupunta dito, isang Dito ilalagay, i napupunta dito, o, h, ng, i, o, h,, i. Hindi mo kailangang gawin iyon. Mo lamang ilipat ang iyong posisyon sa keyword kapag alam mo na aktwal na na-encrypt ng isang aktwal na sulat. Ba na uri ng kabuluhan? Okay. Kaya lamang ang ilang mga paalala. Nais mong tiyakin mo lamang advance sa susunod na titik sa iyong keyword kung ang character sa iyong plaintext ng sulat. Kaya nating kami sa o. Napansin namin na ang susunod na character, i index ng plaintext, ay isang numero, halimbawa. Pagkatapos hindi namin advance j, ang index para sa aming mga keyword, hanggang sa maabot namin ng isa pang liham. Muli, nais mo ring tiyakin na wraparound sa simula ng keyword kapag handa ka sa dulo nito. Kung nakikita mo dito kami sa i, sa susunod na o. Kaya gusto mong mahanap ang ilang mga paraan ng pagiging magagawang wraparound sa simula ng iyong keyword sa bawat oras na maabot mo ang katapusan. At kaya muli, kung anong uri ng operator ay kapaki-pakinabang sa kasong iyon para sa pambalot sa paligid? Gusto sa pagbilang off Halimbawa. [Mag-aaral] Ang porsyento sign. >> Oo, ang porsyento sign, na modulo. Kaya modulo ay darating sa madaling-gamiting dito kapag gusto mong I-wrap ang ibabaw ng index sa iyong ohai. At ng mabilis na pahiwatig: Subukang mag-isip ng pambalot sa ibabaw ng keyword ng kaunti tulad ng pagbibilang off, kung saan kung may 3 group, ang ika-4 na tao, ang kanilang numero na sinabi nila 4 mod 3, kung saan ay 1. Kaya subukan at sa tingin ng mga ito na paraan. Tulad ng nakita mo sa formula, saanman mayroon kang ci at pagkatapos pay ngunit pagkatapos kj, nais mong tiyakin na iyong panatilihin ang track ng mga. Hindi mo na kailangang tumawag ito i, hindi mo na kailangan na tumawag ito j, ngunit nais mong tiyakin na iyong subaybayan ng posisyon na ikaw ay sa sa iyong plaintext pati na rin ang posisyon na ikaw ay nasa sa iyong keyword dahil iyon ay hindi kinakailangan ang parehong. Hindi lamang ang ipinapakita sa keyword - maaaring ito ay isang ganap na naiibang mga na haba kaysa sa iyong plaintext. Gayundin, ang iyong plaintext, may mga numero at mga character, kaya hindi ito perpektong tumutugma sama-sama. Oo. [Mag-aaral] Mayroon bang isang function na baguhin ang kaso? Maaari mong baguhin ang isang sa kabisera A? >> Oo, mayroong tiyak ay. Maaari mong tingnan ang - tingin ko ito ay toupper, ang lahat ng 1 salita. Ngunit kapag sinusubukan mong i-Cipher bagay at mapanatili ang teksto, ito ay pinakamahusay na isa lamang na magkaroon ng hiwalay na mga kaso. Kung ito ay isang uppercase, nais mong upang ilipat sa pamamagitan ng ito dahil sa iyong formula, kapag tiningnan mo pabalik kung mayroon kaming sa uri ng go salitan sa pagitan ng mga ASCII na paraan ng kumakatawan sa mga numero at ang aktwal na alpabetikong index, nais naming tiyakin mayroong pagpunta sa ilang uri ng mga pattern na kayo ay pagpunta sa gamitin. Isa pang tandaan sa pattern, ang aktwal na. Ay pagpunta sa tiyak na pagharap sa mga numero. Subukan ang hindi upang gamitin ang mga magic numero, na kung saan ay isang halimbawa ng estilo. Kaya natin na gusto mo sa bawat shift ng oras ng isang bagay sa pamamagitan ng bang - Okay, kaya pahiwatig, ang isa pang spoiler kapag ikaw ay pagpunta sa paglilipat ng isang bagay sa pamamagitan ng isang tiyak na halaga, subukan ang hindi upang kumatawan na sa pamamagitan ng isang aktwal na numero ngunit sa halip ay subukan at makita kung maaari mong gamitin ang ASCII halaga, na kung saan ay uri ng gumawa ng higit pang kahulugan. Isa pang tandaan: Dahil kami ay pagharap sa formula, kahit na ang iyong tf uri ng pag-alam kung ano ang pattern maaari mong gamit, pinakamahusay na sa iyong mga komento uri ng ipaliwanag ang logic, i, "Ako gamit ang pattern na ito dahil sa ..." at uri ng ipaliwanag succinctly ang pattern sa iyong mga komento. [Ito ay walkthrough 2] Kung walang anumang iba pang mga katanungan, kukunin ko na lang manatili dito para sa ilang sandali. Good luck sa iyong pset 2: Crypto at salamat para sa darating na. [Mag-aaral] Salamat. >> Salamat. [Media Offline intro]