1 00:00:00,000 --> 00:00:09,572 2 00:00:09,572 --> 00:00:12,030 ROB BOWDEN: Sveiki, aš Rob Bowden, ir pakalbėkime apie quiz0. 3 00:00:12,030 --> 00:00:13,280 4 00:00:13,280 --> 00:00:14,545 >> Taigi, pirmas klausimas. 5 00:00:14,545 --> 00:00:17,750 Tai klausimas, kur jums reikia koduoti skaičių 6 00:00:17,750 --> 00:00:21,270 127 dvejetainių lempučių. 7 00:00:21,270 --> 00:00:23,550 Jei nori, tu gali daryti reguliariai konversija 8 00:00:23,550 --> 00:00:25,950 iš bi-- arba iš dešimtosios į dvejetainiai. 9 00:00:25,950 --> 00:00:28,300 Bet tai tikriausiai bus imtis daug laiko. 10 00:00:28,300 --> 00:00:31,750 Aš turiu galvoje, jūs galite suprasti, kad, Gerai, 1 yra ten, 2 yra ten, 11 00:00:31,750 --> 00:00:33,650 4 yra ten, 8 yra ten. 12 00:00:33,650 --> 00:00:39,280 Paprastesnis būdas, 127 yra 128 minus vienas. 13 00:00:39,280 --> 00:00:42,013 Kad kairiausias lemputė yra 128 bitų. 14 00:00:42,013 --> 00:00:43,490 15 00:00:43,490 --> 00:00:47,860 Taigi 127 yra tikrai tik visi kitų lempučių, 16 00:00:47,860 --> 00:00:51,420 nes tai kairiausias lemputė minus 1. 17 00:00:51,420 --> 00:00:52,800 Štai ir viskas tuo klausimu. 18 00:00:52,800 --> 00:00:54,060 >> Klausimas vienas. 19 00:00:54,060 --> 00:00:56,710 Taigi su 3 bitų galite atstovauti 8 skirtingas reikšmes. 20 00:00:56,710 --> 00:01:01,000 Kodėl, tuomet, yra 7 Didžiausias nieujemna Dešimtainis sveikasis galite atstovauti? 21 00:01:01,000 --> 00:01:04,050 Na, jei mes galime tik atstovauti 8 skirtingas reikšmes, 22 00:01:04,050 --> 00:01:07,430 tada tai, ką mes ketiname būti atstovaujantis yra 0 per 7. 23 00:01:07,430 --> 00:01:08,745 0 užima vieną iš vertybes. 24 00:01:08,745 --> 00:01:09,980 25 00:01:09,980 --> 00:01:11,190 >> Klausimas. 26 00:01:11,190 --> 00:01:14,610 Su n bitus, kiek skiriasi vertybės gali atstovaujate? 27 00:01:14,610 --> 00:01:19,080 Taigi, su n bitus, turite 2 galimos reikšmės kiekvienam tiek. 28 00:01:19,080 --> 00:01:22,300 Taigi, mes turime 2 galimi dydžiai Pirmoji bit, 2 Galimos reikšmės 29 00:01:22,300 --> 00:01:24,450 už antrą, 2 įmanoma trečdaliu. 30 00:01:24,450 --> 00:01:28,730 Ir todėl tai 2 kartus 2 kartus 2 ir galiausiai atsakymas yra nuo 2 iki n. 31 00:01:28,730 --> 00:01:30,010 32 00:01:30,010 --> 00:01:31,100 >> Klausimas trys. 33 00:01:31,100 --> 00:01:33,450 Kas 0x50 susidedančiame iš dviejų? 34 00:01:33,450 --> 00:01:39,490 Taigi nepamirškite, kad šešioliktainėje turi labai paprastas konvertavimo į dvejetainę. 35 00:01:39,490 --> 00:01:43,180 Taigi čia mes tiesiog reikia ieškoti 5 ir 0 nepriklausomai. 36 00:01:43,180 --> 00:01:45,110 Taigi, kas yra 5 susidedančiame iš dviejų? 37 00:01:45,110 --> 00:01:48,400 0101, tai 1 bit ir 4 bit. 38 00:01:48,400 --> 00:01:49,900 Kas 0 susidedančiame iš dviejų? 39 00:01:49,900 --> 00:01:50,520 Ne sudėtinga. 40 00:01:50,520 --> 00:01:52,180 0000. 41 00:01:52,180 --> 00:01:54,970 Taigi tiesiog sudėti juos kartu, ir tai pilnas skaičius dvejetainę. 42 00:01:54,970 --> 00:01:57,640 01.010.000. 43 00:01:57,640 --> 00:02:00,439 Ir jei jūs norėjo galėtumėte kilimo, kad kairiausias nulio. 44 00:02:00,439 --> 00:02:01,105 Tai neturi jokios reikšmės. 45 00:02:01,105 --> 00:02:02,920 46 00:02:02,920 --> 00:02:05,733 >> Taigi alternatyviai, kas 0x50 dešimtainiais? 47 00:02:05,733 --> 00:02:08,649 Jei nori, tu could-- jei esate patogiau su binary, 48 00:02:08,649 --> 00:02:11,340 galite imtis, kad dvejetainį atsakymą ir konvertuoti, kad į dešimtosios. 49 00:02:11,340 --> 00:02:13,870 Ar mes galime tiesiog prisiminti kad šešioliktainėje. 50 00:02:13,870 --> 00:02:21,140 Kad 0 yra 0-ąją vietą, o 5 yra 16 į pirmąją vietą. 51 00:02:21,140 --> 00:02:25,990 Taigi čia mes turime 5 kartus 16 iki pirma, plius 0 kartų 16 iki nulio, 52 00:02:25,990 --> 00:02:27,520 yra 80. 53 00:02:27,520 --> 00:02:29,710 Ir jei jūs pažvelgė pavadinimas su klausimu, 54 00:02:29,710 --> 00:02:32,920 ji buvo CS 80, kuris buvo natūra užuomina į atsakymas į šią problemą. 55 00:02:32,920 --> 00:02:34,460 56 00:02:34,460 --> 00:02:35,420 >> Penktuoju klausimu. 57 00:02:35,420 --> 00:02:40,320 Mes turime šį Scratch scenarijų, kuris yra kartoti 4 kartus žemės riešutų sviestas želė. 58 00:02:40,320 --> 00:02:42,800 Taigi, kaip mes dabar kodas, C? 59 00:02:42,800 --> 00:02:47,730 Na, mes turime here-- pusiau šriftu dalis yra tik dalis jums buvo įgyvendinti. 60 00:02:47,730 --> 00:02:51,950 Taigi, mes turime 4 kilpos, kad ciklais 4 kartų, printf-mas žemės riešutų sviestas želė, 61 00:02:51,950 --> 00:02:53,910 su naujos linijos kaip problema prašo. 62 00:02:53,910 --> 00:02:55,250 63 00:02:55,250 --> 00:02:57,490 >> Šešių klausimas, kitas Scratch problema. 64 00:02:57,490 --> 00:03:00,210 Mes matome, kad esame amžinai kilpa. 65 00:03:00,210 --> 00:03:05,000 Mes sakydamas kintamojo i ir tada incrementing i 1. 66 00:03:05,000 --> 00:03:09,580 Dabar mes norime padaryti, kad C yra keletas būdų mes galime tai padarė. 67 00:03:09,580 --> 00:03:12,840 Čia mes atsitiko kodą amžinai kilpa kaip while (true). 68 00:03:12,840 --> 00:03:16,600 Taigi, mes deklaruoti kintamojo i, tiesiog kaip mes turėjo kintama I nulio. 69 00:03:16,600 --> 00:03:21,950 Pripažinti kintamasis i ir amžinai while (true), mes sakome, kad kintamasis i. 70 00:03:21,950 --> 00:03:25,260 Taigi printf% i-- ar galima jį naudojo% d. 71 00:03:25,260 --> 00:03:27,985 Mes sakome, kad kintamasis ir tada didinkite ją, i ++. 72 00:03:27,985 --> 00:03:29,560 73 00:03:29,560 --> 00:03:30,830 >> Klausimas septyni. 74 00:03:30,830 --> 00:03:35,560 Dabar mes norime padaryti kažką labai panašaus Mario dot c iš problemos nustatyti vieną. 75 00:03:35,560 --> 00:03:39,110 Norime atspausdinti ðiuos žymas su grotelėmis, norime spausdinti penkių 76 00:03:39,110 --> 00:03:40,700 trys stačiakampio šių masyvuose. 77 00:03:40,700 --> 00:03:41,770 78 00:03:41,770 --> 00:03:43,162 Taigi, kaip mes ketiname daryti? 79 00:03:43,162 --> 00:03:45,370 Na, mes jums visas krūva kodas, ir jūs tiesiog 80 00:03:45,370 --> 00:03:47,560 turi užpildyti spausdinimo tinklo funkcija. 81 00:03:47,560 --> 00:03:49,540 >> Taigi, ką PrintGrid atrodo? 82 00:03:49,540 --> 00:03:51,480 Na jūs praeityje plotis ir aukštis. 83 00:03:51,480 --> 00:03:53,520 Taigi, mes turime išorinėje 4 kilpa, kad manimi kilpų 84 00:03:53,520 --> 00:03:57,650 per visas šio eilių tinklelis, kad mes norime spausdinti. 85 00:03:57,650 --> 00:04:01,250 Tada mes turime tarp įdėtos 4 kilpos, tai spausdinimas ant kiekvieno stulpelio. 86 00:04:01,250 --> 00:04:06,210 Taigi kiekvienoje eilutėje, mes spausdinti už kiekviename stulpelyje, vieną maiša. 87 00:04:06,210 --> 00:04:10,045 Tada ties eilutės pabaigoje mes spausdinti vieną naują liniją eiti į kitą eilutę. 88 00:04:10,045 --> 00:04:11,420 Ir tai, tai ir visą tinklą. 89 00:04:11,420 --> 00:04:12,810 90 00:04:12,810 --> 00:04:13,675 >> Klausimas aštuoni. 91 00:04:13,675 --> 00:04:17,170 Kaip PrintGrid funkcija yra sakoma turėti šalutinį poveikį, bet ne grąžą 92 00:04:17,170 --> 00:04:17,670 vertė. 93 00:04:17,670 --> 00:04:19,209 Paaiškinkite skirtumą. 94 00:04:19,209 --> 00:04:23,080 Taigi tai priklauso nuo Jums prisiminti kas šalutinis poveikis yra. 95 00:04:23,080 --> 00:04:25,180 Na, grįžimas value-- mes žinome PrintGrid nėra 96 00:04:25,180 --> 00:04:28,180 turėti grąžos vertę, nes Štai čia rašoma, negalioja. 97 00:04:28,180 --> 00:04:31,150 Taigi viskas, kas grįš tuštuma tikrai ne grįžti nieko. 98 00:04:31,150 --> 00:04:32,200 99 00:04:32,200 --> 00:04:33,620 Taigi, kas yra šalutinis poveikis? 100 00:04:33,620 --> 00:04:36,620 Na, šalutinis poveikis yra nieko, kad tarsi išlieka 101 00:04:36,620 --> 00:04:39,500 po funkcinių galais kad buvo ne tik grįžo, 102 00:04:39,500 --> 00:04:41,340 ir tai buvo ne tik nuo įnašo. 103 00:04:41,340 --> 00:04:44,970 >> Taigi, pavyzdžiui, mes galime pakeisti pasaulinį kintamąjį. 104 00:04:44,970 --> 00:04:46,590 Kad būtų šalutinis poveikis. 105 00:04:46,590 --> 00:04:49,000 Šiuo konkrečiu atveju, Labai svarbu šalutinis poveikis 106 00:04:49,000 --> 00:04:51,070 spausdinant ekrane. 107 00:04:51,070 --> 00:04:53,110 Taigi, kad yra šalutinis poveikis kad PrintGrid turi. 108 00:04:53,110 --> 00:04:54,980 Mes spausdinti šiuos dalykus ekrane. 109 00:04:54,980 --> 00:04:56,370 Ir jūs galite galvoti kad kaip šalutinis poveikis, 110 00:04:56,370 --> 00:04:58,690 kadangi, kad kažkas, kad neišnyksta ši funkcija baigiasi. 111 00:04:58,690 --> 00:05:01,481 Tai kažkas ne apimties Šios funkcijos, kurios galiausiai 112 00:05:01,481 --> 00:05:03,380 yra keičiama, turinys ekrane. 113 00:05:03,380 --> 00:05:05,200 114 00:05:05,200 --> 00:05:05,839 >> Klausimas devyni. 115 00:05:05,839 --> 00:05:07,880 Apsvarstykite programą žemiau, į kurią eilučių numerius 116 00:05:07,880 --> 00:05:09,740 buvo pridėta Diskutuojant. 117 00:05:09,740 --> 00:05:13,480 Taigi šioje programoje mes tik paskambinę GetString, ją saugoti 118 00:05:13,480 --> 00:05:16,220 į šį kintamąjį rodiklį s, o tada spausdinti šį kintamąjį s. 119 00:05:16,220 --> 00:05:16,720 Gerai. 120 00:05:16,720 --> 00:05:19,090 Taigi, kodėl linija vienas yra. 121 00:05:19,090 --> 00:05:20,920 #include CS50 dot h. 122 00:05:20,920 --> 00:05:23,820 Kodėl mes turime #include CS50 dot h? 123 00:05:23,820 --> 00:05:26,180 Na mes skambina GetString funkciją, 124 00:05:26,180 --> 00:05:28,840 ir GetString apibrėžiama į CS50 bibliotekoje. 125 00:05:28,840 --> 00:05:31,600 Taigi, jei mes neturėjome #include CS50 dot h, 126 00:05:31,600 --> 00:05:35,760 gautume, kad numanomas deklaraciją iš GetString funkcija klaida 127 00:05:35,760 --> 00:05:36,840 nuo kompiliatoriaus. 128 00:05:36,840 --> 00:05:40,110 Taigi, mes turime įtraukti library-- mes turime įtraukti header failą, 129 00:05:40,110 --> 00:05:42,870 kitaip kompiliatorius nebus pripažįsta, kad GetString egzistuoja. 130 00:05:42,870 --> 00:05:44,380 131 00:05:44,380 --> 00:05:46,140 >> Paaiškinkite, kodėl linija du yra. 132 00:05:46,140 --> 00:05:47,890 Taigi standartas io dot h. 133 00:05:47,890 --> 00:05:50,430 Tai lygiai tas pats kaip ankstesniais problemos, 134 00:05:50,430 --> 00:05:53,310 išskyrus Užuot užsiėmusi GetString, mes kalbame apie printf. 135 00:05:53,310 --> 00:05:56,654 Taigi, jei mes ne pasakyti, kad mes turime įtraukti standartinę io dot h, 136 00:05:56,654 --> 00:05:58,820 tuomet mes negalėsime naudoti printf funkcija, 137 00:05:58,820 --> 00:06:00,653 nes kompiliatorius nežino apie tai. 138 00:06:00,653 --> 00:06:01,750 139 00:06:01,750 --> 00:06:05,260 >> Why-- kas yra reikšmė Negaliojančių keturių linijos? 140 00:06:05,260 --> 00:06:08,010 Taigi čia mes turime int main (void). 141 00:06:08,010 --> 00:06:10,600 Tai tik pasakyti, jog negaunate jokio komandų eilutę 142 00:06:10,600 --> 00:06:12,280 argumentai pagrindinis. 143 00:06:12,280 --> 00:06:17,390 Atminkite, kad galėtume pasakyti int Pagrindiniai int argc styginių argv skliausteliuose. 144 00:06:17,390 --> 00:06:20,400 Taigi čia mes tiesiog pasakyti negaliojančiu pasakyti mes ignoruoja komandinės eilutės argumentai. 145 00:06:20,400 --> 00:06:21,840 146 00:06:21,840 --> 00:06:25,225 >> Paaiškinti, dėl atminties, tiksliai kas GetString atitinka šešis grįžta. 147 00:06:25,225 --> 00:06:27,040 148 00:06:27,040 --> 00:06:31,640 GetString grįžta iš bloko atmintis, simbolių masyvas. 149 00:06:31,640 --> 00:06:34,870 Tai tikrai grįžta rodyklę į pirmąją pobūdžio. 150 00:06:34,870 --> 00:06:37,170 Atminkite, kad eilutė yra char žvaigždė. 151 00:06:37,170 --> 00:06:41,360 Taigi s yra rodyklė į pirmąjį personažas kokia eilutė yra 152 00:06:41,360 --> 00:06:43,510 kad vartotojo įrašytas klaviatūra. 153 00:06:43,510 --> 00:06:47,070 Ir kad atminties atsitinka būti malloced, taip, kad atmintis yra krūvą. 154 00:06:47,070 --> 00:06:49,080 155 00:06:49,080 --> 00:06:50,450 >> Klausimas 13. 156 00:06:50,450 --> 00:06:51,960 Apsvarstykite žemiau programą. 157 00:06:51,960 --> 00:06:55,579 Taigi visa tai programa daro yra printf-mas 1, padalinta iš 10. 158 00:06:55,579 --> 00:06:57,370 Taigi, kai rengiama ir vykdoma ši programa 159 00:06:57,370 --> 00:07:01,170 išėjimai 0,0, nors 1 padalytą 10 yra 0,1. 160 00:07:01,170 --> 00:07:02,970 Tad kodėl jis 0,0 yra? 161 00:07:02,970 --> 00:07:05,510 Na, tai yra dėl to, integer padalinys. 162 00:07:05,510 --> 00:07:08,580 Taigi yra 1 sveikasis skaičius, 10 yra sveikasis skaičius. 163 00:07:08,580 --> 00:07:11,980 Taigi 1 padalytą 10, viskas traktuojamas kaip sveikieji, 164 00:07:11,980 --> 00:07:16,380 ir C, kai mes darome sveikasis padalinys, mes trumpinti jokio kablelio. 165 00:07:16,380 --> 00:07:19,590 Taigi 1 padalytą 10 yra 0, tada mes bandome 166 00:07:19,590 --> 00:07:24,410 spausdinti, kad plūdės, todėl nulis spausdinama kaip plūdė 0,0. 167 00:07:24,410 --> 00:07:27,400 Ir štai kodėl mes gauname 0,0. 168 00:07:27,400 --> 00:07:28,940 >> Apsvarstykite žemiau programą. 169 00:07:28,940 --> 00:07:31,280 Dabar mes spausdinti 0,1. 170 00:07:31,280 --> 00:07:34,280 Taigi ne sveikasis skaičius pasidalijimas, mes tik spausdinant 0,1, 171 00:07:34,280 --> 00:07:37,100 bet mes jos spausdinimas iki 28 skaičių po kablelio. 172 00:07:37,100 --> 00:07:41,810 Ir mes gauname tai 0,1000, visa krūva nulio, 5 5 5, blah blah blah. 173 00:07:41,810 --> 00:07:45,495 Taigi kyla klausimas, kodėl ji daro spausdinti, kad vietoj lygiai 0,1? 174 00:07:45,495 --> 00:07:46,620 175 00:07:46,620 --> 00:07:49,640 >> Taigi priežastis čia dabar slankiojo kablelio netikslumų. 176 00:07:49,640 --> 00:07:53,410 Atminkite, kad plūdė yra vos 32 bitai. 177 00:07:53,410 --> 00:07:57,540 Taigi, mes galime tik atstovauti baigtinio skaičiaus iš slankiojo kablelio vertybes tose 32 178 00:07:57,540 --> 00:07:58,560 bitai. 179 00:07:58,560 --> 00:08:01,760 Na ten galiausiai galo daug kableliu vertybės, 180 00:08:01,760 --> 00:08:04,940 ir ten be galo daug plūduriuojančius taško verčių, esantys tarp 0 ir 1, 181 00:08:04,940 --> 00:08:07,860 ir mes akivaizdžiai galėjo atstovauti dar daugiau vertės, nei nurodyta. 182 00:08:07,860 --> 00:08:13,230 Taigi, mes turime aukotis, kad gebėti atstovauti dauguma vertybes. 183 00:08:13,230 --> 00:08:16,960 >> Taigi vertė kaip 0,1, matyt mes negalime atstovauti kad tiksliai. 184 00:08:16,960 --> 00:08:22,500 Taigi vietoj atstovaujanti 0,1 darome Geriausia, ką galime atstovauti šiam 0.100000 5 5 185 00:08:22,500 --> 00:08:23,260 5. 186 00:08:23,260 --> 00:08:26,306 Ir tai gana arti, bet už daug paraiškų 187 00:08:26,306 --> 00:08:28,430 Jūs neturite jaudintis slankiojo kablelio netikslumo, 188 00:08:28,430 --> 00:08:30,930 nes mes tiesiog negali atstovauti Visos slankiojo taškų tiksliai. 189 00:08:30,930 --> 00:08:32,500 190 00:08:32,500 --> 00:08:33,380 >> 15 klausimas. 191 00:08:33,380 --> 00:08:34,679 Apsvarstykite šį kodą. 192 00:08:34,679 --> 00:08:36,630 Mes tiesiog spausdinti 1 plius 1. 193 00:08:36,630 --> 00:08:38,289 Taigi nėra triukas čia. 194 00:08:38,289 --> 00:08:41,780 1 plius 1 vertinamas kaip 2, ir tada mes spausdinti, kad. 195 00:08:41,780 --> 00:08:42,789 Tai tiesiog spausdina 2. 196 00:08:42,789 --> 00:08:43,850 197 00:08:43,850 --> 00:08:44,700 >> 16 klausimas. 198 00:08:44,700 --> 00:08:49,450 Dabar mes spausdinti pobūdžio 1 plius simbolis 1. 199 00:08:49,450 --> 00:08:52,110 Tad kodėl tai daro ne spausdinti tą patį? 200 00:08:52,110 --> 00:08:57,680 Na charakteris 1 plius simbolis 1, simbolis 1 yra ASCII vertės 49. 201 00:08:57,680 --> 00:09:04,840 Taigi tai tikrai sako: 49 plius 49 ir galiausiai tai vyksta spausdinti 98. 202 00:09:04,840 --> 00:09:06,130 Taigi tai nespausdina 2. 203 00:09:06,130 --> 00:09:08,070 204 00:09:08,070 --> 00:09:09,271 >> 17 klausimas. 205 00:09:09,271 --> 00:09:11,520 Užpildykite įgyvendinimą iš žemiau nelyginis tokiu būdu 206 00:09:11,520 --> 00:09:14,615 kad funkcija grąžina true, jei n yra nelyginis, ir false, jei n yra net. 207 00:09:14,615 --> 00:09:16,710 208 00:09:16,710 --> 00:09:19,330 Tai puikus tikslas už mod operatorius. 209 00:09:19,330 --> 00:09:24,530 Taigi, mes atsižvelgti į mūsų argumentas n, jei n mod 2 yra lygus 1, ir 210 00:09:24,530 --> 00:09:28,030 tai reiškia, kad n, padalytą iki 2 turėjo dalį. 211 00:09:28,030 --> 00:09:33,270 Jei n padalytą 2 turėjo likusią, kad reiškia, kad n yra nelyginis, tad mes grąžina true. 212 00:09:33,270 --> 00:09:34,910 Kitaip mes grįžti klaidinga. 213 00:09:34,910 --> 00:09:39,070 Jūs taip pat galėjo padaryti n mod 2 kaip lygių nulis, return false, else return true. 214 00:09:39,070 --> 00:09:41,600 215 00:09:41,600 --> 00:09:43,640 >> Apsvarstykite rekursinį funkciją žemiau. 216 00:09:43,640 --> 00:09:46,920 Taigi, jei n yra mažesnis arba lygus 1, grąžina 1, 217 00:09:46,920 --> 00:09:50,430 else return n kartų f n minus 1. 218 00:09:50,430 --> 00:09:52,556 Taigi, kas yra ši funkcija? 219 00:09:52,556 --> 00:09:54,305 Na, tai tik faktorinė funkcija. 220 00:09:54,305 --> 00:09:55,410 221 00:09:55,410 --> 00:09:57,405 Tai gražiai atstovavo kaip n faktorialas. 222 00:09:57,405 --> 00:09:58,720 223 00:09:58,720 --> 00:10:02,310 >> Taigi klausimas 19 Dabar mes norime pasinaudoti šia rekursinį funkciją. 224 00:10:02,310 --> 00:10:04,530 Mes norime, kad jis kartojamas. 225 00:10:04,530 --> 00:10:05,874 Taigi, kaip mes tai darome? 226 00:10:05,874 --> 00:10:07,790 Na už darbuotojų sprendimas, ir vėl ten 227 00:10:07,790 --> 00:10:11,090 keli būdai kaip galėjo padaryti kad mes pradėti su šiuo int produkto 228 00:10:11,090 --> 00:10:11,812 lygus 1. 229 00:10:11,812 --> 00:10:13,520 Ir per šį for ciklas, mes ketiname 230 00:10:13,520 --> 00:10:17,590 dauginant produktą turi būti galiausiai baigti su visiškai faktorialas. 231 00:10:17,590 --> 00:10:21,870 Taigi int i lygu 2, i mažiau nei arba lygus n, i ++. 232 00:10:21,870 --> 00:10:24,130 >> Jums gali būti įdomu, kodėl aš lygus 2. 233 00:10:24,130 --> 00:10:28,380 Na, prisimenu, kad čia turime įsitikinkite mūsų bazinį scenarijų yra teisinga. 234 00:10:28,380 --> 00:10:32,180 Taigi, jei n yra mažesnis arba lygus 1, mes tiesiog grįžti 1. 235 00:10:32,180 --> 00:10:34,830 Taigi per čia, mes pradėti i lygu 2. 236 00:10:34,830 --> 00:10:39,090 Na, jei aš buvo 1, tada the-- arba jei n buvo 1, tada už kilpa 237 00:10:39,090 --> 00:10:40,600 nebūtų įvykdyti ne visi. 238 00:10:40,600 --> 00:10:43,190 Ir taip mes tiesiog grąžinimas produktas, kuris yra 1. 239 00:10:43,190 --> 00:10:45,920 Panašiai, jei n buvo nieko mažiau nei 1-- 240 00:10:45,920 --> 00:10:49,290 jei ji buvo 0, neigiamas 1, whatever-- mes norime dar grįš 1, 241 00:10:49,290 --> 00:10:52,260 kuri yra būtent tai, ką pakartotinė versija daro. 242 00:10:52,260 --> 00:10:54,660 >> Dabar, jei n yra didesnis nei 1, tada mes ketiname 243 00:10:54,660 --> 00:10:56,550 padaryti bent vieną iteracijos šios kilpos. 244 00:10:56,550 --> 00:11:00,630 Taigi galime sakyti, n yra 5, o po to mes darysiu produktų kartus lygus 2. 245 00:11:00,630 --> 00:11:02,165 Taigi, dabar produktas yra 2. 246 00:11:02,165 --> 00:11:04,040 Dabar mes ketiname daryti Produktų kartų lygus 3. 247 00:11:04,040 --> 00:11:04,690 Dabar atėjo 6. 248 00:11:04,690 --> 00:11:07,500 Prekės laikai yra lygus 4, o dabar tai 24. 249 00:11:07,500 --> 00:11:10,420 Prekės laikai yra lygus 5, dabar tai 120. 250 00:11:10,420 --> 00:11:16,730 Taigi galiausiai, mes grįžti 120, kuris yra teisingai 5 faktorialas. 251 00:11:16,730 --> 00:11:17,510 >> 20 klausimas. 252 00:11:17,510 --> 00:11:22,480 Tai vienas, kur jūs turite užpildyti šios lentelės bet kuriuo algoritmas, 253 00:11:22,480 --> 00:11:25,735 nieko, kad mes matėme, kad tinka šias algoritminį paleisti 254 00:11:25,735 --> 00:11:28,060 kartų šių Asimptotinio veikimo laikai. 255 00:11:28,060 --> 00:11:33,270 Taigi, kas yra algoritmas, kuris yra omega 1, bet didelis O n? 256 00:11:33,270 --> 00:11:35,970 Taigi gali būti be galo daug atsakymų čia. 257 00:11:35,970 --> 00:11:39,790 Vienas, kad mes matėme turbūt dažnai yra tik tiesinis paieška. 258 00:11:39,790 --> 00:11:42,050 >> Taigi geriausiu atveju scenarijus, punktas mes 259 00:11:42,050 --> 00:11:44,050 ieško yra pradedant sąrašo 260 00:11:44,050 --> 00:11:47,400 ir todėl omega nuo 1 žingsnių, Pirmas dalykas, mes patikrinti, 261 00:11:47,400 --> 00:11:49,740 mes tiesiog iš karto grįžti kad mes radome elementą. 262 00:11:49,740 --> 00:11:52,189 Blogiausiu atveju, elementas yra pabaigos 263 00:11:52,189 --> 00:11:53,730 arba prekės nėra sąraše ne visiems. 264 00:11:53,730 --> 00:11:56,700 Taigi, mes turime ieškoti Visas sąrašas, visa n 265 00:11:56,700 --> 00:11:58,480 elementai, ir tai, kodėl ji o n. 266 00:11:58,480 --> 00:11:59,670 267 00:11:59,670 --> 00:12:04,880 >> Taigi, dabar tai kažkas tai tiek omega n log n, ir didelis O n log n. 268 00:12:04,880 --> 00:12:08,650 Na aktualiausia dalykas mes matėme čia yra sujungti rūšiuoti. 269 00:12:08,650 --> 00:12:12,950 Taigi sujungti rūšiuoti, atminkite, galiausiai teta 270 00:12:12,950 --> 00:12:16,920 n log n, kur teta apibrėžta jei abi omega ir didelis O yra tokie patys. 271 00:12:16,920 --> 00:12:17,580 Tiek n log n. 272 00:12:17,580 --> 00:12:18,690 273 00:12:18,690 --> 00:12:21,970 >> Kas ką tai omega n ir O, n kvadrato? 274 00:12:21,970 --> 00:12:23,990 Na, vėl ten keli galimi atsakymai. 275 00:12:23,990 --> 00:12:26,440 Čia mes atsitikti pasakyti burbulas rūšiuoti. 276 00:12:26,440 --> 00:12:28,840 Insertion sort taip pat dirba čia. 277 00:12:28,840 --> 00:12:31,400 Atminkite, kad burbulas rūšiuoti turi tą optimizavimą, kai, 278 00:12:31,400 --> 00:12:34,630 jei yra galimybė gauti per visą sąrašą 279 00:12:34,630 --> 00:12:37,402 nereikia daryti bet apsikeitimo, tada, gerai, 280 00:12:37,402 --> 00:12:40,110 mes galime iš karto grįžti, kad sąrašas buvo rūšiuojami prasideda. 281 00:12:40,110 --> 00:12:43,185 Taigi, geriausiu atveju, tai tik omega n. 282 00:12:43,185 --> 00:12:45,960 Jei tai ne tik gražiai rūšiuoti sąrašą Norėdami pradėti su, 283 00:12:45,960 --> 00:12:48,270 tada mes turime O n kvadrato apsikeitimo sandoriais. 284 00:12:48,270 --> 00:12:49,330 285 00:12:49,330 --> 00:12:55,610 Ir pagaliau, mes turime pasirinkimo rūšiuoti už n kvadratu, omega ir didelis O. 286 00:12:55,610 --> 00:12:56,850 >> Klausimas 21. 287 00:12:56,850 --> 00:12:58,870 Kas integer overflow? 288 00:12:58,870 --> 00:13:02,160 Na vėl, panašiai kaip ir anksčiau, turime tik žinoma daug bitai 289 00:13:02,160 --> 00:13:04,255 atstovauti sveikasis skaičius, tai gal 32 bitai. 290 00:13:04,255 --> 00:13:06,300 291 00:13:06,300 --> 00:13:09,180 Tarkime turime integer. 292 00:13:09,180 --> 00:13:12,800 Tada galiausiai aukščiausia teigiamas skaičius galime atstovauti 293 00:13:12,800 --> 00:13:15,910 yra nuo 2 iki 31 minus 1. 294 00:13:15,910 --> 00:13:19,370 Taigi, kas atsitinka, kai mes bandome tada didinkite tą sveikuosius? 295 00:13:19,370 --> 00:13:25,320 Na, mes ketiname eiti nuo 2 iki 31 minus 1, visą kelią žemyn į neigiamą 2 296 00:13:25,320 --> 00:13:26,490 į 31. 297 00:13:26,490 --> 00:13:29,470 Taigi tai sveikas perpildymas kai jūs nuolat incrementing, 298 00:13:29,470 --> 00:13:32,330 ir galiausiai galite ne gauti bet didesnis ir ji tiesiog 299 00:13:32,330 --> 00:13:34,520 apsiaustas visą kelią atgal aplink neigiamą vertę. 300 00:13:34,520 --> 00:13:35,850 301 00:13:35,850 --> 00:13:37,779 >> Ką apie buferio? 302 00:13:37,779 --> 00:13:39,820 Taigi buferis overflow-- prisiminti, kas buferio. 303 00:13:39,820 --> 00:13:41,000 Tai tiesiog iš atminties riekė. 304 00:13:41,000 --> 00:13:43,350 Kažkas panašaus masyvo yra buferis. 305 00:13:43,350 --> 00:13:46,120 Taigi buferio yra, kai bandysite prisijungti prie atminties 306 00:13:46,120 --> 00:13:47,880 už tos masyvo pabaigos. 307 00:13:47,880 --> 00:13:50,410 Taigi, jei turite masyvas dydžio 5 ir jus 308 00:13:50,410 --> 00:13:53,700 pabandykite naudoti masyvo laikiklis 5 arba laikiklio 6 arba laikiklio 7, 309 00:13:53,700 --> 00:13:56,610 ar kas nors už pabaigos, ar net ką nors 310 00:13:56,610 --> 00:14:00,790 below-- masyvas laikiklis neigiamas 1-- visi iš jų yra buferio perpildymas. 311 00:14:00,790 --> 00:14:02,810 Jūs neliesti atmintį blogais keliais. 312 00:14:02,810 --> 00:14:04,090 313 00:14:04,090 --> 00:14:04,730 >> Klausimas 23. 314 00:14:04,730 --> 00:14:05,760 315 00:14:05,760 --> 00:14:09,100 Taigi šiame, turėsite įgyvendinti strlen. 316 00:14:09,100 --> 00:14:11,630 Ir mes jums pasakyti, kad jūs galite prisiimti s nebus nulis, 317 00:14:11,630 --> 00:14:13,790 todėl jūs neturite padaryti bet NULL patikrinimą. 318 00:14:13,790 --> 00:14:16,190 Ir yra daug būdų, galite tai padarė. 319 00:14:16,190 --> 00:14:18,440 Čia mes tiesiog paprasta. 320 00:14:18,440 --> 00:14:21,780 Mes pradedame prekystalio, n. n yra skaičiuoti, kiek simbolių yra. 321 00:14:21,780 --> 00:14:25,560 Taigi, mes pradėti 0, ir tada mes pakartoti per visą sąrašą. 322 00:14:25,560 --> 00:14:29,092 >> Ar s laikiklis 0 lygus null terminatorius charakteris? 323 00:14:29,092 --> 00:14:31,425 Įsiminti mes ieškome null terminatorius pobūdis 324 00:14:31,425 --> 00:14:33,360 nustatyti, kiek laiko mūsų eilutė. 325 00:14:33,360 --> 00:14:35,890 Kad ketina nutraukti bet kokia atitinkama eilutė. 326 00:14:35,890 --> 00:14:39,400 Taigi yra s laikiklis 0 lygūs į null terminatorius? 327 00:14:39,400 --> 00:14:42,850 Jei taip nėra, tada mes ketiname ieškoti -ų laikiklio 1, S laikiklio 2. 328 00:14:42,850 --> 00:14:45,050 Mes nuolat vyksta, kol mes rasti null terminatorius. 329 00:14:45,050 --> 00:14:48,580 Kai mes jį radote, tada n yra Bendras ilgis eilutę, 330 00:14:48,580 --> 00:14:49,942 ir mes galime tik grąžinti tai. 331 00:14:49,942 --> 00:14:51,180 332 00:14:51,180 --> 00:14:51,865 >> Klausimas 24. 333 00:14:51,865 --> 00:14:53,010 334 00:14:53,010 --> 00:14:56,050 Taigi tai yra vienas, kur jūs turite padaryti kompromisą. 335 00:14:56,050 --> 00:14:59,810 Taigi vienas dalykas yra geras viename taip, bet kokiu būdu tai blogai? 336 00:14:59,810 --> 00:15:02,980 Taigi čia, sujungti rūšiuoti linkęs greičiau nei burbulas rūšiuoti. 337 00:15:02,980 --> 00:15:06,530 Pasakęs that-- gerai, ten Yra galimi keli atsakymo čia. 338 00:15:06,530 --> 00:15:12,930 Bet pats svarbiausias yra tas, kad burbulas rūšiuoti yra omega n už rūšiuotas sąrašą. 339 00:15:12,930 --> 00:15:14,950 >> Atminkite, kad stalą mes tiesiog matė anksčiau. 340 00:15:14,950 --> 00:15:17,600 Taigi burbulas rūšiuoja omega n, geriausias scenarijus 341 00:15:17,600 --> 00:15:20,010 yra tai galėjo tik eiti per sąrašas kartą, nustatyti, 342 00:15:20,010 --> 00:15:22,270 hey tai dalykas jau rūšiuojami, ir grįžimas. 343 00:15:22,270 --> 00:15:25,960 Sujungti rūšiuoti, nesvarbu, kokia jūs, yra omega n log n. 344 00:15:25,960 --> 00:15:29,200 Taigi už rūšiuotas sąrašą burbulo rūšiuoti ketina būti greitesnis. 345 00:15:29,200 --> 00:15:30,870 346 00:15:30,870 --> 00:15:32,430 >> Dabar ką apie susieta sąrašus? 347 00:15:32,430 --> 00:15:36,070 Taigi susietas sąrašas gali augti ir trauktis kad tilptų kuo daugiau elementų, kaip reikia. 348 00:15:36,070 --> 00:15:38,489 Pasakęs that-- taip paprastai tiesiogiai palyginti 349 00:15:38,489 --> 00:15:40,280 bus susijęs sąrašą su masyvo. 350 00:15:40,280 --> 00:15:41,600 351 00:15:41,600 --> 00:15:44,050 Taigi, nors masyvai gali lengvai auga ir trauktis 352 00:15:44,050 --> 00:15:47,130 kad tilptų kuo daugiau elementų, kiek reikia, susijusi sąrašą 353 00:15:47,130 --> 00:15:49,600 palyginti su array-- AN masyvas turi laisvą prieigą. 354 00:15:49,600 --> 00:15:52,960 Galime indeksą į bet ypač masyvo elementą. 355 00:15:52,960 --> 00:15:56,430 >> Taigi susietai sąrašą, mes negalime tiesiog eikite į penktasis elementas, 356 00:15:56,430 --> 00:16:00,260 mes turime išanalizuoti nuo pradžių kol mes gauti į penktąjį elementą. 357 00:16:00,260 --> 00:16:03,990 Ir tų, kurie ketina neleisti mums daro kažką panašaus dvejetainis paieškos. 358 00:16:03,990 --> 00:16:08,150 Kalbėdamas dvejetainis paieškos, dvejetainis paieškos linkęs būti greičiau nei tiesinės paiešką. 359 00:16:08,150 --> 00:16:11,120 Pasakęs that-- taip, kad vienas iš galimų dalykas 360 00:16:11,120 --> 00:16:13,380 yra tai, kad jūs negalite padaryti dvejetainis ieškoti susijusių sąrašus, 361 00:16:13,380 --> 00:16:14,730 Jūs galite tai padaryti tik jį matricos. 362 00:16:14,730 --> 00:16:18,030 Bet turbūt svarbiausia, jūs negalite padaryti dvejetainius paiešką 363 00:16:18,030 --> 00:16:20,690 nuo masyvo kad nerūšiuojamos. 364 00:16:20,690 --> 00:16:23,990 Išankstiniai gali tekti rūšiuoti masyvas, ir tik tada gali 365 00:16:23,990 --> 00:16:25,370 jūs dvejetainis paieškos. 366 00:16:25,370 --> 00:16:27,660 Taigi, jei jūsų dalykas nėra Rūšiuota prasideda, 367 00:16:27,660 --> 00:16:29,250 tada linijinis paieška galima greičiau. 368 00:16:29,250 --> 00:16:30,620 369 00:16:30,620 --> 00:16:31,740 >> Klausimas 27. 370 00:16:31,740 --> 00:16:34,770 Todėl mano, kad programa toliau, kuris bus į kitą skaidrę. 371 00:16:34,770 --> 00:16:37,790 Ir tai yra vienas, kur mes esame norės aiškiai nurodyti 372 00:16:37,790 --> 00:16:39,980 dėl įvairių kintamųjų reikšmės. 373 00:16:39,980 --> 00:16:41,990 Taigi pažvelkime, kad. 374 00:16:41,990 --> 00:16:43,160 >> Taigi išsirikiuoti vienas. 375 00:16:43,160 --> 00:16:45,457 Mes turime int x lygus 1. 376 00:16:45,457 --> 00:16:47,040 Tai vienintelis dalykas, kuris nutiko. 377 00:16:47,040 --> 00:16:50,440 Taigi eilutėje vieną, matome mūsų lentelė, kad y, a, b, ir yra visi tmp 378 00:16:50,440 --> 00:16:51,540 tamsios. 379 00:16:51,540 --> 00:16:52,280 Taigi, kas yra x? 380 00:16:52,280 --> 00:16:53,860 Na mes tiesiog nustatyti jį lygus 1. 381 00:16:53,860 --> 00:16:55,020 382 00:16:55,020 --> 00:16:58,770 Ir tada linija du, gerai, mes matome, kad Y yra nustatytas į 2, 383 00:16:58,770 --> 00:17:00,550 ir lentelė yra jau užpildyta mums. 384 00:17:00,550 --> 00:17:03,040 Taigi x yra 1 ir y yra 2. 385 00:17:03,040 --> 00:17:05,890 >> Dabar, linija trys, mes dabar viduje apsikeitimo funkcija. 386 00:17:05,890 --> 00:17:07,560 Ką mes pereiname apsikeitimo? 387 00:17:07,560 --> 00:17:11,609 Mes vyko Ženklas X ir ampersand y B. 388 00:17:11,609 --> 00:17:15,160 Kai problema anksčiau pareiškė, kad x adresas 389 00:17:15,160 --> 00:17:17,520 yra 0x10, ir y yra 0x14 adresas. 390 00:17:17,520 --> 00:17:18,970 391 00:17:18,970 --> 00:17:21,909 Taigi a ir b yra lygūs 0x10 ir 0x14, atitinkamai. 392 00:17:21,909 --> 00:17:23,670 393 00:17:23,670 --> 00:17:26,250 >> Dabar eilutėje tris, kas yra x ir y? 394 00:17:26,250 --> 00:17:28,554 Na, niekas nepasikeitė apie x ir y šiame taške. 395 00:17:28,554 --> 00:17:30,470 Nors jie yra viduje pagrindinis kamino rėmo, 396 00:17:30,470 --> 00:17:32,469 jie vis dar turi tą pačią vertės jie anksčiau. 397 00:17:32,469 --> 00:17:34,030 Mes nepakeitė jokios atminties. 398 00:17:34,030 --> 00:17:35,710 Taigi x yra 1, Y yra 2. 399 00:17:35,710 --> 00:17:36,550 400 00:17:36,550 --> 00:17:37,050 Gerai. 401 00:17:37,050 --> 00:17:40,300 Taigi dabar mes sakė int tmp lygus žvaigždė. 402 00:17:40,300 --> 00:17:44,410 Taigi eilutėje keturių viskas yra vienodi, išskyrus tmp. 403 00:17:44,410 --> 00:17:47,130 Mes nepasikeitė jokių vertybių nieko, išskyrus tmp. 404 00:17:47,130 --> 00:17:49,230 Mes kuriame tmp vienodą žvaigždė. 405 00:17:49,230 --> 00:17:50,620 Kas yra žvaigždė? 406 00:17:50,620 --> 00:17:56,240 Na, taškų x, Taigi žvaigždė ketina vienodo x, kuris yra 1. 407 00:17:56,240 --> 00:18:00,080 Taigi viskas yra nukopijuotas žemyn, ir tmp yra nustatytas 1. 408 00:18:00,080 --> 00:18:01,110 >> Dabar kitą eilutę. 409 00:18:01,110 --> 00:18:03,380 Žvaigždė lygu žvaigždė b. 410 00:18:03,380 --> 00:18:10,000 Taigi po eilutės five-- vėl gerai, viskas yra tos pačios, išskyrus kokia žvaigždė yra. 411 00:18:10,000 --> 00:18:10,830 Kas yra žvaigždė? 412 00:18:10,830 --> 00:18:13,720 Na, mes tiesiog pasakė žvaigždė yra x. 413 00:18:13,720 --> 00:18:16,400 Taigi, mes keičiame X vienodo žvaigždutėmis b. 414 00:18:16,400 --> 00:18:18,960 Kas yra žvaigždė b? y. B dalyse m. 415 00:18:18,960 --> 00:18:21,030 Taigi žvaigždė b yra y. 416 00:18:21,030 --> 00:18:25,140 Taigi mes kuriame x lygus y, ir visa kita yra tas pats. 417 00:18:25,140 --> 00:18:29,130 Taigi mes matome kitą eilutę, kad x yra dabar 2, o likusios yra tik nukopijuoti žemyn. 418 00:18:29,130 --> 00:18:31,120 >> Dabar kitame linijos, žvaigždės b lygu tmp. 419 00:18:31,120 --> 00:18:34,740 Na, mes tiesiog pasakė žvaigždė b yra y, todėl mes kuriame y lygus tmp. 420 00:18:34,740 --> 00:18:37,450 Visa kita yra tas pats, taip viskas tampa nukopijuoti žemyn. 421 00:18:37,450 --> 00:18:42,050 Mes kuriame Y yra lygus tmp, kuris yra vienas, ir visa kita yra tas pats. 422 00:18:42,050 --> 00:18:43,210 >> Dabar pagaliau, linija septyni. 423 00:18:43,210 --> 00:18:44,700 Mes grįžome į pagrindinės funkcijos. 424 00:18:44,700 --> 00:18:46,350 Mes po apsikeitimo baigtas. 425 00:18:46,350 --> 00:18:48,972 Mes praradome a, b, ir tmp, tačiau galiausiai mes 426 00:18:48,972 --> 00:18:51,180 nekeičiame jokių vertybių nieko šiuo metu, 427 00:18:51,180 --> 00:18:52,800 mes tiesiog nukopijuokite X ir Y žemyn. 428 00:18:52,800 --> 00:18:56,490 Ir mes matome, kad x ir y yra dabar 2 ir 1 1 ir 2 vietoj. 429 00:18:56,490 --> 00:18:58,160 Apsikeitimo sėkmingai įvykdytas. 430 00:18:58,160 --> 00:18:59,500 431 00:18:59,500 --> 00:19:00,105 >> 28 klausimas. 432 00:19:00,105 --> 00:19:01,226 433 00:19:01,226 --> 00:19:03,100 Tarkime, kad jūs susidūrėte pranešimų apie klaidą, 434 00:19:03,100 --> 00:19:06,790 Toliau darbo valandomis Kitais metais, kaip CA ar TF. 435 00:19:06,790 --> 00:19:08,930 Patarkite, kaip išspręsti kiekvieną iš šių klaidų. 436 00:19:08,930 --> 00:19:11,160 Taigi undefined nuoroda į GetString. 437 00:19:11,160 --> 00:19:12,540 Kodėl jūs galite pamatyti tai? 438 00:19:12,540 --> 00:19:15,380 Na, jei studentas naudoja GetString savo kodą, 439 00:19:15,380 --> 00:19:20,310 jie tinkamai maišos įtraukti CS50 dot h įtraukti CS50 biblioteką. 440 00:19:20,310 --> 00:19:22,380 >> Na, ką jie reikia ištaisyti šią klaidą? 441 00:19:22,380 --> 00:19:26,810 Jie turi padaryti, yra brūkšnys lcs50 ne komandinės eilutės, kai jie pritaikyti ESS reikalavimams. 442 00:19:26,810 --> 00:19:29,501 Taigi, jei jie neina Zaszczękać brūkšnys lcs50, jie 443 00:19:29,501 --> 00:19:32,000 nesiruošia faktinis kodas, kuris įgyvendina GetString. 444 00:19:32,000 --> 00:19:33,190 445 00:19:33,190 --> 00:19:34,170 >> Klausimas 29. 446 00:19:34,170 --> 00:19:36,190 Netiesiogiai skelbiantis bibliotekos funkcija strlen. 447 00:19:36,190 --> 00:19:37,550 448 00:19:37,550 --> 00:19:40,360 Na tai dabar jie neturi padaryti tinkamą maišos yra. 449 00:19:40,360 --> 00:19:41,440 450 00:19:41,440 --> 00:19:45,410 Šiuo konkrečiu atveju, failo antraštės jie turi apimti string dot h, 451 00:19:45,410 --> 00:19:48,710 įskaitant styginių dot h, dabar student-- dabar sudarytojas 452 00:19:48,710 --> 00:19:51,750 turi teisę susipažinti su deklaracijos strlen, 453 00:19:51,750 --> 00:19:54,120 ir jis žino, kad Jūsų kodas naudoja strlen teisingai. 454 00:19:54,120 --> 00:19:55,380 455 00:19:55,380 --> 00:19:56,580 >> 30 klausimas. 456 00:19:56,580 --> 00:20:00,240 Daugiau procentų konversijos nei duomenų argumentais. 457 00:20:00,240 --> 00:20:01,540 Taigi, kas tai yra? 458 00:20:01,540 --> 00:20:06,470 Gerai prisimenu, kad tai procentai signs-- kaip jie susiję su printf. 459 00:20:06,470 --> 00:20:08,890 Taigi printf galime percent-- mes galime spausdinti kažką 460 00:20:08,890 --> 00:20:11,380 kaip procentų i kairinis pasvirasis brūkšnys n. 461 00:20:11,380 --> 00:20:15,310 Ar mes galime atspausdinti kaip procentų i, erdvė, proc i, erdvė, proc i. 462 00:20:15,310 --> 00:20:18,950 Taigi kiekvienas iš jų procentų ženklai, turime 463 00:20:18,950 --> 00:20:21,560 perduoti kintamąjį ties printf pabaigos. 464 00:20:21,560 --> 00:20:26,980 >> Taigi, jei mes sakome, printf paren proc i kairinis pasvirasis brūkšnys n glaudžius paren, 465 00:20:26,980 --> 00:20:30,270 gerai, mes sakome, kad mes ruošiant spausdinti sveikasis, 466 00:20:30,270 --> 00:20:33,970 bet tada mes negalime praeiti printf sveikasis skaičius, kad iš tikrųjų spausdinti. 467 00:20:33,970 --> 00:20:37,182 Taigi čia daugiau procentų konversijų nei duomenų argumentai? 468 00:20:37,182 --> 00:20:39,390 Kad sako, kad mes turime visa krūva procentais, 469 00:20:39,390 --> 00:20:42,445 ir mes neturime pakankamai kintamuosius faktiškai užpildyti tų procentų. 470 00:20:42,445 --> 00:20:44,850 471 00:20:44,850 --> 00:20:50,010 >> Ir tada tikrai, už 31 klausimą, tikrai neteko 40 baitų vienoje blokus. 472 00:20:50,010 --> 00:20:52,350 Taigi tai yra Valgrind klaida. 473 00:20:52,350 --> 00:20:54,720 Tai suprantama, kad kažkur savo kodą, 474 00:20:54,720 --> 00:20:59,010 turite paskirstyti, kad yra 40 baitai didelės, todėl malloced 40 baitų, 475 00:20:59,010 --> 00:21:00,515 ir jūs niekada išlaisvino jį. 476 00:21:00,515 --> 00:21:02,480 477 00:21:02,480 --> 00:21:05,140 Greičiausiai Jūs tiesiog reikia radote Atminties nutekėjimas, 478 00:21:05,140 --> 00:21:07,650 ir rasti, kur jums reikia nemokamai tai atminties blokas. 479 00:21:07,650 --> 00:21:08,780 480 00:21:08,780 --> 00:21:11,910 >> Ir apklausti 32, negaliojančiu rašyti dydžio 4. 481 00:21:11,910 --> 00:21:13,250 Vėlgi tai yra Valgrind klaida. 482 00:21:13,250 --> 00:21:15,440 Tai nebūtinai turi daryti su atminties nutekėjimas dabar. 483 00:21:15,440 --> 00:21:20,750 Tai, dauguma likely-- Aš turiu galvoje, tai kai negaliojančių atminties teisių rūšiuoti. 484 00:21:20,750 --> 00:21:23,270 Ir greičiausiai tai kai rūšiuoti buferio. 485 00:21:23,270 --> 00:21:26,560 Kur jūs turite masyvą, gal integer masyvas, ir tegul 486 00:21:26,560 --> 00:21:30,115 sako, kad jų dydis 5, ir jūs pabandykite paliesti masyvo laikiklis 5. 487 00:21:30,115 --> 00:21:34,150 Taigi, jei jūs bandote rašyti, kad vertė, tai ne atminties gabalas 488 00:21:34,150 --> 00:21:37,440 kad jūs iš tikrųjų turi galimybę naudotis ir todėl jūs ketinate gauti šią klaidą, 489 00:21:37,440 --> 00:21:39,272 sakydamas negaliojančių užrašyti tai dydis 4. 490 00:21:39,272 --> 00:21:42,480 Valgrind ketina pripažinti esate bando paliesti atmintį netinkamai. 491 00:21:42,480 --> 00:21:43,980 >> Ir tai jį quiz0. 492 00:21:43,980 --> 00:21:47,065 Aš Rob Bowden, ir tai yra CS50. 493 00:21:47,065 --> 00:21:51,104