1 00:00:00,000 --> 00:00:03,000 [Powered by Google Translate] [4 savaitė] 2 00:00:03,000 --> 00:00:05,000 [David J. Malan] [Harvardo universiteto] 3 00:00:05,000 --> 00:00:08,000 [Tai CS50.] [CS50.TV] 4 00:00:08,000 --> 00:00:12,000 >> Viskas gerai, tai CS50, ir tai yra 4 savaitės pradžia, 5 00:00:12,000 --> 00:00:16,000 ir tai yra vienas iš lėčiausiai galimų rūšiavimo algoritmų. 6 00:00:16,000 --> 00:00:19,000 Viena iš jų buvo tai, kad mes tiesiog stebėjo? 7 00:00:19,000 --> 00:00:24,000 Tai buvo burbulas rūšiuoti, kad didelis O (n ^ 2) + suma, 8 00:00:24,000 --> 00:00:28,000 ir iš tiesų mes esame ne vieninteliai šiame pasaulyje, atrodo, žinau, 9 00:00:28,000 --> 00:00:30,000 burbulas rūšiuoti yra arba jo veikimo laikas. 10 00:00:30,000 --> 00:00:33,000 Iš tikrųjų, tai buvo interviu su Eric Schmidt "Google" 11 00:00:33,000 --> 00:00:45,000 ir buvęs senatorius Barackas Obama (Barakas Obama) vos prieš keletą metų. 12 00:00:45,000 --> 00:00:48,000 >> Dabar, senatorius, jūs čia "Google", 13 00:00:48,000 --> 00:00:54,000 ir man patinka galvoti apie pirmininkavimo darbo interviu. 14 00:00:54,000 --> 00:00:58,000 Dabar sunku gauti darbą kaip prezidento, ir jūs ketinate per sąstingis dabar. 15 00:00:58,000 --> 00:01:00,000 Tai taip pat sunku gauti darbą "Google". 16 00:01:00,000 --> 00:01:05,000 Mes turime klausimų, ir mes prašome mūsų kandidatai klausimus, 17 00:01:05,000 --> 00:01:10,000 ir tai vienas iš Larry Schwimmer. 18 00:01:10,000 --> 00:01:14,000 Jūs manote, kad aš juokauji? Tai čia. 19 00:01:14,000 --> 00:01:18,000 Kas yra efektyviausias būdas rūšiuoti milijoną 32-bitų sveikųjų skaičių? 20 00:01:18,000 --> 00:01:21,000 [Juokas] 21 00:01:21,000 --> 00:01:24,000 Gerai 22 00:01:24,000 --> 00:01:26,000 Aš atsiprašau. >> Ne, ne, ne, ne. 23 00:01:26,000 --> 00:01:34,000 Manau, kad burbulas tarsi būtų neteisingas būdas eiti. 24 00:01:34,000 --> 00:01:39,000 >> Nagi, kuris papasakojo jam tai? 25 00:01:39,000 --> 00:01:43,000 Praėjusią savaitę primena, mes priėmėme iš kodo pertraukos, bent jau per dieną, 26 00:01:43,000 --> 00:01:46,000 ir pradėjo sutelkiant dėmesį į kai kurių aukštesnio lygio idėjas ir problemų sprendimo apskritai 27 00:01:46,000 --> 00:01:49,000 paieškos ir rūšiavimo, 28 00:01:49,000 --> 00:01:53,000 ir mes pristatėme kažką, kad mes ne SLAP tokį vardą praėjusią savaitę, 29 00:01:53,000 --> 00:01:56,000 bet asimptotinė notacija, Big O, Big Omega 30 00:01:56,000 --> 00:02:00,000 , o kartais ir Big teta notacijos, ir tai buvo tiesiog būdų 31 00:02:00,000 --> 00:02:02,000 aprašyti algoritmų veikimo laiką, 32 00:02:02,000 --> 00:02:05,000 kiek laiko užtrunka už algoritmas paleisti. 33 00:02:05,000 --> 00:02:08,000 >> Ir jūs žinote, kad jūs kalbėjote apie veikimo laiką dydžio 34 00:02:08,000 --> 00:02:11,000 sąnaudų dalis, kuri mes paprastai vadiname n, kokia problema gali būti, 35 00:02:11,000 --> 00:02:13,000 kur n yra žmonių skaičius į kambarį, 36 00:02:13,000 --> 00:02:17,000 telefonų knygos puslapių skaičius, ir mes pradėjome rašyti dalykus 37 00:02:17,000 --> 00:02:21,000 kaip O (n ^ 2) arba O (n) arba O (n log n), 38 00:02:21,000 --> 00:02:24,000 ir net tada, kai matematikos ne gana dirbti taip tobulai 39 00:02:24,000 --> 00:02:28,000 ir jis buvo n ² - n / 2 ar kažkas panašaus 40 00:02:28,000 --> 00:02:31,000 mes verčiau tiesiog išmesti kai apatinių nutartyje, 41 00:02:31,000 --> 00:02:34,000 ir motyvacija yra, kad mes tikrai norime 42 00:02:34,000 --> 00:02:37,000 tarsi objektyviai įvertinti 43 00:02:37,000 --> 00:02:39,000 programų įgyvendinimą arba algoritmų rezultatai 44 00:02:39,000 --> 00:02:42,000 kad dienos pabaigoje neturi nieko bendro, pavyzdžiui, 45 00:02:42,000 --> 00:02:45,000 nuo jūsų kompiuterio greičio. 46 00:02:45,000 --> 00:02:47,000 >> Pavyzdžiui, jei įgyvendinti burbulas rūšiuoti, 47 00:02:47,000 --> 00:02:50,000 ar jums įgyvendinti sujungti šiandienos kompiuterio rūšiavimo arba atrankos rūšiuoti, 48 00:02:50,000 --> 00:02:53,000 2 GHz kompiuterio, ir paleisti jį, 49 00:02:53,000 --> 00:02:56,000 ir tai trunka keletą sekundžių skaičių, kitais metais ten 3 GHz 50 00:02:56,000 --> 00:02:59,000 arba 4 GHz kompiuteris, ir galbūt tada teigti, kad: "Oho, mano algoritmas 51 00:02:59,000 --> 00:03:03,000 dabar yra du kartus taip greitai, nors iš tikrųjų tai akivaizdžiai ne tas atvejis. 52 00:03:03,000 --> 00:03:06,000 Tai tik įranga turi Dotarłeś greičiau, tačiau jūsų kompiuteris 53 00:03:06,000 --> 00:03:10,000 ne, ir taip mes tikrai norite išmesti dalykų, pavyzdžiui, 54 00:03:10,000 --> 00:03:13,000 kartotinus 2 arba dauginiai iš 3, kai kalbama apie užeina 55 00:03:13,000 --> 00:03:17,000 kaip greitai ar kaip lėtai algoritmas yra ir tikrai tik sutelkti 56 00:03:17,000 --> 00:03:20,000 n arba kai jos veiksnys, 57 00:03:20,000 --> 00:03:24,000 kai galia kaip iš praeitą savaitę rūšių. 58 00:03:24,000 --> 00:03:27,000 Ir priminti, kad su Merge sort pagalba 59 00:03:27,000 --> 00:03:31,000 mes galėjome padaryti daug geriau nei burbulas rūšiuoti ir atrankos rūšiuoti 60 00:03:31,000 --> 00:03:33,000 ir net įterpimas rūšiuoti. 61 00:03:33,000 --> 00:03:36,000 >> Mes turime n log n, ir vėl, 62 00:03:36,000 --> 00:03:39,000 prisiminti, kad log n paprastai reiškia tai, kad auga 63 00:03:39,000 --> 00:03:43,000 lėčiau, tada n, todėl n log n iki šiol buvo gerai 64 00:03:43,000 --> 00:03:45,000 , nes jis buvo mažiau nei n ². 65 00:03:45,000 --> 00:03:47,000 Tačiau norint pasiekti n log n Merge sort 66 00:03:47,000 --> 00:03:51,000 tai, kas buvo pagrindinė idėja gemalai, kad mes turėjome sverto 67 00:03:51,000 --> 00:03:54,000 kad mes taip pat daro poveikį jos įtakai savaitę 0? 68 00:03:54,000 --> 00:03:58,000 Kaip mes rūšiavimo problemą spręsti protingai sujungti rūšiuoti? 69 00:03:58,000 --> 00:04:04,000 Kokia buvo pagrindinė įžvalga, gal? 70 00:04:04,000 --> 00:04:07,000 Kas nors ne visi. 71 00:04:07,000 --> 00:04:09,000 Gerai, galime žengti žingsnį atgal. 72 00:04:09,000 --> 00:04:11,000 Apibūdinti sujungti tarsi savo žodžiais. 73 00:04:11,000 --> 00:04:15,000 Kaip tai veikia? 74 00:04:15,000 --> 00:04:17,000 Gerai, mes eilutėje atgal į savaitę 0. 75 00:04:17,000 --> 00:04:19,000 Gerai, yeah. 76 00:04:19,000 --> 00:04:22,000 [Nesigirdi studentas] 77 00:04:22,000 --> 00:04:26,000 Gerai, gerai, kad mes suskirstyti į 2 dalių skaičių masyvas. 78 00:04:26,000 --> 00:04:29,000 Surūšiuota kiekvienas iš šių vienetų, o tada mes sujungėme juos, 79 00:04:29,000 --> 00:04:33,000 ir mes matėme šią idėją, prieš atsižvelgiant problema, kad tai didelis 80 00:04:33,000 --> 00:04:36,000 ir sukapoti jį į problemą, kad tai didelis, ar tai didelis. 81 00:04:36,000 --> 00:04:38,000 >> Prisiminkite, telefonų knygos pavyzdys. 82 00:04:38,000 --> 00:04:42,000 Prisiminkite savarankiškai skaičiavimo algoritmas savaites, 83 00:04:42,000 --> 00:04:45,000 taip sujungti tarsi apibendrinta šio pseudocode čia. 84 00:04:45,000 --> 00:04:48,000 , Kai esate n elementus, iš pradžių ji buvo normalumas patikrinti. 85 00:04:48,000 --> 00:04:51,000 Jei n <2 neturite padaryti ką nors ne visi 86 00:04:51,000 --> 00:04:55,000 nes jei n <2, tai n yra akivaizdžiai 0 arba 1, 87 00:04:55,000 --> 00:04:57,000 ir todėl, jei jis yra 0 arba 1 nieko rūšiuoti. 88 00:04:57,000 --> 00:04:59,000 Baigsite. 89 00:04:59,000 --> 00:05:01,000 Jūsų sąrašas jau funkcionalumą lengvai surūšiuoti. 90 00:05:01,000 --> 00:05:04,000 Bet kitaip, jei jūs turite 2 ar daugiau elementų, eiti į priekį ir suskirstyti jas 91 00:05:04,000 --> 00:05:06,000 į 2 dalis, į kairę ir į dešinę. 92 00:05:06,000 --> 00:05:09,000 Rūšiuoti kiekviena iš tų per pusę, ir tada sujungti surūšiuoti puses. 93 00:05:09,000 --> 00:05:13,000 Bet problema čia yra tai, kad iš pirmo žvilgsnio tai mano, kaip mes Punting. 94 00:05:13,000 --> 00:05:17,000 Apibrėžimą, nes tai yra nelogiškas, jei aš paprašė jums n elementus norite surūšiuoti šių 95 00:05:17,000 --> 00:05:22,000 ir jūs man sako, "Gerai, gerai, mes rūšiuoti tas n / 2 ir tie, n / 2 elementų, 96 00:05:22,000 --> 00:05:27,000 tada mano kitas klausimas bus "Gerai, kaip jums rūšiuoti n / 2 elementus?" 97 00:05:27,000 --> 00:05:30,000 >> Tačiau dėl šios programos struktūros, 98 00:05:30,000 --> 00:05:33,000 , nes yra į šį bazinį scenarijų, taip sakant, 99 00:05:33,000 --> 00:05:39,000 tai ypatingas atvejis, kad sako, kad jei n yra mažesnis už tam tikrą nustatytą vertę, pavyzdžiui, 2 reisai iš karto. 100 00:05:39,000 --> 00:05:42,000 Negalima atsakyti su tuo pačiu sukamaisiais atsakymo. 101 00:05:42,000 --> 00:05:46,000 Šis procesas, šis cikliškumas bus galiausiai baigiasi. 102 00:05:46,000 --> 00:05:50,000 Jei aš prašau tavęs "surūšiuoti šių n elementų," ir jūs sakote: "Gerai, surūšiuoti šių n / 2" 103 00:05:50,000 --> 00:05:53,000 tada jūs sakote: "Gerai, surūšiuoti šių N / 4, n / 8, n/16," 104 00:05:53,000 --> 00:05:56,000 galų gale jums padalinti pakankamai didelis skaičius 105 00:05:56,000 --> 00:05:59,000 , kad jūs turite tik 1 elementas kairę, o tada galite pasakyti, 106 00:05:59,000 --> 00:06:02,000 "Čia, čia yra rūšiuotas vienas elementas." 107 00:06:02,000 --> 00:06:06,000 Tada šio algoritmo blizgesį čia kyla iš to, 108 00:06:06,000 --> 00:06:09,000 , kad, kai jūs turite iš šių atskirai surūšiuoti sąrašus, 109 00:06:09,000 --> 00:06:12,000 kurie visi yra 1, dydžio, kuris, atrodo, būti nenaudingas, 110 00:06:12,000 --> 00:06:15,000 kai pradėsite sujungiant juos ir juos sujungti 111 00:06:15,000 --> 00:06:19,000 jums sukurti galiausiai, kaip Rob padarė vaizdo įrašą pagaliau surūšiuoti sąrašą. 112 00:06:19,000 --> 00:06:22,000 >> Bet ši idėja toli už rūšiavimo. 113 00:06:22,000 --> 00:06:26,000 Yra ši idėja įtraukti į šią programą, žinomą kaip rekursijos, 114 00:06:26,000 --> 00:06:29,000 idėja, pagal kurią esate programa, 115 00:06:29,000 --> 00:06:32,000 ir išspręsti kai kurių problemų, Jūs vadinate save, 116 00:06:32,000 --> 00:06:36,000 arba įdėti programavimo kalbų, jums yra funkcija, 117 00:06:36,000 --> 00:06:39,000 ir siekiant išspręsti problemą, jums funkcija skambinti sau 118 00:06:39,000 --> 00:06:42,000 vėl ir vėl ir vėl, bet jūs funkcija 119 00:06:42,000 --> 00:06:44,000 negali paskambinti sau be galo daug kartų. 120 00:06:44,000 --> 00:06:47,000 Galų gale jūs turite į dugną, taip sakant, 121 00:06:47,000 --> 00:06:49,000 ir turėti tam tikrą kietai "įsiūtos bazę sąlyga, kad sako 122 00:06:49,000 --> 00:06:53,000 šiuo metu sustabdyti skambinate sau, kad visas procesas 123 00:06:53,000 --> 00:06:56,000 pagaliau realiai sustoti. 124 00:06:56,000 --> 00:06:58,000 Ką tai iš tikrųjų reiškia, į recurse? 125 00:06:58,000 --> 00:07:01,000 >> Pažiūrėkime, jei mes galime padaryti paprastą, trivialus pavyzdys, tarkim, 126 00:07:01,000 --> 00:07:03,000 3 žmonės su manimi čia ant scenos, jei kas nors yra patogus. 127 00:07:03,000 --> 00:07:06,000 1, ateiti iki, 2 ir 3. 128 00:07:06,000 --> 00:07:09,000 Jei jums 3 nori ateiti čia. 129 00:07:09,000 --> 00:07:12,000 Jei norite išsiskirti šalia manęs linija, tarkime, kad po ranka problema 130 00:07:12,000 --> 00:07:15,000 labai funkcionalumą lengvai suskaičiuoti žmonių, kurie čia. 131 00:07:15,000 --> 00:07:18,000 Bet atvirai, aš pavargau nuo visų šių skaičiavimo pavyzdžių. 132 00:07:18,000 --> 00:07:21,000 Ketina imtis šiek tiek laiko, 1, 2, ir taškas, taškas, taškas. 133 00:07:21,000 --> 00:07:23,000 Truks amžinai. 134 00:07:23,000 --> 00:07:25,000 Aš, o tiesiog kamuolio išmušimas iš rankų šią problemą apskritai su padėti-koks tavo vardas? 135 00:07:25,000 --> 00:07:27,000 Sara. >> Sara, viskas gerai. 136 00:07:27,000 --> 00:07:29,000 Kelly. >> Kelly ir? 137 00:07:29,000 --> 00:07:31,000 >> Willy. >> Willy Sara, Kelly ir Willy 138 00:07:31,000 --> 00:07:34,000 Dabar aš jau kažkas uždavė klausimą 139 00:07:34,000 --> 00:07:37,000 kiek žmonių yra šiame etape, ir aš neįsivaizduoju. 140 00:07:37,000 --> 00:07:40,000 Tai tikrai ilgas sąrašas, ir todėl vietoj aš ruošiuosi padaryti šį triuką. 141 00:07:40,000 --> 00:07:43,000 Aš ruošiuosi paprašyti asmenį šalia manęs padaryti didžiąją darbo dalį, 142 00:07:43,000 --> 00:07:46,000 ir kai ji daro didžiąją darbo dalį 143 00:07:46,000 --> 00:07:49,000 Aš ruošiuosi daryti mažesnį dirbti ir tiesiog pridėkite 1 144 00:07:49,000 --> 00:07:51,000 neatsižvelgiant į tai, kokia jos atsakymas yra, kad čia mes einame. 145 00:07:51,000 --> 00:07:54,000 Aš buvo paprašyta, kiek žmonių scenoje. 146 00:07:54,000 --> 00:07:57,000 Kiek žmonių ant scenos į kairę jus? 147 00:07:57,000 --> 00:08:00,000 Iš manęs kairėje? >> Gerai, bet ne apgauti. 148 00:08:00,000 --> 00:08:04,000 Tai gerai, tai teisinga, tačiau, jei norime tęsti šią logiką 149 00:08:04,000 --> 00:08:08,000 Tarkime, kad jūs taip pat norite kamuolio išmušimas iš rankų į šią problemą iš jūsų kairėje, 150 00:08:08,000 --> 00:08:11,000 taip, o ne atsakymą tiesiogiai eiti į priekį ir tiesiog praeiti spardytis. 151 00:08:11,000 --> 00:08:14,000 O, kiek žmonių mane kairėje? 152 00:08:14,000 --> 00:08:16,000 Kiek žmonių į kairę? 153 00:08:16,000 --> 00:08:18,000 1. 154 00:08:18,000 --> 00:08:27,000 [Juokas] 155 00:08:27,000 --> 00:08:30,000 Gerai, kad 0, todėl tai, ką dabar Willy padarė 156 00:08:30,000 --> 00:08:33,000 yra, jūs jau grąžino savo atsakymą šia kryptimi, sakydamas: 0. 157 00:08:33,000 --> 00:08:36,000 Dabar, ką jūs turėtumėte daryti? >> 1. 158 00:08:36,000 --> 00:08:39,000 Gerai, kad jūs esate 1, todėl jūs sakote, "Na, gerai, aš ruošiuosi pridėti 1 159 00:08:39,000 --> 00:08:41,000 kokia Willy skaičius buvo ", todėl 1 + 0. 160 00:08:41,000 --> 00:08:43,000 Jūs dabar 1, kad jūsų atsakymas į dešinę dabar 161 00:08:43,000 --> 00:08:45,000 1. >> Ir mano būtų 2. 162 00:08:45,000 --> 00:08:48,000 Gerai, kad jūs vartojate ankstesnį atsakymą iš 1, 163 00:08:48,000 --> 00:08:51,000 pridedant minimalų darbo kiekį, kurį norite padaryti, kuris yra +1. 164 00:08:51,000 --> 00:08:55,000 Dabar jūs turite 2, ir jūs tada ranka man, kuris vertė? 165 00:08:55,000 --> 00:08:57,000 3, aš turiu galvoje, atsiprašau, 2. 166 00:08:57,000 --> 00:08:59,000 Geras. 167 00:08:59,000 --> 00:09:02,000 >> Na, mes turėjome 0 į kairę. 168 00:09:02,000 --> 00:09:05,000 Tada mes turėjome 1, ir tada pridedame 2, 169 00:09:05,000 --> 00:09:07,000 ir dabar jūs pernešimo man skaičiumi 2, 170 00:09:07,000 --> 00:09:10,000 ir todėl aš noriu pasakyti, gerai, +1, 3. 171 00:09:10,000 --> 00:09:13,000 Yra tiesų 3 žmonės stovėjo šalia manęs šiame etape, 172 00:09:13,000 --> 00:09:16,000 todėl galėjo akivaizdžiai tai padarė labai tiesiškai 173 00:09:16,000 --> 00:09:19,000 labai akivaizdaus mados, bet ką mes tikrai? 174 00:09:19,000 --> 00:09:21,000 Mes paėmė 3 dydžio problemą iš pradžių. 175 00:09:21,000 --> 00:09:24,000 Mes tada sumušė jį žemyn į 2 dydžio problema, 176 00:09:24,000 --> 00:09:27,000 1 dydžio problema, ir galiausiai pagal bazinį scenarijų 177 00:09:27,000 --> 00:09:29,000 buvo tikrai, o, nėra nė vieno, 178 00:09:29,000 --> 00:09:33,000 tuo momentu Willy grįžo efektyviai kietai "įsiūtos atsakymas porą kartų, 179 00:09:33,000 --> 00:09:36,000 , o antrasis buvo tada burbuliukų, burbuliukais, burbuliukų iki, 180 00:09:36,000 --> 00:09:39,000 ir tada pridėti šį vieną papildomą 1 181 00:09:39,000 --> 00:09:41,000 mes įdiegėme šią pagrindinę idėją rekursijos. 182 00:09:41,000 --> 00:09:44,000 >> Dabar, šiuo atveju ji tikrai ne išspręsti problemą 183 00:09:44,000 --> 00:09:46,000 efektyviau nei mes matėme iki šiol. 184 00:09:46,000 --> 00:09:48,000 Bet pagalvokite apie algoritmus, mes padarėme scenoje iki šiol. 185 00:09:48,000 --> 00:09:51,000 Mes turėjome 8 popieriaus lapų lentos, 186 00:09:51,000 --> 00:09:55,000 vaizdo kai Sean ieškojau su skaičiumi 7, ir ką jis tikrai? 187 00:09:55,000 --> 00:09:58,000 Na, jis negali daryti bet kokią atskirtį, ir užkariauti. 188 00:09:58,000 --> 00:10:01,000 Jis nepadarė jokios rekursijos natūra. 189 00:10:01,000 --> 00:10:03,000 O jis tiesiog padarė tokią linijinę algoritmą. 190 00:10:03,000 --> 00:10:07,000 Bet kai mes surūšiuoti skaičių scenoje idėja gyventi praėjusią savaitę 191 00:10:07,000 --> 00:10:09,000 tada mes turėjome šį instinktas eiti į vidurį, 192 00:10:09,000 --> 00:10:13,000 tada mes turėjo mažesnį sąrašą 4 dydžio ar kitos 4 dydis sąrašas 193 00:10:13,000 --> 00:10:17,000 ir tada mes turėjome tą patį problema, todėl mes pakartoti, pakartoti, pakartoti. 194 00:10:17,000 --> 00:10:19,000 Kitaip tariant, mes recursed. 195 00:10:19,000 --> 00:10:24,000 Labai ačiū čia mūsų 3 savanorių įrodoma, kad pas mus rekursija. 196 00:10:24,000 --> 00:10:28,000 >> Pažiūrėkime, jei mes negalime padaryti tai dabar truputį daugiau betono, 197 00:10:28,000 --> 00:10:30,000 išspręsti problemą, kad vėl galėtume padaryti gana lengvai, 198 00:10:30,000 --> 00:10:34,000 tačiau mes jį naudoti kaip slenksčiu į įgyvendinant šią pagrindinę idėją. 199 00:10:34,000 --> 00:10:37,000 Jei aš noriu apskaičiuoti krūva skaičių sumavimo, 200 00:10:37,000 --> 00:10:39,000 Pavyzdžiui, jei jums perduoti skaičiumi 3, 201 00:10:39,000 --> 00:10:42,000 Aš noriu duoti jums 3 Sigma vertę, 202 00:10:42,000 --> 00:10:46,000 taip suma 3 + 2 + 1 + 0. 203 00:10:46,000 --> 00:10:48,000 Noriu gauti atsakymą 6, 204 00:10:48,000 --> 00:10:51,000 todėl mes įgyvendinti šį sigma funkciją, tai apibendrinimo funkciją 205 00:10:51,000 --> 00:10:54,000 , kad vėl, mano įvesties ir tada grąžina sumavimo 206 00:10:54,000 --> 00:10:57,000 šį numerį visą kelią žemyn iki 0. 207 00:10:57,000 --> 00:10:59,000 Galėtume tai padaryti gana paprastai, tiesa? 208 00:10:59,000 --> 00:11:01,000 Galėtume tai padaryti su kažkokio apsisukimo struktūrą, 209 00:11:01,000 --> 00:11:04,000 todėl leiskite man eiti į priekį ir gauti tai prasidėjo. 210 00:11:04,000 --> 00:11:07,000 >> Įtraukti stdio.h. 211 00:11:07,000 --> 00:11:09,000 Leiskite man save į Pagrindinis dirbti su čia. 212 00:11:09,000 --> 00:11:12,000 Išsaugokime tai kaip sigma.c. 213 00:11:12,000 --> 00:11:14,000 Tada aš ruošiuosi eiti į čia, ir aš ketina paskelbti int n, 214 00:11:14,000 --> 00:11:18,000 ir aš ruošiuosi daryti toliau, kai vartotojas nebendradarbiauja. 215 00:11:18,000 --> 00:11:22,000 , Kai vartotojas nėra davęs man teigiamą skaičių 216 00:11:22,000 --> 00:11:26,000 leiskite man eiti į priekį ir greitai juos n = GetInt 217 00:11:26,000 --> 00:11:28,000 ir leiskite jiems šiek tiek instrukcijas, ką daryti, 218 00:11:28,000 --> 00:11:33,000 taip printf ("teigiamas sveikasis skaičius"). 219 00:11:33,000 --> 00:11:39,000 Tiesiog kažkas gana paprasta, kaip tai, kad iki to laiko mes hit linija 14 220 00:11:39,000 --> 00:11:42,000 dabar mes turime teigiamą sveikąjį skaičių Numatoma n. 221 00:11:42,000 --> 00:11:44,000 >> Dabar galime kažką daryti su juo. 222 00:11:44,000 --> 00:11:50,000 Leiskite man eiti į priekį ir apskaičiuoti sumavimo, todėl int suma = sigma (n). 223 00:11:50,000 --> 00:11:54,000 Sigma yra tik išdava, todėl aš tik raštu mėgėjas. 224 00:11:54,000 --> 00:11:56,000 Mes tiesiog paskambinti tai sigma ten. 225 00:11:56,000 --> 00:11:58,000 , Kad suma, ir dabar aš ruošiuosi, jei norite spausdinti rezultatas, 226 00:11:58,000 --> 00:12:08,000 printf ("Suma yra% d \ n", suma). 227 00:12:08,000 --> 00:12:11,000 Ir tada aš grįžti 0 gera priemonė. 228 00:12:11,000 --> 00:12:15,000 Mes padarėme viską, kad ši programa reikalauja išskyrus įdomiausia dalis, 229 00:12:15,000 --> 00:12:18,000 kuris yra iš tikrųjų įgyvendinti Sigma funkciją. 230 00:12:18,000 --> 00:12:22,000 >> Leiskite man eiti čia į apačią, ir leiskite man deklaruoti funkcija sigma. 231 00:12:22,000 --> 00:12:26,000 Jis gavo imtis kintamąjį, tipo sveikasis skaičius, 232 00:12:26,000 --> 00:12:30,000 ir ką duomenų tipas, aš noriu grįžti matyt nuo sigma? 233 00:12:30,000 --> 00:12:34,000 Žiniasklaida, nes noriu, kad jis atitiktų mano lūkesčius 15 on-line. 234 00:12:34,000 --> 00:12:37,000 Čia leiskite man eiti į priekį ir įgyvendinti šią 235 00:12:37,000 --> 00:12:41,000 gana paprastas būdas. 236 00:12:41,000 --> 00:12:45,000 >> Eikime į priekį ir pasakyti int suma = 0, 237 00:12:45,000 --> 00:12:47,000 ir dabar aš ruošiuosi eiti šiek tiek už linijos čia 238 00:12:47,000 --> 00:12:50,000 kad ketina pasakyti kažką panašaus į tai, 239 00:12:50,000 --> 00:13:01,000 už (int i = 0; I <= skaičius; i + +) suma + = i. 240 00:13:01,000 --> 00:13:05,000 Ir tada aš ruošiuosi grįžti sumą. 241 00:13:05,000 --> 00:13:07,000 Aš galėjo įgyvendinti bet keliais būdais. 242 00:13:07,000 --> 00:13:09,000 Aš galėjo naudoti while cikle. 243 00:13:09,000 --> 00:13:11,000 Aš galėjo praleisti naudojant suma kintamasis, jei aš tikrai norėjo, 244 00:13:11,000 --> 00:13:15,000 bet trumpai tariant, mes tiesiog turime funkciją, kuri, jei aš ne goof pareiškia, suma yra 0. 245 00:13:15,000 --> 00:13:18,000 Tada jis kartoja nuo 0 aukštyn per skaičius, 246 00:13:18,000 --> 00:13:23,000 ir kiekvienos iteracijos jis priduria, kad dabartinę vertę suma ir tada grąžina sumą. 247 00:13:23,000 --> 00:13:25,000 >> Dabar jau šiek tiek optimizavimas čia. 248 00:13:25,000 --> 00:13:29,000 Tai turbūt švaistomi žingsnis, bet tegul bus taip. Tai gerai dabar. 249 00:13:29,000 --> 00:13:32,000 Mes bent kruopščiai ir ketina 0 visą kelią iki. 250 00:13:32,000 --> 00:13:34,000 Nėra labai sunku, ir gana paprasta, 251 00:13:34,000 --> 00:13:37,000 tačiau paaiškėja, kad su sigma funkcija turi tokią pačią galimybę 252 00:13:37,000 --> 00:13:39,000 kaip mes čia ant scenos. 253 00:13:39,000 --> 00:13:42,000 Ant scenos, mes tiesiog suskaičiuoti, kiek žmonių buvo šalia manęs, 254 00:13:42,000 --> 00:13:47,000 bet vietoj to, jei norime suskaičiuoti 3 + 2 + 1 255 00:13:47,000 --> 00:13:51,000 iki 0 galėtume panašiai kamuolio išmušimas iš rankų į funkciją 256 00:13:51,000 --> 00:13:55,000 , kad aš, o ne apibūdinti kaip rekursinis. 257 00:13:55,000 --> 00:13:57,000 Čia darykime greitai normalumas patikrinti ir įsitikinkite, kad Aš ne goof. 258 00:13:57,000 --> 00:14:00,000 >> Aš žinau, bent vienas dalykas šioje programoje, kad aš padaryti neteisingai. 259 00:14:00,000 --> 00:14:04,000 Kai aš paspauskite "Enter" I am going gauti bet kokį šaukiantį į mane? 260 00:14:04,000 --> 00:14:06,000 Ką aš ketinu būti rėkė apie? 261 00:14:06,000 --> 00:14:11,000 Taip, aš pamiršau prototipą, todėl aš naudoju funkcija vadinama sigma on line 15 262 00:14:11,000 --> 00:14:16,000 bet tai ne deklaruoti iki 22 eilutė, kad aš geriausiai aktyviai eiti čia 263 00:14:16,000 --> 00:14:22,000 ir paskelbti prototipą, ir pasakysiu int Sigma (int numeris), ir viskas. 264 00:14:22,000 --> 00:14:24,000 Ji įgyvendinama apačioje. 265 00:14:24,000 --> 00:14:27,000 >> Arba kitas būdas galėčiau išspręsti šią problemą, 266 00:14:27,000 --> 00:14:30,000 Aš negalėjau ten perkelti funkciją, kuri yra neblogai, 267 00:14:30,000 --> 00:14:32,000 bet bent jau kai jūsų programas pradėti gauti ilgai, tiesą sakant, 268 00:14:32,000 --> 00:14:35,000 Manau, kad yra šiek tiek visada pagrindinis viršuje vertė 269 00:14:35,000 --> 00:14:38,000 taip, kad jūs į skaitytuvą galima atidaryti failą ir tada iš karto pamatyti 270 00:14:38,000 --> 00:14:40,000 tai, ką programa daro be būtinybės ieškoti 271 00:14:40,000 --> 00:14:42,000 ieškome šios pagrindinės funkcijos. 272 00:14:42,000 --> 00:14:49,000 Leiskite eiti į mano terminalo lange čia, pabandykite sigma padaryti sigma, 273 00:14:49,000 --> 00:14:51,000 ir aš įsukus čia. 274 00:14:51,000 --> 00:14:55,000 Implicit funkcijos GetInt deklaracija Aš pamiršau padaryti tai, ko dar? 275 00:14:55,000 --> 00:14:57,000 [Nesigirdi studentas] 276 00:14:57,000 --> 00:15:00,000 Gerai, kad matyt dažnai pasitaikanti klaida, todėl galime tai padaryti čia, 277 00:15:00,000 --> 00:15:04,000 cs50.h, o dabar grįžkime mano terminalo lange. 278 00:15:04,000 --> 00:15:08,000 >> Aš išvalyti ekraną, ir aš iš naujo paleisti, kad sigma. 279 00:15:08,000 --> 00:15:11,000 Atrodo, kad turime surinkti. Leiskite man dabar paleisti sigma. 280 00:15:11,000 --> 00:15:15,000 Aš įveskite skaičiumi 3, ir aš gauti 6, todėl ne griežtas patikrinimas, 281 00:15:15,000 --> 00:15:18,000 bet bent jau atrodo, kad reikia dirbti, iš pirmo žvilgsnio, bet dabar galime nukopijuoti jį išskiria, 282 00:15:18,000 --> 00:15:21,000 ir tegul iš tikrųjų sverto rekursijos idėją, dar kartą, 283 00:15:21,000 --> 00:15:24,000 labai paprasta kontekste taip, kad po kelių savaičių 284 00:15:24,000 --> 00:15:27,000 kai mes pradedame tyrinėti mėgėjas duomenų struktūras kaip masyvai 285 00:15:27,000 --> 00:15:30,000 mes turime kitą įrankį priemonių rinkinio, su kuriuo būtų 286 00:15:30,000 --> 00:15:33,000 manipuliuoti šių duomenų struktūras, kaip matysime. 287 00:15:33,000 --> 00:15:36,000 Tai iteracinis metodas, kilpa pagrįstas požiūris. 288 00:15:36,000 --> 00:15:39,000 >> Vietoj dabar leiskite man tai padaryti. 289 00:15:39,000 --> 00:15:44,000 Leiskite man, o ne pasakyti, kad skaičiaus sumuojant 290 00:15:44,000 --> 00:15:48,000 iki 0 iš tiesų yra tas pats, kaip 291 00:15:48,000 --> 00:15:53,000 numeris + sigma (numeris - 1). 292 00:15:53,000 --> 00:15:57,000 Kitaip tariant, kaip ant scenos aš punted kiekvienai žmonių šalia manęs, 293 00:15:57,000 --> 00:16:00,000 ir jie savo ruožtu nuolat Punting, kol mes pagaliau dugną Willy, 294 00:16:00,000 --> 00:16:03,000 , kurie turėjo grįžti kietai "įsiūtos atsakymą kaip 0. 295 00:16:03,000 --> 00:16:07,000 Čia dabar mes panašiai Punting sigma 296 00:16:07,000 --> 00:16:10,000 tą pačią funkciją, kaip iš pradžių buvo vadinamas, bet čia pagrindinė įžvalga 297 00:16:10,000 --> 00:16:12,000 yra tai, kad mes ne skambinti sigma identiškai. 298 00:16:12,000 --> 00:16:14,000 Mes ne artimųjų n. 299 00:16:14,000 --> 00:16:17,000 Mes aiškiai einančios skaičius - 1, 300 00:16:17,000 --> 00:16:20,000 todėl šiek tiek mažesnis problema, šiek tiek mažesnis problema. 301 00:16:20,000 --> 00:16:23,000 >> Deja, tai ne visai sprendimas dar ir kol mes nustatyti 302 00:16:23,000 --> 00:16:26,000 kas gali būti taip akivaizdu, kai kurie iš jūsų šokinėja iš 303 00:16:26,000 --> 00:16:28,000 leiskite man eiti į priekį ir iš naujo padaryti. 304 00:16:28,000 --> 00:16:30,000 Atrodo, kad sudaryti gerai. 305 00:16:30,000 --> 00:16:32,000 Leiskite man pakartotas sigma su 6. 306 00:16:32,000 --> 00:16:37,000 Oi, leiskite man iš naujo paleisti Sigma su 6. 307 00:16:37,000 --> 00:16:42,000 Mes matėme prieš tai, nors ir netyčia paskutinį kartą taip pat. 308 00:16:42,000 --> 00:16:48,000 Kodėl aš gauti šį neaiškūs segmentavimo kaltės? Taip. 309 00:16:48,000 --> 00:16:50,000 [Nesigirdi studentas] 310 00:16:50,000 --> 00:16:53,000 Yra ne bazinį scenarijų, o tiksliau, kas tikriausiai atsitiko? 311 00:16:53,000 --> 00:16:58,000 Tai yra koks elgesys simptomas? 312 00:16:58,000 --> 00:17:00,000 Pasakyti, kad tai šiek tiek garsiau. 313 00:17:00,000 --> 00:17:02,000 [Nesigirdi studentas] 314 00:17:02,000 --> 00:17:05,000 Tai begalinis kilpos ir begalybės linijų problema 315 00:17:05,000 --> 00:17:08,000 , kai jie susiję su rekursija šiuo atveju, funkcija pasivadino, 316 00:17:08,000 --> 00:17:10,000 kas atsitinka kiekvieną kartą, kai vadiname funkciją? 317 00:17:10,000 --> 00:17:13,000 Na, manau, atgal, kaip mes išdėstyti kompiuterio atmintį. 318 00:17:13,000 --> 00:17:16,000 Mes sakėme, kad ten tai atminties riekė vadinamas kamino apačioje, 319 00:17:16,000 --> 00:17:19,000 ir kiekvieną kartą, kai skambinate funkcija šiek tiek daugiau atminties gauna įdėti 320 00:17:19,000 --> 00:17:24,000 šios vadinamosios kamino, kuriame šią funkciją vietos kintamieji arba parametrus, 321 00:17:24,000 --> 00:17:27,000 todėl, jei sigma ragina sigma skambučius sigma ragina sigma 322 00:17:27,000 --> 00:17:29,000  ragina sigma, kur tai istorijos pabaiga? 323 00:17:29,000 --> 00:17:31,000 >> Na, tai galiausiai viršijimus bendra suma 324 00:17:31,000 --> 00:17:33,000 atminties, kad turite prie kompiuterio. 325 00:17:33,000 --> 00:17:37,000 Jūs viršijo segmentą, kad jums turėtų likti, 326 00:17:37,000 --> 00:17:40,000 ir gausite šį segmentavimo kaltės, pagrindinių dempingo kaina, 327 00:17:40,000 --> 00:17:43,000 ir kokie pagrindiniai dempingo kaina reiškia, kad dabar aš turiu failą pavadinimu pagrindinė 328 00:17:43,000 --> 00:17:46,000 kuris yra failas, kuriame yra nulių ir 329 00:17:46,000 --> 00:17:49,000 kad iš tikrųjų ateityje bus diagnostiniu požiūriu. 330 00:17:49,000 --> 00:17:52,000 , Jei tai nėra akivaizdu jums, kur yra jūsų klaida yra 331 00:17:52,000 --> 00:17:54,000 jūs iš tikrųjų galite padaryti šiek tiek teismo ekspertizei, taip sakant, 332 00:17:54,000 --> 00:17:58,000 šio pagrindinio iškelties failą, kuris, vėlgi, yra tik visa krūva nulių ir 333 00:17:58,000 --> 00:18:02,000 kad iš esmės atstovauja savo programos atminties būklę 334 00:18:02,000 --> 00:18:05,000 tada, kai jis sudužo šiuo būdu. 335 00:18:05,000 --> 00:18:11,000 >> Sprendimas čia yra, kad mes negalime aklai grįžti sigma, 336 00:18:11,000 --> 00:18:14,000 numeris + sigma šiek tiek mažesnis problemos. 337 00:18:14,000 --> 00:18:16,000 Mes turime turėti kažkokį bazine čia, 338 00:18:16,000 --> 00:18:19,000 ir kas turėtų bazinį scenarijų, tikriausiai? 339 00:18:19,000 --> 00:18:22,000 [Nesigirdi studentas] 340 00:18:22,000 --> 00:18:25,000 Gerai, kol skaičius teigiamas, mes iš tiesų turėtų grįžti, 341 00:18:25,000 --> 00:18:29,000 Kitaip tariant, jeigu, sakykime, <=, 0 342 00:18:29,000 --> 00:18:32,000 žinote, ką aš eisiu į priekį ir grįžti 0, 343 00:18:32,000 --> 00:18:36,000 panašiai kaip Willy padarė, ir dar, aš ruošiuosi eiti į priekį 344 00:18:36,000 --> 00:18:41,000 ir grįžti, kad tai ne tai, kad daug trumpesnis 345 00:18:41,000 --> 00:18:44,000 nei Pakartotinai versija, kad mes plakta pirmą kartą naudojant už kilpos, 346 00:18:44,000 --> 00:18:48,000 , bet pastebėsite, kad ten tai elegancija rūšiuoti. 347 00:18:48,000 --> 00:18:51,000 , O ne grąžinant tam tikrą numerį ir atlikti visa tai matematikos 348 00:18:51,000 --> 00:18:54,000 ir pridėti dalykų su vietos kintamieji 349 00:18:54,000 --> 00:18:57,000 Vietoj to, jūs sakydamas: "Gerai, jei tai yra super lengva problema, 350 00:18:57,000 --> 00:19:01,000 kaip skaičius yra <0, leiskite man nedelsiant grąžinti 0 ". 351 00:19:01,000 --> 00:19:03,000 >> Mes neketiname vargintis patvirtinamuosius neigiamus skaičius, 352 00:19:03,000 --> 00:19:05,000 todėl aš į kietąjį kodą "0" vertės. 353 00:19:05,000 --> 00:19:08,000 Bet kitaip, kad įgyvendintų šią sumuojant idėja 354 00:19:08,000 --> 00:19:11,000 visų šių skaičių kartu galite efektyviai imtis mažų įkandimo 355 00:19:11,000 --> 00:19:14,000 iš problemos, panašiai kaip mes padarėme čia ant scenos, 356 00:19:14,000 --> 00:19:18,000 tada kamuolio išmušimas iš rankų problemos poilsio kitą asmenį, 357 00:19:18,000 --> 00:19:20,000 tačiau šiuo atveju kitas asmuo yra jūs pats. 358 00:19:20,000 --> 00:19:22,000 Tai vienodai pavadintas funkcija. 359 00:19:22,000 --> 00:19:25,000 Tiesiog praeiti mažesni ir mažesni ir mažesni problema kiekvieną kartą, 360 00:19:25,000 --> 00:19:28,000 ir nors mes turime ne gana formalūs kodo dalykų čia 361 00:19:28,000 --> 00:19:33,000 būtent tai ir vyksta 0 telefonų knygoje savaitę. 362 00:19:33,000 --> 00:19:36,000 Būtent tai vyksta pastarąsias savaites su Sean 363 00:19:36,000 --> 00:19:39,000 mūsų demonstracijas numerių paieškos. 364 00:19:39,000 --> 00:19:42,000 Tai problema ir dalijant jį vėl ir vėl. 365 00:19:42,000 --> 00:19:44,000 >> Kitaip tariant, dabar yra būdas versti 366 00:19:44,000 --> 00:19:47,000 tai realaus pasaulio konstruktas, tai aukštesnio lygio konstruktas 367 00:19:47,000 --> 00:19:51,000 iš skaldyk ir valdyk ir darai kažką, vėl ir vėl 368 00:19:51,000 --> 00:19:56,000 kodu, todėl tai yra kažkas, ką mes pamatysime laikui bėgant. 369 00:19:56,000 --> 00:20:00,000 Dabar, kaip panaikinti, jei esate naujas rekursijos turėtumėte bent suprasti dabar 370 00:20:00,000 --> 00:20:02,000 kodėl tai yra juokinga. 371 00:20:02,000 --> 00:20:05,000 Aš ruošiuosi eiti į google.com, 372 00:20:05,000 --> 00:20:17,000 ir aš einu ieškoti keletą patarimų ir gudrybės, rekursijos, įveskite. 373 00:20:17,000 --> 00:20:21,000 Pasakykite asmenį šalia savęs, jei jie ne iš juoko, tik dabar. 374 00:20:21,000 --> 00:20:23,000 Ar Jūs turėjote galvoje rekursija? 375 00:20:23,000 --> 00:20:25,000 Ar Jūs turėjote galvoje Ak, čia mes einame. 376 00:20:25,000 --> 00:20:28,000 Gerai, kad dabar visiems poilsio. 377 00:20:28,000 --> 00:20:30,000 Šiek tiek margutis įterptųjų kažkur ten "Google". 378 00:20:30,000 --> 00:20:33,000 Kaip panaikinti, viena iš šių nuorodų, mes įdėti kurso tinklalapyje 379 00:20:33,000 --> 00:20:36,000 nes šiandien yra tik tai įvairių rūšiavimo algoritmų tinklelis, 380 00:20:36,000 --> 00:20:39,000 kai kurie iš jų mes pažvelgė į praeitą savaitę, bet kas malonu apie šį vizualizacija 381 00:20:39,000 --> 00:20:43,000 kaip jums pabandyti wrap savo mintis apie įvairių dalykų, susijusių su algoritmų 382 00:20:43,000 --> 00:20:46,000 žinote, kad galite labai lengvai dabar pradėti su skirtingų rūšių sąnaudų. 383 00:20:46,000 --> 00:20:50,000 Įėjimai visi pasikeitė, žaliavos daugiausia rūšiuojamos, žaliavos atsitiktinis ir pan. 384 00:20:50,000 --> 00:20:53,000 Kaip jums pabandyti vėl, atskirti šiuos dalykus savo proto 385 00:20:53,000 --> 00:20:57,000 suprasti, kad tai kurso paskaitas puslapyje tinklalapyje URL 386 00:20:57,000 --> 00:21:00,000 gali padėti jums per kai kurias iš šių priežastis. 387 00:21:00,000 --> 00:21:05,000 >> Šiandien mes pagaliau išspręsti šią problemą, o atgal, 388 00:21:05,000 --> 00:21:08,000 kuris buvo, kad ši apsikeitimo funkcija tiesiog neveikia, 389 00:21:08,000 --> 00:21:12,000 ir kokia buvo pagrindinė problema, su šia funkcija apsikeitimo sandorio, 390 00:21:12,000 --> 00:21:15,000 kurios tikslas buvo, vėlgi, čia ir čia keistis vertę 391 00:21:15,000 --> 00:21:17,000 taip, kad tai atsitiks? 392 00:21:17,000 --> 00:21:20,000 Tai nebuvo faktiškai dirba. Kodėl? 393 00:21:20,000 --> 00:21:22,000 Taip. 394 00:21:22,000 --> 00:21:28,000 [Nesigirdi studentas] 395 00:21:28,000 --> 00:21:31,000 Tiksliai, Šio bugginess paaiškinimas 396 00:21:31,000 --> 00:21:34,000 tiesiog buvo, nes kai skambinate funkcijas C 397 00:21:34,000 --> 00:21:38,000 ir tas funkcijas imtis argumentus, kaip a ir b čia, 398 00:21:38,000 --> 00:21:42,000 jūs einančios kopijų kokia vertė jūs suteikiate tą funkciją. 399 00:21:42,000 --> 00:21:46,000 Jūs nesate pradines reikšmes save, 400 00:21:46,000 --> 00:21:49,000 taip, mes matėme tai į buggyc 401 00:21:49,000 --> 00:21:52,000 buggy3.c, kuri atrodė šiek tiek kažką panašaus į tai. 402 00:21:52,000 --> 00:21:57,000 >> Prisiminkite, kad mes turėjome inicializuoti iki 1 ir 2, x ir y atitinkamai. 403 00:21:57,000 --> 00:21:59,000 Mes tada atspausdinti ką jie. 404 00:21:59,000 --> 00:22:03,000 Aš tada pareiškė, kad aš buvau Swapping telefonu atminties x, y. 405 00:22:03,000 --> 00:22:06,000 Bet problema buvo ta, kad Swapping dirbo, 406 00:22:06,000 --> 00:22:10,000 bet tik apsikeitimo taikymo sritį veikti pati. 407 00:22:10,000 --> 00:22:13,000 Kuo greičiau mes nukentėjo 40 eilutėje šioms pavertė vertės 408 00:22:13,000 --> 00:22:16,000 buvo išmesti, ir todėl nieko 409 00:22:16,000 --> 00:22:21,000 pirminę funkciją pagrindinis buvo iš tikrųjų pasikeitė ne visi, 410 00:22:21,000 --> 00:22:26,000 todėl, jei manote, kad atgal tada kaip tai atrodo mūsų atmintyje 411 00:22:26,000 --> 00:22:29,000 jei tai kairėje pusėje valdybos atstovauja- 412 00:22:29,000 --> 00:22:33,000 ir aš darysiu viską visiems pamatyti, jei tai kairėje pusėje valdybos 413 00:22:33,000 --> 00:22:37,000 atstovauja, tarkim, jūsų RAM, ir kamino augs iki tokiu būdu, 414 00:22:37,000 --> 00:22:43,000 ir mes vadiname, kaip pagrindinė funkcija ir pagrindinis yra 2 vietos kintamieji X ir Y, 415 00:22:43,000 --> 00:22:48,000 galime apibūdinti kaip x čia, ir tegul čia aprašyti tai kaip y, 416 00:22:48,000 --> 00:22:55,000 ir tegul reikšmes 1 ir 2, todėl čia yra pagrindinis, 417 00:22:55,000 --> 00:22:58,000 ir kai pagrindinis ragina apsikeitimo funkcija operacinė sistema 418 00:22:58,000 --> 00:23:02,000 dėl apsikeitimo sandorio, suteikia funkciją savo atminties swath kamino, 419 00:23:02,000 --> 00:23:04,000 savo rėmas kamino, taip sakant. 420 00:23:04,000 --> 00:23:08,000 Taip pat skiria 32 bitų šių int. 421 00:23:08,000 --> 00:23:11,000 Taip atsitinka, kad jiems skambinti a ir b, bet tai visiškai savavališkai. 422 00:23:11,000 --> 00:23:13,000 Ji galėjo pavadino juos, ką nori, bet kas atsitinka, kai pagrindinis 423 00:23:13,000 --> 00:23:19,000 ragina apsikeitimo jis užima šio straipsnio 1, kelia kopiją ten, kelia kopiją. 424 00:23:19,000 --> 00:23:23,000 >> Yra 1 kita apsikeitimo vietos kintamąjį, nors, vadinamas ką? >> Tmp. 425 00:23:23,000 --> 00:23:27,000 Tmp, todėl leiskite sau čia dar 32 bitų, 426 00:23:27,000 --> 00:23:29,000 Ką aš padariau šią funkciją? 427 00:23:29,000 --> 00:23:34,000 Aš pasakiau, int tmp gauna, todėl yra 1, todėl aš padariau tai, kai mes paskutinį kartą grojo su šiuo pavyzdžiu. 428 00:23:34,000 --> 00:23:39,000 Tada gauna b, kad b yra 2, tad dabar tai tampa 2, 429 00:23:39,000 --> 00:23:42,000 ir dabar b gauna temp, todėl temperatūra yra 1, 430 00:23:42,000 --> 00:23:44,000 todėl dabar b tampa šios. 431 00:23:44,000 --> 00:23:46,000 Tai puiku. Jis dirbo. 432 00:23:46,000 --> 00:23:49,000 Bet tada kuo greičiau funkcija grąžina 433 00:23:49,000 --> 00:23:52,000 realiai dingsta taip, kad ji gali būti pakartotinai naudojamas SWAP atmintis 434 00:23:52,000 --> 00:23:58,000 kitu funkcija ateityje, ir pagrindinis yra akivaizdžiai visiškai nepakitęs. 435 00:23:58,000 --> 00:24:00,000 Mums reikia iš esmės spręsti šią problemą, 436 00:24:00,000 --> 00:24:03,000 ir šiandien mes pagaliau taip, kaip tai padaryti, pagal kurią 437 00:24:03,000 --> 00:24:06,000 galime pristatyti kažką vadinama rodyklė. 438 00:24:06,000 --> 00:24:09,000 Pasirodo, kad mes galime išspręsti šią problemą 439 00:24:09,000 --> 00:24:12,000 ne artimųjų kopijose x ir y 440 00:24:12,000 --> 00:24:18,000 tačiau užuot išlaikius kokiais jūs manote, apsikeitimo funkcija? 441 00:24:18,000 --> 00:24:20,000 Taip, ką apie adreso? 442 00:24:20,000 --> 00:24:22,000 Mes ne iš tikrųjų kalbėjo apie adresus daug detalių, 443 00:24:22,000 --> 00:24:25,000 bet jei tai lenta atstovauja savo kompiuterio atminties 444 00:24:25,000 --> 00:24:28,000 mes tikrai galėtų pradėti numeravimo baitų mano RAM 445 00:24:28,000 --> 00:24:31,000 ir pasakyti, kad tai baitų # 1, tai yra baitas # 2, # 3 baitų, 446 00:24:31,000 --> 00:24:35,000 baitų # 4, baitų # ... 2 mlrd., jei aš turiu 2 GB RAM, 447 00:24:35,000 --> 00:24:38,000 , kad galėtume tikrai sugalvoti su kai kuriais savavališkai numeravimo schemą 448 00:24:38,000 --> 00:24:41,000 visų atskirų baitų mano kompiuterio atmintyje. 449 00:24:41,000 --> 00:24:43,000 >> Ką daryti, jei vietoj, kai aš vadinu apsikeitimo 450 00:24:43,000 --> 00:24:47,000 o ne perduoti į x ir y kopijų 451 00:24:47,000 --> 00:24:51,000 kodėl ne aš, o ne perduoti x adresą čia, 452 00:24:51,000 --> 00:24:55,000 y adresas čia, iš esmės pašto adresas 453 00:24:55,000 --> 00:24:59,000 x ir y, nes tada apsikeitimo, jei jis informaciją 454 00:24:59,000 --> 00:25:01,000 x ir y atminties adresą, 455 00:25:01,000 --> 00:25:04,000 tada apsikeitimo, jei mes išmokome jį šiek tiek, 456 00:25:04,000 --> 00:25:07,000 jis potencialiai gali vairuoti šiuo adresu, taip sakant, 457 00:25:07,000 --> 00:25:11,000 x, ir pakeisti ten, tada vairuoti y adresą, 458 00:25:11,000 --> 00:25:16,000 pakeisti numerį, net ne iš tikrųjų gauti kopijas šių verčių pats, 459 00:25:16,000 --> 00:25:19,000 todėl, nors mes kalbėjome apie tai, kaip pagrindinis atmintis 460 00:25:19,000 --> 00:25:23,000 ir tai, kaip Būdamas SWAP atminties galinga ir pavojinga dalis C 461 00:25:23,000 --> 00:25:28,000 yra tai, kad kiekviena funkcija gali paliesti bet kurioje kompiuterio atmintį, 462 00:25:28,000 --> 00:25:32,000 ir tai yra galingas, kad jūs galite padaryti labai išgalvotas dalykų su kompiuterių programų C. 463 00:25:32,000 --> 00:25:36,000 Tai pavojinga, nes jūs taip pat galite labai lengvai susukti. 464 00:25:36,000 --> 00:25:39,000 Iš tiesų, vienas iš labiausiai paplitusių būdų programas šių dienų turi būti išnaudotas 465 00:25:39,000 --> 00:25:42,000 vis dar yra programuotojas negali suprasti 466 00:25:42,000 --> 00:25:45,000 , kad jis arba ji yra, leidžiančios duomenų 467 00:25:45,000 --> 00:25:49,000 turi būti parašyta į atminties vietą, kuri nebuvo numatyta. 468 00:25:49,000 --> 00:25:51,000 >> Pavyzdžiui, jis ar ji pareiškia masyvas dydis 10 469 00:25:51,000 --> 00:25:56,000 bet tada netyčia bando įdėti 11 baitų į tą atminties masyvo, 470 00:25:56,000 --> 00:25:59,000 ir pradėdami neliesti atminties dalis, nebegalioja. 471 00:25:59,000 --> 00:26:02,000 Tiesiog konteksto tai, kai kurie iš jūsų gali žinoti, kad 472 00:26:02,000 --> 00:26:06,000 programinė įranga dažnai paragina jus serijinius numerius ar registracijos raktus, 473 00:26:06,000 --> 00:26:08,000 Photoshop, Word ir panašiose programose. 474 00:26:08,000 --> 00:26:12,000 Egzistuoja įtrūkimų, kaip kai kurie iš jūsų žinote, internete, kur jūs galite paleisti maža programa, 475 00:26:12,000 --> 00:26:14,000 ir voila, ne daugiau prašymas, serijos numeris. 476 00:26:14,000 --> 00:26:16,000 Kaip tai veikia? 477 00:26:16,000 --> 00:26:21,000 Daugeliu atvejų, šie dalykai yra tiesiog rasti kompiuterių 478 00:26:21,000 --> 00:26:24,000 kompiuterių faktinių nulių ir teksto segmentai 479 00:26:24,000 --> 00:26:28,000 kur yra ta, kad, jei serijos numeris prašoma funkcija, 480 00:26:28,000 --> 00:26:31,000 ir perrašyti vietos, arba kai programa veikia 481 00:26:31,000 --> 00:26:33,000 galite išsiaiškinti, kur svarbiausia yra faktinis saugomas 482 00:26:33,000 --> 00:26:37,000 naudojant kažką vadinama Debugger, ir jūs galite nulaužti programinę įrangą, kad taip. 483 00:26:37,000 --> 00:26:40,000 Tai ne pasakyti, kad tai yra mūsų tikslas, į kitą porą dienų, 484 00:26:40,000 --> 00:26:42,000 Tačiau ji turi labai realių pasekmių. 485 00:26:42,000 --> 00:26:45,000 Kad viena būna, kad apima programinės įrangos vagystės, 486 00:26:45,000 --> 00:26:47,000 tačiau taip pat kompromisą ištisų mašinų. 487 00:26:47,000 --> 00:26:50,000 >> Iš tiesų, kai svetainės šių dienų yra išnaudojami 488 00:26:50,000 --> 00:26:53,000 ir pavojus ir duomenų nutekėjo ir slaptažodžiai yra pavogti 489 00:26:53,000 --> 00:26:58,000 tai labai dažnai yra susijęs su blogo valdymo atmintyje, 490 00:26:58,000 --> 00:27:01,000 arba, duomenų bazių, nesugebėjimas numatyti 491 00:27:01,000 --> 00:27:03,000 rungimosi įėjimas, todėl daugiau apie tai ateinančias savaites, 492 00:27:03,000 --> 00:27:07,000 bet dabar tiesiog nukniaukti peržiūrėti žalos rūšiuoti, kad jūs galite padaryti 493 00:27:07,000 --> 00:27:11,000 ne visai suprasti, kaip viskas veikia po gaubtu. 494 00:27:11,000 --> 00:27:14,000 Eikime apie suprasti, kodėl tai neveikia 495 00:27:14,000 --> 00:27:17,000 priemonė, kuri bus vis daugiau ir daugiau naudingos 496 00:27:17,000 --> 00:27:19,000 mūsų programos gauti daugiau sudėtingas. 497 00:27:19,000 --> 00:27:21,000 Iki šiol, kai jūs turėjo savo programą klaidą 498 00:27:21,000 --> 00:27:23,000 kaip buvote nuėję apie derinimo? 499 00:27:23,000 --> 00:27:25,000 Ką savo technikas buvo iki šiol, ar mokė savo TF 500 00:27:25,000 --> 00:27:27,000 arba tiesiog savamokslis? 501 00:27:27,000 --> 00:27:29,000 [Studentų] printf. 502 00:27:29,000 --> 00:27:31,000 Printf, todėl printf tikriausiai tavo draugas, nes jei norite pamatyti 503 00:27:31,000 --> 00:27:33,000 tai, kas vyksta viduje savo programą 504 00:27:33,000 --> 00:27:36,000 jūs tiesiog įdėti printf čia printf čia printf čia. 505 00:27:36,000 --> 00:27:38,000 Tada paleisti jį, ir gausite visa krūva stuff ekrane 506 00:27:38,000 --> 00:27:43,000 , kad galite naudoti tada padaryti išvadą, kas iš tikrųjų vyksta ne į savo programą. 507 00:27:43,000 --> 00:27:45,000 >> Printf linkęs būti labai galingas dalykas, 508 00:27:45,000 --> 00:27:47,000 bet tai labai neautomatinis procesas. 509 00:27:47,000 --> 00:27:49,000 Jūs turite įdėti printf čia, printf čia 510 00:27:49,000 --> 00:27:51,000 ir jei jūs įtraukėte viduje kilpa galite gauti 100 eilučių 511 00:27:51,000 --> 00:27:53,000 produkcijos, kad tada jūs turite atsijoti per. 512 00:27:53,000 --> 00:27:58,000 Tai nėra patogus naudoti ar interaktyvaus mechanizmas dėl derinimo programas, 513 00:27:58,000 --> 00:28:00,000 bet, laimei, egzistuoja alternatyvų. 514 00:28:00,000 --> 00:28:03,000 Yra programa, pavyzdžiui, vadinamas GDB, GNU Debugger, 515 00:28:03,000 --> 00:28:06,000 , kuris yra šiek tiek slaptas, kaip jūs jį naudoti. 516 00:28:06,000 --> 00:28:08,000 Tai šiek tiek sudėtinga, tačiau, atvirai kalbant, 517 00:28:08,000 --> 00:28:11,000 tai yra vienas iš tų dalykų, kur, jei jūs įtraukėte šią savaitę ir kitą 518 00:28:11,000 --> 00:28:14,000 papildomą valandą, suprasti kažką panašaus GDB 519 00:28:14,000 --> 00:28:18,000 ji bus jums sutaupyti tikriausiai dešimtis valandų per ilgą laiką, 520 00:28:18,000 --> 00:28:21,000 su tuo, leiskite man duoti jums, kaip šis dalykas veikia erzintoją. 521 00:28:21,000 --> 00:28:23,000 >> Aš mano terminalo lange. 522 00:28:23,000 --> 00:28:26,000 Leiskite man eiti į priekį, ir kaupti šią programą, buggy3. 523 00:28:26,000 --> 00:28:28,000 Jis jau iki šiol. 524 00:28:28,000 --> 00:28:31,000 Leiskite man ją paleisti tik, kaip mes padarėme, o atgal, ir iš tiesų, jis neveikia. 525 00:28:31,000 --> 00:28:34,000 Bet kodėl taip yra? Gal aš įsukus apsikeitimo funkcija. 526 00:28:34,000 --> 00:28:37,000 Gal tai a ir b. Aš ne visai perkelti juos aplink teisingai. 527 00:28:37,000 --> 00:28:39,000 Leiskite man eiti į priekį ir tai padaryti. 528 00:28:39,000 --> 00:28:43,000 , O ne tiesiog paleisti buggy3, o ne leiskite man paleisti šią programą GDB, 529 00:28:43,000 --> 00:28:48,000 ir aš norėčiau pasakyti jį paleisti buggy3, 530 00:28:48,000 --> 00:28:52,000 ir aš ruošiuosi įtraukti komandų eilutės argumentą, TUI, 531 00:28:52,000 --> 00:28:55,000 ir mes įdėti šią nuorodą į ateities problemų spec priminti. 532 00:28:55,000 --> 00:28:57,000 O dabar tai juoda ir balta sąsaja popped up, kad vėl, 533 00:28:57,000 --> 00:28:59,000 yra šiek tiek didele per pirmąjį, nes ten visa tai 534 00:28:59,000 --> 00:29:02,000 Garantijos informacija žemyn čia, bet bent jau kažkas susipažinę. 535 00:29:02,000 --> 00:29:04,000 Lango viršuje yra mano tikrieji kodas 536 00:29:04,000 --> 00:29:08,000 ir jei aš slinkite aukštyn čia leiskite man pereikite prie mano byla pačiame viršuje, 537 00:29:08,000 --> 00:29:11,000 ir iš tiesų, ten buggy3.c, ir pranešimas šio lango apačioje 538 00:29:11,000 --> 00:29:13,000 Turiu šį GDB eilutę. 539 00:29:13,000 --> 00:29:16,000 >> Tai ne tas pats kaip mano normalus John Harvardo eilutę. 540 00:29:16,000 --> 00:29:19,000 Tai greitai, kad ketina leisti man kontroliuoti GDB. 541 00:29:19,000 --> 00:29:21,000 GDB Debugger. 542 00:29:21,000 --> 00:29:24,000 Debugger yra programa, kuri leidžia jums vaikščioti per 543 00:29:24,000 --> 00:29:27,000 vykdyti savo programos linijos eilutė po eilutės, 544 00:29:27,000 --> 00:29:30,000 pakeliui, daro viską, ką nori su programa, 545 00:29:30,000 --> 00:29:33,000 net skambinti funkcijas, ar ieškote, kas svarbiausia, 546 00:29:33,000 --> 00:29:35,000 Įvairūs kintamojo vertybių. 547 00:29:35,000 --> 00:29:37,000 Eikime į priekį ir tai padaryti. 548 00:29:37,000 --> 00:29:40,000 Aš ruošiuosi eiti į priekį ir įveskite run GDB Operatyvaus, 549 00:29:40,000 --> 00:29:43,000 todėl pastebėsite įvedėte paleisti iš ekrano apačioje, kairėje, 550 00:29:43,000 --> 00:29:45,000 ir aš paspauskite "Enter", ir ką, kad padaryti? 551 00:29:45,000 --> 00:29:50,000 Jis tiesiog bėgo savo programą, bet aš ne iš tikrųjų matyti daug eiti čia 552 00:29:50,000 --> 00:29:55,000 , nes aš ne iš tikrųjų sakė Debugger 553 00:29:55,000 --> 00:29:57,000 pristabdyti tam tikru laiko momentu. 554 00:29:57,000 --> 00:29:59,000 Tiesiog rašyti paleisti veikia programą. 555 00:29:59,000 --> 00:30:01,000 Aš ne iš tikrųjų matyti nieko. Aš negaliu manipuliuoti. 556 00:30:01,000 --> 00:30:03,000 >> Vietoj to, leiskite man tai padaryti. 557 00:30:03,000 --> 00:30:08,000 Šiuo GDB eilutę, leiskite man, o ne įveskite pertraukos, įveskite. 558 00:30:08,000 --> 00:30:10,000 , Kad ne tai, ką aš reiškė tipo. 559 00:30:10,000 --> 00:30:13,000 Tegul vietoj įveskite pertrauka pagrindinis. 560 00:30:13,000 --> 00:30:15,000 Kitaip tariant, aš noriu nustatyti kažką vadinama atskaitos tašką, 561 00:30:15,000 --> 00:30:18,000 taikliai pavadintas, nes jis bus pertrauka ar pristabdyti 562 00:30:18,000 --> 00:30:21,000 vykdyti savo programą toje konkrečioje vietoje. 563 00:30:21,000 --> 00:30:23,000 Pagrindinis yra mano funkcijos pavadinimas. 564 00:30:23,000 --> 00:30:25,000 Atkreipkite dėmesį, kad GDB yra gana protingas. 565 00:30:25,000 --> 00:30:28,000 Jis suprato, kad pagrindinis atsitinka pradėti maždaug 18 eilutėje 566 00:30:28,000 --> 00:30:32,000 iš buggy3.c, o tada pastebėsite čia, viršuje kairėje 567 00:30:32,000 --> 00:30:34,000 b + yra šalia eilutė 18. 568 00:30:34,000 --> 00:30:38,000 Tai primena man, kad aš nustatyti atskaitos tašką at line 18. 569 00:30:38,000 --> 00:30:42,000 Šį kartą, kai aš tipo paleisti, aš paleisti savo programą 570 00:30:42,000 --> 00:30:45,000 iki tol, kol ji hitai, kad atskaitos tašką, 571 00:30:45,000 --> 00:30:48,000 kad programa bus pristabdyti man at line 18. 572 00:30:48,000 --> 00:30:50,000 Here we go, paleisti. 573 00:30:50,000 --> 00:30:53,000 Niekas, atrodo, atsitiko, bet pranešimas apačioje kairėje 574 00:30:53,000 --> 00:30:58,000 pradedant programa, buggy3 ne buggy3.c linijos 18, pagrindinis 1 atskaitos tašką. 575 00:30:58,000 --> 00:31:00,000 Ką aš galiu padaryti dabar? 576 00:31:00,000 --> 00:31:03,000 >> Atkreipkite dėmesį, aš galiu pradėti rašyti dalykų, pavyzdžiui, spausdinimo, 577 00:31:03,000 --> 00:31:08,000 ne printf, spausdinti X, o dabar tai keista. 578 00:31:08,000 --> 00:31:11,000 $ 1 yra tik smalsumas, kaip matysime 579 00:31:11,000 --> 00:31:14,000 kiekvieną kartą, kai ką nors atspausdinti, gausite naują $ value. 580 00:31:14,000 --> 00:31:18,000 Štai, kad būtų galima grąžinti į ankstesnes vertybes tik tuo atveju, 581 00:31:18,000 --> 00:31:21,000 bet dabar tai, ką spausdinti sako man, kad x vertė Šiuo istorija 582 00:31:21,000 --> 00:31:26,000 matyt 134.514.032. 583 00:31:26,000 --> 00:31:29,000 Ką? Kur, kad net atsirado? 584 00:31:29,000 --> 00:31:31,000 [Nesigirdi studentas] 585 00:31:31,000 --> 00:31:34,000 Iš tiesų, tai, ką mes vadiname šiukšlių vertę, o mes ne kalbėjo apie tai dar, 586 00:31:34,000 --> 00:31:37,000 bet priežastis, kad jums inicijuoti kintamieji 587 00:31:37,000 --> 00:31:40,000 yra akivaizdu, kad jie turi tam tikrą vertę, kad jūs norite, kad jie turi. 588 00:31:40,000 --> 00:31:44,000 Bet laimikis priminti, kad galite paskelbti kintamieji 589 00:31:44,000 --> 00:31:46,000 kaip aš prieš akimirką mano sigma pavyzdžiu 590 00:31:46,000 --> 00:31:48,000 be faktiškai suteikti jiems vertę. 591 00:31:48,000 --> 00:31:50,000 Prisiminkite, ką aš padariau, čia sigma. 592 00:31:50,000 --> 00:31:52,000 Aš paskelbiau N, tačiau, kas vertė aš suprato, kad tai? 593 00:31:52,000 --> 00:31:56,000 Nėra, nes žinojau, kad per ateinančius keletą eilučių 594 00:31:56,000 --> 00:31:59,000 GetInt rūpintis problema reikšmę viduje n. 595 00:31:59,000 --> 00:32:02,000 >> Tačiau šiuo 11 linijos istorija 596 00:32:02,000 --> 00:32:05,000 ir linijos 12 ir 13 linijos ir linijos 14 597 00:32:05,000 --> 00:32:08,000 per šių kelių eilučių, kas yra n vertė? 598 00:32:08,000 --> 00:32:10,000 C jūs tiesiog nežinau. 599 00:32:10,000 --> 00:32:14,000 Tai paprastai kai šiukšlių vertė, kai visiškai atsitiktinių skaičių 600 00:32:14,000 --> 00:32:17,000 , liko iš esmės kai kurios ankstesnės funkcijos 601 00:32:17,000 --> 00:32:21,000 buvo paleista, taip, kaip jūsų programa veikia 602 00:32:21,000 --> 00:32:24,000 priminti, kad funkcija pasireiškia funkcija, funkcija, funkcijos. 603 00:32:24,000 --> 00:32:27,000 Visi šie rėmai gauti įdėti atminties, ir tada šios funkcijos grąžina, 604 00:32:27,000 --> 00:32:31,000 ir kaip aš pasiūliau, su trintuku, jų atmintis galiausiai dar kartą panaudoti. 605 00:32:31,000 --> 00:32:37,000 Na, tai tiesiog taip atsitinka, kad šis kintamasis X šioje programoje 606 00:32:37,000 --> 00:32:41,000 atrodo, kad yra tam tikrą šiukšlių vertę, pavyzdžiui, 134514032 607 00:32:41,000 --> 00:32:44,000 iš kai kurių ankstesnės funkcijos, o ne vienas, kad aš parašiau. 608 00:32:44,000 --> 00:32:47,000 Tai gali būti kažkas, kad ateina efektyviai su operacine sistema, 609 00:32:47,000 --> 00:32:49,000 kai po gaubtu funkcija. 610 00:32:49,000 --> 00:32:52,000 >> Gerai, kad viskas gerai, bet tegul dabar iš anksto į kitą eilutę. 611 00:32:52,000 --> 00:32:55,000 Jeigu aš ne mano GDB eilutę įrašykite "Kitas", ir aš paspauskite "Enter", 612 00:32:55,000 --> 00:32:58,000 pastebėti, kad pabrėžiant juda žemyn į eilutę 19 613 00:32:58,000 --> 00:33:01,000 bet logiška reiškia, kad eilutė 18 614 00:33:01,000 --> 00:33:06,000 baigtas vykdyti, todėl, jei aš vėl įvesti "spausdinti x" 615 00:33:06,000 --> 00:33:10,000 Aš dabar turėtų matyti 1, ir iš tiesų, aš. 616 00:33:10,000 --> 00:33:14,000 Vėlgi, $ medžiaga yra būdas GDB priminti jums 617 00:33:14,000 --> 00:33:17,000 spaudinių istorija yra tai, kad tu padarei. 618 00:33:17,000 --> 00:33:21,000 Dabar leiskite man eiti į priekį ir spausdinti y, ir iš tikrųjų, y kai beprotiškas vertė, taip pat, 619 00:33:21,000 --> 00:33:24,000 bet ne big deal, nes 19 eilutėje, mes apie tai priskirti ją 620 00:33:24,000 --> 00:33:27,000 vertė 2, todėl leiskite man įvesti "Next" dar kartą. 621 00:33:27,000 --> 00:33:29,000 Ir dabar mes printf eilutėje. 622 00:33:29,000 --> 00:33:31,000 Leiskite man padaryti spausdinimo x. 623 00:33:31,000 --> 00:33:34,000 Leiskite man padaryti spausdinimo y. Atvirai kalbant, aš gaunu šiek tiek pavargęs spausdinimo. 624 00:33:34,000 --> 00:33:38,000 Leiskite man, o ne įveskite "ekranas x" ir "ekranas y" 625 00:33:38,000 --> 00:33:41,000 ir dabar kiekvieną kartą, kai aš įveskite komandą ateityje 626 00:33:41,000 --> 00:33:45,000 Aš bus priminta apie tai, kas x ir y, kas x ir y, kas yra x ir y. 627 00:33:45,000 --> 00:33:48,000 >> Galiu taip pat, kaip žemę, tipo "info vietinių gyventojų." 628 00:33:48,000 --> 00:33:50,000 Informacija yra speciali komanda. 629 00:33:50,000 --> 00:33:52,000 Vietiniai reiškia, kad jis rodo man vietos kintamieji. 630 00:33:52,000 --> 00:33:55,000 Tik tuo atveju, nepamenu, ar tai yra crazy, sudėtingos funkcijos 631 00:33:55,000 --> 00:33:57,000 , kad aš ar kas nors kitas rašė informacija vietiniai gyventojai jums pasakys, 632 00:33:57,000 --> 00:34:00,000 kas yra visų vietos kintamieji Viduje šios vietos funkcija 633 00:34:00,000 --> 00:34:03,000 kad jums gali rūpintis, jei norite baksnoti aplink. 634 00:34:03,000 --> 00:34:07,000 Dabar printf apie įvykdyti, todėl leiskite man eiti į priekį ir tiesiog įrašykite "šalia". 635 00:34:07,000 --> 00:34:10,000 , Nes mes šioje aplinkoje mes ne iš tikrųjų matyti, 636 00:34:10,000 --> 00:34:14,000 vykdyti čia, bet pastebite, kad truputį kočiotiniai čia. 637 00:34:14,000 --> 00:34:17,000 Bet pastebite, kad neatsižvelgti į ekraną, 638 00:34:17,000 --> 00:34:21,000 todėl nėra čia puiki programa, bet tai gerai, nes aš visada galite baksnoti aplink 639 00:34:21,000 --> 00:34:23,000 naudojantis print, jei noriu. 640 00:34:23,000 --> 00:34:26,000 >> Leiskite man įvesti kitą vėl, ir dabar čia įdomiausia dalis. 641 00:34:26,000 --> 00:34:29,000 Šiuo pasakojimo taško y 2 ir x yra 1, 642 00:34:29,000 --> 00:34:32,000 , kaip siūloma čia, ir vėl, 643 00:34:32,000 --> 00:34:35,000 priežastis, tai automatiškai rodyti dabar yra, nes aš komandą 644 00:34:35,000 --> 00:34:40,000 ekranas x ir ekranas y, todėl momentas, I tipo kitas 645 00:34:40,000 --> 00:34:43,000 teorijos x ir y turėtų tapti pavertė. 646 00:34:43,000 --> 00:34:45,000 Dabar, mes jau žinome, kad nesiruošia būti, 647 00:34:45,000 --> 00:34:49,000 bet mes pamatyti, per akimirką, kaip mes galime pasinerti giliau išsiaiškinti, kodėl tai tiesa. 648 00:34:49,000 --> 00:34:54,000 Kitą, ir, deja, y yra dar 2 ir x yra dar 1, ir galiu patvirtinti, kiek. 649 00:34:54,000 --> 00:34:56,000 Spausdinti x, spausdinimo m. 650 00:34:56,000 --> 00:34:59,000 Iš tiesų, ne Swapping iš tiesų įvyko, todėl galime pradėti tai per. 651 00:34:59,000 --> 00:35:01,000 Aiškiai apsikeitimo neveikia. 652 00:35:01,000 --> 00:35:04,000 Tegul, o ne dar kartą įveskite "Vykdyti". 653 00:35:04,000 --> 00:35:07,000 Leiskite man pasakyti, taip, aš noriu paleisti jį nuo pat pradžių, įveskite. 654 00:35:07,000 --> 00:35:09,000 >> Dabar aš atgal į viršų 18 eilutėje. 655 00:35:09,000 --> 00:35:11,000 Dabar pastebėsite, x ir y yra šiukšlių vertės dar kartą. 656 00:35:11,000 --> 00:35:15,000 Next, Next, Next, Next. 657 00:35:15,000 --> 00:35:17,000 Jei aš nuobodu, aš taip pat tiesiog įveskite n kitą. 658 00:35:17,000 --> 00:35:21,000 Galite jį mažinti per trumpiausią įmanomą simbolių seka. 659 00:35:21,000 --> 00:35:23,000 Sukeisti dabar sulaužyta. 660 00:35:23,000 --> 00:35:25,000 Tegul neria, todėl užuot įvedę kitą, 661 00:35:25,000 --> 00:35:30,000 dabar aš ruošiuosi rašyti žingsnis, kad aš stiprinti šios funkcijos viduje 662 00:35:30,000 --> 00:35:33,000 , kad galėčiau eiti per jį, kad aš paspauskite žingsnį ir tada įveskite. 663 00:35:33,000 --> 00:35:37,000 Atkreipkite dėmesį, kad paryškinimas šuoliai žemyn mažesnis mano programa 36 eilutei. 664 00:35:37,000 --> 00:35:39,000 Dabar, kas yra vietos kintamieji? 665 00:35:39,000 --> 00:35:41,000 Info vietiniai. 666 00:35:41,000 --> 00:35:43,000 Nieko tik dar, nes mes ne Dotarłeś prie tos linijos, 667 00:35:43,000 --> 00:35:47,000 todėl eikime į priekį ir pasakyti "Kitas". 668 00:35:47,000 --> 00:35:50,000 Dabar mes, atrodo, tmp, spausdinimo tmp. 669 00:35:50,000 --> 00:35:52,000 Šiukšlių vertė, tiesa? Manau, kad taip. 670 00:35:52,000 --> 00:35:55,000 Kaip apie spausdinti, spausdinimo B, 1 ir 2? 671 00:35:55,000 --> 00:35:58,000 Vienu metu, kaip tik aš įveskite kitą kartą 672 00:35:58,000 --> 00:36:02,000 tmp ketina imtis reikšmė 1, tikiuosi, 673 00:36:02,000 --> 00:36:05,000 nes tmp bus priskirtas vertę. 674 00:36:05,000 --> 00:36:08,000 >> Dabar galime spausdinti, spausdinimo b, 675 00:36:08,000 --> 00:36:11,000 bet dabar spausdinti tmp, ir tai iš tiesų 1. 676 00:36:11,000 --> 00:36:14,000 Leiskite man daryti toliau. Leiskite man daryti toliau. 677 00:36:14,000 --> 00:36:16,000 Aš pabaigiau apsikeitimo funkcija. 678 00:36:16,000 --> 00:36:19,000 Aš vis dar viduje ji 40 eilutėje, todėl leiskite man spausdinti, 679 00:36:19,000 --> 00:36:22,000 spausdinti b, ir man nusispjauti, ką TVP yra. 680 00:36:22,000 --> 00:36:27,000 Atrodo, kad apsikeitimo sandoris yra teisingas, kai kalbama apie Swapping a ir b. 681 00:36:27,000 --> 00:36:31,000 Bet jei aš dabar įveskite kitą, aš šuolis atgal 25 eilutei, 682 00:36:31,000 --> 00:36:34,000 ir, žinoma, jei aš tipo x ir spausdinimo y 683 00:36:34,000 --> 00:36:38,000 jie vis dar nepakitusi, todėl mes ne nustatytas problemas. 684 00:36:38,000 --> 00:36:41,000 Bet diagnostiniu dabar galbūt su šiuo GDB programos 685 00:36:41,000 --> 00:36:44,000 mes bent Dotarłeś vienas žingsnis siekiant suprasti 686 00:36:44,000 --> 00:36:47,000 kas vyksta blogai be neteršti mūsų kodą įgyvendinant printf čia, 687 00:36:47,000 --> 00:36:50,000 printf čia printf čia ir tada paleisti jį vėl ir vėl 688 00:36:50,000 --> 00:36:52,000 bando išsiaiškinti, kas vyksta blogai. 689 00:36:52,000 --> 00:36:55,000 >> Aš ruošiuosi eiti į priekį ir mesti iš šio apskritai mesti. 690 00:36:55,000 --> 00:36:57,000 Tai vyksta tada sako, "Baigti" anyway? " Taip. 691 00:36:57,000 --> 00:37:00,000 Dabar aš ne mano normalus eilutę, ir aš padariau, naudojant GDB. 692 00:37:00,000 --> 00:37:03,000 Kaip panaikinti, jums nereikia naudoti šį TUI vėliava. 693 00:37:03,000 --> 00:37:07,000 Iš tiesų, jei jūs praleisti gausite esmės apatinėje ekrano. 694 00:37:07,000 --> 00:37:11,000 Taigi, jei aš įvesti pertrauka pagrindinis ir paleiskite 695 00:37:11,000 --> 00:37:15,000 Aš vis dar galite paleisti savo programą, bet ką ji darys daugiau tekstu 696 00:37:15,000 --> 00:37:18,000 Tik parodykit man ką dabartinę eilutę vienu metu,. 697 00:37:18,000 --> 00:37:21,000 -Tui, tekstinės vartotojo sąsajos, 698 00:37:21,000 --> 00:37:25,000 tik parodo, kad jūs daugiau programos vienu metu, kuris tikriausiai yra šiek tiek konceptualiai lengviau. 699 00:37:25,000 --> 00:37:27,000 Bet iš tiesų, galiu tik daryti toliau, Next, Next, 700 00:37:27,000 --> 00:37:30,000 ir aš norėčiau pamatyti vieną eilutę vienu metu, ir jei aš tikrai noriu pamatyti, kas vyksta 701 00:37:30,000 --> 00:37:35,000 Galiu tipo sąrašą ir pamatyti visa krūva kaimyninių linijų. 702 00:37:35,000 --> 00:37:39,000 >> Yra vaizdo, kad mes prašome, kad jūs žiūrėti problema nustato 3 703 00:37:39,000 --> 00:37:43,000 , kuris Nate apima kai kurias iš GDB gudrybės, 704 00:37:43,000 --> 00:37:46,000 ir tai yra vienas iš tų dalykų, sąžiningai, kai kurie ne trivialus procentas 705 00:37:46,000 --> 00:37:49,000 niekada nelieskite gdb, ir kad bus blogai 706 00:37:49,000 --> 00:37:53,000 nes tiesiog jūs galų gale išleisti daugiau laiko vėliau šį semestrą 707 00:37:53,000 --> 00:37:56,000 vejasi žemyn klaidas tada jums būtų, jei jūs įtraukėte pusvalandį / valandą 708 00:37:56,000 --> 00:38:00,000 šią savaitę ir kitą gyvenimą, gauti patogi su GDB. 709 00:38:00,000 --> 00:38:02,000 Printf buvo tavo draugas. 710 00:38:02,000 --> 00:38:05,000 GDB dabar turėtų būti tavo draugu. 711 00:38:05,000 --> 00:38:08,000 >> Bet kokie klausimai dėl GDB? 712 00:38:08,000 --> 00:38:12,000 Ir čia yra trumpas sąrašas kai kurių iš galingiausių ir naudinga komandų. 713 00:38:12,000 --> 00:38:15,000 Taip. >> Ar galite išspausdinti eilutę? 714 00:38:15,000 --> 00:38:17,000 Galite spausdinti eilutę? Absoliučiai. 715 00:38:17,000 --> 00:38:19,000 Tai nebūtinai turi būti tik sveikieji skaičiai. 716 00:38:19,000 --> 00:38:22,000 Jei kintamojo s string tiesiog įveskite spausdinimo s. 717 00:38:22,000 --> 00:38:24,000 Jis parodys jums, kas, kad eilutės rodiklis. 718 00:38:24,000 --> 00:38:26,000 [Nesigirdi studentas] 719 00:38:26,000 --> 00:38:28,000 Jis duos jums adresą ir seka pats stringas. 720 00:38:28,000 --> 00:38:32,000 Jis parodys jums abiem. 721 00:38:32,000 --> 00:38:34,000 Ir paskutinis dalykas, tik todėl, kad tai yra gera žinoti, per. 722 00:38:34,000 --> 00:38:37,000 Backtrace ir rėmas, leisk man pasinerti į šį vieną paskutinį kartą, 723 00:38:37,000 --> 00:38:39,000 pats tiksliai programa su GDB. 724 00:38:39,000 --> 00:38:44,000 Leiskite man eiti į priekį ir paleisti tekstinės vartotojo sąsajos versiją, 725 00:38:44,000 --> 00:38:46,000 pertrauka pagrindinis. 726 00:38:46,000 --> 00:38:49,000 Leiskite man eiti į priekį ir paleisti iš naujo. Here I am. 727 00:38:49,000 --> 00:38:55,000 Dabar leiskite man eiti Next, Next, šalia, greta, šalia, žingsnis, įvesti. 728 00:38:55,000 --> 00:39:00,000 >> Ir dabar manau, kad aš esu dabar apsikeitimo sandorio sąmoningai, bet aš, kaip "Velnias, kokia buvo x vertė?" 729 00:39:00,000 --> 00:39:02,000 Aš negaliu to padaryti x daugiau. 730 00:39:02,000 --> 00:39:05,000 Aš negaliu to padaryti y, nes jie nėra komplekte. 731 00:39:05,000 --> 00:39:07,000 Jie nėra tame kontekste, bet ne problema. 732 00:39:07,000 --> 00:39:09,000 Galiu tipo pėdsako. 733 00:39:09,000 --> 00:39:13,000 Kad man rodo visas funkcijas, kad šiuo metu atliktos iki. 734 00:39:13,000 --> 00:39:16,000 Atkreipkite dėmesį, kad ant dugno vienas, pagrindinis, linijos, kurių pagrindinis 735 00:39:16,000 --> 00:39:18,000 čia mūsų paveikslėlio apačioje. 736 00:39:18,000 --> 00:39:22,000 Tai, kad apsikeitimo sandoris yra apsikeitimo virš jo atmintyje tai, kas pirmiau pasakyta, linijų, 737 00:39:22,000 --> 00:39:26,000 ir jei noriu grįžti į pagrindinį laikinai galiu pasakyti "rėmo". 738 00:39:26,000 --> 00:39:30,000 Kokiu numeriu? Pagrindinis rėmas # 1. 739 00:39:30,000 --> 00:39:32,000 Aš ruošiuosi eiti į priekį ir pasakyti "Rėmelis 1". 740 00:39:32,000 --> 00:39:36,000 >> Dabar aš pagrindinis ir galiu atspausdinti x ir galiu atspausdinti y, 741 00:39:36,000 --> 00:39:40,000 bet aš negaliu spausdinti a arba b. 742 00:39:40,000 --> 00:39:43,000 Bet aš galiu, jei aš sakau, "Gerai, palaukite kelias minutes. Jeigu apsikeitimo?" 743 00:39:43,000 --> 00:39:46,000 Leiskite man eiti į priekį ir pasakyti "Frame 0". 744 00:39:46,000 --> 00:39:48,000 Dabar aš atgal, kai aš noriu būti, ir kaip panaikinti, 745 00:39:48,000 --> 00:39:52,000 kitos komandos taip pat, pavyzdžiui, jei jūs tikrai gauti nuobodu rašyti, Next, Next, Next, Next, 746 00:39:52,000 --> 00:39:56,000 galite paprastai pasakyti dalykų, pavyzdžiui, "Kitas 10" ir tai bus žingsnis per ateinančius 10 eilučių. 747 00:39:56,000 --> 00:39:59,000 Taip pat galite rašyti "Tęsti", kai jūs tikrai gauti atsibodo su žengia per jį. 748 00:39:59,000 --> 00:40:05,000 Toliau bus paleisti programą be pertraukos, kol ji hitai kitą atskaitos tašką, 749 00:40:05,000 --> 00:40:07,000 ar kilpa arba sumažinti žemyn į savo programą. 750 00:40:07,000 --> 00:40:11,000 >> Šiuo atveju mes ir toliau iki galo, ir programa išėjo paprastai. 751 00:40:11,000 --> 00:40:13,000 Tai yra išgalvotas būdas, prastesnės procesas. 752 00:40:13,000 --> 00:40:16,000 Tiesiog jūsų programa išėjo normaliai. 753 00:40:16,000 --> 00:40:24,000 Daugiau apie šią vaizdo ir derinimo sesijas priekį. 754 00:40:24,000 --> 00:40:26,000 Kuris buvo daug. 755 00:40:26,000 --> 00:40:35,000 Paimkime mūsų 5-minučių pertrauką ir sugrįšime su structs ir failus. 756 00:40:35,000 --> 00:40:38,000 >> Jei turite nėrė į šią savaitę pset jau 757 00:40:38,000 --> 00:40:41,000 jūs žinote, kad mes naudojame platinimo kodą, 758 00:40:41,000 --> 00:40:45,000 išeitinis kodas, kad mes teikiame jums, kaip atskaitos tašką, kai naujas technologijas. 759 00:40:45,000 --> 00:40:50,000 Visų pirma, mes pristatė šį naują raktažodį, pavadintą struct, struktūros, 760 00:40:50,000 --> 00:40:53,000 taip, kad mes galime sukurti individualų kintamieji rūšių. 761 00:40:53,000 --> 00:40:57,000 Mes taip pat pristatė failą I / O, failo įvesties ir išvesties sąvoką, 762 00:40:57,000 --> 00:41:00,000 ir tai yra todėl, kad mes galime išgelbėti valstybę 763 00:41:00,000 --> 00:41:03,000 savo scramble lentos ant disko failą 764 00:41:03,000 --> 00:41:06,000 taip, kad mokymo bičiulių, ir gebu suprasti 765 00:41:06,000 --> 00:41:09,000 tai, kas vyksta viduje savo programą, be būtinybės rankiniu būdu žaisti 766 00:41:09,000 --> 00:41:11,000 dešimtys žaidimai scramble. 767 00:41:11,000 --> 00:41:13,000 Mes galime tai padaryti daugiau automatedly. 768 00:41:13,000 --> 00:41:18,000 >> Šis struct idėja išsprendžia gana įtikinamų problema. 769 00:41:18,000 --> 00:41:21,000 Tarkime, kad norime įgyvendinti kai kurių programa 770 00:41:21,000 --> 00:41:25,000 kad kažkaip stebi informaciją apie studentų 771 00:41:25,000 --> 00:41:28,000 ir studentai gali turėti, pavyzdžiui, ID, vardą 772 00:41:28,000 --> 00:41:31,000 ir kaip Harvardo vietoje namas, todėl tai yra 3 vnt informacija 773 00:41:31,000 --> 00:41:34,000 mes norime išlaikyti aplink, todėl leiskite man eiti į priekį ir pradėti rašyti maža programa, 774 00:41:34,000 --> 00:41:38,000 įtraukti stdio.h. 775 00:41:38,000 --> 00:41:42,000 Leiskite man daryti įtraukti cs50.h. 776 00:41:42,000 --> 00:41:44,000 Ir tada pradėti savo pagrindinę funkciją. 777 00:41:44,000 --> 00:41:46,000 Aš ne nerimauti su bet komandinės eilutės argumentai, 778 00:41:46,000 --> 00:41:49,000 ir čia aš noriu turėti studentas, todėl aš ketina pasakyti 779 00:41:49,000 --> 00:41:54,000 studentas turi pavadinimą, todėl aš ketina pasakyti "String vardas." 780 00:41:54,000 --> 00:41:59,000 Tada aš ruošiuosi pasakyti studentas taip pat turi ID, todėl int id, 781 00:41:59,000 --> 00:42:03,000 ir studentas turi namą, todėl aš taip pat ketina pasakyti "styginių namą." 782 00:42:03,000 --> 00:42:06,000 Tada aš užsisakyti šiuos šiek tiek daugiau švariai, kaip šis. 783 00:42:06,000 --> 00:42:11,000 Gerai, dabar aš turiu 3 kintamieji, su kuriais atstovauti studentas, todėl "studentas." 784 00:42:11,000 --> 00:42:15,000 >> O dabar noriu užpildyti šias vertybes, todėl leiskite man eiti į priekį ir pasakyti kažką panašaus 785 00:42:15,000 --> 00:42:18,000 "Id = 123". 786 00:42:18,000 --> 00:42:21,000 Vardas ketina gauti Dovydą. 787 00:42:21,000 --> 00:42:24,000 Tarkime, namas ketina gauti Mather, 788 00:42:24,000 --> 00:42:31,000 ir tada aš ruošiuosi daryti kažką savavališkai kaip printf ("% s, 789 00:42:31,000 --> 00:42:37,000 , kurio ID yra% d% s, gyvena. 790 00:42:37,000 --> 00:42:41,000 Ir dabar, ką aš noriu prijungti čia, vieną po kito? 791 00:42:41,000 --> 00:42:47,000 Vardas, id, namas; return 0. 792 00:42:47,000 --> 00:42:50,000 Gerai, jei aš kažkur čia įsukus 793 00:42:50,000 --> 00:42:54,000 Manau, mes turime gana gera programa, kuri saugo vienas studentas. 794 00:42:54,000 --> 00:42:57,000 Žinoma, tai ne visi, kad įdomus. Ką daryti, jei aš noriu turėti 2 studentus? 795 00:42:57,000 --> 00:42:59,000 Tai yra ne big deal. Galiu paremti 2 žmonės. 796 00:42:59,000 --> 00:43:03,000 Leiskite man eiti į priekį ir pabrėžti tai, ir eiti čia, 797 00:43:03,000 --> 00:43:09,000 ir galiu pasakyti, "id = 456" kažkas panašaus Rob, kurie gyvena Kirkland. 798 00:43:09,000 --> 00:43:12,000 >> Gerai, palauk, bet aš negaliu paskambinti tai tas pats, 799 00:43:12,000 --> 00:43:15,000 ir atrodo, kad aš ruošiuosi turite nukopijuoti, 800 00:43:15,000 --> 00:43:19,000 todėl leiskite man pasakyti, kad tai bus Dovydo kintamieji, 801 00:43:19,000 --> 00:43:23,000 ir leiskite man gauti kai kuriuos iš šių egzempliorių Rob. 802 00:43:23,000 --> 00:43:27,000 Mes paskambinsime šių Rob, bet tai nesiruošia dirbti dabar 803 00:43:27,000 --> 00:43:33,000 nes aš laukti, galime pakeisti mane į ID1, NAME1 ir house1. 804 00:43:33,000 --> 00:43:35,000 Rob bus 2, 2. 805 00:43:35,000 --> 00:43:42,000 Aš turiu pakeisti čia, čia, čia, čia, čia, čia. 806 00:43:42,000 --> 00:43:45,000 Laukti, ką apie Tommy? Leiskite tai padaryti ir vėl. 807 00:43:45,000 --> 00:43:49,000 Žinoma, jei jūs vis dar manote, kad tai yra geras būdas tai padaryti, tai ne, 808 00:43:49,000 --> 00:43:52,000 taigi nukopijuokite / įklijuokite blogas. 809 00:43:52,000 --> 00:43:55,000 Bet mes išsprendė šią savaitę. 810 00:43:55,000 --> 00:43:59,000 >> Tai, kas buvo mūsų sprendimas, kai mes norėjome turėti kelis egzempliorius to paties duomenų tipo? 811 00:43:59,000 --> 00:44:01,000 [Mokiniai] masyvas. 812 00:44:01,000 --> 00:44:03,000 Masyvas, todėl leiskite man pabandyti valyti tai padaryti. 813 00:44:03,000 --> 00:44:07,000 Leiskite man šiek tiek už save kambarį viršuje, ir leiskite man, o ne padaryti čia. 814 00:44:07,000 --> 00:44:12,000 Mes jį vadiname šių žmonių, ir vietoj to aš ruošiuosi pasakyti "int adresus, 815 00:44:12,000 --> 00:44:14,000 ir aš ruošiuosi palaikyti 3 iš mūsų dabar. 816 00:44:14,000 --> 00:44:18,000 Aš ruošiuosi pasakyti "styginių vardus", ir aš palaiko 3 iš mūsų, 817 00:44:18,000 --> 00:44:22,000 ir tada aš ruošiuosi pasakyti "styginių namus", ir aš norėčiau paremti 3 iš mūsų. 818 00:44:22,000 --> 00:44:26,000 Dabar čia vietoj David gauti savo vietos kintamieji 819 00:44:26,000 --> 00:44:28,000 mes galime atsikratyti tų,. 820 00:44:28,000 --> 00:44:30,000 , Kad jaučiasi gerai, kad mes valyti tai. 821 00:44:30,000 --> 00:44:35,000 Galiu pasakyti Dovydas bus [0] ir vardai [0] 822 00:44:35,000 --> 00:44:38,000 ir namų [0]. 823 00:44:38,000 --> 00:44:41,000 Ir tada Rob panašiai galime sutaupyti tai. 824 00:44:41,000 --> 00:44:46,000 Tegul tai žemyn čia, kad jis ketina būti savavališkai ID [1]. 825 00:44:46,000 --> 00:44:50,000 Jis vyksta, kad jo pavardė būtų [1], 826 00:44:50,000 --> 00:44:53,000 ir tada galiausiai, namai [1]. 827 00:44:53,000 --> 00:44:57,000 >> Dar šiek tiek varginantis, ir dabar aš turiu suprasti tai, 828 00:44:57,000 --> 00:45:03,000 todėl tarkim "vardai [0], id [0], namai [0], 829 00:45:03,000 --> 00:45:06,000 ir tegul pluralize tai. 830 00:45:06,000 --> 00:45:09,000 Ids, IDS, idėjas. 831 00:45:09,000 --> 00:45:12,000 Ir vėl, aš tai daro, todėl vėl aš jau kreipiantis į nukopijuokite / įklijuokite iš naujo, 832 00:45:12,000 --> 00:45:14,000 todėl šansai yra, yra ir kitas sprendimas čia. 833 00:45:14,000 --> 00:45:18,000 Aš greičiausiai gali išvalyti tai padaryti su kilpa, ar kažką panašaus, kad, 834 00:45:18,000 --> 00:45:21,000 Taigi trumpai tariant, tai šiek tiek geriau, bet vis dar jaučiasi 835 00:45:21,000 --> 00:45:24,000 Aš kreipiantis kopijuoti / įklijuoti, tačiau net ir tai, aš patvirtinu, 836 00:45:24,000 --> 00:45:27,000 tikrai nėra iš esmės teisingas sprendimas, nes 837 00:45:27,000 --> 00:45:29,000 ką daryti, jei kada nors mes nuspręsime, kad jūs žinote, ką? 838 00:45:29,000 --> 00:45:32,000 Mes tikrai turėjo, o saugojimo elektroninio pašto adresą, Dovydo ir Rob 839 00:45:32,000 --> 00:45:34,000 ir visi kiti šioje programoje. 840 00:45:34,000 --> 00:45:36,000 Mes taip pat turėtume laikyti telefono numerius. 841 00:45:36,000 --> 00:45:39,000 Mes taip pat turėtume laikyti skubios pagalbos numeriai. 842 00:45:39,000 --> 00:45:41,000 Mes turime visus šiuos duomenis gabalus, kad mes norime laikyti, 843 00:45:41,000 --> 00:45:43,000 taip, kaip jums eiti apie tai daro? 844 00:45:43,000 --> 00:45:46,000 >> Jūs patvirtinate kitą masyvas viršuje, ir tada jūs rankiniu būdu įtraukti 845 00:45:46,000 --> 00:45:49,000 pašto adresas [0], elektroninio pašto adresas [1] 846 00:45:49,000 --> 00:45:51,000 Dovydo ir apiplėšti ir kt. 847 00:45:51,000 --> 00:45:56,000 Bet ten tikrai tik prielaida, kuria grindžiamas šis dizainas 848 00:45:56,000 --> 00:45:59,000 kad aš naudoju Honor sistema, žinoti, kad 849 00:45:59,000 --> 00:46:03,000 [I] kiekvieną iš kelių masyvų 850 00:46:03,000 --> 00:46:06,000 tiesiog taip atsitinka, susiję su tuo pačiu asmeniu, 851 00:46:06,000 --> 00:46:10,000 taip [0] identifikatorius yra 123 852 00:46:10,000 --> 00:46:13,000 ir aš ruošiuosi daryti prielaidą, kad vardus [0] 853 00:46:13,000 --> 00:46:16,000 yra tas pats asmuo, vardas, pavardė ir namai [0] 854 00:46:16,000 --> 00:46:21,000 yra tas pats asmuo, namai ir tt visiems įvairių sukurti masyvų. 855 00:46:21,000 --> 00:46:24,000 , Bet pastebėsite, kad nėra esminis ryšys 856 00:46:24,000 --> 00:46:27,000 iš jų 3 iš informacijos, id, name ir namo dalių, 857 00:46:27,000 --> 00:46:32,000 nors subjektas, šioje programoje, mes stengiamės modelio nėra matricos. 858 00:46:32,000 --> 00:46:35,000 Matricos yra tik tai programinis būdas tai padaryti. 859 00:46:35,000 --> 00:46:38,000 Tai, ką mes tikrai norime modeliuoti mūsų programoje yra asmuo, 860 00:46:38,000 --> 00:46:41,000 kaip Dovydo, kaip Rob asmuo, kurio viduje 861 00:46:41,000 --> 00:46:46,000 ar apibendrinamos pavadinimas ir ID ir namas. 862 00:46:46,000 --> 00:46:49,000 >> Mes galime kažkaip išreikšti šią hermetizuoti idėja 863 00:46:49,000 --> 00:46:52,000 , pagal kurią asmuo turi ID, vardas ir namą 864 00:46:52,000 --> 00:46:55,000 o ne griebtis tikrai tai Hack, kai mes tiesiog 865 00:46:55,000 --> 00:46:58,000 pasitikėti, kad kronšteino kažką 866 00:46:58,000 --> 00:47:02,000 daroma nuoroda į tos pačios žmogiškosios subjekto kiekvieną iš šių skirtingų masyvų? 867 00:47:02,000 --> 00:47:04,000 Mes iš tikrųjų galite tai padaryti. 868 00:47:04,000 --> 00:47:08,000 Leiskite man eiti virš pagrindinis dabar, ir leiskite man sukurti savo duomenų tipą 869 00:47:08,000 --> 00:47:10,000 tikrai pirmą kartą. 870 00:47:10,000 --> 00:47:14,000 Mes panaudojome šią technologiją scramble, 871 00:47:14,000 --> 00:47:17,000 bet čia aš ruošiuosi eiti į priekį ir sukurti duomenų tipą, 872 00:47:17,000 --> 00:47:19,000 ir žinote, ką aš ruošiuosi jį vadiname studentas arba asmuo, 873 00:47:19,000 --> 00:47:23,000 ir aš ruošiuosi naudoti Typedef nustatyti tipą. 874 00:47:23,000 --> 00:47:25,000 Aš ruošiuosi pasakyti, kad tai yra struktūra, 875 00:47:25,000 --> 00:47:29,000 ir tada ši struktūra tipo studentas, mes pasakyti, 876 00:47:29,000 --> 00:47:31,000 nors tai šiek tiek nuo dabar man. 877 00:47:31,000 --> 00:47:33,000 Mes pasakyti "int numeris." 878 00:47:33,000 --> 00:47:35,000 Mes pasakyti "String vardas". 879 00:47:35,000 --> 00:47:37,000 Tada mes pasakyti "string namą," 880 00:47:37,000 --> 00:47:40,000 tai dabar, šių kelių eilučių kodą pabaigos 881 00:47:40,000 --> 00:47:45,000 Apsukite metalinis garsas Aš ką tik mokė, kad egzistuoja 882 00:47:45,000 --> 00:47:49,000 be int duomenų tipas, be stygų, be to, dviviečiai, be plūdės. 883 00:47:49,000 --> 00:47:54,000 >> Kaip šio laiko linija 11 metu, dabar yra naujas duomenų tipas vadinamas studentai, 884 00:47:54,000 --> 00:47:58,000 ir dabar aš galiu paskelbti studentų kintamąjį bet aš noriu, 885 00:47:58,000 --> 00:48:01,000 todėl leiskite man slinkti žemyn žmonėms. 886 00:48:01,000 --> 00:48:05,000 Dabar galiu atsikratyti šio ir aš galiu eiti atgal į Dovydo čia, 887 00:48:05,000 --> 00:48:10,000 ir už Dovydą aš iš tiesų gali pasakyti, kad Dovydas, 888 00:48:10,000 --> 00:48:13,000 mes galime tiesiog pavadinti kintamąjį po save, 889 00:48:13,000 --> 00:48:16,000 bus tipo studentas. 890 00:48:16,000 --> 00:48:18,000 Tai gali atrodyti šiek tiek keista, bet tai dar ne viskas, kad skiriasi 891 00:48:18,000 --> 00:48:22,000 paskelbti kažką kaip int ar eilutę arba plūduriuoti. 892 00:48:22,000 --> 00:48:24,000 Jis tiesiog taip atsitinka, turi būti vadinamas studentas dabar, 893 00:48:24,000 --> 00:48:28,000 ir jei noriu daryti kažką viduje šios struktūros 894 00:48:28,000 --> 00:48:31,000 Dabar aš turiu naudoti naują sintaksę gabalas, bet tai gana paprasta, 895 00:48:31,000 --> 00:48:39,000 , david.name = "Dovydas" sostinėje D david.id = 123, 896 00:48:39,000 --> 00:48:42,000 ir david.house = "Mather," 897 00:48:42,000 --> 00:48:46,000 ir dabar aš galiu atsikratyti šio stuff čia. 898 00:48:46,000 --> 00:48:51,000 Pranešimas dabar mes atnaujinome mūsų programą tikrai daug geriau 899 00:48:51,000 --> 00:48:54,000 kad dabar mūsų programa atspindi realų pasaulį. 900 00:48:54,000 --> 00:48:57,000 >> Yra realaus pasaulio samprata, kad asmuo ar studentas. 901 00:48:57,000 --> 00:49:02,000 Čia mes turime dabar C versija asmens arba, tiksliau studentas. 902 00:49:02,000 --> 00:49:05,000 Viduje to asmens šie Atitinkamos techninės charakteristikos, kurių tinkamumas, 903 00:49:05,000 --> 00:49:10,000 ID, pavadinimas ir namo, todėl Rob iš esmės tampa žemyn čia tas pats, 904 00:49:10,000 --> 00:49:14,000 taigi studentas apiplėšti, o dabar rob.id = 456, 905 00:49:14,000 --> 00:49:17,000 rob.name = "Rob". 906 00:49:17,000 --> 00:49:20,000 Tas faktas, kad kintamasis yra vadinamas Rob tarsi beprasmis. 907 00:49:20,000 --> 00:49:22,000 Mes galėjome pavadino jį x arba y arba z. 908 00:49:22,000 --> 00:49:25,000 Mes tiesiog pavadino jį apiplėšti, semantiškai atitinka, 909 00:49:25,000 --> 00:49:28,000 bet tikrai pavadinimas yra viduje pats toje srityje, 910 00:49:28,000 --> 00:49:30,000 todėl dabar aš tai. 911 00:49:30,000 --> 00:49:33,000 Tai taip pat nesijaučia kaip geriausią dizainą, kad aš sunkiai koduojami Dovydą. 912 00:49:33,000 --> 00:49:35,000 Aš sunkiai koduojami Rob. 913 00:49:35,000 --> 00:49:39,000 Ir aš vis dar turi imtis tikrą kopiją ir įklijuokite kiekvieną kartą, kai aš noriu naujus kintamuosius. 914 00:49:39,000 --> 00:49:43,000 Be to, turiu ir matyt kiekvieną iš šių kintamųjų pavadinimą, 915 00:49:43,000 --> 00:49:46,000 nors aš daug, o aprašomos šių kintamųjų 916 00:49:46,000 --> 00:49:48,000  daugiau bendrine studentai. 917 00:49:48,000 --> 00:49:52,000 >> Dabar mes galime sujungti idėjų, dirbusias mums 918 00:49:52,000 --> 00:49:56,000 ir vietoj to pasakyti: "Žinai ką, man duoti kintamasis vadinamas studentų, 919 00:49:56,000 --> 00:50:01,000 ir tegul jis bus 3 dydžio ", todėl dabar galiu patobulinti tai dar labiau, 920 00:50:01,000 --> 00:50:04,000 atsikratyti rankiniu būdu deklaruotą Dovydo, 921 00:50:04,000 --> 00:50:08,000 ir aš galiu vietoj pasakyti kažką panašaus į studentų [0] Čia. 922 00:50:08,000 --> 00:50:11,000 Galiu pasakyti studentus [0] čia 923 00:50:11,000 --> 00:50:14,000 studentai [0] čia, ir taip toliau, ir aš galiu eiti aplink 924 00:50:14,000 --> 00:50:16,000 ir išvalyti, kad Rob. 925 00:50:16,000 --> 00:50:19,000 Aš taip pat galėtų eiti apie dabar gal pridedant kilpą 926 00:50:19,000 --> 00:50:23,000 ir naudojant GetString ir GetInt faktiškai gauti šias vertybes iš vartotojo. 927 00:50:23,000 --> 00:50:27,000 Galėčiau eiti apie pridedant pastovus, nes tai iš esmės bloga praktika 928 00:50:27,000 --> 00:50:29,000 į kietąjį kodą kai kokiam kaip 3 čia 929 00:50:29,000 --> 00:50:33,000 ir tada tiesiog atminkite, kad jums reikia įdėti ne daugiau kaip 3 studentų. 930 00:50:33,000 --> 00:50:36,000 Turbūt būtų geriau naudoti # define mano failo viršuje 931 00:50:36,000 --> 00:50:40,000 ir kitų veiksnių, kad iš, todėl iš tikrųjų, leiskite man eiti į priekį ir apibendrinti. 932 00:50:40,000 --> 00:50:43,000 >> Leiskite man atverti pavyzdį, kad tarp šiandien 933 00:50:43,000 --> 00:50:46,000 pavyzdžiai iš anksto, structs1. 934 00:50:46,000 --> 00:50:49,000 Tai yra visa programa, kuri naudoja # define čia 935 00:50:49,000 --> 00:50:51,000 ir sako, kad mes ketiname turėti 3 studentus pagal nutylėjimą. 936 00:50:51,000 --> 00:50:54,000 Čia aš skelbiantis klasės verta studentų, 937 00:50:54,000 --> 00:50:57,000 todėl studentų klasėje, o dabar aš naudoju kilpą 938 00:50:57,000 --> 00:51:00,000 tiesiog padaryti kodas šiek tiek daugiau elegantiškas, gyventojų klasę 939 00:51:00,000 --> 00:51:05,000 vartotojo įvestį, todėl kartoti nuo i = 0 iki studentų, kurie yra 3. 940 00:51:05,000 --> 00:51:07,000 Ir tada aš paskatinti vartotoją Šioje versijoje 941 00:51:07,000 --> 00:51:10,000  kas studento ID, ir aš jį gauti su GetInt. 942 00:51:10,000 --> 00:51:13,000 Koks studento vardas, ir tada aš jį gauti su GetString. 943 00:51:13,000 --> 00:51:15,000 , Kas studento namas? I get it su GetString. 944 00:51:15,000 --> 00:51:19,000 Ir tada apačioje čia, aš tiesiog nusprendžiau pakeisti 945 00:51:19,000 --> 00:51:22,000 kaip aš spausdinti tai ir iš tikrųjų naudoti kilpą, 946 00:51:22,000 --> 00:51:24,000 o kas aš spausdinti? 947 00:51:24,000 --> 00:51:27,000 Pagal komentarą, aš spausdinti bet Mather, 948 00:51:27,000 --> 00:51:30,000 ir viskas taip Rob ir Tommy ir tt iš tikrųjų Tommy Mather. 949 00:51:30,000 --> 00:51:34,000 Tommy ir Dovydas būti spausdinami šiuo atveju, bet kaip tai dirba? 950 00:51:34,000 --> 00:51:40,000 Šią funkciją, mes nematėme anksčiau, bet atspėti, ką tai nereiškia,. 951 00:51:40,000 --> 00:51:42,000 Lygina eilutes. 952 00:51:42,000 --> 00:51:45,000 >> Tai šiek tiek ne akivaizdus, ​​kaip ji lygina eilutes, nes paaiškėja, 953 00:51:45,000 --> 00:51:49,000 jei jis grąžina 0, tai reiškia, kad stygos yra lygūs. 954 00:51:49,000 --> 00:51:53,000 Jei ji grąžina -1, tai reiškia, kad vienas ateina abėcėlę prieš kitas, 955 00:51:53,000 --> 00:51:57,000 ir jei ji grąžina 1, tai reiškia, kad kitą žodį ateina abėcėlę 956 00:51:57,000 --> 00:52:00,000 anksčiau už kitą, ir jūs galite ieškoti internete arba žinyno puslapyje 957 00:52:00,000 --> 00:52:04,000 tiksliai kokiu būdu yra, bet visa tai daro dabar, tai sako, 958 00:52:04,000 --> 00:52:09,000 jeigu [i]. namas yra lygus "Mather" 959 00:52:09,000 --> 00:52:13,000 tada eiti į priekį ir atspausdinti, kad ir taip yra Mather. 960 00:52:13,000 --> 00:52:16,000 Bet štai ką mes dar nematėte anksčiau, ir mes grįžti prie šio. 961 00:52:16,000 --> 00:52:21,000 Nepamenu, kad kada nors tai padaryti savo programas. 962 00:52:21,000 --> 00:52:24,000 Nemokama, matyt, į atmintį, atlaisvinti atminties, 963 00:52:24,000 --> 00:52:31,000 bet kas atminties aš matyt išleisti šio ciklo šios programos apačioje? 964 00:52:31,000 --> 00:52:34,000 Atrodo, kad aš esu atlaisvinus asmens vardą 965 00:52:34,000 --> 00:52:37,000 ir asmens namas, bet kodėl taip yra? 966 00:52:37,000 --> 00:52:41,000 >> Pasirodo, visas šias savaites, kad jūs naudojate GetString 967 00:52:41,000 --> 00:52:45,000 mes tipo buvo įvesti vieną kartą per klaidą į jūsų programų. 968 00:52:45,000 --> 00:52:51,000 GetString dizaino skiria atminties, taip, kad ji gali grįžti į jums styga, 969 00:52:51,000 --> 00:52:55,000 kaip Dovydas, arba Rob ir tada galite daryti ką nori 970 00:52:55,000 --> 00:52:59,000 su ta savo programą eilutę, nes mes rezervuota jums atmintį. 971 00:52:59,000 --> 00:53:02,000 Problema yra ta, visą šį laiką, kiekvieną kartą, kai paskambinti GetString 972 00:53:02,000 --> 00:53:05,000 mes, autoriai apie GetString, buvo klausia operacinę sistemą 973 00:53:05,000 --> 00:53:07,000 duoti mums šiek tiek RAM šios eilutės. 974 00:53:07,000 --> 00:53:09,000 Duok mums šiek tiek RAM šiai kitą eilutę. 975 00:53:09,000 --> 00:53:11,000 Duok mums šiek tiek daugiau RAM šio kitą eilutę. 976 00:53:11,000 --> 00:53:13,000 Ką jūs, programuotojas, niekada buvo padaryti 977 00:53:13,000 --> 00:53:15,000 suteikia mums, kad atminties atgal 978 00:53:15,000 --> 00:53:17,000 šių kelių savaičių visas programas rašėte 979 00:53:17,000 --> 00:53:20,000 turėjo tai, kas vadinama atminties šuolis, kai jie nuolat 980 00:53:20,000 --> 00:53:24,000 vis daugiau ir daugiau atminties kiekvieną kartą, kai skambinate GetString, ir kad gerai. 981 00:53:24,000 --> 00:53:27,000 Mes specialiai padaryti, kad pirmąsias savaites, nes tai nėra, kad įdomu 982 00:53:27,000 --> 00:53:29,000 nereikės nerimauti apie tai, kur eilutė yra iš. 983 00:53:29,000 --> 00:53:34,000 Viskas, ką norėtumėte yra žodis Rob grįžti, kai vartotojas įveda jį in 984 00:53:34,000 --> 00:53:38,000 >> Bet juda į priekį, dabar mes turime pradėti vis labiau sudėtingesnės apie tai. 985 00:53:38,000 --> 00:53:42,000 Bet kuriuo metu mes paskirstyti atmintį, mes geriau galiausiai perduoti jį atgal. 986 00:53:42,000 --> 00:53:45,000 Kitaip realiame pasaulyje jūsų Mac arba PC, jums gali tekti kartais atsiranda 987 00:53:45,000 --> 00:53:50,000 simptomai, kai jūsų kompiuteris yra šlifavimo sustabdyti ilgainiui 988 00:53:50,000 --> 00:53:54,000 arba kvailas verpimo paplūdimio kamuolys yra tik užima kompiuteris 989 00:53:54,000 --> 00:53:56,000 visą dėmesį ir jūs negalite daryti dalykus. 990 00:53:56,000 --> 00:54:00,000 , Kurie gali būti paaiškinti bet klaidų skaičius, bet tarp tų galimų klaidų 991 00:54:00,000 --> 00:54:03,000 yra dalykų, Atminties nutekėjimas, kažkas, kas rašė, kad programinė įranga, 992 00:54:03,000 --> 00:54:07,000 jūs naudojate neprisiminė, kad atlaisvintumėte atminties, 993 00:54:07,000 --> 00:54:10,000 kad jis ar ji paprašė operacinę sistemą, 994 00:54:10,000 --> 00:54:14,000 nenaudojate GetString, nes tai CS50 dalykas, tačiau naudojant panašias funkcijas 995 00:54:14,000 --> 00:54:16,000 kad paklausti operacinės sistemos atminties. 996 00:54:16,000 --> 00:54:19,000 Jei jūs ar jie susukti ir iš tikrųjų niekada grįžti, kad atmintis 997 00:54:19,000 --> 00:54:24,000 simptomas, kad gali būti, kad programa lėtina ir stabdo ir lėtina 998 00:54:24,000 --> 00:54:26,000 , jei pamenate skambinti nemokamai. 999 00:54:26,000 --> 00:54:28,000 >> Mes grįžti, kada ir kodėl jums turėtų skambinti nemokamai 1000 00:54:28,000 --> 00:54:32,000 bet eikime į priekį tiesiog gera priemonė ir pabandykite paleisti šią konkrečią programą. 1001 00:54:32,000 --> 00:54:35,000 Tai buvo vadinama structs1, įveskite. 1002 00:54:35,000 --> 00:54:40,000 Leiskite man eiti į priekį ir paleisti structs1, 123, David Mather parengto 1003 00:54:40,000 --> 00:54:47,000 456, Rob Kirkland, 789, 1004 00:54:47,000 --> 00:54:50,000 Tommy Mather, ir mes matome, Dovydo Mather, Tommy Mather. 1005 00:54:50,000 --> 00:54:53,000 Tai tik šiek tiek normalumas patikrinti, kad programa veikia. 1006 00:54:53,000 --> 00:54:56,000 Dabar, deja, ši programa yra šiek tiek varginantis, kad 1007 00:54:56,000 --> 00:55:00,000 Aš visos, kad darbas, aš įvedėte 9 skirtingų stygų, paspauskite "Enter", 1008 00:55:00,000 --> 00:55:04,000 buvo pasakyta, kuris buvo Mather, tačiau akivaizdu, aš žinojo, kas jau buvo Mather, nes aš ją įvedėte. 1009 00:55:04,000 --> 00:55:07,000 Būtų bent malonu, jei ši programa yra daugiau kaip duomenų bazės 1010 00:55:07,000 --> 00:55:10,000 ir ji iš tikrųjų prisimena, ką aš įvedėte 1011 00:55:10,000 --> 00:55:12,000 todėl aš niekada vėl turi įvesti šių studentų įrašus. 1012 00:55:12,000 --> 00:55:15,000 Gal tai kaip registrarial sistemos. 1013 00:55:15,000 --> 00:55:21,000 >> Mes galime tai padaryti naudojant šią techniką, vadinamą failą I / O, failo įvesties ir išvesties, 1014 00:55:21,000 --> 00:55:24,000 labai bendro pobūdžio būdas pasakyti, bet kada norite skaityti failus arba įrašyti failus 1015 00:55:24,000 --> 00:55:26,000 jūs galite tai padaryti su tam tikrų funkcijų rinkiniu. 1016 00:55:26,000 --> 00:55:29,000 Leiskite man eiti į priekį ir atidaryti šį pavyzdį structs2.c 1017 00:55:29,000 --> 00:55:33,000 kuris yra beveik identiškas, bet pažiūrėkime, ką jis dabar daro. 1018 00:55:33,000 --> 00:55:36,000 Failo viršuje paskelbti klasė studentų. 1019 00:55:36,000 --> 00:55:38,000 Aš tada užpildyti su vartotojo įvestį klasę, 1020 00:55:38,000 --> 00:55:41,000 todėl tie kodo eilutės lygiai taip, kaip anksčiau. 1021 00:55:41,000 --> 00:55:45,000 Tada, jei aš slinkti žemyn čia atspausdinti, kad kiekvienas, kuris yra Mather savavališkai, kaip anksčiau, 1022 00:55:45,000 --> 00:55:47,000 bet tai yra įdomi nauja funkcija. 1023 00:55:47,000 --> 00:55:51,000 Šios kodo eilutės yra nauja, ir jie įdiegti kažką čia, 1024 00:55:51,000 --> 00:55:55,000 Byloje, visi dangteliai, ir ji * čia taip pat. 1025 00:55:55,000 --> 00:55:58,000 Leiskite man perkelti tai čia, * čia taip pat. 1026 00:55:58,000 --> 00:56:00,000 >> Ši funkcija dar nematėte anksčiau, fopen, 1027 00:56:00,000 --> 00:56:03,000 bet tai reiškia, kad failą atidaryti, todėl galime peržvelgti jų, 1028 00:56:03,000 --> 00:56:05,000 ir tai yra kažkas, ką mes sugrįšiu ateityje psets, 1029 00:56:05,000 --> 00:56:10,000 bet ši eilutė čia iš esmės atidaro duomenų bazės failą pavadinimu 1030 00:56:10,000 --> 00:56:13,000 ir specialiai atidaro ją taip, kad ji gali daryti tai, ką į jį? 1031 00:56:13,000 --> 00:56:15,000 [Nesigirdi studentas] 1032 00:56:15,000 --> 00:56:19,000 Teisus, todėl "w" tik reiškia, kad jis pasako, kad operacinės sistemos 1033 00:56:19,000 --> 00:56:21,000 atidaryti šį failą taip, kad aš galiu rašyti į jį. 1034 00:56:21,000 --> 00:56:23,000 Aš nenoriu jį perskaityti. Aš nenoriu tiesiog žiūrėti į jį. 1035 00:56:23,000 --> 00:56:26,000 Aš noriu jį pakeisti ir įtraukti elementai gali, 1036 00:56:26,000 --> 00:56:28,000 ir byla bus vadinama duomenų bazės. 1037 00:56:28,000 --> 00:56:30,000 Tai galėtų būti vadinama nieko. 1038 00:56:30,000 --> 00:56:32,000 Tai gali būti database.txt. Tai gali būti db. 1039 00:56:32,000 --> 00:56:37,000 Tai gali būti kaip foo žodis, bet aš savavališkai pavadinimas pasirinktas failo duomenų bazę. 1040 00:56:37,000 --> 00:56:42,000 Tai šiek tiek normalumas patikrinimas, kad mes grįžti labai išsamiai, laikui bėgant, 1041 00:56:42,000 --> 00:56:47,000 jei fp, failo rodyklė, ne vienodą NULL, tai reiškia, kad viskas yra gerai. 1042 00:56:47,000 --> 00:56:51,000 >> Ilga istorija trumpa, funkcijas, pavyzdžiui, fopen, kartais nepavyksta. 1043 00:56:51,000 --> 00:56:53,000 Gal failas neegzistuoja. Gal jūs iš disko vietos. 1044 00:56:53,000 --> 00:56:55,000 Gal jūs neturite teises į tą aplanką, 1045 00:56:55,000 --> 00:56:58,000 fopen grąžina null todėl, jei kažką baisaus neįvyko. 1046 00:56:58,000 --> 00:57:02,000 Ir atvirkščiai, jei fopen negrįžta null viskas yra gerai 1047 00:57:02,000 --> 00:57:04,000 ir aš galiu pradėti rašyti į šį failą. 1048 00:57:04,000 --> 00:57:06,000 Štai naujas triukas. 1049 00:57:06,000 --> 00:57:08,000 Tai yra kilpa, kad manimi iteravimu per kiekvieną mano studentų, 1050 00:57:08,000 --> 00:57:10,000 ir tai atrodo tiek panašus į ką mes padarėme prieš, 1051 00:57:10,000 --> 00:57:15,000 tačiau ši funkcija yra pusbrolis printf vadinamas fprintf failui printf, 1052 00:57:15,000 --> 00:57:18,000 ir pastebėsite, kad jis skiriasi tik 2 būdais. 1053 00:57:18,000 --> 00:57:20,000 Vienas, jis pradeda f vietoj p 1054 00:57:20,000 --> 00:57:23,000 bet tada jos pirmasis argumentas yra, matyt, ką? 1055 00:57:23,000 --> 00:57:25,000 [Mokiniai] failas. >> Tai failas. 1056 00:57:25,000 --> 00:57:30,000 Šis dalykas vadinamas fp, mes galų gale erzinti, išskyrus tai, ką failas rodyklė 1057 00:57:30,000 --> 00:57:35,000 bet dabar fp tiesiog aš atidarau failą, 1058 00:57:35,000 --> 00:57:41,000 fprintf čia sako spausdinti šio vartotojo ID prie bylos, o ne į ekraną. 1059 00:57:41,000 --> 00:57:44,000 Spausdinti vartotojo vardą, prie bylos, o ne į ekraną, 1060 00:57:44,000 --> 00:57:47,000 namas į failą, o ne į ekraną, ir tada žemyn čia, be abejo, 1061 00:57:47,000 --> 00:57:50,000 uždaryti bylą, ir tada žemyn čia nemokamai atminties. 1062 00:57:50,000 --> 00:57:53,000 >> Vienintelis skirtumas tarp šios versijos 2 bei versiją 1 1063 00:57:53,000 --> 00:57:58,000 fopen įvedimas ir šį failą * 1064 00:57:58,000 --> 00:58:01,000 ir ši sąvoka fprintf, tad pažiūrėkime, ką galutinis rezultatas yra. 1065 00:58:01,000 --> 00:58:03,000 Leiskite man eiti į mano terminalo lange. 1066 00:58:03,000 --> 00:58:06,000 Leiskite man paleisti structs2, įveskite. 1067 00:58:06,000 --> 00:58:09,000 Atrodo, kad viskas yra gerai. Leiskite pakartotas 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, įveskite 1070 00:58:19,000 --> 00:58:23,000 Atrodo, kad jis elgėsi tas pats, bet jei aš dabar daryti ls 1071 00:58:23,000 --> 00:58:28,000 pastebėti, kas tai per failas yra čia tarp visų mano kodas, duomenų bazės, 1072 00:58:28,000 --> 00:58:32,000 todėl galime atidaryti, kad gedit duomenų bazės, ir pažvelgti į tai. 1073 00:58:32,000 --> 00:58:34,000 Tai ne failų formatų Sexiest. 1074 00:58:34,000 --> 00:58:38,000 Tai tikrai yra vienas gabalas duomenų perdavimo linija kiekvienoje eilutėje, kiekvienoje eilutėje, 1075 00:58:38,000 --> 00:58:42,000 bet tiems iš jūsų, kurie naudojate "Excel" arba CSV failus, kableliais atskirtos reikšmės, 1076 00:58:42,000 --> 00:58:47,000 Aš tikrai galėtų naudojo fprintf vietoj gal padaryti kažką panašaus į tai 1077 00:58:47,000 --> 00:58:50,000 taip, kad aš iš tikrųjų galėtų sukurti Excel failą ekvivalentas 1078 00:58:50,000 --> 00:58:53,000 atskiriant kableliais, o ne tik naujų linijų. 1079 00:58:53,000 --> 00:58:56,000 >> Šiuo atveju, jei aš vietoj to naudojo kableliais, o ne naujų linijų 1080 00:58:56,000 --> 00:59:01,000 Aš galėtų tiesiog atidaryti šį duomenų bazės failą "Excel", jei aš vietoj jis atrodys taip. 1081 00:59:01,000 --> 00:59:03,000 Trumpai tariant, dabar, kad mes turime teisę kreiptis į failus 1082 00:59:03,000 --> 00:59:07,000 dabar mes galime pradėti išlikusias duomenis, laikant jį aplink diske 1083 00:59:07,000 --> 00:59:10,000 , kad galėtume saugoti informaciją apie vėl ir vėl. 1084 00:59:10,000 --> 00:59:14,000 Pranešimas keletą kitų dalykų, kurie dabar šiek tiek labiau susipažinę. 1085 00:59:14,000 --> 00:59:16,000 Šio C failo viršuje Typedef 1086 00:59:16,000 --> 00:59:21,000 nes norėjome sukurti duomenų tipą, kuris atstovauja žodį, 1087 00:59:21,000 --> 00:59:25,000 todėl šis tipas vadinamas žodis, o viduje Šios struktūros 1088 00:59:25,000 --> 00:59:27,000 tai šiek tiek mėgėjas. 1089 00:59:27,000 --> 00:59:30,000 Kodėl žodis matyt masyvo? 1090 00:59:30,000 --> 00:59:33,000 Kas yra žodis tiesiog intuityviai? 1091 00:59:33,000 --> 00:59:35,000 >> Tai simbolių masyvas. 1092 00:59:35,000 --> 00:59:37,000 Tai simbolių seka, atgal atgal atgal. 1093 00:59:37,000 --> 00:59:41,000 LAIŠKAI didžiosiomis atsitinka, kad mes savavališkai pasakyti didžiausias ilgis 1094 00:59:41,000 --> 00:59:44,000 bet žodyne žodžio, kad mes naudojau scramble. 1095 00:59:44,000 --> 00:59:46,000 Kodėl aš turiu 1? 1096 00:59:46,000 --> 00:59:48,000 Null charakterį. 1097 00:59:48,000 --> 00:59:51,000 Prisiminkite, kai mes padarėme Bananagrams pavyzdį mums reikia ypatingą vertę 1098 00:59:51,000 --> 00:59:55,000 žodžio pabaigoje siekiant stebėti 1099 00:59:55,000 --> 00:59:59,000 kur žodžiai iš tikrųjų pasibaigė, ir kaip problema rinkinys specifikacija sako 1100 00:59:59,000 --> 01:00:03,000 čia mes susieti su tam tikru žodžiu vertė logiška, 1101 01:00:03,000 --> 01:00:05,000 vėliava, taip sakant, true arba false. 1102 01:00:05,000 --> 01:00:09,000 Ar jums rasti šį žodį jau, nes mes suprantame, 1103 01:00:09,000 --> 01:00:13,000 mes tikrai reikia atsiminti kelią ne tik tai, ką žodis yra scramble 1104 01:00:13,000 --> 01:00:15,000 bet ar jus, žmogaus, rado jį 1105 01:00:15,000 --> 01:00:20,000 taip, kad jei jums rasti žodį "" galite ne tik įrašykite, įvesti, įveskite, įveskite 1106 01:00:20,000 --> 01:00:23,000 ir gauti 3 taškus, 3 taškai, 3 taškai, 3 taškai. 1107 01:00:23,000 --> 01:00:26,000 Mes norime, kad būtų galima į juodąjį sąrašą, kad nustatyti bool žodį 1108 01:00:26,000 --> 01:00:29,000 tiesa, jei jūs jau jį radau, ir kad yra, kodėl mes 1109 01:00:29,000 --> 01:00:31,000 aplieti jį šioje struktūroje. 1110 01:00:31,000 --> 01:00:35,000 >> Dabar žemyn čia scramble tai kitas struct vadinamas žodynas. 1111 01:00:35,000 --> 01:00:39,000 Nesant yra žodis Typedef, nes šiuo atveju 1112 01:00:39,000 --> 01:00:43,000 mums reikia įdėti į kapsulę žodyno idėją, 1113 01:00:43,000 --> 01:00:46,000 ir žodyne yra visa krūva žodžių, 1114 01:00:46,000 --> 01:00:49,000 kaip teigiama šioje matricoje, ir kiek iš šių žodžių yra? 1115 01:00:49,000 --> 01:00:51,000 Na, ką šis kintamasis vadinamas dydis sako. 1116 01:00:51,000 --> 01:00:53,000 Bet mes tiesiog reikia vieną žodyną. 1117 01:00:53,000 --> 01:00:55,000 Mums nereikia duomenų tipą, vadinamą žodynas. 1118 01:00:55,000 --> 01:00:58,000 Mes tiesiog reikia vieną iš jų, todėl it turns out, C 1119 01:00:58,000 --> 01:01:03,000 , kad, jei jūs neturite pasakyti Typedef, galite tiesiog pasakyti, struct, tada viduje klamrami 1120 01:01:03,000 --> 01:01:05,000 jūs įtraukėte savo kintamuosius, tada jūs įtraukėte vardą. 1121 01:01:05,000 --> 01:01:09,000 Tai skelbiantis vieną kintamąjį, pavadintą žodyną 1122 01:01:09,000 --> 01:01:11,000 kad atrodo taip. 1123 01:01:11,000 --> 01:01:16,000 Priešingai, šios eilutės yra sukurti daugkartinio naudojimo duomenų struktūra, vadinama žodis 1124 01:01:16,000 --> 01:01:19,000 , kad jūs galite sukurti kelias kopijas, kaip ir mes sukūrėme 1125 01:01:19,000 --> 01:01:22,000 keletą kopijų studentams. 1126 01:01:22,000 --> 01:01:24,000 >> Ką tai galiausiai leis mums daryti? 1127 01:01:24,000 --> 01:01:30,000 Leiskite man grįžti į, tarkim, paprastesnį pavyzdį iš paprastesnių laikais, 1128 01:01:30,000 --> 01:01:34,000 ir leiskite man atverti, tarkim, compare1.c. 1129 01:01:34,000 --> 01:01:38,000 Problema čia yra iš tikrųjų žievelės atgal 1130 01:01:38,000 --> 01:01:41,000 eilutę sluoksnis ir pradėdami vartoti šias mokymo ratus 1131 01:01:41,000 --> 01:01:44,000 , nes paaiškėja, kad eilutę visą šį laiką 1132 01:01:44,000 --> 01:01:47,000 kaip žadėjome 1 savaitę tikrai tik slapyvardį, 1133 01:01:47,000 --> 01:01:51,000 sinonimas iš CS50 bibliotekos kažką, kad atrodo šiek tiek paslaptingas, 1134 01:01:51,000 --> 01:01:53,000 char *, ir mes matėme ši žvaigždė anksčiau. 1135 01:01:53,000 --> 01:01:55,000 Mes matėme byloms. 1136 01:01:55,000 --> 01:01:59,000 >> Leiskite dabar pamatyti, kodėl mes buvo pasislėpę šią detalę tam tikrą laiką dabar. 1137 01:01:59,000 --> 01:02:02,000 Čia yra rinkmena, pavadinta compare1.c, 1138 01:02:02,000 --> 01:02:07,000 ir jis akivaizdžiai prašo, kad vartotojas, 2 eilučių, s ir t, 1139 01:02:07,000 --> 01:02:11,000 ir tada ji bando palyginti šias eilutes lygybės 26 eilutėje, 1140 01:02:11,000 --> 01:02:14,000 ir jei jie nesiskiria, ji sako, "Jūs įvedėte tą patį," 1141 01:02:14,000 --> 01:02:17,000 ir jei jie nėra lygūs ji sako: "Jūs įvedėte skirtingus dalykus." 1142 01:02:17,000 --> 01:02:19,000 Leiskite man eiti į priekį ir paleisti šią programą. 1143 01:02:19,000 --> 01:02:23,000 Leiskite man eiti į savo šaltinio katalogą, compare1. Jis parengė gerai. 1144 01:02:23,000 --> 01:02:25,000 Leiskite man paleisti compare1. 1145 01:02:25,000 --> 01:02:27,000 Aš padidinti, įeiti. 1146 01:02:27,000 --> 01:02:29,000 Ką nors pasakyti. Sveiki. 1147 01:02:29,000 --> 01:02:32,000 Pasakysiu kažką naujo. Sveiki. 1148 01:02:32,000 --> 01:02:34,000 Aš tikrai neturėjo įveskite skirtingus dalykus. 1149 01:02:34,000 --> 01:02:37,000 >> Leiskite man pabandyti šį kartą. Bye bye. 1150 01:02:37,000 --> 01:02:40,000 Tikrai nesiskiria, tai kas čia vyksta? 1151 01:02:40,000 --> 01:02:44,000 Na, tai, kas tikrai yra palyginti atitinka 26? 1152 01:02:44,000 --> 01:02:46,000 [Nesigirdi studentas] 1153 01:02:46,000 --> 01:02:49,000 Taip, kaip paaiškėja,, kad eilutę, duomenų tipas, yra rūšies balto melas. 1154 01:02:49,000 --> 01:02:53,000 Eilutė yra char *, bet kas yra char *? 1155 01:02:53,000 --> 01:02:56,000 Char *, kaip jie sako, yra rodyklė, 1156 01:02:56,000 --> 01:03:00,000 ir žymeklis veiksmingai adresas, 1157 01:03:00,000 --> 01:03:05,000 suma, kurią vietą atmintyje, ir, jei atsitiktų įvedėte žodžio kaip HELLO, 1158 01:03:05,000 --> 01:03:08,000 atšaukti iš ankstesnių diskusijų stygų 1159 01:03:08,000 --> 01:03:16,000 tai kaip žodžio HELLO. 1160 01:03:16,000 --> 01:03:19,000 Atminkite, kad gali būti atstovaujama, kaip HeLLO žodis 1161 01:03:19,000 --> 01:03:22,000 kaip simbolių masyvas, kaip šis 1162 01:03:22,000 --> 01:03:25,000 ir tada su specialiuoju simboliu pabaigoje vadinamas null pobūdį, 1163 01:03:25,000 --> 01:03:27,000 kaip \ žymi. 1164 01:03:27,000 --> 01:03:29,000 , Kas iš tikrųjų yra eilutė? 1165 01:03:29,000 --> 01:03:32,000 Atkreipkite dėmesį, kad tai yra kelis gabaliukus atminties, 1166 01:03:32,000 --> 01:03:36,000 ir iš tiesų, jo pabaigoje yra tik žinoma, kai jums atrodo per visą eilutę 1167 01:03:36,000 --> 01:03:38,000 ieško specialios null pobūdžio. 1168 01:03:38,000 --> 01:03:41,000 Bet jei tai yra iš mano kompiuterio atminties atminties riekė, 1169 01:03:41,000 --> 01:03:44,000 tegul savavališkai pasakyti, kad ši eilutė tiesiog pasisekė, 1170 01:03:44,000 --> 01:03:47,000 ir jis gavo pateikti pačioje pradžioje mano kompiuterio RAM. 1171 01:03:47,000 --> 01:03:54,000 Tai baitų 0, 1, 2, 3, 4, 5, 6 ... 1172 01:03:54,000 --> 01:04:02,000 >> Kai aš sakau kažką panašaus GetString ir aš string s = GetString 1173 01:04:02,000 --> 01:04:04,000 kas iš tikrųjų grąžinami? 1174 01:04:04,000 --> 01:04:08,000 Pastaruosius keletą savaičių, kas tikrai yra saugomi s 1175 01:04:08,000 --> 01:04:13,000 yra ne tai savaime eilutę, tačiau šiuo atveju tai, kas buvo saugomi 1176 01:04:13,000 --> 01:04:18,000 skaičius 0, nes ką GetString iš tiesų 1177 01:04:18,000 --> 01:04:20,000 tai nėra fiziškai grįžti eilutę. 1178 01:04:20,000 --> 01:04:22,000 Kad nėra net tikrai konceptualų jausmą. 1179 01:04:22,000 --> 01:04:24,000 Ką ji daro pelnas yra skaičius. 1180 01:04:24,000 --> 01:04:28,000 Šis skaičius yra HELLO adresas atmintyje, 1181 01:04:28,000 --> 01:04:32,000 ir styginių ai tada, jei mes žievelės atgal šis sluoksnis, styginių nėra tikrai egzistuoja. 1182 01:04:32,000 --> 01:04:35,000 Tai tik supaprastinimas CS50 bibliotekoje. 1183 01:04:35,000 --> 01:04:38,000 >> Tai tikrai yra kažkas vadinamas char *. 1184 01:04:38,000 --> 01:04:41,000 Char turi prasmę, nes tai, ką žodis, kaip HELLO? 1185 01:04:41,000 --> 01:04:44,000 Na, tai simbolių serija, ženklų serija. 1186 01:04:44,000 --> 01:04:47,000 Char * reiškia pobūdžio adresą, 1187 01:04:47,000 --> 01:04:50,000 Taigi, ką tai reiškia grįžti eilutę? 1188 01:04:50,000 --> 01:04:53,000 Gražus, paprastas būdas grąžina eilutę 1189 01:04:53,000 --> 01:04:57,000 o ne bandyti išsiaiškinti, kaip grįžti į 5 ar 6 skirtingų baitų 1190 01:04:57,000 --> 01:05:01,000 leiskite man grįžti prie kurio baito adresą? 1191 01:05:01,000 --> 01:05:03,000 Pirmasis. 1192 01:05:03,000 --> 01:05:06,000 Kitaip tariant, leiskite man duoti jums pobūdį adresą atmintyje. 1193 01:05:06,000 --> 01:05:10,000 Štai ką char * atstovauja, vieną požymį adresas atmintyje. 1194 01:05:10,000 --> 01:05:12,000 Skambinti, kad kintamojo s. 1195 01:05:12,000 --> 01:05:15,000 Parduotuvė s,, kad ypač adresas, kurį aš savavališkai sakė yra 0, 1196 01:05:15,000 --> 01:05:19,000 tik, kad viskas paprasta, bet iš tikrųjų tai paprastai didesnis skaičius. 1197 01:05:19,000 --> 01:05:21,000 >> Palauk. 1198 01:05:21,000 --> 01:05:23,000 Jei jūs tik, kad suteikėte man pirmą simbolį adresą, kaip man žinoti, ką adresas yra 1199 01:05:23,000 --> 01:05:25,000 antrojo pobūdžio, trečia, ketvirta ir penkta? 1200 01:05:25,000 --> 01:05:27,000 [Nesigirdi studentas] 1201 01:05:27,000 --> 01:05:31,000 Jūs tik žinoti, kur eilutės pabaigos pagal šią patogią apgauti, 1202 01:05:31,000 --> 01:05:35,000 todėl, kai jūs naudojate kažką panašaus printf, kas printf tiesiog mano, kaip savo argumentą, 1203 01:05:35,000 --> 01:05:39,000 priminti, kad mes naudojame šį% s vietos rezervavimo ženklą, ir tada jums perduoti 1204 01:05:39,000 --> 01:05:41,000 kintamasis saugoti eilutę. 1205 01:05:41,000 --> 01:05:47,000 Ką jūs tikrai artimųjų tos eilutės pirmasis simbolis adresas. 1206 01:05:47,000 --> 01:05:50,000 Printf tada naudoja linijos ar while cikle gavęs tą adresą, 1207 01:05:50,000 --> 01:05:53,000 pavyzdžiui, 0, todėl leiskite man tai padaryti dabar, 1208 01:05:53,000 --> 01:06:02,000 printf ("% s \ n"); 1209 01:06:02,000 --> 01:06:07,000 Kai aš vadinu printf ("% s \ n" s), ką aš iš tikrųjų teikiant printf su 1210 01:06:07,000 --> 01:06:13,000 s yra pirmasis simbolis adresas, kuris šiame savavališkai atveju yra H. 1211 01:06:13,000 --> 01:06:16,000 >> Kaip printf žinoti, ką tiksliai parodyti ekrane? 1212 01:06:16,000 --> 01:06:19,000 Asmuo, kuris įgyvendino printf įgyvendino while cikle ar už linijos 1213 01:06:19,000 --> 01:06:23,000 sako, kad šis simbolis lygus ypatingą null simbolį? 1214 01:06:23,000 --> 01:06:25,000 Jei ne, jį atspausdinti. Kaip apie šį vieną? 1215 01:06:25,000 --> 01:06:28,000 Jei ne spausdinti, spausdinti, spausdinti, spausdinti. 1216 01:06:28,000 --> 01:06:32,000 O, tai yra ypatingas. Sustabdyti spausdinimą ir grįžti į vartotoją. 1217 01:06:32,000 --> 01:06:35,000 Ir kad tiesiog visa tai buvo daroma po gaubtu, 1218 01:06:35,000 --> 01:06:38,000 ir tai daug virškinti pirmą dieną klasėje, 1219 01:06:38,000 --> 01:06:43,000 bet dabar tai tikrai suprasti viską, statybinis blokas 1220 01:06:43,000 --> 01:06:46,000 kad vyksta viduje mūsų kompiuterio atmintyje, 1221 01:06:46,000 --> 01:06:49,000 ir galiausiai mes erzinti tai ne tik su nedidele pagalba 1222 01:06:49,000 --> 01:06:51,000 iš vieno iš mūsų draugų Stanfordo universitete. 1223 01:06:51,000 --> 01:06:56,000 >> Profesorius Nikas Parlante Stanfordo universitete padarė šį nuostabų vaizdo seką 1224 01:06:56,000 --> 01:06:58,000 iš įvairių skirtingų kalbų, kurios įdiegė 1225 01:06:58,000 --> 01:07:00,000 tai mažai Claymation pobūdis Binky. 1226 01:07:00,000 --> 01:07:03,000 Balso, jūs ketinate išgirsti tik keletą antra uždarą peržiūrą 1227 01:07:03,000 --> 01:07:05,000 Stanfordo profesorius, ir jūs gaunate 1228 01:07:05,000 --> 01:07:07,000 dabar tik 5 ar 6 sekundes šia teise, 1229 01:07:07,000 --> 01:07:09,000 bet tai yra pastaba, dėl kurių mes sudaryti šiandien 1230 01:07:09,000 --> 01:07:11,000 ir pradėti trečiadienį. 1231 01:07:11,000 --> 01:07:15,000 Aš jums pointeris Binky Pramogos su peržiūros. 1232 01:07:15,000 --> 01:07:18,000 [♪ Muzika ♪] [Profesorius Parlante] Ei, Binky. 1233 01:07:18,000 --> 01:07:21,000 Pabusti. Atėjo laikas rodykliniams įdomus. 1234 01:07:21,000 --> 01:07:24,000 [Binky] Kas tai? Sužinokite daugiau apie rodykles? 1235 01:07:24,000 --> 01:07:26,000 Oh, geruolis! 1236 01:07:26,000 --> 01:07:29,000 >> Pamatysiu jus trečiadienį. 1237 01:07:29,000 --> 01:07:32,000 [CS50.TV]