1 00:00:00,000 --> 00:00:02,350 >> [Mūzikas atskaņošanai] 2 00:00:02,350 --> 00:00:05,444 3 00:00:05,444 --> 00:00:06,360 Doug LLOYD: Nu labi. 4 00:00:06,360 --> 00:00:07,770 Veida dīvaini tēmu, vai ne? 5 00:00:07,770 --> 00:00:09,050 Burvju numuri. 6 00:00:09,050 --> 00:00:12,012 Ko stirna viņš domā, kad viņš ir runājot par burvju numuru? 7 00:00:12,012 --> 00:00:14,220 Nu, dažas programmas ka mēs esam rakstīts CS50 8 00:00:14,220 --> 00:00:16,660 līdz šim ir bijusi daži dīvaini numuri veida izmet tiem. 9 00:00:16,660 --> 00:00:19,680 Varbūt dēļ mums nav pilnībā izprast tieši tagad. 10 00:00:19,680 --> 00:00:23,950 Tā, piemēram, Mario problēmas, mēs nepārsniedzamā augstumu piramīdas 23. 11 00:00:23,950 --> 00:00:26,880 Mēs skaidri teica tevi nevar iet augstāk par 23. 12 00:00:26,880 --> 00:00:28,702 >> Bet ko tas nozīmē 23? 13 00:00:28,702 --> 00:00:30,410 Nu, ja jūs lasīt spec uzmanīgi, jūs 14 00:00:30,410 --> 00:00:32,493 varētu būt redzējis, ka Iemesls, kāpēc mēs ierobežots to 23 15 00:00:32,493 --> 00:00:36,160 ir tāpēc, ka standarta augstuma no termināļa logā ir 24. 16 00:00:36,160 --> 00:00:38,860 Un tā, ja mums ir piramīda būt garāks nekā, 17 00:00:38,860 --> 00:00:41,290 tas varētu darīt šo dīvaini kur tas iet pie ekrāna. 18 00:00:41,290 --> 00:00:45,140 Un jūs zināt, ko dara tas nozīmē, ka kontekstā, vai ne? 19 00:00:45,140 --> 00:00:48,880 >> Ir nozīme 23 uzreiz skaidrs kādam, kurš izskatās pēc jūsu programmā 20 00:00:48,880 --> 00:00:51,550 un varbūt ir atšķirīgs izmērs termināla logu? 21 00:00:51,550 --> 00:00:52,330 Visticamāk ne. 22 00:00:52,330 --> 00:00:53,080 Šķiet, piemēram, OK. 23 00:00:53,080 --> 00:00:55,005 Nu, kāpēc tas ir tikai mazāk nekā 23? 24 00:00:55,005 --> 00:00:56,880 Vispār, tas ir sava veida slikts ieradums faktiski 25 00:00:56,880 --> 00:00:58,940 uzrakstīt konstantes jūsu kodu. 26 00:00:58,940 --> 00:01:02,190 To darot, kad jūs faktiski darīt uzrakstīt konstanti savā kodu, 27 00:01:02,190 --> 00:01:05,630 tas ir dažreiz sauc par izmantojot burvju numurus, kas ir kaut kas 28 00:01:05,630 --> 00:01:08,030 mēs parasti vēlamies, lai mēģinātu izvairīties. 29 00:01:08,030 --> 00:01:12,830 >> Piemēram, pieņemsim to apskatīt Šī vienkāršā funkcija šeit. 30 00:01:12,830 --> 00:01:15,726 Acīmredzot tur nav datu tips C sauc karti vai klāja. 31 00:01:15,726 --> 00:01:16,600 Tik tikko sedz ar mani. 32 00:01:16,600 --> 00:01:18,910 Tas ir mazliet pseudocode sajauc šeit. 33 00:01:18,910 --> 00:01:21,050 Šī ir funkcija, ko sauc Nodarbojamies karti, kas acīmredzot 34 00:01:21,050 --> 00:01:26,570 kavu, jo tā parametrs, un griba izeja man vienu karti. 35 00:01:26,570 --> 00:01:30,990 >> Un es esmu dara kaut ko šeit, kur es ir cilpa, kas iet no 0 līdz 52, 36 00:01:30,990 --> 00:01:33,394 un es galā karti. 37 00:01:33,394 --> 00:01:35,310 Nu, mēs esam ieguvuši burvju numurs šeit, pa labi. 38 00:01:35,310 --> 00:01:38,790 Vai jūs redzat, ko burvju numurs ir? 39 00:01:38,790 --> 00:01:42,280 Vai ir vēl svarīgāk, vai ne redzēt, kāda ir problēma šeit? 40 00:01:42,280 --> 00:01:44,310 It īpaši, ja tas ir tikai viena funkcija 41 00:01:44,310 --> 00:01:48,030 savā failu programmā mape, kas satur 42 00:01:48,030 --> 00:01:49,970 ķekars atšķirīgs failus, katrs no kuriem 43 00:01:49,970 --> 00:01:51,670 tas cita lieta kārtis. 44 00:01:51,670 --> 00:01:57,310 Varbūt tas sajauks viņiem, vai arī nodarbojas ar roku no piecām kārtīm, nevis vienu karti. 45 00:01:57,310 --> 00:01:59,420 >> Vai jūs redzat to, ko Problēma varētu būt šeit? 46 00:01:59,420 --> 00:02:03,220 Vai jūs redzat burvju numuru Esmu ievada kodu? 47 00:02:03,220 --> 00:02:04,390 Tas ir 52, pa labi. 48 00:02:04,390 --> 00:02:06,440 >> Tāpat, intuitīvi jūs droši vien zināt, OK. 49 00:02:06,440 --> 00:02:09,740 Tāpat kā standarta klājā kārtis ir 52 kārtis. 50 00:02:09,740 --> 00:02:12,570 Bet mūsu programmā, tas ir tikai veida peldošs ap tur. 51 00:02:12,570 --> 00:02:15,280 Tas ir tāpat kā visi pēkšņi tur ir 52. 52 00:02:15,280 --> 00:02:18,290 >> Viens veids, kā atrisināt šo Problēma ir tā, lai to paveiktu. 53 00:02:18,290 --> 00:02:22,724 Mēs esam ļoti skaidri tagad nosaucot to klāja izmērs kā 52. 54 00:02:22,724 --> 00:02:25,390 Tas dod to nedaudz vairāk intuitīvu kas nozīmē, kad uz cilpas 55 00:02:25,390 --> 00:02:28,650 vēlāk mēs tad sakām, i ir mazāks nekā klāja izmēru. 56 00:02:28,650 --> 00:02:32,666 Tā tikai šķiet labāk nekā pasakot 52. 57 00:02:32,666 --> 00:02:34,290 Tagad tas faktiski noteikt problēmu. 58 00:02:34,290 --> 00:02:38,460 Tas dod dažus simbolisks nozīmē ar konstanti. 59 00:02:38,460 --> 00:02:40,820 Bet tas veida faktiski ieviest citu problēmu 60 00:02:40,820 --> 00:02:43,770 kas, iespējams, nav uzreiz skaidrs. 61 00:02:43,770 --> 00:02:45,859 Pat ja šis mainīgais ir deklarēta globally-- 62 00:02:45,859 --> 00:02:47,650 Vai jūs atceraties, ko tā nozīmē, kad mēs paziņojam 63 00:02:47,650 --> 00:02:50,500 mainīgs globāli pret lokāli? 64 00:02:50,500 --> 00:02:53,340 Pat ja mēs deklarēt mainīgo globāli, kas notiks, ja tur ir 65 00:02:53,340 --> 00:02:55,500 citu funkciju Mūsu komplekts funkciju 66 00:02:55,500 --> 00:02:59,750 kas nodarbojas ar karti manipulācijām ka nejauši mainās klāja lielumu, 67 00:02:59,750 --> 00:03:02,727 vai tas palielina to ar 1 vai samazinās to ar 1. 68 00:03:02,727 --> 00:03:04,060 Tas varētu izskaidrot problēmas, vai ne? 69 00:03:04,060 --> 00:03:08,261 It īpaši, ja mums ir darīšana ar komplektu Karšu kur shuffling pilnu klājs 70 00:03:08,261 --> 00:03:08,760 ir nepieciešams. 71 00:03:08,760 --> 00:03:12,804 Ja klāja lielums ir samazinājies ar 1, piemēram, 51, 72 00:03:12,804 --> 00:03:14,970 mēs faktiski nav shuffling visas kārtis iespējams. 73 00:03:14,970 --> 00:03:16,500 Mēs esam atstājot vienu no tiem ārā. 74 00:03:16,500 --> 00:03:21,680 Un šī vērtība, iespējams, varētu būt paredzams vai ekspluatē sliktu aktieris. 75 00:03:21,680 --> 00:03:24,920 >> C nodrošina to, ko sauc par apstrādātāju direktīva, kas 76 00:03:24,920 --> 00:03:27,764 sauc arī makro izveidojot simbolisku konstantes. 77 00:03:27,764 --> 00:03:30,180 Un patiesībā, jūs esat jau redzējis Preprocessor direktīvu, 78 00:03:30,180 --> 00:03:32,916 pat ja neesat dzirdējuši to sauc ka ar # Ietvert. 79 00:03:32,916 --> 00:03:37,150 Tas ir vēl viens piemērs makro vai apstrādātāju direktīva. 80 00:03:37,150 --> 00:03:41,290 >> Veids, kā izveidot simboliskas konstantes, vai sniedzot nosaukumu nemainīga 81 00:03:41,290 --> 00:03:43,740 tā, ka tā ir vairāk nozīmē, ir šāds. 82 00:03:43,740 --> 00:03:47,030 # define, nosaukums, nomaiņa. 83 00:03:47,030 --> 00:03:49,140 Patiešām svarīgi malā šeit tiešām ātri. 84 00:03:49,140 --> 00:03:54,180 Nelieciet semikolu at beigas jūsu #defines. 85 00:03:54,180 --> 00:03:57,310 Tātad, tas ir # define, nosaukums, nomaiņa. 86 00:03:57,310 --> 00:03:59,540 >> Kad jūsu programma ir sastādīta, kas patiesībā notiek 87 00:03:59,540 --> 00:04:01,740 ir kompilators ja notiek iet caur savu kodu 88 00:04:01,740 --> 00:04:06,770 un aizstāt katru gadījumu vārdu "nosaukums" ar ko jūs 89 00:04:06,770 --> 00:04:08,860 likts kā nomaiņu. 90 00:04:08,860 --> 00:04:13,060 Analogi, ja #include ir sava no līdzīga kopējot un ielīmējot, 91 00:04:13,060 --> 00:04:15,700 tad # define ir sava veida līdzīgi atrast un aizstāt, 92 00:04:15,700 --> 00:04:19,180 ja jūs esat kādreiz izmanto šo funkciju tekstapstrādes programma, piemēram. 93 00:04:19,180 --> 00:04:26,345 >> Tā, piemēram, ja es # define pi kā 3.14159265, 94 00:04:26,345 --> 00:04:28,720 ja jūs labāk matemātiski slīpi un jūs pēkšņi 95 00:04:28,720 --> 00:04:31,640 skatīt 3.14159265 peld ap jūsu kodu, 96 00:04:31,640 --> 00:04:33,517 Jūs droši vien zināt, tas runā par pi. 97 00:04:33,517 --> 00:04:35,850 Bet varbūt mēs varam arī tā nedaudz vairāk simboliska nozīme. 98 00:04:35,850 --> 00:04:39,850 Un mēs varam, nevis teikt # define pi kā šī kumoss numuru 99 00:04:39,850 --> 00:04:42,110 ka es neesmu gatavojas glabāt lasījums vairāk un vairāk. 100 00:04:42,110 --> 00:04:45,560 >> Un kas notiks pēc tam sastādīt laiks ir tad, kad programma ir 101 00:04:45,560 --> 00:04:48,530 apkopoti, pirmā lieta, kas notiks tas iet cauri 102 00:04:48,530 --> 00:04:51,520 un tas aizstās ikreiz tas redz kapitāla P, kapitāla I, 103 00:04:51,520 --> 00:04:55,610 tas būs burtiski aizstāt ar 3.14 un tā tālāk, lai jūs 104 00:04:55,610 --> 00:04:58,090 nav rakstīt to katru laiks, kamēr jūsu programma vēl 105 00:04:58,090 --> 00:05:00,631 ir funkcionalitāte, kas jums sagaida, ka jūs strādājat 106 00:05:00,631 --> 00:05:05,090 ar manipulējot, reizinot, dalot, kāds tas ir ar pi. 107 00:05:05,090 --> 00:05:08,230 >> Jūs esat ne tikai šo aizstāšana tikai numuriem. 108 00:05:08,230 --> 00:05:12,279 Piemēram, es varētu # define Protams, kā stīgu CS50. 109 00:05:12,279 --> 00:05:14,070 Šajā gadījumā, ja Programma tiek apkopota, 110 00:05:14,070 --> 00:05:16,236 # define dosies cauri kods, nomainiet katru reizi 111 00:05:16,236 --> 00:05:19,900 tā uzskata "kursu" ar stīgu CS50. 112 00:05:19,900 --> 00:05:21,720 >> Jūs pamanīsiet šeit arī to, ka I bieži 113 00:05:21,720 --> 00:05:26,090 # define visa mana noteikts simbolisks konstantes, tā sakot, 114 00:05:26,090 --> 00:05:28,130 vienmēr visos cepures. 115 00:05:28,130 --> 00:05:28,960 Tas ir konvencija. 116 00:05:28,960 --> 00:05:30,170 Tas nav vajadzīgs. 117 00:05:30,170 --> 00:05:33,900 Iemesls parasti cilvēki izmantos visi Capitals kad viņi #defining 118 00:05:33,900 --> 00:05:37,590 ir tikai, lai tas tiešām skaidrs, ka Tas īpaši manu kodu elements 119 00:05:37,590 --> 00:05:38,820 ir noteikta nemainīga. 120 00:05:38,820 --> 00:05:43,730 Ja tas bija mazie, tas ir iespējams, ka tas varētu sajaukt ar mainīgo. 121 00:05:43,730 --> 00:05:46,120 Un tas ir iespējams, nav laba lieta, ko darīt. 122 00:05:46,120 --> 00:05:48,910 >> Tātad šo konkrēto risinājums ir daudz labāks 123 00:05:48,910 --> 00:05:50,550 nekā jebkurā no iepriekšējiem. 124 00:05:50,550 --> 00:05:59,950 Ja es pirmais # define klāja izmērs 52, tad tagad mans izmantošana 52 vai klāja izmēru šeit, 125 00:05:59,950 --> 00:06:01,850 ir daudz intuitīvāks un daudz drošāku. 126 00:06:01,850 --> 00:06:03,280 Jūs nevarat manipulēt konstants. 127 00:06:03,280 --> 00:06:05,259 Jūs nevarat teikt, 52 plus plus. 128 00:06:05,259 --> 00:06:06,800 Tas nav gatavojas, lai pārvērstu to 53. 129 00:06:06,800 --> 00:06:09,390 Jūs nevarat mainīt 52 uz kaut ko. 130 00:06:09,390 --> 00:06:12,470 >> Jūs varat mainīt mainīgo kura vērtība ir 52, 131 00:06:12,470 --> 00:06:14,870 kas bija pirmais fix mums bija pirms tam. 132 00:06:14,870 --> 00:06:17,000 Un jūs varētu palielināt ka mainīgais līdz 53. 133 00:06:17,000 --> 00:06:21,100 Bet jūs nevarat teikt 52 plus plus un ir, ka pēkšņi savukārt 52 uz 53. 134 00:06:21,100 --> 00:06:23,350 52 vienmēr ir 52. 135 00:06:23,350 --> 00:06:28,860 Un lai jūs nevar nejauši mainīt klāja izmērs šeit, manipulējot to, 136 00:06:28,860 --> 00:06:29,940 137 00:06:29,940 --> 00:06:32,390 >> Vēl viena laba puse efekts šo, lai gan ir 138 00:06:32,390 --> 00:06:38,310 ka tu esi informēts, ka nav visas valstis visā pasaulē 139 00:06:38,310 --> 00:06:40,690 izmantot kārtis lieluma 52? 140 00:06:40,690 --> 00:06:45,630 Piemēram, tas ir patiešām bieži sastopama Vācija izmantot klāja izmēru 32, 141 00:06:45,630 --> 00:06:48,020 kur viņi izsvītro kādu no zemākas vērtības kartēm. 142 00:06:48,020 --> 00:06:50,960 Un šajā gadījumā, es gribēju ostā mana suite 143 00:06:50,960 --> 00:06:55,390 Funkciju, kas nodarbojas ar card manipulācija uz Vāciju. 144 00:06:55,390 --> 00:06:59,440 Es varētu pirmajā instancē mums parādīja, ir iet un aizstāt 145 00:06:59,440 --> 00:07:03,570 Visi gadījumi 52 manā kodu ar 32. 146 00:07:03,570 --> 00:07:07,940 >> Bet šeit, ja es # define klājs izmērs kā 32. Tajā pašā augšā uz manu kodu, 147 00:07:07,940 --> 00:07:11,730 ja man ir nepieciešams, lai mainītu to, es varu tikai iet un mainīt, ka viena lieta. 148 00:07:11,730 --> 00:07:15,010 Recompile manu kodu, un visi pēkšņi tā izplatās cauri. 149 00:07:15,010 --> 00:07:18,850 Patiesībā, mēs varam mainīt klāja lielums uz jebkuru vērtību mēs gribam. 150 00:07:18,850 --> 00:07:22,500 >> Vai es tevi interesi par spēle klāja izmēra pikaps? 151 00:07:22,500 --> 00:07:23,430 >> Es esmu Doug Lloyd. 152 00:07:23,430 --> 00:07:25,840 Un tas ir CS50. 153 00:07:25,840 --> 00:07:27,772