1 00:00:00,000 --> 00:00:02,670 [Powered by Google Translate] Kafla Vandamál Set 2: Hacker Edition 2 00:00:02,670 --> 00:00:04,910 Rob Bowden, Harvard University 3 00:00:04,910 --> 00:00:07,410 Þetta er CS50. CS50.TV 4 00:00:07,410 --> 00:00:15,770 Svo, ég er Rob. Ég er háttsettur í Kirkland. Þetta er þriðja árið mitt TFing CS50. 5 00:00:15,770 --> 00:00:22,220 Það er í fyrsta sinn sem við erum að breyta frá hefðbundinni fyrirlestur-stíl kafla, 6 00:00:22,220 --> 00:00:25,610 þar sem við konar bara endurskoðun hvað gerðist í fyrirlestri og svo þið spyrja spurninga, 7 00:00:25,610 --> 00:00:32,250 nú til að vera miklu meira vandamál-undirstaða, þar sem við notum Spaces, og - 8 00:00:32,250 --> 00:00:37,410 Oh, svo er hugmyndin að fara til að tengjast Ég sendi þér og þá munt þú vera í rúm. 9 00:00:37,410 --> 00:00:42,410 Hefur einhver hafa a laptop? Allt í lagi. 10 00:00:42,410 --> 00:00:47,050 Þannig að við erum að fara að vera með þetta, og við ætlum að vera að gera vandamál lifa í kafla 11 00:00:47,050 --> 00:00:50,740 og ræða þær og vangaveltur út hvað er rangt 12 00:00:50,740 --> 00:00:56,390 og ég gæti draga upp sumir af kóðanum þínum, og ég gæti rætt hugmyndir þínar. 13 00:00:56,390 --> 00:01:02,140 Svo hefur einhver átti erfitt? 14 00:01:02,140 --> 00:01:07,000 Þú getur spjallað við hlið, ég veit ekki hvort við munum hafa ástæðu fyrir því. 15 00:01:07,000 --> 00:01:12,270 Nú, eins og áður supersection, ef þú varst í þeim flokki, þú veist hvað það er um. 16 00:01:12,270 --> 00:01:19,200 Á öllum P setur það á eftir að vera þessa hluta. 17 00:01:19,200 --> 00:01:22,550 Svo P-setja 2, forskriftir, held ég að þú sást það á P-setja 1 nú þegar. 18 00:01:22,550 --> 00:01:27,400 En við getum litið á P-setja 2 fyrir það sem við erum að fara að vera að fara yfir í dag. 19 00:01:27,400 --> 00:01:29,460 Og þú munt sjá kafla af spurningum. 20 00:01:29,460 --> 00:01:37,530 Svo þetta verður í öllum P-sett, það verður að vera hluti af spurningum. 21 00:01:37,530 --> 00:01:41,340 Svo langt að við höfum sagt, "Hugleiddu þetta tækifæri til að æfa." 22 00:01:41,340 --> 00:01:44,940 Þú munt ekki vera beðin um að senda þetta forrit. 23 00:01:44,940 --> 00:01:48,480 Hugmyndin er að þetta eiga að konar hjálpa þér að byrja með vandamál setja. 24 00:01:48,480 --> 00:01:53,220 Ég giska á Hacker útgáfa er a einhver fjöldi af þeim átti bara að vera ný, áhugaverð atriði sem þarf að læra. 25 00:01:53,220 --> 00:01:58,590 Þeir mega ekki vera beint við um vandamál setja. 26 00:01:58,590 --> 00:02:01,810 Og núna erum við ekki að þurfa að senda þær, en í orði, 27 00:02:01,810 --> 00:02:07,480 fyrir síðari setur vandamál, kannski þú sendir þá, og svona þú getur annað hvort að koma til kafla 28 00:02:07,480 --> 00:02:10,380 eða horfa á kafla til að fá svör, eða þú getur bara að fá þá á eigin spýtur 29 00:02:10,380 --> 00:02:16,350 Ef þér finnst ekki eins og að njóta nærveru mína. 30 00:02:16,350 --> 00:02:21,010 Svo - ég held að þetta sé sá fyrsti. 31 00:02:21,010 --> 00:02:29,280 Oh. Einnig, samkvæmt þessum hluta af spurningunum sem við einnig að spyrja þig spurninga um stuttbuxur. 32 00:02:29,280 --> 00:02:33,440 Þannig að ég giska, í orði, þú ert ímyndaður til að horfa á þetta áður en kemur að hluta, 33 00:02:33,440 --> 00:02:38,550 en það er allt í lagi ef þú gerir það ekki, við munum fara yfir þær engu að síður. 34 00:02:38,550 --> 00:02:42,590 Þannig að við getum byrjað með þetta: "Hvernig á meðan lykkja frábrugðin DO-while lykkju? 35 00:02:42,590 --> 00:02:46,210 Hvenær er seinni sérstaklega vel? " 36 00:02:46,210 --> 00:02:49,390 Svo einhver hafa allir -? 37 00:02:49,390 --> 00:02:52,730 [Námsmaður] The do-while lykkju er alltaf framkvæmdur að minnsta kosti einu sinni. 38 00:02:52,730 --> 00:03:02,950 Já. Svo er það munurinn. A meðan lykkja - Ég skal gera það bara hér - meðan lykkja, höfum við ástand 39 00:03:02,950 --> 00:03:19,760 hérna, en DO-á meðan, þú ert ekki með sjúkdóm þar til við fá niður hér. 40 00:03:19,760 --> 00:03:24,130 Og svo, þegar forritinu er framkvæmd, og það gerist í while lykkju, 41 00:03:24,130 --> 00:03:26,380 tékka það strax ef þetta ástand er satt. 42 00:03:26,380 --> 00:03:30,710 Ef það skilyrði er ekki satt, það verður bara að sleppa yfir lykkjunnar alveg. 43 00:03:30,710 --> 00:03:34,390 Do-while lykkju, eins og the program er framkvæmd, verður það að "gera." 44 00:03:34,390 --> 00:03:37,920 Ekkert gerist á þessum tímapunkti, bara halda áfram framkvæmd. 45 00:03:37,920 --> 00:03:42,690 Síðan þegar það hits the "stund" ef skilyrðið er satt, verður það lykkju til baka og gera það aftur 46 00:03:42,690 --> 00:03:46,730 og aftur og aftur þar til ástand er ekki satt og þá bara fellur í gegnum. 47 00:03:46,730 --> 00:03:50,600 Svo munurinn sé, að þetta getur sleppt rétt frá byrjun. 48 00:03:50,600 --> 00:03:56,770 Þetta keyrir endilega einu sinni og þá má framkvæma oftar ef ástand er enn satt. 49 00:03:56,770 --> 00:04:03,720 Svo á meðan lykkja mun aðeins gera það einu sinni, eða - á meðan lykkja - getum við ekki þurft að gera það á öllum, 50 00:04:03,720 --> 00:04:07,900 því um leið og við fáum við það, ef ástand er rangt, við munum bara sleppa rétt yfir það. 51 00:04:07,900 --> 00:04:11,770 Í do-while lykkju, munum við framkvæma það einu sinni, endilega. 52 00:04:11,770 --> 00:04:14,560 Síðan, þegar við komum að ástand, athuga við hvort það er satt eða ósatt. 53 00:04:14,560 --> 00:04:19,790 Ef það er satt, við munum gera það aftur, en ef það er rangt, við verðum bara að halda áfram að fara. 54 00:04:19,790 --> 00:04:24,680 Svo þegar er seinni sérstaklega vel? 55 00:04:24,680 --> 00:04:31,190 Svo get ég sagt að í heild á 4 ár, 3 ár, hvað, 56 00:04:31,190 --> 00:04:38,780 sem ég hef verið að forritun, ég hef notað þetta, eins og undir 10 tímum. 57 00:04:38,780 --> 00:04:43,140 Og sennilega 5 af þeim eru í CS50 þegar við erum að kynna gera-stund lykkjur. 58 00:04:43,140 --> 00:04:47,510 Svo þegar þú notaðir að gera-en lykkjur? 59 00:04:47,510 --> 00:04:49,510 Hvenær er - já? 60 00:04:49,510 --> 00:04:53,180 [Nemandi] Þegar þú ert að reyna að fá notandi inntak, eða eitthvað sem þú vilt að athuga - 61 00:04:53,180 --> 00:04:59,700 Já. Svo gera-en lykkjur, notandi inntak er ein stór. 62 00:04:59,700 --> 00:05:03,160 Þess vegna á fyrstu tveimur vandamál setur, þegar þú vilt að spyrja notanda, eins og, 63 00:05:03,160 --> 00:05:08,520 "Gefa mér band," þú getur ekki haldið áfram fyrr en þú færð að streng. 64 00:05:08,520 --> 00:05:12,980 Og svo þú, endilega, þú þarft að biðja um streng minnsta kosti einu sinni. 65 00:05:12,980 --> 00:05:16,950 En ef þeir svara eitthvað slæmt, þá þarftu að lykkja til baka og spyrja aftur. 66 00:05:16,950 --> 00:05:20,810 En annað en notandi inntak, það er mjög sjaldgæft að ég fundur mál 67 00:05:20,810 --> 00:05:27,170 þar sem ég vil að lykkja "að minnsta kosti einu sinni" en hugsanlega meira. 68 00:05:27,170 --> 00:05:33,370 Spurningar eða -? Hefur einhver notað DO-á meðan lykkja annars staðar? 69 00:05:33,370 --> 00:05:36,780 Allt í lagi. Svo næsta einn er: "Hvað er óskilgreinda auðkenni 70 00:05:36,780 --> 00:05:43,310 yfirleitt til kynna ef outputted með clang? " 71 00:05:43,310 --> 00:05:47,380 Svo hvers konar kóða gæti ég skrifað til að fá 'undeclared auðkenni? 72 00:05:47,380 --> 00:05:49,550 [Nemandi] Að x = 2? 73 00:05:49,550 --> 00:05:52,650 Þannig að við getum bara reyna það hér, x = 2. 74 00:05:52,650 --> 00:06:04,830 Við munum keyra þetta - ó, ég vissi ekki að smella á hann. Svo hér við fá - allt í lagi. 75 00:06:04,830 --> 00:06:07,100 "Notkun undeclared x Identifier." 76 00:06:07,100 --> 00:06:11,610 Svo að undeclared heiti, breytu. 77 00:06:11,610 --> 00:06:13,910 Það verður oft að hringja í breytu með auðkenni. 78 00:06:13,910 --> 00:06:17,300 Þannig að það gæti ekki vita að það er í raun breyta, það veit ekki hvað það er. 79 00:06:17,300 --> 00:06:19,380 Svo er það kennimerki. 80 00:06:19,380 --> 00:06:26,060 Svo hvers vegna er það óskilgreinda? Já. 81 00:06:26,060 --> 00:06:32,190 Svo til að vera skýr á hugtakanotkun, yfirlýsingar um breytu 82 00:06:32,190 --> 00:06:37,360 er þegar þú segir "int x," eða "String y", hvað sem er. 83 00:06:37,360 --> 00:06:41,910 Frumstilling á breytu eða framsal breytu, 84 00:06:41,910 --> 00:06:44,510 er þegar þú segir "x = 2." 85 00:06:44,510 --> 00:06:52,950 Þannig getum við gert þetta í aðskildum skrefum, int x, x = 2, og þar - við getum haft fullt af efni hér - 86 00:06:52,950 --> 00:07:00,350 en þangað til þessi lína gerist, er x enn forsniðinn en það hefur verið lýst. 87 00:07:00,350 --> 00:07:06,760 Og svo að við getum augljóslega gert það í 1 línu, og nú erum við að lýsa og Frumstilli. 88 00:07:06,760 --> 00:07:10,730 Spurningar? 89 00:07:10,730 --> 00:07:18,390 Og að lokum, "Hvers vegna er Caesar Dulmál ekki mjög öruggt?" 90 00:07:18,390 --> 00:07:23,830 Svo fyrst, Er einhver sem vill segja hvað Caesar Dulmál er? 91 00:07:23,830 --> 00:07:28,100 [Nemandi] Caesar Dulmál bara að þú kortinu, skipta þér hvert bréf, 92 00:07:28,100 --> 00:07:34,420 ákveðinn fjöldi bréfa fara yfir og fara aftur yfir, og það er ekki mjög örugg því 93 00:07:34,420 --> 00:07:42,260 það er aðeins 26 valkostirnir og þú verður bara að reyna hver 1 af þeim fyrr en þú færð það. 94 00:07:42,260 --> 00:07:45,470 Oh. Svo ætti ég að endurtaka? 95 00:07:45,470 --> 00:07:51,600 The Caesar Dulmál, it's - ég meina, þú verður að takast á við það á þeim vandamálum sem þú - 96 00:07:51,600 --> 00:07:56,110 eða ég held staðlaða útgáfu af vandamál setja sem er ekki á spjallþráð útgáfu. 97 00:07:56,110 --> 00:08:01,550 Svo á stöðluðu útgáfu á því vandamáli sett, fá þér skilaboð eins og, "Hello, world" 98 00:08:01,550 --> 00:08:08,410 og þú ert líka tala eins og 6, og þú tekur þessi skilaboð, og hvert eðli, 99 00:08:08,410 --> 00:08:11,310 þú snúa það með 6 stöðum í stafrófinu. 100 00:08:11,310 --> 00:08:16,560 Svo 'h' í Hello yrði h-i-j-k-L-m-n. 101 00:08:16,560 --> 00:08:19,600 Svo fyrsti stafurinn væri n. Við gerum það sama með e. 102 00:08:19,600 --> 00:08:23,530 Ef við höfum, eins og, z eða eitthvað, þá erum við sett aftur í kring til 'a.' 103 00:08:23,530 --> 00:08:29,280 En hver persóna fær hjóluðum niðri 6 stafir síðar í stafrófinu, og það er ekki mjög öruggt 104 00:08:29,280 --> 00:08:35,440 þar eru aðeins 26 möguleikar á hve marga vegu þú gætir sett staf. 105 00:08:35,440 --> 00:08:42,919 Svo þú getur bara reynt öll 26 af þeim og, væntanlega, að nógu lengi skilaboðum 106 00:08:42,919 --> 00:08:46,860 Aðeins 1 af þessum hugsanlegum 26 hluti er að fara að vera læsileg, 107 00:08:46,860 --> 00:08:50,300 og læsileg einn er að fara að vera upprunalega skeytið. 108 00:08:50,300 --> 00:08:56,240 Svo það er ekki mjög góð leið til að dulkóða eitthvað. 109 00:08:56,240 --> 00:08:59,070 Óskylt þeim stuttbuxur, "Hvað er fall?" 110 00:08:59,070 --> 00:09:03,370 Svo er það fall? Já. 111 00:09:03,370 --> 00:09:11,640 [Nemandi] Það er eins og sérstakt stykki af kóða sem þú getur hringt í til að fara í gegnum og þá fá aftur gildi hvað sem er. 112 00:09:11,640 --> 00:09:18,160 Já. Svo ég ætla að svara því með líka svara næsta - eða endurtaka við líka bara að svara næsta einn. 113 00:09:18,160 --> 00:09:22,410 Þú getur notað aðgerðir í stað þess að bara að afrita og líma kóðann aftur og aftur. 114 00:09:22,410 --> 00:09:27,200 Bara taka þessi númer, setja það inn í a fuction, og þá getur þú bara að hringja í aðgerð 115 00:09:27,200 --> 00:09:29,870 hvar sem þú hefur verið að afrita og líma. 116 00:09:29,870 --> 00:09:33,350 Svo aðgerðir eru gagnlegar. 117 00:09:33,350 --> 00:09:35,860 Svo nú að við gerum raunverulegt vandamál. 118 00:09:35,860 --> 00:09:46,490 Sú fyrsta. Svo hugmyndin um fyrsta er framhjá þér það band, og án tillits til - 119 00:09:46,490 --> 00:09:52,060 eða er það að segja alla lágstöfum? Það þýðir ekki að segja alla lágstöfum. 120 00:09:52,060 --> 00:09:57,730 Svo skilaboðin getur verið hvað sem er, og - ó nei. Það er. 121 00:09:57,730 --> 00:10:01,610 "Fyrir einfaldleiki, getur þú gert ráð fyrir að notandinn mun aðeins inntak lágstafir og bil." 122 00:10:01,610 --> 00:10:08,180 Þannig að við framhjá honum skilaboð með aðeins lágstöfum og þá varamaður 123 00:10:08,180 --> 00:10:15,450 milli há-og lágstafir - við breytt band til að vera höfuðborg og lágstöfum, til skiptis. 124 00:10:15,450 --> 00:10:22,920 Svo áður en við gefa þér annað að jafnvel kafa inn í vandamál, 125 00:10:22,920 --> 00:10:32,420 hvað er það fyrsta sem við þurfum að gera? 126 00:10:32,420 --> 00:10:36,900 Oh, hvað gerði ég smelli bara á? Ó, smellti ég bara á tölvupósti hér. 127 00:10:36,900 --> 00:10:42,870 Svo það fyrsta sem við þurfum að gera - ég er að leita á röngum einn? 128 00:10:42,870 --> 00:10:49,320 Er þetta hluti af þessu? 129 00:10:49,320 --> 00:10:51,320 Nei, eru þeir enn í það, þó. 130 00:10:51,320 --> 00:10:55,160 Jæja, enn hér. 131 00:10:55,160 --> 00:11:03,160 Nú getum við ekki gert ráð fyrir -? Já. Hér getum við ekki gert ráð fyrir að það er aðeins lágstöfum og rými. 132 00:11:03,160 --> 00:11:07,770 Svo nú þurfum við að takast á við þá staðreynd að bréf geta verið hvað sem við viljum þá til að vera. 133 00:11:07,770 --> 00:11:11,910 Og svo það fyrsta sem við viljum gera er bara að fá skilaboðin. 134 00:11:11,910 --> 00:11:19,790 Við þurfum bara að fá band, band S = GetString, allt í lagi. 135 00:11:19,790 --> 00:11:24,890 Nú þetta vandamál, there ert a par af leiðir til að gera það. 136 00:11:24,890 --> 00:11:29,840 En við erum að fara til að vilja nota Bita rekstraraðila hér. 137 00:11:29,840 --> 00:11:35,280 Eru fólk sem annað hvort voru ekki á supersection, 138 00:11:35,280 --> 00:11:37,480 eða eitthvað, ekki og vita ekki hvað Bita rekstraraðila eru? 139 00:11:37,480 --> 00:11:41,710 Eða hvernig þeir tengjast ASCII á einhvern hátt? 140 00:11:41,710 --> 00:11:45,650 [Nemandi] Ég var ekki á supersection, en ég veit hvað Bita rekstraraðila eru. 141 00:11:45,650 --> 00:11:49,560 Allt í lagi. Svo ég þarf ekki að fara yfir grunnatriði þeirra, en ég mun útskýra 142 00:11:49,560 --> 00:11:51,830 hvað við erum að fara að vilja til að nota hér. 143 00:11:51,830 --> 00:11:59,680 Svo 'A': Binary framsetning Capital, númerið er 65. 144 00:11:59,680 --> 00:12:07,560 Ég ætla bara að fara að horfa á - 41 er að fara að vera 01000001. 145 00:12:07,560 --> 00:12:14,170 Svo það ætti að vera 65 í aukastaf, svo er þetta tvöfaldur framsetning höfuðborginni eðli A. 146 00:12:14,170 --> 00:12:19,440 Nú er tvöfaldur framsetning eðli lágstafir 'a' 147 00:12:19,440 --> 00:12:33,350 er að fara til vera the sami hlutur, næstum. Er það - 6, já. Þetta er rétt. 148 00:12:33,350 --> 00:12:37,670 Svo tvöfaldur Capital, tvöfaldur lágstöfum 'a.' 149 00:12:37,670 --> 00:12:43,940 Svo eftir því að munurinn á milli A og 'a' er þetta einn hluti. 150 00:12:43,940 --> 00:12:49,440 Og þetta gerist á að vera 32 bita, sem hluti tákna fjölda 32. 151 00:12:49,440 --> 00:12:53,910 Og það er vit í því A er 65, 'a' er 97. 152 00:12:53,910 --> 00:12:56,610 Munurinn á milli þeirra er 32. 153 00:12:56,610 --> 00:13:03,770 Svo nú vitum við að við getum breytt úr A í A með því að taka 154 00:13:03,770 --> 00:13:09,710 og Bita ORing það með - það lítur út eins og a 1. 155 00:13:09,710 --> 00:13:20,900 Þetta er Bita OR, með 00100000, og sem mun gefa okkur 'a.' 156 00:13:20,900 --> 00:13:26,850 Og við getum fengið úr 'A' A eftir Bita ANDing 157 00:13:26,850 --> 00:13:33,700 með 11, 0 í þeim stað, 11111. 158 00:13:33,700 --> 00:13:43,840 Svo mun þá gefa okkur nákvæmlega það sem a 'var, en hætta út þetta einstaka hluti, 159 00:13:43,840 --> 00:13:50,070 þannig að við verðum 01000001, ég veit ekki hvort ég taldi rétt. 160 00:13:50,070 --> 00:13:56,750 En þessi tækni Bita ORing að fá frá höfuðborginni í lágstafi 161 00:13:56,750 --> 00:14:02,080 og Bita ANDing að fá frá lágstafir að fjármagni er ekki eingöngu til A. 162 00:14:02,080 --> 00:14:06,510 Öll bréf, K vs K, Z vs z, 163 00:14:06,510 --> 00:14:10,080 þeir eru allir bara að fara að vera mismunandi eftir þessum eina bita. 164 00:14:10,080 --> 00:14:16,290 Og svo þú getur notað það til að breyta úr öllum lágstafir bréf til hvaða höfuðborg bréf og öfugt. 165 00:14:16,290 --> 00:14:26,670 Allt í lagi. Svo auðveld leið til að fá úr þessu - svo í stað þess að þurfa að 166 00:14:26,670 --> 00:14:32,170 skrifa út hvað 1011111 er - auðveld leið til að tákna þetta númer, og þetta er ekki einn 167 00:14:32,170 --> 00:14:39,710 sem ég fór yfir í supersection en tilde (~) er annar Bita rekstraraðila. 168 00:14:39,710 --> 00:14:42,520 Hvað ~ er það lítur á hluti framsetning. 169 00:14:42,520 --> 00:14:45,630 Við skulum taka allir tala. 170 00:14:45,630 --> 00:14:53,130 Þetta er bara tvöfaldur fjöldi, og hvað ~ er er það selbiti bara öllum bita. 171 00:14:53,130 --> 00:15:00,630 Þannig að þetta var 1, nú 0, þetta er 0, nú 1, 010100. 172 00:15:00,630 --> 00:15:08,320 Svo það er allt ~ er. Svo 32 er að fara að tala - að losna við það - 173 00:15:08,320 --> 00:15:23,320 svo 32 er að fara að vera númer 00100000, og svo ~ af þessu er að fara að vera 174 00:15:23,320 --> 00:15:29,980 þetta númer hérna sem ég ANDed 'a' með. 175 00:15:29,980 --> 00:15:35,600 Er allir sjá að? Þetta er nokkuð algengt, eins og þegar þú vilt að reikna út 176 00:15:35,600 --> 00:15:40,740 fyrir síðari hluti sem við gætum verið að sjá, þegar við viljum sjá hvort - 177 00:15:40,740 --> 00:15:44,710 eða við viljum allt, hvert einasta bita setja nema 1 178 00:15:44,710 --> 00:15:47,910 þú hættir að gera ~ á hluti sem við viljum ekki sett. 179 00:15:47,910 --> 00:15:53,090 Þannig að við viljum ekki 32 bita setja, þannig að við gerum ~ af 32. 180 00:15:53,090 --> 00:15:57,790 Allt í lagi. Svo getum við notað alla þá hér. 181 00:15:57,790 --> 00:16:03,000 Allt í lagi, svo það er allt í lagi ef þú ert ekki gert, munum við smám saman ganga yfir saman, 182 00:16:03,000 --> 00:16:11,870 eða ganga á þessu, þannig að - í gegnum þetta. Ganga í gegnum þetta. 183 00:16:11,870 --> 00:16:20,790 Þannig að við höfum band okkar, og við viljum að lykkja yfir hvern staf í þeim streng og gera eitthvað við það. 184 00:16:20,790 --> 00:16:26,710 Svo hvernig gera við lykkja yfir strenginn? Hvað eigum við að nota? 185 00:16:26,710 --> 00:16:30,980 Ég ætla ekki að gera það hér. Já. 186 00:16:30,980 --> 00:16:42,940 Þannig að ég hef Iterator minn, og hann sagði það, en hvernig veit ég hversu margir stafir eru í streng? 187 00:16:42,940 --> 00:16:47,030 Strlen (s), þá i + +. 188 00:16:47,030 --> 00:16:49,860 Svo er það sem ég hef gert hér er ekki besta leiðin til að gera hlutina. 189 00:16:49,860 --> 00:16:51,860 Hefur einhver vita hvers vegna? 190 00:16:51,860 --> 00:16:55,290 Þar sem þú ert að haka við tungumál band hvert einasta skipti. 191 00:16:55,290 --> 00:17:06,859 Þannig að við erum að fara til að vilja færa strlen, ég gæti sagt upp hér, int lengd = strlen (s) 192 00:17:06,859 --> 00:17:11,900 og þá ekki ég 00:17:20,410 Ég gæti líka gert int i = 0, lengd = strlen (s). 194 00:17:20,410 --> 00:17:25,010 Og svo er þetta nokkuð betra, því nú hef ég takmarkað svigrúm 195 00:17:25,010 --> 00:17:29,150 af mismunandi lengd bara þetta 'fyrir' lykkju, í stað þess að lýsa það áður 196 00:17:29,150 --> 00:17:34,990 og að það er alltaf, og ef þú ekki skilið hvers vegna það er slæmt, 197 00:17:34,990 --> 00:17:39,410 eða hvers vegna upphaflega var slæmt, it's - byrja á for lykkju. 198 00:17:39,410 --> 00:17:43,380 Ég skoðaði ástand. Er i 00:17:46,790 Svo lengd s, við skulum vinna með "halló" allan tímann. 200 00:17:46,790 --> 00:17:49,670 Svo lengd s, h-e-L-L-o. Lengd er 5. 201 00:17:49,670 --> 00:17:57,580 Svo i = 0, lengd er 5, þannig að ég er ekki <5, þannig að lykkja heldur áfram. 202 00:17:57,580 --> 00:18:02,750 Svo við förum aftur. Við athuga ástand. Er i 00:18:08,390 Svo skulum athuga lengd Hello. H-E-L-L-o. Það er 5, ég er ekki <5, þannig að við höldum áfram aftur. 204 00:18:08,390 --> 00:18:13,330 Þannig að við erum að reikna, við erum að telja halló, fyrir hverja endurtekning á lykkju, 205 00:18:13,330 --> 00:18:17,380 jafnvel talið að það er aldrei að fara að breytast, það er alltaf að fara að vera 5. 206 00:18:17,380 --> 00:18:22,530 Svo við minnumst bara 5 upp að framan, og nú er allt betra. 207 00:18:22,530 --> 00:18:24,990 Svo iterating yfir allt band. 208 00:18:24,990 --> 00:18:31,470 Hvað viljum við gera fyrir hvern staf í strengnum? 209 00:18:31,470 --> 00:18:38,510 [Námsmaður séð óskiljanlegur] 210 00:18:38,510 --> 00:18:47,000 Já. Svo, ef eðli er ekki Stafrófsröð, þá viljum við bara að sleppa yfir það. 211 00:18:47,000 --> 00:18:52,300 Vegna þess að við umönnun aðeins um stafrófsröð stafi, við getum ekki að eignfæra númer. 212 00:18:52,300 --> 00:19:10,850 Og hvernig getum við gert þetta? Svo ástandi okkar, þannig að ef við viljum eitthvað - athuga hvort það er stafrófsröð. 213 00:19:10,850 --> 00:19:14,060 Svo hvernig gera athuga við þetta? 214 00:19:14,060 --> 00:19:18,720 [Nemandi] Þú getur bara notað aðgerðina er alfa. 215 00:19:18,720 --> 00:19:23,160 Er það með í annað hvort af þessu, eða eru eins, char.h eða eitthvað? 216 00:19:23,160 --> 00:19:32,710 Við skulum ekki nota er alfa virka, og nota skýr - svo við höfum s [i], 217 00:19:32,710 --> 00:19:40,460 sem er áttunda eðli s, muna að strengur er fylki af stöfum, 218 00:19:40,460 --> 00:19:43,180 svo áttundi stafurinn í s. 219 00:19:43,180 --> 00:19:49,280 Nú, ef það er höfuðborg bréf, vitum við að það þarf að vera á ákveðnu bili. 220 00:19:49,280 --> 00:19:54,370 Og hvað er það svið? 221 00:19:54,370 --> 00:20:07,860 Já. Svo ef s [i] er ≥ 65, og s [i] er ≤ 90, hvað ætti ég að gera í staðinn? 222 00:20:07,860 --> 00:20:18,470 Já. Svo þú ættir að alveg aldrei að vita ASCII gildi neitt ever. 223 00:20:18,470 --> 00:20:25,640 Aldrei hugsa um tölurnar 65, 90, 97 og 102, eða hvað sem það er. 224 00:20:25,640 --> 00:20:32,470 Þú þarft ekki að - 112 - þú þarft ekki að vita þá á öllum. Það er rangt líka. 225 00:20:32,470 --> 00:20:41,940 Aðeins má nota einn-enskar gæsalappir, einn Fastar vitna. Svo er 'A' og minna en 90 'Z. " 226 00:20:41,940 --> 00:20:47,930 Og þetta er verulega betri - ég myndi ekki vita af the toppur af minn höfuð sem Z er 90. 227 00:20:47,930 --> 00:20:52,690 Ég veit burt the toppur af minn höfuð að "Z" er höfuðborg Z. 228 00:20:52,690 --> 00:21:02,100 Svo eins lengi og þetta er á bilinu Capital í höfuðborg Z, eða við getum stöðva fyrir lágstöfum, 229 00:21:02,100 --> 00:21:17,010 Eða ef það er á bilinu ≥ 'a' og ≤ z. 230 00:21:17,010 --> 00:21:19,010 Svo það er ástand okkar. 231 00:21:19,010 --> 00:21:22,520 The stíl fyrir hvar á að setja þetta mismunandi. 232 00:21:22,520 --> 00:21:29,520 Ég geri það svona. 233 00:21:29,520 --> 00:21:31,520 Nú, hvað við viljum gera? 234 00:21:31,520 --> 00:21:39,530 Við vitum að þetta bréf er karakter, sem bókstaf. 235 00:21:39,530 --> 00:21:46,270 Þannig að við þurfum að skipta á milli hvort þetta ætti nú að vera höfuðborg bréf eða lágstafir bréf. 236 00:21:46,270 --> 00:21:48,820 Hvernig halda við utan um hver við viljum það til að vera? 237 00:21:48,820 --> 00:21:55,520 [Námsmaður raddir, óskiljanlegur] 238 00:21:55,520 --> 00:21:59,150 Svo já, en láta mig stöðva. 239 00:21:59,150 --> 00:22:04,910 Module 0-2 var sagt, var tillaga hent út, og ég er sammála með það. 240 00:22:04,910 --> 00:22:11,780 Nema fyrirvara að eins - er þetta málið? Já. 241 00:22:11,780 --> 00:22:18,270 Það er annan hvern einn, en við getum ekki mát 2 I, eða i unga fólkið 2, þar sem 242 00:22:18,270 --> 00:22:22,950 eftir því að E er höfuðborg og 'a' er lágstöfum? En það er pláss aðskilja þau? 243 00:22:22,950 --> 00:22:27,150 Svo þeir eru að fara að vera sú sama unga fólkið 2, en þeir eru mismunandi tilvikum. 244 00:22:27,150 --> 00:22:29,150 [Námsmaður spurning, óskiljanlegur] 245 00:22:29,150 --> 00:22:34,690 Já. Þannig að við erum bara að fara að halda að telja. 246 00:22:34,690 --> 00:22:38,730 Við gætum líka gert það hér ef við vildum, sem gæti fengið smá ómeðfærilegur 247 00:22:38,730 --> 00:22:41,300 í fyrir yfirlýsingum lykkja, ég set það upp hér. 248 00:22:41,300 --> 00:22:48,840 Svo int telja = byrjar á 0. 249 00:22:48,840 --> 00:22:54,070 Og nú ætla ég að telja hversu margir stafrófsröð stafir sem við höfum haft. 250 00:22:54,070 --> 00:22:59,550 Þannig að við erum óhjákvæmilega að fara að telja + + þar sem við fundum annan bókstaf. 251 00:22:59,550 --> 00:23:09,130 En, svo nú þú ert að segja ef telja unga fólkið 2. 252 00:23:09,130 --> 00:23:12,590 Svo hvað ef telja unga fólkið 2? Oh. Ég geri == 0 fyrir nú. 253 00:23:12,590 --> 00:23:21,740 Við munum einnig fara yfir það. Svo ef telja unga fólkið 2 == 0, hvað þá? 254 00:23:21,740 --> 00:23:27,830 [Nemendur svar, óskiljanlegur] 255 00:23:27,830 --> 00:23:32,750 Þannig að við viljum það til að enda upp hástafi. 256 00:23:32,750 --> 00:23:37,520 Það eru 2 tilfelli, hástafi og lágstafir eru 2 tilfelli. 257 00:23:37,520 --> 00:23:40,990 Þannig að ef við erum með lágstöfum við þurfum að gera það hástafi. 258 00:23:40,990 --> 00:23:43,710 Ef það er hástafi við þurfum ekki að gera neitt. 259 00:23:43,710 --> 00:23:50,760 En, er there a vegur - shouldn't hafa hreifi - 260 00:23:50,760 --> 00:23:54,800 sem við gerum ekki einu sinni þurft að athuga hvort það er hástafi eða lágstafir? 261 00:23:54,800 --> 00:24:02,240 Hvað getum við gert til að alltaf að tryggja að við enda alltaf upp í hástafi? 262 00:24:02,240 --> 00:24:07,830 Svo taka það sem við gerðum fyrir lágstafir 'A', hvað ef við gerðum þetta sama nákvæmlega hlutur í hástafi A? 263 00:24:07,830 --> 00:24:11,900 Er hástafi breyting, eða hefur gildi breyting? 264 00:24:11,900 --> 00:24:23,100 Já. Svo hvaða staf höfuðborg Bita ANDed með ~ 32 er að fara að vera að sama hástaf 265 00:24:23,100 --> 00:24:29,220 því fyrir hástaf á 32. hluti er ekki sett. 266 00:24:29,220 --> 00:24:40,920 Þannig að ef við viljum að koma persónu s [i], við viljum það til að verða lágstafir eða hástafi. 267 00:24:40,920 --> 00:24:46,890 Svo ef það var lágstafir, það er nú hástafi, ef það var hástafi, það er enn hástafi, og það er það. 268 00:24:46,890 --> 00:24:54,290 Ég sagði þetta í supersection: Þú getur notað 32 ef þú vilt, en ég tilhneigingu til að vilja gera 'A' - A, 269 00:24:54,290 --> 00:25:01,150 staðinn af réttlátur látlaus 32, vegna þess að það getur verið öðrum hluti. 270 00:25:01,150 --> 00:25:03,610 Eftir 32 hluti, það getur verið að eitthvað af þessu, eða við myndum ekki hafa nóg 271 00:25:03,610 --> 00:25:05,840 númer til að tákna alla stafi. 272 00:25:05,840 --> 00:25:09,110 Svo ef þú færð 32 hluti, það gæti verið að 64 bita, það gæti verið 128 bita. 273 00:25:09,110 --> 00:25:13,990 Eitthvað af þessum bitum gæti verið hluti sem greinir á milli hástafi og lágstafi. 274 00:25:13,990 --> 00:25:18,350 Ég ætti ekki að þurfa að vita að það er 32 bita. 275 00:25:18,350 --> 00:25:27,130 Ég get notað þetta "A" - A að fá hluti sem er mismunandi á milli tveggja 276 00:25:27,130 --> 00:25:33,000 án þess að þurfa að treysta á galdur númer sem er 32. 277 00:25:33,000 --> 00:25:38,770 Og svo nú, annars telja var stakur, og svo hvað vil ég gera? 278 00:25:38,770 --> 00:25:43,920 [Námsmaður svarar óskiljanlegur] 279 00:25:43,920 --> 00:25:45,920 [Nemandi] Hvað er það? 280 00:25:45,920 --> 00:25:49,850 Ég mun gera það í 1 sekúndu. 281 00:25:49,850 --> 00:25:55,690 Svo nú ef ég vil - ég vil vera viss um að eðli er nú lágstafir, 282 00:25:55,690 --> 00:26:04,140 og svo get ég eða um 32, og 'a' 32 merkingu - A. 283 00:26:04,140 --> 00:26:06,510 En tilkynningu, með sama rökum sem fyrri, að ef 284 00:26:06,510 --> 00:26:11,670 Bréfið var þegar lágstafir, þá ORing um 32 bara heldur lágstafir. 285 00:26:11,670 --> 00:26:16,220 Það hefur ekki breytt upprunalega eðli. 286 00:26:16,220 --> 00:26:19,910 En núna er ég ekki að koma í veg fyrir að segja: "Ef það er lágstafir, bara gleyma óður í það, 287 00:26:19,910 --> 00:26:23,650 ef það er hástafi, þá breyta því. " 288 00:26:23,650 --> 00:26:26,900 Það er miklu þægilegra að gera þetta. 289 00:26:26,900 --> 00:26:33,190 [Nemandi] Vildi að stefna að draga hástafi frá lágstafir vinnu ef það væri ekki 32? 290 00:26:33,190 --> 00:26:35,330 Ef það var, eins og, 34 eða eitthvað? 291 00:26:35,330 --> 00:26:41,840 Svo, þú þarft að vita að munurinn á milli 2 er -? >> 1 bita. 292 00:26:41,840 --> 00:26:49,840 Það gæti verið meira en 1 hluti, svo lengi sem allar bita undir þessari stöðu eru þau sömu. 293 00:26:49,840 --> 00:26:58,500 Þannig að við þurfum að minnsta kosti 26 stafi - eða, það eru 26 stafir. 294 00:26:58,500 --> 00:27:04,590 Þannig að við þurfum að minnsta kosti 26 tölur til að tákna muninn - 295 00:27:04,590 --> 00:27:07,650 Munurinn milli A og A 'verður að vera að minnsta kosti 26, 296 00:27:07,650 --> 00:27:10,760 eða annað sem við viljum ekki hafa fulltrúa allt hlutafé tölur. 297 00:27:10,760 --> 00:27:18,630 Það þýðir að ef við byrjum á 1, það er að fara að nota allar þessar bita, 298 00:27:18,630 --> 00:27:23,900 allar þessar fyrstu 5 bita, til að tákna allt með Z. 299 00:27:23,900 --> 00:27:32,170 Þess vegna er næsta hluti, eða þetta hluti er næsta hluti er sá sem er valinn til að greina á milli A og 'a.' 300 00:27:32,170 --> 00:27:40,930 Það er líka hvers vegna í ASCII töflunni, það eru 5 tákn aðskilja hástafi úr lágstöfum. 301 00:27:40,930 --> 00:27:49,050 Þar sem eru tákn, auka 5 sem koma upp 32 að munurinn á milli þeirra. 302 00:27:49,050 --> 00:27:51,840 [Nemandi] Þannig að við gætum gert það, því ASCII er hönnuð þannig. 303 00:27:51,840 --> 00:27:57,280 Já. En ASCII - munurinn gæti líka verið báðum þessum bita. 304 00:27:57,280 --> 00:28:12,040 Eins, ef A var 10000001, og 'a' var 11100001 - Ég gleymi, hvað sem er. 305 00:28:12,040 --> 00:28:18,100 En ef það væri það, þá gætum við samt að nota 'a' - A. 306 00:28:18,100 --> 00:28:22,650 Það er bara nú munurinn á milli og 'a' er enn þessir 2 bitar. 307 00:28:22,650 --> 00:28:32,240 Ég held að það er skrifað 48. Er það 32 + 64? Ég held að það sé? 308 00:28:32,240 --> 00:28:40,160 Það myndi enn vera 2 bitar, hvert einasta staf, eins og, Z og Z, K og K, 309 00:28:40,160 --> 00:28:45,160 Þeir myndu samt hafa sömu nákvæmlega bita sett nema fyrir þá 2 bita. 310 00:28:45,160 --> 00:28:48,870 Svo eins lengi og það er alltaf satt, óháð því hvort við erum að nota ASCII eða einhver önnur kerfi, 311 00:28:48,870 --> 00:28:53,050 svo lengi sem það er bara a setja fjölda bita sem eru mismunandi fyrir hvern staf, 312 00:28:53,050 --> 00:28:55,050 þá virkar það fínt. 313 00:28:55,050 --> 00:29:06,110 Það er bara að 32 var sett upp vegna þess að það er það fyrsta sem við gætum hugsanlega notað. >> Cool. 314 00:29:06,110 --> 00:29:14,520 ÉG hafa tilhneigingu til að kjósa, ef þú hefur ekki séð, ef blokk er bara ein lína, 315 00:29:14,520 --> 00:29:24,280 er hægt að fá losa af the hrokkið axlabönd, þannig að ég tilhneigingu til að kjósa að gera þetta. 316 00:29:24,280 --> 00:29:34,010 Einnig, þú veist hvernig við getum gert hlutina eins og s [i] + = 1? 317 00:29:34,010 --> 00:29:41,090 Þú getur líka gert s [i] Bita og = 32. 318 00:29:41,090 --> 00:29:46,400 Og Bita OR = 32. 319 00:29:46,400 --> 00:29:51,490 Einnig telja unga fólkið 2 == 0. 320 00:29:51,490 --> 00:30:00,900 Svo muna að - ég mun ekki skrifa það - allir non-núll gildi er satt, og 0 er rangt. 321 00:30:00,900 --> 00:30:07,880 Svo "ef telja unga fólkið 2 == 0" er eins og að segja "ef ekki telja unga fólkið 2." 322 00:30:07,880 --> 00:30:11,580 Ég myndi sennilega hafa bara snúið við línurnar og sagði, "ef telja unga fólkið 2, 323 00:30:11,580 --> 00:30:15,350 gera á eða 1, annað er á og 1, "svo að ég þarf ekki að" ekki. " 324 00:30:15,350 --> 00:30:18,650 En þetta virkar alveg eins vel. 325 00:30:18,650 --> 00:30:25,660 Og hvað annað get ég gert hér? 326 00:30:25,660 --> 00:30:29,060 Þú getur sameinað þá með ternary ef þú vildir, en þá myndi bara gera hlutina Messier 327 00:30:29,060 --> 00:30:33,770 og líklega erfiðara að lesa, þannig að við munum ekki gera það. 328 00:30:33,770 --> 00:30:37,330 Einhver hefur einhverjar aðrar uppástungur? 329 00:30:37,330 --> 00:30:41,580 Er að öll vandamál bað? Ó já. 330 00:30:41,580 --> 00:30:51,070 Svo að losna af þessum tómar línur, nú munum við prentað f,% s að vera einn fyrir strengi, 331 00:30:51,070 --> 00:30:56,620 Við munum prenta f, s. 332 00:30:56,620 --> 00:30:59,330 Nú skulum hlaupa það. Gerði ég eitthvað rangt? 333 00:30:59,330 --> 00:31:03,200 Það er \ ", Ég vil fá n. 334 00:31:03,200 --> 00:31:07,840 Allt í lagi. Nú munum við keyra það. Það verður sennilega æpa á mig. 335 00:31:07,840 --> 00:31:11,250 Strlen er string.h. 336 00:31:11,250 --> 00:31:14,290 Þannig að þetta er ágætur hlutur óður Clang það segir þér hvað það er í, 337 00:31:14,290 --> 00:31:19,140 stað GCC sem bara segir: "Hey, þú gleymdir eitthvað, veit ég ekki hvað það var." 338 00:31:19,140 --> 00:31:29,220 En þetta mun segja við mig: "Þú átt að fela string.h." 339 00:31:29,220 --> 00:31:32,130 Svo ég ekki hvetja fyrir neitt, svo það er ekki að segja neitt. 340 00:31:32,130 --> 00:31:42,540 En við munum gera fordæmi þeirra, "thanks 4 the add". 341 00:31:42,540 --> 00:31:47,880 Það lítur til hægri. Húrra. 342 00:31:47,880 --> 00:31:52,370 Svo aftur til helstu þinn, næstum ég aldrei gera það. 343 00:31:52,370 --> 00:31:57,110 Það er valfrjálst. Og helstu er eina virka sem það er valfrjálst. 344 00:31:57,110 --> 00:32:07,140 Ef þú aftur ekki neitt af helstu, er gert ráð fyrir að þú átt að skila 0. 345 00:32:07,140 --> 00:32:13,070 Spurningar? 346 00:32:13,070 --> 00:32:20,980 Allt í lagi. Svo nú er annað vandamál. 347 00:32:20,980 --> 00:32:24,810 "Muna frá seinni fyrirlestur viku 2 er að skipta gildi 2 breytum með því að farið 348 00:32:24,810 --> 00:32:30,780 þessir 2 breytur til að virka (jafnvel þótt kallað skipti) er ekki nákvæmlega vinna, að minnsta kosti ekki án þess 'ábendingum. " 349 00:32:30,780 --> 00:32:37,020 Og hunsa ábendingar þar til við að komast að þeim. 350 00:32:37,020 --> 00:32:40,070 Við viljum að skipta 2 breytur, við erum ekki að nota aðgerð til að gera það. 351 00:32:40,070 --> 00:32:43,410 Við erum enn að fara að gera það í helstu eins og það segir. 352 00:32:43,410 --> 00:32:48,360 En til að nota þá 2 breytur, gera við viljum ekki að nota tímabundið breytu. 353 00:32:48,360 --> 00:32:50,770 Það eru 2 leiðir til að gera þetta. 354 00:32:50,770 --> 00:32:56,310 Þú getur gert það með því að nota hefðbundin tvöfaldur þinn rekstraraðila. 355 00:32:56,310 --> 00:33:00,180 Svo hjartarskinn einhver vita fljótur og óhreinn vegur að gera það? 356 00:33:00,180 --> 00:33:07,650 Það gæti reyndar tekið smá stund til að hugsa. Ef ég hef - 357 00:33:07,650 --> 00:33:12,130 Ég stilla vandamál upp eins og þeir spyrja. Svo ef ég hef 2 breytur, A, sem er bara heiltala 358 00:33:12,130 --> 00:33:17,800 sem þeir gefa mér, og summan breytu B, sem er annar heiltala sem ég er gefin. 359 00:33:17,800 --> 00:33:22,700 Svo ef ég hef þessar 2 breytur, nú vil ég að skipta á þeim. 360 00:33:22,700 --> 00:33:31,550 Hin hefðbundna, með reglubundnum tvöfaldur þinn stjórnandi, ég meina, eins og +, -, ÷. 361 00:33:31,550 --> 00:33:36,630 Ekki Bita rekstraraðila sem starfa á tvöfaldur. 362 00:33:36,630 --> 00:33:39,600 Svo með -, +, ÷, og allir þeir. 363 00:33:39,600 --> 00:33:52,980 Við gætum skipta með því að gera eitthvað eins og a = a + b og b = a - b, a = a - b. 364 00:33:52,980 --> 00:34:04,260 Svo, geðheilbrigði athuga, og þá munum við sjá hvers vegna það virkar. 365 00:34:04,260 --> 00:34:13,320 Segjum a = 7, b = 3, þá a + b er að fara að vera 10. 366 00:34:13,320 --> 00:34:18,820 Þannig að við erum nú að setja a = 10, og þá erum við að gera b = a - b. 367 00:34:18,820 --> 00:34:30,250 Þannig að við erum að gera b = a - b, sem er að fara að vera 7, og b = a - b-aftur, 368 00:34:30,250 --> 00:34:38,650 eða a = a - b. Hver er að fara að vera 10-7 sem er 3. 369 00:34:38,650 --> 00:34:44,850 Svo nú, rétt, 'a' var 7, b var 3, og nú er b-7 og 'a' er 3. 370 00:34:44,850 --> 00:34:48,679 Svo gerir þannig tilfinningu, "a" er blanda af 2 númer. 371 00:34:48,679 --> 00:34:53,000 Á þessum tímapunkti, "a" er samsetning, og svo erum við að draga út upprunalega b, 372 00:34:53,000 --> 00:34:56,860 og svo erum við að draga út hvað var upphaflega "a." 373 00:34:56,860 --> 00:35:01,150 En þetta virkar ekki fyrir allar tölur. 374 00:35:01,150 --> 00:35:08,880 Til að sjá þetta, við skulum íhuga kerfi, þannig að við höldum yfirleitt heiltölur og 32 bita. 375 00:35:08,880 --> 00:35:13,050 Við skulum vinna á eitthvað sem er bara eins og 4 bita. 376 00:35:13,050 --> 00:35:15,450 Vonandi kem ég með gott dæmi núna. 377 00:35:15,450 --> 00:35:18,680 Svo, ég veit, þetta verður auðvelt. 378 00:35:18,680 --> 00:35:26,720 Segjum 2 númer okkar eru 1111 og 1111, þannig að við erum í tvöfaldur núna. 379 00:35:26,720 --> 00:35:34,630 Í raun aukastöfum, ef þú vilt að hugsa um það þannig, a = 15 og b = 15. 380 00:35:34,630 --> 00:35:37,630 Og svo gerum við ráð fyrir, eftir að við skipta þeim - þeir gera ekki einu sinni að vera sömu tölur, 381 00:35:37,630 --> 00:35:41,140 en ég gerði þetta svona. 382 00:35:41,140 --> 00:35:47,100 Við skulum gera þá ekki sömu tölur. Við skulum gera 1111 og 0001. 383 00:35:47,100 --> 00:35:51,860 Svo a = 15 og b = 1. 384 00:35:51,860 --> 00:35:57,670 Eftir að við skipta þá búast við 'a' til að vera 1 og B að vera 15. 385 00:35:57,670 --> 00:36:01,780 Svo er fyrsta skref okkar a = a + b. 386 00:36:01,780 --> 00:36:08,770 Númer okkar eru aðeins 4 bitar á breidd, svo 'a,' sem er 1111, + b, sem er 0001, 387 00:36:08,770 --> 00:36:16,780 er að fara að enda því að vera 10000, en við höfum bara 4 bita. 388 00:36:16,780 --> 00:36:22,540 Svo nú a = 0. 389 00:36:22,540 --> 00:36:34,080 Og nú viljum við að setja b = A - B - í raun, þetta er enn gengur fullkomlega. 390 00:36:34,080 --> 00:36:39,630 a = A - B - við skulum sjá hvort þetta gengur fullkomlega. 391 00:36:39,630 --> 00:36:53,720 Svo b = 0 - 1, sem myndi enn vera 15, og þá a = a - b, sem væri 1. 392 00:36:53,720 --> 00:36:56,210 Kannski virkar þetta. 393 00:36:56,210 --> 00:36:59,020 Mér finnst eins og það er ástæða það virkar ekki að nota reglulega. 394 00:36:59,020 --> 00:37:06,400 Jæja, svo að vinna á þeirri forsendu að það virkar ekki með reglulegri starfsemi tvöfaldur, 395 00:37:06,400 --> 00:37:15,040 og ég mun leita - ég Google til að sjá hvort það er satt. 396 00:37:15,040 --> 00:37:23,490 Þannig að við viljum gera það með því að nota Bita rekstraraðila, og vísbending hér er XOR. 397 00:37:23,490 --> 00:37:28,780 Svo, kynna XOR (^) ef þú hefur ekki séð það enn. 398 00:37:28,780 --> 00:37:34,610 Það er, aftur, Bita rekstraraðila þannig að það virkar smátt og smátt, og it's - 399 00:37:34,610 --> 00:37:39,910 Ef þú hefur bits 0 og 1, þá mun þetta vera 1. 400 00:37:39,910 --> 00:37:45,230 Ef þú ert með bita 1 og 0, það verður 1, hefur þú bits 0 og 0 Það verður 0, 401 00:37:45,230 --> 00:37:47,640 og ef þú ert með bita 1 og 1 það verður 0. 402 00:37:47,640 --> 00:37:56,180 Svo það er eins og OR. Ef annað af bits eru sönn, það er 1, en ólíkt OR, það er ekki hægt að vera bæði bitar sem eru sönn. 403 00:37:56,180 --> 00:37:59,320 OR hefði þetta verið 1, XOR hefði þetta verið 0. 404 00:37:59,320 --> 00:38:02,250 Þannig að við erum að fara til að vilja nota XOR hér. 405 00:38:02,250 --> 00:38:09,960 Hugsaðu um það í eina mínútu, ég ætla að Google. 406 00:38:09,960 --> 00:38:16,230 Jæja, getur þú ekki lesið það, ég er nú á skipti XOR reiknirit síðu. 407 00:38:16,230 --> 00:38:21,340 Vonandi mun útskýra hvers vegna ég skóf - 408 00:38:21,340 --> 00:38:34,190 Þetta er einmitt reiknirit sem við gerðum bara. 409 00:38:34,190 --> 00:38:37,330 Ég samt skil ekki af hverju - ég þarf að hafa bara valið slæmt fordæmi, 410 00:38:37,330 --> 00:38:44,940 en þetta mál þar sem 'a' varð að verða 0, eftir að hafa í 5 bita, svo nú "a" er 0, 411 00:38:44,940 --> 00:38:48,730 það er það sem er kallað "heiltölu flæða." 412 00:38:48,730 --> 00:38:54,370 Samkvæmt Wikipedia, "Ólíkt XOR skipti, þessi breyting krefst þess að það notar nokkrar aðferðir 413 00:38:54,370 --> 00:38:59,780 að tryggja að x + y veldur ekki heiltala flæða. " 414 00:38:59,780 --> 00:39:08,350 Svo hefur þetta vandamál, þetta var heiltölu flæða, en ég gerði eitthvað rangt. 415 00:39:08,350 --> 00:39:10,520 Ég er ekki viss. Ég ætla að reyna að koma upp með annað. 416 00:39:10,520 --> 00:39:13,640 [Nemandi] Jæja, er ekki heiltala flæða þegar þú ert að reyna að setja númer á það 417 00:39:13,640 --> 00:39:16,640 stærri en nemur bitum sem þú hefur úthlutað? 418 00:39:16,640 --> 00:39:23,730 Já. Við höfum 4 bita. That's - við höfðum 4 bita, reynum þá að bæta 1 við það, þannig að við enda upp með 5 bitum. 419 00:39:23,730 --> 00:39:26,690 En fimmta hluti bara fær skera burt, já. 420 00:39:26,690 --> 00:39:28,970 Það gæti í raun og veru - 421 00:39:28,970 --> 00:39:33,010 [Nemandi] Er að henda þér villa, eða gerir það - væri að kasta villu? 422 00:39:33,010 --> 00:39:40,720 Nei Svo er það engin villa. Þegar þú fá til the samkoma stig, sérstaka hluti 423 00:39:40,720 --> 00:39:47,020 einhvers staðar er stillt sem sagði það var gnægð, en í C þú svona bara eiga ekki við það. 424 00:39:47,020 --> 00:39:55,160 Þú í raun ekki hægt að takast á við það nema þú notar sérstakar leiðbeiningar samkoma í C. 425 00:39:55,160 --> 00:39:58,110 Við skulum hugsa um skipti XOR. 426 00:39:58,110 --> 00:40:02,220 Og ég held að Wikipedia grein gæti hafa verið að segja að - 427 00:40:02,220 --> 00:40:07,310 Svo það kom líka upp mát tölur, svo ég giska á að ég var, í orði, að gera mát tölur 428 00:40:07,310 --> 00:40:11,160 þegar ég sagði að 0 - 1 er 15 aftur. 429 00:40:11,160 --> 00:40:15,410 Svo það gæti í raun - með reglulegu örgjörva sem gerir 0 - 1 = 15. 430 00:40:15,410 --> 00:40:20,430 Þar sem við á endanum á 0, við draga 1, svo þá hula bara aftur í kring til 1111. 431 00:40:20,430 --> 00:40:28,930 Svo þetta reiknirit gæti raunverulega vinna, a + b, A - B, B - A; það gæti verið í lagi. 432 00:40:28,930 --> 00:40:34,030 En það er sumir örgjörvum sem gera það ekki, og svo að það væri ekki allt í lagi í þessum sérstökum sjálfur. 433 00:40:34,030 --> 00:40:39,880 XOR skipti vilja vinna á hvaða örgjörva. Allt í lagi. 434 00:40:39,880 --> 00:40:42,280 Hugmyndin er að það er ætlast til að vera sama, þó. 435 00:40:42,280 --> 00:40:50,120 Þar sem við erum að nota XOR til einhvern veginn að fá upplýsingar um bæði í 1 af breytum, 436 00:40:50,120 --> 00:40:54,120 og þá draga út upplýsingar á einstökum breytum aftur. 437 00:40:54,120 --> 00:41:04,330 Svo er einhver hafa hugmyndir / svarið? 438 00:41:04,330 --> 00:41:14,540 [Námsmaður svar, óskiljanlegur] 439 00:41:14,540 --> 00:41:22,220 Svo þetta ætti að vinna, og einnig, XOR er commutative. 440 00:41:22,220 --> 00:41:27,620 Óháð því hvaða röð þessar 2 tölur verður að vera í allt hér, 441 00:41:27,620 --> 00:41:30,100 Þessi niðurstaða er að fara til vera the sami. 442 00:41:30,100 --> 00:41:35,800 Svo ^ B er b ^ a. 443 00:41:35,800 --> 00:41:51,860 Þú gætir líka séð þetta skrifað sem ^ = b, b ^ = a, a ^ = b aftur. 444 00:41:51,860 --> 00:42:00,200 Svo er þetta rétt, og til að sjá hvers vegna þetta virkar, hugsa um bita. 445 00:42:00,200 --> 00:42:10,400 Using a smallish tala, segjum 11001, og 01100. 446 00:42:10,400 --> 00:42:12,790 Svo er þetta 'a', þetta er b. 447 00:42:12,790 --> 00:42:15,540 Svo ^ = b. 448 00:42:15,540 --> 00:42:22,380 Við erum að fara að setja = 'A' til XOR þessara 2 hlutum. 449 00:42:22,380 --> 00:42:32,920 Svo 1 ^ 0 er 1, 1 ^ 1 er 0, 0 ^ 1 er 1, og 0 ^ 0 er 0, 1 ^ 0 er 1. 450 00:42:32,920 --> 00:42:37,380 Svo "a," ef þú horfir á heiltala, það er að fara að vera - 451 00:42:37,380 --> 00:42:41,160 þú ert ekki að fara að sjá mikið af sambandi milli upprunalegu "A" og nýtt "a," 452 00:42:41,160 --> 00:42:45,600 en að horfa á bita, 'a' er nú eins möskva á upplýsingum 453 00:42:45,600 --> 00:42:49,970 bæði upprunalegu 'A' og upprunalega b. 454 00:42:49,970 --> 00:42:57,930 Þannig ef við tökum B ^ a, sjáum við að við munum á endanum á upprunalegu "a." 455 00:42:57,930 --> 00:43:08,910 Og ef við tökum upprunalega 'a' ^ The New 'a,' sjáum við á endanum á upprunalegu b. 456 00:43:08,910 --> 00:43:18,380 Svo (a ^ b) ^ B = 'a.' Upprunalega 457 00:43:18,380 --> 00:43:27,910 Og (a ^ b) ^ a = upprunalega b. 458 00:43:27,910 --> 00:43:37,010 Það er - önnur leið til að sjá þetta er eitthvað XOR sjálft er alltaf 0. 459 00:43:37,010 --> 00:43:45,020 Svo 1101 ^ 1101, eru allar bits fara að vera sú sama. 460 00:43:45,020 --> 00:43:47,920 Þannig að það er aldrei að fara að vera raunin þar sem 1 er 0 og hitt er 1. 461 00:43:47,920 --> 00:43:51,080 Svo er þetta 0000. 462 00:43:51,080 --> 00:43:57,240 Sama með þetta. (A ^ b) ^ b er eins og a ^ (b ^ b). 463 00:43:57,240 --> 00:44:03,680 (B ^ b) er að fara að vera 0, a ^ 0 er bara að fara að vera "a," þar sem allir bitar eru 0. 464 00:44:03,680 --> 00:44:08,050 Svo þeir einu sem eru að fara að vera þar 'a' var upphaflega 1 - átti sjálfur. 465 00:44:08,050 --> 00:44:12,070 Og sama hugmynd hér, ég er nokkuð viss um að það er líka commutative. 466 00:44:12,070 --> 00:44:17,590 Já. Ég gerði segja fyrir að það var commutative. 467 00:44:17,590 --> 00:44:24,680 The ^ 'a,' og það er tengin, svo nú (b ^ a) ^ a. 468 00:44:24,680 --> 00:44:28,970 Og við getum gert B ^ (a ^ a). 469 00:44:28,970 --> 00:44:31,540 Og svo aftur, fáum við upprunalegu b. 470 00:44:31,540 --> 00:44:37,120 Svo 'a' er nú blanda af 'A' og B saman. 471 00:44:37,120 --> 00:44:49,660 Nota nýja greiða okkar a 'við segjum b = greiða' a '^ upprunalega b, fáum við upprunalega "a." 472 00:44:49,660 --> 00:45:05,170 Og nú = combo 'a' ^ nýja b, sem var upprunalega - eða sem er nú það sem var 'a' eða b. 473 00:45:05,170 --> 00:45:13,620 Það er þetta mál hérna. Þetta er = b, gamla b. 474 00:45:13,620 --> 00:45:16,550 Svo nú er allt aftur í skipti röð. 475 00:45:16,550 --> 00:45:22,960 Ef við litum reyndar á bita, b = a ^ b, er að fara að XOR þessar 2, 476 00:45:22,960 --> 00:45:33,920 og svarið er að fara að vera svona, og þá a = a ^ b er XORing þessar 2 og svarið er þetta. 477 00:45:33,920 --> 00:45:41,090 Spurningar? Allt í lagi. Svo er síðasta einn nokkuð verulega erfiðara. 478 00:45:41,090 --> 00:45:43,180 [Nemandi] Ég held að hann hefur a spurning um það. >> Ó, fyrirgefðu. 479 00:45:43,180 --> 00:45:49,380 [Nemandi] Hvað er í raun hraðar? Ef þú notar þessa XOR, eða er það ef þú lýsa nýja breytu? 480 00:45:49,380 --> 00:45:55,190 Svo það er í raun hraðar, lýsa nýja breytu eða nota XOR til að skipta? 481 00:45:55,190 --> 00:45:59,600 Svarið er, að öllum líkindum, tímabundin breytu. 482 00:45:59,600 --> 00:46:05,780 Og það er vegna þess að þegar það er saman niður - það á söfnuðinum stigi, 483 00:46:05,780 --> 00:46:12,320 það er ekkert sem heitir staðbundin breytu eða hvaða tímabundnar breytur eða eitthvað af þessu efni. 484 00:46:12,320 --> 00:46:16,060 Þeir eru bara eins og - það er minni, og það er skráir. 485 00:46:16,060 --> 00:46:20,920 Skrár eru þar sem hlutirnir eru virkir að gerast. 486 00:46:20,920 --> 00:46:24,750 Þú ekki bæta 2 hlutum í minni, þú bæta 2 hluti í skrám. 487 00:46:24,750 --> 00:46:28,160 Og þú koma það frá minni inn skrám til þá bæta þeim, 488 00:46:28,160 --> 00:46:33,180 og þá gæti sett þá aftur í minni, en allar aðgerðir sem gerist á skrám. 489 00:46:33,180 --> 00:46:38,750 Svo þegar þú ert að nota tímabundna breytu nálgun, yfirleitt það sem gerist er 490 00:46:38,750 --> 00:46:42,810 þessar 2 tölur eru nú þegar á skrám. 491 00:46:42,810 --> 00:46:46,570 Og svo af því að benda á, eftir að þú hefur skipt þeim, 492 00:46:46,570 --> 00:46:51,540 það verður bara að byrja að nota aðra skrá. 493 00:46:51,540 --> 00:46:56,510 Hvar þú hefðir verið að nota B, verður það bara að nota skrá sem var þegar geymslu "a." 494 00:46:56,510 --> 00:47:02,180 Svo það þarf ekki að gera neitt til að raunverulega gera the Víxla. Já? 495 00:47:02,180 --> 00:47:05,690 [Nemandi] En það tekur líka meira minni, ekki satt? 496 00:47:05,690 --> 00:47:10,280 Það mun aðeins taka meira minni ef það þarf að geyma það tímabundið breytu. 497 00:47:10,280 --> 00:47:14,830 Eins ef þú notar seinna að tímabundið breyta aftur einhvers staðar, 498 00:47:14,830 --> 00:47:18,920 þá - eða þú gefur eitthvað til þess tímabundna breytu. 499 00:47:18,920 --> 00:47:24,630 Svo ef á hverjum tíma 'a,' b-í afleysingamanneskja hafa mismunandi gildi eða eitthvað, 500 00:47:24,630 --> 00:47:30,680 þá það er að fara að hafa mismunandi stöðum í minni, en það er satt að 501 00:47:30,680 --> 00:47:34,800 það eru margar staðbundnar breytur sem aðeins til á skrám. 502 00:47:34,800 --> 00:47:44,370 Í því tilviki, það er aldrei sett inn í minni, og svo þú ert aldrei að sóa minni. 503 00:47:44,370 --> 00:47:58,620 Allt í lagi. Síðasta spurningin er aðeins meira. 504 00:47:58,620 --> 00:48:04,850 Svo hér, í þessu CS50 tæki, það er orðabók. 505 00:48:04,850 --> 00:48:12,390 Og ástæðan fyrir þessu er vegna þess að [? B66] er Villuleit þar sem þú munt vera að skrifa 506 00:48:12,390 --> 00:48:15,780 nota kjötkássa matskeið eða reynir eða nokkur gögn uppbyggingu. 507 00:48:15,780 --> 00:48:22,660 Þú ert að fara að skrifa stafa afgreiðslumaður, og þú ert að fara að nota þessa orðabók til að gera það. 508 00:48:22,660 --> 00:48:28,280 En þetta vandamál, við erum bara að fara að líta upp til að sjá hvort eitt orð í orðabókinni. 509 00:48:28,280 --> 00:48:31,250 Svo í stað þess að geyma alla orðabók í sum gögn uppbygging 510 00:48:31,250 --> 00:48:35,180 og þá að leita yfir allt skjalið til að sjá hvort eitthvað er rangt stafsett, 511 00:48:35,180 --> 00:48:38,490 við viljum bara að finna 1 orð. Þannig að við getum bara skanna yfir allt orðabók 512 00:48:38,490 --> 00:48:44,300 og ef við aldrei finna orð í öllu orðabók, þá var það ekki þar. 513 00:48:44,300 --> 00:48:52,150 Ef við skanna yfir allt orðabók og sé orðið, þá erum við góð, fannst okkur. 514 00:48:52,150 --> 00:48:56,580 Það segir hér að við viljum byrja að horfa á virkni C-skrám-meðhöndlun, 515 00:48:56,580 --> 00:48:59,930 þar sem við viljum að lesa orðabók, 516 00:48:59,930 --> 00:49:07,680 en ég mun gefa vísbendingu hér um hvaða aðgerðir sem þú ættir að hugsa um. 517 00:49:07,680 --> 00:49:11,510 Ég skrifa þau á bilum. 518 00:49:11,510 --> 00:49:20,490 Svo þær helstu sem þú þarft til að líta á er f opin og þá óhjákvæmilega, f lokað 519 00:49:20,490 --> 00:49:26,540 sem mun fara í lok program, og f skanna f. 520 00:49:26,540 --> 00:49:31,060 Þú getur líka notað f lesa, en þú vilt sennilega ekki að 521 00:49:31,060 --> 00:49:34,200 því að - að þú endir ekki upp að þurfa það. 522 00:49:34,200 --> 00:49:41,880 F grannskoða f er það sem þú ert að fara að nota til að skanna yfir orðabókina. 523 00:49:41,880 --> 00:49:46,370 Og svo þú þarft ekki að kóða upp lausn, bara að reyna eins og gervi-kóða leið 524 00:49:46,370 --> 00:50:05,200 að lausn, og þá munum við ræða það. 525 00:50:05,200 --> 00:50:14,110 Og í raun, þar sem ég gaf þegar þér þetta, ef þú kemst inn í flugstöðinni eða skel tæki þíns, 526 00:50:14,110 --> 00:50:18,250 Ég vildi - ég yfirleitt - ef þú hefur ekki séð enn, ég veit ekki hvort þú gerðir í bekknum, 527 00:50:18,250 --> 00:50:23,490 en maðurinn, þannig að maður síður, er nokkuð gagnlegt fyrir að horfa á nánast hvaða aðgerð. 528 00:50:23,490 --> 00:50:27,330 Svo ég get gert, eins og, maður f, grannskoða f. 529 00:50:27,330 --> 00:50:32,300 Þetta er nú að upplýsa um skanna f fjölskyldu virka. 530 00:50:32,300 --> 00:50:37,070 Ég gæti líka gert mann f, opinn, og það mun gefa mér upplýsingar um það. 531 00:50:37,070 --> 00:50:40,750 Svo ef þú veist hvaða aðgerð sem þú ert að nota, eða þú ert að lesa kóða 532 00:50:40,750 --> 00:50:43,000 og þú sérð sumir virka og þú ert eins og: "Hvað er þetta að gera?" 533 00:50:43,000 --> 00:50:45,280 Bara maður sem virka nafn. 534 00:50:45,280 --> 00:50:47,340 There ert a par af skrýtin dæmi þar sem þú gætir þurft að segja 535 00:50:47,340 --> 00:50:51,620 eins. Man 2 sem virka nafn, eða Man 3 sem virka nafn, 536 00:50:51,620 --> 00:50:58,230 en þú verður bara að gera það ef maður virka nafn gerist ekki að vinna í fyrsta skipti. 537 00:50:58,230 --> 00:51:03,010 [Nemandi] Þannig að ég er að lesa maður síðu fyrir opið, en ég er enn óviss um hvernig á að nota það og the program. 538 00:51:03,010 --> 00:51:06,170 Allt í lagi. A einhver fjöldi af the man síðum er minna en gagnlegt. 539 00:51:06,170 --> 00:51:08,470 Þeir eru meira gagni ef þú veist nú þegar hvað þeir gera 540 00:51:08,470 --> 00:51:12,670 og þá þarftu bara að muna röð rök eða eitthvað. 541 00:51:12,670 --> 00:51:17,640 Eða þeir geta gefið þér almenna yfirlit, en sumir þeirra eru mjög yfirþyrmandi. 542 00:51:17,640 --> 00:51:22,220 Eins og f grannskoða F, líka. Það gefur þér upplýsingar um allar þessar aðgerðir, 543 00:51:22,220 --> 00:51:28,120 og 1 lína niður gerist hér að segja, "F skanna f les frá band-eða á." 544 00:51:28,120 --> 00:51:32,360 En f opna. Svo, hvernig ættum við að nota f opinn? 545 00:51:32,360 --> 00:51:38,470 Hugmyndin um forrit sem þarf til að gera skrá I / O er að 546 00:51:38,470 --> 00:51:45,070 þú þarft fyrst að opna skrána sem þú vilt að gera hluti með, og óhjákvæmilega 547 00:51:45,070 --> 00:51:51,220 lesa það úr að skrá og gera hluti með þeim. 548 00:51:51,220 --> 00:51:55,350 F opinn er það sem við notum til að opna skrána. 549 00:51:55,350 --> 00:52:04,190 Málið sem við fáum til baka, þannig að hvaða skrá viljum við opna, það gefur okkur það - 550 00:52:04,190 --> 00:52:11,970 hér það segir "/ notandi / share / dict / orð." 551 00:52:11,970 --> 00:52:16,740 Þetta er skrá sem við viljum að opna, og við viljum að opna það - 552 00:52:16,740 --> 00:52:21,440 við höfum skýrt fram hvort við viljum að opna það til að lesa eða ef við viljum að opna það til að skrifa. 553 00:52:21,440 --> 00:52:26,490 There 'a par af samsetningum og efni, en við viljum opna þetta fyrir lestur. 554 00:52:26,490 --> 00:52:29,380 Við viljum að lesa úr skrá. 555 00:52:29,380 --> 00:52:34,290 Svo hvað er þetta aftur? Það skilar skrá stjörnu (*), 556 00:52:34,290 --> 00:52:37,260 og ég verð bara að sýna allt í breytu F, þannig *, 557 00:52:37,260 --> 00:52:40,840 aftur er það bendi, en við viljum ekki að takast á við ábendingum. 558 00:52:40,840 --> 00:52:46,470 Þú getur held að f sem, f er nú breyta þú ert að fara að nota til að tákna hana. 559 00:52:46,470 --> 00:52:49,850 Svo ef þú vilt lesa úr skránni, lesið þér frá f. 560 00:52:49,850 --> 00:52:54,820 Ef þú vilt loka skrá, loka þig f. 561 00:52:54,820 --> 00:53:00,350 Svo í lok áætlunarinnar þegar við viljum óhjákvæmilega að loka skrá, hvað eigum við að gera? 562 00:53:00,350 --> 00:53:06,750 Við viljum loka f. 563 00:53:06,750 --> 00:53:12,600 Svo nú er síðasta lagið fall sem við erum að fara til að vilja nota er skanna f, f grannskoða f. 564 00:53:12,600 --> 00:53:20,930 Og hvað það gerir er að það skannar yfir skrá leita að mynstur til að passa. 565 00:53:20,930 --> 00:53:39,100 Þegar litið er á manninn síðu hér sjáum við int f skanna f, hunsa aftur gildi fyrir nú. 566 00:53:39,100 --> 00:53:45,230 Fyrsta röksemd er * skrá á, svo the fyrstur rök að við erum að fara að vilja til að fara framhjá er f. 567 00:53:45,230 --> 00:53:47,900 Við erum að skanna yfir f. 568 00:53:47,900 --> 00:53:53,680 Seinni rök er sniði band. 569 00:53:53,680 --> 00:53:58,310 Ég mun gefa þér snið band núna. 570 00:53:58,310 --> 00:54:05,180 Ég held að við gerast að segja, 127s \ n, a einhver fjöldi af það er óþarfi. 571 00:54:05,180 --> 00:54:12,490 Hugmyndin um það að snið band er, er hægt að hugsa um skanna F sem andstæðu f prenta. 572 00:54:12,490 --> 00:54:17,160 Svo prenta f, prenta f við notum líka þessa tegund af breytu sniði, 573 00:54:17,160 --> 00:54:25,000 en í f prenta það sem við erum að gera er - við skulum líta á samsvarandi. 574 00:54:25,000 --> 00:54:32,550 Svo prenta f, og það er í raun líka f prenta f, þar sem fyrsta rifrildi er að fara að vera f. 575 00:54:32,550 --> 00:54:40,980 Þegar þú hefur prentað f, gætum við sagt eitthvað eins og: "prenta 127s \ n" og þá ef við framhjá honum band, 576 00:54:40,980 --> 00:54:44,050 það er að fara að prenta þetta band og svo í nýrri línu. 577 00:54:44,050 --> 00:54:49,690 Hvað 127 þýðir, ég er nokkuð viss um, en ég hef aldrei takmarkað mig við það, 578 00:54:49,690 --> 00:54:52,470 Þú myndir ekki einu sinni að segja '127 'í prent F, 579 00:54:52,470 --> 00:54:57,090 en hvað það þýðir prenta fyrstu 127 stafi. 580 00:54:57,090 --> 00:54:59,350 Þannig að ég er nokkuð viss um að það er málið. Þú getur Google fyrir það. 581 00:54:59,350 --> 00:55:03,000 En í næstu sem ég er næstum jákvæð þýðir það. 582 00:55:03,000 --> 00:55:08,880 Svo er þetta prenta fyrstu 127 stafina, fylgt eftir með nýrri línu. 583 00:55:08,880 --> 00:55:14,680 F skanna f nú, í stað þess að horfa á breytu og prentun það, 584 00:55:14,680 --> 00:55:22,620 það er að fara að horfa á einhvern streng, og geyma mynstur í breytu. 585 00:55:22,620 --> 00:55:26,360 Við skulum reyndar nota grannskoða f í öðru dæmi. 586 00:55:26,360 --> 00:55:31,670 Svo skulum segja að við fengum int, x = 4, 587 00:55:31,670 --> 00:55:41,110 og við vildum að búa til band úr - langaði til að búa til band 588 00:55:41,110 --> 00:55:44,250 það var eins og þetta mun koma upp mun seinna, 589 00:55:44,250 --> 00:55:49,020 eitthvað sem er bara eins og 4.jpg. 590 00:55:49,020 --> 00:55:51,870 Svo gæti þetta verið forrit þar sem þú verður að hafa summan gegn, 591 00:55:51,870 --> 00:55:56,420 summa gegn i, og þú vilt vista fullt af myndum. 592 00:55:56,420 --> 00:56:02,430 Svo þú vilt vista i.jpg, þar sem ég er nokkur endurtekning af lykkju þínu. 593 00:56:02,430 --> 00:56:05,500 Svo hvernig gera við þetta band fyrir að JPEG? 594 00:56:05,500 --> 00:56:11,720 Ef þú vildir að prenta 4.jpg, gætum við bara segja prenta f,% d.jpg, 595 00:56:11,720 --> 00:56:14,410 og þá myndi prenta fyrir þessi JPEG. 596 00:56:14,410 --> 00:56:20,050 En ef við viljum spara strenginn 4.jpg, notum við grannskoða f. 597 00:56:20,050 --> 00:56:30,860 Svo band s - í raun við skóf - eðli, bleikju s, við skulum fara 100. 598 00:56:30,860 --> 00:56:35,400 Svo ég lýsti bara sumir fjölbreytta 100 stafi, 599 00:56:35,400 --> 00:56:39,830 og það er það sem við erum óhjákvæmilega að fara að vera að geyma að JPEG inn 600 00:56:39,830 --> 00:56:47,920 Þannig að við erum að fara að nota skanna f, og snið, hvernig myndum við segja% d.jpg 601 00:56:47,920 --> 00:56:54,980 til að prenta 4.jpg, the snið af þessu er að fara að vera% d.jpg. 602 00:56:54,980 --> 00:57:04,020 Svo er snið% d.jpg, hvað við viljum skipta% d með er x, 603 00:57:04,020 --> 00:57:06,590 og nú þurfum við að geyma það streng einhvers staðar. 604 00:57:06,590 --> 00:57:12,500 Og þar sem við erum að fara að geyma þetta band er í fylki s. 605 00:57:12,500 --> 00:57:21,640 Svo eftir þessa línu af kóða, s, ef við prenta f,% s á breytilegum s, 606 00:57:21,640 --> 00:57:26,280 það er að fara að prenta 4.jpg. 607 00:57:26,280 --> 00:57:38,930 Svo f grannskoða f er sama og skanna F, nema nú er að horfa á þessa skrá 608 00:57:38,930 --> 00:57:43,600 fyrir hvað á að geyma í s. 609 00:57:43,600 --> 00:57:46,160 Það er það síðasta rifrildi er að fara til vera. 610 00:57:46,160 --> 00:57:54,170 Við viljum að geyma - "Scan f fjölskyldu virka skannar bæði samkvæmt formi sem reynt hér. 611 00:57:54,170 --> 00:58:02,450 Ef einhver eru geymd í stað atriði sem þú gætir aftur - " 612 00:58:02,450 --> 00:58:12,910 Nei, gætum við verið gott. Leyfðu mér að hugsa um annað. 613 00:58:12,910 --> 00:58:26,350 Svo er grannskoða f ekki - hvað Heck er fall sem gerir það? 614 00:58:26,350 --> 00:58:31,650 Svo grannskoða f er ekki að fara að taka heiltölu og gera punktur JPG. 615 00:58:31,650 --> 00:58:43,490 Það er að fara að [muldrar]. 616 00:58:43,490 --> 00:58:49,360 Vista int breytu í strengnum int C. 617 00:58:49,360 --> 00:58:55,940 Hvað er þetta breyta, eða hvað er þessi aðgerð heitir? 618 00:58:55,940 --> 00:59:04,950 Já. That's - já. Svo það sem ég var að skilgreina fyrir þig áður var s prenta f, 619 00:59:04,950 --> 00:59:09,820 sem - sem gerir miklu meira vit, hvers vegna ég sagði að það væri miklu meira eins og F prenta. 620 00:59:09,820 --> 00:59:14,700 Scan f er enn góður af eins og F prenta, en er prentað f er að fara að skanna það yfir 621 00:59:14,700 --> 00:59:17,510 og skipta um breytur og nú geyma það í streng. 622 00:59:17,510 --> 00:59:19,620 Í stað þess að prenta það, geymir það það í streng. 623 00:59:19,620 --> 00:59:25,070 Svo hunsa það alveg. Þú getur samt hugsað snið specifier sem svona f prenta. 624 00:59:25,070 --> 00:59:34,510 Svo nú, ef við vildum að gera 4.jpg hlutur, myndum við gera s prenta f, x á þetta. 625 00:59:34,510 --> 00:59:38,520 Svo það skanna f er að gera - það var spurning að fara að vera? 626 00:59:38,520 --> 00:59:40,820 [Nemandi] ég er bara ruglaður á því sem við erum að reyna að gera hérna 627 00:59:40,820 --> 00:59:43,450 með því að JPEG. Getur þú útskýrt það 1 meiri tíma? 628 00:59:43,450 --> 00:59:52,710 Svo þetta var - það er minna relevent til f skanna f nú, vonandi, mun binda aftur í einhvers konar hátt. 629 00:59:52,710 --> 01:00:02,240 En það sem ég upphaflega var að ætlaði að sýna var - þetta er í raun beint við að þessir [? F5] 630 01:00:02,240 --> 01:00:08,520 Þú ert að fara að nota s prenta f, þar sem segir að við höfum 100 myndir, 631 01:00:08,520 --> 01:00:13,630 og þú vilt að lesa mynd 1.jpg, 2.jpg, 3.jpg. 632 01:00:13,630 --> 01:00:21,520 Svo í því skyni að gera það, þú þarft að f opinn, og þá verður þú að fara í band sem þú vilt opna. 633 01:00:21,520 --> 01:00:30,020 Þannig að við myndi vilja til að opna 1.jpg, í því skyni að búa til band sem er 1.jpg, 634 01:00:30,020 --> 01:00:37,660 prenta f við gerum s af% d.jpg--við ekki gert fyrir int i = 0. 635 01:00:37,660 --> 01:00:46,580 i <40, i + +. 636 01:00:46,580 --> 01:00:51,130 Svo s prenta f% d.jpg af i. 637 01:00:51,130 --> 01:00:56,320 Svo eftir þessari línu, nú breyta eða array s er að fara að 1.JPG. 638 01:00:56,320 --> 01:01:10,610 Eða, 0.jpg, 1.jpg, 2.jpg. Og svo við getum opnað, aftur á móti, hver mynd fyrir lestur. 639 01:01:10,610 --> 01:01:19,550 Svo er það sem er prentað f gerir. Viltu sjá hvað er prentað f er nú að gera? 640 01:01:19,550 --> 01:01:25,720 [Nemandi] Jæja, svo það tekur - það skapar band, something.jpg, og geymir það. 641 01:01:25,720 --> 01:01:30,360 Já. Það skapar - þetta er annað snið band, rétt eins og skanna f og prenta f, 642 01:01:30,360 --> 01:01:37,530 þar sem það setur allar breytur inn í seinni rifrildi, gæti verið er í stað þess að i. 643 01:01:37,530 --> 01:01:42,280 Kannski - ég meina, það er málið. En hvað er til af rökum. 644 01:01:42,280 --> 01:01:45,440 Það er að fara að setja inn allar breytur í sniði band 645 01:01:45,440 --> 01:01:52,250 og svo geyma í biðminni okkar, sem við köllum að biðminni, það er þar sem við erum að geyma strenginn. 646 01:01:52,250 --> 01:02:00,750 Þannig að við erum að geyma inni á s á rétt-sniðinn band,% d hafa verið skipt út með 4. 647 01:02:00,750 --> 01:02:08,080 [Nemandi] Þannig að ef við gerðum það, er breytan f bara að fara að vera færður? 648 01:02:08,080 --> 01:02:18,110 Já. Þannig að við ættum að loka upprunalega f áður en að gera þetta. 649 01:02:18,110 --> 01:02:22,810 En - og þá einnig, ef það væri ekki f opna hér, þá myndum við þurfa að segja - 650 01:02:22,810 --> 01:02:29,280 Já. En það myndi opna hundrað mismunandi skrár. 651 01:02:29,280 --> 01:02:37,360 [Nemandi] En við myndum ekki vera fær um að komast í eða - allt í lagi. 652 01:02:37,360 --> 01:02:44,230 Allt í lagi. Svo er grannskoða f, f grannskoða f, góður af sömu hugmynd, 653 01:02:44,230 --> 01:02:53,610 en í stað þess að, í stað þess að geyma það í band, það er meira eins og þú ert nú 654 01:02:53,610 --> 01:03:02,420 fara yfir stunguna og mynstur samsvörun gegn sem streng og geyma niðurstöður í breytum. 655 01:03:02,420 --> 01:03:11,290 Þú getur notað skanna f að flokka yfir eitthvað eins 4.jpg og geyma heiltölu 4 í summu int x. 656 01:03:11,290 --> 01:03:13,430 Það er það sem við getum notað grannskoða f fyrir. 657 01:03:13,430 --> 01:03:16,300 F grannskoða f er að fara að gera það á the stjórn lína. 658 01:03:16,300 --> 01:03:19,200 Ég er reyndar nokkuð viss um að þetta er það sem CS50 bókasafn gerir. 659 01:03:19,200 --> 01:03:29,050 Svo þegar þú segir, "fá int," það er skanna f-ing yfir - grannskoða f er sú leið sem þú færð notandi inntak. 660 01:03:29,050 --> 01:03:34,670 F grannskoða f er að fara að gera það sama, en nota skrá til að skanna yfir. 661 01:03:34,670 --> 01:03:41,090 Svo hér erum við skönnun á þessari skrá. 662 01:03:41,090 --> 01:03:45,460 The mynstur sem við erum að reyna að passa er einhver strengur sem er 127 stafir að lengd 663 01:03:45,460 --> 01:03:48,100 fylgt eftir með nýja línu 664 01:03:48,100 --> 01:03:54,770 Þannig að ég er nokkuð viss um að við gætum jafnvel bara segja "passa s," því í orðabók 665 01:03:54,770 --> 01:03:57,770 við átt, erum við að tryggja ekki orð að lengd, 666 01:03:57,770 --> 01:04:03,310 og einnig f skanna f, held ég, hættir við nýju línuna, sama hvað. 667 01:04:03,310 --> 01:04:06,970 En við munum fela nýja línu í leik, og - 668 01:04:06,970 --> 01:04:13,960 [Nemandi] Ef við ekki fela nýja línu, myndi það ekki að finna hluta af orði? 669 01:04:13,960 --> 01:04:22,900 Það - hvert - að horfa á orðabókina - 670 01:04:22,900 --> 01:04:26,200 Svo í orðabók, þetta eru allt orð okkar. 671 01:04:26,200 --> 01:04:30,500 Hver einn er á nýja línu. 672 01:04:30,500 --> 01:04:32,510 The grannskoða f er að fara að taka upp þetta orð. 673 01:04:32,510 --> 01:04:38,750 Ef við ekki hafa nýja línu, þá er það mögulegt að næsta skanna f mun bara lesa nýja línu. 674 01:04:38,750 --> 01:04:44,180 En þar á meðal nýja línu þá verður bara hunsa nýja línu. 675 01:04:44,180 --> 01:04:49,440 En við munum aldrei fá hluta af orði, þar sem við erum alltaf að lesa upp á nýtt línu, sama hvað. 676 01:04:49,440 --> 01:04:54,530 [Nemandi] En hvað ef þú leitar að orðinu "cissa," eins cissa. 677 01:04:54,530 --> 01:04:57,380 Mun það finna að, og segja að það er samsvörun? 678 01:04:57,380 --> 01:05:05,110 Svo hér við - það verður að lesa á - þetta er í raun gott lið. 679 01:05:05,110 --> 01:05:10,660 Við erum aldrei með núverandi - orðið sem við erum að leita að er fyrsta stjórn lína rifrildi. 680 01:05:10,660 --> 01:05:16,460 Svo band, orð = argv 1. 681 01:05:16,460 --> 01:05:20,020 Svo er band sem við erum að leita að argv 1. 682 01:05:20,020 --> 01:05:23,290 Við erum ekki að leita að orði á alla í f grannskoða okkar. 683 01:05:23,290 --> 01:05:28,030 Það sem við vorum að gera með skanna f að hafa hvert orð í orðabók, 684 01:05:28,030 --> 01:05:34,320 og svo þegar við höfum þessi orð sem við erum að fara að nota strcmp til að bera saman þá. 685 01:05:34,320 --> 01:05:39,210 Við ætlum að bera saman orð okkar og það sem við lesum bara inn 686 01:05:39,210 --> 01:05:45,110 Svo óhjákvæmilega, erum við að fara að enda að gera fullt af skanna FS 687 01:05:45,110 --> 01:05:52,130 fyrr en það bara gerist svo að skanna f aftur - 688 01:05:52,130 --> 01:05:54,800 það mun aftur einn, svo lengi sem það hefur samþykkt nýtt orð, 689 01:05:54,800 --> 01:06:01,360 og það mun skila eitthvað annað um leið og það hefur ekki tekist að passa orð. 690 01:06:01,360 --> 01:06:08,440 Við erum að lesa yfir allan orðabók, geyma línu hvert orð í breytu s. 691 01:06:08,440 --> 01:06:17,240 Þá erum við að bera saman orð með S, og ef samanburðurinn == 0, 692 01:06:17,240 --> 01:06:21,650 strcmp gerist að koma 0 ef jafningi var gert. 693 01:06:21,650 --> 01:06:31,510 Svo ef það væri 0, þá getum við prentað f, samþykkt, 694 01:06:31,510 --> 01:06:35,370 eða orð í orðabók, eða hvað sem þú vilt prenta f. 695 01:06:35,370 --> 01:06:41,450 Og þá - við viljum ekki að f loka aftur og aftur. 696 01:06:41,450 --> 01:06:50,410 Þetta er eins konar hlutur sem við viljum gera, og við erum ekki bara að leita að orð í orðabókinni. 697 01:06:50,410 --> 01:06:56,660 Þannig að við gætum gert það, ef við vildum að leita mynstur þeirra, cissa, eins og þú sagðir áður, 698 01:06:56,660 --> 01:07:00,260 Ef við vildum að leita að mynstri, þá myndi það ekki í tilfelli 699 01:07:00,260 --> 01:07:08,010 því það er í raun ekki orð, heldur eitt af þeim orðum í orðabók kemur að hafa það í það. 700 01:07:08,010 --> 01:07:13,560 Þannig að það myndi passa þetta orð, en þessi hluti orðsins er ekki orðið sjálft. 701 01:07:13,560 --> 01:07:17,250 En það er ekki hvernig við erum að nota það, við erum að lesa í hverju orði 702 01:07:17,250 --> 01:07:19,740 og síðan bera saman orð sem við höfum við þessi orð. 703 01:07:19,740 --> 01:07:25,780 Þannig að við erum alltaf að bera saman fullt orð. 704 01:07:25,780 --> 01:07:29,620 Ég get sent út endanlegar lausnir síðar. 705 01:07:29,620 --> 01:07:32,050 Þetta er eins konar næstum rétt svar, held ég. 706 01:07:32,050 --> 01:07:34,720 [Námsmaður athugasemd, óskiljanlegur] 707 01:07:34,720 --> 01:07:40,870 Oh, gerði ég fá losa af það áður? Bleikju s, held ég að við sagði 127 - Ég gleymi því stærsta er. 708 01:07:40,870 --> 01:07:44,100 Við verðum bara að gera 128, svo nú er er nógu lengi. 709 01:07:44,100 --> 01:07:46,570 Við þurfum ekki að prenta neitt. 710 01:07:46,570 --> 01:07:56,440 Við erum líka að fara til að vilja hafa til að loka skránni okkar, og sem ætti að vera um rétt svar. 711 01:07:56,440 --> 01:07:59,440 CS50.TV