1 00:00:00,000 --> 00:00:03,000 [Powered by Google Translate] [Vika 4] 2 00:00:03,000 --> 00:00:05,000 [David J. Malan] [Harvard University] 3 00:00:05,000 --> 00:00:08,000 [Þetta er CS50.] [CS50.TV] 4 00:00:08,000 --> 00:00:12,000 >> Allt í lagi, þetta er CS50, og þetta er upphaf 4. viku, 5 00:00:12,000 --> 00:00:16,000 og þetta er einn af the hægur mögulega flokkun reiknirit. 6 00:00:16,000 --> 00:00:19,000 Hver var það sem við horfðum bara þarna? 7 00:00:19,000 --> 00:00:24,000 Það var kúla tegund, í því skyni stór O (n ^ 2) + summa, 8 00:00:24,000 --> 00:00:28,000 og vér erum ekki þeir einu í þessum heimi til að virðast vita 9 00:00:28,000 --> 00:00:30,000 hvaða kúla tegund er eða hlaupandi tími til þess. 10 00:00:30,000 --> 00:00:33,000 Reyndar var þetta viðtal við Eric Schmidt Google 11 00:00:33,000 --> 00:00:45,000 og fyrrum Senator Barack Obama bara fyrir nokkrum árum síðan. 12 00:00:45,000 --> 00:00:48,000 >> Nú, Senator, þú ert hér á Google, 13 00:00:48,000 --> 00:00:54,000 og ég eins og til hugsa af formennsku sem atvinnuviðtal. 14 00:00:54,000 --> 00:00:58,000 Nú er það erfitt að fá starf sem forseti, og þú ert að fara í gegnum álagið nú. 15 00:00:58,000 --> 00:01:00,000 Það er líka erfitt að fá vinnu á Google. 16 00:01:00,000 --> 00:01:05,000 Við höfum spurningar, og við biðjum frambjóðendur spurningum okkar, 17 00:01:05,000 --> 00:01:10,000 og þetta er frá Larry Schwimmer. 18 00:01:10,000 --> 00:01:14,000 Þið krakkar held ég að grínast? Það er hérna. 19 00:01:14,000 --> 00:01:18,000 Hvað er skilvirkasta leiðin til að raða milljón 32-bita heiltölur? 20 00:01:18,000 --> 00:01:21,000 [Hlátur] 21 00:01:21,000 --> 00:01:24,000 Vel 22 00:01:24,000 --> 00:01:26,000 Fyrirgefðu. >> Nei, nei, nei, nei. 23 00:01:26,000 --> 00:01:34,000 Ég held að kúla tegund væri röng leið til að fara. 24 00:01:34,000 --> 00:01:39,000 >> Svona, sem sagði honum þetta? 25 00:01:39,000 --> 00:01:43,000 Síðasta vika muna við tókum pásu frá kóða, að minnsta kosti í einn dag, 26 00:01:43,000 --> 00:01:46,000 og byrjaði með áherslu á sumum meiri hugmyndum og leysa vandamál almennt 27 00:01:46,000 --> 00:01:49,000 í tengslum við að leita og flokka, 28 00:01:49,000 --> 00:01:53,000 og við kynna eitthvað sem við vissum ekki smellu þetta nafn á síðustu viku, 29 00:01:53,000 --> 00:01:56,000 en asymptotic ritháttur, Big O, Big Omega, 30 00:01:56,000 --> 00:02:00,000 og stundum Big Þeta tákn, og þetta voru einfaldlega leiðir 31 00:02:00,000 --> 00:02:02,000 að lýsa gangi tíma reiknirit, 32 00:02:02,000 --> 00:02:05,000 hversu mikinn tíma það tekur fyrir reiknirit til að keyra. 33 00:02:05,000 --> 00:02:08,000 >> Og þú getur muna að þú talaði um að keyra tíma hvað varðar stærð 34 00:02:08,000 --> 00:02:11,000 inntak, sem við köllum yfirleitt n, hvað sem vandamálið kann að vera, 35 00:02:11,000 --> 00:02:13,000 þar sem n er fjöldi fólks í herberginu, 36 00:02:13,000 --> 00:02:17,000 fjölda síðna í símaskránni, og við byrjuðum að skrifa það út 37 00:02:17,000 --> 00:02:21,000 eins og O (n ^ 2) eða O (n) eða O (n log n), 38 00:02:21,000 --> 00:02:24,000 og jafnvel þegar stærðfræði ekki alveg að vinna út svo fullkomlega 39 00:02:24,000 --> 00:02:28,000 og það var N ² - N / 2 eða eitthvað svoleiðis 40 00:02:28,000 --> 00:02:31,000 við viljum í staðinn bara henda burt sumir af the lægri röð skilmálum, 41 00:02:31,000 --> 00:02:34,000 og hvatning er það sem við viljum í raun 42 00:02:34,000 --> 00:02:37,000 konar markmið leið að meta 43 00:02:37,000 --> 00:02:39,000 árangur af forritum eða árangur reiknirit 44 00:02:39,000 --> 00:02:42,000 að í lok dags hefur ekkert að gera, til dæmis, 45 00:02:42,000 --> 00:02:45,000 með hraða tölvunni þinni í dag. 46 00:02:45,000 --> 00:02:47,000 >> Fyrir dæmi, ef þú framkvæma kúla konar, 47 00:02:47,000 --> 00:02:50,000 eða þú koma Mergesort eða val sort á tölvunni í dag, 48 00:02:50,000 --> 00:02:53,000 a 2 GHz tölva, og þú keyrir það, 49 00:02:53,000 --> 00:02:56,000 og það tekur nokkurn fjölda sekúndur, á næsta ári það er 3 GHz 50 00:02:56,000 --> 00:02:59,000 eða 4 GHz tölva, og þú gætir þá halda því fram að "Wow, reiknirit minn 51 00:02:59,000 --> 00:03:03,000 er nú tvisvar sinnum eins hratt, "þegar í raun það er augljóslega ekki málið. 52 00:03:03,000 --> 00:03:06,000 Það er bara vélbúnaður hefur fengið hraðar en tölvan 53 00:03:06,000 --> 00:03:10,000 hefur ekki, og svo að við viljum virkilega að henda hlutum eins 54 00:03:10,000 --> 00:03:13,000 margfeldi af 2, fleiri eða 3 þegar kemur að því að lýsa 55 00:03:13,000 --> 00:03:17,000 hversu hratt eða hvernig hægt er reiknirit er og í raun bara að einbeita 56 00:03:17,000 --> 00:03:20,000 á n eða einhverju þáttur hennar, 57 00:03:20,000 --> 00:03:24,000 sumir máttur þeirra eins og um er að ræða tegund frá síðustu viku. 58 00:03:24,000 --> 00:03:27,000 Og muna að með hjálp Mergesort 59 00:03:27,000 --> 00:03:31,000 gátum við gert svo miklu betur en tegund kúla og val sortera 60 00:03:31,000 --> 00:03:33,000 og jafnvel insertion sort. 61 00:03:33,000 --> 00:03:36,000 >> Við fengum niður n log n, og aftur, 62 00:03:36,000 --> 00:03:39,000 muna að log n almennt er átt við eitthvað sem vex 63 00:03:39,000 --> 00:03:43,000 hægar en N, svo N log n svona langt var góð 64 00:03:43,000 --> 00:03:45,000 vegna þess að það var minna en n ². 65 00:03:45,000 --> 00:03:47,000 En til að ná N log n með Mergesort 66 00:03:47,000 --> 00:03:51,000 hvað var grunn sýkill um hugmynd sem við þurftum að nýta 67 00:03:51,000 --> 00:03:54,000 að við skuldsett einnig aftur í viku 0? 68 00:03:54,000 --> 00:03:58,000 Hvernig fengum við takast á við flokkun vandamál snjall með Mergesort? 69 00:03:58,000 --> 00:04:04,000 Hver var lykillinn innsýn, kannski? 70 00:04:04,000 --> 00:04:07,000 Einhver á öllum. 71 00:04:07,000 --> 00:04:09,000 Jæja, við skulum taka skref til baka. 72 00:04:09,000 --> 00:04:11,000 Lýsið Mergesort á eigin orðum. 73 00:04:11,000 --> 00:04:15,000 Hvernig var það? 74 00:04:15,000 --> 00:04:17,000 Jæja, munum við róa aftur viku 0. 75 00:04:17,000 --> 00:04:19,000 Jæja, já. 76 00:04:19,000 --> 00:04:22,000 [Inaudible nemanda] 77 00:04:22,000 --> 00:04:26,000 Jæja, gott, svo við skipt array af tölum í 2 stykki. 78 00:04:26,000 --> 00:04:29,000 Við raðað hvert þessara verka, og þá erum við sameinuð þeim, 79 00:04:29,000 --> 00:04:33,000 og við höfum séð þessa hugmynd áður en að taka vandamál sem er þetta stór 80 00:04:33,000 --> 00:04:36,000 og chopping það upp í vandamál sem er þetta stór eða þetta stór. 81 00:04:36,000 --> 00:04:38,000 >> Muna Símaskrárstillingar dæmi. 82 00:04:38,000 --> 00:04:42,000 Muna sjálf-Talning reiknirit frá vikum, 83 00:04:42,000 --> 00:04:45,000 svo Mergesort var tekin þessi sauðakóðanum hér. 84 00:04:45,000 --> 00:04:48,000 Þegar þú ert að fá n þætti, fyrst það var geðheilbrigði stöðva. 85 00:04:48,000 --> 00:04:51,000 Ef n <2 þá gera ekki neitt yfirleitt 86 00:04:51,000 --> 00:04:55,000 því ef n <2 þá n er augljóslega 0 eða 1, 87 00:04:55,000 --> 00:04:57,000 og svo ef það er annað hvort 0 eða 1 er ekkert að flokka. 88 00:04:57,000 --> 00:04:59,000 Þú ert búinn. 89 00:04:59,000 --> 00:05:01,000 Listinn er þegar trivially raðað. 90 00:05:01,000 --> 00:05:04,000 En annars ef þú hefur fengið 2 eða fleiri þætti fara á undan og skipta þá 91 00:05:04,000 --> 00:05:06,000 í 2 helminga, vinstri og hægri. 92 00:05:06,000 --> 00:05:09,000 Raða öllum þessum helminga, og síðan sameina flokkuð helminga. 93 00:05:09,000 --> 00:05:13,000 En vandamálið hér er að við fyrstu sýn þetta er eins og við erum punting. 94 00:05:13,000 --> 00:05:17,000 Þetta er hringlaga skilgreining á því ef ég hef spurt þig að raða þessum n þætti 95 00:05:17,000 --> 00:05:22,000 og þú ert að segja mér "Allt í lagi, allt í lagi, munum við raða þeim n / 2 og þá N / 2 þætti," 96 00:05:22,000 --> 00:05:27,000 þá næsta spurning mín er að fara að vera "Fine, hvernig raða þér n / 2 þættir?" 97 00:05:27,000 --> 00:05:30,000 >> En vegna uppbyggingu þessarar áætlunar, 98 00:05:30,000 --> 00:05:33,000 vegna þess að það er þessi grunn tilfelli, svo að segja, 99 00:05:33,000 --> 00:05:39,000 þetta sérstaka mál sem segir ef n er 00:05:42,000 Ekki svara ekki með sama hringlaga svar. 101 00:05:42,000 --> 00:05:46,000 Þetta ferli, þetta cyclicity mun að lokum enda. 102 00:05:46,000 --> 00:05:50,000 Ef ég spyr þig "Raða þessi n þættir," og þú segir, "Fine, raða þessum n / 2" 103 00:05:50,000 --> 00:05:53,000 þá segir þú, "Fine, flokka þær N / 4, n / 8, n/16" 104 00:05:53,000 --> 00:05:56,000 loksins að þú munt deila með nógu stór númer 105 00:05:56,000 --> 00:05:59,000 að þú munt hafa bara 1 þáttur vinstri, á hver benda þú getur sagt 106 00:05:59,000 --> 00:06:02,000 "Hér, hér er raðað einn þáttur." 107 00:06:02,000 --> 00:06:06,000 Þá ljómi þessa reiknirit upp hér að leiða af því 108 00:06:06,000 --> 00:06:09,000 að þegar þú hefur öll þessi sig raðað lista, 109 00:06:09,000 --> 00:06:12,000 sem öll eru af stærð 1, sem virðist vera gagnslaus, 110 00:06:12,000 --> 00:06:15,000 þegar þú byrjar að sameina þá og sameina þau 111 00:06:15,000 --> 00:06:19,000 þú byggja upp að lokum og Rob gerði í myndbandinu að lokum raðað lista. 112 00:06:19,000 --> 00:06:22,000 >> En þessi hugmynd nær langt út fyrir flokka. 113 00:06:22,000 --> 00:06:26,000 Það er þessi hugmynd fellt í þessari áætlun sem kallast endurkvæmni, 114 00:06:26,000 --> 00:06:29,000 hugmynd þar sem þú ert a program, 115 00:06:29,000 --> 00:06:32,000 og til að leysa nokkur vandamál sem þú kallar þig, 116 00:06:32,000 --> 00:06:36,000 eða setja í samhengi við forritunarmál þú ert að virka, 117 00:06:36,000 --> 00:06:39,000 og í því skyni að leysa vandamál, sem virka sem þú kallar sjálfan þig 118 00:06:39,000 --> 00:06:42,000 aftur og aftur og aftur, en þú virka 119 00:06:42,000 --> 00:06:44,000 ekki hægt að kalla sjálfan þig óendanlega mörgum sinnum. 120 00:06:44,000 --> 00:06:47,000 Loksins sem þú þarft að lágmarki, svo að segja, 121 00:06:47,000 --> 00:06:49,000 og hafa sumir harður-dulmáli stöð ástand sem segir 122 00:06:49,000 --> 00:06:53,000 á þessum tímapunkti að hætta að kalla þig svo að allt ferlið 123 00:06:53,000 --> 00:06:56,000 lokum er í raun hætt. 124 00:06:56,000 --> 00:06:58,000 Hvað þýðir þetta í raun að Kafa í? 125 00:06:58,000 --> 00:07:01,000 >> Við skulum sjá, hvort við getum gert einfalt, léttvæg dæmi með, segja, 126 00:07:01,000 --> 00:07:03,000 3 fólk með mig upp hér á sviðinu, ef einhver er þægilegt. 127 00:07:03,000 --> 00:07:06,000 1, koma á upp, 2 og 3. 128 00:07:06,000 --> 00:07:09,000 Ef 3 vilja að koma upp hér. 129 00:07:09,000 --> 00:07:12,000 Ef þú vilt að standa við hliðina á mér hér í línu, gera ráð fyrir að vandamál á hönd 130 00:07:12,000 --> 00:07:15,000 er mjög trivially telja fjölda fólks sem eru hér. 131 00:07:15,000 --> 00:07:18,000 En hreinskilnislega, ég er þreyttur á öllum þessum að telja dæmi. 132 00:07:18,000 --> 00:07:21,000 Þetta er að fara að taka nokkurn tíma, 1, 2, og punktur, punktur, punktur. 133 00:07:21,000 --> 00:07:23,000 Það er að fara að taka að eilífu. 134 00:07:23,000 --> 00:07:25,000 Ég vil frekar bara Punt þetta vandamál alveg með hjálp-hvað er nafnið þitt? 135 00:07:25,000 --> 00:07:27,000 Sara. >> Sara, allt í lagi. 136 00:07:27,000 --> 00:07:29,000 Kelly. >> Kelly og? 137 00:07:29,000 --> 00:07:31,000 >> Willy. >> Willy, Sara, Kelly, og Willy. 138 00:07:31,000 --> 00:07:34,000 Núna hef ég verið beðin um málið með einhverjum 139 00:07:34,000 --> 00:07:37,000 hversu margir eru upp á þessu stigi, og ég hef ekki hugmynd. 140 00:07:37,000 --> 00:07:40,000 Þetta er mjög langur listi, og svo í staðinn ætla ég að gera þetta bragð. 141 00:07:40,000 --> 00:07:43,000 Ég ætla að spyrja mann við hliðina á mér til að gera mest af vinnu, 142 00:07:43,000 --> 00:07:46,000 og þegar hún er búin að gera mest af vinnu 143 00:07:46,000 --> 00:07:49,000 Ég ætla að gera sem minnst magn af vinnu hægt og bara bæta við 1 144 00:07:49,000 --> 00:07:51,000 til hvað svarið hennar er, svo hér við fara. 145 00:07:51,000 --> 00:07:54,000 Ég hef verið beðin um hversu margir eru á sviðinu. 146 00:07:54,000 --> 00:07:57,000 Hversu margir eru á sviðinu vinstra megin við þig? 147 00:07:57,000 --> 00:08:00,000 Vinstri mig? >> Jæja, en ekki svindla ekki. 148 00:08:00,000 --> 00:08:04,000 Það er gott, það er rétt, en ef við viljum halda áfram þessum reglum 149 00:08:04,000 --> 00:08:08,000 við skulum gera ráð fyrir að þú vilt álíka Punt þetta vandamál vinstra megin við þig, 150 00:08:08,000 --> 00:08:11,000 Svo frekar en að svara beint að fara á undan og bara framhjá peninginn. 151 00:08:11,000 --> 00:08:14,000 Ó, hversu margir til vinstri á mig? 152 00:08:14,000 --> 00:08:16,000 Hversu margir eru til vinstri? 153 00:08:16,000 --> 00:08:18,000 1. 154 00:08:18,000 --> 00:08:27,000 [Hlátur] 155 00:08:27,000 --> 00:08:30,000 Jæja, svo 0, svo hvað nú Willy hefur gert 156 00:08:30,000 --> 00:08:33,000 er þú hefur skilað svari þínu þessa stefnu segja 0. 157 00:08:33,000 --> 00:08:36,000 Nú, hvað ættir þú að gera? >> 1. 158 00:08:36,000 --> 00:08:39,000 Jæja, svo þú ert 1, þannig að þú segir, "Allt í lagi, ég ætla að bæta við 1 159 00:08:39,000 --> 00:08:41,000 til hvað telja Willy var, "svo 1 + 0. 160 00:08:41,000 --> 00:08:43,000 Þú ert nú 1 svo svar þitt til hægri er nú- 161 00:08:43,000 --> 00:08:45,000 1. >> Og mitt væri 2. 162 00:08:45,000 --> 00:08:48,000 Gott, svo þú ert að taka fyrri svar 1, 163 00:08:48,000 --> 00:08:51,000 bæta lágmarks magn af vinna sem þú vilt gera, sem er 1. 164 00:08:51,000 --> 00:08:55,000 Þú hefur nú 2, og þú lætur þá mér hvaða gildi? 165 00:08:55,000 --> 00:08:57,000 3, meina ég, því miður, 2. 166 00:08:57,000 --> 00:08:59,000 Gott. 167 00:08:59,000 --> 00:09:02,000 >> Jæja, við höfðum 0 til vinstri. 168 00:09:02,000 --> 00:09:05,000 Þá höfðum við 1, og þá erum við að bæta við 2, 169 00:09:05,000 --> 00:09:07,000 og nú þú ert að fötlun mér númer 2, 170 00:09:07,000 --> 00:09:10,000 og svo ég er að segja, allt í lagi, 1, 3. 171 00:09:10,000 --> 00:09:13,000 Það er örugglega 3 menn standa við hliðina á mér á þessu stigi, 172 00:09:13,000 --> 00:09:16,000 þannig að við gætum hafa augljóslega gert þetta mjög línulega, 173 00:09:16,000 --> 00:09:19,000 mjög mikið í augljós tísku, en hvað gerði við gerum í raun? 174 00:09:19,000 --> 00:09:21,000 Við tókum vandamál af stærð 3 í upphafi. 175 00:09:21,000 --> 00:09:24,000 Við braut þá niður í vandamál af stærð 2, 176 00:09:24,000 --> 00:09:27,000 þá vandamál af stærð 1, og þá loks grunn tilfelli 177 00:09:27,000 --> 00:09:29,000 var í raun, ó, það er enginn þarna, 178 00:09:29,000 --> 00:09:33,000 á hver benda Willy aftur í raun a harður-dulmáli svara nokkrum sinnum, 179 00:09:33,000 --> 00:09:36,000 og sú síðari var þá bubbled upp, bubbled upp, bubbled upp, 180 00:09:36,000 --> 00:09:39,000 og þá með því að bæta í þessu einn til viðbótar 1 181 00:09:39,000 --> 00:09:41,000 við höfum innleitt þessa undirstöðu hugmynd um endurkvæmni. 182 00:09:41,000 --> 00:09:44,000 >> Nú, í þessu tilfelli er ekki í raun að leysa vandamál 183 00:09:44,000 --> 00:09:46,000 einhver betur þá höfum við séð svona langt. 184 00:09:46,000 --> 00:09:48,000 En hugsa um reiknirit sem við höfum gert á sviðinu svona langt. 185 00:09:48,000 --> 00:09:51,000 Við fengum 8 stykki af pappír á chalkboard, 186 00:09:51,000 --> 00:09:55,000 á vídeó þegar Sean var að leita að númer 7, og hvað gerði hann í raun? 187 00:09:55,000 --> 00:09:58,000 Jæja, gerði hann ekki hvers konar deila og sigra. 188 00:09:58,000 --> 00:10:01,000 Hann hafi ekki gert neina endurkvæmni. 189 00:10:01,000 --> 00:10:03,000 Frekar að hann gerði bara þetta línulega reiknirit. 190 00:10:03,000 --> 00:10:07,000 En þegar við kynnt hugmyndir um raðað númer á sviðinu lifandi í síðustu viku 191 00:10:07,000 --> 00:10:09,000 svo við höfðum þetta eðlishvöt að fara í miðju, 192 00:10:09,000 --> 00:10:13,000 á hver benda höfðum minni lista af stærð 4 eða annan lista af stærð 4, 193 00:10:13,000 --> 00:10:17,000 og þá höfðum við nákvæmlega sama vandamál, þannig að við endurtekið, endurtekið, endurtekið. 194 00:10:17,000 --> 00:10:19,000 Með öðrum orðum, recursed við. 195 00:10:19,000 --> 00:10:24,000 Þakka þér kærlega fyrir að 3 sjálfboðaliðum okkar hér til að sýna fram endurkvæmni með okkur. 196 00:10:24,000 --> 00:10:28,000 >> Við skulum sjá hvort við getum ekki gert þetta nú aðeins meiri steypu, 197 00:10:28,000 --> 00:10:30,000 leysa vandamál sem aftur við gætum gert nokkuð auðveldlega, 198 00:10:30,000 --> 00:10:34,000 en við munum nota það sem stepping steinn til að innleiða þessa undirstöðu hugmynd. 199 00:10:34,000 --> 00:10:37,000 Ef ég vil að reikna samantekt á fullt af tölum, 200 00:10:37,000 --> 00:10:39,000 til dæmis, ef þú framhjá á númer 3, 201 00:10:39,000 --> 00:10:42,000 Mig langar að gefa þér gildi Sigma 3, 202 00:10:42,000 --> 00:10:46,000 þannig að summan af 3 + 2 + 1 + 0. 203 00:10:46,000 --> 00:10:48,000 Ég vil fá til baka svar 6, 204 00:10:48,000 --> 00:10:51,000 þannig að við munum innleiða þessa Sigma virka, þessi samantekt virka 205 00:10:51,000 --> 00:10:54,000 sem aftur tekur í inntak, og þá skilar samantekt 206 00:10:54,000 --> 00:10:57,000 af þeim fjölda alla leið niður í 0. 207 00:10:57,000 --> 00:10:59,000 Við gætum gert þetta nokkuð einfaldlega, ekki satt? 208 00:10:59,000 --> 00:11:01,000 Við gætum gert þetta með einhvers konar lykkja uppbyggingu, 209 00:11:01,000 --> 00:11:04,000 svo látið mig fara á undan og fá það byrjaði. 210 00:11:04,000 --> 00:11:07,000 >> Hafa stdio.h. 211 00:11:07,000 --> 00:11:09,000 Leyfðu mér að fá mér í haf til að vinna með hér. 212 00:11:09,000 --> 00:11:12,000 Við skulum spara þetta sem sigma.c. 213 00:11:12,000 --> 00:11:14,000 Og ég ætla að fara í hér, og ég ætla að lýsa því yfir að int n, 214 00:11:14,000 --> 00:11:18,000 og ég ætla að gera eftirfarandi á meðan notandinn er ekki vinna. 215 00:11:18,000 --> 00:11:22,000 Þó að notandi hefur ekki gefið mér jákvæða tölu 216 00:11:22,000 --> 00:11:26,000 láta mig fara á undan og hvetja þau til n = GetInt, 217 00:11:26,000 --> 00:11:28,000 og láta mig gefa þeim nokkrar leiðbeiningar um hvað á að gera, 218 00:11:28,000 --> 00:11:33,000 svo printf ("jákvæð heiltala vinsamlegast"). 219 00:11:33,000 --> 00:11:39,000 Bara eitthvað tiltölulega einfalt eins og þetta þannig að þegar við högg línu 14 220 00:11:39,000 --> 00:11:42,000 við höfum nú jákvæð heiltala væntanlega í n. 221 00:11:42,000 --> 00:11:44,000 >> Nú skulum gera eitthvað með það. 222 00:11:44,000 --> 00:11:50,000 Leyfðu mér að fara á undan og reikna samantekt, svo int summa = Sigma (n). 223 00:11:50,000 --> 00:11:54,000 Sigma er bara samantekt, svo ég ætla bara að skrifa það á áhugamaður hátt. 224 00:11:54,000 --> 00:11:56,000 Við munum bara kalla það það Sigma. 225 00:11:56,000 --> 00:11:58,000 Það er summa, og nú ætla ég að prenta út niðurstöðu, 226 00:11:58,000 --> 00:12:08,000 printf ("Summa er% d \ n", summa). 227 00:12:08,000 --> 00:12:11,000 Og þá ég aftur 0 fyrir gott mál. 228 00:12:11,000 --> 00:12:15,000 Við höfum gert allt sem þetta forrit krefst nema áhugaverða hluti, 229 00:12:15,000 --> 00:12:18,000 sem er til í raun innleiða Sigma virka. 230 00:12:18,000 --> 00:12:22,000 >> Leyfðu mér að fara niður á botn, og láta mig lýsa virka Sigma. 231 00:12:22,000 --> 00:12:26,000 Það er got að taka breytu sem er í heiltölu tegund, 232 00:12:26,000 --> 00:12:30,000 og hvaða gögn gerð vil ég aftur væntanlega frá Sigma? 233 00:12:30,000 --> 00:12:34,000 Int, vegna þess að ég vil það til að passa væntingar mínar á línu 15. 234 00:12:34,000 --> 00:12:37,000 Í hér láta mig fara á undan og framkvæma þetta 235 00:12:37,000 --> 00:12:41,000 á mjög einfaldan hátt. 236 00:12:41,000 --> 00:12:45,000 >> Við skulum fara á undan og segja int summa = 0, 237 00:12:45,000 --> 00:12:47,000 og nú ætla ég að fara að hafa smá fyrir lykkju hér 238 00:12:47,000 --> 00:12:50,000 það er að fara að segja eitthvað eins og þetta, 239 00:12:50,000 --> 00:13:01,000 fyrir (INT i = 0; I <= fjöldi, i + +) summan + = i. 240 00:13:01,000 --> 00:13:05,000 Og svo ætla ég að fara aftur summa. 241 00:13:05,000 --> 00:13:07,000 Ég gæti hafa innleitt þetta í allir tala af lifnaðarhættir. 242 00:13:07,000 --> 00:13:09,000 Ég hefði getað notað meðan lykkja. 243 00:13:09,000 --> 00:13:11,000 Ég hefði getað sleppt því að nota summu breytu ef ég vildi virkilega að, 244 00:13:11,000 --> 00:13:15,000 en í stuttu máli, höfum við bara virka að ef ég gerði ekki Goof lýsir summa er 0. 245 00:13:15,000 --> 00:13:18,000 Þá iterates það frá 0 á allt í gegnum fjölda, 246 00:13:18,000 --> 00:13:23,000 og á hverjum endurtekning það bætir að núverandi gildi fjárhæð og þá skilar summu. 247 00:13:23,000 --> 00:13:25,000 >> Nú, það er smá hagræðingu hér. 248 00:13:25,000 --> 00:13:29,000 Þetta er sennilega sóun skref, en svo vera það. Það er allt í lagi í bili. 249 00:13:29,000 --> 00:13:32,000 Við erum að minnsta kosti að vera ítarlegur og fara 0 alla leið upp. 250 00:13:32,000 --> 00:13:34,000 Ekki mjög erfitt og frekar einfalt, 251 00:13:34,000 --> 00:13:37,000 en það kemur í ljós að við Sigma virka við höfum sömu tækifæri 252 00:13:37,000 --> 00:13:39,000 eins og við gerðum hér á sviðinu. 253 00:13:39,000 --> 00:13:42,000 Á sviðinu við telja hversu margir voru við hliðina á mér, 254 00:13:42,000 --> 00:13:47,000 en í stað þess að ef við vildum að telja númer 3 + 2 + 1 255 00:13:47,000 --> 00:13:51,000 niður í 0 við gátum álíka Punt að virka 256 00:13:51,000 --> 00:13:55,000 að ég mun í staðinn lýsa eins og að vera endurkvæma. 257 00:13:55,000 --> 00:13:57,000 Hér skulum gera athuga fljótur geðheilbrigði og ganga úr skugga um að ég gerði ekki Goof. 258 00:13:57,000 --> 00:14:00,000 >> Ég veit að það er að minnsta kosti eitt í þessu forriti sem ég gerði rangt. 259 00:14:00,000 --> 00:14:04,000 Þegar ég högg koma inn er ég að fara til að fá hvers konar öskra á mig? 260 00:14:04,000 --> 00:14:06,000 Hvað er ég að fara að æpa á um? 261 00:14:06,000 --> 00:14:11,000 Já, ég gleymdi frumgerð, þannig að ég er að nota aðgerð sem heitir Sigma á línu 15, 262 00:14:11,000 --> 00:14:16,000 en það er ekki lýst fyrr en línu 22, svo ég fara best stanslaust upp hér 263 00:14:16,000 --> 00:14:22,000 og lýsa frumgerð, og ég segi int sigma (int tala), og það er það. 264 00:14:22,000 --> 00:14:24,000 Það er framkvæmd í botn. 265 00:14:24,000 --> 00:14:27,000 >> Eða önnur leið að ég gæti leyst þetta, 266 00:14:27,000 --> 00:14:30,000 Ég gæti farið að virka þarna, sem er ekki slæmt, 267 00:14:30,000 --> 00:14:32,000 en að minnsta kosti þegar forrit fara að fá lengri, hreinskilnislega, 268 00:14:32,000 --> 00:14:35,000 Ég held að það sé nokkur gildi í alltaf hafa helstu efst 269 00:14:35,000 --> 00:14:38,000 svo að þú í lesandanum að opna skrána og þá strax sjá 270 00:14:38,000 --> 00:14:40,000 hvað forrit er að gera án þess að þurfa að leita í gegnum það 271 00:14:40,000 --> 00:14:42,000 að leita að helstu virkni. 272 00:14:42,000 --> 00:14:49,000 Við skulum fara niður í flugstöðinni glugga mínum hér, að reyna að gera Sigma gera Sigma, 273 00:14:49,000 --> 00:14:51,000 og ég ruglaður upp hér líka. 274 00:14:51,000 --> 00:14:55,000 Óbeina yfirlýsingu um GetInt virka þýðir að ég hef gleymt að gera hvað? 275 00:14:55,000 --> 00:14:57,000 [Inaudible nemanda] 276 00:14:57,000 --> 00:15:00,000 Gott, svo virðist algeng mistök, þannig að við skulum setja þetta upp hér, 277 00:15:00,000 --> 00:15:04,000 cs50.h, og nú skulum við fara aftur til stöðvarinnar gluggann minn. 278 00:15:04,000 --> 00:15:08,000 >> Ég hreinsa skjáinn, og ég mun endursýning að Sigma. 279 00:15:08,000 --> 00:15:11,000 Það virðist hafa tekið saman. Leyfðu mér að hlaupa Sigma. 280 00:15:11,000 --> 00:15:15,000 Ég slá í númer 3, og ég var að fá 6, svo ekki strangt stöðva, 281 00:15:15,000 --> 00:15:18,000 en að minnsta kosti það virðist vera að vinna við fyrstu sýn, en nú skulum rífa það í sundur, 282 00:15:18,000 --> 00:15:21,000 og við skulum nýta í raun hugmynd um endurkvæmni, aftur, 283 00:15:21,000 --> 00:15:24,000 á mjög einfaldan samhengi þannig að í tíma nokkrar vikur 284 00:15:24,000 --> 00:15:27,000 þegar við byrjum að kanna áhugamaður gögn uppbygging en fylki 285 00:15:27,000 --> 00:15:30,000 höfum við annað tól í tól sem að 286 00:15:30,000 --> 00:15:33,000 vinna þau gögn uppbygging sem við munum sjá. 287 00:15:33,000 --> 00:15:36,000 Þetta er endurtekningu nálgun, lykkja sem byggir á aðferðum. 288 00:15:36,000 --> 00:15:39,000 >> Láttu mig frekar nú að gera þetta. 289 00:15:39,000 --> 00:15:44,000 Leyfðu mér í staðinn segja að samantekt á fjölda 290 00:15:44,000 --> 00:15:48,000 niður í 0 er í raun það sama og 291 00:15:48,000 --> 00:15:53,000 númer + Sigma (tala - 1). 292 00:15:53,000 --> 00:15:57,000 Með öðrum orðum, alveg eins og á sviðinu ég punted hvert af fólki við hliðina á mér, 293 00:15:57,000 --> 00:16:00,000 og þeir síðan haldið punting þar við botninum loksins út á Willy, 294 00:16:00,000 --> 00:16:03,000 sem þurfti að skila harða dulmáli svar eins 0. 295 00:16:03,000 --> 00:16:07,000 Hér nú erum við álíka punting í Sigma 296 00:16:07,000 --> 00:16:10,000 sama virka eins og var upphaflega kallað, en lykillinn innsýn hér 297 00:16:10,000 --> 00:16:12,000 er að við erum ekki að kalla Sigma samur. 298 00:16:12,000 --> 00:16:14,000 Við erum ekki farið í n. 299 00:16:14,000 --> 00:16:17,000 Við erum greinilega farið í fjölda - 1, 300 00:16:17,000 --> 00:16:20,000 svo örlítið minni vandamál, örlítið minni vandamál. 301 00:16:20,000 --> 00:16:23,000 >> Því miður, þetta er ekki alveg lausn enn, og áður en við gætum 302 00:16:23,000 --> 00:16:26,000 hvað gæti verið stökk út eins og augljóst við sum ykkar 303 00:16:26,000 --> 00:16:28,000 láta mig fara á undan og endursýning gera. 304 00:16:28,000 --> 00:16:30,000 Það virðist að safna saman í lagi. 305 00:16:30,000 --> 00:16:32,000 Leyfðu mér að endursýning Sigma með 6. 306 00:16:32,000 --> 00:16:37,000 Úpps, láttu mig endursýning Sigma með 6. 307 00:16:37,000 --> 00:16:42,000 Við höfum séð þetta áður, að vísu óvart síðasta tíma eins og heilbrigður. 308 00:16:42,000 --> 00:16:48,000 Af hverju gerði ég þetta dulinn skiptingu kenna? Já. 309 00:16:48,000 --> 00:16:50,000 [Inaudible nemanda] 310 00:16:50,000 --> 00:16:53,000 Það er engin stöð tilfelli, og nánar tiltekið, það gerðist sennilega? 311 00:16:53,000 --> 00:16:58,000 Þetta er einkenni um hvaða hegðun? 312 00:16:58,000 --> 00:17:00,000 Segðu það svolítið hávær. 313 00:17:00,000 --> 00:17:02,000 [Inaudible nemanda] 314 00:17:02,000 --> 00:17:05,000 Það er óendanlegur lykkja raun, og vandamálið með óendanlega lykkjur 315 00:17:05,000 --> 00:17:08,000 þegar þeir taka endurkvæmni í þessu tilviki virka kalla sig, 316 00:17:08,000 --> 00:17:10,000 hvað gerist í hvert skipti sem þú hringja í aðgerð? 317 00:17:10,000 --> 00:17:13,000 Jæja, hugsa til baka hvernig við lagt út á minni tölvu. 318 00:17:13,000 --> 00:17:16,000 Við sögðum að það er þessi klumpur af minni kallast stafla sem er neðst, 319 00:17:16,000 --> 00:17:19,000 og í hvert skipti sem þú kalla virka aðeins meira minni fær setja 320 00:17:19,000 --> 00:17:24,000 á þetta svokallaða stafla inniheldur staðbundnar breytur sem virka á eða breytur, 321 00:17:24,000 --> 00:17:27,000 svo ef Sigma kallar Sigma símtöl Sigma kallar Sigma 322 00:17:27,000 --> 00:17:29,000  kallar Sigma Hvar endar þessi saga enda? 323 00:17:29,000 --> 00:17:31,000 >> Jæja, overruns að lokum heildarfjárhæð 324 00:17:31,000 --> 00:17:33,000 af minni sem þú hefur í boði fyrir tölvuna þína. 325 00:17:33,000 --> 00:17:37,000 Þú umframmagn hluti sem þú átt að vera í, 326 00:17:37,000 --> 00:17:40,000 og þú færð þessa skiptingu kenna, algerlega varpað, 327 00:17:40,000 --> 00:17:43,000 og hvað algerlega varpað þýðir að ég hef nú til skrá sem kallast algerlega 328 00:17:43,000 --> 00:17:46,000 sem er skrá sem inniheldur núll og sjálfur 329 00:17:46,000 --> 00:17:49,000 sem í raun í framtíðinni verður greiningarskyni gagnlegt. 330 00:17:49,000 --> 00:17:52,000 Ef það er ekki augljóst að þér þar sem galla er 331 00:17:52,000 --> 00:17:54,000 þú getur raunverulega gera a hluti af réttar greiningar, svo að segja, 332 00:17:54,000 --> 00:17:58,000 á þessum sorphaugur algerlega skrá, sem, aftur, er bara allt fullt af núllum og sjálfur 333 00:17:58,000 --> 00:18:02,000 sem sýnir í raun stöðu forritinu í minni 334 00:18:02,000 --> 00:18:05,000 Um leið og hún hrundi á þennan hátt. 335 00:18:05,000 --> 00:18:11,000 >> The festa hér er að við getum ekki bara í blindni aftur Sigma, 336 00:18:11,000 --> 00:18:14,000 fjöldi + Sigma á örlítið minni vandamál. 337 00:18:14,000 --> 00:18:16,000 Við þurfum að hafa einhvers konar tilfelli stöð hér, 338 00:18:16,000 --> 00:18:19,000 og hvað ætti að byggja málið sé sennilega? 339 00:18:19,000 --> 00:18:22,000 [Inaudible nemanda] 340 00:18:22,000 --> 00:18:25,000 Jæja, svo lengi sem talan er jákvætt að við ættum í raun að skila þessu, 341 00:18:25,000 --> 00:18:29,000 eða setja annan hátt, ef talan er, segjum, <= á 0 342 00:18:29,000 --> 00:18:32,000 þú veist hvað, ég fara á undan og aftur 0, 343 00:18:32,000 --> 00:18:36,000 líkt Willy gerði, og annað, ég ætla að fara á undan 344 00:18:36,000 --> 00:18:41,000 og aftur þetta, svo það er ekki það mikið styttri 345 00:18:41,000 --> 00:18:44,000 en endurtekningu útgáfa sem við þeyttum upp fyrst með a for lykkju, 346 00:18:44,000 --> 00:18:48,000 en taka eftir því að það er þetta tegund af glæsileika þess. 347 00:18:48,000 --> 00:18:51,000 Í stað þess að skila sumir tala og framkvæma allt þetta stærðfræði 348 00:18:51,000 --> 00:18:54,000 og bæta það upp með staðbundnum breytur 349 00:18:54,000 --> 00:18:57,000 þú ert staðinn að segja "Allt í lagi, ef þetta er frábær auðvelt vandamál, 350 00:18:57,000 --> 00:19:01,000 eins og talan er <0, láttu mig aftur strax 0. " 351 00:19:01,000 --> 00:19:03,000 >> Við ætlum ekki að standa styðja neikvæðar tölur, 352 00:19:03,000 --> 00:19:05,000 þannig að ég ætla að harður kóða gildi 0. 353 00:19:05,000 --> 00:19:08,000 En annars, til að framkvæma þessa hugmynd toppur 354 00:19:08,000 --> 00:19:11,000 allar þessar tölur saman sem þú getur í raun að taka smá bita 355 00:19:11,000 --> 00:19:14,000 út af vandamálinu, alveg eins og við gerðum hér á sviðinu, 356 00:19:14,000 --> 00:19:18,000 þá Punt the hvíla af the vandamál að næsta manni, 357 00:19:18,000 --> 00:19:20,000 en í þessu tilfelli er næsta manneskja er sjálfur. 358 00:19:20,000 --> 00:19:22,000 Það er samur heitir virka. 359 00:19:22,000 --> 00:19:25,000 Bara gefa það í minni og minni og minni vandamál í hvert skipti, 360 00:19:25,000 --> 00:19:28,000 og jafnvel þó að við höfum ekki alveg formlega hluti í kóðann hér 361 00:19:28,000 --> 00:19:33,000 þetta er nákvæmlega það sem var að gerast í viku 0 með símaskránni. 362 00:19:33,000 --> 00:19:36,000 Þetta er nákvæmlega það sem var að gerast á undanförnum vikum við Sean 363 00:19:36,000 --> 00:19:39,000 og með sýnikennslu okkar að leita að tölum. 364 00:19:39,000 --> 00:19:42,000 Það er að taka vandamál og deila honum aftur og aftur. 365 00:19:42,000 --> 00:19:44,000 >> Með öðrum orðum, það er leið nú að þýða 366 00:19:44,000 --> 00:19:47,000 þetta raunverulegur veröld byggja, þetta hærra stigi reisa 367 00:19:47,000 --> 00:19:51,000 að skipta og sigra og gera eitthvað aftur og aftur 368 00:19:51,000 --> 00:19:56,000 í kóða, þannig að þetta er eitthvað sem við munum sjá aftur með tímanum. 369 00:19:56,000 --> 00:20:00,000 Nú, eins og innskot, ef þú ert nýr til endurkvæmni þú ættir að minnsta kosti að skilja nú 370 00:20:00,000 --> 00:20:02,000 hvers vegna þetta er fyndið. 371 00:20:02,000 --> 00:20:05,000 Ég ætla að fara á google.com, 372 00:20:05,000 --> 00:20:17,000 og ég ætla að leita að nokkrar ábendingar og bragðarefur um endurkvæmni, slá. 373 00:20:17,000 --> 00:20:21,000 Segðu mann við hliðina á þér ef þeir voru ekki að hlæja núna. 374 00:20:21,000 --> 00:20:23,000 Áttir þú við endurkvæmni? 375 00:20:23,000 --> 00:20:25,000 Áttir þú við-Ah, svona. 376 00:20:25,000 --> 00:20:28,000 Jæja, nú það er restin af öllum. 377 00:20:28,000 --> 00:20:30,000 Smá páska egg embed einhversstaðar þar í Google. 378 00:20:30,000 --> 00:20:33,000 Sem innskot, einn af the hlekkur við að setja á heimasíðu á námskeiði á 379 00:20:33,000 --> 00:20:36,000 í dag er bara þetta net af ýmsum reiknirita flokkun, 380 00:20:36,000 --> 00:20:39,000 sum sem við skoðuðum í síðustu viku, en það er gott um þessa sjónsköpun 381 00:20:39,000 --> 00:20:43,000 eins og þú reynir að vefja huganum um ýmsa hluti sem tengjast reiknirit 382 00:20:43,000 --> 00:20:46,000 veit að þú getur mjög auðveldlega byrjað með mismunandi gerðir af aðföngum. 383 00:20:46,000 --> 00:20:50,000 Inntak baka allt, inntak mestu raðað, að inntak handahófi og svo framvegis. 384 00:20:50,000 --> 00:20:53,000 Eins og þú reynir að, aftur, greina þessi atriði í huga þínum 385 00:20:53,000 --> 00:20:57,000 átta sig á að þetta URL á heimasíðu Námskeiðið er á fyrirlestrum síðu 386 00:20:57,000 --> 00:21:00,000 gæti hjálpað þér ástæða gegnum eitthvað af þeim. 387 00:21:00,000 --> 00:21:05,000 >> Í dag fáum við að lokum að leysa þetta vandamál frá stund til baka, 388 00:21:05,000 --> 00:21:08,000 sem var að þetta skipti virka bara ekki að vinna, 389 00:21:08,000 --> 00:21:12,000 og það var grundvallaratriði vandamál með þessu virka skipti, 390 00:21:12,000 --> 00:21:15,000 markmiðið sem var, aftur, til að skiptast á gildi hér og hér 391 00:21:15,000 --> 00:21:17,000 svo að þetta gerist? 392 00:21:17,000 --> 00:21:20,000 Þetta var í raun ekki vinna. Hvers vegna? 393 00:21:20,000 --> 00:21:22,000 Já. 394 00:21:22,000 --> 00:21:28,000 [Inaudible nemanda] 395 00:21:28,000 --> 00:21:31,000 Einmitt, er skýringin á þessu bugginess 396 00:21:31,000 --> 00:21:34,000 einfaldlega var vegna þess að þegar þú hringir aðgerðir í C 397 00:21:34,000 --> 00:21:38,000 og þær aðgerðir taka rökum, eins og a og b hér 398 00:21:38,000 --> 00:21:42,000 þú liggur í afrit af hvaða gildi þú ert að veita til að virka. 399 00:21:42,000 --> 00:21:46,000 Þú ert ekki að veita upprunalegu gildi sig, 400 00:21:46,000 --> 00:21:49,000 þannig að við sáum þetta í samhengi buggyc, 401 00:21:49,000 --> 00:21:52,000 buggy3.c sem horfði smá eitthvað eins og this. 402 00:21:52,000 --> 00:21:57,000 >> Muna að við höfðum x og y frumstilla í 1 og 2. 403 00:21:57,000 --> 00:21:59,000 Við prenta þá út það sem þeir voru. 404 00:21:59,000 --> 00:22:03,000 Ég hélt þá að ég var að skipta þeim með því að kalla skipti af x, y. 405 00:22:03,000 --> 00:22:06,000 En vandamálið var að skipta unnið, 406 00:22:06,000 --> 00:22:10,000 en aðeins í umfangi skipti virka sig. 407 00:22:10,000 --> 00:22:13,000 Um leið og við högg línu 40 þá skipti gildi 408 00:22:13,000 --> 00:22:16,000 var hent, og svo ekkert 409 00:22:16,000 --> 00:22:21,000 í upphaflegu hlutverki helsta var í raun breyst, 410 00:22:21,000 --> 00:22:26,000 þannig að ef þú hugsa til baka þá á því hvað það lítur út eins og í skilmálar af minni okkar 411 00:22:26,000 --> 00:22:29,000 ef vinstri-hönd hlið af the borð táknar- 412 00:22:29,000 --> 00:22:33,000 og ég ætla að gera mitt besta fyrir alla til að sjá þetta, ef þetta vinstri-hönd hlið af the borð 413 00:22:33,000 --> 00:22:37,000 táknar, segja, RAM, og stafla er að fara að vaxa á upp þennan hátt, 414 00:22:37,000 --> 00:22:43,000 og við köllum virka eins og helstu, og helstu hefur 2 staðbundnar breytur, x og y, 415 00:22:43,000 --> 00:22:48,000 skulum lýsa þeim sem X hér, og við skulum lýsa þessum sem y hér, 416 00:22:48,000 --> 00:22:55,000 og við skulum setja í gildi 1 og 2, þannig að þetta hér er aðal, 417 00:22:55,000 --> 00:22:58,000 og þegar helstu kallar skipti virka stýrikerfi 418 00:22:58,000 --> 00:23:02,000 gefur skiptasamninga virka eigin swath sitt minni á mánudaginn, 419 00:23:02,000 --> 00:23:04,000 eigin ramma hennar á mánudaginn, svo að segja. 420 00:23:04,000 --> 00:23:08,000 Það úthlutar einnig 32 bita fyrir þessar ints. 421 00:23:08,000 --> 00:23:11,000 Það gerist að kalla þá A og B, en það er algerlega handahófskennt. 422 00:23:11,000 --> 00:23:13,000 Það gæti hafa kallað þær hvað sem það vill, en hvað gerist þegar helstu 423 00:23:13,000 --> 00:23:19,000 símtöl skipti er það tekur þetta 1, leggur eintak þar, leggur eintak þar. 424 00:23:19,000 --> 00:23:23,000 >> Það er 1 önnur staðbundin breytu í skipti, þó kallast hvað? >> Tmp. 425 00:23:23,000 --> 00:23:27,000 Tmp, svo látið mig gefa mér annan 32 bita hér, 426 00:23:27,000 --> 00:23:29,000 og hvað gerði ég í þessa aðgerð? 427 00:23:29,000 --> 00:23:34,000 Ég sagði int tmp fær, svo hefur a 1, svo ég gerði þetta þegar við spiluðum síðast með þessu dæmi. 428 00:23:34,000 --> 00:23:39,000 Þá fær B, svo B er 2, svo nú þetta verður 2, 429 00:23:39,000 --> 00:23:42,000 og nú fær B afleysingamanneskja, svo afleysingamanneskja er 1, 430 00:23:42,000 --> 00:23:44,000 svo nú verður B þetta. 431 00:23:44,000 --> 00:23:46,000 Það er frábært. Það í uppnámi. 432 00:23:46,000 --> 00:23:49,000 En þá um leið sem skilar 433 00:23:49,000 --> 00:23:52,000 minni swap er hverfur í raun þannig að það er hægt að endurnýta 434 00:23:52,000 --> 00:23:58,000 af einhverju öðru hlutverki í framtíðinni, og helstu er augljóslega alveg óbreytt. 435 00:23:58,000 --> 00:24:00,000 Við þurfum a vegur af grundvallaratriðum að leysa þetta vandamál, 436 00:24:00,000 --> 00:24:03,000 og í dag munum við að lokum hafa a vegur til að gera þetta þannig 437 00:24:03,000 --> 00:24:06,000 við getum kynna eitthvað sem kallast músina. 438 00:24:06,000 --> 00:24:09,000 Það kemur í ljós að við getum leyst þetta vandamál 439 00:24:09,000 --> 00:24:12,000 ekki með því að farið í afrit af x og y 440 00:24:12,000 --> 00:24:18,000 heldur með því að láta í hvað, heldur þú, að skipti aðgerð? 441 00:24:18,000 --> 00:24:20,000 Já, hvað um heimilisfang? 442 00:24:20,000 --> 00:24:22,000 Við höfum í raun ekki talað um tölur í miklum smáatriðum, 443 00:24:22,000 --> 00:24:25,000 en ef þetta Blackboard táknar minni tölvu míns 444 00:24:25,000 --> 00:24:28,000 við gætum vissulega byrjað tala bæti í RAM minni 445 00:24:28,000 --> 00:24:31,000 og segja að þetta er bæti # 1, þetta er bæti # 2, bæti # 3, 446 00:24:31,000 --> 00:24:35,000 bæti # 4, bæti # ... 2 milljarðar ef ég hef 2 gígabæta vinnsluminni, 447 00:24:35,000 --> 00:24:38,000 svo við gætum örugglega koma upp með sumir handahófi númerakerfið 448 00:24:38,000 --> 00:24:41,000 fyrir öll einstök bæti í minni tölvunnar minnar. 449 00:24:41,000 --> 00:24:43,000 >> Hvað ef í stað þegar ég kalla skipti 450 00:24:43,000 --> 00:24:47,000 frekar en að fara í afrit af x og y 451 00:24:47,000 --> 00:24:51,000 hvers vegna þarf ég ekki að fara í staðinn í tölu x hér, 452 00:24:51,000 --> 00:24:55,000 heimilisfang y hér, í raun póstfang 453 00:24:55,000 --> 00:24:59,000 x og y af því skipta þá, ef hann er upplýstur 454 00:24:59,000 --> 00:25:01,000 á heimilisfang í minni x og y, 455 00:25:01,000 --> 00:25:04,000 þá skipti, ef við þjálfun honum smá, 456 00:25:04,000 --> 00:25:07,000 hann gæti hugsanlega aka á þetta netfang, svo að segja, 457 00:25:07,000 --> 00:25:11,000 x og breyta fjölda þar, þá reka á heimilisfang y, 458 00:25:11,000 --> 00:25:16,000 breyta fjölda þar, jafnvel þó að í raun að fá afrit af þeim gildum sjálfur, 459 00:25:16,000 --> 00:25:19,000 svo jafnvel þó að við töluðum um þetta eins og að vera minni aðal- 460 00:25:19,000 --> 00:25:23,000 og þetta sem að skipta á um minni öflugur og hættuleg hluti C 461 00:25:23,000 --> 00:25:28,000 er að allir virka getur snerta minni hvar sem er í tölvunni, 462 00:25:28,000 --> 00:25:32,000 og þetta er öflugur í að þú getur gert mjög fínt hluti með tölvuforritum í C. 463 00:25:32,000 --> 00:25:36,000 Þetta er hættulegt því að þú getur líka skrúfa upp mjög auðveldlega. 464 00:25:36,000 --> 00:25:39,000 Í raun, að einn af algengustu leiðir til forrit þessa dagana að nýta 465 00:25:39,000 --> 00:25:42,000 enn er fyrir forritara að gera sér grein 466 00:25:42,000 --> 00:25:45,000 að hann eða hún er að leyfa gögn 467 00:25:45,000 --> 00:25:49,000 til að skrifa í stað í minni sem var ekki ætlað. 468 00:25:49,000 --> 00:25:51,000 >> Til dæmis, að hann eða hún lýsir fjölda stærð 10 469 00:25:51,000 --> 00:25:56,000 en þá reynir óvart að setja 11 bæti í þann fjölda minni, 470 00:25:56,000 --> 00:25:59,000 og þú byrjar að snerta hluta af minni sem eru ekki lengur í gildi. 471 00:25:59,000 --> 00:26:02,000 Bara að samhengi það, sumir af þú might vita að 472 00:26:02,000 --> 00:26:06,000 hugbúnaður hvetja oft þér fyrir raðnúmer eða skráning takkana, 473 00:26:06,000 --> 00:26:08,000 Photoshop og Word og forrit eins og þetta. 474 00:26:08,000 --> 00:26:12,000 Það eru sprungur, eins og sumir vita, þá á netinu þar sem þú getur keyrt litla forrit, 475 00:26:12,000 --> 00:26:14,000 og voila, ekkert meira Beiðni um raðnúmer. 476 00:26:14,000 --> 00:26:16,000 Hvernig er að vinna? 477 00:26:16,000 --> 00:26:21,000 Í mörgum tilfellum þetta er einfaldlega að finna á tölvum 478 00:26:21,000 --> 00:26:24,000 texti hluti í raunverulegum núllum í tölvunni og sjálfur 479 00:26:24,000 --> 00:26:28,000 hvar er þessi virka þar sem raðnúmer er óskað, 480 00:26:28,000 --> 00:26:31,000 og þú skrifa þessi rúm, eða á meðan forritið er í gangi 481 00:26:31,000 --> 00:26:33,000 getur þú reikna út hvar lykillinn er í raun geymdar 482 00:26:33,000 --> 00:26:37,000 með eitthvað sem kallast a aflúsara, og þú getur sprunga hugbúnaður þannig. 483 00:26:37,000 --> 00:26:40,000 Þetta er ekki að segja að þetta er markmið okkar á næstu dögum, 484 00:26:40,000 --> 00:26:42,000 en það er mjög raunverulegur-veröld afleiðingar. 485 00:26:42,000 --> 00:26:45,000 Það eitt gerist til að fela þjófnað á hugbúnaði, 486 00:26:45,000 --> 00:26:47,000 en það er líka málamiðlun alls vélum. 487 00:26:47,000 --> 00:26:50,000 >> Í raun, þegar vefsíður þessa dagana eru nýtt 488 00:26:50,000 --> 00:26:53,000 og hættu og gögn er leki og lykilorð er stolið 489 00:26:53,000 --> 00:26:58,000 þetta mjög oft tengist lélega stjórnun minni manns, 490 00:26:58,000 --> 00:27:01,000 eða, ef um gagnagrunna, bilun til að sjá 491 00:27:01,000 --> 00:27:03,000 andstæðinga inntak, svo meira um það á næstu vikum til að koma, 492 00:27:03,000 --> 00:27:07,000 en nú bara laumast sýnishorn af konar skaða sem þú getur gert 493 00:27:07,000 --> 00:27:11,000 því ekki alveg að skilja hvernig hlutirnir virka undir hetta. 494 00:27:11,000 --> 00:27:14,000 Við skulum fara um að skilja hvers vegna þetta er brotinn 495 00:27:14,000 --> 00:27:17,000 með tól sem mun verða meira og meira gagnlegt 496 00:27:17,000 --> 00:27:19,000 sem áætlanir okkar fá flóknari. 497 00:27:19,000 --> 00:27:21,000 Svona langt þegar þú hefur fengið villu í forritinu 498 00:27:21,000 --> 00:27:23,000 hvernig hefur þú farið um kembiforrit það? 499 00:27:23,000 --> 00:27:25,000 Hvað hefur tækni þinn verið svona langt, hvort sem kenndi TF þinni 500 00:27:25,000 --> 00:27:27,000 eða bara sjálf-kennd? 501 00:27:27,000 --> 00:27:29,000 [Nemandi] printf. 502 00:27:29,000 --> 00:27:31,000 Printf, svo printf hefur sennilega verið vinur þinn á að ef þú vilt sjá 503 00:27:31,000 --> 00:27:33,000 hvað er að gerast inni í forritinu 504 00:27:33,000 --> 00:27:36,000 þú setur bara printf hér printf hér printf hér. 505 00:27:36,000 --> 00:27:38,000 Síðan sem þú hlaupa það, og þú fá a heild búnt af efni á skjánum 506 00:27:38,000 --> 00:27:43,000 sem þú getur notað til að þá deduce hvað er í raun að fara úrskeiðis í forritinu. 507 00:27:43,000 --> 00:27:45,000 >> Printf tilhneigingu til að vera mjög öflugur hlutur, 508 00:27:45,000 --> 00:27:47,000 en það er mjög handbók aðferð. 509 00:27:47,000 --> 00:27:49,000 Þú þarft að setja printf hér a printf hér, 510 00:27:49,000 --> 00:27:51,000 og ef þú setur það inn í lykkju sem þú gætir fengið 100 línur 511 00:27:51,000 --> 00:27:53,000 framleiðsla sem þú hefur þá til að sigta í gegnum. 512 00:27:53,000 --> 00:27:58,000 Það er ekki mjög notandi-vingjarnlegur og gagnvirk kerfi fyrir kembiforrit forrit, 513 00:27:58,000 --> 00:28:00,000 en sem betur fer er það val. 514 00:28:00,000 --> 00:28:03,000 There er a program, til dæmis, kallaði GDB, GNU Debugger, 515 00:28:03,000 --> 00:28:06,000 sem er lítið Bogagöng í hvernig þú notar það. 516 00:28:06,000 --> 00:28:08,000 Það er lítið flókið, en hreinskilnislega, 517 00:28:08,000 --> 00:28:11,000 þetta er einn af þessum hlutum þar sem ef þú setur í þessari viku og næstu 518 00:28:11,000 --> 00:28:14,000 auka klukkutíma til að skilja eitthvað eins gdb 519 00:28:14,000 --> 00:28:18,000 það mun spara þér sennilega tugum klukkustunda í the langur hlaupa, 520 00:28:18,000 --> 00:28:21,000 svo með það, láta mig gefa þú a beitu um hvernig þessi hlutur virkar. 521 00:28:21,000 --> 00:28:23,000 >> Ég er í Telnet mínu. 522 00:28:23,000 --> 00:28:26,000 Leyfðu mér að fara á undan og taka saman þetta forrit, buggy3. 523 00:28:26,000 --> 00:28:28,000 Það er nú þegar upp til dagsetning. 524 00:28:28,000 --> 00:28:31,000 Leyfðu mér að keyra það eins og við gerðum á meðan bak, og örugglega, það er brotinn. 525 00:28:31,000 --> 00:28:34,000 En af hverju er þetta? Kannski ég ruglaður upp skipti virka. 526 00:28:34,000 --> 00:28:37,000 Kannski er það a og b. Ég er ekki alveg að færa þá í kring rétt. 527 00:28:37,000 --> 00:28:39,000 Leyfðu mér að fara á undan og gera það. 528 00:28:39,000 --> 00:28:43,000 Frekar en bara að hlaupa buggy3 láta mig hlaupa í staðinn þetta forrit GDB, 529 00:28:43,000 --> 00:28:48,000 og ég ætla að segja það að hlaupa buggy3, 530 00:28:48,000 --> 00:28:52,000 og ég ætla að fela stjórn lína rifrildi,-Tui, 531 00:28:52,000 --> 00:28:55,000 og við munum setja þetta í framtíðinni vandamál í sérstakur til að minna. 532 00:28:55,000 --> 00:28:57,000 Og nú þetta svart og hvítt tengi smella upp að aftur, 533 00:28:57,000 --> 00:28:59,000 er svolítið yfirþyrmandi í fyrstu vegna þess að það er allt þetta 534 00:28:59,000 --> 00:29:02,000 ábyrgð upplýsingar hérna, en að minnsta kosti það er eitthvað kunnuglegt. 535 00:29:02,000 --> 00:29:04,000 Á toppur af the gluggi er raunverulegur númerið mitt, 536 00:29:04,000 --> 00:29:08,000 og ef ég fletta upp hér láta mig fletta til the mjög toppur af skrá minn, 537 00:29:08,000 --> 00:29:11,000 og örugglega, það er buggy3.c og tilkynning neðst í þessum glugga 538 00:29:11,000 --> 00:29:13,000 Ég hef þetta gdb hvetja. 539 00:29:13,000 --> 00:29:16,000 >> Þetta er ekki það sama eins og venjulega John Harvard minn hvetja. 540 00:29:16,000 --> 00:29:19,000 Þetta er hvetja sem er að fara að leyfa mér að stjórna gdb. 541 00:29:19,000 --> 00:29:21,000 GDB er aflúsara. 542 00:29:21,000 --> 00:29:24,000 A aflúsara er forrit sem gerir þér kleift að ganga gegnum 543 00:29:24,000 --> 00:29:27,000 framkvæmd línu program með línu fyrir línu, 544 00:29:27,000 --> 00:29:30,000 á leiðinni að gera eitthvað sem þú vilt að áætluninni, 545 00:29:30,000 --> 00:29:33,000 jafnvel kalla virka, eða útlit, meira um vert, 546 00:29:33,000 --> 00:29:35,000 á gildi Ýmsar Variable er. 547 00:29:35,000 --> 00:29:37,000 Við skulum fara á undan og gera það. 548 00:29:37,000 --> 00:29:40,000 Ég ætla að fara á undan og slá í að keyra á hvetja gdb er, 549 00:29:40,000 --> 00:29:43,000 svo taka á the botn vinstri á skjánum sem ég hef slegið hlaupa, 550 00:29:43,000 --> 00:29:45,000 og ég hef slá högg, og hvað gerði það ekki? 551 00:29:45,000 --> 00:29:50,000 Það hljóp bókstaflega forritið mitt, en ég var í raun ekki séð mikið fara hér 552 00:29:50,000 --> 00:29:55,000 vegna þess að ég hef í raun ekki sagt aflúsara 553 00:29:55,000 --> 00:29:57,000 að gera hlé á tilteknu augnabliki í tíma. 554 00:29:57,000 --> 00:29:59,000 Bara slá hlaupa keyrir forritið. 555 00:29:59,000 --> 00:30:01,000 Ég í raun ekki séð neitt. Ég get ekki vinna það. 556 00:30:01,000 --> 00:30:03,000 >> Í stað þess að láta mig gera þetta. 557 00:30:03,000 --> 00:30:08,000 Á þessum gdb hvetja láta mig slá staðinn brot, slá. 558 00:30:08,000 --> 00:30:10,000 Það er ekki það sem ég ætlaði að skrifa. 559 00:30:10,000 --> 00:30:13,000 Við skulum í staðinn tegund brot helstu. 560 00:30:13,000 --> 00:30:15,000 Með öðrum orðum, ég vil að setja eitthvað sem kallast a breakpoint, 561 00:30:15,000 --> 00:30:18,000 sem er viðeigandi nefnd vegna þess að það mun brjóta eða gera hlé 562 00:30:18,000 --> 00:30:21,000 framkvæmd program á viðkomandi stað. 563 00:30:21,000 --> 00:30:23,000 Main er nafn virka minni. 564 00:30:23,000 --> 00:30:25,000 Takið eftir að GDB er ansi klár. 565 00:30:25,000 --> 00:30:28,000 Það mynstrağur út að helstu gerast til að byrja u.þ.b. í línu 18 566 00:30:28,000 --> 00:30:32,000 á buggy3.c, og þá taka hér efst til vinstri 567 00:30:32,000 --> 00:30:34,000 B + er rétt við hliðina á línu 18. 568 00:30:34,000 --> 00:30:38,000 Það er að minna mig á að ég hef sett breakpoint á línu 18. 569 00:30:38,000 --> 00:30:42,000 Í þetta sinn þegar ég tegund hlaupa, ætla ég að keyra forritið mitt 570 00:30:42,000 --> 00:30:45,000 allt þar til hann lendir að breakpoint, 571 00:30:45,000 --> 00:30:48,000 þannig að forritið mun gera hlé eftir mér á línu 18. 572 00:30:48,000 --> 00:30:50,000 Hér förum við, hlaupa. 573 00:30:50,000 --> 00:30:53,000 Ekkert virðist hafa gerst, en tilkynning neðst til vinstri 574 00:30:53,000 --> 00:30:58,000 byrja program, buggy3, breakpoint 1 í helstu við buggy3.c línu 18. 575 00:30:58,000 --> 00:31:00,000 Hvað get ég gert núna? 576 00:31:00,000 --> 00:31:03,000 >> Tilkynning Ég get byrjað að skrifa hluti eins og prentun, 577 00:31:03,000 --> 00:31:08,000 ekki printf, prenta x, og nú það er skrítið. 578 00:31:08,000 --> 00:31:11,000 The $ 1 er bara forvitni, eins og við munum sjá 579 00:31:11,000 --> 00:31:14,000 hvert skipti sem þú prenta eitthvað sem þú færð nýjan $ gildi. 580 00:31:14,000 --> 00:31:18,000 Það er svo að þú getur átt til baka til fyrri gildi bara ef, 581 00:31:18,000 --> 00:31:21,000 en nú hvað prenta er að segja mér er að verðmæti x á þessum tímapunkti í sögunni 582 00:31:21,000 --> 00:31:26,000 er greinilega 134514032. 583 00:31:26,000 --> 00:31:29,000 Hvað? Hvaðan sem jafnvel koma frá? 584 00:31:29,000 --> 00:31:31,000 [Inaudible nemanda] 585 00:31:31,000 --> 00:31:34,000 Reyndar, þetta er það sem við munum kalla sorp gildi, og við höfum ekki talað um þetta enn, 586 00:31:34,000 --> 00:31:37,000 en ástæðan fyrir því að þú frumstilla breytur 587 00:31:37,000 --> 00:31:40,000 er augljóslega þannig að þeir hafa sumir gildi sem þú vilt að þeir hafa. 588 00:31:40,000 --> 00:31:44,000 En aflinn muna að þú getur lýst því yfir breytur 589 00:31:44,000 --> 00:31:46,000 eins og ég gerði smá stund síðan í Sigma dæmi mínu 590 00:31:46,000 --> 00:31:48,000 án þess í raun að gefa þeim gildi. 591 00:31:48,000 --> 00:31:50,000 Muna það sem ég gerði hérna í Sigma. 592 00:31:50,000 --> 00:31:52,000 Ég lýsti n, en hvað gildi gerði ég gefa það? 593 00:31:52,000 --> 00:31:56,000 Engin, því ég vissi að í næstu línum 594 00:31:56,000 --> 00:31:59,000 GetInt myndi gæta af vandamálinu að setja gildi innan n. 595 00:31:59,000 --> 00:32:02,000 >> En á þessum tímapunkti í sögunni línu 11 596 00:32:02,000 --> 00:32:05,000 og línu 12 og línu 13 og línu 14 597 00:32:05,000 --> 00:32:08,000 um þessum nokkrum línum hvað er gildi n? 598 00:32:08,000 --> 00:32:10,000 Í C er bara veit ekki. 599 00:32:10,000 --> 00:32:14,000 Það er yfirleitt einhver sorp gildi, sumir alveg handahófi númer 600 00:32:14,000 --> 00:32:17,000 sem eftir er í raun frá einhverjum fyrri aðgerð 601 00:32:17,000 --> 00:32:21,000 hafi verið að keyra, svo sem program keyrir 602 00:32:21,000 --> 00:32:24,000 muna að virka fær virka, virka, virka. 603 00:32:24,000 --> 00:32:27,000 Allir þessir rammar fá að setja á minni, og þá slíkar aðgerðir aftur, 604 00:32:27,000 --> 00:32:31,000 og bara eins og ég lagði við strokleður minni þeirra er loksins endurnýta. 605 00:32:31,000 --> 00:32:37,000 Jæja, bara það svo gerist að þetta breytu x í þessari áætlun 606 00:32:37,000 --> 00:32:41,000 virðist hafa innihélt nokkur sorp gildi eins 134514032 607 00:32:41,000 --> 00:32:44,000 frá sumum fyrri starfsemi, ekki sá sem ég skrifaði. 608 00:32:44,000 --> 00:32:47,000 Það gæti verið eitthvað sem kemur í raun með stýrikerfi, 609 00:32:47,000 --> 00:32:49,000 fall undir hetta. 610 00:32:49,000 --> 00:32:52,000 >> Jæja, það er allt í lagi, en við skulum nú fara í næstu línu. 611 00:32:52,000 --> 00:32:55,000 Ef ég skrifar "Áfram" á hvetja gdb minn og ég högg koma inn í, 612 00:32:55,000 --> 00:32:58,000 eftir því að undirstrika færist niður í línu 19, 613 00:32:58,000 --> 00:33:01,000 en rökrétt vísbendingu er þessi lína 18 614 00:33:01,000 --> 00:33:06,000 hefur nú lokið framkvæmd, þannig að ef ég tegund aftur "Print x" 615 00:33:06,000 --> 00:33:10,000 Ég ætti nú að sjá 1, og reyndar ég. 616 00:33:10,000 --> 00:33:14,000 Again, the $ efni er leið GDB minna þig 617 00:33:14,000 --> 00:33:17,000 hvaða sögu prent að þú hafir gert. 618 00:33:17,000 --> 00:33:21,000 Nú láta mig fara á undan og prenta út y og örugglega, Y er einhver brjálaður gildi eins og heilbrigður, 619 00:33:21,000 --> 00:33:24,000 en ekki máli vegna þess að í línu 19 við erum að fara að tengja það 620 00:33:24,000 --> 00:33:27,000 gildið 2, svo láta mig slá "næsta" aftur. 621 00:33:27,000 --> 00:33:29,000 Og nú erum við á printf línu. 622 00:33:29,000 --> 00:33:31,000 Leyfðu mér að gera prenta x. 623 00:33:31,000 --> 00:33:34,000 Leyfðu mér að gera prenta y. Frankly, ég er að fá smá þreytt á prentun á þessu. 624 00:33:34,000 --> 00:33:38,000 Leyfðu mér að slá í staðinn "sýna x" og "sýna y," 625 00:33:38,000 --> 00:33:41,000 og nú þegar ég skrifa skipun í framtíðinni 626 00:33:41,000 --> 00:33:45,000 Ég mun vera minnt á hvað er x og y, sem er x og y, sem er x og y. 627 00:33:45,000 --> 00:33:48,000 >> Ég get einnig, sem til hliðar, slærð inn í "heimamenn info." 628 00:33:48,000 --> 00:33:50,000 Upplýsingar er sérstök stjórn. 629 00:33:50,000 --> 00:33:52,000 Heimamenn þýðir það sýnir mér staðbundnar breytur. 630 00:33:52,000 --> 00:33:55,000 Bara ef ég gleymi eða þetta er brjálaður, flókið virka 631 00:33:55,000 --> 00:33:57,000 að ég eða einhver annar skrifaði upplýsa heimamenn munu segja þér 632 00:33:57,000 --> 00:34:00,000 það eru allar staðbundnar breytur inni þessa staðbundnu virka 633 00:34:00,000 --> 00:34:03,000 að þú gætir hugsa um ef þú vilt að pota í kring. 634 00:34:03,000 --> 00:34:07,000 Nú, printf er um að framkvæma, svo látið mig fara á undan og bara tegund "næst." 635 00:34:07,000 --> 00:34:10,000 Þar sem við erum í þessu umhverfi sem við erum í raun ekki að sjá það 636 00:34:10,000 --> 00:34:14,000 framkvæma niður hér, en eftir það er að fá smá sannindamerkis hér. 637 00:34:14,000 --> 00:34:17,000 En eftir það er vega þyngra skjáinn þar, 638 00:34:17,000 --> 00:34:21,000 svo það er ekki fullkomið forrit hér, en það er allt í lagi því ég get alltaf pota í kring 639 00:34:21,000 --> 00:34:23,000 nota prenta ef ég vil. 640 00:34:23,000 --> 00:34:26,000 >> Leyfðu mér að slá næst aftur, og nú er hér áhugaverður hluti. 641 00:34:26,000 --> 00:34:29,000 Á þessum tímapunkti í sögunni Y er 2 og x er 1, 642 00:34:29,000 --> 00:34:32,000 sem leiðbeinandi hér, og aftur, 643 00:34:32,000 --> 00:34:35,000 Ástæðan er þetta sjálfkrafa að birta nú er vegna þess að ég nota skipunina 644 00:34:35,000 --> 00:34:40,000 sýna x og sýna y, svo leið og ég gerð næstu 645 00:34:40,000 --> 00:34:43,000 í orði x og y að verða skipti. 646 00:34:43,000 --> 00:34:45,000 Nú vitum við nú þegar það er ekki að fara að vera raunin, 647 00:34:45,000 --> 00:34:49,000 en við munum sjá í smá stund hvernig við getum kafa dýpra til að finna út hvers vegna það er satt. 648 00:34:49,000 --> 00:34:54,000 Næst, og því miður, Y er enn 2 og x er enn 1, og ég get staðfest eins mikið. 649 00:34:54,000 --> 00:34:56,000 Print x, prenta y. 650 00:34:56,000 --> 00:34:59,000 Reyndar ekki skipta raunverulega hefur gerst, þannig að við skulum byrja þetta yfir. 651 00:34:59,000 --> 00:35:01,000 Augljóslega skipti er brotinn. 652 00:35:01,000 --> 00:35:04,000 Við skulum í staðinn tegund "hlaupa" aftur. 653 00:35:04,000 --> 00:35:07,000 Leyfðu mér að segja já, ég vil að endurræsa það frá upphafi, slá. 654 00:35:07,000 --> 00:35:09,000 >> Nú er ég aftur upp á línu 18. 655 00:35:09,000 --> 00:35:11,000 Nú eftir x og y eru sorp gildi aftur. 656 00:35:11,000 --> 00:35:15,000 Næst, næst, næst, næst. 657 00:35:15,000 --> 00:35:17,000 Ef ég fá leiðindi ég get líka bara slegið N fyrir næstu. 658 00:35:17,000 --> 00:35:21,000 Þú getur stytt það til stystu mögulegu röð af stöfum. 659 00:35:21,000 --> 00:35:23,000 Víxla er nú brotinn. 660 00:35:23,000 --> 00:35:25,000 Við skulum kafa í, svo í staðinn fyrir að slá næst, 661 00:35:25,000 --> 00:35:30,000 nú ætla ég að slá skref þannig að ég ætla að stepping inni í þessa aðgerð 662 00:35:30,000 --> 00:35:33,000 þannig að ég er að ganga í gegnum það, þannig að ég lenti skref og svo inn. 663 00:35:33,000 --> 00:35:37,000 Takið eftir að lagt áherslu stökk niður lægri í áætlun mína á línu 36. 664 00:35:37,000 --> 00:35:39,000 Nú hvað eru staðbundnar breytur? 665 00:35:39,000 --> 00:35:41,000 Upplýsingar heimamenn. 666 00:35:41,000 --> 00:35:43,000 Ekkert bara enn vegna þess að við höfum ekki fengið að þessi lína, 667 00:35:43,000 --> 00:35:47,000 þannig að við skulum fara á undan og segja "næst." 668 00:35:47,000 --> 00:35:50,000 Nú við virðast hafa tmp, prenta tmp. 669 00:35:50,000 --> 00:35:52,000 Sorp gildi, ekki satt? Ég held það. 670 00:35:52,000 --> 00:35:55,000 Hvernig væri að prenta út, prenta b, 1 og 2? 671 00:35:55,000 --> 00:35:58,000 Í eitt augnablik, um leið og ég tegund næst aftur 672 00:35:58,000 --> 00:36:02,000 tmp er að fara að taka á gildi 1., vonandi, 673 00:36:02,000 --> 00:36:05,000 því tmp er að fara að vera úthlutað verðmæti a. 674 00:36:05,000 --> 00:36:08,000 >> Nú skulum gera prenta út, prenta b, 675 00:36:08,000 --> 00:36:11,000 en nú prenta tmp, og það er örugglega 1. 676 00:36:11,000 --> 00:36:14,000 Leyfðu mér að gera næst. Leyfðu mér að gera næst. 677 00:36:14,000 --> 00:36:16,000 Ég hef lokið við skipti virka. 678 00:36:16,000 --> 00:36:19,000 Ég er enn inni í henni í línu 40, svo látið mig prenta út, 679 00:36:19,000 --> 00:36:22,000 prenta b, og ég er alveg sama hvað tmp er. 680 00:36:22,000 --> 00:36:27,000 Það lítur út eins og skipti er rétt þegar það kemur að því að skipta a og b. 681 00:36:27,000 --> 00:36:31,000 En ef ég gerð nú næst, stökk ég aftur á línu 25, 682 00:36:31,000 --> 00:36:34,000 og auðvitað, ef ég tegund í x og prenta y 683 00:36:34,000 --> 00:36:38,000 þeir eru samt óbreytt, svo að við höfum ekki fastur the vandamál. 684 00:36:38,000 --> 00:36:41,000 En greiningarskyni nú kannski við þessu gdb áætlun 685 00:36:41,000 --> 00:36:44,000 við höfum að minnsta kosti fengið eitt skref nær því að skilja 686 00:36:44,000 --> 00:36:47,000 hvað er að gerast rangt án þess að þurfa að rusl númer okkar með því að setja a printf hér, 687 00:36:47,000 --> 00:36:50,000 printf hér printf hér og þá að keyra hana aftur og aftur 688 00:36:50,000 --> 00:36:52,000 reyna að reikna út hvað er að fara úrskeiðis. 689 00:36:52,000 --> 00:36:55,000 >> Ég ætla að halda áfram og hætta út af þessu öllu og hætta. 690 00:36:55,000 --> 00:36:57,000 Það er að fara að þá segja, "Hætta samt?" Já. 691 00:36:57,000 --> 00:37:00,000 Nú er ég aftur á venjulegan hvetja minn, og ég er búinn að nota gdb. 692 00:37:00,000 --> 00:37:03,000 Sem innskot, þú þarft ekki að nota þetta-Tui fána. 693 00:37:03,000 --> 00:37:07,000 Í staðreynd, ef þú sleppa því að þú færð í raun the botn helmingur af the skjár. 694 00:37:07,000 --> 00:37:11,000 Ef ég gerð þá brjóta aðal og svo keyra 695 00:37:11,000 --> 00:37:15,000 Ég get samt keyrt forritið mitt, en það mun gera er textatengdu 696 00:37:15,000 --> 00:37:18,000 bara að sýna mér núverandi línu eitt í einu. 697 00:37:18,000 --> 00:37:21,000 The-Tui, texta notandi tengi, 698 00:37:21,000 --> 00:37:25,000 bara sýnir þér meira af the program í einu, sem er líklega svolítið eðli auðveldara. 699 00:37:25,000 --> 00:37:27,000 En reyndar get ég bara gert næst, næst, næst, 700 00:37:27,000 --> 00:37:30,000 og ég ætla að sjá eina línu í einu, og ef ég vil virkilega að sjá hvað er að gerast 701 00:37:30,000 --> 00:37:35,000 Ég get tegund lista og sjá a heild búnt af nálægum línum. 702 00:37:35,000 --> 00:37:39,000 >> There er a vídeó sem við höfum beðið um að þú horfir á vandamál setur 3 703 00:37:39,000 --> 00:37:43,000 þar sem Nate nær sum ranghala gdb, 704 00:37:43,000 --> 00:37:46,000 og þetta er eitt af þessum hlutum, heiðarleika, þar sem sumir non-léttvæg hluti af þér 705 00:37:46,000 --> 00:37:49,000 mun aldrei snerta gdb, og það mun vera slæmt 706 00:37:49,000 --> 00:37:53,000 því bókstaflega að þú munt á endanum að eyða meiri tíma síðar önn 707 00:37:53,000 --> 00:37:56,000 elta niður galla þá myndi ef þú setur í þeirri hálftíma / klst 708 00:37:56,000 --> 00:38:00,000 í þessari viku og næsta nám fá þægilegri með GDB. 709 00:38:00,000 --> 00:38:02,000 Printf var vinur þinn. 710 00:38:02,000 --> 00:38:05,000 GDB ætti nú að vera vinur þinn. 711 00:38:05,000 --> 00:38:08,000 >> Einhverjar spurningar um gdb? 712 00:38:08,000 --> 00:38:12,000 Og hér er a fljótur listi af sumir af the öflugur og gagnlegar skipanir. 713 00:38:12,000 --> 00:38:15,000 Já. >> Getur þú prenta streng? 714 00:38:15,000 --> 00:38:17,000 Getur þú prenta streng? Endilega. 715 00:38:17,000 --> 00:38:19,000 Það þarf ekki bara að vera heiltölur. 716 00:38:19,000 --> 00:38:22,000 Ef breyta s er strengur réttlátur tegund í s prenta. 717 00:38:22,000 --> 00:38:24,000 Það mun sýna þér hvað það band breytu er. 718 00:38:24,000 --> 00:38:26,000 [Inaudible nemanda] 719 00:38:26,000 --> 00:38:28,000 Það mun gefa þér heimilisfang og band sjálft. 720 00:38:28,000 --> 00:38:32,000 Það mun sýna þér bæði. 721 00:38:32,000 --> 00:38:34,000 Og einn síðastur hlutur, bara vegna þess að þetta er gott að vita líka. 722 00:38:34,000 --> 00:38:37,000 Rakningin og ramma, láta mig kafa inn í þetta síðasta skipti, 723 00:38:37,000 --> 00:38:39,000 sama nákvæmlega program með gdb. 724 00:38:39,000 --> 00:38:44,000 Leyfðu mér að fara á undan og keyra texta notandi tengi útgáfa, 725 00:38:44,000 --> 00:38:46,000 brjóta helstu. 726 00:38:46,000 --> 00:38:49,000 Leyfðu mér að fara á undan og keyra aftur. Hér er ég. 727 00:38:49,000 --> 00:38:55,000 Nú láta mig fara næst, næst, næst, næst, næst, skref, inn. 728 00:38:55,000 --> 00:39:00,000 >> Og nú ætla ég nú í skipti vísvitandi, en ég er eins og "Damn, hvað var gildi x?" 729 00:39:00,000 --> 00:39:02,000 Ég get ekki gert x lengur. 730 00:39:02,000 --> 00:39:05,000 Ég get ekki gert Y vegna þess að þeir eru ekki að umfangi. 731 00:39:05,000 --> 00:39:07,000 Þeir eru ekki í samhengi, en ekki vandamál. 732 00:39:07,000 --> 00:39:09,000 Ég get slegið rakningarskýrslu. 733 00:39:09,000 --> 00:39:13,000 Það sýnir mér allar aðgerðir sem hafa gengið upp á þessum tímapunkti. 734 00:39:13,000 --> 00:39:16,000 Takið eftir því að einn á the botn, helstu, línur upp með helstu 735 00:39:16,000 --> 00:39:18,000 vera á the botn af myndinni okkar hér. 736 00:39:18,000 --> 00:39:22,000 Sú staðreynd að skipti er yfir það línur upp með að skipta yfir í minni hér, 737 00:39:22,000 --> 00:39:26,000 og ef ég vil komast aftur til helstu tímabundið ég get sagt "ramma." 738 00:39:26,000 --> 00:39:30,000 Hvaða númer? Main er rammi # 1. 739 00:39:30,000 --> 00:39:32,000 Ég ætla að halda áfram og segja "Rammi 1." 740 00:39:32,000 --> 00:39:36,000 >> Nú er ég aftur á helstu, og ég get prentað x, og ég get prentað y, 741 00:39:36,000 --> 00:39:40,000 en ég get ekki prentað eða b. 742 00:39:40,000 --> 00:39:43,000 En ég get ef ég segi: "Jæja, bíddu í eina mínútu. Hvar var skipti?" 743 00:39:43,000 --> 00:39:46,000 Leyfðu mér að fara á undan og segja "grind 0." 744 00:39:46,000 --> 00:39:48,000 Nú er ég aftur þar sem ég vil vera, og sem innskot, 745 00:39:48,000 --> 00:39:52,000 það er önnur stjórn líka, eins og ef þú ert virkilega að leiðast að skrifa næst, næst, næst, næst, 746 00:39:52,000 --> 00:39:56,000 þú getur almennt segja hluti eins og "næstu 10", og það mun stíga í næstu 10 línum. 747 00:39:56,000 --> 00:39:59,000 Þú getur líka skrifað "áfram" þegar þú virkilega fá fed upp með stepping í gegnum það. 748 00:39:59,000 --> 00:40:05,000 Halda áfram að keyra forritið án vandræða þar til hann lendir annar breakpoint, 749 00:40:05,000 --> 00:40:07,000 hvort í lykkju eða lækka niður í forritinu. 750 00:40:07,000 --> 00:40:11,000 >> Í þessu tilfelli erum við áfram til enda, og forritið lauk venjulega. 751 00:40:11,000 --> 00:40:13,000 Þetta er fínt leið, óæðri ferli. 752 00:40:13,000 --> 00:40:16,000 Bara program lauk venjulega. 753 00:40:16,000 --> 00:40:24,000 Meira um það í the vídeó og kembiforrit fundur til að koma. 754 00:40:24,000 --> 00:40:26,000 Það var mikið. 755 00:40:26,000 --> 00:40:35,000 Við skulum taka 5-mínútna hlé okkar hér, og við munum aftur með structs og skrár. 756 00:40:35,000 --> 00:40:38,000 >> Ef þú kafa inn pset þessari viku þegar 757 00:40:38,000 --> 00:40:41,000 þú munt vita að við notum í dreifingu kóða, 758 00:40:41,000 --> 00:40:45,000 kóðinn sem við bjóðum þér sem útgangspunkt, nokkrar nýjar tækni. 759 00:40:45,000 --> 00:40:50,000 Einkum kynnti við þetta nýja leitarorð kallast struct, fyrir uppbyggingu, 760 00:40:50,000 --> 00:40:53,000 þannig að við getum búið til sérsniðnar breytur af tagi. 761 00:40:53,000 --> 00:40:57,000 Við kynntum líka hugmyndina um skrá I / O, skrá inntak og úttak, 762 00:40:57,000 --> 00:41:00,000 og þetta er svo að við getum spara ríki 763 00:41:00,000 --> 00:41:03,000 stjórnar Scramble til skrá á disk 764 00:41:03,000 --> 00:41:06,000 þannig að kennslu félagar og ég skil 765 00:41:06,000 --> 00:41:09,000 hvað er að gerast inni í forritinu án þess að þurfa að höndunum spila 766 00:41:09,000 --> 00:41:11,000 heilmikið af leikjum Scramble. 767 00:41:11,000 --> 00:41:13,000 Við getum gert þetta meira automatedly. 768 00:41:13,000 --> 00:41:18,000 >> Þessi hugmynd um strúktúr leysa nokkuð sannfærandi vandamál. 769 00:41:18,000 --> 00:41:21,000 Segjum að við viljum að innleiða áætlun 770 00:41:21,000 --> 00:41:25,000 sem heldur einhvern veginn utan um upplýsingar um nemendur, 771 00:41:25,000 --> 00:41:28,000 og nemendur gætu hafa, til dæmis, kenni, nafn 772 00:41:28,000 --> 00:41:31,000 og hús í stað eins og Harvard, svo þetta eru 3 stykki af upplýsingum 773 00:41:31,000 --> 00:41:34,000 við viljum halda í kring, svo að láta mig fara á undan og byrja að skrifa lítið forrit hér, 774 00:41:34,000 --> 00:41:38,000 fela stdio.h. 775 00:41:38,000 --> 00:41:42,000 Leyfðu mér að gera eru cs50.h. 776 00:41:42,000 --> 00:41:44,000 Og þá byrja meginhlutverki minn. 777 00:41:44,000 --> 00:41:46,000 Ég mun ekki nenna með hvaða lína rök, 778 00:41:46,000 --> 00:41:49,000 og hér vil ég að hafa nemanda, þannig að ég ætla að segja 779 00:41:49,000 --> 00:41:54,000 nemandi hefur nafn, þannig að ég ætla að segja "String nafn." 780 00:41:54,000 --> 00:41:59,000 Og ég ætla að segja námsmaður hefur einnig auðkenni, svo int id, 781 00:41:59,000 --> 00:42:03,000 og nemandi hefur hús, þannig að ég ætla líka að fara að segja "band hús." 782 00:42:03,000 --> 00:42:06,000 Og ég ætla að panta þetta svolítið eðlilega svona. 783 00:42:06,000 --> 00:42:11,000 Jæja, nú hef ég 3 breytur sem að tákna nemanda, svo "nemandi." 784 00:42:11,000 --> 00:42:15,000 >> Og nú vil ég að byggja þessi gildi, svo látið mig fara á undan og segja eitthvað eins og 785 00:42:15,000 --> 00:42:18,000 "Id = 123". 786 00:42:18,000 --> 00:42:21,000 Nafn er að fara að fá Davíð. 787 00:42:21,000 --> 00:42:24,000 Segjum hús er að fara að fá Mather, 788 00:42:24,000 --> 00:42:31,000 og þá er ég að fara að gera eitthvað geðþótta eins printf ("% s, 789 00:42:31,000 --> 00:42:37,000 sem ID er% d, býr í% s. 790 00:42:37,000 --> 00:42:41,000 Og nú, hvað ég vil stinga hér, einn á eftir öðrum? 791 00:42:41,000 --> 00:42:47,000 Nafn, kt, hús, aftur 0. 792 00:42:47,000 --> 00:42:50,000 Allt í lagi, nema ég ruglaður upp einhvers staðar hér 793 00:42:50,000 --> 00:42:54,000 Ég held að við höfum mjög gott forrit sem geymir einn nemanda. 794 00:42:54,000 --> 00:42:57,000 Auðvitað, þetta er ekki allt sem áhugavert. Hvað ef ég vil hafa 2 nemendur? 795 00:42:57,000 --> 00:42:59,000 Það er ekki stór samningur. Ég get styðja 2 manns. 796 00:42:59,000 --> 00:43:03,000 Leyfðu mér að fara á undan og varpa þessu og fara niður hér, 797 00:43:03,000 --> 00:43:09,000 og ég get sagt "id = 456" fyrir fólk eins og Rob sem býr í Kirkland. 798 00:43:09,000 --> 00:43:12,000 >> Jæja, bíddu, en ég get ekki kalla þetta það sama, 799 00:43:12,000 --> 00:43:15,000 og það lítur út eins og ég ætla að hafa til að afrita þetta, 800 00:43:15,000 --> 00:43:19,000 svo láta mig segja að þetta mun vera breytur Davíðs, 801 00:43:19,000 --> 00:43:23,000 og láta mig fá afrit af þessum fyrir Rob. 802 00:43:23,000 --> 00:43:27,000 Við munum kalla þetta er Rob en þetta er ekki að fara að vinna núna 803 00:43:27,000 --> 00:43:33,000 vegna þess að ég hef bíða, við skulum breyta mér id1, name1 og house1. 804 00:43:33,000 --> 00:43:35,000 Rob verður 2, 2. 805 00:43:35,000 --> 00:43:42,000 Ég hef fengið að breyta þessu hér, hér, hér, hér, hér, hér. 806 00:43:42,000 --> 00:43:45,000 Bíddu, hvað með Tommy? Við skulum gera þetta aftur. 807 00:43:45,000 --> 00:43:49,000 Vitanlega ef þú heldur enn þetta er góð leið til að gera þetta, er það ekki, 808 00:43:49,000 --> 00:43:52,000 svo afrita / líma slæmt. 809 00:43:52,000 --> 00:43:55,000 En við leyst þetta fyrir viku síðan. 810 00:43:55,000 --> 00:43:59,000 >> Hvað var lausn okkar þegar við vildum að hafa mörg tilvik af sömu gögn tegund? 811 00:43:59,000 --> 00:44:01,000 [Nemendur] Fylki. 812 00:44:01,000 --> 00:44:03,000 An array, svo látið mig reyna að þrífa þetta upp. 813 00:44:03,000 --> 00:44:07,000 Leyfðu mér að gera smá pláss fyrir mig efst, og láta mig gera í staðinn hér. 814 00:44:07,000 --> 00:44:12,000 Við munum kalla þetta fólk, og í staðinn ætla ég að segja "int auðkenni," 815 00:44:12,000 --> 00:44:14,000 og ég ætla að styðja 3 af okkur í bili. 816 00:44:14,000 --> 00:44:18,000 Ég ætla að segja "band nöfn," og ég mun styðja 3 af okkur, 817 00:44:18,000 --> 00:44:22,000 og þá ætla ég að segja "band hús," og ég ætla að styðja 3 af okkur. 818 00:44:22,000 --> 00:44:26,000 Nú hér í stað David getting eigin staðbundna hans breytur 819 00:44:26,000 --> 00:44:28,000 við getum fá losa af þeim. 820 00:44:28,000 --> 00:44:30,000 Það er gott að við erum að þrífa þetta upp. 821 00:44:30,000 --> 00:44:35,000 Ég get þá sagt Davíð er að fara að vera [0] og nöfn [0] 822 00:44:35,000 --> 00:44:38,000 og hús [0]. 823 00:44:38,000 --> 00:44:41,000 Og þá Rob getum sömuleiðis spara á þessu. 824 00:44:41,000 --> 00:44:46,000 Við skulum setja þetta hérna, svo hann er að fara að geðþótta að auðkenni [1]. 825 00:44:46,000 --> 00:44:50,000 Hann er að fara að vera nöfn [1], 826 00:44:50,000 --> 00:44:53,000 og svo loksins, hús [1]. 827 00:44:53,000 --> 00:44:57,000 >> Enn smá leiðinlegur, og nú þarf ég að reikna þetta út, 828 00:44:57,000 --> 00:45:03,000 þannig að við skulum segja "nöfn [0], id [0], hús [0] 829 00:45:03,000 --> 00:45:06,000 og við skulum pluralize þetta. 830 00:45:06,000 --> 00:45:09,000 Auðkenni, auðkenni, auðkenni. 831 00:45:09,000 --> 00:45:12,000 Og aftur, ég er að gera það, svo aftur, ég er nú þegar gripið til að afrita / líma aftur, 832 00:45:12,000 --> 00:45:14,000 þannig að líkurnar eru að það er annar lausn hér. 833 00:45:14,000 --> 00:45:18,000 Ég get sennilega þrífa það upp frekar með lykkju eða eitthvað svoleiðis, 834 00:45:18,000 --> 00:45:21,000 svo í stuttu máli, það er lítið betra en samt er eins og 835 00:45:21,000 --> 00:45:24,000 Ég er gripið til að afrita / líma, en jafnvel þessi, ég halda því fram, 836 00:45:24,000 --> 00:45:27,000 er í raun ekki í grundvallaratriðum rétt lausn þar 837 00:45:27,000 --> 00:45:29,000 hvað ef einhvern við ákveðum að þú veist hvað? 838 00:45:29,000 --> 00:45:32,000 Við í raun ætti að hafa verið að geyma netföng Davíð og Rob 839 00:45:32,000 --> 00:45:34,000 og allir aðrir í þessu forriti. 840 00:45:34,000 --> 00:45:36,000 Við ættum einnig að geyma símanúmer. 841 00:45:36,000 --> 00:45:39,000 Við ættum einnig að geyma neyðarnúmer samband númer. 842 00:45:39,000 --> 00:45:41,000 Við höfum öll þessi stykki af gögnum sem við viljum geyma, 843 00:45:41,000 --> 00:45:43,000 svo hvernig gera þú fara óður í að gera það? 844 00:45:43,000 --> 00:45:46,000 >> Þú lýsa annað array efst, og þá bæta við handvirkt 845 00:45:46,000 --> 00:45:49,000 netfang [0], netfang [1] 846 00:45:49,000 --> 00:45:51,000 Davíð og Rob og svo framvegis. 847 00:45:51,000 --> 00:45:56,000 En það er í raun bara forsenda Undirliggjandi hönnun 848 00:45:56,000 --> 00:45:59,000 að ég er með þann heiður kerfi til að vita að 849 00:45:59,000 --> 00:46:03,000 [I] í hvert nokkra fylki 850 00:46:03,000 --> 00:46:06,000 bara gerist svo að vísa til sömu aðila, 851 00:46:06,000 --> 00:46:10,000 svo [0] í ids er númer 123, 852 00:46:10,000 --> 00:46:13,000 og ég ætla að gera ráð fyrir að nöfn [0] 853 00:46:13,000 --> 00:46:16,000 er sami maður nafn og hús [0] 854 00:46:16,000 --> 00:46:21,000 er hús sami maður og svo framvegis fyrir öll mismunandi fylki sem ég bý. 855 00:46:21,000 --> 00:46:24,000 En eftir að það er ekki grundvallaratriði tengsl 856 00:46:24,000 --> 00:46:27,000 meðal þeirra 3 stykki af upplýsingar, id, nafn og hús, 857 00:46:27,000 --> 00:46:32,000 jafnvel þótt aðili sem við erum að reyna að fyrirmynd í þessu forriti er ekki fylki. 858 00:46:32,000 --> 00:46:35,000 Fylki er bara þetta forritanlegur leið til að gera þetta. 859 00:46:35,000 --> 00:46:38,000 Það sem við viljum virkilega að sitja í kerfi okkar er manneskja 860 00:46:38,000 --> 00:46:41,000 eins og Davíð, maður eins og Rob inni sem 861 00:46:41,000 --> 00:46:46,000 eða encapsulating er nafn og kennitala og hús. 862 00:46:46,000 --> 00:46:49,000 >> Getur látið einhvern veginn þessa hugmynd um hjúpun 863 00:46:49,000 --> 00:46:52,000 þar sem maður hefur auðkenni, nafn og hús 864 00:46:52,000 --> 00:46:55,000 og ekki grípa til raun þetta hakk þar sem við bara 865 00:46:55,000 --> 00:46:58,000 treysta því að krappi eitthvað 866 00:46:58,000 --> 00:47:02,000 vísar til sömu manna aðila í hverjum þessara ólíku fylki? 867 00:47:02,000 --> 00:47:04,000 Við getum í raun gera þetta. 868 00:47:04,000 --> 00:47:08,000 Leyfðu mér að fara yfir helstu nú, og láta mig búa til eigin gögn tegund mína 869 00:47:08,000 --> 00:47:10,000 í raun í fyrsta sinn. 870 00:47:10,000 --> 00:47:14,000 Við notuðum þessa tækni í Scramble, 871 00:47:14,000 --> 00:47:17,000 en hér ætla ég að fara á undan og búa til gögn tegund, 872 00:47:17,000 --> 00:47:19,000 og þú veist hvað ég ætla að kalla það nemandi eða einstaklingur, 873 00:47:19,000 --> 00:47:23,000 og ég ætla að nota typedef að skilgreina tegund. 874 00:47:23,000 --> 00:47:25,000 Ég ætla að segja að þetta er mannvirki, 875 00:47:25,000 --> 00:47:29,000 og þá er þetta uppbygging er að fara að vera nemanda tegund, munum við segja, 876 00:47:29,000 --> 00:47:31,000 jafnvel þó að það er smá gamaldags fyrir mig. 877 00:47:31,000 --> 00:47:33,000 Við munum segja "int id." 878 00:47:33,000 --> 00:47:35,000 Við munum segja "String nafn." 879 00:47:35,000 --> 00:47:37,000 Þá munum við segja "band hús," 880 00:47:37,000 --> 00:47:40,000 Svo nú í lok þessara nokkrum línum af kóða 881 00:47:40,000 --> 00:47:45,000 Ég hef bara kennt clang að til 882 00:47:45,000 --> 00:47:49,000 a gagnatag auki ints, auk strengja, auk tveggja manna, auk fljóta. 883 00:47:49,000 --> 00:47:54,000 >> Eins og með þessari stundu í línu tíma 11, það er nú ný gögn tegund kallast nemendur, 884 00:47:54,000 --> 00:47:58,000 og nú get ég lýsa nemanda breytu hvar ég vil, 885 00:47:58,000 --> 00:48:01,000 svo látið mig skruna niður til fólks. 886 00:48:01,000 --> 00:48:05,000 Nú get ég losna við þetta, og ég get fara aftur niður til Davíðs hér, 887 00:48:05,000 --> 00:48:10,000 og Davíð ég get í raun sagt að Davíð, 888 00:48:10,000 --> 00:48:13,000 getum við bókstaflega nafn breytu eftir mér, 889 00:48:13,000 --> 00:48:16,000 er að fara að vera nemanda tegund. 890 00:48:16,000 --> 00:48:18,000 Þetta getur litið svolítið skrítið, en þetta er ekki allt sem mismunandi 891 00:48:18,000 --> 00:48:22,000 frá því að lýsa yfir eitthvað sem heiltala eða streng eða fljóta. 892 00:48:22,000 --> 00:48:24,000 Það bara gerist svo að vera kölluð nemanda nú, 893 00:48:24,000 --> 00:48:28,000 og ef ég vil að setja eitthvað inn í þessa uppbyggingu 894 00:48:28,000 --> 00:48:31,000 Ég hef nú að nota nýja stykki af setningafræði, en það er nokkuð augljóst, 895 00:48:31,000 --> 00:48:39,000 david.id = 123, david.name = "Davíð" í höfuðborginni D, 896 00:48:39,000 --> 00:48:42,000 og david.house = "Mather," 897 00:48:42,000 --> 00:48:46,000 og nú get ég losna við þetta efni hér. 898 00:48:46,000 --> 00:48:51,000 Tilkynning við höfum nú endurhannað program okkar í raun miklu betri leið 899 00:48:51,000 --> 00:48:54,000 á að nú speglar program okkar raunverulega heimi. 900 00:48:54,000 --> 00:48:57,000 >> There er a raunverulegur-veröld hugmynd einstaklings eða nemandi. 901 00:48:57,000 --> 00:49:02,000 Hér höfum við nú C útgáfa af einstaklingi eða nánar tiltekið nemandi. 902 00:49:02,000 --> 00:49:05,000 Inni í þeirri manneskju eru þessar viðeigandi eiginleikar, 903 00:49:05,000 --> 00:49:10,000 ID, nafn og heimili, svo verður Rob meginatriðum það sama hérna, 904 00:49:10,000 --> 00:49:14,000 svo nemandi Rob, og nú rob.id = 456, 905 00:49:14,000 --> 00:49:17,000 rob.name = "Rob." 906 00:49:17,000 --> 00:49:20,000 Sú staðreynd að breyta heitir Rob er svona tilgangslaust. 907 00:49:20,000 --> 00:49:22,000 Við hefðum getað kallað það x eða y eða z. 908 00:49:22,000 --> 00:49:25,000 Við nefndi bara það Rob að merkingu í samræmi, 909 00:49:25,000 --> 00:49:28,000 en í raun er nafn innan þess sviði sjálfs, 910 00:49:28,000 --> 00:49:30,000 svo nú er ég með þetta. 911 00:49:30,000 --> 00:49:33,000 Þetta líka ekki finnst eins og bestu hönnun á sem ég hef erfitt dulmáli Davíð. 912 00:49:33,000 --> 00:49:35,000 Ég hef harður dulmáli Rob. 913 00:49:35,000 --> 00:49:39,000 Og ég er enn að grípa til einhvers afrita og líma í hvert sinn sem ég vil nýjar breytur. 914 00:49:39,000 --> 00:49:43,000 Þar að auki hef ég víst að gefa öllum þessum breytum nafn, 915 00:49:43,000 --> 00:49:46,000 jafnvel þó að ég myndi miklu frekar lýsa þessar breytur 916 00:49:46,000 --> 00:49:48,000  meira generically sem nemendur. 917 00:49:48,000 --> 00:49:52,000 >> Nú getum við sameinast þeim hugmyndum sem hafa verið að vinna vel fyrir okkur 918 00:49:52,000 --> 00:49:56,000 og í staðinn að segja, "Þú veist hvað, gefa mér breytilega heitir nemendur, 919 00:49:56,000 --> 00:50:01,000 og við skulum hafa verið það af stærð 3, "svo nú get ég hreinsa þetta lengra, 920 00:50:01,000 --> 00:50:04,000 losna við handvirkt lýst Davíð 921 00:50:04,000 --> 00:50:08,000 og ég get í staðinn að segja eitthvað eins og nemendur [0] hér. 922 00:50:08,000 --> 00:50:11,000 Ég get þá sagt nemendum [0] hér, 923 00:50:11,000 --> 00:50:14,000 nemendur [0] hér, og svo framvegis, og ég get farið í kringum 924 00:50:14,000 --> 00:50:16,000 og hreinsa það upp fyrir Rob. 925 00:50:16,000 --> 00:50:19,000 Ég gæti líka farið um nú kannski að bæta við lykkju 926 00:50:19,000 --> 00:50:23,000 og nota GetString og GetInt til raunverulega fá þessa gildi frá notanda. 927 00:50:23,000 --> 00:50:27,000 Ég gæti farið um að bæta stöðugt vegna þess að þetta er yfirleitt slæmt starf 928 00:50:27,000 --> 00:50:29,000 á harða kóða sumir handahófi tala eins og 3 hérna 929 00:50:29,000 --> 00:50:33,000 og svo bara muna að þú ættir að setja ekki meira en 3 nemendur í honum. 930 00:50:33,000 --> 00:50:36,000 Það hefði líklega verið betra að nota # define efst á minn skrá 931 00:50:36,000 --> 00:50:40,000 og þáttur sem út, svo örugglega, láta mig fara á undan og alhæfa þetta. 932 00:50:40,000 --> 00:50:43,000 >> Leyfðu mér að opna upp dæmi sem er á meðal er í dag 933 00:50:43,000 --> 00:50:46,000 dæmi fyrirfram, structs1. 934 00:50:46,000 --> 00:50:49,000 Þetta er meira heill forrit sem notar # skilgreina upp hér 935 00:50:49,000 --> 00:50:51,000 og segir að við ætlum að hafa 3 nemendur sjálfgefið. 936 00:50:51,000 --> 00:50:54,000 Hér ég lýsa í flokki virði af nemendum, 937 00:50:54,000 --> 00:50:57,000 svo kennslustofu nemenda, og nú er ég með lykkju 938 00:50:57,000 --> 00:51:00,000 bara til að gera kóðann svolítið meira glæsilegur, byggja á bekknum 939 00:51:00,000 --> 00:51:05,000 með inntak notanda, svo iterate frá i = 0 á allt að nemendur, sem er 3. 940 00:51:05,000 --> 00:51:07,000 Og svo ég hvetja notandann í þessari útgáfu 941 00:51:07,000 --> 00:51:10,000  hvað er ID nemandans, og ég fæ það með GetInt. 942 00:51:10,000 --> 00:51:13,000 Hvað er nafn nemanda, og þá fæ ég það með GetString. 943 00:51:13,000 --> 00:51:15,000 Hvað er hús nemandans? Ég fá það með GetString. 944 00:51:15,000 --> 00:51:19,000 Og svo neðst hér ég ákvað bara að breyta 945 00:51:19,000 --> 00:51:22,000 hvernig ég er að prenta þetta út og í raun nota lykkju, 946 00:51:22,000 --> 00:51:24,000 og hver er ég að prenta? 947 00:51:24,000 --> 00:51:27,000 Samkvæmt athugasemd ég prenta einhver í Mather, 948 00:51:27,000 --> 00:51:30,000 og það er það svo Rob og Tommy og svo framvegis-reyndar er Tommy í Mather. 949 00:51:30,000 --> 00:51:34,000 Tommy og Davíð yrði prentuð í þessu tilfelli, en hvernig er þetta að virka? 950 00:51:34,000 --> 00:51:40,000 Við höfum ekki séð þessa aðgerð áður, en taka giska á því hvað þetta gerir. 951 00:51:40,000 --> 00:51:42,000 Saman strengi. 952 00:51:42,000 --> 00:51:45,000 >> Það er svolítið ekki augljóst hvernig það saman strengi vegna þess að það kemur í ljós 953 00:51:45,000 --> 00:51:49,000 Ef það skilar 0 sem þýðir strengir eru jafnir. 954 00:51:49,000 --> 00:51:53,000 Ef það skilar -1 sem þýðir maður kemur í stafrófsröð fyrir öðrum, 955 00:51:53,000 --> 00:51:57,000 og ef það skilar +1 sem þýðir að annað orð kemur stafrófsröð 956 00:51:57,000 --> 00:52:00,000 fyrir aðra, og þú getur litið á netinu eða á man síðunnar 957 00:52:00,000 --> 00:52:04,000 til að sjá nákvæmlega hvaða leið er hver, en allt þetta er nú að gera það er að segja 958 00:52:04,000 --> 00:52:09,000 ef [i]. hús er jafn "Mather" 959 00:52:09,000 --> 00:52:13,000 þá fara á undan og prenta út svo og svo er í Mather. 960 00:52:13,000 --> 00:52:16,000 En hér er eitthvað sem við höfum ekki séð áður, og við munum koma aftur til þetta. 961 00:52:16,000 --> 00:52:21,000 Ég man ekki alltaf að þurfa að gera þetta í einhverju áætlunum mínum. 962 00:52:21,000 --> 00:52:24,000 Frítt er greinilega að vísa til minni, frjáls minni, 963 00:52:24,000 --> 00:52:31,000 En hvað minni er ég frjáls virðist í lykkju neðst á þessari áætlun? 964 00:52:31,000 --> 00:52:34,000 Það lítur út eins og ég er frjáls nafn einstaklingsins 965 00:52:34,000 --> 00:52:37,000 og húsið manns, en af ​​hverju er það? 966 00:52:37,000 --> 00:52:41,000 >> Það kemur í ljós allar þessar vikur sem þú hefur verið að nota GetString 967 00:52:41,000 --> 00:52:45,000 við höfum konar verið að kynna galla í hvert eitt af áætlunum þínum. 968 00:52:45,000 --> 00:52:51,000 GetString með hönnun úthlutar minni þannig að það er hægt að fara aftur til þín streng, 969 00:52:51,000 --> 00:52:55,000 eins og Davíð, eða Rob, og þú getur þá gert hvað sem þú vilt 970 00:52:55,000 --> 00:52:59,000 með því að band í forritinu því að við höfum áskilið minni fyrir þig. 971 00:52:59,000 --> 00:53:02,000 Vandamálið er allur þessi tími í hvert sinn sem þú hringja GetString 972 00:53:02,000 --> 00:53:05,000 við, höfundar GetString, hafa verið að biðja stýrikerfið 973 00:53:05,000 --> 00:53:07,000 að gefa okkur smá vinnsluminni fyrir þessum streng. 974 00:53:07,000 --> 00:53:09,000 Gefðu okkur smá RAM fyrir þetta næsta streng. 975 00:53:09,000 --> 00:53:11,000 Gefðu okkur sumir meira vinnsluminni fyrir þetta næsta streng. 976 00:53:11,000 --> 00:53:13,000 Það sem þú, sem forritari, hafa aldrei verið að gera 977 00:53:13,000 --> 00:53:15,000 er að gefa okkur að minni baka, 978 00:53:15,000 --> 00:53:17,000 svo fyrir þessar nokkrar vikur öll forrit sem þú hefur skrifað 979 00:53:17,000 --> 00:53:20,000 hafa haft það sem er kallað minni stökk þar sem þeir halda áfram að nota 980 00:53:20,000 --> 00:53:24,000 meira og meira minni í hvert skipti sem þú hringja GetString, og það er allt í lagi. 981 00:53:24,000 --> 00:53:27,000 Við gerum vísvitandi að fyrstu vikurnar því það er ekki áhugavert 982 00:53:27,000 --> 00:53:29,000 að þurfa að hafa áhyggjur af þar sem strengur er að koma frá. 983 00:53:29,000 --> 00:53:34,000 Allt sem þú vilt er orðið Rob að koma aftur þegar notandinn slær það inn 984 00:53:34,000 --> 00:53:38,000 >> En áfram verðum við nú að byrja flóknari um þetta. 985 00:53:38,000 --> 00:53:42,000 Í hvert sinn sem við úthluta minni við betur að lokum afhenda það aftur. 986 00:53:42,000 --> 00:53:45,000 Annars í hinum raunverulega heimi á Mac tölvuna eða þú gætir hafa stundum reynslu 987 00:53:45,000 --> 00:53:50,000 einkenni þar sem tölvan þín er að mala að stöðva að lokum 988 00:53:50,000 --> 00:53:54,000 eða heimskur spuna ströndinni boltinn er bara hernema the tölva ' 989 00:53:54,000 --> 00:53:56,000 Allt athygli og þú getur ekki gert það. 990 00:53:56,000 --> 00:54:00,000 Það má skýra með því að allir tala um galla, en meðal þeirra mögulega galla 991 00:54:00,000 --> 00:54:03,000 eru hlutir sem kallast minni lekur þar einhver sem skrifaði að stykki af hugbúnaður 992 00:54:03,000 --> 00:54:07,000 þú ert að nota ekki muna að losa um minni 993 00:54:07,000 --> 00:54:10,000 að hann eða hún spurði stýrikerfi, 994 00:54:10,000 --> 00:54:14,000 ekki nota GetString, því það er CS50 hlutur, en nota svipaðar aðgerðir 995 00:54:14,000 --> 00:54:16,000 að spyrja stýrikerfi fyrir minni. 996 00:54:16,000 --> 00:54:19,000 Ef þú eða þeir skrúfa upp og aldrei aftur að minni 997 00:54:19,000 --> 00:54:24,000 einkenni um það sem hægt er að forrit hægir og hægir og hægir 998 00:54:24,000 --> 00:54:26,000 nema þú að muna eftir að hringja frítt. 999 00:54:26,000 --> 00:54:28,000 >> Við munum koma til baka þegar og hvers vegna þú vilt kalla frjáls, 1000 00:54:28,000 --> 00:54:32,000 en við skulum fara á undan bara fyrir gott mál og reyna að keyra þetta tiltekna forrit. 1001 00:54:32,000 --> 00:54:35,000 Þetta var kallað structs1, slá. 1002 00:54:35,000 --> 00:54:40,000 Leyfðu mér að fara á undan og keyra structs1, 123, David Mather, 1003 00:54:40,000 --> 00:54:47,000 456, Rob Kirkland, 789, 1004 00:54:47,000 --> 00:54:50,000 Tommy Mather, og við sjáum Davíðs í Mather, er Tommy í Mather. 1005 00:54:50,000 --> 00:54:53,000 Þetta er bara lítið geðheilbrigði athuga að forritið er að vinna. 1006 00:54:53,000 --> 00:54:56,000 Nú, því miður, this program er a lítill pirrandi í því 1007 00:54:56,000 --> 00:55:00,000 Ég gerði allt sem vinna, ég slóst í 9 mismunandi strengir, högg inn, 1008 00:55:00,000 --> 00:55:04,000 var sagt sem var í Mather, en vitanlega vissi ég sem var í Mather þegar því ég slegið hana. 1009 00:55:04,000 --> 00:55:07,000 Það væri að minnsta kosti gaman ef þetta forrit er meira eins og gagnagrunns 1010 00:55:07,000 --> 00:55:10,000 og það man í raun það sem ég hef slegið í 1011 00:55:10,000 --> 00:55:12,000 svo ég aldrei aftur að inntak þessara nemenda færslur. 1012 00:55:12,000 --> 00:55:15,000 Kannski er það eins og registrarial kerfi. 1013 00:55:15,000 --> 00:55:21,000 >> Við getum gert þetta með því að nota þessa tækni sem kallast skrá I / O, skrá inntak og úttak, 1014 00:55:21,000 --> 00:55:24,000 mjög almenn leið til að segja hvenær sem þú vilt lesa skrár eða skrifa skrá 1015 00:55:24,000 --> 00:55:26,000 þú getur gert þetta með ákveðna setja af aðgerðum. 1016 00:55:26,000 --> 00:55:29,000 Leyfðu mér að fara á undan og opna þetta dæmi structs2.c, 1017 00:55:29,000 --> 00:55:33,000 sem er næstum eins, en við skulum sjá hvað það er nú. 1018 00:55:33,000 --> 00:55:36,000 Efst á skrá Ég lýsi flokk nemenda. 1019 00:55:36,000 --> 00:55:38,000 Ég byggja þá á bekknum með inntak notanda, 1020 00:55:38,000 --> 00:55:41,000 svo þessum línum af kóða eru eins nákvæmlega áður. 1021 00:55:41,000 --> 00:55:45,000 Þá ef ég skruna niður ég prenta allir sem eru í Mather eins geðþótta áður, 1022 00:55:45,000 --> 00:55:47,000 en þetta er áhugaverður nýr lögun. 1023 00:55:47,000 --> 00:55:51,000 Þessar línur af kóða eru ný, og þeir kynna eitthvað hér, 1024 00:55:51,000 --> 00:55:55,000 Skrá, allar húfur, og það hefur * í hér eins og heilbrigður. 1025 00:55:55,000 --> 00:55:58,000 Leyfðu mér að færa þetta hérna, A * á hér eins og heilbrigður. 1026 00:55:58,000 --> 00:56:00,000 >> Þessi aðgerð sem við höfum ekki séð áður, fopen, 1027 00:56:00,000 --> 00:56:03,000 en það þýðir að skrá opinn, þannig að við skulum Lögð gegnum þetta, 1028 00:56:03,000 --> 00:56:05,000 og þetta er eitthvað sem við munum koma til baka í framtíðinni psets, 1029 00:56:05,000 --> 00:56:10,000 en þessi lína hér opnar raun skrá sem kallast gagnasafn, 1030 00:56:10,000 --> 00:56:13,000 og opnar sérstaklega það á þann hátt að það getur gert það til þess? 1031 00:56:13,000 --> 00:56:15,000 [Inaudible nemanda] 1032 00:56:15,000 --> 00:56:19,000 Einmitt, svo "W" þýðir bara að það er að segja á stýrikerfi 1033 00:56:19,000 --> 00:56:21,000 opna þessa skrá á þann hátt sem ég get skrifa á það. 1034 00:56:21,000 --> 00:56:23,000 Ég vil ekki að lesa það. Ég vil ekki bara að líta á það. 1035 00:56:23,000 --> 00:56:26,000 Ég vil breyta því og bæta við efni hugsanlega við það, 1036 00:56:26,000 --> 00:56:28,000 og þá er að fara að vera kölluð gagnagrunn. 1037 00:56:28,000 --> 00:56:30,000 Þetta gæti verið kallað neitt. 1038 00:56:30,000 --> 00:56:32,000 Þetta gæti verið database.txt. Þetta gæti verið. DB. 1039 00:56:32,000 --> 00:56:37,000 Þetta gæti verið orð eins og foo, en ég valdi geðþótta að nefna skrána gagnagrunninum. 1040 00:56:37,000 --> 00:56:42,000 Þetta er lítið geðheilbrigði athuga að við munum koma aftur í smáatriðum með tímanum, 1041 00:56:42,000 --> 00:56:47,000 ef FP fyrir músina skrá, ekki jafn NULL sem þýðir allt er vel. 1042 00:56:47,000 --> 00:56:51,000 >> Long saga stutt, virka eins fopen mistakast stundum. 1043 00:56:51,000 --> 00:56:53,000 Kannski skrá er ekki til. Kannski þú ert með pláss diskur. 1044 00:56:53,000 --> 00:56:55,000 Kannski þú hefur ekki leyfi til að mappa, 1045 00:56:55,000 --> 00:56:58,000 svo ef fopen skilar núll eitthvað slæmt gerðist. 1046 00:56:58,000 --> 00:57:02,000 Hins vegar ef fopen ekki aftur null allt er vel 1047 00:57:02,000 --> 00:57:04,000 og ég get byrjað að skrifa í þessa skrá. 1048 00:57:04,000 --> 00:57:06,000 Hér er nýtt bragð. 1049 00:57:06,000 --> 00:57:08,000 Þetta er til lykkja sem er iterating yfir hvor af nemendum mínum, 1050 00:57:08,000 --> 00:57:10,000 og þetta lítur svo svipað og við höfum gert áður, 1051 00:57:10,000 --> 00:57:15,000 en þessi aðgerð er frændi printf kallað fprintf að skrá printf, 1052 00:57:15,000 --> 00:57:18,000 og eftir það er öðruvísi á aðeins 2 vegu. 1053 00:57:18,000 --> 00:57:20,000 Einn, byrjar það með f í stað p, 1054 00:57:20,000 --> 00:57:23,000 en þá er fyrsta rifrildi hennar virðist það? 1055 00:57:23,000 --> 00:57:25,000 [Nemendur] File. >> Það er skrá. 1056 00:57:25,000 --> 00:57:30,000 Þessi hlutur heitir FP, sem við munum loksins stríða sundur hvað skrá bendillinn er 1057 00:57:30,000 --> 00:57:35,000 en nú FP táknar einfaldlega skrána sem ég hef opnað, 1058 00:57:35,000 --> 00:57:41,000 svo fprintf hér er að segja prenta auðkenni notanda til að skrá, ekki á skjáinn. 1059 00:57:41,000 --> 00:57:44,000 Prenta nafn notandans að skrá, ekki á skjáinn, 1060 00:57:44,000 --> 00:57:47,000 húsið að skrá, ekki á skjáinn, og þá hérna, augljóslega, 1061 00:57:47,000 --> 00:57:50,000 loka skrá, og þá niður frjálsa minni. 1062 00:57:50,000 --> 00:57:53,000 >> Eini munurinn á milli þessa útgáfu 2 og útgáfu 1 1063 00:57:53,000 --> 00:57:58,000 er kynning á fopen og þessari skrá með * 1064 00:57:58,000 --> 00:58:01,000 og þetta hugmynd af fprintf, þannig að við skulum sjá hvað niðurstaðan er. 1065 00:58:01,000 --> 00:58:03,000 Leyfðu mér að fara í Telnet minn. 1066 00:58:03,000 --> 00:58:06,000 Leyfðu mér að hlaupa structs2, slá. 1067 00:58:06,000 --> 00:58:09,000 Útlit eins og allt er vel. Skulum endursýning structs2. 1068 00:58:09,000 --> 00:58:15,000 123, David Mather, 456, Rob Kirkland, 1069 00:58:15,000 --> 00:58:19,000 789, Tommy Mather, slá. 1070 00:58:19,000 --> 00:58:23,000 Útlit eins og það haga sér eins, en ef ég geri nú LS 1071 00:58:23,000 --> 00:58:28,000 eftir hvaða skrá er hér meðal allra númerið mitt, gagnasafn, 1072 00:58:28,000 --> 00:58:32,000 þannig að við skulum opna að gedit af gagnasafn, og líta á það. 1073 00:58:32,000 --> 00:58:34,000 Það er ekki kynjamisrétti af skrá snið. 1074 00:58:34,000 --> 00:58:38,000 Það er í raun eitt stykki línu gögn á línu á línu, 1075 00:58:38,000 --> 00:58:42,000 en þeir sem nota Excel eða CSV skrár, aðgreind með kommum gildi, 1076 00:58:42,000 --> 00:58:47,000 Ég gæti vissulega hafa notað fprintf í staðinn kannski gert eitthvað eins og this 1077 00:58:47,000 --> 00:58:50,000 svo að ég gæti í raun búið jafngildi Excel skrá 1078 00:58:50,000 --> 00:58:53,000 með því að aðskilja hlutina með kommum, ekki bara nýjar línur. 1079 00:58:53,000 --> 00:58:56,000 >> Í þessu tilfelli hefði ég í staðinn nota kommur í stað nýjar línur 1080 00:58:56,000 --> 00:59:01,000 Ég gat bókstaflega opna gagnagrunn í Excel ef ég gerði í staðinn það líta svona út. 1081 00:59:01,000 --> 00:59:03,000 Í stuttu máli, nú að við höfum vald til að skrifa skrár 1082 00:59:03,000 --> 00:59:07,000 við getum nú byrjað viðvarandi gögn, halda það í kring á disk 1083 00:59:07,000 --> 00:59:10,000 svo að við getum haldið upplýsingum um aftur og aftur. 1084 00:59:10,000 --> 00:59:14,000 Takið nokkra aðra hluti sem eru nú aðeins fleiri kunnugleg. 1085 00:59:14,000 --> 00:59:16,000 Efst á þessa C skrá við höfum typedef 1086 00:59:16,000 --> 00:59:21,000 vegna þess að við viljum búa til gögn gerð sem sýnir orð 1087 00:59:21,000 --> 00:59:25,000 svo þessi tegund er kölluð orð, og innan þessa uppbyggingu 1088 00:59:25,000 --> 00:59:27,000 það er lítill áhugamaður núna. 1089 00:59:27,000 --> 00:59:30,000 Hvers vegna er orð samsett úr augljósri fylki? 1090 00:59:30,000 --> 00:59:33,000 Hvað er orðið bara innsæi? 1091 00:59:33,000 --> 00:59:35,000 >> Það er fylki af stöfum. 1092 00:59:35,000 --> 00:59:37,000 Það er röð af stöfum aftur til baka til baka. 1093 00:59:37,000 --> 00:59:41,000 BRÉF í öllum húfur gerist að við segjum geðþótta hámarkslengd 1094 00:59:41,000 --> 00:59:44,000 á hvaða orð í orðabókinni sem við erum að nota til Scramble. 1095 00:59:44,000 --> 00:59:46,000 Hvers vegna hef ég 1? 1096 00:59:46,000 --> 00:59:48,000 The null staf. 1097 00:59:48,000 --> 00:59:51,000 Muna þegar við gerðum Bananagrams dæmi við þurftum sérstaka gildi 1098 00:59:51,000 --> 00:59:55,000 í lok orðsins til að halda utan 1099 00:59:55,000 --> 00:59:59,000 um þar sem orðin í raun lokið, og eins og setja vandamál forskrift segir 1100 00:59:59,000 --> 01:00:03,000 hér erum við að tengja við tiltekið orð Boolean gildi, 1101 01:00:03,000 --> 01:00:05,000 fáni, svo að segja, satt eða ósatt. 1102 01:00:05,000 --> 01:00:09,000 Hefur þú fundið þetta orð nú þegar, vegna þess að við skiljum 1103 01:00:09,000 --> 01:00:13,000 þurfum við virkilega leið að muna ekki aðeins hvað orðið er í Scramble 1104 01:00:13,000 --> 01:00:15,000 en hvort þú, manna, hafa fundið það 1105 01:00:15,000 --> 01:00:20,000 þannig að ef þú finnur orðið "" Þú getur ekki bara slá, slá, sem, inn, í, slá inn 1106 01:00:20,000 --> 01:00:23,000 og fá 3 stig, 3 stig, 3 stig, 3 stig. 1107 01:00:23,000 --> 01:00:26,000 Við viljum vera fær um að svartan lista þessi orð með því að setja a bool 1108 01:00:26,000 --> 01:00:29,000 á við ef þú hefur þegar fundið það, og svo er það þess vegna sem við 1109 01:00:29,000 --> 01:00:31,000 encapsulated það í þessari uppbyggingu. 1110 01:00:31,000 --> 01:00:35,000 >> Nú, hér niðri í Scramble það er þetta annar strúktúr heitir orðabók. 1111 01:00:35,000 --> 01:00:39,000 Fjarverandi hér er orðið typedef vegna þess að í þessu tilfelli 1112 01:00:39,000 --> 01:00:43,000 við þurftum að þjappa saman hugmyndinni um orðabók, 1113 01:00:43,000 --> 01:00:46,000 og orðabók inniheldur allt fullt af orðum, 1114 01:00:46,000 --> 01:00:49,000 eins og gefið í skyn með þessum fjölda, og hversu margir af þessum orðum eru? 1115 01:00:49,000 --> 01:00:51,000 Jæja, hvað þetta breytu sem heitir stærð segir. 1116 01:00:51,000 --> 01:00:53,000 En við þurfum bara eina orðabók. 1117 01:00:53,000 --> 01:00:55,000 Við þurfum ekki að gögn tegund sem heitir orðabók. 1118 01:00:55,000 --> 01:00:58,000 Við þurfum bara einn af þeim, þannig að það kemur í ljós í C 1119 01:00:58,000 --> 01:01:03,000 að ef þú segir ekki typedef, þú segir bara strúktúr, þá inni í hrokkið axlabönd 1120 01:01:03,000 --> 01:01:05,000 að setja breytur, þá setja nafnið. 1121 01:01:05,000 --> 01:01:09,000 Þetta er lýsa einni breytistærð heitir orðabók 1122 01:01:09,000 --> 01:01:11,000 sem lítur svona út. 1123 01:01:11,000 --> 01:01:16,000 Hins vegar eru þessar línur að búa til einnota gögn uppbygging kallast orð 1124 01:01:16,000 --> 01:01:19,000 að þú getur búið til mörg afrit af, rétt eins og við bjuggum 1125 01:01:19,000 --> 01:01:22,000 mörg eintök nemenda. 1126 01:01:22,000 --> 01:01:24,000 >> Hvað er þetta að leyfa lokum okkur að gera? 1127 01:01:24,000 --> 01:01:30,000 Leyfðu mér að fara aftur í, við skulum segja, einfaldari dæmi frá einfaldari tímum, 1128 01:01:30,000 --> 01:01:34,000 og láta mig opna, við skulum segja, compare1.c. 1129 01:01:34,000 --> 01:01:38,000 Vandamálið hér á móti er að í raun afhýða aftur 1130 01:01:38,000 --> 01:01:41,000 lag á band og byrjar að taka burt þessar þjálfun hjól 1131 01:01:41,000 --> 01:01:44,000 vegna þess að það kemur í ljós að band allan þennan tíma 1132 01:01:44,000 --> 01:01:47,000 er eins og við lofað í viku 1 raun bara gælunafn, 1133 01:01:47,000 --> 01:01:51,000 samheiti frá CS50 bókasafn fyrir eitthvað sem lítur svolítið dulinn, 1134 01:01:51,000 --> 01:01:53,000 char *, og við höfum séð þessa stjörnu áður. 1135 01:01:53,000 --> 01:01:55,000 Við sáum það í tengslum við skrá. 1136 01:01:55,000 --> 01:01:59,000 >> Við skulum nú sjá hvers vegna við höfum verið að fela þetta smáatriði um nokkurt skeið. 1137 01:01:59,000 --> 01:02:02,000 Hér er skrá sem heitir compare1.c, 1138 01:02:02,000 --> 01:02:07,000 og spyr greinilega notandi í 2 strengi, s og t, 1139 01:02:07,000 --> 01:02:11,000 og þá reynir hann að bera saman þá strengi fyrir jafnrétti í línu 26, 1140 01:02:11,000 --> 01:02:14,000 og ef þeir eru jafnir og það segir, "þú gafst það sama," 1141 01:02:14,000 --> 01:02:17,000 og ef þeir eru ekki jafn segir, "þú gafst mismunandi hluti." 1142 01:02:17,000 --> 01:02:19,000 Leyfðu mér að fara á undan og keyra þetta forrit. 1143 01:02:19,000 --> 01:02:23,000 Leyfðu mér að fara inn í skrá uppspretta minn, gera compare1. Það saman í lagi. 1144 01:02:23,000 --> 01:02:25,000 Leyfðu mér að hlaupa compare1. 1145 01:02:25,000 --> 01:02:27,000 Ég súmma inn, inn. 1146 01:02:27,000 --> 01:02:29,000 Segja eitthvað. HELLO. 1147 01:02:29,000 --> 01:02:32,000 Ég segi þér eitthvað aftur. HELLO. 1148 01:02:32,000 --> 01:02:34,000 Ég örugglega ekki slá mismunandi hluti. 1149 01:02:34,000 --> 01:02:37,000 >> Leyfðu mér að reyna þetta aftur. Bless bless. 1150 01:02:37,000 --> 01:02:40,000 Örugglega ekki öðruvísi, þannig að hvað er að gerast hér? 1151 01:02:40,000 --> 01:02:44,000 Jæja, hvað er í raun verið saman í línu 26? 1152 01:02:44,000 --> 01:02:46,000 [Inaudible nemanda] 1153 01:02:46,000 --> 01:02:49,000 Já, svo kemur í ljós að band, gögn tegund er góður af hvítum lygi. 1154 01:02:49,000 --> 01:02:53,000 A band er char *, en hvað er char *? 1155 01:02:53,000 --> 01:02:56,000 A char *, eins og þeir segja, er bendillinn, 1156 01:02:56,000 --> 01:03:00,000 og bendillinn er í raun netfang, 1157 01:03:00,000 --> 01:03:05,000 summu stað í minni, og ef þú skyldir til að hafa slegið inn orð eins og halló, 1158 01:03:05,000 --> 01:03:08,000 muna frá fyrri umræðum um strengi 1159 01:03:08,000 --> 01:03:16,000 þetta er eins og orð HELLO. 1160 01:03:16,000 --> 01:03:19,000 Mundu að orð eins og hello má fulltrúa 1161 01:03:19,000 --> 01:03:22,000 sem fylki af stöfum eins og þetta 1162 01:03:22,000 --> 01:03:25,000 og þá með sérstökum karakter í lok kölluð núll staf, 1163 01:03:25,000 --> 01:03:27,000 sem \ táknar. 1164 01:03:27,000 --> 01:03:29,000 Hvað er í raun band? 1165 01:03:29,000 --> 01:03:32,000 Takið eftir að þetta er margar klumpur af minni, 1166 01:03:32,000 --> 01:03:36,000 og í raun er endir af það aðeins þekkt þegar þú horfir í gegnum allt band 1167 01:03:36,000 --> 01:03:38,000 að leita að sérstökum null staf. 1168 01:03:38,000 --> 01:03:41,000 En ef þetta er klumpur af minni úr minni tölvunnar minnar, 1169 01:03:41,000 --> 01:03:44,000 segjum geðþótta að þetta band bara heppinn, 1170 01:03:44,000 --> 01:03:47,000 og það fékk sett í upphafi RAM tölvunnar minnar. 1171 01:03:47,000 --> 01:03:54,000 Þetta er bæti 0, 1, 2, 3, 4, 5, 6 ... 1172 01:03:54,000 --> 01:04:02,000 >> Þegar ég segi eitthvað eins GetString og ég band S = GetString 1173 01:04:02,000 --> 01:04:04,000 hvað er í raun að koma aftur? 1174 01:04:04,000 --> 01:04:08,000 Í þessum undanförnum vikum, er það virkilega verið geymt í s 1175 01:04:08,000 --> 01:04:13,000 er þetta ekki band í sjálfu sér, en í þessu tilfelli hvað er verið geymt er 1176 01:04:13,000 --> 01:04:18,000 númer 0 því hvað GetString raun er 1177 01:04:18,000 --> 01:04:20,000 er það ekki líkamlega aftur a band. 1178 01:04:20,000 --> 01:04:22,000 Það þýðir ekki einu sinni í raun að gera huglæg vit. 1179 01:04:22,000 --> 01:04:24,000 Hvað það gerir aftur er tala. 1180 01:04:24,000 --> 01:04:28,000 Þessi tala er heimilisfang HELLO í minni, 1181 01:04:28,000 --> 01:04:32,000 og band er þá, ef við afhýða aftur þetta lag, band er í raun ekki til. 1182 01:04:32,000 --> 01:04:35,000 Það er bara einföldun á CS50 bókasafn. 1183 01:04:35,000 --> 01:04:38,000 >> Þetta er í raun eitthvað sem heitir char *. 1184 01:04:38,000 --> 01:04:41,000 Char vit vegna þess að það er orð, eins HELLO? 1185 01:04:41,000 --> 01:04:44,000 Jæja, það er röð af chars, röð af stöfum. 1186 01:04:44,000 --> 01:04:47,000 Char * merkir veffang staf, 1187 01:04:47,000 --> 01:04:50,000 svo hvað þýðir það að skila streng? 1188 01:04:50,000 --> 01:04:53,000 A ágætur, einföld leið til að koma aftur a band 1189 01:04:53,000 --> 01:04:57,000 er frekar en að reyna að reikna út hvernig ég aftur 5 eða 6 mismunandi bæti 1190 01:04:57,000 --> 01:05:01,000 láta mig aftur á heimilisfang sem bæti? 1191 01:05:01,000 --> 01:05:03,000 Sú fyrsta. 1192 01:05:03,000 --> 01:05:06,000 Með öðrum orðum, láta mig gefa þér heimilisfang staf í minni. 1193 01:05:06,000 --> 01:05:10,000 Það er það char * táknar, heimilisfang einn staf í minni. 1194 01:05:10,000 --> 01:05:12,000 Hringdu þá breytu s. 1195 01:05:12,000 --> 01:05:15,000 Geymið í s viðkomandi tölu, sem ég sagði geðþótta er 0, 1196 01:05:15,000 --> 01:05:19,000 bara til að halda hlutum einfalt, en í raun það er yfirleitt stærri tala. 1197 01:05:19,000 --> 01:05:21,000 >> Bíddu. 1198 01:05:21,000 --> 01:05:23,000 Ef þú ert bara að gefa mér heimilisfang fyrsta staf, hvernig veit ég hvað heimilisfangið er 1199 01:05:23,000 --> 01:05:25,000 annars eðli, þriðja, fjórða og fimmta? 1200 01:05:25,000 --> 01:05:27,000 [Inaudible nemanda] 1201 01:05:27,000 --> 01:05:31,000 Þú veist bara hvar the endir af the band er við vegur af þessu handhæga bragð, 1202 01:05:31,000 --> 01:05:35,000 þannig að þegar þú notar eitthvað eins og printf, hvað printf bókstaflega tekur sem rök þess, 1203 01:05:35,000 --> 01:05:39,000 muna að við notum tákn þessa% s, og þá fara í 1204 01:05:39,000 --> 01:05:41,000 breytan sem er sögufrægur a band. 1205 01:05:41,000 --> 01:05:47,000 Það sem þú ert í raun farið er heimilisfang fyrsta staf strengsins. 1206 01:05:47,000 --> 01:05:50,000 Printf notar þá til lykkja eða meðan lykkja fenginni þetta netfang, 1207 01:05:50,000 --> 01:05:53,000 til dæmis, 0, svo látið mig gera þetta núna, 1208 01:05:53,000 --> 01:06:02,000 printf ("% s \ n" s); 1209 01:06:02,000 --> 01:06:07,000 Þegar ég kalla printf ("% s \ n" s), það sem ég er í raun að veita printf með 1210 01:06:07,000 --> 01:06:13,000 er heimilisfang fyrsta staf í s, sem í þessu handahófskennt tilfelli er H. 1211 01:06:13,000 --> 01:06:16,000 >> Hvernig printf vita nákvæmlega hvað á að birta á skjánum? 1212 01:06:16,000 --> 01:06:19,000 Sá sem framkvæmd framkvæmda printf á meðan lykkja eða til hliðar 1213 01:06:19,000 --> 01:06:23,000 sem segir er þetta eðli jafna sérstaka null staf? 1214 01:06:23,000 --> 01:06:25,000 Ef ekki, prenta það. Hvernig óður í this einn? 1215 01:06:25,000 --> 01:06:28,000 Ef ekki prenta það, prenta það, prenta það, prenta það. 1216 01:06:28,000 --> 01:06:32,000 Oh, þetta er sérstakt. Hættu að prentun og skila til notandans. 1217 01:06:32,000 --> 01:06:35,000 Og það er bókstaflega allt sem er verið að gerast undir hetta, 1218 01:06:35,000 --> 01:06:38,000 og það er mikið að melta í fyrsta dag í bekknum, 1219 01:06:38,000 --> 01:06:43,000 en nú að það er í raun að byggja blokk af öllu að skilja 1220 01:06:43,000 --> 01:06:46,000 sem hefur verið að gerast inni í minni tölvu okkar, 1221 01:06:46,000 --> 01:06:49,000 og að lokum munum stríða þetta sundur með smá hjálp 1222 01:06:49,000 --> 01:06:51,000 frá einum af vinum okkar í Stanford. 1223 01:06:51,000 --> 01:06:56,000 >> Prófessor Nick Parlante í Stanford hefur gert þetta frábæra vídeó röð 1224 01:06:56,000 --> 01:06:58,000 úr alls konar mismunandi tungumálum sem kynnt 1225 01:06:58,000 --> 01:07:00,000 þetta litla Claymation eðli Binky. 1226 01:07:00,000 --> 01:07:03,000 Röddin sem þú ert að fara að heyra í örfáum öðrum innsýn 1227 01:07:03,000 --> 01:07:05,000 er að Stanford prófessor, og þú ert að fá 1228 01:07:05,000 --> 01:07:07,000 aðeins 5 eða 6 sekúndur af þessu núna, 1229 01:07:07,000 --> 01:07:09,000 en þetta er í huga sem við munum gera í dag 1230 01:07:09,000 --> 01:07:11,000 og byrja á miðvikudag. 1231 01:07:11,000 --> 01:07:15,000 Ég gef þér Pointer gaman með Binky, sýnishorn. 1232 01:07:15,000 --> 01:07:18,000 [♪ Music ♪] [prófessor Parlante] Hey, Binky. 1233 01:07:18,000 --> 01:07:21,000 Wake upp. Það er kominn tími fyrir gaman músina. 1234 01:07:21,000 --> 01:07:24,000 [Binky] Hvað er það? Frekari upplýsingar um punkta? 1235 01:07:24,000 --> 01:07:26,000 Ó, Goody! 1236 01:07:26,000 --> 01:07:29,000 >> Við munum sjá þig á miðvikudag. 1237 01:07:29,000 --> 01:07:32,000 [CS50.TV]