[MUSIC PLAYING] DOUG LLOYD: Bütün hüququ. Qəribə mövzu cür, sağ? Magic nömrələri. O zaman o nə deməkdir doe sehrli nömrələri haqqında söhbət? Yaxşı, proqramların bəzi biz CS50 yazdıq ki, indiyə qədər bəzi qəribə var nömrələri cür onlara atılan. Yəqin ki, səbəblərə görə biz deyil tamamilə indi başa düşürük. Məsələn, Mario problem, biz 23 piramida hündürlüyü başıbağlı. Biz açıq-aydın ifadə etdi daha yüksək 23 getmək bilməz. Amma 23 nə deməkdir? Yaxşı, siz oxumaq əgər Diqqətlə sizə spec ki, görmüşəm bilər səbəbi 23 onu başıbağlı standart hündürlüyü çünki bir terminal pəncərə 24. Və biz əgər piramida daha taller olmaq, Bu qəribə şey ola bilər harada ekran off çalışır. Bildiyiniz Və nə doğru, kontekstində deməkdir? 23 dərhal aydın mənası kimsə olan proqram baxır və bəlkə başqa bir var size terminal pəncərə? Yəqin ki, deyil. OK, kimi görünür. Yaxşı, niyə yalnız az 23-dən? Ümumiyyətlə, bu cür var pis vərdiş həqiqətən Sizin kodu daxil sabitləri yazmaq. Siz, həqiqətən, nə zaman, bunu Sizin kodu daxil daimi yazmaq istifadə edərək kimi istinad bəzən var sehrli nömrələri, bir şey deyil biz ümumiyyətlə cəhd və qarşısını almaq istəyirik. Məsələn, bir nəzər salaq Burada bu sadə funksiyası. Aydındır ki, heç bir məlumat yoxdur C tipli kart və ya göyərtə çağırıb. Belə ki, yalnız mənimlə daşıyırlar. Bu bir az var pseudocode burada qarışdırılır. Bu adlı bir funksiyası var ki, yəqin kart məşğul onun parametri kimi bir göyərtə edir və Mənə çıxış edəcək bir kart. Mən burada mən bir şey edirəm , 0-dan 52 çalışan bir loop var və mən bir kart məşğul. Bəli, biz bir sehrli var burada sayı, doğru. Siz sehrli sayı nə görürsünüz? Və ya daha əhəmiyyətlisi, siz problem burada nə görmək? Xüsusilə bu halda yalnız bir funksiyası var bir öz fayl ehtiva qovluq müxtəlif bir dəstə faylları hər hansı kartlar göyərtə başqa şey yoxdur. Bəlkə onları shuffles, və ya bir tərəfdən məşğul beş kartları əvəzinə bir kart. Siz nə görürsünüz problem burada ola bilər? Siz sehrli sayı görürsünüzmü Mən kodu enjekte etdik? Bu doğru, 52 var. Kimi, daxilən siz yəqin ki, bilirsiniz, OK. Standart göyərtə kimi kartları 52 kartları ehtiva edir. Amma bizim proqramda, yalnız var cür orada ətrafında üzən. Qəflətən 52 var kimi deyil. Bu həll etmək üçün bir yolu problem bunu edir. Biz indi çox açıq-aydın istəyirik 52 kimi göyərtə ölçüsü səslənərək. Bu bir az daha asan verir zaman loop üçün mənası biz sonra deyirəm sonra göyərtə ölçüsü azdır. Bu, sadəcə 52 deyərək daha yaxşı görünür. İndi bu həqiqətən problemi həll etmir. Bəzi rəmzi verir daimi mənasını. Amma bu cür həqiqətən yoxdur başqa bir problem təqdim ki, dərhal aydın ola bilər. Hətta bu dəyişən əgər globally-- elan Siz nə geri yoxdur biz bəyan zaman deməkdir qlobal yerli qarşı dəyişən? Biz bir dəyişən elan bile qlobal, nə var, əgər başqa funksiyası funksiyaları bizim suite kart manipulyasiya ilə məşğul ki səhvən, göyərtə ölçüsü dəyişir və ya onu artırır 1 və ya 1 ilə azalır. Bu doğru, narahatlıq sehr bilər? Biz bir sıra ilə məşğul olduğunuz, xüsusilə də əgər kartları tam göyərtə shuffling harada tələb olunur. Göyərtə ölçüsü azalır, əgər 1, məsələn, 51, biz, həqiqətən, shuffling deyilik bəlkə bütün kartları. Biz onlardan biri tərk edirik. Və ki, dəyəri bəlkə ola bilər proqnozlaşdırılan və ya pis aktyor tərəfindən istismar. C deyirlər nə təmin edir preprocessor direktiv olan də makro adlanır simvolik sabitləri yaradılması. Və əslində, siz artıq var bir preprocessor direktiv görüldü Siz onu eşitməmişəm, hətta # daxildir ilə çağırıb. Bu makro bir misal var və ya preprocessor direktiv. yol simvolik sabitləri yaratmaq, və ya daimi bir ad verilməsi daha var ki, yəni belə. # müəyyən, adı, dəyişdirilməsi. Kənara həqiqətən vacibdir Burada həqiqətən sürətli. Bir nöqtəli vergül qoymaq etməyin Sizin # müəyyənləşdirir sonu. Belə ki Saylı, adı, əvəz edir. Proqram tərtib edildikdə, nə həqiqətən olur gedir, əgər compiler edir Sizin kod vasitəsilə getmək və hər instansiya əvəz hər hansı ilə sözü "adı" Siz əvəz kimi qoydu. Analoji, # daxildir əgər sort çıxarmaq və yapıştırma oxşar, sonra Saylı sort edir tapmaq və əvəz oxşar, Heç bir ki xüsusiyyət istifadə etdiyiniz halda söz emal proqram, misal üçün. Məsələn, əgər mən 3.14159265 kimi pi # müəyyən, Daha yaxşı riyazi əgər maili və birdən 3.14159265 uçan görmək ətrafında kodu, Siz yəqin ki, pi söhbət bilirik. Amma bəlkə biz onu bir verə bilər az daha simvolik mənası. Və biz əvəzinə # müəyyən demək olar nömrələri ki, qurtum kimi pi Mən saxlamaq fikrində deyiləm ki, üzərində oxu. Və nə sonra nə olacaq proqram zaman tərtib vaxt tərtib, ilk şey ki, baş verəcək onun vasitəsilə getmək olacaq və hər zaman əvəz edəcək Bu, kapital P, kapital I görür bu sözün ilə əvəz edəcəyik 3.14 və s, ki, hər növü yoxdur vaxt hələ proqram isə funksionallıq var ki, Siz çalışırıq, çünki gözləyirik manipulyasiya ilə vurulması, Bu pi tərəfindən nə, bölünməsi. Bu məhdud deyil yalnız nömrələri üçün əvəz. Məsələn, mən # müəyyən edə bilər string CS50 kimi kurs. Bu halda, zaman proqram tərtib, # müəyyən keçəcəyi indeksi, hər zaman əvəz Bu string CS50 ilə "kursu" görür. Baş görəcəksiniz I ki, tez-tez # müəyyən bütün simvolik müəyyən sabitləri, belə ki, danışmaq bütün caps həmişə var. Bu konvensiya var. Bu lazım deyil. səbəbi ümumiyyətlə insanlar istifadə edəcək bütün paytaxtlarında onlar #defining edirik ki, yalnız bu, həqiqətən, açıq-aşkar etmək üçün edir mənim kodu bu xüsusi element müəyyən daimi deyil. Bu kiçik idi, bu mümkündür bir dəyişən səhv ola bilər. Və yəqin ki, var yaxşı bir şey etmək deyil. Belə ki, bu xüsusi həll daha yaxşı əvvəlki və ya daha. Mən ilk Saylı göyərtə ölçüsü 52, onda indi burada 52 və ya göyərtə ölçüsü mənim istifadə, bir çox daha asan və çox təhlükəsiz edir. Siz daimi manipulyasiya edə bilməz. 52 plus plus deyə bilmərəm. 53 çevirmək niyyətində deyil. Siz bir şey 52 dəyişə bilməz. Siz dəyişən dəyişə bilərsiniz onların dəyəri 52, olan biz əvvəl idi ilk fix idi. Və arta bilər 53 ki, dəyişən. Amma 52 Plus Plus və deyə bilmərəm birdən 53 daxil 52 çevirmək ki, var. 52 həmişə 52. Və belə ki, təsadüfən dəyişə bilməz burada manipulyasiya ilə göyərtə ölçüsü, Yaxşı bir tərəfi Bu baxmayaraq təsiri ki, bilirik ki, deyil Dünyanın bütün ölkələri ölçüsü 52 kartlar göyərtə istifadə? Məsələn, həqiqətən ümumi var Almaniya, 32 göyərtə ölçüsü istifadə etmək bəzi soyunmaq harada aşağı dəyəri kartları. Və bu halda, mən limanına mənim suite istədi ilə məşğul funksiyaları Almaniya kart manipulyasiya. Mən ilk növbədə bilər biz göstərdi, getmək və əvəz var 32 mənim kodu 52 bütün hallarda. Amma burada, mən # müəyyən əgər göyərtə ölçüsü mənim kodu çox üst 32 kimi, Mən bunu dəyişmək lazımdır, əgər, mən yalnız getmək və bir şey dəyişir. Mənim kodu compile və bütün ani vasitəsilə təbliğ edir. Əslində, biz göyərtə dəyişə bilərsiniz biz istədiyiniz hər hansı bir dəyəri ölçüsü. Mən üçün gedir göyərtə ölçüsü alma oyun? Mən Doug Lloyd edirəm. Bu CS50 edir.