1 00:00:00,000 --> 00:00:09,572 2 00:00:09,572 --> 00:00:12,030 ROB Bowden: Sveiki, es esmu Rob Bowden, un parunāsim par quiz0. 3 00:00:12,030 --> 00:00:13,280 4 00:00:13,280 --> 00:00:14,545 >> Tātad, pirmais jautājums. 5 00:00:14,545 --> 00:00:17,750 Tas ir jautājums, par kuru jums nepieciešams kodu skaitu 6 00:00:17,750 --> 00:00:21,270 127 bināro spuldzes. 7 00:00:21,270 --> 00:00:23,550 Ja jūs vēlētos, jūs varētu darīt regulāri pārveidi 8 00:00:23,550 --> 00:00:25,950 no bi-- vai no komata bināro. 9 00:00:25,950 --> 00:00:28,300 Bet tas ir iespējams, gatavojas aizņemt daudz laika. 10 00:00:28,300 --> 00:00:31,750 Es domāju, jūs varētu izdomāt, ka, OK, 1 ir tur, 2 ir tur, 11 00:00:31,750 --> 00:00:33,650 4 ir tur, 8 ir tur. 12 00:00:33,650 --> 00:00:39,280 Vieglāk veids, 127 128 mīnus viens. 13 00:00:39,280 --> 00:00:42,013 Ka visvairāk pa kreisi spuldze ir 128-bit. 14 00:00:42,013 --> 00:00:43,490 15 00:00:43,490 --> 00:00:47,860 Tātad 127 ir patiešām vienkārši visu citu spuldzes, 16 00:00:47,860 --> 00:00:51,420 jo tas ir visvairāk pa kreisi spuldze mīnus 1. 17 00:00:51,420 --> 00:00:52,800 Tas ir tas, par šo jautājumu. 18 00:00:52,800 --> 00:00:54,060 >> Jautājums viens. 19 00:00:54,060 --> 00:00:56,710 Tātad ar 3 bitiem jūs varat pārstāv 8 atšķirīgas vērtības. 20 00:00:56,710 --> 00:01:01,000 Kāpēc tad ir 7 lielākais nav negatīvs decimāls skaitlis jūs varat pārstāvēt? 21 00:01:01,000 --> 00:01:04,050 Nu, ja mēs varam tikai pārstāv 8 atšķirīgas vērtības, 22 00:01:04,050 --> 00:01:07,430 Tad ko mēs gribam būt pārstāvot ir 0 līdz 7. 23 00:01:07,430 --> 00:01:08,745 0 aizņem vienu no vērtībām. 24 00:01:08,745 --> 00:01:09,980 25 00:01:09,980 --> 00:01:11,190 >> Jautājums divi. 26 00:01:11,190 --> 00:01:14,610 Ar n biti, cik atšķirīgi vērtības var jūs pārstāvat? 27 00:01:14,610 --> 00:01:19,080 Tātad, ar n biti, jums ir 2 iespējamās vērtības katram bit. 28 00:01:19,080 --> 00:01:22,300 Tātad mums ir 2 iespējamās vērtības pirmais bit, 2 iespējamās vērtības 29 00:01:22,300 --> 00:01:24,450 uz otro, 2 iespējams, par trešdaļu. 30 00:01:24,450 --> 00:01:28,730 Un tā ka ir 2 reizes 2 reizes 2, un galu galā atbilde ir 2 līdz n. 31 00:01:28,730 --> 00:01:30,010 32 00:01:30,010 --> 00:01:31,100 >> Jautājums trīs. 33 00:01:31,100 --> 00:01:33,450 Kas ir 0x50 binārā? 34 00:01:33,450 --> 00:01:39,490 Tāpēc atcerieties, ka heksadecimālo ir ļoti vienkārši pāriet uz bināro. 35 00:01:39,490 --> 00:01:43,180 Tātad šeit, mēs vienkārši nepieciešams, lai apskatīt 5 un 0 patstāvīgi. 36 00:01:43,180 --> 00:01:45,110 Tātad, kas ir 5 binārā? 37 00:01:45,110 --> 00:01:48,400 0101, tas ir 1 bit un 4 bitu. 38 00:01:48,400 --> 00:01:49,900 Kas 0 binārā? 39 00:01:49,900 --> 00:01:50,520 Nav grūts. 40 00:01:50,520 --> 00:01:52,180 0000. 41 00:01:52,180 --> 00:01:54,970 Tik vienkārši salikt tos kopā, un tas ir pilns numurs bināro. 42 00:01:54,970 --> 00:01:57,640 01010000. 43 00:01:57,640 --> 00:02:00,439 Un, ja jūs vēlaties, jūs varētu pacelšanās kreisās malas nulle. 44 00:02:00,439 --> 00:02:01,105 Tas ir nozīmes. 45 00:02:01,105 --> 00:02:02,920 46 00:02:02,920 --> 00:02:05,733 >> Tātad alternatīvi, kas ir 0x50 decimālā? 47 00:02:05,733 --> 00:02:08,649 Ja jūs vēlētos, jūs could-- ja jūs esat ērtāk ar bināro, 48 00:02:08,649 --> 00:02:11,340 jūs varētu pieņemt, ka bināro atbildi un pārvērst kas stājas aiz komata. 49 00:02:11,340 --> 00:02:13,870 Vai arī mēs varētu tikai atcerēties ka heksadecimālo. 50 00:02:13,870 --> 00:02:21,140 Tā, ka 0 ir ar 0-th vietā, un 5 ir 16. līdz pirmajā vietā. 51 00:02:21,140 --> 00:02:25,990 Tātad šeit, mums ir 5 reizes 16 līdz Pirmais, plus 0 reizes 16 līdz nullei, 52 00:02:25,990 --> 00:02:27,520 ir 80. 53 00:02:27,520 --> 00:02:29,710 Un, ja jūs paskatījās nosaukums uz jautājumu, 54 00:02:29,710 --> 00:02:32,920 tas bija CS 80, kas bija sava veida mājienu uz atbilde uz šo problēmu. 55 00:02:32,920 --> 00:02:34,460 56 00:02:34,460 --> 00:02:35,420 >> Jautājums pieci. 57 00:02:35,420 --> 00:02:40,320 Mums ir šī Scratch skripts, kas ir atkārtojot 4 reizes zemesriekstu sviestu želejas. 58 00:02:40,320 --> 00:02:42,800 Tātad, kā mēs tagad kods, C? 59 00:02:42,800 --> 00:02:47,730 Nu, mums ir here-- daļa treknrakstā ir tikai daļa jums bija īstenot. 60 00:02:47,730 --> 00:02:51,950 Tātad mums ir 4 cilpas, kas ir looping 4 reizes, printf-ing zemesriekstu sviestu želejas, 61 00:02:51,950 --> 00:02:53,910 ar jaunu līniju, kā problēma pieprasa. 62 00:02:53,910 --> 00:02:55,250 63 00:02:55,250 --> 00:02:57,490 >> Jautājums seši, vēl Scratch problēma. 64 00:02:57,490 --> 00:03:00,210 Mēs redzam, ka mēs esam uz visiem laikiem cilpu. 65 00:03:00,210 --> 00:03:05,000 Mēs sakot mainīgā i un tad palielināšanai i ar 1. 66 00:03:05,000 --> 00:03:09,580 Tagad mēs vēlamies darīt, ka C. Ir vairāki veidi, kā mēs varētu būt izdarījusi. 67 00:03:09,580 --> 00:03:12,840 Šeit mēs gadījās kodu mūžīgi cilpa kā brītiņa (patiess). 68 00:03:12,840 --> 00:03:16,600 Tāpēc mēs paziņojam mainīgā i, tikai tāpat mums bija mainīga i Scratch. 69 00:03:16,600 --> 00:03:21,950 Deklarē mainīgo i, un uz visiem laikiem kamēr (patiess), mēs sakām, ka mainīgo i. 70 00:03:21,950 --> 00:03:25,260 Tātad printf% i-- vai jūs varētu esat izmantojis% d. 71 00:03:25,260 --> 00:03:27,985 Mēs sakām, ka mainīgo, un Tad pieauguma to, i ++. 72 00:03:27,985 --> 00:03:29,560 73 00:03:29,560 --> 00:03:30,830 >> Jautājums septiņi. 74 00:03:30,830 --> 00:03:35,560 Tagad mēs vēlamies darīt kaut kas ļoti līdzīgs Mario dot c no problēmas iestatīt vienu. 75 00:03:35,560 --> 00:03:39,110 Mēs vēlamies, lai drukātu šos hashtags, mēs vēlamies, lai izdrukātu piecas 76 00:03:39,110 --> 00:03:40,700 ar trīs taisnstūra šo hashes. 77 00:03:40,700 --> 00:03:41,770 78 00:03:41,770 --> 00:03:43,162 Tātad, kā mēs gatavojamies darīt? 79 00:03:43,162 --> 00:03:45,370 Nu, mēs jums viss ķekars kodu, un jūs vienkārši 80 00:03:45,370 --> 00:03:47,560 jāaizpilda drukas režģa funkciju. 81 00:03:47,560 --> 00:03:49,540 >> Tātad, ko tas PrintGrid izskatās? 82 00:03:49,540 --> 00:03:51,480 Nu tu esi garām platums un augstums. 83 00:03:51,480 --> 00:03:53,520 Tāpēc mums ir ārējā 4 cilpa, kas ir looping 84 00:03:53,520 --> 00:03:57,650 visas no rindas šis režģis, ka mēs vēlamies, lai izdrukātu. 85 00:03:57,650 --> 00:04:01,250 Tad mums ir savstarpēji ligzdotu 4 cilpu, tas ir drukāšana katrā kolonnā. 86 00:04:01,250 --> 00:04:06,210 Tātad katrā rindā, mēs drukāt katra kolonna, viena hash. 87 00:04:06,210 --> 00:04:10,045 Tad beigās rindas mēs drukāt Viena jauna līnija, lai pārietu uz nākamo rindu. 88 00:04:10,045 --> 00:04:11,420 Un tas ir tas, lai visā tīklā. 89 00:04:11,420 --> 00:04:12,810 90 00:04:12,810 --> 00:04:13,675 >> Jautājums astoņi. 91 00:04:13,675 --> 00:04:17,170 Funkcija, piemēram, PrintGrid esot ir blakus efekts, bet ne peļņu 92 00:04:17,170 --> 00:04:17,670 vērtība. 93 00:04:17,670 --> 00:04:19,209 Izskaidrot atšķirību. 94 00:04:19,209 --> 00:04:23,080 Tāpēc tas balstās uz jūs atcerēties kāda blakusparādība ir. 95 00:04:23,080 --> 00:04:25,180 Nu, atgriešanās value-- mēs zinām PrintGrid nav 96 00:04:25,180 --> 00:04:28,180 ir atgriešanās vērtību, jo tieši šeit tā saka par spēkā neesošu. 97 00:04:28,180 --> 00:04:31,150 Lai kaut kas atgriež spēkā neesošu nav īsti atgriezties neko. 98 00:04:31,150 --> 00:04:32,200 99 00:04:32,200 --> 00:04:33,620 Tātad, kas ir blakus efekts? 100 00:04:33,620 --> 00:04:36,620 Nu, blakusparādība ir kaut kas veida saglabājas 101 00:04:36,620 --> 00:04:39,500 pēc funkciju galiem kas bija ne tikai atgriezies, 102 00:04:39,500 --> 00:04:41,340 un tas bija ne tikai no ieguldījumiem. 103 00:04:41,340 --> 00:04:44,970 >> Tā, piemēram, mēs varētu mainīt globālo mainīgo. 104 00:04:44,970 --> 00:04:46,590 Tas būtu blakusparādība. 105 00:04:46,590 --> 00:04:49,000 Šajā konkrētajā gadījumā, ļoti svarīgi blakusparādība 106 00:04:49,000 --> 00:04:51,070 drukā uz ekrāna. 107 00:04:51,070 --> 00:04:53,110 Tātad tas ir blakusparādība ka PrintGrid ir. 108 00:04:53,110 --> 00:04:54,980 Mēs drukāt šīs lietas uz ekrāna. 109 00:04:54,980 --> 00:04:56,370 Un jūs varat iedomāties ka kā blakusparādība, 110 00:04:56,370 --> 00:04:58,690 jo tas ir kaut kas pastāv arī pēc šī funkcija beidzas. 111 00:04:58,690 --> 00:05:01,481 Tas ir kaut kas ārpus Šīs funkcijas, kas galu galā 112 00:05:01,481 --> 00:05:03,380 tiek mainīts, saturs no ekrāna. 113 00:05:03,380 --> 00:05:05,200 114 00:05:05,200 --> 00:05:05,839 >> Jautājums deviņi. 115 00:05:05,839 --> 00:05:07,880 Apsveriet programmu zemāk, uz kuru līniju numuri 116 00:05:07,880 --> 00:05:09,740 ir pievienotas labad diskusijas. 117 00:05:09,740 --> 00:05:13,480 Tātad šajā programmā, mēs esam tikai zvanot GetString, tā glabāšanu 118 00:05:13,480 --> 00:05:16,220 šo mainīgo lielumu s, un pēc tam drukājot šo mainīgo s. 119 00:05:16,220 --> 00:05:16,720 OK. 120 00:05:16,720 --> 00:05:19,090 Tātad, paskaidrojiet, kāpēc līnija viens ir klāt. 121 00:05:19,090 --> 00:05:20,920 #include CS50 dot h. 122 00:05:20,920 --> 00:05:23,820 Kāpēc mums ir nepieciešams #include CS50 dot h? 123 00:05:23,820 --> 00:05:26,180 Nu mēs aicinām GetString funkciju, 124 00:05:26,180 --> 00:05:28,840 un GetString ir definēts ar CS50 bibliotēkā. 125 00:05:28,840 --> 00:05:31,600 Tātad, ja mums nebūtu #include CS50 dot h, 126 00:05:31,600 --> 00:05:35,760 mēs varētu iegūt, ka netieši deklarāciju no GetString funkciju kļūdu 127 00:05:35,760 --> 00:05:36,840 no kompilatoru. 128 00:05:36,840 --> 00:05:40,110 Tāpēc mums ir nepieciešams, lai iekļautu library-- mums ir nepieciešams iekļaut header failu, 129 00:05:40,110 --> 00:05:42,870 vai arī kompilators nebūs atzīt, ka GetString pastāv. 130 00:05:42,870 --> 00:05:44,380 131 00:05:44,380 --> 00:05:46,140 >> Paskaidrojiet, kāpēc līnija divi ir klāt. 132 00:05:46,140 --> 00:05:47,890 Tātad standarta io dot h. 133 00:05:47,890 --> 00:05:50,430 Tas ir tieši tas pats kā iepriekšējo problēmu, 134 00:05:50,430 --> 00:05:53,310 izņemot nevis nodarbojas ar GetString, mēs runājam par printf. 135 00:05:53,310 --> 00:05:56,654 Tātad, ja mēs neteica mums vajag ietvert standarta io dot h, 136 00:05:56,654 --> 00:05:58,820 tad mēs nespētu izmantot printf funkciju, 137 00:05:58,820 --> 00:06:00,653 jo kompilators nezinu par to. 138 00:06:00,653 --> 00:06:01,750 139 00:06:01,750 --> 00:06:05,260 >> Why-- kāda ir nozīme par neesošu rindā četrās? 140 00:06:05,260 --> 00:06:08,010 Tātad šeit mums ir int galvenais (spēkā neesošs). 141 00:06:08,010 --> 00:06:10,600 Tas ir tikai saprotams, ka mēs nesaņemat nekādas komandrindu 142 00:06:10,600 --> 00:06:12,280 argumenti par galveno. 143 00:06:12,280 --> 00:06:17,390 Atcerieties, ka mēs varētu teikt int Galvenās int argc stīgu argv iekavās. 144 00:06:17,390 --> 00:06:20,400 Tātad, šeit mēs vienkārši sakām neesošu teikt mēs ignorē komandrindas argumentus. 145 00:06:20,400 --> 00:06:21,840 146 00:06:21,840 --> 00:06:25,225 >> Izskaidrot, attiecībā uz atmiņu, tieši kādi GetString saskaņā seši atgriežas. 147 00:06:25,225 --> 00:06:27,040 148 00:06:27,040 --> 00:06:31,640 GetString atgriežas bloku atmiņa, masīvs rakstzīmes. 149 00:06:31,640 --> 00:06:34,870 Tas tiešām atgriežas rādītāju uz pirmo rakstzīmi. 150 00:06:34,870 --> 00:06:37,170 Atcerieties, ka virkne ir char zvaigzne. 151 00:06:37,170 --> 00:06:41,360 Tātad, s ir pointers uz pirmo raksturs jebkādā virkne ir 152 00:06:41,360 --> 00:06:43,510 ka lietotājs ievada pēc klaviatūru. 153 00:06:43,510 --> 00:06:47,070 Un, ka atmiņa notiek, ir malloced, tā, ka atmiņa ir kaudzē. 154 00:06:47,070 --> 00:06:49,080 155 00:06:49,080 --> 00:06:50,450 >> Jautājums 13. 156 00:06:50,450 --> 00:06:51,960 Apsveriet zemāk programmu. 157 00:06:51,960 --> 00:06:55,579 Tātad visa šī programma dara ir printf-ing 1 dalīts ar 10. 158 00:06:55,579 --> 00:06:57,370 Tātad, kad tie ir apkopoti un izpildīts, šī programma 159 00:06:57,370 --> 00:07:01,170 izejas 0.0, lai gan 1 dalīts ar 10 ir 0,1. 160 00:07:01,170 --> 00:07:02,970 Tātad, kāpēc tas ir 0.0? 161 00:07:02,970 --> 00:07:05,510 Nu, tas ir tāpēc, no skaitlim sadalīšanu. 162 00:07:05,510 --> 00:07:08,580 Tātad, 1 ir vesels skaitlis, 10 ir vesels skaitlis. 163 00:07:08,580 --> 00:07:11,980 Tātad 1 dalīts ar 10, viss uztver kā veselus skaitļus, 164 00:07:11,980 --> 00:07:16,380 un C, kad mēs veselu sadalījumu, mēs saīsināt jebkuru komata. 165 00:07:16,380 --> 00:07:19,590 Tātad 1 dalīts ar 10, ir 0, un tad mēs cenšamies 166 00:07:19,590 --> 00:07:24,410 drukāt, ka apgrozāmos, tāpēc nulle drukāta kā apgrozāmos līdzekļus, ir 0,0. 167 00:07:24,410 --> 00:07:27,400 Un tas ir iemesls, kāpēc mēs 0,0. 168 00:07:27,400 --> 00:07:28,940 >> Apsveriet zemāk programmu. 169 00:07:28,940 --> 00:07:31,280 Tagad mēs esam drukāšanas 0.1. 170 00:07:31,280 --> 00:07:34,280 Līdz ar to nav vesels skaitlis dalīšana, mēs esam tikai drukāšanas 0,1, 171 00:07:34,280 --> 00:07:37,100 bet mēs esam drukāšana 28 zīmēm aiz komata. 172 00:07:37,100 --> 00:07:41,810 Un mēs iegūtu šo 0,1000, vesels bars nullēm, 5 5 5, blah blah blah. 173 00:07:41,810 --> 00:07:45,495 Tātad jautājums ir, kāpēc to dara drukāt, ka, tā vietā, lai tieši 0.1? 174 00:07:45,495 --> 00:07:46,620 175 00:07:46,620 --> 00:07:49,640 >> Tātad iemesls šeit tagad peldošā komata neprecizitātes. 176 00:07:49,640 --> 00:07:53,410 Atcerieties, ka pludiņš ir tikai 32 biti. 177 00:07:53,410 --> 00:07:57,540 Tātad, mēs varam tikai pārstāvēt ierobežots skaits Peldošo punktu vērtības ar tiem 32 178 00:07:57,540 --> 00:07:58,560 biti. 179 00:07:58,560 --> 00:08:01,760 Nu tur ir galu galā bezgalīgi daudzi peldošā komata vērtības, 180 00:08:01,760 --> 00:08:04,940 un tur ir bezgala daudz peldošas Point vērtības starp 0 un 1, 181 00:08:04,940 --> 00:08:07,860 un mēs, protams, varētu pārstāvēt vēl vairāk vērtības, nekā. 182 00:08:07,860 --> 00:08:13,230 Tātad mums ir, lai upurus, lai varēs pārstāvēt lielāko daļu vērtības. 183 00:08:13,230 --> 00:08:16,960 >> Tātad vērtība, piemēram, 0,1, acīmredzot mēs nevaram apstiprināt, ka tieši tā. 184 00:08:16,960 --> 00:08:22,500 Tā vietā, kas pārstāv 0,1 mēs darām labākais, ko mēs varam pārstāvēt šo 0.100000 5 5 185 00:08:22,500 --> 00:08:23,260 5. 186 00:08:23,260 --> 00:08:26,306 Un tas ir diezgan tuvu, bet par daudz pieteikumu 187 00:08:26,306 --> 00:08:28,430 Jums nav jāuztraucas par peldošā komata neprecizitātes, 188 00:08:28,430 --> 00:08:30,930 jo mēs vienkārši nevaram pārstāvēt visi peldošs punktus precīzi. 189 00:08:30,930 --> 00:08:32,500 190 00:08:32,500 --> 00:08:33,380 >> 15. jautājums. 191 00:08:33,380 --> 00:08:34,679 Apsveriet zemāk kodu. 192 00:08:34,679 --> 00:08:36,630 Mēs esam tikai drukājot 1 plus 1. 193 00:08:36,630 --> 00:08:38,289 Tāpēc nav triks šeit. 194 00:08:38,289 --> 00:08:41,780 1 plus 1 novērtē līdz 2, un tad mēs esam drukāšanas to. 195 00:08:41,780 --> 00:08:42,789 Tas tikai drukā 2. 196 00:08:42,789 --> 00:08:43,850 197 00:08:43,850 --> 00:08:44,700 >> 16. jautājums. 198 00:08:44,700 --> 00:08:49,450 Tagad mēs esam drukāšanas raksturu 1 plus 1 raksturs. 199 00:08:49,450 --> 00:08:52,110 Tātad, kāpēc tas nav izdrukāt to pašu? 200 00:08:52,110 --> 00:08:57,680 Nu raksturs 1 plus raksturs 1, raksturs 1 ir ASCII vērtību 49. 201 00:08:57,680 --> 00:09:04,840 Tātad, tas ir patiešām saka, 49 plus 49, un galu galā tas notiek, lai drukātu 98. 202 00:09:04,840 --> 00:09:06,130 Tātad tas nav drukāt 2. 203 00:09:06,130 --> 00:09:08,070 204 00:09:08,070 --> 00:09:09,271 >> 17. jautājums. 205 00:09:09,271 --> 00:09:11,520 Pabeigt īstenošanu no nepāra zem tā, 206 00:09:11,520 --> 00:09:14,615 ka funkcija atgriež taisnība, ja n ir nepāra un false, ja n ir vēl. 207 00:09:14,615 --> 00:09:16,710 208 00:09:16,710 --> 00:09:19,330 Tas ir lielisks mērķis par mod operatoram. 209 00:09:19,330 --> 00:09:24,530 Tāpēc mēs mūsu argumentu n, ja n mod 2 ir vienāds ar 1, labi 210 00:09:24,530 --> 00:09:28,030 tas nozīmē, ka n sadalīts ar 2 bija atlikumu. 211 00:09:28,030 --> 00:09:33,270 Ja n dalīts ar 2 bija atlikumu, kas nozīmē, ka n ir nepāra, lai mēs atgrieztos taisnība. 212 00:09:33,270 --> 00:09:34,910 Vēl mums atgriezties viltus. 213 00:09:34,910 --> 00:09:39,070 Jūs arī varēja izdarīt n mod 2 ir vienāds nulle, return false, citādi atgriezties true. 214 00:09:39,070 --> 00:09:41,600 215 00:09:41,600 --> 00:09:43,640 >> Apsveriet rekursīvo funkciju zemāk. 216 00:09:43,640 --> 00:09:46,920 Tātad, ja n ir mazāks par vai vienāds ar 1, atgriezties 1, 217 00:09:46,920 --> 00:09:50,430 cits atgriešanās n reizes f n mīnus 1. 218 00:09:50,430 --> 00:09:52,556 Tātad, kas ir šī funkcija? 219 00:09:52,556 --> 00:09:54,305 Nu, tas ir tikai factorial funkcija. 220 00:09:54,305 --> 00:09:55,410 221 00:09:55,410 --> 00:09:57,405 Tas ir labi pārstāvēta kā n faktoriāliem. 222 00:09:57,405 --> 00:09:58,720 223 00:09:58,720 --> 00:10:02,310 >> Tātad 19. jautājums tagad, mēs vēlamies šo rekursīvas funkcijas. 224 00:10:02,310 --> 00:10:04,530 Mēs vēlamies, lai būtu iteratīvs. 225 00:10:04,530 --> 00:10:05,874 Tātad, kā mēs to darām? 226 00:10:05,874 --> 00:10:07,790 Nu personālam risinājums, un atkal tur 227 00:10:07,790 --> 00:10:11,090 vairāki veidi, kā jūs varētu izdarīt ka, sākam ar šo int produktu 228 00:10:11,090 --> 00:10:11,812 ir vienāds ar 1. 229 00:10:11,812 --> 00:10:13,520 Un visu šo cilpas, mēs ejam 230 00:10:13,520 --> 00:10:17,590 kas reizinot produktu galu galā galu galā ar pilnu faktoriāliem. 231 00:10:17,590 --> 00:10:21,870 Tātad int i ir vienāds ar 2, i ir mazāks par vai vienāds ar n, i ++. 232 00:10:21,870 --> 00:10:24,130 >> Jums varētu būt jautājums, kāpēc man ir vienāds ar 2. 233 00:10:24,130 --> 00:10:28,380 Nu, atcerieties, ka šeit mums ir pārliecinieties, ka mūsu bāze lieta ir pareiza. 234 00:10:28,380 --> 00:10:32,180 Tātad, ja n ir mazāks par vai vienāds 1, mēs esam tikai atgriešanās 1. 235 00:10:32,180 --> 00:10:34,830 Tātad vairāk nekā šeit, mēs sākam pie i ir vienāds ar 2. 236 00:10:34,830 --> 00:10:39,090 Nu, ja es būtu 1, tad the-- vai ja n ir 1, tad par cilpu 237 00:10:39,090 --> 00:10:40,600 nevarētu izpildīt vispār. 238 00:10:40,600 --> 00:10:43,190 Un tāpēc mēs būtu vienkārši atgriešanās ierīce, kas ir 1. 239 00:10:43,190 --> 00:10:45,920 Tāpat, ja n ir kaut ko mazāk nekā 1-- 240 00:10:45,920 --> 00:10:49,290 ja tas būtu 0, negatīva 1, whatever-- mēs gribētu vēl atgriezīšos 1, 241 00:10:49,290 --> 00:10:52,260 kas ir tieši tas, ko rekursīvs versiju dara. 242 00:10:52,260 --> 00:10:54,660 >> Tagad, ja n ir lielāks par 1, tad mēs ejam 243 00:10:54,660 --> 00:10:56,550 darīt vismaz vienu atkārtojuma šīs cilpas. 244 00:10:56,550 --> 00:11:00,630 Tātad pieņemsim, ka n ir 5, tad mēs esam darīsim produktu reizes vienāds 2. 245 00:11:00,630 --> 00:11:02,165 Tāpēc tagad produkts ir 2. 246 00:11:02,165 --> 00:11:04,040 Tagad mēs gatavojamies darīt produktu reizes vienāds 3. 247 00:11:04,040 --> 00:11:04,690 Tagad tas ir 6. 248 00:11:04,690 --> 00:11:07,500 Produkta reizes vienāds 4, tagad tas ir 24. 249 00:11:07,500 --> 00:11:10,420 Produkta reizes vienāds 5, tagad tas ir 120. 250 00:11:10,420 --> 00:11:16,730 Tātad galu galā, mēs esam atpakaļ 120, kas ir pareizi 5. faktori. 251 00:11:16,730 --> 00:11:17,510 >> 20. jautājums. 252 00:11:17,510 --> 00:11:22,480 Tas ir viens, kur jums ir jāaizpilda Šajā tabulā ar kādu konkrētu algoritmu, 253 00:11:22,480 --> 00:11:25,735 kaut kas, ko mēs esam redzējuši, ka der šos algoritmiskās palaist 254 00:11:25,735 --> 00:11:28,060 reizes šīs asimptotiskās palaist reizes. 255 00:11:28,060 --> 00:11:33,270 Tātad, kas ir algoritms, kas ir omega 1, bet liels O n? 256 00:11:33,270 --> 00:11:35,970 Tātad tur varētu būt bezgalīgi daudzas atbildes šeit. 257 00:11:35,970 --> 00:11:39,790 Viens, ka mēs esam redzējuši, iespējams, lielākā daļa bieži vien ir tikai lineārs meklēšanu. 258 00:11:39,790 --> 00:11:42,050 >> Tātad labākajā gadījumā scenārijs, postenis mēs esam 259 00:11:42,050 --> 00:11:44,050 meklē ir sākums saraksta 260 00:11:44,050 --> 00:11:47,400 un tā omega 1 soļiem, Pirmā lieta, mēs pārbaudām, 261 00:11:47,400 --> 00:11:49,740 mēs vienkārši uzreiz atdod ka mēs atradām objektu. 262 00:11:49,740 --> 00:11:52,189 Sliktākajā scenārija gadījumā, punkts ir beigās, 263 00:11:52,189 --> 00:11:53,730 vai prece nav sarakstā vispār. 264 00:11:53,730 --> 00:11:56,700 Tāpēc mums ir jāmeklē visu sarakstu, visi n 265 00:11:56,700 --> 00:11:58,480 elementi, un tāpēc tas ir o n. 266 00:11:58,480 --> 00:11:59,670 267 00:11:59,670 --> 00:12:04,880 >> Tāpēc tagad tas ir kaut kas, kas ir gan omega n log n, un lielais O n log n. 268 00:12:04,880 --> 00:12:08,650 Nu visatbilstošākās lieta mēs esam redzējuši šeit ir apvienot veida. 269 00:12:08,650 --> 00:12:12,950 Tātad apvienot kārtot, atcerieties, galu galā Theta 270 00:12:12,950 --> 00:12:16,920 n log n, kur teta definēts ja abi omega un liels O ir vienādi. 271 00:12:16,920 --> 00:12:17,580 Gan n log n. 272 00:12:17,580 --> 00:12:18,690 273 00:12:18,690 --> 00:12:21,970 >> Kas ir kaut kas, kas ir omega no N, O un N brusas? 274 00:12:21,970 --> 00:12:23,990 Nu, atkal tur vairākas iespējamās atbildes. 275 00:12:23,990 --> 00:12:26,440 Šeit mēs gadās teikt burbulis veida. 276 00:12:26,440 --> 00:12:28,840 Ievietošanas kārtošanas arī šeit strādāt. 277 00:12:28,840 --> 00:12:31,400 Atcerieties, ka burbulis šķirot ir, ka optimizāciju kur, 278 00:12:31,400 --> 00:12:34,630 ja Jums ir iespēja saņemt izmantojot visu sarakstu 279 00:12:34,630 --> 00:12:37,402 bez nepieciešamības to darīt jebkādi mijmaiņas līgumi, tad labi, 280 00:12:37,402 --> 00:12:40,110 mēs varam nekavējoties atgriezties, ka saraksts tika sakārtoti, lai sāktu ar. 281 00:12:40,110 --> 00:12:43,185 Tātad labākajā gadījumā, tas ir tikai omega n. 282 00:12:43,185 --> 00:12:45,960 Ja tas nav tikai labi sakārtoti sarakstu, lai sāktu ar, 283 00:12:45,960 --> 00:12:48,270 tad mums ir O n brusas mijmaiņas darījumus. 284 00:12:48,270 --> 00:12:49,330 285 00:12:49,330 --> 00:12:55,610 Un visbeidzot, mums ir izvēles veida par n brusas, gan omega un lielo O. 286 00:12:55,610 --> 00:12:56,850 >> Jautājums 21. 287 00:12:56,850 --> 00:12:58,870 Kas ir skaitlis pārplūdes? 288 00:12:58,870 --> 00:13:02,160 Nu atkal, līdzīgi kā iepriekš, mums ir tikai finitely daudz biti 289 00:13:02,160 --> 00:13:04,255 pārstāvēt vesels skaitlis, tāpēc varbūt 32 bitiem. 290 00:13:04,255 --> 00:13:06,300 291 00:13:06,300 --> 00:13:09,180 Pieņemsim, ka mums ir parakstīts skaitlim. 292 00:13:09,180 --> 00:13:12,800 Tad galu galā augstāko pozitīvs skaitlis, mēs varam pārstāvēt 293 00:13:12,800 --> 00:13:15,910 ir 2 līdz 31 mīnus 1. 294 00:13:15,910 --> 00:13:19,370 Tātad, kas notiek, ja mēs cenšamies Tad pieauguma šo skaitli? 295 00:13:19,370 --> 00:13:25,320 Nu, mēs ejam, lai aiziet no 2 līdz 31 mīnus 1, visu ceļu uz leju, lai negatīvu 2 296 00:13:25,320 --> 00:13:26,490 līdz 31. 297 00:13:26,490 --> 00:13:29,470 Tāpēc šis skaitlis ir pārplūdes ja jūs pastāvīgi palielināšanai, 298 00:13:29,470 --> 00:13:32,330 un galu galā jūs nevarat rodas kāds augstāks un tas tikai 299 00:13:32,330 --> 00:13:34,520 wraps visu ceļu atpakaļ ap negatīvu vērtību. 300 00:13:34,520 --> 00:13:35,850 301 00:13:35,850 --> 00:13:37,779 >> Kas par bufera pārpildes? 302 00:13:37,779 --> 00:13:39,820 Tāpēc buferis overflow-- atceries, ko buferis ir. 303 00:13:39,820 --> 00:13:41,000 Tas ir tikai rieciens atmiņas. 304 00:13:41,000 --> 00:13:43,350 Kaut ko līdzīgu masīvu ir buferis. 305 00:13:43,350 --> 00:13:46,120 Tātad bufera pārpildes ir tad, kad jūs mēģināt piekļūt atmiņas 306 00:13:46,120 --> 00:13:47,880 pēc projekta beigām šī masīva. 307 00:13:47,880 --> 00:13:50,410 Tātad, ja jums ir masīva izmēru 5 un jums 308 00:13:50,410 --> 00:13:53,700 mēģināt piekļūt masīva kronšteinu 5 vai kronšteinu 6 vai kronšteins 7, 309 00:13:53,700 --> 00:13:56,610 vai kaut kas ārpus beigas, vai pat kaut kas 310 00:13:56,610 --> 00:14:00,790 below-- masīvs kronšteins negatīvs 1-- visi no tiem ir bufera pārpilde. 311 00:14:00,790 --> 00:14:02,810 Jūs esat pieskaras atmiņu sliktos veidos. 312 00:14:02,810 --> 00:14:04,090 313 00:14:04,090 --> 00:14:04,730 >> 23. jautājums. 314 00:14:04,730 --> 00:14:05,760 315 00:14:05,760 --> 00:14:09,100 Tātad šo vienu jums īstenot strlen. 316 00:14:09,100 --> 00:14:11,630 Un mēs jums pateiks, ka jūs varat pieņemu s nebūs spēkā, 317 00:14:11,630 --> 00:14:13,790 tāpēc jums nav darīt jebkuru čeku null. 318 00:14:13,790 --> 00:14:16,190 Un tur ir vairāki veidi jūs varētu būt izdarījusi. 319 00:14:16,190 --> 00:14:18,440 Šeit mēs tikai veikt vienkārša. 320 00:14:18,440 --> 00:14:21,780 Sākam ar skaitītāju, n. n ir skaitot, cik rakstzīmes tur ir. 321 00:14:21,780 --> 00:14:25,560 Tātad, mēs sākas ar 0, un pēc tam mēs atkārtot pār visu sarakstu. 322 00:14:25,560 --> 00:14:29,092 >> Ir s kronšteins 0 vienāds ar null terminatoru raksturs? 323 00:14:29,092 --> 00:14:31,425 Atcerieties, mēs meklējam null terminators raksturs 324 00:14:31,425 --> 00:14:33,360 lai noteiktu, cik ilgi mūsu virkne ir. 325 00:14:33,360 --> 00:14:35,890 Ka gatavojas izbeigt kādu būtisku stīgu. 326 00:14:35,890 --> 00:14:39,400 Tāpēc ir s kronšteins 0 vienāds uz nulles terminators? 327 00:14:39,400 --> 00:14:42,850 Ja tā nav, tad mēs ejam apskatīt u grupā 1, u grupā 2. 328 00:14:42,850 --> 00:14:45,050 Mēs turpinām iet, kamēr mēs atrast null terminatoru. 329 00:14:45,050 --> 00:14:48,580 Kad mēs esam noskaidrojuši to, tad n satur kopējais garums no virknes, 330 00:14:48,580 --> 00:14:49,942 un mēs varam vienkārši atgriezties to. 331 00:14:49,942 --> 00:14:51,180 332 00:14:51,180 --> 00:14:51,865 >> 24. jautājums. 333 00:14:51,865 --> 00:14:53,010 334 00:14:53,010 --> 00:14:56,050 Tātad tas ir viens, kur jūs ir veikt tirdzniecību off. 335 00:14:56,050 --> 00:14:59,810 Tātad viena lieta ir labs vienā veids, bet kādā veidā tas ir slikti? 336 00:14:59,810 --> 00:15:02,980 Tātad šeit, apvienot kārtot mēdz ātrāk nekā burbulis veida. 337 00:15:02,980 --> 00:15:06,530 Ņemot that-- teica, labi, ka Ir vairākas atbildes šeit. 338 00:15:06,530 --> 00:15:12,930 Bet galvenais ir tas, ka burbulis veida ir omega n par šķirotiem sarakstā. 339 00:15:12,930 --> 00:15:14,950 >> Atcerieties, ka tabulu mēs vienkārši redzēja agrāk. 340 00:15:14,950 --> 00:15:17,600 Tātad burbulis sakārto omega no n, labākais scenārijs 341 00:15:17,600 --> 00:15:20,010 tas ir spējīgs tikai iet pa sarakstu vienreiz, noteikt 342 00:15:20,010 --> 00:15:22,270 hey šī lieta jau ir šķirots un atgriešanās. 343 00:15:22,270 --> 00:15:25,960 Apvienot kārtot, vienalga ko jūs darāt, ir omega n log n. 344 00:15:25,960 --> 00:15:29,200 Tātad šķirotajiem sarakstā, burbuli kārtošanas notiek, lai būtu ātrāk. 345 00:15:29,200 --> 00:15:30,870 346 00:15:30,870 --> 00:15:32,430 >> Tagad to, ko par saistīta sarakstus? 347 00:15:32,430 --> 00:15:36,070 Tātad saistīts saraksts var augt un sarauties fit tik daudz elementu, cik nepieciešams. 348 00:15:36,070 --> 00:15:38,489 Ņemot teica that-- tik parasti tiešs salīdzinājums 349 00:15:38,489 --> 00:15:40,280 būs saistīta uzskaitīt ar masīvu. 350 00:15:40,280 --> 00:15:41,600 351 00:15:41,600 --> 00:15:44,050 Tātad, pat ja bloki var viegli augt un sarauties 352 00:15:44,050 --> 00:15:47,130 fit tik daudz elementu cik nepieciešams, saistīts saraksts 353 00:15:47,130 --> 00:15:49,600 salīdzinot ar array-- AN masīvs ir brīva piekļuve. 354 00:15:49,600 --> 00:15:52,960 Mēs varam indekss jebkurā īpaši masīva elements. 355 00:15:52,960 --> 00:15:56,430 >> Tātad saistītajā sarakstā, mēs nevaram vienkārši iet uz piekto elementu, 356 00:15:56,430 --> 00:16:00,260 mums ir, lai šķērsotu no paša sākuma kamēr mēs ar piekto elementu. 357 00:16:00,260 --> 00:16:03,990 Un kas notiek, lai novērstu mūs no darīt kaut ko līdzīgu bināro meklēšanu. 358 00:16:03,990 --> 00:16:08,150 Runājot par bināro meklēšanu, bināro meklēšanu mēdz būt ātrāk nekā lineāra meklēšanu. 359 00:16:08,150 --> 00:16:11,120 Ņemot teica that-- Tātad, viens no iespējamajiem lieta 360 00:16:11,120 --> 00:16:13,380 ir tas, ka jūs nevarat darīt binārā meklēt saistīti sarakstos 361 00:16:13,380 --> 00:16:14,730 jūs varat darīt tikai to bloki. 362 00:16:14,730 --> 00:16:18,030 Bet, iespējams, vēl svarīgāk, Jūs nevarat darīt bināro meklēšanu 363 00:16:18,030 --> 00:16:20,690 par masīvu, kas nav sakārtots. 364 00:16:20,690 --> 00:16:23,990 Sākumā jums var būt nepieciešams, lai kārtotu masīvs, un tikai tad var 365 00:16:23,990 --> 00:16:25,370 jūs bināro meklēšanu. 366 00:16:25,370 --> 00:16:27,660 Tātad, ja jūsu lieta nav sakārtots, lai sāktu ar, 367 00:16:27,660 --> 00:16:29,250 tad lineārā meklēšana varētu būt ātrāka. 368 00:16:29,250 --> 00:16:30,620 369 00:16:30,620 --> 00:16:31,740 >> Jautājums 27. 370 00:16:31,740 --> 00:16:34,770 Tāpēc uzskatu programmu zemāk, kas būs nākamajā slide. 371 00:16:34,770 --> 00:16:37,790 Un tas ir viens, kur mēs esam gatavojas vēlaties, lai skaidri norādīt 372 00:16:37,790 --> 00:16:39,980 vērtības dažādiem mainīgajiem. 373 00:16:39,980 --> 00:16:41,990 Tātad, pieņemsim apskatīt to. 374 00:16:41,990 --> 00:16:43,160 >> Tik līnija vienu. 375 00:16:43,160 --> 00:16:45,457 Mums ir int x ir vienāds ar 1. 376 00:16:45,457 --> 00:16:47,040 Tas ir vienīgais, kas ir noticis. 377 00:16:47,040 --> 00:16:50,440 Tātad vienā rindā, mēs redzam mūsu tabula, ka y, a, b, un TMP visi 378 00:16:50,440 --> 00:16:51,540 blacked. 379 00:16:51,540 --> 00:16:52,280 Tātad, kas ir x? 380 00:16:52,280 --> 00:16:53,860 Nu mēs vienkārši iestatīt tā, vienāds ar 1. 381 00:16:53,860 --> 00:16:55,020 382 00:16:55,020 --> 00:16:58,770 Un tad rindā divi, labi, mēs redzam, ka y ir iestatīts uz 2, 383 00:16:58,770 --> 00:17:00,550 un tabula ir jau jāaizpilda mums. 384 00:17:00,550 --> 00:17:03,040 Tātad, x ir 1 un Y ir 2. 385 00:17:03,040 --> 00:17:05,890 >> Tagad, trīs līnijas, mēs esam tagad iekšpusē mijmaiņas funkciju. 386 00:17:05,890 --> 00:17:07,560 Ko mums iet apmainīt? 387 00:17:07,560 --> 00:17:11,609 Mēs nodots aizvieto & zīmes x par , un zīme & y b. 388 00:17:11,609 --> 00:17:15,160 Kur problēma agrāk noteikts, ka adrese x 389 00:17:15,160 --> 00:17:17,520 ir 0x10, un adrese Y ir 0x14. 390 00:17:17,520 --> 00:17:18,970 391 00:17:18,970 --> 00:17:21,909 Tātad, a un b ir vienāds ar 0x10 un 0x14, attiecīgi. 392 00:17:21,909 --> 00:17:23,670 393 00:17:23,670 --> 00:17:26,250 >> Tagad rindā trīs, kādi ir x un y? 394 00:17:26,250 --> 00:17:28,554 Nu, nekas nav mainījies par x un y šajā brīdī. 395 00:17:28,554 --> 00:17:30,470 Pat ja viņi iekšā galvenais kaudze rāmi, 396 00:17:30,470 --> 00:17:32,469 tie joprojām ir tas pats vērtības viņi darīja agrāk. 397 00:17:32,469 --> 00:17:34,030 Mums nav labojusi nevienu atmiņu. 398 00:17:34,030 --> 00:17:35,710 Tātad, x ir 1, y ir 2. 399 00:17:35,710 --> 00:17:36,550 400 00:17:36,550 --> 00:17:37,050 Labi. 401 00:17:37,050 --> 00:17:40,300 Tāpēc tagad mēs teicām int tmp vienāds ar zvaigzni. 402 00:17:40,300 --> 00:17:44,410 Tātad rindā četri, viss ir tāds pats, izņemot TMP. 403 00:17:44,410 --> 00:17:47,130 Mēs neesam mainījuši nekādas vērtības neko, izņemot TMP. 404 00:17:47,130 --> 00:17:49,230 Mēs veidojam tmp vienāds ar zvaigzni. 405 00:17:49,230 --> 00:17:50,620 Kas ir zvaigzne? 406 00:17:50,620 --> 00:17:56,240 Nu, a punkti x, So zvaigzne būs vienāda X, kas ir 1. 407 00:17:56,240 --> 00:18:00,080 Tātad viss ir kopēts uz leju, un TPP ir iestatīts uz 1. 408 00:18:00,080 --> 00:18:01,110 >> Tagad nākamais rindā. 409 00:18:01,110 --> 00:18:03,380 Star vienāds zvaigzne b. 410 00:18:03,380 --> 00:18:10,000 Tātad, līnija five-- labi atkal, viss ir tāds pats, izņemot neatkarīgi Star ir. 411 00:18:10,000 --> 00:18:10,830 Kas ir zvaigzne? 412 00:18:10,830 --> 00:18:13,720 Nu, mēs tikko teica zvaigzne ir x. 413 00:18:13,720 --> 00:18:16,400 Tāpēc mēs esam mainās x uz vienlīdzīgu zvaigžņu b. 414 00:18:16,400 --> 00:18:18,960 Kas ir zvaigzne b? y. b norāda uz y. 415 00:18:18,960 --> 00:18:21,030 Tātad zvaigzne b ir y. 416 00:18:21,030 --> 00:18:25,140 Tāpēc mēs esam nosakot x vienāds ar y, un viss pārējais ir tas pats. 417 00:18:25,140 --> 00:18:29,130 Tā mēs redzam, nākamajā rindā, ka x ir tagad 2, un pārējie ir vienkārši kopēti uz leju. 418 00:18:29,130 --> 00:18:31,120 >> Tagad nākamajā rindā, zvaigzne b vienāds tmp. 419 00:18:31,120 --> 00:18:34,740 Nu, mēs tikko teica zvaigzne b ir y, tāpēc mēs esam nosakot y vienāds ar TMP. 420 00:18:34,740 --> 00:18:37,450 Viss pārējais ir tas pats, tāpēc viss tiek kopēti uz leju. 421 00:18:37,450 --> 00:18:42,050 Mēs nosakot y vienāds ar TPP, kas ir viens, un viss pārējais ir tas pats. 422 00:18:42,050 --> 00:18:43,210 >> Tagad beidzot, septiņi līnija. 423 00:18:43,210 --> 00:18:44,700 Mēs esam atpakaļ uz galveno funkciju. 424 00:18:44,700 --> 00:18:46,350 Mēs esam pēc swap ir pabeigta. 425 00:18:46,350 --> 00:18:48,972 Mēs esam zaudējuši, B un tmp, bet galu galā mēs 426 00:18:48,972 --> 00:18:51,180 nemainām nekādas vērtības par kaut ko šajā brīdī, 427 00:18:51,180 --> 00:18:52,800 mēs vienkārši kopēt X un Y leju. 428 00:18:52,800 --> 00:18:56,490 Un ir redzams, ka x un y ir tagad 2 un 1 1 vietā un 2. 429 00:18:56,490 --> 00:18:58,160 Mijmaiņas ir veiksmīgi izpildīts. 430 00:18:58,160 --> 00:18:59,500 431 00:18:59,500 --> 00:19:00,105 >> Jautājums 28. 432 00:19:00,105 --> 00:19:01,226 433 00:19:01,226 --> 00:19:03,100 Pieņemsim, ka jūs sastopaties kļūdas paziņojumus 434 00:19:03,100 --> 00:19:06,790 Turpmāk darba laikā nākamgad kā CA vai TF. 435 00:19:06,790 --> 00:19:08,930 Padomu, kā noteikt katrai no šīm kļūdām. 436 00:19:08,930 --> 00:19:11,160 Tātad undefined atsauce uz GetString. 437 00:19:11,160 --> 00:19:12,540 Kāpēc jūs varētu redzēt šo? 438 00:19:12,540 --> 00:19:15,380 Nu, ja students izmanto GetString to kodu, 439 00:19:15,380 --> 00:19:20,310 tie ir pareizi hash iekļauti CS50 dot h iekļaut CS50 bibliotēka. 440 00:19:20,310 --> 00:19:22,380 >> Nu, ko tie nepieciešams noteikt šo kļūdu? 441 00:19:22,380 --> 00:19:26,810 Viņiem ir nepieciešams darīt mestos lcs50 pie komandrindas kad viņi apkopojot. 442 00:19:26,810 --> 00:19:29,501 Tātad, ja viņi neietu šķindēt domuzīme lcs50, viņi 443 00:19:29,501 --> 00:19:32,000 nav nāksies faktisko kods, kas īsteno GetString. 444 00:19:32,000 --> 00:19:33,190 445 00:19:33,190 --> 00:19:34,170 >> 29. jautājums. 446 00:19:34,170 --> 00:19:36,190 Netieši atzīstot bibliotēkas funkciju strlen. 447 00:19:36,190 --> 00:19:37,550 448 00:19:37,550 --> 00:19:40,360 Nu tagad, tie nav darīts pareizu hash ietver. 449 00:19:40,360 --> 00:19:41,440 450 00:19:41,440 --> 00:19:45,410 Šajā konkrētajā gadījumā, header fails viņiem ir nepieciešams iekļaut, ir virkne dot h, 451 00:19:45,410 --> 00:19:48,710 ieskaitot stīgu dot h, tagad student-- tagad kompilators 452 00:19:48,710 --> 00:19:51,750 piekļūt deklarācijas strlen, 453 00:19:51,750 --> 00:19:54,120 un tā zina, ka jūsu kodu izmanto strlen pareizi. 454 00:19:54,120 --> 00:19:55,380 455 00:19:55,380 --> 00:19:56,580 >> 30. jautājums. 456 00:19:56,580 --> 00:20:00,240 Vairāk procenti konvertēšanu nekā datu argumentiem. 457 00:20:00,240 --> 00:20:01,540 Tātad, kas tas ir? 458 00:20:01,540 --> 00:20:06,470 Labi atceros, ka šie procenti signs-- kā viņi attiecas uz printf. 459 00:20:06,470 --> 00:20:08,890 Tātad printf mēs varētu percent-- mēs varētu drukāt kaut ko 460 00:20:08,890 --> 00:20:11,380 līdzīgi procentiem i slīpsvītru n. 461 00:20:11,380 --> 00:20:15,310 Vai mēs varētu drukāt, piemēram, procentiem i, telpa, procenti i, telpa, procenti i. 462 00:20:15,310 --> 00:20:18,950 Tātad, katrs no tiem procenti pazīmes, mums ir nepieciešams 463 00:20:18,950 --> 00:20:21,560 iziet mainīgo beigās printf. 464 00:20:21,560 --> 00:20:26,980 >> Tātad, ja mēs sakām Printf paren procenti i slīpsvītru n tuvu paren, 465 00:20:26,980 --> 00:20:30,270 labi, mēs sakām, ka mēs esam gatavojas drukāt vesels skaitlis, 466 00:20:30,270 --> 00:20:33,970 bet tad mēs neietu printf skaitlis faktiski drukāt. 467 00:20:33,970 --> 00:20:37,182 Tāpēc šeit vairāk procentiem pārrēķini par datu argumentiem? 468 00:20:37,182 --> 00:20:39,390 Tas ir saprotams, ka mums ir viss ķekars procentiem, 469 00:20:39,390 --> 00:20:42,445 un mums nav pietiekami daudz mainīgie faktiski aizpildīt šajos procentos. 470 00:20:42,445 --> 00:20:44,850 471 00:20:44,850 --> 00:20:50,010 >> Un tad noteikti, lai jautājumu 31, galīgi zaudējis 40 baiti vienā blokos. 472 00:20:50,010 --> 00:20:52,350 Tātad tas ir Valgrind kļūda. 473 00:20:52,350 --> 00:20:54,720 Tas ir saprotams, ka kaut kur savu kodu, 474 00:20:54,720 --> 00:20:59,010 Jums ir sadalījumu, kas ir 40 baitu liels, lai jūs malloced 40 baiti, 475 00:20:59,010 --> 00:21:00,515 un jūs nekad atbrīvoja to. 476 00:21:00,515 --> 00:21:02,480 477 00:21:02,480 --> 00:21:05,140 Visticamāk jums ir nepieciešams atrast kādu atmiņas noplūde, 478 00:21:05,140 --> 00:21:07,650 un atrast, kur jums ir nepieciešams, lai atbrīvot šo bloku atmiņas. 479 00:21:07,650 --> 00:21:08,780 480 00:21:08,780 --> 00:21:11,910 >> Un 32. jautājums, nederīgs rakstīt izmēru 4. 481 00:21:11,910 --> 00:21:13,250 Atkal tas ir Valgrind kļūda. 482 00:21:13,250 --> 00:21:15,440 Tas nav jādara ar atmiņu noplūdes tagad. 483 00:21:15,440 --> 00:21:20,750 Tas ir, lielākā daļa likely-- es domāju, tas ir daži nederīgs atmiņas tiesību kārtošanas. 484 00:21:20,750 --> 00:21:23,270 Un, visticamāk, tas ir daži veida bufera pārpildes. 485 00:21:23,270 --> 00:21:26,560 Kur jums ir masīvs, varbūt skaitlis masīvs, un pieņemsim 486 00:21:26,560 --> 00:21:30,115 saka, ka tas ir par izmēru 5, un jums mēģināt pieskarties masīvu kronšteinu 5. 487 00:21:30,115 --> 00:21:34,150 Tātad, ja jūs mēģināt rakstīt, ka vērtība, tas nav gabals atmiņas 488 00:21:34,150 --> 00:21:37,440 ka jūs faktiski ir pieejama, un tāpēc jūs gatavojas saņemt šo kļūdu, 489 00:21:37,440 --> 00:21:39,272 sakot nederīgs rakstīt izmēru 4. 490 00:21:39,272 --> 00:21:42,480 Valgrind gatavojas atzīt tu esi mēģina pieskarties atmiņu nevietā. 491 00:21:42,480 --> 00:21:43,980 >> Un tas arī viss par quiz0. 492 00:21:43,980 --> 00:21:47,065 Es esmu Rob Bowden, un tas ir CS50. 493 00:21:47,065 --> 00:21:51,104