1 00:00:00,000 --> 00:00:03,395 >> [MUSIC nagpe-play] 2 00:00:03,395 --> 00:00:11,031 3 00:00:11,031 --> 00:00:13,280 David J. MALAN: Ito ay tulad ng isang freshman seminar ngayon. 4 00:00:13,280 --> 00:00:14,060 SIGE. 5 00:00:14,060 --> 00:00:15,024 Kaya na maulan out. 6 00:00:15,024 --> 00:00:17,690 Ito ay may kaugaliang mangyari sa Miyerkoles, ngunit ang lahat ng higit pang pagkakataon 7 00:00:17,690 --> 00:00:18,700 para sa mga tanong ngayon. 8 00:00:18,700 --> 00:00:22,210 Kaya natin simulan off aktwal na ipaalam may film sa sandali lamang. 9 00:00:22,210 --> 00:00:24,560 Ngunit kami ay magsisimula grandly gaya ng lagi. 10 00:00:24,560 --> 00:00:28,000 >> Ito ay CS50, at ito ay ang katapusan ng linggo 4. 11 00:00:28,000 --> 00:00:30,820 Kaya kung sakaling mo na pinapanood TV o isang pelikula kung saan ang 12 00:00:30,820 --> 00:00:34,690 mayroong ilang mga eksperto computer at sa pulis, o FBI, o ilang ahensiya 13 00:00:34,690 --> 00:00:36,930 ay sinusubukan upang mahuli ang ilang mga kalaban, well, na sa iyo 14 00:00:36,930 --> 00:00:40,850 malamang naririnig ang expression na "pagbutihin," kung saan na technician sa paanuman 15 00:00:40,850 --> 00:00:44,750 magically zoom in walang hanggan malayo upang makita ang mga kriminal 16 00:00:44,750 --> 00:00:48,640 pagkakakilanlan o ang license plate number sa kahit na ang kinang ng isang mirror 17 00:00:48,640 --> 00:00:50,390 o ang sinag ng mata ng isang tao. 18 00:00:50,390 --> 00:00:55,196 Kaya nga, sabihin kumuha ng isang pagtingin sa ilang tulad tanawin mula sa Hollywood. 19 00:00:55,196 --> 00:00:55,862 [Playback ng video] 20 00:00:55,862 --> 00:00:59,243 -OK, Ngayon sabihin makakuha ng isang mahusay na tumingin sa iyo. 21 00:00:59,243 --> 00:01:06,488 22 00:01:06,488 --> 00:01:07,415 >> -Hawakan mo. 23 00:01:07,415 --> 00:01:08,267 Patakbuhin na bumalik. 24 00:01:08,267 --> 00:01:09,121 >> -Sandali lang. 25 00:01:09,121 --> 00:01:11,300 Kumanan ka. 26 00:01:11,300 --> 00:01:12,209 >> -There, Freeze na. 27 00:01:12,209 --> 00:01:12,750 -buong Screen. 28 00:01:12,750 --> 00:01:13,558 -OK, Freeze na. 29 00:01:13,558 --> 00:01:14,820 -Tighten Hanggang sa na, ikaw? 30 00:01:14,820 --> 00:01:16,530 -Vector In sa na tao sa pamamagitan ng likod na gulong. 31 00:01:16,530 --> 00:01:19,400 -Zoom In dito mismo sa lugar na ito. 32 00:01:19,400 --> 00:01:22,846 -Sa Mga karapatan na kagamitan, ang imahe maaaring pinalaki at hasa. 33 00:01:22,846 --> 00:01:24,065 -Ano yan? 34 00:01:24,065 --> 00:01:25,600 -Ito Ay isang programa ng pagpapahusay. 35 00:01:25,600 --> 00:01:26,860 -Maaari Mong malinaw na up anumang? 36 00:01:26,860 --> 00:01:27,890 -Hindi Ko alam. 37 00:01:27,890 --> 00:01:29,050 Mapahusay natin ito. 38 00:01:29,050 --> 00:01:31,575 >> -Enhance Section A6. 39 00:01:31,575 --> 00:01:33,642 >> -I Pinahusay ang mga detalye, at- tingin ko ay may 40 00:01:33,642 --> 00:01:35,433 sapat na upang mapahusay, palabasin ito sa aking screen. 41 00:01:35,433 --> 00:01:37,080 -I Pinahusay ang pagmuni-muni sa kanyang mata. 42 00:01:37,080 --> 00:01:38,830 >> -Hayaan Ay tumakbo na ito sa pamamagitan enhancement video. 43 00:01:38,830 --> 00:01:40,100 -Edgar, Maaari mong pagbutihin ito? 44 00:01:40,100 --> 00:01:41,875 >> -Hang On. 45 00:01:41,875 --> 00:01:44,010 >> -I've Ay nagtatrabaho sa pagmuni-muni. 46 00:01:44,010 --> 00:01:44,995 >> Reflection -isang ni. 47 00:01:44,995 --> 00:01:45,495 -Reflection. 48 00:01:45,495 --> 00:01:47,399 -Mayroong Isang salamin ng mukha ng tao. 49 00:01:47,399 --> 00:01:48,065 -Ang Pagmuni-muni. 50 00:01:48,065 --> 00:01:48,981 -Mayroong Isang pagmuni-muni. 51 00:01:48,981 --> 00:01:50,600 -Zoom In sa mirror. 52 00:01:50,600 --> 00:01:52,712 -Maaari Mong makita ang isang salamin. 53 00:01:52,712 --> 00:01:54,350 -Maaari Mong mapahusay ang imahe mula dito? 54 00:01:54,350 --> 00:01:55,370 -Maaari Mong mapahusay kanya dito right? 55 00:01:55,370 --> 00:01:56,210 -Maaari Mong mapahusay ito? 56 00:01:56,210 --> 00:01:56,900 Maaari mong mapahusay ang mga ito? 57 00:01:56,900 --> 00:01:57,870 >> -Maaari Naming mapabuti ito? 58 00:01:57,870 --> 00:01:58,717 >> -Maaari Mong mapahusay ito? 59 00:01:58,717 --> 00:02:00,050 -Hold Sa isang segundo, kukunin ko mapapabuti. 60 00:02:00,050 --> 00:02:00,924 -Zoom In sa pinto. 61 00:02:00,924 --> 00:02:01,700 -Times 10. 62 00:02:01,700 --> 00:02:02,586 -Zoom. 63 00:02:02,586 --> 00:02:03,490 -Move In. 64 00:02:03,490 --> 00:02:03,990 Higit pang-. 65 00:02:03,990 --> 00:02:04,690 -Maghintay, Itigil. 66 00:02:04,690 --> 00:02:05,190 -Itigil. 67 00:02:05,190 --> 00:02:05,970 -Pause Ito. 68 00:02:05,970 --> 00:02:09,460 Pihitin amin 75 degrees sa paligid ng vertical, please. 69 00:02:09,460 --> 00:02:10,962 -Itigil. 70 00:02:10,962 --> 00:02:14,040 Bumalik sa bahagi tungkol sa mga pinto, muli. 71 00:02:14,040 --> 00:02:15,860 >> -Got Isang Enhancer ng imahe na maaaring bitmap? 72 00:02:15,860 --> 00:02:18,776 >> -Hey, Marahil maaari naming gamitin ang Pradeep Sen paraan upang makita sa bintana. 73 00:02:18,776 --> 00:02:20,372 -Ang Software ay estado ng art. 74 00:02:20,372 --> 00:02:21,845 >> -Ang Eigenvalue ay off. 75 00:02:21,845 --> 00:02:24,300 >> -Sa Mga karapatan kumbinasyon ng algorithm-- 76 00:02:24,300 --> 00:02:26,755 >> Kinuha aalis -Siya ni algorithm sa susunod na antas, 77 00:02:26,755 --> 00:02:28,730 at maaari ko bang gamitin ang mga ito sa mapahusay ito kunan ng larawan. 78 00:02:28,730 --> 00:02:31,286 >> -Lock On at palakihin ang z-axis. 79 00:02:31,286 --> 00:02:32,560 >> -Enhance. 80 00:02:32,560 --> 00:02:33,100 >> -Enhance. 81 00:02:33,100 --> 00:02:33,600 >> -Enhance. 82 00:02:33,600 --> 00:02:34,960 -Freeze At mapahusay. 83 00:02:34,960 --> 00:02:37,180 >> [END playback] 84 00:02:37,180 --> 00:02:41,160 >> David J. MALAN: Ang lahat ng mga karapatan, kaya lahat ng mga ito ay tunay na salita. 85 00:02:41,160 --> 00:02:44,450 Sila lamang ay may langkin magkasama sa isang paraan na hindi talaga matino. 86 00:02:44,450 --> 00:02:48,400 At, sa katunayan, CS50 at mga kurso tulad nito may gawi na sanhi ng kapahamakan ng isang pulutong ng TV at mga pelikula 87 00:02:48,400 --> 00:02:48,900 para sa iyo. 88 00:02:48,900 --> 00:02:52,330 Dahil kapag ang mga eksperto computer ay digma off tuntunin at sinasabi 89 00:02:52,330 --> 00:02:56,860 magarbong mga bagay tulad ng eigenvectors, at ang z-axis, 90 00:02:56,860 --> 00:02:59,572 at anumang bilang ng iba pang mga talagang mas teknikal na termino, 91 00:02:59,572 --> 00:03:02,030 talagang ito lamang stringing salitang-sama ang lahat ng masyadong madalas. 92 00:03:02,030 --> 00:03:05,020 Ay na ang isa sa aming mga pag-asa ay na, bilang isang epekto ng pagkuha courses 93 00:03:05,020 --> 00:03:08,245 tulad nito, ay mas maraming tao sa Ang mundo ay tunay na maaaring timbangin sa 94 00:03:08,245 --> 00:03:12,040 at lamang napaka bahagyang impluwensiya ang kalidad at katumpakan ng mga pelikula? 95 00:03:12,040 --> 00:03:14,350 >> Sa katunayan, sabihin kumuha ng isang pagtingin sa katotohanan. 96 00:03:14,350 --> 00:03:18,070 Kaya dito ay ang mga tauhan ng larawan ng Mary, isa sa aming mga Fellows ng pagtuturo. 97 00:03:18,070 --> 00:03:20,050 At ipagpalagay na siya ay pinaghihinalaang ng isang bagay. 98 00:03:20,050 --> 00:03:23,730 At gayon pa man, may isang kislap ng ilang piraso ng ebidensiya sa kanyang mata, 99 00:03:23,730 --> 00:03:25,480 o sa salamin ng kanyang salamin sa mata. 100 00:03:25,480 --> 00:03:30,760 Well, kung gagawin namin ang eksaktong bilang ng mga pelikula imungkahi, kung saan tayo mag-zoom at "mapahusay", 101 00:03:30,760 --> 00:03:34,080 ito ay kung gaano karaming impormasyon nasa mukha ni Maria 102 00:03:34,080 --> 00:03:36,795 kapag makuha mo ang isang imahe sa na orihinal na resolution. 103 00:03:36,795 --> 00:03:39,120 >> At, sa katunayan, maaari mong makita ang mga tuldok. 104 00:03:39,120 --> 00:03:41,900 At ang mga ito kung ano ang mga tinatawag na pixels, P-I-X-E-L-S, 105 00:03:41,900 --> 00:03:45,740 na kung saan ay lamang ng isang parisukat na karaniwang iyon ay isang tuldok na composes isang imahe. 106 00:03:45,740 --> 00:03:49,200 At bumalik sa araw, at talagang kahit ngayon sa ilang mga araw na LED TV 107 00:03:49,200 --> 00:03:51,950 o LCD TV, kung nakuha mo na isa sa iyong kuwarto o sa bahay, 108 00:03:51,950 --> 00:03:55,100 kung ikaw ay pupunta up super close na ito, at lalo na kung ito ay isang medyo mas lumang TV, 109 00:03:55,100 --> 00:03:58,760 maaari mong marahil kahit na makita ang mga tuldok at iyon ang gumawa ng sulat ng isang imahe. 110 00:03:58,760 --> 00:04:00,980 >> At walang mas impormasyon kaysa ito. 111 00:04:00,980 --> 00:04:05,400 Kami ay maaaring "mapahusay", sa kamalayan ng smoothing bagay sa loob at ang uri ng mga 112 00:04:05,400 --> 00:04:09,040 inferring uri ng, uri ng kung ano ang kulay ay dapat na sa tabi ni Maria sa mata 113 00:04:09,040 --> 00:04:10,910 upang ito ay hindi aktwal na kaya pixelated. 114 00:04:10,910 --> 00:04:14,510 Ngunit kung ako panatilihin ang pag-zoom in, may ay ang masamang tao sa kanyang mata. 115 00:04:14,510 --> 00:04:16,600 Tulad na ang lahat ng impormasyon na mayroon kami. 116 00:04:16,600 --> 00:04:18,920 Hindi ka maaaring lumikha impormasyon mula sa wala. 117 00:04:18,920 --> 00:04:20,790 May isang may hangganan lamang bilang ng bits doon. 118 00:04:20,790 --> 00:04:22,873 >> Kaya sa Problema Set 4, kung saan mayroon kang isang pagkakataon 119 00:04:22,873 --> 00:04:24,580 upang i-play na may ganitong uri ng daigdig. 120 00:04:24,580 --> 00:04:27,610 Sa Problema Set 4, makikita mong galugarin ang mundo ng mga graphics, at forensics, 121 00:04:27,610 --> 00:04:30,870 at ang tunay na sumulat ng code na recovers nawala mga imahe. 122 00:04:30,870 --> 00:04:33,510 Makikita isulat ang code na minamanipula umiiral na mga imahe 123 00:04:33,510 --> 00:04:36,120 at sa huli na maunawaan kung ano ang nangyayari sa ilalim ng hood. 124 00:04:36,120 --> 00:04:38,540 >> At, ito ay lumiliko out, ito ay aktwal na hindi lahat na kumplikado. 125 00:04:38,540 --> 00:04:41,320 Halimbawa, kung gusto naming kumakatawan sa isang smiley face kung saan 126 00:04:41,320 --> 00:04:44,160 may mga black pixels, o mga itim na tuldok, 127 00:04:44,160 --> 00:04:47,230 well, maaari naming lamang kumakatawan ang mga ito bilang tunay na isang bitmap. 128 00:04:47,230 --> 00:04:50,040 At kung sakaling mo ay narinig na bitmap expression, marahil 129 00:04:50,040 --> 00:04:52,330 Nagsisimula ito ngayon upang makagawa ng isang kaunti pa sa araw na kahulugan. 130 00:04:52,330 --> 00:04:53,580 >> Alam na namin kung ano ang isang bit ay. 131 00:04:53,580 --> 00:04:54,160 Ito ay 0 o 1. 132 00:04:54,160 --> 00:04:56,201 At ang isang mapa ay lamang ng isang bagay tulad ng isang piraso ng papel 133 00:04:56,201 --> 00:04:59,180 na nagbibigay sa iyo ng mga direksyon at may marahil ng isang grid ng x- at y-coordinate. 134 00:04:59,180 --> 00:05:00,540 Kaya dito ay isang bitmap. 135 00:05:00,540 --> 00:05:03,680 Ito ay isang mapa ng bits kung saan ang isang 1 ay tila 136 00:05:03,680 --> 00:05:07,857 pagpunta sa kumakatawan sa isang puting pixel, at isang 0 ay pagpunta sa kumakatawan sa isang itim na pixel. 137 00:05:07,857 --> 00:05:09,440 Ngunit kami ay tiyak na maaaring i-flip ito sa paligid. 138 00:05:09,440 --> 00:05:11,648 Hindi ito kaya tunay na bagay Hangga't hindi namin pare-pareho. 139 00:05:11,648 --> 00:05:15,570 At narito ang kung paano, sa binary-- loob ng memorya ng isang computer, o kahit na sa loob 140 00:05:15,570 --> 00:05:18,160 ng isang file sa iyong hard drive-- maaari mong itabi 141 00:05:18,160 --> 00:05:20,240 ang pinakasimpleng ng mga smiley face imahe. 142 00:05:20,240 --> 00:05:23,990 Ngunit kung ano tayo, siyempre, kulang sa imahe na ito? 143 00:05:23,990 --> 00:05:24,610 Kulay ng, tama? 144 00:05:24,610 --> 00:05:28,220 Ito ay isang malinaw na susunod na hakbang o enhancement upang mapabuti ito na may kulay. 145 00:05:28,220 --> 00:05:32,230 Kaya sa kasamaang-palad na may lamang ng isang solong bit, 0 o 1, maaari naming kumakatawan kulay. 146 00:05:32,230 --> 00:05:36,100 Na maaaring maging pula, o asul, o itim, o puti, o berde, o pink, 147 00:05:36,100 --> 00:05:37,420 o anumang mga pares ng mga kulay. 148 00:05:37,420 --> 00:05:40,860 Ngunit para sa kapakanan simple, bibigyan namin ng ipinapalagay lamang black and white. 149 00:05:40,860 --> 00:05:45,930 >> Kaya kung ano ang lohikal na kailangan namin kung kami nais na ipatupad ang mga kulay sa isang larawan? 150 00:05:45,930 --> 00:05:49,080 Ano ang gagawin namin gawin? 151 00:05:49,080 --> 00:05:51,900 Tulad ng kung ang mga takda sa kadahilanan dito ay na may isang bit maaari ka lamang 152 00:05:51,900 --> 00:05:55,977 kumakatawan sa dalawang estado, 0 o 1, puti o itim, ano ang gusto mong gawin? 153 00:05:55,977 --> 00:05:56,810 Madla: More data. 154 00:05:56,810 --> 00:05:58,813 David J. MALAN: More bits, oo mas maraming data, mas bits. 155 00:05:58,813 --> 00:06:01,440 At, sa katunayan, na eksakto kung paano imahe ng kulay ay kinakatawan. 156 00:06:01,440 --> 00:06:05,120 Sa halip na gumamit ng isang solong bit, isang 0 o 1 para sa bawat pixel, ang bawat tuldok, 157 00:06:05,120 --> 00:06:06,170 ikaw lamang gamitin ang maramihang. 158 00:06:06,170 --> 00:06:09,660 Siguro gamitin 8, marahil, mas karaniwang gamitin ang 24, at sa katunayan, sa Problema Set 159 00:06:09,660 --> 00:06:13,300 4, ikaw ay i-play sa isang file format na gumagamit ng 24 bits ay karaniwang. 160 00:06:13,300 --> 00:06:15,430 >> Ngunit karamihan ng ikaw ay malamang pamilyar sa mga JPEG. 161 00:06:15,430 --> 00:06:17,460 Kung nakatanggap ka na kinuha isang larawan sa iyong telepono, 162 00:06:17,460 --> 00:06:20,360 o na-upload o nakita ang isang bagay sa Facebook, o Flickr, ang anumang bilang 163 00:06:20,360 --> 00:06:24,882 ng mga website batay photo-, na sa iyo marahil makikita ng isang JPEG image bago. 164 00:06:24,882 --> 00:06:27,840 At ito ay lumiliko out, ito ay ang file format kami ay pagpunta upang gamitin sa pset 4, 165 00:06:27,840 --> 00:06:30,340 kung saan ikaw ay pagpunta sa kung mabawi imahe 166 00:06:30,340 --> 00:06:35,160 na sinasadyang ko na tinanggal mula sa isang masama na memory card sa camera, 167 00:06:35,160 --> 00:06:35,800 kung gagawin mo. 168 00:06:35,800 --> 00:06:38,490 >> At ito ay lumiliko out na kahit na JPEG ay medyo sophisticated-- 169 00:06:38,490 --> 00:06:40,906 ito ay higit na mas sopistikadong kaysa sa mga black and white tuldok 170 00:06:40,906 --> 00:06:44,480 Nakita namin ang isang sandali ang nakalipas, dahil mayroong talagang fancy algorithm na 171 00:06:44,480 --> 00:06:47,410 ay ginagamit upang i-compress ang isang JPEG, kaya na maaari kang magkaroon ng isang talagang maganda, 172 00:06:47,410 --> 00:06:49,832 kalidad ng larawan ngunit gamit medyo ilang bits. 173 00:06:49,832 --> 00:06:51,790 At kami ay bumalik sa compression bago ang haba. 174 00:06:51,790 --> 00:06:56,280 Ito ay lumiliko out na ang unang tatlong bytes sa isang JPEG image-- 175 00:06:56,280 --> 00:07:02,750 kahit na ano ang iyong kinuha ng isang litrato mga of-- ang mga halaga ng 255, 216, 255. 176 00:07:02,750 --> 00:07:05,990 >> Sa ibang salita, kung ikaw lang makita na pattern ng bits, 177 00:07:05,990 --> 00:07:09,180 kinakatawan dito bilang tatlong bytes, o 24 bits kabuuang, 178 00:07:09,180 --> 00:07:13,810 na may mataas na posibilidad na maaari mong ipahiwatig na ikaw ay naghahanap sa ito sa ganitong unang tatlong 179 00:07:13,810 --> 00:07:15,230 bytes ng isang JPEG. 180 00:07:15,230 --> 00:07:18,040 At ito ay kung ano ang kilala bilang ang lagda ng isang JPEG. 181 00:07:18,040 --> 00:07:20,540 Ang isang pulutong ng mga format ng file out doon ay may posibilidad upang simulan 182 00:07:20,540 --> 00:07:23,735 may ilang mga pattern ng 0s at 1s, kaya Windows na iyon, at Mac OS, at iOS, 183 00:07:23,735 --> 00:07:28,272 at Android malaman kung anong uri ng mga file ang mga ito ay, bilang karagdagan sa mga tinatawag na file 184 00:07:28,272 --> 00:07:29,730 extension na ng maraming mga file na may. 185 00:07:29,730 --> 00:07:32,590 Kung na .jpg, na ang isa pang palatandaan sa computer. 186 00:07:32,590 --> 00:07:35,310 >> Kaya sabihin ngayon tingnan ito isang maliit na mas technically. 187 00:07:35,310 --> 00:07:37,390 Alam namin ang mga decimal sistema ay 0 hanggang 9. 188 00:07:37,390 --> 00:07:38,740 Alam namin binary ay 0 at 1. 189 00:07:38,740 --> 00:07:41,842 At kung sa tingin mo bumalik sa pset 0, nagkaroon kami makipagbuno sa iyo ng, 190 00:07:41,842 --> 00:07:43,800 para sa isang maliit na piraso, isang bagay tinatawag na hexadecimal, 191 00:07:43,800 --> 00:07:47,320 kung saan mayroon kang 16 digit, sa halip ng 10 o sa halip ng 2. 192 00:07:47,320 --> 00:07:50,405 At ang mga digit, sa pamamagitan ng convention, mga 0 hanggang 9 at pagkatapos ng isang 193 00:07:50,405 --> 00:07:55,040 sa pamamagitan ng f, kung saan f kumakatawan sa kung ano number decimal, tulad ng isang mabilis na kaliwanagan ng isip 194 00:07:55,040 --> 00:07:56,640 check? 195 00:07:56,640 --> 00:07:57,610 Kaya, 15. 196 00:07:57,610 --> 00:08:01,390 At dapat na kumakatawan sa 10, sa pamamagitan lamang ng likas na katangian ng pag-order na ko na ibinigay. 197 00:08:01,390 --> 00:08:04,350 Ito lamang ay isang arbitrary convention, ngunit ito ay medyo standard. 198 00:08:04,350 --> 00:08:06,870 >> Kaya kung tinitingnan namin ang pattern na ito ng tatlong bytes-- sabihin 199 00:08:06,870 --> 00:08:09,620 simulan lamang na tingnan ang mga ito sa isang paraan na kaayon ng kung paano 200 00:08:09,620 --> 00:08:12,450 karaniwang computer na siyentipiko tingnan at isipin ang tungkol sa mga file. 201 00:08:12,450 --> 00:08:15,580 Maaari mong tiyak na isipin ang tungkol sa file sa 0s at 1s, at decimal, 202 00:08:15,580 --> 00:08:19,340 ngunit sa katotohanan, kami ay madalas na gamitin ang binary o higit pang mga karaniwang hexadecimal-- 203 00:08:19,340 --> 00:08:20,760 pabalik mula sa pset 0. 204 00:08:20,760 --> 00:08:25,857 Kaya hayaan mo akong imungkahi na 255, 216, at 255 ay lamang ang mga pattern ng 0s at 1s. 205 00:08:25,857 --> 00:08:28,440 At maaari mong suriin ito kung ikaw nais na gawin ang matematika mula Linggo 0. 206 00:08:28,440 --> 00:08:30,810 Subalit, sa ngayon, ipagpalagay na lamang na ito talaga ang tama. 207 00:08:30,810 --> 00:08:33,850 Lamang na isulat muli akong tatlong decimal numero ng tatlong binary halaga. 208 00:08:33,850 --> 00:08:36,100 Ngayon kung ano ang ako pagpunta sa gawin ay magdagdag lang ng ilang mga puting espasyo, 209 00:08:36,100 --> 00:08:37,266 para lamang sa kapakanan pagiging madaling mabasa ni. 210 00:08:37,266 --> 00:08:39,940 At pansinin, ako lamang ang pagpunta upang ilipat ang mga bagay-bagay bukod. 211 00:08:39,940 --> 00:08:43,090 Kaya bago, pagkatapos, bago, matapos. 212 00:08:43,090 --> 00:08:46,180 Wala na interesante ibang ako paggawa kaysa sa pagkalat lang ang mga bagay sa labas kaya 213 00:08:46,180 --> 00:08:50,380 na notice bawat hanay ng mga walong bits na ngayon ang dalawang mga hanay ng mga apat na piraso. 214 00:08:50,380 --> 00:08:54,920 Ito ay kapaki-pakinabang dahil hexadecimal ay partikular na fashionable na 215 00:08:54,920 --> 00:09:00,930 dahil ang bawat hexadecimal digit 0 hanggang f, o mas partikular na 0 hanggang 15, 216 00:09:00,930 --> 00:09:03,430 maaaring katawanin na may eksaktong apat na bits. 217 00:09:03,430 --> 00:09:07,960 Sa ibang salita, sa hexadecimal kung ikaw nais na kumakatawan sa isang 0, ito ay 0000 lamang, 218 00:09:07,960 --> 00:09:08,780 apat na mga zero. 219 00:09:08,780 --> 00:09:13,997 At kung gusto mong upang kumatawan 15, ito ay 1111, na kung saan ay apat na bits. 220 00:09:13,997 --> 00:09:16,080 At kung gagawin mo ang matematika, kung ito ay ang lugar na iyan, 221 00:09:16,080 --> 00:09:18,210 ito ay ang lugar 16s, na ang pagpunta sa bigyan you-- 222 00:09:18,210 --> 00:09:19,960 sa halip na pagpunta to-- paumanhin, sa binary, 223 00:09:19,960 --> 00:09:23,660 na ang pagpunta sa magbibigay sa iyo ng 15, ang lugar na iyan, twos lugar, nakadapa at tag walo lugar. 224 00:09:23,660 --> 00:09:26,821 Kaya hayaan mo akong imungkahi na iyon set ng apat na piraso sa kaliwa 225 00:09:26,821 --> 00:09:28,070 ay kung ano ang kami ay pagpunta sa tumawag f. 226 00:09:28,070 --> 00:09:30,110 Ito ang pinakamalaking number mo maaari kumakatawan sa apat na piraso. 227 00:09:30,110 --> 00:09:33,300 At kami na malaman mula sa hexadecimal, f ay ang pinakamalaking digit sa hexadecimal. 228 00:09:33,300 --> 00:09:36,020 Mayroon kami ng isa pang f doon, dalawang higit pa doon. 229 00:09:36,020 --> 00:09:38,980 At sa ngayon, lumabas lang sa pananampalataya aking ginawa ang mga math karapatan 230 00:09:38,980 --> 00:09:41,890 at na ang kaliwang kalahati ng mga bits, 1101, 231 00:09:41,890 --> 00:09:43,980 ay ang parehong bagay tulad ng d sa hexadecimal. 232 00:09:43,980 --> 00:09:46,490 At sa kanang kamay, 1000, ay 8 lamang. 233 00:09:46,490 --> 00:09:48,140 >> At iyon isa madaling makita, tama? 234 00:09:48,140 --> 00:09:51,670 Ang 8 represents-- ay tama sa ilalim na eights lugar. 235 00:09:51,670 --> 00:09:56,040 Kaya kami ay may isa sa haligi ng tag walo at wala sa nakadapa, twos o iyan. 236 00:09:56,040 --> 00:09:59,830 Kaya ngayon mas conventionally, mga kawani na tao ay may posibilidad na magsulat ng hexadecimal digit na tulad nito, 237 00:09:59,830 --> 00:10:03,000 lamang squish mo ang mga ito nang sama-sama, at pagkatapos mong prefix sa kanila na may 0x. 238 00:10:03,000 --> 00:10:05,920 Ito ay nangangahulugan na wala na iba sa isang visual na palatandaan sa isang human-- 239 00:10:05,920 --> 00:10:10,350 dito ay isang hexadecimal value-- dahil hindi ito maaaring sa kabilang banda ay halata. 240 00:10:10,350 --> 00:10:13,629 >> Alin ang sasabihin, sa huli, na ang mga pattern ng mga zero at mga, 241 00:10:13,629 --> 00:10:16,170 o mga pattern ng hexadecimal digits equivalently na kayo 242 00:10:16,170 --> 00:10:18,990 pagpunta upang simulan ang naghahanap para sa sa Problema Set 4 ay this-- 243 00:10:18,990 --> 00:10:22,120 at ang Problema Set 4 spec ay ituturo sa pamamagitan na ito sa mas maraming mga detail-- 244 00:10:22,120 --> 00:10:25,344 ngunit mapagtanto bilang uri ng arcane bilang ito ay maaaring tumingin sa unang tingin, 245 00:10:25,344 --> 00:10:27,010 ikaw ay pagpunta sa simulan ang nakakakita ito ng maraming. 246 00:10:27,010 --> 00:10:30,320 At sa katunayan, kahit na sa GDB, ang debugger ipinakilala namin sa Lunes 247 00:10:30,320 --> 00:10:35,440 at Dan nagpapakilala sa pset 3, ay pagpunta na madalas ipakita sa iyo hexadecimal halaga 248 00:10:35,440 --> 00:10:39,910 dahil lamang sila ay may posibilidad na maging mas maginoo kaysa decimal o binary 249 00:10:39,910 --> 00:10:41,157 sa mundo ng mga computer. 250 00:10:41,157 --> 00:10:42,490 Ngayon ay ilagay ito sa konteksto ipaalam. 251 00:10:42,490 --> 00:10:48,040 Marami sa maaari mong tandaan ito larawan dito, na nagmula sa kung ano? 252 00:10:48,040 --> 00:10:51,240 Vista, kaya kahit na mas maaga kaysa sa na, Windows XP ginawa ito pasinaya. 253 00:10:51,240 --> 00:10:52,620 Kaya ito ay isang magandang tanawin. 254 00:10:52,620 --> 00:10:55,940 At sa katunayan, kung sundutin mo sa paligid online-- Sa tingin ko ito ay isang artikulo ng Wikipedia, 255 00:10:55,940 --> 00:11:00,110 kung saan ang isang tao ay tunay amazingly lumabas natagpuan ang lokasyon na ito sa mundo-set up 256 00:11:00,110 --> 00:11:02,240 ang kanyang camera sa tiyak na karapatan sa place-- 257 00:11:02,240 --> 00:11:06,510 at mukhang like-- na ito ngayon ngunit ito ay eksakto ang parehong setting. 258 00:11:06,510 --> 00:11:10,060 Ang larawan na ito, bagaman, ay sa isang file format na tinatawag na bitmap, b-m-p. 259 00:11:10,060 --> 00:11:12,910 At kami ay pagpunta sa tumagal ng isang super mabilis na sulyap sa kung ano ang ibig sabihin nito. 260 00:11:12,910 --> 00:11:17,770 >> Ngunit bitmap ay lamang ng isang iba't ibang mga paraan ng na kumakatawan sa mga imahe pa rin gamit ang pixels 261 00:11:17,770 --> 00:11:19,580 sa 0s at 1s, sa huli. 262 00:11:19,580 --> 00:11:23,282 Ngunit sa mabilis na sulyap, ito ay may isang mas kawili-wiling signature 263 00:11:23,282 --> 00:11:24,490 sa simula ng file. 264 00:11:24,490 --> 00:11:26,670 Ito ay hindi lamang ng tatlong bytes, sa halip ay mayroong 265 00:11:26,670 --> 00:11:30,770 isang buong grupo ng mga pattern ng mga bytes na paunang-natukoy na kahulugan. 266 00:11:30,770 --> 00:11:34,490 Halimbawa, sa isang lugar sa unang ilang bytes ng isang bitmap image 267 00:11:34,490 --> 00:11:37,440 ay magiging ang laki ng imahe, ang lapad ng imahe, 268 00:11:37,440 --> 00:11:40,390 ang taas ng imahe, kaya kapaki-pakinabang na metadata, kung ikaw ay. 269 00:11:40,390 --> 00:11:43,940 Kapaki-pakinabang na impormasyon na Photoshop o anumang graphics programa na iyong ginagamit 270 00:11:43,940 --> 00:11:45,180 maaaring tunay na nagmamalasakit sa. 271 00:11:45,180 --> 00:11:47,170 >> Kaya more on na ito sa Problema Itakda 4, ngunit ito 272 00:11:47,170 --> 00:11:49,220 ay para lamang sa mga sinasabi na sa pagtatapos ng araw 273 00:11:49,220 --> 00:11:52,390 ang lahat ng mga format ng file na iyong na-gamit para years-- file Microsoft Word, 274 00:11:52,390 --> 00:11:55,820 Numero ng mga file, mga file sa Excel, anumang bilang ng mga format ng file 275 00:11:55,820 --> 00:11:57,770 na maaaring magkaroon ng ilang mga kilala extension file 276 00:11:57,770 --> 00:12:00,130 mga 0s lang at 1s ilalim ng hood. 277 00:12:00,130 --> 00:12:02,970 At ang tao ay may nagpasya kung ano ang mga convention ay, 278 00:12:02,970 --> 00:12:08,340 kung ano ang mga pattern ng 0s at 1s kumakatawan isang Word file laban sa isang Excel file, 279 00:12:08,340 --> 00:12:10,322 laban sa anumang bilang ng iba pang mga format ng file. 280 00:12:10,322 --> 00:12:12,780 Kaya sa pset 4, magkakaroon ka ng isang pagkakataon upang i-play ang mga iyon. 281 00:12:12,780 --> 00:12:14,405 >> Ngunit ano ang ibig sabihin ng magkaroon ng isang struct. 282 00:12:14,405 --> 00:12:18,012 Ito ay talagang isang magandang segue ngayon sa C, na kung saan ay may lamang ng isang pares 283 00:12:18,012 --> 00:12:20,220 ng karagdagang mga tampok na hindi namin ay may tumingin sa pa. 284 00:12:20,220 --> 00:12:24,230 Ito ay isang medyo maliit na wika at isa sa mga ang magaling na tampok ang tungkol sa C ay isang struct. 285 00:12:24,230 --> 00:12:27,300 Halimbawa, kung ikaw ay Nais upang represent-- sabihin 286 00:12:27,300 --> 00:12:33,690 sabihin ang iyong nais na magkaroon ng isang variable na ay kumakatawan sa isang mag-aaral sa ilang programa. 287 00:12:33,690 --> 00:12:37,330 Siguro kayo ay pagsulat ng isang kurso program registration, o core shopping 288 00:12:37,330 --> 00:12:38,870 tool, o isang bagay na tulad ng. 289 00:12:38,870 --> 00:12:42,922 Ano ang mga piraso ng data na may kaugnayan sa isang mag-aaral na dumating sa isip? 290 00:12:42,922 --> 00:12:44,880 Tulad ng isang mag-aaral ay kinakatawan sa kung ano ang halaga? 291 00:12:44,880 --> 00:12:45,732 Oo? 292 00:12:45,732 --> 00:12:46,940 Mayroon kang isang pangalan tulad ng isang mag-aaral. 293 00:12:46,940 --> 00:12:48,900 Ano pa ang isang tipikal na mag-aaral ay may? 294 00:12:48,900 --> 00:12:49,320 >> Madla: [hindi marinig] 295 00:12:49,320 --> 00:12:50,200 >> David J. MALAN: Kaya, paumanhin. 296 00:12:50,200 --> 00:12:50,660 >> Madla: Age. 297 00:12:50,660 --> 00:12:52,980 >> David J. MALAN: Isang edad o birthday equivalently, yep. 298 00:12:52,980 --> 00:12:53,557 Ano pa? 299 00:12:53,557 --> 00:12:54,390 Madla: numero ng ID? 300 00:12:54,390 --> 00:12:57,460 David J. MALAN: Kaya ang isang numero ng ID, siguro isang numero ng telepono, marahil ng isang dorm, o bahay, 301 00:12:57,460 --> 00:12:58,670 o kolehiyo, o isang bagay na tulad ng. 302 00:12:58,670 --> 00:13:01,820 Anumang bilang ng mga piraso ng data na maaaring mayroon ka sa iyong listahan ng mga contact 303 00:13:01,820 --> 00:13:03,890 ay kung ano ang maaaring tukuyin ang isang mag-aaral. 304 00:13:03,890 --> 00:13:08,490 Kaya kung nais namin na gawin ito, sa code, maaari naming gawin ang isang bagay simple tulad nito. 305 00:13:08,490 --> 00:13:15,670 Maaari naming magkaroon ng isang programa upang ang Wala sabihin nating, int pangunahing (walang bisa). 306 00:13:15,670 --> 00:13:18,920 At kung gusto ko upang kumatawan sa isang mag-aaral na maaaring mayroon ako, halimbawa, 307 00:13:18,920 --> 00:13:24,330 isang string na tinatawag na pangalan para sa mag-aaral na, isang string na tinatawag dorm para sa estudyante na, 308 00:13:24,330 --> 00:13:26,900 siguro isang int tinatawag ID para sa estudyante na iyon. 309 00:13:26,900 --> 00:13:30,840 At dahil gumagamit ako ng string, ako kailangan upang bumalik at maglagay ng CS50.h. 310 00:13:30,840 --> 00:13:33,300 Siguro ako pagpunta sa kailangan stdio.h. 311 00:13:33,300 --> 00:13:38,190 Kaya hayaan mo akong preemptively gawin iyon at ako pagpunta sa tawag na ito student.c para sa ngayon 312 00:13:38,190 --> 00:13:40,080 at i-save ito. 313 00:13:40,080 --> 00:13:44,206 >> At ngayon maaari kong gawin ang isang bagay may mga variable na ito. 314 00:13:44,206 --> 00:13:46,830 At lamang kami ay pagpunta sa sumulat na bilang isang komento sa palsipikado code, 315 00:13:46,830 --> 00:13:48,829 dahil ito ay hindi kawili-wili ano ang ginagawa namin sa ngayon. 316 00:13:48,829 --> 00:13:51,242 OK, sa gayon ito ay isang programa na kahit papaano nag-iimbak ng isang mag-aaral. 317 00:13:51,242 --> 00:13:53,450 Ano ang gusto kong gawin kung ako nais na tindahan ng dalawang mga mag-aaral? 318 00:13:53,450 --> 00:13:55,991 Kaya ang aking unang katutubong ugali ay pagpunta upang ang lahat ng karapatan, maghintay ng isang minuto, 319 00:13:55,991 --> 00:14:01,920 kung ako ay may ibang mag-aaral kung bakit hindi ko gawin lamang string name 2, string dorm 2, 320 00:14:01,920 --> 00:14:04,190 int ID2. 321 00:14:04,190 --> 00:14:06,540 At kami tapos wala na down na ito kalsada bago 322 00:14:06,540 --> 00:14:10,890 at kung ano ang aming mga solusyon sa kung ano ang anyong na uri ng isang hackish copy paste 323 00:14:10,890 --> 00:14:11,555 trabaho dito? 324 00:14:11,555 --> 00:14:12,346 Madla: Ang isang array. 325 00:14:12,346 --> 00:14:13,830 David J. MALAN: Oo, maaari naming gamitin ang isang array. 326 00:14:13,830 --> 00:14:15,620 Right ito masyadong mabilis magiging mahirap gamitin. 327 00:14:15,620 --> 00:14:18,453 Ikaw ay may na-uri-uriin ng nagkataon simulan ang pagbibigay ng lahat ng mga variable. 328 00:14:18,453 --> 00:14:22,190 At ikaw, ang tao, kailangang panatilihin ang subaybayan na name2 OK tumutugma 329 00:14:22,190 --> 00:14:25,060 may dorm2 tumutugma sa ID2. 330 00:14:25,060 --> 00:14:26,200 Ito lamang ay nagiging isang gulo. 331 00:14:26,200 --> 00:14:29,350 Kaya ito ay isang pulutong mas madali, pagpapabalik mula sa isang ilang mga linggo nakaraan, 332 00:14:29,350 --> 00:14:34,300 na lamang ang pagkakaroon sa tinatawag na mga pangalan string at maaaring magbigay sa amin ng tatlong mga iyon. 333 00:14:34,300 --> 00:14:36,940 At pagkatapos ay marahil kami ay may string dorms at may 334 00:14:36,940 --> 00:14:41,900 tatlo sa mga iyon, o sa isang pare-pareho, int ids at may tatlong ng mga iyon. 335 00:14:41,900 --> 00:14:45,250 Ngunit kahit na ngayon nararamdaman na ito isang maliit na nanggigitata, right. 336 00:14:45,250 --> 00:14:49,440 Kami ay pakikipag-usap tungkol sa mga mag-aaral at pa Talaga ako tirahan sa mababang antas 337 00:14:49,440 --> 00:14:50,470 detalye ng pagpapatupad. 338 00:14:50,470 --> 00:14:52,790 Ang mag-aaral ay isang pangalan at isang dorm at ID. 339 00:14:52,790 --> 00:14:59,814 >> Bakit hindi Ipinapahayag ko lamang ng isang variable tinatawag na mag-aaral at tawagan ito s. 340 00:14:59,814 --> 00:15:02,230 At kung gusto ko ang isa pang estudyante, bakit hindi ko na lang tawag ito t. 341 00:15:02,230 --> 00:15:05,260 O kung gusto ko ang isang buong grupo ng mga mag-aaral, bakit hindi ko na lang 342 00:15:05,260 --> 00:15:09,740 sabihin ako ng isang buong klase ng mga mga mag-aaral, at ito ay tatlong ng mga ito. 343 00:15:09,740 --> 00:15:12,470 Sa ibang salita, bakit hindi ko dumating up gamit ang aking sariling uri ng data, na tinatawag na 344 00:15:12,470 --> 00:15:15,641 Mag-aaral, sa loob ng kung saan ay isang pangalan, ay isang ID, ay isang dorm, 345 00:15:15,641 --> 00:15:16,890 ay ang anumang bilang ng iba pang mga patlang. 346 00:15:16,890 --> 00:15:19,030 At ito ay lumiliko out ka maaaring gawin eksakto na. 347 00:15:19,030 --> 00:15:21,850 >> Kaya ay ang tampok na tinatawag na struct C. 348 00:15:21,850 --> 00:15:24,700 Iyan ay isang tampok na wika na ay nagbibigay-daan sa amin upang gawin ang eksaktong ito. 349 00:15:24,700 --> 00:15:28,370 Pupunta ako sa sige at buksan up structs.h 350 00:15:28,370 --> 00:15:32,299 na kung saan kami ay pagpunta upang makita ang mga sumusunod na kahulugan ng isang mag-aaral. 351 00:15:32,299 --> 00:15:35,215 Ito ay lumiliko out - at ang isang ito ay mas mas simple kaysa sa isa na kinasasangkutan ng isang ID 352 00:15:35,215 --> 00:15:36,080 ilang sandali ang nakalipas. 353 00:15:36,080 --> 00:15:39,120 Kung nais mong magkaroon ng ang iyong mga lutong bahay na uri ng data, 354 00:15:39,120 --> 00:15:42,750 at bilang karagdagan sa int, at pansamantalang trabaho at lumutang at ang lahat ng mga iba na umiiral, 355 00:15:42,750 --> 00:15:45,810 maaari mong gawin ito sa pamamagitan ng literal pagsulat typedef struct, 356 00:15:45,810 --> 00:15:47,880 pagkatapos ng ilang curly braces, sa loob ng na mo 357 00:15:47,880 --> 00:15:51,460 ilista ang mga variable na gusto mong iugnay gamit ang bagong pasadyang data 358 00:15:51,460 --> 00:15:55,670 type tulad ng isang pangalan at isang dorm, at pagkatapos matapos ang kulot tirante 359 00:15:55,670 --> 00:15:57,860 magbibigay sa iyo ng isang pangalan para sa bagong uri ng data. 360 00:15:57,860 --> 00:15:59,220 Kaya, halimbawa, ang mag-aaral. 361 00:15:59,220 --> 00:16:03,247 >> At kung ano ang magaling tungkol sa mga ito ngayon ay na kung tinitingnan namin ang nararapat na code, 362 00:16:03,247 --> 00:16:05,080 kombensiyon, unang sa lahat, ay upang ilagay ito 363 00:16:05,080 --> 00:16:08,230 sa isang file na tinatawag na isang bagay na tuldok h, ng isang header ng file, na kung saan mayroon kaming hindi 364 00:16:08,230 --> 00:16:09,780 nagsimula gamit ang ating sarili masyadong marami. 365 00:16:09,780 --> 00:16:12,120 Ngunit kami ay pagpunta upang simulan ang gamit ng lubos ng kaunti ngayon. 366 00:16:12,120 --> 00:16:18,650 At kung ano ang maaari naming gawin sa mga ito, sa huli, sa mga ilang linya ng code 367 00:16:18,650 --> 00:16:22,130 ay magpahayag ng eksakto na uri ng data, ang isang mag-aaral. 368 00:16:22,130 --> 00:16:23,230 At gamitin natin ito sa ngayon. 369 00:16:23,230 --> 00:16:27,274 >> Pupunta ako sa pupunta na ngayon sa isang file na tinatawag structs1.c. 370 00:16:27,274 --> 00:16:29,440 At tumagal ng isang pagtingin sa isang ipaalam ilang katangian dito. 371 00:16:29,440 --> 00:16:32,250 Kaya ang mga bagay-bagay up dito ay halos pamilyar, at bibigyan namin ng 372 00:16:32,250 --> 00:16:35,040 bumalik sa kung ano ang hindi pamilyar sa sandali lamang. 373 00:16:35,040 --> 00:16:39,880 Ito ng kurso ay kabilang ang aking sariling header ng file, na kung saan ay mga bagong pati na rin, 374 00:16:39,880 --> 00:16:42,580 maliban para sa pset 3 kung saan, pagpapabalik, mayroon kaming helpers.h. 375 00:16:42,580 --> 00:16:45,150 Kaya maaari mong isipin na #include helpers.h. 376 00:16:45,150 --> 00:16:49,381 >> Bakit parang ang aking ginagamit quotes sa halip ng angled bracket? 377 00:16:49,381 --> 00:16:50,630 Kapag ako pipili sa pagitan ng mga ito? 378 00:16:50,630 --> 00:16:52,310 Halos lagi akong parang gamitin angled bracket. 379 00:16:52,310 --> 00:16:55,040 At pagkatapos, ang lahat ng isang biglaang sa anim na linya gumagamit ako ng double quotes. 380 00:16:55,040 --> 00:16:55,860 Bakit maaaring maging? 381 00:16:55,860 --> 00:16:56,700 Oo? 382 00:16:56,700 --> 00:16:57,725 >> Madla: [hindi marinig] 383 00:16:57,725 --> 00:16:59,350 David J. MALAN: Iyan ay isang aktwal na, ano? 384 00:16:59,350 --> 00:17:00,559 Madla: Iyon ang sa iyong IDE. 385 00:17:00,559 --> 00:17:02,475 David J. MALAN: Oo, na ang dahilan sa aking aktwal na IDE. 386 00:17:02,475 --> 00:17:05,690 At hindi na tumira sa mga IDE ipaalam, dahil ito lamang ay isang tool na gumagamit ako. 387 00:17:05,690 --> 00:17:08,119 Iyan ay sa aking kasalukuyang directory, partikular. 388 00:17:08,119 --> 00:17:11,647 Kaya structs.h ay ang aking sariling mga file Hindi naka-install sa IDE, 389 00:17:11,647 --> 00:17:14,480 sa operating system mismo, sa halip ito ay sa aking kasalukuyang direktoryo. 390 00:17:14,480 --> 00:17:16,910 Kaya ang convention ay kung gusto mong upang isama ang iyong sariling mga header ng file, 391 00:17:16,910 --> 00:17:18,200 ikaw lamang gamitin ang double quotes. 392 00:17:18,200 --> 00:17:23,290 >> Ano ang tawag sa bagay na ito sa 8 linya, karaniwang pagsasalita? 393 00:17:23,290 --> 00:17:25,200 Ano ito? 394 00:17:25,200 --> 00:17:28,220 # tukuyin ang isang bagay. 395 00:17:28,220 --> 00:17:31,040 Ito ay kumakatawan sa constants, di ba? 396 00:17:31,040 --> 00:17:33,140 Kung nais mong magkaroon ng isang halaga sa iyong mga programa 397 00:17:33,140 --> 00:17:35,110 na gamitin mo ang isang buong grupo ng mga beses, ito ay 398 00:17:35,110 --> 00:17:39,330 magandang convention sa kadahilanan ito, ipinahahayag ito, na may simbolong hash 399 00:17:39,330 --> 00:17:43,340 tukuyin, pagkatapos, sa pamamagitan ng convention, sa lahat ng uppercase word-- na ito ay hindi 400 00:17:43,340 --> 00:17:45,320 mahigpit na kinakailangan, ngunit ito ay convention ng tao 401 00:17:45,320 --> 00:17:47,210 magsamantala constants kaya na tumalon sila sa labas 402 00:17:47,210 --> 00:17:50,380 sa visually-- kang space at pagkatapos ay ang halaga na gusto mong maging 403 00:17:50,380 --> 00:17:52,250 katumbas ng pangalan na pare-pareho ang ni. 404 00:17:52,250 --> 00:17:56,110 Walang tuldok-kuwit, ngunit ikaw lamang sundin ang pattern na doon. 405 00:17:56,110 --> 00:17:57,770 >> Kaya kung ano ang ako ginagawa sa aktwal na code. 406 00:17:57,770 --> 00:18:00,660 Kaya sabihin kumuha ng isang pagtingin sa ang mga pangunahing programa dito. 407 00:18:00,660 --> 00:18:04,080 Sa linya 12 dahil ako Isinama structs.h, 408 00:18:04,080 --> 00:18:06,492 Ako ngayon ay magically sa aking pagtatapon ng isang bagong uri ng data. 409 00:18:06,492 --> 00:18:09,200 Hindi ko lang magkaroon ng access sa int, at char, at float, at string, 410 00:18:09,200 --> 00:18:10,060 at asul at iba pa. 411 00:18:10,060 --> 00:18:12,470 Ako ngayon ay pag-access sa isang uri ng data na estudyante. 412 00:18:12,470 --> 00:18:17,740 Kaya sa linya 12, ako ng Kombinasyon ng dalawang ideas-- isa isang pasadyang uri ng data at dalawa, 413 00:18:17,740 --> 00:18:18,940 gamit ang isang array. 414 00:18:18,940 --> 00:18:21,700 At kaya sa programang ito kung Gusto ko na talagang sumusuporta 415 00:18:21,700 --> 00:18:24,320 tatlong iba't-ibang mga mag-aaral sa aking mga programa, ako 416 00:18:24,320 --> 00:18:30,480 Maaari lamang sabihin bigyan ako ng isang variable tinatawag na mga mag-aaral, ang bawat isa 417 00:18:30,480 --> 00:18:32,970 ay uri ng mga mag-aaral, na kung saan ay ang aking pasadyang uri ng data. 418 00:18:32,970 --> 00:18:35,890 At, partikular, magbigay sa akin tatlo sa mga sa aking array. 419 00:18:35,890 --> 00:18:37,750 >> Kaya ngayon kung ano ang gagawin namin sa programang ito? 420 00:18:37,750 --> 00:18:40,670 Narito lamang ng isang para sa loop iterating mula 0 hanggang 3, dahil na 421 00:18:40,670 --> 00:18:42,110 ano ang halaga ng mga mag-aaral ay. 422 00:18:42,110 --> 00:18:44,420 Ako pagdikta lang ang user bigyan ako ng pangalan ng estudyante. 423 00:18:44,420 --> 00:18:48,090 At pagkatapos ay sa 17 na linya, kami ay magkaroon ng isang halos pamilyar linya. 424 00:18:48,090 --> 00:18:50,370 Mayroon kaming ang aming lumang kaibigan GetString sa kanan. 425 00:18:50,370 --> 00:18:52,345 At kung ano ang piraso ng syntax ay tila bago, 426 00:18:52,345 --> 00:18:55,130 kung hindi mo pa-program sa C bago, at mga hindi ginagamit ang structs? 427 00:18:55,130 --> 00:18:55,510 Oo? 428 00:18:55,510 --> 00:18:56,417 >> Madla: NAME Ang. 429 00:18:56,417 --> 00:18:57,500 David J. MALAN: NAME Ang. 430 00:18:57,500 --> 00:19:01,220 Ngunit ito ay hindi masyadong maraming ng isang hakbang, dahil ngayon aaral bracket i 431 00:19:01,220 --> 00:19:02,590 nagbibigay sa iyo ng ang mag-aaral i-ika. 432 00:19:02,590 --> 00:19:04,730 At kung gusto mong sumisid sa loob ng istraktura na, 433 00:19:04,730 --> 00:19:09,490 gumamit ka lamang ng isang solong panahon at pagkatapos ay ang pangalan ng variable sa loob, 434 00:19:09,490 --> 00:19:11,900 o ari-arian sa loob na nais mong makakuha ng access sa. 435 00:19:11,900 --> 00:19:14,816 Sa katulad na paraan pagkatapos, kung pagkatapos ay prompt ko ang user, bigyan ako ng dorm ng mag-aaral, 436 00:19:14,816 --> 00:19:18,390 maaari kang katulad-imbak na string sa dorm variable sa loob 437 00:19:18,390 --> 00:19:19,940 ng na mag-aaral ng istraktura. 438 00:19:19,940 --> 00:19:21,410 >> At ngayon ang mga bagay makakuha ng isang maliit na pag-iisip. 439 00:19:21,410 --> 00:19:24,420 At ito ay pagpunta sa hitsura at marahil ng isang pulutong ng lubos sa lalong madaling panahon. 440 00:19:24,420 --> 00:19:27,970 Ngunit makikita mo ang mas malayo sa pset 4, upang ipaalam ang sulyap lamang sa mga ito ngayon. 441 00:19:27,970 --> 00:19:33,364 Ito ay lumiliko out na sa 23 na linya sa pamamagitan 38, ano ang tingin mo marahil ako ginagawa? 442 00:19:33,364 --> 00:19:35,530 Tinanggal ko na ang mga komento para sa ngayon, ngunit ang bersyon 443 00:19:35,530 --> 00:19:38,660 ng code sa online para sa reference ay ang lahat ng mga komento. 444 00:19:38,660 --> 00:19:40,171 Ano ang gagawin tila ako ay ginagawa? 445 00:19:40,171 --> 00:19:42,530 >> Madla: Pag-save ng file na may lahat ang mga impormasyon na ipinasok ng user. 446 00:19:42,530 --> 00:19:44,530 >> David J. MALAN: Oo, eksakto, ito ay isang bagong paraan 447 00:19:44,530 --> 00:19:46,370 na namin nakikita ang dalawa, isa pang katangian ng C, 448 00:19:46,370 --> 00:19:48,700 kung saan maaari kong lumikha ng aking sariling mga file. 449 00:19:48,700 --> 00:19:51,580 Kaya ngayon, halos lahat ng programa na iyong isinulat ay stateless. 450 00:19:51,580 --> 00:19:53,334 Sa sandaling tapos na ito sa pagtakbo, na ang lahat. 451 00:19:53,334 --> 00:19:55,000 Walang memory o pag-alaala ng mga ito. 452 00:19:55,000 --> 00:19:56,110 Walang file save. 453 00:19:56,110 --> 00:19:58,120 Ngunit kung mo nais na i-save ang input na may 454 00:19:58,120 --> 00:20:02,100 ang nangyari, tulad ng sa isang laro o sa isang programa tulad nito, ito ay lumiliko out maaari naming gawin ito. 455 00:20:02,100 --> 00:20:04,360 At makikita mo ito ng mas maraming sa pset 4 at sa Section. 456 00:20:04,360 --> 00:20:08,661 Ngunit ito 23 line mahalagang lumilikha ng isang file na tinatawag na students.csv. 457 00:20:08,661 --> 00:20:10,160 At maaari mong nakita ito bago. 458 00:20:10,160 --> 00:20:14,250 Kahit na hindi mo na-aral CS bago, CSV ay mga variable na pinaghihiwalay ng kuwit. 459 00:20:14,250 --> 00:20:19,000 Ito ay tulad ng isang napaka-mahinang tao bersyon ng isang Excel file, 460 00:20:19,000 --> 00:20:22,270 na nangangahulugan na ito ay maaaring mabuksan sa Excel at sa Apple Numero, 461 00:20:22,270 --> 00:20:23,830 at ito ay may mga hanay at haligi. 462 00:20:23,830 --> 00:20:26,485 Ngunit ito ay hindi isang may-ari format tulad ng Microsoft o Apple. 463 00:20:26,485 --> 00:20:29,840 Ito lang ang kuwit na naghihiwalay ang mga halaga na kami ay makita sa isang sandali. 464 00:20:29,840 --> 00:20:31,010 >> At tumagal lamang ng isang hulaan. 465 00:20:31,010 --> 00:20:33,480 Sa 23 line, sa pinakadulo wakas, ang aking pangalawang argumento 466 00:20:33,480 --> 00:20:37,700 sa bagong function na tinatawag na f bukas para sa file na bukas ay w. 467 00:20:37,700 --> 00:20:39,430 Ano ang maaaring w magpakilala? 468 00:20:39,430 --> 00:20:40,022 Oo? 469 00:20:40,022 --> 00:20:41,260 >> Madla: Hinahayaan ka nitong magsulat sa file? 470 00:20:41,260 --> 00:20:42,630 >> David J. MALAN: Ito ay nagbibigay-daan sumulat ka sa file. 471 00:20:42,630 --> 00:20:44,810 Kaya may isang pares ng mga variant na maaari naming plug in dito. 472 00:20:44,810 --> 00:20:47,184 Ngunit kung gusto mo lamang na basahin ang file, na tingnan ang mga ito 473 00:20:47,184 --> 00:20:50,010 at basahin ang mga ito sa memory, ikaw ay lamang gamitin ang quote magpanipi "r". 474 00:20:50,010 --> 00:20:53,110 Kung nais mong sumulat sa file, gumamit ka ng quote magpanipi "w". 475 00:20:53,110 --> 00:20:55,190 May ikakabit din at isang pares ng mga iba pang mga bagay 476 00:20:55,190 --> 00:20:57,356 kung gusto mong baguhin ang umiiral na mga file. 477 00:20:57,356 --> 00:21:00,480 Ngayon kami ay pagpunta upang panatilihin ang paningin na ito bagay, at pagkatapos kami ay bumalik sa line 24. 478 00:21:00,480 --> 00:21:02,640 NULL, ito ay lumiliko out, ay isang espesyal na halaga na 479 00:21:02,640 --> 00:21:06,070 maaaring ibalik sa pamamagitan ng ilang mga function sa kung ang isang bagay ay wala na wrong-- 480 00:21:06,070 --> 00:21:08,490 kung ang file ay hindi umiiral, kung ikaw na maubusan ng memory, 481 00:21:08,490 --> 00:21:09,620 o isang grupo ng iba pang mga error. 482 00:21:09,620 --> 00:21:13,470 Ngunit sa ngayon, ipaalam lamang ipalagay na ito ay lamang maginoo error checking. 483 00:21:13,470 --> 00:21:17,090 Dito sa linya 26, ako ng iterating mula 0 hanggang 3 sa lahat ng aking mga mag-aaral. 484 00:21:17,090 --> 00:21:20,470 At ito ang mga uri ng mga uri ng isang bagong pag-andar, fprintf, 485 00:21:20,470 --> 00:21:21,460 ngunit tumagal lamang ng isang hulaan. 486 00:21:21,460 --> 00:21:24,370 Kung printf ay print lamang sa isang format na string, 487 00:21:24,370 --> 00:21:26,507 kung ano ang ibig malamang na ibig sabihin fprintf? 488 00:21:26,507 --> 00:21:27,590 Madla: I-print sa isang file. 489 00:21:27,590 --> 00:21:29,290 David J. MALAN: I-print ang isang format na string sa isang file. 490 00:21:29,290 --> 00:21:31,180 Iyon ay kung ano ang mga karagdagang f ibig sabihin nito ay file. 491 00:21:31,180 --> 00:21:36,420 At ang bagong unang argument ay dapat ang mga variable na kumakatawan sa iyong file. 492 00:21:36,420 --> 00:21:38,866 Pagkatapos ay mayroon lamang kami ng isang format string tulad ng printf. 493 00:21:38,866 --> 00:21:40,740 At kahit na ito syntax ay bago, ito lamang 494 00:21:40,740 --> 00:21:44,610 nangangahulugan plug sa pangalan ng estudyante, plug-in sa mag-aaral dorm, at pagkatapos ay 495 00:21:44,610 --> 00:21:47,160 may fclose, isara ang file. 496 00:21:47,160 --> 00:21:49,730 At pagkatapos lastly-- na ito ay bago at kami ay bumalik sa ito 497 00:21:49,730 --> 00:21:53,240 bago long-- ako pagbabakante ng mag-aaral para sa mga dahilan 498 00:21:53,240 --> 00:21:54,860 na nangyari hanggang sa itaas doon. 499 00:21:54,860 --> 00:21:56,820 Ngunit kami ay bumalik na na bago long-- 500 00:21:56,820 --> 00:21:59,820 iyan ay dahil sa kung paano GetString ay aktwal na nagtatrabaho sa ilalim ng hood. 501 00:21:59,820 --> 00:22:01,280 >> Kaya sabihin kumuha ng isang mabilis na pagtingin dito. 502 00:22:01,280 --> 00:22:04,380 Kung nagta-type ako ls sa aking directory, paunawa na hindi ko 503 00:22:04,380 --> 00:22:09,360 magkaroon ng isang file na tinatawag na students.csv, lamang ay hindi doon, ay hindi umiiral. 504 00:22:09,360 --> 00:22:14,965 Kaya kung ngayon ako sumulat ng libro sa programang ito, gumawa structs-1,. / structs-1, 505 00:22:14,965 --> 00:22:20,570 at ako pagpunta upang magpatuloy at i-type sa Andi, na nakatira sa Berkeley sa Yale. 506 00:22:20,570 --> 00:22:26,350 Kami ay pagpunta sa may Rob na nabubuhay sa Thayer na mga araw. 507 00:22:26,350 --> 00:22:33,760 At ni magkaroon ng kung saan hahanapin ay, sa tingin ko, Maria ay sa Mather, 508 00:22:33,760 --> 00:22:35,100 kung ako ay may naalala tama. 509 00:22:35,100 --> 00:22:36,460 >> Kaya tila walang mangyari. 510 00:22:36,460 --> 00:22:40,680 Ngunit kung type ko ls ngayon, may students.csv. 511 00:22:40,680 --> 00:22:43,080 Sabihin sige at bukas students.csv. 512 00:22:43,080 --> 00:22:46,050 Ito ay muli ng isang napaka magaan na file format. 513 00:22:46,050 --> 00:22:49,570 Ngunit ko na lang ako pinagtibay ng isang convention na mayroon akong dalawang mga hanay at haligi dito. 514 00:22:49,570 --> 00:22:52,020 Ang unang haligi ay unang pangalan ng mga tao. 515 00:22:52,020 --> 00:22:55,740 Ang ikalawang hanay ay ang mag-aaral dorm, o kolehiyo, o bahay, o watnat. 516 00:22:55,740 --> 00:22:57,900 At ngayon ko na-save na ito permanente sa isang file. 517 00:22:57,900 --> 00:22:59,280 >> Kaya ito ay hindi lahat na kawili-wili. 518 00:22:59,280 --> 00:23:02,980 Ngunit ito ay lamang ng isang tuntong bato ngayon sa pagiging maka-umiiral na impormasyon 519 00:23:02,980 --> 00:23:04,040 permanente. 520 00:23:04,040 --> 00:23:08,340 Kaya tingnan natin ngayon kung ano pa ang maaari naming gawin sa mga ito at iba pang mga tampok. 521 00:23:08,340 --> 00:23:10,729 Ngunit una, ang anumang mga katanungan? 522 00:23:10,729 --> 00:23:12,145 Iyon ay isang pulutong, at iyon ay mabilis. 523 00:23:12,145 --> 00:23:16,131 Ngunit makikita mo ang isang maraming higit pa sa pset 4, pati na rin. 524 00:23:16,131 --> 00:23:16,630 Oo? 525 00:23:16,630 --> 00:23:19,360 >> Madla: Mayroon bang paraan upang magpatuloy sa pagdaragdag ng mga pangalan sa mga na file? 526 00:23:19,360 --> 00:23:19,880 >> David J. MALAN: Magandang katanungan. 527 00:23:19,880 --> 00:23:21,800 Mayroon bang paraan upang magpatuloy pagdaragdag ng mga pangalan sa mga na file? 528 00:23:21,800 --> 00:23:22,340 Oo. 529 00:23:22,340 --> 00:23:24,630 At, sa katunayan, kung ang dulo mo up sa muling pagbubukas ng file, 530 00:23:24,630 --> 00:23:26,780 nais mong gamitin ang quote magpanipi "a" para ilakip, 531 00:23:26,780 --> 00:23:31,090 na kung saan ay idagdag lamang ang isang bagong linya, isang bagong linya nang paulit-ulit, eksakto. 532 00:23:31,090 --> 00:23:32,010 Magandang tanong. 533 00:23:32,010 --> 00:23:32,950 Iba pang mga tanong? 534 00:23:32,950 --> 00:23:33,450 Oo? 535 00:23:33,450 --> 00:23:35,580 Madla: Kung kayo ay nagpatakbo ng mga program muli sa ngayon, 536 00:23:35,580 --> 00:23:38,000 ito ay panatilihin ang pagdaragdag ng mga pangalan ang maghain o ito ay magbukas ng isang bagong file? 537 00:23:38,000 --> 00:23:38,740 >> David J. MALAN: Ah, magandang katanungan. 538 00:23:38,740 --> 00:23:41,448 Kung nagpatakbo ka muli karapatan sa programa ngayon, siguro nai-type sa mga bagong pangalan, 539 00:23:41,448 --> 00:23:44,820 ito ay magdagdag sa mga file o patungan ang file? 540 00:23:44,820 --> 00:23:47,420 Ang huli, dahil ako hindi gamit na Magkabit mode. 541 00:23:47,420 --> 00:23:49,930 At dahil ako lamang taros pagbukas ng file para sa pagsulat, 542 00:23:49,930 --> 00:23:51,310 ito lamang ay pagpunta upang patungan ang file. 543 00:23:51,310 --> 00:23:54,570 Kaya ako ay sa katunayan kailangan mong gawin ay ikakabit, kung gusto kong talagang magkaroon ng isang long term 544 00:23:54,570 --> 00:23:55,350 database. 545 00:23:55,350 --> 00:23:58,220 >> Ngayon CSV ay kapaki-pakinabang, tapat, kahit na para tulad ng kung ikaw ay writing-- 546 00:23:58,220 --> 00:24:00,100 at kami ay makakita ito mamaya sa semestre kapag 547 00:24:00,100 --> 00:24:01,455 ginagamit namin ang mga CSV para sa ibang layunin. 548 00:24:01,455 --> 00:24:04,920 Kung nais mong i-store ang lahat ng mga tao na nakarehistro para sa ilang mga kaganapan, 549 00:24:04,920 --> 00:24:07,420 o nag-sign up para sa iyong mga mag-aaral grupo, o isang bagay tulad na, 550 00:24:07,420 --> 00:24:10,330 pagtatago ng data sa ganitong uri ng format ay sobrang maginhawa. 551 00:24:10,330 --> 00:24:12,580 Dahil literal, kung ako ay upang i-download ang file na ito. 552 00:24:12,580 --> 00:24:14,540 Kaya kong double-- at ni aktwal na subukan ito ipaalam 553 00:24:14,540 --> 00:24:16,720 kung ako ay may Excel o Numero sa dito. 554 00:24:16,720 --> 00:24:19,130 >> Pupunta ako sa right-click o i-control-click ang aking file. 555 00:24:19,130 --> 00:24:20,020 Oops. 556 00:24:20,020 --> 00:24:21,830 I-right-click o i-control-click ang aking file. 557 00:24:21,830 --> 00:24:24,960 Sige na, ang aking mouse ay hindi cooperating. 558 00:24:24,960 --> 00:24:32,694 Download-- Pupunta ako sa i-download ang lahat ng mga file dito kaya 559 00:24:32,694 --> 00:24:33,860 lamang kaya maaari kong sunggaban ang isang ito. 560 00:24:33,860 --> 00:24:37,850 At makita kung ito ay gumagana ipaalam students.csv-- unang pagkakataon 561 00:24:37,850 --> 00:24:39,310 Na-activate ko. 562 00:24:39,310 --> 00:24:41,360 Ngayon nais nilang makita ang aking mga contact. 563 00:24:41,360 --> 00:24:44,310 Ngayon, kailangan ko mag-register. 564 00:24:44,310 --> 00:24:47,620 Tingnan ang kung gaano kadali na gamitin ang mga CSV? 565 00:24:47,620 --> 00:24:50,840 Oo, panatilihin itong napapanahon. 566 00:24:50,840 --> 00:24:52,375 OK, ngayon ikaw ay handa na para sa klase namin. 567 00:24:52,375 --> 00:24:58,750 568 00:24:58,750 --> 00:25:00,370 OK, oh, ano ang bago? 569 00:25:00,370 --> 00:25:02,920 OK, close. 570 00:25:02,920 --> 00:25:04,750 Iyon ay kabigha-bighani. 571 00:25:04,750 --> 00:25:07,280 OK, ngayon kami ay i-update. 572 00:25:07,280 --> 00:25:10,890 At ngayon, nakalimutan ito kung ano ang maghain ako orihinal na binuksan, 573 00:25:10,890 --> 00:25:13,090 ngunit kung ano a-- doon pumunta kami. 574 00:25:13,090 --> 00:25:16,341 OK, kaya ngayon kami ay may isang Excel file. 575 00:25:16,341 --> 00:25:18,290 Salamat. 576 00:25:18,290 --> 00:25:20,764 >> OK, kaya kung ano ang ginawa ko ay ang madaling bahagi. 577 00:25:20,764 --> 00:25:23,930 Siyempre ako ay maaaring magkaroon ng pre-install Excel, o Numero, o kahit anong program. 578 00:25:23,930 --> 00:25:25,846 Ngunit ito ay nice, dahil ngayon ko mamanipula 579 00:25:25,846 --> 00:25:28,090 ang data sa isang standard format. 580 00:25:28,090 --> 00:25:30,294 >> Kaya ngayon sabihin konteksto lumipat sa kung saan namin kaliwa off 581 00:25:30,294 --> 00:25:32,710 huling oras, kung saan ay upang simulan upang mag-alis wheels training. 582 00:25:32,710 --> 00:25:34,543 Ngunit una, ikaw ay hindi ginawa makita ang mga ito nang mas maaga sa tanghalian 583 00:25:34,543 --> 00:25:38,150 ay muling nangyayari dito sa Apoy at Ice sa Cambridge, Sitar sa New Haven. 584 00:25:38,150 --> 00:25:43,150 Mag-sign up sa CS50s website ASAP upang sumali sa CS50 mga mag-aaral at mga kawani. 585 00:25:43,150 --> 00:25:46,090 >> Kaya kinuha namin gulong ng pagsasanay off sa Lunes bilang follows-- 586 00:25:46,090 --> 00:25:49,120 string ay ipinahayag sa CS50s library para sa ilang oras. 587 00:25:49,120 --> 00:25:52,650 At ito ay nice, dahil ito ay nagpapahintulot sa amin upang makipag-usap tungkol sa mga variable na rin ang pagiging 588 00:25:52,650 --> 00:25:54,660 kumpletong salita at pangungusap at iba pa. 589 00:25:54,660 --> 00:25:56,710 Ngunit ito ay lumiliko out ay hindi umiiral string. 590 00:25:56,710 --> 00:26:00,200 Iyon ay isang kasingkahulugan lamang, o isang alias, na gumawa kami ng isang bagay na 591 00:26:00,200 --> 00:26:03,780 talaga ay isang maliit na mas tinatawag na teknikal isang pansamantalang trabaho *. 592 00:26:03,780 --> 00:26:07,900 >> At sa katunayan, nakita namin ang isang halimbawa ng isang programa sa Lunes 593 00:26:07,900 --> 00:26:11,200 na hindi kumilos na lubos na bilang namin inaasahan. 594 00:26:11,200 --> 00:26:13,630 Ito ay ang file, ihambing-0. 595 00:26:13,630 --> 00:26:17,910 At isipin na ihambing-0, kung Recompile ko program Lunes 596 00:26:17,910 --> 00:26:22,670 at tumakbo ihambing-0 at sa uri ng mom in lowercase, at ina sa lowercase muli. 597 00:26:22,670 --> 00:26:25,320 Ang programa ay iginiit ko type ng iba't ibang mga bagay, 598 00:26:25,320 --> 00:26:29,210 kahit mom, ang lahat sa maliliit na titik, ay kapareho ng biswal. 599 00:26:29,210 --> 00:26:31,990 Kaya kung ano ay ang maikling sagot para sa kung bakit sa palagay ng mga computer 600 00:26:31,990 --> 00:26:34,500 dalawang string ang mga ito ay iba't-ibang? 601 00:26:34,500 --> 00:26:35,250 Oo? 602 00:26:35,250 --> 00:26:36,534 >> Madla: [hindi marinig] 603 00:26:36,534 --> 00:26:37,450 David J. MALAN: Karapatan. 604 00:26:37,450 --> 00:26:39,600 So, ina, sa unang pagkakataon Nagta-type ako ito sa, ay ang pagiging 605 00:26:39,600 --> 00:26:42,710 naka-imbak sa isang lugar sa computer ang aking memory ngunit sa ibang lokasyon 606 00:26:42,710 --> 00:26:44,690 kaysa sa ikalawang pagkakataon type ko sa mom. 607 00:26:44,690 --> 00:26:46,580 Ngayon ito ay tiyak na maaaring ma-optimize. 608 00:26:46,580 --> 00:26:49,205 Maaaring maging matalino Ang computer at Napagtanto ito ng dalawang mga string, hey, 609 00:26:49,205 --> 00:26:49,954 ang mga ito ay magkapareho. 610 00:26:49,954 --> 00:26:51,520 Hayaan akong hindi redundantly store na ito. 611 00:26:51,520 --> 00:26:54,229 Ngunit mga computer ay hindi gawin iyon optimization maliban kung sabihin mo sa kanila na. 612 00:26:54,229 --> 00:26:56,061 Kaya, sa pamamagitan ng default, ang mga ito ay lamang ang pagpunta sa mga end up 613 00:26:56,061 --> 00:26:57,670 sa dalawang magkaibang lugar sa memorya. 614 00:26:57,670 --> 00:27:01,570 At upang maging mas malinaw, kapag namin inihambing ang dalawang string, 615 00:27:01,570 --> 00:27:03,950 ang unang ay tinawag s, ang pangalawa ay tinatawag na 616 00:27:03,950 --> 00:27:08,530 t, ano ang partikular na ay ako paghahambing dito sa 13 na linya? 617 00:27:08,530 --> 00:27:09,494 Oo. 618 00:27:09,494 --> 00:27:12,390 >> Madla: Ito ang lugar sa memory na ang mga variable ay tumuturo sa. 619 00:27:12,390 --> 00:27:14,900 >> David J. MALAN: Eksakto, ako ay paghahambing ng mga lugar sa memory 620 00:27:14,900 --> 00:27:16,300 na ang mga variable itinuturo sa. 621 00:27:16,300 --> 00:27:20,560 Kaya partikular, kung ang ina ay sa byte numero 1, at 2, at 3, 622 00:27:20,560 --> 00:27:24,020 at 4-- tandaan dahil ang backslash 0 mga pangangailangan upang maging lahat ng mga paraan sa dulo. 623 00:27:24,020 --> 00:27:29,420 At ang iba pang halimbawa ng mom, m-o-m, ay sa address 10, 11, 12, at 13. 624 00:27:29,420 --> 00:27:33,100 Ako ay paghahambing 1, address na iyon, na lokasyon sa memorya, 625 00:27:33,100 --> 00:27:35,160 laban sa 10, na kung saan ay malinaw naman hindi ang pareho. 626 00:27:35,160 --> 00:27:36,260 1 ay hindi 10. 627 00:27:36,260 --> 00:27:39,620 >> Kaya ito ay nice sa na ito ay medyo tapat. 628 00:27:39,620 --> 00:27:42,870 Ngunit ito ay may problema sa abot ng Hindi namin ma-ihambing ang mga string. 629 00:27:42,870 --> 00:27:44,930 Kaya fundamentally-- at sa mababang antas, 630 00:27:44,930 --> 00:27:47,300 kung iyong nais na ipatupad isang programa upang ihambing 631 00:27:47,300 --> 00:27:50,270 dalawang magkahiwalay na mga salita na ang mga user ay nag-type sa para sa kalidad, 632 00:27:50,270 --> 00:27:53,944 gawin line nila up char para char, para lamang sa mga pangkalahatang tuntunin, 633 00:27:53,944 --> 00:27:55,360 kung ano ang kailangan namin upang gawin, tila? 634 00:27:55,360 --> 00:27:57,940 Ito ay hindi sapat lamang upang tingnan ang mga dalawang mga address. 635 00:27:57,940 --> 00:27:58,860 Ano ang dapat nating gawin? 636 00:27:58,860 --> 00:27:59,360 Oo? 637 00:27:59,360 --> 00:28:01,120 >> Madla: Ulitin pamamagitan ang string [hindi marinig]. 638 00:28:01,120 --> 00:28:02,600 >> David J. MALAN: Oo, sabihin ulitin sa pamamagitan ng string. 639 00:28:02,600 --> 00:28:05,808 Ni gumamit ng isang para sa loop, habang loop Ipaalam, o ano man ikaw ay pinaka-komportable sa. 640 00:28:05,808 --> 00:28:08,840 At kung nakuha namin ang dalawang mga string sa tabi-tabi sa memory, tingnan natin ang bawat isa na ipaalam 641 00:28:08,840 --> 00:28:11,770 unang character, at pagkatapos ang bawat ay pangalawang karakter, at pagkatapos ikatlo, at ika-apat, 642 00:28:11,770 --> 00:28:15,206 at ikalima, hanggang maabot namin kung ano ang espesyal na halaga nagbabantay? 643 00:28:15,206 --> 00:28:16,080 Madla: [hindi marinig] 644 00:28:16,080 --> 00:28:18,800 David J. MALAN: Oo, ang backslash zero, at sa puntong sa alinman string 645 00:28:18,800 --> 00:28:20,100 maaari naming magpasya na ang lahat. 646 00:28:20,100 --> 00:28:21,970 Nakarating kami naitugmang bawat solong character? 647 00:28:21,970 --> 00:28:22,990 Kung hindi, bumalik false. 648 00:28:22,990 --> 00:28:24,770 Kung gayon, nagbabalik ng tunay. 649 00:28:24,770 --> 00:28:28,800 At kaya na kung ano mismo ang bersyon na ito ng programa ihambing-1.c ang ginagawa. 650 00:28:28,800 --> 00:28:31,677 Ito ay katulad sa kung ano ang aming tumingin sa Lunes maliban na ako 651 00:28:31,677 --> 00:28:34,760 nakuha mapupuksa ang salita string na na ito ay walang functional impact-- lahat 652 00:28:34,760 --> 00:28:37,450 Ako ginagawa ngayon ay pag-alis ilang wheels visual na pagsasanay, 653 00:28:37,450 --> 00:28:40,880 ngunit upang makita ang malinaw na s at t ay address. 654 00:28:40,880 --> 00:28:43,020 At na kung ano ang bituin, ang asterisk, ito ay kumakatawan 655 00:28:43,020 --> 00:28:46,690 ay isang address, na kilala mas technically bilang pointer. 656 00:28:46,690 --> 00:28:49,880 >> Kaya kapag Ipinahahayag ko s on linya 9 at sabihin char * s, 657 00:28:49,880 --> 00:28:52,160 na ay hindi nangangahulugan bigyan ako ng isang string. 658 00:28:52,160 --> 00:28:56,360 Ito ay nangangahulugan na bigyan ako ng isang variable na ang layunin sa buhay ay upang mag-imbak ng isang address. 659 00:28:56,360 --> 00:29:00,400 Dahil ako tungkol sa upang ilagay ang address ng isang string sa mga ito. 660 00:29:00,400 --> 00:29:03,500 At sa katunayan, GetString, upang maging malinaw, hindi nagbabalik ng isang string. 661 00:29:03,500 --> 00:29:06,110 Hindi nito bumalik mom backslash zero, per se. 662 00:29:06,110 --> 00:29:10,005 Ano ang partikular na GetString at bumalik tiyak? 663 00:29:10,005 --> 00:29:10,880 Madla: [hindi marinig] 664 00:29:10,880 --> 00:29:14,080 David J. MALAN: Ang isang address, ang address ng unang character 665 00:29:14,080 --> 00:29:16,070 sa ilang mga string na ito ay nakuha. 666 00:29:16,070 --> 00:29:19,250 At kaya ngayon kami ay nakikita muli ang isang espesyal na keyword. 667 00:29:19,250 --> 00:29:20,640 At, ako alluded sa ito nang mas maaga. 668 00:29:20,640 --> 00:29:23,620 Ito ay magiging magandang convention na namin makita muli at muli ngayon. 669 00:29:23,620 --> 00:29:27,540 Lalabas na ako upang tiyakin na s ay hindi null at t ay hindi null. 670 00:29:27,540 --> 00:29:30,100 Dahil batay sa aking tunay mabilis na banggitin mas maaga, 671 00:29:30,100 --> 00:29:35,510 kung ano ang maaaring sabihin kung GetString nagbabalik hindi isang address ngunit N-U-L-L, na kung saan ay muli, 672 00:29:35,510 --> 00:29:36,990 ang ilang mga espesyal na halaga? 673 00:29:36,990 --> 00:29:37,890 >> Madla: Error. 674 00:29:37,890 --> 00:29:38,600 >> David J. MALAN: Ito ay isang error. 675 00:29:38,600 --> 00:29:39,550 May nangyaring mali. 676 00:29:39,550 --> 00:29:41,341 At kung ano ang karaniwang maaaring mangyari, lalo na 677 00:29:41,341 --> 00:29:45,162 may strings-- na maaaring ng hindi kilalang haba sa advance-- 678 00:29:45,162 --> 00:29:46,870 siguro ang computer ' sa labas ng memorya, siguro 679 00:29:46,870 --> 00:29:49,280 nai-type mo sa tulad ng isang mahabang salita o pangungusap 680 00:29:49,280 --> 00:29:51,880 o paste tulad ng isang malaking sanaysay may hindi lamang ng sapat na memory. 681 00:29:51,880 --> 00:29:55,340 At kaya hindi maaaring bumalik GetString ang address ng buong bagay, 682 00:29:55,340 --> 00:29:56,620 kaya ito ay bumalik lamang sa wala. 683 00:29:56,620 --> 00:30:00,580 At sinasabi nito ay nangyari ang isang error sa pamamagitan ng pagbalik ng mga espesyal na halaga null. 684 00:30:00,580 --> 00:30:02,890 Ito ay ang zero address, kaya na magsalita. 685 00:30:02,890 --> 00:30:06,157 >> Ngayon ito ay lumiliko out C ay dumating sa isang function na ang na pag-ulit. 686 00:30:06,157 --> 00:30:09,240 Wala kaming ipatupad na ito sa isang para sa loop o habang loop sa ating sarili. 687 00:30:09,240 --> 00:30:11,150 Maaari naming gamitin ang isang function, tinatawag succinctly, 688 00:30:11,150 --> 00:30:15,400 pukawin comp, o string ihambing, na ang layunin sa buhay ay upang gawin eksakto na. 689 00:30:15,400 --> 00:30:19,990 Bigyan mo itong dalawang payo, dalawang mga address, at ito ay pumunta sa mga address 690 00:30:19,990 --> 00:30:23,130 at pagkatapos ay ihambing ang sulat para sa sulat para sa sulat para sa kalidad, 691 00:30:23,130 --> 00:30:26,610 pagpapahinto lamang kapag kung ano ang totoo? 692 00:30:26,610 --> 00:30:31,540 Kapag intuitively dapat gumalaw comp itigil iterating, upang maging malinaw lang? 693 00:30:31,540 --> 00:30:35,400 Kapag ito ay umabot sa isang backslash 0 sa alinman sa string, at sa puntong ito ay maaaring magpasiya 694 00:30:35,400 --> 00:30:38,910 ay ang lahat ng bagay na tumugma, o nagkaroon ng isang pagkakaiba? 695 00:30:38,910 --> 00:30:42,740 >> Kaya, kung nagpapatakbo namin ito ngayon at subukan aming maliit na capitalization game, 696 00:30:42,740 --> 00:30:49,260 kaya gumawa ihambing-1, ./compare-1, at type mom in lowercase parehong oras. 697 00:30:49,260 --> 00:30:50,560 Ngayon ay ang mga parehong bagay. 698 00:30:50,560 --> 00:30:54,080 At kung ito ang gagawin ko muli sa lowercase at pagkatapos ay marahil uppercase. 699 00:30:54,080 --> 00:30:56,720 Ngayon ay sa katunayan Tinutukoy sa pagitan ng malalaki at maliliit na titik. 700 00:30:56,720 --> 00:31:00,440 Kaya hindi lahat na mahirap o nakapagtataka, ngunit ito ay ngayon ipaliwanag 701 00:31:00,440 --> 00:31:03,140 ano ang nangyayari sa ilalim ng hood. 702 00:31:03,140 --> 00:31:07,640 >> Kaya ano pa ang maaari naming kunin mula sa uri ng aral? 703 00:31:07,640 --> 00:31:08,980 Kaya sabihin kumuha ng isang pagtingin sa ito. 704 00:31:08,980 --> 00:31:15,380 Pupunta ako sa sige, at magsulat ng isang dito na tinatawag na mabilis na programa copy-0. 705 00:31:15,380 --> 00:31:21,594 At ngayon sabihin sige at tunay ni gawin this-- may kopya-0 ipaalam, 706 00:31:21,594 --> 00:31:23,010 kumuha ng isang pagtingin sa kung ano ang Mayroon akong dito. 707 00:31:23,010 --> 00:31:24,712 Una kong sabihin sa mga user, sinasabi ng isang bagay. 708 00:31:24,712 --> 00:31:26,420 Pagkatapos ay kumuha ako ng isang string at naka-imbak ko ito sa s. 709 00:31:26,420 --> 00:31:29,810 Pagkatapos suriin ko kung katumbas s katumbas null, bumalik lamang 1. 710 00:31:29,810 --> 00:31:31,590 Kaya ito ay lamang ng standard error checking. 711 00:31:31,590 --> 00:31:33,112 Walang mga kagiliw-giliw na ang nangyari. 712 00:31:33,112 --> 00:31:36,320 At sa katunayan, kung kami makakuha ng alisan ng mga error suri, ito ang hitsura ng linggo 1 code 713 00:31:36,320 --> 00:31:36,985 sa sandaling ito. 714 00:31:36,985 --> 00:31:39,110 Ngunit ko na nagsimula upang makakuha ng isang maliit na mas mahusay na tungkol sa. 715 00:31:39,110 --> 00:31:43,340 >> Ngayon sa 16 na linya, sa isang linggo na ang nakaraan, marahil kahit ilang araw o minuto na ang nakalipas, 716 00:31:43,340 --> 00:31:46,720 kumbaga 16 na linya ay paglikha variable na tinatawag na t isang 717 00:31:46,720 --> 00:31:48,219 at pagkopya s sa mga ito. 718 00:31:48,219 --> 00:31:50,010 At iyon ay isang ganap na ganap makatwirang takeaway. 719 00:31:50,010 --> 00:31:51,560 Ngunit maging mas tumpak na ngayon. 720 00:31:51,560 --> 00:31:54,190 Ano ang nangyayari sa 16 na linya? 721 00:31:54,190 --> 00:31:56,170 Ano ang pagkuha ng kinopya mula kanan pakaliwa? 722 00:31:56,170 --> 00:31:56,669 Oo? 723 00:31:56,669 --> 00:31:58,490 Madla: t Nakakakuha ba ng isang address ng s? 724 00:31:58,490 --> 00:32:01,220 >> David J. MALAN: Eksakto, t ay nakakakuha ng mga address ng mga s. 725 00:32:01,220 --> 00:32:05,170 Kaya upang maging malinaw na ngayon, kung pumunta ako bumalik sa mga naunang halimbawa 726 00:32:05,170 --> 00:32:08,520 at ako maglabas ng bagay ko na nai-type sa. 727 00:32:08,520 --> 00:32:11,640 At kung ano ang nai-type ko in-- dito ang s, at dito 728 00:32:11,640 --> 00:32:15,830 ay kung ano ang aking nai-type sa isang lugar sa memory, ina at pagkatapos ng isang backslash 729 00:32:15,830 --> 00:32:17,840 0 na idinagdag para sa akin. 730 00:32:17,840 --> 00:32:23,060 Ano ko na naka-imbak sa dito, isipin ang, ito ay sa lokasyon na 1, 2, 3, 4, 731 00:32:23,060 --> 00:32:24,655 ito ay kung ano ang kasalukuyang sa s. 732 00:32:24,655 --> 00:32:29,220 Kaya kung sa 16 na linya, sinasabi ko ibigay sa akin isa pang variable na tinatawag na t at tindahan 733 00:32:29,220 --> 00:32:33,590 in sa ang halaga ng s, kung ano makakakuha ng naka-imbak dito ay hindi ina 734 00:32:33,590 --> 00:32:35,480 ngunit sa halip lamang sa mga numero 1. 735 00:32:35,480 --> 00:32:38,520 >> Kaya't kung tiningnan namin ng maaga sa programa na ito ngayon, kung ano ang nangyayari sa mangyayari? 736 00:32:38,520 --> 00:32:40,690 Kaya mapansin na mayroong mga function na ito maaari ka 737 00:32:40,690 --> 00:32:44,410 may ginagamit na ito ng ilang oras ang nakalipas para sa Caesar, o Vigenere, o marahil hindi sa lahat. 738 00:32:44,410 --> 00:32:48,170 Inaangkin ko sa aking printf, Ako pagpunta upang samantalahin ang mga kopya t. 739 00:32:48,170 --> 00:32:51,616 Una sa 19 linya, mabilis katinuan suriin, strlen checks ang haba ng t. 740 00:32:51,616 --> 00:32:53,740 Dahil hindi ko nais na subukan upang samantalahin ng isang bagay 741 00:32:53,740 --> 00:32:55,104 kung walang string doon. 742 00:32:55,104 --> 00:32:57,520 Kung pindutin lang user ang Enter, walang upang samantalahin ang. 743 00:32:57,520 --> 00:33:01,100 Kaya hindi ko nais na gawin ang 21 linya. 744 00:33:01,100 --> 00:33:05,758 Kaya linya 21 ay capitalize kung aling mga titik, tila, sa t? 745 00:33:05,758 --> 00:33:06,514 >> Madla: m? 746 00:33:06,514 --> 00:33:08,722 David J. MALAN: Mukhang tulad ito ng pagkopya kung saan ang isa? 747 00:33:08,722 --> 00:33:09,486 Madla: m. 748 00:33:09,486 --> 00:33:10,450 David J. MALAN: Uh, m. 749 00:33:10,450 --> 00:33:12,685 OK, kaya ang unang m, dahil notice na ako 750 00:33:12,685 --> 00:33:14,935 pagpasa sa toupper, na kung hindi mo pa nakikita ito ito ay 751 00:33:14,935 --> 00:33:16,980 lamang ng isang function na magsamantala bilang input nito. 752 00:33:16,980 --> 00:33:20,240 t bracket zero ay nangangahulugan na magbigay akin ang zero character ng t. 753 00:33:20,240 --> 00:33:22,550 At kaya kung paano gumagana ang larawan baguhin, upang maging malinaw? 754 00:33:22,550 --> 00:33:25,490 755 00:33:25,490 --> 00:33:29,160 Ano ang mga pangangailangan upang makakuha ng muling pagsusulat o nagbago may paggalang sa s at t at ina 756 00:33:29,160 --> 00:33:30,097 backslash zero. 757 00:33:30,097 --> 00:33:31,470 >> Madla: [hindi marinig] 758 00:33:31,470 --> 00:33:34,030 >> David J. MALAN: Oo, kaya ang isang ito dito lang 759 00:33:34,030 --> 00:33:40,860 pangangailangan upang makakuha ng nagbago to-- ayusin this-- pangangailangan upang makakuha ng nagbago sa isang capital m. 760 00:33:40,860 --> 00:33:44,330 Ngunit ngayon, tumingin sa ibang pagkakataon sa programa, kung print out ako 761 00:33:44,330 --> 00:33:49,800 s at t bilang linisin ko dito, panoorin kung ano ang pagpunta sa mangyayari sa pag-print out s at t. 762 00:33:49,800 --> 00:33:54,310 Kaya gumawa ng kopya-0, ./copy-0. 763 00:33:54,310 --> 00:33:57,140 Hayaan akong magpatuloy at i-type sa ina sa lahat ng lowercase. 764 00:33:57,140 --> 00:34:00,140 Pansinin ang parehong orihinal at ang mga kopya ay sa malaking titik. 765 00:34:00,140 --> 00:34:00,850 Bakit? 766 00:34:00,850 --> 00:34:04,431 Well, s at t ay parehong tumuturo sa, kung ikaw ay, ang parehong tipak ng memory. 767 00:34:04,431 --> 00:34:06,930 At lantaran, ito ay nakakakuha talagang uninteresting-- ang katunayan 768 00:34:06,930 --> 00:34:09,150 na aming ginagamit address zero dito. 769 00:34:09,150 --> 00:34:11,719 Ibig sabihin ko, hindi ko talagang pakialam kung saan ang mga bagay-bagay ay sa memorya. 770 00:34:11,719 --> 00:34:13,550 Paumanhin ako binubura ang isang maliit na masyadong marami. 771 00:34:13,550 --> 00:34:15,674 Ngunit hindi ko talagang pakialam kung saan ang mga bagay ay sa memory. 772 00:34:15,674 --> 00:34:18,510 At ito, sa katunayan kung ano programmers ay madalas na isipin ang tungkol sa 773 00:34:18,510 --> 00:34:21,080 ay na kapag makipag-usap sa iyo tungkol sa ng isang address, o isang pointer, 774 00:34:21,080 --> 00:34:22,679 na nagmamalasakit kung saan ito ay sa memorya. 775 00:34:22,679 --> 00:34:24,989 Wala akong pakialam kung ito ay sa byte isa o isang bilyon. 776 00:34:24,989 --> 00:34:27,920 Lamang ako pag-aalaga na ito variable ay epektibo 777 00:34:27,920 --> 00:34:29,620 tinuturo na tipak ng memory. 778 00:34:29,620 --> 00:34:33,350 At ito, simula ngayon, sa halip na quibble higit sa arbitrary memory address, sabihin 779 00:34:33,350 --> 00:34:36,710 simulan lamang upang gumuhit ng mga payo bilang payo, tulad ng mga arrow. 780 00:34:36,710 --> 00:34:39,340 Kaya kung ano ang mga at t ay tunay, ayon sa programang ito, 781 00:34:39,340 --> 00:34:42,130 dahil sa kung paano ko nilikha t, ito ay lamang ng dalawang hiwalay na mga variable 782 00:34:42,130 --> 00:34:43,840 tumuturo sa parehong tipak ng memory. 783 00:34:43,840 --> 00:34:45,215 At hindi namin pakialam kung nasaan sila. 784 00:34:45,215 --> 00:34:47,130 Kaya maaari naming abstract layo detalye na. 785 00:34:47,130 --> 00:34:48,780 >> Kaya paano ko ito aayusin? 786 00:34:48,780 --> 00:34:54,120 Kung gusto kong sumulat ng isang bersyon ng mga kopya program na aktwal na kopya ng string 787 00:34:54,120 --> 00:34:56,840 at capitalizes lamang ang kopya, intuitively lamang, 788 00:34:56,840 --> 00:34:59,766 kung ano ay nakuha na maging isang sahog sa aming mga solusyon? 789 00:34:59,766 --> 00:35:00,640 Madla: [hindi marinig] 790 00:35:00,640 --> 00:35:01,420 David J. MALAN: Kailangan namin ng isang kung ano? 791 00:35:01,420 --> 00:35:01,820 Madla: tipak ng memorya. 792 00:35:01,820 --> 00:35:03,280 David J. MALAN: Kailangan namin isa pang tipak ng memory, tama? 793 00:35:03,280 --> 00:35:05,360 Hindi namin alam kung paano gawin ito pa, kinakailangan. 794 00:35:05,360 --> 00:35:11,330 Ngunit ang uri ng ko kailangan ito upang mangyari kaya na ang mga orihinal na ina sa maliit na titik 795 00:35:11,330 --> 00:35:14,170 nauuwi sa na ang dagdag na tipak ng memory. 796 00:35:14,170 --> 00:35:19,770 At pagkatapos ay kapag binago ko ang kopya, ako hindi mo nais na baguhin ito kopya dito. 797 00:35:19,770 --> 00:35:26,020 Sa halip ko gusto na baguhin lamang ito kopya kaya na ang mga orihinal ay hindi magbabago. 798 00:35:26,020 --> 00:35:27,980 >> Kaya, sabihin makita kung paano namin maaaring gawin ito. 799 00:35:27,980 --> 00:35:31,800 Sa kopya-1, na kung saan ay mayroon na Nakuha ng mga komento, 800 00:35:31,800 --> 00:35:33,250 ngunit ay nagkomento sa online. 801 00:35:33,250 --> 00:35:36,710 Sa halip naming gawin ang following-- mga mga linya ay magkapareho, kumuha ako ng isang string 802 00:35:36,710 --> 00:35:38,340 at tumawag ito s. 803 00:35:38,340 --> 00:35:43,500 Ngunit tingnan natin ang isa sa aming pinaka ngayon hayaan kumplikadong ngunit ang huling ng pagiging kumplikado 804 00:35:43,500 --> 00:35:47,340 para sa mga sandali, 16 linya nang eksakto ang ginagawa nito. 805 00:35:47,340 --> 00:35:49,400 Kaya kung ang iyong umaliw sa picture drew-- namin lamang 806 00:35:49,400 --> 00:35:51,790 bigyan ako ng isang bagong tipak ng memory, kopyahin ang lahat ng bagay sa mga ito, 807 00:35:51,790 --> 00:35:53,730 sabihin makita kung paano namin translate na sa code. 808 00:35:53,730 --> 00:35:59,400 >> Kaya 16 line, sa kaliwang bahagi, nagbibigay sa akin ng char * t ang kahon na ito sa paglipas dito. 809 00:35:59,400 --> 00:36:00,230 Iyan na ang lahat ng ginagawa nito. 810 00:36:00,230 --> 00:36:03,240 Sa kanang bahagi ng kamay, m alloc, o malloc, 811 00:36:03,240 --> 00:36:06,480 ay memory laang-gugulin, sobrang pag-iisip, isang misteryosong paraan na lamang ang sinasabi 812 00:36:06,480 --> 00:36:07,640 bigyan ako ng isang tipak ng memory. 813 00:36:07,640 --> 00:36:09,290 Gaano karaming memory ang kailangan natin? 814 00:36:09,290 --> 00:36:10,910 Well, ang uri ng isang malaking expression. 815 00:36:10,910 --> 00:36:12,570 Ngunit sabihin makita kung ano ang sinasabi nito dito. 816 00:36:12,570 --> 00:36:15,940 Kaya ito, siyempre, ay magbibigay sa akin ang haba ng string ng mga s. 817 00:36:15,940 --> 00:36:19,094 So, ina ito ay dapat na kung ano? 818 00:36:19,094 --> 00:36:21,010 Kaya tatlo lamang, tama? ina ay tatlong character. 819 00:36:21,010 --> 00:36:22,830 Hindi mo na bilangin ang backslash zero kapag ikaw 820 00:36:22,830 --> 00:36:25,960 makipag-usap tungkol sa haba ng isang string na ito ay tunay na ang tao na nakikita ng mga titik. 821 00:36:25,960 --> 00:36:28,020 Kaya mom, kaya ito ay nagbibigay sa akin 3. 822 00:36:28,020 --> 00:36:31,170 Ngunit maghintay ng isang minuto, ngayon ako ang pagdaragdag 1. 823 00:36:31,170 --> 00:36:34,861 Bakit ako ay talagang nais na magtalaga ng 4 bytes at hindi lamang 3? 824 00:36:34,861 --> 00:36:35,360 Oo? 825 00:36:35,360 --> 00:36:36,910 >> Madla: Para sa mga halaga ng nagbabantay? 826 00:36:36,910 --> 00:36:38,951 >> David J. MALAN: Eksakto, para sa na halaga ng nagbabantay. 827 00:36:38,951 --> 00:36:40,840 Para sa backslash zero, Kailangan ko ng kabuuang 4 bytes. 828 00:36:40,840 --> 00:36:42,870 Kaya kailangan ko ang haba ng string plus 1. 829 00:36:42,870 --> 00:36:45,400 At pagkatapos ay para lamang sa magandang measure-- kahit na sa ganitong sistema, 830 00:36:45,400 --> 00:36:49,390 palaging ito ay magiging 1-- ko sinasabi multiply ito sa pamamagitan ng laki ng isang char. 831 00:36:49,390 --> 00:36:51,552 Ginagawang out sizeof ay isang operator sa C na 832 00:36:51,552 --> 00:36:53,260 lamang ay nagsasabi sa iyo ang bilang ng mga byte na 833 00:36:53,260 --> 00:36:54,700 na kinakailangan para sa isang tiyak na uri ng data. 834 00:36:54,700 --> 00:36:57,740 Hindi ito gumagana para sa array, kadalasan, minsan ito ay. 835 00:36:57,740 --> 00:36:59,210 Ngunit sa pangkalahatang kaso, hindi. 836 00:36:59,210 --> 00:37:02,330 Ngunit ito ay sabihin sa akin kung gaano karaming bytes isang char ay, kung saan ay lumiliko out ay palaging 1. 837 00:37:02,330 --> 00:37:04,080 Kaya ito ay tulad ng pag-multiply sa pamamagitan ng 1. 838 00:37:04,080 --> 00:37:05,900 >> Kaya super misteryosong naghahanap linya ng code. 839 00:37:05,900 --> 00:37:09,320 Ngunit ang lahat ng ito ay ay nagbibigay sa sa akin ng isang tipak ng memory. 840 00:37:09,320 --> 00:37:13,590 Ngunit ito ay tila na maging pagkopya kahit ano sa na memory? 841 00:37:13,590 --> 00:37:14,560 Hindi pa. 842 00:37:14,560 --> 00:37:22,040 At kaya kung ano ang gagawin ko sa 22 na linya, at 23, 24, 25, well, kailangan lang gawin ko ito. 843 00:37:22,040 --> 00:37:23,760 At ito ay isang uri ng lumang bagay-bagay sa paaralan ngayon. 844 00:37:23,760 --> 00:37:26,010 Ito ay tulad ng pset 2, kung saan nagpapalipat-lipat ka lang ng mga bagay 845 00:37:26,010 --> 00:37:28,620 sa paligid sa memory, o sa halip sa mga string. 846 00:37:28,620 --> 00:37:31,920 >> Kaya ako iterating mula 0 hanggang ang haba ng string s. 847 00:37:31,920 --> 00:37:37,820 At ako kopyahin ang i-ika na character in s sa i-ika na character sa t. 848 00:37:37,820 --> 00:37:41,820 At dahil ako, programmer, na ginawa Siguraduhin na maglaan ng eksaktong bilang ng maraming mga bytes 849 00:37:41,820 --> 00:37:44,600 bilang na kailangan ko, ito ay perpekto isa-sa-isang relasyon. 850 00:37:44,600 --> 00:37:47,060 At kopyahin ko mom in lowercase sa bagong isa. 851 00:37:47,060 --> 00:37:50,170 At pagkatapos ay sa wakas, gawin ko ito sa linya. 852 00:37:50,170 --> 00:37:54,637 At upang ang mga epekto ay lamang magsamantala ito t dito. 853 00:37:54,637 --> 00:37:56,470 Kaya ng maraming na maunawaan, ngunit kung isinasaalang-alang mo lamang 854 00:37:56,470 --> 00:37:58,220 kung ano ang tunay na nangyayari sa ilalim ng hood 855 00:37:58,220 --> 00:38:00,880 ay lumipat lamang ang mga ito bytes sa paligid, ang lahat na 856 00:38:00,880 --> 00:38:06,617 ay kinakailangan upang malutas ang problemang ito ay lamang na magbigay sa amin ng ganitong tipak ng memory. 857 00:38:06,617 --> 00:38:08,450 Ngayon na sa panganib ng napakalaki, hayaan mo akong ipakita 858 00:38:08,450 --> 00:38:13,200 isa pang halimbawa na halos magkapareho, maliban para sa isang ito 859 00:38:13,200 --> 00:38:14,350 linya ng code. 860 00:38:14,350 --> 00:38:18,870 Kaya ito ay ang bersyon hacker ng programang ito, kung ikaw ay. 861 00:38:18,870 --> 00:38:21,050 Ngunit distill sabihin lang ito sa kung ano ang nangyayari sa. 862 00:38:21,050 --> 00:38:28,920 Line 24 ginamit na ito t bracket ay makakakuha i s bracket i. 863 00:38:28,920 --> 00:38:33,370 Ngayon, ako ang pagbabago na ito sa ang mas misteryosong star t 864 00:38:33,370 --> 00:38:36,280 plus 1 ay katumbas ng star s plus 1. 865 00:38:36,280 --> 00:38:38,702 >> Kaya kung ano ang nangyayari at bakit mayroon kaming isang bituin character? 866 00:38:38,702 --> 00:38:41,410 Nakita namin na ang star sa bago, at ito ay ginagamit ng iba dito. 867 00:38:41,410 --> 00:38:45,490 Dati Nakita namin char *, ngayon ko na nakikita isang bituin sa simula, at iyon ang OK. 868 00:38:45,490 --> 00:38:48,190 Dahil ito ay lumiliko out namin Maaari uri ng magpakilala lamang 869 00:38:48,190 --> 00:38:50,280 mula sa mga unang simulain kung ano ang nangyayari sa. 870 00:38:50,280 --> 00:38:53,860 Kaya lamang na maging malinaw, kung ano ang s? 871 00:38:53,860 --> 00:38:55,052 Noong nakaraang linggo, ito ay isang string. 872 00:38:55,052 --> 00:38:56,260 Iyan ay hindi makasapat anymore. 873 00:38:56,260 --> 00:38:57,690 Ano ang s, partikular na? 874 00:38:57,690 --> 00:38:58,590 >> Madla: [hindi marinig] 875 00:38:58,590 --> 00:38:59,881 >> David J. MALAN: Ito ay isang pointer. 876 00:38:59,881 --> 00:39:02,610 Ito ang address ng unang character namin nai-type in. 877 00:39:02,610 --> 00:39:04,780 OK, kung ano ang t? 878 00:39:04,780 --> 00:39:05,660 >> Madla: [hindi marinig] 879 00:39:05,660 --> 00:39:07,950 >> David J. MALAN: Ang address ng unang byte 880 00:39:07,950 --> 00:39:10,490 sa t, na tipak ng memory reallocated. 881 00:39:10,490 --> 00:39:14,720 Kaya ito ay lumiliko out na kapag tayo umulit mula 0 sa hanggang sa mga string 882 00:39:14,720 --> 00:39:17,424 length-- una sa lahat, i nagsisimula off sa 0, dahil 883 00:39:17,424 --> 00:39:18,840 ng mga ito lumang paaralan para sa loop na bagay. 884 00:39:18,840 --> 00:39:22,400 Kaya lang para sa simple, sabihin ipalagay na ang unang linya ng code 885 00:39:22,400 --> 00:39:23,760 ay talagang lamang na ito, sa kanan. 886 00:39:23,760 --> 00:39:26,080 Kung i ay zero, ang pagdaragdag ng zero sa isang bagay na siguro 887 00:39:26,080 --> 00:39:27,540 ay hindi pagpunta sa magkaroon ng epekto. 888 00:39:27,540 --> 00:39:28,560 >> Kaya kung ano ang pananalitang ito? 889 00:39:28,560 --> 00:39:31,600 Ito ay lumiliko out na ang mga star operator sa kontekstong 890 00:39:31,600 --> 00:39:33,700 ay ang dereference operator, na kung saan ay lamang 891 00:39:33,700 --> 00:39:37,530 isang magarbong paraan ng sinasabi ng pumunta sa sumusunod na address. 892 00:39:37,530 --> 00:39:42,080 Kaya kung s ay ang address ng unang character sa ito tipak ng memory, 893 00:39:42,080 --> 00:39:43,630 * s paraan pumunta doon. 894 00:39:43,630 --> 00:39:45,630 At dahil na iginuhit namin ang mga larawan sa ganitong paraan, 895 00:39:45,630 --> 00:39:47,430 maaari mong gamitin ang mga sumusunod na modelo ng kaisipan. 896 00:39:47,430 --> 00:39:51,030 Kung ito ang s, at sabihin mo * s, * s uri ng tulad chutes at hagdanan 897 00:39:51,030 --> 00:39:54,540 kung maalala mo ang laro mula sa pagkabata, ay tulad ng sumusunod arrow na at pumunta 898 00:39:54,540 --> 00:39:55,570 sa address. 899 00:39:55,570 --> 00:39:57,080 >> * t ay ang parehong bagay. 900 00:39:57,080 --> 00:39:59,855 Kaya simulan dito, pumunta sa tipak nito. 901 00:39:59,855 --> 00:40:03,350 Hindi ko lang gumuhit sa screen na ito na paraan. 902 00:40:03,350 --> 00:40:05,560 * t nangangahulugan na pumunta dito. 903 00:40:05,560 --> 00:40:08,830 At pagkatapos, ang para sa loop ay lamang sinasabi ilipat ang character na ito dito, 904 00:40:08,830 --> 00:40:11,330 ilipat ang character na ito dito, ilipat ang character na ito dito. 905 00:40:11,330 --> 00:40:12,890 Ngunit kung paano ang gagawin ko na incrementation? 906 00:40:12,890 --> 00:40:15,430 Kailangan ko bang i-undo kung ano lang ang tinanggal ko. 907 00:40:15,430 --> 00:40:18,140 Ito ay kung ano ang karaniwang tinatawag na pointer aritmetika, na 908 00:40:18,140 --> 00:40:20,040 nangangahulugan math na may mga address. 909 00:40:20,040 --> 00:40:22,460 >> Kung, sa na ito para sa loop, Panatilihing ako incrementing i, 910 00:40:22,460 --> 00:40:26,880 at s ay isang address at t ay isang address, kung panatilihing ako lamang pagdaragdag ng 1, 911 00:40:26,880 --> 00:40:31,406 na nangangahulugan lamang panatilihin ang paglipat ng pasulong, at pasulong, at ipasa sa memory. 912 00:40:31,406 --> 00:40:34,030 Ito ay tulad ng Oxford Street, ang kalye na ang CS building ay sa. 913 00:40:34,030 --> 00:40:36,490 Ang CS gusali ay 33 Oxford Street. 914 00:40:36,490 --> 00:40:39,870 Kaya kung kayo ay upang gawin 33 Oxford Street plus 1, 915 00:40:39,870 --> 00:40:42,870 na nagdudulot sa iyo sa 34 Oxford Street, at pagkatapos ay 35 Oxford Street, 916 00:40:42,870 --> 00:40:46,380 pagkatapos ng 36 Oxford Street, ano man ang mga gusali talaga ay - kung sila ay umiiral. 917 00:40:46,380 --> 00:40:50,540 At ito, na ang lahat ng aming ginagawa dito sa pointer aritmetika. 918 00:40:50,540 --> 00:40:53,820 >> Kaya ito ay isang super arcane paraan ng pagpapahayag ng ating sarili. 919 00:40:53,820 --> 00:40:56,160 Ngunit ang lahat na nangyayari sa ilalim ng hood 920 00:40:56,160 --> 00:40:59,330 ay ang mga sumusunod lamang ang mga address, tulad ng mga sumusunod na ng isang mapa, kung ikaw ay, 921 00:40:59,330 --> 00:41:02,692 o sumusunod arrow tulad ng iyong iginuhit namin sa screen. 922 00:41:02,692 --> 00:41:04,910 OK, ang isang pulutong na digest. 923 00:41:04,910 --> 00:41:10,410 Anumang mga katanungan sa syntax, concepts, mga payo, malloc, o mga katulad. 924 00:41:10,410 --> 00:41:11,480 Oo, sa paglipas dito unang. 925 00:41:11,480 --> 00:41:13,755 >> Madla: Kaya kung saan na sabi * katumbas t toupper * t, 926 00:41:13,755 --> 00:41:15,575 na ang pagpunta sa sulatin sa malaking titik lahat ng mga titik o just-- 927 00:41:15,575 --> 00:41:17,283 >> David J. MALAN: Ah, talagang mahusay na tanong. 928 00:41:17,283 --> 00:41:19,805 Kaya sa ganitong linya dito, 31, ito po ba ay sulatin sa malaking titik 929 00:41:19,805 --> 00:41:21,430 ang unang titik o lahat ng mga titik. 930 00:41:21,430 --> 00:41:23,460 Kaya sabihin sagot na sa pamamagitan ng pagpunta bumalik sa unang prinsipyo. 931 00:41:23,460 --> 00:41:26,168 At sa unang prinsipyo dito ibig sabihin ko pumunta lamang sa pangunahing mga kahulugan 932 00:41:26,168 --> 00:41:27,000 ng kung ano ang kasangkot. 933 00:41:27,000 --> 00:41:29,770 Kaya toupper isang function na capitalizes isang pansamantalang trabaho. 934 00:41:29,770 --> 00:41:30,530 Iyan na ang lahat. 935 00:41:30,530 --> 00:41:36,740 * t nangangahulugan pumunta sa first-- pumunta sa address sa t. 936 00:41:36,740 --> 00:41:40,350 Kaya, sa larawan, kung ito ang tipak ng memory namin inilalaan sa malloc, 937 00:41:40,350 --> 00:41:43,310 at ito ay t, nangangahulugan * t pumunta dito. 938 00:41:43,310 --> 00:41:46,710 >> Samantala, kayo ay dumadaan na halaga, maliliit na m 939 00:41:46,710 --> 00:41:50,040 upang toupper, nakakakuha ka ng likod capital M, kung saan ang mga patong ang mga ito? 940 00:41:50,040 --> 00:41:52,410 Ikaw ay inilagay ito sa parehong lokasyon. 941 00:41:52,410 --> 00:41:55,540 At ito sa pamamagitan ng na lohika ng mga pangunahing mga kahulugan ito lamang 942 00:41:55,540 --> 00:41:58,792 capitalize ang unang titik maliban kung umulit ka sa i o isang 943 00:41:58,792 --> 00:42:02,000 para sa loop o habang loop, hindi ito ay pagpunta gumawa ng kahit ano higit sa hilingin sa iyo ng mga ito. 944 00:42:02,000 --> 00:42:02,583 Magandang tanong. 945 00:42:02,583 --> 00:42:03,237 Oo? 946 00:42:03,237 --> 00:42:05,369 >> Madla: Bakit ginagamit mo ang dereference paraan sa halip na 947 00:42:05,369 --> 00:42:05,979 array? 948 00:42:05,979 --> 00:42:07,395 >> David J. MALAN: Ah, magandang katanungan. 949 00:42:07,395 --> 00:42:10,672 Bakit nais mong gamitin ang dereference Ang pamamaraan sa halip na ang paraan ng array? 950 00:42:10,672 --> 00:42:12,130 Walang partikular na dahilan, upang maging matapat. 951 00:42:12,130 --> 00:42:15,290 At, sa katunayan, para sa mga ito uri ng halimbawa, kanan, 952 00:42:15,290 --> 00:42:17,556 Tingin lang ako nakikipagtalo sa paggawa ng mga program mas kumplikado, 953 00:42:17,556 --> 00:42:19,680 mas maraming mga mata ay glazing over, mga tao ay check out 954 00:42:19,680 --> 00:42:22,830 dahil ito mukhang super arcane, ngunit kahit na ito ay ang paggawa nito bagay. 955 00:42:22,830 --> 00:42:26,695 At ito, lantaran, ito ay isang hindi kinakailangan biswal komplikadong solusyon 956 00:42:26,695 --> 00:42:27,320 sa problema. 957 00:42:27,320 --> 00:42:29,580 >> Ito ay mahusay na disenyo pa rin, limang out ng limang para sa disenyo, 958 00:42:29,580 --> 00:42:33,140 maging ito man ay sa mga bracket pagtatanda o ang notation pointer. 959 00:42:33,140 --> 00:42:36,299 But-- lalo na kapag kami makakuha ng mamaya sa kurso sa pset 5 960 00:42:36,299 --> 00:42:39,340 kapag kami ipatupad diksyunaryo na na Nabanggit ko ang isang pares ng mga times-- 961 00:42:39,340 --> 00:42:42,300 ipapakita namin ang tunay na pag-aalaga tungkol sa memory address mababang antas 962 00:42:42,300 --> 00:42:44,140 na talagang nauunawaan natin ano ang nangyayari. 963 00:42:44,140 --> 00:42:48,300 >> Ngunit, para sa ngayon, ito ay lumiliko out na ito linya ng code dito square bracket 964 00:42:48,300 --> 00:42:49,900 hindi tunay na umiiral. 965 00:42:49,900 --> 00:42:52,230 Ang mga ito ay kung ano ang tinatawag sintaktik asukal, na kung saan 966 00:42:52,230 --> 00:42:58,390 ay lamang ng isang weirdly cool na paraan ng pagsasabi ng compiler nagpalit square bracket upang maging 967 00:42:58,390 --> 00:43:00,420 na mathematical expression. 968 00:43:00,420 --> 00:43:02,660 Kaya ito ay isang tao convention upang ma-isulat lang 969 00:43:02,660 --> 00:43:04,220 tunay user-friendly bracket ang mga ito. 970 00:43:04,220 --> 00:43:06,850 Ngunit ano ang tagatala, kumalatong, talaga ginagawa ng anumang oras 971 00:43:06,850 --> 00:43:10,970 isulat mo kung ano ang naka-highlight sa linya 24, sa ilalim ng hood ito ay talagang 972 00:43:10,970 --> 00:43:12,330 pag-convert ito sa mga ito. 973 00:43:12,330 --> 00:43:16,200 Ito lang ang mas kaaya-aya bilang isang tao magbasa at magsulat ng code tulad ng 24 linya. 974 00:43:16,200 --> 00:43:18,530 Ngunit kalaunan ang mga masyadong dumating off wheels training 975 00:43:18,530 --> 00:43:21,780 kapag ang makakakuha ng sariling kaginhawahan malakas. 976 00:43:21,780 --> 00:43:27,240 >> Lahat ng karapatan, kaya isipin pagkatapos na ito ay ang uri ng pinakamalaking problema 977 00:43:27,240 --> 00:43:27,807 namin ang bumangga sa. 978 00:43:27,807 --> 00:43:30,640 At na kung ano sparked ito buong sumpain uusap tungkol sa mga payo, 979 00:43:30,640 --> 00:43:32,340 at address, at pagkopya ng bagay. 980 00:43:32,340 --> 00:43:35,410 Ito ay dahil tripped namin sa paglipas ng ito hangal, tanga isyu, kung saan ang 981 00:43:35,410 --> 00:43:38,830 Ako ipinatupad logically-- Lauren hanggang dito sa demo at ang orange juice 982 00:43:38,830 --> 00:43:43,770 sa milk-- isang ganap na ganap algorithmically tamang function 983 00:43:43,770 --> 00:43:47,010 para sa pagpapalit ng dalawang variable ' mga halaga, ngunit ang sumpain bagay 984 00:43:47,010 --> 00:43:50,550 ay hindi magkakaroon ng anumang mga paulit-ulit, o permanenteng, epekto sa aking code. 985 00:43:50,550 --> 00:43:51,820 >> At bakit ay na? 986 00:43:51,820 --> 00:43:54,650 Sa isang maikling salita, kung bakit ito pagpapatupad ng swap 987 00:43:54,650 --> 00:43:58,740 lohikal na tama, ngunit ay walang epekto sa mga variable na lumipas na ito, 988 00:43:58,740 --> 00:44:01,119 tulad ng x at y para sa main? 989 00:44:01,119 --> 00:44:02,410 Ano ang buod ng mga isyu na ito? 990 00:44:02,410 --> 00:44:02,909 Oo? 991 00:44:02,909 --> 00:44:05,532 Madla: Dahil variable ginawa mga kopya ng variable sa pass 992 00:44:05,532 --> 00:44:06,240 sa pamamagitan ng function. 993 00:44:06,240 --> 00:44:09,060 >> David J. MALAN: Eksakto, kapag kayo na ipasa variable sa isang function, o mga argument 994 00:44:09,060 --> 00:44:11,030 sa isang function, ang mga ito ay dumaan sa pamamagitan ng kopya, na 995 00:44:11,030 --> 00:44:14,770 nangangahulugan kang makakuha ng isang kaparehong naghahanap pattern ng bits para sa parehong mga x at y, 996 00:44:14,770 --> 00:44:15,955 tinatawag na dito ang isang at b. 997 00:44:15,955 --> 00:44:18,080 At maaari mong gawin ang anuman gusto mo na may mga kopya, 998 00:44:18,080 --> 00:44:20,657 pero ang mga ito ay pagpunta sa may walang epekto sa pagtawag sa function. 999 00:44:20,657 --> 00:44:22,990 At, sa katunayan, ay hinila namin na larawan sa screen, pagpapabalik 1000 00:44:22,990 --> 00:44:25,520 huling oras, kung saan kung ikaw ay talagang isipin ang tungkol sa kung ano ang 1001 00:44:25,520 --> 00:44:28,570 nangyayari sa ilalim ng hood-- kung ito ay memory ng iyong computer, 1002 00:44:28,570 --> 00:44:31,650 at pababa dito ay ang tipak ng memorya na ginagamit para main, 1003 00:44:31,650 --> 00:44:34,020 ito ang tipak ng memorya na ginagamit para swap, 1004 00:44:34,020 --> 00:44:37,090 at kaya kahit na mga pangunahing may dalawang variable, x at y, 1005 00:44:37,090 --> 00:44:41,840 maaaring mayroon swap magkapareho naghahanap mga halaga, ang parehong na 1 at 2, 1006 00:44:41,840 --> 00:44:44,520 ngunit ang mga ito ay ganap na iba't-ibang mga tipak ng memory. 1007 00:44:44,520 --> 00:44:46,130 >> Kaya kailangan namin ng isang solusyon na ito. 1008 00:44:46,130 --> 00:44:51,580 At lantaran, ito ay tila ngayon na kami magkaroon ng isang solusyon sa problemang ito, i-right. 1009 00:44:51,580 --> 00:44:55,760 Kung tayo ngayon ay may kakayahan upang manipulahin ang mga bagay sa pamamagitan ng paraan ng mga address 1010 00:44:55,760 --> 00:44:59,310 at, uri ng mga chutes at hagdanan style, sundin ang mga arrow 1011 00:44:59,310 --> 00:45:02,820 at pumunta sa kahit saan nais naming sa memory, hindi namin mai 1012 00:45:02,820 --> 00:45:06,220 malutas ang problemang ito sa pamamagitan ng pagpasa mula sa main upang magpalitan 1013 00:45:06,220 --> 00:45:09,650 hindi ang mga halaga na gusto naming swap, ngunit intuitively lamang 1014 00:45:09,650 --> 00:45:11,630 ano ang maaari naming ipasa sa swap sa halip? 1015 00:45:11,630 --> 00:45:12,620 >> [INTERPOSING tinig] 1016 00:45:12,620 --> 00:45:15,244 >> David J. MALAN: Bakit hindi namin lamang ipasa ito ng mga address, di ba? 1017 00:45:15,244 --> 00:45:17,470 Bakit hindi namin magbigay ng swap isang kayamanan mapa, kung ikaw ay, 1018 00:45:17,470 --> 00:45:20,950 na humahantong ito sa aktwal na mga halaga ng x at y. 1019 00:45:20,950 --> 00:45:24,340 Sabihin swap, tunay na baguhin mga orihinal na bits, sa halip na 1020 00:45:24,340 --> 00:45:26,797 pagpasa lamang ng mga kopya ng mga bits. 1021 00:45:26,797 --> 00:45:29,130 At ito, sa katunayan, na kung ano ang magiging ang solusyon. 1022 00:45:29,130 --> 00:45:31,899 Ang bersyon na ito dito ay malinaw na masama at flawed. 1023 00:45:31,899 --> 00:45:35,190 At ngayon, sa unang tingin, ito lamang ang hitsura tulad nagdagdag kami ng isang bungkos ng mga bituin sapalaran 1024 00:45:35,190 --> 00:45:37,106 at tumawid sa aming mga daliri na ito ay sumulat ng libro. 1025 00:45:37,106 --> 00:45:38,460 Ngunit, ito ay ngayon sumulat ng libro. 1026 00:45:38,460 --> 00:45:40,090 >> Ngunit sabihin makita kung ano ang kahulugan ng mga bagay. 1027 00:45:40,090 --> 00:45:43,990 At, sa kasamaang-palad, ang mga may-akda ng C maaaring magkaroon ng pinili ng isa pang simbolo 1028 00:45:43,990 --> 00:45:46,380 upang gumawa ng mga ito ng isang maliit na mas malinaw, ngunit ang star operator 1029 00:45:46,380 --> 00:45:48,610 may iba't ibang kahulugan sa dalawang iba't ibang konteksto. 1030 00:45:48,610 --> 00:45:50,890 At nakakita kami ng parehong, ngunit ni makilala ipaalam. 1031 00:45:50,890 --> 00:45:55,310 >> Kaya up sa tuktok doon, kapag ako ay nagbago ng isang at b 1032 00:45:55,310 --> 00:46:00,470 mula sa pagiging int sa ang masamang bersyon sa int bituin, ang isang at b, 1033 00:46:00,470 --> 00:46:01,740 dati, ay integer. 1034 00:46:01,740 --> 00:46:05,752 Ano ang isang at b ngayon sa ang mabuti, green version? 1035 00:46:05,752 --> 00:46:06,900 Ang mga ito ay mga address. 1036 00:46:06,900 --> 00:46:09,610 Addresses ng kung ano, upang maging malinaw? 1037 00:46:09,610 --> 00:46:10,770 Address ng mga integer. 1038 00:46:10,770 --> 00:46:12,520 Kaya ang katotohanan na ako sinasabi int star paraan 1039 00:46:12,520 --> 00:46:15,440 ito ay ang address ng isang integer, partikular. 1040 00:46:15,440 --> 00:46:19,120 >> Kaya ngayon mapansin sa mga linya ng code, ibang bagay ay nagbago rin. 1041 00:46:19,120 --> 00:46:22,770 tmp nananatiling pareho, dahil ito lamang ang pansamantalang integer, 1042 00:46:22,770 --> 00:46:24,110 walang memorya magic doon. 1043 00:46:24,110 --> 00:46:26,370 Ngunit ngayon ang mga pangangailangan ng isang isang bituin. 1044 00:46:26,370 --> 00:46:28,560 At, sa katunayan, ang bawat iba pang mga pagbanggit ng isang at b, 1045 00:46:28,560 --> 00:46:31,780 mapapansin na ang lahat na pagbabago mula sa pula sa berde 1046 00:46:31,780 --> 00:46:34,209 ay na ako ng prefixing mga variable na may bituin. 1047 00:46:34,209 --> 00:46:35,750 Dahil hindi ko nais upang kopyahin ang isang at b. 1048 00:46:35,750 --> 00:46:40,350 Dahil kung kopyahin ko lang ng isang at b at magpalitan isang at b, kung ano ako talaga ng pagpapalit? 1049 00:46:40,350 --> 00:46:43,760 Addresses lang, gusto kong magpalit kung ano ang sa mga address na iyon. 1050 00:46:43,760 --> 00:46:44,860 Gusto kong pumunta doon. 1051 00:46:44,860 --> 00:46:48,000 At upang ang mga star operator sa loob ng aking function, 1052 00:46:48,000 --> 00:46:51,700 hindi sa loob ng listahan ng mga parameter, nangangahulugan kang pumunta sa mga address na iyon 1053 00:46:51,700 --> 00:46:54,490 at talagang baguhin ang mga halaga. 1054 00:46:54,490 --> 00:46:56,500 >> Kaya kung ano ang ginagawa ng mga larawan ngayon hitsura sa halip. 1055 00:46:56,500 --> 00:47:03,250 Well, kung sa halip ako makapasa in para sa isang at b hindi 1 at 2-- 1056 00:47:03,250 --> 00:47:05,790 Ako tunay na kailangan upang magdagdag ng isang iba pang kahulugan dito. 1057 00:47:05,790 --> 00:47:09,030 Kaya ipagpalagay na ito tipak ng memorya ay sa lokasyon na 10. 1058 00:47:09,030 --> 00:47:12,960 >> Ito ay sa lokasyon na 11, ngunit ito ay isang piraso ng isang pagpapagaan, 1059 00:47:12,960 --> 00:47:18,900 Ako ngayon ay may dalawang mga pagpipilian gawin ako pumasa x at y o ko ipasa ang kanilang mga address? 1060 00:47:18,900 --> 00:47:22,500 Kung pumasa ko ang kanilang mga address tulad nito, ako lamang 1061 00:47:22,500 --> 00:47:25,390 ngayon ay kailangan upang ipatupad swap bawat ang green code 1062 00:47:25,390 --> 00:47:29,080 kaya na kapag ito nakikita ng isang at kung kailan ito nakikita b, ito ay hindi lamang kopyahin ang isang at b 1063 00:47:29,080 --> 00:47:30,540 at ilipat ang gatas at orange juice. 1064 00:47:30,540 --> 00:47:32,664 Ang gatas at orange juice talinghaga break ngayon down, 1065 00:47:32,664 --> 00:47:35,060 dahil ang mga iyon ay mga tasa ng likido at hindi na mapa. 1066 00:47:35,060 --> 00:47:37,750 Sa halip na kailangan namin upang pumunta sa address na 10 at kami ay 1067 00:47:37,750 --> 00:47:42,420 kailangan upang pumunta sa address na 11, at pagkatapos ay gawin na pagpapalit logic. 1068 00:47:42,420 --> 00:47:45,580 >> Kaya ang logic ay pareho, ngunit kailangan namin ng isang bahagyang kakaibang paraan 1069 00:47:45,580 --> 00:47:47,160 ng pag-access sa mga variable. 1070 00:47:47,160 --> 00:47:52,400 At kaya sa dulo, kung ano ang programa ay may sa hitsura ay na ito. 1071 00:47:52,400 --> 00:47:56,610 Sa swap.c literal na kinopya at nailagay ang green bersyon. 1072 00:47:56,610 --> 00:47:58,450 Ngunit kailangan ko upang gumawa ng isang pagbabago. 1073 00:47:58,450 --> 00:48:00,180 Ito ay hindi sapat upang baguhin lamang swap. 1074 00:48:00,180 --> 00:48:03,830 Ano ang iba pang mga linya ng code kailangan ko bang baguhin? 1075 00:48:03,830 --> 00:48:04,330 Oo? 1076 00:48:04,330 --> 00:48:05,770 >> Madla: Saan ito ay tumatagal ng mga argumento. 1077 00:48:05,770 --> 00:48:07,603 >> David J. MALAN: Saan ito ay tumatagal ng argument nito. 1078 00:48:07,603 --> 00:48:09,985 Kaya kung mag-scroll ko up to main, ako hindi maaaring lamang pumasa sa x at y, 1079 00:48:09,985 --> 00:48:12,820 at, pangako ko, ang huling piraso ng bagong syntax ngayon. 1080 00:48:12,820 --> 00:48:17,200 Kailangan ko upang pumasa sa hindi x at y ngunit ang address ng x at y. 1081 00:48:17,200 --> 00:48:20,400 At ito ay lumiliko out, ang mga simbolo na ang mga may-akda ng C pinili 1082 00:48:20,400 --> 00:48:23,860 ay kung gumamit ka ng isang ampersand dito, hindi upang malito ang bitwise ampersand, 1083 00:48:23,860 --> 00:48:27,130 kung gumamit ka ng isang ampersand dito at isang ampersand dito, 1084 00:48:27,130 --> 00:48:29,570 ito numero kung para sa iyo, ano ang address ng x, 1085 00:48:29,570 --> 00:48:31,740 marahil ito ay 10, kung ano ang address ng y, marahil ito ay 1086 00:48:31,740 --> 00:48:35,400 11, at magbabalik sa mga nasa sa halip. 1087 00:48:35,400 --> 00:48:37,210 >> Kaya ng maraming na maunawaan ang lahat nang sabay-sabay. 1088 00:48:37,210 --> 00:48:40,190 Ngunit sabihin makita ngayong mabilis in ang aming nalalabing apat na minuto 1089 00:48:40,190 --> 00:48:42,150 kung saan maaari magkagulo bagay. 1090 00:48:42,150 --> 00:48:45,120 At bilang isang bukod, talaga Kinuha ko ang larawang ito, 1091 00:48:45,120 --> 00:48:46,920 Kinuha TF ang larawang ito ng isa o dalawang taon ang nakalipas. 1092 00:48:46,920 --> 00:48:49,190 Kaya ito ay ang likod na sulok ng Eliot Dining Hall. 1093 00:48:49,190 --> 00:48:52,310 Payo ay marahil ang hardest topic na sumasaklaw namin sa CS50. 1094 00:48:52,310 --> 00:48:54,810 Kaya kung mag-alala ka ng uri ng libis ay tulad marahil ito ay 1095 00:48:54,810 --> 00:48:56,770 higit pa sa isang hockey stick tulad nito, nauunawaan 1096 00:48:56,770 --> 00:49:00,160 uri ng kami ay papalapit sa isang rurok sa mga tuntunin ng mga haka-haka kumplikado. 1097 00:49:00,160 --> 00:49:02,300 >> At dalhin ko up ito larawan, dahil Ako ay nanunumpa 1098 00:49:02,300 --> 00:49:05,920 sa diyos, sa tag-lagas 1996, kapag ako ay kinuha CS50 sa aking pagtuturo kapwa, 1099 00:49:05,920 --> 00:49:09,620 Nishat Mehta, umupo siya sa akin pababa sa sulok ng Eliot D. Hall sa paglipas ng tanghalian, 1100 00:49:09,620 --> 00:49:12,330 o hapunan, o isang bagay na subukan na tulungan akong maunawaan payo. 1101 00:49:12,330 --> 00:49:16,520 At ito ay kung saan ako ay linggo matapos ito ay ipinakilala sa lecture kapag 1102 00:49:16,520 --> 00:49:18,170 Wakas ay naunawaan ko payo. 1103 00:49:18,170 --> 00:49:20,590 At ako ay umaasa na ito ay i-click ang malayo maaga para sa iyo. 1104 00:49:20,590 --> 00:49:23,540 Ngunit mapagtanto na ito ganap sa gitna ang mga mas sopistikadong mga paksa 1105 00:49:23,540 --> 00:49:24,420 kami ay tumingin sa. 1106 00:49:24,420 --> 00:49:25,819 Ngunit ito ay kabilang sa mga pinaka-makapangyarihang. 1107 00:49:25,819 --> 00:49:28,860 At kapag nakuha mo ito, ito ay tunay na ang lahat lamang ang pagpunta sa wakas dumating na magkasama. 1108 00:49:28,860 --> 00:49:31,460 Kaya pahinga sigurado na ito ay hindi kailangan na ang lahat ng lababo sa araw na ito. 1109 00:49:31,460 --> 00:49:32,980 >> Kaya dito ang huling programa kami ay pagpunta sa tumingin sa. 1110 00:49:32,980 --> 00:49:35,605 At kami ay pagpunta sa magtapos sa isang mabilis na tatlong minuto ng claymation 1111 00:49:35,605 --> 00:49:37,030 ginawa sa pamamagitan ng aming mga kaibigan, Nick Parlante. 1112 00:49:37,030 --> 00:49:41,440 Narito ang isang programa, na sa dalawang top Ipinahayag ng mga linya ng isang variable x at y. 1113 00:49:41,440 --> 00:49:44,780 Pareho sa mga ito ay mga address ng integer, AKA payo. 1114 00:49:44,780 --> 00:49:48,125 Pagkatapos maglaan kaming sapat memory upang mag-imbak ng isang int 1115 00:49:48,125 --> 00:49:51,344 at mag-imbak ang mga address ng na memory sa x. 1116 00:49:51,344 --> 00:49:53,260 Kaya, ito ay kahit na mas simple kaysa sa halimbawa sa bago. 1117 00:49:53,260 --> 00:49:56,100 Bigyan mo ako ng apat na bytes ng memorya, iyan ang sukat ng isang int, 1118 00:49:56,100 --> 00:49:58,000 at ilagay ang mga address na iyon sa x. 1119 00:49:58,000 --> 00:50:01,070 Dito ay nangangahulugan ng linyang ito pumunta sa address sa x 1120 00:50:01,070 --> 00:50:05,270 at ilagay ang kahulugan ng buhay, ang bilang 42 doon. 1121 00:50:05,270 --> 00:50:07,710 Ngunit ito line-alala sa akin. 1122 00:50:07,710 --> 00:50:12,620 Lagyan ng star ang y nangangahulugan pumunta sa address sa y, at ilagay ang mga kapus-palad bilang 13 doon. 1123 00:50:12,620 --> 00:50:15,780 Bakit mapanganib, sa puntong ito sa story-- kahit mabilis Sinabi 1124 00:50:15,780 --> 00:50:17,980 sa aming waning minuto here-- bakit ito masamang 1125 00:50:17,980 --> 00:50:19,660 para sa akin upang sabihin, pumunta sa address sa y? 1126 00:50:19,660 --> 00:50:21,077 >> Madla: Mayroon kang hindi [hindi marinig]. 1127 00:50:21,077 --> 00:50:22,910 David J. MALAN: Mayroon akong hindi maglagay ng kahit ano sa y. 1128 00:50:22,910 --> 00:50:25,520 Kaya kung ano ay ang halaga ng y, sa puntong ito sa kuwento? 1129 00:50:25,520 --> 00:50:26,570 Wala kaming ideya. 1130 00:50:26,570 --> 00:50:29,190 Ito ay ilang mga halaga ng basura at hindi rin alam Binky. 1131 00:50:29,190 --> 00:50:32,532 Kung kami ay maaaring magtapos sa ang tala na ito. 1132 00:50:32,532 --> 00:50:34,832 >> [Playback ng video] 1133 00:50:34,832 --> 00:50:36,500 >> -Hey, Binky, gumising. 1134 00:50:36,500 --> 00:50:39,140 Ito ay oras para sa masaya pointer. 1135 00:50:39,140 --> 00:50:40,210 >> -Ano yan? 1136 00:50:40,210 --> 00:50:41,690 Alamin ang tungkol sa mga payo? 1137 00:50:41,690 --> 00:50:43,570 Oh, mabait. 1138 00:50:43,570 --> 00:50:46,600 >> -Well, Upang makapagsimula, Hulaan ko hindi namin pagpunta sa kailangan ng ilang mga payo. 1139 00:50:46,600 --> 00:50:47,380 >> -SIGE. 1140 00:50:47,380 --> 00:50:51,120 Ang code na ito ay naglalaan ng dalawang mga payo na kung saan ay maaaring punto sa integer. 1141 00:50:51,120 --> 00:50:53,557 >> -OK, Well nakikita ko ang dalawang payo, ngunit sila 1142 00:50:53,557 --> 00:50:55,140 hindi mukhang na tumuturo sa kahit ano. 1143 00:50:55,140 --> 00:50:55,970 >> -Tama iyan. 1144 00:50:55,970 --> 00:50:58,100 Sa una payo ay hindi tumuturo sa kahit ano. 1145 00:50:58,100 --> 00:51:00,950 Ang mga bagay na itinuturo ng mga ito ay tinatawag pointees at pag-set up ang mga ito 1146 00:51:00,950 --> 00:51:02,330 ay isang hiwalay na hakbang. 1147 00:51:02,330 --> 00:51:03,210 >> -Oh, Kanan, kanan. 1148 00:51:03,210 --> 00:51:03,940 Alam ko yan. 1149 00:51:03,940 --> 00:51:05,730 Ang pointees ay hiwalay na. 1150 00:51:05,730 --> 00:51:08,310 Kaya paano mo gagastusin ang isang pointee? 1151 00:51:08,310 --> 00:51:11,960 >> -OK, Well allocates code na ito isang bagong integer pointee, 1152 00:51:11,960 --> 00:51:15,050 at ito bahagi sets x sa point na ito. 1153 00:51:15,050 --> 00:51:16,240 >> -Hey, Na mukhang mas mahusay. 1154 00:51:16,240 --> 00:51:17,743 Kaya gawin itong gawin ang isang bagay. 1155 00:51:17,743 --> 00:51:23,580 >> -OK, Kukunin ko dereference ang pointer x sa ilagay ang numero 42 sa pointee nito. 1156 00:51:23,580 --> 00:51:27,130 Para sa mga ito kahanga-hangang gawa, kakailanganin ko ang aking magic wand ng dereferencing. 1157 00:51:27,130 --> 00:51:30,200 >> -Ang Iyong magic wand ng dereferencing? 1158 00:51:30,200 --> 00:51:32,310 Uh, na, na malaki. 1159 00:51:32,310 --> 00:51:34,270 >> -Ito Ay kung ano ang hitsura ng code tulad ng. 1160 00:51:34,270 --> 00:51:35,970 Kukunin ko na lang i-set up ang bilang at- 1161 00:51:35,970 --> 00:51:37,070 >> [POP SOUND] 1162 00:51:37,070 --> 00:51:39,140 >> -Hey, Tumingin doon ito napupunta. 1163 00:51:39,140 --> 00:51:43,980 Kaya, ang mga sumusunod ang paggawa ng isang dereference sa x ang mga arrow upang ma-access pointee nito. 1164 00:51:43,980 --> 00:51:46,150 Sa kasong ito, upang mag-imbak 42 sa doon. 1165 00:51:46,150 --> 00:51:50,700 Hey, subukang gamitin ito upang mag-imbak ang numero 13 sa pamamagitan ng iba pang mga pointer, y. 1166 00:51:50,700 --> 00:51:51,840 >> -SIGE. 1167 00:51:51,840 --> 00:51:56,270 Makikita pumunta sa ibabaw ko na lang dito sa y, at makuha ang numero 13 set up. 1168 00:51:56,270 --> 00:52:00,380 At pagkatapos ay kunin ang wand ng dereferencing at just-- 1169 00:52:00,380 --> 00:52:01,646 >> [BUZZER SOUND] 1170 00:52:01,646 --> 00:52:04,080 >> -Oh, Hey na hindi gumagana. 1171 00:52:04,080 --> 00:52:06,470 Sabihing, uh, Binky, hindi ako Sa tingin dereferencing 1172 00:52:06,470 --> 00:52:10,850 y ay isang magandang ideya, dahil ang setting up ang pointee ay isang hiwalay na hakbang. 1173 00:52:10,850 --> 00:52:12,480 At Hindi sa tingin ko kailanman namin ginawa ito. 1174 00:52:12,480 --> 00:52:14,620 >> -Hmm, Good point. 1175 00:52:14,620 --> 00:52:19,810 >> -Yeah, Inilalaan namin ang pointer, y, ngunit kami ay hindi kailanman itakda ito upang tumuro sa isang pointee. 1176 00:52:19,810 --> 00:52:21,590 >> -Hmm, Napaka mapagmasid. 1177 00:52:21,590 --> 00:52:23,215 -Hey, Ikaw ay naghahanap ng magandang doon, Binky. 1178 00:52:23,215 --> 00:52:26,390 Puwede ninyo bang ayusin ito upang ito y puntos sa parehong pointee bilang x. 1179 00:52:26,390 --> 00:52:29,290 >> -Sure, Gagamitin ko ang aking magic wand ng pointer assignment. 1180 00:52:29,290 --> 00:52:31,970 >> -Ang Na magiging isang problema, tulad ng bago? 1181 00:52:31,970 --> 00:52:33,790 >> -Hindi, Ito ay hindi pindutin ang pointees. 1182 00:52:33,790 --> 00:52:35,840 Ito mga pagbabago sa isa lamang pointer na tumuturo sa parehong thing-- 1183 00:52:35,840 --> 00:52:36,465 >> [POPPING SOUND] 1184 00:52:36,465 --> 00:52:37,450 --as isa pa. 1185 00:52:37,450 --> 00:52:38,440 >> -Oh, Nakikita ko. 1186 00:52:38,440 --> 00:52:41,200 Ngayon y puntos sa parehong lugar bilang x. 1187 00:52:41,200 --> 00:52:42,950 Kaya, maghintay, ngayon y ay naayos na. 1188 00:52:42,950 --> 00:52:44,110 Ito ay may isang pointee. 1189 00:52:44,110 --> 00:52:47,779 Kaya maaari mong subukan ang wand ng dereferencing muli upang ipadala ang 13 over. 1190 00:52:47,779 --> 00:52:51,110 >> -Oh, OK, dito napupunta. 1191 00:52:51,110 --> 00:52:52,330 >> -Hey, Tumingin sa na. 1192 00:52:52,330 --> 00:52:53,570 Dereferencing Ngayon gawa sa y. 1193 00:52:53,570 --> 00:52:57,900 At dahil ang mga payo ay nagbabahagi na ang isa pointee, pareho nilang makita ang mga 13. 1194 00:52:57,900 --> 00:52:59,952 >> -Yeah, Pagbabahagi, uh, ano man. 1195 00:52:59,952 --> 00:53:01,535 Kaya, kami ay pagpunta upang lumipat ngayon lugar? 1196 00:53:01,535 --> 00:53:03,730 >> -Oh, Tumingin kami sa labas ng oras. 1197 00:53:03,730 --> 00:53:04,660 >> -But-- 1198 00:53:04,660 --> 00:53:06,520 >> -Just Tandaan ang tatlong mga patakaran pointer. 1199 00:53:06,520 --> 00:53:09,550 Number 1, ang pangunahing istraktura ay na mayroon ka ng isang pointer, 1200 00:53:09,550 --> 00:53:11,630 at ito ang mga puntos sa ibabaw sa isang pointee. 1201 00:53:11,630 --> 00:53:13,740 Ngunit ang pointer at pointee ay hiwalay na. 1202 00:53:13,740 --> 00:53:15,620 At ang mga karaniwang pagkakamali sa ay mag-set up ng isang pointer 1203 00:53:15,620 --> 00:53:18,000 ngunit upang kalimutan na bigyan ito ng isang pointee. 1204 00:53:18,000 --> 00:53:21,170 >> Number 2, pointer dereferencing nagsisimula sa pointer 1205 00:53:21,170 --> 00:53:24,020 at sumusunod sa kanyang mga arrow sa paglipas ng upang ma-access pointee nito. 1206 00:53:24,020 --> 00:53:27,815 Bilang namin ang lahat ng malaman, ito ay gagana lamang kung may ay isang pointee, na uri ng makakakuha ng bumalik 1207 00:53:27,815 --> 00:53:29,260 upang mamuno number 1. 1208 00:53:29,260 --> 00:53:31,990 >> Number 3, pointer assignment ay tumatagal ng isa pointer 1209 00:53:31,990 --> 00:53:35,330 at ang mga pagbabago na ito upang tumuro sa mga parehong pointee bilang isa pang pointer. 1210 00:53:35,330 --> 00:53:37,150 Kaya matapos ang pagtatalaga, ang dalawang mga payo 1211 00:53:37,150 --> 00:53:40,927 ay tumuturo sa parehong pointee, minsan na tinatawag na sharing. 1212 00:53:40,927 --> 00:53:42,510 At na ang lahat ng may sa ito, talaga. 1213 00:53:42,510 --> 00:53:43,130 Paalam na ngayon. 1214 00:53:43,130 --> 00:53:43,475 >> [END playback] 1215 00:53:43,475 --> 00:53:44,830 >> David J. MALAN: Iyon lang para sa CS50. 1216 00:53:44,830 --> 00:53:46,246 Salamat sa Professor Nick Parlante. 1217 00:53:46,246 --> 00:53:47,730 Kami ay makikita mo sa susunod na linggo. 1218 00:53:47,730 --> 00:53:51,706 1219 00:53:51,706 --> 00:53:56,435 >> [ELECTRONIC MUSIC nagpe-play] 1220 00:53:56,435 --> 00:57:22,775