1 00:00:00,000 --> 00:00:02,350 >> [TÓNLIST spila] 2 00:00:02,350 --> 00:00:05,444 3 00:00:05,444 --> 00:00:06,360 DOUG LLOYD: Allt í lagi. 4 00:00:06,360 --> 00:00:07,770 Konar undarlega efni, ekki satt? 5 00:00:07,770 --> 00:00:09,050 Galdur númer. 6 00:00:09,050 --> 00:00:12,012 Hvað Doe hann við þegar hann er tala um galdur númer? 7 00:00:12,012 --> 00:00:14,220 Jæja, sumir af the programs sem við höfum skrifað í CS50 8 00:00:14,220 --> 00:00:16,660 svo langt hafa fengið sumir furðulegur tölur konar kastað í þeim. 9 00:00:16,660 --> 00:00:19,680 Kannski vegna við gerum ekki alveg að skilja núna. 10 00:00:19,680 --> 00:00:23,950 Til dæmis, í Mario vandamál, við capped hæð pýramídans við 23. 11 00:00:23,950 --> 00:00:26,880 Við sagði skýrt þér getur ekki farið hærra en 23. 12 00:00:26,880 --> 00:00:28,702 >> En hvað þýðir 23 meina? 13 00:00:28,702 --> 00:00:30,410 Jæja, ef þú lesið sérstakur vandlega, þér 14 00:00:30,410 --> 00:00:32,493 gæti hafa séð að Ástæða þess að við capped það á 23 15 00:00:32,493 --> 00:00:36,160 er vegna þess að venjulegu hæð af flugstöðinni glugga er 24. 16 00:00:36,160 --> 00:00:38,860 Og svo ef við höfum pýramída vera hærri en það, 17 00:00:38,860 --> 00:00:41,290 það gæti gert þetta undarlegt hlutur þar sem hún liggur á skjánum. 18 00:00:41,290 --> 00:00:45,140 Og þú veist, hvað þýðir að meina í samhengi, ekki satt? 19 00:00:45,140 --> 00:00:48,880 >> Er merking 23 augljóst að einhver sem lítur á kerfið 20 00:00:48,880 --> 00:00:51,550 og kannski hefur aðra Stærð endastöðvar? 21 00:00:51,550 --> 00:00:52,330 Örugglega ekki. 22 00:00:52,330 --> 00:00:53,080 Það virðist eins og OK. 23 00:00:53,080 --> 00:00:55,005 Ja, hvers vegna er það bara minna en 23? 24 00:00:55,005 --> 00:00:56,880 Almennt, það er góður um slæma vana raun 25 00:00:56,880 --> 00:00:58,940 að skrifa fasta í kóðann þinn. 26 00:00:58,940 --> 00:01:02,190 Í aðgerð svo, þegar þú gerir í raun skrifa stöðug í kóðanum þínum, 27 00:01:02,190 --> 00:01:05,630 það er stundum nefnt með galdur númer, sem er eitthvað 28 00:01:05,630 --> 00:01:08,030 við viljum almennt að reyna að forðast. 29 00:01:08,030 --> 00:01:12,830 >> Til dæmis, við skulum taka a líta á þessari einföldu aðgerð hér. 30 00:01:12,830 --> 00:01:15,726 Vitanlega er það engin gögn tegund í C kallast kortið eða þilfari. 31 00:01:15,726 --> 00:01:16,600 Svo bara bera með mér. 32 00:01:16,600 --> 00:01:18,910 Það er lítill hluti af sauðakóðanum blandað hér. 33 00:01:18,910 --> 00:01:21,050 Þetta er fall sem heitir takast kort sem virðist 34 00:01:21,050 --> 00:01:26,570 tekur þilfari sem viðfang hennar, og mun framleiðsla mér einu korti. 35 00:01:26,570 --> 00:01:30,990 >> Og ég er að gera eitthvað hér þar sem ég hafa lykkju sem liggur frá 0 til 52, 36 00:01:30,990 --> 00:01:33,394 og ég takast kort. 37 00:01:33,394 --> 00:01:35,310 Jæja, þá erum við með galdur Fjöldi hér, ekki satt. 38 00:01:35,310 --> 00:01:38,790 Sérðu hvað galdur númer er? 39 00:01:38,790 --> 00:01:42,280 Eða fleiri mikilvægur, gera þér sjá hvað vandamálið er hér? 40 00:01:42,280 --> 00:01:44,310 Sérstaklega ef þetta er bara ein aðgerð 41 00:01:44,310 --> 00:01:48,030 í eigin skrá sína í a möppuna sem inniheldur 42 00:01:48,030 --> 00:01:49,970 fullt af mismunandi skrár, sem hver um sig 43 00:01:49,970 --> 00:01:51,670 gerir annar hlutur til spilastokk. 44 00:01:51,670 --> 00:01:57,310 Kannski stokkar það þá, eða fjallar hönd fimm spil í stað einu korti. 45 00:01:57,310 --> 00:01:59,420 >> Sérðu hvað á Vandamálið gæti verið hér? 46 00:01:59,420 --> 00:02:03,220 Sérðu galdur númer Ég hef sprautað inn kóðann? 47 00:02:03,220 --> 00:02:04,390 Það er 52, ekki satt. 48 00:02:04,390 --> 00:02:06,440 >> Eins og innsæi þú veist líklega, OK. 49 00:02:06,440 --> 00:02:09,740 Eins og venjulega þilfari kort inniheldur 52 spil. 50 00:02:09,740 --> 00:02:12,570 En í áætlun okkar, það er bara konar fljótandi í kring í það. 51 00:02:12,570 --> 00:02:15,280 Það er eins og allt í einu það er 52. 52 00:02:15,280 --> 00:02:18,290 >> Ein leið til að leysa þetta Vandamálið er að gera þetta. 53 00:02:18,290 --> 00:02:22,724 Við erum mjög skýrt núna kalla út þilfari stærð sem 52. 54 00:02:22,724 --> 00:02:25,390 Það gefur það innsæi aðeins meira sem þýðir að þegar í for lykkju 55 00:02:25,390 --> 00:02:28,650 síðar við þá að segja, ég er minna en þilfari stærð. 56 00:02:28,650 --> 00:02:32,666 Það virðist bara betra en að segja 52. 57 00:02:32,666 --> 00:02:34,290 Nú þetta þýðir í raun að leysa vandann. 58 00:02:34,290 --> 00:02:38,460 Það er að gefa sumir táknræn sem þýðir að föstu. 59 00:02:38,460 --> 00:02:40,820 En það er eins konar raun kynna annað vandamál 60 00:02:40,820 --> 00:02:43,770 sem gæti ekki strax í ljós. 61 00:02:43,770 --> 00:02:45,859 Jafnvel ef þessi breyta er lýst globally-- 62 00:02:45,859 --> 00:02:47,650 Manstu hvað það þýðir að þegar við lýsa 63 00:02:47,650 --> 00:02:50,500 breytu heimsvísu móti á staðnum? 64 00:02:50,500 --> 00:02:53,340 Jafnvel þótt við lýsa breytu heimsvísu, hvað ef það er 65 00:02:53,340 --> 00:02:55,500 Annað hlutverk í suite okkar aðgerðir 66 00:02:55,500 --> 00:02:59,750 að takast á við kortið meðferð sem óvart breytingar þilfari stærð, 67 00:02:59,750 --> 00:03:02,727 eða það eykur það með 1 eða minnkar það um 1. 68 00:03:02,727 --> 00:03:04,060 Það gæti stafa vandræði, ekki satt? 69 00:03:04,060 --> 00:03:08,261 Sérstaklega ef við erum að fást við að setja spil þar uppstokkun fulla þilfari 70 00:03:08,261 --> 00:03:08,760 er krafist. 71 00:03:08,760 --> 00:03:12,804 Ef þilfari stærð minnkar með því að 1, til dæmis, til 51, 72 00:03:12,804 --> 00:03:14,970 við erum í raun ekki uppstokkun öll spilin hugsanlega. 73 00:03:14,970 --> 00:03:16,500 Við erum að fara einn af þeim út. 74 00:03:16,500 --> 00:03:21,680 Og að verðmæti gæti kannski verið spáð eða nýtt af vondu leikari. 75 00:03:21,680 --> 00:03:24,920 >> C veitir það sem er kallað Preprocessor tilskipun, sem 76 00:03:24,920 --> 00:03:27,764 er einnig kallað þjóðhagsleg fyrir búa táknræn fastar. 77 00:03:27,764 --> 00:03:30,180 Og í raun, hefur þú nú þegar séð Preprocessor tilskipun, 78 00:03:30,180 --> 00:03:32,916 jafnvel ef þú hefur ekki heyrt það kallað að með #include. 79 00:03:32,916 --> 00:03:37,150 Það er annað dæmi um þjóðhagsleg eða Preprocessor tilskipun. 80 00:03:37,150 --> 00:03:41,290 >> The leiðin til að búa til táknræn fastar, eða gefa nafn til fasti 81 00:03:41,290 --> 00:03:43,740 þannig að það hefur meira sem þýðir, er eins og hér segir. 82 00:03:43,740 --> 00:03:47,030 #define, nafn, skipti. 83 00:03:47,030 --> 00:03:49,140 Mjög mikilvægt til hliðar hér mjög fljótur. 84 00:03:49,140 --> 00:03:54,180 Ekki setja semíkommu á enda #defines þínum. 85 00:03:54,180 --> 00:03:57,310 Svo það er #define, nafn, skipti. 86 00:03:57,310 --> 00:03:59,540 >> Þegar kerfið er tekið saman, hvað raunverulega gerist 87 00:03:59,540 --> 00:04:01,740 er þýðanda ef fara að fara í gegnum kóðann þinn 88 00:04:01,740 --> 00:04:06,770 og skipta öllum tilfellum af orðið "nafn" við hvað sem þú 89 00:04:06,770 --> 00:04:08,860 setja sem skipti. 90 00:04:08,860 --> 00:04:13,060 Hliðstæðri, ef #include er tegund af líkur til að afrita og líma, 91 00:04:13,060 --> 00:04:15,700 þá er #define konar svipað að finna og skipta, 92 00:04:15,700 --> 00:04:19,180 ef þú hefur einhvern tíma notað þann möguleika í ritvinnsla program, til dæmis. 93 00:04:19,180 --> 00:04:26,345 >> Svo til dæmis, ef ég #define pi sem 3.14159265, 94 00:04:26,345 --> 00:04:28,720 ef þú ert betur stærðfræðilega hneigðist og þú skyndilega 95 00:04:28,720 --> 00:04:31,640 sjá 3.14159265 fljúga um í kóðanum þínum, 96 00:04:31,640 --> 00:04:33,517 þú veist líklega að það er að tala um pi. 97 00:04:33,517 --> 00:04:35,850 En kannski getum við gefa það lítið meira táknræn merking. 98 00:04:35,850 --> 00:04:39,850 Og við getum í staðinn sagt #define pí eins og þessi munnfylli af tölum 99 00:04:39,850 --> 00:04:42,110 að ég ætla ekki að halda lesa aftur og aftur. 100 00:04:42,110 --> 00:04:45,560 >> Og hvað er að fara að gerast þá á saman tíma er þegar forritið er 101 00:04:45,560 --> 00:04:48,530 saman, það fyrsta sem mun gerast er að það mun fara í gegnum 102 00:04:48,530 --> 00:04:51,520 og það mun koma í stað í hvert skipti það sér fjármagns P, höfuðborg I, 103 00:04:51,520 --> 00:04:55,610 það verður bókstaflega að skipta um það með 3.14 og svo framvegis, þannig að þú 104 00:04:55,610 --> 00:04:58,090 þarft ekki að slá það á hverjum tíma en program samt 105 00:04:58,090 --> 00:05:00,631 hefur virkni sem þig búast við, vegna þess að þú ert að vinna 106 00:05:00,631 --> 00:05:05,090 með notfæra, margfalda, skipta, hvað sem það er með pí. 107 00:05:05,090 --> 00:05:08,230 >> Þú ert ekki takmörkuð við þetta skipta um símanúmer. 108 00:05:08,230 --> 00:05:12,279 Til dæmis gæti ég #define Auðvitað eins og band CS50. 109 00:05:12,279 --> 00:05:14,070 Í þessu tilfelli, þegar Námið er unnin, 110 00:05:14,070 --> 00:05:16,236 #define mun fara í gegnum númer, skipta í hvert skipti 111 00:05:16,236 --> 00:05:19,900 það sér "námskeið" með strengnum CS50. 112 00:05:19,900 --> 00:05:21,720 >> Þú munt taka eftir hér líka að ég oft 113 00:05:21,720 --> 00:05:26,090 #define allt mitt skilgreint táknræn fastar, svo að segja, 114 00:05:26,090 --> 00:05:28,130 eru alltaf í öllum húfur. 115 00:05:28,130 --> 00:05:28,960 Það er samningur. 116 00:05:28,960 --> 00:05:30,170 Það er ekki nauðsynlegt. 117 00:05:30,170 --> 00:05:33,900 Ástæðan almennt fólk notar allt höfuðborgum þegar þeir eru #defining 118 00:05:33,900 --> 00:05:37,590 er bara að gera það í raun ljóst að Þetta tiltekna þáttur númerið mitt 119 00:05:37,590 --> 00:05:38,820 er skilgreind stöðug. 120 00:05:38,820 --> 00:05:43,730 Ef það var lágstafir, það er hægt að það gæti verið ruglað saman við breytu. 121 00:05:43,730 --> 00:05:46,120 Og það er líklega ekki gott að gera. 122 00:05:46,120 --> 00:05:48,910 >> Svo þetta tiltekna Lausnin er miklu betra 123 00:05:48,910 --> 00:05:50,550 en annaðhvort fyrri. 124 00:05:50,550 --> 00:05:59,950 Ef ég fyrst #define þilfari stærð 52, þá Nú nota ég 52, eða þilfari stærð hér 125 00:05:59,950 --> 00:06:01,850 er mikið meira innsæi og mikið öruggari. 126 00:06:01,850 --> 00:06:03,280 Þú getur ekki breytt fasti. 127 00:06:03,280 --> 00:06:05,259 Þú getur ekki sagt 52 plús plús. 128 00:06:05,259 --> 00:06:06,800 Það er ekki að fara að umbreyta það til 53. 129 00:06:06,800 --> 00:06:09,390 Þú getur ekki breytt 52 í eitthvað. 130 00:06:09,390 --> 00:06:12,470 >> Þú getur breytt breytu sem gildi er 52, 131 00:06:12,470 --> 00:06:14,870 sem var fyrsta festa við höfðum áður. 132 00:06:14,870 --> 00:06:17,000 Og þú gætir aukið sem breyta 53. 133 00:06:17,000 --> 00:06:21,100 En þú getur ekki sagt 52 plús plús og hafa þessi skyndilega snúið 52 í 53. 134 00:06:21,100 --> 00:06:23,350 52 er alltaf 52. 135 00:06:23,350 --> 00:06:28,860 Og svo þú getur ekki óvart breytt þilfari stærð hér með því að notfæra það, 136 00:06:28,860 --> 00:06:29,940 137 00:06:29,940 --> 00:06:32,390 >> Annar góður hlið Áhrifin af þessari þó er 138 00:06:32,390 --> 00:06:38,310 að þú ert meðvituð um að ekki öll lönd um allan heim 139 00:06:38,310 --> 00:06:40,690 nota spilastokk stærð 52? 140 00:06:40,690 --> 00:06:45,630 Til dæmis, það er mjög algengt í Þýskaland að nota þilfari stærð 32, 141 00:06:45,630 --> 00:06:48,020 þar sem þeir ræma út sumir í neðri fjárkorta. 142 00:06:48,020 --> 00:06:50,960 Og í þessu tilfelli, I langaði til hafnar suite minn 143 00:06:50,960 --> 00:06:55,390 aðgerðir sem eiga við kort meðferð til Þýskalands. 144 00:06:55,390 --> 00:06:59,440 Ég gæti í fyrsta lagi við sýndi, að fara og skipta 145 00:06:59,440 --> 00:07:03,570 allt dæmi um 52 í númerið mitt með 32. 146 00:07:03,570 --> 00:07:07,940 >> En hér, ef ég #define þilfari stærð eins 32 á the mjög toppur af kóða mitt, 147 00:07:07,940 --> 00:07:11,730 ef ég þarf að breyta því, ég get bara fara og breyta því eitt. 148 00:07:11,730 --> 00:07:15,010 Endurþýða númerið mitt, og allt í einu það elskulega gegnum. 149 00:07:15,010 --> 00:07:18,850 Í raun getum við breytt þilfari stærð til hvaða gildi við viljum. 150 00:07:18,850 --> 00:07:22,500 >> Get ég þú hefur áhuga á a leikur á þilfari stærð pallbíll? 151 00:07:22,500 --> 00:07:23,430 >> Ég er Doug Lloyd. 152 00:07:23,430 --> 00:07:25,840 Og þetta er CS50. 153 00:07:25,840 --> 00:07:27,772