1 00:00:00,000 --> 00:00:00,980 2 00:00:00,980 --> 00:00:04,410 >> [Musika nagpe-play] 3 00:00:04,410 --> 00:00:11,147 4 00:00:11,147 --> 00:00:12,230 David J. MALAN: Lahat ng karapatan. 5 00:00:12,230 --> 00:00:16,440 Ito ay CS50, at ito ay ang pagtatapos ng Linggo 2. 6 00:00:16,440 --> 00:00:18,480 Kaya ngayon, kami ay pagpunta upang ipagpatuloy ang aming hitsura 7 00:00:18,480 --> 00:00:21,150 sa kung paano namin kumakatawan bagay sa ilalim ng hood-- gumagalaw ang layo 8 00:00:21,150 --> 00:00:23,520 mula sa mga numero tulad ng integer at lumulutang halaga punto 9 00:00:23,520 --> 00:00:26,810 at tumutuon sa mga string at sa huli mas kawili-wiling programa. 10 00:00:26,810 --> 00:00:30,140 Ngunit namin makikita ring kumuha ng isang pagtingin sa isang dalawang problems-- partikular na domain- 11 00:00:30,140 --> 00:00:33,620 ang una sa kung saan ay maging kinasasangkutan ng cryptography, 12 00:00:33,620 --> 00:00:36,570 ang sining ng scrambling impormasyon, kung saan nakikita ninyo sa itaas dito 13 00:00:36,570 --> 00:00:41,480 ay isang larawan ng Radio ulila Annie ni lihim na decoder ring mula yesteryear. 14 00:00:41,480 --> 00:00:46,490 >> Ito ay talagang napaka-primitive na form at bata-friendly na paraan ng cryptopgraphy 15 00:00:46,490 --> 00:00:50,590 kung saan ang singsing na ito ay may dalawang disks-- isa sa loob at isa sa labas. 16 00:00:50,590 --> 00:00:54,740 At sa pamamagitan ng umiikot na ang isa sa mga, maaari kang mahalagang line up titik tulad ng A 17 00:00:54,740 --> 00:00:59,520 sa pamamagitan ng Z sa iba pang mga titik tulad ng B sa pamamagitan ng A. Sa ibang salita, 18 00:00:59,520 --> 00:01:03,730 maaari mong literal i-rotate ang alpabeto, at sa gayon ay darating up sa isang pagmamapa mula sa 19 00:01:03,730 --> 00:01:07,820 mga titik sa mga titik sa gayon ay, kung ikaw Nais upang magpadala ng isang lihim na mensahe 20 00:01:07,820 --> 00:01:11,820 sa isang tao na tulad ng Annie, maaari kang sumulat down na ang iyong mga mensahe at pagkatapos ay i-rotate 21 00:01:11,820 --> 00:01:15,370 ang mga titik, kung saan, kung ibig mo bang sabihin magsabi ng "A," ikaw sa halip ay sabihin ang "B," 22 00:01:15,370 --> 00:01:17,280 mo bang sabihin ang "B," mo sa halip sabihin ang "C" - 23 00:01:17,280 --> 00:01:20,240 o isang bagay na mas ng kaunti matalino kaysa that-- at pagkatapos, sa huli, 24 00:01:20,240 --> 00:01:24,630 kaya hangga't Annie ay may ito decoder singsing, maaari niyang decode ang mensahe. 25 00:01:24,630 --> 00:01:28,540 Ngayon, maaari mong isipin ang, sa katunayan, na ito ay ginagamit sa isang napaka sikat na film na 26 00:01:28,540 --> 00:01:31,140 Nagpe-play ang ad nauseum sa panahon ng ang panahon ng Pasko. 27 00:01:31,140 --> 00:01:32,650 Tingnan natin ang isang hitsura dito. 28 00:01:32,650 --> 00:01:35,294 29 00:01:35,294 --> 00:01:37,210 RALPHIE Parker: "Maging ito Kilala sa lahat sa buod 30 00:01:37,210 --> 00:01:41,000 na Ralph Parker sa pamamagitan nito appointed isang miyembro ng Little ulila Annie Lihim 31 00:01:41,000 --> 00:01:44,860 Circle at karapat-dapat sa lahat ng mga mga parangal at mga benepisyo nagaganap doon. " 32 00:01:44,860 --> 00:01:47,410 >> RALPHIE Parker (NARRATING): Naka-sign Little ulila Annie. 33 00:01:47,410 --> 00:01:50,070 Countersigned, Pierre Andre! 34 00:01:50,070 --> 00:01:51,490 Sa tinta. 35 00:01:51,490 --> 00:01:55,494 Mga parangal at mga benepisyo, narito na sa edad na siyam. 36 00:01:55,494 --> 00:01:57,402 >> [Musika nagpe-play] 37 00:01:57,402 --> 00:02:00,470 >> [Radio Chatter] 38 00:02:00,470 --> 00:02:01,470 RALPHIE Parker: Halika sa. 39 00:02:01,470 --> 00:02:02,344 Sabihin makakuha sa sa mga ito. 40 00:02:02,344 --> 00:02:06,029 Hindi ko kailangan ang lahat ng mga jazz na tungkol sa smugglers at pirates. 41 00:02:06,029 --> 00:02:08,820 Radio ANNOUNCER: Makinig bukas gabi para sa concluding pakikipagsapalaran 42 00:02:08,820 --> 00:02:11,060 ng The Black Pirate Ship. 43 00:02:11,060 --> 00:02:14,740 Ngayon, oras na para sa Annie ni Lihim ng Mensahe para sa iyo miyembro 44 00:02:14,740 --> 00:02:17,110 ng Lihim Circle. 45 00:02:17,110 --> 00:02:20,700 Tandaan mga bata, mga miyembro lamang ng Annie ng Lihim Circle 46 00:02:20,700 --> 00:02:23,270 Maaari decode ang lihim na mensahe Annie ni. 47 00:02:23,270 --> 00:02:27,270 >> Tandaan, ang Annie ay depende sa iyo. 48 00:02:27,270 --> 00:02:30,060 Itakda ang iyong mga pin sa B-2. 49 00:02:30,060 --> 00:02:34,004 Narito ang message-- 12, 11, 2-- 50 00:02:34,004 --> 00:02:36,503 RALPHIE Parker (NARRATING): ko Kasama sa aking unang lihim na pulong. 51 00:02:36,503 --> 00:02:40,041 Radio ANNOUNCER: --25, 14, 11, 18, 16-- 52 00:02:40,041 --> 00:02:42,790 RALPHIE Parker (NARRATING): Oh, Pierre ay nasa mahusay na boses ngayong gabi. 53 00:02:42,790 --> 00:02:46,110 Maaari ko bang sabihin na ngayong gabi ni mensahe ay talagang mahalaga. 54 00:02:46,110 --> 00:02:47,930 >> Radio ANNOUNCER: --3, 25. 55 00:02:47,930 --> 00:02:49,940 Iyon ang isang mensahe mula sa Annie ang kanyang sarili. 56 00:02:49,940 --> 00:02:52,182 Tandaan, huwag sabihin sa sinuman. 57 00:02:52,182 --> 00:02:55,077 >> [PANTING] 58 00:02:55,077 --> 00:02:57,285 RALPHIE Parker (NARRATING): Siyamnapung segundo sa ibang pagkakataon, ako 59 00:02:57,285 --> 00:03:00,090 sa room lamang sa bahay kung saan ang isang batang lalaki ng siyam 60 00:03:00,090 --> 00:03:04,380 maaaring umupo sa privacy at MAG-DECODE. 61 00:03:04,380 --> 00:03:04,990 Ah. 62 00:03:04,990 --> 00:03:05,680 "B." 63 00:03:05,680 --> 00:03:06,524 >> [CHUCKLES] 64 00:03:06,524 --> 00:03:08,684 >> RALPHIE Parker (NARRATING): Nagpunta ako sa susunod. 65 00:03:08,684 --> 00:03:09,610 "E." 66 00:03:09,610 --> 00:03:11,641 Ang unang salita ay "maging." 67 00:03:11,641 --> 00:03:12,140 Oo! 68 00:03:12,140 --> 00:03:14,293 Ito ay darating na mas madali na ngayon. 69 00:03:14,293 --> 00:03:15,259 "U." 70 00:03:15,259 --> 00:03:16,225 >> [CHUCKLES] 71 00:03:16,225 --> 00:03:18,157 >> Randy Parker: Ay, dumating sa, Ralphie. 72 00:03:18,157 --> 00:03:19,606 Gotta ko pumunta! 73 00:03:19,606 --> 00:03:21,538 >> RALPHIE Parker: Makikita ko ba ang tamang pababa, Ma. 74 00:03:21,538 --> 00:03:22,504 GEE matalinong. 75 00:03:22,504 --> 00:03:25,402 76 00:03:25,402 --> 00:03:31,220 "T." "O." "Maging sigurado sa. "" Maging sigurado na "kung ano? 77 00:03:31,220 --> 00:03:33,981 Ano ang Little ulila Annie sinusubukan mong sabihin? "Maging sigurado na" kung ano? 78 00:03:33,981 --> 00:03:35,522 Ina: Ralphie, ay nakuha Randy upang pumunta. 79 00:03:35,522 --> 00:03:36,735 Babaguhin ba ninyo ang mangyaring dumating out? 80 00:03:36,735 --> 00:03:38,190 >> RALPHIE Parker: Lahat ng karapatan, Nanay! 81 00:03:38,190 --> 00:03:39,787 Kukunin ko maging karapatan out! 82 00:03:39,787 --> 00:03:41,995 RALPHIE Parker (NARRATING): Ako ay nakakakuha ng mas malapit ngayon. 83 00:03:41,995 --> 00:03:43,370 Pagkabahala ay kahila-hilakbot. 84 00:03:43,370 --> 00:03:44,794 Ano ito? 85 00:03:44,794 --> 00:03:47,656 Ang kapalaran ng planeta maaaring mag-hang sa balanse. 86 00:03:47,656 --> 00:03:50,518 >> Ina: Ralphie, Randy ni Nakakuha upang pumunta! 87 00:03:50,518 --> 00:03:53,635 >> RALPHIE Parker: Makikita ko ba ang karapatan out, para sa umiiyak nang malakas! 88 00:03:53,635 --> 00:03:55,343 RALPHIE Parker (NARRATING): Halos doon! 89 00:03:55,343 --> 00:03:56,520 Nagsakay Aking mga daliri! 90 00:03:56,520 --> 00:03:58,500 Aking isip ay isang bakal bitag. 91 00:03:58,500 --> 00:03:59,850 Vibrated bawat pore. 92 00:03:59,850 --> 00:04:01,806 Ito ay halos malinaw! 93 00:04:01,806 --> 00:04:02,773 Oo! 94 00:04:02,773 --> 00:04:03,273 Oo! 95 00:04:03,273 --> 00:04:03,773 Oo! 96 00:04:03,773 --> 00:04:04,740 Oo! 97 00:04:04,740 --> 00:04:10,250 >> RALPHIE Parker: "Maging sigurado sa pag-inom ng iyong Ovaltine. " 98 00:04:10,250 --> 00:04:10,750 Ovaltine? 99 00:04:10,750 --> 00:04:14,864 100 00:04:14,864 --> 00:04:17,539 Ang isang crummy komersyal? 101 00:04:17,539 --> 00:04:19,439 >> [Musika nagpe-play] 102 00:04:19,439 --> 00:04:21,724 >> RALPHIE Parker: Anak ng isang bitch. 103 00:04:21,724 --> 00:04:23,460 >> [Tumatawa] 104 00:04:23,460 --> 00:04:27,070 >> David J. MALAN: Kaya na pagkatapos ay isang sulyap sa kung ano ang cryptography 105 00:04:27,070 --> 00:04:29,880 ay maaaring maging para sa isang this-- uminom mula yesteryear. 106 00:04:29,880 --> 00:04:30,900 Kaya isang mabilis na anunsyo. 107 00:04:30,900 --> 00:04:33,410 Kung ikaw ay malayang na ito Biyernes sa 13:15 at gagawin 108 00:04:33,410 --> 00:04:36,610 nais na sumali sa amin para sa CS50 tanghalian, magtungo sa URL na ito dito. 109 00:04:36,610 --> 00:04:38,080 First come, first maghatid gaya ng dati. 110 00:04:38,080 --> 00:04:41,840 Ngunit sa paglipas ng panahon, titiyakin namin na karamihan sa sinumang nais na lumahok 111 00:04:41,840 --> 00:04:43,640 Maaaring i-iskedyul-matalino. 112 00:04:43,640 --> 00:04:45,170 >> Kaya mga string. 113 00:04:45,170 --> 00:04:47,940 Mayroon kaming Zamyla-- kanino ngayon nakilala mo pinaka-malamang 114 00:04:47,940 --> 00:04:50,750 Problema sa Set 1-- na ang pangalan ay naisulat ng sa gayon. 115 00:04:50,750 --> 00:04:53,570 At ipagpalagay na iyong na-type ang kanyang pangalan sa isang computer program na 116 00:04:53,570 --> 00:04:55,710 gamit ang isang bagay tulad ng getString. 117 00:04:55,710 --> 00:04:57,890 Upang mabawi mga keystroke, kung paano 118 00:04:57,890 --> 00:05:01,620 huwag pumunta kami tungkol sa kumakatawan sa isang string, isang salita, isang talata, 119 00:05:01,620 --> 00:05:03,960 o maramihang mga titik tulad ng mga ito dito? 120 00:05:03,960 --> 00:05:06,790 >> Usapan natin ang huling beses tungkol sa integer at mga problema 121 00:05:06,790 --> 00:05:09,960 na lumabas dahil sa integer overflow at lumulutang halaga punto 122 00:05:09,960 --> 00:05:12,190 at mga problema na lumabas dahil sa loob ng katumpakan. 123 00:05:12,190 --> 00:05:16,080 Sa mga string, sa kami ng hindi bababa sa magkaroon ng isang bit higit pang kakayahang umangkop 124 00:05:16,080 --> 00:05:17,970 dahil strings-- lamang sa tunay na world-- 125 00:05:17,970 --> 00:05:19,790 ay maaaring maging isang magandang di-makatwirang haba. 126 00:05:19,790 --> 00:05:21,055 Pretty maikli, medyo mahaba. 127 00:05:21,055 --> 00:05:23,680 Ngunit kahit na pagkatapos, kami ay pagpunta sa mahanap na mga computer maaari minsan 128 00:05:23,680 --> 00:05:27,200 Naubusan ng memorya at hindi man lamang mag-imbak ng malaking sapat na string. 129 00:05:27,200 --> 00:05:30,840 >> Ngunit sa ngayon, ang simulan upang mailarawan ang hayaan isang string na ito bilang isang bagay sa mga kahon 130 00:05:30,840 --> 00:05:31,340 dito. 131 00:05:31,340 --> 00:05:36,410 Kaya anim tulad kahon, ang bawat isa ay kumakatawan sa isang karakter o "char." 132 00:05:36,410 --> 00:05:40,646 Kaya isipin na "char" - c-h-a-r-- ay isa sa mga built-in na mga uri ng data sa C. 133 00:05:40,646 --> 00:05:43,520 At kung ano ang magaling ay na maaari mong gamitin na uri ng mga bilang isang bloke ng gusali, 134 00:05:43,520 --> 00:05:47,880 isang piraso puzzle, kung gagawin mo, upang bumuo ng isang mas malaking uri ng data na patuloy naming 135 00:05:47,880 --> 00:05:49,410 upang tawagan ang isang "string." 136 00:05:49,410 --> 00:05:53,650 >> Ngayon, kung ano ang tungkol sa kapaki-pakinabang na pag-iisip tungkol sa mga bagay tulad ng mga string sa paraang ito? 137 00:05:53,650 --> 00:05:57,720 Well, ito ay lumiliko out na aming makakaya talagang makakuha istraktura na ito 138 00:05:57,720 --> 00:06:01,420 upang aktwal na i-access ang mga indibidwal na mga character sa magandang prangka paraan. 139 00:06:01,420 --> 00:06:04,099 Pupunta ako sa magpatuloy at lumikha isang file na tinatawag na "stringzero.c," 140 00:06:04,099 --> 00:06:05,765 ngunit maaari mo itong tumawag sa kahit anong gusto mo. 141 00:06:05,765 --> 00:06:08,500 At sa website ng kurso ay na ito halimbawa nang maaga, 142 00:06:08,500 --> 00:06:10,430 kaya hindi mo kailangang i-type ang lahat ng bagay out. 143 00:06:10,430 --> 00:06:13,820 >> At ako pagpunta sa sige at unang gawin int pangunahing walang bisa. 144 00:06:13,820 --> 00:06:15,980 At sa loob ng ilang araw, magsisimula kami sa tease hiwalayin 145 00:06:15,980 --> 00:06:19,070 kung ano ang walang bisa ay dito, kung bakit ito int sa tabi ng pangunahing, at iba pa. 146 00:06:19,070 --> 00:06:21,180 Ngunit sa ngayon, patuloy na ipaalam upang kopyahin i-paste na iyon. 147 00:06:21,180 --> 00:06:23,455 >> Pupunta ako sa ipinapahayag ng isang string na tinatawag s. 148 00:06:23,455 --> 00:06:26,920 At Pupunta ako sa bumalik mula sa GetString kahit anong uri ng gumagamit sa. 149 00:06:26,920 --> 00:06:29,170 Ito ay magiging isang simpleng programa, walang mga tagubilin, 150 00:06:29,170 --> 00:06:31,336 Lamang ako ng pagpunta sa blindly asahan na alam ng user 151 00:06:31,336 --> 00:06:32,600 kung ano ang gagawin upang panatilihin itong simple. 152 00:06:32,600 --> 00:06:34,220 >> At ngayon pupuntahan ko ay may para sa loop. 153 00:06:34,220 --> 00:06:37,450 At sa loob ng aking para sa loop ako pagpunta sa may int i nakakakuha ng zero. 154 00:06:37,450 --> 00:06:40,660 At i ay muli,, isang convention lamang, isang index variable para sa pagbilang, 155 00:06:40,660 --> 00:06:42,350 ngunit maaari kong tumawag ito kahit anong gusto ko. 156 00:06:42,350 --> 00:06:46,275 Pupunta ako sa gawin i Mababa than-- na rin Pangalan Zamyla ay anim na titik ang haba. 157 00:06:46,275 --> 00:06:48,150 Kaya ako pupunta sa hard na mayroong code para sa ngayon. 158 00:06:48,150 --> 00:06:49,730 >> At pagkatapos ay i ++. 159 00:06:49,730 --> 00:06:53,190 At ngayon sa loob ng mga kulot braces Pupunta ako sa gawin printf, 160 00:06:53,190 --> 00:06:55,460 at gusto kong i-print isa na character sa isang pagkakataon. 161 00:06:55,460 --> 00:06:58,227 Kaya pupuntahan ko gamitin% c para sa marahil sa unang pagkakataon. 162 00:06:58,227 --> 00:07:00,560 At pagkatapos ay gusto kong i-print ang bawat na character sa sarili nitong linya. 163 00:07:00,560 --> 00:07:02,550 Kaya Pupunta ako sa ilagay ang isang maliit na backslash n doon. 164 00:07:02,550 --> 00:07:03,640 Isara ang quote. 165 00:07:03,640 --> 00:07:06,250 >> At ngayon nais ko na gawin ang isang bagay dito. 166 00:07:06,250 --> 00:07:10,610 Gusto kong i-print ang tiyak na titik sa string, 167 00:07:10,610 --> 00:07:13,670 s, bilang ako iterating mula sa zero sa hanggang sa anim na. 168 00:07:13,670 --> 00:07:17,150 Sa madaling salita, gusto kong i-print ang i'th character ng s. 169 00:07:17,150 --> 00:07:18,420 Ngayon paano ko ito gagawin? 170 00:07:18,420 --> 00:07:21,550 >> Well halos tulad ng mga kahon sa ito pagkatawan dito, 171 00:07:21,550 --> 00:07:25,560 uri ng, conjure up ang paniwala ng boxing mga titik sa, maaari mong gawin ang katulad na 172 00:07:25,560 --> 00:07:32,630 syntactically sa C sa pamamagitan lamang ng pagtukoy, Gusto kong i-print out ni i'th character. 173 00:07:32,630 --> 00:07:35,640 Gamit ang mga square bracket sa isang keyboard ng iyong computer 174 00:07:35,640 --> 00:07:38,910 na sa isang US na keyboard ay Sa pangkalahatan sa itaas ng iyong return key. 175 00:07:38,910 --> 00:07:42,630 >> Kaya ito ay hindi masyadong tama pa, bilang maaari mong napansin. 176 00:07:42,630 --> 00:07:44,780 Ngunit Pupunta ako sa uri ng blindly pekein maaga dito. 177 00:07:44,780 --> 00:07:47,020 At ako pagpunta sa gawin gumawa ng string 0. 178 00:07:47,020 --> 00:07:50,860 Ngunit bago ko ito, sabihin makita kung namin Hindi maaaring asahan ang ilang mga karaniwang pagkakamali. 179 00:07:50,860 --> 00:07:52,844 Ay ito pagpunta upang makatipon? 180 00:07:52,844 --> 00:07:54,510 Hindi, ako ako Kulang ng buong bungkos ng mga bagay. 181 00:07:54,510 --> 00:07:55,280 Mga Aklatan narinig ko. 182 00:07:55,280 --> 00:07:58,480 >> Kaya kung aling mga file ng header Maaaring ko nais upang idagdag dito? 183 00:07:58,480 --> 00:07:59,205 Oo. 184 00:07:59,205 --> 00:08:01,580 >> Madla: Kailangan mo karaniwang I / O [INAUDIBLE] 185 00:08:01,580 --> 00:08:02,663 >> David J. MALAN: Mahusay. 186 00:08:02,663 --> 00:08:06,060 Kaya kailangan kong standard I / O. Para sa kung ano ang layunin ang gusto ko standard I / O? 187 00:08:06,060 --> 00:08:06,670 Para sa printf. 188 00:08:06,670 --> 00:08:09,220 Kaya isama stdio.h. 189 00:08:09,220 --> 00:08:13,490 At ninyong imungkahi din na kasama ko ang CS50 library para sa kung ano ang dahilan? 190 00:08:13,490 --> 00:08:14,650 Upang magkaroon ng mga string. 191 00:08:14,650 --> 00:08:17,780 Kaya makikita namin makita kung ano ang Library CS50 ay ang paggawa 192 00:08:17,780 --> 00:08:19,260 upang likhain ang paniwala ng isang string. 193 00:08:19,260 --> 00:08:21,930 Ngunit sa ngayon, maaari mong isipin lamang ng ito bilang isang aktwal na uri ng data. 194 00:08:21,930 --> 00:08:23,596 >> Kaya na Mukhang ng kaunti nalinis up. 195 00:08:23,596 --> 00:08:27,060 At ngayon pupuntahan ko sige at sa katunayan gawin gumawa ng string 0. 196 00:08:27,060 --> 00:08:27,700 Pinagsama-sama. 197 00:08:27,700 --> 00:08:28,370 Kaya na maganda. 198 00:08:28,370 --> 00:08:32,799 Kaya ./string0 hayaan mo akong mag-zoom in sa gayon aming makakaya makita nang mas malapitan kung ano ang nangyayari. 199 00:08:32,799 --> 00:08:33,850 Ipasok. 200 00:08:33,850 --> 00:08:37,789 Z-A-M-Y-L-A magpasok. 201 00:08:37,789 --> 00:08:39,440 At ang mga naka-print na namin sa pangalan ni Zamyla. 202 00:08:39,440 --> 00:08:40,409 >> Kaya na medyo magandang. 203 00:08:40,409 --> 00:08:43,220 Kaya ngayon sabihin magpatuloy at patakbuhin ang program na ito muli, 204 00:08:43,220 --> 00:08:45,659 at i-type ang buong pangalan ni Daven. 205 00:08:45,659 --> 00:08:46,450 Sorpresa, sorpresa. 206 00:08:46,450 --> 00:08:48,021 Ipasok. 207 00:08:48,021 --> 00:08:48,520 Hmm. 208 00:08:48,520 --> 00:08:51,750 Hindi pa namin na-print Daven ni buong pangalan nang tama. 209 00:08:51,750 --> 00:08:54,250 Ngayon ito ay dapat na kitang-kita sa retrospect dahil sa kung ano, 210 00:08:54,250 --> 00:08:57,010 uri ng, hangal desisyon na disenyo? 211 00:08:57,010 --> 00:08:59,590 >> Oo, hard-code na ako ang anim sa loob ng aking para sa loop. 212 00:08:59,590 --> 00:09:01,610 Ngayon ko na ginawa dahil lamang Alam ko pangalan Zamyla ni 213 00:09:01,610 --> 00:09:02,776 ay magiging anim na mga titik. 214 00:09:02,776 --> 00:09:04,720 Ngunit tiyak na ito ay hindi isang pangkalahatang solusyon. 215 00:09:04,720 --> 00:09:07,720 Kaya ito ay lumiliko out dynamic na aming makakaya malaman kung ang haba ng isang string 216 00:09:07,720 --> 00:09:10,440 sa pamamagitan ng pagtawag ng isang function na tinatawag na strlen. 217 00:09:10,440 --> 00:09:12,840 >> Muli, sadyang succinctly na may pangalang lamang 218 00:09:12,840 --> 00:09:14,450 upang gawin itong mas maginhawang upang i-type. 219 00:09:14,450 --> 00:09:17,170 Ngunit iyon lamang ang magkasingkahulugan na may pagkuha ng haba ng isang string. 220 00:09:17,170 --> 00:09:23,190 Pupunta ako sa bumalik sa aking terminal window na ito at muling patakbuhin ang Compiler. 221 00:09:23,190 --> 00:09:24,170 Ngunit ito ay yelling sa akin. 222 00:09:24,170 --> 00:09:29,130 Implicitly Ang pagdeklara ng function ng library strlen sa uri unsigned int const-- 223 00:09:29,130 --> 00:09:29,780 Naliligaw ako. 224 00:09:29,780 --> 00:09:30,590 Ganap na. 225 00:09:30,590 --> 00:09:32,940 >> Kaya, lalo na bilang iyong mata simulan upang glaze sa ibabaw 226 00:09:32,940 --> 00:09:36,000 may mga error na mensahe tulad nito, focus totoo lang sa unang ilang salita. 227 00:09:36,000 --> 00:09:38,590 Alam namin ang problema ay nasa 8 linya, pati na isinasaad dito. 228 00:09:38,590 --> 00:09:40,500 At ito ay nasa string-0.c. 229 00:09:40,500 --> 00:09:43,580 Ang pagdeklara ng Implicitly strlen function ng library. 230 00:09:43,580 --> 00:09:47,000 Kaya na ay karaniwang pagpunta sa maging isang pattern ng mga mensahe ng error. 231 00:09:47,000 --> 00:09:49,190 Implicitly Ang pagdeklara ng isang bagay. 232 00:09:49,190 --> 00:09:53,250 >> Kaya sa maikling, kung ano ang tila kong na ginawa nang may paggalang sa line 8, dito. 233 00:09:53,250 --> 00:09:56,880 Ano ang maaaring maging kahit na ang solusyon kung hindi mo pa ginamit strlen sa iyong sarili? 234 00:09:56,880 --> 00:09:58,907 >> Madla: Bahagi ng iba't ibang mga library? 235 00:09:58,907 --> 00:10:00,740 David J. MALAN: Bahagi ng isang iba't ibang mga library. 236 00:10:00,740 --> 00:10:02,400 Kaya ito ay ipinahayag, kaya upang makipag-usap. 237 00:10:02,400 --> 00:10:07,510 Ito ay nabanggit sa ilang mga file maliban sa stdio.h at CS50.h. 238 00:10:07,510 --> 00:10:09,179 Ngayon kung saan ay natukoy ito? 239 00:10:09,179 --> 00:10:12,220 Upang maging tapat, mong alinman sa magkaroon upang lamang alam ito off sa tuktok ng iyong ulo, 240 00:10:12,220 --> 00:10:13,640 o mo ang Google na ito at malaman. 241 00:10:13,640 --> 00:10:18,150 O alam na ito, iyong binuksan up ako sa CS50 Appliance sa programa ng terminal, na 242 00:10:18,150 --> 00:10:22,200 lamang ang malaki, full screen na bersyon ng kung ano ang sa ibaba ng window ng gedit. 243 00:10:22,200 --> 00:10:24,970 >> At ito ay lumiliko out na mayroong isang katulad succinct utos, na tinatawag na 244 00:10:24,970 --> 00:10:29,280 tao para sa manu-manong, kung saan kung nagta-type ka sa ang pangalan ng isang function at pindutin ang Enter, 245 00:10:29,280 --> 00:10:32,240 makakakuha ka pabalik medyo arcane dokumentasyon. 246 00:10:32,240 --> 00:10:35,299 Ito ay lamang ng teksto na sa pangkalahatan mukhang ng kaunti ng isang bagay na katulad nito. 247 00:10:35,299 --> 00:10:37,090 Ito ay isang maliit na napakalaki sa unang tingin. 248 00:10:37,090 --> 00:10:39,048 Ngunit tapat pupuntahan ko hayaan ang aking mga mata glaze sa ibabaw 249 00:10:39,048 --> 00:10:41,930 at tumuon lamang sa mga bahagi Pinapahalagahan ko tungkol sa para sa ilang sandali. 250 00:10:41,930 --> 00:10:42,780 >> Alin ang na ito. 251 00:10:42,780 --> 00:10:45,470 Na kamukha structurally katulad isang bagay na hindi ako pamilyar sa. 252 00:10:45,470 --> 00:10:48,080 Sa katunayan ang pahina ng tao, kaya upang makipag-usap, ay magsasabi sa iyo 253 00:10:48,080 --> 00:10:51,590 sa kung ano header-file ng isang function tulad ng strlen ay tinukoy. 254 00:10:51,590 --> 00:10:54,170 Kaya ako pupunta upang bumalik ngayon upang gedit. 255 00:10:54,170 --> 00:10:59,070 At ako pagpunta sa sige at idagdag sa dito #include 256 00:10:59,070 --> 00:11:00,480 at i-save ang file. 257 00:11:00,480 --> 00:11:04,300 >> Pupunta ako upang i-clear ang screen na may mga Control L Kung na-nagtataka. 258 00:11:04,300 --> 00:11:08,210 At pupuntahan ko muling tumakbo make string.0, compiles oras na ito. 259 00:11:08,210 --> 00:11:11,790 ./string.0 Zamyla. 260 00:11:11,790 --> 00:11:15,020 Na tila upang gumana Hayaan akong pumunta magpatuloy at muling patakbuhin ito sa Davenport. 261 00:11:15,020 --> 00:11:15,860 Ipasok. 262 00:11:15,860 --> 00:11:17,730 At iyon, masyadong, tila upang gumana. 263 00:11:17,730 --> 00:11:21,220 >> Upang maaari naming gawin ang isang maliit na mas mahusay kaysa sa na ito, bagaman, maaari naming simulan upang maglinis bagay 264 00:11:21,220 --> 00:11:23,257 up lang nang kaunti. 265 00:11:23,257 --> 00:11:25,590 At pupuntahan ko talaga ipakilala ang isa sa iba pang mga bagay ngayon. 266 00:11:25,590 --> 00:11:28,930 Pupunta ako sa magpatuloy at i-save ito sa ibang file. 267 00:11:28,930 --> 00:11:31,770 At ako pagpunta sa tumawag sa ang file na ito string1.c lamang 268 00:11:31,770 --> 00:11:34,620 upang maging pare-pareho sa code magagawa mong upang makahanap ng online. 269 00:11:34,620 --> 00:11:37,050 >> At ng pagtuon sa ipaalam sa eksaktong kapareho code. 270 00:11:37,050 --> 00:11:39,000 Ito ay lumiliko out na na hindi ko na naging uri ng pagkuha 271 00:11:39,000 --> 00:11:42,600 para iginawad ang katotohanan na ang aking laptop, at siya namang, ang CS50 appliance 272 00:11:42,600 --> 00:11:47,450 May ng maraming memorya, ng maraming RAM, ng maraming byte ng espasyo 273 00:11:47,450 --> 00:11:48,920 kung saan ang maaari kong iimbak ng mga string. 274 00:11:48,920 --> 00:11:53,560 >> Subalit ang katotohanan kung nai-type ko mahaba sapat, at sapat na mga keystroke, 275 00:11:53,560 --> 00:11:56,170 Magagawa ko sa uri ng teorya sa higit pang mga character 276 00:11:56,170 --> 00:11:58,830 kaysa sa aking computer May pisikal na memory para sa. 277 00:11:58,830 --> 00:11:59,830 At ito ay may problemang. 278 00:11:59,830 --> 00:12:03,050 Karamihan tulad ng isang int maaari lamang bilangin kaya mataas na, sa teorya, 279 00:12:03,050 --> 00:12:06,600 maaari ka lamang Cram kaya maraming character sa RAM ng iyong computer o Random 280 00:12:06,600 --> 00:12:07,920 Access Memory. 281 00:12:07,920 --> 00:12:11,140 >> Kaya ako ay mas mahusay na inaasahan sa problemang ito, kahit 282 00:12:11,140 --> 00:12:13,660 bagaman maaari itong maging isang bihirang sulok kaso, kaya na magsalita. 283 00:12:13,660 --> 00:12:15,670 Hindi Nangyayari ba na madalas, maaaring mangyari. 284 00:12:15,670 --> 00:12:18,815 At kung ito ang mangyayari at gagawin ko hindi inaasahan at programa para dito, 285 00:12:18,815 --> 00:12:20,300 maaaring gawin sa aking programa na nakakaalam kung ano. 286 00:12:20,300 --> 00:12:22,220 I-freeze, hang, reboot, kahit anong. 287 00:12:22,220 --> 00:12:24,490 Isang bagay na mga inaasahang maaaring mangyari. 288 00:12:24,490 --> 00:12:27,120 >> Kaya kung ano ako pagpunta sa gawin ngayon, henceforth talaga ito, 289 00:12:27,120 --> 00:12:31,630 ay bago ko kailanman blindly gumamit ng variable tulad ng mga na 290 00:12:31,630 --> 00:12:36,790 Tinakdaan ang return halaga ng ilang iba pang mga pag-andar tulad ng getstring, 291 00:12:36,790 --> 00:12:40,200 Pupunta ako upang tiyakin na na halaga nito ay wasto. 292 00:12:40,200 --> 00:12:44,280 Kaya alam ko lamang mula sa pagkakaroon basahin Dokumentasyon CS50 para getstring, 293 00:12:44,280 --> 00:12:49,020 na sa huli kami ay ituro sa iyo sa, nagbabalik na getstring isang espesyal na simbolo 294 00:12:49,020 --> 00:12:53,610 na tinatawag na null, N-U-L-L sa lahat CAPS, kung ang isang bagay napupunta mali. 295 00:12:53,610 --> 00:12:55,650 >> Kaya normal, nagbabalik ito ng isang string. 296 00:12:55,650 --> 00:12:59,700 Ngunit kung hindi man ay kung ito ay nagbabalik N-U-L-L-- ipapakita namin ay makakita kung ano talaga ang 297 00:12:59,700 --> 00:13:01,790 means-- na lang paraan isang bagay masamang nangyari. 298 00:13:01,790 --> 00:13:05,560 Ngayon ito ay nangangahulugang, na halos tulad ng sa simula, Maaari ko bang suriin ang kundisyon dito sa C, 299 00:13:05,560 --> 00:13:08,830 kung s ay hindi katumbas null. 300 00:13:08,830 --> 00:13:11,930 Kaya kung hindi mo nakita ito bago, Hindi ito nangangahulugan lamang ang katumbas. 301 00:13:11,930 --> 00:13:15,290 >> Kaya ito ang sa tapat ng pantay na katumbas, na kung saan, isipin, 302 00:13:15,290 --> 00:13:18,940 ay naiiba mula sa iisang katumbas, na kung saan ay assignment. 303 00:13:18,940 --> 00:13:23,030 Kaya kung s ay hindi katumbas ng Null, pagkatapos lamang gawin 304 00:13:23,030 --> 00:13:25,980 Nais kong isagawa ang mga linya ng code. 305 00:13:25,980 --> 00:13:28,080 Kaya sa ibang salita, bago ako makisalamuha blindly 306 00:13:28,080 --> 00:13:30,919 at simulan ang iterating sa ibabaw s, at pagpapagamot ng ito 307 00:13:30,919 --> 00:13:33,710 na waring ito ay isang pagkakasunod-sunod ng character, Pupunta ako sa unang suriin, 308 00:13:33,710 --> 00:13:37,900 maghintay ng isang minuto, ay y Talagang hindi katumbas ito espesyal na halaga, walang bisa? 309 00:13:37,900 --> 00:13:40,030 >> Dahil kung ito ay, masamang bagay na maaaring mangyari. 310 00:13:40,030 --> 00:13:43,080 At sa ngayon, ipagpalagay na ang masamang bagay ay nangangahulugan nangyayari ang iyong mga pag-crash ng programa, 311 00:13:43,080 --> 00:13:45,070 at hindi mo kinakailangang mabawi. 312 00:13:45,070 --> 00:13:46,800 Kaya tapat, mukha itong hindi maganda. 313 00:13:46,800 --> 00:13:48,660 uri ng ito ay nakalilito ngayon upang sulyap sa. 314 00:13:48,660 --> 00:13:50,780 Ngunit ito ay magiging higit pa pamilyar bago mahaba. 315 00:13:50,780 --> 00:13:52,920 >> Ngunit Pupunta ako sa ipanukala ngayon ng isa sa iba pang mga pagpapabuti. 316 00:13:52,920 --> 00:13:54,660 Iyon ay isang pagpapabuti sa kawastuhan. 317 00:13:54,660 --> 00:13:58,800 Aking Mga programa na ngayon ang higit pa tama, dahil sa mga bihirang kaso na hindi sapat na memorya 318 00:13:58,800 --> 00:14:01,180 Umiiral, ako pangasiwaan ito, at ako makikita lamang gawin wala. 319 00:14:01,180 --> 00:14:02,680 Ako ng hindi bababa sa hindi nagka-crash. 320 00:14:02,680 --> 00:14:05,000 >> Ngunit gawin ng isang pangwakas na bersyon dito ipaalam. 321 00:14:05,000 --> 00:14:07,690 At isang file na tinatawag string2.c. 322 00:14:07,690 --> 00:14:10,190 Pupunta ako sa i-paste na parehong code para sa sandali lamang, 323 00:14:10,190 --> 00:14:14,210 at pupuntahan ko upang i-highlight ito line, 11, narito, para sa isang sandali lamang. 324 00:14:14,210 --> 00:14:18,179 Ngayon ang katotohanang ay ang smart compiler tulad ng maaaring ayusin Clang ito para sa amin 325 00:14:18,179 --> 00:14:19,970 sa likod ng mga eksena nang walang aming kailanman alam. 326 00:14:19,970 --> 00:14:24,670 Ngunit ni isipin ang tungkol ito ipaalam fundamentally bilang may problemang mga disenyo. 327 00:14:24,670 --> 00:14:29,010 >> Ang linya ng code ay, siyempre, na nagsasabi, simulan ang ilang mga variable i sa 0. 328 00:14:29,010 --> 00:14:30,260 Iyon ay medyo prangka. 329 00:14:30,260 --> 00:14:34,691 At kung ano muli ay ito pahayag, narito, ++ i, ginagawa? 330 00:14:34,691 --> 00:14:37,066 Nakita na namin ito dati, ngunit namin ay hindi talaga makipag-usap tungkol dito. 331 00:14:37,066 --> 00:14:37,900 >> Madla: Incrementing i. 332 00:14:37,900 --> 00:14:39,191 >> David J. MALAN: Incrementing i. 333 00:14:39,191 --> 00:14:41,890 Kaya sa bawat iteration sa pamamagitan ng ito loop, ang bawat ikot ng panahon, 334 00:14:41,890 --> 00:14:43,570 ka incrementing i-isa. 335 00:14:43,570 --> 00:14:45,740 Kaya ito ay makakakuha ng mas malaki, at mas malalaking, at mas malaki hanggang sa magwakas ang loop. 336 00:14:45,740 --> 00:14:46,810 Paano ito wakasan? 337 00:14:46,810 --> 00:14:49,430 Doon na rin ang gitnang ito kondisyon na iyong ginamit namin bago. 338 00:14:49,430 --> 00:14:52,500 Na iyong nakita at sa walkthroughs sa P set. 339 00:14:52,500 --> 00:14:53,880 >> Ngunit kung ano ang sinasabi ng mga ito? 340 00:14:53,880 --> 00:14:58,352 Gawin ang mga sumusunod loop kaya hangga't i ay mas mababa sa kung ano? 341 00:14:58,352 --> 00:14:59,810 Madla: Ang haba ng string. 342 00:14:59,810 --> 00:15:01,518 David J. MALAN: Ang haba ng string. 343 00:15:01,518 --> 00:15:04,300 Kaya ito nagta-translate ng magandang cleanly sa Ingles sa na kahulugan. 344 00:15:04,300 --> 00:15:08,810 Ngayon ang problema ay na sa tuwing ako umulit sa pamamagitan ng loop sa teorya, 345 00:15:08,810 --> 00:15:10,000 Ako na humihiling sa tanong na ito. 346 00:15:10,000 --> 00:15:12,250 Ay i mas mababa kaysa sa haba ng string ng mga s? 347 00:15:12,250 --> 00:15:14,500 Ay i mas mababa kaysa sa haba ng string ng mga s? 348 00:15:14,500 --> 00:15:18,380 >> Ngayon ay i pagbabago sa bawat iteration? 349 00:15:18,380 --> 00:15:18,880 Ito ay. 350 00:15:18,880 --> 00:15:19,629 Dahil sa ++. 351 00:15:19,629 --> 00:15:21,700 Kaya bawat iteration i nakukuhang mas malaki. 352 00:15:21,700 --> 00:15:25,411 Ngunit ang mga nakakakuha ng mas malaki, o mas maliit, o pagbabago sa lahat? 353 00:15:25,411 --> 00:15:25,910 Bilang 354 00:15:25,910 --> 00:15:30,240 Kaya sa mga tuntunin ng disenyo, ang isa sa mga axes kasama na sinusubukan naming suriin ang code 355 00:15:30,240 --> 00:15:32,610 sa klase, ito pakiramdam ng uri ng hangal. 356 00:15:32,610 --> 00:15:34,690 >> Tulad ka nang literal, sa bawat pag-ulit 357 00:15:34,690 --> 00:15:37,110 ng loop na ito na humihiling sa muli parehong damn pinag-uusapan, 358 00:15:37,110 --> 00:15:40,770 at muli, at muli, at literal ito ay hindi kailanman pagpunta upang baguhin. 359 00:15:40,770 --> 00:15:44,220 Hindi bababa kung hindi ako ng pagpindot s at sa pagsubok na baguhin ang mga nilalaman ng s. 360 00:15:44,220 --> 00:15:46,610 Kaya ang maaari kong gawin ang isang maliit na mas mahusay kaysa sa na ito. 361 00:15:46,610 --> 00:15:49,530 >> At kung ano ang pupuntahan ko gawin ay hindi Ipinahahayag variable i isa lamang, 362 00:15:49,530 --> 00:15:53,330 ngunit isang pangalawang variable idedetalye ko nagkataon, ngunit conventionally, tawagin n. 363 00:15:53,330 --> 00:15:55,940 Magtalaga n katumbas ng string haba ng s. 364 00:15:55,940 --> 00:15:59,090 At pagkatapos sa paglipas dito, pupuntahan ko gawin ang isang maliit na matalino sa pag-optimize, kaya 365 00:15:59,090 --> 00:16:03,460 upang makipag-usap, na sa pagtatapos ng araw ay wala nang tama o walang mas tama 366 00:16:03,460 --> 00:16:04,260 kaysa dati. 367 00:16:04,260 --> 00:16:05,500 Ngunit ito ay isang mas mahusay na disenyo. 368 00:16:05,500 --> 00:16:09,480 Sa katotohanan na gumagamit ako mas kaunting oras, mas kaunting mga ikot ng CPU, kaya 369 00:16:09,480 --> 00:16:14,040 upang makipag-usap, upang sagutin ang parehong pinag-uusapan, ngunit minsan lamang. 370 00:16:14,040 --> 00:16:17,870 >> Ang anumang mga tanong sa pangkalahatang na prinsipyo ng pagpapabuti, 371 00:16:17,870 --> 00:16:21,294 sinasabi, kahusayan ng isang program? 372 00:16:21,294 --> 00:16:21,991 Oo? 373 00:16:21,991 --> 00:16:23,699 Madla: Bakit mo gamitin ang [INAUDIBLE]? 374 00:16:23,699 --> 00:16:25,760 375 00:16:25,760 --> 00:16:27,010 David J. MALAN: Magandang katanungan. 376 00:16:27,010 --> 00:16:30,690 Kaya bakit ko ilalagay namin ang ++ sa dulo ng i halip na sa simula ng i? 377 00:16:30,690 --> 00:16:33,070 Sa kasong ito, mayroon itong hindi nagagamit na epekto. 378 00:16:33,070 --> 00:16:36,670 At sa pangkalahatan, ay may posibilidad kong gamitin ang postfix operator 379 00:16:36,670 --> 00:16:41,750 upang ito ay mas malinaw bilang isang maliit na sa kapag ang operasyon ay nangyayari. 380 00:16:41,750 --> 00:16:46,670 >> Para sa mga pamilyar, mayroong isa pang pahayag kung saan maaari mong gawin ++ i. 381 00:16:46,670 --> 00:16:48,747 Ito ang mga pagtakbo katumbas sa kasong ito 382 00:16:48,747 --> 00:16:51,080 dahil walang ibang tao ay paligid na incrementation. 383 00:16:51,080 --> 00:16:54,435 Ngunit maaari kang makabuo ng mga mga kaso at mga linya ng code 384 00:16:54,435 --> 00:16:55,810 kung saan na gumagawa ng isang pagkakaiba. 385 00:16:55,810 --> 00:16:57,810 Kaya sa pangkalahatan, hindi namin ring makipag-usap tungkol sa isang ito. 386 00:16:57,810 --> 00:17:00,690 Dahil tapat, ito ay ginagawang iyong code sexier, at uri ng slicker, 387 00:17:00,690 --> 00:17:01,776 at mas kaunting character. 388 00:17:01,776 --> 00:17:04,859 Ngunit ang katotohanang ay ito ay isang pulutong mas mahirap, Sa tingin ko, kahit na para sa akin upang wrap ang aking isip 389 00:17:04,859 --> 00:17:07,319 sa paligid nito kung minsan, ang pagkakasunud-sunod ng mga pagpapatakbo. 390 00:17:07,319 --> 00:17:09,750 Kaya bilang isang bukod, kung ikaw talagang hindi gusto ito, 391 00:17:09,750 --> 00:17:14,650 kahit na ito ay uri ng maalindog naghahanap, maaari mo ring gawin i + = 1, 392 00:17:14,650 --> 00:17:18,880 kung saan ay ang hindi maganda bersyon ng parehong ideya para sa postfix incrementation. 393 00:17:18,880 --> 00:17:22,250 >> Sinasabi ko ito at mo Dapat gawing masaya ng ito, 394 00:17:22,250 --> 00:17:25,140 ngunit kakailanganin mong dumating upang makita ang code bilang isang bagay na maganda bago ang haba. 395 00:17:25,140 --> 00:17:27,160 >> [Tawa] 396 00:17:27,160 --> 00:17:28,410 >> David J. MALAN: Mag-right? 397 00:17:28,410 --> 00:17:29,360 Oo. 398 00:17:29,360 --> 00:17:30,480 Tanong sa gitna. 399 00:17:30,480 --> 00:17:32,146 >> Madla: Huwag kailangan mong sabihin int n? 400 00:17:32,146 --> 00:17:34,020 David J. MALAN: gawin mo Hindi kailangang sabihin int n. 401 00:17:34,020 --> 00:17:37,670 Kaya dahil pa sinabi namin int, Hindi mo kailangang sabihin itong muli. 402 00:17:37,670 --> 00:17:41,820 Ang catch ay na n May sa maging ang parehong uri ng data bilang i. 403 00:17:41,820 --> 00:17:43,310 Kaya na ang isang kaginhawahan lamang dito. 404 00:17:43,310 --> 00:17:44,058 Oo. 405 00:17:44,058 --> 00:17:47,806 >> Madla: Maaari kang pumunta sa ibabaw ng bracket-print ng character s i muli? 406 00:17:47,806 --> 00:17:48,930 David J. MALAN: Hinding. 407 00:17:48,930 --> 00:17:52,110 Kaya% c, isipin ang mula sa nakaraang panahon, ay isang placeholder lamang. 408 00:17:52,110 --> 00:17:53,930 Ito ay nangangahulugan na maglagay ng char dito. 409 00:17:53,930 --> 00:17:56,780 backslash n, siyempre, lamang paraan maglagay ng line break dito. 410 00:17:56,780 --> 00:17:59,540 Kaya na lamang ay umalis, ngayon, ito piraso ng bagong syntax. 411 00:17:59,540 --> 00:18:03,730 At ito ay literal na nagsasabi, Kunin ang string na tinatawag s at pumunta makakuha nito 412 00:18:03,730 --> 00:18:06,050 i'th ng character, kaya na magsalita. 413 00:18:06,050 --> 00:18:10,590 >> At panatilihing ako sinasabi i'th ng character dahil sa bawat pag-ulit ng loop na ito 414 00:18:10,590 --> 00:18:14,540 ito ay waring ay nagpi-print namin out, una s bracket 0, 415 00:18:14,540 --> 00:18:15,780 dahil maaaring sabihin ng isang programmer. 416 00:18:15,780 --> 00:18:18,680 Pagkatapos ay s bracket 1, pagkatapos s bracket 2, pagkatapos ay i-3, pagkatapos 4. 417 00:18:18,680 --> 00:18:21,610 Ngunit siyempre ito ay isang variable, kaya lang ipahayag ko ito sa i. 418 00:18:21,610 --> 00:18:23,900 >> Key, bagaman, ay upang mapagtanto, lalo na kung hindi mo hindi 419 00:18:23,900 --> 00:18:26,358 Na-acclimating sa mundong ito ng programming, na kung saan namin ang lahat ng 420 00:18:26,358 --> 00:18:28,950 mukhang upang mabilang mula sa zero, gotta simulan ang pagbibilang mula sa zero ngayon. 421 00:18:28,950 --> 00:18:35,130 Dahil ang mga string, unang character, ang z sa Zamyla ay para sa mas mahusay o mas masahol pa para sa 422 00:18:35,130 --> 00:18:40,490 pagpunta sa nakatira sa lokasyon numerong zero. 423 00:18:40,490 --> 00:18:48,210 >> Ang lahat ng mga karapatan, kaya hayaan mo akong dalhin amin bumalik dito upang Zamyla 424 00:18:48,210 --> 00:18:50,746 at makita kung ano talaga ang pagpunta sa ilalim ng hood. 425 00:18:50,746 --> 00:18:52,370 Kaya't ito paniwala na ang uri Casting. 426 00:18:52,370 --> 00:18:53,800 Maaaring mayroon kang aktwal na nag-play na may ito nagagawa, 427 00:18:53,800 --> 00:18:55,970 siguro para sa Hacker edisyon ng P-set ang isa. 428 00:18:55,970 --> 00:19:00,320 Ngunit uri Casting lamang ay tumutukoy sa kakayahan sa C at ilang iba pang mga wika 429 00:19:00,320 --> 00:19:03,170 upang i-convert sa isang uri ng data papunta sa iba. 430 00:19:03,170 --> 00:19:05,450 >> Ngayon kung paano maaari naming makita na ito medyo straightforwardly? 431 00:19:05,450 --> 00:19:08,530 Kaya ito, pagpapabalik, ay ang simula ng alpabeto Ingles. 432 00:19:08,530 --> 00:19:11,265 At ang konteksto, isipin ang, mula sa tulad ng isang linggo nakaraan ay ASCII. 433 00:19:11,265 --> 00:19:13,790 Ang American Standard Code Impormasyon para sa Interchange. 434 00:19:13,790 --> 00:19:17,080 Aling lamang ang talagang mahabang paraan ng pagsabi ng pagmamapa mula sa mga titik 435 00:19:17,080 --> 00:19:19,370 sa mga numero, at mula sa mga numero sa mga titik. 436 00:19:19,370 --> 00:19:22,940 >> Kaya A sa pamamagitan ng M dito, tuldok tuldok tuldok, linya up sa, pagpapabalik, 437 00:19:22,940 --> 00:19:25,582 ang decimal numero 65 sa up. 438 00:19:25,582 --> 00:19:27,290 At hindi namin ginawa makipag-usap tungkol sa tahasan, 439 00:19:27,290 --> 00:19:29,850 ngunit tiyak mayroong katulad na mga numero para sa maliliit na mga titik. 440 00:19:29,850 --> 00:19:30,820 At sa katunayan, may mga. 441 00:19:30,820 --> 00:19:33,730 Ang mundo nagpasya ilang taon nakalipas na isang maliit, isang maliit na mga, 442 00:19:33,730 --> 00:19:35,020 ay magiging 97. 443 00:19:35,020 --> 00:19:38,010 At kaunti b ay pagpunta upang maging 98, at iba pa. 444 00:19:38,010 --> 00:19:40,200 >> At para sa anumang iba pang mga key sa iyong keyboard, mayroong 445 00:19:40,200 --> 00:19:42,190 pagpunta sa maging isang katulad na pattern ng bits. 446 00:19:42,190 --> 00:19:44,540 O equivalently, isang decimal na numero. 447 00:19:44,540 --> 00:19:47,110 Kaya ang tanong sa kamay, pagkatapos, ay kung paano namin 448 00:19:47,110 --> 00:19:49,400 aktwal na makita ito sa ilalim ng hood? 449 00:19:49,400 --> 00:19:51,539 Kaya pupuntahan ko pumunta sa paglipas muli sa gedit. 450 00:19:51,539 --> 00:19:53,330 At sa halip na uri ang isang ito mula sa simula, 451 00:19:53,330 --> 00:19:55,330 Pupunta ako sa magpatuloy at buksan up lamang ng isang bagay 452 00:19:55,330 --> 00:19:58,350 mula sa code na ngayong araw na tinatawag na ASCII zero. 453 00:19:58,350 --> 00:20:01,210 >> At ASCII zero ganito ang itsura. 454 00:20:01,210 --> 00:20:02,710 Kaya balutin ng ating mga isip sa paligid ito ipaalam. 455 00:20:02,710 --> 00:20:04,969 Kaya una, kinomentuhan ko ang code, na maganda. 456 00:20:04,969 --> 00:20:07,010 Dahil literal na nagsasabi sa akin kung ano ang aasahan, 457 00:20:07,010 --> 00:20:08,950 ipakita ang isang pagmamapa para sa uppercase na titik. 458 00:20:08,950 --> 00:20:13,690 Ngayon ko hindi pa alam kung ano ang aking ibig sabihin sa pamamagitan ng na, kaya ni infer ipaalam. 459 00:20:13,690 --> 00:20:16,870 >> Sa Ingles, siguro medyo techie Ingles, 460 00:20:16,870 --> 00:20:20,660 ano ang ginagawa line 18 lumitaw na ginagawa para sa amin? 461 00:20:20,660 --> 00:20:21,500 Line 18 lang. 462 00:20:21,500 --> 00:20:22,430 Ano ang pampalaglag ito? 463 00:20:22,430 --> 00:20:25,192 Anong ito ng pagpunta sa kick-off dito? 464 00:20:25,192 --> 00:20:26,100 >> Madla: Ang isang loop. 465 00:20:26,100 --> 00:20:26,630 >> David J. MALAN: Ang isang loop. 466 00:20:26,630 --> 00:20:28,463 At kung gaano karaming beses ay na pagpunta upang umulit? 467 00:20:28,463 --> 00:20:31,562 468 00:20:31,562 --> 00:20:33,270 Madla: [INTERPOSING tinig] anim na beses. 469 00:20:33,270 --> 00:20:34,830 David J. MALAN: Hindi anim na beses. 470 00:20:34,830 --> 00:20:35,840 Madla: 26 ulit. 471 00:20:35,840 --> 00:20:36,560 David J. MALAN: 26 ulit. 472 00:20:36,560 --> 00:20:37,060 Oo, paumanhin. 473 00:20:37,060 --> 00:20:37,960 26 ulit. 474 00:20:37,960 --> 00:20:38,460 Bakit? 475 00:20:38,460 --> 00:20:41,590 Well, ito ay isang maliit na kakaiba, ngunit Sinimulan ko ang pagbibilang mula 65. 476 00:20:41,590 --> 00:20:43,300 Alin ang kakaiba, ngunit hindi mali. 477 00:20:43,300 --> 00:20:44,610 Ito ay hindi masama sa bawat halimbawa. 478 00:20:44,610 --> 00:20:46,980 At ako ginagawa na lamang dahil, para sa halimbawang ito, 479 00:20:46,980 --> 00:20:50,455 Uri ng ako anticipating na kabisera A ay 65. 480 00:20:50,455 --> 00:20:53,330 Ngayon hindi ito ang pinaka-eleganteng paraan upang gawin ito, sa uri ng matapang na code 481 00:20:53,330 --> 00:20:56,130 Esoteric mga halaga ng isa na hindi ay palaging inaasahan matandaan. 482 00:20:56,130 --> 00:21:00,155 >> Ngunit sa ngayon, mapansin na ako ginagawa ito sa pamamagitan ng hanggang 65 plus 26. 483 00:21:00,155 --> 00:21:03,030 Dahil tila hindi ko kahit na nais na gawin ang aritmetika sa aking ulo. 484 00:21:03,030 --> 00:21:04,440 Kaya Ipapaalam ko ang Compiler gawin ito. 485 00:21:04,440 --> 00:21:08,600 Ngunit pagkatapos ay sa bawat loop, ang bawat iteration ng loop, ako incrementing i. 486 00:21:08,600 --> 00:21:10,196 >> Kaya ngayon ito ang hitsura ng kaunti cryptic. 487 00:21:10,196 --> 00:21:13,320 Ngunit dapat naming magkaroon ang mga pangunahing gusali bloke kung saan upang maunawaan ito. 488 00:21:13,320 --> 00:21:15,510 % C ay isang placeholder para lamang sa isang char. 489 00:21:15,510 --> 00:21:19,010 % I ay isang placeholder para sa isang int. 490 00:21:19,010 --> 00:21:23,310 At ito ay lumiliko out na sa pamamagitan ng paggamit na ito bagong syntax, ito parenthetical, kaya 491 00:21:23,310 --> 00:21:26,100 magsalita, kaya ng isang uri ng data sa loob ng isang panaklong, 492 00:21:26,100 --> 00:21:32,270 Maaari ko bang pilitin ang Compiler upang tratuhin ayaw ko ay isang integer, ngunit bilang isang char. 493 00:21:32,270 --> 00:21:35,520 >> Sa gayong paraan ng pagpapakita sa akin ng character katumbas ng numerong iyon. 494 00:21:35,520 --> 00:21:37,986 Ngayon down na dito, ang code na ito ay halos magkapareho. 495 00:21:37,986 --> 00:21:39,860 Nais ko lamang upang gumawa ng tahasang sobrang ang katotohanan 496 00:21:39,860 --> 00:21:42,095 na ako na nagsisimula sa 97, na kung saan ay lowercase ng. 497 00:21:42,095 --> 00:21:44,080 Sa up sa pamamagitan ng 26 higit pang mga titik. 498 00:21:44,080 --> 00:21:46,970 At ako doing-- muli, abot i, kaya upang makipag-usap. 499 00:21:46,970 --> 00:21:49,160 O uri ng Casting i, kaya upang makipag-usap. 500 00:21:49,160 --> 00:21:51,420 >> Mula sa isang int sa isang char. 501 00:21:51,420 --> 00:21:55,760 Kaya ang resulta ay magiging, tapat, impormasyon namin alam. 502 00:21:55,760 --> 00:21:59,411 Pupunta ako sa gumawa ascii-0 hindi dot-- tuldok c. 503 00:21:59,411 --> 00:22:02,160 Abiso, malamang na ginawa na hindi sinasadya bilang ko lang ginawa nang hindi sinasadya. 504 00:22:02,160 --> 00:22:03,820 Gumawa ng ascii-0. 505 00:22:03,820 --> 00:22:06,090 Ngayon Pupunta ako sa gawin ./ascii-0. 506 00:22:06,090 --> 00:22:09,050 Magtatagal ako mag-zoom in, at sa kasamaang-palad ito ay pagpunta sa mag-scroll off ang screen. 507 00:22:09,050 --> 00:22:15,060 Ngunit nakita namin ang isang buong tsart kung saan isang mapa upang 97, b mga mapa upang 98, 508 00:22:15,060 --> 00:22:18,931 at kung mag-scroll pataas namin ang higit pang A, siyempre, mga mapa upang 65. 509 00:22:18,931 --> 00:22:21,180 Kaya ito ay lamang na sabihin na kung ano ang nai-pangangaral namin, 510 00:22:21,180 --> 00:22:25,310 mayroong ito equivalence, ay sa katunayan ang kaso sa katotohanan. 511 00:22:25,310 --> 00:22:28,000 Kaya isang mabilis na pagbabago ng ito. 512 00:22:28,000 --> 00:22:31,220 Hayaan akong magbukas ng mga ascii-1.c. 513 00:22:31,220 --> 00:22:38,070 At mapapansin ang ganitong matalino, uri ng, paglilinaw ng ito. 514 00:22:38,070 --> 00:22:41,770 Ito ay ascii-1.c, at mapapansin ang ganitong nakatutuwang bagay. 515 00:22:41,770 --> 00:22:45,120 >> At ito talaga ang nakakakuha ng puso ng kung ano ang mga computer ang ginagawa. 516 00:22:45,120 --> 00:22:48,150 Kahit na namin ang mga tao ng ginagawa hindi mabibilang sa mga tuntunin ng letters-- 517 00:22:48,150 --> 00:22:50,380 Hindi ko simulan ang pag-iisip, lahat ng karapatan ng isang pagkatapos b, 518 00:22:50,380 --> 00:22:52,590 at gamitin ang mga upang mabilang pisikal na mga bagay. 519 00:22:52,590 --> 00:22:58,680 Maaari mong tiyak na sabihin na gusto kong i- pagsisimula ng ilang mga variable na tinatawag na c-- 520 00:22:58,680 --> 00:23:03,220 ngunit maaari ko na tinatawag na ito anything-- kaya c ay nasimulan sa kabisera A. 521 00:23:03,220 --> 00:23:07,560 >> Dahil sa pagtatapos ng araw, ang computer hindi na mahalaga ang kung ano ang iyong pag-iimbak, 522 00:23:07,560 --> 00:23:10,170 pinahahalagahan lamang ito kung paano mo gusto ipakita ang impormasyon na iyon. 523 00:23:10,170 --> 00:23:13,560 Paano mo nais ang computer upang bigyang-kahulugan na pattern ng mga bit? 524 00:23:13,560 --> 00:23:16,320 Kaya ito ay hindi isang bagay ko Gusto inirerekumenda sa pangkalahatan ang paggawa. 525 00:23:16,320 --> 00:23:19,500 Ito ay talagang lamang ng isang halimbawa upang ihatid na maaari mong ganap 526 00:23:19,500 --> 00:23:22,049 simulan ang isang integer sa isang char. 527 00:23:22,049 --> 00:23:24,090 Dahil sa ilalim ng hood ng isang char, siyempre, 528 00:23:24,090 --> 00:23:26,170 ay isang numero lamang 0-255. 529 00:23:26,170 --> 00:23:28,540 >> Kaya maaari mong tiyak ilagay ito sa loob ng isang int. 530 00:23:28,540 --> 00:23:30,890 At kung ano ito rin nagpapakita ay na namin 531 00:23:30,890 --> 00:23:34,040 Maaari convert mula sa isa nagta-type sa isa pang, narito, 532 00:23:34,040 --> 00:23:36,780 sa huli nagpi-print ang parehong bagay. 533 00:23:36,780 --> 00:23:44,760 At sa katunayan, ito ay ko aayusin ang online-- ay sinadya upang sabihin na ito, muli, dito. 534 00:23:44,760 --> 00:23:48,610 Hayaan akong linisin ito up online, at idedetalye namin makita sa isang online na walkthrough kung kinakailangan, 535 00:23:48,610 --> 00:23:50,280 ano ay nilayon doon. 536 00:23:50,280 --> 00:23:50,960 >> OK. 537 00:23:50,960 --> 00:23:53,892 Kaya huling halimbawa kinasasangkutan ngayon isang at b at pagkatapos ay idedetalye namin 538 00:23:53,892 --> 00:23:54,850 tumagal ng mga bagay up ng isang bingaw. 539 00:23:54,850 --> 00:23:58,330 Kaya gamit ang isang at b at c sa ang paggamit ng malaking titik 540 00:23:58,330 --> 00:24:01,560 at ang equivalence hinggil doon, sabihin tingnan ang halimbawa na ito, dito. 541 00:24:01,560 --> 00:24:02,752 Ang isa pang halimbawa code. 542 00:24:02,752 --> 00:24:04,460 Susubukan naming buksan ang isang bagay na na ginawa, kaya kami 543 00:24:04,460 --> 00:24:06,440 Hindi mo na kailangang i-type ito lahat out mula sa simula. 544 00:24:06,440 --> 00:24:09,420 >> At mapansin sa pag-asa ginagamit namin ang maramihang header 545 00:24:09,420 --> 00:24:13,240 mga file, bukod sa kung saan ay ang aming bagong kaibigan, string.h. 546 00:24:13,240 --> 00:24:15,597 Ngayon ito ay mukhang, sa unang sulyap, medyo cryptic. 547 00:24:15,597 --> 00:24:18,180 Ngunit sabihin makita kung hindi namin maaaring dahilan sa pamamagitan ng kung anong nangyayari sa dito. 548 00:24:18,180 --> 00:24:21,150 Unang nakakuha ako ng string mula sa user, at inilagay ko na ang string sa isang variable 549 00:24:21,150 --> 00:24:22,286 tinatawag s. 550 00:24:22,286 --> 00:24:24,090 Kopyahin i-paste mula sa bago. 551 00:24:24,090 --> 00:24:27,250 Sa 22 linya, tila ako ginagawa kung ano mismo ang 552 00:24:27,250 --> 00:24:30,760 Ginawa ko ng ilang sandali ang nakalipas, ako iterating sa ibabaw ng mga character sa s. 553 00:24:30,760 --> 00:24:34,780 >> At ang mga bagong trick dito ay gumagamit ng haba string, ang menor-optimize 554 00:24:34,780 --> 00:24:37,930 ng pag-iimbak ang haba string sa n, sa halip na sa pagtawag strlen muli, 555 00:24:37,930 --> 00:24:38,850 at muli, at muli. 556 00:24:38,850 --> 00:24:41,120 At tulad ng pagsuri na i Mababa sa n. 557 00:24:41,120 --> 00:24:43,330 Ngayon dito, mga bagay na makakuha ng isang maliit na kawili-wili. 558 00:24:43,330 --> 00:24:45,980 Ngunit ito ay isang application lamang ng parehong mga bagong ideya. 559 00:24:45,980 --> 00:24:48,470 Ano ang ginagawa sa Ingles bracket s i kumatawan? 560 00:24:48,470 --> 00:24:51,772 561 00:24:51,772 --> 00:24:54,260 >> Madla: Binibilang ang bawat na character [INAUDIBLE]. 562 00:24:54,260 --> 00:24:55,926 >> David J. MALAN: Binibilang ang bawat character. 563 00:24:55,926 --> 00:24:58,680 At kahit na higit pa succinctly, bracket s i kumakatawan sa kung ano? 564 00:24:58,680 --> 00:25:00,950 Gagawin sabihin sa iyo. 565 00:25:00,950 --> 00:25:04,084 Hindi upang ilagay mo sa lugar dito. 566 00:25:04,084 --> 00:25:06,375 >> Madla: Well-- 567 00:25:06,375 --> 00:25:09,500 David J. MALAN: Kaya kung ang salitang is-- kung ang string ay Zamyla, na starts-- 568 00:25:09,500 --> 00:25:12,380 Madla: harapin --you sa ang mga character na separately-- 569 00:25:12,380 --> 00:25:13,690 David J. MALAN: Mahusay. 570 00:25:13,690 --> 00:25:14,190 Mismong. 571 00:25:14,190 --> 00:25:17,940 Pinapayagan ka ng pagtatanda square bracket upang ma-access ang bawat character na isa-isa, 572 00:25:17,940 --> 00:25:21,120 kaya mga bracket 0 ay magiging ang unang character sa string. 573 00:25:21,120 --> 00:25:24,110 mga bracket 1 ay magiging ang pangalawa, at iba pa. 574 00:25:24,110 --> 00:25:28,050 Kaya ang tanong ako nagtatanong, dito, sa kondisyon na ito ay kung ano? 575 00:25:28,050 --> 00:25:33,984 Ay ang i'th character ng mga mas mataas sa o katumbas ng lowercase ng? 576 00:25:33,984 --> 00:25:36,400 At kung ano ang ibig sabihin nito, narito, na may double ampersand? 577 00:25:36,400 --> 00:25:36,800 Madla (magkasama): At. 578 00:25:36,800 --> 00:25:37,210 David J. MALAN: At. 579 00:25:37,210 --> 00:25:38,418 Ito ay katumbas lang sa ito. 580 00:25:38,418 --> 00:25:42,310 At ay hindi isang keyword sa C, mayroon kang mag- paggamit, annoyingly, ampersand ampersand. 581 00:25:42,310 --> 00:25:47,520 At ito, kabaligtaran, ay humihingi ay ni i'th character na mas mababa sa o katumbas 582 00:25:47,520 --> 00:25:49,030 Maliit na titik sa z? 583 00:25:49,030 --> 00:25:52,440 At muli, narito ang kung saan pag-unawa sa pinagbabatayang 584 00:25:52,440 --> 00:25:54,550 pagpapatupad ng isang computer na saysay. 585 00:25:54,550 --> 00:25:57,330 Pansinin na, kahit na mayroon akong ang tuldok tuldok tuldok banda roon, 586 00:25:57,330 --> 00:26:04,410 mukhang sa pamamagitan ng z sa maliliit na titik ay lahat ng mga magkadikit na mga halaga ng hanggang 97 mula sa up. 587 00:26:04,410 --> 00:26:07,820 >> At pareho para sa uppercase na nagsisimula sa 65. 588 00:26:07,820 --> 00:26:10,410 Kaya ang takeaway, pagkatapos, ay na sa wikang Ingles, 589 00:26:10,410 --> 00:26:12,760 kung paano nais mong ilarawan kung ano ang linya 24 ginagawa? 590 00:26:12,760 --> 00:26:15,736 591 00:26:15,736 --> 00:26:16,728 Oo? 592 00:26:16,728 --> 00:26:21,575 >> Madla: Sa 24 ito ng pagsuri upang makita kung ang bawat character ay isang maliit na mga. 593 00:26:21,575 --> 00:26:24,700 David J. MALAN: Ito ay pag-check kung bawat character ay isang maliit na mga titik. 594 00:26:24,700 --> 00:26:28,590 Kaya kahit higit pa succinctly, ay ang i'th character ng lowercase s? 595 00:26:28,590 --> 00:26:30,690 Iyon lang kami pagpapahayag dito lohikal, 596 00:26:30,690 --> 00:26:33,750 isang maliit na cryptically, ngunit sa huli medyo straightforwardly. 597 00:26:33,750 --> 00:26:36,480 Ay ni i'th character na lowercase? 598 00:26:36,480 --> 00:26:40,130 >> Kung gayon, at narito ang kung saan bagay makakuha ng isang maliit na isip bending 599 00:26:40,130 --> 00:26:44,760 para sa isang sandali lamang, kung kaya, pumunta Magpatuloy at i-print ang isang character. 600 00:26:44,760 --> 00:26:47,360 Kaya ito ay isang placeholder lamang, ngunit kung ano ng character? 601 00:26:47,360 --> 00:26:53,710 Bakit ako paggawa s bracket i minus na ito expression dito? 602 00:26:53,710 --> 00:26:55,110 >> Well mapansin ang pattern dito. 603 00:26:55,110 --> 00:26:57,380 Ang aktwal na numbers ay hindi mahalaga kaya magkano. 604 00:26:57,380 --> 00:27:02,700 Ngunit mapansin na 97 ay gaano kalayo ang layo mula 65? 605 00:27:02,700 --> 00:27:03,560 >> Madla: 32. 606 00:27:03,560 --> 00:27:04,480 >> David J. MALAN: 32. 607 00:27:04,480 --> 00:27:06,890 Gaano kalayo ang layo ay 98 mula sa 66? 608 00:27:06,890 --> 00:27:07,740 >> Madla: 32. 609 00:27:07,740 --> 00:27:09,890 >> David J. MALAN: Little c mula sa malaking C? 610 00:27:09,890 --> 00:27:10,420 32. 611 00:27:10,420 --> 00:27:14,550 Kaya mayroong 32 hops mula sa isang titik sa isa pa. 612 00:27:14,550 --> 00:27:17,790 Kaya tapat ako, ng dati gawing simple ito upang iyon. 613 00:27:17,790 --> 00:27:20,400 Ngunit pagkatapos uri ng matapang na ako sa coding ito mababang antas ng pag-unawa 614 00:27:20,400 --> 00:27:21,740 na walang reader ay kailanman pagpunta upang maunawaan. 615 00:27:21,740 --> 00:27:25,080 Kaya pupuntahan ko ng tuntuning panlahat ito bilang, ako malaman ang mga maliliit na mga titik ay mas malaki. 616 00:27:25,080 --> 00:27:28,400 Alam ko ang mga malalaking titik ay mas maliit na mga halaga, ironically. 617 00:27:28,400 --> 00:27:33,216 >> Ngunit ito ay epektibo katumbas ng sinasabi ibawas 32 mula sa mga bracket i. 618 00:27:33,216 --> 00:27:35,430 Kaya sa konteksto ng mga mga titik, kung ang titik 619 00:27:35,430 --> 00:27:38,950 ang mangyayari sa maging isang, lowercase isang, at ibabawas ko 32, 620 00:27:38,950 --> 00:27:43,442 kung ano ang epekto mayroon ang iyon, mathematically, sa lowercase ng? 621 00:27:43,442 --> 00:27:44,400 Madla: Capitalizes-- 622 00:27:44,400 --> 00:27:45,691 David J. MALAN: Capitalizes ito. 623 00:27:45,691 --> 00:27:48,440 At sa katunayan, ito ang dahilan kung bakit ang aming programa ay tinatawag na ika-capitalize sa zero. 624 00:27:48,440 --> 00:27:51,590 Ang programang ito ay alinman sa capitalizes ng sulat, 625 00:27:51,590 --> 00:27:54,580 makalipas na tingnan kung ito ay sa katunayan isang lowercase na titik. 626 00:27:54,580 --> 00:27:59,810 Kung hindi man, sa 30 na linya, ano ang gagawin ko kung hindi ito isang maliit na mga titik na ako 627 00:27:59,810 --> 00:28:02,852 pagtingin sa sa isang partikular na iteration sa loop. 628 00:28:02,852 --> 00:28:03,890 I-print lamang ito. 629 00:28:03,890 --> 00:28:07,010 >> Kaya huwag baguhin bagay-bagay hindi iyon kahit na maliit na mga. 630 00:28:07,010 --> 00:28:10,790 Limitahan ang iyong sarili sa maliit na isang maliit na sa pamamagitan ng z. 631 00:28:10,790 --> 00:28:12,730 Ngayon ito ay medyo arcane. 632 00:28:12,730 --> 00:28:15,230 Ngunit sa pagtatapos ng araw, ito ay kung paano namin, isang beses sa isang oras, 633 00:28:15,230 --> 00:28:16,460 Nagkaroon upang ipatupad ang mga bagay. 634 00:28:16,460 --> 00:28:19,780 Kung sa halip ko bang buksan ika-capitalize isa, oh salamat sa diyos. 635 00:28:19,780 --> 00:28:22,320 Mayroong isang function na tinatawag na sa itaas na maaari 636 00:28:22,320 --> 00:28:25,410 gawin ang lahat ng ginawa namin lamang sa isang medyo mababa ang antas. 637 00:28:25,410 --> 00:28:28,752 >> Ngayon sa itaas ay kawili-wiling dahil ito ay ipinahayag sa isang file, 638 00:28:28,752 --> 00:28:31,210 at gusto mong malaman ito lamang sa pamamagitan ng pagsusuri sa papeles, 639 00:28:31,210 --> 00:28:35,730 o ini-Sinabi sa, sabihin nating, sa klase, kung saan umiiral na ito, sa isang file na tinatawag na ctype.h. 640 00:28:35,730 --> 00:28:37,630 Kaya ito ay isa pang bagong kaibigan ng atin. 641 00:28:37,630 --> 00:28:40,750 At sa itaas na gumagana nang eksakto ano nagmumungkahi ang pangalan nito. 642 00:28:40,750 --> 00:28:44,860 >> Maaari pumasa sa, bilang isang argument, sa pagitan ng mga panaklong, ang ilang mga character. 643 00:28:44,860 --> 00:28:48,390 Pupunta ako sa pumasa sa i'th ng character s ng paggamit ng aming magarbong bagong pagtatanda 644 00:28:48,390 --> 00:28:49,870 kinasasangkutan ng mga square bracket. 645 00:28:49,870 --> 00:28:53,391 At maglaan ng hula, ano ang return halaga ng sa itaas na tila pagpunta 646 00:28:53,391 --> 00:28:53,890 upang maging? 647 00:28:53,890 --> 00:28:56,460 648 00:28:56,460 --> 00:28:57,770 Ang kabisera titik. 649 00:28:57,770 --> 00:28:58,620 Ang kabisera titik. 650 00:28:58,620 --> 00:29:02,330 >> Kaya kung pumasa ko sa lowercase ng, sana ay, sa pamamagitan ng kahulugan ng sa itaas, 651 00:29:02,330 --> 00:29:05,600 ito ay pagpunta sa magbalik ng uppercase A. Kung hindi man, 652 00:29:05,600 --> 00:29:08,590 kung ito ay hindi isang maliit na mga titik sa ang unang lugar, i-print ko lang ito. 653 00:29:08,590 --> 00:29:10,800 At sa katunayan, mapapansin ang pangalawang kaibigan dito. 654 00:29:10,800 --> 00:29:13,840 Hindi lamang sa itaas na umiiral, ngunit ay mas mababa, na 655 00:29:13,840 --> 00:29:16,200 talaga sumasagot ng tanong na para sa akin. 656 00:29:16,200 --> 00:29:19,730 >> Ngayon kahit sino ay nagsulat ng mga bagay na ito, 10s ng taon na ang nakaraan, alam mo kung ano? 657 00:29:19,730 --> 00:29:23,840 Ipinatupad sa itaas at babaan ang paggamit ng code tulad nito. 658 00:29:23,840 --> 00:29:27,270 Ngunit muli, pare-pareho sa sa ideya na ito ng abstracting ang layo, 659 00:29:27,270 --> 00:29:29,190 uri ng, mas mababa ang antas Mga detalye ng pagpapatupad. 660 00:29:29,190 --> 00:29:32,600 At nakatayo sa mga balikat ng mga tao sino ang dumating bago sa amin, ang paggamit ng mga pag-andar 661 00:29:32,600 --> 00:29:36,300 tulad ng sa itaas at ay mas mababa, na wonderfully sapat ay mabuti 662 00:29:36,300 --> 00:29:40,190 na may pangalang upang sabihin kung ano ang ginagawa nila, ay isang kahanga-hangang Huwaran upang magpatibay. 663 00:29:40,190 --> 00:29:44,040 >> Ngayon, ito ay lumiliko out na kung Nabasa ko sa pahina ng tao para sa, sabihin nating, sa itaas, 664 00:29:44,040 --> 00:29:45,010 Matuto akong magkaroon ng iba. 665 00:29:45,010 --> 00:29:46,890 Kaya tao toUpper. 666 00:29:46,890 --> 00:29:48,050 Ito ay isang maliit na napakalaki. 667 00:29:48,050 --> 00:29:51,110 Ngunit paunawa, narito na ang pagbanggit ng ang header ng file na dapat kong gamitin. 668 00:29:51,110 --> 00:29:54,460 Bilang isang bukod, dahil ito ay nakaliligaw, ang pag-andar 669 00:29:54,460 --> 00:29:59,070 Ginagamit ng ints sa halip na karakter para sa mga kadahilanang ng error checking. 670 00:29:59,070 --> 00:30:01,260 Ngunit marahil namin dumating bumalik sa mga iyon sa hinaharap. 671 00:30:01,260 --> 00:30:05,910 >> Ngunit mapansin, narito, sa itaas na-convert ang titik c sa uppercase kung maaari. 672 00:30:05,910 --> 00:30:07,674 Kaya na medyo prangka. 673 00:30:07,674 --> 00:30:09,340 At maging higit pa ng kaunti tukoy na ngayon hayaan. 674 00:30:09,340 --> 00:30:12,750 Tingnan natin ang bahagi ng Hayaan ng tao sa ilalim ng pahina return halaga. 675 00:30:12,750 --> 00:30:15,420 Ang halaga ay ibinalik na ng ang na-convert titik. 676 00:30:15,420 --> 00:30:18,690 O c, kung ang conversion ay hindi posible, 677 00:30:18,690 --> 00:30:20,250 kung saan c ay ang orihinal na pag-input. 678 00:30:20,250 --> 00:30:24,140 Aling Alam ko mula dito, mula sa ang argumento sa itaas upang. 679 00:30:24,140 --> 00:30:25,780 >> Kaya kung ano ay ang takeaway ng ito? 680 00:30:25,780 --> 00:30:28,060 Ang halaga ay ibinalik na ng ang na-convert sulat, 681 00:30:28,060 --> 00:30:32,110 o c, ang orihinal na titik, kung ang conversion ay hindi posible. 682 00:30:32,110 --> 00:30:36,460 Ano pagpapabuti maaari kong samakatuwid gumawa sa disenyo ng aking code ng? 683 00:30:36,460 --> 00:30:37,146 Oo? 684 00:30:37,146 --> 00:30:38,810 >> Madla: Maaari mong alisin ang tao. 685 00:30:38,810 --> 00:30:40,810 David J. MALAN: Maaari ko alisin ang mga tao statement, 686 00:30:40,810 --> 00:30:42,510 at hindi lamang sa iba statement. 687 00:30:42,510 --> 00:30:44,150 >> Madla: Maaari mong alisin ang [INAUDIBLE]. 688 00:30:44,150 --> 00:30:46,310 >> David J. MALAN: Maaari ko alisin ang buong tinidor 689 00:30:46,310 --> 00:30:48,209 sa kalsada, ang kung tao nang sama-sama. 690 00:30:48,209 --> 00:30:50,250 Kaya nga, hayaan mo akong magbukas ang huling bersyon ng ito, 691 00:30:50,250 --> 00:30:55,540 ika-capitalize-2 at mapansin lamang kung paano, kung mo, sexy, ang code ay nakakakuha ngayon, 692 00:30:55,540 --> 00:31:00,040 sa na-bawasan ko mula sa ilang pitong o kaya mga linya sa apat lamang, 693 00:31:00,040 --> 00:31:03,850 ang pag-andar na aking sinadya sa pamamagitan lamang ng pagtawag sa itaas, 694 00:31:03,850 --> 00:31:09,410 pagpasa sa mga bracket i, at pag-print out, may mga placeholder% c, 695 00:31:09,410 --> 00:31:11,090 na partikular na character. 696 00:31:11,090 --> 00:31:14,560 >> Ngayon arguably, mayroong isang bug, o hindi bababa sa panganib ng isang bug, 697 00:31:14,560 --> 00:31:15,350 sa programang ito. 698 00:31:15,350 --> 00:31:18,200 Kaya lamang na bumalik sa isang mas maagang takeaway, 699 00:31:18,200 --> 00:31:21,820 ano ang dapat kong marahil ring gawin sa ang program na ito upang gawin itong mas matatag, 700 00:31:21,820 --> 00:31:24,974 nang sa gayon ay walang paraan na ito crash, kahit sa mga bihirang kaso? 701 00:31:24,974 --> 00:31:26,390 Madla: Tiyaking hindi null. 702 00:31:26,390 --> 00:31:28,056 David J. MALAN: Tiyaking hindi null. 703 00:31:28,056 --> 00:31:31,030 Kaya talaga ito, upang gumawa ito super pangngalang, ang dapat kong gawin ang isang bagay tulad, 704 00:31:31,030 --> 00:31:35,300 kung s ay hindi null, pagkatapos ay sige at isagawa 705 00:31:35,300 --> 00:31:38,470 mga linya ng code, na Maaari ko pagkatapos indent tulad ng iyon, 706 00:31:38,470 --> 00:31:39,870 at pagkatapos ay ilagay sa aking malapit Brace. 707 00:31:39,870 --> 00:31:41,550 Kaya mabuting tying-sama ng dalawang mga ideya. 708 00:31:41,550 --> 00:31:42,429 Oo? 709 00:31:42,429 --> 00:31:44,470 Madla: Maaari mo bang gamitin ang isang gawin habang loop, sa halip? 710 00:31:44,470 --> 00:31:47,270 David J. MALAN: ma- Gagawin ko isang do habang loop? 711 00:31:47,270 --> 00:31:50,020 Madla: gusto --you upang matiyak na iyong aktwal na [INAUDIBLE]. 712 00:31:50,020 --> 00:31:51,728 David J. MALAN: ma- gumamit ka ng do habang? 713 00:31:51,728 --> 00:31:52,450 Maikling sagot, hindi. 714 00:31:52,450 --> 00:31:54,700 Dahil ikaw ay tungkol sa ipakilala ang isa pang sulok kaso. 715 00:31:54,700 --> 00:31:56,660 Kung ang string ay zero ng haba. 716 00:31:56,660 --> 00:31:59,600 Kung halimbawa, ko lang pindutin ang Ipasok ang, nang hindi pag-type Zamyla. 717 00:31:59,600 --> 00:32:02,490 Pupunta ako sa ipasa ka rin ng isang aktwal na string, dahil kakailanganin huli naming makita, 718 00:32:02,490 --> 00:32:03,780 na may zero na mga character. 719 00:32:03,780 --> 00:32:05,630 Ito ay isang string pa rin, ito lamang ay sobrang maikli. 720 00:32:05,630 --> 00:32:07,960 Ngunit kung gumamit ka ng isang do habang, ka ng pagpunta sa blindly 721 00:32:07,960 --> 00:32:10,050 subukan upang gawin ang isang bagay na may igalang sa na string, 722 00:32:10,050 --> 00:32:12,537 at walang pupuntahan maging doon. 723 00:32:12,537 --> 00:32:18,607 >> Madla: Well, kung ginawa mo gawin [INAUDIBLE] habang s-- 724 00:32:18,607 --> 00:32:21,190 David J. MALAN: Oh nakikita ko, panatilihing pagkuha ng isang string mula sa user. 725 00:32:21,190 --> 00:32:23,525 Kaya maikling sagot, mo maaari, at panatilihin pestering 726 00:32:23,525 --> 00:32:26,150 ang mga ito upang bigyan ka ng isang string na sapat na maikli upang magkasya sa memory. 727 00:32:26,150 --> 00:32:26,700 Hinding. 728 00:32:26,700 --> 00:32:27,630 Ko lang ang pinili na huwag. 729 00:32:27,630 --> 00:32:30,505 Kung hindi nila akong bigyan ng string na ako gusto, ako ako sa pagtigil, ako ako pagbibigay up. 730 00:32:30,505 --> 00:32:33,260 Ngunit talagang, para sa na layunin, maaari mong ganap na gawin iyon. 731 00:32:33,260 --> 00:32:37,500 >> Kaya header na file sa library na Ikinalulungkot namin ngayon pamilyar sa mga ito, dito. 732 00:32:37,500 --> 00:32:41,550 Standard I / O, CS50.h, string.h, ctype.h, at mayroong, sa katunayan, ang iba. 733 00:32:41,550 --> 00:32:44,460 Ang ilan sa iyo Natuklasan ang matematika library sa math.h. 734 00:32:44,460 --> 00:32:48,200 Ngunit ipaalam sa akin ipakilala, ngayon, upang sa mapagkukunan na ito na staff CS50, Davin, 735 00:32:48,200 --> 00:32:50,630 at Rob, at Gabe partikular na na inilagay nang magkasama. 736 00:32:50,630 --> 00:32:52,630 Iyon ay malapit na link sa website ang kurso na iyon. 737 00:32:52,630 --> 00:32:54,870 Ito ay tinatawag na CS50 sanggunian. 738 00:32:54,870 --> 00:32:58,230 >> Aling lamang upang mabigyan ka ng isang mabilis panlasa ng ito, ay gumagana tulad ng sumusunod. 739 00:32:58,230 --> 00:33:00,740 Hayaan akong pumunta sa reference.cs50.net. 740 00:33:00,740 --> 00:33:02,990 Makikita mo sa kaliwang kamay gilid ng napakatinding listahan 741 00:33:02,990 --> 00:33:04,595 ng mga function na ay may c. 742 00:33:04,595 --> 00:33:07,790 Ngunit kung pinapahalagahan ko, para sa mga sandali, tungkol sa isang bagay tulad ng strlen, 743 00:33:07,790 --> 00:33:08,746 Maaari ko ba itong i-type doon. 744 00:33:08,746 --> 00:33:10,870 Pini-filter ito pababa sa listahan upang lamang kung ano ang aking nagmamalasakit sa. 745 00:33:10,870 --> 00:33:11,940 Pupunta ako sa i-click ito. 746 00:33:11,940 --> 00:33:14,740 At ngayon sa kaliwa, makikita mo kung ano ang inaasahan naming 747 00:33:14,740 --> 00:33:18,290 ay isang mas prangka, pantao friendly na pagpapaliwanag kung paano 748 00:33:18,290 --> 00:33:19,170 Gumagana ito function. 749 00:33:19,170 --> 00:33:20,600 >> Ibinabalik ang haba ng isang string. 750 00:33:20,600 --> 00:33:24,060 Narito ang isang buod, narito kung paano mo gamitin ito sa mga tuntunin ng header ng file, 751 00:33:24,060 --> 00:33:27,430 at sa mga tuntunin ng kung ano ang function kamukha sa mga tuntunin ng mga argumento nito. 752 00:33:27,430 --> 00:33:30,250 At pagkatapos dito, babalik ang haba ng isang string. 753 00:33:30,250 --> 00:33:34,280 Ngunit para sa mga ng sa iyo ng karagdagang kumportable, Maaari mo talagang nag-click ang nalalaman comfy, 754 00:33:34,280 --> 00:33:37,070 at ang mga nilalaman ng page, ngayon, magbabago 755 00:33:37,070 --> 00:33:41,660 na maging mga default na halaga ng kung ano ang makakakuha ka sa pamamagitan ng paggamit sa pahina ng tao. 756 00:33:41,660 --> 00:33:44,100 >> Sa ibang salita, CS50 sanggunian ay isang Pagpapasimple 757 00:33:44,100 --> 00:33:46,220 ng tao mga pahina ng kawani, para sa mga mag-aaral. 758 00:33:46,220 --> 00:33:49,320 Partikular, ang mga mas kumportable at sa pagitan ng, sa gayon ay 759 00:33:49,320 --> 00:33:51,660 Hindi mo na kailangang subukang mag-wrap ang iyong isip sa paligid, tapat, 760 00:33:51,660 --> 00:33:55,030 ilang medyo cryptic syntax at dokumentasyon ang ilang sandali. 761 00:33:55,030 --> 00:33:57,650 >> Kaya panatilihin na sa isip sa mga araw na darating. 762 00:33:57,650 --> 00:33:59,560 Kaya dito, muli, ay isang Zamyla. 763 00:33:59,560 --> 00:34:03,255 Ngayon magtanong ng isang katanungan na kung Hayaan higit pa ng kaunti ng tao naa-access. 764 00:34:03,255 --> 00:34:05,380 Salamat sa Chang, na naging pag-print ng higit pang mga elepante 765 00:34:05,380 --> 00:34:07,090 walang-hintong para sa nakalipas na ilang araw. 766 00:34:07,090 --> 00:34:09,730 Mayroon kaming ng pagkakataon na magbigay ng hindi bababa sa isa sa mga ito ang layo. 767 00:34:09,730 --> 00:34:13,239 Kung maaari naming makakuha lamang ng isa volunteer na dumating sa up upang gumuhit sa screen. 768 00:34:13,239 --> 00:34:14,530 Paano ang tungkol dito? 769 00:34:14,530 --> 00:34:15,340 >> Halika sa up. 770 00:34:15,340 --> 00:34:16,720 Ano ang iyong pangalan? 771 00:34:16,720 --> 00:34:17,219 Alex: Alex. 772 00:34:17,219 --> 00:34:17,760 David J. MALAN: Alex. 773 00:34:17,760 --> 00:34:18,259 Lahat ng karapatan. 774 00:34:18,259 --> 00:34:19,388 Alex, dumating sa up. 775 00:34:19,388 --> 00:34:21,679 Humihingi kami tungkol sa upang makita ang iyong sulat-kamay sa screen dito. 776 00:34:21,679 --> 00:34:24,325 777 00:34:24,325 --> 00:34:25,570 Ang lahat ng mga karapatan, mabait sa matugunan mo. 778 00:34:25,570 --> 00:34:26,429 >> Alex: Nice mo na matugunan ang sa iyo. 779 00:34:26,429 --> 00:34:27,512 >> David J. MALAN: Lahat ng karapatan. 780 00:34:27,512 --> 00:34:28,969 Kaya, sobrang simple ehersisyo. 781 00:34:28,969 --> 00:34:31,440 Bar ay hindi na mataas upang makakuha ng isang elepante ngayon. 782 00:34:31,440 --> 00:34:33,439 Ikaw ay nagpe-play ang papel na ginagampanan ng getstring. 783 00:34:33,439 --> 00:34:35,980 At pupuntahan ko sabihin lamang sa iyo ang string na iyong nakuha. 784 00:34:35,980 --> 00:34:38,080 At ipagpalagay na ikaw, getstring, ay nai-tinatawag. 785 00:34:38,080 --> 00:34:42,480 At ang mga tao, tulad ng sa akin, mayroon nai-type sa Zamyla, Z-A-M-Y-L-A. 786 00:34:42,480 --> 00:34:45,650 Pumunta lamang magpatuloy at isulat Zamyla sa screen na waring maaaring nakuha mo ito 787 00:34:45,650 --> 00:34:47,250 at naka-imbak ito sa isang lugar sa memorya. 788 00:34:47,250 --> 00:34:52,370 789 00:34:52,370 --> 00:34:55,570 >> Ang pag-iwan kuwarto para sa kung ano ang ilang mga iba pang mga words-- na OK lang, panatilihin ang pagpunta. 790 00:34:55,570 --> 00:34:59,620 >> [Tawa] 791 00:34:59,620 --> 00:35:00,800 >> Kaya Zamyla, Mahusay. 792 00:35:00,800 --> 00:35:04,880 Kaya ngayon ipagpalagay na ikaw, getstring, ay tinatawag na muli. 793 00:35:04,880 --> 00:35:09,350 At dahil dito, ibigay ko sa inyo, sa keyboard, may isa pang pangalan, Belinda. 794 00:35:09,350 --> 00:35:17,560 795 00:35:17,560 --> 00:35:18,060 Lahat ng karapatan. 796 00:35:18,060 --> 00:35:22,380 At ngayon sa susunod na getstring ay na tinatawag, nagta-type ako sa isang bagay tulad ng Gabe, 797 00:35:22,380 --> 00:35:27,560 G-A-B-E. Talaga ka pagkuha sa gitna random access memory. 798 00:35:27,560 --> 00:35:29,631 Alin ang pagguhit ng lahat ng bagay ganap na random. 799 00:35:29,631 --> 00:35:30,130 OK. 800 00:35:30,130 --> 00:35:31,104 >> [Tawa] 801 00:35:31,104 --> 00:35:32,520 Alex: Paumanhin aking sulat-kamay ay masama. 802 00:35:32,520 --> 00:35:33,770 David J. MALAN: Hindi, iyon ang OK. 803 00:35:33,770 --> 00:35:40,480 At kung paano tungkol sa Rob, R-O-B. OK. 804 00:35:40,480 --> 00:35:41,020 Mahusay. 805 00:35:41,020 --> 00:35:43,853 Kaya ako ay hindi inaasahan mong nais uri ng mga bagay-ipon out sa ganitong paraan. 806 00:35:43,853 --> 00:35:45,020 Ngunit maaari kaming magsagawa ng trabaho na ito. 807 00:35:45,020 --> 00:35:48,810 Kaya kung paano pumunta ka tungkol sa laying ang mga karakter sa memory? 808 00:35:48,810 --> 00:35:51,310 Sa ibang salita, kung sa tingin namin ng ito hugis-parihaba itim na screen 809 00:35:51,310 --> 00:35:53,550 bilang na kumakatawan sa isang RAM, o memory computer. 810 00:35:53,550 --> 00:35:55,850 >> At isipin na RAM ay isa lamang ang maramihang mga bytes, 811 00:35:55,850 --> 00:35:57,480 at bytes ay ang maramihang mga bits. 812 00:35:57,480 --> 00:35:59,350 At bits ay kahit papaano ipinatupad, sa pangkalahatan 813 00:35:59,350 --> 00:36:01,119 may ilang mga paraan ng koryente sa hardware. 814 00:36:01,119 --> 00:36:03,160 Kaya na uri ng layering na usapan natin ang tungkol 815 00:36:03,160 --> 00:36:04,510 at maaari na ngayong tumagal para sa ipinagkaloob. 816 00:36:04,510 --> 00:36:07,020 Paano mo pumunta ka tungkol sa sa pagpapasya kung saan upang sumulat 817 00:36:07,020 --> 00:36:11,634 Rob kumpara sa Gabe kumpara Belinda kumpara Zamyla? 818 00:36:11,634 --> 00:36:14,020 >> Alex: ginawa ko lang ito sa umorder na sinabi mo sa akin. 819 00:36:14,020 --> 00:36:15,650 >> David J. MALAN: At iyon ay totoo. 820 00:36:15,650 --> 00:36:20,100 Ngunit kung ano ang nasasaklawan kung saan mo ilalagay Pangalan Belinda at pangalan ni Gabe? 821 00:36:20,100 --> 00:36:20,764 >> Alex: Wala? 822 00:36:20,764 --> 00:36:22,930 David J. MALAN: [LAUGHS] Kaya na gumagana, na multa. 823 00:36:22,930 --> 00:36:25,290 Kaya mga computer ay maliit higit pa kaysa sa maayos na. 824 00:36:25,290 --> 00:36:29,000 At kaya kapag implement-- namin manatili doon para sa isang moment-- lamang kapag kami talaga 825 00:36:29,000 --> 00:36:31,470 ipatupad ang isang bagay tulad ng getstring sa isang computer, 826 00:36:31,470 --> 00:36:34,480 Zamyla maaaring inilatag nang halos tulad ng ginawa mo sa screen, doon. 827 00:36:34,480 --> 00:36:36,660 >> At kung ano ang key upang mapansin dito, kung ano ang ginawa Alex, 828 00:36:36,660 --> 00:36:40,260 ay mayroong uri ng isang demarcation kasama ng bawat isa sa mga salitang ito, i-right? 829 00:36:40,260 --> 00:36:46,580 Hindi mo isulat Z-A-M-Y-L-A-B-E-L-I-N-D-A-G-A-B-- 830 00:36:46,580 --> 00:36:49,740 sa ibang salita, mayroong ilang mga uri ng demarcation na mukhang, 831 00:36:49,740 --> 00:36:52,370 uri ng, random na pagpupuwang sa pagitan ng mga iba't-ibang mga salita. 832 00:36:52,370 --> 00:36:54,120 Ngunit iyon lamang ang mabuti, dahil kami mga kawani na tao ay maaari na ngayong 833 00:36:54,120 --> 00:36:56,470 ilarawan sa isip na ang mga ito ay apat na iba't ibang mga string. 834 00:36:56,470 --> 00:36:59,540 Ito ay hindi isang pagkakasunod-sunod lamang ng napakaraming mga character. 835 00:36:59,540 --> 00:37:04,190 Kaya isang computer, pagkatapos, samantala, Maaaring tumagal ng isang string tulad ng Zamyla, 836 00:37:04,190 --> 00:37:07,220 ilagay sa bawat isa sa mga titik sa loob ng isang byte ng memorya. 837 00:37:07,220 --> 00:37:10,400 Ngunit ang numerong iyon ay higit na mas malaki, siyempre, kaysa sa anim na character. 838 00:37:10,400 --> 00:37:11,690 >> Mayroong isang buong bungkos ng RAM. 839 00:37:11,690 --> 00:37:15,330 At kaya henceforth, ito grid ng mga kahon ay pagpunta 840 00:37:15,330 --> 00:37:17,560 upang kumatawan sa kung ano Alex lamang ginawa dito sa screen. 841 00:37:17,560 --> 00:37:20,937 At ngayon, Alex, kami makakapag-alok sa iyo ng isang asul o isang orange elephant mula sa Chang. 842 00:37:20,937 --> 00:37:22,270 Alex: ko makikita tumagal ng asul na elepante. 843 00:37:22,270 --> 00:37:23,120 David J. MALAN: Isang bughaw na elephant. 844 00:37:23,120 --> 00:37:25,580 Kaya isang malaking round ng applause, kung magagawa namin, para sa Alex dito. 845 00:37:25,580 --> 00:37:26,100 >> [APPLAUSE] 846 00:37:26,100 --> 00:37:26,766 >> Alex: Salamat sa iyo. 847 00:37:26,766 --> 00:37:28,820 David J. MALAN: Salamat sa iyo. 848 00:37:28,820 --> 00:37:36,230 Kaya ang takeaway ay na, kahit na ang pattern uri ng nagbago sa paglipas ng panahon, dito 849 00:37:36,230 --> 00:37:40,430 sa board, nagkaroon na ito demarcation kabilang sa mga iba't-ibang mga string 850 00:37:40,430 --> 00:37:42,610 Alex na nakuha ko para sa amin. 851 00:37:42,610 --> 00:37:45,230 Ngayon mga computer, tapat, maaaring gawin ang parehong bagay. 852 00:37:45,230 --> 00:37:48,210 Maaari nilang uri ng plop mga string kahit saan sa RAM. 853 00:37:48,210 --> 00:37:50,710 Hanggang dito, sa paglipas dito, down na dito, pababa dito. 854 00:37:50,710 --> 00:37:52,020 >> Maaari nilang gawin nang eksakto na. 855 00:37:52,020 --> 00:37:54,280 Ngunit, siyempre, na Marahil hindi ito ang pinakamahusay na pagpaplano. 856 00:37:54,280 --> 00:37:54,780 Mag-right? 857 00:37:54,780 --> 00:37:57,340 Kung iningatan ko na humihiling sa Alex sa makakuha ng mga pangalan, marahil siya nais 858 00:37:57,340 --> 00:38:01,370 maglagay ng higit pa pababa dito, siguro up dito, sa paglipas dito, sa paglipas dito, sa huli 859 00:38:01,370 --> 00:38:02,211 sa paglipas dito. 860 00:38:02,211 --> 00:38:05,460 Ngunit may kaunti pang pagpaplano, tiyak, maaari kaming mag-ipon ng mga bagay ang higit pa cleanly. 861 00:38:05,460 --> 00:38:07,350 At sa katunayan, iyon ang ginagawa ng isang computer. 862 00:38:07,350 --> 00:38:10,720 >> Ngunit ang catch ay na kung ang susunod na string na nakukuha ko 863 00:38:10,720 --> 00:38:14,050 pagkatapos Zamyla ay isang bagay tulad ng Belinda, 864 00:38:14,050 --> 00:38:17,929 ipanukala kung saan maaari naming isulat ang sulat b may paggalang sa ang grid na ito? 865 00:38:17,929 --> 00:38:18,720 Saan ninyo pumunta? 866 00:38:18,720 --> 00:38:21,480 Sa kanan ng isang, sa ibaba ang z, sa ibaba ng isang? 867 00:38:21,480 --> 00:38:23,204 Ano ang gusto maging iyong unang instincts? 868 00:38:23,204 --> 00:38:24,120 Madla: Nasa ibaba ang z. 869 00:38:24,120 --> 00:38:25,100 David J. MALAN: Kaya sa ibaba ang z. 870 00:38:25,100 --> 00:38:26,530 At iyon ang kaakit-akit prangka, tama? 871 00:38:26,530 --> 00:38:29,321 Ito ay uri ng kapong baka, ito ay kung ano ang ginagawa namin sa isang keyboard kapag pindutin ang Enter namin, 872 00:38:29,321 --> 00:38:31,770 o ng isang email kapag gumagawa ng Naka-bullet na listahan ng mga bagay. 873 00:38:31,770 --> 00:38:34,310 Ngunit ang katotohanang ay mga computer lamang na maging mas mahusay, 874 00:38:34,310 --> 00:38:37,170 at Cram ay tiyak na bilang magkano data sa RAM hangga't maaari, 875 00:38:37,170 --> 00:38:38,890 nang sa gayon ay hindi mo aaksaya ng anumang bytes. 876 00:38:38,890 --> 00:38:41,545 Kaya hindi mo na-aaksaya anumang real estate ng iyong screen. 877 00:38:41,545 --> 00:38:44,170 At ang problema, bagaman, ay ang kung literal naming ilagay ang titik 878 00:38:44,170 --> 00:38:49,940 b pagkatapos ng, kung paano kami makapupunta sa alam kung saan nagtatapos pangalan Zamyla ni 879 00:38:49,940 --> 00:38:51,840 at nagsisimula ang pangalan ng Belinda ni? 880 00:38:51,840 --> 00:38:55,270 Kaya mo tao lamang ipinanukalang, mahusay, pindutin ang Enter key, mahalagang. 881 00:38:55,270 --> 00:38:56,410 Ilagay ninyo pababa sa ibaba. 882 00:38:56,410 --> 00:38:59,750 O kahit na bilang Alex ginawa, simulan ang pagsusulat lamang sa susunod na pangalan sa ibaba ang isang nakaraan, 883 00:38:59,750 --> 00:39:01,583 at isa sa ibaba iyon, at pagkatapos ay sa ibaba ang isa na. 884 00:39:01,583 --> 00:39:02,510 Iyon ay isang visual na cue. 885 00:39:02,510 --> 00:39:05,960 >> Mga Computer magkaroon ng isa pang visual cue, ngunit ito ay isang kaunti pa succinct. 886 00:39:05,960 --> 00:39:07,840 Ito ay ang funky character. 887 00:39:07,840 --> 00:39:11,890 Backslash 0, na kung saan ay marahil reminiscent ng backslash n, 888 00:39:11,890 --> 00:39:12,640 at iba pa, ngayon. 889 00:39:12,640 --> 00:39:14,120 Ang mga espesyal na escape sequence. 890 00:39:14,120 --> 00:39:19,120 Backslash 0 ay ang paraan ng na kumakatawan sa walong zero bits sa isang hilera. 891 00:39:19,120 --> 00:39:22,000 0000 0000. 892 00:39:22,000 --> 00:39:26,130 >> Ang paraan kung paano ka ipahayag na hindi upang pindutin ang numerong zero sa iyong keyboard, 893 00:39:26,130 --> 00:39:28,140 dahil sa katotohanan na iyon ay isang ASCII char. 894 00:39:28,140 --> 00:39:30,990 Mukhang isang numero, ngunit ay talagang isang decimal na numero 895 00:39:30,990 --> 00:39:35,910 na kumakatawan sa pabilog glyph, sa paikot na typeface. 896 00:39:35,910 --> 00:39:38,410 Samantala, backslash zero ay nangangahulugan, literal 897 00:39:38,410 --> 00:39:40,700 ilagay walong zero bytes dito para sa akin. 898 00:39:40,700 --> 00:39:42,136 >> Kaya ito ay medyo arbitrary. 899 00:39:42,136 --> 00:39:44,260 Maaaring namin ang ginamit anumang pattern ng mga piraso, ngunit ang mundo 900 00:39:44,260 --> 00:39:46,610 Nagpasya ilang taon na ang nakakaraan, na kinakatawan ang 901 00:39:46,610 --> 00:39:49,710 ang dulo ng isang string sa memory, maglagay lamang ng buong bungkos ng mga zero. 902 00:39:49,710 --> 00:39:51,000 Dahil maaari naming makita na iyon. 903 00:39:51,000 --> 00:39:54,790 Ngayon ay nangangahulugan na walang mga titik ng alpabeto maaaring katawanin na may mga zero. 904 00:39:54,790 --> 00:39:58,480 >> Ngunit iyon lamang ang OK, na nakakita kami na ginagamit namin sa 65 hanggang sa 97 sa up. 905 00:39:58,480 --> 00:40:00,290 Hindi namin makuha kahit saan isara sa lahat ng mga zero. 906 00:40:00,290 --> 00:40:03,040 907 00:40:03,040 --> 00:40:06,540 Kaya Belinda sa memorya ng computer ay aktwal na pagpunta sa pumunta dito. 908 00:40:06,540 --> 00:40:09,764 Iginuhit ko na ito sa kulay dilaw lamang upang gumuhit ng aming pansin sa mga ito. 909 00:40:09,764 --> 00:40:11,680 At paunawa, masyadong, ito ay lubos na arbitrary. 910 00:40:11,680 --> 00:40:12,680 Iginuhit ko na ito bilang isang grid. 911 00:40:12,680 --> 00:40:14,460 Tulad ng, RAM ay isa lamang ng ilang mga pisikal na object. 912 00:40:14,460 --> 00:40:17,300 Ito ay hindi kinakailangang magkaroon mga hilera at mga hanay, bawat se. 913 00:40:17,300 --> 00:40:20,490 Ay Naging ito ang maramihang mga bytes ipinapatupad sa hardware kahit papaano. 914 00:40:20,490 --> 00:40:22,817 Ngunit kung matapos Belinda ako nai-type sa pangalan ni Gabe, 915 00:40:22,817 --> 00:40:25,650 siya ang nangyayari sa mga end up dito sa memorya, at kung nai-type ko sa pangalan ni Daven, 916 00:40:25,650 --> 00:40:27,316 halimbawa, siya ang nangyayari sa mga end up dito. 917 00:40:27,316 --> 00:40:29,310 At maaari ba akong patuloy na magsulat ng mas maraming mga pangalan. 918 00:40:29,310 --> 00:40:32,100 >> Sa kasamaang palad, kung sinusubukan kong mag- magsulat ng isang napaka-mahaba ang pangalan, 919 00:40:32,100 --> 00:40:33,730 Maaari ko kalaunan maubusan ng espasyo sa memory. 920 00:40:33,730 --> 00:40:37,810 Kung saan, getstring ay pagpunta upang bumalik null, tulad ng sinabi namin. 921 00:40:37,810 --> 00:40:41,720 Ngunit thankfully sa, bababa sa ang visual dito, hindi namin ginawa makakuha ng medyo malayo na. 922 00:40:41,720 --> 00:40:45,860 >> Kung ano ang magaling Ngayon ay na ito pangkalahatang ideya ng pagpapagamot ng mga bagay 923 00:40:45,860 --> 00:40:49,720 na nasa loob ng mga kahon ay kinatawan ng isang tampok ng C 924 00:40:49,720 --> 00:40:52,690 at ng maraming mga wika, kilala bilang isang array. 925 00:40:52,690 --> 00:40:55,490 Ang isang array ay isa pang uri ng data. 926 00:40:55,490 --> 00:40:57,380 Ito ay isang istraktura ng data, kung gagawin mo. 927 00:40:57,380 --> 00:41:01,160 Istraktura sa kamalayan ng ito talaga ito, uri ng, naghahanap tulad ng isang kahon, nang hindi bababa sa 928 00:41:01,160 --> 00:41:02,320 sa mata ang iyong isip ni. 929 00:41:02,320 --> 00:41:09,680 Ang isang array ay isang magkadikit Ang pagkasunod-sunod ng mga magkakahawig na mga uri ng data, 930 00:41:09,680 --> 00:41:11,330 pabalik upang i-back upang i-back sa likod. 931 00:41:11,330 --> 00:41:14,720 >> Kaya isang string, sa ibang mga salita, ay isang hanay ng mga karakter. 932 00:41:14,720 --> 00:41:16,120 Ang isang hanay ng mga character. 933 00:41:16,120 --> 00:41:19,070 Ngunit ito ay lumiliko out maaari kang magkaroon ng array ng bunches ng mga bagay. 934 00:41:19,070 --> 00:41:21,870 Sa katunayan, maaari naming ilagay kahit na mga numero sa isang array. 935 00:41:21,870 --> 00:41:23,920 Kaya ang form kung saan kami ay pagpunta sa simulan 936 00:41:23,920 --> 00:41:26,590 Ang pagdeklara ng data na ito istraktura na kilala bilang isang array 937 00:41:26,590 --> 00:41:28,250 Pupunta rin upang gumamit ng mga square bracket. 938 00:41:28,250 --> 00:41:31,500 Ngunit ang mga square bracket ay pumunta sa ay may iba't ibang kahulugan sa kontekstong ito. 939 00:41:31,500 --> 00:41:33,450 >> At makita ni ito tulad ng sumusunod ipaalam. 940 00:41:33,450 --> 00:41:36,780 Ipagpalagay na Kakabukas ko up ng isang bagong file dito. 941 00:41:36,780 --> 00:41:38,535 At i-save ko ito bilang ages.c. 942 00:41:38,535 --> 00:41:41,280 943 00:41:41,280 --> 00:41:43,470 At kukunin ko na i-save ito sa aking mga folder dito. 944 00:41:43,470 --> 00:41:46,130 At ngayon pupuntahan ko sige at magsimulang mag-type ng isang bagay 945 00:41:46,130 --> 00:41:53,940 tulad isama CS50.h, isama stdio.h, int pangunahing walang bisa. 946 00:41:53,940 --> 00:41:57,370 At pagkatapos ay sa loob ng dito, gusto ko sa unang magkaroon ng isang int tinatawag na edad. 947 00:41:57,370 --> 00:42:01,371 >> At pupuntahan ko gamitin iyon upang makakuha ng isang int mula sa user para sa kanyang edad. 948 00:42:01,371 --> 00:42:04,620 Ngunit ang program na ito ay sinadya upang magamit ng maraming tao, para sa anumang konteksto. 949 00:42:04,620 --> 00:42:05,490 Nakakuha ako ng isang linya ng mga tao. 950 00:42:05,490 --> 00:42:08,281 Ang lahat ng mga ito ay i-type sa kanilang edad para siguro sa ilan, hindi ko alam, 951 00:42:08,281 --> 00:42:10,530 kumpetisyon, o kaganapan na na-dating na sila para sa. 952 00:42:10,530 --> 00:42:13,030 Kaya sa susunod na tao, ako Kailangan ng isa pang variable. 953 00:42:13,030 --> 00:42:15,790 >> Dahil kung lang gagawin ko edad ay nakakakuha getInt, na 954 00:42:15,790 --> 00:42:18,500 pagpunta sa clobber, o-overwrite edad sa nakaraang tao. 955 00:42:18,500 --> 00:42:19,760 Nang sa gayon ay hindi mahusay. 956 00:42:19,760 --> 00:42:21,790 Kaya ang aking unang instinct ay maaaring maging, oh, lahat ng karapatan, 957 00:42:21,790 --> 00:42:26,260 kung gusto ko upang makakuha ng maraming mga tao tumawag ni ito age1 ages-- ipaalam, 958 00:42:26,260 --> 00:42:31,280 int age2 nakakakuha int, int age3 nakakakuha getInt. 959 00:42:31,280 --> 00:42:35,340 At ngayon pupuntahan ko gamitin ilang pseudocode code dito. 960 00:42:35,340 --> 00:42:37,679 >> Gawin ang isang bagay na may mga numero. 961 00:42:37,679 --> 00:42:40,470 Pababayaan namin na nakalabas para sa isa pang araw kung ano ginagawa namin doon, dahil kami lamang 962 00:42:40,470 --> 00:42:44,200 na mahalaga para sa ilang sandali tungkol sa age1, age2, age3. 963 00:42:44,200 --> 00:42:46,450 Sa kasamaang palad, sa sandaling ko ipunin ang programang ito 964 00:42:46,450 --> 00:42:51,140 at ilagay ito sa harap ng aktwal na mga gumagamit, ano ang fundamentally mahinang disenyo 965 00:42:51,140 --> 00:42:53,890 desisyon ay tila kong ginawa? 966 00:42:53,890 --> 00:42:54,624 Oo? 967 00:42:54,624 --> 00:42:55,499 Madla: [INAUDIBLE] 968 00:42:55,499 --> 00:42:58,071 969 00:42:58,071 --> 00:42:59,820 David J. MALAN: Oo, Hindi ko pa kahit na sinubukan 970 00:42:59,820 --> 00:43:02,028 upang malaman kung gaano karaming edad ko talagang nagmamalasakit tungkol sa? 971 00:43:02,028 --> 00:43:05,380 Kung mayroon akong mas kaunti sa tatlong mga tao dito, at samakatuwid ay mas kaunti sa tatlong edad, 972 00:43:05,380 --> 00:43:07,260 Pa rin ako blindly umaasang tatlo. 973 00:43:07,260 --> 00:43:08,720 Ipagbawal Diyos apat na taong magpapakita. 974 00:43:08,720 --> 00:43:10,990 Aking Mga programa lamang ay hindi sumusuporta sa kahit na ang mga ito. 975 00:43:10,990 --> 00:43:13,280 >> At kaya ito, mahaba kuwento maikli, ay hindi magandang ugali. 976 00:43:13,280 --> 00:43:13,780 Mag-right? 977 00:43:13,780 --> 00:43:16,530 Tunay ako ay kopyahin at i- pag-paste ang code at lamang ng pagsasaayos 978 00:43:16,530 --> 00:43:17,430 ang mga pangalan ng variable. 979 00:43:17,430 --> 00:43:22,410 At, ang aking diyos, kung nagkaproblema ka, hindi tatlong edad, ngunit 10, o 100, o kahit na 6500 980 00:43:22,410 --> 00:43:23,820 undergraduates, halimbawa. 981 00:43:23,820 --> 00:43:26,950 Na ito ay hindi pagpunta sa maging partikular na eleganteng code, o napapanatiling. 982 00:43:26,950 --> 00:43:29,200 Ka ng pagpunta sa mayroon sa muling isulat ang programa sa bawat oras 983 00:43:29,200 --> 00:43:30,760 ang iyong numero ng mga pagbabago ang mga tao. 984 00:43:30,760 --> 00:43:35,090 >> Kaya thankfully, sa aming aktwal na ages.c file para sa araw, 985 00:43:35,090 --> 00:43:36,970 mayroon kaming higit pang mga matalino solusyon. 986 00:43:36,970 --> 00:43:39,800 Una, ako ako pagpunta sa humiram ng bumuo ng mga ginamit na namin nang ilang beses, 987 00:43:39,800 --> 00:43:43,744 gawin habang loop, upang makakuha ng mga ang bilang ng mga tao sa kuwarto. 988 00:43:43,744 --> 00:43:46,910 Lamang ako ng pagpunta sa pester user, muli at muli, ay nagbibigay sa hanggang sa siya sa akin 989 00:43:46,910 --> 00:43:49,260 isang halaga ng n na ang isang positibong integer. 990 00:43:49,260 --> 00:43:51,590 >> Kaya kong ginamit, huling oras makakuha ng positibong int. 991 00:43:51,590 --> 00:43:53,720 Pero wala kaming na para sa tunay na, kaya ako nagpunta maaga 992 00:43:53,720 --> 00:43:55,660 at muling ipinatupad ang ideyang ito. 993 00:43:55,660 --> 00:43:58,410 Ngayon down na dito, ito ay ang bagong nanlilinlang. 994 00:43:58,410 --> 00:44:02,260 Sa 27 linya, pati na ang mga komento sa nagmumungkahi 26 linya, 995 00:44:02,260 --> 00:44:05,180 Ipinahahayag isang array kung saan upang mag-imbak ng edad ng lahat. 996 00:44:05,180 --> 00:44:09,320 >> Kaya kung nais mong makakuha ng, hindi isang int, hindi dalawang ints, ngunit ang maramihang mga ints. 997 00:44:09,320 --> 00:44:13,800 Sa partikular n integer, ay maaari n maging tatlo, ay maaaring maging 100, ay maaaring maging 1,000. 998 00:44:13,800 --> 00:44:17,570 Ang syntax, medyo simple, ay upang sabihin nating, kung anong uri ng data ang gusto? 999 00:44:17,570 --> 00:44:19,620 Ano ang gusto mong tawagan na chunk ng memory? 1000 00:44:19,620 --> 00:44:23,530 Ano ang gusto mong tawagan ang grid na ganito ang hitsura pictorially? 1001 00:44:23,530 --> 00:44:27,700 >> At sa mga bracket dito, sinasabi mo kung gaano kalaki ang gusto mo na ang array na maging. 1002 00:44:27,700 --> 00:44:30,450 At kaya mas maaga, kapag sinabi ko ang syntax ay isang maliit na iba't ibang mga dito, 1003 00:44:30,450 --> 00:44:33,614 kami ay pa rin gamit ang mga square bracket, ngunit kapag ako pagdeklara ng isang array, 1004 00:44:33,614 --> 00:44:35,530 ang numero sa loob ng square bracket paraan 1005 00:44:35,530 --> 00:44:37,610 gaano kalaki ang gusto mo ang array na maging. 1006 00:44:37,610 --> 00:44:42,490 >> Sa pamamagitan ng kaibahan, kapag ay namin ang paggamit ng mga bracket i isang sandali ang nakalipas, s, isang string, 1007 00:44:42,490 --> 00:44:46,820 talaga ang isang hanay ng mga karakter, ngunit kapag hindi ka pagdeklara ng variable, 1008 00:44:46,820 --> 00:44:49,760 bilang sa keyword na ito dito, lamang ka nakakakuha ng 1009 00:44:49,760 --> 00:44:54,280 isang tiyak na index, ang isang tiyak na elemento mula sa array na. 1010 00:44:54,280 --> 00:44:57,090 Sa sandaling malaman namin na, ang ilang bahagi ng ito ay prangka. 1011 00:44:57,090 --> 00:45:00,765 Kung bagong unang pupuntahan ko upang i-print out ano ang edad ng tao bilang i. 1012 00:45:00,765 --> 00:45:03,890 Saan ko lang sabihin bilang tao isa, tao bilang dalawang, tao numero ng tatlong. 1013 00:45:03,890 --> 00:45:06,306 >> At tingin lang ako sa paggawa aritmetika, nang sa gayon ay tulad ng normal na tao, 1014 00:45:06,306 --> 00:45:09,030 umaasa kami mula sa isa para sa programa, at hindi mula sa zero. 1015 00:45:09,030 --> 00:45:13,620 Pagkatapos ay tumawag ako getint, ngunit mag-imbak ng ko ang kasagutan sa edad bracket i. 1016 00:45:13,620 --> 00:45:16,610 Alin ang i'th edad sa array. 1017 00:45:16,610 --> 00:45:21,640 Kaya kung saan ang huling beses na tayo ay pagpapagamot ng mga boxes bilang karakter para sa pangalan ni Zamyla, 1018 00:45:21,640 --> 00:45:22,490 at iba pa. 1019 00:45:22,490 --> 00:45:26,530 Ngayon, kumakatawan ang mga kahon 32 bits, o apat na bytes 1020 00:45:26,530 --> 00:45:29,510 kung saan maaari kaming mag-imbak isang int, isang int, isang int. 1021 00:45:29,510 --> 00:45:31,890 Ang lahat ng kung saan, muli, ay parehong uri ng data. 1022 00:45:31,890 --> 00:45:33,890 >> Ngayon gagawin ko ng isang bagay Silly, tulad ng pagpasa sa oras, lamang 1023 00:45:33,890 --> 00:45:35,510 upang bigyang-katwiran pagsusulat ng programang ito. 1024 00:45:35,510 --> 00:45:40,050 At pagkatapos ay down na dito, ako muli umulit sa ibabaw ng array na sinasabi sa isang taon mula ngayon, 1025 00:45:40,050 --> 00:45:43,090 tao bilang isang kalooban maging isang bagay na taong gulang. 1026 00:45:43,090 --> 00:45:45,010 At upang malaman na math-- ibig kong sabihin, ito 1027 00:45:45,010 --> 00:45:49,260 ay hindi napaka-kumplikado arithmetic-- Idagdag ko lang ang isa sa kanilang mga edad. 1028 00:45:49,260 --> 00:45:51,240 Lamang upang ipakita, muli, na ito. 1029 00:45:51,240 --> 00:45:57,910 >> Bilang lang ang maaari kong index sa isang string, s, kaya maaari kong index sa isang array ng edad, 1030 00:45:57,910 --> 00:45:59,950 tulad na doon. 1031 00:45:59,950 --> 00:46:03,340 Kaya kung saan ay pagpunta ito upang nagtatagal sa amin? 1032 00:46:03,340 --> 00:46:07,070 Kaya gagamitin namin makita, sa huli, isang ilang mga bagay sa araw na darating. 1033 00:46:07,070 --> 00:46:09,510 Ang isa, ang lahat ng oras na ito, kapag pagsusulat ng iyong sariling mga programa, 1034 00:46:09,510 --> 00:46:11,239 tulad ng Mario, sakim, kredito. 1035 00:46:11,239 --> 00:46:13,780 Hindi ka na mag-type ang pangalan ng ang programa at pagpindot ng Enter. 1036 00:46:13,780 --> 00:46:15,610 At pagkatapos ay nakakakuha ng pag-input ng user. 1037 00:46:15,610 --> 00:46:18,137 >> Sa getString, getInt, getLongLong, o mga katulad. 1038 00:46:18,137 --> 00:46:20,720 Ngunit ito ay lumiliko out na sinusuportahan ng C isang bagay na tinatawag na command line 1039 00:46:20,720 --> 00:46:25,740 mga argument, na kung saan ay pagpunta sa ipaalam sa amin talagang makakuha sa mga salita na nagta-type ka, 1040 00:46:25,740 --> 00:46:28,570 sa mapunta ang mga kumikislap prompt, pagkatapos ng pangalan ng iyong program. 1041 00:46:28,570 --> 00:46:31,430 >> Kaya sa mga araw na dumating, mo Maaaring i-type ang isang bagay tulad ng Caesar, 1042 00:46:31,430 --> 00:46:34,950 o ./caesar bilang 13, pagkatapos. 1043 00:46:34,950 --> 00:46:36,070 Susubukan naming makita kung paano na gumagana. 1044 00:46:36,070 --> 00:46:37,550 Dahil sa katunayan, sa itakda ang problema ng dalawang, kami ay 1045 00:46:37,550 --> 00:46:39,383 pagpunta sa kitang ipakilala sa isang maliit na bagay 1046 00:46:39,383 --> 00:46:42,360 reminiscent ng Ralphie ni hamunin ang mas maaga ng kartograpya. 1047 00:46:42,360 --> 00:46:43,970 Ang sining ng scrambling impormasyon. 1048 00:46:43,970 --> 00:46:46,660 Ito, sa katunayan, ay napaka reminiscent ng kung ano ang ginawa Ralphie. 1049 00:46:46,660 --> 00:46:51,380 >> Ito ay isang halimbawa ng isang pag-encrypt na tinatawag na algorithm rot13, R-O-T 13. 1050 00:46:51,380 --> 00:46:54,910 Aling ay nangangahulugan lamang i-rotate ang mga titik sa alpabetong 13 mga lugar. 1051 00:46:54,910 --> 00:46:58,309 At kung gawin mo iyon, makikita mo na ngayon kung ano ang, marahil, ang isang pamilyar na parirala. 1052 00:46:58,309 --> 00:47:01,100 Subalit ang paraan ng aming ka ng pagpunta upang gamitin ang ito, sa huli, ay higit pa sa pangkalahatan. 1053 00:47:01,100 --> 00:47:04,390 >> Sa P itakda ang dalawa, sa standard edition, makikita mo ipatupad ang isang pares ng mga ciphers, 1054 00:47:04,390 --> 00:47:06,720 isa na tinatawag na Caesar, isa na tinatawag na Vigenere. 1055 00:47:06,720 --> 00:47:10,090 Pareho sa mga ito ay na paikot ciphers, sa anumang paraan na sa iyo 1056 00:47:10,090 --> 00:47:11,826 i-isang titik sa isang iba't ibang mga titik. 1057 00:47:11,826 --> 00:47:12,950 At Caesar ay napaka-simple. 1058 00:47:12,950 --> 00:47:16,220 Magdagdag ka ng isa, idagdag mo ang 13, o ilang mga numero ng hanggang sa 26. 1059 00:47:16,220 --> 00:47:19,570 Vigenere gumagana na sa isang bawat titik na batayan. 1060 00:47:19,570 --> 00:47:22,140 Kaya Vigenere, gaya ng makikita mo sa spec, ay mas ligtas. 1061 00:47:22,140 --> 00:47:24,973 >> Ngunit sa pagtatapos ng araw kung ano ikaw ay sa pagpapatupad at P-set ng dalawa, 1062 00:47:24,973 --> 00:47:29,050 ay ang susi na ginagamit mo ang parehong para sa encryption at decryption. 1063 00:47:29,050 --> 00:47:32,160 Nagre-refer na sa proseso ng pag-on plain na teksto, ang ilang mga orihinal na mensahe, 1064 00:47:32,160 --> 00:47:34,490 sa cypher teksto, na ay isang bagay na naka-encrypt. 1065 00:47:34,490 --> 00:47:36,220 At pagkatapos ay decrypting itong muli. 1066 00:47:36,220 --> 00:47:38,119 >> Sa Hacker edisyon, samantala, ikaw ay 1067 00:47:38,119 --> 00:47:40,660 tasked na may isang bagay na katulad sa espiritu, kung saan bibigyan ka namin ng 1068 00:47:40,660 --> 00:47:44,610 isang file, mula sa isang karaniwang Linux, o Mac, o Unix computer na tinatawag etsy 1069 00:47:44,610 --> 00:47:47,800 password, na naglalaman ng isang buo bungkos ng mga username at password. 1070 00:47:47,800 --> 00:47:50,932 At yaong mga password ang lahat Na-encrypt ang, o na-hash, 1071 00:47:50,932 --> 00:47:53,140 kaya upang makipag-usap, mas maayos bilang makikita mo sa spec. 1072 00:47:53,140 --> 00:47:57,090 >> At ang Hacker edisyon ay hamunin ka sa pagsasagawa ng isang input na tulad nito, 1073 00:47:57,090 --> 00:47:58,800 at pag-crack ang password. 1074 00:47:58,800 --> 00:48:02,590 Iyon ay, ang pag-uunawa kung ano ang password ng tao na talagang ay. 1075 00:48:02,590 --> 00:48:05,570 Dahil, sa katunayan, mga password ay Sa pangkalahatan ay hindi naka-imbak sa malinaw, 1076 00:48:05,570 --> 00:48:08,260 at sa pangkalahatan ang mga password Dapat na mahirap na mahulaan. 1077 00:48:08,260 --> 00:48:09,610 Iyon ay hindi madalas na ang kaso. 1078 00:48:09,610 --> 00:48:12,110 >> At kung ano naisip ko na nais naming gawin ay pagtibayin sa loob ng ilang minuto 1079 00:48:12,110 --> 00:48:15,160 sulyap sa isang partikular na mahinang pagpili ng mga password 1080 00:48:15,160 --> 00:48:17,260 mula sa isang film na maaari mong isipin ang fondly. 1081 00:48:17,260 --> 00:48:18,915 At kung hindi, dapat mong umarkila. 1082 00:48:18,915 --> 00:48:20,070 >> [VIDEO pag-playback] 1083 00:48:20,070 --> 00:48:22,320 >> -Helmet, Fiend ka, ano kaya ang nangyari? 1084 00:48:22,320 --> 00:48:24,240 Ano ang iyong ginagawa sa aking anak na babae? 1085 00:48:24,240 --> 00:48:28,010 >> -Permit Sa akin upang ipakilala ang makikinang na batang plastic siruhano, 1086 00:48:28,010 --> 00:48:30,010 Doctor Phillip Schlotkin. 1087 00:48:30,010 --> 00:48:35,020 Ang pinakamalaking ilong trabaho tao sa buong sansinukob at Beverly Hills. 1088 00:48:35,020 --> 00:48:36,140 >> Ang inyong kamahalan. 1089 00:48:36,140 --> 00:48:36,820 >> -Nose Trabaho? 1090 00:48:36,820 --> 00:48:37,700 Hindi ko maintindihan. 1091 00:48:37,700 --> 00:48:39,070 Na siya ay nagkaroon ng trabaho ilong. 1092 00:48:39,070 --> 00:48:40,800 Ito ay ang kanyang matamis na 16 kasalukuyan. 1093 00:48:40,800 --> 00:48:42,590 >> -No, Hindi kung ano ang iyong palagay. 1094 00:48:42,590 --> 00:48:44,490 Ito ay magkano, magkano ang mas masahol pa. 1095 00:48:44,490 --> 00:48:48,160 Kung hindi mo akong bigyan ang kumbinasyon sa mga naka shield, 1096 00:48:48,160 --> 00:48:52,748 Schlotkin doktor ay magbibigay sa iyong anak na babae i-back ang kanyang lumang ilong. 1097 00:48:52,748 --> 00:48:53,748 - [GASPS] Nooooooooooooo. 1098 00:48:53,748 --> 00:48:57,684 1099 00:48:57,684 --> 00:48:59,652 Saan makakakuha ka na? 1100 00:48:59,652 --> 00:49:00,640 >> -All Karapatan. 1101 00:49:00,640 --> 00:49:02,506 Kukunin ko sabihin, makikita ko bang sabihin. 1102 00:49:02,506 --> 00:49:03,498 >> -No, Daddy, hindi. 1103 00:49:03,498 --> 00:49:04,490 Hindi mo dapat. 1104 00:49:04,490 --> 00:49:06,090 >> -You're Karapatan ang aking mahal. 1105 00:49:06,090 --> 00:49:07,390 Kukunin ko makaligtaan ang iyong bagong ilong. 1106 00:49:07,390 --> 00:49:10,990 Ngunit hindi ko sasabihin sa kanila ang kumbinasyon kahit na ano. 1107 00:49:10,990 --> 00:49:12,450 >> Mahusay -Very. 1108 00:49:12,450 --> 00:49:14,830 Doctor Schlotkin, gawin ang iyong pinakamasama. 1109 00:49:14,830 --> 00:49:15,744 >> -My Kasiyahan. 1110 00:49:15,744 --> 00:49:19,860 1111 00:49:19,860 --> 00:49:20,800 >> -No! 1112 00:49:20,800 --> 00:49:22,780 Maghintay, maghintay. 1113 00:49:22,780 --> 00:49:24,000 Kukunin ko sabihin. 1114 00:49:24,000 --> 00:49:25,830 Kukunin ko sabihin. 1115 00:49:25,830 --> 00:49:28,270 >> Alam -I ito ay gumagana. 1116 00:49:28,270 --> 00:49:31,390 Ang lahat ng mga karapatan, bigyan ito sa akin. 1117 00:49:31,390 --> 00:49:36,220 >> -Ang Kumbinasyon ay isa. 1118 00:49:36,220 --> 00:49:36,740 >> -One. 1119 00:49:36,740 --> 00:49:37,473 >> -One. 1120 00:49:37,473 --> 00:49:37,972 -Two. 1121 00:49:37,972 --> 00:49:38,471 -Two. 1122 00:49:38,471 --> 00:49:39,800 -Two. 1123 00:49:39,800 --> 00:49:40,300 -Three. 1124 00:49:40,300 --> 00:49:40,800 -Three. 1125 00:49:40,800 --> 00:49:41,800 -Three. 1126 00:49:41,800 --> 00:49:42,300 -Four. 1127 00:49:42,300 --> 00:49:42,800 -Four. 1128 00:49:42,800 --> 00:49:44,707 -Four. 1129 00:49:44,707 --> 00:49:45,521 -Five. 1130 00:49:45,521 --> 00:49:46,430 -Five. 1131 00:49:46,430 --> 00:49:47,930 -Five. 1132 00:49:47,930 --> 00:49:53,480 -So Ang kumbinasyon ay isa, dalawa, tatlo, apat, lima. 1133 00:49:53,480 --> 00:49:56,140 Iyan ang stupidest kumbinasyon Kailanman ko marinig sa aking buhay. 1134 00:49:56,140 --> 00:49:58,640 Iyan ang uri ng bagay isang idiot ay magkakaroon sa kanyang bagahe. 1135 00:49:58,640 --> 00:50:00,000 >> -Thank Mo, ang iyong kamahalan. 1136 00:50:00,000 --> 00:50:01,340 >> [Remote CLICKS] 1137 00:50:01,340 --> 00:50:02,450 >> -What Ay mong gawin? 1138 00:50:02,450 --> 00:50:03,800 >> Naka-off ang -I sa pader. 1139 00:50:03,800 --> 00:50:05,010 >> -No, Mo ang hindi, ikaw Naka-off ang buong pelikula. 1140 00:50:05,010 --> 00:50:06,220 >> -I Must've pinindot maling button. 1141 00:50:06,220 --> 00:50:07,064 >> -Well, Ilagay ito pabalik sa! 1142 00:50:07,064 --> 00:50:07,910 Ilagay ang pelikula bumalik sa! 1143 00:50:07,910 --> 00:50:08,300 >> -Yes, Ginoo! 1144 00:50:08,300 --> 00:50:08,799 Oo, ginoo. 1145 00:50:08,799 --> 00:50:09,660 -Let Ng pumunta, Arnold. 1146 00:50:09,660 --> 00:50:10,450 Halika, Gretchen. 1147 00:50:10,450 --> 00:50:12,533 Siyempre alam mo idedetalye ko Mayroon upang singilin ka para dito. 1148 00:50:12,533 --> 00:50:16,720 1149 00:50:16,720 --> 00:50:17,220 -Well? 1150 00:50:17,220 --> 00:50:17,802 Ibig ito gumagana? 1151 00:50:17,802 --> 00:50:18,510 Nasaan ang hari? 1152 00:50:18,510 --> 00:50:20,218 >> -It Nagtrabaho, ginoo, namin May mga kumbinasyon. 1153 00:50:20,218 --> 00:50:20,740 -Great. 1154 00:50:20,740 --> 00:50:24,810 Ngayon ay maaari kaming magsagawa ng bawat huling hininga ng sariwang hangin mula sa planeta Druidia. 1155 00:50:24,810 --> 00:50:25,890 Ano ang kumbinasyon? 1156 00:50:25,890 --> 00:50:28,155 >> -One, Dalawa, tatlo, apat, lima. 1157 00:50:28,155 --> 00:50:29,890 >> -One, Dalawa, tatlo, apat, lima? 1158 00:50:29,890 --> 00:50:30,390 -Yes. 1159 00:50:30,390 --> 00:50:31,110 -That Ang mga kamangha-manghang. 1160 00:50:31,110 --> 00:50:34,550 Na kailangan ko ang parehong kumbinasyon sa aking bagahe. 1161 00:50:34,550 --> 00:50:37,160 Maghanda Spaceball 1 para sa agarang pag-alis. 1162 00:50:37,160 --> 00:50:38,160 >> -Yes, Ginoo. 1163 00:50:38,160 --> 00:50:40,745 >> -And Baguhin ang kumbinasyon sa aking bagahe. 1164 00:50:40,745 --> 00:50:41,578 [Pinto pagsasara ng tunog] 1165 00:50:41,578 --> 00:50:42,064 [CLINK NG pintuan pagpindot ng helmet] 1166 00:50:42,064 --> 00:50:42,550 -Ahh. 1167 00:50:42,550 --> 00:50:43,383 [END VIDEO pag-playback] 1168 00:50:43,383 --> 00:50:46,700 David J. MALAN: Iyon lang para sa CS50, ipapakita namin nakikita mo sa susunod na linggo. 1169 00:50:46,700 --> 00:50:49,883 NARRATOR: At ngayon, Deep Mga pananaw, sa pamamagitan ng Daven Farnham. 1170 00:50:49,883 --> 00:50:53,160 1171 00:50:53,160 --> 00:50:55,860 >> DAVEN Farnham: Coding sa C ay kaya mas mahirap kaysa sa scratch. 1172 00:50:55,860 --> 00:50:57,320 printf, sa simula ay isang kasinungalingan. 1173 00:50:57,320 --> 00:50:59,930 1174 00:50:59,930 --> 00:51:01,430 >> [Tawa SOUNDBITE] 1175 00:51:01,430 --> 00:51:02,486