1 00:00:00,000 --> 00:00:01,940 [Powered by Google Translate] [Walkthrough - Problema Set 2] 2 00:00:01,940 --> 00:00:04,130 [Zamyla Chan - Harvard University] 3 00:00:05,170 --> 00:00:07,490 [Ito ay CS50. CS50.TV] 4 00:00:07,490 --> 00:00:10,750 Ayos lang. Hello, lahat, at maligayang pagdating sa walkthrough 2. 5 00:00:10,750 --> 00:00:14,330 Una, gusto kong batiin para sa pagtatapos pset 1. 6 00:00:14,330 --> 00:00:18,140 Alam ko na ito ng kaunti matigas para sa ilan sa inyo, 7 00:00:18,140 --> 00:00:20,460 maaaring iyong unang computer program na iyong sinulat ni, 8 00:00:20,460 --> 00:00:24,500 ngunit lamang tandaan na sa dulo ng ito, kapag tiningnan mo sa katapusan ng semestre, 9 00:00:24,500 --> 00:00:29,820 makikita mo tumingin sa pset 1 at makikita mo sabihing, "Uy, maaari ko tapos na sa loob ng 5 minuto." 10 00:00:29,820 --> 00:00:35,700 Upang malaman at pinagkakatiwalaan na sa dulo ng makikita mo talagang mahanap pset 1 medyo simple. 11 00:00:35,700 --> 00:00:40,640 Ngunit sa ngayon ito ay isang malaking katuparan, at binabati kita para sa nagsisimula tapos. 12 00:00:40,640 --> 00:00:44,010 Ngayon, din ng isang mabilis na tandaan bago makuha namin sa karne ng walkthrough. 13 00:00:44,010 --> 00:00:48,340 Gusto ko lang upang makagawa ng isang mabilis na tandaan na ako minsan ay hindi magkakaroon ng sapat na oras 14 00:00:48,340 --> 00:00:52,500 sa panahon ng walkthroughs upang pumunta sa pamamagitan ng bawat solong paraan ng paggawa ang problema set 15 00:00:52,500 --> 00:00:56,140 at sa halip lamang maaaring tumutok sa 1 o 2 uri ng pagpapatupad, 16 00:00:56,140 --> 00:00:57,750 mga paraan na maaari mong gawin ito. 17 00:00:57,750 --> 00:01:01,970 Ngunit iyon ay hindi upang sabihin na ikaw ay ipinagbabawal mula sa paggawa sa ito ng isa pang paraan. 18 00:01:01,970 --> 00:01:05,980 Mayroong madalas, sa computer science, maraming mga paraan ng paggawa ng mga bagay, 19 00:01:05,980 --> 00:01:12,190 at kaya talagang huwag mag-atubiling gumamit ng ibang uri ng solusyon kaysa sa maaari ko ipinakita. 20 00:01:12,190 --> 00:01:14,520 [Pset 2: Crypto - Zamyla Chan - zamyla@cs50.net] 21 00:01:14,520 --> 00:01:17,160 [Pset2 - 0. Isang Seksyon ng mga Tanong - 1. Caesar - 2. Vigenere] 22 00:01:17,160 --> 00:01:20,650 Ayos lang. Kaya ang problema magtakda ng 2: Crypto ay isang masaya. 23 00:01:20,650 --> 00:01:24,500 Muli, sa bawat pset makikita mong magsimula sa isang seksyon ng mga katanungan 24 00:01:24,500 --> 00:01:29,600 na pagpunta sa isagawa sa iyong mga seksyon sa iyong itinalaga na pagtuturo ng kapwa. 25 00:01:29,600 --> 00:01:31,670 Hindi namin ay pagpunta sa pumunta sa pamamagitan ng mga ibabaw ng walkthrough, 26 00:01:31,670 --> 00:01:35,100 ngunit tiyak na sila ay makakatulong sa mong kumpletuhin ang pset. 27 00:01:35,100 --> 00:01:38,100 Kaya ang unang bahagi ng hanay ng problema ay Caesar. 28 00:01:38,100 --> 00:01:43,470 At iba pa sa Caesar isang tao ay pumasa sa iyo ng isang susi sa isang integer, 29 00:01:43,470 --> 00:01:48,420 at i-encrypt mo ang isang string ng teksto na nagbibigay ka nila 30 00:01:48,420 --> 00:01:50,670 at bigyan sila ng isang naka-encrypt na bagay. 31 00:01:50,670 --> 00:01:56,050 Kung sinuman ang pinanood A Christmas Story, ang isang halimbawa ng na mayroong. 32 00:01:56,050 --> 00:01:59,090 Pagkatapos ang ikalawang bahagi ng hanay ng problema ay Vigenere, 33 00:01:59,090 --> 00:02:01,790 na ang mas advanced na diskarte sa pag-encrypt. 34 00:02:01,790 --> 00:02:05,640 At sa gayon kami ay pagpunta sa ensayper isang piraso ng teksto, 35 00:02:05,640 --> 00:02:09,600 maliban sa halip ng isang integer, aktwal na kami ay upang i-encode ito 36 00:02:09,600 --> 00:02:13,340 na may isang keyword na ang gumagamit ay magbigay sa amin. 37 00:02:16,270 --> 00:02:22,090 Okay, kaya ang unang tool sa toolbox ngayon ay talagang pagpunta sa pag-update ng appliance. 38 00:02:22,090 --> 00:02:26,430 Sa board ng talakayan namin makita ang mga bagay tulad ng, "Bakit hindi ito gumagana?" 39 00:02:26,430 --> 00:02:28,110 "Bakit hindi Isumite ang 50 trabaho?" 40 00:02:28,110 --> 00:02:31,830 at madalas solusyon ay talagang lamang upang i-update ang iyong appliance. 41 00:02:31,830 --> 00:02:36,730 At kaya kung mo lamang tumakbo sa isang terminal na window sa iyong appliance sudo yum-y - 42 00:02:36,730 --> 00:02:40,040 na isang flag na nagsasabi oo, i-update ang lahat - update, 43 00:02:40,040 --> 00:02:42,280 pagkatapos ay mag-a-update ang iyong appliance kung kailangan maging. 44 00:02:42,280 --> 00:02:46,960 At hindi ito ay nasaktan kung ka na sa pinakabagong bersyon ng appliance. 45 00:02:46,960 --> 00:02:51,280 Pagkatapos ay lamang ito sabihin walang mga bagong update na magagamit at maaari mong patuloy na nagtatrabaho sa kahabaan. 46 00:02:51,280 --> 00:02:55,800 Ngunit ito ay handa na upang isakatuparan kahit na sa bawat oras na buksan mo ang appliance 47 00:02:55,800 --> 00:02:57,140 dahil hindi namin pa rin napaka - 48 00:02:57,140 --> 00:03:00,320 minsan kung dumating kami sa isang bug - pag-aayos ng ito sa appliance. 49 00:03:00,320 --> 00:03:03,180 Kaya't tiyakin na mayroon ka ng pinakabagong bersyon ng appliance 50 00:03:03,180 --> 00:03:07,710 at magpatakbo ng na-update doon. 51 00:03:07,710 --> 00:03:14,360 Ayos lang. Kaya dahil kami ay pagharap sa mga titik at pagbabago, enciphering ng mga bagay, 52 00:03:14,360 --> 00:03:20,410 kami ay pagpunta sa talagang gusto upang maging pinakamahusay na mga kaibigan sa aming ASCII chart. 53 00:03:20,410 --> 00:03:24,350 Mayroong maraming mga online, kung nakita mo. Siguro kahit na gumawa ng iyong sariling. 54 00:03:24,350 --> 00:03:29,950 Talaga, sa bawat titik at bawat numero at bawat karakter 55 00:03:29,950 --> 00:03:32,210 may isang numero na nauugnay sa mga ito, 56 00:03:32,210 --> 00:03:38,670 at kaya magandang upang makita ang kanilang mga ASCII halaga sa tabi ng aktwal na sulat. 57 00:03:38,670 --> 00:03:42,310 Na ay tiyak na makakatulong sa iyo sa hanay ng problema. 58 00:03:42,310 --> 00:03:45,750 Isang bagay na talagang nakatulong sa akin sa set na ito ng problema ay sa aktwal na i-print ito, 59 00:03:45,750 --> 00:03:48,380 at bilang ako ay pagpunta sa pamamagitan ng, Gusto ko aktwal na gumuhit dito, 60 00:03:48,380 --> 00:03:51,150 sumulat, "Kung ito ay pumunta sa doon, pagkatapos ..." 61 00:03:51,150 --> 00:03:55,270 Uri ng gumuhit ito at markahan ang mga ito, maging ang pinakamahusay na mga kaibigan gamit ang iyong ASCII talahanayan. 62 00:03:57,240 --> 00:04:00,750 Pagkatapos mayroon kaming ilang iba pang mga tool sa aming itapon. 63 00:04:00,750 --> 00:04:03,750 Oras na ito sa halip na aktwal na pagdikta sa gumagamit para sa lahat ng kanilang mga input 64 00:04:03,750 --> 00:04:05,230 kami ay pagpunta sa gawin ang isang kumbinasyon. 65 00:04:05,230 --> 00:04:06,880 Kami ay pagpunta upang i-prompt ang mga ito para sa ilang mga input, 66 00:04:06,880 --> 00:04:11,350 ngunit din namin ay lamang gamitin ang mga argumento sa command line. 67 00:04:11,350 --> 00:04:15,600 Kaya kapag pinatakbo nila ang kanilang mga programa, karaniwang sabihin sa iyo. / Kumusta, halimbawa, 68 00:04:15,600 --> 00:04:17,310 kung ang iyong programa ay hello.c. 69 00:04:17,310 --> 00:04:22,500 Ngunit ang oras na ito sa halip na lamang na nagsasabi na, maaari silang maglagay ng mga salita, argumento pagkatapos. 70 00:04:22,500 --> 00:04:27,210 At sa gayon kami ay pagpunta upang gamitin ang anumang mga pumasa ang mga iyon sa sa amin bilang kanilang input pati na rin, 71 00:04:27,210 --> 00:04:31,720 kaya gumagalaw na lampas lamang pagdikta para sa integer ngunit din gamit ang mga utos line argumento. 72 00:04:31,720 --> 00:04:36,590 At pagkatapos ay gagamitin namin pumunta sa array at string, na makikita namin ang paggamit ng maraming pati na rin. 73 00:04:41,460 --> 00:04:44,810 Narito ang isang halimbawa lamang ng 1 mini ASCII chart. 74 00:04:44,810 --> 00:04:48,460 Tulad ng aking sinabi, ang bawat titik ay kumakatawan sa isang numero, 75 00:04:48,460 --> 00:04:52,510 at kaya ay gawing pamilyar ang iyong sarili sa na. Ito ay darating sa madaling-gamiting. 76 00:04:52,510 --> 00:04:55,610 At ibang pagkakataon kapag nagsimula namin ang paggawa ng ilang ASCIIMath pagharap sa ang mga numero - 77 00:04:55,610 --> 00:05:00,110 pagdaragdag, pagbabawas sa kanila - pagkatapos ay tiyak magandang upang sumangguni sa tsart na ito. 78 00:05:02,860 --> 00:05:06,920 Kaya narito ang isang halimbawa ng isang Caesar cipher - isang bagay na maaari mong-play na may. 79 00:05:06,920 --> 00:05:11,190 Ito ay isang wheel. Mahalaga, may ay isang panlabas na alpabeto at pagkatapos ay isang panloob na alpabeto. 80 00:05:11,190 --> 00:05:15,290 Kaya karapatan dito ay isang halimbawa ng Caesar cipher ngunit may isang key ng 0. 81 00:05:15,290 --> 00:05:21,540 Mahalaga, ay nakahanay na A, B ay nakahanay sa B, ang lahat ng mga paraan sa Z. 82 00:05:21,540 --> 00:05:26,590 Ngunit pagkatapos ay sabihin gusto namin ng key ng 3, halimbawa. 83 00:05:26,590 --> 00:05:33,280 Pagkatapos ay namin ikutin ang inner wheel upang ang A ngayon aligns may D, atbp. 84 00:05:33,280 --> 00:05:35,250 At kaya ito ay mahalagang kung ano ang kami ay pagpunta sa gawin. 85 00:05:35,250 --> 00:05:38,340 Hindi namin wheel, ngunit kung ano ang kami ay pagpunta sa gawin ay gumawa ng aming programa 86 00:05:38,340 --> 00:05:44,490 uri ng shift ang alpabeto kasama ang sa amin ng isang tiyak na halaga ng mga numero. 87 00:05:44,490 --> 00:05:48,650 Kaya bilang ko sinabi bago, kami ay pagpunta sa pagharap sa mga argumento command line 88 00:05:48,650 --> 00:05:50,390 pati na rin ang pagkuha ng isang integer. 89 00:05:50,390 --> 00:05:55,050 Kaya ang paraan na ang isang gumagamit ay patakbuhin ang iyong mga programa sa Caesar sa pamamagitan ng sinasabi. / Caesar 90 00:05:55,050 --> 00:05:58,090 at pagkatapos ng pagpasok ng isang numero pagkatapos na. 91 00:05:58,090 --> 00:06:01,130 At bilang na kumakatawan sa key, ang shift, 92 00:06:01,130 --> 00:06:06,740 kung gaano karaming beses ka na umiikot ang inner wheel ng iyong Caesar cipher. 93 00:06:06,740 --> 00:06:08,390 At kaya makikita mo dito ang isang halimbawa. 94 00:06:08,390 --> 00:06:14,550 Kung ipinasok namin ang mga titik mula sa A hanggang L sa aming Caesar cipher, 95 00:06:14,550 --> 00:06:19,520 pagkatapos ay gagawin ito input D sa pamamagitan ng O dahil na ang bawat titik na Paglipat higit sa 3 beses, 96 00:06:19,520 --> 00:06:22,080 tulad ng ang halimbawa ng wheel na aking ipinakita sa iyo. 97 00:06:22,080 --> 00:06:25,300 Kaya kung ikaw ipinasok, halimbawa, ito ay CS50! 98 00:06:25,300 --> 00:06:27,960 pagkatapos ay ito ring ilipat ang lahat ng ang mga titik. 99 00:06:27,960 --> 00:06:31,040 At na ang isang mahalagang bagay sa parehong Caesar at Vigenere 100 00:06:31,040 --> 00:06:34,890 na kami ay pagpunta upang laktawan ang anumang hindi-titik. 101 00:06:34,890 --> 00:06:39,160 Kaya ang anumang mga puwang, mga character, atbp, numero, kami ay pagpunta upang panatilihin ang mga ito sa parehong. 102 00:06:39,160 --> 00:06:42,920 Lamang namin ay upang ilipat ang mga titik sa kasong ito. 103 00:06:42,920 --> 00:06:45,870 Upang makita ka sa wheel, kami lamang ang mga titik na magagamit sa amin, 104 00:06:45,870 --> 00:06:50,150 kaya nais lamang namin upang ilipat ang mga titik at i-encrypt ang mga titik. 105 00:06:51,370 --> 00:06:56,720 Kaya ang unang bagay na gawin, nakita mo na ang paggamit para sa Caesar sa problema itakda 2 106 00:06:56,720 --> 00:07:05,280 ay upang patakbuhin ang Caesar at pagkatapos ay ipasok ang isang numero kapag kang magpatakbo ang mga ito sa terminal. 107 00:07:05,280 --> 00:07:10,940 Kaya kung ano ang kailangan namin upang gawin ay sa paanuman makakuha ng na key at i-access ito. 108 00:07:10,940 --> 00:07:14,730 At kaya gusto naming sa paanuman makita ito ay pagpunta sa pangalawang linya ng command argumento. 109 00:07:14,730 --> 00:07:20,950 Ang unang. / Caesar, at sa susunod na ang key bilang. 110 00:07:22,190 --> 00:07:29,200 Kaya bago nagkaroon kami int pangunahing (walang bisa) upang simulan ang aming mga programa sa C. 111 00:07:29,200 --> 00:07:31,790 Kami ay pagpunta sa alisan ng balat likod ng layer ng kaunti 112 00:07:31,790 --> 00:07:34,720 at makita ang aktwal na sa halip ng pagpasa sa walang bisa sa aming pangunahing function na 113 00:07:34,720 --> 00:07:37,920 aktwal na kami ay pagharap sa 2 parameter. 114 00:07:37,920 --> 00:07:44,070 Mayroon kaming isang int na may pangalang argc at pagkatapos ay isang array ng mga string na tinatawag argv. 115 00:07:44,070 --> 00:07:46,030 Kaya argc ay isang integer, 116 00:07:46,030 --> 00:07:49,640 at kumakatawan sa bilang ng mga argumento na ang pumasa sa iyong programa. 117 00:07:49,640 --> 00:07:53,590 At pagkatapos argv ay talagang ang listahan ng argumento pumasa sa. 118 00:07:53,590 --> 00:08:00,820 Lahat ng argumento ay string, at iba pa argv ay kumakatawan sa isang array, isang listahan, ng mga string. 119 00:08:01,830 --> 00:08:03,990 Natin makipag-usap tungkol sa mga array ng ilang sandali. 120 00:08:03,990 --> 00:08:05,940 Array ay mahalagang isang bagong istraktura ng data. 121 00:08:05,940 --> 00:08:09,660 Mayroon kaming ints, namin doubles, mayroon kami ng mga string, at ngayon ay mayroon kaming array. 122 00:08:09,660 --> 00:08:13,820 Array ay mga istraktura ng data na maaaring magkaroon ng maramihang mga halaga ng parehong uri, 123 00:08:13,820 --> 00:08:18,320 kaya mahalagang, ang isang listahan ng anumang uri na nais mong. 124 00:08:18,320 --> 00:08:24,400 Mahalaga, kung gusto mo ang isang listahan ng mga integer lahat sa 1 variable, 125 00:08:24,400 --> 00:08:29,090 nais mong lumikha ng isang bagong variable na ng uri int array. 126 00:08:29,090 --> 00:08:34,450 Kaya array ay zero-naka-index, ibig sabihin na ang unang elemento ng array ay sa index 0. 127 00:08:34,450 --> 00:08:41,799 Kung array ay ng haba 4, tulad ng sa halimbawang ito, ang iyong huling elemento sa index 3, 128 00:08:41,799 --> 00:08:44,810 na 4 na - 1. 129 00:08:45,940 --> 00:08:48,420 Kaya upang lumikha ng array, gusto mong gawin ang isang bagay tulad nito. 130 00:08:48,420 --> 00:08:51,440 Sinabi mong gusto double array. 131 00:08:51,440 --> 00:08:56,520 Ito napupunta para sa anumang uri ng mga uri ng data, bagaman. 132 00:08:56,520 --> 00:09:00,210 Kaya nating gusto mo ng double array. Natin na nais mong tawagan ito mailbox. 133 00:09:00,210 --> 00:09:04,760 Tulad lamang ng gusto mong simulan ang anumang iba pang mga double, 134 00:09:04,760 --> 00:09:09,760 nais mong sabihin double at pagkatapos ang pangalan, ngunit ang oras na ito na inilalagay namin ang mga square bracket, 135 00:09:09,760 --> 00:09:13,570 at pagkatapos ay ang bilang ay magkakaroon ang haba ng array. 136 00:09:13,570 --> 00:09:16,840 Tandaan na sa array ay hindi kailanman namin maaaring baguhin ang haba, 137 00:09:16,840 --> 00:09:21,230 upang lagi mong upang tukuyin at piliin kung gaano karaming mga kahon, 138 00:09:21,230 --> 00:09:25,440 kung gaano karaming mga halaga ang iyong array ay pagpunta upang i-hold. 139 00:09:25,440 --> 00:09:31,820 Kaya upang magtakda ng iba't ibang mga halaga sa iyong array, ka pagpunta sa gamitin ang sumusunod na syntax na ito, 140 00:09:31,820 --> 00:09:33,200 tulad ng makikita mo sa slide. 141 00:09:33,200 --> 00:09:37,620 Mayroon kang 0 sa index ng mailbox ay itatakda sa 1.2, 142 00:09:37,620 --> 00:09:42,180 mailbox index 1 set sa 2.4, atbp. 143 00:09:42,180 --> 00:09:47,910 Kaya ngayon na nasuri namin ang array bit ng, sabihin bumalik sa argc at argv. 144 00:09:47,910 --> 00:09:52,220 Alam namin na ang argv na ngayon ang isang array ng mga string. 145 00:09:52,220 --> 00:09:55,080 Kaya kapag ang isang gumagamit ay ipinapasa sa - sabihin nila ang pagpapatakbo ng isang programa - 146 00:09:55,080 --> 00:09:58,740 sinasabi nila. / kumusta David Malan, 147 00:09:58,740 --> 00:10:05,160 kung ano ang programa ay gawin para sa iyo ay aktwal ay sa kung ano argc at argv. 148 00:10:05,160 --> 00:10:07,620 Kaya hindi mo kailangang mag-alala tungkol sa na. 149 00:10:07,620 --> 00:10:14,370 Argc sa kasong ito ay magiging 3 dahil ito ay nakikita ng mga 3 natatanging mga salita na pinaghiwalay ng mga puwang. 150 00:10:14,370 --> 00:10:18,850 At kaya ang array sa halimbawang ito, ang unang na-index ay. / Kumusta, 151 00:10:18,850 --> 00:10:21,770 sa susunod David, sa susunod na Malan. 152 00:10:21,770 --> 00:10:25,640 Ba ang sinuman makita kaagad kung ano ang kaugnayan sa pagitan ng argv, 153 00:10:25,640 --> 00:10:28,990  array, at argc ay? 154 00:10:32,820 --> 00:10:38,090 Oo. Susubukan naming makakuha ng sa na sa isang halimbawa sa args.c. 155 00:10:38,090 --> 00:10:42,880 Natin makita kung maaari naming samantalahin ang relasyon sa pagitan ng 2. 156 00:10:42,880 --> 00:10:46,550 Dito maaari mong makita na sa appliance ang default na application 157 00:10:46,550 --> 00:10:49,450 upang buksan. file c ay minsan Emacs. 158 00:10:49,450 --> 00:10:54,660 Ngunit nais naming humarap sa gedit, kaya kung ano ang maaari mong gawin ay maaari mong i-right click sa iyong file na C, 159 00:10:54,660 --> 00:11:04,580 pumunta sa Properties, Buksan Gamit, at pagkatapos ay piliin ang gedit, Itakda bilang default, 160 00:11:04,580 --> 00:11:13,020 at ngayon ang iyong programa ay dapat buksan sa gedit sa halip ng Emacs. 161 00:11:14,710 --> 00:11:16,290 Perpekto. 162 00:11:17,120 --> 00:11:25,520 Kaya dito Mayroon akong isang programa na gusto kong i-print ang bawat argument ng linya ng command na. 163 00:11:25,520 --> 00:11:32,050 Kaya anumang ang user input, gusto kong mahalagang ibalik ito pabalik sa kanila sa isang bagong linya. 164 00:11:32,050 --> 00:11:36,710 Kaya kung ano ang isang istraktura na maaari naming gamitin upang umulit sa isang bagay - 165 00:11:36,710 --> 00:11:40,380 isang bagay na malamang na ginamit sa iyong pset 1? 166 00:11:40,380 --> 00:11:45,840 Kung gusto mong pumunta sa pamamagitan ng isang nakatakda na bilang ng mga bagay? >> [Mag-aaral] Para sa loop. 167 00:11:45,840 --> 00:11:48,910 Para sa loop. Eksakto. Kaya ipaalam sa magsimula sa para sa loop. 168 00:11:48,910 --> 00:11:56,900 Na mayroon kami para sa int i = 0. Sabihin lang magsimula gamit ang isang karaniwang Pinasimulan variable. 169 00:11:56,900 --> 00:12:02,370 Ako pagpunta sa iwan ang mga kondisyon para sa isang hanay at pagkatapos ay sabihin i + +, upang gawin ang mga bagay doon. 170 00:12:02,370 --> 00:12:04,090 Ayos lang. 171 00:12:04,090 --> 00:12:11,590 Kaya iniisip pabalik sa argv, kung argv ang listahan ng mga argumento na nakapasa sa sa programa 172 00:12:11,590 --> 00:12:15,380 at argc ay ang bilang ng mga argumento sa programa, 173 00:12:15,380 --> 00:12:21,280 pagkatapos na nangangahulugan na argc ay mahalagang ang haba ng argv, kanan, 174 00:12:21,280 --> 00:12:28,970 dahil doon ng maraming mga argumento bilang ang halaga ng argc. 175 00:12:28,970 --> 00:12:35,910 Kaya kung gusto naming upang umulit sa bawat elemento sa argv, 176 00:12:35,910 --> 00:12:43,290 kami ay pagpunta sa gusto sa bawat oras na ma-access ang variable sa argv sa ibinigay na index. 177 00:12:43,290 --> 00:12:49,060 Na maaaring katawanin na ito, i-right? 178 00:12:49,060 --> 00:12:53,430 Ito variable sa kumakatawan sa partikular na string sa pagkakataong ito 179 00:12:53,430 --> 00:12:57,030 dahil ito ay isang string array - partikular na string sa na ibinigay na index. 180 00:12:57,030 --> 00:13:00,690 Ano ang gusto naming gawin, sa kasong ito, gusto naming i-print ito, kaya sabihin nating printf. 181 00:13:00,690 --> 00:13:04,680 At ngayon argv ay isang string, kaya gusto naming maglagay na placeholder doon. 182 00:13:04,680 --> 00:13:08,430 Gusto namin ng isang bagong linya lamang upang gawin itong tumingin magandang. 183 00:13:08,430 --> 00:13:12,530 Kaya dito mayroon kami ng para sa loop. Hindi namin ang kundisyon. 184 00:13:12,530 --> 00:13:20,020 Kaya i nagsisimula sa 0, at pagkatapos ay sa bawat oras na ito upang i-print ang ibinigay na string 185 00:13:20,020 --> 00:13:22,980 sa na partikular na index sa array. 186 00:13:22,980 --> 00:13:28,410 Kaya kapag gusto naming upang ihinto ang pag-print ang mga elemento sa array? 187 00:13:28,410 --> 00:13:35,720 Kapag tapos kami, tama? Kapag namin Naabot mo na ang dulo ng array. 188 00:13:35,720 --> 00:13:38,870 Kaya hindi namin nais na lumampas sa nakaraan ang haba ng array, 189 00:13:38,870 --> 00:13:43,700 at alam namin na hindi namin kailangan sa aktwal na aktibong malaman kung ano ang haba ng argv 190 00:13:43,700 --> 00:13:47,520 dahil ito ibinigay sa atin, at kung ano ang na? Argc. Eksakto. 191 00:13:47,520 --> 00:13:56,640 Kaya gusto naming gawin ang prosesong ito number argc ng beses. 192 00:13:56,640 --> 00:13:59,550 Hindi ako sa tamang directory. 193 00:14:02,100 --> 00:14:03,490 Ayos lang. 194 00:14:03,490 --> 00:14:08,990 Ngayon sabihin gumawa args. Walang mga error, na kung saan ay mahusay. 195 00:14:08,990 --> 00:14:11,430 Kaya sabihin lang patakbuhin ang mga args. 196 00:14:11,430 --> 00:14:15,130 Ano ito upang bumalik sa amin? Lamang ito upang i-print muli ang mga ito. 197 00:14:15,130 --> 00:14:18,320 "Ikaw inputted args sa programa; ako pagpunta sa bigyan ito pabalik sa iyo." 198 00:14:18,320 --> 00:14:23,170 Kaya sabihin nating gusto naming sabihin mga args pagkatapos foo bar. 199 00:14:23,170 --> 00:14:26,570 Kaya pagkatapos ito ng mga Kopya ito pabalik sa amin. Lahat ng karapatan? 200 00:14:26,570 --> 00:14:30,790 Kaya may isang halimbawa ng kung paano maaari mong gamitin ang argc at argv 201 00:14:30,790 --> 00:14:33,460 alam na argc kumakatawan ang haba ng argv. 202 00:14:33,460 --> 00:14:42,750 Tiyakin na hindi mo kailanman na may mga array ng access isa higit sa haba ng array 203 00:14:42,750 --> 00:14:45,140 dahil C ay talagang shout sa iyo. 204 00:14:45,140 --> 00:14:47,560 Makakakuha ka ng isang bagay na tinatawag ng segmentation fault, 205 00:14:47,560 --> 00:14:52,470 kung saan ay hindi kailanman masaya, talaga sinasabi sinusubukan mong i-access ang isang bagay 206 00:14:52,470 --> 00:14:55,000 na hindi umiiral, ay hindi nabibilang sa iyo. 207 00:14:55,000 --> 00:14:59,430 Kaya tiyaking, at lalo na ang zero-pag-index, hindi namin nais na - 208 00:14:59,430 --> 00:15:02,390 Gusto halimbawa, kung kami ay may isang array ng haba 4, 209 00:15:02,390 --> 00:15:07,240 na array index 4 ay hindi umiiral dahil sisimulan namin sa 0, sa zero index. 210 00:15:07,240 --> 00:15:11,730 Ito ay maging pangalawang kalikasan tulad ng para sa loop kapag nagsimula kami sa 0. 211 00:15:11,730 --> 00:15:13,610 Kaya lamang panatilihin na sa isip. 212 00:15:13,610 --> 00:15:22,590 Hindi mo nais na sakaling ma-access ang index ng isang array na lagpas sa iyong abot. 213 00:15:26,710 --> 00:15:32,560 Upang maaari naming makita ngayon kung paano maaari namin ang uri ng pag-access 214 00:15:32,560 --> 00:15:35,930 ang command line argument na pumasa sa. 215 00:15:35,930 --> 00:15:41,330 Ngunit bilang na nakita mo ang string, ang argv ay talagang isang string array. 216 00:15:41,330 --> 00:15:45,740 Kaya aktwal hindi isang integer, ngunit sa Caesar gusto naming harapin ang mga integer. 217 00:15:45,740 --> 00:15:54,430 Sa kabutihang-palad, may isang function na nilikha para sa atin na maaaring aktwal na-convert ng isang string sa isang integer. 218 00:15:54,430 --> 00:15:58,710 Din in dito ay hindi kami ay pagharap sa input ng user kung saan kami ay pagdikta sa kanila 219 00:15:58,710 --> 00:16:03,740 para sa input dito para sa key, kaya hindi tunay na namin maaaring reprompt at sabihin, 220 00:16:03,740 --> 00:16:07,840 "Oh, bigyan ako ng isa pang integer, sabihin nating, kung ito ay hindi wasto." 221 00:16:07,840 --> 00:16:10,540 Ngunit pa rin namin kailangang mag-check para sa tamang paggamit. 222 00:16:10,540 --> 00:16:13,520 Sa Caesar lamang ang pinapayagan upang pumasa sa 1 numero, 223 00:16:13,520 --> 00:16:18,030 at sa gayon mayroon silang upang tumakbo. / Caesar at pagkatapos nilang upang bigyan ka ng isang numero. 224 00:16:18,030 --> 00:16:23,660 Kaya argc ay isang tiyak na numero. 225 00:16:23,660 --> 00:16:29,060 Anong numero ang nais na na kung mayroon silang pumasa ka sa. / Caesar at pagkatapos ay isang susi? 226 00:16:29,060 --> 00:16:32,920 Ano ang argc? >> [Mag-aaral] 2. >> Dalawang. Eksakto. 227 00:16:32,920 --> 00:16:35,490 Kaya nais mong upang matiyak na ang argc ay 2. 228 00:16:35,490 --> 00:16:39,620 Kung hindi mo talaga tanggihan upang patakbuhin ang program. 229 00:16:39,620 --> 00:16:43,040 Sa pangunahing ito ay isang function na nagsasabing int pangunahing, 230 00:16:43,040 --> 00:16:47,360 kaya lagi naming sa mahusay na kasanayan 0 balik sa dulo ng isang matagumpay na programa. 231 00:16:47,360 --> 00:16:50,840 Kaya kung, sabihin, binibigyan ka nila 3 utos mga argumento ng linya sa halip ng 2 232 00:16:50,840 --> 00:16:54,350 o bigyan ka ng 1, halimbawa, pagkatapos ay kung ano ang kailangan mong gawin ay gugustuhin mong i-check para sa 233 00:16:54,350 --> 00:16:59,900 at pagkatapos ay bumalik sa 1 sinasabi, hindi, hindi ako makapag-magpatuloy sa programang ito. 234 00:16:59,900 --> 00:17:03,190 [Mag-aaral] May hindi maaaring maging isang puwang sa iyong teksto. >> Pagpasensiyahan mo ako? 235 00:17:03,190 --> 00:17:06,780 [Mag-aaral] ay hindi maaaring maging isang puwang sa teksto na sinusubukan mong i-encrypt. 236 00:17:06,780 --> 00:17:08,480 Ah! 237 00:17:08,480 --> 00:17:11,280 Sa mga tuntunin ng teksto na kami ay sinusubukan upang i-encrypt, na aktwal ay paglaon 238 00:17:11,280 --> 00:17:13,970 kapag bigyan namin na teksto. 239 00:17:13,970 --> 00:17:18,260 Kaya ngayon lang kami ay tumatanggap ng bilang argumento utos ang aktwal na bilang, 240 00:17:18,260 --> 00:17:21,579 ang aktwal na shift para sa pag-encrypt ng Caesar. 241 00:17:21,579 --> 00:17:27,569 [Mag-aaral] Bakit kailangan mong 2 kumpara sa 1 argc lang? Mayroon talagang 1 numero. 242 00:17:27,569 --> 00:17:32,200 Kanan. Ang dahilan kung bakit kailangan namin 2 para sa argc sa halip ng 1 243 00:17:32,200 --> 00:17:36,260 ay dahil kapag kang magpatakbo ng isang programa at sabihin. / Caesar o. / kumusta, 244 00:17:36,260 --> 00:17:38,280 na aktwal na binibilang bilang isang argument ng linya ng command. 245 00:17:38,280 --> 00:17:43,020 Kaya pagkatapos na tumatagal ng hanggang 1 at kaya kami ay inputting 1 extrang. 246 00:17:45,030 --> 00:17:49,440 Inputting Kaya ka talagang isang string sa argument ng linya ng command. 247 00:17:49,440 --> 00:17:52,730 Ano ang gusto mong gawin, para sa Caesar gusto naming humarap sa isang integer, 248 00:17:52,730 --> 00:17:57,180 sa gayon ay maaari mong gamitin ang function na sa atoi. 249 00:17:57,180 --> 00:18:02,850 At isa lamang, kayo na ipasa ito sa isang string at pagkatapos ito ay bumalik ka muli ng isang integer 250 00:18:02,850 --> 00:18:06,070 kung posible upang gumawa ng na string sa isang integer. 251 00:18:06,070 --> 00:18:10,960 Ngayon tandaan kapag kami ay pagharap sa printf o GetString, ang mga bagay tulad na, 252 00:18:10,960 --> 00:18:13,390 isinama namin ang library na partikular sa amin. 253 00:18:13,390 --> 00:18:19,450 Kaya sa simula simulan namin na may hash tag isang bagay standard I / O, h, tulad na. 254 00:18:19,450 --> 00:18:22,430 Well, atoi ay hindi sa loob ng isa sa mga aklatan, 255 00:18:22,430 --> 00:18:26,600 kaya kung ano ang mayroon kaming gawin ay mayroon kaming upang isama ang tamang library para sa. 256 00:18:26,600 --> 00:18:32,720 Kaya isipin ang bumalik sa walkthrough 1 kung saan tinalakay ko ang manu-manong function na. 257 00:18:32,720 --> 00:18:37,110 Nag-type ka ng tao sa iyong terminal at pagkatapos ay sinusundan ng pangalan ng isang function. 258 00:18:37,110 --> 00:18:39,720 At kaya na ilabas ang isang buong listahan ng mga nito sa paggamit, 259 00:18:39,720 --> 00:18:42,890 ngunit pati na rin ito ilabas kung saan library na nabibilang sa. 260 00:18:42,890 --> 00:18:47,000 Kaya ko bang iwan na sa iyo upang gamitin ang manu-manong function na may atoi 261 00:18:47,000 --> 00:18:53,360 at malaman kung aling library na kailangan mo upang isama ang upang gamitin ang function na sa atoi. 262 00:18:54,450 --> 00:18:57,670 Kaya Mayroon namin ang key at ngayon pagdating sa pagkuha ng mga plain text, 263 00:18:57,670 --> 00:19:01,820 at iba pa na aktwal na pagpunta sa input ng user kung saan mo prompt. 264 00:19:01,820 --> 00:19:05,540 Namin Aaksyunan may GetInt at GetFloat, at kaya sa parehong ugat 265 00:19:05,540 --> 00:19:07,670 kami ay pagpunta sa pagharap sa GetString. 266 00:19:07,670 --> 00:19:12,440 Ngunit sa kasong ito hindi namin kailangan na gawin ang anumang Do habang o habang loop sa check. 267 00:19:12,440 --> 00:19:14,480 GetString ay tiyak bigyan kami ng isang string, 268 00:19:14,480 --> 00:19:17,630 at kami ay pagpunta upang i-encrypt ang anumang ang user ay nagbibigay sa amin. 269 00:19:17,630 --> 00:19:23,770 Kaya maaari mong ipagpalagay na ang lahat ng mga user inputted string ay tama. 270 00:19:23,770 --> 00:19:24,670 Mahusay. 271 00:19:24,670 --> 00:19:27,270 Kaya pagkatapos sa sandaling mayroon ang susi at sa sandaling mayroon ang teksto, 272 00:19:27,270 --> 00:19:31,660 ngayon kung ano ang sa kaliwa ay mayroon kang ensayper ang plaintext. 273 00:19:31,660 --> 00:19:36,530 Lang upang mabilis na masakop ang paglipas ng salita, plaintext ay kung ano ang nagbibigay sa iyo ng ang user, 274 00:19:36,530 --> 00:19:41,030 at ang ciphertext ay kung ano ang bumalik ka sa kanila. 275 00:19:42,450 --> 00:19:45,850 Kaya string, upang pumunta sa pamamagitan ng aktwal na sulat sa pamamagitan ng sulat 276 00:19:45,850 --> 00:19:48,550 dahil mayroon kaming upang ilipat ang bawat titik, 277 00:19:48,550 --> 00:19:51,390 Nauunawaan namin na string, kung namin uri ng alisan ng balat pabalik layer, 278 00:19:51,390 --> 00:19:54,130 nakita namin na hindi lang nila talaga ng isang listahan ng mga character. 279 00:19:54,130 --> 00:19:55,930 Isa ay pagkatapos ng isa. 280 00:19:55,930 --> 00:20:01,690 At sa gayon ay maaari naming ituring ang mga string bilang array dahil ang mga ito ay mga array ng mga character. 281 00:20:01,690 --> 00:20:05,640 Kaya sabihin nating mayroon kang isang string na may pangalang teksto, 282 00:20:05,640 --> 00:20:09,400 at loob na variable na teksto ay naka-imbak na ito ay CS50. 283 00:20:09,400 --> 00:20:15,680 Pagkatapos teksto sa index 0 isang capital T, index 1 ay h, atbp. 284 00:20:17,530 --> 00:20:23,970 At pagkatapos ay sa array, sa argc halimbawa sa args.c, 285 00:20:23,970 --> 00:20:27,090 Nakita namin na nagkaroon kami upang umulit sa isang array 286 00:20:27,090 --> 00:20:32,440 at kaya namin ay upang umulit mula sa i = 0 hanggang i ay mas mababa kaysa sa haba. 287 00:20:32,440 --> 00:20:35,560 Kaya kailangan namin ng ilang mga paraan na ang pag-uunawa kung ano ang haba ng aming mga string 288 00:20:35,560 --> 00:20:37,090 kung kami ay umulit sa paglipas ng mga ito. 289 00:20:37,090 --> 00:20:42,300 Sa kabutihang-palad muli, may isang function doon para sa amin, kahit na sa paglaon sa CS50 290 00:20:42,300 --> 00:20:45,860 makikita mo talagang ipatupad at gawin ang iyong sariling function na 291 00:20:45,860 --> 00:20:48,260 na kalkulahin ang haba ng isang string. 292 00:20:48,260 --> 00:20:52,120 Ngunit sa ngayon kami ay pagpunta sa gamitin ang haba ng string, kaya strlen. 293 00:20:52,120 --> 00:21:00,440 Pumasa ka sa isang string, at pagkatapos ito ay bumalik sa isang int na kumakatawan sa haba ng iyong mga string. 294 00:21:00,440 --> 00:21:05,840 Tingnan natin sa isang halimbawa ng kung paano namin upang umulit sa ibabaw ng bawat character sa isang string 295 00:21:05,840 --> 00:21:08,470 at gawin ang isang bagay na iyon. 296 00:21:08,470 --> 00:21:13,250 Ano ang gusto naming gawin ay umulit sa ibabaw ng bawat character ng string, 297 00:21:13,250 --> 00:21:19,150 at kung ano ang gusto naming gawin ay naming i-print muli ang bawat character na 1 ng 1 298 00:21:19,150 --> 00:21:22,060 maliban namin magdagdag ng isang bagay na sa tabi nito. 299 00:21:22,060 --> 00:21:27,020 Kaya ipaalam sa magsimula sa para sa loop. Int i = 0. 300 00:21:27,020 --> 00:21:30,070 Kami ay mag-iwan ng puwang para sa kundisyon. 301 00:21:32,700 --> 00:21:36,840 Gusto naming upang umulit hanggang sa maabot namin ang dulo ng string, i-right? 302 00:21:36,840 --> 00:21:41,340 Kaya pagkatapos ay kung ano ang function na ay nagbibigay sa amin ang haba ng string? 303 00:21:41,340 --> 00:21:43,160 [Hindi marinig na mag-aaral ng tugon] 304 00:21:43,160 --> 00:21:46,420 Na ang haba ng argumento command line. 305 00:21:46,420 --> 00:21:50,650 Ngunit para sa isang string gusto naming gamitin ang isang function na nagbibigay sa amin ang haba ng string. 306 00:21:50,650 --> 00:21:53,090 Kaya, na string haba. 307 00:21:53,090 --> 00:21:57,130 At sa gayon mayroon kang upang pumasa sa isang string nito. 308 00:21:57,130 --> 00:21:59,760 Kailangang malaman kung ano ang string kailangang kalkulahin ang haba ng. 309 00:21:59,760 --> 00:22:03,160 Kaya sa kasong ito kami ay pagharap sa string s. 310 00:22:04,790 --> 00:22:05,860 Mahusay. 311 00:22:05,860 --> 00:22:10,770 Kaya pagkatapos kung ano ang gusto naming gawin, sabihin printf. 312 00:22:10,770 --> 00:22:14,850 Ngayon, gusto naming humarap sa mga character. Gusto naming upang i-print ang bawat indibidwal na character. 313 00:22:14,850 --> 00:22:22,150 Kapag nais mo ito upang i-print ang isang Float, nais mong gamitin ang placeholder tulad ng% f. 314 00:22:22,150 --> 00:22:24,580 Sa isang int nais mong gamitin% d. 315 00:22:24,580 --> 00:22:30,890 At kaya katulad, may isang character gumamit ka ng c% upang sabihin ako pagpunta sa pag-print ng isang character 316 00:22:30,890 --> 00:22:34,570 na naka-imbak sa loob ng isang variable. 317 00:22:34,570 --> 00:22:40,840 Kaya mayroon kaming ito, at sabihin magdagdag ng isang panahon at espasyo dito. 318 00:22:40,840 --> 00:22:45,430 Aling mga character na namin ang paggamit? 319 00:22:45,430 --> 00:22:49,780 Kami ay pagpunta sa gumagamit sa anumang karakter na kami ng string. 320 00:22:49,780 --> 00:22:52,890 Kaya pagkatapos namin ay pagpunta sa gumagamit ng isang bagay na may string, 321 00:22:52,890 --> 00:22:56,420 ngunit nais naming i-access sa ilang mga character na doon. 322 00:22:56,420 --> 00:23:02,740 Kaya kung ang isang string ay isang array, pagkatapos ay kung paano namin ma-access ang mga elemento ng array? 323 00:23:02,740 --> 00:23:06,480 Mayroon kami ng mga square bracket na iyon, at pagkatapos ay inilalagay namin ang index sa doon. 324 00:23:06,480 --> 00:23:11,820 Kaya mayroon kami ng mga square bracket. Aming index sa kasong ito, maaari naming gamitin lamang i. Eksakto. 325 00:23:15,290 --> 00:23:22,370 Kaya dito namin sinasabi na kami ay pagpunta sa pag-print ng isang character na sinundan sa pamamagitan ng isang tuldok at isang puwang, 326 00:23:22,370 --> 00:23:30,870 at ang character na ith sulat sa aming string s. 327 00:23:32,920 --> 00:23:39,330 Ako pagpunta upang i-save na. Okay. 328 00:23:42,510 --> 00:23:46,840 Ngayon ako pagpunta upang patakbuhin ang haba ng string. 329 00:23:46,840 --> 00:23:53,440 Kaya nagkaroon kami ng isang string na tinatawag na OMG, at ngayon bigyang-diin ang higit pang. 330 00:23:53,440 --> 00:23:57,870 Katulad nito, sabihin nating aktwal na namin nais upang makakuha ng isang string mula sa user. 331 00:23:57,870 --> 00:23:59,580 Paano maaari naming gawin ito? 332 00:23:59,580 --> 00:24:01,610 Bago, kung paano namin sa isang int? 333 00:24:01,610 --> 00:24:08,040 Namin sinabi GetInt, i-right? Ngunit ito ay hindi int, kaya sabihin GetString. 334 00:24:11,780 --> 00:24:17,770 Natin gumawa ng string na haba. Narito hindi namin magpasok ng isang tukoy na prompt. 335 00:24:17,770 --> 00:24:19,940 Kaya hindi ko alam. 336 00:24:19,940 --> 00:24:23,820 Ako pagpunta sa ilagay ang aking pangalan sa dito at sa gayon ay maaari kong gawin ang isa sa mga bagay 337 00:24:23,820 --> 00:24:29,600 kung saan magtalaga ako ng salita para sa bawat titik o isang bagay tulad na. Cool. 338 00:24:29,600 --> 00:24:31,900 Kaya, na string haba. 339 00:24:33,000 --> 00:24:34,640 Kaya hindi namin pabalik sa Caesar. 340 00:24:34,640 --> 00:24:38,620 Mayroon kaming ilang mga tool sa kung paano namin umulit sa loob ng isang string, 341 00:24:38,620 --> 00:24:41,250 kung paano namin ma-access ang bawat indibidwal na elemento. 342 00:24:41,250 --> 00:24:44,720 Kaya ngayon maaari naming bumalik sa programa. 343 00:24:44,720 --> 00:24:48,650 Tulad ng nabanggit ko bago, sa ASCII table, ang iyong pinakamatalik na kaibigan, 344 00:24:48,650 --> 00:24:52,300 ka pagpunta upang makita ang mga numero na nauugnay sa bawat titik. 345 00:24:52,300 --> 00:24:55,900 Kaya dito sabihin aming plaintext ako nahihilo! 346 00:24:55,900 --> 00:25:01,090 Pagkatapos bawat isa sa mga character na ito ay pagpunta sa magkaroon ng isang numero at ASCII halaga na nauugnay dito, 347 00:25:01,090 --> 00:25:04,710 kahit ang kudlit, kahit ang espasyo, kahit na ang tandang padamdam, 348 00:25:04,710 --> 00:25:06,600 kaya makikita mo gusto upang panatilihin sa isip. 349 00:25:06,600 --> 00:25:12,360 Kaya sabihin ang aming susi na ang mga user na kasama sa kanilang mga argumento sa command line ay 6. 350 00:25:12,360 --> 00:25:17,770 Iyon ay nangangahulugang para sa ang unang titik, na ako, na kung saan ay kinakatawan ng 73, 351 00:25:17,770 --> 00:25:25,610 gusto mong bumalik sa kanila anumang titik ay kinakatawan ng ASCII halaga ng 73 + 6. 352 00:25:25,610 --> 00:25:29,020 Sa kasong ito na 79. 353 00:25:30,840 --> 00:25:35,040 Ngayon nais namin upang pumunta sa susunod na character. 354 00:25:35,040 --> 00:25:40,960 Kaya ang susunod sa index 1 ng plaintext ang kudlit. 355 00:25:40,960 --> 00:25:46,780 Ngunit tandaan nais lamang namin upang ensayper ang mga titik. 356 00:25:46,780 --> 00:25:50,040 Kaya gusto namin upang matiyak na ang ang mga kudlit aktwal na nananatili ang parehong, 357 00:25:50,040 --> 00:25:54,310 na hindi namin baguhin mula 39 sa anumang 45. 358 00:25:54,310 --> 00:25:57,150 Gusto naming panatilihin ang mga ito bilang isang kudlit. 359 00:25:57,150 --> 00:26:00,780 Kaya gusto naming tandaan lamang ensayper ang mga titik 360 00:26:00,780 --> 00:26:04,560 dahil gusto naming ang lahat ng iba pang mga simbolo upang hindi magbabago sa aming programa. 361 00:26:04,560 --> 00:26:07,130 Isa pang bagay na gusto namin ay upang mapanatili ang capitalization. 362 00:26:07,130 --> 00:26:10,250 Kaya kapag mayroon kang isang uppercase sulat, dapat itong manatili bilang isang uppercase. 363 00:26:10,250 --> 00:26:12,830 Dapat manatili bilang lowercase ang mga Lowercases. 364 00:26:13,620 --> 00:26:19,480 Kaya ilang mga kapaki-pakinabang na function upang humarap sa lamang enciphering titik 365 00:26:19,480 --> 00:26:22,380 at patuloy na pinapanatili ang capitalization ng mga bagay 366 00:26:22,380 --> 00:26:25,130 ang isalpha, isupper, islower function. 367 00:26:25,130 --> 00:26:29,270 At kaya ang mga function na bumalik ka ng Boolean halaga. 368 00:26:29,270 --> 00:26:34,180 Talaga, totoo o hindi. Ito ay isang uppercase? Ang alphanumeric na ito? 369 00:26:34,180 --> 00:26:37,180 Ito ay isang sulat, mahalagang. 370 00:26:37,180 --> 00:26:41,070 Kaya narito ang 3 mga halimbawa ng kung paano mo gamitin na function na. 371 00:26:41,070 --> 00:26:47,060 Isa lamang, maaari mong subukan kung ang halaga ay bumalik sa iyo sa pamamagitan ng na function na ay totoo o hindi 372 00:26:47,060 --> 00:26:49,400 batay sa input na. 373 00:26:49,400 --> 00:26:54,880 Alinman ang hindi ensayper isang bagay o Cipher ito o tiyakin na ito ay malalaki, atbp. 374 00:26:54,880 --> 00:27:01,080 [Mag-aaral] Maaari mo lamang ipaliwanag ang mga ng kaunti pa at kung paano mo ginagamit ang mga ito? >> Oo, para sigurado. 375 00:27:01,080 --> 00:27:08,470 Kaya't kung tiningnan namin pabalik, narito mayroon kaming isang kabisera ko, i-right? 376 00:27:08,470 --> 00:27:14,550 Upang malaman namin na pupunta ako sa O dahil ako + 6 ay O. 377 00:27:14,550 --> 00:27:18,740 Ngunit nais naming upang matiyak na na O isang kabisera O. 378 00:27:18,740 --> 00:27:22,940 Kaya talaga, na uri ng pagpunta sa baguhin ang aming mga input. 379 00:27:22,940 --> 00:27:26,870 Kaya kung ito ay malalaki o hindi uri ng baguhin ang paraan na harapin namin dito. 380 00:27:26,870 --> 00:27:32,360 Kaya pagkatapos kung ginagamit namin ang isupper function na sa partikular na index, 381 00:27:32,360 --> 00:27:36,480 kaya isupper ("ako"), na nagbabalik para sa amin totoo, upang malaman namin na itaas. 382 00:27:36,480 --> 00:27:40,360 Kaya pagkatapos ay batay sa na, mamaya makikita namin pumunta sa isang formula 383 00:27:40,360 --> 00:27:42,750 na ikaw ay ginagamit upang ilipat ang mga bagay sa Caesar, 384 00:27:42,750 --> 00:27:46,560 kaya pagkatapos talaga, may nangyayari sa isang bahagyang iba't-ibang formula kung uppercase 385 00:27:46,560 --> 00:27:50,670 kumpara sa lowercase. Kabuluhan? 386 00:27:51,020 --> 00:27:52,760 Oo. Walang alalahanin. 387 00:27:54,900 --> 00:27:58,990 Uusapang ko ng kaunti tungkol sa pagdaragdag ng 6 ng sulat, na kung saan ay hindi masyadong kabuluhan 388 00:27:58,990 --> 00:28:05,500 maliban kung namin uri ng maunawaan na ang mga character na ito 389 00:28:05,500 --> 00:28:08,920 uri ng mapagpapalit may integer. 390 00:28:08,920 --> 00:28:11,250 Ano ang ginagawa namin ay namin uri ng paggamit implicit Casting. 391 00:28:11,250 --> 00:28:18,100 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 392 00:28:18,100 --> 00:28:20,440 kaysa sa orihinal na ito ay. 393 00:28:20,440 --> 00:28:25,910 Ngunit sa ito pset magagawa naming uri ng salitan gamitin ang mga character 394 00:28:25,910 --> 00:28:30,880 at ang kanilang mga kaukulang integer na halaga. 395 00:28:30,880 --> 00:28:35,140 Kaya kung lamang balutin ng character lang sa mga single quote, 396 00:28:35,140 --> 00:28:40,390 makikita mo magagawang upang gumana sa mga ito sa mga integer, pagharap sa mga ito bilang isang integer. 397 00:28:40,390 --> 00:28:48,040 Kaya ang kabisera C nauugnay sa 67. Lowercase f nauugnay sa 102. 398 00:28:48,040 --> 00:28:51,480 Muli, kung nais mong malaman ang mga halagang ito, tumingin sa iyong ASCII talahanayan. 399 00:28:51,480 --> 00:28:56,160 Kaya ipaalam sa pumunta sa ilang mga halimbawa ng kung paano mo maaaring ibawas at idagdag, 400 00:28:56,160 --> 00:29:03,130 kung paano mo maaaring aktwal na talagang gumagana sa mga character na ito, gamitin ang mga ito salitan. 401 00:29:03,870 --> 00:29:11,350 Sinasabi ko ASCIIMath na pagpunta sa kalkulahin ang karagdagan ng isang character sa isang integer 402 00:29:11,350 --> 00:29:17,590 at pagkatapos ay ipinapakita ang nagreresultang character pati na rin ang nagreresultang ASCII halaga. 403 00:29:17,590 --> 00:29:22,290 At kaya dito ako sinasabi - we'll deal na may bahaging ito mamaya - 404 00:29:22,290 --> 00:29:29,100 ngunit isa lamang, ako sinasabi na ang gumagamit ay dapat na nagsasaad ang magpatakbo ng ASCIIMath kasama ang isang susi, 405 00:29:29,100 --> 00:29:30,880 at ako na nagsasabi na ang susi na ang numero 406 00:29:30,880 --> 00:29:34,600 na kung saan kami ay pagpunta upang idagdag ito ng character. 407 00:29:34,600 --> 00:29:38,560 Kaya dito mapansin na dahil ako hinihingi ng key, 408 00:29:38,560 --> 00:29:40,590 dahil ako hinihingi na sila ay nagbibigay sa akin 1 bagay, 409 00:29:40,590 --> 00:29:45,600 Gusto ko lang tanggapin. / Asciimath at isang susi. 410 00:29:45,600 --> 00:29:49,330 Kaya ako pagpunta sa hinihiling na argc ay katumbas sa 2. 411 00:29:49,330 --> 00:29:54,360 Kung ito ay hindi, pagkatapos ay ako pagpunta sa bumalik 1 at ang programa ay lumabas. 412 00:29:55,070 --> 00:29:58,540 Kaya ako sinasabi Ang susi ay hindi pagpunta sa unang linya ng command argumento, 413 00:29:58,540 --> 00:30:05,080 ito ay ang pangalawang, at tulad ng makikita mo dito, 414 00:30:05,080 --> 00:30:11,790 Ako pagpunta upang i-na sa isang integer. 415 00:30:15,740 --> 00:30:19,230 Pagkatapos ako pagpunta upang itakda ang isang character na r. 416 00:30:19,230 --> 00:30:23,970 Pansinin na ang uri ng variable chr ay talagang isang integer. 417 00:30:23,970 --> 00:30:30,480 Ang paraan na ako ay upang gamitin ang r bilang isang integer sa pamamagitan ng encasing ito sa mga single quote. 418 00:30:33,850 --> 00:30:40,560 Kaya-back sa aming printf pahayag kung saan mayroon kaming isang placeholder para sa isang character 419 00:30:40,560 --> 00:30:43,590 at pagkatapos ay isang placeholder para sa isang integer, 420 00:30:43,590 --> 00:30:49,450 karakter ay kinakatawan ng chr, at integer ay ang susi. 421 00:30:49,450 --> 00:30:54,320 At kaya pagkatapos namin ay pagpunta sa resulta idagdag ang 2 sama-sama. 422 00:30:54,320 --> 00:30:58,420 Kaya kami ay pagpunta sa magdagdag ng r + anumang susi ay, 423 00:30:58,420 --> 00:31:03,520 at pagkatapos namin ay pagpunta sa i-print ang resulta ng na. 424 00:31:06,210 --> 00:31:14,220 Kaya sabihin gumawa asciimath. Ito ay hanggang sa petsa, kaya sabihin lang patakbuhin ang asciimath. 425 00:31:14,220 --> 00:31:18,290 Oh, ngunit tingnan, hindi ito gawin dahil hindi namin aktwal bigyan ito ng isang susi. 426 00:31:18,290 --> 00:31:23,850 Kaya kapag ito lamang ibinalik 1, ang aming pangunahing function na, ito ay ibinalik pabalik sa amin. 427 00:31:23,850 --> 00:31:29,250 Kaya pagkatapos ay sabihin pumasa sa isang susi. Isang tao bigyan ako ng isang numero. >> [Mag-aaral] 4. 428 00:31:29,250 --> 00:31:30,920 4. Okay. 429 00:31:30,920 --> 00:31:39,280 Kaya r nadagdagan ng 4 ay upang bigyan kami ng v, na tumutugon sa ASCII halaga ng 118. 430 00:31:39,280 --> 00:31:43,880 Kaya ito uri ng saysay na - 431 00:31:43,880 --> 00:31:51,250 Aktwal, maaari kong tanungin ka, ano sa tingin mo ang ASCII halaga ng r kung r + 4 ay 118? 432 00:31:53,070 --> 00:31:55,470 Pagkatapos oo, r ay 114. 433 00:31:55,470 --> 00:32:03,010 Kaya't kung tiningnan mo sa ASCII table pagkatapos, bang sapat, makikita mo ang r na kinakatawan ng 114. 434 00:32:03,010 --> 00:32:08,610 Kaya ngayon na alam namin na maaari naming magdagdag ng mga integer sa character, ito tila medyo simple. 435 00:32:08,610 --> 00:32:12,740 Kami ay pagpunta upang umulit sa isang string tulad ng nakita natin sa isang halimbawa bago. 436 00:32:12,740 --> 00:32:17,170 Susuriin namin kung ito ay isang sulat. 437 00:32:17,170 --> 00:32:20,420 Kung ito ay, pagkatapos makikita namin shift ito sa pamamagitan ng anumang susi ay. 438 00:32:20,420 --> 00:32:23,650 Medyo simple, maliban kapag nakakuha ka upang gustuhin ang, 439 00:32:23,650 --> 00:32:32,140 makikita mo na z, kinakatawan ng 122, pagkatapos ay magbibigay sa iyo ng ibang character. 440 00:32:32,140 --> 00:32:37,770 Namin ang aktwal na gusto upang manatili sa loob ng aming alpabeto, i-right? 441 00:32:37,770 --> 00:32:43,180 Kaya kailangan namin upang malaman ang ilang mga paraan ng uri ng pambalot sa paligid. 442 00:32:43,180 --> 00:32:47,190 Kapag naabot mo na ang zed at gusto mong taasan ng isang tiyak na numero, 443 00:32:47,190 --> 00:32:51,230 hindi mo nais na pumunta sa higit sa ASCII na seksyon ng alpabeto; 444 00:32:51,230 --> 00:32:54,140 gusto mong I-wrap ang lahat ng mga paraan sa A. 445 00:32:54,140 --> 00:32:58,550 Ngunit tandaan ka pa rin pinapanatili ang kaso. 446 00:32:58,550 --> 00:33:00,980 Kaya alam na mga titik ay hindi maaaring maging simbolo 447 00:33:00,980 --> 00:33:05,290 tulad ng mga simbolo ay hindi na pagbabago pati na rin. 448 00:33:05,290 --> 00:33:08,170 Sa huling pset tiyak ay hindi kailangang, 449 00:33:08,170 --> 00:33:14,310 ngunit isang pagpipilian ay upang ipatupad ang iyong matakaw pset sa pamamagitan ng paggamit ng modulus function na. 450 00:33:14,310 --> 00:33:17,230 Ngunit ngayon aktwal na kami ay pagpunta sa kailangan upang gamitin ang modulus, 451 00:33:17,230 --> 00:33:19,900 kaya sabihin pumunta lamang sa paglipas ng ito nang kaunti. 452 00:33:19,900 --> 00:33:26,920 Mahalaga, kapag mayroon kang x modulo y, na nagbibigay sa iyo ng ang natitira sa mga x na hinati sa pamamagitan ng y. 453 00:33:26,920 --> 00:33:30,930 Narito ang ilang mga halimbawa dito. Mayroon kaming 27% 15. 454 00:33:30,930 --> 00:33:36,200 Talaga, kapag ikaw ay ibawas 15 mula sa 27 bilang maraming beses hangga't maaari na walang pagkuha ng negatibong 455 00:33:36,200 --> 00:33:39,060 makakakuha ka ng 12 kaliwa sa. 456 00:33:39,060 --> 00:33:44,650 Kaya na uri ng tulad ng sa konteksto ng matematika, ngunit kung paano namin maaaring aktwal na gamitin ito? 457 00:33:44,650 --> 00:33:47,100 Ito ay upang maging kapaki-pakinabang para sa aming mga wrapover. 458 00:33:47,100 --> 00:33:55,420 Para sa, sabihin lang sabihin ko tinanong mo ang lahat upang hatiin sa 3 group. 459 00:33:55,420 --> 00:33:58,010 Minsan gagawin mo ito sa mga pangkat at isang bagay tulad na. 460 00:33:58,010 --> 00:34:01,320 Sinasabi ko sinabi, "Okay, gusto ko sa iyo ang lahat ng mga nahahati sa 3." 461 00:34:01,320 --> 00:34:04,240 Kung paano mo maaaring gawin iyon? 462 00:34:04,240 --> 00:34:06,810 [Hindi marinig na mag-aaral tugon] Oo, eksakto. Bilang off. Okay. 463 00:34:06,810 --> 00:34:10,260 Natin ang aktwal na gawin na. Nais mong simulan? 464 00:34:10,260 --> 00:34:13,810 [Mag-aaral na pagbibilang off] 1, 2, 3, 4. 465 00:34:13,810 --> 00:34:16,620 Ngunit tandaan ... >> [Mag-aaral] Oh, paumanhin. 466 00:34:16,620 --> 00:34:18,730 Na talagang magandang punto. 467 00:34:18,730 --> 00:34:24,130 Sinabi mo 4, ngunit namin ang aktwal na nais mong sabihin 1 dahil nais lamang namin 3 group. 468 00:34:24,130 --> 00:34:30,159 Kaya pagkatapos, kung paano - Hindi, na talagang magandang halimbawa dahil pagkatapos kung paano mo maaaring sabihin 1? 469 00:34:30,159 --> 00:34:33,370 Ano ang kaugnayan sa pagitan ng 4 at 1? 470 00:34:33,370 --> 00:34:36,760 Well, 4 mod 3 1. 471 00:34:36,760 --> 00:34:41,460 Kaya kung magpapatuloy ka, gusto mo na ang 2. 472 00:34:41,460 --> 00:34:44,540 Kaya mayroon kami ng 1, 2, 3, 1, 2. 473 00:34:44,540 --> 00:34:49,420 Muli, ikaw ay talagang sa ika-5 tao. Paano mo malaman upang sabihin 2 sa halip ng 5? 474 00:34:49,420 --> 00:34:53,760 Sinabi mong 5 mod 3 ay 2. 475 00:34:53,760 --> 00:34:59,100 Gusto kong makita kung gaano karaming mga grupo ng 3 natira, pagkakasunud-sunod ang am I. 476 00:34:59,100 --> 00:35:02,860 At kaya pagkatapos kung patuloy namin sa kahabaan ng buong room, 477 00:35:02,860 --> 00:35:07,760 pagkatapos ay maaari naming makita na palagi naming ay aktwal na ng paglalapat ng mga mod function na sa ating sarili 478 00:35:07,760 --> 00:35:09,990 uri ng bilang ng off. 479 00:35:09,990 --> 00:35:14,490 Na higit pang uri ng tiyak na halimbawa ng kung paano mo maaaring gamitin ang modulo 480 00:35:14,490 --> 00:35:17,960 dahil ako bang karamihan sa atin na maaaring sumailalim sa proseso na 481 00:35:17,960 --> 00:35:19,630 kung saan kami ay upang mabilang off. 482 00:35:19,630 --> 00:35:21,840 Anumang mga katanungan sa modulo? 483 00:35:21,840 --> 00:35:25,360 Ito ay medyo mahalaga upang maunawaan ang mga konsepto ng ito, 484 00:35:25,360 --> 00:35:28,640 kaya gusto kong tiyakin mo guys maunawaan. 485 00:35:28,640 --> 00:35:34,660 [Mag-aaral] Kung may natitira hindi, ang magbibigay sa iyo ang aktwal na numero? 486 00:35:34,660 --> 00:35:40,430 Kung ang isa ng unang 3 sa kanila ay tapos na ito, nagbigay sa kanila kung ano ang kanilang aktwal na, 487 00:35:40,430 --> 00:35:43,310 o ito ibinigay sa kanila [hindi marinig] >> Iyon ay isang mahusay na tanong. 488 00:35:43,310 --> 00:35:48,750 Kapag walang natitira para sa modulo - kaya nating mayroon kang 6 mod 3 - 489 00:35:48,750 --> 00:35:52,340 na aktwal na nagbibigay sa iyo ng pabalik 0. 490 00:35:53,670 --> 00:35:57,290 Susubukan naming makipag-usap tungkol sa na ng kaunti mamaya. 491 00:35:58,810 --> 00:36:07,720 Oh oo, halimbawa, ang 3rd tao - 3 mod 3 ay talagang 0 ngunit sinabi niya 3. 492 00:36:07,720 --> 00:36:14,900 Kaya na uri ng tulad ng isang panloob na catch, halimbawa, 493 00:36:14,900 --> 00:36:17,620 tulad ng okay, kung ang mod ang 0 pagkatapos ay ako pagpunta sa ika-3 tao. 494 00:36:17,620 --> 00:36:22,740 Ngunit namin sa uri ng kung paano namin nais humarap sa kung ano ang 0 ay mamaya. 495 00:36:22,740 --> 00:36:32,750 Kaya ngayon namin sa paanuman ay isang paraan ng pagma-map ang zed sa kanan sulat. 496 00:36:32,750 --> 00:36:34,920 Kaya na namin ngayon ang sumailalim sa mga halimbawa, 497 00:36:34,920 --> 00:36:37,880 namin uri ng makita kung paano Caesar maaaring gumana. 498 00:36:37,880 --> 00:36:42,640 Makikita mo ang 2 titik at pagkatapos ay makikita mo ang mga ito paglilipat. 499 00:36:42,640 --> 00:36:44,430 Kaya sabihin subukan at ipahayag na sa mga tuntunin ng formula. 500 00:36:44,430 --> 00:36:46,940 Ang formula na ito ay aktwal na ibinigay sa iyo sa spec, 501 00:36:46,940 --> 00:36:52,070 ngunit sabihin uri ng hitsura sa pamamagitan ng kung ano ang bawat variable ay nangangahulugan. 502 00:36:52,070 --> 00:36:55,000 Aming resulta ng pagtatapos ay ang ciphertext. 503 00:36:55,000 --> 00:36:58,300 Kaya ito sabi ni na ith character ng ciphertext 504 00:36:58,300 --> 00:37:02,500 ay tumutugma sa ith katangian ng plaintext. 505 00:37:02,500 --> 00:37:08,130 Na saysay dahil gusto naming palaging lining ang mga bagay na ito. 506 00:37:08,130 --> 00:37:13,480 Kaya ith character ng ciphertext plus k, na ang aming key - 507 00:37:13,480 --> 00:37:17,230 na saysay - at pagkatapos namin ito mod 26. 508 00:37:17,230 --> 00:37:19,860 Tandaan muli kapag nagkaroon kami ng zed 509 00:37:19,860 --> 00:37:24,190 hindi namin gusto upang makakuha ng sa na character, kaya gusto naming mod ito 510 00:37:24,190 --> 00:37:26,540 at uri ng pambalot sa paligid ng alpabeto. 511 00:37:26,540 --> 00:37:33,430 Pagkatapos zed gusto mong pumunta sa isang, b, c, d, hanggang sa ikaw ay nakuha sa tamang bilang. 512 00:37:33,430 --> 00:37:44,690 Upang malaman namin na zed, kung + 6, ay magbibigay sa amin ng f dahil pagkatapos zed ay a, b, c, d, e, f. 513 00:37:44,690 --> 00:37:52,530 Kaya ipaalam tandaan na alam namin para siguraduhin na zed + 6 ay upang bigyan kami ng f. 514 00:37:52,530 --> 00:38:03,530 ASCII halaga, z ay 122 at f ay 102. 515 00:38:03,530 --> 00:38:10,570 Kaya mayroon kaming upang mahanap ang ilang mga paraan ng paggawa ng aming Caesar formula bigyan kami ng 102 516 00:38:10,570 --> 00:38:13,590 pagkatapos pagkuha sa 122. 517 00:38:13,590 --> 00:38:19,550 Kaya kung lang namin ilapat ito formula, ang ('z' + 6)% 26, na aktwal na nagbibigay sa iyo ng 24 518 00:38:19,550 --> 00:38:25,980 dahil 122 + 6 ay 128; 128% 26 ay nagbibigay sa iyo ng 24 natitira. 519 00:38:25,980 --> 00:38:29,140 Ngunit iyon ay hindi talaga ibig sabihin ng f. Na ang talagang hindi 102. 520 00:38:29,140 --> 00:38:33,590 Na rin hindi ika-6 na titik sa alpabeto. 521 00:38:33,590 --> 00:38:41,550 Kaya malinaw naman, kailangan namin na magkaroon ng ilang mga paraan ng pag-aayos ng ito nang kaunti. 522 00:38:42,970 --> 00:38:51,340 Sa mga tuntunin ng mga regular na alpabeto, alam namin na z ang ika-26 na titik at f ay ang ika-6. 523 00:38:51,340 --> 00:38:55,460 Ngunit hindi namin sa computer science, kaya kami ay pagpunta sa index sa 0. 524 00:38:55,460 --> 00:39:00,690 Kaya pagkatapos ay sa halip ng z ang bilang 26, kami ay pagpunta sa sabihin number 25 525 00:39:00,690 --> 00:39:02,630 dahil may isang 0. 526 00:39:02,630 --> 00:39:04,770 Kaya ngayon sabihin ilapat ito formula. 527 00:39:04,770 --> 00:39:11,710 Mayroon kaming z kinakatawan ng 25 + 6, na kung saan ay nagbibigay sa iyo ng 31. 528 00:39:11,710 --> 00:39:15,790 At 31 mod 26 ay nagbibigay sa iyo ng 5 bilang isang natitira. 529 00:39:15,790 --> 00:39:20,500 Iyan ay perpekto dahil alam namin na ang f ang 5th titik sa alpabeto. 530 00:39:20,500 --> 00:39:26,400 Ngunit pa rin ito ay hindi f, i-right? Ay hindi pa rin 102. 531 00:39:26,400 --> 00:39:32,730 Kaya pagkatapos para sa pset, hamon ng ay sinusubukan upang malaman ang relasyon 532 00:39:32,730 --> 00:39:36,910 sa pagitan ng nagko-convert sa pagitan ng mga ASCII halaga at ang alpabetikong index. 533 00:39:36,910 --> 00:39:40,280 Mahalaga, kung ano ang gusto mong gawin, nais mong simulan ang gamit ang ASCII na mga halaga, 534 00:39:40,280 --> 00:39:45,390 ngunit nais mong sa paanuman isalin ang na sa isang alpabetikong index 535 00:39:45,390 --> 00:39:52,610 pagkatapos ay kalkulahin kung ano ang sulat na ito ay dapat - talaga, kung ano ang alpabetikong index nito 536 00:39:52,610 --> 00:39:57,660 ng character ng cipher - translate na bumalik sa ASCII halaga. 537 00:39:57,660 --> 00:40:04,870 Kaya kung ikaw manlatigo iyong ASCII talahanayan, pagkatapos subukan at maghanap ng mga relasyon sa pagitan ng, sabihin nating, 102 at 5 538 00:40:04,870 --> 00:40:10,440 o ang 122 at 25. 539 00:40:12,140 --> 00:40:15,690 Nakuha namin ang aming key mula sa linya ng command argumento, hindi namin nakuha plaintext, 540 00:40:15,690 --> 00:40:17,520 kami enciphered ito. 541 00:40:17,520 --> 00:40:19,820 Ngayon ang lahat ng namin ang natitira upang gawin ay i-print ito. 542 00:40:19,820 --> 00:40:22,040 Maaari naming gawin ito ng ilang iba't ibang mga paraan. 543 00:40:22,040 --> 00:40:24,570 Ano ang maaari naming gawin ay aktwal na i-print ang bilang pumunta kami kasama. 544 00:40:24,570 --> 00:40:28,250 Bilang namin umulit sa ibabaw ng character sa string, 545 00:40:28,250 --> 00:40:31,660 kami lang lang i-print ang karapatan pagkatapos ay kapag namin makalkula ang mga ito. 546 00:40:31,660 --> 00:40:36,030 Bilang kahalili, maaari mo ring-imbak ito sa isang array at magkaroon ng isang hanay ng mga character 547 00:40:36,030 --> 00:40:39,280 at sa dulo umulit na buong array at i-print ito. 548 00:40:39,280 --> 00:40:40,980 Kaya mayroon kang ilang mga pagpipilian para sa. 549 00:40:40,980 --> 00:40:47,280 At tandaan na% c placeholder para sa pag-print ng isang character. 550 00:40:47,280 --> 00:40:50,420 Kaya mayroon kaming Caesar, at ngayon namin lumipat sa Vigenere, 551 00:40:50,420 --> 00:40:57,580 na na halos kapareho sa Caesar ngunit lamang bahagyang mas kumplikado. 552 00:40:57,580 --> 00:41:03,310 Kaya mahalagang may Vigenere ay ka pagpunta sa pagpasa sa isang keyword. 553 00:41:03,310 --> 00:41:06,510 Kaya sa halip ng isang numero, ikaw ay pagpunta sa magkaroon ng isang string, 554 00:41:06,510 --> 00:41:09,200 at sa gayon ay pagpunta sa kumilos bilang iyong keyword. 555 00:41:09,200 --> 00:41:14,440 Pagkatapos, gaya ng dati, ka upang makakuha ng isang prompt para sa isang string mula sa gumagamit 556 00:41:14,440 --> 00:41:19,050 at pagkatapos ensayper ito at pagkatapos ay bigyan sila ng ciphertext likod. 557 00:41:19,050 --> 00:41:24,650 Kaya bilang ko sinabi, na halos kapareho sa Caesar, maliban sa halip ng paglilipat sa pamamagitan ng isang tiyak na numero, 558 00:41:24,650 --> 00:41:30,620 numero ay talagang pagpunta upang baguhin ang bawat oras na character sa karakter. 559 00:41:30,620 --> 00:41:34,890 Upang kumatawan na aktwal na bilang upang ilipat, ito ay kinakatawan ng ang mga titik sa keyboard. 560 00:41:34,890 --> 00:41:43,150 Kaya kung ipinasok mo sa isang shift ng, halimbawa, pagkatapos ay tumutugma sa isang shift ng 0. 561 00:41:43,150 --> 00:41:45,900 Kaya muli pabalik sa alpabetikong index. 562 00:41:45,900 --> 00:41:49,100 Ano ang maaaring maging kapaki-pakinabang kung nakakakita ka na aktwal na kami ay pagharap sa ASCII halaga 563 00:41:49,100 --> 00:41:51,790 pati na rin ang mga titik, pati na rin ang alpabetikong index, 564 00:41:51,790 --> 00:41:58,020 maaaring mahanap o gumawa ng iyong sariling ASCII talahanayan na nagpapakita ang alpabetikong index ng 0 sa pamamagitan ng 25, 565 00:41:58,020 --> 00:42:03,750 ng sa pamamagitan ng z, at ang mga ASCII halaga sa gayon na maaari mong uri ng makita ang relasyon 566 00:42:03,750 --> 00:42:07,020 at Sketch out at subukan at mahanap ang ilang mga pattern. 567 00:42:07,020 --> 00:42:11,010 Gayundin, kung ikaw ay paglilipat sa ang ilang mga halimbawa sa pamamagitan ng f - 568 00:42:11,010 --> 00:42:21,110 at ito ay alinman sa lowercase o uppercase f - pagkatapos na tumutugma sa 5. 569 00:42:21,110 --> 00:42:24,180 Sigurado namin magandang sa ngayon? 570 00:42:25,770 --> 00:42:30,050 Ang formula para sa Vigenere ng kaunti ibang. 571 00:42:30,050 --> 00:42:32,960 Talaga, makikita mo na ito ay tulad ng Caesar, 572 00:42:32,960 --> 00:42:37,390 maliban sa halip ng k mayroon kaming k index j. 573 00:42:37,390 --> 00:42:44,810 Pansinin na hindi namin ginagamit i dahil mahalagang, ang haba ng keyword 574 00:42:44,810 --> 00:42:49,850 ay hindi nangangahulugang ang haba ng aming ciphertext. 575 00:42:49,850 --> 00:42:56,130 Ito ay isang bit mas malinaw kapag nakita namin ang isang halimbawa na mayroon akong isang bit sa paglaon. 576 00:42:56,130 --> 00:43:03,160 Talaga, kung mong patakbuhin ang iyong mga programa na may isang keyword ng ohai, 577 00:43:03,160 --> 00:43:08,560 pagkatapos na nangangahulugan na ang bawat oras, ohai ay pagpunta sa maging iyong shift. 578 00:43:08,560 --> 00:43:11,060 Kaya depende sa kung anong posisyon sa iyong keyword, 579 00:43:11,060 --> 00:43:15,800 ka pagpunta upang ilipat ang iyong mga ilang ciphertext character sa pamamagitan ng halagang iyon. 580 00:43:15,800 --> 00:43:19,630 Muli, tulad ng Caesar, nais naming tiyakin na namin mapanatili ang capitalization ng mga bagay 581 00:43:19,630 --> 00:43:22,900 at lamang namin mga titik ng ensayper, hindi character o puwang. 582 00:43:22,900 --> 00:43:26,330 Kaya tumingin pabalik sa Caesar sa mga function na maaaring ginamit mo, 583 00:43:26,330 --> 00:43:32,570 ang paraan na napagpasyahan mo kung paano upang ilipat ang mga bagay, at ilapat na sa iyong programa dito. 584 00:43:32,570 --> 00:43:35,260 Kaya sabihin map ito. 585 00:43:35,260 --> 00:43:39,680 Mayroon kaming plaintext na aming nakuha mula sa user GetString 586 00:43:39,680 --> 00:43:44,090 sinasabi ito ... ay CS50! 587 00:43:44,090 --> 00:43:47,090 Pagkatapos kami ay may isang keyword ng ohai. 588 00:43:47,090 --> 00:43:50,930 Ang unang 4 na mga character ay medyo simple. 589 00:43:50,930 --> 00:43:55,580 Alam namin na ang T ay pagpunta sa Paglipat sa pamamagitan ng o, 590 00:43:55,580 --> 00:44:01,990 pagkatapos ay h ay pagpunta sa Paglipat sa pamamagitan ng h, i pagpunta sa Paglipat ng isang. 591 00:44:01,990 --> 00:44:04,610 Narito mong makita na ang isang kumakatawan 0, 592 00:44:04,610 --> 00:44:11,940 kaya pagkatapos ang halaga ng pagtatapos ay talagang ang parehong mga titik tulad ng dati. 593 00:44:11,940 --> 00:44:15,250 Pagkatapos s Paglipat sa pamamagitan ng i. 594 00:44:15,250 --> 00:44:19,370 Ngunit mayroon kang mga tagal na ito dito. 595 00:44:19,370 --> 00:44:25,960 Hindi namin gusto upang ensayper na, kaya hindi namin baguhin ito sa pamamagitan ng anumang 596 00:44:25,960 --> 00:44:31,280 at i-print ang panahon hindi nabago. 597 00:44:31,280 --> 00:44:38,020 [Mag-aaral] hindi ko maintindihan kung paano alam mo na ito ay Paglipat sa pamamagitan ng - Saan ginawa mo - >> Oh, paumanhin. 598 00:44:38,020 --> 00:44:41,620 Sa tuktok dito mo makita na ang linya ng command argumento ohai dito, 599 00:44:41,620 --> 00:44:43,740 na ang keyword. 600 00:44:43,740 --> 00:44:49,550 At kaya talaga, ka umiikot sa ibabaw ng mga character sa keyword. 601 00:44:49,550 --> 00:44:52,020 [Mag-aaral] Kaya o ay pagpunta sa paglilipat sa parehong - 602 00:44:52,020 --> 00:44:56,260 Kaya o kumakatawan sa isang tiyak na numero sa alpabeto. 603 00:44:56,260 --> 00:44:58,400 [Mag-aaral] Kanan. Ngunit kung saan ay makuha mo ang CS50 bahagi mula sa? 604 00:44:58,400 --> 00:45:02,540 Oh. Na nasa na GetString kung saan ikaw ay tulad ng, "Bigyan mo ako ng isang string upang i-encode." 605 00:45:02,540 --> 00:45:07,510 [Mag-aaral] Sila ay pagpunta sa bigyan mo na argumento upang ilipat sa pamamagitan ng 606 00:45:07,510 --> 00:45:09,380 at pagkatapos mong hilingin para sa iyong unang string. >> Oo. 607 00:45:09,380 --> 00:45:12,440 Kaya kapag nagpatakbo sila sa programa, sila ay upang isama ang mga keyword 608 00:45:12,440 --> 00:45:14,740 sa kanilang mga argumento sa linya ng command na kapag tumakbo ang mga ito. 609 00:45:14,740 --> 00:45:19,740 Pagkatapos ay sa sandaling nasuri na aktwal na nagbigay sa iyo ng 1 at hindi higit pa, hindi mas mababa, 610 00:45:19,740 --> 00:45:23,750 ka upang i-prompt ang mga ito para sa isang string, sabihin nating, "Bigyan mo ako ng isang string." 611 00:45:23,750 --> 00:45:27,630 Kaya na kung saan sa kasong ito Nagbigay mo ito ... ay CS50! 612 00:45:27,630 --> 00:45:32,090 Kaya ka upang gamitin na at gamitin ang ohai at umulit sa paglipas ng. 613 00:45:32,090 --> 00:45:38,200 Pansinin na dito namin nilaktawan sa paglipas ng encrypt ang tagal, 614 00:45:38,200 --> 00:45:51,660 ngunit sa mga tuntunin ng aming posisyon para sa ohai, sa susunod na ginamit namin o. 615 00:45:51,660 --> 00:45:54,990 Sa kasong ito ng kaunti mahirap upang makita dahil na 4, 616 00:45:54,990 --> 00:45:57,710 kaya sabihin ipagpatuloy ng kaunti. Lamang dumikit sa akin dito. 617 00:45:57,710 --> 00:46:02,960 Pagkatapos mayroon kaming i at s, na pagkatapos ay isinalin sa pamamagitan ng o at h ayon sa pagkakasunud-sunod. 618 00:46:02,960 --> 00:46:09,370 Pagkatapos kami ay may isang puwang, at kaya alam namin na hindi namin sa ensayper ang mga puwang. 619 00:46:09,370 --> 00:46:18,930 Ngunit paunawa na sa halip ng pagpunta sa isang lugar na ito dito mismo, 620 00:46:18,930 --> 00:46:28,330 kami ay encrypt ng isang - Hindi ko alam kung maaari mong makita na - dito mismo. 621 00:46:28,330 --> 00:46:33,710 Kaya hindi ito gusto mo aktwal na paunang natukoy na, sabihin nating, o pupunta dito, h pupunta dito, 622 00:46:33,710 --> 00:46:39,200 isang Dito ilalagay, i napupunta dito, o, h, ng, i, o, h,, i. Hindi mo kailangang gawin iyon. 623 00:46:39,200 --> 00:46:43,760 Mo lamang ilipat ang iyong posisyon sa keyword 624 00:46:43,760 --> 00:46:51,020 kapag alam mo na aktwal na na-encrypt ng isang aktwal na sulat. 625 00:46:51,020 --> 00:46:53,920 Ba na uri ng kabuluhan? 626 00:46:53,920 --> 00:46:55,800 Okay. 627 00:46:56,490 --> 00:46:58,500 Kaya lamang ang ilang mga paalala. 628 00:46:58,500 --> 00:47:03,760 Nais mong tiyakin mo lamang advance sa susunod na titik sa iyong keyword 629 00:47:03,760 --> 00:47:06,390 kung ang character sa iyong plaintext ng sulat. 630 00:47:06,390 --> 00:47:09,120 Kaya nating kami sa o. 631 00:47:09,120 --> 00:47:19,310 Napansin namin na ang susunod na character, i index ng plaintext, ay isang numero, halimbawa. 632 00:47:19,310 --> 00:47:31,630 Pagkatapos hindi namin advance j, ang index para sa aming mga keyword, hanggang sa maabot namin ng isa pang liham. 633 00:47:31,630 --> 00:47:36,230 Muli, nais mo ring tiyakin na wraparound sa simula ng keyword 634 00:47:36,230 --> 00:47:37,770 kapag handa ka sa dulo nito. 635 00:47:37,770 --> 00:47:42,030 Kung nakikita mo dito kami sa i, sa susunod na o. 636 00:47:42,030 --> 00:47:47,690 Kaya gusto mong mahanap ang ilang mga paraan ng pagiging magagawang wraparound sa simula ng iyong keyword 637 00:47:47,690 --> 00:47:49,470 sa bawat oras na maabot mo ang katapusan. 638 00:47:49,470 --> 00:47:55,040 At kaya muli, kung anong uri ng operator ay kapaki-pakinabang sa kasong iyon para sa pambalot sa paligid? 639 00:47:56,630 --> 00:47:59,840 Gusto sa pagbilang off Halimbawa. 640 00:47:59,840 --> 00:48:03,710 [Mag-aaral] Ang porsyento sign. >> Oo, ang porsyento sign, na modulo. 641 00:48:03,710 --> 00:48:11,250 Kaya modulo ay darating sa madaling-gamiting dito kapag gusto mong I-wrap ang ibabaw ng index sa iyong ohai. 642 00:48:11,250 --> 00:48:17,700 At ng mabilis na pahiwatig: Subukang mag-isip ng pambalot sa ibabaw ng keyword ng kaunti tulad ng pagbibilang off, 643 00:48:17,700 --> 00:48:23,590 kung saan kung may 3 group, ang ika-4 na tao, 644 00:48:23,590 --> 00:48:30,610 ang kanilang numero na sinabi nila 4 mod 3, kung saan ay 1. 645 00:48:30,610 --> 00:48:32,880 Kaya subukan at sa tingin ng mga ito na paraan. 646 00:48:34,770 --> 00:48:42,740 Tulad ng nakita mo sa formula, saanman mayroon kang ci at pagkatapos pay ngunit pagkatapos kj, 647 00:48:42,740 --> 00:48:44,700 nais mong tiyakin na iyong panatilihin ang track ng mga. 648 00:48:44,700 --> 00:48:47,580 Hindi mo na kailangang tumawag ito i, hindi mo na kailangan na tumawag ito j, 649 00:48:47,580 --> 00:48:53,270 ngunit nais mong tiyakin na iyong subaybayan ng posisyon na ikaw ay sa sa iyong plaintext 650 00:48:53,270 --> 00:48:55,790 pati na rin ang posisyon na ikaw ay nasa sa iyong keyword 651 00:48:55,790 --> 00:48:59,840 dahil iyon ay hindi kinakailangan ang parehong. 652 00:48:59,840 --> 00:49:06,400 Hindi lamang ang ipinapakita sa keyword - maaaring ito ay isang ganap na naiibang mga na haba kaysa sa iyong plaintext. 653 00:49:06,400 --> 00:49:09,140 Gayundin, ang iyong plaintext, may mga numero at mga character, 654 00:49:09,140 --> 00:49:14,450 kaya hindi ito perpektong tumutugma sama-sama. Oo. 655 00:49:14,450 --> 00:49:19,280 [Mag-aaral] Mayroon bang isang function na baguhin ang kaso? 656 00:49:19,280 --> 00:49:24,530 Maaari mong baguhin ang isang sa kabisera A? >> Oo, mayroong tiyak ay. 657 00:49:24,530 --> 00:49:27,890 Maaari mong tingnan ang - tingin ko ito ay toupper, ang lahat ng 1 salita. 658 00:49:30,650 --> 00:49:36,310 Ngunit kapag sinusubukan mong i-Cipher bagay at mapanatili ang teksto, 659 00:49:36,310 --> 00:49:39,350 ito ay pinakamahusay na isa lamang na magkaroon ng hiwalay na mga kaso. 660 00:49:39,350 --> 00:49:42,040 Kung ito ay isang uppercase, nais mong upang ilipat sa pamamagitan ng ito 661 00:49:42,040 --> 00:49:46,460 dahil sa iyong formula, kapag tiningnan mo pabalik kung mayroon kaming sa uri ng go 662 00:49:46,460 --> 00:49:50,900 salitan sa pagitan ng mga ASCII na paraan ng kumakatawan sa mga numero 663 00:49:50,900 --> 00:49:55,020 at ang aktwal na alpabetikong index, nais naming tiyakin 664 00:49:55,020 --> 00:50:01,850 mayroong pagpunta sa ilang uri ng mga pattern na kayo ay pagpunta sa gamitin. 665 00:50:01,850 --> 00:50:04,580 Isa pang tandaan sa pattern, ang aktwal na. 666 00:50:04,580 --> 00:50:07,250 Ay pagpunta sa tiyak na pagharap sa mga numero. 667 00:50:07,250 --> 00:50:11,280 Subukan ang hindi upang gamitin ang mga magic numero, na kung saan ay isang halimbawa ng estilo. 668 00:50:11,280 --> 00:50:18,470 Kaya natin na gusto mo sa bawat shift ng oras ng isang bagay sa pamamagitan ng bang - 669 00:50:18,470 --> 00:50:22,400 Okay, kaya pahiwatig, ang isa pang spoiler kapag ikaw ay pagpunta sa paglilipat ng isang bagay 670 00:50:22,400 --> 00:50:26,310 sa pamamagitan ng isang tiyak na halaga, subukan ang hindi upang kumatawan na sa pamamagitan ng isang aktwal na numero 671 00:50:26,310 --> 00:50:32,810 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. 672 00:50:32,810 --> 00:50:35,470 Isa pang tandaan: Dahil kami ay pagharap sa formula, 673 00:50:35,470 --> 00:50:41,200 kahit na ang iyong tf uri ng pag-alam kung ano ang pattern maaari mong gamit, 674 00:50:41,200 --> 00:50:44,430 pinakamahusay na sa iyong mga komento uri ng ipaliwanag ang logic, i, 675 00:50:44,430 --> 00:50:51,880 "Ako gamit ang pattern na ito dahil sa ..." at uri ng ipaliwanag succinctly ang pattern sa iyong mga komento. 676 00:50:54,090 --> 00:50:58,990 [Ito ay walkthrough 2] Kung walang anumang iba pang mga katanungan, kukunin ko na lang manatili dito para sa ilang sandali. 677 00:50:58,990 --> 00:51:04,370 Good luck sa iyong pset 2: Crypto at salamat para sa darating na. 678 00:51:06,070 --> 00:51:08,620 [Mag-aaral] Salamat. >> Salamat. 679 00:51:09,220 --> 00:51:10,800 [Media Offline intro]