1 00:00:00,000 --> 00:00:09,572 2 00:00:09,572 --> 00:00:12,030 Rob BOWDEN: Hi, Ako Rob Bowden, at hayaang makipag-usap tungkol sa quiz0. 3 00:00:12,030 --> 00:00:13,280 4 00:00:13,280 --> 00:00:14,545 >> Kaya, unang tanong. 5 00:00:14,545 --> 00:00:17,750 Ito ang tanong na kung saan mo na kailangan upang code sa numero ng 6 00:00:17,750 --> 00:00:21,270 127 sa binary na mga bombilya. 7 00:00:21,270 --> 00:00:23,550 Kung gusto mo, maaari mo gawin ang regular na conversion 8 00:00:23,550 --> 00:00:25,950 mula bi-- o, mula sa decimal sa binary. 9 00:00:25,950 --> 00:00:28,300 Ngunit malamang na nangyayari upang kumuha ng maraming oras. 10 00:00:28,300 --> 00:00:31,750 Ibig kong sabihin, maaari mong malaman na, OK, 1 ay nasa doon, 2 ay nasa doon, 11 00:00:31,750 --> 00:00:33,650 4 ay nasa doon, 8 ay nasa doon. 12 00:00:33,650 --> 00:00:39,280 Mas madaling paraan, 127 ay 128 minus isa. 13 00:00:39,280 --> 00:00:42,013 Na pinakakaliwa ilaw bombilya ay ang 128-bit. 14 00:00:42,013 --> 00:00:43,490 15 00:00:43,490 --> 00:00:47,860 Kaya 127 ay talagang lahat lang sa iba pang mga bombilya ng ilaw, 16 00:00:47,860 --> 00:00:51,420 dahil iyon ang pinakakaliwa liwanag bombilya minus 1. 17 00:00:51,420 --> 00:00:52,800 Iyon lang para sa tanong na iyon. 18 00:00:52,800 --> 00:00:54,060 >> Tanong isa. 19 00:00:54,060 --> 00:00:56,710 Kaya may 3 piraso maaari mong kinakatawan 8 natatanging mga halaga. 20 00:00:56,710 --> 00:01:01,000 Bakit, pagkatapos, ay 7 pinakamalaking hindi-negatibong decimal integer maaari mong kumatawan? 21 00:01:01,000 --> 00:01:04,050 Well, kung kaya namin lamang kinakatawan 8 natatanging mga halaga, 22 00:01:04,050 --> 00:01:07,430 pagkatapos ay kung ano ang namin ang pagpunta sa maging kumakatawan ay 0 sa pamamagitan ng 7. 23 00:01:07,430 --> 00:01:08,745 0 tumatagal ng hanggang ang isa sa mga halaga. 24 00:01:08,745 --> 00:01:09,980 25 00:01:09,980 --> 00:01:11,190 >> Tanong dalawa. 26 00:01:11,190 --> 00:01:14,610 Sa n bits, kung gaano karaming mga natatanging mga halaga na maaari mong kumatawan? 27 00:01:14,610 --> 00:01:19,080 Kaya, na may n bits, mayroon kang 2 mga posibleng halaga para sa bawat bit. 28 00:01:19,080 --> 00:01:22,300 Kaya mayroon kaming 2 posibleng halaga para sa ang unang bit, 2 posibleng halaga 29 00:01:22,300 --> 00:01:24,450 para sa pangalawang, 2 posible para sa ikatlong. 30 00:01:24,450 --> 00:01:28,730 At kaya na 2 beses 2 beses 2, at sa huli ang sagot ay 2 sa n. 31 00:01:28,730 --> 00:01:30,010 32 00:01:30,010 --> 00:01:31,100 >> Tanong tatlo. 33 00:01:31,100 --> 00:01:33,450 Ano ang 0x50 sa binary? 34 00:01:33,450 --> 00:01:39,490 Kaya tandaan na hexadecimal ay isang napaka prangka conversion sa binary. 35 00:01:39,490 --> 00:01:43,180 Kaya dito, kailangan lang namin upang tumingin sa ang 5 at ang 0-iisa. 36 00:01:43,180 --> 00:01:45,110 Kaya kung ano ang 5 sa binary? 37 00:01:45,110 --> 00:01:48,400 0101, iyon ang 1 sandali at ang 4 na bit. 38 00:01:48,400 --> 00:01:49,900 Ano ang 0 sa binary? 39 00:01:49,900 --> 00:01:50,520 Hindi nakakalito. 40 00:01:50,520 --> 00:01:52,180 0000. 41 00:01:52,180 --> 00:01:54,970 Kaya ilagay lamang ang mga ito nang magkasama, at iyon ang buong numero sa binary. 42 00:01:54,970 --> 00:01:57,640 01,010,000. 43 00:01:57,640 --> 00:02:00,439 At kung gusto mong ma mo gumaya na pinakakaliwa zero. 44 00:02:00,439 --> 00:02:01,105 Ito ay kaugnay. 45 00:02:01,105 --> 00:02:02,920 46 00:02:02,920 --> 00:02:05,733 >> Kaya pagkatapos ay Bilang kahalili, ano ang 0x50 sa decimal? 47 00:02:05,733 --> 00:02:08,649 Kung gusto mo, could-- sa iyo kung ikaw ay higit pa kumportable sa binary, 48 00:02:08,649 --> 00:02:11,340 maaari mong gawin na binary sagot at i-convert na sa decimal. 49 00:02:11,340 --> 00:02:13,870 O maaari naming tandaan lamang na hexadecimal. 50 00:02:13,870 --> 00:02:21,140 Kaya na 0 ay nasa ika-0 lugar, at ang 5 ay nasa 16 sa unang lugar. 51 00:02:21,140 --> 00:02:25,990 Kaya dito, mayroon kaming 5 beses 16 sa una, kasama ang 0 beses 16 sa zero, 52 00:02:25,990 --> 00:02:27,520 ay 80. 53 00:02:27,520 --> 00:02:29,710 At kapag tiningnan mo ang mga pamagat sa tanong na, 54 00:02:29,710 --> 00:02:32,920 ito ay CS 80, na kung saan ay uri ng isang Pahiwatig na ang kasagutan sa problemang ito. 55 00:02:32,920 --> 00:02:34,460 56 00:02:34,460 --> 00:02:35,420 >> Tanong lima. 57 00:02:35,420 --> 00:02:40,320 Mayroon kaming ito sa simula script, na kung saan ay paulit-ulit na 4 na beses peanut butter halaya. 58 00:02:40,320 --> 00:02:42,800 Kaya kung paano ginagawa namin ngayon ang code na nasa C? 59 00:02:42,800 --> 00:02:47,730 Well, mayroon kaming here-- ang bahagi na naka-bold ay ang tanging bahagi na kayo ay nagkaroon na ipapatupad. 60 00:02:47,730 --> 00:02:51,950 Kaya mayroon kaming 4 na loop na looping 4 beses, printf-ING peanut butter halaya, 61 00:02:51,950 --> 00:02:53,910 gamit ang mga bagong linya ng itinatanong ang mga problema para sa. 62 00:02:53,910 --> 00:02:55,250 63 00:02:55,250 --> 00:02:57,490 >> Tanong anim, isa pang problema sa simula. 64 00:02:57,490 --> 00:03:00,210 Nakita namin na hindi namin sa isang walang hanggan loop. 65 00:03:00,210 --> 00:03:05,000 Sinasabi namin ang variable na i at pagkatapos ay i incrementing ng 1. 66 00:03:05,000 --> 00:03:09,580 Ngayon gusto naming gawin iyon sa C. Mayroon ding mga maraming paraan ay maaaring tapos na namin ito. 67 00:03:09,580 --> 00:03:12,840 Narito ang nangyari namin sa code ng magpakailanman loop bilang isang habang (true). 68 00:03:12,840 --> 00:03:16,600 Kaya ipinahahayag namin ang variable i, lamang tulad namin ay may mga variable i sa simula. 69 00:03:16,600 --> 00:03:21,950 Ipinahahayag ang variable i, at magpakailanman habang (true), sabihin namin ang mga variable i. 70 00:03:21,950 --> 00:03:25,260 Kaya printf% i-- o maaaring nagamit mo na ang% d. 71 00:03:25,260 --> 00:03:27,985 Sabihin namin na variable na iyon, at pagkatapos ay dinagdagan ito, i ++. 72 00:03:27,985 --> 00:03:29,560 73 00:03:29,560 --> 00:03:30,830 >> Tanong pitong. 74 00:03:30,830 --> 00:03:35,560 Ngayon gusto naming gawin ang isang bagay na halos kapareho sa Mario tuldok c mula sa problema magtakda ng isang. 75 00:03:35,560 --> 00:03:39,110 Gusto naming upang i-print ang mga hashtag, nais naming mag-print ng limang 76 00:03:39,110 --> 00:03:40,700 sa pamamagitan ng tatlong parihaba ng mga hash. 77 00:03:40,700 --> 00:03:41,770 78 00:03:41,770 --> 00:03:43,162 Kaya paano namin pagpunta sa gawin iyon? 79 00:03:43,162 --> 00:03:45,370 Well, bigyan ka namin ng isang buong bungkos ng code, at mo lamang 80 00:03:45,370 --> 00:03:47,560 kailangang punan ang mga naka-print na grid function. 81 00:03:47,560 --> 00:03:49,540 >> Kaya ano ang PrintGrid hitsura? 82 00:03:49,540 --> 00:03:51,480 Well ikaw ay lagpas sa lapad at taas. 83 00:03:51,480 --> 00:03:53,520 Kaya mayroon kaming isang panlabas 4 loop, na looping 84 00:03:53,520 --> 00:03:57,650 sa ibabaw ng lahat ng mga hilera ng mga ito grid na gusto naming upang i-print out. 85 00:03:57,650 --> 00:04:01,250 Pagkatapos ay mayroon kaming ang ilibing-Nested 4 loop, na pag-print sa ibabaw ng bawat haligi. 86 00:04:01,250 --> 00:04:06,210 Kaya para sa bawat hilera, i-print namin para sa bawat haligi, ang isang solong hash. 87 00:04:06,210 --> 00:04:10,045 Pagkatapos sa dulo ng hilera-print kami ng isang isang bagong linya upang pumunta sa susunod na hilera. 88 00:04:10,045 --> 00:04:11,420 At na ito para sa buong grid. 89 00:04:11,420 --> 00:04:12,810 90 00:04:12,810 --> 00:04:13,675 >> Tanong walong. 91 00:04:13,675 --> 00:04:17,170 Ang isang pag-andar tulad ng PrintGrid ay sinabi sa magkaroon ng epekto, ngunit hindi sa isang pabalik 92 00:04:17,170 --> 00:04:17,670 halaga. 93 00:04:17,670 --> 00:04:19,209 Ipaliwanag ang pagkakaiba. 94 00:04:19,209 --> 00:04:23,080 Kaya ito ay nakasalalay sa iyo pagtanda kung ano ang isang side effect ay. 95 00:04:23,080 --> 00:04:25,180 Well, sa isang pabalik na value-- alam namin PrintGrid hindi 96 00:04:25,180 --> 00:04:28,180 may return halaga, dahil karapatan dito sinasabi nito walang bisa. 97 00:04:28,180 --> 00:04:31,150 Kaya kahit ano na nagbabalik ng walang silbi Hindi talaga nagbalik ng anuman. 98 00:04:31,150 --> 00:04:32,200 99 00:04:32,200 --> 00:04:33,620 Kaya kung ano ang epekto? 100 00:04:33,620 --> 00:04:36,620 Well, na epekto ay anumang bagay na uri ng magpapatuloy 101 00:04:36,620 --> 00:04:39,500 pagkatapos ng pag-andar na hindi ibinalik lamang, 102 00:04:39,500 --> 00:04:41,340 at ito ay hindi lamang mula sa input. 103 00:04:41,340 --> 00:04:44,970 >> Kaya, halimbawa, maaari naming baguhin ang isang pandaigdigang variable. 104 00:04:44,970 --> 00:04:46,590 Iyon ay magiging isang side effect. 105 00:04:46,590 --> 00:04:49,000 Sa partikular na kasong ito, ang isang Napakahalaga na epekto 106 00:04:49,000 --> 00:04:51,070 ay pag-print sa screen. 107 00:04:51,070 --> 00:04:53,110 Kaya na ay isang pangalawang epekto na may PrintGrid. 108 00:04:53,110 --> 00:04:54,980 -Print namin ang mga bagay na ito sa screen. 109 00:04:54,980 --> 00:04:56,370 At maaari mong isipin na bilang na epekto, 110 00:04:56,370 --> 00:04:58,690 dahil iyon ang isang bagay na nagpatuloy pagkatapos na magwakas ang function na ito. 111 00:04:58,690 --> 00:05:01,481 Iyon ang isang bagay sa labas ng saklaw ng function na ito na ganap 112 00:05:01,481 --> 00:05:03,380 ay nagbago, ang mga nilalaman ng screen. 113 00:05:03,380 --> 00:05:05,200 114 00:05:05,200 --> 00:05:05,839 >> Tanong siyam. 115 00:05:05,839 --> 00:05:07,880 Isaalang-alang ang programa sa ibaba, na kung saan ang mga numero ng linya 116 00:05:07,880 --> 00:05:09,740 naidagdag para sa ang alang-alang ng talakayan. 117 00:05:09,740 --> 00:05:13,480 Kaya sa programang ito ay namin lamang pagtawag GetString, pag-imbak nito 118 00:05:13,480 --> 00:05:16,220 sa variable na mga ito, at pagkatapos ay pag-print ng mga na variable. 119 00:05:16,220 --> 00:05:16,720 OK. 120 00:05:16,720 --> 00:05:19,090 Kaya kung bakit linya ng isa ay kasalukuyan. 121 00:05:19,090 --> 00:05:20,920 #include cs50 tuldok h. 122 00:05:20,920 --> 00:05:23,820 Bakit kailangan namin upang #include cs50 tuldok h? 123 00:05:23,820 --> 00:05:26,180 Well namin ang pagtawag ng GetString function, 124 00:05:26,180 --> 00:05:28,840 at GetString ay tinukoy sa cs50 library. 125 00:05:28,840 --> 00:05:31,600 Kaya kung hindi namin ginawa magkaroon #include cs50 tuldok h, 126 00:05:31,600 --> 00:05:35,760 Gusto namin na implicit deklarasyon ng error GetString function na 127 00:05:35,760 --> 00:05:36,840 mula sa compiler. 128 00:05:36,840 --> 00:05:40,110 Kaya kailangan namin upang isama ang library-- kailangan naming isama ang mga header ng file, 129 00:05:40,110 --> 00:05:42,870 o iba pang mga compiler ay hindi makilala na ang GetString umiiral na. 130 00:05:42,870 --> 00:05:44,380 131 00:05:44,380 --> 00:05:46,140 >> Ipaliwanag kung bakit ang dalawang linya ay naroroon. 132 00:05:46,140 --> 00:05:47,890 Kaya karaniwang IO tuldok h. 133 00:05:47,890 --> 00:05:50,430 Ito ay eksaktong kapareho bilang ang nakaraang problema, 134 00:05:50,430 --> 00:05:53,310 maliban sa halip ng pagharap sa GetString, pinag-uusapan natin ang tungkol sa printf. 135 00:05:53,310 --> 00:05:56,654 Kaya kung hindi namin sinabi kailangan namin upang isama ang standard IO tuldok h, 136 00:05:56,654 --> 00:05:58,820 pagkatapos ay hindi namin magagawang gamitin ang printf function, 137 00:05:58,820 --> 00:06:00,653 dahil ang compiler hindi alam ang tungkol dito. 138 00:06:00,653 --> 00:06:01,750 139 00:06:01,750 --> 00:06:05,260 >> Why-- ano ang kabuluhan magpawalang-bisa ng sa apat na linya? 140 00:06:05,260 --> 00:06:08,010 Kaya dito mayroon kaming int pangunahing (walang bisa). 141 00:06:08,010 --> 00:06:10,600 Na lamang na nagsasabi na tayo ay hindi nakakakuha ng anumang mga command line 142 00:06:10,600 --> 00:06:12,280 argumento sa main. 143 00:06:12,280 --> 00:06:17,390 Tandaan na maaaring namin sabihin int pangunahing int argc string argv bracket. 144 00:06:17,390 --> 00:06:20,400 Kaya dito sabihin lang namin walang bisa sasabihin namin ay binabalewala ang mga argument ng linya ng command. 145 00:06:20,400 --> 00:06:21,840 146 00:06:21,840 --> 00:06:25,225 >> Ipaliwanag, na may paggalang sa memorya, nang eksakto kung ano ang GetString sa linya ng anim na babalik. 147 00:06:25,225 --> 00:06:27,040 148 00:06:27,040 --> 00:06:31,640 GetString ay pagbabalik ng isang bloke ng memorya, ang isang hanay ng mga character. 149 00:06:31,640 --> 00:06:34,870 Talaga Ito ay pagbabalik ng isang pointer sa unang character. 150 00:06:34,870 --> 00:06:37,170 Tandaan na isang string ay isang pansamantalang trabaho star. 151 00:06:37,170 --> 00:06:41,360 Kaya s ay isang pointer sa unang character sa anumang mga string ay 152 00:06:41,360 --> 00:06:43,510 na ang gumagamit ay ipinasok sa keyboard. 153 00:06:43,510 --> 00:06:47,070 At na memorya ang mangyayari sa ma-malloced, kaya na memory ay nasa kimpal. 154 00:06:47,070 --> 00:06:49,080 155 00:06:49,080 --> 00:06:50,450 >> Tanong 13. 156 00:06:50,450 --> 00:06:51,960 Isaalang-alang ang programa sa ibaba. 157 00:06:51,960 --> 00:06:55,579 Kaya ang lahat ng mga programang ito ay ginagawa ay printf-ING 1 hinati sa 10. 158 00:06:55,579 --> 00:06:57,370 Kaya kapag pinagsama-sama at pinaandar, ang program na ito 159 00:06:57,370 --> 00:07:01,170 output 0.0, kahit na 1 hinati sa 10 ay 0.1. 160 00:07:01,170 --> 00:07:02,970 Kaya bakit ito 0.0? 161 00:07:02,970 --> 00:07:05,510 Well, ito ay dahil sa ng dibisyon na integer. 162 00:07:05,510 --> 00:07:08,580 Kaya 1 ay isang integer, 10 ay isang integer. 163 00:07:08,580 --> 00:07:11,980 Kaya 1 na hinati sa pamamagitan ng 10, ang lahat ng bagay ay itinuturing na integer, 164 00:07:11,980 --> 00:07:16,380 at sa C, kapag ginagawa namin integer division, pungusan namin ang anumang decimal point. 165 00:07:16,380 --> 00:07:19,590 Kaya 1 hinati sa 10 ay 0, at pagkatapos naming sinusubukang 166 00:07:19,590 --> 00:07:24,410 mag-print na bilang ng float, kaya zero-print bilang isang float ay 0.0. 167 00:07:24,410 --> 00:07:27,400 At iyon ang dahilan kung bakit makuha namin 0.0. 168 00:07:27,400 --> 00:07:28,940 >> Isaalang-alang ang programa sa ibaba. 169 00:07:28,940 --> 00:07:31,280 Ngayon kami ay pag-print ng 0.1. 170 00:07:31,280 --> 00:07:34,280 Kaya walang integer division, lamang kami sa pag-print 0.1, 171 00:07:34,280 --> 00:07:37,100 ngunit kami ay pag-print ito sa 28 decimal lugar. 172 00:07:37,100 --> 00:07:41,810 At makuha namin ito 0.1000, ang maramihang ng mga zero, 5 5 5, blah blah blah. 173 00:07:41,810 --> 00:07:45,495 Kaya ang tanong dito ay kung bakit ang ginagawa nito -print na, sa halip na eksaktong 0.1? 174 00:07:45,495 --> 00:07:46,620 175 00:07:46,620 --> 00:07:49,640 >> Kaya ang dahilan dito ay ngayon lumulutang na tuldok imprecision. 176 00:07:49,640 --> 00:07:53,410 Tandaan na ang isang float ay bits 32 lamang. 177 00:07:53,410 --> 00:07:57,540 Kaya maaari lamang naming kumakatawan sa isang tiyak na numero ng ng mga lumulutang na halaga ng point na may mga 32 178 00:07:57,540 --> 00:07:58,560 bits. 179 00:07:58,560 --> 00:08:01,760 Doon na rin ang sa huli ay walang katapusan maraming mga lumulutang na halaga ng point, 180 00:08:01,760 --> 00:08:04,940 at mayroong walang katapusan maraming mga lumulutang mga halaga ng point sa pagitan ng 0 at 1, 181 00:08:04,940 --> 00:08:07,860 at kami ay malinaw naman magagawang kinakatawan ng higit pang mga halaga kaysa sa na. 182 00:08:07,860 --> 00:08:13,230 Kaya mayroon kaming upang gumawa ng mga sakripisyo upang magagawa upang kumatawan sa karamihan ng mga halaga. 183 00:08:13,230 --> 00:08:16,960 >> Kaya ng halaga tulad ng 0.1, sa malas Hindi namin maaaring kumatawan na eksaktong. 184 00:08:16,960 --> 00:08:22,500 Kaya sa halip na kumakatawan sa 0.1 gawin namin ang pinakamahusay na maaari naming kumatawan ito 0.100000 5 5 185 00:08:22,500 --> 00:08:23,260 5. 186 00:08:23,260 --> 00:08:26,306 At na malapit sa katangian, ngunit para sa maraming mga application 187 00:08:26,306 --> 00:08:28,430 mayroon kang mag-alala tungkol sa lumulutang na tuldok imprecision, 188 00:08:28,430 --> 00:08:30,930 dahil kami lamang ay hindi maaaring kumatawan lahat ng mga lumulutang na eksaktong punto. 189 00:08:30,930 --> 00:08:32,500 190 00:08:32,500 --> 00:08:33,380 >> Tanong 15. 191 00:08:33,380 --> 00:08:34,679 Isaalang-alang sa ibaba ang code. 192 00:08:34,679 --> 00:08:36,630 Lamang kami sa pag-print 1 plus 1. 193 00:08:36,630 --> 00:08:38,289 Kaya walang kakaibang ugali dito. 194 00:08:38,289 --> 00:08:41,780 1 plus 1 sinusuri sa 2, at pagkatapos ay naka pag-print namin iyon. 195 00:08:41,780 --> 00:08:42,789 Ito lamang mga Kopya 2. 196 00:08:42,789 --> 00:08:43,850 197 00:08:43,850 --> 00:08:44,700 >> Tanong 16. 198 00:08:44,700 --> 00:08:49,450 Ngayon kami ay pag-print ng character 1 kasama ang character na 1. 199 00:08:49,450 --> 00:08:52,110 Kaya bakit gumagana ito ay hindi i-print ang parehong bagay? 200 00:08:52,110 --> 00:08:57,680 Well ang character 1 kasama ang character na 1, ang character 1 ay may ASCII halaga 49. 201 00:08:57,680 --> 00:09:04,840 Kaya ito ay talagang sinasabi ng 49 plus 49, at sa huli ito ay pagpunta sa i-print ang 98. 202 00:09:04,840 --> 00:09:06,130 Kaya ito ay hindi i-print ang 2. 203 00:09:06,130 --> 00:09:08,070 204 00:09:08,070 --> 00:09:09,271 >> Tanong 17. 205 00:09:09,271 --> 00:09:11,520 Kumpletuhin ang pagpapatupad ng kakaiba sa ibaba sa paraang 206 00:09:11,520 --> 00:09:14,615 na ang pag-andar nagbabalik totoo kung n ay kakaiba at hindi totoo kung n ay kahit. 207 00:09:14,615 --> 00:09:16,710 208 00:09:16,710 --> 00:09:19,330 Ito ay isang mahusay na layunin para sa mga mod operator. 209 00:09:19,330 --> 00:09:24,530 Kaya isinasaalang-alang namin ang aming mga argumento n, kung n mod 2 ay katumbas ng 1, na rin 210 00:09:24,530 --> 00:09:28,030 ay nangangahulugan na na hinati n sa pamamagitan ng 2 ay may natitira. 211 00:09:28,030 --> 00:09:33,270 Kung n hinati sa 2 ay may natitira, na ay nangangahulugan na ang n ay kakaiba, kaya bumalik kami totoo. 212 00:09:33,270 --> 00:09:34,910 Iba Pa bumalik kami false. 213 00:09:34,910 --> 00:09:39,070 Maaari mo ring nagawa n mod 2 equals zero, return false, iba pa nagbabalik ng tunay. 214 00:09:39,070 --> 00:09:41,600 215 00:09:41,600 --> 00:09:43,640 >> Isaalang-alang ang recursive function na sa ibaba. 216 00:09:43,640 --> 00:09:46,920 Kaya kung n ay mas mababa sa o katumbas ng 1, bumalik 1, 217 00:09:46,920 --> 00:09:50,430 iba return n beses f ng n minus 1. 218 00:09:50,430 --> 00:09:52,556 Kaya kung ano ang function na ito? 219 00:09:52,556 --> 00:09:54,305 Well, ito ay isa lamang sa factorial function. 220 00:09:54,305 --> 00:09:55,410 221 00:09:55,410 --> 00:09:57,405 Ito ay mahusay na kinakatawan bilang n factorial. 222 00:09:57,405 --> 00:09:58,720 223 00:09:58,720 --> 00:10:02,310 >> Kaya tanong 19 ngayon, nais naming tumagal recursive function na ito. 224 00:10:02,310 --> 00:10:04,530 Gusto naming gawin itong umuulit. 225 00:10:04,530 --> 00:10:05,874 Kaya paano namin gawin iyon? 226 00:10:05,874 --> 00:10:07,790 Well para sa mga tauhan solusyon, at muli naroon 227 00:10:07,790 --> 00:10:11,090 maraming paraan maaari mo pa na iyon, sisimulan namin ang may ganitong produkto int 228 00:10:11,090 --> 00:10:11,812 ay katumbas ng 1. 229 00:10:11,812 --> 00:10:13,520 At sa buong ito para sa loop, kami ay pagpunta 230 00:10:13,520 --> 00:10:17,590 na-multiply ng produkto upang sa huli napupunta sa ganap na factorial. 231 00:10:17,590 --> 00:10:21,870 Kaya para sa int i katumbas 2, i ay mas mababa sa o katumbas ng n, i ++. 232 00:10:21,870 --> 00:10:24,130 >> Maaaring nag-iisip ka kung bakit i ay katumbas ng 2. 233 00:10:24,130 --> 00:10:28,380 Well, tandaan na dito mayroon kaming upang tiyakin na ang aming base kaso ay tama. 234 00:10:28,380 --> 00:10:32,180 Kaya kung n ay mas mababa sa o katumbas sa 1, lang namin bumabalik 1. 235 00:10:32,180 --> 00:10:34,830 Kaya sa paglipas dito, sisimulan namin sa katumbas i 2. 236 00:10:34,830 --> 00:10:39,090 Well kung i ay 1, pagkatapos ay i-the-- o kung n ay 1, pagkatapos ay ang para sa loop 237 00:10:39,090 --> 00:10:40,600 hindi maisagawa sa lahat. 238 00:10:40,600 --> 00:10:43,190 At kaya kami ay lamang balik produkto, na kung saan ay 1. 239 00:10:43,190 --> 00:10:45,920 Gayundin, kung ang n ay anumang bagay na mas mababa sa 1-- 240 00:10:45,920 --> 00:10:49,290 parang ito ay 0, negatibong 1, whatever-- Gusto pa rin ng pagbalik namin 1, 241 00:10:49,290 --> 00:10:52,260 na kung saan ay kung ano mismo ang recursive bersyon ay ginagawa. 242 00:10:52,260 --> 00:10:54,660 >> Ngayon, kung n ay mas malaki sa 1, pagkatapos kami ay pagpunta 243 00:10:54,660 --> 00:10:56,550 gawin nang hindi bababa sa isa pag-ulit ng loop. 244 00:10:56,550 --> 00:11:00,630 Kaya sabihin nating n 5, pagkatapos kami ay pagpunta sa gawin beses produkto ay katumbas ng 2. 245 00:11:00,630 --> 00:11:02,165 Kaya ngayon produkto ay 2. 246 00:11:02,165 --> 00:11:04,040 Ngayon kami ay pagpunta sa gawin beses na produkto ay katumbas ng 3. 247 00:11:04,040 --> 00:11:04,690 Ngayon ay 6. 248 00:11:04,690 --> 00:11:07,500 Beses ng produkto ay katumbas ng 4 na, ngayon, ito ay 24. 249 00:11:07,500 --> 00:11:10,420 Beses ng produkto ay katumbas ng 5, ngayon ito ay 120. 250 00:11:10,420 --> 00:11:16,730 Kaya pagkatapos ay sa huli, kami ay bumabalik 120, na kung saan ay tama 5 factorial. 251 00:11:16,730 --> 00:11:17,510 >> Tanong 20. 252 00:11:17,510 --> 00:11:22,480 Ito ang isa kung saan mayroon kang upang punan ang sa talahanayan sa anumang ibinigay na algorithm, 253 00:11:22,480 --> 00:11:25,735 anumang bagay na iyong nakita namin, na umaangkop ang mga algorithmic run 254 00:11:25,735 --> 00:11:28,060 mga oras ang mga asymptotic beses run. 255 00:11:28,060 --> 00:11:33,270 Kaya kung ano ay isang algorithm na ay wakas na 1, ngunit malaking O ng n? 256 00:11:33,270 --> 00:11:35,970 Kaya maaaring walang katapusan doon maraming mga sagot dito. 257 00:11:35,970 --> 00:11:39,790 Ang isa na nasaksihan namin marahil pinaka madalas lamang ang linear paghahanap. 258 00:11:39,790 --> 00:11:42,050 >> Kaya sa pinakamahusay na kaso Ang sitwasyong, ang item kami 259 00:11:42,050 --> 00:11:44,050 hinahanap ay sa simula ng listahan 260 00:11:44,050 --> 00:11:47,400 at sa gayon sa katapusan ng 1 hakbang, ang unang bagay na namin ang, 261 00:11:47,400 --> 00:11:49,740 namin bumalik lang agad na nakita namin ang item na ito. 262 00:11:49,740 --> 00:11:52,189 Sa pinakamasamang sitwasyon kaso, ang item ay sa dulo, 263 00:11:52,189 --> 00:11:53,730 o ang item ay wala sa listahan sa lahat. 264 00:11:53,730 --> 00:11:56,700 Kaya mayroon kaming upang maghanap ang buong listahan, ang lahat ng n 265 00:11:56,700 --> 00:11:58,480 mga elemento, at iyon ang dahilan kung bakit ito o ng n. 266 00:11:58,480 --> 00:11:59,670 267 00:11:59,670 --> 00:12:04,880 >> Kaya ngayon ito ay isang bagay na kapwa wakas ng n log n, at malaking O ng n log n. 268 00:12:04,880 --> 00:12:08,650 Well ang pinaka-may-katuturang mga bagay nasaksihan namin dito ay sumanib-uri-uriin. 269 00:12:08,650 --> 00:12:12,950 Kaya sumanib-uri-uriin, tandaan, ay huli theta 270 00:12:12,950 --> 00:12:16,920 ng n log n, kung saan theta ay tinukoy kung ang parehong wakas at malaking O ay pareho. 271 00:12:16,920 --> 00:12:17,580 Parehong n log n. 272 00:12:17,580 --> 00:12:18,690 273 00:12:18,690 --> 00:12:21,970 >> Ano ang isang bagay na wakas ng n, at O ​​ng n nakalapat? 274 00:12:21,970 --> 00:12:23,990 Well, muli naroon maramihang mga posibleng sagot. 275 00:12:23,990 --> 00:12:26,440 Narito mangyari naming sabihin bubble-uuri. 276 00:12:26,440 --> 00:12:28,840 -Uri-uriin Insertion ay din gumana dito. 277 00:12:28,840 --> 00:12:31,400 Tandaan na bubble-uuri-uri May-optimize na kung saan, 278 00:12:31,400 --> 00:12:34,630 kung ikaw ay maaaring makakuha ng sa pamamagitan ng buong listahan 279 00:12:34,630 --> 00:12:37,402 hindi nangangailangan na gawin anumang mga swaps, pagkatapos, mahusay, 280 00:12:37,402 --> 00:12:40,110 Maaari naming agad na bumalik na ang listahan ay pinagsunod-sunod sa magsimula sa. 281 00:12:40,110 --> 00:12:43,185 Kaya sa pinakamahusay na sitwasyon kaso, ito ay wakas lamang ng n. 282 00:12:43,185 --> 00:12:45,960 Kung ito ay hindi isang mahusay lamang pinagsunod-sunod listahan upang magsimula sa, 283 00:12:45,960 --> 00:12:48,270 pagkatapos kami ay may O ng n nakalapat swaps. 284 00:12:48,270 --> 00:12:49,330 285 00:12:49,330 --> 00:12:55,610 At panghuli, mayroon kaming pag-uuri seleksyon para n nakalapat, parehong wakas at malaki O. 286 00:12:55,610 --> 00:12:56,850 >> Tanong 21. 287 00:12:56,850 --> 00:12:58,870 Ano ang integer overflow? 288 00:12:58,870 --> 00:13:02,160 Well muli, katulad ng mas maaga, lamang mayroon kaming finitely maraming mga piraso 289 00:13:02,160 --> 00:13:04,255 kinakatawan ang isang integer, kaya siguro 32 bit. 290 00:13:04,255 --> 00:13:06,300 291 00:13:06,300 --> 00:13:09,180 Sabihin nating mayroon kaming sign integer. 292 00:13:09,180 --> 00:13:12,800 Pagkatapos ay sa huli ang pinakamataas na positibong numero maaari naming kumatawan 293 00:13:12,800 --> 00:13:15,910 2 sa 31 minus 1. 294 00:13:15,910 --> 00:13:19,370 Kaya kung ano ang mangyayari kung susubukan namin upang pagkatapos ay dinagdagan na integer? 295 00:13:19,370 --> 00:13:25,320 Well, kami ay pagpunta upang pumunta mula sa 2 sa 31 minus 1, ang lahat ng mga paraan pababa sa negatibong 2 296 00:13:25,320 --> 00:13:26,490 sa 31. 297 00:13:26,490 --> 00:13:29,470 Kaya ito integer overflow ay kapag patuloy mong incrementing, 298 00:13:29,470 --> 00:13:32,330 at sa huli hindi mo maaari makakuha ng anumang mas mataas at ito lamang 299 00:13:32,330 --> 00:13:34,520 bumabalot sa lahat ng mga paraan pabalik sa paligid sa isang negatibong halaga. 300 00:13:34,520 --> 00:13:35,850 301 00:13:35,850 --> 00:13:37,779 >> Ano ang tungkol sa isang buffer overflow? 302 00:13:37,779 --> 00:13:39,820 Kaya isang buffer overflow-- tandaan kung ano ang isang buffer ay. 303 00:13:39,820 --> 00:13:41,000 Ito ay lamang ng isang tipak ng memorya. 304 00:13:41,000 --> 00:13:43,350 Isang bagay tulad ng isang array ay isang buffer. 305 00:13:43,350 --> 00:13:46,120 Kaya isang buffer overflow ay kapag subukan na i-access memory 306 00:13:46,120 --> 00:13:47,880 nang higit sa dulo ng array na. 307 00:13:47,880 --> 00:13:50,410 Kaya kung mayroon kang isang array ng laki 5 at mo 308 00:13:50,410 --> 00:13:53,700 subukan na i-access array bracket 5 o bracket 6 o bracket 7, 309 00:13:53,700 --> 00:13:56,610 o anumang bagay na higit pa sa pagtatapos, o kahit anumang bagay 310 00:13:56,610 --> 00:14:00,790 below-- array bracket negatibong 1-- lahat ng mga ito ay buffer overflows. 311 00:14:00,790 --> 00:14:02,810 Ka ng pagpindot sa memory sa masamang paraan. 312 00:14:02,810 --> 00:14:04,090 313 00:14:04,090 --> 00:14:04,730 >> Tanong 23. 314 00:14:04,730 --> 00:14:05,760 315 00:14:05,760 --> 00:14:09,100 Kaya sa isang ito kailangan mo upang ipatupad strlen. 316 00:14:09,100 --> 00:14:11,630 At sabihin namin sa iyo na maaari kang ipinapalagay hindi s ay magiging walang bisa, 317 00:14:11,630 --> 00:14:13,790 kaya hindi mo na kailangang mag gawin ang anumang mga tseke para sa null. 318 00:14:13,790 --> 00:14:16,190 At marami ang mga paraan maaaring nagawa mo na ito. 319 00:14:16,190 --> 00:14:18,440 Narito tumagal lamang namin ang prangka. 320 00:14:18,440 --> 00:14:21,780 Simulan namin sa isang counter, n. n ay pagbibilang kung gaano karaming mga character mayroong. 321 00:14:21,780 --> 00:14:25,560 Kaya simulan namin sa 0, at pagkatapos ay namin umulit sa buong listahan. 322 00:14:25,560 --> 00:14:29,092 >> Ay mga bracket 0 katumbas ng null Terminator karakter? 323 00:14:29,092 --> 00:14:31,425 Tandaan kaming naghahanap ng para sa ang null Terminator karakter 324 00:14:31,425 --> 00:14:33,360 upang matukoy kung gaano katagal ang aming mga string ay. 325 00:14:33,360 --> 00:14:35,890 Iyon ay pagpunta sa wakasan anumang may-katuturang string. 326 00:14:35,890 --> 00:14:39,400 Kaya ang mga bracket 0 pantay sa null Terminator? 327 00:14:39,400 --> 00:14:42,850 Kung hindi, pagkatapos kami ay pagpunta sa tumingin sa mga bracket 1, mga bracket 2. 328 00:14:42,850 --> 00:14:45,050 Patuloy naming pagpunta hanggang namin hanapin ang null Terminator. 329 00:14:45,050 --> 00:14:48,580 Sa sandaling iyong natagpuan namin ito, pagkatapos n naglalaman ng ang kabuuang haba ng string, 330 00:14:48,580 --> 00:14:49,942 at maaari naming lamang bumalik iyon. 331 00:14:49,942 --> 00:14:51,180 332 00:14:51,180 --> 00:14:51,865 >> Tanong 24. 333 00:14:51,865 --> 00:14:53,010 334 00:14:53,010 --> 00:14:56,050 Kaya ito ay ang isa kung saan mo kailangang gumawa ng kalakalan-off. 335 00:14:56,050 --> 00:14:59,810 Kaya ang isang bagay ay mabuti sa isa paraan, ngunit sa kung ano ang paraan ay ito masamang? 336 00:14:59,810 --> 00:15:02,980 Kaya dito, pagsamahin-uri-uriin ay may gawi na maging mas mabilis kaysa sa bubble-uuri. 337 00:15:02,980 --> 00:15:06,530 Ang pagkakaroon sinabi that-- mahusay, may maraming mga sagot dito. 338 00:15:06,530 --> 00:15:12,930 Ngunit ang pangunahing isa ay na bubble-uuri-uri ay wakas ng n para sa isang pinagsunod-sunod na listahan. 339 00:15:12,930 --> 00:15:14,950 >> Tandaan na ang talahanayan Nakita lang namin nang mas maaga. 340 00:15:14,950 --> 00:15:17,600 Kaya mga uri ng bubble wakas ng n, ang pinakamahusay na sitwasyon kaso 341 00:15:17,600 --> 00:15:20,010 ay nagagawa nitong pumunta lamang sa ibabaw ang listahan nang isang beses, tinutukoy 342 00:15:20,010 --> 00:15:22,270 hey bagay na ito ay pinagsunod-sunod, at kita. 343 00:15:22,270 --> 00:15:25,960 Pagsamahin ang mga pag-uuri, kahit na ano gagawin mo ito, ang katapusan ng n log n. 344 00:15:25,960 --> 00:15:29,200 Kaya para Pinagbukud-bukod listahan, bubble -uri-uriin ang nangyayari upang maging mas mabilis. 345 00:15:29,200 --> 00:15:30,870 346 00:15:30,870 --> 00:15:32,430 >> Kung ano ang tungkol sa ngayon naka-link na listahan? 347 00:15:32,430 --> 00:15:36,070 Kaya maaaring lumaki at pag-urong ng isang naka-link na listahan upang magkasya bilang maraming mga sangkap na kinakailangan. 348 00:15:36,070 --> 00:15:38,489 Ang pagkakaroon sinabi that-- kaya karaniwang ang direct paghahambing 349 00:15:38,489 --> 00:15:40,280 ay magiging isang naka-link ilista sa isang array. 350 00:15:40,280 --> 00:15:41,600 351 00:15:41,600 --> 00:15:44,050 Kaya kahit na array maaari madaling lumalaki at pag-urong 352 00:15:44,050 --> 00:15:47,130 upang magkasya ng maraming mga elemento kung kinakailangan, ang listahan na naka-link 353 00:15:47,130 --> 00:15:49,600 kumpara sa isang array-- isang array ay random na pag-access. 354 00:15:49,600 --> 00:15:52,960 Maaari naming index sa anumang partikular na elemento ng array. 355 00:15:52,960 --> 00:15:56,430 >> Kaya para sa isang naka-link na listahan, hindi namin maaari pumunta lamang sa ikalimang elemento, 356 00:15:56,430 --> 00:16:00,260 mayroon kaming upang tumawid mula sa simula hanggang sa makuha namin sa ikalimang elemento. 357 00:16:00,260 --> 00:16:03,990 At na pupuntahan pigilan kami mula sa paggawa ng isang bagay tulad ng binary paghahanap. 358 00:16:03,990 --> 00:16:08,150 Nagsasalita ng binary paghahanap, binary paghahanap ay may gawi na maging mas mabilis kaysa sa linear paghahanap. 359 00:16:08,150 --> 00:16:11,120 Ang pagkakaroon sinabi that-- kaya, isa sa mga posibleng bagay 360 00:16:11,120 --> 00:16:13,380 ay hindi mo magagawa binary maghanap sa naka-link na mga listahan, 361 00:16:13,380 --> 00:16:14,730 maaari mo lamang gawin ito sa array. 362 00:16:14,730 --> 00:16:18,030 Ngunit marahil mas mahalaga, hindi mo maaaring gawin binary paghahanap 363 00:16:18,030 --> 00:16:20,690 sa isang array na ay hindi pinagsunod-sunod. 364 00:16:20,690 --> 00:16:23,990 Tapat maaaring kailangan mong ayusin ang array, at pagkatapos lamang maaari 365 00:16:23,990 --> 00:16:25,370 gagawin mo binary paghahanap. 366 00:16:25,370 --> 00:16:27,660 Kaya kung ang iyong bagay ay hindi Pinagbukud-bukod upang magsimula sa, 367 00:16:27,660 --> 00:16:29,250 pagkatapos ay maaari maging mas mabilis linear paghahanap. 368 00:16:29,250 --> 00:16:30,620 369 00:16:30,620 --> 00:16:31,740 >> Tanong 27. 370 00:16:31,740 --> 00:16:34,770 Kaya isaalang-alang ang programa sa ibaba, na magiging sa susunod na slide. 371 00:16:34,770 --> 00:16:37,790 At ito ay ang isa na kung saan kami ay pagpunta sa nais na tahasang sabihin 372 00:16:37,790 --> 00:16:39,980 ang mga halaga para sa iba't ibang mga variable. 373 00:16:39,980 --> 00:16:41,990 Kaya tingnan natin na ipaalam. 374 00:16:41,990 --> 00:16:43,160 >> Kaya line isa. 375 00:16:43,160 --> 00:16:45,457 Mayroon kaming int x ay katumbas ng 1. 376 00:16:45,457 --> 00:16:47,040 Iyon ay ang tanging bagay na nangyari. 377 00:16:47,040 --> 00:16:50,440 Kaya sa linya ng isa, nakikita natin sa ating talahanayan, na y, a, b, at tmp ang lahat 378 00:16:50,440 --> 00:16:51,540 blacked out. 379 00:16:51,540 --> 00:16:52,280 Kaya kung ano ang x? 380 00:16:52,280 --> 00:16:53,860 Well-set lang namin ito katumbas ng 1. 381 00:16:53,860 --> 00:16:55,020 382 00:16:55,020 --> 00:16:58,770 At pagkatapos ay i-line dalawa, mahusay, nakita namin na y ay nakatakda sa 2, 383 00:16:58,770 --> 00:17:00,550 at ang talahanayan ay napunan para sa amin. 384 00:17:00,550 --> 00:17:03,040 Kaya x ay 1 at y ay 2. 385 00:17:03,040 --> 00:17:05,890 >> Ngayon, tatlong linya, hindi namin ngayon sa loob ng swap function. 386 00:17:05,890 --> 00:17:07,560 Ano ang pumasa namin magpalit? 387 00:17:07,560 --> 00:17:11,609 Ipinasa namin ampersand x para sa isang, at ampersand y para b. 388 00:17:11,609 --> 00:17:15,160 Saan mas maaga ang problema nakasaad na ang address ng x 389 00:17:15,160 --> 00:17:17,520 ay 0x10, at ang address ng y ay 0x14. 390 00:17:17,520 --> 00:17:18,970 391 00:17:18,970 --> 00:17:21,909 Kaya isang at b ay katumbas ng 0x10 at 0x14, ayon sa pagkakabanggit. 392 00:17:21,909 --> 00:17:23,670 393 00:17:23,670 --> 00:17:26,250 >> Ngayon sa tatlong linya, ano ang x at y? 394 00:17:26,250 --> 00:17:28,554 Well, walang nagbago tungkol sa x at y sa puntong ito. 395 00:17:28,554 --> 00:17:30,470 Kahit na ang mga ito sa loob ng isang pangunahing stack frame, 396 00:17:30,470 --> 00:17:32,469 mayroon pa rin nila ang parehong mga halaga ng ginawa nila dati. 397 00:17:32,469 --> 00:17:34,030 Hindi pa namin na-modify na anumang memory. 398 00:17:34,030 --> 00:17:35,710 Kaya x ay 1, y ay 2. 399 00:17:35,710 --> 00:17:36,550 400 00:17:36,550 --> 00:17:37,050 Lahat ng karapatan. 401 00:17:37,050 --> 00:17:40,300 Kaya ngayon sinabi namin int tmp katumbas ng lagyan ng star ang isang. 402 00:17:40,300 --> 00:17:44,410 Kaya sa apat na mga linya, ang lahat ng bagay ay pareho maliban para sa tmp. 403 00:17:44,410 --> 00:17:47,130 Hindi namin ay nagbago ng anumang mga halaga ng anumang bagay maliban sa tmp. 404 00:17:47,130 --> 00:17:49,230 -Set namin ang tmp katumbas ng lagyan ng star ang isang. 405 00:17:49,230 --> 00:17:50,620 Ano ang bituin ng? 406 00:17:50,620 --> 00:17:56,240 Well, isang punto upang x, Kaya lagyan ng star ang isang Pupunta sa pantay na x, na kung saan ay 1. 407 00:17:56,240 --> 00:18:00,080 Kaya ang lahat ng bagay ay kinopya pababa, at tmp ay nakatakda sa 1. 408 00:18:00,080 --> 00:18:01,110 >> Ngayon ang susunod na linya. 409 00:18:01,110 --> 00:18:03,380 Lagyan ng star ang isang katumbas ng bituin b. 410 00:18:03,380 --> 00:18:10,000 Kaya sa pamamagitan ng linya five-- na rin muli, ang lahat ng bagay ay pareho maliban sa kahit anong star ng ay. 411 00:18:10,000 --> 00:18:10,830 Ano ang bituin ng? 412 00:18:10,830 --> 00:18:13,720 Well, sinabi lang namin star isang ay x. 413 00:18:13,720 --> 00:18:16,400 Kaya naming binabago x-pantay na bituin b. 414 00:18:16,400 --> 00:18:18,960 Ano ang bituin b? y. b punto sa y. 415 00:18:18,960 --> 00:18:21,030 Kaya star b ay y. 416 00:18:21,030 --> 00:18:25,140 Kaya namin ang pagse-set x katumbas ng y, at lahat ng iba pa ay pareho. 417 00:18:25,140 --> 00:18:29,130 Kaya nakikita natin sa susunod na hilera na x na ngayon ang 2, at ang iba pa lang kinopya pababa. 418 00:18:29,130 --> 00:18:31,120 >> Ngayon sa susunod na linya, bituin b ay katumbas ng tmp. 419 00:18:31,120 --> 00:18:34,740 Well, sinabi lang namin star b ay y, kaya kami ay-set y katumbas ng tmp. 420 00:18:34,740 --> 00:18:37,450 Lahat ng iba pa ay pareho, kaya ang lahat ng bagay ay makakakuha ng kinopya pababa. 421 00:18:37,450 --> 00:18:42,050 Kami ay pagtatakda y katumbas ng tmp, na isa, at lahat ng iba pa ay pareho. 422 00:18:42,050 --> 00:18:43,210 >> Ngayon sa wakas, pitong linya. 423 00:18:43,210 --> 00:18:44,700 Humihingi kami pabalik sa pangunahing pag-andar. 424 00:18:44,700 --> 00:18:46,350 Humihingi kami pagkatapos magpalitan ay tapos na. 425 00:18:46,350 --> 00:18:48,972 Naming nawala a, b, at tmp, ngunit sa huli namin 426 00:18:48,972 --> 00:18:51,180 ay hindi nagbabago ng anumang mga halaga ng anumang bagay na sa puntong ito, 427 00:18:51,180 --> 00:18:52,800 kopyahin lamang namin ang x at y pababa. 428 00:18:52,800 --> 00:18:56,490 At nakita namin na x at y ay ngayon 2 at 1 sa halip na 1 at 2. 429 00:18:56,490 --> 00:18:58,160 Swap ay matagumpay pinaandar. 430 00:18:58,160 --> 00:18:59,500 431 00:18:59,500 --> 00:19:00,105 >> Tanong 28. 432 00:19:00,105 --> 00:19:01,226 433 00:19:01,226 --> 00:19:03,100 Ipagpalagay na nakatagpo ka ang mga mensahe ng error 434 00:19:03,100 --> 00:19:06,790 sa ibaba sa panahon ng oras ng opisina sa susunod na taon bilang isang CA o tf. 435 00:19:06,790 --> 00:19:08,930 Payuhan kung paano aayusin ang bawat isa sa mga error na ito. 436 00:19:08,930 --> 00:19:11,160 Kaya hindi natukoy na reference sa GetString. 437 00:19:11,160 --> 00:19:12,540 Bakit maaari mong makita na ito? 438 00:19:12,540 --> 00:19:15,380 Well, kung ang isang mag-aaral ay gumagamit ng GetString sa kanilang mga code, 439 00:19:15,380 --> 00:19:20,310 maayos ang mga ito hash kasama cs50 tuldok h isama ang cs50 library. 440 00:19:20,310 --> 00:19:22,380 >> Well, ano ang ginagawa nila kailangan mong ayusin ang error na ito? 441 00:19:22,380 --> 00:19:26,810 Kailangan nila upang gawin ang isang gitling lcs50 sa command line kapag sila ay kino-compile. 442 00:19:26,810 --> 00:19:29,501 Kaya kung hindi sila pumasa kumalatong gitling lcs50, ang mga ito ay 443 00:19:29,501 --> 00:19:32,000 Hindi pagpunta sa magkaroon ng aktwal na code na ipinapatupad ng GetString. 444 00:19:32,000 --> 00:19:33,190 445 00:19:33,190 --> 00:19:34,170 >> Tanong 29. 446 00:19:34,170 --> 00:19:36,190 Nang kataon lamang deklarasyon strlen function ng library. 447 00:19:36,190 --> 00:19:37,550 448 00:19:37,550 --> 00:19:40,360 Well ngayon, ang mga ito na ito ay hindi tapos na ang tamang hash isama. 449 00:19:40,360 --> 00:19:41,440 450 00:19:41,440 --> 00:19:45,410 Sa partikular na kasong ito, ang header ng file kailangan nila upang isama ang string na tuldok h, 451 00:19:45,410 --> 00:19:48,710 at kabilang ang string na tuldok h, ngayon ang student-- ngayon ang compiler 452 00:19:48,710 --> 00:19:51,750 May access sa pagdeklara ng strlen, 453 00:19:51,750 --> 00:19:54,120 at alam nito na ang iyong code ay gumagamit ng strlen tama. 454 00:19:54,120 --> 00:19:55,380 455 00:19:55,380 --> 00:19:56,580 >> Tanong 30. 456 00:19:56,580 --> 00:20:00,240 Higit pang mga porsiyento ng mga conversion kaysa sa mga argumento ng data. 457 00:20:00,240 --> 00:20:01,540 Kaya kung ano ito? 458 00:20:01,540 --> 00:20:06,470 Well tandaan na ang mga porsiyento signs-- kung paano ang mga ito ay may-katuturan sa printf. 459 00:20:06,470 --> 00:20:08,890 Kaya sa printf maaari naming percent-- maaari naming i-print ang isang bagay 460 00:20:08,890 --> 00:20:11,380 tulad porsiyento i backslash n. 461 00:20:11,380 --> 00:20:15,310 O maaari naming i-print tulad ng porsiyento i, espasyo, porsiyento i, espasyo, i porsiyento. 462 00:20:15,310 --> 00:20:18,950 Kaya para sa bawat isa sa mga porsiyento palatandaan, kailangan namin 463 00:20:18,950 --> 00:20:21,560 upang pumasa sa isang variable sa dulo ng printf. 464 00:20:21,560 --> 00:20:26,980 >> Kaya kung sinasabi namin printf paren porsiyento i backslash n malapit paren, 465 00:20:26,980 --> 00:20:30,270 mahusay, sabihin namin na hindi namin pagpunta sa i-print ang isang integer, 466 00:20:30,270 --> 00:20:33,970 ngunit pagkatapos ay hindi namin pumasa printf isang integer upang aktwal na-print. 467 00:20:33,970 --> 00:20:37,182 Kaya dito higit pang mga porsiyento mga conversion kaysa sa mga argumento ng data? 468 00:20:37,182 --> 00:20:39,390 Na nagsasabi na mayroon kami ang maramihang mga percents, 469 00:20:39,390 --> 00:20:42,445 at wala kaming sapat na mga variable upang aktwal na punan ang mga percents. 470 00:20:42,445 --> 00:20:44,850 471 00:20:44,850 --> 00:20:50,010 >> At pagkatapos ay talagang, para sa tanong 31, Talagang nawala 40 bytes sa isang bloke. 472 00:20:50,010 --> 00:20:52,350 Kaya ito ay isang error Valgrind. 473 00:20:52,350 --> 00:20:54,720 Ito ay nagsasabi na sa isang lugar sa iyong code, 474 00:20:54,720 --> 00:20:59,010 mayroon kang isang paglalaan na 40 bytes malaki kaya malloced 40 bytes, 475 00:20:59,010 --> 00:21:00,515 at hindi ka na kailanman napalaya ito. 476 00:21:00,515 --> 00:21:02,480 477 00:21:02,480 --> 00:21:05,140 Malamang na kailangan mo lamang upang mahanap ang ilang mga tulo ng memorya, 478 00:21:05,140 --> 00:21:07,650 at hanapin kung saan kailangan mong palayain ang bloke ng memorya. 479 00:21:07,650 --> 00:21:08,780 480 00:21:08,780 --> 00:21:11,910 >> At tanong 32, di-wastong write ng laki 4. 481 00:21:11,910 --> 00:21:13,250 Muli ito ay isang error Valgrind. 482 00:21:13,250 --> 00:21:15,440 Ito ay walang gagawin sa memory paglabas ngayon. 483 00:21:15,440 --> 00:21:20,750 Ito ay, karamihan sa likely-- ibig kong sabihin, ito ay isang uri ng di-wastong mga karapatan ng memory. 484 00:21:20,750 --> 00:21:23,270 At pinaka-malamang na ito ay ilang uri ng buffer overflow. 485 00:21:23,270 --> 00:21:26,560 Kung saan mayroon kang isang array, siguro isang integer array, at sabihin 486 00:21:26,560 --> 00:21:30,115 sabihin ito ng laki 5, at subukang pindutin ang array bracket 5. 487 00:21:30,115 --> 00:21:34,150 Kaya kung susubukan mo na magsulat sa mga iyon halaga, hindi iyon isang piraso ng memorya 488 00:21:34,150 --> 00:21:37,440 na iyong aktwal na magkaroon ng access sa, at kaya ka ng pagpunta upang makakuha ng error na ito, 489 00:21:37,440 --> 00:21:39,272 sinasabi ng mga di-wastong write ng laki 4. 490 00:21:39,272 --> 00:21:42,480 Valgrind ay pagpunta sa makilala ka sinusubukan mong pindutin ang memorya ng hindi naaangkop. 491 00:21:42,480 --> 00:21:43,980 >> At na ito para sa quiz0. 492 00:21:43,980 --> 00:21:47,065 Ako ay Rob Bowden, at ito ay CS50. 493 00:21:47,065 --> 00:21:51,104