1 00:00:00,000 --> 00:00:02,350 >> [Daqq tal-mużika] 2 00:00:02,350 --> 00:00:05,444 3 00:00:05,444 --> 00:00:06,360 Doug LLOYD: Kull dritt. 4 00:00:06,360 --> 00:00:07,770 Tip ta 'suġġett stramba, right? 5 00:00:07,770 --> 00:00:09,050 Numri magic. 6 00:00:09,050 --> 00:00:12,012 What fenka hu jfisser meta hu jitkellem dwar in-numri magic? 7 00:00:12,012 --> 00:00:14,220 Ukoll, xi wħud mill-programmi li konna bil-miktub fil CS50 8 00:00:14,220 --> 00:00:16,660 s'issa kellhom xi stramb numri tip ta 'jintefa fihom. 9 00:00:16,660 --> 00:00:19,680 Forsi għal raġunijiet aħna ma kompletament jifhmu dritt issa. 10 00:00:19,680 --> 00:00:23,950 Per eżempju, fil-problema Mario, aħna limitat l-għoli tal-piramida fuq 23. 11 00:00:23,950 --> 00:00:26,880 Aħna espliċitament qal inti ma tistax tmur ogħla minn 23. 12 00:00:26,880 --> 00:00:28,702 >> Imma dak ma 23 jfisser? 13 00:00:28,702 --> 00:00:30,410 Ukoll, jekk inti taqra l- spec b'attenzjoni, inti 14 00:00:30,410 --> 00:00:32,493 tista raw li l- raġuni għandna limitat dan fid-23 ta ' 15 00:00:32,493 --> 00:00:36,160 huwa minħabba l-għoli standard ta 'tieqa terminal huwa 24. 16 00:00:36,160 --> 00:00:38,860 U hekk jekk ikollna l piramida jkun taller minn dan, 17 00:00:38,860 --> 00:00:41,290 jista 'tagħmel dan ħaġa stramb fejn hija tmur barra l-iskrin. 18 00:00:41,290 --> 00:00:45,140 U inti taf, dak li ma Dan ifisser fil-kuntest, id-dritt? 19 00:00:45,140 --> 00:00:48,880 >> T-tifsira tal-23 immedjatament ovvji lil xi ħadd li tħares lejn programm tiegħek 20 00:00:48,880 --> 00:00:51,550 u forsi għandu differenti tieqa terminal daqs? 21 00:00:51,550 --> 00:00:52,330 Probabbilment le. 22 00:00:52,330 --> 00:00:53,080 Jidher bħal, OK. 23 00:00:53,080 --> 00:00:55,005 Well, għaliex hi biss inqas minn 23? 24 00:00:55,005 --> 00:00:56,880 B'mod ġenerali, huwa tip ta drawwa ħażina fil-fatt 25 00:00:56,880 --> 00:00:58,940 jiktbu kostanti fil-kodiċi tiegħek. 26 00:00:58,940 --> 00:01:02,190 Meta tagħmel dan, meta inti fil-fatt tagħmel jiktbu kostanti fis kodiċi tiegħek, 27 00:01:02,190 --> 00:01:05,630 kultant s imsejħa użu numri magic, li huwa xi ħaġa 28 00:01:05,630 --> 00:01:08,030 aħna ġeneralment jridu jippruvaw u jevitaw. 29 00:01:08,030 --> 00:01:12,830 >> Per eżempju, ejja tagħti ħarsa fil din il-funzjoni sempliċi hawn. 30 00:01:12,830 --> 00:01:15,726 Ovvjament hemm l-ebda data tip C imsejħa karta jew gverta. 31 00:01:15,726 --> 00:01:16,600 Hekk biss jkollhom miegħi. 32 00:01:16,600 --> 00:01:18,910 Huwa xi ftit ta ' pseudocode mħallta fil hawn. 33 00:01:18,910 --> 00:01:21,050 Din hija funzjoni msejħa jittrattaw biljett li apparentement 34 00:01:21,050 --> 00:01:26,570 tieħu gverta kif parametru tagħha, u rieda output lili karta waħda. 35 00:01:26,570 --> 00:01:30,990 >> U jien tagħmel xi ħaġa hawn fejn I jkollhom loop li tmur 0-52, 36 00:01:30,990 --> 00:01:33,394 u I jittrattaw karta. 37 00:01:33,394 --> 00:01:35,310 Well, konna ltqajna magic Numru fil hawn, id-dritt. 38 00:01:35,310 --> 00:01:38,790 Inti tara dak in-numru magic hija? 39 00:01:38,790 --> 00:01:42,280 Jew aktar importanti, do you tara x'inhi l-problema hawn? 40 00:01:42,280 --> 00:01:44,310 Partikolarment jekk dan huwa biss funzjoni waħda 41 00:01:44,310 --> 00:01:48,030 fil-fajl tagħha stess fil- folder li fih 42 00:01:48,030 --> 00:01:49,970 mazz ta 'differenti fajls, li kull wieħed minnhom 43 00:01:49,970 --> 00:01:51,670 ma ħaġa oħra għal gverta ta 'karti. 44 00:01:51,670 --> 00:01:57,310 Forsi shuffles minnhom, jew jittratta idejn ta 'ħames karti minflok karta waħda. 45 00:01:57,310 --> 00:01:59,420 >> Inti tara dak l- problema tista 'tkun hawn? 46 00:01:59,420 --> 00:02:03,220 Inti tara l-għadd magic Stajt injettat fil-kodiċi? 47 00:02:03,220 --> 00:02:04,390 Huwa 52, id-dritt. 48 00:02:04,390 --> 00:02:06,440 >> Bħal, intuwittivament inti probabilment taf, OK. 49 00:02:06,440 --> 00:02:09,740 Bħal gverta standard ta karti fih 52 cards. 50 00:02:09,740 --> 00:02:12,570 Iżda fil-programm tagħna, huwa biss tip ta 'floating madwar fil hemmhekk. 51 00:02:12,570 --> 00:02:15,280 Huwa simili kollha f'daqqa hemm 52. 52 00:02:15,280 --> 00:02:18,290 >> Mod wieħed biex issolvi din problema hija li dan isir. 53 00:02:18,290 --> 00:02:22,724 Aħna espliċitu ħafna issa ssejjaħ out-daqs gverta kif 52. 54 00:02:22,724 --> 00:02:25,390 Hija tagħti hija ftit aktar intuwittivi li jfisser meta fil-linja għal 55 00:02:25,390 --> 00:02:28,650 aktar tard aħna mbagħad ngħidu, i huwa inqas mid-daqs gverta. 56 00:02:28,650 --> 00:02:32,666 Huwa biss tidher aħjar milli qal 52. 57 00:02:32,666 --> 00:02:34,290 Issa dan ma attwalment tiffissa l-problema. 58 00:02:34,290 --> 00:02:38,460 Hija ma tagħti xi simbolika li jfisser il-kostanti. 59 00:02:38,460 --> 00:02:40,820 Iżda ma tip ta 'fatt jintroduċu problema oħra 60 00:02:40,820 --> 00:02:43,770 li jistgħu ma jkunux immedjatament apparenti. 61 00:02:43,770 --> 00:02:45,859 Anki jekk dan il-varjabbli huwa ddikjarat globally-- 62 00:02:45,859 --> 00:02:47,650 Tiftakar dak li ifisser li meta aħna niddikjaraw 63 00:02:47,650 --> 00:02:50,500 varjabbli globalment versus lokalment? 64 00:02:50,500 --> 00:02:53,340 Anki jekk aħna tiddikjara varjabbli globalment, dak li jekk hemm 65 00:02:53,340 --> 00:02:55,500 funzjoni oħra fil suite tagħna ta 'funzjonijiet 66 00:02:55,500 --> 00:02:59,750 li jittrattaw manipulazzjoni karta li involontarjament bidliet daqs gverta, 67 00:02:59,750 --> 00:03:02,727 jew dan iżid lilha mill 1 jew jonqos sal-1. 68 00:03:02,727 --> 00:03:04,060 Dan jista 'jespliċitaw trouble, id-dritt? 69 00:03:04,060 --> 00:03:08,261 Speċjalment jekk aħna qed jittrattaw ma 'sett ta 'karti fejn jsir ċaqliq-gverta mimlija 70 00:03:08,261 --> 00:03:08,760 hija meħtieġa. 71 00:03:08,760 --> 00:03:12,804 Jekk id-daqs gverta hija naqset b'1, per eżempju, sa 51, 72 00:03:12,804 --> 00:03:14,970 aħna mhux qed attwalment jsir ċaqliq l-karti kollha possibilment. 73 00:03:14,970 --> 00:03:16,500 Aħna qed tħalli wieħed minnhom out. 74 00:03:16,500 --> 00:03:21,680 U li l-valur jista 'forsi jkun mbassra jew sfruttati minn attur bad. 75 00:03:21,680 --> 00:03:24,920 >> C jipprovdi dak li sejjaħ direttiva Preprocessor, li 76 00:03:24,920 --> 00:03:27,764 hija magħrufa wkoll bħala makro għall ħolqien kostanti simboliku. 77 00:03:27,764 --> 00:03:30,180 U fil-fatt, inti stajt diġà raw direttiva Preprocessor, 78 00:03:30,180 --> 00:03:32,916 anki jekk int ma smajtu imsejħa li ma #include. 79 00:03:32,916 --> 00:03:37,150 Huwa eżempju ieħor ta makro jew direttiva Preprocessor. 80 00:03:37,150 --> 00:03:41,290 >> Il-mod biex jinħolqu kostanti simboliċi, jew tagħti isem lil kostanti 81 00:03:41,290 --> 00:03:43,740 sabiex ikollha aktar li jfisser, huwa kif ġej. 82 00:03:43,740 --> 00:03:47,030 #define, isem, sostituzzjoni. 83 00:03:47,030 --> 00:03:49,140 Verament importanti aside hawn tassew mgħaġġla. 84 00:03:49,140 --> 00:03:54,180 Tpoġġix b'waqfa u virgola fi l-aħħar tal #defines tiegħek. 85 00:03:54,180 --> 00:03:57,310 Allura huwa #define, isem, sostituzzjoni. 86 00:03:57,310 --> 00:03:59,540 >> Meta program tiegħek hija miġbura, x'inhu dak li attwalment jiġri 87 00:03:59,540 --> 00:04:01,740 huwa l-kumpilatur jekk tmur li jmorru permezz-kodiċi tiegħek 88 00:04:01,740 --> 00:04:06,770 u jissostitwixxi kull każ ta il-kelma "name" ma kwalunkwe inti 89 00:04:06,770 --> 00:04:08,860 jitqiegħdu kif sostituzzjoni. 90 00:04:08,860 --> 00:04:13,060 Analogu, jekk #include huwa tip tal simili għal ikkupjar u pasta, 91 00:04:13,060 --> 00:04:15,700 allura #define huwa tip ta simili biex isibu u jissostitwixxi, 92 00:04:15,700 --> 00:04:19,180 jekk inti stajt qatt jintużaw li karatteristika fil- kelma ipproċessar programm, per eżempju. 93 00:04:19,180 --> 00:04:26,345 >> Għalhekk, per eżempju, jekk I #define pi bħala 3.14159265, 94 00:04:26,345 --> 00:04:28,720 jekk int aħjar matematikament inklinati u f'daqqa waħda 95 00:04:28,720 --> 00:04:31,640 tara 3.14159265 jtajru madwar fil-kodiċi tiegħek, 96 00:04:31,640 --> 00:04:33,517 inti probabilment taf li jitkellem dwar pi. 97 00:04:33,517 --> 00:04:35,850 Imma forsi nistgħu tagħtiha a ftit tifsira aktar simbolika. 98 00:04:35,850 --> 00:04:39,850 U nistgħu minflok ngħidu #define pi bħal dik f'gidma ta 'numri 99 00:04:39,850 --> 00:04:42,110 li jien mhux ser iżommu qari aktar u aktar. 100 00:04:42,110 --> 00:04:45,560 >> U x'inhu jiġri mbagħad fl jikkompilaw żmien huwa meta l-programm huwa 101 00:04:45,560 --> 00:04:48,530 kkompilata, l-ewwel ħaġa li se jiġri huwa se jmorru permezz 102 00:04:48,530 --> 00:04:51,520 u din se tissostitwixxi kull darba jara kapital P, kapital I, 103 00:04:51,520 --> 00:04:55,610 dan ser litteralment tibdilha 3.14 u l-bqija, sabiex inti 104 00:04:55,610 --> 00:04:58,090 ma għandekx tip li kull ħin waqt program tiegħek xorta 105 00:04:58,090 --> 00:05:00,631 għandu l-funzjonalità li inti jistennew, għaliex inti qed jaħdmu 106 00:05:00,631 --> 00:05:05,090 ma manipulazzjoni, multiplikazzjoni, diviżjoni, tkun xi tkun mill pi. 107 00:05:05,090 --> 00:05:08,230 >> Inti mhux limitati għal dan sostituzzjoni għal numri biss. 108 00:05:08,230 --> 00:05:12,279 Per eżempju, I jistgħu #define kors kif l CS50 sekwenza. 109 00:05:12,279 --> 00:05:14,070 F'dan il-każ, meta l- programm hija miġbura, 110 00:05:14,070 --> 00:05:16,236 #define se jgħaddu mill- kodiċi, jissostitwixxu kull darba 111 00:05:16,236 --> 00:05:19,900 jara "kors" ma 'l-CS50 sekwenza. 112 00:05:19,900 --> 00:05:21,720 >> Int ser ikollok avviż hawn ukoll li I spiss 113 00:05:21,720 --> 00:05:26,090 #define kollha tiegħi definit simboliku kostanti, biex ngħidu hekk, 114 00:05:26,090 --> 00:05:28,130 huma dejjem fil-limiti kollha. 115 00:05:28,130 --> 00:05:28,960 Huwa konvenzjoni. 116 00:05:28,960 --> 00:05:30,170 Mhuwiex meħtieġ. 117 00:05:30,170 --> 00:05:33,900 Ir-raġuni ġeneralment nies se jużaw kapitali kollha meta jkunu qed #defining 118 00:05:33,900 --> 00:05:37,590 huwa biss li jagħmilha verament ċara li dan l-element partikolari ta 'kodiċi tiegħi 119 00:05:37,590 --> 00:05:38,820 huwa kostanti definit. 120 00:05:38,820 --> 00:05:43,730 Jekk kien lowercase, huwa possibbli li jista 'jkun konfuż ma' varjabbli. 121 00:05:43,730 --> 00:05:46,120 U li probabbilment mhix ħaġa tajba li tagħmel. 122 00:05:46,120 --> 00:05:48,910 >> Allura dan partikolari soluzzjoni hija ħafna aħjar 123 00:05:48,910 --> 00:05:50,550 minn jew ta 'dawk ta' qabel. 124 00:05:50,550 --> 00:05:59,950 Jekk I ewwel #define daqs gverta 52, imbagħad issa użu tiegħi ta '52, jew id-daqs gverta hawn, 125 00:05:59,950 --> 00:06:01,850 huwa ħafna aktar intuwittivi u ħafna aktar sikuri. 126 00:06:01,850 --> 00:06:03,280 Inti ma tista 'timmanipola kostanti. 127 00:06:03,280 --> 00:06:05,259 Inti ma tistax tgħid 52 plus plus. 128 00:06:05,259 --> 00:06:06,800 Li mhux se jissarfu sa 53. 129 00:06:06,800 --> 00:06:09,390 Inti ma tistax tbiddel 52 sa xi ħaġa. 130 00:06:09,390 --> 00:06:12,470 >> Tista 'bidla varjabbli li l-valur huwa 52, 131 00:06:12,470 --> 00:06:14,870 li kienet l-ewwel jiffissaw kellna qabel. 132 00:06:14,870 --> 00:06:17,000 U inti tista 'żżid dak il-varjabbli sa 53. 133 00:06:17,000 --> 00:06:21,100 Imma inti ma tistax tgħid 52 plus plus u jkollhom li għarrieda jduru 52 fis 53. 134 00:06:21,100 --> 00:06:23,350 52 huwa dejjem 52. 135 00:06:23,350 --> 00:06:28,860 U għalhekk inti ma tistax tbiddel involontarjament daqs gverta hawn billi timmanipula dan, 136 00:06:28,860 --> 00:06:29,940 137 00:06:29,940 --> 00:06:32,390 >> Ieħor sekondarji tajba effett ta 'dan għalkemm huwa 138 00:06:32,390 --> 00:06:38,310 li huma inti taf li ma pajjiżi kollha madwar id-dinja 139 00:06:38,310 --> 00:06:40,690 użu gverta ta 'karti ta' daqs 52? 140 00:06:40,690 --> 00:06:45,630 Per eżempju, huwa verament komuni fil Ġermanja li jużaw daqs gverta ta '32, 141 00:06:45,630 --> 00:06:48,020 fejn dawn strixxa out xi tal-karti ta 'valur inqas. 142 00:06:48,020 --> 00:06:50,960 U f'dan il-każ, I riedu port suite tiegħi 143 00:06:50,960 --> 00:06:55,390 ta 'funzjonijiet li jittrattaw manipulazzjoni karta lill-Ġermanja. 144 00:06:55,390 --> 00:06:59,440 I jistgħu fl-ewwel istanza aħna wera, ikollhom imorru u tissostitwixxi 145 00:06:59,440 --> 00:07:03,570 każijiet kollha ta '52 fil-kodiċi tiegħi ma 32. 146 00:07:03,570 --> 00:07:07,940 >> Iżda hawnhekk, jekk I #define daqs gverta kif 32 fuq nett tal-kodiċi tiegħi, 147 00:07:07,940 --> 00:07:11,730 jekk I bżonn biex jibdlu, nista biss jmorru u l-bidla li ħaġa waħda. 148 00:07:11,730 --> 00:07:15,010 Recompile kodiċi tiegħi, u kollha ta ' f'daqqa dan tinfirix permezz. 149 00:07:15,010 --> 00:07:18,850 Fil-fatt, nistgħu nbiddlu gverta daqs għal xi valur li rridu. 150 00:07:18,850 --> 00:07:22,500 >> Nista jinteressawk fil- logħba tal Pickup daqs gverta? 151 00:07:22,500 --> 00:07:23,430 >> Jien Doug Lloyd. 152 00:07:23,430 --> 00:07:25,840 U dan huwa CS50. 153 00:07:25,840 --> 00:07:27,772