1 00:00:00,000 --> 00:00:09,572 2 00:00:09,572 --> 00:00:12,030 Rob Bowden: Hi, unë jam Rob Bowden, dhe le të flasim për quiz0. 3 00:00:12,030 --> 00:00:13,280 4 00:00:13,280 --> 00:00:14,545 >> Pra, pyetja e parë. 5 00:00:14,545 --> 00:00:17,750 Kjo është pyetja, ku ju nevojitet për kodin numrin 6 00:00:17,750 --> 00:00:21,270 127 në bulbs binare. 7 00:00:21,270 --> 00:00:23,550 Në qoftë se ju të kërkuar, ju mund të të bëjë konvertimin rregullt 8 00:00:23,550 --> 00:00:25,950 nga bi-- ose, nga decimal në binar. 9 00:00:25,950 --> 00:00:28,300 Por kjo ndoshta do për të marrë një shumë kohë. 10 00:00:28,300 --> 00:00:31,750 Unë do të thotë, që ju mund të kuptoj se, OK, 1 është në atje, 2 në atje, 11 00:00:31,750 --> 00:00:33,650 4 është në atje, 8 është në atje. 12 00:00:33,650 --> 00:00:39,280 Mënyra më e lehtë, 127 është 128 minus një. 13 00:00:39,280 --> 00:00:42,013 Kjo llambë drita pari nga e majta është 128-bit. 14 00:00:42,013 --> 00:00:43,490 15 00:00:43,490 --> 00:00:47,860 Pra, 127 është me të vërtetë vetëm të gjitha nga llamba të tjera të lehta, 16 00:00:47,860 --> 00:00:51,420 pasi kjo është pari nga e majta llambë të lehta minus 1. 17 00:00:51,420 --> 00:00:52,800 Kjo është ajo për këtë pyetje. 18 00:00:52,800 --> 00:00:54,060 >> Pyetje një. 19 00:00:54,060 --> 00:00:56,710 Pra, me 3 copa që ju mund të paraqesin 8 vlera të dallueshme. 20 00:00:56,710 --> 00:01:01,000 Pse, atëherë, është 7 më e madhe e jo-negative integer decimal ju mund të përfaqësojë? 21 00:01:01,000 --> 00:01:04,050 E pra, në qoftë se ne vetëm mund të paraqesin 8 vlera të dallueshme, 22 00:01:04,050 --> 00:01:07,430 atëherë ajo që ne jemi duke shkuar për të përfaqëson eshte 0 deri 7. 23 00:01:07,430 --> 00:01:08,745 0 merr një nga vlerat. 24 00:01:08,745 --> 00:01:09,980 25 00:01:09,980 --> 00:01:11,190 >> Pyetje dy. 26 00:01:11,190 --> 00:01:14,610 Me copa n, sa të dallueshme Vlerat mund të ju përfaqësoni? 27 00:01:14,610 --> 00:01:19,080 Pra, me copa n, ju keni 2 Vlerat e mundshme për çdo grimë. 28 00:01:19,080 --> 00:01:22,300 Pra, ne kemi 2 vlerat e mundshme për bit e parë, 2 Vlerat e mundëshme 29 00:01:22,300 --> 00:01:24,450 për të dytë, 2 është e mundur për të tretën. 30 00:01:24,450 --> 00:01:28,730 Dhe kështu që është 2 herë 2 herë 2, dhe në fund të fundit përgjigja është 2 deri në n. 31 00:01:28,730 --> 00:01:30,010 32 00:01:30,010 --> 00:01:31,100 >> Pyetje tre. 33 00:01:31,100 --> 00:01:33,450 Çfarë është 0x50 në binar? 34 00:01:33,450 --> 00:01:39,490 Pra mos harroni se heksadecimal ka një shumë të konvertimit të drejtpërdrejtë në binar. 35 00:01:39,490 --> 00:01:43,180 Pra këtu, ne vetëm duhet të shikoni në 5 dhe 0 pavarur. 36 00:01:43,180 --> 00:01:45,110 Pra, çfarë është 5 në binar? 37 00:01:45,110 --> 00:01:48,400 0101, që është 1 bit dhe 4 bit. 38 00:01:48,400 --> 00:01:49,900 Çfarë është 0 në binar? 39 00:01:49,900 --> 00:01:50,520 Jo ndërlikuar. 40 00:01:50,520 --> 00:01:52,180 0000. 41 00:01:52,180 --> 00:01:54,970 Pra, vetëm të vënë ata së bashku, dhe që është numri i plotë në binar. 42 00:01:54,970 --> 00:01:57,640 01.010.000. 43 00:01:57,640 --> 00:02:00,439 Dhe në qoftë se ju të kërkuar që ju mund të ik se pari nga e majta zero. 44 00:02:00,439 --> 00:02:01,105 Është e parëndësishme. 45 00:02:01,105 --> 00:02:02,920 46 00:02:02,920 --> 00:02:05,733 >> Pra, atëherë si alternativë, çfarë është 0x50 në decimal? 47 00:02:05,733 --> 00:02:08,649 Në qoftë se ju të kërkuar, ju could-- qoftë se ju jeni më të rehatshme me binar, 48 00:02:08,649 --> 00:02:11,340 ju mund të merrni atë përgjigje binar dhe kthyer atë në decimal. 49 00:02:11,340 --> 00:02:13,870 Ose ne mund vetëm të kujtojmë se heksadecimal. 50 00:02:13,870 --> 00:02:21,140 Kështu që 0 është në vendin e 0-të, dhe 5 është në 16 në vend të parë. 51 00:02:21,140 --> 00:02:25,990 Kështu që këtu, kemi 5 herë 16 për parë, plus 0 herë 16 me zero, 52 00:02:25,990 --> 00:02:27,520 është 80. 53 00:02:27,520 --> 00:02:29,710 Dhe në qoftë se ju shikuar Titulli në pyetjen, 54 00:02:29,710 --> 00:02:32,920 ajo ishte CS 80, e cila ishte lloj i një aluzion në përgjigje të këtij problemi. 55 00:02:32,920 --> 00:02:34,460 56 00:02:34,460 --> 00:02:35,420 >> Pyetje pesë. 57 00:02:35,420 --> 00:02:40,320 Ne kemi këtë skenar Scratch, e cila është përsëritur 4 herë gjalpë badiava pelte. 58 00:02:40,320 --> 00:02:42,800 Pra, si nuk kemi tani kodin që në C? 59 00:02:42,800 --> 00:02:47,730 E pra, ne kemi here-- pjesë në bold është vetëm një pjesë e keni pasur për të zbatuar. 60 00:02:47,730 --> 00:02:51,950 Pra, ne kemi një lak 4 që është looping 4 herë, printf-ing badiava gjalpë pelte, 61 00:02:51,950 --> 00:02:53,910 me linjë të re si problemi kërkon. 62 00:02:53,910 --> 00:02:55,250 63 00:02:55,250 --> 00:02:57,490 >> Pyetja e gjashtë, një tjetër problem Scratch. 64 00:02:57,490 --> 00:03:00,210 Ne e shohim se ne jemi në një lak përgjithmonë. 65 00:03:00,210 --> 00:03:05,000 Ne jemi duke thënë se i ndryshueshme dhe pastaj bën rritjen i nga 1. 66 00:03:05,000 --> 00:03:09,580 Tani ne duam të bëjmë atë në C. Ka mënyra të shumta që mund të ketë bërë këtë. 67 00:03:09,580 --> 00:03:12,840 Këtu ne ndodhi me kodin përgjithmonë loop si një kohë (të vërtetë). 68 00:03:12,840 --> 00:03:16,600 Pra, ne deklarojmë ndryshorja i, vetëm ashtu si kemi pasur i ndryshueshëm në Scratch. 69 00:03:16,600 --> 00:03:21,950 Deklaroj i ndryshueshme, dhe përgjithmonë ndërsa (e vërtetë), ne themi variablin i. 70 00:03:21,950 --> 00:03:25,260 Pra printf% i-- ose ju mund të keni përdorur% d. 71 00:03:25,260 --> 00:03:27,985 Ne themi se ndryshore, dhe pastaj rrisim atë, i ++. 72 00:03:27,985 --> 00:03:29,560 73 00:03:29,560 --> 00:03:30,830 >> Pyetje shtatë. 74 00:03:30,830 --> 00:03:35,560 Tani ne duam të bëjmë diçka shumë të ngjashme për Mario dot c nga problemi vendosur një të tillë. 75 00:03:35,560 --> 00:03:39,110 Ne duam për të shkruar këto hashtags, ne duam për të shkruar një pesë 76 00:03:39,110 --> 00:03:40,700 nga tre drejtkëndësh i këtyre hashes. 77 00:03:40,700 --> 00:03:41,770 78 00:03:41,770 --> 00:03:43,162 Pra, si do të shkojmë për të bërë këtë? 79 00:03:43,162 --> 00:03:45,370 E pra, ne ju jap një e tërë bandë të kodit, dhe ju vetëm 80 00:03:45,370 --> 00:03:47,560 duhet të plotësoni në funksion të rrjetit të shtypura. 81 00:03:47,560 --> 00:03:49,540 >> Pra, çfarë e bën PrintGrid duken si? 82 00:03:49,540 --> 00:03:51,480 Edhe ju jeni e kaluara gjerësi dhe lartësi. 83 00:03:51,480 --> 00:03:53,520 Pra, ne kemi një Outer 4 loop, kjo është looping 84 00:03:53,520 --> 00:03:57,650 mbi të gjithë rreshtat e këtij rrjetit që ne duam të shtypura jashtë. 85 00:03:57,650 --> 00:04:01,250 Pastaj kemi ndër-rrjetore 4 loop, kjo është shtypje mbi çdo kolonë. 86 00:04:01,250 --> 00:04:06,210 Pra, për çdo rresht, kemi shkruar për çdo kolonë, një hash vetëm. 87 00:04:06,210 --> 00:04:10,045 Pastaj në fund të rreshtit kemi shkruar a linjë të vetme të reja për të shkuar në rreshtin tjetër. 88 00:04:10,045 --> 00:04:11,420 Dhe kjo është ajo për të gjithë rrjetin. 89 00:04:11,420 --> 00:04:12,810 90 00:04:12,810 --> 00:04:13,675 >> Pyetje tetë. 91 00:04:13,675 --> 00:04:17,170 Një funksion si PrintGrid është e thënë të kanë një efekt anësor, por jo një kthim 92 00:04:17,170 --> 00:04:17,670 Vlera. 93 00:04:17,670 --> 00:04:19,209 Shpjegoni dallimin. 94 00:04:19,209 --> 00:04:23,080 Pra, kjo mbështetet në ju kujtohet çfarë është një efekt anësor është. 95 00:04:23,080 --> 00:04:25,180 E pra, një kthim value-- ne e dimë PrintGrid nuk 96 00:04:25,180 --> 00:04:28,180 kanë vlerë të kthimit, pasi që këtu ai thotë pavlefshëm. 97 00:04:28,180 --> 00:04:31,150 Pra, çdo gjë që të kthehet pavlefshëm me të vërtetë nuk ka kthim asgjë. 98 00:04:31,150 --> 00:04:32,200 99 00:04:32,200 --> 00:04:33,620 Pra, çfarë është efekt anësor? 100 00:04:33,620 --> 00:04:36,620 E pra, një efekt anësor është çdo gjë që lloj i vazhdon 101 00:04:36,620 --> 00:04:39,500 pas përfundimit të funksionit kjo nuk ishte vetëm u kthye, 102 00:04:39,500 --> 00:04:41,340 dhe kjo nuk ishte vetëm nga inputeve. 103 00:04:41,340 --> 00:04:44,970 >> Kështu, për shembull, ne mund të ndryshojë një ndryshore globale. 104 00:04:44,970 --> 00:04:46,590 Kjo do të jetë një efekt anësor. 105 00:04:46,590 --> 00:04:49,000 Në këtë rast të veçantë, një efekt shumë të rëndësishëm anësor 106 00:04:49,000 --> 00:04:51,070 është shtypje në ekran. 107 00:04:51,070 --> 00:04:53,110 Kështu që është një efekt anësor që PrintGrid ka. 108 00:04:53,110 --> 00:04:54,980 Ne shkruar këto gjëra në ekran. 109 00:04:54,980 --> 00:04:56,370 Dhe ju mund të mendoni se si një efekt anësor, 110 00:04:56,370 --> 00:04:58,690 pasi kjo është diçka që vazhdon pas përfundimit të këtij funksioni. 111 00:04:58,690 --> 00:05:01,481 Kjo është diçka jashtë fushës i këtij funksioni që në fund të fundit 112 00:05:01,481 --> 00:05:03,380 është duke u ndryshuar, Përmbajtja e ekranit. 113 00:05:03,380 --> 00:05:05,200 114 00:05:05,200 --> 00:05:05,839 >> Pyetje nëntë. 115 00:05:05,839 --> 00:05:07,880 Konsideroni programin më poshtë, në të cilën numrat linjë 116 00:05:07,880 --> 00:05:09,740 janë shtuar për hir të diskutimit. 117 00:05:09,740 --> 00:05:13,480 Pra, në këtë program, ne jemi të vetëm thirrje GetString, ruajtjen atë 118 00:05:13,480 --> 00:05:16,220 në këtë ndryshueshme s, dhe pastaj shtypjen se ndryshueshme s. 119 00:05:16,220 --> 00:05:16,720 OK. 120 00:05:16,720 --> 00:05:19,090 Pra, të shpjegojë se pse një linjë është i pranishëm. 121 00:05:19,090 --> 00:05:20,920 #include CS50 dot h. 122 00:05:20,920 --> 00:05:23,820 Pse nuk kemi nevojë për të #include CS50 dot h? 123 00:05:23,820 --> 00:05:26,180 E pra ne jemi duke bërë thirrje GetString funksion, 124 00:05:26,180 --> 00:05:28,840 dhe GetString është përcaktuar në bibliotekë CS50. 125 00:05:28,840 --> 00:05:31,600 Pra, nëse ne nuk kemi #include CS50 dot h, 126 00:05:31,600 --> 00:05:35,760 ne do të merrni atë deklaratë të nënkuptuar e gabimit funksionit GetString 127 00:05:35,760 --> 00:05:36,840 nga përpiluesit. 128 00:05:36,840 --> 00:05:40,110 Pra, ne kemi nevojë për të përfshirë library-- ne kemi nevojë për të përfshirë header fotografi, 129 00:05:40,110 --> 00:05:42,870 ose tjetër përpilues nuk do të njohin se GetString ekziston. 130 00:05:42,870 --> 00:05:44,380 131 00:05:44,380 --> 00:05:46,140 >> Shpjegoni se përse linjë dy është i pranishëm. 132 00:05:46,140 --> 00:05:47,890 Pra, standardi io dot h. 133 00:05:47,890 --> 00:05:50,430 Kjo është pikërisht njëjtë si problemin e mëparshme, 134 00:05:50,430 --> 00:05:53,310 përveç në vend të që kanë të bëjnë me GetString, ne jemi duke folur në lidhje me printf. 135 00:05:53,310 --> 00:05:56,654 Pra, nëse ne nuk themi se duhet të përfshijë standarde io dot h, 136 00:05:56,654 --> 00:05:58,820 atëherë ne nuk do të jetë në gjendje për të përdorur funksionin printf, 137 00:05:58,820 --> 00:06:00,653 sepse përpiluesit nuk do të dinë për të. 138 00:06:00,653 --> 00:06:01,750 139 00:06:01,750 --> 00:06:05,260 >> Why-- çfarë është rëndësia i pavlefshëm në përputhje katër? 140 00:06:05,260 --> 00:06:08,010 Pra, këtu kemi int kryesor (i pavlefshëm). 141 00:06:08,010 --> 00:06:10,600 Kjo është vetëm duke thënë se ne nuk janë duke marrë ndonjë command line 142 00:06:10,600 --> 00:06:12,280 Argumentet në kryesore. 143 00:06:12,280 --> 00:06:17,390 Mos harroni se ne mund të themi int INT argc kllapa kryesore string argv. 144 00:06:17,390 --> 00:06:20,400 Pra, këtu ne vetëm themi të pavlefshme për të thënë ne janë injoruar argumente command line. 145 00:06:20,400 --> 00:06:21,840 146 00:06:21,840 --> 00:06:25,225 >> Shpjegoni, në lidhje me kujtesën, pikërisht çfarë GetString në përputhje gjashtë kthimit. 147 00:06:25,225 --> 00:06:27,040 148 00:06:27,040 --> 00:06:31,640 GetString është kthyer një bllok të memorie, një grup të karaktereve. 149 00:06:31,640 --> 00:06:34,870 Është me të vërtetë kthehen a treguesin e karakterit të parë. 150 00:06:34,870 --> 00:06:37,170 Mos harroni se një varg është një yll char. 151 00:06:37,170 --> 00:06:41,360 Pra, s, është një tregues për të parë karakter në çfarëdo string është 152 00:06:41,360 --> 00:06:43,510 se përdoruesi ka hyrë në tastierë. 153 00:06:43,510 --> 00:06:47,070 Dhe kjo memorie ndodh të jetë malloced, kështu që kujtesa është në grumbull. 154 00:06:47,070 --> 00:06:49,080 155 00:06:49,080 --> 00:06:50,450 >> Pyetja 13. 156 00:06:50,450 --> 00:06:51,960 Konsideroni programin më poshtë. 157 00:06:51,960 --> 00:06:55,579 Pra, e gjithë ky program është duke bërë është printf-ing 1 pjesëtuar me 10. 158 00:06:55,579 --> 00:06:57,370 Pra, kur hartuar dhe ekzekutuar, ky program 159 00:06:57,370 --> 00:07:01,170 rezultatet 0.0, edhe pse 1 i ndarë nga 10 është 0.1. 160 00:07:01,170 --> 00:07:02,970 Pra, pse është 0.0? 161 00:07:02,970 --> 00:07:05,510 E pra, kjo është për shkak se e ndarjes integer. 162 00:07:05,510 --> 00:07:08,580 Kështu 1 është një numër i plotë, 10 është një numër i plotë. 163 00:07:08,580 --> 00:07:11,980 Pra, 1 i ndarë nga 10, gjithçka trajtohet si integers, 164 00:07:11,980 --> 00:07:16,380 dhe C, kur ne bëjmë ndarje integer, ne shkurtoj çdo pikë dhjetore. 165 00:07:16,380 --> 00:07:19,590 Pra, 1 i ndarë nga 10 është 0, dhe pastaj ne jemi duke u përpjekur 166 00:07:19,590 --> 00:07:24,410 për të shkruar se si noton, kështu zero të shtypura si një noton është 0.0. 167 00:07:24,410 --> 00:07:27,400 Dhe kjo është arsyeja pse ne kemi marrë 0.0. 168 00:07:27,400 --> 00:07:28,940 >> Konsideroni programin më poshtë. 169 00:07:28,940 --> 00:07:31,280 Tani ne jemi shtypjen 0.1. 170 00:07:31,280 --> 00:07:34,280 Pra, nuk ka ndarje numër i plotë, ne jemi vetëm shtypjen 0.1, 171 00:07:34,280 --> 00:07:37,100 por ne jemi shtypjen atë në 28 numra pas presjes dhjetore. 172 00:07:37,100 --> 00:07:41,810 Dhe ne kemi marrë këtë 0,1000, një bandë e tërë nga zero, 5 5 5, blah blah blah. 173 00:07:41,810 --> 00:07:45,495 Pra, pyetja këtu është arsyeja pse e bën atë shtypura atë, në vend që të saktësisht 0.1? 174 00:07:45,495 --> 00:07:46,620 175 00:07:46,620 --> 00:07:49,640 >> Pra, arsyeja që këtu është tani lundrues pikë pasaktësi. 176 00:07:49,640 --> 00:07:53,410 Mos harroni se një noton është vetëm 32 bit. 177 00:07:53,410 --> 00:07:57,540 Pra, ne vetëm mund të përfaqësojnë një numër i caktuar i lundrues vlerave pikë me ato 32 178 00:07:57,540 --> 00:07:58,560 bit. 179 00:07:58,560 --> 00:08:01,760 E pra nuk ka fund pafundësisht shumë vlera lundrues pikë, 180 00:08:01,760 --> 00:08:04,940 dhe ka pafundësisht shumë lundrues Vlerat pikë në mes të 0 dhe 1, 181 00:08:04,940 --> 00:08:07,860 dhe ne jemi padyshim në gjendje të paraqesin edhe më shumë vlera se kaq. 182 00:08:07,860 --> 00:08:13,230 Pra, ne duhet të bëjmë sakrifica për të të jenë në gjendje për të përfaqësuar vlerat më. 183 00:08:13,230 --> 00:08:16,960 >> Pra, një vlerë si 0.1, me sa duket ne nuk mund të përfaqësojë atë saktësisht. 184 00:08:16,960 --> 00:08:22,500 Pra, në vend të përfaqësojnë 0.1 bëjmë më të mirë ne mund të përfaqësojë këtë 0.100000 5 5 185 00:08:22,500 --> 00:08:23,260 5. 186 00:08:23,260 --> 00:08:26,306 Dhe kjo është shumë afër, por për një shumë të aplikacioneve 187 00:08:26,306 --> 00:08:28,430 ju keni për t'u shqetësuar në lidhje me lundrues pikë pasaktësi, 188 00:08:28,430 --> 00:08:30,930 sepse ne thjesht nuk mund të përfaqësojë të gjitha pikat lundrues saktësisht. 189 00:08:30,930 --> 00:08:32,500 190 00:08:32,500 --> 00:08:33,380 >> Pyetja 15. 191 00:08:33,380 --> 00:08:34,679 Konsideroni kodin më poshtë. 192 00:08:34,679 --> 00:08:36,630 Ne jemi vetëm shtypje 1 plus 1. 193 00:08:36,630 --> 00:08:38,289 Kështu që nuk ka mashtrim këtu. 194 00:08:38,289 --> 00:08:41,780 1 plus 1 vlerësimin në 2, dhe atëherë ne jemi shtypjen se. 195 00:08:41,780 --> 00:08:42,789 Kjo thjesht shtyp 2. 196 00:08:42,789 --> 00:08:43,850 197 00:08:43,850 --> 00:08:44,700 >> Pyetja 16. 198 00:08:44,700 --> 00:08:49,450 Tani ne jemi shtypjen karakter 1 plus 1 karakter. 199 00:08:49,450 --> 00:08:52,110 Pra, pse e bën këtë jo shtypura të njëjtën gjë? 200 00:08:52,110 --> 00:08:57,680 Well karakter 1 plus karakteri 1, karakteri 1 ka vlerë ASCII 49. 201 00:08:57,680 --> 00:09:04,840 Pra, kjo është me të vërtetë duke thënë se 49 plus 49, dhe në fund të fundit kjo do të shtypura 98. 202 00:09:04,840 --> 00:09:06,130 Pra, kjo nuk ka shkruar 2. 203 00:09:06,130 --> 00:09:08,070 204 00:09:08,070 --> 00:09:09,271 >> Pyetja 17. 205 00:09:09,271 --> 00:09:11,520 Përfundimin e zbatimit i rastësishëm më poshtë në mënyrë të tillë 206 00:09:11,520 --> 00:09:14,615 se funksioni kthen true nëse n është i rastësishëm dhe të rreme, nëse n është edhe. 207 00:09:14,615 --> 00:09:16,710 208 00:09:16,710 --> 00:09:19,330 Ky është një qëllim i madh për operatorin mod. 209 00:09:19,330 --> 00:09:24,530 Pra, kemi marrë argumenti n tonë, nëse n mod 2 është e barabartë me 1, dhe 210 00:09:24,530 --> 00:09:28,030 që nënkupton se n ndarë me 2 kishte një mbetur. 211 00:09:28,030 --> 00:09:33,270 Nëse n ndarë nga 2 kishte një mbetur, që do të thotë se n është i rastësishëm, kështu që ne kthehemi vërtetë. 212 00:09:33,270 --> 00:09:34,910 Else kthehemi false. 213 00:09:34,910 --> 00:09:39,070 Ju gjithashtu mund të keni bërë n mod 2 barabartëve zero, kthimit të rreme, të tjerët kthehen vërtetë. 214 00:09:39,070 --> 00:09:41,600 215 00:09:41,600 --> 00:09:43,640 >> Konsideroni funksionin rekursive poshtë. 216 00:09:43,640 --> 00:09:46,920 Kështu nëse n është më pak se, ose barabarte me 1, kthehen 1, 217 00:09:46,920 --> 00:09:50,430 tjetër Kthimi n herë f i n minus 1. 218 00:09:50,430 --> 00:09:52,556 Pra, çfarë është ky funksion? 219 00:09:52,556 --> 00:09:54,305 E pra, kjo është vetëm funksioni faktorial. 220 00:09:54,305 --> 00:09:55,410 221 00:09:55,410 --> 00:09:57,405 Kjo është e përfaqësuar mirë si n faktorial. 222 00:09:57,405 --> 00:09:58,720 223 00:09:58,720 --> 00:10:02,310 >> Pra pyetja 19 Tani, ne duam të marrë këtë funksion gjithkund rekursive. 224 00:10:02,310 --> 00:10:04,530 Ne duam të bëjmë atë përsëritës. 225 00:10:04,530 --> 00:10:05,874 Pra, si do të bëjmë këtë? 226 00:10:05,874 --> 00:10:07,790 Edhe për stafin zgjidhje, dhe përsëri ka 227 00:10:07,790 --> 00:10:11,090 mënyra të shumta që mund të ketë bërë se, ne fillim me këtë produkt int 228 00:10:11,090 --> 00:10:11,812 është e barabartë me 1. 229 00:10:11,812 --> 00:10:13,520 Dhe të gjithë këtë për lak, ne jemi duke shkuar 230 00:10:13,520 --> 00:10:17,590 për t'u shumëzuar produktin në fund të fundit të përfundojë me faktoriale plotë. 231 00:10:17,590 --> 00:10:21,870 Pra, për int i barabartë me 2, i është më pak se ose e barabartë me N, i ++. 232 00:10:21,870 --> 00:10:24,130 >> Ju mund të pyesin se pse i barabartë me 2. 233 00:10:24,130 --> 00:10:28,380 E pra, mos harroni se këtu kemi të sigurohuni që rasti ynë bazë është i saktë. 234 00:10:28,380 --> 00:10:32,180 Kështu nëse n është më pak se ose e barabartë për 1, ne jemi vetëm duke u kthyer 1. 235 00:10:32,180 --> 00:10:34,830 Pra këtu, ne të fillojë në i barabartë me 2. 236 00:10:34,830 --> 00:10:39,090 Edhe në qoftë se i ishin 1, atëherë the-- ose nëse n ishin 1, atëherë për lak 237 00:10:39,090 --> 00:10:40,600 nuk do të ekzekutojë në të gjitha. 238 00:10:40,600 --> 00:10:43,190 Dhe kështu që ne vetëm do të Produkti kthimi, e cila është 1. 239 00:10:43,190 --> 00:10:45,920 Në mënyrë të ngjashme, në qoftë se n ishin asgjë më pak se 1-- 240 00:10:45,920 --> 00:10:49,290 nëse do të ishte 0, negative 1, whatever-- ne ende do të kthehen 1, 241 00:10:49,290 --> 00:10:52,260 e cila është pikërisht ajo që i version rekursive është duke bërë. 242 00:10:52,260 --> 00:10:54,660 >> Tani, nëse n është më i madh se 1, atëherë ne jemi duke shkuar 243 00:10:54,660 --> 00:10:56,550 për të bërë të paktën një përsëritje të këtij loop. 244 00:10:56,550 --> 00:11:00,630 Pra, le të thonë se n është 5, atëherë ne jemi do të bëjë herë produkt barabartë 2. 245 00:11:00,630 --> 00:11:02,165 Deri tani produkt është 2. 246 00:11:02,165 --> 00:11:04,040 Tani ne jemi duke shkuar për të bërë herë produkt barabartë 3. 247 00:11:04,040 --> 00:11:04,690 Tani është 6. 248 00:11:04,690 --> 00:11:07,500 Herë produktit barabartë 4, tani është e 24. 249 00:11:07,500 --> 00:11:10,420 Herë produktit barabartë 5, tani kjo është 120. 250 00:11:10,420 --> 00:11:16,730 Pra, atëherë në fund të fundit, ne jemi duke u kthyer 120, e cila është të saktë 5 Faktoriali. 251 00:11:16,730 --> 00:11:17,510 >> Pyetja 20. 252 00:11:17,510 --> 00:11:22,480 Kjo është ajo ku ju duhet të plotësoni në këtë tryezë me ndonjë algoritëm të caktuar, 253 00:11:22,480 --> 00:11:25,735 çdo gjë që ne kemi parë, se përshtatet këtyre drejtuar algorithmic 254 00:11:25,735 --> 00:11:28,060 herë këto herë asymptotic drejtuar. 255 00:11:28,060 --> 00:11:33,270 Pra, çfarë është një algoritmi që është omega e 1, por O i madh n? 256 00:11:33,270 --> 00:11:35,970 Pra, nuk mund të jetë pafundësisht shumë përgjigje këtu. 257 00:11:35,970 --> 00:11:39,790 Ai që ne kemi parë ndoshta më shpesh është vetëm kërko linear. 258 00:11:39,790 --> 00:11:42,050 >> Pra, në rastin më të mirë skenar, pika që ne jemi 259 00:11:42,050 --> 00:11:44,050 duke kërkuar për të është në fillimi i listës 260 00:11:44,050 --> 00:11:47,400 dhe kështu në omega e 1 hapave, gjëja e parë që të shikoni, 261 00:11:47,400 --> 00:11:49,740 ne vetëm të kthehen menjëherë që ne kemi gjetur pika. 262 00:11:49,740 --> 00:11:52,189 Në rastin më të keq, pika është në fund, 263 00:11:52,189 --> 00:11:53,730 ose pika nuk është në lista aspak. 264 00:11:53,730 --> 00:11:56,700 Pra, ne kemi për të kërkuar gjithë listën, të gjitha n 265 00:11:56,700 --> 00:11:58,480 elemente, dhe kjo është arsyeja pse ajo është o të n. 266 00:11:58,480 --> 00:11:59,670 267 00:11:59,670 --> 00:12:04,880 >> Deri tani kjo është diçka që është dy omega e log n n, dhe O e madhe e log n n. 268 00:12:04,880 --> 00:12:08,650 E pra gjëja më e rëndësishme ne kemi parë këtu është të bashkohen lloj. 269 00:12:08,650 --> 00:12:12,950 Pra shkrihen lloj, mos harroni, është në fund të fundit Theta 270 00:12:12,950 --> 00:12:16,920 e n log n, ku theta është përcaktuar nëse dy omega dhe O madh janë njëjtë. 271 00:12:16,920 --> 00:12:17,580 Si n log n. 272 00:12:17,580 --> 00:12:18,690 273 00:12:18,690 --> 00:12:21,970 >> Çfarë është diçka që është omega i N, O dhe e n katror? 274 00:12:21,970 --> 00:12:23,990 E pra, përsëri ka përgjigjet e shumëfishta të mundshme. 275 00:12:23,990 --> 00:12:26,440 Këtu ne të ndodhë të themi flluskë lloj. 276 00:12:26,440 --> 00:12:28,840 Futja lloj do të punojë këtu. 277 00:12:28,840 --> 00:12:31,400 Mos harroni se flluskë lloj ka se ku optimization, 278 00:12:31,400 --> 00:12:34,630 në qoftë se ju jeni në gjendje për të marrë përmes gjithë lista 279 00:12:34,630 --> 00:12:37,402 pa pasur nevojë për të bërë çdo këmbime, atëherë, mirë, 280 00:12:37,402 --> 00:12:40,110 ne mund të kthehen menjëherë se lista është renditur për të filluar me. 281 00:12:40,110 --> 00:12:43,185 Pra, në rastin më të mirë, kjo është vetëm omega e n. 282 00:12:43,185 --> 00:12:45,960 Në qoftë se kjo nuk është vetëm një e bukur renditura listë për të filluar me të, 283 00:12:45,960 --> 00:12:48,270 atëherë ne kemi O i n katror këmbime. 284 00:12:48,270 --> 00:12:49,330 285 00:12:49,330 --> 00:12:55,610 Dhe në fund, ne kemi përzgjedhjes lloj për n katror, ​​si dhe omega O. madh 286 00:12:55,610 --> 00:12:56,850 >> Pyetja 21. 287 00:12:56,850 --> 00:12:58,870 Çfarë është numër i plotë overflow? 288 00:12:58,870 --> 00:13:02,160 Well përsëri, të ngjashme me herët, ne kemi vetëm finitely shumë bit 289 00:13:02,160 --> 00:13:04,255 për të përfaqësuar një numër të plotë, kështu që ndoshta 32 bit. 290 00:13:04,255 --> 00:13:06,300 291 00:13:06,300 --> 00:13:09,180 Le të themi se kemi një numër të plotë të nënshkruar. 292 00:13:09,180 --> 00:13:12,800 Pastaj në fund të fundit të lartë Numri pozitiv ne mund të përfaqësojë 293 00:13:12,800 --> 00:13:15,910 është 2 deri 31 minus 1. 294 00:13:15,910 --> 00:13:19,370 Pra, çfarë ndodh nëse ne përpiqemi të pastaj rrisim këtë numër i plotë? 295 00:13:19,370 --> 00:13:25,320 E pra, ne jemi duke shkuar për të shkuar nga 2 deri në 31 minus 1, gjatë gjithë rrugës deri në negativ 2 296 00:13:25,320 --> 00:13:26,490 në 31. 297 00:13:26,490 --> 00:13:29,470 Pra, kjo del nga shtrati numër i plotë është Kur ju mbani bën rritjen, 298 00:13:29,470 --> 00:13:32,330 dhe në fund të fundit nuk mund të merrni ndonjë më të larta dhe vetëm ajo 299 00:13:32,330 --> 00:13:34,520 përfundon të gjithë rrugën prapa rreth një vlerë negative. 300 00:13:34,520 --> 00:13:35,850 301 00:13:35,850 --> 00:13:37,779 >> Po në lidhje me një tampon del nga shtrati? 302 00:13:37,779 --> 00:13:39,820 Pra, një tampon overflow-- mbani mend se çfarë një buffer është. 303 00:13:39,820 --> 00:13:41,000 Kjo është vetëm një copë e kujtesës. 304 00:13:41,000 --> 00:13:43,350 Diçka si një grup, është një tampon. 305 00:13:43,350 --> 00:13:46,120 Pra, a del nga shtrati tampon është kur ju përpiqeni për të hyrë në kujtesën 306 00:13:46,120 --> 00:13:47,880 përtej fund të këtij vektorit. 307 00:13:47,880 --> 00:13:50,410 Pra, nëse ju keni një Grup i madhësisë 5 dhe ju 308 00:13:50,410 --> 00:13:53,700 përpiqen për të hyrë në array kllapa 5 ose 6 ose grupim grupim 7, 309 00:13:53,700 --> 00:13:56,610 apo ndonjë gjë përtej fund, apo edhe ndonjë gjë 310 00:13:56,610 --> 00:14:00,790 kllapa below-- array negative 1-- të gjithë ata që janë përplot tampon. 311 00:14:00,790 --> 00:14:02,810 Ju jeni duke prekur kujtesën në mënyra të këqija. 312 00:14:02,810 --> 00:14:04,090 313 00:14:04,090 --> 00:14:04,730 >> Pyetja 23. 314 00:14:04,730 --> 00:14:05,760 315 00:14:05,760 --> 00:14:09,100 Pra, në këtë që ju nevojitet për të zbatuar strlen. 316 00:14:09,100 --> 00:14:11,630 Dhe ne ju them se ju mund të supozojmë s nuk do të jetë i pavlefshëm, 317 00:14:11,630 --> 00:14:13,790 kështu që ju nuk keni për të të bëjë ndonjë kontroll për null. 318 00:14:13,790 --> 00:14:16,190 Dhe ka mënyra të shumta ju mund të keni bërë këtë. 319 00:14:16,190 --> 00:14:18,440 Këtu kemi marrë vetëm thjeshtë. 320 00:14:18,440 --> 00:14:21,780 Ne fillojmë me një kundër, n. n është numëruar sa karaktere janë. 321 00:14:21,780 --> 00:14:25,560 Pra, ne të fillojë në 0, dhe pastaj ne iterate mbi të gjithë listën. 322 00:14:25,560 --> 00:14:29,092 >> S eshte e barabarte me 0 grupim null karakter Terminator? 323 00:14:29,092 --> 00:14:31,425 Mos harroni ne jemi duke kërkuar për karakteri null terminator 324 00:14:31,425 --> 00:14:33,360 për të përcaktuar se sa kohë string tonë është. 325 00:14:33,360 --> 00:14:35,890 Që do të përfundojë çdo string relevant. 326 00:14:35,890 --> 00:14:39,400 Pra, është s kllapa 0 barabartë në terminator pavlefshëm? 327 00:14:39,400 --> 00:14:42,850 Nëse nuk është, atëherë ne jemi duke shkuar për shikoni në s kllapa 1, s kllapa 2. 328 00:14:42,850 --> 00:14:45,050 Ne do të mbajë deri ne gjeni terminator null. 329 00:14:45,050 --> 00:14:48,580 Pasi ne kemi gjetur atë, atëherë n përmban Gjatësia totale e vargut, 330 00:14:48,580 --> 00:14:49,942 dhe ne vetëm mund të kthehen atë. 331 00:14:49,942 --> 00:14:51,180 332 00:14:51,180 --> 00:14:51,865 >> Pyetja 24. 333 00:14:51,865 --> 00:14:53,010 334 00:14:53,010 --> 00:14:56,050 Pra, kjo është ajo ku ju duhet të bëjë tregti off. 335 00:14:56,050 --> 00:14:59,810 Pra, një gjë është e mirë në një mënyrë, por në atë mënyrë është e keqe? 336 00:14:59,810 --> 00:15:02,980 Kështu që këtu, shkrihen lloj tenton të jetë më shpejt se flluskë lloji. 337 00:15:02,980 --> 00:15:06,530 Duke thënë that-- mirë, atje janë përgjigje të shumta këtu. 338 00:15:06,530 --> 00:15:12,930 Por kryesori është se flluskë lloj është omega e n për një listë të renditura. 339 00:15:12,930 --> 00:15:14,950 >> Mos harroni se tabelë që sapo pamë më herët. 340 00:15:14,950 --> 00:15:17,600 Pra flluskë llojet omega e n, skenari më i mirë 341 00:15:17,600 --> 00:15:20,010 është është në gjendje të vetëm të shkojnë më shumë se lista dikur, të përcaktojë 342 00:15:20,010 --> 00:15:22,270 hey kjo gjë është tashmë e të renditura, dhe kthimi. 343 00:15:22,270 --> 00:15:25,960 Merge lloj, pa marrë parasysh se çfarë ju bëni, është omega e log n n. 344 00:15:25,960 --> 00:15:29,200 Pra, për lista të renditura, flluskë lloj do të jetë më i shpejtë. 345 00:15:29,200 --> 00:15:30,870 346 00:15:30,870 --> 00:15:32,430 >> Tani çfarë në lidhje me listat e lidhur? 347 00:15:32,430 --> 00:15:36,070 Pra, një listë e lidhur mund të rritet dhe tkurret të përshtaten sa më shumë elemente si të nevojshme. 348 00:15:36,070 --> 00:15:38,489 Duke thënë kështu that-- zakonisht krahasim i drejtpërdrejtë 349 00:15:38,489 --> 00:15:40,280 do të jetë një i lidhur lista me një grup. 350 00:15:40,280 --> 00:15:41,600 351 00:15:41,600 --> 00:15:44,050 Pra, edhe pse mund të vargjeve të lehtë të rritet dhe tkurret 352 00:15:44,050 --> 00:15:47,130 të përshtaten sa më shumë elemente sipas nevojës, një listë të lidhura 353 00:15:47,130 --> 00:15:49,600 krahasuar me një array-- An array ka qasje të rastit. 354 00:15:49,600 --> 00:15:52,960 Ne mund të indeksit në çdo element të veçantë të vektorit. 355 00:15:52,960 --> 00:15:56,430 >> Pra, për një listë të lidhura, ne nuk mund të thjesht shkoni në elementin e pestë, 356 00:15:56,430 --> 00:16:00,260 ne duhet të kaloj nga fillimi deri sa të kemi në elementin e pestë. 357 00:16:00,260 --> 00:16:03,990 Dhe kjo do të na pengojë nga duke bërë diçka të tillë kërkim binar. 358 00:16:03,990 --> 00:16:08,150 Duke folur për kërkim binar, kërko binar ka tendencë të jetë më i shpejtë sesa kërkim linear. 359 00:16:08,150 --> 00:16:11,120 Duke thënë that-- kështu që, një gjë është e mundur 360 00:16:11,120 --> 00:16:13,380 është se ju nuk mund të bëni binar kërko në listat e lidhura, 361 00:16:13,380 --> 00:16:14,730 ju mund të bëni vetëm atë në vargjeve. 362 00:16:14,730 --> 00:16:18,030 Por ndoshta më e rëndësishmja, ju nuk mund të bëni kërkim binar 363 00:16:18,030 --> 00:16:20,690 në një grup që nuk është renditura. 364 00:16:20,690 --> 00:16:23,990 Upfront ju mund të kenë nevojë për të zgjidhur array, dhe vetëm atëherë mund të 365 00:16:23,990 --> 00:16:25,370 ju bëni kërkim binar. 366 00:16:25,370 --> 00:16:27,660 Pra, nëse një gjë e juaj nuk është e Renditur për të filluar me të, 367 00:16:27,660 --> 00:16:29,250 pastaj kërko linear mund të jetë më i shpejtë. 368 00:16:29,250 --> 00:16:30,620 369 00:16:30,620 --> 00:16:31,740 >> Pyetja 27. 370 00:16:31,740 --> 00:16:34,770 Kështu që e konsiderojnë programin më poshtë, cila do të jetë në rrëshqitje tjetër. 371 00:16:34,770 --> 00:16:37,790 Dhe kjo është ajo ku ne jemi do të duan për të deklaruar në mënyrë eksplicite 372 00:16:37,790 --> 00:16:39,980 vlerat për variabla të ndryshme. 373 00:16:39,980 --> 00:16:41,990 Pra, le të shohim në atë. 374 00:16:41,990 --> 00:16:43,160 >> Pra, një linjë. 375 00:16:43,160 --> 00:16:45,457 Ne kemi int x është e barabartë me 1. 376 00:16:45,457 --> 00:16:47,040 Kjo është e vetmja gjë që ka ndodhur. 377 00:16:47,040 --> 00:16:50,440 Pra, në vijë të parë, ne e shohim në tonë Tabela, që y, a, b, dhe tmp janë të gjithë 378 00:16:50,440 --> 00:16:51,540 blacked jashtë. 379 00:16:51,540 --> 00:16:52,280 Pra, çfarë është x? 380 00:16:52,280 --> 00:16:53,860 Dhe ne vetëm vendosur ajo e barabartë me 1. 381 00:16:53,860 --> 00:16:55,020 382 00:16:55,020 --> 00:16:58,770 Dhe pastaj të vijë me dy, mirë, ne shohim se y është vendosur në 2, 383 00:16:58,770 --> 00:17:00,550 dhe tabela tashmë është plotësuar për ne. 384 00:17:00,550 --> 00:17:03,040 Kështu x eshte 1 dhe y eshte 2. 385 00:17:03,040 --> 00:17:05,890 >> Tani, linja tre, ne jemi tani brenda funksionit shkëmbim. 386 00:17:05,890 --> 00:17:07,560 Çfarë kemi kaluar të bie në ujdi? 387 00:17:07,560 --> 00:17:11,609 Kemi kaluar ampersand x për a, dhe y simbol për b. 388 00:17:11,609 --> 00:17:15,160 Ku problemi më parë deklaroi se adresa e x 389 00:17:15,160 --> 00:17:17,520 është 0x10, dhe adresa e y është 0x14. 390 00:17:17,520 --> 00:17:18,970 391 00:17:18,970 --> 00:17:21,909 Kështu a dhe b janë të barabartë tek 0x10 dhe 0x14, përkatësisht. 392 00:17:21,909 --> 00:17:23,670 393 00:17:23,670 --> 00:17:26,250 >> Tani në vijën tre, çfarë janë x dhe y? 394 00:17:26,250 --> 00:17:28,554 E pra, asgjë nuk ka ndryshuar për x dhe y në këtë pikë. 395 00:17:28,554 --> 00:17:30,470 Edhe pse ata janë brenda një kuadri kryesor rafte, 396 00:17:30,470 --> 00:17:32,469 ata ende kanë të njëjtën Vlerat e ata kanë para. 397 00:17:32,469 --> 00:17:34,030 Ne nuk kemi modifikuar asnjë memorie. 398 00:17:34,030 --> 00:17:35,710 Kështu x eshte 1, y eshte 2. 399 00:17:35,710 --> 00:17:36,550 400 00:17:36,550 --> 00:17:37,050 Dakord. 401 00:17:37,050 --> 00:17:40,300 Deri tani kemi thënë int tmp barabartë me yll a. 402 00:17:40,300 --> 00:17:44,410 Pra, në linjë të katër, gjithçka është e njëjtë me përjashtim të tmp. 403 00:17:44,410 --> 00:17:47,130 Ne nuk kemi ndryshuar ndonjë vlerat e asgjë, përveç për tmp. 404 00:17:47,130 --> 00:17:49,230 Ne jemi të vendosur tmp barabartë me yll a. 405 00:17:49,230 --> 00:17:50,620 Çfarë është yll a? 406 00:17:50,620 --> 00:17:56,240 E pra, një pikë për të x, pra yll a do te barabarte X, i cili eshte 1. 407 00:17:56,240 --> 00:18:00,080 Pra, çdo gjë është e kopjuar poshtë, dhe tmp është vendosur në 1. 408 00:18:00,080 --> 00:18:01,110 >> Tani linjë tjetër. 409 00:18:01,110 --> 00:18:03,380 Star a është e barabartë me yll b. 410 00:18:03,380 --> 00:18:10,000 Pra, duke linjës five-- mirë përsëri, gjithçka është e njëjtë me përjashtim çfarëdo yll a eshte. 411 00:18:10,000 --> 00:18:10,830 Çfarë është yll a? 412 00:18:10,830 --> 00:18:13,720 E pra, ne vetëm tha se ylli a është x. 413 00:18:13,720 --> 00:18:16,400 Pra, ne jemi duke ndryshuar x yllit të barabartë b. 414 00:18:16,400 --> 00:18:18,960 Çfarë është yll b? y. pika b të y. 415 00:18:18,960 --> 00:18:21,030 Pra yll b është y. 416 00:18:21,030 --> 00:18:25,140 Pra, ne jemi vendosjen x barabartë me y, dhe çdo gjë tjetër është e njëjtë. 417 00:18:25,140 --> 00:18:29,130 Pra, ne shohim në rreshtin tjetër që x është tani 2, dhe pjesa tjetër janë kopjuar vetëm poshtë. 418 00:18:29,130 --> 00:18:31,120 >> Tani në rreshtin tjetër, ylli b barabartë tmp. 419 00:18:31,120 --> 00:18:34,740 E pra, ne vetëm tha se ylli b është y, kështu që ne jemi ngritjen y barabartë me tmp. 420 00:18:34,740 --> 00:18:37,450 Çdo gjë tjetër është e njëjtë, kështu që çdo gjë merr kopjuar poshtë. 421 00:18:37,450 --> 00:18:42,050 Ne jemi ngritjen y barabartë me tmp, e cila është një, dhe çdo gjë tjetër është e njëjtë. 422 00:18:42,050 --> 00:18:43,210 >> Tani së fundi, linjë shtatë. 423 00:18:43,210 --> 00:18:44,700 Ne jemi duke u kthyer në funksion kryesor. 424 00:18:44,700 --> 00:18:46,350 Ne jemi pas swap ka mbaruar. 425 00:18:46,350 --> 00:18:48,972 Ne kemi humbur një, b, dhe tmp, por në fund të fundit ne kemi 426 00:18:48,972 --> 00:18:51,180 nuk janë ndryshuar asnjë vlera nga çdo gjë në këtë pikë, 427 00:18:51,180 --> 00:18:52,800 ne vetëm kopje x dhe y poshtë. 428 00:18:52,800 --> 00:18:56,490 Dhe ne shohim se x dhe y janë tani 2 dhe 1 vend 1 dhe 2. 429 00:18:56,490 --> 00:18:58,160 Swap ka ekzekutuar me sukses. 430 00:18:58,160 --> 00:18:59,500 431 00:18:59,500 --> 00:19:00,105 >> Pyetja 28. 432 00:19:00,105 --> 00:19:01,226 433 00:19:01,226 --> 00:19:03,100 Supozoni se ju të hasni mesazhet e gabimit 434 00:19:03,100 --> 00:19:06,790 më poshtë gjatë orarit të punës vitin e ardhshëm si AK apo TF. 435 00:19:06,790 --> 00:19:08,930 Këshillojë se si për të rregulluar secilën nga këto gabime. 436 00:19:08,930 --> 00:19:11,160 Referencë në mënyrë të papërcaktuar për GetString. 437 00:19:11,160 --> 00:19:12,540 Pse mund të shihni këtë? 438 00:19:12,540 --> 00:19:15,380 E pra, në qoftë se një student është duke përdorur GetString në kodin e tyre, 439 00:19:15,380 --> 00:19:20,310 ata kanë siç hash përfshira CS50 dot h për të përfshirë bibliotekën CS50. 440 00:19:20,310 --> 00:19:22,380 >> E pra, çfarë bëjnë ata nevojë për të rregulluar këtë gabim? 441 00:19:22,380 --> 00:19:26,810 Ata kanë nevojë për të bërë një lcs50 dash në command line, kur ata janë hartimin. 442 00:19:26,810 --> 00:19:29,501 Pra, në qoftë se ata nuk do të kalojnë lcs50 tingëllimë dash, ata janë 443 00:19:29,501 --> 00:19:32,000 nuk do të ketë aktuale kodin që zbaton GetString. 444 00:19:32,000 --> 00:19:33,190 445 00:19:33,190 --> 00:19:34,170 >> Pyetja 29. 446 00:19:34,170 --> 00:19:36,190 Implicite deklaruar Funksioni bibliotekë strlen. 447 00:19:36,190 --> 00:19:37,550 448 00:19:37,550 --> 00:19:40,360 E pra këtë tani, ata nuk kanë bërë hash duhur përfshijnë. 449 00:19:40,360 --> 00:19:41,440 450 00:19:41,440 --> 00:19:45,410 Në këtë rast të veçantë, header fotografi ata kanë nevojë për të përfshirë është string dot h, 451 00:19:45,410 --> 00:19:48,710 dhe duke përfshirë string dot h, tani student-- tani përpiluesit 452 00:19:48,710 --> 00:19:51,750 ka qasje në deklaratat e strlen, 453 00:19:51,750 --> 00:19:54,120 dhe ai e di se kodin tuaj është duke përdorur strlen saktë. 454 00:19:54,120 --> 00:19:55,380 455 00:19:55,380 --> 00:19:56,580 >> Pyetja 30. 456 00:19:56,580 --> 00:20:00,240 Më qind conversions se argumente të dhënave. 457 00:20:00,240 --> 00:20:01,540 Pra, çfarë është kjo? 458 00:20:01,540 --> 00:20:06,470 E pra mos harroni se këto qind signs-- se si ata janë të rëndësishme për printf. 459 00:20:06,470 --> 00:20:08,890 Pra, në printf, ne mund percent-- ne mund të shtypura diçka 460 00:20:08,890 --> 00:20:11,380 si përqind i backslash n. 461 00:20:11,380 --> 00:20:15,310 Ose ne mund të shtypura si për qind i, hapësirë, për qind i, hapësira, për qind i. 462 00:20:15,310 --> 00:20:18,950 Pra, për secilin nga ata shenja për qind, ne kemi nevojë 463 00:20:18,950 --> 00:20:21,560 të kalojë një variabël në fund të printf. 464 00:20:21,560 --> 00:20:26,980 >> Pra, nëse ne themi Paren printf për qind i backslash Paren n ngushtë, 465 00:20:26,980 --> 00:20:30,270 mirë, ne themi se jemi shkuar për të shkruar një numër të plotë, 466 00:20:30,270 --> 00:20:33,970 por atëherë ne nuk do të kalojë printf një numër i plotë që në fakt të shtypur. 467 00:20:33,970 --> 00:20:37,182 Kështu që këtu më shumë për qind conversions se argumentet e të dhënave? 468 00:20:37,182 --> 00:20:39,390 Kjo është thënë se ne kemi një bandë e tërë e përqindje, 469 00:20:39,390 --> 00:20:42,445 dhe ne nuk kemi variablave të mjaftueshme që në fakt të mbushur në këto përqindje. 470 00:20:42,445 --> 00:20:44,850 471 00:20:44,850 --> 00:20:50,010 >> Dhe atëherë patjetër, për pyetjen 31, patjetër të humbur 40 bytes në një blloqe. 472 00:20:50,010 --> 00:20:52,350 Pra, ky është një gabim Valgrind. 473 00:20:52,350 --> 00:20:54,720 Kjo është thënë se diku në kodin tuaj, 474 00:20:54,720 --> 00:20:59,010 ju keni një shpërndarje që është 40 bytes mëdha kështu që ju malloced 40 bytes, 475 00:20:59,010 --> 00:21:00,515 dhe ju kurrë nuk e liruan atë. 476 00:21:00,515 --> 00:21:02,480 477 00:21:02,480 --> 00:21:05,140 Më shumë gjasa që ju vetëm duhet për të gjetur disa rrjedhje kujtesës, 478 00:21:05,140 --> 00:21:07,650 dhe për të gjetur se ku keni nevojë për të të lirë këtë bllok të memories. 479 00:21:07,650 --> 00:21:08,780 480 00:21:08,780 --> 00:21:11,910 >> Dhe pyetje 32, shkruaj invalid i madhësisë 4. 481 00:21:11,910 --> 00:21:13,250 Përsëri kjo është një gabim Valgrind. 482 00:21:13,250 --> 00:21:15,440 Kjo nuk ka të bëjë me rrjedhjet tani kujtesës. 483 00:21:15,440 --> 00:21:20,750 Kjo është, më e likely-- dua të them, se është një lloj i të drejtave të pavlefshme kujtesës. 484 00:21:20,750 --> 00:21:23,270 Dhe ka shumë të ngjarë kjo është një lloj tampon del nga shtrati. 485 00:21:23,270 --> 00:21:26,560 Ku ju keni një rrjet, ndoshta nje array numër i plotë, dhe le 486 00:21:26,560 --> 00:21:30,115 thonë se kjo është e madhësisë 5, dhe ju përpiqen për të prekur array kllapa 5. 487 00:21:30,115 --> 00:21:34,150 Pra, nëse ju përpiqeni për të shkruar për këtë vlera, kjo nuk është një copë e kujtesës 488 00:21:34,150 --> 00:21:37,440 që në fakt ju keni qasje në, dhe kështu që ju jeni do të merrni këtë gabim, 489 00:21:37,440 --> 00:21:39,272 duke thënë se shkruaj pavlefshme të madhësisë 4. 490 00:21:39,272 --> 00:21:42,480 Valgrind do të njohin që ju jeni duke u përpjekur për të prekur kujtesën papërshtatshme. 491 00:21:42,480 --> 00:21:43,980 >> Dhe kjo është ajo për quiz0. 492 00:21:43,980 --> 00:21:47,065 Unë jam Rob Bowden, dhe kjo është CS50. 493 00:21:47,065 --> 00:21:51,104