1 00:00:00,000 --> 00:00:03,000 [Powered by Google Translate] [Review] [Quiz 0] 2 00:00:03,000 --> 00:00:05,000 >> [Lexi Ross, Tommy MacWilliam, Lucas Freitas, Joseph Ong] [Chuo Kikuu cha Harvard] 3 00:00:05,000 --> 00:00:08,000 >> [Hii ni CS50.] [CS50.TV] 4 00:00:08,000 --> 00:00:10,000 >> Hey, kila mtu. 5 00:00:10,000 --> 00:00:15,000 Karibu kikao mapitio kwa Quiz 0, ambayo ni kuchukua nafasi hii Jumatano. 6 00:00:15,000 --> 00:00:19,000 Nini sisi ni kwenda kufanya usiku wa leo, mimi nina kwa TFS 3 nyingine, 7 00:00:19,000 --> 00:00:24,000 na pamoja tunakwenda kupitia mapitio ya kile ambacho tumefanya katika shaka hadi sasa. 8 00:00:24,000 --> 00:00:27,000 Ni si kwenda kuwa 100% ya kina, lakini ni lazima kukupa wazo bora 9 00:00:27,000 --> 00:00:31,000 ya nini wewe tayari chini na kile bado unahitaji kujifunza kabla ya Jumatano. 10 00:00:31,000 --> 00:00:34,000 Na kujisikia huru kunyanyua mkono wako na maswali kama tunakwenda pamoja, 11 00:00:34,000 --> 00:00:38,000 lakini kukumbuka kwamba tutaweza pia kidogo kidogo ya muda katika mwisho- 12 00:00:38,000 --> 00:00:41,000 kama sisi kupata kupitia kwa dakika chache vipuri-kufanya maswali ya jumla, 13 00:00:41,000 --> 00:00:47,000 hivyo kuendelea kuwa katika akili, na hivyo sisi ni kwenda kuanza mwanzoni na Wiki 0. 14 00:00:47,000 --> 00:00:50,000 >> [Quiz 0 Review!] [Part 0] [Lexi Ross] Lakini kabla ya sisi kufanya hivyo hebu majadiliano kuhusu 15 00:00:50,000 --> 00:00:53,000 vifaa ya chemsha bongo. 16 00:00:53,000 --> 00:00:55,000 >> [Logistics] [Quiz unafanyika Jumatano 10/10 badala ya hotuba] 17 00:00:55,000 --> 00:00:57,000 >> [(Angalia http://cdn.cs50.net/2012/fall/quizzes/0/about0.pdf kwa maelezo zaidi)] Ni juu ya Jumatano, Oktoba 10. 18 00:00:57,000 --> 00:01:00,000 >> Hiyo ni hii Jumatano, na kama wewe kwenda URL hii hapa, 19 00:01:00,000 --> 00:01:03,000 ambayo pia ni kupatikana kutoka CS50.net-kuna zilizounganishwa na ni- 20 00:01:03,000 --> 00:01:06,000 unaweza kuona taarifa kuhusu ambapo kwenda kwa kuzingatia 21 00:01:06,000 --> 00:01:10,000 jina yako ya mwisho au kuyaunganisha shule kama vile 22 00:01:10,000 --> 00:01:14,000 ni anaelezea kuhusu nini hasa Jaribio itafikia na aina ya maswali kwamba wewe ni kwenda kupata. 23 00:01:14,000 --> 00:01:19,000 Kumbuka kwamba utapata pia kuwa na nafasi ya kupitia kwa chemsha bongo katika sehemu, 24 00:01:19,000 --> 00:01:21,000 hivyo TFS yako lazima kwenda juu ya matatizo ya baadhi ya mazoezi, 25 00:01:21,000 --> 00:01:29,000 na kwamba ni nafasi nyingine nzuri ya kuona ambapo wewe bado wanahitaji kujifunza kwa ajili ya chemsha bongo. 26 00:01:29,000 --> 00:01:32,000 Hebu kuanza mwanzoni na Bytes bits 'n'. 27 00:01:32,000 --> 00:01:35,000 Kumbuka kidogo tu ni 0 au 1, 28 00:01:35,000 --> 00:01:38,000 na Byte ni mkusanyiko wa 8 wa bits wale. 29 00:01:38,000 --> 00:01:42,000 Hebu tuangalie hii ukusanyaji wa bits haki hapa. 30 00:01:42,000 --> 00:01:44,000 Tunapaswa kuwa na uwezo wa kufikiri jinsi wengi bits kuna. 31 00:01:44,000 --> 00:01:48,000 Ambapo sisi kuhesabu kuna tu 8 wao, nane 0 au 1 vipande. 32 00:01:48,000 --> 00:01:51,000 Na tangu kuna 8 bits, hiyo ni 1 Byte, 33 00:01:51,000 --> 00:01:53,000 na hebu kubadilisha kwa hexadesimoli. 34 00:01:53,000 --> 00:01:58,000 Hexadesimoli ni msingi 16, na ni pretty rahisi kubadili 35 00:01:58,000 --> 00:02:01,000 idadi katika binary, ambayo ni kile kwamba ni, na idadi katika hexadesimoli. 36 00:02:01,000 --> 00:02:04,000 Wote sisi kufanya ni sisi kuangalia makundi ya 4, 37 00:02:04,000 --> 00:02:07,000 na sisi kubadili yao kwa tarakimu sahihi hexadesimoli. 38 00:02:07,000 --> 00:02:11,000 Tunaweza kuanza na kundi haki-zaidi ya 4, hivyo 0011. 39 00:02:11,000 --> 00:02:16,000 Hiyo inaenda kuwa moja na moja 1 2, hivyo pamoja kwamba inafanya 3. 40 00:02:16,000 --> 00:02:19,000 Na kisha hebu tuangalie block nyingine ya 4. 41 00:02:19,000 --> 00:02:24,000 1101. Hiyo inaenda kuwa moja 1, moja 4, na moja 8. 42 00:02:24,000 --> 00:02:28,000 Pamoja kwamba ni kwenda kuwa 13, ambayo inafanya D. 43 00:02:28,000 --> 00:02:32,000 Na tutaweza kukumbuka kwamba katika hexadesimoli sisi hawaendi tu 0 kupitia 9. 44 00:02:32,000 --> 00:02:36,000 Sisi kwenda 0 kupitia F, hivyo baada ya 9, sambamba 10 kwa, 45 00:02:36,000 --> 00:02:40,000 11 A na B, nakadhalika ambapo F ni 15. 46 00:02:40,000 --> 00:02:44,000 Hapa ni 13 D, 47 00:02:44,000 --> 00:02:49,000 hivyo kwa kubadilisha kwa decimal wote sisi kufanya ni sisi kweli 48 00:02:49,000 --> 00:02:52,000 kutibu kila nafasi kama nguvu ya 2. 49 00:02:52,000 --> 00:02:58,000 Hiyo ni moja 1, 2 moja, sifuri 4s, sifuri 8s, mmoja 16, nakadhalika, 50 00:02:58,000 --> 00:03:03,000 na ni kidogo ngumu kwa compute katika kichwa yako, lakini kama sisi kwenda slide ijayo 51 00:03:03,000 --> 00:03:05,000 tunaweza kuona jibu la kwamba. 52 00:03:05,000 --> 00:03:09,000 >> Kimsingi sisi ni kwenda hela kutoka kulia nyuma upande wa kushoto, 53 00:03:09,000 --> 00:03:14,000 na sisi ni kuzidisha kila tarakimu kwa nguvu sambamba ya 2. 54 00:03:14,000 --> 00:03:19,000 Na kumbuka, kwa hexadesimoli sisi kuashiria namba hizi kwa 0x mwanzoni 55 00:03:19,000 --> 00:03:23,000 hivyo hatuna kuchanganya hili na idadi decimal. 56 00:03:23,000 --> 00:03:29,000 Kuendelea juu, hii ni Jedwali ASCII, 57 00:03:29,000 --> 00:03:35,000 na kile sisi kutumia ASCII kwa ni ramani ya kutoka wahusika kwa maadili ya namba. 58 00:03:35,000 --> 00:03:39,000 Kumbuka katika pset cryptography sisi alifanya matumizi makubwa ya Jedwali ASCII 59 00:03:39,000 --> 00:03:43,000 ili kutumia mbinu mbalimbali za cryptography, 60 00:03:43,000 --> 00:03:47,000 Kaisari na cipher Vigenère, kubadili barua tofauti 61 00:03:47,000 --> 00:03:52,000 katika kamba kulingana na muhimu uliotolewa na mtumiaji. 62 00:03:52,000 --> 00:03:56,000 Hebu tuangalie kidogo ya math ASCII. 63 00:03:56,000 --> 00:04:02,000 Kuangalia 'P' + 1, katika tabia fomu kwamba itakuwa Q, 64 00:04:02,000 --> 00:04:07,000 na kukumbuka kwamba '5 '≠ 5. 65 00:04:07,000 --> 00:04:10,000 Na jinsi gani hasa ingekuwa sisi kubadilisha kati ya fomu hizo 2? 66 00:04:10,000 --> 00:04:13,000 Ni kweli si ngumu sana. 67 00:04:13,000 --> 00:04:16,000 Ili kupata 5 sisi Ondoa '0 ' 68 00:04:16,000 --> 00:04:20,000 kwa sababu kuna maeneo 5 kati ya '0 'na '5'. 69 00:04:20,000 --> 00:04:23,000 Ili kwenda njia nyingine sisi tu kuongeza 0, 70 00:04:23,000 --> 00:04:25,000 hivyo ni aina ya kama hesabu ya mara kwa mara. 71 00:04:25,000 --> 00:04:29,000 Kumbuka tu kwamba wakati kitu ina quotes pembezoni ni tabia 72 00:04:29,000 --> 00:04:37,000 na hivyo sambamba na thamani katika meza ASCII. 73 00:04:37,000 --> 00:04:40,000 Kuhamia katika zaidi ya jumla ya mada sayansi ya kompyuta. 74 00:04:40,000 --> 00:04:43,000 Tulijifunza nini algorithm ni na jinsi ya kutumia programu 75 00:04:43,000 --> 00:04:45,000 kutekeleza algorithms. 76 00:04:45,000 --> 00:04:48,000 Baadhi ya mifano ya algorithms ni kitu rahisi kama kweli 77 00:04:48,000 --> 00:04:51,000 kuangalia kama idadi ni hata au isiyo ya kawaida. 78 00:04:51,000 --> 00:04:54,000 Kwa kuwa kumbuka sisi Mod idadi na 2 na kuangalia kama matokeo ni 0. 79 00:04:54,000 --> 00:04:57,000 Kama ni hivyo, ni hata. Kama siyo, ni isiyo ya kawaida. 80 00:04:57,000 --> 00:04:59,000 Na kwamba ni mfano wa algorithm kweli ya msingi. 81 00:04:59,000 --> 00:05:02,000 >> kidogo ya moja kushiriki zaidi ni binary tafuta, 82 00:05:02,000 --> 00:05:05,000 ambayo tutaweza kwenda juu ya baadaye katika kikao cha mapitio. 83 00:05:05,000 --> 00:05:09,000 Na programu hii ni mrefu sisi kutumia kwa ajili ya kuchukua algorithm 84 00:05:09,000 --> 00:05:15,000 na kuwageuza kwa code kompyuta unaweza kusoma. 85 00:05:15,000 --> 00:05:20,000 2 mifano ya programu ni Scratch, 86 00:05:20,000 --> 00:05:22,000 ambayo ni kile sisi alivyofanya katika Wiki 0. 87 00:05:22,000 --> 00:05:25,000 Hata ingawa sisi si kweli aina nje code ni njia ya kutekeleza 88 00:05:25,000 --> 00:05:29,000 hii algorithm, ambayo ni uchapishaji idadi 1-10, 89 00:05:29,000 --> 00:05:32,000 na hapa sisi kufanya hivyo katika lugha ya programu C. 90 00:05:32,000 --> 00:05:41,000 Hizi ni functionally sawa, tu yaliyoandikwa katika lugha tofauti au syntax. 91 00:05:41,000 --> 00:05:44,000 Sisi basi kujifunza kuhusu misemo bulin, 92 00:05:44,000 --> 00:05:48,000 na bulin ni thamani hiyo ni aidha kweli au uongo, 93 00:05:48,000 --> 00:05:51,000 na hapa mara nyingi bulin misemo 94 00:05:51,000 --> 00:05:55,000 kwenda ndani ya hali, hivyo kama (x ≤ 5), 95 00:05:55,000 --> 00:06:00,000 vizuri, sisi tayari kuweka x = 5, hivyo hali ya kuwa ni kwenda kutathmini kwa kweli. 96 00:06:00,000 --> 00:06:03,000 Na kama ni kweli, yo code ni chini ya hali 97 00:06:03,000 --> 00:06:08,000 ni kwenda kuwa tathmini na kompyuta, hivyo string kwamba ni kwenda kuwa kuchapishwa 98 00:06:08,000 --> 00:06:12,000 pato ya kiwango, na hali mrefu 99 00:06:12,000 --> 00:06:16,000 inahusu viliomo ndani ya mabano ya kauli kama. 100 00:06:16,000 --> 00:06:20,000 Kumbuka waendeshaji wote. 101 00:06:20,000 --> 00:06:26,000 Kumbuka && yake na | | wakati sisi ni kujaribu kuchanganya hali ya 2 au zaidi, 102 00:06:26,000 --> 00:06:30,000 == Si = kuangalia kama 2 mambo ni sawa. 103 00:06:30,000 --> 00:06:36,000 Kumbuka kwamba ni kwa ajili ya zoezi = ambapo == ni operator bulin. 104 00:06:36,000 --> 00:06:41,000 ≤, ≥ na kisha 2 ya mwisho ni self-maelezo. 105 00:06:41,000 --> 00:06:45,000 mapitio ya jumla ya mantiki ya bulin hapa. 106 00:06:45,000 --> 00:06:48,000 Na maneno ya bulin ni muhimu pia katika tanzi, 107 00:06:48,000 --> 00:06:50,000 ambayo tutaweza kwenda juu sasa. 108 00:06:50,000 --> 00:06:56,000 Tulijifunza kuhusu aina 3 ya vitanzi hivyo mbali katika CS50, kwa, wakati, na kufanya wakati. 109 00:06:56,000 --> 00:06:59,000 Na ni muhimu kujua kwamba wakati kwa makusudi zaidi 110 00:06:59,000 --> 00:07:02,000 tunaweza kweli matumizi ya aina yoyote ya kitanzi ujumla 111 00:07:02,000 --> 00:07:06,000 kuna aina fulani ya makusudi au ruwaza ya kawaida 112 00:07:06,000 --> 00:07:09,000 katika programu ambayo hasa wito kwa moja ya matanzi hizi 113 00:07:09,000 --> 00:07:13,000 kwamba kufanya hivyo ni bora zaidi au kifahari kwa kificho katika njia hiyo. 114 00:07:13,000 --> 00:07:18,000 Hebu kwenda juu ya nini kila matanzi hizi huelekea kutumika kwa mara nyingi. 115 00:07:18,000 --> 00:07:21,000 >> Katika kwa kitanzi sisi ujumla tayari kujua jinsi mara nyingi tunataka iterate. 116 00:07:21,000 --> 00:07:24,000 Hiyo ni nini sisi kuweka katika hali hiyo. 117 00:07:24,000 --> 00:07:28,000 Kwa maana, i = 0, i <10, kwa mfano. 118 00:07:28,000 --> 00:07:31,000 Sisi tayari kujua kwamba tunataka kufanya kitu mara 10. 119 00:07:31,000 --> 00:07:34,000 Sasa, kwa kitanzi wakati, kwa ujumla hatuwezi si lazima 120 00:07:34,000 --> 00:07:36,000 kujua jinsi mara nyingi tunataka kitanzi kukimbia. 121 00:07:36,000 --> 00:07:39,000 Lakini sisi kujua aina fulani ya hali ya kuwa sisi unataka kwa 122 00:07:39,000 --> 00:07:41,000 daima kuwa kweli au daima kuwa uongo. 123 00:07:41,000 --> 00:07:44,000 Kwa mfano, wakati ni kuweka. 124 00:07:44,000 --> 00:07:46,000 Hebu kusema kwamba variable bulin. 125 00:07:46,000 --> 00:07:48,000 Wakati hiyo ni kweli tunataka code kutathmini, 126 00:07:48,000 --> 00:07:52,000 hivyo kidogo zaidi extensible, kidogo zaidi ya jumla kuliko kwa kitanzi, 127 00:07:52,000 --> 00:07:55,000 lakini yoyote kwa kitanzi pia inaweza kuongoka kwa kitanzi wakati. 128 00:07:55,000 --> 00:08:00,000 Hatimaye, kufanya wakati tanzi, ambayo inaweza kuwa trickiest kufahamu haki mbali, 129 00:08:00,000 --> 00:08:04,000 zinatumika mara nyingi wakati tunataka kutathmini code kwanza 130 00:08:04,000 --> 00:08:06,000 kabla ya wakati wa kwanza sisi kuangalia hali. 131 00:08:06,000 --> 00:08:09,000 matumizi ya pamoja kesi kwa kufanya wakati kitanzi 132 00:08:09,000 --> 00:08:12,000 ni wakati unataka kupata user pembejeo, na unajua unataka kuuliza mtumiaji 133 00:08:12,000 --> 00:08:15,000 kwa ajili ya pembejeo angalau mara moja, lakini kama hawana kukupa pembejeo nzuri haki mbali 134 00:08:15,000 --> 00:08:18,000 unataka kuendelea kuuliza nao mpaka kukupa pembejeo nzuri. 135 00:08:18,000 --> 00:08:21,000 Hiyo ni matumizi ya kawaida ya kufanya wakati kitanzi, 136 00:08:21,000 --> 00:08:23,000 na hebu tuangalie muundo halisi ya matanzi haya. 137 00:08:23,000 --> 00:08:27,000 Wao kawaida huwa daima kufuata ruwaza hizi. 138 00:08:27,000 --> 00:08:30,000 >> On kitanzi kwa ajili ya ndani una vipengele 3: 139 00:08:30,000 --> 00:08:35,000 initialization, kawaida kitu kama int i = 0 ambapo i ni counter, 140 00:08:35,000 --> 00:08:40,000 hali, ambapo tunataka kusema kukimbia hii kwa kitanzi kwa muda mrefu kama hali hii bado anashikilia, 141 00:08:40,000 --> 00:08:44,000 kama i <10, na kisha hatimaye, update, ambayo ni jinsi sisi increment 142 00:08:44,000 --> 00:08:47,000 variable counter katika kila hatua katika kitanzi. 143 00:08:47,000 --> 00:08:50,000 jambo la kawaida kuona kuna tu i + +, 144 00:08:50,000 --> 00:08:52,000 ambayo ina maana increment i na 1 kila wakati. 145 00:08:52,000 --> 00:08:55,000 Unaweza pia kufanya kitu kama i + = 2, 146 00:08:55,000 --> 00:08:58,000 ambayo ina maana ya kuongeza 2 na i kila wakati wewe kwenda kwa njia ya kitanzi. 147 00:08:58,000 --> 00:09:03,000 Na kisha kufanya hivyo tu inahusu yoyote kificho kwamba kweli anaendesha kama sehemu ya kitanzi. 148 00:09:03,000 --> 00:09:09,000 Na kwa kitanzi wakati, wakati huu sisi kweli kuwa initialization nje ya loop, 149 00:09:09,000 --> 00:09:12,000 hivyo kwa mfano, hebu kusema sisi ni kujaribu kufanya aina moja ya loop kama mimi tu ilivyoelezwa. 150 00:09:12,000 --> 00:09:16,000 Tunataka kusema int i = 0 kabla kitanzi huanza. 151 00:09:16,000 --> 00:09:20,000 Kisha tunaweza kusema wakati i <10 kufanya hili, 152 00:09:20,000 --> 00:09:22,000 hivyo kuzuia huo wa kanuni kama kabla, 153 00:09:22,000 --> 00:09:26,000 na wakati huu sehemu update ya kificho, kwa mfano, i + +, 154 00:09:26,000 --> 00:09:29,000 kweli inakwenda ndani ya kitanzi. 155 00:09:29,000 --> 00:09:33,000 Na hatimaye, kwa kufanya wakati, ni sawa na kitanzi wakati, 156 00:09:33,000 --> 00:09:36,000 lakini tunahitaji kukumbuka kwamba kanuni itakuwa kutathmini mara moja 157 00:09:36,000 --> 00:09:40,000 kabla hali ni checked, hivyo inafanya mengi zaidi akili 158 00:09:40,000 --> 00:09:44,000 kama ukiangalia kwa utaratibu wa juu hadi chini. 159 00:09:44,000 --> 00:09:49,000 Katika, kufanya wakati kitanzi code kutathmini kabla hata kuangalia hali wakati 160 00:09:49,000 --> 00:09:55,000 ambapo kitanzi wakati, hundi ya kwanza. 161 00:09:55,000 --> 00:09:59,000 Kauli na vigezo. 162 00:09:59,000 --> 00:10:04,000 Wakati tunataka kujenga variable mpya sisi kwanza unataka initialize yake. 163 00:10:04,000 --> 00:10:07,000 >> Kwa mfano, bar int initializes bar variable, 164 00:10:07,000 --> 00:10:10,000 lakini haina kuwapa thamani, hivyo ni nini thamani bar sasa? 165 00:10:10,000 --> 00:10:12,000 Hatujui. 166 00:10:12,000 --> 00:10:14,000 Ni inaweza kuwa baadhi ya thamani ya takataka kwamba awali alikuwa kuhifadhiwa katika kumbukumbu huko, 167 00:10:14,000 --> 00:10:16,000 na hatutaki kutumia kwamba variable 168 00:10:16,000 --> 00:10:19,000 mpaka sisi kweli kuwapa thamani, 169 00:10:19,000 --> 00:10:21,000 hivyo sisi kutangaza hapa. 170 00:10:21,000 --> 00:10:24,000 Kisha sisi initialize kuwa ni 42 chini. 171 00:10:24,000 --> 00:10:28,000 Sasa, bila shaka, tunajua hii inaweza kufanyika kwenye mstari mmoja, int bar = 42. 172 00:10:28,000 --> 00:10:30,000 Lakini tu kuwa wazi hatua mbalimbali ambayo ni kwenda, 173 00:10:30,000 --> 00:10:34,000 tamko na initialization yanayotokea tofauti hapa. 174 00:10:34,000 --> 00:10:38,000 Ni hufanyika kwenye hatua moja, na moja ijayo, int bazi = bar + 1, 175 00:10:38,000 --> 00:10:44,000 kauli hii hapa chini, kwamba bazi nyongeza, hivyo mwisho wa block hii code 176 00:10:44,000 --> 00:10:48,000 kama tulikuwa na magazeti thamani ya bazi itakuwa 44 177 00:10:48,000 --> 00:10:52,000 kwa sababu sisi kutangaza na initialize kuwa ni 1> bar, 178 00:10:52,000 --> 00:10:58,000 na kisha sisi increment mara moja zaidi na + +. 179 00:10:58,000 --> 00:11:02,000 Sisi akaenda juu ufupi hii pretty, lakini ni vizuri kuwa na jumla ya 180 00:11:02,000 --> 00:11:04,000 kuelewa nini threads na matukio ni. 181 00:11:04,000 --> 00:11:06,000 Sisi hasa alifanya hivyo katika Scratch, 182 00:11:06,000 --> 00:11:09,000 hivyo unaweza kufikiri ya nyuzi kama Mwandamano nyingi ya maadili ya 183 00:11:09,000 --> 00:11:11,000 mbio kwa wakati mmoja. 184 00:11:11,000 --> 00:11:14,000 Katika actuality, basi pengine si mbio wakati huo huo, 185 00:11:14,000 --> 00:11:17,000 lakini aina ya abstractly tunaweza kufikiria ni katika njia hiyo. 186 00:11:17,000 --> 00:11:20,000 >> Katika Scratch, kwa mfano, tulikuwa na sprites nyingi. 187 00:11:20,000 --> 00:11:22,000 Ni inaweza kuwa utekelezaji code tofauti kwa wakati mmoja. 188 00:11:22,000 --> 00:11:26,000 Mtu anaweza kuwa kutembea wakati mwingine kusema kitu 189 00:11:26,000 --> 00:11:29,000 katika sehemu mbalimbali ya screen. 190 00:11:29,000 --> 00:11:34,000 Matukio ni njia nyingine ya kujitenga kutoka mantiki 191 00:11:34,000 --> 00:11:37,000 kati ya mambo mbalimbali ya code yako, 192 00:11:37,000 --> 00:11:40,000 na katika Scratch tulikuwa na uwezo wa kuigiza matukio kutumia Broadcast, 193 00:11:40,000 --> 00:11:43,000 na hiyo ni kweli Wakati mimi Pokea, si Wakati mimi Sikieni, 194 00:11:43,000 --> 00:11:47,000 lakini kimsingi ni njia ya kutangaza habari 195 00:11:47,000 --> 00:11:49,000 kutoka sprite mmoja hadi mwingine. 196 00:11:49,000 --> 00:11:52,000 Kwa mfano, unaweza kutaka kusambaza mchezo juu, 197 00:11:52,000 --> 00:11:56,000 na wakati mwingine sprite inapata mchezo juu, 198 00:11:56,000 --> 00:11:58,000 inavyopokea katika njia fulani. 199 00:11:58,000 --> 00:12:03,000 Ni mfano wa kuigwa muhimu kuelewa kwa programu. 200 00:12:03,000 --> 00:12:07,000 Tu kwenda juu ya Wiki ya msingi 0, nini tumeenda juu hadi sasa, 201 00:12:07,000 --> 00:12:10,000 hebu tuangalie mpango huu rahisi C. 202 00:12:10,000 --> 00:12:14,000 Nakala inaweza kuwa kidogo kidogo kutoka hapa, lakini mimi nitakwenda juu yake kweli haraka. 203 00:12:14,000 --> 00:12:20,000 Sisi ni pamoja na files header 2 saa ya juu, na cs50.h stdio.h. 204 00:12:20,000 --> 00:12:23,000 Sisi ni mara kwa mara kisha kufasili kuitwa kikomo kuwa 100. 205 00:12:23,000 --> 00:12:26,000 Sisi ni kisha kutekeleza kazi yetu kuu. 206 00:12:26,000 --> 00:12:29,000 Tangu sisi si kutumia hoja mstari amri hapa tunahitaji kuweka utupu 207 00:12:29,000 --> 00:12:32,000 kama hoja kwa kuu. 208 00:12:32,000 --> 00:12:38,000 Tunaona int juu kuu. Hiyo ni aina ya kurudi, hivyo kurudi 0 chini. 209 00:12:38,000 --> 00:12:41,000 Na sisi ni kutumia CS50 maktaba kazi kupata int 210 00:12:41,000 --> 00:12:45,000 kuuliza mtumiaji kwa ajili ya pembejeo, na sisi kuhifadhi katika x hii variable, 211 00:12:45,000 --> 00:12:51,000 hivyo sisi kutangaza x hapo juu, na sisi initialize kwa x = GetInt. 212 00:12:51,000 --> 00:12:53,000 >> Sisi basi kuangalia kuona kama mtumiaji alitupa pembejeo nzuri. 213 00:12:53,000 --> 00:12:59,000 Kama ni ≥ LIMIT tunataka kurudi code makosa ya 1 na magazeti ujumbe wa kosa. 214 00:12:59,000 --> 00:13:02,000 Na hatimaye, kama mtumiaji ametupa nzuri pembejeo 215 00:13:02,000 --> 00:13:08,000 tunakwenda mraba namba na magazeti nje kwamba matokeo. 216 00:13:08,000 --> 00:13:11,000 Tu kuhakikisha kwamba wale wote nyumbani hit 217 00:13:11,000 --> 00:13:17,000 unaweza kuona maandiko ya sehemu mbalimbali za code hapa. 218 00:13:17,000 --> 00:13:19,000 Nilivyoeleza mara kwa mara, files header. 219 00:13:19,000 --> 00:13:21,000 Oh, int x. Hakikisha kukumbuka kwamba variable mitaa. 220 00:13:21,000 --> 00:13:24,000 Hiyo analinganisha ni kutoka variable kimataifa, ambayo tutaweza majadiliano juu ya 221 00:13:24,000 --> 00:13:27,000 kidogo kidogo baadaye katika kikao cha mapitio, 222 00:13:27,000 --> 00:13:30,000 na sisi ni wito kazi maktaba printf, 223 00:13:30,000 --> 00:13:34,000 hivyo kama sisi alikuwa si pamoja stdio.h header faili 224 00:13:34,000 --> 00:13:37,000 sisi isingekuwa na uwezo wa kuwaita printf. 225 00:13:37,000 --> 00:13:42,000 Na naamini arrow kwamba got kukatwa hapa ni akizungumzia d%, 226 00:13:42,000 --> 00:13:45,000 ambayo ni string formatting katika printf. 227 00:13:45,000 --> 00:13:52,000 Ni anasema magazeti nje hii variable kama d idadi,%. 228 00:13:52,000 --> 00:13:58,000 Na kwamba ni kwa ajili ya Wiki 0. 229 00:13:58,000 --> 00:14:06,000 Sasa Lucas ni kwenda kuendelea. 230 00:14:06,000 --> 00:14:08,000 Hey, guys. Jina langu ni Lucas. 231 00:14:08,000 --> 00:14:10,000 Mimi nina sophomore katika nyumba bora juu ya chuo, Mather, 232 00:14:10,000 --> 00:14:14,000 na mimi nina kwenda kuzungumza kidogo kuhusu Wiki 1 na 2.1. 233 00:14:14,000 --> 00:14:16,000 [Wiki 1 na 2.1!] [Lucas Freitas] 234 00:14:16,000 --> 00:14:19,000 Kama Lexi alikuwa akisema, wakati sisi ilianza kutafsiri code yako kutoka kwa Scratch C 235 00:14:19,000 --> 00:14:23,000 moja ya mambo ambayo sisi niliona ni kwamba unaweza tu 236 00:14:23,000 --> 00:14:26,000 kuandika code yako na kukimbia kwa kutumia bendera ya kijani tena. 237 00:14:26,000 --> 00:14:30,000 Kweli, una kutumia baadhi ya hatua na kufanya yako C mpango 238 00:14:30,000 --> 00:14:33,000 kuwa faili la kutekelezwa. 239 00:14:33,000 --> 00:14:36,000 Kimsingi nini unaweza kufanya wakati wewe ni kuandika mpango ni kwamba 240 00:14:36,000 --> 00:14:40,000 wewe kutafsiri wazo lako katika lugha ya kwamba compiler anaweza kuelewa, 241 00:14:40,000 --> 00:14:44,000 hivyo wakati wewe ni kuandika mpango katika C 242 00:14:44,000 --> 00:14:47,000 kile unachokifanya ni kweli kuandika kitu ambacho compiler yako anaenda kuelewa, 243 00:14:47,000 --> 00:14:50,000 na kisha compiler ni kwenda kutafsiri kwamba kanuni 244 00:14:50,000 --> 00:14:53,000 katika kitu ambacho kompyuta yako, wataelewa. 245 00:14:53,000 --> 00:14:55,000 >> Na jambo lenyewe, kompyuta yako ni kweli sana bubu. 246 00:14:55,000 --> 00:14:57,000 Kompyuta yako inaweza tu kuelewa na sekunde 0 1s, 247 00:14:57,000 --> 00:15:01,000 hivyo kweli katika kompyuta ya kwanza kwa kawaida watu iliyowekwa 248 00:15:01,000 --> 00:15:04,000 kutumia sekunde 0 na 1s, lakini si tena, kumshukuru Mungu. 249 00:15:04,000 --> 00:15:07,000 Hatuna kukariri Mwandamano kwa sekunde 0 na 1s 250 00:15:07,000 --> 00:15:10,000 kwa ajili ya kitanzi au kwa kitanzi wakati na kadhalika. 251 00:15:10,000 --> 00:15:13,000 Hiyo ndiyo sababu tuna compiler. 252 00:15:13,000 --> 00:15:17,000 Nini compiler gani ni kimsingi hutafsiriwa code C, 253 00:15:17,000 --> 00:15:21,000 katika kesi yetu, kwa lugha ya kwamba kompyuta yako wataelewa, 254 00:15:21,000 --> 00:15:25,000 ambayo ni code kitu, na compiler kwamba sisi ni kutumia 255 00:15:25,000 --> 00:15:30,000 inaitwa Clang, hivyo hii ni kweli alama kwa Clang. 256 00:15:30,000 --> 00:15:33,000 Wakati una mpango wako, una kufanya mambo 2. 257 00:15:33,000 --> 00:15:37,000 Kwanza, una mpango wa kukusanya yako, na kisha utaenda kuendesha programu yako. 258 00:15:37,000 --> 00:15:41,000 Kukusanya mpango wako una mengi ya chaguzi za kufanya hivyo. 259 00:15:41,000 --> 00:15:44,000 moja ya kwanza ni kufanya Clang program.c 260 00:15:44,000 --> 00:15:47,000 katika mpango ambayo ni jina la mpango wako. 261 00:15:47,000 --> 00:15:51,000 Katika kesi hii unaweza kuona wao ni kusema tu "Hey, kukusanya mpango wangu." 262 00:15:51,000 --> 00:15:56,000 Wewe si kusema "Nataka hii jina kwa ajili ya mpango wangu" au kitu chochote. 263 00:15:56,000 --> 00:15:58,000 >> chaguo la pili ni kutoa jina kwa programu yako. 264 00:15:58,000 --> 00:16:02,000 Unaweza kusema Clang-o na kisha jina kwamba unataka 265 00:16:02,000 --> 00:16:06,000 faili executable kutajwa kama na kisha program.c. 266 00:16:06,000 --> 00:16:11,000 Na unaweza pia kufanya kufanya mpango, na kuona jinsi katika kwanza 2 kesi 267 00:16:11,000 --> 00:16:15,000 Mimi kuweka c., Na katika moja ya tatu tu mimi kuwa na programu? 268 00:16:15,000 --> 00:16:18,000 Yeah, wewe kweli haipaswi kuweka c. Wakati matumizi ya kufanya. 269 00:16:18,000 --> 00:16:22,000 Vinginevyo compiler ni kweli kwenda yell saa wewe. 270 00:16:22,000 --> 00:16:24,000 Na pia, mimi sijui kama wewe guys kumbuka, 271 00:16:24,000 --> 00:16:29,000 lakini mara nyingi sisi pia kutumika-lcs50 au-LM. 272 00:16:29,000 --> 00:16:31,000 Hiyo inaitwa kuunganisha. 273 00:16:31,000 --> 00:16:35,000 Ni tu anamwambia compiler kwamba utatumia maktaba wale haki pale, 274 00:16:35,000 --> 00:16:39,000 hivyo kama unataka kutumia cs50.h wewe kweli kuwa na aina 275 00:16:39,000 --> 00:16:43,000 Clang program.c-lcs50. 276 00:16:43,000 --> 00:16:45,000 Kama huna kufanya hivyo, compiler si kwenda kujua 277 00:16:45,000 --> 00:16:50,000 kwamba wewe ni kutumia kazi hizo katika cs50.h. 278 00:16:50,000 --> 00:16:52,000 Na wakati unataka kuendesha programu yako una chaguzi 2. 279 00:16:52,000 --> 00:16:57,000 Kama alivyofanya Clang program.c hukutoa jina kwa programu yako. 280 00:16:57,000 --> 00:17:01,000 Una kukimbia kutumia. / A.out. 281 00:17:01,000 --> 00:17:06,000 A.out ni jina kiwango kwamba Clang anatoa mpango wako kama huna kuwapa jina. 282 00:17:06,000 --> 00:17:11,000 Vinginevyo wewe kwenda kufanya. / Mpango kama wewe alitoa jina kwa mpango wako, 283 00:17:11,000 --> 00:17:15,000 na pia kama wewe alifanya kufanya mpango jina kwamba mpango ni kwenda kupata 284 00:17:15,000 --> 00:17:23,000 tayari kwenda kuwa programmed jina moja kama faili c. 285 00:17:23,000 --> 00:17:26,000 Kisha tuliongea kuhusu aina ya data na data. 286 00:17:26,000 --> 00:17:31,000 >> Kimsingi data aina ni kitu kimoja kama masanduku kidogo wao kutumia 287 00:17:31,000 --> 00:17:35,000 kuhifadhi maadili, hivyo data aina ni kweli tu kama Pokémons. 288 00:17:35,000 --> 00:17:39,000 Wao kuja katika ukubwa wote na aina. 289 00:17:39,000 --> 00:17:43,000 Mimi sijui kama mlinganisho kwamba hufanya akili. 290 00:17:43,000 --> 00:17:46,000 ukubwa data kweli inategemea usanifu mashine. 291 00:17:46,000 --> 00:17:49,000 Ukubwa wote data kwamba nitakacho kuonyesha hapa 292 00:17:49,000 --> 00:17:53,000 ni kweli kwa mashine 32-bit, ambayo ni kesi ya appliance yetu, 293 00:17:53,000 --> 00:17:56,000 lakini kama wewe ni kweli coding Mac yako au katika Windows pia 294 00:17:56,000 --> 00:17:59,000 pengine wewe utaenda kuwa na mashine ya 64-bit, 295 00:17:59,000 --> 00:18:03,000 hivyo kumbuka kwamba ukubwa data kwamba nitakacho kuonyesha hapa 296 00:18:03,000 --> 00:18:06,000 ni kwa ajili ya mashine 32-bit. 297 00:18:06,000 --> 00:18:08,000 moja ya kwanza kuwa tuliona alikuwa int, 298 00:18:08,000 --> 00:18:10,000 ambayo ni pretty moja kwa moja. 299 00:18:10,000 --> 00:18:13,000 Wewe kutumia int kuhifadhi integer. 300 00:18:13,000 --> 00:18:16,000 Tuliona pia tabia, char. 301 00:18:16,000 --> 00:18:20,000 Kama unataka kutumia barua au ishara kidogo pengine wewe kwenda kutumia Char. 302 00:18:20,000 --> 00:18:26,000 Char ana 1 Byte, ambayo ina maana bits 8, kama Lexi alisema. 303 00:18:26,000 --> 00:18:31,000 Kimsingi tuna Jedwali ASCII ambayo ina 256 304 00:18:31,000 --> 00:18:34,000 iwezekanavyo michanganyiko ya sekunde 0 na 1s, 305 00:18:34,000 --> 00:18:37,000 na kisha pale unapoandika Char itakavyo kutafsiri 306 00:18:37,000 --> 00:18:44,000 tabia ya kuwa wewe pembejeo idadi kuwa katika meza ASCII, kama Lexi alisema. 307 00:18:44,000 --> 00:18:48,000 Sisi pia kuwa kuelea, ambayo sisi kutumia na kuhifadhi idadi decimal. 308 00:18:48,000 --> 00:18:53,000 Kama unataka kuchagua 3.14, kwa mfano, wewe utaenda kuutumia kuelea 309 00:18:53,000 --> 00:18:55,000 au mara mbili ambayo ina zaidi na usahihi. 310 00:18:55,000 --> 00:18:57,000 kuelea ana ka 4. 311 00:18:57,000 --> 00:19:01,000 mara mbili ana ka 8, hivyo tofauti tu ni usahihi. 312 00:19:01,000 --> 00:19:04,000 Sisi pia kuwa kwa muda mrefu kwamba ni kutumika kwa integers, 313 00:19:04,000 --> 00:19:09,000 na unaweza kuona kwa mashine 32-bit int na muda mrefu na ukubwa huo, 314 00:19:09,000 --> 00:19:13,000 hivyo ni kweli haina mantiki ya kutumia muda katika mashine ya 32-bit. 315 00:19:13,000 --> 00:19:17,000 >> Lakini kama wewe ni kutumia mashine Mac na 64-bit, kwa kweli kwa muda mrefu ina ukubwa 8, 316 00:19:17,000 --> 00:19:19,000 hivyo ni kweli inategemea usanifu. 317 00:19:19,000 --> 00:19:22,000 Kwa ajili ya mashine 32-bit haina mantiki ya kutumia muda mrefu kweli. 318 00:19:22,000 --> 00:19:25,000 Na kisha muda mrefu, kwa upande mwingine, ina ka 8, 319 00:19:25,000 --> 00:19:30,000 hivyo ni vizuri sana kama unataka kuwa integer tena. 320 00:19:30,000 --> 00:19:34,000 Na hatimaye, tuna kamba, ambayo ni kweli * Char, 321 00:19:34,000 --> 00:19:37,000 ambayo ni pointer Char. 322 00:19:37,000 --> 00:19:40,000 Ni rahisi sana kufikiri kwamba ukubwa wa string ni kwenda kuwa kama 323 00:19:40,000 --> 00:19:42,000 idadi ya herufi kwamba una pale, 324 00:19:42,000 --> 00:19:45,000 lakini kwa kweli * Char yenyewe 325 00:19:45,000 --> 00:19:49,000 ina ukubwa wa pointer Char, ambayo ni 4 ka. 326 00:19:49,000 --> 00:19:52,000 ukubwa wa * Char ni 4 ka. 327 00:19:52,000 --> 00:19:56,000 Haijalishi kama una neno dogo au barua au kitu chochote. 328 00:19:56,000 --> 00:19:58,000 Ni kwenda kuwa 4 ka. 329 00:19:58,000 --> 00:20:01,000 Tulijifunza pia kidogo kuhusu akitoa, 330 00:20:01,000 --> 00:20:04,000 hivyo kama unaweza kuona, kama una, kwa mfano, mpango kwamba anasema 331 00:20:04,000 --> 00:20:08,000 int x = 3 na kisha printf ("% d", x / 2) 332 00:20:08,000 --> 00:20:12,000 kufanya wewe guys kujua nini kinaendelea na magazeti juu ya screen? 333 00:20:12,000 --> 00:20:14,000 >> Mtu >> [Wanafunzi]? 2. 334 00:20:14,000 --> 00:20:16,000 1. >> 1, yeah. 335 00:20:16,000 --> 00:20:20,000 Wakati wa kufanya 3/2 ni kwenda kupata 1.5, 336 00:20:20,000 --> 00:20:24,000 lakini tangu sisi ni kutumia integer itakavyo kupuuza sehemu decimal, 337 00:20:24,000 --> 00:20:26,000 na mtaenda kuwa 1. 338 00:20:26,000 --> 00:20:29,000 Kama hutaki kuwa kutokea nini unaweza kufanya, kwa mfano, 339 00:20:29,000 --> 00:20:33,000 ni kutangaza kuelea y = x. 340 00:20:33,000 --> 00:20:40,000 Kisha x kwamba kutumika kuwa 3 sasa ni kwenda kuwa 3.000 katika y. 341 00:20:40,000 --> 00:20:44,000 Na kisha unaweza magazeti y / 2. 342 00:20:44,000 --> 00:20:50,000 Kweli, mimi wanapaswa kuwa na 2. zaidi ya hapo. 343 00:20:50,000 --> 00:20:55,000 Ni kwenda kufanya 3.00/2.00, 344 00:20:55,000 --> 00:20:58,000 na wewe ni kwenda kupata 1.5. 345 00:20:58,000 --> 00:21:06,000 Na tuna hii f 0.2 tu ya kuuliza kwa ajili ya vitengo 2 decimal katika sehemu decimal. 346 00:21:06,000 --> 00:21:12,000 Kama una f 0.3 itakavyo kuwa kweli 1.500. 347 00:21:12,000 --> 00:21:16,000 Kama ni 2 itakavyo kuwa 1.50. 348 00:21:16,000 --> 00:21:18,000 Sisi pia kuwa kesi hii hapa. 349 00:21:18,000 --> 00:21:22,000 Kama wewe kufanya kuelea x = 3.14 na basi printf x 350 00:21:22,000 --> 00:21:24,000 wewe ni kwenda kupata 3.14. 351 00:21:24,000 --> 00:21:29,000 Na kama wewe kufanya x = int ya x, 352 00:21:29,000 --> 00:21:34,000 ambayo ina maana ya kutibu x kama int na wewe magazeti x sasa 353 00:21:34,000 --> 00:21:36,000 wewe utaenda kuwa na 3.00. 354 00:21:36,000 --> 00:21:38,000 Je, hiyo mantiki? 355 00:21:38,000 --> 00:21:41,000 Kwa sababu wewe ni wa kwanza kutibu x kama integer, hivyo wewe ni kupuuza sehemu decimal, 356 00:21:41,000 --> 00:21:45,000 na kisha wewe ni uchapishaji x. 357 00:21:45,000 --> 00:21:47,000 Na hatimaye, unaweza pia kufanya hivyo, 358 00:21:47,000 --> 00:21:52,000 int x = 65, na kisha kutangaza Char c = x, 359 00:21:52,000 --> 00:21:56,000 na kisha kama magazeti c wewe ni kweli kwenda kupata 360 00:21:56,000 --> 00:21:59,000 , Hivyo kimsingi kile unachokifanya hapa 361 00:21:59,000 --> 00:22:02,000 na kutafsiri integer katika tabia, 362 00:22:02,000 --> 00:22:05,000 tu kama Jedwali ASCII gani. 363 00:22:05,000 --> 00:22:08,000 Sisi pia alizungumzia waendeshaji math. 364 00:22:08,000 --> 00:22:14,000 Wengi wao ni pretty moja kwa moja, hivyo +, -, *, /, 365 00:22:14,000 --> 00:22:20,000 na pia kuongelea Mod, ambayo ni salio ya mgawanyiko wa idadi 2. 366 00:22:20,000 --> 00:22:23,000 Kama una 10% 3, kwa mfano, 367 00:22:23,000 --> 00:22:27,000 maana kugawanya 10 na 3, na nini ni salio? 368 00:22:27,000 --> 00:22:30,000 Ni kwenda kuwa 1, hivyo ni muhimu sana kwa kweli mengi ya mipango. 369 00:22:30,000 --> 00:22:38,000 Kwa Vigenère na Kaisari nina uhakika pretty kuwa wote nyie kutumika Mod. 370 00:22:38,000 --> 00:22:43,000 Kuhusu waendeshaji math, kuwa makini sana wakati kuchanganya * na /. 371 00:22:43,000 --> 00:22:48,000 >> Kwa mfano, kama wewe kufanya (3/2) * 2 nini wewe ni kwenda kupata? 372 00:22:48,000 --> 00:22:50,000 [Wanafunzi] 2. 373 00:22:50,000 --> 00:22:54,000 Yeah, 2, kwa sababu 3/2 ni kwenda kuwa 1.5, 374 00:22:54,000 --> 00:22:57,000 lakini tangu unafanya shughuli kati ya integers 2 375 00:22:57,000 --> 00:22:59,000 wewe ni kweli kwenda tu kufikiria 1, 376 00:22:59,000 --> 00:23:03,000 na kisha 1 * 2 ni kwenda kuwa 2, hivyo kuwa mwangalifu sana 377 00:23:03,000 --> 00:23:07,000 wakati wa kufanya hesabu kwa sababu integers 378 00:23:07,000 --> 00:23:12,000 unaweza kupata kwamba 2 = 3, katika kesi hiyo. 379 00:23:12,000 --> 00:23:14,000 Na pia kuwa makini sana juu ya kuendelezwa. 380 00:23:14,000 --> 00:23:21,000 Unapaswa kawaida kutumia mabano kuwa na uhakika kwamba unajua nini unachokifanya. 381 00:23:21,000 --> 00:23:27,000 Baadhi ya njia za mkato muhimu, bila shaka, moja ni i + + + au i = 1 382 00:23:27,000 --> 00:23:30,000 au kutumia + =. 383 00:23:30,000 --> 00:23:34,000 Hiyo ni kitu kimoja kama kufanya i = i + 1. 384 00:23:34,000 --> 00:23:39,000 Unaweza pia kufanya i - au i - = 1, 385 00:23:39,000 --> 00:23:42,000 ambayo ni kitu sawa kama i = i -1, 386 00:23:42,000 --> 00:23:46,000 kitu wewe guys matumizi mengi katika kwa tanzi, angalau. 387 00:23:46,000 --> 00:23:52,000 Pia, kwa ajili ya *, kama matumizi * = na kama wewe, kwa mfano, 388 00:23:52,000 --> 00:23:57,000 i * = 2 ni kitu sawa na kusema i = i * 2, 389 00:23:57,000 --> 00:23:59,000 na kitu kimoja kwa ajili ya mgawanyo. 390 00:23:59,000 --> 00:24:08,000 Kama wewe kufanya i / = 2 ni kitu sawa kama i = i / 2. 391 00:24:08,000 --> 00:24:10,000 >> Sasa kuhusu utendaji. 392 00:24:10,000 --> 00:24:13,000 You guys kujifunza kwamba kazi ni mkakati mzuri sana kuokoa code 393 00:24:13,000 --> 00:24:16,000 wakati wewe programu, hivyo kama unataka kufanya kazi sawa 394 00:24:16,000 --> 00:24:20,000 katika code tena na tena, pengine unataka kutumia kazi 395 00:24:20,000 --> 00:24:25,000 hivyo tu huna na nakala na kuweka code juu na juu tena. 396 00:24:25,000 --> 00:24:28,000 Kweli, kuu ni kazi, na wakati mimi kuonyesha muundo wa kazi 397 00:24:28,000 --> 00:24:32,000 wewe utaenda kuona kwamba ni pretty wazi. 398 00:24:32,000 --> 00:24:35,000 Sisi pia kutumia kazi kutoka maktaba baadhi, 399 00:24:35,000 --> 00:24:39,000 kwa mfano, printf, GetIn, ambayo ni kutoka maktaba CS50, 400 00:24:39,000 --> 00:24:43,000 na kazi nyingine kama toupper. 401 00:24:43,000 --> 00:24:46,000 Wote wa kazi hizo ni kweli kutekelezwa katika maktaba nyingine, 402 00:24:46,000 --> 00:24:49,000 na wakati kuweka files wale tether katika mwanzo wa mpango wako 403 00:24:49,000 --> 00:24:53,000 wewe ni kusema unaweza tafadhali nipe code kwa kazi hizo 404 00:24:53,000 --> 00:24:57,000 hivyo sina kuitekeleza kwa mwenyewe? 405 00:24:57,000 --> 00:25:00,000 Na unaweza pia kuandika yako kazi wenyewe, hivyo wakati wa kuanza programu 406 00:25:00,000 --> 00:25:04,000 wewe kutambua kwamba maktaba hawana kazi zote kwamba unahitaji. 407 00:25:04,000 --> 00:25:10,000 Kwa pset mwisho, kwa mfano, sisi aliandika kuteka, kinyang'anyiro, na Luke, 408 00:25:10,000 --> 00:25:13,000 na ni sana, ni muhimu sana kuwa na uwezo wa kuandika kazi 409 00:25:13,000 --> 00:25:17,000 kwa sababu wao ni muhimu, na sisi kutumia muda wao wote katika programu, 410 00:25:17,000 --> 00:25:19,000 na anaokoa mengi ya code. 411 00:25:19,000 --> 00:25:21,000 muundo wa kazi ni hii moja. 412 00:25:21,000 --> 00:25:24,000 Tuna kurudi aina katika mwanzo. Je, ni aina ya kurudi? 413 00:25:24,000 --> 00:25:27,000 Ni tu wakati kazi yako ni kwenda na kurudi. 414 00:25:27,000 --> 00:25:29,000 Kama una kazi, kwa mfano, factorial, 415 00:25:29,000 --> 00:25:31,000 kwamba ni kwenda kwa mahesabu ya factorial integer, 416 00:25:31,000 --> 00:25:34,000 pengine ni kwenda na kurudi integer pia. 417 00:25:34,000 --> 00:25:37,000 Basi aina ya kurudi ni kwenda kuwa int. 418 00:25:37,000 --> 00:25:41,000 Printf kweli ina aina kurudi tupu 419 00:25:41,000 --> 00:25:43,000 kwa sababu wewe si kurudi chochote. 420 00:25:43,000 --> 00:25:45,000 Wewe tu uchapishaji mambo screen 421 00:25:45,000 --> 00:25:48,000 na kuacha kazi baadaye. 422 00:25:48,000 --> 00:25:51,000 Kisha una jina la kazi ambayo unaweza kuchagua. 423 00:25:51,000 --> 00:25:55,000 Unapaswa kuwa kidogo nafuu, kama huna kuchagua jina kama XYZ 424 00:25:55,000 --> 00:25:58,000 au kama x2f. 425 00:25:58,000 --> 00:26:02,000 Jaribu kufanya juu ya jina kwamba hufanya akili. 426 00:26:02,000 --> 00:26:04,000 >> Kwa mfano, kama ni factorial, kusema factorial. 427 00:26:04,000 --> 00:26:08,000 Kama ni kazi ambayo ni kwenda kuteka kitu, jina hilo kuteka. 428 00:26:08,000 --> 00:26:11,000 Na kisha tuna vigezo, ambayo pia inaitwa hoja, 429 00:26:11,000 --> 00:26:14,000 ambayo ni kama rasilimali kwamba kazi yako inahitaji 430 00:26:14,000 --> 00:26:17,000 kutoka code yako kufanya kazi yake. 431 00:26:17,000 --> 00:26:20,000 Kama unataka kufanya mahesabu factorial ya idadi 432 00:26:20,000 --> 00:26:23,000 pengine unahitaji kuwa na idadi ya hesabu factorial. 433 00:26:23,000 --> 00:26:27,000 Moja ya hoja kwamba utaenda kuwa ni namba yenyewe. 434 00:26:27,000 --> 00:26:31,000 Na basi ni kwenda kufanya kitu na kurudi thamani mwishoni 435 00:26:31,000 --> 00:26:35,000 isipokuwa ni kazi tupu. 436 00:26:35,000 --> 00:26:37,000 Hebu angalia mfano. 437 00:26:37,000 --> 00:26:40,000 Kama nataka kuandika kazi kwamba sums namba zote katika safu ya integers, 438 00:26:40,000 --> 00:26:43,000 Awali ya yote, aina ya kurudi ni kwenda kuwa int 439 00:26:43,000 --> 00:26:46,000 kwa sababu mimi na safu ya integers. 440 00:26:46,000 --> 00:26:51,000 Na kisha mimi naenda kuwa jina kazi kama sumArray, 441 00:26:51,000 --> 00:26:54,000 na kisha kwenda kuchukua safu yenyewe, kwa nums int, 442 00:26:54,000 --> 00:26:58,000 na kisha urefu wa safu hivyo najua jinsi wengi idadi nina jumla. 443 00:26:58,000 --> 00:27:02,000 Basi nina initialize variable kuitwa jumla, kwa mfano, 0, 444 00:27:02,000 --> 00:27:08,000 na kila wakati mimi kuona kipengele katika safu mimi autoe kwa jumla, hivyo sikuwa kwa kitanzi. 445 00:27:08,000 --> 00:27:15,000 Tu kama Lexi alisema, unaweza kufanya int i = 0, i 00:27:20,000 Na kwa kila kipengele katika safu sikuwa Jumla + = nums [i], 447 00:27:20,000 --> 00:27:24,000 na kisha nikarudi Jumla, hivyo ni rahisi sana, na anaokoa mengi ya maadili ya 448 00:27:24,000 --> 00:27:28,000 kama wewe ni kutumia kazi hii mara nyingi. 449 00:27:28,000 --> 00:27:32,000 Kisha sisi alichukua kuangalia hali. 450 00:27:32,000 --> 00:27:38,000 Tuna ikiwa, kingine, na kingine kama. 451 00:27:38,000 --> 00:27:42,000 Hebu angalia ni nini tofauti kati ya hizo. 452 00:27:42,000 --> 00:27:45,000 Kuangalia namba hizi 2. Nini tofauti kati yao? 453 00:27:45,000 --> 00:27:49,000 moja ya kwanza ina-kimsingi codes nataka uiambie 454 00:27:49,000 --> 00:27:51,000 kama idadi ni +, -, au 0. 455 00:27:51,000 --> 00:27:55,000 moja ya kwanza anasema kama ni> 0 basi ni chanya. 456 00:27:55,000 --> 00:28:00,000 Kama ni = 0 kwa basi ni 0, na kama ni <0 basi ni hasi. 457 00:28:00,000 --> 00:28:04,000 >> Na mtu mwingine ni kufanya kama, mwingine kama, mwingine. 458 00:28:04,000 --> 00:28:07,000 tofauti kati ya mbili ni kwamba moja hii ni kweli kwenda 459 00:28:07,000 --> 00:28:13,000 kuangalia kama> 0, <0 au = 0 mara tatu, 460 00:28:13,000 --> 00:28:17,000 hivyo kama una idadi 2, kwa mfano, ni kwenda kuja hapa na kusema 461 00:28:17,000 --> 00:28:21,000 kama (x> 0), na ni kwenda kusema ndiyo, hivyo mimi magazeti chanya. 462 00:28:21,000 --> 00:28:25,000 Lakini hata ingawa najua kwamba ni> 0 na si kwenda kuwa 0 au <0 463 00:28:25,000 --> 00:28:29,000 Mimi bado kwenda kufanya ni 0, ni <0, 464 00:28:29,000 --> 00:28:33,000 hivyo mimi nina kweli kwenda ndani ya ikiwa kwamba sikuwa na kwa 465 00:28:33,000 --> 00:28:38,000 kwa sababu tayari najua kwamba si kwenda kukidhi yoyote ya masharti hayo. 466 00:28:38,000 --> 00:28:41,000 Naweza kutumia kama, mwingine kama, mwingine taarifa. 467 00:28:41,000 --> 00:28:45,000 Ni kimsingi anasema kama x = 0 mimi magazeti chanya. 468 00:28:45,000 --> 00:28:48,000 Kama siyo, mimi naenda pia mtihani huu. 469 00:28:48,000 --> 00:28:51,000 Kama ni 2 si mimi naenda kufanya hili. 470 00:28:51,000 --> 00:28:54,000 Kimsingi kama alikuwa x = 2 ungependa kusema 471 00:28:54,000 --> 00:28:57,000 kama (x> 0), ndiyo, hivyo magazeti hii. 472 00:28:57,000 --> 00:29:00,000 Sasa kwa kuwa najua kwamba ni> 0 na kwamba ameridhika kwanza ikiwa 473 00:29:00,000 --> 00:29:02,000 Mimi si hata kwenda kukimbia hii code. 474 00:29:02,000 --> 00:29:09,000 code anaendesha kwa kasi, kwa kweli, mara 3 kwa kasi kama wewe kutumia hii. 475 00:29:09,000 --> 00:29:11,000 Sisi pia kujifunza kuhusu na na au. 476 00:29:11,000 --> 00:29:15,000 Sitakuja kupitia hii kwa sababu Lexi tayari kuongelea kuhusu wao. 477 00:29:15,000 --> 00:29:17,000 Ni tu && na | | operator. 478 00:29:17,000 --> 00:29:21,000 >> Kitu tu nitasema ni kuwa makini wakati una hali ya 3. 479 00:29:21,000 --> 00:29:24,000 Matumizi mabano kwa sababu ni utata sana wakati una hali 480 00:29:24,000 --> 00:29:27,000 na mwingine mmoja au mwingine. 481 00:29:27,000 --> 00:29:30,000 Matumizi ya mabano tu kuwa na uhakika kwamba hali yako ya kufanya maana 482 00:29:30,000 --> 00:29:34,000 kwa sababu katika kesi hiyo, kwa mfano, unaweza kufikiria kwamba 483 00:29:34,000 --> 00:29:38,000 inaweza kuwa ni hali ya kwanza na moja au nyingine 484 00:29:38,000 --> 00:29:41,000 au hali ya 2 pamoja na katika 485 00:29:41,000 --> 00:29:45,000 au moja ya tatu, hivyo tu kuwa makini. 486 00:29:45,000 --> 00:29:48,000 Na hatimaye, kuongelea swichi. 487 00:29:48,000 --> 00:29:53,000 kubadili ni muhimu sana wakati una kutofautiana. 488 00:29:53,000 --> 00:29:55,000 Hebu kusema kwamba una variable kama n 489 00:29:55,000 --> 00:29:59,000 ambayo inaweza kuwa 0, 1, au 2, na kwa kila kesi hizo 490 00:29:59,000 --> 00:30:01,000 utaenda kufanya kazi. 491 00:30:01,000 --> 00:30:04,000 Unaweza kusema kubadili variable, na inaonyesha kuwa 492 00:30:04,000 --> 00:30:08,000 thamani basi ni kama value1 mimi naenda kufanya hii, 493 00:30:08,000 --> 00:30:12,000 na kisha mimi kuvunja, ambayo ina maana mimi si kwenda kuangalia yoyote ya kesi nyingine 494 00:30:12,000 --> 00:30:15,000 kwa sababu sisi tayari kuridhika kwamba kesi 495 00:30:15,000 --> 00:30:20,000 na kisha value2 na kadhalika, na mimi pia unaweza kuwa na kubadili default. 496 00:30:20,000 --> 00:30:24,000 Hiyo ina maana kama hana kukidhi yoyote ya kesi kuwa nilikuwa 497 00:30:24,000 --> 00:30:29,000 kwamba mimi naenda kufanya kitu kingine, lakini hiyo ni hiari. 498 00:30:29,000 --> 00:30:36,000 Hayo ni yote kwa ajili yangu. Sasa hebu kuwa Tommy. 499 00:30:36,000 --> 00:30:41,000 Haki zote, hii ni kwenda kuwa Wiki ya 3-ish. 500 00:30:41,000 --> 00:30:45,000 Hizi ni baadhi ya mada tutaweza kuwa kifuniko, crypto, upeo arrays,, nakadhalika. 501 00:30:45,000 --> 00:30:49,000 Tu neno ya haraka juu ya crypto. Sisi siyo kwenda nyundo hii nyumbani. 502 00:30:49,000 --> 00:30:52,000 >> Sisi alifanya hivyo katika pset 2, lakini kwa jaribio kuhakikisha kujua tofauti 503 00:30:52,000 --> 00:30:54,000 kati ya cipher Kaisari na cipher Vigenère, 504 00:30:54,000 --> 00:30:57,000 jinsi ya wale wote kazi ciphers na kile ni kama encrypt 505 00:30:57,000 --> 00:30:59,000 na decrypt maandishi kwa kutumia ciphers wale 2. 506 00:30:59,000 --> 00:31:03,000 Kumbuka, cipher Kaisari tu rotates kila tabia kwa kiasi sawa, 507 00:31:03,000 --> 00:31:06,000 kuhakikisha Mod kwa idadi ya herufi katika alfabeti. 508 00:31:06,000 --> 00:31:09,000 Na cipher Vigenère, kwa upande mwingine, rotates kila tabia 509 00:31:09,000 --> 00:31:12,000 kwa kiasi tofauti, hivyo badala ya kusema 510 00:31:12,000 --> 00:31:15,000 kuzungushwa tabia kila na Vigenère 3 utazunguka kila tabia 511 00:31:15,000 --> 00:31:17,000 kwa kiasi tofauti kutegemea Keyword baadhi 512 00:31:17,000 --> 00:31:20,000 ambapo kila barua katika Keyword inawakilisha baadhi kiasi tofauti 513 00:31:20,000 --> 00:31:26,000 kwa mzunguko Nakala wazi kwa. 514 00:31:26,000 --> 00:31:28,000 Hebu kwanza majadiliano kuhusu wigo kutofautiana. 515 00:31:28,000 --> 00:31:30,000 Kuna 2 aina tofauti ya vigezo. 516 00:31:30,000 --> 00:31:33,000 Tuna vigezo mitaa, na haya ni kwenda kuelezwa 517 00:31:33,000 --> 00:31:36,000 nje ya kuu au nje ya kazi yoyote au kuzuia, 518 00:31:36,000 --> 00:31:39,000 na haya yatakuwa kupatikana popote katika programu yako. 519 00:31:39,000 --> 00:31:41,000 Kama una kazi na katika kazi kwamba ni kitanzi wakati 520 00:31:41,000 --> 00:31:44,000 kubwa variable kimataifa ni kupatikana kila mahali. 521 00:31:44,000 --> 00:31:48,000 variable mitaa, kwa upande mwingine, ni scoped mahali ambapo ni defined. 522 00:31:48,000 --> 00:31:53,000 >> Kama una kazi hapa, kwa mfano, tuna hii g kazi, 523 00:31:53,000 --> 00:31:56,000 na ndani ya g kuna kutofautiana hapa aitwaye y, 524 00:31:56,000 --> 00:31:58,000 na hiyo ina maana kwamba hii ni variable mitaa. 525 00:31:58,000 --> 00:32:00,000 Hata ingawa variable hii inaitwa y 526 00:32:00,000 --> 00:32:03,000 na kutofautiana hii inaitwa y kazi hizi 2 527 00:32:03,000 --> 00:32:06,000 hawana wazo nini kila mmoja vigezo mitaa ni. 528 00:32:06,000 --> 00:32:10,000 Kwa upande mwingine, hapa tunasema int x = 5, 529 00:32:10,000 --> 00:32:12,000 na hii ni nje ya upeo wa kazi yoyote. 530 00:32:12,000 --> 00:32:16,000 Ni nje ya upeo wa kuu, hivyo hii ni variable kimataifa. 531 00:32:16,000 --> 00:32:20,000 Hiyo ina maana kwamba ndani ya kazi hizi 2 wakati mimi kusema x - au x + + 532 00:32:20,000 --> 00:32:26,000 Mimi nina kupata x huo ambapo hii y na hii ni tofauti y vigezo. 533 00:32:26,000 --> 00:32:30,000 Hiyo ni tofauti kati ya variable kimataifa na variable mitaa. 534 00:32:30,000 --> 00:32:33,000 Mbali kama design ni wasiwasi, wakati mwingine ni pengine wazo bora 535 00:32:33,000 --> 00:32:37,000 kuweka vigezo mitaa wakati wowote wewe waweza 536 00:32:37,000 --> 00:32:39,000 tangu akiwa rundo la vigezo kimataifa inaweza kupata kweli utata. 537 00:32:39,000 --> 00:32:42,000 Kama wewe kuwa na rundo la utendaji wote kubadilisha kitu kimoja 538 00:32:42,000 --> 00:32:45,000 unaweza kusahau nini kama kazi hii ajali hugeuza hii ya kimataifa, 539 00:32:45,000 --> 00:32:47,000 na hii kazi nyingine hajui kuhusu hilo, 540 00:32:47,000 --> 00:32:50,000 na haina kupata pretty utata kama wewe kupata zaidi code. 541 00:32:50,000 --> 00:32:53,000 Kuweka vigezo mitaa wakati wowote wewe waweza 542 00:32:53,000 --> 00:32:56,000 ni nzuri tu design. 543 00:32:56,000 --> 00:33:00,000 Arrays, kumbuka, ni tu orodha ya mambo ya aina moja. 544 00:33:00,000 --> 00:33:04,000 Ndani ya CI haiwezi kuwa na orodha kama 1, 2.0, hello. 545 00:33:04,000 --> 00:33:06,000 Sisi tu hawezi kufanya hivyo. 546 00:33:06,000 --> 00:33:11,000 >> Wakati sisi kutangaza safu katika C wote wa mambo kuwa ya aina moja. 547 00:33:11,000 --> 00:33:14,000 Hapa nina safu ya integers 3. 548 00:33:14,000 --> 00:33:18,000 Hapa nina urefu wa safu, lakini kama mimi tu kutangaza katika syntax hii 549 00:33:18,000 --> 00:33:21,000 ambapo mimi bayana nini wote wa mambo ni mimi si kitaalam haja hii 3. 550 00:33:21,000 --> 00:33:25,000 compiler ni smart kutosha kufikiri jinsi kubwa safu lazima. 551 00:33:25,000 --> 00:33:28,000 Sasa wakati nataka kupata au kuweka thamani ya safu 552 00:33:28,000 --> 00:33:30,000 hii ni syntax ya kufanya hivyo. 553 00:33:30,000 --> 00:33:33,000 Hii kwa kweli kurekebisha kipengele pili wa safu kwa sababu, kumbuka, 554 00:33:33,000 --> 00:33:36,000 hesabu kuanza saa 0, si katika 1. 555 00:33:36,000 --> 00:33:42,000 Kama mimi nataka kusoma kwamba thamani siwezi kusema kitu kama int x = array [1]. 556 00:33:42,000 --> 00:33:44,000 Au kama nataka kuweka kwamba thamani, kama mimi kufanya hapa, 557 00:33:44,000 --> 00:33:47,000 Naweza kusema safu [1] = 4. 558 00:33:47,000 --> 00:33:50,000 Kwamba wakati wa kupata vipengele na index yao 559 00:33:50,000 --> 00:33:52,000 au nafasi zao au ambapo wao ni katika safu, 560 00:33:52,000 --> 00:33:57,000 na tangazo ambalo kuanza saa 0. 561 00:33:57,000 --> 00:34:00,000 Tunaweza pia kuwa arrays ya arrays, 562 00:34:00,000 --> 00:34:03,000 na hii inaitwa safu multi-dimensional. 563 00:34:03,000 --> 00:34:05,000 Wakati tuna safu multi-dimensional 564 00:34:05,000 --> 00:34:07,000 hiyo ina maana tunaweza kuwa na kitu kama safu na nguzo, 565 00:34:07,000 --> 00:34:11,000 na hii ni moja ya njia ya visualizing hii au kufikiri juu yake. 566 00:34:11,000 --> 00:34:14,000 Wakati nina safu multi-dimensional kwamba maana Mimi naenda kuanza wanaohitaji 567 00:34:14,000 --> 00:34:17,000 zaidi ya 1 index kwa sababu kama mimi na gridi ya taifa 568 00:34:17,000 --> 00:34:19,000 kusema tu kile mstari uko hautupatii idadi. 569 00:34:19,000 --> 00:34:22,000 Hiyo ni kweli tu kwenda kutupa orodha ya namba. 570 00:34:22,000 --> 00:34:25,000 Hebu sema nina hii safu hapa. 571 00:34:25,000 --> 00:34:30,000 Nina safu kuitwa gridi ya taifa, na mimi kusema ni safu ya 2 na 3 nguzo, 572 00:34:30,000 --> 00:34:32,000 na hivyo hii ni njia mojawapo ya visualizing yake. 573 00:34:32,000 --> 00:34:37,000 Wakati mimi kusema nataka kupata kipengele katika [1] [2] 574 00:34:37,000 --> 00:34:41,000 hiyo ina maana kwamba kwa sababu hizi ni safu ya kwanza na kisha nguzo 575 00:34:41,000 --> 00:34:44,000 Mimi naenda kuruka kwa mstari 1 tangu mimi alisema 1. 576 00:34:44,000 --> 00:34:49,000 >> Kisha mimi naenda kuja hapa kwa safu 2, na mimi nina kwenda kupata thamani 6. 577 00:34:49,000 --> 00:34:51,000 Mantiki? 578 00:34:51,000 --> 00:34:55,000 Multi-dimensional arrays, kumbuka, ni utaalamu tu safu ya arrays. 579 00:34:55,000 --> 00:34:57,000 Tunaweza kuwa na arrays ya arrays ya arrays. 580 00:34:57,000 --> 00:35:00,000 Tunaweza kuendelea, lakini kwa kweli moja ya njia ya kufikiri juu ya 581 00:35:00,000 --> 00:35:03,000 jinsi hii ni kuwa aliweka nje na nini kinaendelea ni taswira yake 582 00:35:03,000 --> 00:35:09,000 katika gridi ya taifa kama hii. 583 00:35:09,000 --> 00:35:12,000 Wakati sisi kupita arrays kwa kazi, wao wanaenda kuishi 584 00:35:12,000 --> 00:35:16,000 kidogo tofauti kuliko wakati sisi kupita vigezo mara kwa mara kwa kazi 585 00:35:16,000 --> 00:35:18,000 kama kupita int au kuelea. 586 00:35:18,000 --> 00:35:21,000 Wakati sisi kupita katika aina int au Char au yoyote ya data hizi nyingine 587 00:35:21,000 --> 00:35:24,000 sisi tu alichukua kuangalia kama kazi hugeuza 588 00:35:24,000 --> 00:35:28,000 thamani ya variable kwamba kuwa mabadiliko si kwenda kueneza up 589 00:35:28,000 --> 00:35:32,000 kwa kazi wito. 590 00:35:32,000 --> 00:35:35,000 Na safu, kwa upande mwingine, kwamba kitatokea. 591 00:35:35,000 --> 00:35:39,000 Kama mimi kupita katika safu ya kazi baadhi na kazi kwamba mabadiliko ya baadhi ya vipengele, 592 00:35:39,000 --> 00:35:43,000 wakati mimi kurudi hadi kazi ambayo kuitwa ni 593 00:35:43,000 --> 00:35:47,000 safu yangu sasa ni kwenda kuwa tofauti, na msamiati kwa kuwa 594 00:35:47,000 --> 00:35:50,000 arrays ni ni kupita kwa kumbukumbu, kama tutaweza kuona baadaye. 595 00:35:50,000 --> 00:35:53,000 Hii ni kuhusiana na jinsi ya kuyatumia kazi, ambapo haya ya msingi data aina, 596 00:35:53,000 --> 00:35:55,000 kwa upande mwingine, ni kupita kwa thamani. 597 00:35:55,000 --> 00:35:59,000 >> Tunaweza kufikiria kwamba kama kufanya nakala ya variable baadhi na kisha kupita katika nakala. 598 00:35:59,000 --> 00:36:01,000 Haijalishi nini sisi kufanya na variable kwamba. 599 00:36:01,000 --> 00:36:06,000 kazi wito si kuwa na ufahamu kwamba ilikuwa iliyopita. 600 00:36:06,000 --> 00:36:10,000 Arrays ni kidogo tu tofauti katika suala hilo. 601 00:36:10,000 --> 00:36:13,000 Kwa mfano, kama sisi tu nikaona, kuu ni utendaji tu 602 00:36:13,000 --> 00:36:15,000 kwamba wanaweza kuchukua katika hoja 2. 603 00:36:15,000 --> 00:36:20,000 Hoja ya kwanza kwa kazi kubwa ni argc, au idadi ya hoja, 604 00:36:20,000 --> 00:36:23,000 na hoja ya pili inaitwa argv, 605 00:36:23,000 --> 00:36:27,000 na wale ni halisi maadili ya hoja hizo. 606 00:36:27,000 --> 00:36:30,000 Hebu sema nina mpango ujulikanao this.c, 607 00:36:30,000 --> 00:36:34,000 na mimi kusema kufanya hili, na mimi nina kwenda kukimbia hii ifikapo mstari amri. 608 00:36:34,000 --> 00:36:38,000 Sasa kupita katika hoja ya baadhi ya programu yangu iitwayo hii, 609 00:36:38,000 --> 00:36:42,000 Mimi naweza kusema kitu kama /. Hii ni cs 50. 610 00:36:42,000 --> 00:36:45,000 Hii ni nini sisi kufikiria Daudi kufanya kila siku katika terminal. 611 00:36:45,000 --> 00:36:48,000 Lakini sasa kuu kazi ndani ya mpango huo 612 00:36:48,000 --> 00:36:52,000 ina maadili haya, hivyo argc ni 4. 613 00:36:52,000 --> 00:36:56,000 Inaweza kuwa utata kidogo kwa sababu kwa kweli tuko tu kupita katika cs ni 50. 614 00:36:56,000 --> 00:36:58,000 Hiyo tu 3. 615 00:36:58,000 --> 00:37:02,000 Lakini kumbuka kwamba kipengele kwanza ya argv au hoja ya kwanza 616 00:37:02,000 --> 00:37:05,000 ni jina ya kazi yenyewe. 617 00:37:05,000 --> 00:37:07,190 Hivyo hiyo ina maana kwamba tuna mambo 4 hapa, 618 00:37:07,190 --> 00:37:10,530 na kipengele kwanza ni kwenda kuwa. / huu. 619 00:37:10,530 --> 00:37:12,970 Na hii itakuwa kuwakilishwa kama kamba. 620 00:37:12,970 --> 00:37:18,590 Kisha mambo iliyobaki ni nini sisi typed katika baada ya jina la mpango. 621 00:37:18,590 --> 00:37:22,720 Hivyo tu kama kando, kama sisi pengine aliona katika pset 2, 622 00:37:22,720 --> 00:37:28,780 kukumbuka kwamba string 50 ni ≠ 50 integer. 623 00:37:28,780 --> 00:37:32,520 Hivyo hatuwezi kusema kitu kama, 'int x = argv 3.' 624 00:37:32,520 --> 00:37:36,470 >> Hiyo tu si kwenda kufanya maana, kwa sababu hii ni kamba, na hii ni integer. 625 00:37:36,470 --> 00:37:38,510 Hivyo kama unataka kubadilisha kati ya 2, kumbuka, tunakwenda 626 00:37:38,510 --> 00:37:40,810 kuwa kazi hii uchawi kuitwa atoi. 627 00:37:40,810 --> 00:37:46,270 Hii inachukua kamba na anarudi integer kuwakilishwa ndani ya kamba hiyo. 628 00:37:46,270 --> 00:37:48,360 Basi hiyo ni kosa rahisi kufanya juu ya chemsha bongo, 629 00:37:48,360 --> 00:37:51,590 tu kufikiri kwamba hii itakuwa moja kwa moja kuwa na aina sahihi. 630 00:37:51,590 --> 00:37:53,860 Lakini tu kujua kwamba hawa daima kuwa masharti 631 00:37:53,860 --> 00:38:00,920 hata kama kamba tu ina integer au tabia au kuelea. 632 00:38:00,920 --> 00:38:03,380 Hivyo sasa hebu majadiliano kuhusu mbio wakati. 633 00:38:03,380 --> 00:38:06,700 Wakati tuna hizi algorithms wote kufanya mambo haya yote mambo, 634 00:38:06,700 --> 00:38:11,580 inakuwa muhimu kweli kweli kwa kuuliza swali, "Ni kwa muda gani wao kuchukua?" 635 00:38:11,580 --> 00:38:15,500 Sisi kuwakilisha kwamba pamoja na kitu kinachoitwa asymptotic nukuu. 636 00:38:15,500 --> 00:38:18,430 Hivyo hii ina maana kwamba - vizuri, hebu sema sisi kutoa algorithm wetu 637 00:38:18,430 --> 00:38:20,840 baadhi ya pembejeo kweli, kweli, kweli ni kubwa. 638 00:38:20,840 --> 00:38:23,840 Sisi nataka kuuliza swali, "Ni kwa muda gani ni kwenda kuchukua? 639 00:38:23,840 --> 00:38:26,370 Wangapi hatua itachukua algorithm yetu ya kuendesha 640 00:38:26,370 --> 00:38:29,980 kama kazi ya kawaida ya pembejeo? " 641 00:38:29,980 --> 00:38:33,080 Hivyo njia ya kwanza tunaweza kuelezea kukimbia wakati ni pamoja na kubwa O. 642 00:38:33,080 --> 00:38:35,380 Na hii ni yetu mbaya zaidi kesi mbio wakati. 643 00:38:35,380 --> 00:38:38,590 Hivyo kama tunataka kutatua safu, na sisi kutoa kompyuta yetu safu 644 00:38:38,590 --> 00:38:41,000 kwamba katika utaratibu wa kushuka wakati ni lazima kuwa ili wakipanda, 645 00:38:41,000 --> 00:38:43,130 ambayo inaenda kuwa kesi mbaya. 646 00:38:43,130 --> 00:38:49,800 Hii ni juu yetu amefungwa katika upeo wa urefu wa muda algorithm yetu itachukua. 647 00:38:49,800 --> 00:38:54,740 Kwa upande mwingine, hii Ω ni kwenda kuelezea bora kesi mbio wakati. 648 00:38:54,740 --> 00:38:58,210 Hivyo kama sisi kutoa safu tayari kwa sorted algorithm kuchagua, 649 00:38:58,210 --> 00:39:00,940 jinsi itachukua muda mrefu kwa aina yake? 650 00:39:00,940 --> 00:39:06,610 Na hili, basi, inaeleza chini amefungwa kwenye mbio wakati. 651 00:39:06,610 --> 00:39:10,980 Hivyo hapa ni baadhi tu ya maneno kwamba kueleza baadhi ya kawaida mara mbio. 652 00:39:10,980 --> 00:39:13,120 Hizi ni katika wakipanda ili. 653 00:39:13,120 --> 00:39:16,060 muda wa kasi mbio tuna inaitwa mara kwa mara. 654 00:39:16,060 --> 00:39:19,800 >> Hiyo ina maana bila kujali jinsi wengi vipengele sisi kutoa kompyuta yetu, 655 00:39:19,800 --> 00:39:22,280 hakuna jambo gani kubwa safu yetu ni, kuchagua ni 656 00:39:22,280 --> 00:39:26,510 au kufanya chochote tuko kufanya na safu daima kuchukua kiasi hicho hicho. 657 00:39:26,510 --> 00:39:30,270 Hivyo tunaweza kuwakilisha kwamba tu kwa 1, ambayo ni mara kwa mara. 658 00:39:30,270 --> 00:39:32,410 Sisi pia inaonekana katika wakati logarithmic kukimbia. 659 00:39:32,410 --> 00:39:34,800 Hivyo kitu kama tafuta binary ni logarithmic, 660 00:39:34,800 --> 00:39:37,140 ambapo sisi kukata tatizo katika kila nusu wakati 661 00:39:37,140 --> 00:39:40,970 na kisha mambo kupata tu juu kutoka huko. 662 00:39:40,970 --> 00:39:43,580 Na kama wewe ni milele kuandika O ya algorithm yoyote factorial, 663 00:39:43,580 --> 00:39:47,850 pengine haipaswi kufikiria hili kama siku kazi yako. 664 00:39:47,850 --> 00:39:53,910 Wakati sisi kulinganisha mara mbio ni muhimu kukumbuka mambo haya. 665 00:39:53,910 --> 00:39:57,760 Hivyo kama nina algorithm kwamba O (n), na mtu mwingine 666 00:39:57,760 --> 00:40:03,590 ina algorithm ya O (2n) haya ni kweli asymptotically sawa. 667 00:40:03,590 --> 00:40:06,590 Hivyo kama sisi kufikiria n kuwa idadi kubwa kama eleventy bilioni: 668 00:40:06,590 --> 00:40:13,090 hivyo wakati sisi ni kulinganisha eleventy bilioni kitu kama eleventy bilioni + 3, 669 00:40:13,090 --> 00:40:17,640 ghafla 3 kwamba kweli haina kufanya tofauti kubwa tena. 670 00:40:17,640 --> 00:40:20,980 Hiyo ni kwa nini sisi ni kwenda kuanza kuzingatia mambo haya kuwa sawa. 671 00:40:20,980 --> 00:40:24,220 Hivyo mambo kama constants haya hapa, kuna 2 x hii, au kuongeza 3, 672 00:40:24,220 --> 00:40:27,180 hizi ni baadhi tu ya constants, na haya ni kwenda kuacha up. 673 00:40:27,180 --> 00:40:32,480 Hivyo kwamba ni kwa nini wote 3 ya nyakati hizi kukimbia ni sawa na kusema wao uko O (n). 674 00:40:32,480 --> 00:40:37,490 Vile vile, kama tuna 2 mara kukimbia mwingine, hebu sema O (n + 2n ² ³), tunaweza kuongeza 675 00:40:37,490 --> 00:40:42,070 + N, + 7, na kisha tuna wakati mwingine kukimbia kwamba tu O (n ³). 676 00:40:42,070 --> 00:40:46,290 tena, hayo ni kitu kimoja kwa sababu hizi - haya si sawa. 677 00:40:46,290 --> 00:40:49,840 Haya ni mambo sawa, pole. Basi hizi ni sawa kwa sababu 678 00:40:49,840 --> 00:40:53,090 hii ³ n ni kwenda kutawala hii ² 2n. 679 00:40:53,090 --> 00:40:59,130 >> Je, ni si kitu kimoja ni kama sisi kukimbia mara kama O (n ³) na O (n ²) 680 00:40:59,130 --> 00:41:02,820 kwa sababu hii ³ n ni kubwa kuliko hii ² n. 681 00:41:02,820 --> 00:41:05,470 Hivyo kama tuna mashujaa, ghafla hii kuanza jambo, 682 00:41:05,470 --> 00:41:08,280 lakini wakati sisi ni tu kushughulika na mambo kama sisi ni hapa juu, 683 00:41:08,280 --> 00:41:12,810 basi si kwenda umuhimu kwa sababu wao ni kwenda tu kuacha shule. 684 00:41:12,810 --> 00:41:16,760 Hebu tuangalie baadhi ya algorithms tumeona hivyo mbali 685 00:41:16,760 --> 00:41:19,260 na majadiliano juu ya kukimbia muda wao. 686 00:41:19,260 --> 00:41:23,850 Njia ya kwanza ya kutafuta namba katika orodha, kuwa tuliona, alikuwa linear tafuta. 687 00:41:23,850 --> 00:41:26,950 Na utekelezaji wa tafuta linear ni super moja kwa moja. 688 00:41:26,950 --> 00:41:30,490 Sisi tu kuwa na orodha, na sisi ni kwenda kuangalia kila moja ya kipengele katika orodha 689 00:41:30,490 --> 00:41:34,260 mpaka sisi kupata idadi sisi ni kuangalia kwa. 690 00:41:34,260 --> 00:41:38,370 Hivyo hiyo ina maana kwamba katika kesi mbaya, hii O (n). 691 00:41:38,370 --> 00:41:40,860 Na hali mbaya hapa inaweza kuwa kama kipengele ni 692 00:41:40,860 --> 00:41:45,710 kipengele mwisho, basi kwa kutumia tafuta linear tuna kuangalia kipengele kila moja 693 00:41:45,710 --> 00:41:50,180 mpaka sisi kupata moja ya mwisho ili kujua kwamba ni kweli katika orodha. 694 00:41:50,180 --> 00:41:52,910 Hatuwezi kutoa tu juu halfway na kusema, "Ni pengine si huko." 695 00:41:52,910 --> 00:41:55,980 Pamoja na tafuta linear tuna kuangalia jambo zima. 696 00:41:55,980 --> 00:41:59,090 bora-kesi mbio wakati, kwa upande mwingine, ni mara kwa mara 697 00:41:59,090 --> 00:42:04,200 kwa sababu katika kesi bora kipengele sisi ni kuangalia kwa ni moja tu ya kwanza katika orodha. 698 00:42:04,200 --> 00:42:08,930 Hivyo ni kwenda kuchukua yetu hasa 1 hatua, bila kujali jinsi kubwa orodha ni 699 00:42:08,930 --> 00:42:12,140 kama sisi ni kuangalia kwa kipengele kwanza kila wakati. 700 00:42:12,140 --> 00:42:15,390 >> Hivyo wakati wewe kutafuta, kumbuka, hauhitaji kwamba orodha yetu sorted. 701 00:42:15,390 --> 00:42:19,430 Kwa sababu tuko tu kwenda kuangalia juu ya kipengele kila moja, na ni kweli haina jambo 702 00:42:19,430 --> 00:42:23,560 utaratibu gani wale vipengele ni in 703 00:42:23,560 --> 00:42:28,110 akili zaidi tafuta algorithm ni kitu kama tafuta binary. 704 00:42:28,110 --> 00:42:31,500 Kumbuka, utekelezaji wa tafuta binary ni wakati wewe kwenda 705 00:42:31,500 --> 00:42:34,320 kushika kuangalia katikati ya orodha. 706 00:42:34,320 --> 00:42:38,000 Na kwa sababu sisi ni kuangalia katikati, sisi zinahitaji kwamba orodha ni Iliyopangwa 707 00:42:38,000 --> 00:42:40,580 au mwingine hatujui ambapo katikati ni, na inabidi kuangalia juu ya 708 00:42:40,580 --> 00:42:44,480 orodha nzima kupata hiyo, na kisha katika hatua hiyo tuko tu kupoteza muda. 709 00:42:44,480 --> 00:42:48,480 Hivyo kama tuna orodha Iliyopangwa na sisi kupata katikati, tunakwenda kulinganisha katikati 710 00:42:48,480 --> 00:42:51,590 kwa kipengele sisi ni kuangalia kwa. 711 00:42:51,590 --> 00:42:54,640 Kama ni ya juu sana, basi tunaweza kusahau nusu haki 712 00:42:54,640 --> 00:42:57,810 kwa sababu tunajua kwamba kama kipengele yetu ni tayari kubwa mno 713 00:42:57,810 --> 00:43:01,080 na kila kitu na haki ya kipengele hiki ni hata ya juu, 714 00:43:01,080 --> 00:43:02,760 basi hatuna haja ya kuangalia humo tena. 715 00:43:02,760 --> 00:43:05,430 Ambapo kwa upande mwingine, ikiwa kipengele yetu ni ndogo mno, 716 00:43:05,430 --> 00:43:08,700 tunajua kila kitu kwa upande wa kushoto wa kipengele kwamba pia ni ndogo mno, 717 00:43:08,700 --> 00:43:11,390 hivyo ni kweli haina maana kufanya kuangalia huko, aidha. 718 00:43:11,390 --> 00:43:15,760 Kwa njia hii, kwa kila hatua na kila wakati sisi kuangalia midpoint ya orodha, 719 00:43:15,760 --> 00:43:19,060 tunakwenda kupunguza tatizo letu katika nusu kwa sababu tunajua ghafla 720 00:43:19,060 --> 00:43:23,040 rundo zima la idadi kwamba hawezi kuwa mmoja sisi ni kuangalia kwa. 721 00:43:23,040 --> 00:43:26,950 >> Katika pseudocode hii bila kuangalia kitu kama hii, 722 00:43:26,950 --> 00:43:30,990 na kwa sababu tuko kukata orodha katika wakati moja kila nusu, 723 00:43:30,990 --> 00:43:34,920 yetu mbaya zaidi kesi kukimbia wakati anaruka kutoka linear logarithmic. 724 00:43:34,920 --> 00:43:39,260 Hivyo ghafla tuna logi-katika hatua ili kupata kipengele katika orodha. 725 00:43:39,260 --> 00:43:42,460 bora-kesi mbio wakati, ingawa, bado ni ya mara kwa mara 726 00:43:42,460 --> 00:43:45,180 kwa sababu sasa, hebu tu kusema kwamba kipengele sisi ni kuangalia kwa ni 727 00:43:45,180 --> 00:43:48,380 daima katikati ya halisi ya orodha ya awali. 728 00:43:48,380 --> 00:43:52,080 Hivyo tunaweza kukua orodha yetu kubwa kama tunataka, lakini kama kipengele sisi ni kuangalia kwa ni katika katikati, 729 00:43:52,080 --> 00:43:54,910 basi ni kwenda tu kuchukua sisi 1 hatua. 730 00:43:54,910 --> 00:44:00,920 Hivyo ndiyo sababu tuko O (logi n) na Ω (1) au mara kwa mara. 731 00:44:00,920 --> 00:44:04,510 Hebu kweli kukimbia tafuta binary katika orodha hii. 732 00:44:04,510 --> 00:44:08,020 Basi hebu kusema kwamba sisi ni kuangalia kwa kipengele 164. 733 00:44:08,020 --> 00:44:11,650 Jambo la kwanza sisi ni kwenda kufanya ni kupata midpoint ya orodha hii. 734 00:44:11,650 --> 00:44:15,060 Ni hivyo tu hutokea kwamba midpoint anaenda kuanguka katika kati ya namba hizi 2, 735 00:44:15,060 --> 00:44:18,960 hivyo hebu tu kiholela kusema, kila wakati midpoint falls kati ya nambari 2, 736 00:44:18,960 --> 00:44:21,150 hebu tu pande zote juu. 737 00:44:21,150 --> 00:44:24,330 Sisi tu haja ya kuhakikisha sisi kufanya hili kila hatua ya njia. 738 00:44:24,330 --> 00:44:29,040 Hivyo sisi ni kwenda pande zote juu, na sisi ni kwenda kusema kwamba 161 ni katikati ya orodha yetu. 739 00:44:29,040 --> 00:44:34,640 Hivyo 161 <164, na kila kipengele ya kushoto ya 161 740 00:44:34,640 --> 00:44:39,120 ni pia <164, hivyo tunajua kwamba si kwenda kutusaidia wakati wote 741 00:44:39,120 --> 00:44:42,690 kuanza kuangalia zaidi ya hapa kwa sababu ya kipengele sisi ni kuangalia kwa hawezi kuwa huko. 742 00:44:42,690 --> 00:44:47,060 Basi nini tunaweza kufanya ni tunaweza kusahau kuhusu nusu nzima ya kushoto ya orodha, 743 00:44:47,060 --> 00:44:51,700 na sasa tu kufikiria na haki ya kuendelea 161. 744 00:44:51,700 --> 00:44:54,050 >> Hivyo tena, hii ni midpoint; hebu tu pande zote juu. 745 00:44:54,050 --> 00:44:56,260 Sasa 175 ni kubwa mno. 746 00:44:56,260 --> 00:44:59,180 Hivyo tunajua si kwenda kutusaidia kuangalia hapa au hapa, 747 00:44:59,180 --> 00:45:06,610 hivyo tunaweza tu kutupa kwamba mbali, na hatimaye tutaweza hit 164. 748 00:45:06,610 --> 00:45:10,560 Maswali yoyote juu ya kutafuta binary? 749 00:45:10,560 --> 00:45:14,180 Hebu hoja juu ya kutafuta njia ya kutoka orodha tayari-sorted 750 00:45:14,180 --> 00:45:17,660 kwa kweli kuchukua orodha ya namba ili yeyote 751 00:45:17,660 --> 00:45:20,960 na kufanya kwamba orodha katika wakipanda ili. 752 00:45:20,960 --> 00:45:24,060 algorithm kwanza tuliyoyaangalia ilikuwa inaitwa Bubble aina. 753 00:45:24,060 --> 00:45:27,300 Na hii itakuwa rahisi ya algorithms tuliona. 754 00:45:27,300 --> 00:45:32,970 Bubble aina anasema kwamba wakati wowote ndani ya vipengele 2 orodha ni nje ya mahali, 755 00:45:32,970 --> 00:45:36,500 maana kuna idadi kubwa ya kushoto ya idadi ya chini, 756 00:45:36,500 --> 00:45:40,190 kisha tunakwenda byta yao, kwa sababu hiyo ina maana kwamba orodha itakuwa 757 00:45:40,190 --> 00:45:42,860 "Zaidi sorted" kuliko ilivyokuwa kabla. 758 00:45:42,860 --> 00:45:45,180 Na sisi ni kwenda tu kuendelea na mchakato huu tena na tena na tena 759 00:45:45,180 --> 00:45:52,100 mpaka hatimaye aina ya mambo ya Bubble mahali wao sahihi na tuna orodha Iliyopangwa. 760 00:45:52,100 --> 00:45:57,230 >> wakati kukimbia ya hii ni kwenda kuwa O (n ²). Kwa nini? 761 00:45:57,230 --> 00:46:00,370 Naam, kwa sababu katika hali mbaya, sisi ni kwenda kuchukua kila kipengele, na 762 00:46:00,370 --> 00:46:04,570 tunakwenda kuishia kulinganisha na kipengele kila nyingine katika orodha. 763 00:46:04,570 --> 00:46:08,030 Lakini katika kesi bora, tuna orodha tayari sorted, Bubble aina ya 764 00:46:08,030 --> 00:46:12,230 kwenda tu kupitia mara moja, kusema "Nope sikuweza kufanya swaps yoyote., hivyo mimi nina kufanyika." 765 00:46:12,230 --> 00:46:17,410 Hivyo tuna bora kesi mbio wakati wa Ω (n). 766 00:46:17,410 --> 00:46:20,680 Hebu kukimbia Bubble aina juu ya orodha. 767 00:46:20,680 --> 00:46:23,560 Au kwanza, hebu tu kuangalia pseudocode kweli baadhi ya haraka. 768 00:46:23,560 --> 00:46:28,160 Tunataka kusema tunataka kuweka wimbo wa, katika kila iteration ya kitanzi, 769 00:46:28,160 --> 00:46:32,190 kuweka wimbo wa kama au sisi iliyopita mambo yoyote. 770 00:46:32,190 --> 00:46:37,610 Hivyo sababu ya kuwa ni, sisi ni kwenda kuacha wakati sisi si swapped mambo yoyote. 771 00:46:37,610 --> 00:46:41,980 Hivyo wakati wa kuanza kwa kitanzi yetu sisi si swapped kitu chochote, hivyo tutaweza kusema kwamba uongo. 772 00:46:41,980 --> 00:46:47,170 Sasa, sisi ni kwenda kupitia orodha na kulinganisha kipengele i kwa kipengele i + 1 773 00:46:47,170 --> 00:46:50,310 na kama ni suala kwamba kuna idadi kubwa ya kushoto ya idadi ndogo, 774 00:46:50,310 --> 00:46:52,310 basi sisi ni kwenda tu wabadilishane yao. 775 00:46:52,310 --> 00:46:54,490 >> Na kisha sisi ni kwenda kukumbuka kwamba sisi swapped kipengele. 776 00:46:54,490 --> 00:46:58,900 Hiyo ina maana kwamba tunahitaji kwenda kupitia orodha angalau 1 zaidi wakati 777 00:46:58,900 --> 00:47:02,160 kwa sababu hali ambayo sisi kusimamishwa ni wakati orodha nzima tayari Iliyopangwa, 778 00:47:02,160 --> 00:47:04,890 maana sisi si alifanya swaps yoyote. 779 00:47:04,890 --> 00:47:09,960 Hivyo ndiyo sababu hali yetu chini hapa ni 'wakati baadhi ya vipengele wamekuwa swapped.' 780 00:47:09,960 --> 00:47:13,720 Hivyo sasa hebu tu kuangalia hii mbio juu ya orodha. 781 00:47:13,720 --> 00:47:16,640 Nina orodha 5,0,1,6,4. 782 00:47:16,640 --> 00:47:19,850 Bubble aina ni kwenda kuanza njia yote katika kushoto, na ni kwenda kulinganisha 783 00:47:19,850 --> 00:47:24,700 vipengele i, hivyo 0 kwa i + 1, ambayo ni kipengele 1. 784 00:47:24,700 --> 00:47:29,020 Ni kwenda kusema, vizuri 5> 0, lakini hivi sasa ni 5 wa kushoto, 785 00:47:29,020 --> 00:47:32,500 hivyo nahitaji wabadilishane 5 na 0. 786 00:47:32,500 --> 00:47:35,470 Wakati mimi byta yao, ghafla mimi kupata hii orodha tofauti. 787 00:47:35,470 --> 00:47:38,260 Sasa 5> 1, hivyo tunakwenda byta yao. 788 00:47:38,260 --> 00:47:42,160 5 si> 6, hivyo hatuna haja ya kufanya kitu chochote hapa. 789 00:47:42,160 --> 00:47:46,690 Lakini 6> 4, hivyo tunahitaji wabadilishane. 790 00:47:46,690 --> 00:47:49,740 Tena, sisi haja ya kuendesha kupitia orodha nzima ili hatimaye kugundua 791 00:47:49,740 --> 00:47:52,330 kwamba hizi ni nje ya utaratibu; sisi byta yao, 792 00:47:52,330 --> 00:47:57,120 na katika hatua hii tunahitaji kukimbia kupitia orodha 1 zaidi wakati 793 00:47:57,120 --> 00:48:05,390 kuhakikisha kwamba kila kitu katika utaratibu wake, na katika aina hii kumweka Bubble ina kumaliza. 794 00:48:05,390 --> 00:48:10,720 algorithm mbalimbali kwa ajili ya kuchukua baadhi ya vipengele na kuchagua yao ni uteuzi aina. 795 00:48:10,720 --> 00:48:15,740 Dhana ya aina uteuzi ni kwamba sisi ni kwenda kujenga sehemu ya orodha Iliyopangwa 796 00:48:15,740 --> 00:48:18,150 1 kipengele kwa wakati. 797 00:48:18,150 --> 00:48:23,170 >> Na njia tunakwenda kufanya hivyo ni kwa kujenga sehemu ya kushoto ya orodha. 798 00:48:23,170 --> 00:48:27,510 Na kimsingi, kila - juu ya kila hatua, sisi ni kwenda kuchukua kipengele ndogo sisi wameondoka 799 00:48:27,510 --> 00:48:32,310 kwamba haijawahi sorted bado, na tunakwenda hoja hiyo ndani ya sehemu ya kwamba Iliyopangwa. 800 00:48:32,310 --> 00:48:35,850 Hiyo ina maana tunahitaji kuendelea kupata chini ya kipengele zisizochambuliwa 801 00:48:35,850 --> 00:48:40,720 na kisha kuchukua kipengele cha chini na wabadilishane kwa chochote 802 00:48:40,720 --> 00:48:45,090 kushoto-wengi kipengele kwamba si Iliyopangwa. 803 00:48:45,090 --> 00:48:50,890 wakati kukimbia ya hii ni kwenda kuwa O (n ²) kwa sababu katika hali mbaya 804 00:48:50,890 --> 00:48:55,070 tunahitaji kulinganisha kila kipengele moja kwa kila kipengele nyingine. 805 00:48:55,070 --> 00:48:59,250 Kwa sababu sisi ni kusema kwamba kama sisi kuanza saa nusu kushoto wa orodha, tunahitaji 806 00:48:59,250 --> 00:49:02,970 kupitia sehemu nzima haki ya kupata kipengele ndogo. 807 00:49:02,970 --> 00:49:05,430 Na kisha, tena, tunahitaji kwenda zaidi nzima haki ya sehemu na 808 00:49:05,430 --> 00:49:08,210 kuendelea juu ya kwamba zaidi na tena na tena. 809 00:49:08,210 --> 00:49:11,350 Hiyo itakuwa n ². Sisi ni kwenda haja kwa kitanzi ndani ya mwingine kwa kitanzi 810 00:49:11,350 --> 00:49:13,350 ambayo anapendekeza n ². 811 00:49:13,350 --> 00:49:16,530 Katika mawazo bora kesi, hebu sema sisi kuwapa orodha tayari sorted; 812 00:49:16,530 --> 00:49:19,270 sisi kweli si kufanya lolote bora kuliko ² n. 813 00:49:19,270 --> 00:49:21,730 Kwa sababu ya uteuzi aina hana njia ya kujua kwamba 814 00:49:21,730 --> 00:49:25,540 kipengele cha chini ni moja tu mimi kutokea kwa kuwa na kuangalia. 815 00:49:25,540 --> 00:49:28,970 Ni bado mahitaji ya kuhakikisha kwamba hii ni kweli kima cha chini. 816 00:49:28,970 --> 00:49:31,670 >> Na njia pekee ya kuhakikisha kuwa ni kima cha chini, kwa kutumia hii algorithm, 817 00:49:31,670 --> 00:49:34,640 ni kuangalia kipengele kila moja tena. 818 00:49:34,640 --> 00:49:38,420 Hivyo kweli, kama wewe kuwapa - kama wewe kutoa uteuzi aina orodha tayari Iliyopangwa, 819 00:49:38,420 --> 00:49:42,720 si kwenda kufanya lolote bora kuliko kuwapa orodha ambayo si sorted bado. 820 00:49:42,720 --> 00:49:46,320 Kwa njia, kama ni hutokea kwa kuwa kesi kwamba kitu fulani ni O (kitu) 821 00:49:46,320 --> 00:49:50,640 na omega ya kitu fulani, tunaweza kusema tu zaidi succinctly kwamba ni θ ya kitu fulani. 822 00:49:50,640 --> 00:49:52,760 Hivyo kama unaweza kuona kwamba kuja mahali popote, kwamba ni nini maana ya kwamba tu. 823 00:49:52,760 --> 00:49:57,580 >> Kama kitu ni theta ya n ², ni wote O kubwa (n ²) na Ω (n ²). 824 00:49:57,580 --> 00:49:59,790 Hivyo kesi bora na hali mbaya, haina kufanya tofauti, 825 00:49:59,790 --> 00:50:04,400 algorithm ni kwenda kufanya kitu kimoja kila wakati. 826 00:50:04,400 --> 00:50:06,610 Hivyo hii ni nini pseudocode kwa aina uteuzi inaweza kuangalia kama. 827 00:50:06,610 --> 00:50:10,630 Sisi ni kimsingi kwenda kusema kuwa nataka iterate juu ya orodha 828 00:50:10,630 --> 00:50:15,180 kutoka kushoto kwenda kulia, na katika kila iteration ya kitanzi, mimi naenda kwa hoja 829 00:50:15,180 --> 00:50:19,780 kipengele cha chini katika sehemu hii Iliyopangwa ya orodha. 830 00:50:19,780 --> 00:50:23,260 Na mara moja mimi hoja kitu pale, mimi kamwe haja ya kuangalia kipengele kwamba tena. 831 00:50:23,260 --> 00:50:28,600 Kwa sababu kwa haraka kama mimi wabadilishane kipengele katika sehemu ya kushoto ya orodha, ni vyema 832 00:50:28,600 --> 00:50:32,600 kwa sababu sisi ni kufanya kila kitu katika wakipanda ili kwa kutumia minimums. 833 00:50:32,600 --> 00:50:38,740 Hivyo tulisema, sawa, sisi ni katika nafasi ya i, na sisi haja ya kuangalia yote ya mambo ya 834 00:50:38,740 --> 00:50:42,260 na haki ya i ili kupata kiwango cha chini. 835 00:50:42,260 --> 00:50:46,150 Hivyo kwamba maana tunataka kuangalia kutoka i + 1 hadi mwisho wa orodha. 836 00:50:46,150 --> 00:50:51,610 Na sasa, kama kipengele kwamba sasa tuko kuangalia ni chini ya kiwango cha chini yetu hadi sasa, 837 00:50:51,610 --> 00:50:54,190 ambayo, kumbuka, sisi ni mapya mbali kiwango cha chini tu kuwa 838 00:50:54,190 --> 00:50:57,020 chochote kipengele tuko sasa ni saa; mimi itabidi kudhani kwamba kiwango cha chini. 839 00:50:57,020 --> 00:51:00,270 Kama mimi kupata kipengele kwamba ndogo kuliko kwamba, basi mimi nina kwenda kusema, sawa, 840 00:51:00,270 --> 00:51:02,700 vizuri, nimepata cha chini mpya. 841 00:51:02,700 --> 00:51:06,080 Mimi nina kwenda kukumbuka ambapo kima cha chini kwamba alikuwa. 842 00:51:06,080 --> 00:51:09,560 >> Hivyo sasa, mara moja mimi tumeenda kupitia sehemu kwamba haki zisizochambuliwa, 843 00:51:09,560 --> 00:51:16,690 Naweza kusema mimi nina kwenda wabadilishane kipengele cha chini na kipengele kwamba ni katika nafasi ya i. 844 00:51:16,690 --> 00:51:21,100 Hiyo inaenda kujenga orodha yangu, sehemu yangu sorted ya orodha kutoka kushoto kwenda kulia, 845 00:51:21,100 --> 00:51:25,190 na sisi si milele haja ya kuangalia kipengele tena mara moja ni katika sehemu hiyo. 846 00:51:25,190 --> 00:51:27,930 Mara tumekuwa swapped yake. 847 00:51:27,930 --> 00:51:30,260 Basi hebu kukimbia uteuzi aina katika orodha hii. 848 00:51:30,260 --> 00:51:38,220 kipengele bluu hapa ni kwenda kuwa i, na kipengele nyekundu ni kwenda kuwa kipengele cha chini. 849 00:51:38,220 --> 00:51:41,570 Hivyo i kuanza njia yote katika upande wa kushoto wa orodha, hivyo saa 5. 850 00:51:41,570 --> 00:51:44,610 Sasa tunahitaji kupata chini zisizochambuliwa kipengele. 851 00:51:44,610 --> 00:51:49,480 Hivyo tunasema 0 <5, hivyo ni kiwango cha chini 0 yangu mpya. 852 00:51:49,480 --> 00:51:53,820 >> Lakini siwezi kuacha hapo, kwa sababu hata kama tunaweza kutambua kwamba 0 ni ndogo, 853 00:51:53,820 --> 00:51:59,390 tunahitaji kukimbia kwa njia ya kipengele kila nyingine ya orodha ili kuhakikisha. 854 00:51:59,390 --> 00:52:01,760 Hivyo 1 ni kubwa, 6 ni kubwa, 4 ni kubwa. 855 00:52:01,760 --> 00:52:05,850 Hiyo ina maana kwamba baada ya kuangalia mambo haya yote ya, nimekuwa amedhamiria 0 ni ndogo. 856 00:52:05,850 --> 00:52:09,800 Hivyo nina kwenda wabadilishane 5 na 0. 857 00:52:09,800 --> 00:52:15,480 Mara baada ya mimi wabadilishane kwamba, mimi naenda kupata orodha mpya, na mimi kujua kwamba mimi kamwe haja ya kuangalia kwamba 0 tena 858 00:52:15,480 --> 00:52:19,380 sababu mara nimekuwa swapped ni, nimekuwa sorted yake na sisi ni kosa. 859 00:52:19,380 --> 00:52:22,730 Sasa tu hivyo hutokea kwamba kipengele bluu ni tena 5, 860 00:52:22,730 --> 00:52:26,030 na sisi haja ya kuangalia 1, 6 na 4 kuamua kwamba 1 861 00:52:26,030 --> 00:52:31,520 ni ndogo kuliko kima cha chini ya kipengele, hivyo tutaweza wabadilishane 1 na 5. 862 00:52:31,520 --> 00:52:36,890 Tena, sisi haja ya kuangalia - kulinganisha 5-6 na 4, 863 00:52:36,890 --> 00:52:39,830 na sisi ni kwenda wabadilishane 4 na 5, na hatimaye, kulinganisha 864 00:52:39,830 --> 00:52:45,740 wale namba 2 na kubadilishana nao mpaka sisi kupata orodha yetu Iliyopangwa. 865 00:52:45,740 --> 00:52:49,730 Maswali yoyote juu ya aina uteuzi? 866 00:52:49,730 --> 00:52:56,420 Sawa. Hebu hoja na mada ya mwisho hapa, na kwamba ni recursion. 867 00:52:56,420 --> 00:52:59,810 >> Recursion, kumbuka, ni kweli hii meta kitu ambapo kazi 868 00:52:59,810 --> 00:53:02,740 kurudia wito yenyewe. 869 00:53:02,740 --> 00:53:05,620 Hivyo katika baadhi ya uhakika, wakati fuction yetu ni kurudia wito yenyewe, 870 00:53:05,620 --> 00:53:10,100 kuna haja ya kuwa baadhi uhakika ambayo sisi kuacha wito wenyewe. 871 00:53:10,100 --> 00:53:13,670 Kwa sababu kama hatuwezi kufanya hivyo, basi tuko tu kwenda kuendelea kufanya hivyo milele, 872 00:53:13,670 --> 00:53:16,660 na mpango wetu ni tu si kwenda kusitisha. 873 00:53:16,660 --> 00:53:19,200 Sisi kuita hali hii kesi ya msingi. 874 00:53:19,200 --> 00:53:22,570 Na kesi ya msingi anasema, badala ya kuita kazi tena, 875 00:53:22,570 --> 00:53:25,330 Mimi tu kwenda na kurudi baadhi ya thamani. 876 00:53:25,330 --> 00:53:28,080 Hivyo mara tumekuwa akarudi thamani, tumekuwa kusimamishwa wito wenyewe, 877 00:53:28,080 --> 00:53:32,550 na wengine wa wito tumekuwa alifanya hivyo mbali unaweza pia kurudi. 878 00:53:32,550 --> 00:53:36,050 kinyume ya kesi ya msingi ni kesi ya kujirudia. 879 00:53:36,050 --> 00:53:39,050 Na hii ni wakati tunataka kufanya mwingine wito kwa kazi ambayo sisi ni sasa in 880 00:53:39,050 --> 00:53:44,690 Na sisi pengine, ingawa si mara zote, wanataka kutumia hoja mbalimbali. 881 00:53:44,690 --> 00:53:48,940 >> Hivyo kama sisi kuwa na kazi kuitwa f, na f tu kuitwa kuchukua 1 hoja, 882 00:53:48,940 --> 00:53:52,010 na sisi tu kuweka wito f (1), f (1), f (1), na ni haki hivyo hutokea kwamba 883 00:53:52,010 --> 00:53:56,510 hoja 1 unaingia kesi ya kujirudia, bado tuko kamwe kwenda kuacha. 884 00:53:56,510 --> 00:54:01,620 Hata kama tuna kesi ya msingi, tunahitaji kuhakikisha kuwa hatimaye tunakwenda hit kwamba kesi ya msingi. 885 00:54:01,620 --> 00:54:04,250 Sisi si tu kuendelea kukaa katika kesi hii ya kujirudia. 886 00:54:04,250 --> 00:54:09,870 Kwa ujumla, wakati sisi wenyewe piga, sisi ni pengine anaenda kuwa na hoja tofauti kila wakati. 887 00:54:09,870 --> 00:54:12,700 Hapa ni kweli rahisi kazi ya kujirudia. 888 00:54:12,700 --> 00:54:15,090 Hivyo hii itakuwa compute factorial wa idadi. 889 00:54:15,090 --> 00:54:17,790 Hadi juu hapa tuna msingi wetu kesi. 890 00:54:17,790 --> 00:54:22,330 Katika kesi hiyo n ≤ 1, sisi siyo kwenda kuwaita factorial tena. 891 00:54:22,330 --> 00:54:26,490 Sisi ni kwenda kuacha; tuko tu kwenda na kurudi baadhi ya thamani. 892 00:54:26,490 --> 00:54:30,170 Kama hii si kweli, basi tunakwenda hit kesi yetu ya kujirudia. 893 00:54:30,170 --> 00:54:33,550 Ona hapa kwamba sisi siyo tu wito factorial (n), kwa sababu kwamba bila kuwa na manufaa sana. 894 00:54:33,550 --> 00:54:36,810 Sisi ni kwenda kuwaita factorial ya kitu kingine. 895 00:54:36,810 --> 00:54:40,850 >> Na hivyo unaweza kuona, hatimaye kama sisi kupita kitu factorial (5) au, 896 00:54:40,850 --> 00:54:45,900 sisi ni kwenda kuwaita factorial (4) na kadhalika, na hatimaye tunakwenda hit hii kesi ya msingi. 897 00:54:45,900 --> 00:54:51,730 Hivyo hii inaonekana nzuri. Hebu kuona nini kinatokea wakati sisi kwa kweli kukimbia hii. 898 00:54:51,730 --> 00:54:57,840 Hii ni stack, na hebu kusema kwamba kuu ni kwenda kuwaita kazi hii kwa hoja (4). 899 00:54:57,840 --> 00:55:02,200 Hivyo mara factorial anaona na = 4, factorial nitakuita yenyewe. 900 00:55:02,200 --> 00:55:05,010 Sasa, ghafla, tuna factorial (3). 901 00:55:05,010 --> 00:55:10,780 Hivyo kazi hizi ni kwenda kuendelea kukua mpaka hatimaye sisi hit msingi wetu kesi. 902 00:55:10,780 --> 00:55:17,830 Katika hatua hii, thamani ya kurudi kwa hii ni kurudi (NX thamani ya kurudi kwa hii), 903 00:55:17,830 --> 00:55:21,290 thamani ya kurudi kwa hii ni NX thamani ya kurudi kwa hii. 904 00:55:21,290 --> 00:55:23,290 Hatimaye tunahitaji hit baadhi idadi. 905 00:55:23,290 --> 00:55:26,560 Saa ya juu hapa, tunasema kurudi 1. 906 00:55:26,560 --> 00:55:30,650 Hiyo ina maana kwamba mara sisi kurudi kwamba idadi, tunaweza pop hii mbali stack. 907 00:55:30,650 --> 00:55:36,570 Hivyo hii factorial (1) ni kosa. 908 00:55:36,570 --> 00:55:41,190 Wakati 1 anarudi, hii factorial (1) anarudi, hii kurudi 1. 909 00:55:41,190 --> 00:55:46,910 thamani ya kurudi kwa hii, kumbuka, alikuwa NX thamani ya kurudi kwa hii. 910 00:55:46,910 --> 00:55:50,720 Hivyo ghafla, guy hii anajua kwamba mimi nataka kurudi 2. 911 00:55:50,720 --> 00:55:55,910 >> Hivyo kumbuka, kurudi thamani ya hii ni NX thamani kurudi hapa. 912 00:55:55,910 --> 00:56:01,160 Hivyo sasa tunaweza kusema 3 x 2, na hatimaye, hapa tunaweza kusema 913 00:56:01,160 --> 00:56:04,010 hii ni kwenda tu kuwa 4 x 3 x 2. 914 00:56:04,010 --> 00:56:09,570 Na mara moja anarudi hii, sisi kupata chini ya ndani ya moja ya integer kuu. 915 00:56:09,570 --> 00:56:15,460 Maswali yoyote juu ya recursion? 916 00:56:15,460 --> 00:56:17,090 Wote haki. Hivyo kuna muda zaidi kwa maswali mwishoni, 917 00:56:17,090 --> 00:56:23,360 lakini sasa Joseph itafikia mada iliyobaki. 918 00:56:23,360 --> 00:56:25,590 >> [Joseph Ong] wote wa kulia. Hivyo sasa kwamba tumekuwa aliyesema kuhusu recursions, 919 00:56:25,590 --> 00:56:27,840 hebu majadiliano kidogo kuhusu nini kuchanganya aina ni. 920 00:56:27,840 --> 00:56:31,740 Changanya aina kimsingi ni njia nyingine ya kuchagua orodha ya namba. 921 00:56:31,740 --> 00:56:36,430 Na jinsi kazi ni pamoja na aina kuunganisha una orodha, na nini cha kufanya ni 922 00:56:36,430 --> 00:56:39,120 sisi kusema, hebu kupasuliwa hii katika halves 2. 923 00:56:39,120 --> 00:56:42,750 Tutaweza kwanza kukimbia kuchanganya aina tena juu ya nusu ya kushoto, 924 00:56:42,750 --> 00:56:45,040 kisha tutaweza kukimbia kuunganisha aina ya nusu haki, 925 00:56:45,040 --> 00:56:50,240 na kwamba inatupa sasa halves 2 kwamba wanatenganishwa, na sasa tunakwenda kuchanganya halves wale pamoja. 926 00:56:50,240 --> 00:56:55,010 Ni ngumu kidogo kuona bila mfano, hivyo tutaweza kwenda kupitia hisia na kuona nini kinatokea. 927 00:56:55,010 --> 00:56:59,590 Hivyo kuanza na orodha hii, sisi kupasuliwa ndani halves 2. 928 00:56:59,590 --> 00:57:02,300 Sisi kuendesha kuunganisha aina ya nusu ya kushoto ya kwanza. 929 00:57:02,300 --> 00:57:06,660 Basi hiyo ni nusu ya kushoto, na sasa sisi kukimbia nao kwa njia ya orodha hii tena 930 00:57:06,660 --> 00:57:09,800 ambayo anapata kupita katika aina kuunganisha, na kisha sisi kuangalia, tena, 931 00:57:09,800 --> 00:57:13,270 katika upande wa kushoto wa orodha hii na sisi kukimbia kuchanganya aina juu yake. 932 00:57:13,270 --> 00:57:15,880 Sasa, sisi kupata chini ya orodha ya namba 2, 933 00:57:15,880 --> 00:57:19,010 na sasa nusu kushoto ni 1 tu kipengele muda mrefu, na hatuwezi 934 00:57:19,010 --> 00:57:23,380 kupasuliwa orodha hiyo ni 1 tu ya kipengele ndani ya nusu, hivyo sisi tu kusema, mara tuna 50, 935 00:57:23,380 --> 00:57:26,400 ambayo ni 1 tu kipengele, ni tayari Iliyopangwa. 936 00:57:26,400 --> 00:57:29,860 >> Mara sisi ni kosa na kwamba, tunaweza kuona kwamba tunaweza 937 00:57:29,860 --> 00:57:32,230 kuhamia kwenye nusu wa kulia wa orodha hii, 938 00:57:32,230 --> 00:57:36,480 na 3 pia Iliyopangwa, na hivyo kwa sasa kwamba halves wote wa orodha hii ni sorted 939 00:57:36,480 --> 00:57:39,080 tunaweza kujiunga namba hizi nyuma pamoja. 940 00:57:39,080 --> 00:57:45,320 Hivyo sisi kuangalia 50 na 3, 3 ni ndogo kuliko 50, hivyo huenda katika kwanza na kisha huja in 50 941 00:57:45,320 --> 00:57:49,340 Sasa, kwamba ni kosa; sisi kurudi nyuma hadi kuwa orodha na aina ni haki nusu. 942 00:57:49,340 --> 00:57:52,440 42 ni ya mwenyewe idadi, hivyo ni tayari Iliyopangwa. 943 00:57:52,440 --> 00:57:57,850 Hivyo sasa sisi kulinganisha haya 2 na 3 ni ndogo kuliko 42, hivyo kwamba anapata kuweka kwanza, 944 00:57:57,850 --> 00:58:02,340 sasa 42 anapata kuweka katika, na 50 anapata kuweka in 945 00:58:02,340 --> 00:58:07,220 Sasa, kwamba ni vyema, sisi kwenda njia yote nyuma juu, 1337 na 15. 946 00:58:07,220 --> 00:58:14,560 Naam, sisi sasa kuangalia nusu ya kushoto ya orodha hii; 1337 ni kwa yenyewe hivyo ni sorted na sawa na 15. 947 00:58:14,560 --> 00:58:19,020 Hivyo sasa sisi kuchanganya namba hizi 2 kutatua kwamba orodha ya awali, 15 <1337, 948 00:58:19,020 --> 00:58:23,060 hivyo huenda katika kwanza, kisha huenda in 1337 949 00:58:23,060 --> 00:58:26,640 Na sasa sisi sorted halves wote wa orodha ya awali ya juu juu. 950 00:58:26,640 --> 00:58:30,440 Na wote sisi kufanya ni kuchanganya haya. 951 00:58:30,440 --> 00:58:36,890 Sisi kuangalia idadi ya kwanza 2 ya orodha hii, 3 <15, hivyo huenda katika safu ya aina ya kwanza. 952 00:58:36,890 --> 00:58:44,460 15 <42, hivyo huenda in Sasa, 42 <1337, kwamba huenda in 953 00:58:44,460 --> 00:58:51,010 50 <1337, hivyo huenda in Na taarifa kwamba sisi tu alichukua namba 2 mbali ya orodha hii. 954 00:58:51,010 --> 00:58:53,640 Hivyo sisi siyo tu alternating kati ya orodha 2. 955 00:58:53,640 --> 00:58:56,050 Sisi ni kuangalia tu mwanzo, na sisi ni kuchukua kipengele 956 00:58:56,050 --> 00:59:00,270 hiyo ni ndogo na kisha kuweka katika safu yetu. 957 00:59:00,270 --> 00:59:04,080 Sasa tumekuwa ilijiunga halves wote na sisi ni kosa. 958 00:59:04,080 --> 00:59:07,780 >> Maswali yoyote kuhusu kuchanganya aina? Ndiyo? 959 00:59:07,780 --> 00:59:14,190 [Mwanafunzi] Kama ni kugawanyika katika makundi mbalimbali, kwa nini sio wao tu umegawanyika mara moja 960 00:59:14,190 --> 00:59:19,970 na una 3 na 2 katika kundi? [Mapumziko ya unintelligible swali] 961 00:59:19,970 --> 00:59:24,940 Sababu - hivyo swali ni, kwa nini hawawezi sisi tu kuunganisha yao katika hatua ya kwanza baada ya sisi kuwa nao? 962 00:59:24,940 --> 00:59:29,530 sababu tunaweza kufanya hivyo, kuanza saa vipengele kushoto-wengi wa pande zote mbili, 963 00:59:29,530 --> 00:59:33,040 na kisha kuchukua moja ndogo na kuiweka katika, ni kwamba sisi kujua kwamba hawa 964 00:59:33,040 --> 00:59:35,290 orodha ya mtu binafsi ni katika amri Iliyopangwa. 965 00:59:35,290 --> 00:59:37,290 Basi, ikiwa mimi nina kuangalia vipengele kushoto-wengi wa halves wote, 966 00:59:37,290 --> 00:59:40,490 Mimi najua kuwa wao ni kwenda kuwa mambo madogo ya orodha ya wagombea hao. 967 00:59:40,490 --> 00:59:43,930 Hivyo siwezi kuziweka katika maeneo madogo ya kipengele cha orodha hii kubwa. 968 00:59:43,930 --> 00:59:47,810 Kwa upande mwingine, kama mimi kuangalia orodha wale 2 katika ngazi ya pili zaidi ya hapo, 969 00:59:47,810 --> 00:59:51,640 50, 3, 42 1337, na 15, wale si Iliyopangwa. 970 00:59:51,640 --> 00:59:55,770 Hivyo kama mimi kuangalia 50 na 1337, Mimi naenda kuweka 50 katika orodha yangu ya kwanza. 971 00:59:55,770 --> 01:00:00,130 Lakini hiyo si kweli mantiki, kwa sababu ni kipengele 3 ndogo nje ya wale wote. 972 01:00:00,130 --> 01:00:04,390 Hivyo sababu moja tu tunaweza kufanya hatua hii ni kwa sababu ya kuchanganya orodha yetu ni tayari Iliyopangwa. 973 01:00:04,390 --> 01:00:07,010 Ambayo ni kwa nini sisi kupata chini njia yote hadi chini 974 01:00:07,010 --> 01:00:09,800 kwa sababu wakati tuna tu namba moja, unajua kwamba namba moja 975 01:00:09,800 --> 01:00:14,120 katika yenyewe ni tayari orodha Iliyopangwa. 976 01:00:14,120 --> 01:00:19,360 >> Maswali yoyote? Hakuna? 977 01:00:19,360 --> 01:00:24,260 Ugumu? Naam, unaweza kuona kwamba katika kila hatua kuna mwisho idadi, 978 01:00:24,260 --> 01:00:27,590 na tunaweza kugawanya katika orodha nusu logi n nyakati, 979 01:00:27,590 --> 01:00:31,700 ambayo ni ambapo sisi kupata hii n x logi n utata. 980 01:00:31,700 --> 01:00:34,940 Na utaona kesi bora kwa ajili ya aina kuunganisha ni n logi n, na ni haki hivyo hutokea 981 01:00:34,940 --> 01:00:39,340 kwamba hali mbaya, au Ω zaidi ya hapo, ni pia n logi n. 982 01:00:39,340 --> 01:00:42,480 Kitu kukumbuka. 983 01:00:42,480 --> 01:00:45,750 Kusonga, hebu kwenda kwenye faili baadhi super msingi I / O. 984 01:00:45,750 --> 01:00:48,830 Kama inaonekana katika kinyang'anyiro, utasikia taarifa tulikuwa na aina fulani ya mfumo wa 985 01:00:48,830 --> 01:00:51,270 ambapo unaweza kuandika kwenye faili logi kama kusoma kwa njia ya kificho. 986 01:00:51,270 --> 01:00:53,730 Hebu angalia jinsi wewe anaweza kufanya hivyo. 987 01:00:53,730 --> 01:00:57,450 Naam, tuna fprintf, ambayo unaweza kufikiria kama tu printf, 988 01:00:57,450 --> 01:01:01,720 lakini tu uchapishaji na faili badala yake, na hivyo f mwanzoni. 989 01:01:01,720 --> 01:01:07,570 Hii aina ya code hapa juu, kile yake ni, kama unaweza kuwa na kuonekana katika kinyang'anyiro, 990 01:01:07,570 --> 01:01:12,310 unaendelea kwa njia ya uchapishaji yako 2-dimensional safu nje mstari na mstari ni namba ni. 991 01:01:12,310 --> 01:01:17,850 Katika kesi hiyo, printf Prints nje terminal yako au kile tunachoita pato kiwango ya sehemu. 992 01:01:17,850 --> 01:01:22,170 >> Na sasa, katika kesi hii, wote sisi kufanya ni kuchukua nafasi printf na fprintf, 993 01:01:22,170 --> 01:01:26,770 kuwaambia ni nini faili unataka magazeti kwa, na katika kesi hii ni tu Prints hivyo nje faili kwamba 994 01:01:26,770 --> 01:01:32,230 badala ya kuchapa hivyo nje terminal yako. 995 01:01:32,230 --> 01:01:36,500 Naam, basi, kwamba begs swali: wapi sisi kupata aina hii ya faili kutoka, sawa? 996 01:01:36,500 --> 01:01:39,840 Sisi kupita kuingia kwenye hii fuction fprintf lakini sisi hakuwa na wazo ilikotoka. 997 01:01:39,840 --> 01:01:43,980 Naam, mapema katika kanuni, kile tulikuwa ilikuwa hii chunk ya maadili ya zaidi ya hapa, 998 01:01:43,980 --> 01:01:48,340 ambayo kimsingi anasema kuwa wazi faili wito log.txt. 999 01:01:48,340 --> 01:01:53,220 Tunachofanya baada ya kuwa ni sisi kuwa na kuhakikisha kwamba faili ni kweli kufunguliwa kwa mafanikio. 1000 01:01:53,220 --> 01:01:57,070 Hivyo wanaweza kushindwa kwa sababu mbalimbali; huna nafasi ya kutosha kwenye kompyuta yako, kwa mfano. 1001 01:01:57,070 --> 01:01:59,790 Hivyo ni muhimu daima kabla ya kufanya shughuli yoyote na faili 1002 01:01:59,790 --> 01:02:03,300 kwamba sisi kuangalia kama faili kwamba kikafunguliwa mafanikio. 1003 01:02:03,300 --> 01:02:09,330 Hivyo kile kwamba, hiyo ni hoja fopen, vizuri, tunaweza kufungua faili kwa njia nyingi. 1004 01:02:09,330 --> 01:02:13,510 Nini tunaweza kufanya ni, tunaweza kupita w, ambayo ina maana override faili kama exits tayari, 1005 01:02:13,510 --> 01:02:18,070 Tunaweza kupita a, ambayo wao append hadi mwisho wa faili kuu badala ya hayo, 1006 01:02:18,070 --> 01:02:22,730 au tunaweza kutaja r, ambayo ina maana, hebu kufungua faili kama kusoma tu. 1007 01:02:22,730 --> 01:02:24,890 Hivyo kama mpango inajaribu kufanya mabadiliko yoyote ya faili, 1008 01:02:24,890 --> 01:02:30,140 yell kwao na si lazima wao kufanya hivyo. 1009 01:02:30,140 --> 01:02:33,320 Hatimaye, mara sisi ni kosa na faili, kufanyika kufanya shughuli juu yake, 1010 01:02:33,320 --> 01:02:35,860 tunahitaji kuhakikisha sisi karibu faili. 1011 01:02:35,860 --> 01:02:38,830 Na hivyo, mwisho wa programu yako, wewe ni kwenda kupita yao tena 1012 01:02:38,830 --> 01:02:42,120 faili hili kwamba kufunguliwa, na tu kulifunga. 1013 01:02:42,120 --> 01:02:44,650 Hivyo hii ni kitu muhimu kwamba una hakikisha kufanya. 1014 01:02:44,650 --> 01:02:47,180 Hivyo kumbuka unaweza kufungua faili, basi unaweza kuandika kwenye faili, 1015 01:02:47,180 --> 01:02:51,270 kufanya shughuli katika faili, lakini basi una kuifunga faili mwishoni. 1016 01:02:51,270 --> 01:02:53,270 >> Maswali yoyote juu ya faili msingi I / O? Ndiyo? 1017 01:02:53,270 --> 01:02:58,050 [Mwanafunzi swali, unintelligible] 1018 01:02:58,050 --> 01:03:02,480 Haki hapa. Swali ni, ambapo haina faili hii log.txt itaonekana? 1019 01:03:02,480 --> 01:03:07,890 Naam, kama wewe tu kuwapa log.txt, ni inajenga katika saraka ya sawa kama kutekelezwa. 1020 01:03:07,890 --> 01:03:10,500 Hivyo kama you're - >> [Mwanafunzi swali, unintelligible] 1021 01:03:10,500 --> 01:03:18,830 Ndiyo. Katika folder sawa, au katika saraka ya sawa, kama wewe simu yake. 1022 01:03:18,830 --> 01:03:21,400 Sasa kumbukumbu, stack, na chungu. 1023 01:03:21,400 --> 01:03:23,400 Hivyo jinsi ni kumbukumbu zilizowekwa katika kompyuta? 1024 01:03:23,400 --> 01:03:26,270 Naam, unaweza kufikiria kama aina ya kumbukumbu hii block hapa. 1025 01:03:26,270 --> 01:03:30,260 Na katika kumbukumbu tuna nini wito lundo kukwama juu huko, na stack kwamba chini huko. 1026 01:03:30,260 --> 01:03:34,480 Na lundo hukua kushuka na stack kukua zaidi. 1027 01:03:34,480 --> 01:03:38,620 Hivyo kama Tommy zilizotajwa - oh, vizuri, na tuna hizi nyingine segment 4 ambayo mimi itabidi kupata katika pili - 1028 01:03:38,620 --> 01:03:42,890 Kama Tommy alisema mapema, unajua jinsi utendaji wake wanajiita na itana? 1029 01:03:42,890 --> 01:03:44,930 Wao kujenga aina hii ya sura ya stack. 1030 01:03:44,930 --> 01:03:47,360 Naam, kama kuu wito foo, foo anapata kuweka kwenye stack. 1031 01:03:47,360 --> 01:03:52,430 Foo wito bar, bar kupata uliowekwa juu stack, na kwamba anapata kuweka kwenye stack baada. 1032 01:03:52,430 --> 01:03:57,040 Na kama wao kurudi, kila mmoja kupata kuchukuliwa mbali stack. 1033 01:03:57,040 --> 01:04:00,140 Nini kila moja ya maeneo haya na kumbukumbu kushikilia? 1034 01:04:00,140 --> 01:04:03,110 Naam, juu, ambayo ni sehemu ya maandishi, ina programu yenyewe. 1035 01:04:03,110 --> 01:04:06,390 Hivyo code mashine, kwamba ni huko, mara moja wewe kukusanya programu yako. 1036 01:04:06,390 --> 01:04:08,520 Next, yoyote initialized vigezo kimataifa. 1037 01:04:08,520 --> 01:04:12,660 >> Hivyo kuwa na vigezo kimataifa katika mpango wako, na wewe kusema kama, 5 =, 1038 01:04:12,660 --> 01:04:15,260 kwamba anapata kuweka katika sehemu hiyo, na kulia chini ya kwamba, 1039 01:04:15,260 --> 01:04:18,990 una uninitialized data kimataifa, ambayo ni haki int, 1040 01:04:18,990 --> 01:04:20,990 lakini huna kusema ni sawa na kitu chochote. 1041 01:04:20,990 --> 01:04:23,870 Kutambua haya ni ya kimataifa vigezo, hivyo ni nje ya kuu. 1042 01:04:23,870 --> 01:04:28,560 Hivyo hii ina maana ya vigezo yoyote ya kimataifa ambayo ni alitangaza lakini si initialized. 1043 01:04:28,560 --> 01:04:32,310 Basi nini katika chungu? Kumbukumbu zilizotengwa kwa kutumia malloc, ambayo tutaweza kupata katika kidogo. 1044 01:04:32,310 --> 01:04:35,990 Na hatimaye, kwa stack una vigezo yoyote mitaa 1045 01:04:35,990 --> 01:04:39,950 na yoyote kazi unaweza kuwaita yoyote ya vigezo yao. 1046 01:04:39,950 --> 01:04:43,720 Jambo la mwisho, wewe si kweli kuwa kujua vigezo mazingira kufanya, 1047 01:04:43,720 --> 01:04:46,700 lakini wakati wewe kuendesha programu, kuna kitu haihusiani, kama 1048 01:04:46,700 --> 01:04:49,550 hii ni username ya mtu ambaye alikimbia mpango. 1049 01:04:49,550 --> 01:04:51,550 Na kwamba ni kwenda kuwa aina ya chini. 1050 01:04:51,550 --> 01:04:54,540 Katika suala la anwani kumbukumbu, ambayo ni hexadesimoli maadili, 1051 01:04:54,540 --> 01:04:58,170 maadili katika kuanza juu saa 0, na wao kwenda njia yote chini kwa chini. 1052 01:04:58,170 --> 01:05:00,440 Katika kesi hii, kama wewe ni juu ya mfumo wa 32-bit, 1053 01:05:00,440 --> 01:05:05,390 anuani hapo chini ni kwenda kuwa 0x, ikifuatiwa na af, kwa sababu hiyo 32 bits, 1054 01:05:05,390 --> 01:05:10,890 ambayo ni 8 ka, na katika kesi hii 8 ka sambamba na tarakimu hexadesimoli 8. 1055 01:05:10,890 --> 01:05:20,110 Hivyo hapa chini wewe utaenda kuwa, kama, 0xffffff, na huko utaenda kuwa na 0. 1056 01:05:20,110 --> 01:05:23,660 Hivyo kile ni kuyatumia? Baadhi ya unaweza kuwa kufunikwa hii katika kifungu kabla. 1057 01:05:23,660 --> 01:05:26,660 lakini hatukuwa kwenda juu yake katika hotuba, hivyo pointer ni aina tu data 1058 01:05:26,660 --> 01:05:34,030 ambayo maduka, badala ya aina fulani ya thamani kama 50, ni maduka ya anuani ya baadhi ya maeneo katika kumbukumbu. 1059 01:05:34,030 --> 01:05:36,020 Kama kumbukumbu kwamba [unintelligible]. 1060 01:05:36,020 --> 01:05:41,120 Hivyo katika kesi hii, kile sisi ni, tuna pointer integer au * int, 1061 01:05:41,120 --> 01:05:46,210 na ina anwani hii hexadesimoli ya 0xDEADBEEF. 1062 01:05:46,210 --> 01:05:50,880 >> Hivyo kile sisi ni, sasa, pointi pointer hii katika baadhi ya maeneo katika kumbukumbu, 1063 01:05:50,880 --> 01:05:56,020 na kwamba tu, thamani 50 ni katika eneo hili kumbukumbu. 1064 01:05:56,020 --> 01:06:01,810 Juu ya mifumo ya baadhi ya 32-bit, juu ya mifumo yote ya 32-bit, kuyatumia kuchukua bits 32 au ka 4. 1065 01:06:01,810 --> 01:06:06,020 Lakini, kwa mfano, juu ya mfumo wa 64-bit, kuyatumia ni 64 bits. 1066 01:06:06,020 --> 01:06:08,040 Basi hiyo ni kitu utasikia wanataka kukumbuka. 1067 01:06:08,040 --> 01:06:12,310 Kadhalika mfumo mwisho-bit, pointer ni mwisho bits mrefu. 1068 01:06:12,310 --> 01:06:17,320 Kuyatumia ni aina ya vigumu Digest bila mambo ya ziada, 1069 01:06:17,320 --> 01:06:20,300 hivyo hebu kupitia mfano wa mgao wa nguvu kumbukumbu. 1070 01:06:20,300 --> 01:06:25,130 Nini nguvu kumbukumbu mgao gani kwa ajili yenu, au kile tunachoita malloc, 1071 01:06:25,130 --> 01:06:29,280 inakuwezesha kutenga baadhi ya aina ya data nje ya kuweka. 1072 01:06:29,280 --> 01:06:31,830 Hivyo data hii ni aina ya kudumu zaidi kwa muda wa mpango. 1073 01:06:31,830 --> 01:06:36,430 Kwa sababu kama wewe kujua, kama wewe kutangaza x ndani ya kazi, na anarudi kwamba kazi, 1074 01:06:36,430 --> 01:06:40,910 hakuna tena wa upatikanaji wa takwimu kwamba alikuwa kuhifadhiwa katika x. 1075 01:06:40,910 --> 01:06:44,420 Nini kuyatumia hebu kufanya ni wao hebu kuhifadhi kumbukumbu maadili au kuhifadhi 1076 01:06:44,420 --> 01:06:46,840 katika sehemu mbalimbali za kumbukumbu, yaani lundo. 1077 01:06:46,840 --> 01:06:49,340 Sasa mara sisi kurudi nje ya kazi, muda mrefu kama tuna pointer 1078 01:06:49,340 --> 01:06:54,960 kwa kuwa mahali katika kumbukumbu, kisha nini tunaweza kufanya ni tunaweza tu kuangalia maadili huko. 1079 01:06:54,960 --> 01:06:58,020 Hebu tuangalie mfano: Hii ni kumbukumbu zetu layout tena. 1080 01:06:58,020 --> 01:07:00,050 Na tuna kazi hii, kuu. 1081 01:07:00,050 --> 01:07:06,870 Kile yake ni - sawa, hivyo ni rahisi, haki -? Int x = 5, kwamba tu kutofautiana juu ya stack katika kuu. 1082 01:07:06,870 --> 01:07:12,450 >> Kwa upande mwingine, sasa sisi kutangaza pointer ambayo inatoa wito giveMeThreeInts kazi. 1083 01:07:12,450 --> 01:07:16,800 Na hivyo sasa sisi kwenda katika kazi hii na sisi kujenga mpya stack frame kwa ajili yake. 1084 01:07:16,800 --> 01:07:20,440 Hata hivyo, katika sura hii stack, sisi kutangaza int * temp, 1085 01:07:20,440 --> 01:07:23,210 ambayo katika mallocs 3 integers kwa ajili yetu. 1086 01:07:23,210 --> 01:07:25,880 Hivyo ukubwa wa int atatupa ngapi ka int hii ni, 1087 01:07:25,880 --> 01:07:29,620 na malloc inatupa kwamba wengi bytes ya nafasi katika lundo. 1088 01:07:29,620 --> 01:07:32,890 Hivyo katika kesi hii, tuna umba nafasi ya kutosha kwa ajili ya integers 3, 1089 01:07:32,890 --> 01:07:36,830 na lundo ni njia ya juu huko, ambayo ni kwa nini nimekuwa inayotolewa ni ya juu juu. 1090 01:07:36,830 --> 01:07:42,900 Mara sisi ni kosa, sisi kurudi hapa juu, una haja tu 3 ints wakarudi, 1091 01:07:42,900 --> 01:07:47,000 na kuirudisha anuani, katika kesi hii juu ambapo kumbukumbu kwamba ni. 1092 01:07:47,000 --> 01:07:51,250 Na sisi kuweka pointer = kubadili, na hadi pale tuna mwingine tu pointer. 1093 01:07:51,250 --> 01:07:54,550 Lakini nini kwamba anarudi kazi ni sifa hapa na kutoweka. 1094 01:07:54,550 --> 01:07:59,250 Hivyo temp kutoweka, lakini sisi bado kudumisha anuani ya ambapo 1095 01:07:59,250 --> 01:08:01,850 wale integers 3 ni ndani ya mains. 1096 01:08:01,850 --> 01:08:06,180 Hivyo katika kuweka hii, kuyatumia ni scoped ndani ya nchi kwa sura sifa, 1097 01:08:06,180 --> 01:08:09,860 lakini kumbukumbu ambayo wao ni katika rejea lundo. 1098 01:08:09,860 --> 01:08:12,190 >> Je, hiyo mantiki? 1099 01:08:12,190 --> 01:08:14,960 [Mwanafunzi] Unaweza kurudia kwamba? >> [Joseph] Ndiyo. 1100 01:08:14,960 --> 01:08:20,270 Hivyo kama mimi kurejea tu kidogo, unaweza kuona kwamba temp zilizotengwa 1101 01:08:20,270 --> 01:08:23,500 baadhi ya kumbukumbu juu ya kujikusanyia huko. 1102 01:08:23,500 --> 01:08:28,680 Hivyo wakati kazi hii, giveMeThreeInts anarudi, hii stack hapa ni kwenda na kutoweka. 1103 01:08:28,680 --> 01:08:35,819 Na kwa hayo yoyote ya vigezo, katika kesi hii, hii pointer zilizotengwa katika sura sifa. 1104 01:08:35,819 --> 01:08:39,649 Hiyo ni kwenda kutoweka, lakini tangu tukirudi temp 1105 01:08:39,649 --> 01:08:46,330 na sisi kuweka pointer = temp, pointer sasa ni yatakuelekeza kumbukumbu hiyo ya mahali kama temp ilikuwa. 1106 01:08:46,330 --> 01:08:50,370 Hivyo sasa, hata kama sisi kupoteza temp, kwamba pointer mitaa, 1107 01:08:50,370 --> 01:08:59,109 sisi bado kurejesha anuani ya kumbukumbu ya nini ilikuwa akizungumzia ndani ya pointer kwamba kutofautiana. 1108 01:08:59,109 --> 01:09:03,740 Maswali? Hiyo inaweza kuwa aina ya mada utata kama wewe hawajaenda juu yake katika sehemu. 1109 01:09:03,740 --> 01:09:09,240 Tunaweza, TF yako dhahiri kwenda juu yake na bila shaka tunaweza kujibu maswali 1110 01:09:09,240 --> 01:09:11,500 mwishoni mwa kikao mapitio kwa hili. 1111 01:09:11,500 --> 01:09:14,220 Lakini hii ni aina ya mada ngumu, na mimi kuwa na mifano zaidi kwamba ni kwenda show up 1112 01:09:14,220 --> 01:09:18,790 kwamba itasaidia kufafanua kile kuyatumia kwa kweli ni. 1113 01:09:18,790 --> 01:09:22,500 >> Katika kesi hiyo, kuyatumia ni sawa na arrays, 1114 01:09:22,500 --> 01:09:25,229 hivyo naweza tu kutumia hii pointer kama kitu kimoja kama safu int. 1115 01:09:25,229 --> 01:09:29,840 Hivyo nina Indexing katika 0, na kubadilisha integer kwanza kwa 1, 1116 01:09:29,840 --> 01:09:39,689 kubadilisha integer pili 2, na 3 kwa 3 integer. 1117 01:09:39,689 --> 01:09:44,210 Hivyo zaidi juu ya kuyatumia. Naam, wanakumbuka Binky. 1118 01:09:44,210 --> 01:09:48,319 Katika kesi hii tumekuwa zilizotengwa pointer, au sisi alitangaza pointer, 1119 01:09:48,319 --> 01:09:52,760 lakini awali, wakati mimi tu alitangaza pointer, siyo akizungumzia popote katika kumbukumbu. 1120 01:09:52,760 --> 01:09:54,930 Ni tu takataka maadili ndani yake. 1121 01:09:54,930 --> 01:09:56,470 Kwa hiyo mimi sina wazo ambapo pointer hii ni akizungumzia. 1122 01:09:56,470 --> 01:10:01,630 Ina anuani ambayo ni haki ya kujazwa 0 na 1 ya awali ambapo ilikuwa alitangaza. 1123 01:10:01,630 --> 01:10:04,810 Mimi siwezi kufanya kitu kwa hii mpaka mimi wito malloc juu yake 1124 01:10:04,810 --> 01:10:08,390 na kisha mimi inanipa nafasi kidogo juu ya lundo ambapo naweza kuweka maadili ndani. 1125 01:10:08,390 --> 01:10:11,980 Kisha tena, sijui nini ndani ya kumbukumbu hii. 1126 01:10:11,980 --> 01:10:16,780 Hivyo kitu ya kwanza mimi kufanya ni kuangalia kama mfumo alikuwa kumbukumbu ya kutosha 1127 01:10:16,780 --> 01:10:20,850 kunipa nyuma 1 integer katika nafasi ya kwanza, ambayo ni kwa nini mimi kufanya hili kuangalia. 1128 01:10:20,850 --> 01:10:25,020 Kama pointer ni null, hiyo ina maana kwamba hakuwa na nafasi ya kutosha au baadhi makosa mengine yalitokea, 1129 01:10:25,020 --> 01:10:26,320 hivyo mimi zinapaswa kuachana na nje ya mpango wangu. 1130 01:10:26,320 --> 01:10:29,400  Lakini kama ilivyokuwa kufanikiwa, sasa naweza kutumia kwamba pointer 1131 01:10:29,400 --> 01:10:35,020 na yale ambayo * pointer gani ni kinachofuata ambapo anuani ni 1132 01:10:35,020 --> 01:10:38,480 kwa thamani ambapo ni kwamba, na unaweka ni sawa na 1. 1133 01:10:38,480 --> 01:10:41,850 Hivyo zaidi ya hapa, sisi ni kuangalia kama kumbukumbu kwamba kuwepo. 1134 01:10:41,850 --> 01:10:45,380 >> Mara tu kujua ipo, unaweza kuweka ndani yake 1135 01:10:45,380 --> 01:10:50,460 thamani gani unataka kuweka ndani yake; katika kesi hii 1. 1136 01:10:50,460 --> 01:10:53,060 Mara sisi ni kosa na hilo, unahitaji huru kwamba pointer 1137 01:10:53,060 --> 01:10:57,160 sababu tunahitaji kupata nyuma mfumo kwamba kumbukumbu kwamba wewe aliuliza kwa katika nafasi ya kwanza. 1138 01:10:57,160 --> 01:10:59,690 Kwa sababu kompyuta hajui wakati sisi ni kosa kwa hayo. 1139 01:10:59,690 --> 01:11:02,510 Katika kesi hii sisi ni wazi kuwaambia hayo, sawa, sisi ni kosa na kumbukumbu hiyo. 1140 01:11:02,510 --> 01:11:10,780 Kama baadhi ya mchakato mahitaji mengine ni, baadhi ya programu nyingine mahitaji yake, kujisikia huru na kwenda mbele na kuchukua hiyo. 1141 01:11:10,780 --> 01:11:15,110 Nini tunaweza pia kufanya ni tunaweza kupata tu anuani ya vigezo mitaa juu ya kuweka. 1142 01:11:15,110 --> 01:11:19,080 Hivyo int x ni ndani ya sura bainifu wa kuu. 1143 01:11:19,080 --> 01:11:23,060 Na wakati sisi kutumia hii ampersand, hii na operator, kile yake ni 1144 01:11:23,060 --> 01:11:27,310 inachukua x, na x ni baadhi tu ya data katika kumbukumbu, lakini ina anuani. 1145 01:11:27,310 --> 01:11:33,790 Ni ziko mahali fulani. Hivyo kwa wito & x, nini hii haina ni inatupa anuani ya x. 1146 01:11:33,790 --> 01:11:38,430 Kwa kufanya hivyo, sisi ni kufanya pointer uhakika ambapo x ni katika kumbukumbu. 1147 01:11:38,430 --> 01:11:41,710 Sasa sisi tu kufanya kitu kama * x, sisi ni kwenda kupata 5 nyuma. 1148 01:11:41,710 --> 01:11:43,820 Nyota hiyo inaitwa dereferencing yake. 1149 01:11:43,820 --> 01:11:46,640 Wewe kufuata anuani na kupata thamani yake kuhifadhiwa huko. 1150 01:11:51,000 --> 01:11:53,310 >> Maswali yoyote? Ndiyo? 1151 01:11:53,310 --> 01:11:56,500 [Mwanafunzi] Kama huwezi kufanya kitu 3-chongoka, gani bado kukusanya? 1152 01:11:56,500 --> 01:11:59,490 Ndiyo. Kama huwezi kufanya kitu 3-pointer, ni bado kwenda kukusanya, 1153 01:11:59,490 --> 01:12:02,720 lakini Mimi nitawaonyesheani nini kinatokea katika pili, na bila kufanya hivyo, 1154 01:12:02,720 --> 01:12:04,860 kwamba ni nini sisi kuwaita leak kumbukumbu. Wewe si kutoa mfumo 1155 01:12:04,860 --> 01:12:07,850 nyuma kumbukumbu yake, hivyo baada ya muda mpango ni kwenda kujilimbikiza 1156 01:12:07,850 --> 01:12:10,940 kumbukumbu kwamba ni si kutumia, na kitu kingine unaweza kutumia. 1157 01:12:10,940 --> 01:12:15,750 Kama ve milele kuonekana Firefox na kilobytes milioni 1.5 kwenye kompyuta yako, 1158 01:12:15,750 --> 01:12:17,840 katika meneja kazi, kwamba ni nini kinaendelea. 1159 01:12:17,840 --> 01:12:20,760 Una leak kumbukumbu katika mpango kwamba wao siyo kuchukua. 1160 01:12:23,080 --> 01:12:26,240 Hivyo ni jinsi gani pointer arithmetic kazi? 1161 01:12:26,240 --> 01:12:29,480 Naam, pointer arithmetic ni aina ya Indexing kama ndani ya safu. 1162 01:12:29,480 --> 01:12:36,370 Katika kesi hiyo, nina pointer, na nini mimi ni mimi kufanya pointer uhakika kwa kipengele kwanza 1163 01:12:36,370 --> 01:12:42,100 wa hii safu ya 3 integers kwamba nimepata zilizotengwa. 1164 01:12:42,100 --> 01:12:46,670 Hivyo sasa ninafanya nini, nyota pointer tu mabadiliko ya kipengele kwanza katika orodha. 1165 01:12:46,670 --> 01:12:49,140 Star pointer 1 pointi zaidi ya hapa. 1166 01:12:49,140 --> 01:12:53,140 Hivyo pointer ni zaidi ya hapa, pointer 1 ni zaidi ya hapa, pointer 2 ni zaidi ya hapa. 1167 01:12:53,140 --> 01:12:56,610 >> Hivyo kuongeza tu 1 ni kitu kimoja kama kusonga pamoja safu hii. 1168 01:12:56,610 --> 01:12:59,880 Tunachofanya ni kwamba, wakati sisi kufanya pointer 1 kupata anuani zaidi ya hapa, 1169 01:12:59,880 --> 01:13:04,180 na ili kupata thamani katika hapa, wewe kuweka nyota katika kutoka kujieleza nzima 1170 01:13:04,180 --> 01:13:05,990 kwa dereference yake. 1171 01:13:05,990 --> 01:13:09,940 Hivyo, katika kesi hii, mimi nina kuweka mahali kwanza katika safu hii kwa 1, 1172 01:13:09,940 --> 01:13:13,970 pili mahali kwa 2, na mahali ya tatu kwa 3. 1173 01:13:13,970 --> 01:13:18,180 Kisha nini mimi kufanya zaidi ya hapa ni mimi nina uchapishaji pointer yetu 1, 1174 01:13:18,180 --> 01:13:19,970 ambayo tu anitiaye 2. 1175 01:13:19,970 --> 01:13:23,650 Sasa mimi nina incrementing pointer, hivyo pointer sawa pointer 1, 1176 01:13:23,650 --> 01:13:26,780 ambayo moves ni mbele. 1177 01:13:26,780 --> 01:13:30,810 Na hivyo sasa kama mimi magazeti nje pointer 1, 1 pointer sasa ni 3, 1178 01:13:30,810 --> 01:13:33,990 ambayo katika kesi hii Prints nje 3. 1179 01:13:33,990 --> 01:13:36,560 Na ili kitu bure, pointer kwamba mimi kutoa 1180 01:13:36,560 --> 01:13:40,540 lazima akizungumzia katika mwanzo wa safu ambayo mimi got nyuma kutoka malloc. 1181 01:13:40,540 --> 01:13:43,430 Hivyo, katika kesi hii, kama ningekuwa kuwaita 3 haki hapa, hii bila kuwa na haki, 1182 01:13:43,430 --> 01:13:45,070 kwa sababu ni katikati ya safu. 1183 01:13:45,070 --> 01:13:48,820 Nina Ondoa kupata mahali awali 1184 01:13:48,820 --> 01:13:50,420 awali kwanza kabla doa naweza huru yake. 1185 01:13:56,300 --> 01:13:58,450 Kwa hiyo, hapa ni mfano kushiriki zaidi. 1186 01:13:58,450 --> 01:14:03,360 Katika kesi hii, sisi ni kugawa wahusika 7 katika safu tabia. 1187 01:14:03,360 --> 01:14:06,480 >> Na katika kesi hii ni nini sisi ni kufanya ni tuko looping juu ya 6 ya kwanza ya yao, 1188 01:14:06,480 --> 01:14:09,900 na sisi ni kuweka yao kwa Z. 1189 01:14:09,900 --> 01:14:13,350 Hivyo, kwa int i = 0, i> 6, i + +, 1190 01:14:13,350 --> 01:14:16,220 Hivyo, pointer + i tu kutupa, katika kesi hii, 1191 01:14:16,220 --> 01:14:20,860 pointer, pointer 1, 2 pointer, pointer 3, na kadhalika na kadhalika katika kitanzi. 1192 01:14:20,860 --> 01:14:24,040 Nini ni kwenda kufanya ni anapata kwamba anuani, dereferences ni kupata thamani, 1193 01:14:24,040 --> 01:14:27,440 na mabadiliko ambayo thamani kwa Z. 1194 01:14:27,440 --> 01:14:30,350 Kisha mwishoni kumbuka hii ni kamba, sawa? 1195 01:14:30,350 --> 01:14:33,560 Zote masharti kuwa na kumalizika na herufi null kuahirisha. 1196 01:14:33,560 --> 01:14:38,620 Hivyo, nini mimi kufanya ni katika pointer 6 mimi kuweka null Terminator tabia in 1197 01:14:38,620 --> 01:14:43,980 Na sasa nini mimi kimsingi kufanya zaidi ya hapa ni utekelezaji wa printf kwa kamba, sawa? 1198 01:14:43,980 --> 01:14:46,190 >> Hivyo, wakati gani printf sasa wakati ni kufikiwa mwisho ya kamba? 1199 01:14:46,190 --> 01:14:48,230 Wakati ni hits null kuahirisha tabia. 1200 01:14:48,230 --> 01:14:52,030 Hivyo, katika kesi hii, pointer yangu ya awali pointi ya mwanzo wa safu hii. 1201 01:14:52,030 --> 01:14:56,410 Mimi magazeti tabia ya kwanza nje. Mimi hoja yake juu ya moja. 1202 01:14:56,410 --> 01:14:58,420 Mimi magazeti kwamba tabia nje. Mimi hoja hiyo juu. 1203 01:14:58,420 --> 01:15:02,180 Na mimi kuendelea kufanya hili mpaka mimi kufikia mwisho. 1204 01:15:02,180 --> 01:15:07,750 Na sasa * mwisho pointer mapenzi dereference hii na kupata null kuahirisha tabia ya nyuma. 1205 01:15:07,750 --> 01:15:11,780 Na hivyo wakati wangu kitanzi anaendesha tu wakati thamani ambayo si null kuahirisha tabia. 1206 01:15:11,780 --> 01:15:13,770 Hivyo, sasa mimi exit nje ya kitanzi hii. 1207 01:15:18,780 --> 01:15:21,180 Na hivyo kama mimi Ondoa 6 kutoka pointer hii, 1208 01:15:21,180 --> 01:15:22,860 Mimi kurejea njia yote ya mwanzo. 1209 01:15:22,860 --> 01:15:27,880 Kumbuka, mimi nina kufanya hivi kwa sababu nina kwenda mwanzo ili kumwondolea yake. 1210 01:15:27,880 --> 01:15:30,270 >> Hivyo, najua kwamba ilikuwa mengi. Je, kuna maswali? 1211 01:15:30,270 --> 01:15:31,870 Tafadhali, ndiyo? 1212 01:15:31,870 --> 01:15:36,610 [Mwanafunzi swali unintelligible] 1213 01:15:36,610 --> 01:15:38,190 Je, unaweza kusema kwamba sauti? Sorry. 1214 01:15:38,190 --> 01:15:44,140 [Mwanafunzi] On slide mwisho kulia kabla ya waliokimbia pointer, 1215 01:15:44,140 --> 01:15:47,300 ambapo walikuwa wewe hasa kubadilisha thamani ya pointer? 1216 01:15:47,300 --> 01:15:50,370 [Joseph] Hivyo, haki hapa. >> [Mwanafunzi] Oh, okay. 1217 01:15:50,370 --> 01:15:51,890 [Joseph] Hivyo, nina pointer bala bala, haki, 1218 01:15:51,890 --> 01:15:54,140 ambayo moves jambo moja nyuma, na kisha mimi ni huru, 1219 01:15:54,140 --> 01:15:57,000 kwa sababu pointer hii ina kuelekezwa kwa mwanzo wa safu. 1220 01:15:57,000 --> 01:16:00,420 [Mwanafunzi] Lakini kwamba isingekuwa zinazohitajika alikuwa kusimamishwa baada ya mstari huo. 1221 01:16:00,420 --> 01:16:03,130 [Joseph] Hivyo, kama mimi alikuwa kusimamishwa baada ya hii, hii itakuwa kuchukuliwa leak kumbukumbu, 1222 01:16:03,130 --> 01:16:04,810 kwa sababu mimi si kukimbia bure. 1223 01:16:04,810 --> 01:16:11,290 [Mwanafunzi] Mimi [unintelligible] baada ya kwanza mistari mitatu ambapo alikuwa pointer 1 [unintelligible]. 1224 01:16:11,290 --> 01:16:13,140 [Joseph] Uh-huh. Hivyo, nini ni swali huko? 1225 01:16:13,140 --> 01:16:14,780 Sorry. Hapana, hakuna. Nenda, kwenda, tafadhali. 1226 01:16:14,780 --> 01:16:16,870 [Mwanafunzi] Basi, wewe si kubadilisha thamani ya kuyatumia. 1227 01:16:16,870 --> 01:16:19,130 Wewe wasingalikuwa kufanya pointer bala bala. 1228 01:16:19,130 --> 01:16:19,730 [Joseph] Ndiyo, hasa. 1229 01:16:19,730 --> 01:16:21,890 Hivyo, wakati mimi kufanya pointer 1 na 2 pointer, 1230 01:16:21,890 --> 01:16:24,410 Mimi si kufanya pointer sawa pointer 1. 1231 01:16:24,410 --> 01:16:27,260 Hivyo, pointer tu anakaa akizungumzia katika mwanzo wa safu. 1232 01:16:27,260 --> 01:16:31,460 Ni wakati tu mimi kufanya plus plus kwamba unaweka thamani nyuma ndani pointer, 1233 01:16:31,460 --> 01:16:33,550 kwamba ni kweli hatua hii pamoja. 1234 01:16:36,860 --> 01:16:37,780 Wote haki. 1235 01:16:40,550 --> 01:16:42,030 Zaidi maswali? 1236 01:16:44,680 --> 01:16:47,790 >> Tena, kama hii ni aina ya balaa, hii itakuwa kufunikwa katika kikao. 1237 01:16:47,790 --> 01:16:50,710 Uliza mafundisho wenzako kuhusu hilo, na tunaweza kujibu maswali mwishoni. 1238 01:16:53,510 --> 01:16:56,600 Na kwa kawaida sisi si kama jambo hili bala. 1239 01:16:56,600 --> 01:16:59,760 Hii ina kuhitaji me kuweka wimbo wa kiasi gani nimepata kukabiliana katika safu. 1240 01:16:59,760 --> 01:17:04,520 Hivyo, kwa ujumla, hii ni kueleza jinsi matendo arithmetic pointer. 1241 01:17:04,520 --> 01:17:07,970 Lakini nini sisi kwa kawaida kama kwa kufanya ni sisi kama kujenga nakala ya pointer, 1242 01:17:07,970 --> 01:17:11,640 na kisha tutaweza kutumia nakala wakati sisi ni kuhamia karibu katika kamba. 1243 01:17:11,640 --> 01:17:14,660 Hivyo, katika kesi hizi unaweza kutumia nakala ya magazeti ya string nzima, 1244 01:17:14,660 --> 01:17:19,040 lakini hatuna la kufanya kama pointer minus 6 au kuweka wimbo wa kiasi gani sisi wakiongozwa katika hili, 1245 01:17:19,040 --> 01:17:22,700 tu kwa sababu tunajua kwamba hatua yetu ya awali bado alisema kwa mwanzo wa orodha 1246 01:17:22,700 --> 01:17:25,340 na wote kwamba sisi ilibadilika ilikuwa hii nakala. 1247 01:17:25,340 --> 01:17:28,250 Hivyo, kwa ujumla, kubadilisha nakala za pointer yako ya awali. 1248 01:17:28,250 --> 01:17:32,350 Je, si kujaribu kutatua ya kama - don't kubadilisha nakala ya awali. 1249 01:17:32,350 --> 01:17:35,290 Kujaribu kubadilisha nakala tu ya awali yako. 1250 01:17:41,540 --> 01:17:44,870 Hivyo, taarifa wakati sisi kupitisha kamba ndani ya printf 1251 01:17:44,870 --> 01:17:48,990 huna kuweka nyota mbele yake kama tulivyofanya kwa dereferences mengine yote, sawa? 1252 01:17:48,990 --> 01:17:54,180 Hivyo, kama wewe magazeti nje mzima string% s anatarajia ni anwani, 1253 01:17:54,180 --> 01:17:57,610 na katika kesi hii pointer au katika kesi hii kama safu ya wahusika. 1254 01:17:57,610 --> 01:18:00,330 >> Nyingine, char * s, na arrays ni kitu kimoja. 1255 01:18:00,330 --> 01:18:03,690 Pointer ni kwa wahusika, na tabia arrays ni kitu kimoja. 1256 01:18:03,690 --> 01:18:05,720 Na hivyo, wote sisi kufanya ni kupita katika pointer. 1257 01:18:05,720 --> 01:18:08,150 Hatuna kupita katika kama * pointer au kitu kama hicho. 1258 01:18:13,110 --> 01:18:14,930 Hivyo, arrays na kuyatumia ni kitu kimoja. 1259 01:18:14,930 --> 01:18:19,160 Wakati wewe kufanya kitu kama x [y] zaidi ya hapa kwa safu, 1260 01:18:19,160 --> 01:18:21,960 kile ni kufanya chini ya Hood ni ni kusema, sawa, ni safu ya tabia, 1261 01:18:21,960 --> 01:18:23,690 hivyo ni pointer. 1262 01:18:23,690 --> 01:18:26,510 Na hivyo x ni kitu kimoja, 1263 01:18:26,510 --> 01:18:28,650 na hivyo kile yake ni inaongeza y x, 1264 01:18:28,650 --> 01:18:31,820 ambayo ni kitu kimoja kama kusonga mbele katika kumbukumbu kwamba mengi. 1265 01:18:31,820 --> 01:18:34,930 Na sasa x + y inatupa baadhi ya aina ya anwani, 1266 01:18:34,930 --> 01:18:37,570 na sisi dereference anuani au kufuata mshale 1267 01:18:37,570 --> 01:18:41,640 kwa kuwa mahali ambapo katika kumbukumbu ni sisi na kupata thamani nje ya kwamba mahali katika kumbukumbu. 1268 01:18:41,640 --> 01:18:43,720 Hivyo, hivyo hizi mbili ni hasa kitu kimoja. 1269 01:18:43,720 --> 01:18:45,840 Ni tu sukari kisintaksia. 1270 01:18:45,840 --> 01:18:48,090 Wao kufanya kitu kimoja. Wao ni tu syntactics tofauti kwa kila mmoja. 1271 01:18:51,500 --> 01:18:57,590 >> Hivyo, nini unaweza kwenda vibaya na kuyatumia? Kama, mengi. Sawa. Hivyo, mambo mabaya. 1272 01:18:57,590 --> 01:19:02,410 Baadhi ya mambo mabaya unaweza kufanya ni kuangalia kama si malloc wako wa simu ya anarudi null, haki? 1273 01:19:02,410 --> 01:19:06,560 Katika kesi hiyo, mimi nina kuuliza mfumo kunipa - kile ni kwamba idadi hiyo? 1274 01:19:06,560 --> 01:19:11,200 Bilioni 2 kama mara 4, kwa sababu ya ukubwa wa integer ni 4 ka. 1275 01:19:11,200 --> 01:19:13,810 Mimi nauliza hivyo kwa ajili kama ka bilioni 8. 1276 01:19:13,810 --> 01:19:17,270 Bila shaka kompyuta yangu si kwenda kuwa na uwezo wa nipe kumbukumbu kubwa zaidi nyuma. 1277 01:19:17,270 --> 01:19:20,960 Na sisi hawakuwa kuangalia kama hii ni null, hivyo wakati sisi kujaribu dereference ni zaidi ya hapo - 1278 01:19:20,960 --> 01:19:24,270 kufuata mshale ambapo itakavyo - hatuna kwamba kumbukumbu. 1279 01:19:24,270 --> 01:19:27,150 Hii ni nini tunaita dereferencing pointer null. 1280 01:19:27,150 --> 01:19:29,710 Na hii kimsingi sababu wewe segfault. 1281 01:19:29,710 --> 01:19:31,790 Hii ni moja ya njia unaweza segfault. 1282 01:19:34,090 --> 01:19:38,090 Nyingine mbaya ya mambo unaweza kufanya - oh vizuri. 1283 01:19:38,090 --> 01:19:40,650 Hiyo ilikuwa dereferencing pointer null. Sawa. 1284 01:19:40,650 --> 01:19:45,160 Mambo mengine mabaya - vizuri, kurekebisha kwamba wewe tu kuweka hundi katika huko 1285 01:19:45,160 --> 01:19:46,980 kwamba hundi kama pointer ni null 1286 01:19:46,980 --> 01:19:51,000 na exit nje ya mpango kama ni hutokea malloc kwamba anarudi pointer null. 1287 01:19:55,110 --> 01:19:59,850 Hiyo Comic XKCD. Watu kuelewa sasa. Aina ya. 1288 01:20:06,120 --> 01:20:09,350 >> Hivyo, kumbukumbu. Nikatoka juu ya hili. 1289 01:20:09,350 --> 01:20:12,000 Sisi ni wito malloc katika kitanzi, lakini kila wakati sisi kuwaita malloc 1290 01:20:12,000 --> 01:20:14,370 sisi ni kupoteza track ya pointer ambapo hii ni akizungumzia, 1291 01:20:14,370 --> 01:20:15,750 kwa sababu sisi ni clobbering yake. 1292 01:20:15,750 --> 01:20:18,410 Hivyo, wito wa awali kwa malloc anitiaye kumbukumbu zaidi ya hapa. 1293 01:20:18,410 --> 01:20:19,990 Pointer yangu kuyatumia na hii. 1294 01:20:19,990 --> 01:20:23,020 Sasa, sijui huru, hivyo sasa mimi wito malloc tena. 1295 01:20:23,020 --> 01:20:26,070 Sasa pointi zaidi ya hapa. Sasa kumbukumbu yangu ni kuonyesha zaidi ya hapa. 1296 01:20:26,070 --> 01:20:27,640 Akizungumzia zaidi ya hapa. Akizungumzia zaidi ya hapa. 1297 01:20:27,640 --> 01:20:31,820 Lakini nimekuwa waliopotea track ya anwani ya kumbukumbu ya juu hapa kwamba mimi zilizotengwa wote. 1298 01:20:31,820 --> 01:20:35,100 Na hivyo sasa sina ushahidi wowote nao tena. 1299 01:20:35,100 --> 01:20:37,230 Hivyo, naweza kuwa huru na wao nje ya kitanzi hii. 1300 01:20:37,230 --> 01:20:39,390 Na hivyo ili kurekebisha kitu kama hii, 1301 01:20:39,390 --> 01:20:42,250 kama wewe kusahau kumbukumbu bure na wewe kupata hii leak kumbukumbu, 1302 01:20:42,250 --> 01:20:45,810 Una huru kumbukumbu ndani ya kitanzi hii mara moja wewe ni kosa kwa hayo. 1303 01:20:45,810 --> 01:20:51,400 Naam, hii ni nini kinatokea. Najua kura ya chuki hii. 1304 01:20:51,400 --> 01:20:55,270 Lakini sasa - Yay! Unaweza kupata kama kilobytes 44,000. 1305 01:20:55,270 --> 01:20:57,110 Hivyo, wewe ni huru mwishoni mwa kitanzi, 1306 01:20:57,110 --> 01:20:59,770 na kwamba itakuja tu huru kumbukumbu kila wakati. 1307 01:20:59,770 --> 01:21:03,620 Kimsingi, programu yako haina leak kumbukumbu tena. 1308 01:21:03,620 --> 01:21:08,150 >> Na sasa kitu kingine unaweza kufanya ni huru baadhi ya kumbukumbu kwamba ve aliuliza kwa mara mbili. 1309 01:21:08,150 --> 01:21:11,060 Katika kesi hiyo, wewe malloc kitu, wewe kubadilisha thamani yake. 1310 01:21:11,060 --> 01:21:13,140 Wewe ni huru mara moja kutokana na wewe alisema yalifanyika kwa hayo. 1311 01:21:13,140 --> 01:21:14,940 Lakini basi sisi huru tena. 1312 01:21:14,940 --> 01:21:16,730 Hii ni kitu ambacho ni pretty mbaya. 1313 01:21:16,730 --> 01:21:18,820 Ni si kwenda awali segfault, 1314 01:21:18,820 --> 01:21:23,350 lakini baada ya muda gani hii haina ni mara mbili ya kumkomboa hii huharibu lundo yako muundo, 1315 01:21:23,350 --> 01:21:27,200 na wewe utakuwa kujifunza kidogo zaidi kuhusu hili kama wewe kuchagua kuchukua darasa kama CS61. 1316 01:21:27,200 --> 01:21:30,000 Lakini kimsingi baada ya wakati kompyuta yako ni kwenda kupata kuchanganyikiwa 1317 01:21:30,000 --> 01:21:33,010 kuhusu nini kumbukumbu maeneo ni wapi na ambapo ni kuhifadhiwa - 1318 01:21:33,010 --> 01:21:34,800 ambapo data ni kuhifadhiwa katika kumbukumbu. 1319 01:21:34,800 --> 01:21:38,080 Na hivyo kumkomboa pointer mara mbili ni jambo mbaya kwamba hutaki kufanya. 1320 01:21:38,080 --> 01:21:41,600 >> Mambo mengine ambayo yanaweza kwenda vibaya si kutumia sizeof. 1321 01:21:41,600 --> 01:21:44,460 Hivyo, katika kesi hii wewe malloc ka 8, 1322 01:21:44,460 --> 01:21:46,700 na kwamba ni kitu kimoja kama integers mbili, sawa? 1323 01:21:46,700 --> 01:21:49,580 Hivyo, hiyo ni kikamilifu salama, lakini ni nini? 1324 01:21:49,580 --> 01:21:52,160 Naam, kama Lucas walizungumzia juu ya usanifu tofauti, 1325 01:21:52,160 --> 01:21:54,220 integers ni ya urefu tofauti. 1326 01:21:54,220 --> 01:21:57,970 Hivyo, juu ya appliance kwamba wewe ni kutumia, integers ni kuhusu 4 ka, 1327 01:21:57,970 --> 01:22:02,370 lakini juu ya mfumo wa baadhi ya wengine wapate kuwa 8 ka au wanaweza kuwa 16 bytes. 1328 01:22:02,370 --> 01:22:05,680 Hivyo, kama mimi tu kutumia namba hii zaidi ya hapa, 1329 01:22:05,680 --> 01:22:07,310 mpango huu ili kazi juu ya appliance, 1330 01:22:07,310 --> 01:22:10,360 lakini si kwenda kutenga kumbukumbu ya kutosha juu ya mfumo wa baadhi nyingine. 1331 01:22:10,360 --> 01:22:14,020 Katika kesi hiyo, hii ni nini operator sizeof ni kutumika kwa. 1332 01:22:14,020 --> 01:22:16,880 Wakati sisi kuwaita sizeof (int), nini hii haina ni 1333 01:22:16,880 --> 01:22:21,910  ni inatupa ukubwa wa integer juu ya mfumo wa kwamba mpango ni mbio. 1334 01:22:21,910 --> 01:22:25,490 Hivyo, katika kesi hii, sizeof (int) atarudi 4 juu ya kitu kama appliance, 1335 01:22:25,490 --> 01:22:29,980 na sasa hii mapenzi 4 * 2, ambayo ni 8, 1336 01:22:29,980 --> 01:22:32,330 ambayo ni ya haki kiasi cha nafasi muhimu kwa integers mbili. 1337 01:22:32,330 --> 01:22:36,710 Juu ya mfumo tofauti, ikiwa ni int kama ka 16 au ka 8, 1338 01:22:36,710 --> 01:22:39,380 ni tu kwenda na kurudi ka kutosha kuhifadhi kwamba kiasi. 1339 01:22:41,830 --> 01:22:45,310 >> Na hatimaye, structs. 1340 01:22:45,310 --> 01:22:48,340 Hivyo, kama alitaka kuhifadhi bodi Sudoku katika kumbukumbu, jinsi tunavyoweza kufanya hili? 1341 01:22:48,340 --> 01:22:51,570 Unaweza kufikiri ya kama variable kwa jambo la kwanza, 1342 01:22:51,570 --> 01:22:53,820 kutofautiana kwa Jambo la pili, kutofautiana kwa jambo la tatu, 1343 01:22:53,820 --> 01:22:56,420 kutofautiana kwa jambo la nne - mbaya, haki? 1344 01:22:56,420 --> 01:23:00,750 Hivyo, moja uboreshaji unaweza kufanya juu ya hii ni kufanya 9 x 9 safu. 1345 01:23:00,750 --> 01:23:04,480 Hiyo ni sawa, lakini kile kama alitaka kujiunga na mambo mengine na bodi Sudoku 1346 01:23:04,480 --> 01:23:06,490 kama nini ugumu wa bodi ni, 1347 01:23:06,490 --> 01:23:11,740 au, kwa mfano, kile alama yako ni, au jinsi gani wakati ni kuchukuliwa wewe kutatua hii bodi? 1348 01:23:11,740 --> 01:23:14,970 Naam, nini unaweza kufanya ni unaweza kuunda struct. 1349 01:23:14,970 --> 01:23:18,910 Nini mimi kimsingi akisema ni mimi nina kufafanua muundo huu zaidi ya hapa, 1350 01:23:18,910 --> 01:23:23,230 na mimi nina kufafanua bodi Sudoku ambalo lina bodi kwamba ni 9 x 9. 1351 01:23:23,230 --> 01:23:26,650 >> Na nini ina ina kuyatumia kwa jina la ngazi. 1352 01:23:26,650 --> 01:23:30,730 Pia ina x na y, ambayo ni kuratibu ya ambapo mimi hivi sasa. 1353 01:23:30,730 --> 01:23:35,980 Pia ina wakati alitumia [unintelligible], na ina jumla ya idadi ya hatua nimekuwa inputted hivyo mbali. 1354 01:23:35,980 --> 01:23:40,010 Na hivyo katika kesi hii, naweza kikundi rundo zima la data katika muundo moja tu 1355 01:23:40,010 --> 01:23:42,790 badala ya kuwa ni kama kuruka karibu katika kama vigezo mbalimbali 1356 01:23:42,790 --> 01:23:44,540 kwamba siwezi kuweka wimbo wa. 1357 01:23:44,540 --> 01:23:49,720 Na hii inatusaidia kuwa nzuri tu syntax kwa aina ya referencing mambo mbalimbali ndani ya struct hii. 1358 01:23:49,720 --> 01:23:53,430 Naweza tu kufanya board.board, na mimi kupata bodi Sudoku nyuma. 1359 01:23:53,430 --> 01:23:56,320 Board.level, mimi kupata jinsi ngumu ni. 1360 01:23:56,320 --> 01:24:00,540 Board.x na board.y nipe viwianishi vya ambapo nipate kuwa katika bodi. 1361 01:24:00,540 --> 01:24:04,730 Na hivyo mimi nina kupata kile tunachokiita mashamba katika struct. 1362 01:24:04,730 --> 01:24:08,840 Hii amefafanua sudokuBoard, ambayo ni aina ya kwamba nina. 1363 01:24:08,840 --> 01:24:14,800 Na sasa tuko hapa. Nina variable inayoitwa "bodi" ya sudokuBoard aina. 1364 01:24:14,800 --> 01:24:18,820 Na hivyo mimi sasa wanaweza kupata mashamba yote ambayo yanafanya muundo huu zaidi ya hapa. 1365 01:24:20,830 --> 01:24:22,450 >> Maswali yoyote kuhusu structs? Ndiyo? 1366 01:24:22,450 --> 01:24:25,890 [Mwanafunzi] Kwa int x, y, wewe alitangaza wote kwenye mstari mmoja? >> [Joseph] Uh-huh. 1367 01:24:25,890 --> 01:24:27,400 [Mwanafunzi] Hivyo, unaweza tu kufanya hivyo kwa wote? 1368 01:24:27,400 --> 01:24:31,200 Kama ilivyo katika x, y comma mara kwamba jumla? 1369 01:24:31,200 --> 01:24:34,460 [Joseph] Ndiyo, unaweza dhahiri kufanya hivyo, lakini sababu mimi kuweka x na y juu ya mstari huo - 1370 01:24:34,460 --> 01:24:36,330 na swali ni kwa nini tunaweza tu kufanya hivyo kwenye mstari huo? 1371 01:24:36,330 --> 01:24:38,600 Mbona sisi tu ya kuweka yote haya juu ya mstari huo ni 1372 01:24:38,600 --> 01:24:42,090 x na y ni kuhusiana na kila mmoja, 1373 01:24:42,090 --> 01:24:44,780 na hii ni stylistically sahihi zaidi, katika hisia, 1374 01:24:44,780 --> 01:24:46,600 kwa sababu ni kuweka viumbe mbili juu ya mstari huo 1375 01:24:46,600 --> 01:24:49,340 kwamba aina kama ya yanahusiana na kitu kimoja. 1376 01:24:49,340 --> 01:24:51,440 Na mimi tu pasua hizi mbali. Ni tu kitu style. 1377 01:24:51,440 --> 01:24:53,720 Ni functionally hufanya hakuna tofauti yo yote. 1378 01:24:58,150 --> 01:24:59,270 Maswali yoyote juu ya nyingine structs? 1379 01:25:03,030 --> 01:25:06,620 Unaweza kufafanua Pokédex na struct. 1380 01:25:06,620 --> 01:25:11,720 Pokemon ina idadi na ina barua, mmiliki, aina. 1381 01:25:11,720 --> 01:25:16,990 Na kisha kama una safu ya pokemon, unaweza kufanya juu Pokédex, haki? 1382 01:25:16,990 --> 01:25:20,810 Okay, cool. Hivyo, maswali juu ya structs. Wale ni kuhusiana na structs. 1383 01:25:20,810 --> 01:25:25,270 >> Hatimaye, GDB. Je GDB basi wewe kufanya? Ni inakuwezesha Debug programu yako. 1384 01:25:25,270 --> 01:25:27,650 Na kama hujatumia GDB, napenda ilipendekeza kuangalia mfupi 1385 01:25:27,650 --> 01:25:31,250 na kwenda tu juu ya kile GDB ni, jinsi kazi pamoja na hayo, jinsi unavyoweza kutumia hiyo, 1386 01:25:31,250 --> 01:25:32,900 na mtihani juu ya mpango. 1387 01:25:32,900 --> 01:25:37,400 Na hivyo kile GDB inakuwezesha kufanya ni inakuwezesha pause [unintelligible] juu ya mpango wako 1388 01:25:37,400 --> 01:25:38,920 na mstari wa vitendo. 1389 01:25:38,920 --> 01:25:42,600 Kwa mfano, nataka utekelezaji pause katika mstari kama 3 ya mpango wangu, 1390 01:25:42,600 --> 01:25:46,010 na wakati mimi nina katika mstari wa 3 Naweza magazeti nje maadili yote yaliyoko. 1391 01:25:46,010 --> 01:25:49,710 Na hivyo kile tunachokiita kama pausing katika mstari 1392 01:25:49,710 --> 01:25:52,350 ni sisi wito kuweka breakpoint katika mstari kwamba 1393 01:25:52,350 --> 01:25:55,920 na kisha tunaweza magazeti nje vigezo katika hali ya programu wakati huo. 1394 01:25:55,920 --> 01:25:58,990 >> Tunaweza halafu kutoka hapo hatua kupitia mpango line-na-line. 1395 01:25:58,990 --> 01:26:03,200 Na kisha tunaweza kuangalia hali ya stack kwa wakati. 1396 01:26:03,200 --> 01:26:08,600 Na hivyo ili kutumia GDB, nini cha kufanya ni sisi wito Clang kwenye faili C, 1397 01:26:08,600 --> 01:26:11,290 lakini tuna kupita ggdb-bendera. 1398 01:26:11,290 --> 01:26:15,850 Na mara moja sisi ni kosa na kwamba sisi kukimbia tu gdb kwenye faili kusababisha pato. 1399 01:26:15,850 --> 01:26:18,810 Na ili kupata baadhi ya molekuli kama ya maandishi kama hii, 1400 01:26:18,810 --> 01:26:21,990 lakini kwa kweli yote wewe kufanya ni aina katika amri mwanzoni. 1401 01:26:21,990 --> 01:26:24,250 Kuvunja kuu unaweka breakpoint katika kuu. 1402 01:26:24,250 --> 01:26:28,470 Orodha ya 400 unaorodhesha mstari wa kanuni kuzunguka mstari 400. 1403 01:26:28,470 --> 01:26:31,410 Na hivyo katika kesi hii unaweza kuangalia tu karibu na kusema, oh, 1404 01:26:31,410 --> 01:26:34,360 Nataka kuweka breakpoint katika mstari wa 397, ambayo ni mstari huu, 1405 01:26:34,360 --> 01:26:37,170 na kisha programu yako anaendesha katika hatua hiyo na ni kwenda kuvunja. 1406 01:26:37,170 --> 01:26:41,120 Ni kwenda pause huko, na unaweza magazeti nje, kwa mfano, thamani ya chini au ya juu. 1407 01:26:41,120 --> 01:26:46,410 Na hivyo kuna rundo la amri unahitaji kujua, 1408 01:26:46,410 --> 01:26:48,660 na slideshow hii kwenda juu kwenye tovuti, 1409 01:26:48,660 --> 01:26:54,000 hivyo kama unataka tu kwa rejea hizi au kama kuweka yao kwenye karatasi yako ya kudanganya, jisikie huru. 1410 01:26:54,000 --> 01:27:00,650 >> Cool. Hiyo ilikuwa Quiz Review 0, na tutaweza fimbo karibu kama una maswali yoyote. 1411 01:27:00,650 --> 01:27:03,850 Wote haki. 1412 01:27:03,850 --> 01:27:09,030 >>  [Applause] 1413 01:27:09,030 --> 01:27:13,000 >> [CS50.TV]