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] [Harvard University] 3 00:00:05,000 --> 00:00:08,000 >> [Þetta er CS50.] [CS50.TV] 4 00:00:08,000 --> 00:00:10,000 >> Hey, allir. 5 00:00:10,000 --> 00:00:15,000 Velkomin endurskoðun fundur fyrir Quiz 0, sem á sér stað í Miðvikudagur. 6 00:00:15,000 --> 00:00:19,000 Það sem við erum að fara að gera í kvöld, ég er með 3 önnur TFS, 7 00:00:19,000 --> 00:00:24,000 og saman við erum að fara að fara í gegnum endurskoðun á það sem við höfum gert í námskeiðinu svo langt. 8 00:00:24,000 --> 00:00:27,000 Það er ekki að fara að vera 100% tæmandi, en það ætti að gefa þér betri hugmynd 9 00:00:27,000 --> 00:00:31,000 af því þú hefur nú þegar niður og hvað þú þarft samt að læra fyrir miðvikudag. 10 00:00:31,000 --> 00:00:34,000 Og ekki hika við að hækka hönd þína með spurningum eins og við erum að fara eftir, 11 00:00:34,000 --> 00:00:38,000 en hafðu í huga að við munum einnig hafa smá tíma í lok- 12 00:00:38,000 --> 00:00:41,000 ef við fáum í gegnum nokkrar mínútur til vara til að gera almennar spurningar, 13 00:00:41,000 --> 00:00:47,000 þannig að það í huga, og svo ætlum við að byrja á byrjun með viku 0. 14 00:00:47,000 --> 00:00:50,000 >> [Spurningakeppni 0 frétta!] [Part 0] [Lexi Ross] En áður en við gerum sem við skulum tala um 15 00:00:50,000 --> 00:00:53,000 flutninga í spurningakeppni. 16 00:00:53,000 --> 00:00:55,000 >> [Logistics] [Quiz fer fram á miðvikudaginn 10/10 í stað fyrirlestri] 17 00:00:55,000 --> 00:00:57,000 >> [(Sjá http://cdn.cs50.net/2012/fall/quizzes/0/about0.pdf fyrir frekari upplýsingar)] Það er á Wednesday, October 10. 18 00:00:57,000 --> 00:01:00,000 >> Það er þetta miðvikudagur, og ef þú ferð á þessa slóð hér, 19 00:01:00,000 --> 00:01:03,000 sem er einnig aðgengileg frá CS50.net-það er tengill til þess- 20 00:01:03,000 --> 00:01:06,000 þú getur séð upplýsingar um hvar á að fara byggja á 21 00:01:06,000 --> 00:01:10,000 eftirnafn eða skóla tengsl og 22 00:01:10,000 --> 00:01:14,000 það segir um nákvæmlega hvað quiz mun ná og þær tegundir af spurningum sem þú ert að fara að fá. 23 00:01:14,000 --> 00:01:19,000 Hafðu í huga að þú munt einnig hafa tækifæri til að rifja upp fyrir prófið í kafla, 24 00:01:19,000 --> 00:01:21,000 svo TFS þín ætti að vera að fara yfir nokkrar æfa vandamál, 25 00:01:21,000 --> 00:01:29,000 og það er annað gott tækifæri til að sjá hvar þú þarft samt að læra allt fyrir próf. 26 00:01:29,000 --> 00:01:32,000 Við skulum byrja á byrjun með Bytes 'N' bits. 27 00:01:32,000 --> 00:01:35,000 Mundu a hluti er bara 0 eða 1, 28 00:01:35,000 --> 00:01:38,000 og bæti er safn af 8 af þeim bita. 29 00:01:38,000 --> 00:01:42,000 Við skulum líta á þetta safn bita hérna. 30 00:01:42,000 --> 00:01:44,000 Við ættum að vera fær um að reikna út hversu margir bitar eru. 31 00:01:44,000 --> 00:01:48,000 Þar við teljum það er bara 8 af þeim, átta 0 eða 1 einingar. 32 00:01:48,000 --> 00:01:51,000 Og þar er 8 bitar, sem er 1 bæti, 33 00:01:51,000 --> 00:01:53,000 og við skulum umbreyta það til sextánskur. 34 00:01:53,000 --> 00:01:58,000 Sextánskt er stöð 16, og það er frekar auðvelt að breyta 35 00:01:58,000 --> 00:02:01,000 fjölda í tvöfaldur, sem er það sem er að tala í sextánskur. 36 00:02:01,000 --> 00:02:04,000 Allt sem við gerum er að við horfum á hópa af 4, 37 00:02:04,000 --> 00:02:07,000 og við umbreyta þeim á viðeigandi sextánskur stafa. 38 00:02:07,000 --> 00:02:11,000 Við byrjum með hægri mestu hópi 4, svo 0011. 39 00:02:11,000 --> 00:02:16,000 Það er að fara að vera einn 1 og einn 2, svo saman sem gerir 3. 40 00:02:16,000 --> 00:02:19,000 Og þá skulum við líta á aðra blokk 4. 41 00:02:19,000 --> 00:02:24,000 1101. Það er að fara að vera einn 1, einn 4 og ein 8. 42 00:02:24,000 --> 00:02:28,000 Saman sem er að fara að vera 13, sem gerir D. 43 00:02:28,000 --> 00:02:32,000 Og við munum minnast þess að í sextánskur við ekki bara að fara í 0 til 9. 44 00:02:32,000 --> 00:02:36,000 Við förum 0 gegnum F, svo eftir 9, 10 samsvarar, 45 00:02:36,000 --> 00:02:40,000 11 til B, et cetera þar sem f er 15. 46 00:02:40,000 --> 00:02:44,000 Hér 13 er D, 47 00:02:44,000 --> 00:02:49,000 svo til að umbreyta það til aukastaf allt sem við gerum er að við í raun 48 00:02:49,000 --> 00:02:52,000 meðhöndla hverja stöðu sem valdi 2. 49 00:02:52,000 --> 00:02:58,000 Það er ein 1, einn 2, núll 4S, núll 8s, einn 16, et cetera, 50 00:02:58,000 --> 00:03:03,000 og það er svolítið erfitt að reikna í hausnum, en ef við förum á næstu glæru 51 00:03:03,000 --> 00:03:05,000 sjáum við svarið við því. 52 00:03:05,000 --> 00:03:09,000 >> Í meginatriðum erum við að fara yfir frá strax aftur til vinstri, 53 00:03:09,000 --> 00:03:14,000 og við erum að margfalda hverja stafa af sama krafti 2. 54 00:03:14,000 --> 00:03:19,000 Og mundu, að sextánskur við tákna þessar tölur með 0x í upphafi 55 00:03:19,000 --> 00:03:23,000 svo við ekki rugla ekki með heiltala. 56 00:03:23,000 --> 00:03:29,000 Endurmenntun á, þetta er ASCII Table, 57 00:03:29,000 --> 00:03:35,000 og það sem við notum ASCII til að landakort af stöfum í töluleg gildi. 58 00:03:35,000 --> 00:03:39,000 Mundu í dulmál pset við gert mikla notkun ASCII töflu 59 00:03:39,000 --> 00:03:43,000 í því skyni að nota ýmsar aðferðir við dulkóðun, 60 00:03:43,000 --> 00:03:47,000 að Caesar og Vigenère dulmál, að breyta mismunandi bréf 61 00:03:47,000 --> 00:03:52,000 í streng samkvæmt takkann gefin af notanda. 62 00:03:52,000 --> 00:03:56,000 Við skulum líta á smá ASCII stærðfræði. 63 00:03:56,000 --> 00:04:02,000 Þegar litið er á 'P' + 1, í formi karakter sem yrði Q, 64 00:04:02,000 --> 00:04:07,000 og muna að "'5 ≠ 5. 65 00:04:07,000 --> 00:04:10,000 Og hvernig nákvæmlega við viljum breyta milli þessara 2 formi? 66 00:04:10,000 --> 00:04:13,000 Það er í raun ekki of erfitt. 67 00:04:13,000 --> 00:04:16,000 Í því skyni að fá 5 við draga '0 ' 68 00:04:16,000 --> 00:04:20,000 vegna þess að það eru 5 staðir milli á '0 'og '5.' 69 00:04:20,000 --> 00:04:23,000 Til að fara í hina áttina við bætum bara 0, 70 00:04:23,000 --> 00:04:25,000 svo það er tegund af eins og venjulegur stærðfræði. 71 00:04:25,000 --> 00:04:29,000 Mundu bara að þegar eitthvað er vitna um það að það er eðli 72 00:04:29,000 --> 00:04:37,000 og því samsvarar gildi í ASCII töflunni. 73 00:04:37,000 --> 00:04:40,000 Flytja inn fleiri almenna tölvunarfræði efni. 74 00:04:40,000 --> 00:04:43,000 Við lærðum hvað reiknirit er og hvernig við notum forritun 75 00:04:43,000 --> 00:04:45,000 að framkvæma reiknirit. 76 00:04:45,000 --> 00:04:48,000 Dæmi um reiknirit er eitthvað mjög einfalt eins og 77 00:04:48,000 --> 00:04:51,000 athuga hvort tala sé jafnvel eða stakur. 78 00:04:51,000 --> 00:04:54,000 Til að muna við unga fólkið fjölda með 2 og athuga hvort niðurstaðan er 0. 79 00:04:54,000 --> 00:04:57,000 Ef svo er, er það jafnvel. Ef ekki, er það skrýtið. 80 00:04:57,000 --> 00:04:59,000 Og það er dæmi um raunverulega undirstöðu reiknirit. 81 00:04:59,000 --> 00:05:02,000 >> A lítill hluti af a fleiri taka þátt einn er tvöfaldur leit, 82 00:05:02,000 --> 00:05:05,000 sem við munum fara yfir síðar í endurskoðun fundur. 83 00:05:05,000 --> 00:05:09,000 Og forritun er hugtakið sem við notum til að taka reiknirit 84 00:05:09,000 --> 00:05:15,000 og umbreyta það til merkjamál the tölva getur lesið. 85 00:05:15,000 --> 00:05:20,000 2 dæmi um forritun er klóra, 86 00:05:20,000 --> 00:05:22,000 sem er það sem við gerðum í viku 0. 87 00:05:22,000 --> 00:05:25,000 Jafnvel þótt við gerum ekki raunverulega gerð út kóðann það er leið til að innleiða 88 00:05:25,000 --> 00:05:29,000 Þetta reiknirit, sem er prentun tölurnar 1-10, 89 00:05:29,000 --> 00:05:32,000 og hér erum við að gera það sama í C forritunarmál. 90 00:05:32,000 --> 00:05:41,000 Þetta eru jafngild, bara skrifað á mismunandi tungumálum eða setningafræði. 91 00:05:41,000 --> 00:05:44,000 Við lærðum síðan um Boolean tjáningu, 92 00:05:44,000 --> 00:05:48,000 og Boole er gildi sem er annaðhvort satt eða ósatt, 93 00:05:48,000 --> 00:05:51,000 og hér oftsinnis Boolean tjáning 94 00:05:51,000 --> 00:05:55,000 fara inn í aðstæður, þannig að ef (x ≤ 5), 95 00:05:55,000 --> 00:06:00,000 Jæja, fórum við þegar x = 5, þannig að skilyrði sé að fara að meta til satt. 96 00:06:00,000 --> 00:06:03,000 Og ef það er satt, hvað númerið er undir ástandi 97 00:06:03,000 --> 00:06:08,000 er að fara að meta af tölvunni, þannig að band er að fara að prenta 98 00:06:08,000 --> 00:06:12,000 við hefðbundna framleiðslu, og hugtakið ástand 99 00:06:12,000 --> 00:06:16,000 vísar til hvað sem er inni í sviga í ef yfirlýsingu. 100 00:06:16,000 --> 00:06:20,000 Mundu alla rekstraraðila. 101 00:06:20,000 --> 00:06:26,000 Mundu && það og | | þegar við erum að reyna að sameina 2 eða fleiri skilyrði, 102 00:06:26,000 --> 00:06:30,000 == Ekki = að athuga hvort 2 hlutir eru jafnir. 103 00:06:30,000 --> 00:06:36,000 Mundu að = er fyrir verkefni en == er Boole rekstraraðila. 104 00:06:36,000 --> 00:06:41,000 ≤, ≥ og svo endanleg 2 eru sjálfstætt skýringar. 105 00:06:41,000 --> 00:06:45,000 Almenn endurskoðun á Boolean rökfræði hér. 106 00:06:45,000 --> 00:06:48,000 Og Boolean tjáning eru einnig mikilvæg í lykkjum, 107 00:06:48,000 --> 00:06:50,000 sem við munum fara yfir núna. 108 00:06:50,000 --> 00:06:56,000 Við lærðum um 3 tegundir af lykkjur svo langt í CS50, fyrir, á meðan, og gera á meðan. 109 00:06:56,000 --> 00:06:59,000 Og það er mikilvægt að vita að á meðan í flestum tilfellum 110 00:06:59,000 --> 00:07:02,000 við getum í raun notað hvaða tegund af lykkju yfirleitt 111 00:07:02,000 --> 00:07:06,000 Það eru ákveðnar tegundir af tilgangi eða sameiginleg mynstur 112 00:07:06,000 --> 00:07:09,000 í forritun sem sérstaklega kalla fyrir einn þessara lykkjur 113 00:07:09,000 --> 00:07:13,000 að gera það sem mest duglegur og glæsilegur að kóða það á þann hátt. 114 00:07:13,000 --> 00:07:18,000 Förum yfir hvað hver þessara lykkjur tilhneigingu til að vera nota oftast. 115 00:07:18,000 --> 00:07:21,000 >> Í for lykkju við yfirleitt þegar vita hversu oft við viljum iterate. 116 00:07:21,000 --> 00:07:24,000 Það er það sem við setjum á ástandi. 117 00:07:24,000 --> 00:07:28,000 Því i = 0, i <10, til dæmis. 118 00:07:28,000 --> 00:07:31,000 Við vitum nú þegar að við viljum gera eitthvað 10 sinnum. 119 00:07:31,000 --> 00:07:34,000 Nú, um while lykkju, almennt við ekki endilega 120 00:07:34,000 --> 00:07:36,000 vita hversu oft við viljum að lykkja til að keyra. 121 00:07:36,000 --> 00:07:39,000 En við vitum einhverskonar ástandi sem við viljum það til 122 00:07:39,000 --> 00:07:41,000 alltaf að vera satt eða alltaf að vera falskur. 123 00:07:41,000 --> 00:07:44,000 Til dæmis, er á meðan setja. 124 00:07:44,000 --> 00:07:46,000 Við skulum segja að er Boole breytu. 125 00:07:46,000 --> 00:07:48,000 Þó það er satt að við viljum að kóða til að meta, 126 00:07:48,000 --> 00:07:52,000 svo svolítið meira teygjanlegur, svolítið meira almennt en fyrir lykkju, 127 00:07:52,000 --> 00:07:55,000 en allir í lykkju getur einnig verið breytt í while lykkju. 128 00:07:55,000 --> 00:08:00,000 Að lokum, gera á meðan lykkjur, sem getur verið erfiðustu til að skilja strax, 129 00:08:00,000 --> 00:08:04,000 er oft notuð þegar við viljum meta kóðann fyrst 130 00:08:04,000 --> 00:08:06,000 áður en fyrsta skipti sem við athuga ástand. 131 00:08:06,000 --> 00:08:09,000 A sameiginlegur nota málið fyrir að gera á meðan lykkja 132 00:08:09,000 --> 00:08:12,000 er þegar þú vilt fá notandi inntak, og þú veist að þú vilt spyrja notanda 133 00:08:12,000 --> 00:08:15,000 fyrir hjálpina minnsta kosti einu sinni, en ef þeir gefa þér ekki góða inntak strax 134 00:08:15,000 --> 00:08:18,000 þú vilt halda að spyrja þá þar til þeir gefa þér góða inntak. 135 00:08:18,000 --> 00:08:21,000 Það er algengasta notkun gera á meðan lykkja, 136 00:08:21,000 --> 00:08:23,000 og við skulum líta á the raunverulegur skipulag þessara lykkjur. 137 00:08:23,000 --> 00:08:27,000 Þeir yfirleitt alltaf hafa tilhneigingu til að fylgja þessum mynstrum. 138 00:08:27,000 --> 00:08:30,000 >> Á að lykkja inni þú hefur 3 þætti: 139 00:08:30,000 --> 00:08:35,000 frumstilling, oftast eitthvað eins og int i = 0 þar sem ég er gegn, 140 00:08:35,000 --> 00:08:40,000 ástand, þar sem við viljum að segja keyra þetta fyrir lykkju svo lengi sem þetta ástand enn heldur, 141 00:08:40,000 --> 00:08:44,000 eins og ég <10, og svo að lokum, uppfærslu, sem er hvernig við hækka 142 00:08:44,000 --> 00:08:47,000 Teljarinn breyta á hverjum stað í lykkju. 143 00:08:47,000 --> 00:08:50,000 A sameiginlegur hlutur til að sjá að það er bara i + +, 144 00:08:50,000 --> 00:08:52,000 sem þýðir hækka i um 1 í hvert skipti. 145 00:08:52,000 --> 00:08:55,000 Þú getur líka gert eitthvað eins og i + = 2, 146 00:08:55,000 --> 00:08:58,000 sem þýðir að bæta 2 við i hvert skipti sem þú ferð í gegnum lykkjuna. 147 00:08:58,000 --> 00:09:03,000 Og þá að gera þetta bara átt við kóða sem raunverulega liggur hluti af hliðar. 148 00:09:03,000 --> 00:09:09,000 Og um while lykkju, í þetta sinn við höfum í raun frumstilling utan lykkju, 149 00:09:09,000 --> 00:09:12,000 svo til dæmis, við skulum segja að við erum að reyna að gera slíkt hið sama tegund af lykkju sem ég lýst bara. 150 00:09:12,000 --> 00:09:16,000 Við viljum segja int i = 0 áður en lykkja hefst. 151 00:09:16,000 --> 00:09:20,000 Þá gætum við sagt en i <10 gera þetta, 152 00:09:20,000 --> 00:09:22,000 þannig að sömu blokk af kóða sem áður, 153 00:09:22,000 --> 00:09:26,000 og að þessu sinni að uppfæra hluti af kóða, til dæmis, i + +, 154 00:09:26,000 --> 00:09:29,000 reyndar fer inni í lykkju. 155 00:09:29,000 --> 00:09:33,000 Og að lokum, fyrir að gera á meðan, það er svipað og while lykkju, 156 00:09:33,000 --> 00:09:36,000 en við verðum að muna að kóðinn mun meta þegar 157 00:09:36,000 --> 00:09:40,000 áður en ástand er kannað, svo gerir það miklu meira vit 158 00:09:40,000 --> 00:09:44,000 ef þú horfir á það í röð toppur til botn. 159 00:09:44,000 --> 00:09:49,000 Í gera á meðan lykkja kóðann metur áður en þú horfir jafnvel á meðan ástand, 160 00:09:49,000 --> 00:09:55,000 en a while lykkju, tékka það fyrst. 161 00:09:55,000 --> 00:09:59,000 Yfirlýsingar og breytum. 162 00:09:59,000 --> 00:10:04,000 Þegar við viljum til að búa til nýja breytu sem við viljum fyrst að frumstilla hana. 163 00:10:04,000 --> 00:10:07,000 >> Til dæmis, int Bar Frumstillir breytu bar, 164 00:10:07,000 --> 00:10:10,000 en það þýðir ekki að gefa það a gildi, svo það er þess virði bar núna? 165 00:10:10,000 --> 00:10:12,000 Við vitum það ekki. 166 00:10:12,000 --> 00:10:14,000 Það gæti verið einhver sorp gildi sem var áður í minni þar, 167 00:10:14,000 --> 00:10:16,000 og við viljum ekki að nota þá breytu 168 00:10:16,000 --> 00:10:19,000 þar til við að gefa í raun það gildi, 169 00:10:19,000 --> 00:10:21,000 svo við að lýsa því hér. 170 00:10:21,000 --> 00:10:24,000 Þá erum við að frumstilla það að vera 42 hér á eftir. 171 00:10:24,000 --> 00:10:28,000 Nú, auðvitað vitum við þetta er hægt að gera á einni línu, int Bar = 42. 172 00:10:28,000 --> 00:10:30,000 En bara til að hreinsa margar skref sem eru að fara á, 173 00:10:30,000 --> 00:10:34,000 yfirlýsing og frumstilling eru að gerast sérstaklega hér. 174 00:10:34,000 --> 00:10:38,000 Hún gerist á einu skrefi, og hið næsta, int Baz = Bar + 1, 175 00:10:38,000 --> 00:10:44,000 þessa yfirlýsingu hér að neðan, sem hækkar Baz, svo í lok þessa kóða blokk 176 00:10:44,000 --> 00:10:48,000 Ef við vorum að prenta verðmæti Baz það væri 44 177 00:10:48,000 --> 00:10:52,000 því við að lýsa og frumstilla það að vera 1> Bar, 178 00:10:52,000 --> 00:10:58,000 og þá erum við að hækka það aftur með + +. 179 00:10:58,000 --> 00:11:02,000 Við fórum yfir þetta nokkuð stutta stund, en það er gott að hafa almenna 180 00:11:02,000 --> 00:11:04,000 skilning á því hvað þræði og viðburðir eru. 181 00:11:04,000 --> 00:11:06,000 Við gerðum aðallega þetta í grunni, 182 00:11:06,000 --> 00:11:09,000 svo þú getur hugsa um þræði sem mörgum röð af kóða 183 00:11:09,000 --> 00:11:11,000 í gangi á sama tíma. 184 00:11:11,000 --> 00:11:14,000 Í raun, líklega það er ekki í gangi á sama tíma, 185 00:11:14,000 --> 00:11:17,000 en svona abstractly við getum hugsa um það á þann hátt. 186 00:11:17,000 --> 00:11:20,000 >> Í grunni, til dæmis, við höfðum marga sprites. 187 00:11:20,000 --> 00:11:22,000 Það gæti verið framkvæmd mismunandi kóða á sama tíma. 188 00:11:22,000 --> 00:11:26,000 Ein gæti verið að ganga á meðan hinn er að segja eitthvað 189 00:11:26,000 --> 00:11:29,000 í öðru hluta skjásins. 190 00:11:29,000 --> 00:11:34,000 Viðburðir eru önnur leið til að aðgreina út rökfræði 191 00:11:34,000 --> 00:11:37,000 milli mismunandi þátta kóðanum þínum, 192 00:11:37,000 --> 00:11:40,000 og á grunni sem við gátum til að líkja atburðum með útvarpi, 193 00:11:40,000 --> 00:11:43,000 og það er í raun Þegar ég fæ, ekki þegar ég heyri, 194 00:11:43,000 --> 00:11:47,000 en í raun er það leið til að senda upplýsingar 195 00:11:47,000 --> 00:11:49,000 frá einum Sprite til annars. 196 00:11:49,000 --> 00:11:52,000 Til dæmis, getur þú vilt senda leikinn yfir, 197 00:11:52,000 --> 00:11:56,000 og þegar annar Sprite fær leikinn yfir, 198 00:11:56,000 --> 00:11:58,000 hún svarar á vissan hátt. 199 00:11:58,000 --> 00:12:03,000 Það er mikilvægt líkan til að skilja forritun. 200 00:12:03,000 --> 00:12:07,000 Bara til að fara yfir helstu viku 0, það sem við höfum farið yfir hingað til, 201 00:12:07,000 --> 00:12:10,000 skulum líta á þessa einföldu C program. 202 00:12:10,000 --> 00:12:14,000 Textinn kann að vera svolítið lítið áfram, en ég ætla að fara yfir það mjög fljótt. 203 00:12:14,000 --> 00:12:20,000 Við erum meðal 2 haus skrá efst cs50.h og stdio.h. 204 00:12:20,000 --> 00:12:23,000 Við erum þá að skilgreina fastann takmörk að vera 100. 205 00:12:23,000 --> 00:12:26,000 Við erum þá að innleiða helstu virkni okkar. 206 00:12:26,000 --> 00:12:29,000 Þar sem við ekki nota stjórn lína rifrildi hér við þurfum að setja tómið 207 00:12:29,000 --> 00:12:32,000 sem rök fyrir helstu. 208 00:12:32,000 --> 00:12:38,000 Við sjáum int yfir helstu. Það er aftur gerð, vegna áreturn 0 neðst. 209 00:12:38,000 --> 00:12:41,000 Og við erum að nota CS50 bókasafn virka fá int 210 00:12:41,000 --> 00:12:45,000 að spyrja notanda um inntak og geymum það í breytu X, 211 00:12:45,000 --> 00:12:51,000 svo við að lýsa x yfir, og við frumstilla hana með x = GetInt. 212 00:12:51,000 --> 00:12:53,000 >> Við athuga þá hvort notandinn gaf okkur góða inntak. 213 00:12:53,000 --> 00:12:59,000 Ef það er ≥ LIMIT við viljum skila villu kóða 1 og prenta villu. 214 00:12:59,000 --> 00:13:02,000 Og að lokum, ef notandi hefur gefið okkur gott inntak 215 00:13:02,000 --> 00:13:08,000 við erum að fara að veldi fjölda og prenta út þá niðurstöðu. 216 00:13:08,000 --> 00:13:11,000 Bara til að vera viss um að þeir allir högg heim 217 00:13:11,000 --> 00:13:17,000 þú getur séð merki um mismunandi hluta kóða hér. 218 00:13:17,000 --> 00:13:19,000 Ég nefndi stöðug haus skrá. 219 00:13:19,000 --> 00:13:21,000 Ó, int x. Gakktu úr skugga um að muna það er staðbundin breytu. 220 00:13:21,000 --> 00:13:24,000 Það andstæðum það frá alþjóðlegum breytu, sem við munum tala um 221 00:13:24,000 --> 00:13:27,000 svolítið síðar í endurskoðun fundur, 222 00:13:27,000 --> 00:13:30,000 og við erum að hringja í bókasafn virka printf, 223 00:13:30,000 --> 00:13:34,000 þannig að ef við hefðum ekki ma stdio.h hausaskrár 224 00:13:34,000 --> 00:13:37,000 myndum við ekki vera fær um að hringja printf. 225 00:13:37,000 --> 00:13:42,000 Og ég tel að örin sem fékk skera burt hér bendir til% d, 226 00:13:42,000 --> 00:13:45,000 sem er formatting band í printf. 227 00:13:45,000 --> 00:13:52,000 Það segir prenta út þessa breytu sem tala,% d. 228 00:13:52,000 --> 00:13:58,000 Og það er það í viku 0. 229 00:13:58,000 --> 00:14:06,000 Nú Lucas er að fara að halda áfram. 230 00:14:06,000 --> 00:14:08,000 Hey, krakkar. Ég heiti Lucas. 231 00:14:08,000 --> 00:14:10,000 Ég er sophomore í besta hús á háskólasvæðinu, Mather, 232 00:14:10,000 --> 00:14:14,000 og ég ætla að tala svolítið um viku 1 og 2,1. 233 00:14:14,000 --> 00:14:16,000 [Vika 1 og 2,1!] [Lucas Freitas] 234 00:14:16,000 --> 00:14:19,000 Eins Lexi var að segja, þegar við byrjuðum að þýða kóðann þinn frá grunni í C 235 00:14:19,000 --> 00:14:23,000 eitt af því sem við höfum tekið eftir er að þú getur ekki bara 236 00:14:23,000 --> 00:14:26,000 skrifa kóðann og keyra það með græna fána lengur. 237 00:14:26,000 --> 00:14:30,000 Raunverulega, þú þarft að nota nokkur skref til að gera C program 238 00:14:30,000 --> 00:14:33,000 verða executable skrá. 239 00:14:33,000 --> 00:14:36,000 Í grundvallaratriðum er það sem þú gerir þegar þú ert að skrifa forrit sem 240 00:14:36,000 --> 00:14:40,000 þú þýða hugmynd inn á tungumáli sem þýðanda skil, 241 00:14:40,000 --> 00:14:44,000 þannig að þegar þú ert að skrifa forrit í C 242 00:14:44,000 --> 00:14:47,000 hvað þú ert að gera er í raun að skrifa eitthvað sem þýðanda er að fara að skilja, 243 00:14:47,000 --> 00:14:50,000 og þá þýðandinn er að fara að þýða að kóða 244 00:14:50,000 --> 00:14:53,000 í eitthvað sem tölvan þín skilur. 245 00:14:53,000 --> 00:14:55,000 >> Og málið er, að tölvan þín er í raun mjög heimsk. 246 00:14:55,000 --> 00:14:57,000 Tölvan getur aðeins skilið 0s og 1s, 247 00:14:57,000 --> 00:15:01,000 svo reyndar í fyrstu tölvur fólk forritað venjulega 248 00:15:01,000 --> 00:15:04,000 nota 0s og 1s, en ekki lengur, guði sé lof. 249 00:15:04,000 --> 00:15:07,000 Við þurfum ekki að leggja á minnið röð fyrir 0s og 1s 250 00:15:07,000 --> 00:15:10,000 fyrir for lykkju eða um while lykkju og svo framvegis. 251 00:15:10,000 --> 00:15:13,000 Þess vegna höfum við þýðanda. 252 00:15:13,000 --> 00:15:17,000 Hvað þýðandinn gerir er að það þýðir í rauninni C kóða, 253 00:15:17,000 --> 00:15:21,000 í okkar tilviki, við tungumál sem tölvan mun skilja, 254 00:15:21,000 --> 00:15:25,000 sem er að mótmæla kóða og þýðandi sem við erum að nota 255 00:15:25,000 --> 00:15:30,000 heitir clang, þannig að þetta er í raun tákn fyrir clang. 256 00:15:30,000 --> 00:15:33,000 Þegar þú hefur program, þú þarft að gera 2 hluti. 257 00:15:33,000 --> 00:15:37,000 Fyrst þarftu að setja saman program, og þá þú ert að fara að keyra forritið þitt. 258 00:15:37,000 --> 00:15:41,000 Til að safna saman forrit sem þú hafa a einhver fjöldi af valkostur til að gera það. 259 00:15:41,000 --> 00:15:44,000 Sú fyrsta er að gera clang program.c 260 00:15:44,000 --> 00:15:47,000 á hvaða forrit er nafn program. 261 00:15:47,000 --> 00:15:51,000 Í þessu tilviki getur þú séð að þeir eru bara að segja "Hey, þýða forritið mitt." 262 00:15:51,000 --> 00:15:56,000 Þú ert ekki að segja "Ég vil þetta nafn fyrir áætlun minn" eða eitthvað. 263 00:15:56,000 --> 00:15:58,000 >> Seinni valkosturinn er að gefa nafn til program. 264 00:15:58,000 --> 00:16:02,000 Þú getur sagt clang-o og svo nafnið sem þú vilt 265 00:16:02,000 --> 00:16:06,000 the executable skrá til að vera nefndur sem og þá program.c. 266 00:16:06,000 --> 00:16:11,000 Og þú getur líka gera það forrit, og sjá hvernig í fyrstu 2 tilvikum 267 00:16:11,000 --> 00:16:15,000 Ég setti. C, og í þriðja sem ég hef bara forrit? 268 00:16:15,000 --> 00:16:18,000 Já, í raun að þú ættir ekki að setja. C þegar þú notar gera. 269 00:16:18,000 --> 00:16:22,000 Annars þýðandinn er í raun að fara að æpa á þig. 270 00:16:22,000 --> 00:16:24,000 Og líka, ég veit ekki hvort þið munið, 271 00:16:24,000 --> 00:16:29,000 en a einhver fjöldi af sinnum við einnig notað-lcs50 eða-LM. 272 00:16:29,000 --> 00:16:31,000 Það heitir hlekkur. 273 00:16:31,000 --> 00:16:35,000 Það segir bara þýðanda sem þú munt nota þau bókasöfn rétt þarna, 274 00:16:35,000 --> 00:16:39,000 þannig að ef þú vilt nota cs50.h þú ert í raun að slá 275 00:16:39,000 --> 00:16:43,000 clang program.c-lcs50. 276 00:16:43,000 --> 00:16:45,000 Ef þú gerir það ekki, að þýðandinn er ekki að fara að vita 277 00:16:45,000 --> 00:16:50,000 að þú ert að nota þessar aðgerðir í cs50.h. 278 00:16:50,000 --> 00:16:52,000 Og þegar þú vilt keyra forritið sem þú hefur 2 valkosti. 279 00:16:52,000 --> 00:16:57,000 Ef þú gerðir clang program.c þú ekki gefa nafn á forritinu. 280 00:16:57,000 --> 00:17:01,000 Þú þarft að keyra það með því að nota. / A.out. 281 00:17:01,000 --> 00:17:06,000 A.out er staðlað nafn sem clang gefur program ef þú gefur ekki það nafn. 282 00:17:06,000 --> 00:17:11,000 Annars þú ert að fara að gera. / Forrit ef þú gafst upp nafnið á forritinu, 283 00:17:11,000 --> 00:17:15,000 og líka ef þú did gera program nafn sem áætlunin er að fara að fá 284 00:17:15,000 --> 00:17:23,000 er nú þegar að fara að forrita sama nafn og c skrá. 285 00:17:23,000 --> 00:17:26,000 Þá erum við að tala um tegundir gagna og gögn. 286 00:17:26,000 --> 00:17:31,000 >> Grundvallaratriðum gögn tegundir eru það sama og litlu kassa sem þeir nota 287 00:17:31,000 --> 00:17:35,000 að geyma gildi, þannig að gögn tegundir eru í raun bara eins og Pokémons. 288 00:17:35,000 --> 00:17:39,000 Þeir koma í öllum stærðum og gerðum. 289 00:17:39,000 --> 00:17:43,000 Ég veit ekki hvort að hliðstæðan vit. 290 00:17:43,000 --> 00:17:46,000 Gögnin stærð veltur í raun á vél arkitektúr. 291 00:17:46,000 --> 00:17:49,000 Öll gögn stærðir sem ég ætla að sýna hér 292 00:17:49,000 --> 00:17:53,000 eru í raun fyrir 32-bita vél, sem er um er að ræða tæki okkar, 293 00:17:53,000 --> 00:17:56,000 en ef þú ert í raun kóðun Mac eða í Windows einnig 294 00:17:56,000 --> 00:17:59,000 sennilega þú ert að fara að hafa 64-bita vél, 295 00:17:59,000 --> 00:18:03,000 svo muna að gögn stærðir sem ég ætla að sýna hér 296 00:18:03,000 --> 00:18:06,000 er fyrir 32-bita vél. 297 00:18:06,000 --> 00:18:08,000 Sú fyrsta sem við sáum var int, 298 00:18:08,000 --> 00:18:10,000 sem er frekar einfalt. 299 00:18:10,000 --> 00:18:13,000 Þú notar int að geyma heiltölu. 300 00:18:13,000 --> 00:18:16,000 Við sáum einnig staf, sem char. 301 00:18:16,000 --> 00:18:20,000 Ef þú vilt nota bréf eða lítið tákn sem þú ert líklega að fara að nota bleikju. 302 00:18:20,000 --> 00:18:26,000 A bleikju hefur 1 bæti, sem þýðir 8 bitar, eins og Lexi sagði. 303 00:18:26,000 --> 00:18:31,000 Í grundvallaratriðum höfum við ASCII töflu sem hefur 256 304 00:18:31,000 --> 00:18:34,000 mögulegar samsetningar 0s og 1s, 305 00:18:34,000 --> 00:18:37,000 og svo þegar þú slærð inn bleikju hún er að fara að þýða 306 00:18:37,000 --> 00:18:44,000 eðli að inntak þú tala um að þú ert í ASCII töflunni, eins og Lexi sagði. 307 00:18:44,000 --> 00:18:48,000 Við höfum einnig fljóta, sem við notum til að geyma aukastafi tölur. 308 00:18:48,000 --> 00:18:53,000 Ef þú vilt velja 3,14, til dæmis, þú ert að fara að nota flot 309 00:18:53,000 --> 00:18:55,000 eða tvöfalt sem hefur meiri nákvæmni. 310 00:18:55,000 --> 00:18:57,000 A fljóta hefur 4 bæti. 311 00:18:57,000 --> 00:19:01,000 A tvöfaldur er 8 bæti, þannig eini munurinn er að nákvæmni. 312 00:19:01,000 --> 00:19:04,000 Við höfum líka lengi sem er notað fyrir heiltölur 313 00:19:04,000 --> 00:19:09,000 og þú getur séð fyrir 32-bita vél int og lengi hefur sömu stærð, 314 00:19:09,000 --> 00:19:13,000 þannig að það skiptir í raun ekki skynsamleg að nota fyrir í 32-bita vél. 315 00:19:13,000 --> 00:19:17,000 >> En ef þú ert að nota Mac og 64-bita vél, reyndar fyrir löngu hefur stærð 8, 316 00:19:17,000 --> 00:19:19,000 svo fer það virkilega á arkitektúr. 317 00:19:19,000 --> 00:19:22,000 Fyrir 32-bita vél það ekki gera skilningarvit til að nota fyrir mjög. 318 00:19:22,000 --> 00:19:25,000 Og þá lengi lengi, hins vegar, hefur 8 bæti, 319 00:19:25,000 --> 00:19:30,000 svo það er mjög gott ef þú vilt hafa lengri heiltölu. 320 00:19:30,000 --> 00:19:34,000 Og að lokum, höfum við streng, sem er reyndar a char *, 321 00:19:34,000 --> 00:19:37,000 sem er bendi á char. 322 00:19:37,000 --> 00:19:40,000 Það er mjög auðvelt að hugsa um að stærð af the band er að fara að vera eins og 323 00:19:40,000 --> 00:19:42,000 fjölda stafa sem hægt er að hafa það, 324 00:19:42,000 --> 00:19:45,000 en í raun char * sjálft 325 00:19:45,000 --> 00:19:49,000 hefur stærð bendill til bleikju, sem er 4 bæti. 326 00:19:49,000 --> 00:19:52,000 Stærð á char * er 4 bæti. 327 00:19:52,000 --> 00:19:56,000 Það skiptir ekki máli ef þú ert með lítið orð eða bréf eða eitthvað. 328 00:19:56,000 --> 00:19:58,000 Það er að fara að vera 4 bæti. 329 00:19:58,000 --> 00:20:01,000 Við lærðum líka svolítið um steypu, 330 00:20:01,000 --> 00:20:04,000 Svo eins og þú sérð, ef þú ert til dæmis, forrit sem segir 331 00:20:04,000 --> 00:20:08,000 int x = 3 og svo printf ("% d", x / 2) 332 00:20:08,000 --> 00:20:12,000 gera þú krakkar vita hvað það er að fara að prenta á skjánum? 333 00:20:12,000 --> 00:20:14,000 >> Einhver? >> [Nemendur] 2. 334 00:20:14,000 --> 00:20:16,000 1. >> 1, já. 335 00:20:16,000 --> 00:20:20,000 Þegar þú gerir 3/2 og það er að fara að fá 1,5, 336 00:20:20,000 --> 00:20:24,000 en þar sem við erum með heiltölu og það er að fara að hunsa aukastaf hluta, 337 00:20:24,000 --> 00:20:26,000 og þú ert að fara að hafa 1. 338 00:20:26,000 --> 00:20:29,000 Ef þú vilt ekki að gerast það sem þú getur gert, til dæmis, 339 00:20:29,000 --> 00:20:33,000 er að lýsa yfir fljóta y = x. 340 00:20:33,000 --> 00:20:40,000 Þá x sem nota til að vera 3 er nú að fara að vera 3.000 í y. 341 00:20:40,000 --> 00:20:44,000 Og þá er hægt að prenta y / 2. 342 00:20:44,000 --> 00:20:50,000 Reyndar ætti ég að hafa 2. þarna. 343 00:20:50,000 --> 00:20:55,000 Það er að fara að gera 3.00/2.00, 344 00:20:55,000 --> 00:20:58,000 og þú ert að fara að fá 1,5. 345 00:20:58,000 --> 00:21:06,000 Og við höfum þetta 0,2 f bara að biðja um 2 aukastaf eininga í aukastaf hluta. 346 00:21:06,000 --> 00:21:12,000 Ef þú ert með 0,3 f það er að fara að hafa í raun 1.500. 347 00:21:12,000 --> 00:21:16,000 Ef það er 2 það er að fara að vera 1,50. 348 00:21:16,000 --> 00:21:18,000 Við höfum einnig þetta mál hér. 349 00:21:18,000 --> 00:21:22,000 Ef þú fljóta x = 3.14 og þá er printf x 350 00:21:22,000 --> 00:21:24,000 þú ert að fara að fá 3.14. 351 00:21:24,000 --> 00:21:29,000 Og ef þú gerir x = int af X, 352 00:21:29,000 --> 00:21:34,000 sem þýðir skemmtun x og heiltala og þú prentað x nú 353 00:21:34,000 --> 00:21:36,000 þú ert að fara að hafa 3,00. 354 00:21:36,000 --> 00:21:38,000 Er það skynsamleg? 355 00:21:38,000 --> 00:21:41,000 Þar sem þú ert fyrst að meðhöndla X sem heiltölu, þannig að þú ert að hunsa aukastaf hluta, 356 00:21:41,000 --> 00:21:45,000 og þá þú ert prentun x. 357 00:21:45,000 --> 00:21:47,000 Og að lokum, þú getur líka gert þetta, 358 00:21:47,000 --> 00:21:52,000 int x = 65, og þá lýsa bleikju c = x, 359 00:21:52,000 --> 00:21:56,000 og svo ef þú prentað C þú ert í raun að fara að fá 360 00:21:56,000 --> 00:21:59,000 A, Svo í rauninni hvað þú ert að gera hér 361 00:21:59,000 --> 00:22:02,000 er það þýðing á heiltölu í eðli, 362 00:22:02,000 --> 00:22:05,000 bara eins og ASCII Table gerir. 363 00:22:05,000 --> 00:22:08,000 Við ræddum einnig um rekstraraðila stærðfræði. 364 00:22:08,000 --> 00:22:14,000 Flest af þeim eru ansi einfalt, svo +, -, *, /, 365 00:22:14,000 --> 00:22:20,000 og einnig við ræddum um unga fólkið, sem er afgangurinn af skiptingu 2 númer. 366 00:22:20,000 --> 00:22:23,000 Ef þú hefur 10% 3, til dæmis, 367 00:22:23,000 --> 00:22:27,000 það þýðir skipta 10 með 3, og hvað er afgangurinn? 368 00:22:27,000 --> 00:22:30,000 Það er að fara að vera 1, þannig að það er í raun mjög gagnlegt fyrir a einhver fjöldi af the programs. 369 00:22:30,000 --> 00:22:38,000 Fyrir Vigenère og Caesar Ég er nokkuð viss um að allir sem þú krakkar nota unga fólkið. 370 00:22:38,000 --> 00:22:43,000 Um rekstraraðila stærðfræði, að vera mjög varkár þegar sameina * og /. 371 00:22:43,000 --> 00:22:48,000 >> Til dæmis, ef þú gerir (3/2) * 2 hvað ertu að fara að fá? 372 00:22:48,000 --> 00:22:50,000 [Nemendur] 2. 373 00:22:50,000 --> 00:22:54,000 Já, 2, vegna þess að 3/2 er að fara að vera 1,5, 374 00:22:54,000 --> 00:22:57,000 en þar sem þú ert að gera starfsemi á milli 2 heiltölur 375 00:22:57,000 --> 00:22:59,000 þú ert í raun bara að fara að huga að 1, 376 00:22:59,000 --> 00:23:03,000 og svo 1 * 2 er að fara að vera 2, svo vera mjög varkár 377 00:23:03,000 --> 00:23:07,000 hvenær aðgerð tölur með heiltölur þar 378 00:23:07,000 --> 00:23:12,000 þú gætir fengið að 2 = 3, í því tilviki. 379 00:23:12,000 --> 00:23:14,000 Og einnig að vera mjög varkár um forgang. 380 00:23:14,000 --> 00:23:21,000 Þú ættir venjulega að nota sviga til að vera viss um að þú vitir hvað þú ert að gera. 381 00:23:21,000 --> 00:23:27,000 Nokkrir gagnlegir flýtivísar, auðvitað, er einn i + + eða i + = 1 382 00:23:27,000 --> 00:23:30,000 eða með því að nota + =. 383 00:23:30,000 --> 00:23:34,000 Það er það sama og að gera i = i + 1. 384 00:23:34,000 --> 00:23:39,000 Þú getur einnig gert i - eða i - = 1, 385 00:23:39,000 --> 00:23:42,000 sem er það sama og i = i -1, 386 00:23:42,000 --> 00:23:46,000 eitthvað sem þú krakkar nota mikið í fyrir lykkjur, að minnsta kosti. 387 00:23:46,000 --> 00:23:52,000 Einnig, til *, ef þú notar * = og ef þú gerir það, til dæmis, 388 00:23:52,000 --> 00:23:57,000 i * = 2 er það sama og að segja að ég = i * 2, 389 00:23:57,000 --> 00:23:59,000 og það sama um skiptingu. 390 00:23:59,000 --> 00:24:08,000 Ef þú gerir i / = 2 það er það sama og i = i / 2. 391 00:24:08,000 --> 00:24:10,000 >> Nú um aðgerðir. 392 00:24:10,000 --> 00:24:13,000 Þið krakkar læra að aðgerðir eru mjög góð stefna að vista númer 393 00:24:13,000 --> 00:24:16,000 meðan þú ert að forrita, svo ef þú vilt að framkvæma sama verkefni 394 00:24:16,000 --> 00:24:20,000 í númerið aftur og aftur, sennilega þú vilt nota valkost 395 00:24:20,000 --> 00:24:25,000 bara svo að þú þarft ekki að afrita og líma kóðann aftur og aftur. 396 00:24:25,000 --> 00:24:28,000 Reyndar, helstu er fall, og þegar ég sýna þér snið aðgerð 397 00:24:28,000 --> 00:24:32,000 þú ert að fara að sjá að það er nokkuð augljóst. 398 00:24:32,000 --> 00:24:35,000 Við notum einnig aðgerðir frá sumum bókasöfnum, 399 00:24:35,000 --> 00:24:39,000 til dæmis, printf, GetIn, sem er frá CS50 bókasafn, 400 00:24:39,000 --> 00:24:43,000 og aðrar aðgerðir eins toupper. 401 00:24:43,000 --> 00:24:46,000 Allar þessar aðgerðir eru í raun til framkvæmda í öðrum bókasöfnum, 402 00:24:46,000 --> 00:24:49,000 og þegar þú setur þær tether skrá í upphafi forritinu 403 00:24:49,000 --> 00:24:53,000 þú ert að segja getur þú vinsamlegast gefið mér kóðann fyrir þeim aðgerðum 404 00:24:53,000 --> 00:24:57,000 þannig að ég þarf ekki að koma þeim með mér? 405 00:24:57,000 --> 00:25:00,000 Og þú getur líka skrifað eigin starfsemi þína, þannig að þegar þú byrjar að forritun 406 00:25:00,000 --> 00:25:04,000 þér grein fyrir að bókasöfn ekki allar aðgerðir sem þú þarft. 407 00:25:04,000 --> 00:25:10,000 Fyrir síðustu pset, td skrifaði við drögum, Scramble, og útlit, 408 00:25:10,000 --> 00:25:13,000 og það er mjög, mjög mikilvægt að vera fær um að skrifa virka 409 00:25:13,000 --> 00:25:17,000 vegna þess að þeir eru gagnlegar, og við notum þær allra tíma í forritun, 410 00:25:17,000 --> 00:25:19,000 og það sparar mikið af kóða. 411 00:25:19,000 --> 00:25:21,000 The snið af aðgerð er þetta. 412 00:25:21,000 --> 00:25:24,000 Við höfum aftur gerð í upphafi. Hvað er aftur gerð? 413 00:25:24,000 --> 00:25:27,000 Það er bara þegar aðgerð er að fara að koma aftur. 414 00:25:27,000 --> 00:25:29,000 Ef þú ert með virka, td þáttatilraun, 415 00:25:29,000 --> 00:25:31,000 sem er að fara að reikna út a aðfeldi heiltala, 416 00:25:31,000 --> 00:25:34,000 líklega það er að fara að skila heiltölu líka. 417 00:25:34,000 --> 00:25:37,000 Þá aftur tegund er að fara að vera int. 418 00:25:37,000 --> 00:25:41,000 Printf hefur í raun tegund aftur tóm 419 00:25:41,000 --> 00:25:43,000 vegna þess að þú ert ekki aftur neitt. 420 00:25:43,000 --> 00:25:45,000 Þú ert bara að prenta það á skjáinn 421 00:25:45,000 --> 00:25:48,000 og hætta að virka eftir. 422 00:25:48,000 --> 00:25:51,000 Síðan sem þú hefur nafnið á aðgerð sem þú getur valið. 423 00:25:51,000 --> 00:25:55,000 Þú ættir að vera svolítið sanngjarn, eins og ekki velja nafn eins og xyz 424 00:25:55,000 --> 00:25:58,000 eða eins x2f. 425 00:25:58,000 --> 00:26:02,000 Reyndu að gera upp nafn sem er vit í. 426 00:26:02,000 --> 00:26:04,000 >> Til dæmis, ef það er þáttatilraun, segja þáttatilraun. 427 00:26:04,000 --> 00:26:08,000 Ef það er aðgerð sem er að fara að draga eitthvað, nafn það draga. 428 00:26:08,000 --> 00:26:11,000 Og þá höfum við breytur, sem einnig kallast rök, 429 00:26:11,000 --> 00:26:14,000 sem eru eins og úrræði sem virka þarf 430 00:26:14,000 --> 00:26:17,000 frá kóða til að framkvæma verkefni hennar. 431 00:26:17,000 --> 00:26:20,000 Ef þú vilt reikna aðfeldi tölu 432 00:26:20,000 --> 00:26:23,000 sennilega þú þarft að hafa númer til að reikna þáttatilraun. 433 00:26:23,000 --> 00:26:27,000 Ein rök sem þú ert að fara að hafa er númerið sjálft. 434 00:26:27,000 --> 00:26:31,000 Og þá er að fara að gera eitthvað og skila gildi í lok 435 00:26:31,000 --> 00:26:35,000 nema það er ógilt virka. 436 00:26:35,000 --> 00:26:37,000 Við skulum sjá dæmi. 437 00:26:37,000 --> 00:26:40,000 Ef ég vil að skrifa fall sem sums allar tölur í fjölda heiltalna, 438 00:26:40,000 --> 00:26:43,000 fyrst af öllu, aftur tegund er að fara að vera int 439 00:26:43,000 --> 00:26:46,000 vegna þess að ég er með fjölbreytta heiltölur. 440 00:26:46,000 --> 00:26:51,000 Og þá er ég að fara að hafa fallið nafn eins sumArray, 441 00:26:51,000 --> 00:26:54,000 og þá er að fara að taka array sig að int nums, 442 00:26:54,000 --> 00:26:58,000 og þá lengd fylkisins þannig að ég veit hve mörg númer sem ég þarf að leggja. 443 00:26:58,000 --> 00:27:02,000 Og ég þarf að frumstilla breytilega kallast summa, til dæmis til 0, 444 00:27:02,000 --> 00:27:08,000 og í hvert skipti sem ég sé stak í fylki sem ég ætti að bæta því við fjárhæð, þannig að ég gerði fyrir lykkju. 445 00:27:08,000 --> 00:27:15,000 Rétt eins og Lexi sagði, þú int i = 0, i 00:27:20,000 Og fyrir hvert frumefni í fylki ég gerði summa + = nums [i], 447 00:27:20,000 --> 00:27:24,000 og þá er ég aftur summu, svo það er mjög einfalt, og það sparar mikið af kóða 448 00:27:24,000 --> 00:27:28,000 Ef þú ert að nota þessa aðgerð a einhver fjöldi af sinnum. 449 00:27:28,000 --> 00:27:32,000 Síðan tókum við að líta á aðstæður. 450 00:27:32,000 --> 00:27:38,000 Við höfum ef annað, og annað hvort. 451 00:27:38,000 --> 00:27:42,000 Við skulum sjá hvað er munurinn á milli þeirra. 452 00:27:42,000 --> 00:27:45,000 Taka a líta á þessar 2 númerum. Hver er munurinn á milli þeirra? 453 00:27:45,000 --> 00:27:49,000 Sú fyrsta er-grundvallaratriðum númerin vilt þú að segja 454 00:27:49,000 --> 00:27:51,000 Ef tala er +, -, eða 0. 455 00:27:51,000 --> 00:27:55,000 Sú fyrsta segir ef það er> 0 þá er það jákvætt. 456 00:27:55,000 --> 00:28:00,000 Ef það er = að 0 þá er það 0, og ef það er <0 þá er það neikvætt. 457 00:28:00,000 --> 00:28:04,000 >> Og hitt er að gera ef annað hvort, annars. 458 00:28:04,000 --> 00:28:07,000 Munurinn á milli tveggja er að þessi maður er í raun að fara að 459 00:28:07,000 --> 00:28:13,000 athuga hvort> 0, <0 eða = 0 þrisvar sinnum, 460 00:28:13,000 --> 00:28:17,000 þannig að ef þú hefur númer 2 td það er að fara að koma hingað og segja 461 00:28:17,000 --> 00:28:21,000 if (x> 0), og það er að fara að segja já, svo ég prenta jákvæð. 462 00:28:21,000 --> 00:28:25,000 En jafnvel þó að ég veit að það er> 0 og það er ekki að fara að vera 0 eða <0 463 00:28:25,000 --> 00:28:29,000 Ég er samt að fara að gera það 0, það er <0, 464 00:28:29,000 --> 00:28:33,000 þannig að ég er í raun að fara innan IFS að ég þyrfti ekki að 465 00:28:33,000 --> 00:28:38,000 vegna þess að ég veit nú þegar að það er ekki að fara að uppfylla einhverjar af þessum skilyrðum. 466 00:28:38,000 --> 00:28:41,000 Ég get notað ef annað hvort, annars yfirlýsingu. 467 00:28:41,000 --> 00:28:45,000 Það segir í rauninni ef x = 0 Ég prenta jákvæð. 468 00:28:45,000 --> 00:28:48,000 Ef það er ekki, ég ætla að einnig að prófa þetta. 469 00:28:48,000 --> 00:28:51,000 Ef það er 2 ég ætla að gera þetta. 470 00:28:51,000 --> 00:28:54,000 Í grundvallaratriðum ef ég hefði x = 2 þú vilt segja 471 00:28:54,000 --> 00:28:57,000 if (x> 0), já, svo prenta þetta. 472 00:28:57,000 --> 00:29:00,000 Nú þegar ég veit að það er> 0 og að það fullnægi kröfum fyrst ef 473 00:29:00,000 --> 00:29:02,000 Ég ætla ekki einu sinni að fara að keyra þennan kóða. 474 00:29:02,000 --> 00:29:09,000 Kóðinn keyrir hraðar, reyndar, 3 sinnum hraðar ef þú notar þetta. 475 00:29:09,000 --> 00:29:11,000 Við lærðum líka um og og eða. 476 00:29:11,000 --> 00:29:15,000 Ég ætla ekki að fara í gegnum þetta vegna þess að Lexi þegar talað um þá. 477 00:29:15,000 --> 00:29:17,000 Það er bara && og | | rekstraraðila. 478 00:29:17,000 --> 00:29:21,000 >> Það eina sem ég segi er að vera varkár þegar þú ert 3 skilyrði. 479 00:29:21,000 --> 00:29:24,000 Nota sviga því það er mjög ruglingslegt þegar þú ert með ástand 480 00:29:24,000 --> 00:29:27,000 og annað eða annað. 481 00:29:27,000 --> 00:29:30,000 Nota sviga bara til að vera viss um að skilyrði þín skynsamleg 482 00:29:30,000 --> 00:29:34,000 vegna þess að í því tilfelli, til dæmis, getur þú ímyndað þér að 483 00:29:34,000 --> 00:29:38,000 það gæti verið fyrsta skilyrði og einn eða annan 484 00:29:38,000 --> 00:29:41,000 eða hafa 2 skilyrði sameina í og 485 00:29:41,000 --> 00:29:45,000 eða þriðji, svo bara að vera varkár. 486 00:29:45,000 --> 00:29:48,000 Og að lokum, talaði við um rofa. 487 00:29:48,000 --> 00:29:53,000 A rofi er mjög gagnlegt þegar þú ert með breytu. 488 00:29:53,000 --> 00:29:55,000 Við skulum segja að þú ert með breytu eins n 489 00:29:55,000 --> 00:29:59,000 sem geta verið 0, 1 eða 2, og fyrir hvert af þessum tilfellum 490 00:29:59,000 --> 00:30:01,000 þú ert að fara að framkvæma verkefni. 491 00:30:01,000 --> 00:30:04,000 Það má segja að kveikja á breytu, og það bendir til þess að 492 00:30:04,000 --> 00:30:08,000 gildið er þá eins gildi1 ég ætla að gera þetta, 493 00:30:08,000 --> 00:30:12,000 og þá skal ég brjóta, sem þýðir að ég ætla ekki að fara að horfa á eitthvað af öðrum tilvikum 494 00:30:12,000 --> 00:30:15,000 vegna þess að við ánægð þegar þessi mál 495 00:30:15,000 --> 00:30:20,000 og þá gildi2 og svo framvegis, og ég líka með sjálfgefna rofi. 496 00:30:20,000 --> 00:30:24,000 Það þýðir að ef það er ekki uppfylla eitthvað af þeim málum sem ég hafði 497 00:30:24,000 --> 00:30:29,000 að ég ætla að gera eitthvað annað, en það er valkvætt. 498 00:30:29,000 --> 00:30:36,000 Það er allt fyrir mig. Nú skulum hafa Tommy. 499 00:30:36,000 --> 00:30:41,000 Allt í lagi, þetta er að fara að vera Vika 3-ish. 500 00:30:41,000 --> 00:30:45,000 Þessir ert sumir af the efni sem við munum vera nær, Crypto, umfang, fylki, et cetera. 501 00:30:45,000 --> 00:30:49,000 Just a fljótur orð á dulritunarstjórneiningunni. Við erum ekki að fara að negla þetta heimili. 502 00:30:49,000 --> 00:30:52,000 >> Við gerðum þetta í pset 2, en prófið að tryggja að þú veist muninn 503 00:30:52,000 --> 00:30:54,000 milli Caesar dulmál og Vigenère dulmáli, 504 00:30:54,000 --> 00:30:57,000 hvernig bæði þeim dulmál vinna og hvað það er að dulkóða 505 00:30:57,000 --> 00:30:59,000 og hallmæla texta með þessar 2 veikar. 506 00:30:59,000 --> 00:31:03,000 Mundu að Caesar dulmál snýst einfaldlega hvern staf með sömu upphæð, 507 00:31:03,000 --> 00:31:06,000 að tryggja að þú unga fólkið með fjölda af bréfum í stafrófinu. 508 00:31:06,000 --> 00:31:09,000 Og Vigenère dulmál, hins vegar, snýst hvern staf 509 00:31:09,000 --> 00:31:12,000 með mismunandi magni, svo frekar en að segja 510 00:31:12,000 --> 00:31:15,000 hvert eðli snúið um 3 Vigenère birtir hvern staf 511 00:31:15,000 --> 00:31:17,000 með mismunandi upphæð eftir því sumir leitarorð 512 00:31:17,000 --> 00:31:20,000 þar sem hver stafur í leitarorð er nokkur mismunandi magn 513 00:31:20,000 --> 00:31:26,000 að snúa skýra textann með. 514 00:31:26,000 --> 00:31:28,000 Við skulum fyrst tala um mismunandi umfang. 515 00:31:28,000 --> 00:31:30,000 Það eru 2 mismunandi gerðir af breytum. 516 00:31:30,000 --> 00:31:33,000 Við höfum staðbundnum breytur, og þær eru að fara að vera skilgreind 517 00:31:33,000 --> 00:31:36,000 utan helstu eða utan hvaða aðgerð eða blokk, 518 00:31:36,000 --> 00:31:39,000 og þeir munu vera aðgengilegar hvar sem er í forritinu. 519 00:31:39,000 --> 00:31:41,000 Ef þú ert með virka og sem virka er meðan lykkja 520 00:31:41,000 --> 00:31:44,000 stóra Global breyta er aðgengileg alls staðar. 521 00:31:44,000 --> 00:31:48,000 A sveitarfélaga breyta, hins vegar, er scoped á stað þar sem það er skilgreint. 522 00:31:48,000 --> 00:31:53,000 >> Ef þú ert með virka hér, til dæmis höfum við þetta fall g, 523 00:31:53,000 --> 00:31:56,000 og inni g er breytilegt hér kallað y, 524 00:31:56,000 --> 00:31:58,000 og það þýðir að þetta er staðbundin breytu. 525 00:31:58,000 --> 00:32:00,000 Jafnvel þó að þessi breyta er kallað Y 526 00:32:00,000 --> 00:32:03,000 og þessi breyta er kallað Y þessar 2 aðgerðir 527 00:32:03,000 --> 00:32:06,000 hef ekki hugmynd um hvað staðbundnar breytur hvers annars eru. 528 00:32:06,000 --> 00:32:10,000 Á hinn bóginn, allt hér við segjum int x = 5, 529 00:32:10,000 --> 00:32:12,000 og þetta er utan gildissviðs aðgerð. 530 00:32:12,000 --> 00:32:16,000 Það er utan við helstu, þannig að þetta er alþjóðlegt breytu. 531 00:32:16,000 --> 00:32:20,000 Það þýðir að innan þessar 2 virka þegar ég segi x - eða x + + 532 00:32:20,000 --> 00:32:26,000 Ég er að opna sama x þar þessa Y og þessi y eru mismunandi breytur. 533 00:32:26,000 --> 00:32:30,000 Það er munurinn á alþjóðlegum breytu og staðbundin breytu. 534 00:32:30,000 --> 00:32:33,000 Eins og langt eins og hönnun varðar, stundum er það líklega betri hugmynd 535 00:32:33,000 --> 00:32:37,000 að halda breytur sveitarfélaga þegar þú getur hugsanlega 536 00:32:37,000 --> 00:32:39,000 þar með fullt af alþjóðlegum breytur er hægt að fá mjög ruglingslegt. 537 00:32:39,000 --> 00:32:42,000 Ef þú ert með fullt af störfum allra breyta sama 538 00:32:42,000 --> 00:32:45,000 þú gætir gleyma hvað ef þessi aðgerð óvart breytir þetta alheims, 539 00:32:45,000 --> 00:32:47,000 og þetta önnur aðgerð veit ekki um það, 540 00:32:47,000 --> 00:32:50,000 og það er að fá mjög ruglingslegt eins og þú færð meiri kóða. 541 00:32:50,000 --> 00:32:53,000 Gæsla breytur sveitarfélaga þegar þú getur hugsanlega 542 00:32:53,000 --> 00:32:56,000 er bara góð hönnun. 543 00:32:56,000 --> 00:33:00,000 Fylki, muna, er einfaldlega listi yfir þætti af sömu gerð. 544 00:33:00,000 --> 00:33:04,000 Inni í CI geta ekki lista eins og 1, 2,0, halló. 545 00:33:04,000 --> 00:33:06,000 Við getum bara ekki gert það. 546 00:33:06,000 --> 00:33:11,000 >> Þegar við lýsa fylki í C alla þætti að vera af sömu gerð. 547 00:33:11,000 --> 00:33:14,000 Hér ég hef fjölbreytta 3 heiltölur. 548 00:33:14,000 --> 00:33:18,000 Hér ég hef lengd fylkisins, en ef ég ætla bara að lýsa henni í setningafræði 549 00:33:18,000 --> 00:33:21,000 þar sem ég tilgreina hvaða alla þá þætti er ég ekki tæknilega þörf á þessari 3. 550 00:33:21,000 --> 00:33:25,000 The þýðanda er sviði nógur til að reikna út hversu stór fylki ætti að vera. 551 00:33:25,000 --> 00:33:28,000 Nú þegar ég þarf að fá eða setja the gildi af fylki 552 00:33:28,000 --> 00:33:30,000 þetta er setningafræði til að gera það. 553 00:33:30,000 --> 00:33:33,000 Þetta mun í raun breyta seinni þáttur í fylki því, muna, 554 00:33:33,000 --> 00:33:36,000 númer byrjar á 0, ekki 1. 555 00:33:36,000 --> 00:33:42,000 Ef ég vil lesa þessi gildi sem ég get sagt eitthvað eins og int x = array [1]. 556 00:33:42,000 --> 00:33:44,000 Eða ef mig langar til að setja þessi gildi, eins og ég er að gera hér, 557 00:33:44,000 --> 00:33:47,000 Ég get sagt array [1] = 4. 558 00:33:47,000 --> 00:33:50,000 Þessi tími aðgangur þætti með vísitölu þeirra 559 00:33:50,000 --> 00:33:52,000 eða stöðu þeirra eða hvar sem þeir eru í fylki, 560 00:33:52,000 --> 00:33:57,000 og að skráning hefst kl 0. 561 00:33:57,000 --> 00:34:00,000 Við getum einnig hafa fylki af fylki, 562 00:34:00,000 --> 00:34:03,000 og þetta er kallað multi-víddar array. 563 00:34:03,000 --> 00:34:05,000 Þegar við höfum multi-víddar array 564 00:34:05,000 --> 00:34:07,000 sem þýðir að við getum haft eitthvað eins og raðir og dálka, 565 00:34:07,000 --> 00:34:11,000 og þetta er bara ein leið til að visualizing þetta eða hugsa um það. 566 00:34:11,000 --> 00:34:14,000 Þegar ég er með multi-víddar array sem þýðir að ég ætla að byrja að þurfa 567 00:34:14,000 --> 00:34:17,000 meira en 1 vísitölu vegna þess að ef ég hef rist 568 00:34:17,000 --> 00:34:19,000 bara segja hvað röð þú ert í er ekki að gefa okkur tala. 569 00:34:19,000 --> 00:34:22,000 Það er í raun bara að fara að gefa okkur lista yfir númer. 570 00:34:22,000 --> 00:34:25,000 Við skulum segja að ég hef þetta fylki hérna. 571 00:34:25,000 --> 00:34:30,000 Ég fylki heitir rist, og ég er að segja 2 línur það og 3 dálka, 572 00:34:30,000 --> 00:34:32,000 og svo er þetta ein leið til að visualizing það. 573 00:34:32,000 --> 00:34:37,000 Þegar ég segi að ég vil fá hluti á [1] [2] 574 00:34:37,000 --> 00:34:41,000 sem þýðir að vegna þess að þetta eru línur fyrst og síðan dálka 575 00:34:41,000 --> 00:34:44,000 Ég ætla að hoppa til róa 1 þar sem ég sagði 1. 576 00:34:44,000 --> 00:34:49,000 >> Og ég ætla að koma hérna til dálki 2, og ég ætla að fá gildið 6. 577 00:34:49,000 --> 00:34:51,000 Skynsamleg? 578 00:34:51,000 --> 00:34:55,000 Multi-víddar fylki, muna, er tæknilega bara fylki af fylki. 579 00:34:55,000 --> 00:34:57,000 Við getum haft fylki af fylki af fylki. 580 00:34:57,000 --> 00:35:00,000 Við getum haldið áfram, en í raun ein leið til að hugsa um 581 00:35:00,000 --> 00:35:03,000 hvernig þetta er sett fram og hvað er að gerast er að sjón það 582 00:35:03,000 --> 00:35:09,000 í töflu eins og þessa. 583 00:35:09,000 --> 00:35:12,000 Þegar við framhjá fylki til að virka, þá eru þeir að fara að haga sér 584 00:35:12,000 --> 00:35:16,000 svolítið öðruvísi en þegar við framhjá reglulega breytum við virka 585 00:35:16,000 --> 00:35:18,000 eins standast int eða fljóta. 586 00:35:18,000 --> 00:35:21,000 Þegar við framhjá í int eða bleikju eða einhverju af þessum gögnum gerðum 587 00:35:21,000 --> 00:35:24,000 fórum bara að líta á hvort aðgerðin breytir 588 00:35:24,000 --> 00:35:28,000 gildi þeirrar breytu sem breyting er ekki að fara að breiða upp 589 00:35:28,000 --> 00:35:32,000 til að kalla virka. 590 00:35:32,000 --> 00:35:35,000 Með fjölda, hins vegar, sem mun gerast. 591 00:35:35,000 --> 00:35:39,000 Ef ég fara í fjölda að einhverju virka og að virka breytist sum atriði, 592 00:35:39,000 --> 00:35:43,000 þegar ég kem aftur upp í aðgerð sem heitir það 593 00:35:43,000 --> 00:35:47,000 array minn er nú að fara að vera öðruvísi, og orðaforða til að 594 00:35:47,000 --> 00:35:50,000 fylki er eru liðin með tilvísun, eins og við munum sjá síðar. 595 00:35:50,000 --> 00:35:53,000 Þetta tengist því hvernig ábendingum vinnu, þar sem þessi helstu tegundir gagna, 596 00:35:53,000 --> 00:35:55,000 á hinn bóginn, eru samþykkt af gildi. 597 00:35:55,000 --> 00:35:59,000 >> Við getum hugsað sem svo að gera afrit af einhverju breytu og þá liggur í eintak. 598 00:35:59,000 --> 00:36:01,000 Það skiptir ekki máli hvað við gerum við þá breytu. 599 00:36:01,000 --> 00:36:06,000 Starf aðgerð mun ekki vera kunnugt um að það var breytt. 600 00:36:06,000 --> 00:36:10,000 Fylki er bara svolítið öðruvísi í þeim efnum. 601 00:36:10,000 --> 00:36:13,000 Til dæmis, eins og við sáum bara, helstu er einfaldlega fall 602 00:36:13,000 --> 00:36:15,000 sem getur tekið í 2 rök. 603 00:36:15,000 --> 00:36:20,000 Fyrsta rök að helsta hlutverk er argc, eða fjölda rök, 604 00:36:20,000 --> 00:36:23,000 og seinni rök heitir argv, 605 00:36:23,000 --> 00:36:27,000 og þeir eru í raun gildi þeirra rök. 606 00:36:27,000 --> 00:36:30,000 Við skulum segja að ég er með forrit sem heitir this.c, 607 00:36:30,000 --> 00:36:34,000 og ég segi gera þetta, og ég ætla að keyra þetta á skipanalínunni. 608 00:36:34,000 --> 00:36:38,000 Nú til að fara í sumum rökum að forrita minn heitir þetta, 609 00:36:38,000 --> 00:36:42,000 Ég gæti sagt eitthvað eins og. / Þetta er cs 50. 610 00:36:42,000 --> 00:36:45,000 Þetta er það sem við ímyndað Davíð að gera á hverjum degi í flugstöðinni. 611 00:36:45,000 --> 00:36:48,000 En nú er helsta hlutverk innan brautarinnar 612 00:36:48,000 --> 00:36:52,000 hefur þessi gildi, svo argc 4. 613 00:36:52,000 --> 00:36:56,000 Það gæti verið svolítið ruglingslegt því virkilega að við erum aðeins á ferð fyrir er cs 50. 614 00:36:56,000 --> 00:36:58,000 Það er einungis 3. 615 00:36:58,000 --> 00:37:02,000 En mundu að fyrsta þáttur argv eða fyrsta rifrildi 616 00:37:02,000 --> 00:37:05,000 er nafn fallsins sig. 617 00:37:05,000 --> 00:37:07,190 Svo þýðir að við höfum 4 hluti hér, 618 00:37:07,190 --> 00:37:10,530 og fyrsti þátturinn er að fara að vera. / þetta. 619 00:37:10,530 --> 00:37:12,970 Og þetta mun vera fulltrúa sem streng. 620 00:37:12,970 --> 00:37:18,590 Þá eftir þættir eru það sem við slegið inn eftir nafni áætlunarinnar. 621 00:37:18,590 --> 00:37:22,720 Svo bara sem er til hliðar, eins og við sáum líklega í pset 2, 622 00:37:22,720 --> 00:37:28,780 muna að band 50 er ≠ tölunnar 50. 623 00:37:28,780 --> 00:37:32,520 Þannig að við getum ekki sagt eitthvað eins og: "int x = argv 3. ' 624 00:37:32,520 --> 00:37:36,470 >> Það er bara ekki að fara að gera skilningarvit, því þetta er band, og þetta er heiltala. 625 00:37:36,470 --> 00:37:38,510 Svo ef þú vilt að umbreyta á milli 2, mundu, við erum að fara að 626 00:37:38,510 --> 00:37:40,810 hafa þetta galdur virka kallast atoi. 627 00:37:40,810 --> 00:37:46,270 Sem tekur streng og skilar heiltölu fulltrúa innan strengsins. 628 00:37:46,270 --> 00:37:48,360 Svo það er auðvelt mistök að gera á spurningakeppni, 629 00:37:48,360 --> 00:37:51,590 bara að hugsa að þetta mun sjálfkrafa rétta tegund. 630 00:37:51,590 --> 00:37:53,860 En bara veit að þetta mun alltaf vera strengir 631 00:37:53,860 --> 00:38:00,920 jafnvel ef strengurinn inniheldur aðeins heiltölu eða staf eða fljóta. 632 00:38:00,920 --> 00:38:03,380 Svo nú skulum við tala um að keyra tíma. 633 00:38:03,380 --> 00:38:06,700 Þegar við höfum öll þessi reiknirit sem gera allt þetta brjálaður hluti, 634 00:38:06,700 --> 00:38:11,580 það verður mjög gott að spyrja: "Hversu lengi gera þeir taka?" 635 00:38:11,580 --> 00:38:15,500 Við fulltrúar að með eitthvað sem kallast asymptotic tákn. 636 00:38:15,500 --> 00:38:18,430 Svo þýðir þetta að - ja, við skulum segja að við séum að gefa reiknirit okkar 637 00:38:18,430 --> 00:38:20,840 sumir virkilega, virkilega, virkilega stór inntak. 638 00:38:20,840 --> 00:38:23,840 Við viljum spyrja: "Hversu lengi er það að fara að taka? 639 00:38:23,840 --> 00:38:26,370 Hversu mörg skref tekur það reiknirit okkar til að keyra 640 00:38:26,370 --> 00:38:29,980 sem fall af stærð inntak? " 641 00:38:29,980 --> 00:38:33,080 Svo er fyrsta leiðin sem við getum lýst hlaupa tíma með stór O. 642 00:38:33,080 --> 00:38:35,380 Og þetta er versta hlaupandi tími okkar. 643 00:38:35,380 --> 00:38:38,590 Þannig að ef við viljum að raða fylki, og gefum algrím okkar fylki 644 00:38:38,590 --> 00:38:41,000 sem er í röð þegar það ætti að vera í röð, 645 00:38:41,000 --> 00:38:43,130 sem er að fara að vera versta. 646 00:38:43,130 --> 00:38:49,800 Þetta er efri okkar bundið í hámarks tíma algrím okkar mun taka. 647 00:38:49,800 --> 00:38:54,740 Á hinn bóginn, þetta Ω er að fara að lýsa best í að keyra tíma. 648 00:38:54,740 --> 00:38:58,210 Svo ef við gefa þegar raðað array að flokka reiknirit, 649 00:38:58,210 --> 00:39:00,940 hversu lengi mun það taka að flokka það? 650 00:39:00,940 --> 00:39:06,610 Og þetta, þá lýsir, minni bundið að keyra tíma. 651 00:39:06,610 --> 00:39:10,980 Svo hér eru bara nokkur orð sem lýsa nokkrar algengar gangi sinnum. 652 00:39:10,980 --> 00:39:13,120 Þetta eru í hækkandi röð. 653 00:39:13,120 --> 00:39:16,060 Hraðasta hlaupandi tíma sem við höfum kallast stöðug. 654 00:39:16,060 --> 00:39:19,800 >> Það þýðir sama hversu margir þættir við gefa reiknirit okkar, 655 00:39:19,800 --> 00:39:22,280 sama hversu stór array okkar er flokkun það 656 00:39:22,280 --> 00:39:26,510 eða gera hvað sem við erum að gera til fylkisins mun alltaf taka sama magn af tíma. 657 00:39:26,510 --> 00:39:30,270 Svo við getum táknað að bara með 1, sem er fasti. 658 00:39:30,270 --> 00:39:32,410 Við leit einnig á lógaritmískum hlaupa tíma. 659 00:39:32,410 --> 00:39:34,800 Svo er eitthvað eins og tvöfaldur leit lógaritmískum, 660 00:39:34,800 --> 00:39:37,140 þar sem við skera vandamálið í tvennt í hvert skipti 661 00:39:37,140 --> 00:39:40,970 og það fá bara hærri þaðan. 662 00:39:40,970 --> 00:39:43,580 Og ef þú ert alltaf að skrifa O hvers þáttarannsókn reiknirit, 663 00:39:43,580 --> 00:39:47,850 þú sennilega ætti ekki að íhuga þetta sem daglegu starfi þínu. 664 00:39:47,850 --> 00:39:53,910 Þegar við saman í gangi sinnum það er mikilvægt að hafa í huga þetta. 665 00:39:53,910 --> 00:39:57,760 Svo ef ég er með reiknirit sem er O (n), og einhver annar 666 00:39:57,760 --> 00:40:03,590 hefur reiknirit O (2n) þetta eru í raun aðfellu jafngildir. 667 00:40:03,590 --> 00:40:06,590 Svo ef við ímynda n að vera stór tala eins eleventy milljarða: 668 00:40:06,590 --> 00:40:13,090 svo þegar við erum að bera saman eleventy milljörðum eitthvað eins eleventy milljarða + 3, 669 00:40:13,090 --> 00:40:17,640 skyndilega að +3 er ekki raunverulega gera a stór mismunur lengur. 670 00:40:17,640 --> 00:40:20,980 Það er þess vegna sem við erum að fara að byrja að skoða þetta til að vera jafngildar. 671 00:40:20,980 --> 00:40:24,220 Svo hluti eins og þessa Fastar hér, það er 2 x þetta eða bæta 3, 672 00:40:24,220 --> 00:40:27,180 Þetta eru bara fastar, og þetta er að fara að falla upp. 673 00:40:27,180 --> 00:40:32,480 Svo er það hvers vegna allir 3 þessara hlaupa sinnum eru eins og að segja að þeir eru O (n). 674 00:40:32,480 --> 00:40:37,490 Á sama hátt, ef við höfum 2 öðrum tímum hlaupa, við skulum segja að O (N ³ + 2n ²), getum við bætt við 675 00:40:37,490 --> 00:40:42,070 + N, + 7, og þá höfum við annað hlaupa tíma sem er bara O (N ³). 676 00:40:42,070 --> 00:40:46,290 aftur, er þetta það sama því að þetta - þetta eru ekki það sama. 677 00:40:46,290 --> 00:40:49,840 Þetta eru sömu hlutina, því miður. Svo þetta er það sama vegna þess að 678 00:40:49,840 --> 00:40:53,090 This N ³ er að fara að ráða þessa 2N ². 679 00:40:53,090 --> 00:40:59,130 >> Það er ekki það sama er ef við höfum keyrt sinnum eins og O (N ³) og O (n ²) 680 00:40:59,130 --> 00:41:02,820 því þetta N ³ er miklu stærri en þetta n ². 681 00:41:02,820 --> 00:41:05,470 Svo ef við höfum exponents, skyndilega byrjar þetta að máli, 682 00:41:05,470 --> 00:41:08,280 en þegar við erum bara að takast á við þætti eins og við erum hérna, 683 00:41:08,280 --> 00:41:12,810 þá er það ekki að fara að máli vegna þess að þeir eru bara að fara að detta út. 684 00:41:12,810 --> 00:41:16,760 Við skulum taka a líta á sumir af the reiknirit sem við höfum séð hingað til 685 00:41:16,760 --> 00:41:19,260 og tala um tíma hlaupa þeirra. 686 00:41:19,260 --> 00:41:23,850 Fyrsta leiðin til að leita að tala í lista, sem við sáum, var línuleg leit. 687 00:41:23,850 --> 00:41:26,950 Og framkvæmd línuleg leit er frábær einfalt. 688 00:41:26,950 --> 00:41:30,490 Við verðum bara lista, og við erum að fara að horfa á hvert einasta þáttur í lista 689 00:41:30,490 --> 00:41:34,260 þar er að finna fjölda sem við erum að leita að. 690 00:41:34,260 --> 00:41:38,370 Svo það þýðir að í versta falli, það O (n). 691 00:41:38,370 --> 00:41:40,860 Og versta hér gæti verið ef frumefni er 692 00:41:40,860 --> 00:41:45,710 síðasta þáttur, þá nota línulega leit við verðum að líta á hvert einasta þáttur 693 00:41:45,710 --> 00:41:50,180 þangað til við komum að síðasta til þess að vita að það var reyndar í listanum. 694 00:41:50,180 --> 00:41:52,910 Við getum ekki bara gefast upp á miðri leið og segja: "Það er líklega ekki þar." 695 00:41:52,910 --> 00:41:55,980 Með línuleg leit við verðum að líta á the heild hlutur. 696 00:41:55,980 --> 00:41:59,090 Besta-málið hlaupandi tími, hins vegar, er stöðug 697 00:41:59,090 --> 00:42:04,200 því að í besta tilfelli þáttur sem við erum að leita að er bara sá fyrsti á listanum. 698 00:42:04,200 --> 00:42:08,930 Svo það er að fara að taka okkur nákvæmlega 1 skref, sama hversu stór listi er 699 00:42:08,930 --> 00:42:12,140 ef við erum að leita að fyrsti þáttur í hvert skipti. 700 00:42:12,140 --> 00:42:15,390 >> Svo þegar þú leitar, muna, er það ekki þurfa að listi okkar að vera flokkaður. 701 00:42:15,390 --> 00:42:19,430 Þar sem við erum bara að fara að horfa yfir hverjum einasta frumefni, og það skiptir ekki máli 702 00:42:19,430 --> 00:42:23,560 hvaða röð þessir þættir eru inn 703 00:42:23,560 --> 00:42:28,110 A fleiri greindur leita reiknirit er eitthvað eins og tvöfaldur leit. 704 00:42:28,110 --> 00:42:31,500 Mundu að framkvæmd leit tvöfaldur er þegar þú ert að fara að 705 00:42:31,500 --> 00:42:34,320 halda að leita á miðjum listanum. 706 00:42:34,320 --> 00:42:38,000 Og vegna þess að við erum að horfa á miðju, krefjumst við þess að skráin sé raðað 707 00:42:38,000 --> 00:42:40,580 eða annað sem við vitum ekki hvar miðjan er, og við verðum að líta á 708 00:42:40,580 --> 00:42:44,480 allan listann til að finna það, og þá á þeim tímapunkti sem við erum bara að sóa tíma. 709 00:42:44,480 --> 00:42:48,480 Svo ef við höfum raðað lista og við finnum miðju, við erum að fara að bera saman á miðju 710 00:42:48,480 --> 00:42:51,590 til frumefni sem við erum að leita að. 711 00:42:51,590 --> 00:42:54,640 Ef það er of hátt, þá getum við gleymt rétt helmingur 712 00:42:54,640 --> 00:42:57,810 vegna þess að við vitum að ef þátturinn okkar er nú þegar of hátt 713 00:42:57,810 --> 00:43:01,080 og allt til hægri þessa frumefnis er enn hærra, 714 00:43:01,080 --> 00:43:02,760 þá þurfum við ekki að horfa þar lengur. 715 00:43:02,760 --> 00:43:05,430 Hvar á hinn bóginn, ef þátturinn okkar er of lágt, 716 00:43:05,430 --> 00:43:08,700 við vitum allt vinstra megin við að frumefni er of lágt, 717 00:43:08,700 --> 00:43:11,390 þannig að það skiptir í raun ekki skynsamleg að líta þar, heldur. 718 00:43:11,390 --> 00:43:15,760 This vegur, með hvert skref og hvert skipti sem við líta á miðju á listanum, 719 00:43:15,760 --> 00:43:19,060 við erum að fara að skera vandamál okkar í tvennt vegna þess að allt í einu við vitum 720 00:43:19,060 --> 00:43:23,040 a heild búnt af tölum sem ekki er hægt að sá sem við erum að leita að. 721 00:43:23,040 --> 00:43:26,950 >> Í sauðakóðanum þetta myndi líta eitthvað eins og þetta, 722 00:43:26,950 --> 00:43:30,990 og vegna þess að við erum að skera listann í hálfa hvert einasta skipti, 723 00:43:30,990 --> 00:43:34,920 versta falli hlaupa tíma okkar stökk frá línuleg til lógaritmískum. 724 00:43:34,920 --> 00:43:39,260 Svo skyndilega við höfum þig í áföngum í því skyni að finna stak í lista. 725 00:43:39,260 --> 00:43:42,460 Besta-málið hlaupandi tíma, þó, er enn stöðug 726 00:43:42,460 --> 00:43:45,180 því nú, við skulum bara segja að þátturinn sem við erum að leita að er 727 00:43:45,180 --> 00:43:48,380 alltaf nákvæmlega miðja upprunalegu skránni. 728 00:43:48,380 --> 00:43:52,080 Þannig að við getum vaxa lista okkar eins og stór eins og við viljum, en ef þátturinn sem við erum að leita að er í miðju, 729 00:43:52,080 --> 00:43:54,910 þá er bara að fara að taka okkur 1 skref. 730 00:43:54,910 --> 00:44:00,920 Svo er það þess vegna sem við erum O (log n) og Ω (1) eða stöðugur. 731 00:44:00,920 --> 00:44:04,510 Við skulum í raun keyra tvöfaldur leita á þessum lista. 732 00:44:04,510 --> 00:44:08,020 Svo skulum segja að við erum að leita að frumefni 164. 733 00:44:08,020 --> 00:44:11,650 The fyrstur hlutur sem við erum að fara að gera er að finna miðpunkt þessum lista. 734 00:44:11,650 --> 00:44:15,060 Það bara gerist svo að miðpunkt er að fara að falla á milli þessara 2 talna, 735 00:44:15,060 --> 00:44:18,960 þannig að við skulum bara geðþótta segja, í hvert skipti sem miðpunkt fellur á milli 2 númer, 736 00:44:18,960 --> 00:44:21,150 skulum bara umferð upp. 737 00:44:21,150 --> 00:44:24,330 Við þurfum bara að tryggja að við að gera þetta í hvert skref á leiðinni. 738 00:44:24,330 --> 00:44:29,040 Þannig að við erum að fara að umferð upp, og við erum að fara að segja að 161 sé um miðja lista okkar. 739 00:44:29,040 --> 00:44:34,640 Svo 161 <164, og hver þáttur til vinstri 161 740 00:44:34,640 --> 00:44:39,120 er <164, svo að við vitum að það er ekki að fara að hjálpa okkur á öllum 741 00:44:39,120 --> 00:44:42,690 að byrja að horfa á hér vegna þess að þátturinn sem við erum að leita að getur ekki verið þar. 742 00:44:42,690 --> 00:44:47,060 Svo er það sem við getum gert við getum bara gleyma um það allt vinstri hluta á listanum, 743 00:44:47,060 --> 00:44:51,700 og nú bara telja frá hægri á 161 og áfram. 744 00:44:51,700 --> 00:44:54,050 >> Svo aftur, þetta er miðpunkt, við skulum bara umferð upp. 745 00:44:54,050 --> 00:44:56,260 Nú er 175 of stór. 746 00:44:56,260 --> 00:44:59,180 Þannig að við vitum að það er ekki að fara að hjálpa okkur að leita hér eða hér, 747 00:44:59,180 --> 00:45:06,610 þannig að við getum bara henda því í burtu, og að lokum munum við högg the 164. 748 00:45:06,610 --> 00:45:10,560 Einhverjar spurningar um tvöfaldur leit? 749 00:45:10,560 --> 00:45:14,180 Við skulum fara frá að leita í gegnum þegar-raðaða lista 750 00:45:14,180 --> 00:45:17,660 í raun og veru að taka lista yfir númer í hvaða röð 751 00:45:17,660 --> 00:45:20,960 og að þessi listi í hækkandi röð. 752 00:45:20,960 --> 00:45:24,060 Fyrsta reiknirit sem við skoðuðum heitir kúla tegund. 753 00:45:24,060 --> 00:45:27,300 Og þetta væri einfaldara af reiknirit sem við sáum. 754 00:45:27,300 --> 00:45:32,970 Bubble tegund segir að þegar einhverjar 2 þættir inni í listanum eru af stað, 755 00:45:32,970 --> 00:45:36,500 sem þýðir að það er meiri fjöldi til vinstri á lægri tölu, 756 00:45:36,500 --> 00:45:40,190 þá erum við að fara að skipta á þeim, því það þýðir að listinn verði 757 00:45:40,190 --> 00:45:42,860 "Meira raðað" en það var áður. 758 00:45:42,860 --> 00:45:45,180 Og við erum bara að fara að halda áfram þessu ferli aftur og aftur og aftur 759 00:45:45,180 --> 00:45:52,100 þar að lokum þætti konar kúla að rétta staðsetningu þeirra og við höfum raðað lista. 760 00:45:52,100 --> 00:45:57,230 >> The hlaupa tími er þetta að fara að vera O (n ²). Hvers vegna? 761 00:45:57,230 --> 00:46:00,370 Jæja, vegna þess að í versta tilfelli, við erum að fara að taka alla hluti, og 762 00:46:00,370 --> 00:46:04,570 við erum að fara að enda bera það hvert annað atriði á listanum. 763 00:46:04,570 --> 00:46:08,030 En í besta tilfelli, höfum við nú þegar raðað lista, kúla tegund er 764 00:46:08,030 --> 00:46:12,230 bara að fara að fara í gegnum einu sinni, segir "Nei. ég ekki gera neinar skiptasamninga, þannig að ég er búin." 765 00:46:12,230 --> 00:46:17,410 Þannig að við höfum best í gangi þegar Ω (n). 766 00:46:17,410 --> 00:46:20,680 Við skulum hlaupa kúla raða á lista. 767 00:46:20,680 --> 00:46:23,560 Eða fyrst, við skulum bara líta á einhverjum sauðakóðanum mjög fljótt. 768 00:46:23,560 --> 00:46:28,160 Við viljum að segja við viljum halda utan um, í hvert endurtekning á lykkju, 769 00:46:28,160 --> 00:46:32,190 halda utan um hvort við breytt hvaða atriði. 770 00:46:32,190 --> 00:46:37,610 Svo ástæðan fyrir því er, við erum að fara að hætta þegar við höfum ekki skipt hvaða atriði. 771 00:46:37,610 --> 00:46:41,980 Svo í byrjun lykkju okkar sem við höfum ekki skipt neitt, þannig að við munum segja að það er rangt. 772 00:46:41,980 --> 00:46:47,170 Nú erum við að fara að fara í gegnum listann og bera saman hluti sem ég að þáttur i + 1 773 00:46:47,170 --> 00:46:50,310 og ef það er raunin að það er stærri tala til vinstri færri, 774 00:46:50,310 --> 00:46:52,310 þá erum við bara að fara að skipta á þeim. 775 00:46:52,310 --> 00:46:54,490 >> Og svo við erum að fara að muna að við skipti stak. 776 00:46:54,490 --> 00:46:58,900 Það þýðir að við þurfum að fara í gegnum listann amk 1 sinni enn 777 00:46:58,900 --> 00:47:02,160 vegna þess að ástand þar sem við hætt er þegar allur listinn er þegar raðað, 778 00:47:02,160 --> 00:47:04,890 sem þýðir að við höfum ekki gert neinar skiptasamninga. 779 00:47:04,890 --> 00:47:09,960 Svo er það hvers vegna ástand okkar niður hér "en nokkur atriði hafa verið skipti." 780 00:47:09,960 --> 00:47:13,720 Svo nú skulum við bara líta á þetta í gangi á lista. 781 00:47:13,720 --> 00:47:16,640 Ég hef lista 5,0,1,6,4. 782 00:47:16,640 --> 00:47:19,850 Bubble tegund er að fara að byrja alla leið til vinstri, og það er að fara að bera saman 783 00:47:19,850 --> 00:47:24,700 i þætti, svo 0 í i + 1, sem er þáttur 1. 784 00:47:24,700 --> 00:47:29,020 Það er að fara að segja, vel 5> 0, en núna 5 er til vinstri, 785 00:47:29,020 --> 00:47:32,500 þannig að ég þarf að skipta um 5 og á 0. 786 00:47:32,500 --> 00:47:35,470 Þegar ég skipta þá, skyndilega ég fengið þessar mismunandi lista. 787 00:47:35,470 --> 00:47:38,260 Nú 5> 1, þannig að við erum að fara að skipta á þeim. 788 00:47:38,260 --> 00:47:42,160 5 er ekki> 6, þannig að við þurfum ekki að gera neitt hér. 789 00:47:42,160 --> 00:47:46,690 En 6> 4, þannig að við þurfum að skipta. 790 00:47:46,690 --> 00:47:49,740 Aftur þurfum við að keyra í gegnum allan listann til að lokum uppgötva 791 00:47:49,740 --> 00:47:52,330 að þetta eru út af röð, við skipta þeim, 792 00:47:52,330 --> 00:47:57,120 og á þessum tímapunkti þurfum við að keyra í gegnum lista 1 meiri tíma 793 00:47:57,120 --> 00:48:05,390 að ganga úr skugga um að allt er í röð þeirra, og á þessum tímapunkti kúla tagi er lokið. 794 00:48:05,390 --> 00:48:10,720 A mismunandi reiknirit til að taka nokkur atriði og flokkun þá er val konar. 795 00:48:10,720 --> 00:48:15,740 Hugmyndin á bak við tegund val er að við erum að fara að byggja upp raðað hluta listanum 796 00:48:15,740 --> 00:48:18,150 1 þáttur í einu. 797 00:48:18,150 --> 00:48:23,170 >> Og hvernig ætlum við að gera það er með því að byggja upp vinstri hluti af listanum. 798 00:48:23,170 --> 00:48:27,510 Og í rauninni, hvert - á hverju skrefi, þá ætlum við að taka minnstu hluti sem við höfum til vinstri 799 00:48:27,510 --> 00:48:32,310 sem hefur ekki verið raðað enn, og við erum að fara að færa það inn í þessi raðaða hluta. 800 00:48:32,310 --> 00:48:35,850 Það þýðir að við þurfum að stöðugt að finna lágmarks óflokkuðu þáttur 801 00:48:35,850 --> 00:48:40,720 og síðan taka að lágmarki þáttur og skipta um það með hvaða 802 00:48:40,720 --> 00:48:45,090 vinstri-mest þáttur sem er ekki raðað. 803 00:48:45,090 --> 00:48:50,890 Run tími er þetta að fara að vera O (n ²) vegna þess að í versta falli 804 00:48:50,890 --> 00:48:55,070 við þurfum að bera hvert einasta þáttur að sérhver önnur frumefni. 805 00:48:55,070 --> 00:48:59,250 Þar sem við erum að segja að ef við byrjum á vinstri hluta á listanum, við þurfum 806 00:48:59,250 --> 00:49:02,970 að fara í gegnum allt hægri hluti til að finna minnstu frumefni. 807 00:49:02,970 --> 00:49:05,430 Og þá aftur, við þurfum að fara yfir alla rétta hluti og 808 00:49:05,430 --> 00:49:08,210 að fara yfir það aftur og aftur og aftur. 809 00:49:08,210 --> 00:49:11,350 Það er að fara að vera N ². Við erum að fara að þurfa að innan lykkja annars fyrir lykkju 810 00:49:11,350 --> 00:49:13,350 sem bendir n ². 811 00:49:13,350 --> 00:49:16,530 Í besta falli hugsun, við skulum segja að við séum að gefa það þegar raðað lista; 812 00:49:16,530 --> 00:49:19,270 við í raun gera ekki allir betri en n ². 813 00:49:19,270 --> 00:49:21,730 Vegna val tegund hefur enga leið að vita það 814 00:49:21,730 --> 00:49:25,540 lágmarks þáttur er bara það sem ég gerst að vera að horfa á. 815 00:49:25,540 --> 00:49:28,970 Það þarf samt að ganga úr skugga um að þetta er í raun lágmarki. 816 00:49:28,970 --> 00:49:31,670 >> Og eina leiðin til að ganga úr skugga um að það er það lágmark, að nota þennan reiknirit, 817 00:49:31,670 --> 00:49:34,640 er að horfa á hvert einasta þáttur aftur. 818 00:49:34,640 --> 00:49:38,420 Svo í raun, ef þú gefur það - ef þú gefur val raða þegar raðað lista, 819 00:49:38,420 --> 00:49:42,720 það er ekki að fara að gera eitthvað betra en að gefa það upp lista sem er ekki raðað enn. 820 00:49:42,720 --> 00:49:46,320 Við the vegur, ef það gerist að vera að ræða um að eitthvað sé O (eitthvað) 821 00:49:46,320 --> 00:49:50,640 og Omega um eitthvað, getum við bara segja meira succinctly að það er θ um eitthvað. 822 00:49:50,640 --> 00:49:52,760 Svo ef þú sérð að koma upp hvar sem er, það er það sem einfaldlega þýðir. 823 00:49:52,760 --> 00:49:57,580 >> Ef eitthvað er Þeta á n ², er það bæði stór O (n ²) og Ω (n ²). 824 00:49:57,580 --> 00:49:59,790 Svo besta tilfelli og versta tilfelli, er það ekki máli, 825 00:49:59,790 --> 00:50:04,400 reiknirit er að fara að gera það sama í hvert skipti. 826 00:50:04,400 --> 00:50:06,610 Svo er þetta það sauðakóðanum fyrir tegund val gæti litið út. 827 00:50:06,610 --> 00:50:10,630 Við erum í rauninni að fara að segja að ég vil iterate á lista 828 00:50:10,630 --> 00:50:15,180 frá vinstri til hægri, og á hverjum endurtekning lykkju, ég er að fara að flytja 829 00:50:15,180 --> 00:50:19,780 lágmarks þáttur í þessu raðað hluta á listanum. 830 00:50:19,780 --> 00:50:23,260 Og þegar ég flyt eitthvað þarna, ég þarf aldrei að líta á frumefni aftur. 831 00:50:23,260 --> 00:50:28,600 Því um leið og ég skipti stak á vinstri hluta á listanum, er það flokkað 832 00:50:28,600 --> 00:50:32,600 vegna þess að við erum að gera allt sem í hækkandi röð með lágmarki. 833 00:50:32,600 --> 00:50:38,740 Svo við sögðum, allt í lagi, við erum í stöðu i, og við þurfum að líta á alla þá þætti 834 00:50:38,740 --> 00:50:42,260 til hægri á ég til að finna amk. 835 00:50:42,260 --> 00:50:46,150 Svo þýðir það að við viljum að líta frá i + 1 til loka listanum. 836 00:50:46,150 --> 00:50:51,610 Og nú, ef þáttur sem við erum nú að leita að er minna en minnst okkar svo langt, 837 00:50:51,610 --> 00:50:54,190 sem mundu, við erum að byrja lágmarks burt að bara vera 838 00:50:54,190 --> 00:50:57,020 hvað þátturinn sem við erum nú í, ég geri ráð fyrir að er lágmark. 839 00:50:57,020 --> 00:51:00,270 Ef ég finn stak sem er minni en það, þá er ég að fara að segja allt í lagi, 840 00:51:00,270 --> 00:51:02,700 Jæja, ég hef fundið nýja lágmarki. 841 00:51:02,700 --> 00:51:06,080 Ég ætla að muna þar sem minnst var. 842 00:51:06,080 --> 00:51:09,560 >> Svo nú, þegar ég hef farið í gegnum það rétt óflokkuðu hluti, 843 00:51:09,560 --> 00:51:16,690 Ég get sagt að ég ætla að skipta um lágmarks þáttur með atriði sem er í stöðu i. 844 00:51:16,690 --> 00:51:21,100 Það er að fara að byggja upp listanum mínum, flokkað hlutdeild mín af listanum frá vinstri til hægri, 845 00:51:21,100 --> 00:51:25,190 og við gerum ekki alltaf að líta á frumefni aftur þegar það er í þeim hluta. 846 00:51:25,190 --> 00:51:27,930 Þegar við höfum skipti það. 847 00:51:27,930 --> 00:51:30,260 Svo skulum hlaupa val raða á þennan lista. 848 00:51:30,260 --> 00:51:38,220 Bláa þáttur hér er að fara að vera i, og rauði þáttur er að fara að vera að lágmarki þáttur. 849 00:51:38,220 --> 00:51:41,570 Svo byrjar ég alla leið til vinstri á listanum, svo í 5. 850 00:51:41,570 --> 00:51:44,610 Nú þurfum við að finna lágmarks óflokkuðu frumefni. 851 00:51:44,610 --> 00:51:49,480 Þannig að við segjum 0 <5, svo er 0 nýtt lágmark mín. 852 00:51:49,480 --> 00:51:53,820 >> En ég get ekki hætt þar, vegna þess að jafnvel þó að við getum viðurkenna að 0 er lítill, 853 00:51:53,820 --> 00:51:59,390 við þurfum að hlaupa í gegnum alla aðra þáttur á listanum til að vera viss. 854 00:51:59,390 --> 00:52:01,760 Svo 1 er stærri, 6 er stærri, 4 er stærri. 855 00:52:01,760 --> 00:52:05,850 Það þýðir að eftir að horfa á alla þessa þætti, ég hef ákveðið 0 er minnsta. 856 00:52:05,850 --> 00:52:09,800 Þannig að ég ætla að skipta um 5 og á 0. 857 00:52:09,800 --> 00:52:15,480 Þegar ég skipti að ég er að fara að fá nýjan lista, og ég veit að ég hef aldrei þurft að líta á 0 aftur 858 00:52:15,480 --> 00:52:19,380 vegna þess að þegar ég hef skipst það, hef ég flokkað það og við erum að gera. 859 00:52:19,380 --> 00:52:22,730 Nú það bara gerist svo að blár þáttur er aftur 5, 860 00:52:22,730 --> 00:52:26,030 og við þurfum að horfa á 1, 6 og 4 til að ákvarða að 1 861 00:52:26,030 --> 00:52:31,520 er minnsta lágmark þáttur, þannig að við munum skipta um 1 og 5. 862 00:52:31,520 --> 00:52:36,890 Aftur þurfum við að líta á - bera 5 til 6 og 4, 863 00:52:36,890 --> 00:52:39,830 og við erum að fara að skipta á 4 og 5, og að lokum, bera saman 864 00:52:39,830 --> 00:52:45,740 þessir 2 tölur og skipta þeim þar til við fá raðað lista okkar. 865 00:52:45,740 --> 00:52:49,730 Einhverjar spurningar um tegund val? 866 00:52:49,730 --> 00:52:56,420 Allt í lagi. Við skulum fara í síðasta þráð hér, og það er endurkvæmni. 867 00:52:56,420 --> 00:52:59,810 >> Endurkvæmni, muna, þetta er í raun Meta hlutur þar sem virka 868 00:52:59,810 --> 00:53:02,740 ítrekað kallar sig. 869 00:53:02,740 --> 00:53:05,620 Svo á einhverjum tímapunkti, en fuction okkar er ítrekað að kalla sig, 870 00:53:05,620 --> 00:53:10,100 Það þarf að vera einhver benda á þar sem við hætt að kalla okkur. 871 00:53:10,100 --> 00:53:13,670 Vegna þess að ef við gerum það ekki, þá erum við bara að fara að halda áfram að gera þetta að eilífu, 872 00:53:13,670 --> 00:53:16,660 og áætlun okkar er bara ekki að fara að segja. 873 00:53:16,660 --> 00:53:19,200 Við köllum þetta ástand grunn tilfelli. 874 00:53:19,200 --> 00:53:22,570 Og stöð málið segir, frekar en að kalla á aðgerð aftur, 875 00:53:22,570 --> 00:53:25,330 Ég ætla bara að fara að fara aftur sumir gildi. 876 00:53:25,330 --> 00:53:28,080 Svo þegar við höfum skilað gildi, höfum við hætt að kalla okkur, 877 00:53:28,080 --> 00:53:32,550 og restin af símtöl sem við höfum gert svo langt getur einnig aftur. 878 00:53:32,550 --> 00:53:36,050 Andstæða grunn tilfelli er endurkvæma raunin. 879 00:53:36,050 --> 00:53:39,050 Og þetta er þegar við viljum gera annað símtal að virka sem við erum nú inn 880 00:53:39,050 --> 00:53:44,690 Og við sennilega, þó ekki alltaf, að nota mismunandi rök. 881 00:53:44,690 --> 00:53:48,940 >> Svo ef við höfum virka heitir F og F hringdi taka 1 rök, 882 00:53:48,940 --> 00:53:52,010 og við höldum bara að hringja f (1), f (1), f (1), og það bara gerist svo að 883 00:53:52,010 --> 00:53:56,510 þau rök 1 fellur í endurkvæma tilfelli erum við samt aldrei að fara að hætta. 884 00:53:56,510 --> 00:54:01,620 Jafnvel þótt við höfum grunn tilfelli, þurfum við að tryggja að lokum ætlum við að högg sem byggja mál. 885 00:54:01,620 --> 00:54:04,250 Við ekki bara að halda að dvelja í þessu endurkvæma tilfelli. 886 00:54:04,250 --> 00:54:09,870 Almennt, þegar við köllum okkur, við erum líklega að fara að hafa mismunandi rök hverju sinni. 887 00:54:09,870 --> 00:54:12,700 Hér er mjög einföld endurkvæma virka. 888 00:54:12,700 --> 00:54:15,090 Svo mun reikna aðfeldi tölu. 889 00:54:15,090 --> 00:54:17,790 Upp Efst hér höfum við stöð okkar tilviki. 890 00:54:17,790 --> 00:54:22,330 Í tilviki að n ≤ 1, við erum ekki að fara að hringja þáttatilraun aftur. 891 00:54:22,330 --> 00:54:26,490 Við erum að fara að hætta, við erum bara að fara að fara aftur sumir gildi. 892 00:54:26,490 --> 00:54:30,170 Ef þetta er ekki satt, þá erum við að fara að lemja endurkvæma okkar tilviki. 893 00:54:30,170 --> 00:54:33,550 Tilkynning hér að við erum ekki bara að hringja þáttatilraun (n), vegna þess að það myndi ekki vera mjög hjálpsamur. 894 00:54:33,550 --> 00:54:36,810 Við ætlum að hringja aðfeldi eitthvað annað. 895 00:54:36,810 --> 00:54:40,850 >> Og svo þú getur séð, að lokum ef við standast þáttatilraun (5) eða eitthvað, 896 00:54:40,850 --> 00:54:45,900 við erum að fara að hringja þáttatilraun (4) og svo framvegis, og að lokum ætlum við að ná þessu grunn tilfelli. 897 00:54:45,900 --> 00:54:51,730 Svo lítur þetta vel út. Við skulum sjá hvað gerist þegar við hlaupum í raun það. 898 00:54:51,730 --> 00:54:57,840 Þetta er á mánudaginn, og við skulum segja að helsta er að fara að kalla þetta aðgerð með rök (4). 899 00:54:57,840 --> 00:55:02,200 Svo sér þegar þáttatilraun og = 4, þáttatilraun vilja kalla sig. 900 00:55:02,200 --> 00:55:05,010 Nú, allt í einu, höfum við þáttatilraun (3). 901 00:55:05,010 --> 00:55:10,780 Svo þessar aðgerðir eru að fara að halda að vaxa þar til að lokum við högg stöð okkar tilviki. 902 00:55:10,780 --> 00:55:17,830 Á þessum tímapunkti, skilagildi er aftur (NX skilagildi þetta), 903 00:55:17,830 --> 00:55:21,290 skilagildi er NX skilagildi þetta. 904 00:55:21,290 --> 00:55:23,290 Að lokum þurfum við að lemja einhvern fjölda. 905 00:55:23,290 --> 00:55:26,560 Efst hér, segjum við aftur 1. 906 00:55:26,560 --> 00:55:30,650 Það þýðir að þegar við aftur að tala, við getum skjóta það burt stafla. 907 00:55:30,650 --> 00:55:36,570 Svo þetta aðfeldi (1) er lokið. 908 00:55:36,570 --> 00:55:41,190 Þegar 1 skilar, þetta aðfeldi (1) skilar, það aftur til 1. 909 00:55:41,190 --> 00:55:46,910 Skilagildi þessu, muna, var NX skilagildi þetta. 910 00:55:46,910 --> 00:55:50,720 Svo allt í einu, þetta strákur veit að ég vil aftur 2. 911 00:55:50,720 --> 00:55:55,910 >> Svo man, skila gildi þetta er bara NX skilagildi upp hér. 912 00:55:55,910 --> 00:56:01,160 Svo nú getum við sagt 3 x 2 og að lokum, hér getum við sagt 913 00:56:01,160 --> 00:56:04,010 þetta er bara að fara að vera 4 x 3 x 2. 914 00:56:04,010 --> 00:56:09,570 Og þegar þetta skilar, fáum við niður í eina heiltölu inni helstu. 915 00:56:09,570 --> 00:56:15,460 Einhverjar spurningar um endurkvæmni? 916 00:56:15,460 --> 00:56:17,090 Allt í lagi. Þannig að það er meiri tími fyrir spurningar í lok, 917 00:56:17,090 --> 00:56:23,360 en nú Jósef mun ná eftirstandandi efni. 918 00:56:23,360 --> 00:56:25,590 >> [Joseph Ong] Allt í lagi. Svo nú að við höfum talað um recursions, 919 00:56:25,590 --> 00:56:27,840 við skulum tala svolítið um hvað Mergesort er. 920 00:56:27,840 --> 00:56:31,740 Sameina tegund er í grundvallaratriðum önnur leið flokkun lista af tölum. 921 00:56:31,740 --> 00:56:36,430 Og hvernig það virkar, og Mergesort þú ert með lista, og það sem við gerum er að 922 00:56:36,430 --> 00:56:39,120 við segjum, við skulum skipta þessu í 2 helminga. 923 00:56:39,120 --> 00:56:42,750 Við munum fyrst hlaupa Mergesort aftur á vinstri helming, 924 00:56:42,750 --> 00:56:45,040 þá munum við keyra Mergesort á hægri hluta, 925 00:56:45,040 --> 00:56:50,240 og það gefur okkur nú 2 helminga sem eru flokkuð, og nú ætlum við að sameina þær helminga saman. 926 00:56:50,240 --> 00:56:55,010 Það er dálítið erfitt að sjá án þess að dæmi, þannig að við munum fara í gegnum tillögur og sjá hvað gerist. 927 00:56:55,010 --> 00:56:59,590 Svo þú byrjar með þessum lista, við skipt því í 2 helminga. 928 00:56:59,590 --> 00:57:02,300 Hlaupum Mergesort á vinstri hluta fyrst. 929 00:57:02,300 --> 00:57:06,660 Svo er það vinstri helming, og nú erum við að keyra þá í gegnum þennan lista aftur 930 00:57:06,660 --> 00:57:09,800 sem fær staðist í Mergesort, og þá erum við að líta aftur, 931 00:57:09,800 --> 00:57:13,270 á vinstri hlið af þessum lista og hlaupum Mergesort á það. 932 00:57:13,270 --> 00:57:15,880 Nú fáum við niður á lista yfir 2 númer, 933 00:57:15,880 --> 00:57:19,010 og nú er vinstri helmingur einungis 1 þáttur lengi, og við getum ekki 934 00:57:19,010 --> 00:57:23,380 skipt lista sem er aðeins 1 þáttur í helming, þannig að við segjum bara, þegar við höfum 50, 935 00:57:23,380 --> 00:57:26,400 sem er bara 1 þáttur, það er raðað nú þegar. 936 00:57:26,400 --> 00:57:29,860 >> Þegar við erum búin með það, getum við séð að við getum 937 00:57:29,860 --> 00:57:32,230 fara til hægri hluta lista, 938 00:57:32,230 --> 00:57:36,480 og 3 er einnig raðað, og svo nú að bæði helminga af þessum lista eru flokkuð 939 00:57:36,480 --> 00:57:39,080 við getum taka þessar tölur aftur saman. 940 00:57:39,080 --> 00:57:45,320 Svo við lítum á 50 og 3, 3 er minni en 50, þannig að það fer í fyrsta og þá kemur 50 tommur 941 00:57:45,320 --> 00:57:49,340 Nú, er það gert, við förum aftur upp að þeim lista og raða það er rétt helmingur. 942 00:57:49,340 --> 00:57:52,440 42 er eigin númer það er, þannig að það er nú þegar raðað. 943 00:57:52,440 --> 00:57:57,850 Svo nú erum við að bera saman þessar 2 og 3 er minni en 42, svo að fær að setja í fyrsta, 944 00:57:57,850 --> 00:58:02,340 nú 42 fær sett í, og 50 verður sett inn 945 00:58:02,340 --> 00:58:07,220 Nú, það er raðað, förum alla leið aftur á toppinn, 1337 og 15. 946 00:58:07,220 --> 00:58:14,560 Jæja, lítum við nú á vinstri hluta lista, 1337 er af sjálfu sér þannig að það er raðað og sama með 15. 947 00:58:14,560 --> 00:58:19,020 Svo nú erum við að sameina þessar 2 tölur til að raða að upprunalega lista, 15 <1337, 948 00:58:19,020 --> 00:58:23,060 svo fer það í fyrstu, þá fer 1337 inn 949 00:58:23,060 --> 00:58:26,640 Og nú erum við raðað bæði helminga af upprunalegu lista upp topp. 950 00:58:26,640 --> 00:58:30,440 Og allt sem við þurfum að gera er að sameina þetta. 951 00:58:30,440 --> 00:58:36,890 Við lítum á fyrstu 2 tölur á þessum lista, 3 <15, svo það fer í röðun fylkisins fyrst. 952 00:58:36,890 --> 00:58:44,460 15 <42, svo fer það inn Nú, 42 <1337, sem gengur inn 953 00:58:44,460 --> 00:58:51,010 50 <1337, svo fer það inn og taka eftir því að við tókum bara 2 tölur burt af þessum lista. 954 00:58:51,010 --> 00:58:53,640 Þannig að við erum ekki bara að skiptast á milli 2 listum. 955 00:58:53,640 --> 00:58:56,050 Við erum bara að horfa á í upphafi, og við erum að taka þáttur 956 00:58:56,050 --> 00:59:00,270 það er minni og þá setja það inn í array okkar. 957 00:59:00,270 --> 00:59:04,080 Nú höfum við sameinast öll helminga og við erum að gera. 958 00:59:04,080 --> 00:59:07,780 >> Einhverjar spurningar um Mergesort? Já? 959 00:59:07,780 --> 00:59:14,190 [Nemandi] Ef það er að skiptast í mismunandi hópa, hví ekki að þeir hættu bara það einu sinni 960 00:59:14,190 --> 00:59:19,970 og þú hefur 3 og 2 í hóp? [Rest af óskiljanlegur spurningu] 961 00:59:19,970 --> 00:59:24,940 Ástæðan - svo er spurningin, hvers vegna getum við ekki sameinast bara þá á þessi fyrstu skref eftir að við höfum þá? 962 00:59:24,940 --> 00:59:29,530 Ástæðan að við getum gert þetta, byrja á vinstri flestum þáttum báðum hliðum, 963 00:59:29,530 --> 00:59:33,040 og þá taka minni einn og setja það á, er að við vitum að þetta 964 00:59:33,040 --> 00:59:35,290 einstakra listar eru í raðað pantanir. 965 00:59:35,290 --> 00:59:37,290 Svo ef ég er að leita á vinstri flestum þáttum beggja helminga, 966 00:59:37,290 --> 00:59:40,490 Ég veit að þeir eru að fara að vera minnsti þætti þessara lista. 967 00:59:40,490 --> 00:59:43,930 Þannig að ég get sett þá í minnstu þáttur blettur þessa stór listi. 968 00:59:43,930 --> 00:59:47,810 Á hinn bóginn, ef ég horfi á þá 2 lista í öðru stigi þarna, 969 00:59:47,810 --> 00:59:51,640 50, 3, 42, 1337 og 15, eru þeir ekki raðað. 970 00:59:51,640 --> 00:59:55,770 Svo ef ég horfi á 50 og 1337, ég ætla að setja 50 í listanum mínum fyrst. 971 00:59:55,770 --> 01:00:00,130 En það er í raun ekki skynsamleg, því 3 er minnsti þátturinn úr öllum þeirra. 972 01:00:00,130 --> 01:00:04,390 Svo er eina ástæðan sem við getum gert þetta sameina skref vegna listum okkar eru þegar raðað. 973 01:00:04,390 --> 01:00:07,010 Hver er ástæða þess að við þurfum að fá niður alla leið til the botn 974 01:00:07,010 --> 01:00:09,800 vegna þess að þegar við höfum bara eitt númer, þú veist að ein tala 975 01:00:09,800 --> 01:00:14,120 í sjálfu sér er nú þegar raðað lista. 976 01:00:14,120 --> 01:00:19,360 >> Einhverjar spurningar? Nei? 977 01:00:19,360 --> 01:00:24,260 Flókið? Jæja, getur þú séð að í hverju skrefi það er endir tölur, 978 01:00:24,260 --> 01:00:27,590 og við getum deilt lista í log helmingur n sinnum, 979 01:00:27,590 --> 01:00:31,700 sem er þar sem við fáum þessa n x log n flókið. 980 01:00:31,700 --> 01:00:34,940 Og þú munt sjá það besta við um Mergesort er n log n, og það bara gerist svo 981 01:00:34,940 --> 01:00:39,340 að versta tilfelli, eða Ω þarna, er einnig N log n. 982 01:00:39,340 --> 01:00:42,480 Eitthvað til að hafa í huga. 983 01:00:42,480 --> 01:00:45,750 Að flytja á, við skulum fara á nokkur frábær undirstöðu skrá I / O. 984 01:00:45,750 --> 01:00:48,830 Ef þú lítur á Scramble, youll 'taka eftir við höfðum einhverskonar kerfi 985 01:00:48,830 --> 01:00:51,270 þar sem þú getur skrifað á annálinn ef þú lest í gegnum kóðann. 986 01:00:51,270 --> 01:00:53,730 Við skulum sjá hvernig þú gætir gert það. 987 01:00:53,730 --> 01:00:57,450 Jæja, við höfum fprintf, sem hægt er að hugsa um eins og bara printf, 988 01:00:57,450 --> 01:01:01,720 en bara prentun á skrá í staðinn, og þar með f í upphafi. 989 01:01:01,720 --> 01:01:07,570 Þessi tegund af kóða upp hér, hvað það gerir er, eins og þú gætir hafa séð í Scramble, 990 01:01:07,570 --> 01:01:12,310 það fer í gegnum 2-víddar array prentun út röð fyrir röð hvað tölurnar eru. 991 01:01:12,310 --> 01:01:17,850 Í þessu tilfelli, printf prentar út flugstöðinni eða það sem við köllum venjulegt framleiðsla kafla. 992 01:01:17,850 --> 01:01:22,170 >> Og nú, í þessu tilfelli, allt sem við þurfum að gera er að skipta printf með fprintf, 993 01:01:22,170 --> 01:01:26,770 segja það hvaða skrá þú vilt að prenta, og í þessu tilviki það prentar bara út til að skrá 994 01:01:26,770 --> 01:01:32,230 í stað þess að prenta það út til flugstöðinni. 995 01:01:32,230 --> 01:01:36,500 Jæja, þá bidur að spurningin: Hvar fáum við þessa tegund af skrá frá, ekki satt? 996 01:01:36,500 --> 01:01:39,840 Við fórum að skrá þig inn í þessa fprintf fuction en við höfðum ekki hugmynd um hvar það kom frá. 997 01:01:39,840 --> 01:01:43,980 Jæja, snemma í númerið, það sem við höfðum var þessi klumpur af kóða hérna, 998 01:01:43,980 --> 01:01:48,340 sem í grundvallaratriðum segir að opna skrá símtöl log.txt. 999 01:01:48,340 --> 01:01:53,220 Það sem við gerum eftir það er að við verðum að ganga úr skugga um að skrá er í raun opnað tekist. 1000 01:01:53,220 --> 01:01:57,070 Þannig að það gæti mistekist mörgum ástæðum, þú þarft ekki nóg pláss á tölvunni þinni, td. 1001 01:01:57,070 --> 01:01:59,790 Svo er það alltaf mikilvægt áður en þú gerir einhverjar aðgerðir með skrá 1002 01:01:59,790 --> 01:02:03,300 að við athugum hvort þessi skrá var opnuð tókst. 1003 01:02:03,300 --> 01:02:09,330 Svo það að, það er rifrildi í fopen vel, getum við opna skrá á marga vegu. 1004 01:02:09,330 --> 01:02:13,510 Það sem við getum gert er, getum við fara framhjá það W, sem þýðir hunsa skrá ef það hættir nú þegar, 1005 01:02:13,510 --> 01:02:18,070 Við getum framhjá a, sem þeir bæta við í lok skrá stað vega þyngra það, 1006 01:02:18,070 --> 01:02:22,730 eða við getum tilgreina r, sem þýðir, við skulum opna skrána sem lesa-eini. 1007 01:02:22,730 --> 01:02:24,890 Svo ef forritið reynir að gera neinar breytingar á skrá, 1008 01:02:24,890 --> 01:02:30,140 öskra á þá og ekki láta þá gera það. 1009 01:02:30,140 --> 01:02:33,320 Að lokum, þegar við erum búin með the skrá, búin að gera aðgerðir á henni, 1010 01:02:33,320 --> 01:02:35,860 við þurfum að tryggja að við að loka skrá. 1011 01:02:35,860 --> 01:02:38,830 Og svo í lok program, þú ert að fara að gefa þeim aftur 1012 01:02:38,830 --> 01:02:42,120 þessi skrá sem þú hefur opnað, og bara loka því. 1013 01:02:42,120 --> 01:02:44,650 Svo er þetta eitthvað mikilvægt að þú þarft að ganga úr skugga um að þú gerir. 1014 01:02:44,650 --> 01:02:47,180 Svo muna að þú getur opnað skrá, þá er hægt að skrifa á skrá, 1015 01:02:47,180 --> 01:02:51,270 gera starfsemi í skrá, en þá þarftu að loka skrá í árslok. 1016 01:02:51,270 --> 01:02:53,270 >> Einhverjar spurningar um undirstöðu skrá I / O? Já? 1017 01:02:53,270 --> 01:02:58,050 [Námsmaður spurning, óskiljanlegur] 1018 01:02:58,050 --> 01:03:02,480 Hérna. Spurningin er, hvar er þetta log.txt skrá birtast? 1019 01:03:02,480 --> 01:03:07,890 Jæja, ef þú gefur bara það log.txt, skapar það því í sömu möppu og executable. 1020 01:03:07,890 --> 01:03:10,500 Svo ef Ertu - >> [Student spurning, óskiljanlegur] 1021 01:03:10,500 --> 01:03:18,830 Já. Í sömu möppu, eða í sömu möppu, eins og þú kallar það. 1022 01:03:18,830 --> 01:03:21,400 Nú minni, stafla og hrúga. 1023 01:03:21,400 --> 01:03:23,400 Svo hvernig er minni lagði út í tölvunni? 1024 01:03:23,400 --> 01:03:26,270 Jæja, getur þú ímyndað þér minni sem tegund þessa blokk hér. 1025 01:03:26,270 --> 01:03:30,260 Og í minni við höfum það sem kallast hrúga fastur þarna, og stafla sem er þarna niðri. 1026 01:03:30,260 --> 01:03:34,480 Og hrúga vex niður og stafla vex upp. 1027 01:03:34,480 --> 01:03:38,620 Svo eins og Tommy nefnd - Jæja, og við höfum þessar aðrar 4 hluti sem ég ætla að fá í annað - 1028 01:03:38,620 --> 01:03:42,890 Eins og Tommy sagði áðan, þú veist hvernig aðgerðir hans kalla sig og kalla hvert annað? 1029 01:03:42,890 --> 01:03:44,930 Þeir byggja upp þessa tegund af stakkur ramma. 1030 01:03:44,930 --> 01:03:47,360 Jæja, ef helstu símtöl Foo, foo fær setja á mánudaginn. 1031 01:03:47,360 --> 01:03:52,430 Foo kallar Bar, Bar fá er sett á mánudaginn, og það verður sett á mánudaginn eftir. 1032 01:03:52,430 --> 01:03:57,040 Og eins og þeir koma aftur, hver þeir fá tekið af stafla. 1033 01:03:57,040 --> 01:04:00,140 Hvað halda öllum þessum stöðum og minni? 1034 01:04:00,140 --> 01:04:03,110 Jæja, the toppur, sem er texti hluti, inniheldur forritið sjálft. 1035 01:04:03,110 --> 01:04:06,390 Svo vél númer, það er það, þegar þú saman program. 1036 01:04:06,390 --> 01:04:08,520 Næst allir frumstilla alþjóðlegum breytur. 1037 01:04:08,520 --> 01:04:12,660 >> Svo þú ert á heimsvísu breytur í forritinu, og þú segir eins og a = 5, 1038 01:04:12,660 --> 01:04:15,260 sem fær að setja í þeim flokki, og rétt undir því, 1039 01:04:15,260 --> 01:04:18,990 þú hefur einhverjar forsniðinn alþjóðlegum gögnum, sem er bara int a, 1040 01:04:18,990 --> 01:04:20,990 en þú segir ekki það er jafn neitt. 1041 01:04:20,990 --> 01:04:23,870 Gera sér grein fyrir að þetta eru alþjóðlegt breytur, svo þeir eru utan helstu. 1042 01:04:23,870 --> 01:04:28,560 Svo þýðir þetta allir alþjóðlegum breytur sem lýst en ekki forsniðin. 1043 01:04:28,560 --> 01:04:32,310 Svo er það í hrúga? Minni úthlutað með malloc, sem við munum fá í smá. 1044 01:04:32,310 --> 01:04:35,990 Og að lokum, með stafla þú hefur einhverjar staðbundnar breytur 1045 01:04:35,990 --> 01:04:39,950 og hvaða aðgerðir sem þú gætir hringt í einhverju breytum þeirra. 1046 01:04:39,950 --> 01:04:43,720 The síðastur hlutur, þú í raun ekki að vita hvað umhverfið breytur gera, 1047 01:04:43,720 --> 01:04:46,700 en þegar þú keyrir forritið, það er eitthvað sem tengist, eins og 1048 01:04:46,700 --> 01:04:49,550 þetta er notandanafn þess sem hljóp forritið. 1049 01:04:49,550 --> 01:04:51,550 Og það er að fara að vera tegund af neðst. 1050 01:04:51,550 --> 01:04:54,540 Hvað talna minni, sem eru sextánskur gildi, 1051 01:04:54,540 --> 01:04:58,170 gildin á efstu byrja á 0, svo að þeir fara alla leið niður á botn. 1052 01:04:58,170 --> 01:05:00,440 Í þessu tilfelli, ef þú ert á 32-bita kerfi, 1053 01:05:00,440 --> 01:05:05,390 heimilisfangið neðst er að fara að vera 0x, eftir AF, því það er 32 bita, 1054 01:05:05,390 --> 01:05:10,890 sem er 8 bytes, og í þessu tilviki 8 bæti jafngildir 8 sextánskur tölustafir. 1055 01:05:10,890 --> 01:05:20,110 Svo niður þú ert að fara að hafa, eins og, 0xffffff, og allt þar sem þú ert að fara að hafa 0. 1056 01:05:20,110 --> 01:05:23,660 Svo hvaða ert ábendingum? Sumir af þú mega ekki hafa fjallað þetta í kafla áður. 1057 01:05:23,660 --> 01:05:26,660 en við fengum að fara yfir það í fyrirlestri, svo bendillinn er bara gögn tegund 1058 01:05:26,660 --> 01:05:34,030 sem verslanir, í stað einhvers konar gildi eins og 50, hún geymir heimilisfang einhverjum stað í minni. 1059 01:05:34,030 --> 01:05:36,020 Svona minni [óskiljanlegur]. 1060 01:05:36,020 --> 01:05:41,120 Svo í þessu tilfelli, það sem við höfum er að, höfum við bendi á heiltölu eða int *, 1061 01:05:41,120 --> 01:05:46,210 og það inniheldur þessa sextánskur heimilisfang 0xDEADBEEF. 1062 01:05:46,210 --> 01:05:50,880 >> Svo það sem við höfum er, nú, þetta bendillinn stig á einhverjum stað í minni, 1063 01:05:50,880 --> 01:05:56,020 og það er bara, gildið 50 er á þessum minni. 1064 01:05:56,020 --> 01:06:01,810 Á sumum 32-bita kerfi, á öllum 32-bita kerfi, ábendingum taka upp 32 bita eða 4 bæti. 1065 01:06:01,810 --> 01:06:06,020 En, td á 64-bita kerfi, ábendingum 64 bits. 1066 01:06:06,020 --> 01:06:08,040 Svo er það eitthvað sem þú þarft að hafa í huga. 1067 01:06:08,040 --> 01:06:12,310 Svo á endir-bita kerfi, bendillinn er endir bits langur. 1068 01:06:12,310 --> 01:06:17,320 Ábendingar eru svona erfitt að melta án auka hlutum, 1069 01:06:17,320 --> 01:06:20,300 þannig að við skulum fara í gegnum dæmi um dynamic minni úthlutun. 1070 01:06:20,300 --> 01:06:25,130 Hvað dynamic minni úthlutun gerir fyrir þig, eða það sem við köllum malloc, 1071 01:06:25,130 --> 01:06:29,280 það er hægt að úthluta einhvers konar gögnum utan setja. 1072 01:06:29,280 --> 01:06:31,830 Svo er þetta gögn svona meira varanleg á meðan the program. 1073 01:06:31,830 --> 01:06:36,430 Því eins og þú veist, ef þú lýsa x inni í aðgerð og að skilar, 1074 01:06:36,430 --> 01:06:40,910 þú hefur ekki lengur aðgang að þeim gögnum sem var geymd í x. 1075 01:06:40,910 --> 01:06:44,420 Hvaða ábendingar skulum gera er að þeir láta okkur geyma minni eða geyma gildi 1076 01:06:44,420 --> 01:06:46,840 í mismunandi hluti af minni, þ.e. hrúga. 1077 01:06:46,840 --> 01:06:49,340 Nú þegar við aftur úr virka, svo lengi sem við höfum músina 1078 01:06:49,340 --> 01:06:54,960 að þeim stað í minni, þá er það sem við getum gert við getum bara líta á gildi þar. 1079 01:06:54,960 --> 01:06:58,020 Við skulum líta á dæmi: Þetta er minni skipulag okkar aftur. 1080 01:06:58,020 --> 01:07:00,050 Og við höfum þessa aðgerð, helstu. 1081 01:07:00,050 --> 01:07:06,870 Hvað það gerir er - allt í lagi, svo einfalt, ekki satt - int x = 5, það er bara mismunandi á stafla í helstu. 1082 01:07:06,870 --> 01:07:12,450 >> Á hinn bóginn, nú erum við að lýsa yfir músina sem kallar aðgerðina giveMeThreeInts. 1083 01:07:12,450 --> 01:07:16,800 Og svo nú erum við að fara í þessa aðgerð og við að búa til nýja stafla ramma fyrir það. 1084 01:07:16,800 --> 01:07:20,440 Hins vegar í þessu stafla ramma, lýsa við int * afleysingamanneskja, 1085 01:07:20,440 --> 01:07:23,210 sem mallocs 3 heiltölur fyrir okkur. 1086 01:07:23,210 --> 01:07:25,880 Svo stærð int mun gefa okkur hversu mörg bæti þetta int er, 1087 01:07:25,880 --> 01:07:29,620 og malloc gefur okkur að margir bæti af plássi á hrúga. 1088 01:07:29,620 --> 01:07:32,890 Svo í þessu tilfelli, höfum við búið til nóg pláss fyrir 3 heiltölur 1089 01:07:32,890 --> 01:07:36,830 og hrúga er vegur þarna, sem er ástæða þess að ég hef dregið hana ofar. 1090 01:07:36,830 --> 01:07:42,900 Þegar við erum að gera, við komum aftur upp hér, þú þarft aðeins 3 ints skilað, 1091 01:07:42,900 --> 01:07:47,000 og það skilar tölu, í þessu tilfelli yfir þar sem minni er. 1092 01:07:47,000 --> 01:07:51,250 Og við sett músina = rofi, og þarna höfum við bara aðra músina. 1093 01:07:51,250 --> 01:07:54,550 En hvað það skilar er staflað hér og hverfur. 1094 01:07:54,550 --> 01:07:59,250 Svo hverfur Temp, en við höldum samt veffang þar sem 1095 01:07:59,250 --> 01:08:01,850 þessir 3 heiltölur eru inni í mains. 1096 01:08:01,850 --> 01:08:06,180 Þannig að í þessum hóp eru ábendingar scoped staðnum fyrir staflað ramma, 1097 01:08:06,180 --> 01:08:09,860 en minningin sem þeir vísa í hrúga. 1098 01:08:09,860 --> 01:08:12,190 >> Er það skynsamleg? 1099 01:08:12,190 --> 01:08:14,960 [Nemandi] Gætirðu endurtekið þetta? >> [Joseph] Já. 1100 01:08:14,960 --> 01:08:20,270 Svo ef ég fer aftur bara smá, sérðu að afleysingamanneskja úthlutað 1101 01:08:20,270 --> 01:08:23,500 sumir minni á hrúga upp þarna. 1102 01:08:23,500 --> 01:08:28,680 Svo þegar þessi aðgerð, giveMeThreeInts skilar þessi stafla hér er að fara að hverfa. 1103 01:08:28,680 --> 01:08:35,819 Og með það einhverju breyta, í þessu tilfelli, þetta músina sem var úthlutað í staflað ramma. 1104 01:08:35,819 --> 01:08:39,649 Það er að fara að hverfa, en þar sem við aftur afleysingamanneskja 1105 01:08:39,649 --> 01:08:46,330 og við setjum músina = hitastig, bendill er nú að fara að benda á sama minni stað eins og Temp var. 1106 01:08:46,330 --> 01:08:50,370 Svo nú, jafnvel þó að við missa afleysingamanneskja, að heimamenn músina, 1107 01:08:50,370 --> 01:08:59,109 við halda enn minni heimilisfang þess sem hún er að benda á að innan þeirrar breytu músina. 1108 01:08:59,109 --> 01:09:03,740 Spurningar? Það getur verið góður af ruglingslegt efni ef þú hefur ekki farið yfir það í kafla. 1109 01:09:03,740 --> 01:09:09,240 Við getum, TF mun örugglega fara yfir það og að sjálfsögðu getum við svarað spurningum 1110 01:09:09,240 --> 01:09:11,500 í lok endurskoðun fundur fyrir þetta. 1111 01:09:11,500 --> 01:09:14,220 En þetta er svona flókið málefni, og ég hef fleiri dæmi sem eru að fara að mæta 1112 01:09:14,220 --> 01:09:18,790 sem mun hjálpa skýra hvaða ábendingum raun eru. 1113 01:09:18,790 --> 01:09:22,500 >> Í þessu tilviki eru ábendingum jafngildir fylki, 1114 01:09:22,500 --> 01:09:25,229 þannig að ég get bara notað þetta músina sem sama sem int array. 1115 01:09:25,229 --> 01:09:29,840 Þannig að ég er að flokkun í 0, og breyta fyrsta heiltölu á 1, 1116 01:09:29,840 --> 01:09:39,689 breyta annarri heiltölu til 2, og 3 heiltala 3. 1117 01:09:39,689 --> 01:09:44,210 Svo meira á ábendingum. Jæja, man Binky. 1118 01:09:44,210 --> 01:09:48,319 Í þessu tilfelli höfum við úthlutað músina, eða við lýsti bendi, 1119 01:09:48,319 --> 01:09:52,760 en í upphafi, þegar ég lýsti bara músina, það er ekki að benda á að einhvers staðar í minni. 1120 01:09:52,760 --> 01:09:54,930 Það er bara sorp gildi innan þess. 1121 01:09:54,930 --> 01:09:56,470 Þannig að ég hef ekki hugmynd um hvar þetta bendillinn bendir til. 1122 01:09:56,470 --> 01:10:01,630 Það hefur netfang sem er bara fyllt með er 0 og er 1 þar sem það var upphaflega lýst. 1123 01:10:01,630 --> 01:10:04,810 Ég get ekki gert neitt með þetta þangað til ég kalla malloc á það 1124 01:10:04,810 --> 01:10:08,390 og þá gefur það mér smá pláss á hrúga þar sem ég get sett gildi inni. 1125 01:10:08,390 --> 01:10:11,980 Þá aftur, ég veit ekki hvað er inni í þessum minni. 1126 01:10:11,980 --> 01:10:16,780 Svo er það fyrsta sem ég þarf að gera að athuga hvort kerfið hefði nóg minni 1127 01:10:16,780 --> 01:10:20,850 að gefa mér til baka 1 heiltölu í fyrsta sæti, sem er ástæða þess að ég er að gera þetta stöðva. 1128 01:10:20,850 --> 01:10:25,020 Ef bendillinn er núll, sem þýðir að það var ekki nóg pláss eða einhver önnur villa kom upp, 1129 01:10:25,020 --> 01:10:26,320 þannig að ég ætti að hætta út af kerfinu mínu. 1130 01:10:26,320 --> 01:10:29,400  En ef það gerði ná árangri, nú get ég notað þessi músina 1131 01:10:29,400 --> 01:10:35,020 og hvað * bendillinn er er það þannig þar sem heimilisfangið er 1132 01:10:35,020 --> 01:10:38,480 þar sem gildi er, og það setur það jafnt 1. 1133 01:10:38,480 --> 01:10:41,850 Svo hérna, við erum að athuga hvort að minni hendi. 1134 01:10:41,850 --> 01:10:45,380 >> Þegar þú veist að það er til, er hægt að setja inn í það 1135 01:10:45,380 --> 01:10:50,460 Hvaða gildi sem þú vilt setja inn í það, í þessu tilviki 1. 1136 01:10:50,460 --> 01:10:53,060 Þegar við erum búin með það, þú þarft að losa þessi músina 1137 01:10:53,060 --> 01:10:57,160 vegna þess að við þurfum að fara aftur til the kerfi sem minni sem þú baðst um í fyrsta sæti. 1138 01:10:57,160 --> 01:10:59,690 Vegna þess að tölvan er ekki að vita þegar við erum búin með það. 1139 01:10:59,690 --> 01:11:02,510 Í þessu tilfelli erum við sérstaklega að segja það, allt í lagi, við erum búin með þessi minni. 1140 01:11:02,510 --> 01:11:10,780 Ef einhver önnur aðferð þarf það, einhver önnur forrit þarf á henni, ekki hika við að fara á undan og taka það. 1141 01:11:10,780 --> 01:11:15,110 Það sem við getum líka gert er að við getum bara fá heimilisfang staðbundnum breytur á tökustað. 1142 01:11:15,110 --> 01:11:19,080 Svo int x er innan staflað ramma Main. 1143 01:11:19,080 --> 01:11:23,060 Og þegar við notum þessa merkið, þetta og rekstraraðila, hvað það gerir er 1144 01:11:23,060 --> 01:11:27,310 það tekur x og x er bara gögn í minni, en það er heimilisfang. 1145 01:11:27,310 --> 01:11:33,790 Það er staðsett einhvers staðar. Svo með því að kalla & x, hvað þetta gerir er að hún gefur okkur veffang x. 1146 01:11:33,790 --> 01:11:38,430 Með þessu erum við að gera músina benda til þar sem x er í minni. 1147 01:11:38,430 --> 01:11:41,710 Nú erum við bara að gera eitthvað eins og * x, við erum að fara að fá 5 til baka. 1148 01:11:41,710 --> 01:11:43,820 Stjarnan er kallað dereferencing það. 1149 01:11:43,820 --> 01:11:46,640 Þú fylgja netfang og þú færð virði það geymt þar. 1150 01:11:51,000 --> 01:11:53,310 >> Einhverjar spurningar? Já? 1151 01:11:53,310 --> 01:11:56,500 [Nemandi] Ef þú gerir það ekki 3-bent hlutur, er það saman samt? 1152 01:11:56,500 --> 01:11:59,490 Já. Ef þú gera ekki 3-músina hlutur, það er samt að fara að taka saman, 1153 01:11:59,490 --> 01:12:02,720 en ég ætla að sýna ykkur hvað gerist í annað, og án þess að gera það, 1154 01:12:02,720 --> 01:12:04,860 það er það sem við köllum minni leka. Þú ert ekki að gefa kerfinu 1155 01:12:04,860 --> 01:12:07,850 aftur minni, svo eftir smá stund að forritið er að fara að safna 1156 01:12:07,850 --> 01:12:10,940 minni að það er ekki að nota, og ekkert annað hægt að nota það. 1157 01:12:10,940 --> 01:12:15,750 Ef þú hefur einhvern tíma séð Firefox með 1,5 milljónir kílóbæti á tölvunni þinni, 1158 01:12:15,750 --> 01:12:17,840 í Task Manager, það er það sem er að gerast. 1159 01:12:17,840 --> 01:12:20,760 Þú hefur minni leka í kerfinu að þeir eru ekki meðhöndlun. 1160 01:12:23,080 --> 01:12:26,240 Svo hvernig hjartarskinn bendillinn tölur vinna? 1161 01:12:26,240 --> 01:12:29,480 Jæja, bendillinn tölur er tegund af eins og flokkun í fylki. 1162 01:12:29,480 --> 01:12:36,370 Í þessu tilfelli, ég er með músina, og það sem ég gera er ég að gera músina benda á fyrstu frumefni 1163 01:12:36,370 --> 01:12:42,100 þessa fjölda 3 heiltölur sem ég hef úthlutað. 1164 01:12:42,100 --> 01:12:46,670 Svo nú hvað ég geri, stjörnu bendillinn breytist bara í fyrsta frumefnið í listanum. 1165 01:12:46,670 --> 01:12:49,140 Star músina 1 stig hérna. 1166 01:12:49,140 --> 01:12:53,140 Svo er bendillinn hérna, músina 1 er hérna, bendillinn +2 er hérna. 1167 01:12:53,140 --> 01:12:56,610 >> Svo bara að bæta 1 er það sama og að færa í þessu fylki. 1168 01:12:56,610 --> 01:12:59,880 Það sem við gerum er þegar við músina 1 þú færð heimilisfang hérna, 1169 01:12:59,880 --> 01:13:04,180 og til að fá verðmæti í hérna, þú setja stjörnu í frá öllu tjáningu 1170 01:13:04,180 --> 01:13:05,990 að dereference það. 1171 01:13:05,990 --> 01:13:09,940 Svo, í þessu tilfelli, ég er að setja í fyrsta stað í þessu fylki á 1, 1172 01:13:09,940 --> 01:13:13,970 annað stað til 2, og þriðja stað 3. 1173 01:13:13,970 --> 01:13:18,180 Þá er það sem ég er að gera hérna er ég að prenta músina okkar 1, 1174 01:13:18,180 --> 01:13:19,970 sem gefur bara mér 2. 1175 01:13:19,970 --> 01:13:23,650 Nú er ég incrementing músina, svo bendillinn jafngildir músina +1, 1176 01:13:23,650 --> 01:13:26,780 sem flytur það áfram. 1177 01:13:26,780 --> 01:13:30,810 Og svo núna ef ég prenta út músina +1, músina +1 er nú 3, 1178 01:13:30,810 --> 01:13:33,990 sem í þessu tilfelli prentar út 3. 1179 01:13:33,990 --> 01:13:36,560 Og í því skyni að losa eitthvað, bendillinn að ég gefi það 1180 01:13:36,560 --> 01:13:40,540 verður að benda á the byrjun af the array sem ég fékk til baka frá malloc. 1181 01:13:40,540 --> 01:13:43,430 Svo, í þessu tilfelli, ef ég væri að hringja 3 hérna, þetta væri ekki rétt, 1182 01:13:43,430 --> 01:13:45,070 því það er í the miðja af the array. 1183 01:13:45,070 --> 01:13:48,820 Ég verð að draga til að fá að upprunalegum stað 1184 01:13:48,820 --> 01:13:50,420 fyrstu fyrst blettur áður en ég get losað hann. 1185 01:13:56,300 --> 01:13:58,450 Svo, hér er meiri þátt dæmi. 1186 01:13:58,450 --> 01:14:03,360 Í þessu tilfelli erum við að úthluta 7 stafi í staf fylkisins. 1187 01:14:03,360 --> 01:14:06,480 >> Og í þessu tilfelli það sem við erum að gera er að við erum að lykkja yfir fyrstu 6 þeirra, 1188 01:14:06,480 --> 01:14:09,900 og við erum að setja þá til Z. 1189 01:14:09,900 --> 01:14:13,350 Svo, fyrir int i = 0, i> 6, i + +, 1190 01:14:13,350 --> 01:14:16,220 Svo, bendill + ég mun bara gefa okkur, í þessu tilviki, 1191 01:14:16,220 --> 01:14:20,860 músina, bendillinn +1, bendill +2, músina +3, og svo framvegis og svo framvegis í lykkju. 1192 01:14:20,860 --> 01:14:24,040 Hvað það er að fara að gera er að það gerist þetta netfang, dereferences það til að fá gildi, 1193 01:14:24,040 --> 01:14:27,440 og breytingar sem gildi til Z. 1194 01:14:27,440 --> 01:14:30,350 Síðan í lok muna þetta er band, ekki satt? 1195 01:14:30,350 --> 01:14:33,560 Allir strengir þurfa að enda með núll lúkningarenda staf. 1196 01:14:33,560 --> 01:14:38,620 Svo, hvað ég er í músina 6 Ég setti null Terminator staf inn 1197 01:14:38,620 --> 01:14:43,980 Og nú það sem ég er í rauninni að gera hérna er að innleiða printf fyrir band, ekki satt? 1198 01:14:43,980 --> 01:14:46,190 >> Svo, þegar er printf nú þegar hún er komin að enda á band? 1199 01:14:46,190 --> 01:14:48,230 Þegar það hits the núll uppsögn staf. 1200 01:14:48,230 --> 01:14:52,030 Svo, í þessu tilfelli, upprunalega bendillinn minn bendir á í upphafi þessa fylkisins. 1201 01:14:52,030 --> 01:14:56,410 Ég prenta fyrstu persónu út. Ég færa hana yfir einn. 1202 01:14:56,410 --> 01:14:58,420 Ég prenta þessi karakter út. Ég flyt það yfir. 1203 01:14:58,420 --> 01:15:02,180 Og ég halda að gera þetta þangað til ég ná til enda. 1204 01:15:02,180 --> 01:15:07,750 Og nú * endir bendillinn dereference þetta og fá núll uppsögn staf aftur. 1205 01:15:07,750 --> 01:15:11,780 Og svo rekur meðan lykkja mína aðeins þegar þessi gildi er ekki tómt uppsögn staf. 1206 01:15:11,780 --> 01:15:13,770 Svo nú er ég hætta út af þessu lykkju. 1207 01:15:18,780 --> 01:15:21,180 Og svo ef ég draga 6 af þessum músina, 1208 01:15:21,180 --> 01:15:22,860 Ég fer til baka alla leið að í upphafi. 1209 01:15:22,860 --> 01:15:27,880 Mundu ég að gera þetta vegna þess að ég þarf að fara í upphafi til þess að losa það. 1210 01:15:27,880 --> 01:15:30,270 >> Svo veit ég að var mikið. Eru einhverjar spurningar? 1211 01:15:30,270 --> 01:15:31,870 Vinsamlegast, já? 1212 01:15:31,870 --> 01:15:36,610 [Námsmaður spurning óskiljanlegur] 1213 01:15:36,610 --> 01:15:38,190 Getur þú sagt að hávær? Því miður. 1214 01:15:38,190 --> 01:15:44,140 [Nemandi] Á síðasta mynd rétt áður en þú leysti músina, 1215 01:15:44,140 --> 01:15:47,300 Hvar varst þú að breyta í raun verðmæti músina? 1216 01:15:47,300 --> 01:15:50,370 [Joseph] Svo, hérna. >> [Nemandi] Ó, allt í lagi. 1217 01:15:50,370 --> 01:15:51,890 [Joseph] Svo ég bendi mínus mínus, hægri, 1218 01:15:51,890 --> 01:15:54,140 sem flytur málið til baka einn, og þá skal ég losa það, 1219 01:15:54,140 --> 01:15:57,000 vegna þess að þetta bendi að að benda á byrjun fylkisins. 1220 01:15:57,000 --> 01:16:00,420 [Nemandi] En það yrði ekki þörf hefði þú hætt eftir þeirri línu. 1221 01:16:00,420 --> 01:16:03,130 [Joseph] Þannig að ef ég hefði hætt eftir þetta, myndi þetta teljast minni leka, 1222 01:16:03,130 --> 01:16:04,810 vegna þess að ég hafði ekki keyrt frjáls. 1223 01:16:04,810 --> 01:16:11,290 [Nemandi] I [óskiljanlegur] eftir fyrstu þrjár línur þar sem þú hafði músina +1 [óskiljanlegur]. 1224 01:16:11,290 --> 01:16:13,140 [Joseph] Uh-ha. Svo, hvað er spurning þarna? 1225 01:16:13,140 --> 01:16:14,780 Því miður. Nei, nei. Fara, fara, vinsamlegast. 1226 01:16:14,780 --> 01:16:16,870 [Nemandi] Svo, þú ert ekki að breyta gildi ábendingum. 1227 01:16:16,870 --> 01:16:19,130 Þú vilt ekki hafa þurft að gera músina mínus mínus. 1228 01:16:19,130 --> 01:16:19,730 [Joseph] Já, nákvæmlega. 1229 01:16:19,730 --> 01:16:21,890 Svo, þegar ég bendi +1 og bendilinn 2, 1230 01:16:21,890 --> 01:16:24,410 Ég er ekki að gera músina jafngildir músina +1. 1231 01:16:24,410 --> 01:16:27,260 Svo, bendillinn bara helst að benda á í byrjun fylkisins. 1232 01:16:27,260 --> 01:16:31,460 Það er aðeins þegar ég plús plús að það setur gildi aftur inn í músina, 1233 01:16:31,460 --> 01:16:33,550 að það færist í raun þetta eftir. 1234 01:16:36,860 --> 01:16:37,780 Allt í lagi. 1235 01:16:40,550 --> 01:16:42,030 Fleiri spurningar? 1236 01:16:44,680 --> 01:16:47,790 >> Aftur, ef þetta er svona yfirþyrmandi, þetta verður fjallað á fundi. 1237 01:16:47,790 --> 01:16:50,710 Spurðu kennslu félaga þína um það, og við getum svarað spurningum í lokin. 1238 01:16:53,510 --> 01:16:56,600 Og yfirleitt erum við ekki eins og að gera þetta mínus hlutur. 1239 01:16:56,600 --> 01:16:59,760 Þetta hefur að krefjast mér að halda utan um hversu mikið ég hef á móti í fylki. 1240 01:16:59,760 --> 01:17:04,520 Svo almennt, þetta er bara til að útskýra hvernig Pointer tölur virkar. 1241 01:17:04,520 --> 01:17:07,970 En það sem við eins og venjulega að gera er að við eins og til að búa til afrit af músina, 1242 01:17:07,970 --> 01:17:11,640 og þá munum við nota það eintak þegar við erum að flytja í kring í the band. 1243 01:17:11,640 --> 01:17:14,660 Svo, í þessum tilfelli þú nota afrita til að prenta allt band, 1244 01:17:14,660 --> 01:17:19,040 en við þurfum ekki að gera eins og músina mínus 6 eða halda utan um hversu mikið við fluttum í þetta, 1245 01:17:19,040 --> 01:17:22,700 bara vegna þess að við vitum að upprunalega lið okkar er enn bent á byrjun lista 1246 01:17:22,700 --> 01:17:25,340 og allt sem við breytt var þetta eintak. 1247 01:17:25,340 --> 01:17:28,250 Svo almennt, breytt afrit af upprunalegu músina þína. 1248 01:17:28,250 --> 01:17:32,350 Ekki reyna að raða í svona - áttina breyta frumritum. 1249 01:17:32,350 --> 01:17:35,290 Reynt að breyta aðeins afrit af upprunalegu. 1250 01:17:41,540 --> 01:17:44,870 Svo, eftir að þú þegar við framhjá band inn printf 1251 01:17:44,870 --> 01:17:48,990 þú þarft ekki að setja stjörnu fyrir framan það eins og við gerðum með öllum öðrum dereferences, ekki satt? 1252 01:17:48,990 --> 01:17:54,180 Svo, ef þú hefur prentað út allt band% s ráð er heimilisfang, 1253 01:17:54,180 --> 01:17:57,610 og í þessu tilfelli músina eða í þessu tilfelli eins og fylki af stöfum. 1254 01:17:57,610 --> 01:18:00,330 >> Íþróttir, char * s, og fylki eru það sama. 1255 01:18:00,330 --> 01:18:03,690 Bendillinn er að stafi, og eðli fylki eru það sama. 1256 01:18:03,690 --> 01:18:05,720 Og svo, allt sem við þurfum að gera er að fara í músina. 1257 01:18:05,720 --> 01:18:08,150 Við þurfum ekki að fara í eins og músina * eða eitthvað svoleiðis. 1258 01:18:13,110 --> 01:18:14,930 Svo eru fylki og ábendingum sama. 1259 01:18:14,930 --> 01:18:19,160 Þegar þú ert að gera eitthvað eins og x [Y] hérna í fylki, 1260 01:18:19,160 --> 01:18:21,960 hvað það er að gera undir hetta er það er að segja, allt í lagi, það er eðli array, 1261 01:18:21,960 --> 01:18:23,690 svo það er bendi. 1262 01:18:23,690 --> 01:18:26,510 Og svo x er það sama, 1263 01:18:26,510 --> 01:18:28,650 og svo hvað það gerir er að það bætir Y til X, 1264 01:18:28,650 --> 01:18:31,820 sem er það sama og áfram í minni það mikið. 1265 01:18:31,820 --> 01:18:34,930 Og nú gefur x + y okkur einhvers konar heimilisfang, 1266 01:18:34,930 --> 01:18:37,570 og við dereference heimilisfang eða fylgja á örina 1267 01:18:37,570 --> 01:18:41,640 þar sem staðsetning í minni er og við fá verðmæti út úr þeim stað í minni. 1268 01:18:41,640 --> 01:18:43,720 Svo, svo þessir tveir eru nákvæmlega það sama. 1269 01:18:43,720 --> 01:18:45,840 Það er bara syntactic sykur. 1270 01:18:45,840 --> 01:18:48,090 Þeir gera það sama. Þeir eru bara mismunandi syntactics fyrir hvert öðru. 1271 01:18:51,500 --> 01:18:57,590 >> Svo, hvað getur farið úrskeiðis við ábendingum? Eins og a einhver fjöldi. Allt í lagi. Svo slæmur hlutur. 1272 01:18:57,590 --> 01:19:02,410 Sumir slæmur hlutur þú geta gera er ekki að haka ef malloc símtöl skilar null, ekki satt? 1273 01:19:02,410 --> 01:19:06,560 Í þessu tilfelli er ég að spyrja kerfið að gefa mér - það er að tala? 1274 01:19:06,560 --> 01:19:11,200 Eins og 2 milljarða sinnum 4, vegna þess að stærð heiltala er 4 bæti. 1275 01:19:11,200 --> 01:19:13,810 Ég er að biðja hann um eins og 8 milljarðar bæti. 1276 01:19:13,810 --> 01:19:17,270 Auðvitað tölvan mín er ekki að fara að vera fær um að gefa mér það mikið minni til baka. 1277 01:19:17,270 --> 01:19:20,960 Og við ekki athuga hvort það er núll, þannig að þegar við reynum að dereference það þarna - 1278 01:19:20,960 --> 01:19:24,270 fylgja á örina til þar sem það er að fara að - við höfum ekki þessi minni. 1279 01:19:24,270 --> 01:19:27,150 Þetta er það sem við köllum dereferencing núll músina. 1280 01:19:27,150 --> 01:19:29,710 Og þetta veldur fyrst og fremst að segfault. 1281 01:19:29,710 --> 01:19:31,790 Þetta er ein af þeim leiðum sem þú getur segfault. 1282 01:19:34,090 --> 01:19:38,090 Aðrir slæmir hlutir sem þú getur gert - ó vel. 1283 01:19:38,090 --> 01:19:40,650 Það var dereferencing núll músina. Allt í lagi. 1284 01:19:40,650 --> 01:19:45,160 Annað slæmur hlutur - vel, að festa sem þú setur bara ávísun á það 1285 01:19:45,160 --> 01:19:46,980 sem athugar hvort bendillinn er null 1286 01:19:46,980 --> 01:19:51,000 og fara út úr kerfinu ef það gerist að malloc skilar núll músina. 1287 01:19:55,110 --> 01:19:59,850 Það er XKCD grínisti. Fólk skilur það núna. Konar. 1288 01:20:06,120 --> 01:20:09,350 >> Svo minni. Og ég fór yfir þetta. 1289 01:20:09,350 --> 01:20:12,000 Við köllum malloc í lykkju, en í hvert skipti sem við köllum malloc 1290 01:20:12,000 --> 01:20:14,370 Við erum að missa utan um hvar þetta bendillinn er að benda á að, 1291 01:20:14,370 --> 01:20:15,750 vegna þess að við erum clobbering það. 1292 01:20:15,750 --> 01:20:18,410 Svo fyrstu kalla til malloc gefur mér minni hérna. 1293 01:20:18,410 --> 01:20:19,990 Bendillinn ábendingum mín til þessa. 1294 01:20:19,990 --> 01:20:23,020 Nú, ég losa ekki það, svo nú er ég kalla malloc aftur. 1295 01:20:23,020 --> 01:20:26,070 Nú bendir það hérna. Nú minni mitt er að benda á hérna. 1296 01:20:26,070 --> 01:20:27,640 Bendir hérna. Bendir hérna. 1297 01:20:27,640 --> 01:20:31,820 En ég hef misst utan um heimilisföng allra minni hérna að ég úthlutað. 1298 01:20:31,820 --> 01:20:35,100 Og svo núna er ég ekki neina tilvísun til þeirra lengur. 1299 01:20:35,100 --> 01:20:37,230 Svo get ég ekki losa þá við þessa lykkju. 1300 01:20:37,230 --> 01:20:39,390 Og svo til þess að festa eitthvað eins og þetta, 1301 01:20:39,390 --> 01:20:42,250 Ef þú gleymir að losa um minni og þú færð þetta minni leka, 1302 01:20:42,250 --> 01:20:45,810 Þú þarft að losa minni innan þessa lykkju þegar þú ert búinn með það. 1303 01:20:45,810 --> 01:20:51,400 Jæja, þetta er það sem gerist. Ég veit fullt af þú hata þetta. 1304 01:20:51,400 --> 01:20:55,270 En nú - yay! Þú færð eins og 44.000 kílóbæti. 1305 01:20:55,270 --> 01:20:57,110 Svo, losa þú það í lok lykkju, 1306 01:20:57,110 --> 01:20:59,770 og það er að fara að bara losa minni í hvert skipti. 1307 01:20:59,770 --> 01:21:03,620 Í meginatriðum, program þinn styður ekki hafa minni leka lengur. 1308 01:21:03,620 --> 01:21:08,150 >> Og nú er eitthvað annað sem þú getur gert losa minni sem þú hefur beðið um tvisvar. 1309 01:21:08,150 --> 01:21:11,060 Í þessu tilfelli, þú malloc eitthvað, breyta þú gildi. 1310 01:21:11,060 --> 01:21:13,140 Þú losa hana einu sinni af því að þú sagðir að þú værir búinn með það. 1311 01:21:13,140 --> 01:21:14,940 En þá erum við losna aftur. 1312 01:21:14,940 --> 01:21:16,730 Þetta er eitthvað sem er ansi slæmt. 1313 01:21:16,730 --> 01:21:18,820 Það er ekki að fara að byrja segfault, 1314 01:21:18,820 --> 01:21:23,350 en eftir smá stund hvað þetta gerir er tvöfaldur frjáls þetta sé spillir hrúga uppbygging, 1315 01:21:23,350 --> 01:21:27,200 og þú munt læra svolítið meira um þetta ef þú velur að taka bekk eins CS61. 1316 01:21:27,200 --> 01:21:30,000 En fyrst og fremst eftir smá stund tölvan er að fara að fá rugla 1317 01:21:30,000 --> 01:21:33,010 hvað minni stöðum eru þar og þar sem það er geymt - 1318 01:21:33,010 --> 01:21:34,800 þar sem gögn eru geymd í minni. 1319 01:21:34,800 --> 01:21:38,080 Og svo frjáls bendi tvisvar er a slæmur hlutur sem þú vilt ekki gera. 1320 01:21:38,080 --> 01:21:41,600 >> Annað atriði sem getur farið úrskeiðis er ekki að nota sizeof. 1321 01:21:41,600 --> 01:21:44,460 Svo, í þessu tilfelli þú malloc 8 bæti, 1322 01:21:44,460 --> 01:21:46,700 og það er það sama og tvær heiltölur, ekki satt? 1323 01:21:46,700 --> 01:21:49,580 Svo, það er alveg öruggt, en er það? 1324 01:21:49,580 --> 01:21:52,160 Jæja, eins og Lucas talaði um á mismunandi arkitektúr, 1325 01:21:52,160 --> 01:21:54,220 heiltölur eru af ýmsum lengdum. 1326 01:21:54,220 --> 01:21:57,970 Svo, á tæki sem þú ert að nota, eru heiltölur um 4 bæti, 1327 01:21:57,970 --> 01:22:02,370 en á nokkrum öðrum kerfi sem þeir gætu verið 8 bytes eða þeir gætu verið 16 bæti. 1328 01:22:02,370 --> 01:22:05,680 Svo, ef ég nota bara þessa tölu hérna, 1329 01:22:05,680 --> 01:22:07,310 Þetta forrit gæti vinna á tækinu, 1330 01:22:07,310 --> 01:22:10,360 en það er ekki að fara að úthluta nóg minni á einhverju öðru kerfi. 1331 01:22:10,360 --> 01:22:14,020 Í þessu tilfelli, þetta er það sem sizeof rekstraraðili er notað. 1332 01:22:14,020 --> 01:22:16,880 Þegar við köllum sizeof (int), hvað þetta gerir er 1333 01:22:16,880 --> 01:22:21,910  það gefur okkur stærð heiltala á kerfi sem forritið er í gangi. 1334 01:22:21,910 --> 01:22:25,490 Svo, í þessu tilfelli, sizeof (int) aftur 4 um eitthvað eins og tæki, 1335 01:22:25,490 --> 01:22:29,980 og nú mun 4 * 2, sem er 8, 1336 01:22:29,980 --> 01:22:32,330 sem er bara pláss nauðsynlegt fyrir tvær heiltölur. 1337 01:22:32,330 --> 01:22:36,710 Á mismunandi kerfi, ef int er eins 16 bæti eða 8 bæti, 1338 01:22:36,710 --> 01:22:39,380 það er bara að fara að skila nógu bæti til að geyma þá upphæð. 1339 01:22:41,830 --> 01:22:45,310 >> Og að lokum, structs. 1340 01:22:45,310 --> 01:22:48,340 Svo, ef þú vildir geyma Sudoku borð í minni, hvernig gætum við gert þetta? 1341 01:22:48,340 --> 01:22:51,570 Þú might hugsa um eins og breytu í fyrsta hlutur, 1342 01:22:51,570 --> 01:22:53,820 breytu fyrir annað hlutur, breytu í þriðja hlutur, 1343 01:22:53,820 --> 01:22:56,420 breytu fyrir fjórða hlutur - slæmt, ekki satt? 1344 01:22:56,420 --> 01:23:00,750 Svo, einn framför sem þú getur gert á toppur af það er að gera 9 x 9 fylki. 1345 01:23:00,750 --> 01:23:04,480 Það er allt í lagi, en hvað ef þú vildir að tengja annað við Sudoku borð 1346 01:23:04,480 --> 01:23:06,490 eins og það að erfitt er að borð er, 1347 01:23:06,490 --> 01:23:11,740 eða, til dæmis, hvað stigafjöldi þinn er, eða hversu mikinn tíma það hefur tekið að leysa þetta borð? 1348 01:23:11,740 --> 01:23:14,970 Jæja, hvað er hægt að gera er að þú getur búið til strúktúr. 1349 01:23:14,970 --> 01:23:18,910 Það sem ég er í rauninni að segja er að ég er að skilgreina þessa uppbyggingu hérna, 1350 01:23:18,910 --> 01:23:23,230 og ég er að skilgreina Sudoku borð sem samanstendur af stjórn sem er 9 X 9. 1351 01:23:23,230 --> 01:23:26,650 >> Og hvað það hefur það hefur ábendingum á nafni vettvangi. 1352 01:23:26,650 --> 01:23:30,730 Það hefur einnig x og y, sem eru hnit þar sem ég er núna. 1353 01:23:30,730 --> 01:23:35,980 Það hefur líka tími [óskiljanlegur], og það hefur heildarfjölda færist ég hef inputted svo langt. 1354 01:23:35,980 --> 01:23:40,010 Og svo í þessu tilfelli, get ég raða a heild búnt af gögnum inn bara eina byggingu 1355 01:23:40,010 --> 01:23:42,790 í stað þess að hafa það eins og að fljúga í kring í eins mismunandi breytur 1356 01:23:42,790 --> 01:23:44,540 sem ég get ekki í raun halda utan um. 1357 01:23:44,540 --> 01:23:49,720 Og þetta gerir okkur hafa bara gott setningafræði fyrir konar tilvísun mismunandi hluti inni þessa strúktúr. 1358 01:23:49,720 --> 01:23:53,430 Ég get bara gert board.board, og ég fá Sudoku borð aftur. 1359 01:23:53,430 --> 01:23:56,320 Board.level, fæ ég hversu erfitt það er. 1360 01:23:56,320 --> 01:24:00,540 Board.x og board.y gefa mér hint um hvar ég væri í stjórn. 1361 01:24:00,540 --> 01:24:04,730 Og svo ég opna það sem við köllum sviðum í strúktúr. 1362 01:24:04,730 --> 01:24:08,840 Þetta skilgreinir sudokuBoard, sem er ein tegund sem ég hef. 1363 01:24:08,840 --> 01:24:14,800 Og nú erum við hér. Ég er með breytu sem heitir "Stjórn" í sudokuBoard tegund. 1364 01:24:14,800 --> 01:24:18,820 Og svo nú get ég aðgang að öllum sviðum sem gera upp þetta skipulag hérna. 1365 01:24:20,830 --> 01:24:22,450 >> Einhverjar spurningar um structs? Já? 1366 01:24:22,450 --> 01:24:25,890 [Nemandi] Fyrir int x, y, lýst þér bæði í einni línu? >> [Joseph] Uh-ha. 1367 01:24:25,890 --> 01:24:27,400 [Nemandi] Svo getur þú bara með þeim öllum? 1368 01:24:27,400 --> 01:24:31,200 Eins og í X, Y comma sinnum það samtals? 1369 01:24:31,200 --> 01:24:34,460 [Joseph] Já, þú gætir örugglega gert það, en ástæðan ég setti x og y á sömu línu - 1370 01:24:34,460 --> 01:24:36,330 og spurningin er hvers vegna getum við ekki bara þetta á sömu línu? 1371 01:24:36,330 --> 01:24:38,600 Hvers vegna eigum við ekki að setja bara allt þetta í sömu línu er 1372 01:24:38,600 --> 01:24:42,090 x og y eru tengdar við hvert annað, 1373 01:24:42,090 --> 01:24:44,780 og þetta er bara stylistically réttari, í vissum skilningi, 1374 01:24:44,780 --> 01:24:46,600 því það er hópar tvennt á sömu línu 1375 01:24:46,600 --> 01:24:49,340 sem eins konar varða á sama. 1376 01:24:49,340 --> 01:24:51,440 Og ég skipt bara þetta sundur. Það er bara stíll hlutur. 1377 01:24:51,440 --> 01:24:53,720 Það gerir virkni ekki máli af neinu tagi. 1378 01:24:58,150 --> 01:24:59,270 Einhverjar fleiri spurningar um structs? 1379 01:25:03,030 --> 01:25:06,620 Þú getur slegið inn Pokédex með strúktúr. 1380 01:25:06,620 --> 01:25:11,720 A Pokémon hefur númer og það hefur bréf, sem eiganda, tegund. 1381 01:25:11,720 --> 01:25:16,990 Og svo ef þú ert óákveðinn greinir í ensku fylking af Pokémon, er hægt að gera upp Pokédex, ekki satt? 1382 01:25:16,990 --> 01:25:20,810 Allt í lagi, svalt. Svo spurningar um structs. Þeir eru tengjast structs. 1383 01:25:20,810 --> 01:25:25,270 >> Að lokum, GDB. Hvað er GDB láta þig gera? Það gerir þér kleift að kemba program. 1384 01:25:25,270 --> 01:25:27,650 Og ef þú hefur ekki notað gdb, hefði ég mælt með að horfa til skamms 1385 01:25:27,650 --> 01:25:31,250 og bara að fara yfir það GDB er, hvernig þú vinnur með það, hvernig þú getur notað það, 1386 01:25:31,250 --> 01:25:32,900 og prófa það á dagskrá. 1387 01:25:32,900 --> 01:25:37,400 Og svo er það GDB leyfir þér að gera það gerir hlé á [óskiljanlegur] UP program 1388 01:25:37,400 --> 01:25:38,920 og verklegt línu. 1389 01:25:38,920 --> 01:25:42,600 Til dæmis, ég vil hlé framkvæmd á eins og línu 3 af áætlun minni, 1390 01:25:42,600 --> 01:25:46,010 og á meðan ég er á línu 3 sem ég get prentað út öll þau gildi sem eru þar. 1391 01:25:46,010 --> 01:25:49,710 Og svo það sem við köllum eins og stansa í línu 1392 01:25:49,710 --> 01:25:52,350 er að við köllum þetta að setja breakpoint á þeirri línu 1393 01:25:52,350 --> 01:25:55,920 og þá getum við prentað út breytur á the ástand af the program á þeim tíma. 1394 01:25:55,920 --> 01:25:58,990 >> Við getum þá þaðan stíga í gegnum forritið línu-við-línu. 1395 01:25:58,990 --> 01:26:03,200 Og þá getum við litið á stöðu stafla á þeim tíma. 1396 01:26:03,200 --> 01:26:08,600 Og svo til að nota gdb, það sem við gerum er að við köllum clang á C skrá, 1397 01:26:08,600 --> 01:26:11,290 en við verðum að fara framhjá það á-ggdb fána. 1398 01:26:11,290 --> 01:26:15,850 Og þegar við erum búin með því að við að keyra bara gdb á leiðir framleiðsla skrá. 1399 01:26:15,850 --> 01:26:18,810 Og svo þú fá eins massa texta svona, 1400 01:26:18,810 --> 01:26:21,990 en í raun allt sem þú þarft að gera er að slá inn skipanir í upphafi. 1401 01:26:21,990 --> 01:26:24,250 Brot helstu setur breakpoint á helstu. 1402 01:26:24,250 --> 01:26:28,470 Listi 400 taldar línur af kóða í kringum línu 400. 1403 01:26:28,470 --> 01:26:31,410 Og svo í þessu tilviki getur þú bara líta í kring og segja, ó, 1404 01:26:31,410 --> 01:26:34,360 Mig langar að setja breakpoint í línu 397, sem er í línu, 1405 01:26:34,360 --> 01:26:37,170 og þá keyrir forritið þitt inn í þessi skref og það er að fara að brjóta. 1406 01:26:37,170 --> 01:26:41,120 Það er að fara að staldra við þar, og hægt er að prenta út, til dæmis gildi lágt eða hátt. 1407 01:26:41,120 --> 01:26:46,410 Og þannig að það eru fullt af skipunum sem þú þarft að vita, 1408 01:26:46,410 --> 01:26:48,660 og þessi myndasýning mun fara upp á heimasíðu, 1409 01:26:48,660 --> 01:26:54,000 þannig að ef þú vilt bara að vísa þessum eða eins og setja þá á svindlari lak þína, ekki hika. 1410 01:26:54,000 --> 01:27:00,650 >> Cool. Það var Quiz Review 0, og við munum halda fast í kring ef þú hefur einhverjar spurningar. 1411 01:27:00,650 --> 01:27:03,850 Allt í lagi. 1412 01:27:03,850 --> 01:27:09,030 >>  [Lófaklapp] 1413 01:27:09,030 --> 01:27:13,000 >> [CS50.TV]