1 00:00:00,000 --> 00:00:02,200 [Powered by Google Translate] [Týždeň 3] 2 00:00:02,200 --> 00:00:03,950 [David J. Malan - Harvard University] 3 00:00:03,950 --> 00:00:07,140 [To je CS50. - CS50.TV] 4 00:00:07,140 --> 00:00:10,720 Dovoľte mi, aby som riadiť nás v smere od miesta, kde sme skončili minule, 5 00:00:10,720 --> 00:00:13,890 ktorý si začínal myslieť, trochu viac ako o syntaxi 6 00:00:13,890 --> 00:00:17,150 a snažil sa vymyslieť niečo menej o všetkých detailov 7 00:00:17,150 --> 00:00:20,630 že má trochu času, aby získalo tak ďaleko, pokiaľ ide o bodkočiarky 8 00:00:20,630 --> 00:00:22,360 a zátvorky a zložené zátvorky, 9 00:00:22,360 --> 00:00:25,630 začať užívať veci trochu na vyššej koncepčnej úrovni 10 00:00:25,630 --> 00:00:28,800 tak, že problémy sa teraz začínajú riešenie v nasledujúcich niekoľkých týždňov 11 00:00:28,800 --> 00:00:32,340 budú zahŕňať oveľa viac do vyšších problémov na úrovni koncepčných 12 00:00:32,340 --> 00:00:36,310 a trochu menej v syntaktickej, ako vám vaše nohy mokré 13 00:00:36,310 --> 00:00:40,090 a vaše špinavé ruky s niektorými z syntaxe z týchto posledných niekoľkých týždňov. 14 00:00:40,090 --> 00:00:43,690 >> Takže pripomenúť, že minulý týždeň sme zaviedli tento pojem poľa. 15 00:00:43,690 --> 00:00:49,320 A pole v angličtine môže byť opísaný ako čo? >> [Nepočuteľné Študent odpoveď] 16 00:00:49,320 --> 00:00:51,710 Je nám ľúto? 17 00:00:51,710 --> 00:00:54,810 Zbierka? >> [Nepočuteľné Študent odpoveď] >> Dobre, dobre. 18 00:00:54,810 --> 00:00:57,820 Zbierka predmetov. Takže sme videli polia v Scratch. 19 00:00:57,820 --> 00:01:01,880 Ak ste náhodou použiť pre PSet 0 jeden z zoznamy Scratch je, že môžete preťahovať veci 20 00:01:01,880 --> 00:01:05,410 ako pomaranče a banány do, súpis druhov, 21 00:01:05,410 --> 00:01:07,100 to je niečo ako to, čo je pole. 22 00:01:07,100 --> 00:01:10,980 A potom technicky, v kontexte skutočného počítača, 23 00:01:10,980 --> 00:01:14,730 pole je jednoducho súvislá kus pamäte. 24 00:01:14,730 --> 00:01:18,590 Inými slovami, máte byte, potom ďalšie byte, potom ďalšie byte, potom ďalšie byte, 25 00:01:18,590 --> 00:01:21,330 a ak ste k tomu tie bytov v obraze, 26 00:01:21,330 --> 00:01:24,510 oni by boli chrbtom k sebe, aby sa chrbtom k sebe. To je to, čo máme na mysli súvislé. 27 00:01:24,510 --> 00:01:26,690 >> Takže je to byte číslo 1, potom 2, potom 3. 28 00:01:26,690 --> 00:01:29,680 To neznamená, že sa tu, tu, tu, tu. 29 00:01:29,680 --> 00:01:33,800 Pole je súvislá kus 0 alebo viac bajtov. 30 00:01:33,800 --> 00:01:36,160 Tak čo sú dobré? 31 00:01:36,160 --> 00:01:40,090 Spomínam si, že sme mali tento druh chcené napríklad vedomostných ukladanie ľudí stupňov v programe 32 00:01:40,090 --> 00:01:42,580 pre výpočet svojej kvíz priemer z nejakého predmetu, 33 00:01:42,580 --> 00:01:46,780 a pripomínajú, že by sme mohli začať písať tento program tým, že deklaruje premenné quiz1. 34 00:01:46,780 --> 00:01:49,550 Potom by sme mohli mať ďalšie premennú nazvanú quiz2. 35 00:01:49,550 --> 00:01:52,030 Ale potom, keď tam boli 3 kvízov v tejto triede, quiz4. 36 00:01:52,030 --> 00:01:55,710 Alebo keby tam bol týždenný kvíz, bolo by to quiz5, quiz6, quiz7. 37 00:01:55,710 --> 00:01:58,520 Takže budete mať všetky tieto premenné deklarované vo vnútri z hlavných 38 00:01:58,520 --> 00:02:00,470 alebo niekde inde v programe, 39 00:02:00,470 --> 00:02:03,870 a problém s týmto prístupom, ľahký aj keď ich stačí skopírovať a vložiť, 40 00:02:03,870 --> 00:02:06,120 je to len veľmi rýchlo stáva nepraktické. 41 00:02:06,120 --> 00:02:09,360 Boh chráň, máte skutočne 30 kvízy alebo 50 kvízy. 42 00:02:09,360 --> 00:02:12,080 Ak je to ako na strednej škole v štýle denného pop kvíz, 43 00:02:12,080 --> 00:02:15,910 stačí len smiešne dlhý zoznam premenných vyhlásenia, 44 00:02:15,910 --> 00:02:17,780 a to len veľmi rýchlo vymkne kontrole. 45 00:02:17,780 --> 00:02:20,820 Je to škaredé, že je ťažké udržať, je to tak oveľa jednoduchšie, aby sa preklep 46 00:02:20,820 --> 00:02:23,910 Ak získate 1 číslo preklep niekde vo vašom programe. 47 00:02:23,910 --> 00:02:26,800 >> Takže sme zaviedli pojem poľa miesto. 48 00:02:26,800 --> 00:02:30,760 A pripomenul, že sme zaviedli tento program tým, že robí niečo také. 49 00:02:30,760 --> 00:02:33,950 Nechaj ma ísť do dnešnej Zdroj 3 adresári pondelok 50 00:02:33,950 --> 00:02:37,160 a otvoriť pole, ktoré sme videli minule. 51 00:02:37,160 --> 00:02:39,940 A aj keď tam bolo zopár nových trikov C tu, 52 00:02:39,940 --> 00:02:41,920 medzi nimi pojem konštanta, 53 00:02:41,920 --> 00:02:47,140 Pripomínam, že sme deklarovali viac plaváky v podstate pomocou tejto syntaxe: 54 00:02:47,140 --> 00:02:51,750 plavák, potom názov premennej, potom sa používa hranatých zátvorkách naozaj prvýkrát, 55 00:02:51,750 --> 00:02:55,450 a to, čo sme urobili vo vnútri týchto hranatých zátvorkách bol skutočne vložiť číslo. 56 00:02:55,450 --> 00:02:59,780 Ale namiesto toho, aby číslo, dal som tento kapitalizovaných slovo, kvízy. 57 00:02:59,780 --> 00:03:03,220 A čo bolo motiváciou pre uvedenie kapitalizovaných slovo, ako kvízy 58 00:03:03,220 --> 00:03:08,170 a potom pomocou riadkovej 17 trik tu skutočne dať, že číslo? 59 00:03:08,170 --> 00:03:11,240 Čo bolo motiváciou tam? Jo. 60 00:03:11,240 --> 00:03:13,360 >> [Nepočuteľné Študent odpoveď] >> Presne tak. 61 00:03:13,360 --> 00:03:16,630 Ak chceme zmeniť túto hodnotu 2, máme len zmeniť v 1 mieste 62 00:03:16,630 --> 00:03:19,680 pretože považujú - ja si ani nepamätám, čo tento program spravil presne, 63 00:03:19,680 --> 00:03:22,040 ale ak ste práve zbierať to vidíte kvízy, kvízy. 64 00:03:22,040 --> 00:03:24,720 Vidíte kvízy, sa tu viac kvízy. 65 00:03:24,720 --> 00:03:28,180 Takže ak by sme nemali túto konštantu, toto použitie ostré definovať, 66 00:03:28,180 --> 00:03:33,320 by sme zadali 2, potom 2, potom 2, potom 2, ktorý je v poriadku. To by bolo rovnako správne. 67 00:03:33,320 --> 00:03:36,220 Ale predpokladám, že budúci rok budeme mať 3 vypočúva v CS50. 68 00:03:36,220 --> 00:03:39,190 Takže mám ísť a aktualizovať kód, musím prekompilovať to, 69 00:03:39,190 --> 00:03:43,820 ale problém je, ak som niečo hlúpeho, ako by som prehliadnuť 1 zmienku o 2 70 00:03:43,820 --> 00:03:46,750 a zabudnúť na konektor v 3, môže celý program veľmi dobre zlomiť. 71 00:03:46,750 --> 00:03:48,720 Takže my sme len koleduje o malér. 72 00:03:48,720 --> 00:03:53,170 >> Takže pojem konštanta je o factoring sa na niektoré časti dát, 73 00:03:53,170 --> 00:03:56,070 či už je to reťazec alebo znak alebo float alebo čokoľvek, 74 00:03:56,070 --> 00:04:00,070 a prehlasuje to 1 miesto tak, že môžete ľahšie zmeniť v budúcnosti. 75 00:04:00,070 --> 00:04:03,660 A je to tiež, úprimne povedané, trochu ľahšie čítať, pretože ak si len myslieť na to teraz, 76 00:04:03,660 --> 00:04:07,840 je to kvízy, alebo by sme mohli dokonca premenovať to niečo ako NUMBER_OF_QUIZZES 77 00:04:07,840 --> 00:04:09,430 alebo niečo viac explicitný. 78 00:04:09,430 --> 00:04:11,830 Kód stačí sa stáva trochu viac zrejmé, že to, čo robí, 79 00:04:11,830 --> 00:04:15,780 a zaujíma vás, trochu menej, aké číslo 2 sa môže stať znamenať. 80 00:04:15,780 --> 00:04:18,920 Takže konštanta nemá nič zásadne s poľami. 81 00:04:18,920 --> 00:04:22,990 Poľa bola zavedená prostredníctvom týchto hranatých zátvorkách. 82 00:04:22,990 --> 00:04:26,610 >> Takže si všimnúť, že v súlade 23 žiadame užívateľov, "Aké boli vaše kvíz výsledky?" 83 00:04:26,610 --> 00:04:31,120 Potom sme len túto slučku, ktorá zrejme požiada užívateľa o svojich tried. Ako? 84 00:04:31,120 --> 00:04:37,460 To opakuje 0-2. A ja hovorím, 2, pretože kvízy vo všetkých veľkých písmenách, je v súčasnej dobe 2. 85 00:04:37,460 --> 00:04:42,310 Tak to opakuje od 0 do 2 a potom vytlačí Kvíz # niečo o niečom, 86 00:04:42,310 --> 00:04:45,830 a potom sa použije GetFloat získať hodnotu od užívateľa. 87 00:04:45,830 --> 00:04:49,050 Takže si toho všimnúť je len iný nový kus syntaxe od poslednej stredu. 88 00:04:49,050 --> 00:04:53,120 Ak chcete uložiť niečo na určitom mieste v tomto poli, 89 00:04:53,120 --> 00:04:55,460 môžete znovu použiť hranaté zátvorky. 90 00:04:55,460 --> 00:04:57,030 >> Takže tam je to trochu dichotómie tu. 91 00:04:57,030 --> 00:04:59,040 Pri prvom použití hranatých zátvoriek 92 00:04:59,040 --> 00:05:02,250 ho použiť na určenie, akú veľkú chcete, polia byť. 93 00:05:02,250 --> 00:05:06,580 Ale to ďalšie súvislosti tu, kde sme opäť použiť tieto hranaté zátvorky 94 00:05:06,580 --> 00:05:10,540 znamená, kde sa v tomto poli chceš dať nejakú hodnotu? 95 00:05:10,540 --> 00:05:13,650 A rozdiel tu možno odvodiť z kontextu. 96 00:05:13,650 --> 00:05:17,130 Všimnite si, máme dátový typ, potom máme názov premennej, 97 00:05:17,130 --> 00:05:20,770 potom máme hranatých zátvorkách s číslom vo vnútri, bodkočiarkou. To je všetko. 98 00:05:20,770 --> 00:05:22,290 Takže to vyhlásenie. 99 00:05:22,290 --> 00:05:28,390 Je to rovnako ako keď sme robili niečo podobné plaváku grade1; float grade2; 100 00:05:28,390 --> 00:05:31,730 ale opäť, to veľmi rýchlo prejde do cesty príliš kopírovať, vkladať, 101 00:05:31,730 --> 00:05:34,260 tak namiesto toho sme len zjednodušil ako také, 102 00:05:34,260 --> 00:05:38,800 čo znamená, že naďalej máme triedy, ktoré môžu byť uložené na držiaku 0, 103 00:05:38,800 --> 00:05:41,760 máme ďalšie triedy, ktorá môže byť uložený na držiaku 1, 104 00:05:41,760 --> 00:05:46,890 ale čo keď som flákať a napríklad môj slučka ide tak ďaleko, - 105 00:05:46,890 --> 00:05:48,740 Napríklad, I, aby to menej alebo rovné, 106 00:05:48,740 --> 00:05:50,620 which recall bol zdrojom predchádzajúce chyby - 107 00:05:50,620 --> 00:05:55,590 čo v praxi znamená, že na nejaké tretie náhodného opakovanie tohto cyklu 108 00:05:55,590 --> 00:06:00,380 Používam držiak 2. Účinne, môže, čo sa stalo tu? Je nám ľúto? 109 00:06:00,380 --> 00:06:02,860 [Študent] to bude nahradená. >> Je to bude nahradená? 110 00:06:02,860 --> 00:06:04,520 Čo by sa vymeniť? 111 00:06:04,520 --> 00:06:10,890 Tento doslova hovorí nahradiť to, čo je na mieste 2 s návratovú hodnotou GetFloat. 112 00:06:10,890 --> 00:06:13,690 Ale problém je, aký veľký je pole v tomto bode v príbehu? 113 00:06:13,690 --> 00:06:17,730 [Nepočuteľné Študent odpoveď] >> Pole je stále len o veľkosti 2 114 00:06:17,730 --> 00:06:22,730 pretože pole, rovnako ako ľubovoľné premenné, bola vyhlásená prvá, pred používali sme ho, 115 00:06:22,730 --> 00:06:27,220 a my sme tu uvedené, pretože to konštanta, ktorá mám 2 stupne, že som dám. 116 00:06:27,220 --> 00:06:29,930 >> Ale pamätajte, že počítačoví odborníci začnite počítať od 0. 117 00:06:29,930 --> 00:06:33,620 Takže prvé miesto v tomto poli je držiak 0. 118 00:06:33,620 --> 00:06:40,210 Ďalšie miesto je 1. Táto vec je niekedy tak trochu príliš ďaleko na stranu. 119 00:06:40,210 --> 00:06:42,870 Takže inými slovami, ak som sa vlastne musel toto pole - 120 00:06:42,870 --> 00:06:46,790 a dovoľte mi, aby som zistil, ako to spolupracuje tu pre nás - 121 00:06:46,790 --> 00:06:52,360 keď mám pole, ktoré som jednoducho vypracovaný takto 122 00:06:52,360 --> 00:06:56,750 a ja som pridelený priestor pre 2 prvky, mohol by som nakresliť to takto v pamäti 123 00:06:56,750 --> 00:06:58,020 ak to veľký biely plátno je. 124 00:06:58,020 --> 00:07:00,920 Je to len RAM mám vo svojom počítači, koncert RAM, 2 giga RAM, čokoľvek, 125 00:07:00,920 --> 00:07:05,400 ale tieto 2 boxy teraz jednotlivo predstavujú plavák, 32 bitov. 126 00:07:05,400 --> 00:07:10,860 Takže keď som dal 1 číslo tu ako 1,0, potom som dal iné číslo tu ako 3,2 127 00:07:10,860 --> 00:07:15,280 ale potom som si držiak 2, to je ako dávať niečo, čo tu. 128 00:07:15,280 --> 00:07:17,820 A ako obraz naznačuje, tam nič nie je. 129 00:07:17,820 --> 00:07:20,450 Je to niečo ako krajina nikoho, pretože som sa nepýtal na operačný systém 130 00:07:20,450 --> 00:07:23,550 aby mi tento tretí kvíz. 131 00:07:23,550 --> 00:07:26,940 Keby som to urobil, chcem ten tretí kvíz, mala som mal Forethought 132 00:07:26,940 --> 00:07:31,700 požiadať operačný systém pre neho tým, že deklaruje kvízy byť nie 2 133 00:07:31,700 --> 00:07:34,210 ale namiesto toho rovnať 3. 134 00:07:34,210 --> 00:07:39,000 >> Takže inými slovami, obraz, ktorý sme efektívne mať po ruke vyzerá tu. 135 00:07:39,000 --> 00:07:42,260 To je opäť krajiny nikoho. Mali by sme sa snažiť písať hodnoty tu. 136 00:07:42,260 --> 00:07:45,300 Ale znova, pretože počítačoví odborníci počítať od 0, 137 00:07:45,300 --> 00:07:49,520 keď hovoríme o tomto mieste v poli, to má byť miesto 0, 138 00:07:49,520 --> 00:07:53,890 toto má byť miesto 1, a to ani neexistuje 139 00:07:53,890 --> 00:07:57,380 pretože sme len požiadal operačný systém pre 2 týchto miestach. 140 00:07:57,380 --> 00:08:00,130 Takže tí z vás s predchádzajúcim programovacím skúseností z iných jazykov 141 00:08:00,130 --> 00:08:04,150 by mohol vedieť, že to nie je vždy prípad s poli alebo veci zvanej vektorov. 142 00:08:04,150 --> 00:08:06,930 Skôr, môžete len držať pridanie a pridávanie a pridaním veci polí, 143 00:08:06,930 --> 00:08:10,720 ktoré, úprimne povedané, mali sme túto možnosť v Scratch, a napriek tomu sa zdá, že dali to tu 144 00:08:10,720 --> 00:08:15,160 pretože s C programovanie je oveľa jasnejšie. 145 00:08:15,160 --> 00:08:17,980 Je to len ty a počítač práve teraz, a počítač je len robiť 146 00:08:17,980 --> 00:08:19,530 čo poviete to urobiť. 147 00:08:19,530 --> 00:08:24,270 Takže ak ste len povedať, že vám 2 plaváky prostredníctvom linky 22 tu, 148 00:08:24,270 --> 00:08:27,640 to je všetko, čo budeš dostať späť z operačného systému: priestor pre 2. 149 00:08:27,640 --> 00:08:34,049 >> Takže stále sú vaše programy bude občas byť buggy s ohľadom na pole. 150 00:08:34,049 --> 00:08:37,520 To je tak nejako k povahe zvieraťa, kedy všetci sú omylní, 151 00:08:37,520 --> 00:08:42,490 a na nejakom mieste, kde bude veľmi pravdepodobne index mimo hranice svojho poľa. 152 00:08:42,490 --> 00:08:45,980 A to je len fantázia spôsob, ako povedať, že si šiel do držiaka niečo 153 00:08:45,980 --> 00:08:49,970 a niečo jednoducho príliš veľké množstvo. Šiel si za hranicami vášho poľa. 154 00:08:49,970 --> 00:08:51,530 Ale naopak teraz je to. 155 00:08:51,530 --> 00:08:54,990 Zvyšok tohto programu naozaj nemá nič zásadne robiť s poľami. 156 00:08:54,990 --> 00:08:58,180 Je to všetko len o nejaké jednoduché aritmetiky pre výpočet priemerov. 157 00:08:58,180 --> 00:09:03,200 Takže máme tu v tomto pre sláčiky tú prvú premenná nazýva sumy, ktoré inicializuje na 0. 158 00:09:03,200 --> 00:09:09,020 Potom sme určiť iteráciou od 0 do 2 znovu a pridáme k tomuto súčtu premennej 159 00:09:09,020 --> 00:09:12,620 tého stupňa, takže držiak 0, potom držiak 1. 160 00:09:12,620 --> 00:09:15,130 A potom, ako by ste to v základnej škole pre výpočet priemeru, 161 00:09:15,130 --> 00:09:19,420 sme jednoducho vziať túto sumu, rozdeliť ju na celkovom počte kvízov, 162 00:09:19,420 --> 00:09:22,520 a potom pre istotu zavoláme funkciu tu nazýva koleso. 163 00:09:22,520 --> 00:09:28,580 >> Teraz, rovnako ako stranou, čo je vysporiadať sa s týmto zátvorkách int na linke 34? 164 00:09:28,580 --> 00:09:31,730 To by mohlo prísť už v bode, sa naozaj hovoril o tom oficiálne tu, 165 00:09:31,730 --> 00:09:35,210 ale čo je to int v parens pravdepodobne robiť? >> [Nepočuteľné Študent odpoveď] 166 00:09:35,210 --> 00:09:38,500 Jo, to sa odkazuje na liatie alebo obsadiť, 167 00:09:38,500 --> 00:09:41,690 čo znamená, že pri 1 dátový typ a prevod do iného. 168 00:09:41,690 --> 00:09:45,400 Môžete to urobiť so všetkými dátovými typmi, pretože niekedy, že by bolo trochu divné. 169 00:09:45,400 --> 00:09:49,640 Avšak v tomto prípade, ak je návrat hodnota kola je plavák 170 00:09:49,640 --> 00:09:53,880 pretože, koniec koncov, beriem plavák a delením číslom ako 2, 171 00:09:53,880 --> 00:09:55,840 Idem naspäť float. 172 00:09:55,840 --> 00:10:00,760 Ale základnej škole ľudia nemajú naozaj rád vedel, že ich priemer bol 93,4 173 00:10:00,760 --> 00:10:04,420 pretože si uvedomia, že sú niekedy tak blízko, že 95 zaokrúhlenie bodu. 174 00:10:04,420 --> 00:10:09,540 >> Takže chceme namiesto toho používať int zaokrúhliť na najbližší každého int, 175 00:10:09,540 --> 00:10:12,730 ktorý je v tomto prípade bude 94 žiadnom okamihu po ňom. 176 00:10:12,730 --> 00:10:14,530 Takže je to len trochu matematický trik. 177 00:10:14,530 --> 00:10:17,570 A vrátime sa na tento pojem odlievanie, pretože to bude mať dôsledky, 178 00:10:17,570 --> 00:10:21,640 ak ste objavili už na problém nastaviť 2. 179 00:10:21,640 --> 00:10:25,210 Takže pole potom môžete myslieť - to bude, aby som úsmev po celý deň. 180 00:10:25,210 --> 00:10:27,830 Vyzerá to, že to, ak si nakresliť obrázok toho, 181 00:10:27,830 --> 00:10:31,460 ale kľúčové je, že veľkosť je vybrať aj vy 182 00:10:31,460 --> 00:10:34,050 keď si ich vyžiada od operačného systému. 183 00:10:34,050 --> 00:10:39,460 Akékoľvek otázky, potom na poli? Jo. 184 00:10:39,460 --> 00:10:47,080 [Nepočuteľné Študent otázka] 185 00:10:47,080 --> 00:10:49,310 Ah, dobrá otázka. 186 00:10:49,310 --> 00:10:53,150 Otázkou je, čo sa stane s nulovou 0 v poli? To neexistuje v tejto súvislosti. 187 00:10:53,150 --> 00:10:57,430 To existuje len v rámci reťazca, ktoré sa chystáme prísť za chvíľu. 188 00:10:57,430 --> 00:11:02,300 Ale pre pole, ako v tomto prípade, všetko, čo dostanete, je to, čo žiadate operačný systém pre. 189 00:11:02,300 --> 00:11:04,050 >> A ako stranou, inak to byť jasné, 190 00:11:04,050 --> 00:11:07,030 Stále hovoríte, požiadať operačný systém, opýtajte sa operačný systém. 191 00:11:07,030 --> 00:11:10,090 Operačný systém, ako asi viete, je Mac OS, Windows, Linux. 192 00:11:10,090 --> 00:11:13,560 Keď voláte funkcie, ako je GetFloat 193 00:11:13,560 --> 00:11:19,280 alebo ste deklarovaní premenných, ako je stupňov, 194 00:11:19,280 --> 00:11:23,200 na konci dňa ste skutočne žiadajú niekoho iného, ​​aby vám, že pamäť 195 00:11:23,200 --> 00:11:25,940 pretože my ako ašpirujúci programátorov 196 00:11:25,940 --> 00:11:28,800 nemám potuchy, ako sa vlastne dostať fyzický prístup k pamäti. 197 00:11:28,800 --> 00:11:31,100 Ale niekto robí: operačný systém. 198 00:11:31,100 --> 00:11:36,630 Takže okrem prezentácie nás s peknými ikonami a menu a zložiek a podobné 199 00:11:36,630 --> 00:11:39,050 , Ktoré vidíte na ploche, či už Mac alebo PC, 200 00:11:39,050 --> 00:11:42,240 operačné systémy tiež urobiť nízkoúrovňové svetské veci, 201 00:11:42,240 --> 00:11:44,680 vysoko technické veci na starostlivosť o gigabyte 202 00:11:44,680 --> 00:11:48,780 alebo 2 GB pamäte, že máte, riadenie CPU, ktoré máte, a tak ďalej. 203 00:11:48,780 --> 00:11:50,170 Takže keď píšete kód, 204 00:11:50,170 --> 00:11:53,900 ste naozaj hákovanie do svojho operačného systému v tomto zmysle. 205 00:11:53,900 --> 00:11:55,720 Budem musieť minimalizovať že. Dobrá. 206 00:11:55,720 --> 00:11:59,980 >> Ostatné otázky týkajúce sa polí? 207 00:12:00,330 --> 00:12:02,520 Nie? Dobre. 208 00:12:02,520 --> 00:12:06,680 Takže prechod prirodzene z polí je skutočne téma, ktorá je trochu povedomý. 209 00:12:06,680 --> 00:12:09,570 A pozreli sme sa niekedy tak krátko v tejto poslednej dobe príliš. 210 00:12:09,570 --> 00:12:12,500 To bol príklad reťazec od stredy. 211 00:12:12,500 --> 00:12:15,060 Tento reťazec príklad bol veľmi jednoduchý program, 212 00:12:15,060 --> 00:12:18,120 a ja som vlastne zjednodušený ju pár riadkov pre dnešné účely. 213 00:12:18,120 --> 00:12:22,680 Všetko, čo to robí v súlade 19 je dostať reťazec od užívateľa, uloží ju do premennej volal s 214 00:12:22,680 --> 00:12:28,670 Potom v riadku 22 dopredu, že je zrejme tlače, že reťazec 1 znak na riadku. 215 00:12:28,670 --> 00:12:30,730 Ale ako sa to robí toto? 216 00:12:30,730 --> 00:12:33,350 Sme deklarovať premennú i, nastavením rovná 0, 217 00:12:33,350 --> 00:12:35,770 a to sa stáva starý zvyk teraz. 218 00:12:35,770 --> 00:12:39,270 Sme nevideli to až v stredu, ale môžete trochu vyvodiť z jeho názvu 219 00:12:39,270 --> 00:12:44,610 strlen len vráti, čo keď rovnako s? Dĺžka reťazca. 220 00:12:44,610 --> 00:12:47,940 Takže keď som odovzdať reťazec, quote-koniec citátu DAVID, 221 00:12:47,940 --> 00:12:51,810 to snáď vráti na mňa číslo 5 pretože DAVID. 222 00:12:51,810 --> 00:12:55,600 Tak to je jeho cieľom v živote je, aby sa reťazec, či už pevný kódované vami 223 00:12:55,600 --> 00:12:58,840 alebo v tomto prípade zapojený ako premenné, ako tvrdenie, 224 00:12:58,840 --> 00:13:01,980 a to vyrieši aká je dĺžka tohto reťazca je. 225 00:13:01,980 --> 00:13:06,470 >> Tak tu sme si požičiavať nejaký zápis z predchádzajúceho príkladu kvízu. 226 00:13:06,470 --> 00:13:09,390 To nemá nič spoločné s plavákmi, nemá nič spoločné s kvízy, 227 00:13:09,390 --> 00:13:13,100 ale ukazuje sa, že malá lož sme sa vám hovorím od týždňa 1 228 00:13:13,100 --> 00:13:16,330 je to, že reťazec v skutočnosti neexistuje v C. 229 00:13:16,330 --> 00:13:20,230 Reťazec na konci dňa je v skutočnosti len pole. 230 00:13:20,230 --> 00:13:25,140 Je to pole bajtov, takže byte, byte, byte, byte, ktorý odvolanie je len 8 bitov, 231 00:13:25,140 --> 00:13:28,130 takže kus pamäte, kus pamäte, kus pamäte, kus pamäte. 232 00:13:28,130 --> 00:13:31,210 A prostriedky, ktoré je realizované reťazec 233 00:13:31,210 --> 00:13:33,070 je tým, že prvý znak tu, 234 00:13:33,070 --> 00:13:37,470 potom je tu, potom tu, potom tu, chrbtom k sebe, aby späť do pamäte počítača. 235 00:13:37,470 --> 00:13:42,160 Takže ak by ste chceli, aby objasnila slovo ako HELLO, by ste dal 1 znak H, 236 00:13:42,160 --> 00:13:48,240 potom E, potom L potom L, potom O - 5 znakov celkom - niekde v pamäti RAM počítača. 237 00:13:48,240 --> 00:13:52,080 Ale kľúč detail tu je, že budeš chrbtom k sebe k sebe na chrbát, 238 00:13:52,080 --> 00:13:54,200 priamo vedľa seba. 239 00:13:54,200 --> 00:13:58,820 When keď hovorím, že s [i], čo sa v angličtine je to mi dáva? 240 00:14:01,240 --> 00:14:04,550 Čo s [i] predstavujú v tomto prípade? Jo. 241 00:14:04,550 --> 00:14:07,800 >> [Študent] i-tej znak v reťazci. Presne >>. Tého znaku v reťazci. 242 00:14:07,800 --> 00:14:12,260 Teraz, aj sa chystá začať v 0 podľa môjho pre sláčiky tu, 243 00:14:12,260 --> 00:14:14,850 ale to je dobre, pretože všetko začína počítať od 0. 244 00:14:14,850 --> 00:14:19,160 Takže s [0] bude reprezentovať písmeno H v slove, ako HELLO, 245 00:14:19,160 --> 00:14:24,530 s [1] bude reprezentovať list ako E v slove, ako HELLO, a tak ďalej. 246 00:14:24,530 --> 00:14:27,130 A čo sa zdá, že sa robí na každej iterácii tohto cyklu 247 00:14:27,130 --> 00:14:32,780 je dočasne ukladanie Ith znak do premennej s názvom c, čo je len char, 248 00:14:32,780 --> 00:14:35,010 a potom sme vytlačení c 249 00:14:35,010 --> 00:14:37,620 tak, že na konci dňa, čo tento program robí je nasledovné. 250 00:14:37,620 --> 00:14:42,900 Ak pôjdem do zdrojového adresára a ja sa string1 a idem do toho a spustiť string1, 251 00:14:42,900 --> 00:14:51,920 a potom som zadajte slovo ako HELLO, Enter, všetko, čo robí, je vytlačiť 1 znak v čase. 252 00:14:51,920 --> 00:14:54,010 >> Takže je tu príležitosť pre upresnenie tu. 253 00:14:54,010 --> 00:14:58,150 Som trochu robiť viac práce, aj keď je to viac jasné, možno to tak, ako je potrebné. 254 00:14:58,150 --> 00:15:03,270 Which riadok kódu tu môžem asi zahodiť úplne? Jo. 255 00:15:03,270 --> 00:15:08,290 Linka 24. V súlade 24 som deklarovaní premennej c 256 00:15:08,290 --> 00:15:14,320 Ja ukladanie Ith charakter je v tom, ale potom som pomocou c tu. 257 00:15:14,320 --> 00:15:20,160 Takže som pomocou c, tak mám pocit, že nemôže len tak hodiť linka 24 od. 258 00:15:20,160 --> 00:15:23,850 [Nepočuteľné Študent komentár] >> Presne tak. 259 00:15:23,850 --> 00:15:26,240 Takže keď príde na rozhovor o návrhu programov, 260 00:15:26,240 --> 00:15:30,740 oznámenia tohto mierne zjednodušenie kódu, ktorý je rovnako čitateľné, 261 00:15:30,740 --> 00:15:34,680 ale uvedomiť, že to je len premenná, jej dátový typ je pole, 262 00:15:34,680 --> 00:15:38,610 tak s [i] je len tak, aby okamžite vrátiť k vám i-teho znaku v tomto reťazci. 263 00:15:38,610 --> 00:15:40,620 A ak budete chcieť vytlačiť, je to v poriadku. 264 00:15:40,620 --> 00:15:43,680 Musíte len použiť% c, pretože nie ste tlače reťazec, 265 00:15:43,680 --> 00:15:48,520 tlačíte znak v reťazci, a to tiež má vplyv na tlač Ith charakter. 266 00:15:48,520 --> 00:15:51,390 A pripomenúť jediný rozdiel naozaj z minulého týždňa s pomocou printf 267 00:15:51,390 --> 00:15:54,220 je to, že zatiaľ čo v minulosti týždňov budeme robiť niečo super jednoduchý 268 00:15:54,220 --> 00:15:58,510 ako% s zástupný potom názov reťazca tu, 269 00:15:58,510 --> 00:16:01,190 Teraz sme potápanie v trochu hlbšie pod pokrievku a povedal, 270 00:16:01,190 --> 00:16:06,090 netlačia reťazec, vytlačí jeden znak v ňom. 271 00:16:06,090 --> 00:16:10,570 >> Takže, čo môžeme urobiť niečo trochu iného tu, pretože je tu ešte 1 - nie je chyba 272 00:16:10,570 --> 00:16:14,090 pretože tento program je v poriadku, ale ja robím niečo hlúpeho 273 00:16:14,090 --> 00:16:16,810 že som sa zmienil krátko v stredu. 274 00:16:16,810 --> 00:16:22,680 Ale spomínal, ako by daný program design sa ešte ďalej vylepšený? Jo. 275 00:16:22,680 --> 00:16:28,280 [Nepočuteľné Študent odpoveď] >> Oh, dobre. 276 00:16:28,280 --> 00:16:32,120 Takže pripomenúť, že sme zaviedli druhý s názvom premennej n posledný čas, 277 00:16:32,120 --> 00:16:34,850 ktorý sa zdá byť v rozpore sami, pretože môj cieľ pred sekundou 278 00:16:34,850 --> 00:16:37,380 bolo len vyhodiť premenné ako zbytočné, 279 00:16:37,380 --> 00:16:40,700 ale pripomínajú, že v stredu sme skutočne urobili. 280 00:16:40,700 --> 00:16:46,170 Zmenil som pre sláčiky skutočne mať čiarku tu, potom n = strlen, 281 00:16:46,170 --> 00:16:52,120 a potom sem som aj 00:16:57,660 Čo je základný zisk, že som dosiahnuť zmenou mojej inicializáciu tohto 283 00:16:57,660 --> 00:17:01,590 a môj stav sa teraz? >> [Nepočuteľné Študent odpoveď] >> Presne tak. 284 00:17:01,590 --> 00:17:06,170 Nie som pripomína strlen znova a znova a znova, pretože pripomenúť, ako pre slučky prác. 285 00:17:06,170 --> 00:17:08,790 Aj keď sa začnú sa dostať zložitejšie vyzerajúce, 286 00:17:08,790 --> 00:17:12,480 Pripomínam, že tá vec pred prvou bodkočiarkou je inicializácia, ktorý sa stane raz. 287 00:17:12,480 --> 00:17:14,359 Podmienkou však je uprostred, 288 00:17:14,359 --> 00:17:17,710 a to dostane skontrolovať zakaždým, keď idete cez slučku. 289 00:17:17,710 --> 00:17:22,420 >> Takže je to trochu hlúpe sa pýtať, zapnite počítač rovnakú otázku znovu a znovu - 290 00:17:22,420 --> 00:17:25,920 Aký je dĺžka HELLO? What to dĺžka HELLO? What to dĺžka HELLO? - 291 00:17:25,920 --> 00:17:29,740 pretože, ako uvidíme dnes a v stredu, to je určite nejaký čas trvať, 292 00:17:29,740 --> 00:17:34,320 a to nie je moc dobré využitie času, pretože prísť na dĺžku reťazca 293 00:17:34,320 --> 00:17:37,030 vlastne trvá trochu úsilia. 294 00:17:37,030 --> 00:17:39,760 To nie je okamžitý, ako je tomu v niektorých jazykoch. 295 00:17:39,760 --> 00:17:43,920 Takže toto mení na n, cena platím, je to, čo? 296 00:17:43,920 --> 00:17:45,640 Sme svedkami kompromis tu. 297 00:17:45,640 --> 00:17:49,460 Aj môžete ušetriť čas tým, že žiada rovnakú zatratenou otázku znova a znova, 298 00:17:49,460 --> 00:17:51,740 ale to bude stáť mi niečo, čo je to, čo? 299 00:17:51,740 --> 00:17:55,050 >> [Študent] Stratíte určité množstvo pamäte. Presne >>. Bude to ma stálo nejaké pamäte. 300 00:17:55,050 --> 00:17:56,670 Takže v tomto prípade to stojí ma, čo? 301 00:17:56,670 --> 00:18:01,530 Ďalších 32 bitov, pretože n je len int, ako vyplýva z slovom int tu. 302 00:18:01,530 --> 00:18:03,300 Ale je to v poriadku? 303 00:18:03,300 --> 00:18:05,800 Úprimne povedané, to je asi v poriadku, pretože ak si myslíte, o tom, 304 00:18:05,800 --> 00:18:09,030 čím dlhší je reťazec, tým viac času budem sa plytvaniu 305 00:18:09,030 --> 00:18:11,920 pretože strlen bude zavolaný znovu a znovu a znovu 306 00:18:11,920 --> 00:18:13,520 pre každé iteráciu slučky. 307 00:18:13,520 --> 00:18:18,070 A v týchto dňoch, môj Mac má 2 giga RAM, v týchto dňoch 4 giga RAM niekedy. 308 00:18:18,070 --> 00:18:22,420 Myslím, že môžem dovoliť 4 týchto bytov, aby skutočne veci urýchliť. 309 00:18:22,420 --> 00:18:26,590 Ale to bude trade-off a témy skutočne v programovaní a vo vede o počítačoch 310 00:18:26,590 --> 00:18:28,320 sa nikdy naozaj dostať nič zadarmo. 311 00:18:28,320 --> 00:18:32,880 Ak chcete niečo zlepšiť tu, budete musieť zaplatiť za to v druhej ruke nejako. 312 00:18:32,880 --> 00:18:35,880 Priestor v závislosti na čase je v tomto prípade. 313 00:18:35,880 --> 00:18:40,700 >> Takže to bolo všetko vedie k niečomu kryptické ako je tento, 314 00:18:40,700 --> 00:18:44,070 ktoré, ako ste si pravdepodobne prišiel teraz, vlastne hovorí? 315 00:18:44,070 --> 00:18:47,420 [Nepočuteľné Študent odpoveď] >> Jo, tak to je, Uistite sa, že piť svoju Ovaltine, 316 00:18:47,420 --> 00:18:52,490 vlastne pomocou algoritmu s názvom ROT13, ROT 1-3, 317 00:18:52,490 --> 00:18:55,500 čo jednoducho znamená otočiť všetky písmená 13 miest, 318 00:18:55,500 --> 00:18:58,720 čo znamená, že sa a pridajte 13 k nemu a ísť bodka, bodka, bodka 319 00:18:58,720 --> 00:19:04,640 až do 13. listu preč, urobiť to isté pre B a C a pre D a tak ďalej. 320 00:19:04,640 --> 00:19:10,850 A ak sme skutočne zmeniť toto sa tu pomocou posun 13 miest, 321 00:19:10,850 --> 00:19:14,580 dostaneme späť na to málo, čo Ralphie mal, čo bolo, Uistite sa, že piť svoju Ovaltine. 322 00:19:14,580 --> 00:19:18,160 Ale teraz k problému nastavenie 2, v štandardnej edícii najmenej, 323 00:19:18,160 --> 00:19:21,680 Musíte druhu sa tento šifrovaním sami, 324 00:19:21,680 --> 00:19:25,990 a musíme nejako prijať na vstupe, ako je tento, a to zašifrovať alebo dešifrovať ju. 325 00:19:25,990 --> 00:19:29,850 >> Tak ktorý z týchto základov druhu vedie nás k tejto príležitosti? 326 00:19:29,850 --> 00:19:32,650 Poďme sa pozrieť na túto tretiu príklad. 327 00:19:32,650 --> 00:19:38,430 Po prvé, je to tzv ASCII. Čo ASCII odkazujú späť na? 328 00:19:38,430 --> 00:19:40,460 Americký štandardný kód pre výmenu informácií, 329 00:19:40,460 --> 00:19:43,850 čo je naozaj dlhá cesta, ako povedať, čo? Čo je to ASCII? 330 00:19:43,850 --> 00:19:47,890 [Nepočuteľné Študent odpoveď] >> Čo je to? >> [Študent] znakov. >> Mapa znakov. 331 00:19:47,890 --> 00:19:51,390 Je to len mapuje čísla listy, pretože svet má štandardizovaný 332 00:19:51,390 --> 00:19:55,380 aká čísla budú predstavovať čo písmená tak, že každý z nás môže použiť počítača 333 00:19:55,380 --> 00:19:59,340 a naše programy všade sú len kompatibilné, pokiaľ ide o vytlačenie veci na obrazovke. 334 00:19:59,340 --> 00:20:04,680 Takže pripomenúť, že 65 sa stane zastupovať, 97 sa stane predstavujú malé písmená. 335 00:20:04,680 --> 00:20:08,510 A tak tento jednoduchý program tu ASCII je využívanie tejto skutočnosti - 336 00:20:08,510 --> 00:20:12,770 že svet vie, že kapitál je 65 - a je to práve tlač mapovanie. 337 00:20:12,770 --> 00:20:16,320 >> Takže ako sme sa ponoriť do tohto kódu, dovoľte mi, aby som namiesto toho otvoriť okno terminálu. 338 00:20:16,320 --> 00:20:21,550 Nechaj ma ísť ďalej a robiť ASCII, a potom si to len spustiť túto vec len pokaziť výstup. 339 00:20:21,550 --> 00:20:25,960 A to jednoducho robí toto: naozaj veľký graf, ktorý práve mi hovorí, že všetky rôzne kódy 340 00:20:25,960 --> 00:20:27,950 pre všetkých rôznych písmen. 341 00:20:27,950 --> 00:20:32,100 Takže super jednoduchý program, ale nemal som na pevný kód týchto 52 riadkov výstupu: 342 00:20:32,100 --> 00:20:34,860 26 veľká, 26 malá. 343 00:20:34,860 --> 00:20:37,790 Namiesto toho som to urobil programovo s pár slučiek. 344 00:20:37,790 --> 00:20:39,720 Všimnite si, čo som urobil tu. 345 00:20:39,720 --> 00:20:44,790 Aj zopakoval z i je 65 až na 65 + 26, pretože som chcel vytlačiť 26 listov 346 00:20:44,790 --> 00:20:49,860 v anglickej abecede, i + + na každej iterácii, a teraz nevšimol znovu. 347 00:20:49,860 --> 00:20:52,540 Je to opakovanie nášho priateľa obsadiť 348 00:20:52,540 --> 00:20:54,620 kedy si previesť 1 dátového typu na iný 349 00:20:54,620 --> 00:20:57,480 pretože to, čo chcem robiť v tomto konkrétnom programe? 350 00:20:57,480 --> 00:21:02,650 Chcem počítať numericky, pretože to je, ako som vyrástol počítanie - 65, 66, 67, a tak ďalej - 351 00:21:02,650 --> 00:21:04,420 ale ja nechcem tlačiť iba čísla. 352 00:21:04,420 --> 00:21:08,030 Chcem vytlačiť list nasledovaný číslom. 353 00:21:08,030 --> 00:21:18,640 Chcem vytlačiť: číslo, B: číslo, ale ja si to s rovnakým presným premenné. 354 00:21:18,640 --> 00:21:21,630 Tak som vytlačiť% c ako zástupný znak pre jeden znak, 355 00:21:21,630 --> 00:21:25,080 % D ako zástupný znak pre číslicu alebo číslo. 356 00:21:25,080 --> 00:21:27,750 Tak čo mám pripojiť na tie 2 zástupné symboly? 357 00:21:27,750 --> 00:21:33,960 Prvýkrát som plug in charakteru ekvivalent i, a potom som vytlačiť aj sám. 358 00:21:33,960 --> 00:21:36,400 >> Takže si toho všimnúť aj jednoducho funguje. 359 00:21:36,400 --> 00:21:39,320 Rovnako ako som si cast z plaváku na int 360 00:21:39,320 --> 00:21:41,750 aby šiel z reálne číslo na celé číslo, 361 00:21:41,750 --> 00:21:46,100 tu môže ísť z int na char, ktorý je trochu divný - 362 00:21:46,100 --> 00:21:48,680 nie je úplne mapovať na reálnom svete - ale v počítači 363 00:21:48,680 --> 00:21:51,140 char je len číslo pod kapotou, 364 00:21:51,140 --> 00:21:53,590 takže sme ich niekedy tak explicitné tu k počítaču, hovorí, 365 00:21:53,590 --> 00:21:58,920 printf, vytlačiť nie aj ako 65, vytlačiť ju ako jej číselný ekvivalent. 366 00:21:58,920 --> 00:22:02,110 A ukázalo sa, že som technicky ani potrebovať. 367 00:22:02,110 --> 00:22:05,020 To, čo som robil pred chvíľou je výslovne odlievanie 368 00:22:05,020 --> 00:22:08,760 zadaním, čo dátový typ chcem ísť od a do. 369 00:22:08,760 --> 00:22:11,840 Ale si, že som už tento zástupný% c 370 00:22:11,840 --> 00:22:14,930 a tento druhý% c symbol tu. 371 00:22:14,930 --> 00:22:18,880 Aj keď to nie je int, počítač si uvedomuje, že char, 372 00:22:18,880 --> 00:22:21,080 je to len int pod kapotou. 373 00:22:21,080 --> 00:22:25,100 >> Takže keď som vlastne prekompilovať to a znova spustite ASCII programu, 374 00:22:25,100 --> 00:22:31,210 všimnete, že stále len pracuje, pretože počítač si uvedomuje, že je táto korešpondencia. 375 00:22:31,210 --> 00:22:34,870 Teraz je oveľa dôležitejšie robiť explicitné obsadenie vo svete pláva ints 376 00:22:34,870 --> 00:22:37,460 pretože tam ste vlastne robiť vypočítané rozhodnutia: 377 00:22:37,460 --> 00:22:40,140 vyhadzovať všetko za desatinnou čiarkou. 378 00:22:40,140 --> 00:22:44,990 Tu neexistuje nič, čo vyhodiť, pretože postava je len číslo, 379 00:22:44,990 --> 00:22:48,220 a reťazec je len pole znakov. 380 00:22:48,220 --> 00:22:52,530 Takže keď príde čas na realizáciu nejaké šifrovanie alebo dešifrovanie, 381 00:22:52,530 --> 00:22:56,770 Ako je možné, že skutočne môžeme preložiť niečo ako toto nezmysel, 382 00:22:56,770 --> 00:22:58,670 Uistite sa, že piť svoju Ovaltine? 383 00:22:58,670 --> 00:23:02,700 Čo keď vieme teraz - poďme vziať ako predpoklad - že kľúč, 384 00:23:02,700 --> 00:23:08,010 číslo, ktoré sme rotujúce všetkých týchto písmenami, je číslo 13? 385 00:23:08,010 --> 00:23:11,800 Tak sme išli od písmena B celú cestu do ø na začiatku vety, 386 00:23:11,800 --> 00:23:14,710 Uistite sa, že piť svoju Ovaltine, pretože keď to urobím B 387 00:23:14,710 --> 00:23:19,600 a potom idem C, D, E, F, G, H, I, J, K, L, M, N, O, 388 00:23:19,600 --> 00:23:23,760 to je dôvod, prečo šifrovanie písmenom B sa O 389 00:23:23,760 --> 00:23:26,570 pretože som práve pridali 13 k nemu. 390 00:23:26,570 --> 00:23:33,460 >> Takže ak chcem dešifrovať to, som v podstate brať O a potom odpočítať 13 od nej. 391 00:23:33,460 --> 00:23:36,880 Alebo, úprimne povedané, pretože tam je 26 písmen v abecede, je to úžasne symetrická, 392 00:23:36,880 --> 00:23:41,260 môžeme tiež len pridať 13 a dostaneme späť do písmena B. 393 00:23:41,260 --> 00:23:44,290 Ale ako sa vám ísť o vykonávaní niečo také v Caesar 394 00:23:44,290 --> 00:23:46,600 alebo naozaj manipuláciu reťazca všeobecne? 395 00:23:46,600 --> 00:23:51,380 Ak písmeno B je to, čo číslo? 396 00:23:51,380 --> 00:23:55,290 Čo je to písmeno B? Takže je to 66, že jo? 397 00:23:55,290 --> 00:23:59,220 Takže v prípade, že list je 65 a písmeno B je 66, 398 00:23:59,220 --> 00:24:03,940 tak 66, všetko, čo musíte urobiť, je pridať 13 k nemu, a to mi dáva 79. 399 00:24:03,940 --> 00:24:09,150 A keď ideme do našej malej ťahák, 79 naozaj mapy na O. 400 00:24:09,150 --> 00:24:11,290 >> Ale je tu trochu rohového prípadu tu. 401 00:24:11,290 --> 00:24:15,170 Čo je, povedzme, písmeno Z? 402 00:24:15,170 --> 00:24:20,180 Ak sa nám to 66 + 25 dostať celú cestu až na koniec abecedy, sme na 91. 403 00:24:20,180 --> 00:24:24,520 91 + 13 mi dáva 104, a hádajte čo? 404 00:24:24,520 --> 00:24:29,200 104 nie je rovná veľké písmeno. 405 00:24:29,200 --> 00:24:31,610 Vráťme sa do malého ťahák tu. 406 00:24:31,610 --> 00:24:38,070 Keby som opakovanie tohto programu v spotrebiče, oznámenia, že 104, keď som sa vrátiť do okna terminálu, 407 00:24:38,070 --> 00:24:41,800 104 je zrejme malá h 408 00:24:41,800 --> 00:24:46,400 Takže potrebujeme niektoré kľúčové trik tu, aby sa ubezpečil, že keď začneme na Z 409 00:24:46,400 --> 00:24:50,260 a pridáme 13 k nej nechceme len udržať zotrvával na väčšie a väčšie čísla. 410 00:24:50,260 --> 00:24:52,600 Čo skutočne chceme robiť? 411 00:24:52,600 --> 00:24:54,570 Ak chcete obal okolo. 412 00:24:54,570 --> 00:25:00,250 >> Tak to dopadá, ako ste videli asi v sekcii teraz alebo v probléme nastavenej spec sám 413 00:25:00,250 --> 00:25:05,730 si uvedomil, že je to iný operátor v C, ktorý je tiež znak percenta, 414 00:25:05,730 --> 00:25:11,020 ale vzhľadom k tomu, sme použili% tu zadať zástupný symbol, 415 00:25:11,020 --> 00:25:15,420 viem, že najmä pre problémové sady 2, tam je tiež niečo ako toto: 416 00:25:15,420 --> 00:25:18,990 int x = y% z 417 00:25:18,990 --> 00:25:22,770 Dovoľte mi, aby som prezentovať to ako veľmi všeobecnej podobe tohto. 418 00:25:22,770 --> 00:25:25,580 Percento znamená to, čo v programovacom jazyku? >> [Študent] Modulo. 419 00:25:25,580 --> 00:25:28,790 Modulo, ktorá je ozdobný spôsob, ako hovoriť zvyšok. 420 00:25:28,790 --> 00:25:31,620 Aj keď je tam mierne rozdiel s definíciou tam, 421 00:25:31,620 --> 00:25:37,210 to znamená rozdeliť y od z, ale nevracia výsledok tohto rozdelenia; 422 00:25:37,210 --> 00:25:39,650 miesto, vráti zvyšok. 423 00:25:39,650 --> 00:25:47,390 >> Takže ak y je vlastne 3 a z je vlastne 2, 3 deleno 2 je 1 s zvyškom 1, 424 00:25:47,390 --> 00:25:51,550 takže to, čo robí x skutočne rovní v tomto scenári? 1. 425 00:25:51,550 --> 00:25:54,540 To je taký jednoduchý, low-level nápad. 426 00:25:54,540 --> 00:25:56,480 Chce to len trochu času, aby sa vaša myseľ omotal okolo neho 427 00:25:56,480 --> 00:25:58,740 pretože je to asi dlho, čo ste ešte museli starať o zvyšky 428 00:25:58,740 --> 00:26:01,160 a vlastne je použiť pre niečo zmysluplného, 429 00:26:01,160 --> 00:26:05,290 ale v tomto prípade prostý fakt, že môžete ísť z veľkého počtu ako 3 430 00:26:05,290 --> 00:26:08,920 na relatívne malom počte, ako je 2 a potom pretočiť účinne 431 00:26:08,920 --> 00:26:14,160 pomocou zvyšok na menšiu hodnotu, ako je 1 bude neoceniteľným trik 432 00:26:14,160 --> 00:26:17,690 že môžeme použiť ako pre niečo ako Caesar a tento ďalšia vec Vigenère 433 00:26:17,690 --> 00:26:22,240 v problému nastavenie 2, ale to bude opakujúce trik v priebehu semestra. 434 00:26:22,240 --> 00:26:24,880 Tento jednoduchý, jednoduchý nápad len s zvyšok všeobecne 435 00:26:24,880 --> 00:26:26,530 bude nám umožní zabaliť okolo. 436 00:26:26,530 --> 00:26:31,140 A ako sme začať hrať viac s poľami, ako sme začať hrať viac s pamäťou sám, 437 00:26:31,140 --> 00:26:35,800 to sa stane viac a viac mocný trik. 438 00:26:35,800 --> 00:26:43,420 >> Takže nejaké otázky, potom na ASCII alebo zastúpenie reťazcov ako pole? 439 00:26:43,420 --> 00:26:47,430 A my si ju do 1 zárez ďalej. Jo. 440 00:26:47,430 --> 00:26:52,350 [Nepočuteľné Študent otázka] >> Dobrá otázka. 441 00:26:52,350 --> 00:26:55,370 Čo to znamená, keď má premenná hviezdičku pred ním? 442 00:26:55,370 --> 00:26:57,720 Dovoľte mi, aby som odložiť odpoveď, že v každom detaile, 443 00:26:57,720 --> 00:27:00,100 ale, že sa odvoláva na tému známej ako ukazovateľ. 444 00:27:00,100 --> 00:27:03,440 Ukazovatele majú čo do činenia s pamäťou, a my sme vlastne dnes 445 00:27:03,440 --> 00:27:06,330 pričom prvý krok smerom k tejto diskusii, 446 00:27:06,330 --> 00:27:08,600 ale teraz mi dovoľte, aby som predstierať, že hviezda neexistuje 447 00:27:08,600 --> 00:27:15,380 a budeme naďalej vyzývať reťazcov reťazca namiesto použitia char *, 448 00:27:15,380 --> 00:27:19,530 ktoré ste pravdepodobne nevideli, a ja dám na obrazovke za chvíľu ako ukážku. 449 00:27:19,530 --> 00:27:23,010 Takže sa vrátime k tomu v tak podrobnejšie ako mnohí z vás si možno rád. 450 00:27:23,010 --> 00:27:25,760 Nakoniec, nie dnes. Jo. 451 00:27:25,760 --> 00:27:42,810 >> [Nepočuteľné Študent otázka] 452 00:27:42,810 --> 00:27:47,080 V akom kontexte sa budete musieť poskytnúť znamenie pre znak? >> [Študent] Jo. 453 00:27:47,080 --> 00:27:52,130 Takže v predvolenom nastavení, keď nechcete dať +, sa predpokladá, že len kladné čísla. 454 00:27:52,130 --> 00:27:55,390 Takže ak stačí napísať číslo 1, je to pozitívny 1. 455 00:27:55,390 --> 00:27:57,710 Ak si naozaj chcete zadať negáciu hodnoty, 456 00:27:57,710 --> 00:28:01,060 budete mať doslova urobiť -1 na klávesnici. 457 00:28:01,060 --> 00:28:20,440 Ale to asi nie je vaša otázka. >> [Nepočuteľné Študent odpoveď] 458 00:28:20,440 --> 00:28:22,200 >> Dobrá otázka. Dobre. 459 00:28:22,200 --> 00:28:24,970 Tak to má čo robiť, som pochopil, s nejakou chybu spustili do 460 00:28:24,970 --> 00:28:27,640 pretože ste boli prevod celé číslo na znak, 461 00:28:27,640 --> 00:28:29,780 ale nejako negativity zapojili, 462 00:28:29,780 --> 00:28:32,380 a tak postava práve vyšiel munged nejako. 463 00:28:32,380 --> 00:28:36,710 Takže teraz, dovoľte mi, aby som zjednodušovať trochu ako sa tam vrátime sa k tomuto druhu téme. 464 00:28:36,710 --> 00:28:39,570 Pre túto chvíľu, myslím, že veci týmto spôsobom - a to je zjednodušením. 465 00:28:39,570 --> 00:28:43,500 Ale vo svete integer, máte, koľko bitov k dispozícii? 466 00:28:43,500 --> 00:28:45,190 Máte 32 bitov. 467 00:28:45,190 --> 00:28:49,030 A tak ďaleko, sme hovorili o celkovom počte celých čísel môžete teda predstavujú 468 00:28:49,030 --> 00:28:52,430 je zhruba 4 miliardy celkom, pretože máte 32 bitov, 469 00:28:52,430 --> 00:28:55,100 tak, že je 2 až na 32, tak, že je to zhruba 4000000000. 470 00:28:55,100 --> 00:28:58,810 Ale videli sme týždeň alebo 2 pred ktoré nemáte naozaj majú rad čísel 471 00:28:58,810 --> 00:29:01,240 z 0 až na 4 miliardy. 472 00:29:01,240 --> 00:29:06,340 Rozsah miesto sa pohybuje od zhruba negatívne 2000000000 na pozitívne 2000000000. 473 00:29:06,340 --> 00:29:10,990 Ale to potom vyvoláva otázku, ako si predstavujú pojem negatívny 2000000000 474 00:29:10,990 --> 00:29:13,260 nieto negatívne 1? 475 00:29:13,260 --> 00:29:17,960 Pre túto chvíľu môžeme zjednodušovať a len povedať, že budeme používať najľavejší bit 476 00:29:17,960 --> 00:29:22,380 z týchto 32 bitov, a ak je to 1 to záporné číslo, 477 00:29:22,380 --> 00:29:25,090 a ak je to 0 je kladné číslo. 478 00:29:25,090 --> 00:29:28,570 Problém s týmto zjednodušeným reprezentácii záporných čísel 479 00:29:28,570 --> 00:29:33,700 je, že ak ste boli zámerne je šikovný a snaží sa previesť z povahy na číslo 480 00:29:33,700 --> 00:29:37,190 alebo naopak, tam žiadna taká vec ako záporná postava. 481 00:29:37,190 --> 00:29:42,550 Vo svete ASCII, ktorý používa iba 8 bitov, všetky 8 z týchto bitov hmoty, 482 00:29:42,550 --> 00:29:46,810 a vľavo bit nemá nič spoločného s negatívnymi. 483 00:29:46,810 --> 00:29:49,670 A len preto, aby bolo jasno, keď poviem, najviac naľavo bitov, 484 00:29:49,670 --> 00:29:54,610 pripomenúť, že keď sme robili trochu súvisiace s príkladmi v prvom týždni 485 00:29:54,610 --> 00:30:02,570 Pripomínam, že sme vychádzali veci, ako je 1001101, niečo také. 486 00:30:02,570 --> 00:30:07,210 Keď poviem, že najľavejší bit, som doslova na mysli 1, že napíšete celú cestu doľava. 487 00:30:07,210 --> 00:30:11,910 Takže vo svete postáv nie je pojem negativity, 488 00:30:11,910 --> 00:30:16,360 tak, aby vľavo bit vlastne má čo do činenia s ASCII, nič čo do činenia s negatívnymi. 489 00:30:16,360 --> 00:30:19,390 >> Takže to vyzerá, ako - a z kontextu, že je ťažké odpovedať presne - 490 00:30:19,390 --> 00:30:25,840 ale nejako, váš kód bol mätúci, že najľavejší bit predstavujúce záporné hodnoty 491 00:30:25,840 --> 00:30:29,160 keď to naozaj bola súčasťou charakteru dotknutého. 492 00:30:29,160 --> 00:30:32,250 A opäť, ja zjednodušujúce, pretože počítače skutočne robiť niečo trochu milovník 493 00:30:32,250 --> 00:30:37,080 než len zmena, že najľavejší bit do 1 pre záporným znamienkom versus 0. 494 00:30:37,080 --> 00:30:41,270 Oni namiesto toho, ak ste zvedaví na Google, používať niečo typicky tzv 2 v doplnkom, 495 00:30:41,270 --> 00:30:43,830 ktorý je o niečo zložitejšie prístupu, 496 00:30:43,830 --> 00:30:45,490 ale myšlienka je nakoniec rovnaký. 497 00:30:45,490 --> 00:30:50,530 >> Takže v skratke, to má čo robiť s tým, že ste boli masírovanie číslo na znak 498 00:30:50,530 --> 00:30:53,750 alebo naopak ale váš kód nebol vedomá skutočnosti 499 00:30:53,750 --> 00:30:56,510 , Že 1 z týchto bitov mala význam v číselnom svete. 500 00:30:56,510 --> 00:30:59,940 To nie je prípad charakteru svete. 501 00:30:59,940 --> 00:31:04,270 Ale to znie, ako by ste pevné, v tomto prípade diskutabilné teraz. Ďalšie otázky. 502 00:31:06,030 --> 00:31:07,110 Dobre. 503 00:31:07,110 --> 00:31:11,560 Tak zatiaľ, všetky programy sme napísali vzali vstup možná od užívateľa 504 00:31:11,560 --> 00:31:14,330 vo forme funkcií, ako je GetInt, GetString, 505 00:31:14,330 --> 00:31:16,990 alebo ak ste čítali dopredu v rôznych knihách alebo on-line odkazy, 506 00:31:16,990 --> 00:31:21,390 Vy sami mohli použiť funkcie, ako scanf, ktorá, úprimne povedané, my používame v CS50 knižnici. 507 00:31:21,390 --> 00:31:25,370 Ale v týždni, alebo 2, tak sme vlastne ukáže, ako je implementovaná knižnica CS50 508 00:31:25,370 --> 00:31:27,890 takže môžeme vziať tie vzdelávacie kolesá off dohromady. 509 00:31:27,890 --> 00:31:31,340 >> Ale ukazuje sa, že je tu iný spôsob, ako získať vstup od užívateľa. 510 00:31:31,340 --> 00:31:34,670 V skutočnosti, my sami sme používali argumenty príkazového riadku 511 00:31:34,670 --> 00:31:36,500 na pár týždňov. 512 00:31:36,500 --> 00:31:41,150 Zakaždým, keď sme spustenie zvonenie alebo sme spustite make, 513 00:31:41,150 --> 00:31:45,050 sme nielen zadali rinčanie, Enter, sme sa napísali robiť, Enter. 514 00:31:45,050 --> 00:31:49,340 Čo sme zvyčajne zapisujú sa za slovo kovový zvuk v našom termináli riadku systému Windows? 515 00:31:51,110 --> 00:31:52,900 [Študent] názov súboru. >> Názov súboru, nie? 516 00:31:52,900 --> 00:31:57,560 Hello.c alebo mario.c alebo čo príslušný názov súboru je. 517 00:31:57,560 --> 00:32:01,910 A v tomto zmysle, čo ste naozaj urobil, je, že ste ovplyvnil správanie Clang 518 00:32:01,910 --> 00:32:05,750 pretože určite ľudia, ktorí písali rinčať nemal tušenie, že niečo starého vám 519 00:32:05,750 --> 00:32:08,890 chcel napísať program s názvom mario.c rokov neskôr. 520 00:32:08,890 --> 00:32:13,150 Takže ste musela nejako ovplyvniť správanie tohto programu, 521 00:32:13,150 --> 00:32:18,140 a že program, zvonenie musel byť napísaný takým spôsobom, že môže prijímať vstup z vás 522 00:32:18,140 --> 00:32:23,480 pridaním slov na výzvu pred užívateľ stlačí kláves Enter. 523 00:32:23,480 --> 00:32:27,860 >> Tak to dopadá, že nejakú dobu sme vyhlásil takmer všetkých našich programov 524 00:32:27,860 --> 00:32:32,840 kto takhle - int main (void) - a potom sme šli napred 525 00:32:32,840 --> 00:32:35,110 a začal písať náš kód. 526 00:32:35,110 --> 00:32:37,910 A môžeme mať niektoré ostré zahŕňa v hornej časti súboru, 527 00:32:37,910 --> 00:32:40,660 ale takmer všetky naše programy tak ďaleko začali s týmto 528 00:32:40,660 --> 00:32:44,200 aj keď ste možno videli v kapitole, v knihách, on-line odkazy 529 00:32:44,200 --> 00:32:46,570 , Že to nie je v skutočnosti byť neplatné. 530 00:32:46,570 --> 00:32:55,820 Ďalšie legitímna forma pre to urobiť, je int argc a potom string ArGV []. 531 00:32:55,820 --> 00:32:57,500 Takže teraz, čo je to naznačiť? 532 00:32:57,500 --> 00:33:01,320 Ukazuje sa, že argc, čo je človek dohovor - by sa dalo nazvať toto foo, 533 00:33:01,320 --> 00:33:03,710 ale to bude len oveľa menej jasné čitateľom - 534 00:33:03,710 --> 00:33:09,330 argc jednoducho argument funkcie nazýva hlavná, ktorý predstavuje to, čo? 535 00:33:09,330 --> 00:33:12,450 Čo argc stať pre tých, ktorí poznajú? 536 00:33:12,450 --> 00:33:14,980 >> [Nepočuteľné Študent odpoveď] >> Jo, počet argumentov alebo počet argumentov. 537 00:33:14,980 --> 00:33:16,510 Je to tak jednoduché, ako to. 538 00:33:16,510 --> 00:33:19,160 Koľko argumenty boli odovzdané do tohto programu? 539 00:33:19,160 --> 00:33:20,630 Čo to znamená? 540 00:33:20,630 --> 00:33:27,090 Ak na príkazovom riadku som bežať niečo také - klap mario.c-- 541 00:33:27,090 --> 00:33:35,440 argc, keď som stlačte Enter bude trvať na hodnote, trochu mätúce, 2. 542 00:33:35,440 --> 00:33:40,150 Tak to dopadá, že argc je počet argumentov, 543 00:33:40,150 --> 00:33:46,280 ale z historických dôvodov, je názov samotného programu zahrnuté do tohto počtu. 544 00:33:46,280 --> 00:33:51,950 Takže argc je 2, keď som písal rinčať mario.c. 545 00:33:51,950 --> 00:33:54,290 Čo ArGV obsahuje? 546 00:33:54,290 --> 00:33:57,020 Po prvé, ArGV vyzerá ako reťazec, ale nie úplne 547 00:33:57,020 --> 00:33:59,310 pretože ako posledné stredu a to viac dnes, 548 00:33:59,310 --> 00:34:02,890 Tieto hranaté zátvorky označujú, čo? To je pole. 549 00:34:02,890 --> 00:34:07,110 Nie je číslo v poli, a ktorá by mala zmysel intuitívne 550 00:34:07,110 --> 00:34:10,790 pretože ľudia, ktorí písali zvonenie pred rokmi určite netušil 551 00:34:10,790 --> 00:34:16,300 Koľko slov ľudia ako my, by zadajte na príkazovom riadku pred stlačením klávesu Enter. 552 00:34:16,300 --> 00:34:22,280 >> Takže v tomto prípade tu bolo vyhlásené funkcie hlavnej, ako že sa pole argumentov, 553 00:34:22,280 --> 00:34:24,590 0 alebo viac argumentov. 554 00:34:24,590 --> 00:34:26,460 Oni nevedia dopredu, koľko ich je, 555 00:34:26,460 --> 00:34:29,690 takže je zámerne žiadne číslo vnútri týchto hranatých zátvoriek. 556 00:34:29,690 --> 00:34:32,750 Ale skutočnosť, že hranaté zátvorky sú tam hovoria počítač, 557 00:34:32,750 --> 00:34:34,639 očakávajú poľa. 558 00:34:34,639 --> 00:34:37,489 ArGV je len skrátený zápis pre argumentu vektora. 559 00:34:37,489 --> 00:34:39,889 Vektor je ozdobný spôsob, ako hovoriť pole, 560 00:34:39,889 --> 00:34:42,980 a pole je ozdobný spôsob, ako hovoriť zoznamu alebo vyzdvihnutie. 561 00:34:42,980 --> 00:34:47,360 Tak to jednoducho znamená, že ak nám napíšete hlavné takhle 562 00:34:47,360 --> 00:34:51,100 miesto, ako, ako sme to robili to za posledných pár týždňov, 563 00:34:51,100 --> 00:34:54,699 váš program má teraz právomoc prijať argumenty príkazového riadku 564 00:34:54,699 --> 00:34:58,520 takže už sa budete musieť napísať Mario a stlačte Enter, 565 00:34:58,520 --> 00:35:01,610 zadajte v rade, koľko blokov vysoko chcete pyramída byť, 566 00:35:01,610 --> 00:35:03,100 a stlačte Enter znova. 567 00:35:03,100 --> 00:35:07,720 My ani nemusíte používať GetString alebo už GetInt alebo GetFloat na to príde. 568 00:35:07,720 --> 00:35:12,370 Môžeme len očakávať, že užívateľ zadať tieto slová na riadku sám 569 00:35:12,370 --> 00:35:16,850 rovnako ako autori Clang rozhodol, že by bolo naozaj otravné programu 570 00:35:16,850 --> 00:35:20,550 ak kompilovať kód najprv zadali rinčať, Enter, 571 00:35:20,550 --> 00:35:24,090 potom sme si povedali k užívateľovi, zadajte prosím názov súboru, ktorý chcete preložiť, 572 00:35:24,090 --> 00:35:26,920 potom sme zadajte mario.c a stlačte klávesu Enter. 573 00:35:26,920 --> 00:35:29,850 Ale to je presne to, čo sme robili pre našich používateľov posledných pár týždňov. 574 00:35:29,850 --> 00:35:33,550 Používame GetString a čakáme, až sa program spustí výzvu je pre vstup. 575 00:35:33,550 --> 00:35:36,710 To už nie je potrebné, aby sa tento prípad. 576 00:35:36,710 --> 00:35:41,160 >> Takže v tomto prípade tu máme teraz reťazec ArGV, 577 00:35:41,160 --> 00:35:43,390 a toto je príliš zjednodušené, 578 00:35:43,390 --> 00:35:45,610 školenie kolesa, ktorá sa veľmi skoro preč. 579 00:35:45,610 --> 00:35:50,860 To je vhodnejší spôsob písania tohto alternatívneho vyhlásenie o hlavných 580 00:35:50,860 --> 00:35:54,740 pretože sa ukázalo, že to, čo držíme volať reťazec skutočne má hviezdu, 581 00:35:54,740 --> 00:35:58,440 hviezdička, v jeho skutočnom rozlíšení, ale to len vyzerá komplikovane, 582 00:35:58,440 --> 00:36:02,600 je to mätúce na prvý, a tak sme zjednodušiť tým, že len vytvorením synonymum druhu 583 00:36:02,600 --> 00:36:09,340 v CS50 knižnici, ktorá mapuje char * s týmto užívateľsky prívetivým slovom reťazca. 584 00:36:09,340 --> 00:36:13,180 >> Takže poďme sa skutočne snaží to potom. Nechaj ma ísť napred a otvoriť gedit tu. 585 00:36:13,180 --> 00:36:17,010 Nechaj ma ísť napred a otvorte ArGV z 1. 586 00:36:17,010 --> 00:36:21,620 Tento program zrejme vytlačí argumenty, ale v anglických termínov, 587 00:36:21,620 --> 00:36:26,290 pri pohľade na tento kód, čo to robiť konkrétne? 588 00:36:26,290 --> 00:36:35,910 Ak zadám do príkazového a.out foo bar, čo sa vytlačí v mojom čiernej a bielej okne? 589 00:36:35,910 --> 00:36:41,260 A.out foo bar, Enter. 590 00:36:43,120 --> 00:36:48,300 Hovorte. Jo. >> [Nepočuteľné Študent odpoveď] 591 00:36:48,300 --> 00:36:52,730 Dobré. Takže a.out, nový riadok, foo, nový riadok, bar, nový riadok. 592 00:36:52,730 --> 00:36:54,980 Prečo to je? Môžeme určite potvrdí, za chvíľu. 593 00:36:54,980 --> 00:36:56,940 To je druh našuchorený riadok kódu. 594 00:36:56,940 --> 00:36:59,560  Je to len vytlačí novú linku, len aby sa veci krajšie na obrazovke. 595 00:36:59,560 --> 00:37:03,730 To je slučka, ktorá je iterácia od 0 až na argc, 596 00:37:03,730 --> 00:37:07,210 a to je zvyšovanie pri každom opakovaní + +. 597 00:37:07,210 --> 00:37:12,270 Takže toto je teraz hovorí vytlačiť reťazec, ako vyplýva z tohto% s 598 00:37:12,270 --> 00:37:16,460 ArGV [i] je v podstate rovnaká myšlienka z predchádzajúceho príkladu. 599 00:37:16,460 --> 00:37:19,580 Hovorili sme premennú s; teraz sa to volá, ľubovoľne, ArGV. 600 00:37:19,580 --> 00:37:24,270 To znamená, že vytlačiť Ith argument, ktorý je písaný na príkazovom riadku, 601 00:37:24,270 --> 00:37:28,690 a potom po celá tá vec sa deje, len pre istotu vytlačiť ďalšiu novú linku. 602 00:37:28,690 --> 00:37:31,600 >> Takže poďme sa pozrieť. Dovoľte mi, aby som otvoriť okno terminálu. 603 00:37:31,600 --> 00:37:37,470 Dovoľte mi, aby som zostaviť ArGV z 1, a teraz mi dovoľte bežať ArGV z 1, Enter. Hmm. Dobre. 604 00:37:37,470 --> 00:37:40,850 Spustite foo bar. Zaujímavé. Baz. 605 00:37:40,850 --> 00:37:42,640 A ak ste sa niekedy nad tým, prečo som tento typ, 606 00:37:42,640 --> 00:37:45,010 je to len tiež hlúpa počítačová veda konvencie. 607 00:37:45,010 --> 00:37:48,050 Svet sa často potrebuje len slovné zástupné symboly pre slová. 608 00:37:48,050 --> 00:37:50,090 Takže ak chcete hovoriť o nejakej všeobecnej reťazca, 609 00:37:50,090 --> 00:37:53,250 počítačoví odborníci len majú tendenciu hovoriť, foo, keď potrebujú náhodné slovo, 610 00:37:53,250 --> 00:37:55,530 potom povedia bar v prípade, že potrebujete druhý náhodný slovo, 611 00:37:55,530 --> 00:37:59,100 potom povedia baz v prípade, že potrebujete tretie slovo, potom povedia qux v prípade, že potrebujete štvrtiny slovo, 612 00:37:59,100 --> 00:38:01,520 a potom je tu obrovská náboženská debata on-line, ako na to, čo príde po qux, 613 00:38:01,520 --> 00:38:04,940 takže si môžete Google, že prísť na to, čo ten druhý ľubovoľný slovo by malo byť. 614 00:38:04,940 --> 00:38:07,480 Ale títo žiadny zmysel vôbec, 615 00:38:07,480 --> 00:38:10,100 keď foo bar, ak ste Google, že, že má zmysel, 616 00:38:10,100 --> 00:38:12,780 ktorý je súčasťou etymológiu tu. 617 00:38:12,780 --> 00:38:17,550 >> Takže toto všetko robí a potom sa tlačí 1 z týchto reťazcov na riadok. 618 00:38:17,550 --> 00:38:19,900 Takže keď som miesto, aj keď, chcel získať trochu milovník, 619 00:38:19,900 --> 00:38:22,550 Predpokladám, že som nechcel tlačiť každý reťazec na riadku; 620 00:38:22,550 --> 00:38:26,220 Chcel som tlačiť každý znak z každého reťazca na riadok. 621 00:38:26,220 --> 00:38:28,550 Ako by som mohol namiesto toho, že? 622 00:38:28,550 --> 00:38:33,720 Čo potrebujem zmeniť informácie o tomto programe, ak chcem vytlačiť nie každé slovo 623 00:38:33,720 --> 00:38:37,290 ale ja chcem tlačiť každý slovo list listom listom, 624 00:38:37,290 --> 00:38:40,590 potom nasledujúce slovo písmenko po písmenku listom? 625 00:38:40,590 --> 00:38:43,650 Ako sme sa spojiť tieto myšlienky tak ďaleko? Jo. 626 00:38:43,650 --> 00:38:47,390 [Študent]% c >> Dobre. Tak sme niekde potrebujeme% c 627 00:38:47,390 --> 00:38:50,680 Dobre, pretože nechcem tlačiť celé reťazce, chcem tlačiť znaky. Čo ešte? 628 00:38:50,680 --> 00:38:54,290 >> [Nepočuteľné Študent odpoveď] >> Zaujímavé. 629 00:38:54,290 --> 00:38:56,860 Takže potrebujeme akúsi druhú dimenziu tu teraz 630 00:38:56,860 --> 00:39:02,300 pretože myslieť ArGV ako pole, ale je to pole reťazcov. 631 00:39:02,300 --> 00:39:07,170 Ale ako, ako, 15 minútami, čo je string? Je to pole znakov. 632 00:39:07,170 --> 00:39:12,320 Takže naozaj, ArGV je pole z poľa znakov, 633 00:39:12,320 --> 00:39:14,870 pole polí znakov. 634 00:39:14,870 --> 00:39:19,170 Tak to dopadá, že môžeme použiť len viac hranatá zátvorka notácie. Takže ideme na to. 635 00:39:19,170 --> 00:39:23,650 V hornej časti tejto slučky na linke 19, budem prechádzať z aj do argc, 636 00:39:23,650 --> 00:39:25,760 ale potom budem robiť toto: 637 00:39:25,760 --> 00:39:27,580 pre - nemôžem použiť aj teraz. 638 00:39:27,580 --> 00:39:30,300 Potrebujem ďalšie premenné, pretože chcem, aby iterácii slová 639 00:39:30,300 --> 00:39:32,640 ale potom aj cez listy v slovách 640 00:39:32,640 --> 00:39:37,280 tak nejako som sa zvislej osi a horizontálne os, akúsi koncepčne. 641 00:39:37,280 --> 00:39:43,930 Takže int j dostane 0, potom chcem urobiť j tak dlho, ako j je menšia ako - a ja upracem to až za chvíľu. 642 00:39:43,930 --> 00:39:48,410 Ako môžem iteráciu písmená v reťazci? Urobili sme to pred chvíľou. 643 00:39:48,410 --> 00:39:54,670 Strlen z ArGV [i]. Dobré. 644 00:39:54,670 --> 00:39:57,860 A opäť, robím trochu neefektívnosť tu nevytvára n, alebo čokoľvek, 645 00:39:57,860 --> 00:39:59,610 ale vrátime k tomu. 646 00:39:59,610 --> 00:40:03,270 >> Takže teraz j + +. Teraz musím zarážky ďalej zaoberať. 647 00:40:03,270 --> 00:40:06,950 Čo mám teraz chcete tlačiť na každej iterácii? 648 00:40:06,950 --> 00:40:09,720 [Nepočuteľné Študent odpoveď] >> Tak [i] bude mi slovo. 649 00:40:09,720 --> 00:40:12,910 [I] [j], niečo ako matice. 650 00:40:12,910 --> 00:40:14,810 Tí z vás, s math-y pozadia, 651 00:40:14,810 --> 00:40:19,340 sme trochu indexovanie ešte hlbšie do tejto matice alebo tohto poľa polí, 652 00:40:19,340 --> 00:40:21,380 Tento 2-dimenzionální štruktúry. 653 00:40:21,380 --> 00:40:25,070 Takže teraz sa pozrieme, čo sa deje tu. Dovoľte mi, aby som otvoria svoje väčšie okno terminálu. 654 00:40:25,070 --> 00:40:28,170 Dovoľte mi, aby som znovu spustiť, aby z ArGV z 1. 655 00:40:28,170 --> 00:40:33,090 A ja som to podelal tu, čo je dobrá lekcia, pretože som príliš zabudol urobiť. 656 00:40:33,090 --> 00:40:37,150 Implicitne prehlasuje C knižničný funkcie "strlen" s typom 'unsigned - 657 00:40:37,150 --> 00:40:40,360 Ja ani neviem, čo ostatní, to znamená, ale videl som to skôr, 658 00:40:40,360 --> 00:40:42,000 implicitne vyhlásil. 659 00:40:42,000 --> 00:40:45,540 Kedykoľvek vidíme túto chybu, čo to zvyčajne znamená? 660 00:40:45,540 --> 00:40:48,520 >> [Nepočuteľné Študent odpoveď] >> Zabudol som knižnicu až hore. Ale počkajte. 661 00:40:48,520 --> 00:40:51,690 Obvykle som podelal, pretože som zabudla na CS50 knižnicu, ale že je tam. 662 00:40:51,690 --> 00:40:54,480 Obvykle som podelal, pretože som zabudol štandardné I / O. 663 00:40:54,480 --> 00:40:57,960 A úprimne povedané, ja ani potrebovať. Nie sme pomocou GetString dnes. 664 00:40:57,960 --> 00:40:59,900 Takže to, čo mi chýba? 665 00:40:59,900 --> 00:41:04,860 Je tu ďalšie knižnice, ktoré teraz musíme použiť občas nazýva string.h, 666 00:41:04,860 --> 00:41:08,980 a to je len ďalší knižnice, ktoré má viac funkcií, ktoré nie sú v štandardnom I / O. 667 00:41:08,980 --> 00:41:11,640 >> Takže sa vráťme k môjmu veľkému terminálovom okne. 668 00:41:11,640 --> 00:41:16,670 Dobre. Teraz, sakra, myslím, že som sa mýlil. Bol som pomocou CS50 knižnice. 669 00:41:16,670 --> 00:41:18,460 Takže môžeme opraviť v jednej zo 2 spôsobmi. 670 00:41:18,460 --> 00:41:21,510 Môžeme si vziať na školenie kolesá hneď teraz a práve to, 671 00:41:21,510 --> 00:41:26,600 alebo poďme trochu držať sa, že zjednodušenie len pre teraz, vložte tento chrbát, 672 00:41:26,600 --> 00:41:30,180 vyriešiť tento problém, a teraz späť do okna terminálu. 673 00:41:30,180 --> 00:41:33,080 Takže byť jasné, v knižnici CS50 nie je len funkcia, 674 00:41:33,080 --> 00:41:36,920 to je tiež kľúčové slovo reťazec, čo je dôvod, prečo táto chyba sa práve stalo. 675 00:41:36,920 --> 00:41:43,010 >> Tak ideme na to. Opravil som obe knižnice otázok. Enter. Dobré. 676 00:41:43,010 --> 00:41:49,250 ArGV z 1, foo bar, Enter. Vynikajúce. 677 00:41:49,250 --> 00:41:52,830 Takže teraz máme každý písmeno každého slova tlačeného 1 na riadok, 678 00:41:52,830 --> 00:41:55,290 ktoré neprispievajú k veľmi zaujímavým programom, 679 00:41:55,290 --> 00:41:59,350 ale upozornenia teraz máme schopnosť nielen iterácie slov 680 00:41:59,350 --> 00:42:04,090 ale aj nad jednotlivými písmenami v slovách, ktorý znie strašne povedomý 681 00:42:04,090 --> 00:42:10,330 na vyrovnanie najjednoduchšie aplikácie, ako je zakódovanie písmen v reťazci, ako je tento. 682 00:42:10,330 --> 00:42:12,410 Poďme ďalej a vziať naše 5-minút prestávku tu. 683 00:42:12,410 --> 00:42:14,410 A keď sa vrátime, začneme hovoriť o účinnosti 684 00:42:14,410 --> 00:42:17,670 s ktorými sa môžeme robiť tieto veci lepšie. 685 00:42:19,370 --> 00:42:21,900 >> Dobrá. Sme späť. 686 00:42:21,900 --> 00:42:26,970 Vďaka jednému z našich TFS, ktorý hrá veľa Bananagrams, 687 00:42:26,970 --> 00:42:30,000 skutočnosti máme veľa znakov s nami tu dnes 688 00:42:30,000 --> 00:42:32,520 fyzicky inkarnovali s týmito malými plastovými kúsky, 689 00:42:32,520 --> 00:42:36,910 a dovoľte mi, aby som Navrhujem, aby tento prázdna biela slate tu predstavuje RAM v mojom počítači - 690 00:42:36,910 --> 00:42:39,790 laptop, desktop, bez ohľadu na - a tam vyzerá ako veľa toho 691 00:42:39,790 --> 00:42:44,090 pretože ak začneme sekanie do tejto RAM do malých byte veľkosti kusov, 692 00:42:44,090 --> 00:42:48,970 Poďme ľubovoľne povedať, že niečo, čo veľkosť a že rozmazané predstavuje - 693 00:42:48,970 --> 00:42:52,430 tam ideme, a poďme oddialiť trochu sem - 694 00:42:52,430 --> 00:42:56,120 povedzme niečo, čo veľkosť predstavuje jeden bajt. 695 00:42:56,120 --> 00:43:00,400 Takže môžeme skutočne zmestí veľa bajtov alebo znakov vnútri tejto pamäti, 696 00:43:00,400 --> 00:43:02,860 ako navrhuje relatívnej veľkosti tu. 697 00:43:02,860 --> 00:43:06,780 >> Takže predpokladám teraz, že cieľom je alokovať pamäť pre reťazec. 698 00:43:06,780 --> 00:43:08,680 Ako to vlastne funguje? 699 00:43:08,680 --> 00:43:11,380 V rámci programov sme písali, sme zvyčajne používali GetString, 700 00:43:11,380 --> 00:43:16,300 ale teraz, jasne, že je to iný kanál, cez ktorý môžeme dostať užívateľského vstupu do ArGV 701 00:43:16,300 --> 00:43:18,190 cez argumenty príkazového riadku. 702 00:43:18,190 --> 00:43:20,580 Ale čo sa naozaj deje pod kapotou? 703 00:43:20,580 --> 00:43:24,920 Ukázalo sa, že keď zavoláme - poďme prejdite späť na GetString - funkcie GetString 704 00:43:24,920 --> 00:43:28,190 v knižnici CS50, je užívateľ vyzvaný na zadanie reťazca, 705 00:43:28,190 --> 00:43:30,780 užívateľ zadá nejaké slovo - nazvime ju HELLO. 706 00:43:30,780 --> 00:43:35,410 A my sme hovorili za posledných pár týždňov, že návratová hodnota GetString 707 00:43:35,410 --> 00:43:37,750 je v skutočnosti reťazec, ako slovo HELLO. 708 00:43:37,750 --> 00:43:39,660 >> Ale to, čo sa GetString naozaj robí? 709 00:43:39,660 --> 00:43:45,230 Ako užívateľ zadá v HELLO, Enter, GetString sa prísť na to,, 710 00:43:45,230 --> 00:43:47,930 v poriadku, koľko znakov je to? To je H-E-L-L-O. 711 00:43:47,930 --> 00:43:52,500 Takže treba prideliť, je potrebné požiadať operačný systém - Linux v tomto prípade - 712 00:43:52,500 --> 00:43:55,410 po dobu aspoň 5 bajtov na uloženie HELLO. 713 00:43:55,410 --> 00:43:59,570 A čo sa potom pokračuje robiť, keď sa dostane späť tie 5 bytov z operačného systému 714 00:43:59,570 --> 00:44:04,120 je vyložiť HELLO chrbtom k sebe k sebe dozadu. 715 00:44:04,120 --> 00:44:11,070 A tak to, čo je naozaj vrátil z GetString je kus dát, ktorá vyzerá takto. 716 00:44:11,070 --> 00:44:16,850 Ale to je trochu nepresné, pretože sa ukáže, že to nie je tak jednoduché 717 00:44:16,850 --> 00:44:20,310 ako len ukladanie HELLO v pamäti počítača 718 00:44:20,310 --> 00:44:24,140 pretože predpokladám, že môj program, ktorý píšem v C a potom zavolá GetString znova, 719 00:44:24,140 --> 00:44:28,210 a ďalšie slovo, ktoré užívateľ zadá do je BYE, BYE. 720 00:44:28,210 --> 00:44:31,300 No, musím sa zmestili, že slovo BYE niekde v pamäti. 721 00:44:31,300 --> 00:44:33,790 Nemôžem handry HELLO. 722 00:44:33,790 --> 00:44:37,320 Napríklad, ja nechcem, aby sa počítač len začať prepísanie takhle 723 00:44:37,320 --> 00:44:41,400 pôvodné slovo, pretože by som mohol byť ešte používať slovo HELLO v premennej 724 00:44:41,400 --> 00:44:43,070 niekde inde v mojom programe. 725 00:44:43,070 --> 00:44:45,900 >> Takže B-Y-E má skončiť niekde inde v pamäti. 726 00:44:45,900 --> 00:44:50,460 Ale konvencie zvyčajne je, že budúci Reťazec, ktorý pridelí 727 00:44:50,460 --> 00:44:54,940 Pravdepodobne, ale nie vždy, sa chystá skončiť pri najbližšej vhodné miesto v pamäti. 728 00:44:54,940 --> 00:44:57,370 A ak som požiadal operačný systém pre každú pamäť 729 00:44:57,370 --> 00:45:01,380 pretože v poslednej dobe som volal GetString, štatistiky sú slovné BYE 730 00:45:01,380 --> 00:45:05,790 bude skončiť hneď po slove HELLO v pamäti. 731 00:45:05,790 --> 00:45:10,550 Ale v tomto okamihu môžete snáď vidieť, kde potenciálny problém vzniká. 732 00:45:10,550 --> 00:45:13,310 Pretože ďalšie kusy pamäti, ďalších bytov, ktoré boli len zadarmo - 733 00:45:13,310 --> 00:45:18,230 vyčistite biely štít - v pamäti počítača boli hneď vedľa HELLO, 734 00:45:18,230 --> 00:45:23,670 to je ako prvý reťazec som požiadal, mohla náhle sa zmení 735 00:45:23,670 --> 00:45:26,410 pretože som v podstate to zmenil na HELLOBYE 736 00:45:26,410 --> 00:45:31,310 namiesto toho, aby nejako demarcing začatia zbohom a koniec HELLO. 737 00:45:31,310 --> 00:45:33,920 >> Tak to dopadá, že to, čo sa naozaj deje pod kapotou, 738 00:45:33,920 --> 00:45:37,570 ktoré ste si mohli zahliadnuť v on-line odkazy alebo sekcie alebo knihy 739 00:45:37,570 --> 00:45:41,780 alebo vôbec nie len zatiaľ je to, že je v skutočnosti úmyselné vymedzenie 740 00:45:41,780 --> 00:45:45,890 medzi slovami v pamäti počítača. 741 00:45:45,890 --> 00:45:52,480 A v skutočnosti, v tomto prípade tu, skôr než len dať BYE hneď vedľa HELLO, 742 00:45:52,480 --> 00:45:58,610 miesto, počítač kladie osobitný znak, špeciálny znak NULL, aby som tak povedal, 743 00:45:58,610 --> 00:46:03,050 ktorý je reprezentovaný so značkou s lomítkom 0. 744 00:46:03,050 --> 00:46:06,700 Tak dlhý príbeh krátky, pripomenúť, že znaky sú zastúpené v ASCII. 745 00:46:06,700 --> 00:46:09,680 ASCII je len mapovanie medzi číslami a písmenami, 746 00:46:09,680 --> 00:46:13,870 a väčšina z tých listov kto hrubo 65 pre kapitálové A, 747 00:46:13,870 --> 00:46:19,780 ale to dopadá, môžete určite predstavovať číslo 0 ako celé číslo alebo v binárnej, 748 00:46:19,780 --> 00:46:22,690 a ukázalo sa, svet sa rozhodol dávno, dávno, "Vieš čo?" 749 00:46:22,690 --> 00:46:27,550 "Poďme rezerva číslo 0 až nepredstavujú žiadne znaky na klávesnici - 750 00:46:27,550 --> 00:46:30,810 "Žiadne listy, žiadne čísla, bez interpunkcie. 0 je zvláštne." 751 00:46:30,810 --> 00:46:35,830 "Bude to mať špeciálny znak NULL, a budeme písať ako \ 0". 752 00:46:35,830 --> 00:46:41,170 Rozdiel je, ak sme práve napísal 0, 0 je znak. 753 00:46:41,170 --> 00:46:45,700 Pripomeňme si, že tam sú ASCII kódy pre 0, pre 1, pre 2, pre 3 754 00:46:45,700 --> 00:46:50,570 , Pretože tento znak 0 sa líši od čísla 0. 755 00:46:50,570 --> 00:46:54,270 A je vidieť, že keď sa pozriete späť z týždňa 1, keď sme sa prvýkrát rozprávali o ASCII, 756 00:46:54,270 --> 00:46:59,130 0 a 1 a 2 a 3 po celú cestu až do 9 mali svoje vlastné ASCII kódy. 757 00:46:59,130 --> 00:47:02,300 Oni nie sú, zhodou okolností, 0 až 9. Sú veľmi odlišné. 758 00:47:02,300 --> 00:47:08,770 Takže 0 jednoducho znamená "Ja som zvláštne," a \ 0 znamená, doslova, "ja nie som 0 znak." 759 00:47:08,770 --> 00:47:11,360 "Som to osobitnú hodnotu, null znak." 760 00:47:11,360 --> 00:47:16,930 Tak som skutočne potrebujú ďalší z nich, pretože nemôžem urobiť rovnakú chybu dvakrát. 761 00:47:16,930 --> 00:47:21,550 >> Takže sa za slovo BYE sme tiež bude potrebovať ďalší jeden z týchto null znakov. 762 00:47:21,550 --> 00:47:27,090 Dovoľte mi, aby som chytiť moje pero sem a dovoľte mi, aby som rýchlo nakresliť ďalšie \ 0 763 00:47:27,090 --> 00:47:30,480 tak, že potom, čo som požiadal operačný systém pre 2 reťazca 764 00:47:30,480 --> 00:47:33,270 cez GetString nasledovala ďalšie volanie GetString, 765 00:47:33,270 --> 00:47:35,640 To je to, čo je vlastne v pamäti. 766 00:47:35,640 --> 00:47:39,900 Takže keď sa vrátim reťazec, som naozaj dostať späť to, 767 00:47:39,900 --> 00:47:43,450 a keď som sa na ďalší reťazec, som naozaj dostať späť, že. 768 00:47:43,450 --> 00:47:47,910 Tak to vyvoláva otázku, strlen, predovšetkým, aké by to vrátiť? 769 00:47:47,910 --> 00:47:54,650 Keď hovorím, strlen na reťazec s a s je slovo HELLO, že používateľ zadaný v, 770 00:47:54,650 --> 00:47:57,800 Čo sme samozrejme povedať, že dĺžka Hello bola pred niekoľkými minútami? 771 00:47:57,800 --> 00:48:01,290 Bolo to 5, nie? H-E-L-L-O. A to je naozaj, ako strlen funguje. 772 00:48:01,290 --> 00:48:05,670 Vracia sa to, čo normálny človek by čakal dĺžku reťazca byť. 773 00:48:05,670 --> 00:48:11,030 Ale v skutočnosti, ako veľká je pole znakov, ktoré je skladovanie ahoj? 774 00:48:11,030 --> 00:48:12,770 Je to vlastne 6. 775 00:48:12,770 --> 00:48:15,740 Takže strlen nezmieňuje túto skutočnosť vás. 776 00:48:15,740 --> 00:48:20,300 Ale pod kapotou je počítač skutočne pomocou 6 bajtov na uloženie 5-list slovo, 777 00:48:20,300 --> 00:48:22,380 a to platí bez ohľadu na to, ako dlho to slovo je. 778 00:48:22,380 --> 00:48:26,470 Je tu vždy bude špeciálny nulový ukončovacie znak na konci reťazca 779 00:48:26,470 --> 00:48:28,800 na DeMarco jeho celkovú dĺžku. 780 00:48:28,800 --> 00:48:33,430 >> Takže ak ste sa osoba vykonáva strlen 20, pred 30 rokmi, 781 00:48:33,430 --> 00:48:35,520 ako sa vám ísť o implementácii strlen sám? 782 00:48:35,520 --> 00:48:39,980 Berieme ako samozrejmosť, že existuje, rovnako ako my považujeme za samozrejmé, že printf existuje, 783 00:48:39,980 --> 00:48:42,850 ale ak HELLO je slovo v otázke 784 00:48:42,850 --> 00:48:45,220 a to, čo mám v pamäti, je niečo, čo vyzerá ako to, 785 00:48:45,220 --> 00:48:48,130 ak by ste mali reimplement strlen, pretože ste boli požiadaní, aby 786 00:48:48,130 --> 00:48:50,260 alebo pretože, úprimne povedané, ste nevedeli, strlen existuje - 787 00:48:50,260 --> 00:48:54,280 ste museli vrátiť túto na vlastnú päsť - ako by ste mohli realizovať strlen 788 00:48:54,280 --> 00:48:57,760 pri podávaní niečo, čo vyzerá takto? 789 00:48:57,760 --> 00:49:02,750 Teraz, keď vieme reťazec je pole, môžeme iterácii každý z jednotlivých znakov 790 00:49:02,750 --> 00:49:06,320 používať niečo ako - Skúsme to urobiť za behu. 791 00:49:06,320 --> 00:49:12,060 >> Nechaj ma ísť do prístroja. Dovoľte mi, aby som vytvoriť nový súbor, strlen.c. 792 00:49:12,060 --> 00:49:19,260 Nechaj ma ísť napred teraz sa zahŕňajú stdio.h tak, že máme prístup k printf. 793 00:49:19,260 --> 00:49:25,820 Dovoľte mi, aby som to int main (void). Oh. Budem jednoducho robiť to sám pre teraz a potom. [Smiech] 794 00:49:25,820 --> 00:49:28,300 Ďakujem. 795 00:49:28,300 --> 00:49:31,000 To je to, čo robím. Dobrá. 796 00:49:31,000 --> 00:49:34,820 Takže predtým, než som sa obrátil na obrazovke, som napísal všetko. 797 00:49:34,820 --> 00:49:37,550 A teraz, čo budem robiť, je nasledovné: 798 00:49:37,550 --> 00:49:40,360 printf ("Daj mi reťazec:") 799 00:49:40,360 --> 00:49:42,700 To je len našuchorený pokyny. 800 00:49:42,700 --> 00:49:45,700 Teraz ma nechaj robiť struny s = GetString. 801 00:49:45,700 --> 00:49:47,260 Už som potrebné vykonať zmenu teraz. 802 00:49:47,260 --> 00:49:52,740 Ja používam CS50 knižnice naraz, tak nech mi do toho pustite a zadajte cs50.h. 803 00:49:52,740 --> 00:50:00,720 A teraz ideme na to: printf ("Dĺžka je:% d, strlen [s] - 804 00:50:00,720 --> 00:50:03,540 a ja som neskončil. Čo ešte musím pridať k tomuto programu? 805 00:50:03,540 --> 00:50:05,740 >> [Študent] string.h. >> String.h. 806 00:50:05,740 --> 00:50:10,800 Takže teraz, sme pomocou strlen, takže poďme sa uistite, že kompilátor vie, kde to je, 807 00:50:10,800 --> 00:50:12,390 tak trochu rozumu kontrolu. 808 00:50:12,390 --> 00:50:16,400 Začínam reťazec v súlade 8, a v súlade 9 som tlačiť svoju dĺžku s% d 809 00:50:16,400 --> 00:50:19,400 Tak poďme do toho a otvorte túto hore. 810 00:50:19,400 --> 00:50:23,380 Sme, aby strlen - zostavuje v poriadku - 811 00:50:23,380 --> 00:50:30,120 strlen - nechaj ma priblížite - Enter, H-E-L-L-O, Enter. Dĺžka je 5. 812 00:50:30,120 --> 00:50:32,730 >> Dobre, takže strlen zdá sa, pracuje, ale svet vedel, že. 813 00:50:32,730 --> 00:50:37,310 Takže poďme teraz realizovať strlen sami podľa nasledujúcich pokynov. 814 00:50:37,310 --> 00:50:39,490 Dovoľte mi, aby som túto knižnicu preč. 815 00:50:39,490 --> 00:50:42,590 Máme už majú prístup k string.h, pretože som ani nevedel, že existuje. 816 00:50:42,590 --> 00:50:45,970 Ale to je v poriadku, pretože som si zaviesť strlen sám 817 00:50:45,970 --> 00:50:50,200 a majú trvať reťazec s názvom vstup, 818 00:50:50,200 --> 00:50:53,830 a teraz musím prísť na to, dĺžku tohto reťazca. 819 00:50:53,830 --> 00:50:55,880 Tak ako to mám urobiť? 820 00:50:55,880 --> 00:51:00,190 Čo keď urobím - poďme pozrieť, ako to urobiť - Čo chceš robiť? 821 00:51:00,190 --> 00:51:04,130 >> [Nepočuteľné Študent odpoveď] >> Dobre. 822 00:51:04,130 --> 00:51:05,970 Takže môžeme urobiť si pár spôsobov. Skúsim sa tento prístup. 823 00:51:05,970 --> 00:51:10,220 Dovoľte mi, aby som sám int premenné i, tak aj začína 0. 824 00:51:10,220 --> 00:51:19,380 A dovoľte mi povedať toto: kým vstup [i] nerovná, čo? \ 0. 825 00:51:19,380 --> 00:51:23,480 Tak to dopadá, rovnako ako u všetkých znakov pri písaní je doslova v programe, 826 00:51:23,480 --> 00:51:25,940 budete musieť použiť apostrofy, nie úvodzoviek. 827 00:51:25,940 --> 00:51:29,250 Takže ak by som písal list a, by som to robil, písmeno b, by som to robil. 828 00:51:29,250 --> 00:51:33,440 To, naopak, bude reťazec, nie je individuálny charakter. 829 00:51:33,440 --> 00:51:38,470 >> Takže chcem \ 0 doslova. Čo chcem robiť v tejto slučke? 830 00:51:38,470 --> 00:51:42,650 Vlastne, potrebujem ďalšie premenné, takže int dĺžka je 0. 831 00:51:42,650 --> 00:51:46,190 Aj keď si neboli istí, prečo sme začali tak, ako sme urobili, 832 00:51:46,190 --> 00:51:50,110 Teraz, že ideme touto cestou, čo chcem robiť na linke 9? 833 00:51:50,110 --> 00:51:55,820 Dĺžka + + a potom tu dole na riadku 10, návrat dĺžka. 834 00:51:55,820 --> 00:51:58,370 Tak ako je strlen realizovaný? 835 00:51:58,370 --> 00:52:00,550 Je to vlastne robí asi takto. 836 00:52:00,550 --> 00:52:03,470 Možno osoba používa pre slučku, možno to while - kto vie? 837 00:52:03,470 --> 00:52:05,940 Mali by sme naozaj musím pozrieť pod pokrievku na skutočné zdrojového kódu 838 00:52:05,940 --> 00:52:08,520 v niektorých súbore nazvanom string.c pravdepodobne. 839 00:52:08,520 --> 00:52:10,480 >> Ale tu poďme si o tom, čo robím. 840 00:52:10,480 --> 00:52:13,640 Som deklarovaní premennej s názvom i, stanovuje sa v ňom rovná 0. 841 00:52:13,640 --> 00:52:17,520 Ja som potom prehlasuje ďalšie premennú s názvom dĺžku, stanovuje sa v ňom rovná 0. 842 00:52:17,520 --> 00:52:25,440 Potom som povedal, keď i-ty znak na vstupe nie je rovnajúcu sa osobitnému nulový znak, \ 0, 843 00:52:25,440 --> 00:52:27,070 zvýšiť dĺžku. 844 00:52:27,070 --> 00:52:32,550 Ale akonáhle tého znaku je to špeciálny znak, čo sa stane s slučky? 845 00:52:32,550 --> 00:52:36,540 To skraty. To zastaví, čo znamená, že potom okamžite vrátiť dĺžku. 846 00:52:36,540 --> 00:52:40,740 >> Takže keď som sa pokaziť, poďme ďalej a vrátiť sa k môjmu terminálovom okne. 847 00:52:40,740 --> 00:52:43,550 Dovoľte mi, aby som znovu zkompilujte. A ja som mhouřit. 848 00:52:43,550 --> 00:52:46,320 Nekompatibilné opakovaná deklarácia funkcie knižnice strlen. 849 00:52:46,320 --> 00:52:48,650 Tak som sa snažil dostať príliš chytrý pre moje dobro tu. 850 00:52:48,650 --> 00:52:51,610 Kompilátor vlastne vie, že tam je funkcia nazvaná strlen 851 00:52:51,610 --> 00:52:55,290 aj keď sme nezahrnula knižnicu. To je v poriadku. Čokoľvek. 852 00:52:55,290 --> 00:52:58,230 Sme len tak spolupracovať potom. Poďme premenovať túto dĺžku. 853 00:52:58,230 --> 00:53:04,110 Dovoľte mi, aby som zmeniť využiť ju na dĺžku tu, a to povedie k tomu zvonenie šťastnejší. 854 00:53:04,110 --> 00:53:08,900 Ako stranou, pretože niektoré z týchto funkcií sú tak sakramentsky časté - 855 00:53:08,900 --> 00:53:12,390 strlen, prinf - v skutočnosti majú akýsi zvláštny štatút. 856 00:53:12,390 --> 00:53:15,310 A tak zvonenie jednoducho vie, trochu niečo osobitného o nich. 857 00:53:15,310 --> 00:53:18,760 To nie je vždy prípad väčšiny funkcií, takže to je dôvod, prečo sme sa kričal na. 858 00:53:18,760 --> 00:53:21,350 >> Dovoľte mi, aby som skúste to znova. Našťastie, to fungovalo, že čas. 859 00:53:21,350 --> 00:53:23,560 Takže teraz mi dovoľte spustiť svoj vlastný strlen programu. 860 00:53:23,560 --> 00:53:29,740 Daj mi reťazec: H-E-L-L-O, Enter. A ja som to podelal. 861 00:53:29,740 --> 00:53:34,750 Prečo? >> [Nepočuteľné Študent odpoveď] >> Presne tak. 862 00:53:34,750 --> 00:53:39,180 Tak som si sám tu veľmi pekný nekonečnú slučku 863 00:53:39,180 --> 00:53:42,270 pretože aj keď som zvyšovanie dĺžky na každej iterácii, 864 00:53:42,270 --> 00:53:47,860 čo mám zjavne nie je robiť? Nie som zvyšovanie i Dobre. Easy fix. Áno? 865 00:53:47,860 --> 00:53:52,430 Dobre. Nie teraz by sme dostala do konfliktu nejaké iné spoločné chybu, kde som potrebné zátvorky. 866 00:53:52,430 --> 00:53:54,430 A úprimne povedané, tento kód sa začína vyzerať škaredo, 867 00:53:54,430 --> 00:53:56,460 takže budeme mať bodnúť pri čistení to až za chvíľu. 868 00:53:56,460 --> 00:53:58,810 Ale teraz som zvyšovaní ako dĺžku a ja. 869 00:53:58,810 --> 00:54:02,630 Úprimne povedané, som už videl príležitosť pre zlepšenie, ale vrátime k tomu. 870 00:54:02,630 --> 00:54:05,270 >> Takže teraz sa jednoducho uistiť, že sme aspoň pokrok. 871 00:54:05,270 --> 00:54:08,320 To sa stalo pár z vás, a ja som zabudol spomenúť vopred. 872 00:54:08,320 --> 00:54:12,420 Ak nemáte tú smolu, o scenári, ako je tento, ako to opraviť 873 00:54:12,420 --> 00:54:15,130 krátke reštarte prístroja alebo počítač alebo zatvorenie okna? 874 00:54:15,130 --> 00:54:16,860 Je to vlastne jednoduché. 875 00:54:16,860 --> 00:54:21,680 Control C zašle túto malú mrkvu symbol C, a to len ukončí väčšinu programov. 876 00:54:21,680 --> 00:54:25,990 Ak máte naozaj zlý nekonečnú slučku, ktorá sa tlačí na stiahnutie nekonečne veľakrát, 877 00:54:25,990 --> 00:54:29,960 Niekedy budete musieť zasiahnuť ovládač C tisíckrát to, aby bola skutočne počuť. 878 00:54:29,960 --> 00:54:33,910 Takže len uvedomiť teraz, pretože som sa netlačia nič, to bolo celkom jednoduché. 879 00:54:33,910 --> 00:54:37,970 A technicky, raz stačí, ale ja som netrpezlivý a ja som zvyčajne trafil, že mnohokrát. 880 00:54:37,970 --> 00:54:43,400 >> Tak strlen. Daj mi reťazec: HELLO. Bude to fungovať tentokrát? 881 00:54:44,580 --> 00:54:47,490 Dobre. Ďalšou častou chybou. Musieť rekompilovat. 882 00:54:47,490 --> 00:54:50,430 To bolo úmyselné, že jeden. Dobrá. 883 00:54:50,430 --> 00:54:54,260 Takže strlen, H-E-L-L-O, Enter. Vynikajúce. 884 00:54:54,260 --> 00:54:55,910 Takže teraz máme strlen na 5. 885 00:54:55,910 --> 00:54:58,100 Takže sme doslova reimplemented, že koleso. 886 00:54:58,100 --> 00:55:02,080 Tak teraz poďme čistenie tohto, pretože to zo mňa nerobí dojem 887 00:55:02,080 --> 00:55:04,080 s návrhom môjho kódu. 888 00:55:04,080 --> 00:55:07,200 Čo môžeme jednoznačne vylúčiť v tomto programe na čistenie tohto hore? 889 00:55:07,200 --> 00:55:11,840 [Nepočuteľné Študent odpoveď] >> Jo. Doslova, sme liečbe i a dĺžku zhodne. 890 00:55:11,840 --> 00:55:16,440 Tak prečo by sme sa len tak chytrí a hovoria, zatiaľ čo dĺžka? 891 00:55:16,440 --> 00:55:20,450 Skôr, poďme nazývať to dĺžka začať, inicializovať na 0 892 00:55:20,450 --> 00:55:23,340 pretože v predvolenom nastavení reťazec nemá dĺžku, kým nezistíme, čo to je. 893 00:55:23,340 --> 00:55:26,160 >> Teraz sme to, a teraz je to celkom elegantný program. 894 00:55:26,160 --> 00:55:28,660 Jedna premenná. Vyčistila som ho, dotiahnuť to. 895 00:55:28,660 --> 00:55:31,980 Takže teraz sa vráťme k môjmu terminálovom okne. Poďme ďalej a spustiť tento. 896 00:55:31,980 --> 00:55:35,670 Urobte strlen. Vyzerá to dobre. Spustiť strlen opäť Enter. 897 00:55:35,670 --> 00:55:40,680 Daj mi reťazec: HELLO, Enter. A zdá sa, že bude pracovať ako 5. 898 00:55:40,680 --> 00:55:45,580 Teraz, aby bolo jasno, keby som nenapísal, napríklad HELLO v 1 reťazci 899 00:55:45,580 --> 00:55:48,840 a potom BYE v inom, môžeme určite mať viac slov. 900 00:55:48,840 --> 00:55:53,150 Ak je výraz som vlastne chcel typ nebol HELLO, ale napríklad, 901 00:55:53,150 --> 00:55:58,920 HELLO WORLD, všimnite si, že to, čo by sme nemali, je táto situácia, že jo? 902 00:55:58,920 --> 00:56:00,580 To by znamenalo, že je to 2 reťazca. 903 00:56:00,580 --> 00:56:06,060 Určite môžete mať znaky medzerníka, takže ak sme skutočne zadali v dlhšom frázu 904 00:56:06,060 --> 00:56:08,390 ako Ahoj všetci, čo by sme naozaj v pamäti 905 00:56:08,390 --> 00:56:12,730 vyzerá trochu niečo také existuje. 906 00:56:12,730 --> 00:56:18,910 >> Dobrá. Akékoľvek otázky potom o zastúpenie tu reťazcov? 907 00:56:18,910 --> 00:56:20,450 Nie? Dobrá. 908 00:56:20,450 --> 00:56:25,130 Tak som povedal skôr, že volanie strlen znova a znova úmyselne takhle 909 00:56:25,130 --> 00:56:28,070 asi nie je najlepší nápad, pretože ste bude robiť veľa práce 910 00:56:28,070 --> 00:56:30,280 znovu a znovu a znovu. 911 00:56:30,280 --> 00:56:36,150 Vskutku, aký druh práce je nutné pre zisťuje, dĺžku reťazca, zrejme? 912 00:56:36,150 --> 00:56:40,720 Musíte začať od začiatku a potom sa pozrieť, pozri, pozri, pozri, pozri 913 00:56:40,720 --> 00:56:44,930 kým sa konečne vidieť, že osobitný charakter, na ktorom mieste, ah, teraz už viem, dĺžku. 914 00:56:44,930 --> 00:56:48,040 Takže skôr, keď sme strlen nazývaný znova a znova a znova, 915 00:56:48,040 --> 00:56:52,080 dôvod, prečo som navrhol, aby bol druh hlúpe je, že opäť, že reťazec vyzerá. 916 00:56:52,080 --> 00:56:54,880 Nebude to meniť zakaždým, keď určiť iteráciou nejaké slučke, 917 00:56:54,880 --> 00:56:56,890 takže robíte zbytočnú prácu. 918 00:56:56,890 --> 00:57:00,620 V rovnakej dobe mal by ste vedieť, ako zrušiť, aby prekladača ako Clang v týchto dňoch 919 00:57:00,620 --> 00:57:02,530 boli vyvinuté v priebehu mnohých rokov, 920 00:57:02,530 --> 00:57:05,690 a kompilátorové spisovatelia, programátori, sú celkom šikovné. 921 00:57:05,690 --> 00:57:10,170 A tak sa ukazuje, že zvonenie a ďalšie kompilátory môžu skutočne prísť na to, že 922 00:57:10,170 --> 00:57:13,650 v poriadku, áno, ste napísal strlen vo vašom stave, 923 00:57:13,650 --> 00:57:17,520 čo technicky znamená, že by sme mohli nazvať ju znovu a znovu a znovu. 924 00:57:17,520 --> 00:57:21,880 Ale inteligentný kompilátory môžu skutočne optimalizovať tieto druhy chudobných užívateľských rozhodnutia 925 00:57:21,880 --> 00:57:23,870 z kódu na nápravu veci. 926 00:57:23,870 --> 00:57:27,360 >> Takže si len uvedomiť, že niekedy kompilátor je múdrejší ako my 927 00:57:27,360 --> 00:57:29,210 a druh skryť vlastné chyby. 928 00:57:29,210 --> 00:57:31,620 Ale iste, pokiaľ ide o problémových súborov a podobne, 929 00:57:31,620 --> 00:57:35,340 sa myslieť o tých zásadne chybných návrhu rozhodnutia 930 00:57:35,340 --> 00:57:38,110 potenciálne z toho prostého dôvodu, že by sme sa robiť oveľa viac práce 931 00:57:38,110 --> 00:57:41,330 ako v skutočnosti máme robiť. Ale koľko viac práce? 932 00:57:41,330 --> 00:57:44,960 V prípade Hello World, začnime zovšeobecniť veľkosť tohto problému. 933 00:57:44,960 --> 00:57:48,100 Čo je dĺžka problému alebo veľkosť problému 934 00:57:48,100 --> 00:57:50,770 keď slovo používateľ zadali, je HELLO? 935 00:57:50,770 --> 00:57:53,790 Je to vraj 5, možno 6. Plus alebo mínus 1. Čokoľvek. 936 00:57:53,790 --> 00:57:55,680 Je to tak blízko, jednoducho budeme nazývať 5. 937 00:57:55,680 --> 00:58:00,480 >> Takže to, čo je veľkosť problému tu, keď sa snažia prísť na to, dĺžku HELLO? 938 00:58:00,480 --> 00:58:06,790 Je to 1, 2, 3, 4, 5, a možno 6 na mieste posledného znaku, ale poďme zovšeobecnenie že n 939 00:58:06,790 --> 00:58:10,300 Takže n, len premenná n, je to, čo počítačoví odborníci by sa zvyčajne používa 940 00:58:10,300 --> 00:58:13,890 popísať veľkosť problému, a problém po ruke, je, ako dlho je HELLO? 941 00:58:13,890 --> 00:58:17,050 Koľko času strlen vziať? 942 00:58:17,050 --> 00:58:21,010 Trvá na poradie krokov n, kde každý krok znamená pohľad na charakter, 943 00:58:21,010 --> 00:58:23,350 pozrite sa na znak, pozrite sa na znak. 944 00:58:23,350 --> 00:58:26,850 A my sme mali túto diskusiu, zatiaľ čo zadné, počet operácií niečo berie. 945 00:58:26,850 --> 00:58:29,910 Hneď prvý deň v triede sme všetci rozpačito vstať, 946 00:58:29,910 --> 00:58:32,060 a potom sa všetci začali párovanie preč so sebou 947 00:58:32,060 --> 00:58:35,990 aby skutočne spočítať ideálne, koľko ľudí bolo v miestnosti. 948 00:58:35,990 --> 00:58:39,860 A tiež sme urobili ďalšiu vec, pričom ak som to urobil miesto starej školy spôsobom 949 00:58:39,860 --> 00:58:44,800 z práve začína 1, 2, 3, 4, 5, 6, a tak ďalej, 950 00:58:44,800 --> 00:58:49,360 to taky, veľkosť tohto problému bol veľkosti n Tam bolo n ľudí v miestnosti. 951 00:58:49,360 --> 00:58:52,010 Ale ja som mohol urýchliť, že, nie? Stupeň školy štýlu by som mohol začať počítať za 2s. 952 00:58:52,010 --> 00:58:55,560 2, 4, 6, 8, 10, 12. A to je tak oveľa rýchlejší, a naozaj to je. 953 00:58:55,560 --> 00:59:01,720 Je to doslova dvakrát tak rýchlo, ale zase, ak ďalšie 400 ľudia chodili do tejto miestnosti 954 00:59:01,720 --> 00:59:08,250 naraz, by sa tieto algoritmy ďalšie 400 alebo možno 200 krokov. 955 00:59:08,250 --> 00:59:13,310 >> Ale naopak, ak budeme naozaj chytrí a my namiesto toho vás všetkých spočítať sami, 956 00:59:13,310 --> 00:59:15,280 pripomenúť, ako tento algoritmus pracuje. 957 00:59:15,280 --> 00:59:17,110 Vy všetci vstal. Dovoľte mi, aby som rýchlo dopredu na to. 958 00:59:17,110 --> 00:59:20,430 Vy všetci sa postavil, ste spárované off, potom polovica z vás posadil, 959 00:59:20,430 --> 00:59:22,510 polovica z vás sa posadil, polovica z vás posadil, 960 00:59:22,510 --> 00:59:27,350 a pri každom opakovaní tohto cyklu od týždňa 0, sme polovicu problému po ruke 961 00:59:27,350 --> 00:59:30,040 a šiel do n / 2, potom n / 4, potom n / 8. 962 00:59:30,040 --> 00:59:35,350 A dôsledkom toho je, že ak ďalšie 400 ľudí chodí do miestnosti, žiadny veľký problém, 963 00:59:35,350 --> 00:59:40,120 to nám bude trvať 1 ďalšie kolo, nie 400 viac kôl, nie 200 viac kôl. 964 00:59:40,120 --> 00:59:43,640 A tak príbeh sme si povedali chvíľu späť musel urobiť niečo s tým. 965 00:59:43,640 --> 00:59:47,750 Táto červená čiara je tu lineárny, je to priamo, a to označené ako n 966 00:59:47,750 --> 00:59:50,250 pretože ako veľkosť problému rastie, 967 00:59:50,250 --> 00:59:54,690 ak váš algoritmus alebo program, s ktorým budete riešiť to trvá n krokov, 968 00:59:54,690 --> 00:59:58,620 môžeme vykresľovať ako priamky, kde to vyžaduje viac času, tým väčšia je veľkosť problému. 969 00:59:58,620 --> 01:00:03,280 A twosies prístup, počítanie 2, 4, 6, 8, stále priamka, len trochu lepší. 970 01:00:03,280 --> 01:00:08,440 Trvá trochu menej času, takže žltá čiara je pod červenou linkou bod pre bod. 971 01:00:08,440 --> 01:00:12,580 >> Ale ešte lepšie je to svätý grál, čo sme nazvali logaritmický čas 972 01:00:12,580 --> 01:00:14,830 , Kde aj keď sme opäť zdvojnásobiť počet ľudí v miestnosti, 973 01:00:14,830 --> 01:00:18,240 sme zdvojnásobiť veľkosť tohto telefónneho zoznamu od prvého dňa triedy, 974 01:00:18,240 --> 01:00:22,310 O nič nejde, to trvá 1 ďalšia stránka slzu, trvá 1 ďalší sede 975 01:00:22,310 --> 01:00:25,550 s cieľom vyriešiť problém, ktorý je dvakrát tak veľký. 976 01:00:25,550 --> 01:00:27,460 A tak rozhovor sme teraz dostať začať s je 977 01:00:27,460 --> 01:00:30,380 Ako sme vlastne riešiť problémy efektívne 978 01:00:30,380 --> 01:00:32,510 ak uvážime, najjednoduchšie problémy, ako je tento? 979 01:00:32,510 --> 01:00:36,210 Predpokladajme, že máme 8 dvere, za ktorými sú niektoré čísla, 980 01:00:36,210 --> 01:00:39,720 a každý z týchto čísel nie je zoradená v žiadnom prípade, 981 01:00:39,720 --> 01:00:42,830 sú to len náhodné celé čísla za týmito dverami, 982 01:00:42,830 --> 01:00:47,290 a kladieme otázku, ako sa vám ísť o zistenie, že počet - kto vie - 983 01:00:47,290 --> 01:00:50,250 7 za týmito dverami? 984 01:00:50,250 --> 01:00:53,400 Čo by ste, človek, urobiť, aby sa mi nájsť číslo 7 985 01:00:53,400 --> 01:00:56,810 ak opäť každý z nich sú dvere a vidieť hodnotu budete musieť otvoriť dvere? 986 01:00:56,810 --> 01:00:59,650 Čo by vaše algoritmus byť možná? 987 01:00:59,650 --> 01:01:05,310 >> [Nepočuteľné Študent odpoveď] >> Takže začať s doľava a otvorte dvere, otvorte dvere, otvorte dvere. 988 01:01:05,310 --> 01:01:08,570 A v najhoršom prípade, ako dlho to bude trvať nám nájsť číslo 7? 989 01:01:08,570 --> 01:01:12,800 A opäť, to nie sú zoradené, takže to nie je tak jednoduché, ako, no, ja idem otvoriť 7. dvere. 990 01:01:12,800 --> 01:01:15,240 Mohlo by nás, maximálne, 8 krokov. 991 01:01:15,240 --> 01:01:19,940 V najhoršom prípade, 7 je náhodne na samom konci riadku dverí, 992 01:01:19,940 --> 01:01:22,090 takže možno budeme musieť vyskúšať všetky n dvere. 993 01:01:22,090 --> 01:01:24,440 Takže znovu tu, zdá sa, že majú lineárny algoritmus. 994 01:01:24,440 --> 01:01:27,030 V skutočnosti, sme to len pár rokov pred. 995 01:01:27,030 --> 01:01:29,910 Jeden z vašich predchodcov bol napádaný sa práve táto 996 01:01:29,910 --> 01:01:32,050 kde sme nemali digitálnej verzii, sa namiesto toho malo tabuľu 997 01:01:32,050 --> 01:01:33,780 s niektorými kúskami papiera na ňom. 998 01:01:33,780 --> 01:01:36,940 A to, čo som myslela, že by som urobiť, je rýchlo pozrieť späť na to, ako to šlo, 999 01:01:36,940 --> 01:01:40,760 jeden z najlepších a možno najviac nevhodných príležitostiach na javisku 1000 01:01:40,760 --> 01:01:42,530 mať demonštrácii tu na Sandersa. 1001 01:01:42,530 --> 01:01:44,000 Mali sme 2 rady čísiel. 1002 01:01:44,000 --> 01:01:47,280 Sme len sa pozrieme na to, čo sa tu deje so Seanom pre veľmi Vrchol týchto riadkov. 1003 01:01:47,280 --> 01:01:49,660 Ak nie je nikto už nikdy dobrovoľníkov v CS50, 1004 01:01:49,660 --> 01:01:52,010 sme mali Sean požehnanie držať to na kameru, 1005 01:01:52,010 --> 01:01:54,670 takže vie, že stovky ľudí boli sledovaní to teraz celé roky. 1006 01:01:54,670 --> 01:01:59,500 Ale Sean odviedol úžasnú prácu - alebo robil on -? Na skutočne nájsť nám určitý počet. 1007 01:01:59,500 --> 01:02:04,570 >> Tak uvidíme, ako sa rieši tento algoritmus tak, že budeme pokračovať v tomto rozhovore onedlho 1008 01:02:04,570 --> 01:02:08,300 o tom, ako sme sa nájsť veci efektívne. 1009 01:02:08,300 --> 01:02:12,300 [Malan na videu] som skrytý za týmito dverami číslo 7, 1010 01:02:12,300 --> 01:02:16,710 ale zastrčený v niektorej z týchto dverí, ako aj iné non-záporné čísla, 1011 01:02:16,710 --> 01:02:19,980 a vaším cieľom je, že tejto hornom rade čísel len ako pole 1012 01:02:19,980 --> 01:02:22,920 alebo len sled kúskov papiera s číslami za nimi, 1013 01:02:22,920 --> 01:02:26,960 a vaším cieľom je, iba pomocou hornej poľa tu, tu mi číslo 7. 1014 01:02:26,960 --> 01:02:30,800 A my sa potom bude k posudku, ako ísť o to urobiť. >> Dobre. 1015 01:02:30,800 --> 01:02:33,880 [Malan] Hľadať nám číslo 7, prosím. 1016 01:02:36,210 --> 01:02:38,350 [Smiech] 1017 01:02:41,610 --> 01:02:44,460 [Malan] No [smiech] 1018 01:02:45,760 --> 01:02:58,080 5, 19, 13, [smiech]. Nie je to chyták. 1019 01:03:00,560 --> 01:03:02,390 1. 1020 01:03:04,560 --> 01:03:06,910 [Smiech] 1021 01:03:06,910 --> 01:03:10,760 V tomto okamihu je vaše skóre nie je moc dobré, takže si pokojne ďalej. [Smiech] 1022 01:03:12,490 --> 01:03:14,070 3. 1023 01:03:17,340 --> 01:03:23,480 Prejsť na. Úprimne povedané, nemôžem si pomôcť, ale zaujímalo, čo ste ešte premýšľať. [Smiech] 1024 01:03:25,010 --> 01:03:28,870 Iba horný riadok, takže máte 3 vľavo. Tak mi nájdi 7. 1025 01:03:28,870 --> 01:03:45,360 [Študenti reptania] 1026 01:03:46,270 --> 01:03:49,870 [Malan] 17. 1027 01:03:49,870 --> 01:03:55,460 [Študenti reptania] 1028 01:03:56,920 --> 01:04:01,550 [Malan] 7! [Potlesk] 1029 01:04:01,550 --> 01:04:06,080 >> Takže v stredu budeme ponoriť do tohto a ďalších sofistikovaných algoritmov pre hľadanie vecí. 1030 01:04:06,080 --> 01:04:10,200 Pre túto chvíľu sme vás nechám sa Seanom a uvidíme v stredu. 1031 01:04:11,280 --> 01:04:13,000 [CS50.TV]