1 00:00:00,000 --> 00:00:02,350 >> [მუსიკის დაკვრა] 2 00:00:02,350 --> 00:00:05,444 3 00:00:05,444 --> 00:00:06,360 DOUG LLOYD ყველა უფლება. 4 00:00:06,360 --> 00:00:07,770 უცნაური თემაზე, არა? 5 00:00:07,770 --> 00:00:09,050 Magic ნომრები. 6 00:00:09,050 --> 00:00:12,012 რა საერთოდ იგი ნიშნავს, როდესაც ის ვსაუბრობთ ჯადოსნური ნომრები? 7 00:00:12,012 --> 00:00:14,220 ისე, ზოგიერთი პროგრამები რომ ჩვენ წერილობით CS50 8 00:00:14,220 --> 00:00:16,660 ჯერჯერობით არ გვქონდა უცნაური ციფრები სახის დააგდეს მათ. 9 00:00:16,660 --> 00:00:19,680 ალბათ მიზეზი, ჩვენ არ მთლიანად გვესმოდეს, ახლა. 10 00:00:19,680 --> 00:00:23,950 მაგალითად, მარიო პრობლემა, იხურება სიმაღლე პირამიდის 23. 11 00:00:23,950 --> 00:00:26,880 ჩვენ მკაფიოდ განაცხადა, რომ თქვენ ვერ აღემატება 23. 12 00:00:26,880 --> 00:00:28,702 >> მაგრამ რა 23 ნიშნავს? 13 00:00:28,702 --> 00:00:30,410 ისე, თუ წაიკითხა სპეც ყურადღებით, თქვენ 14 00:00:30,410 --> 00:00:32,493 შეიძლება არ ჩანს, რომ მიზეზი ჩვენ დაფარული იგი 23 15 00:00:32,493 --> 00:00:36,160 იმიტომ, რომ სტანდარტული სიმაღლე ტერმინალის ფანჯარა 24. 16 00:00:36,160 --> 00:00:38,860 ასე რომ, თუ ჩვენ გვაქვს პირამიდის უნდა გადააჭარბოს, რომ 17 00:00:38,860 --> 00:00:41,290 ეს შეიძლება ამის გაკეთება უცნაური რამ სადაც იგი გადის off ეკრანზე. 18 00:00:41,290 --> 00:00:45,140 და თქვენ იცით, რა ეს იმას ნიშნავს, რომ კონტექსტში, უფლება? 19 00:00:45,140 --> 00:00:48,880 >> მნიშვნელობა აქვს 23 მაშინვე აშკარა მათ, ვინც უყურებს თქვენი პროგრამა 20 00:00:48,880 --> 00:00:51,550 და იქნებ აქვს სხვადასხვა ზომა ტერმინალის ფანჯარაში? 21 00:00:51,550 --> 00:00:52,330 ალბათ, არა. 22 00:00:52,330 --> 00:00:53,080 როგორც ჩანს,, OK. 23 00:00:53,080 --> 00:00:55,005 ისე, რატომ არის ეს უბრალოდ ნაკლებია, ვიდრე 23? 24 00:00:55,005 --> 00:00:56,880 ზოგადად, ეს არის სახის ცუდი ჩვევა რეალურად 25 00:00:56,880 --> 00:00:58,940 დაწერა მუდმივები თქვენს კოდი. 26 00:00:58,940 --> 00:01:02,190 ამგვარად, როდესაც თქვენ ნამდვილად წერენ მუდმივი თქვენი კოდი, 27 00:01:02,190 --> 00:01:05,630 ის ზოგჯერ მოხსენიებული, როგორც გამოყენებით ჯადოსნური ნომრები, რასაც 28 00:01:05,630 --> 00:01:08,030 ჩვენ ზოგადად შევეცდები და თავიდან ავიცილოთ. 29 00:01:08,030 --> 00:01:12,830 >> მაგალითად, მოდით შევხედოთ ამ მარტივი ფუნქცია აქ. 30 00:01:12,830 --> 00:01:15,726 ცხადია, არ არსებობს მონაცემები ტიპი C მოუწოდა ბარათი ან deck. 31 00:01:15,726 --> 00:01:16,600 ასე რომ მხოლოდ აგებს ჩემთან ერთად. 32 00:01:16,600 --> 00:01:18,910 ეს ცოტა pseudocode შერეული აქ. 33 00:01:18,910 --> 00:01:21,050 ეს არის ფუნქცია მოუწოდა გაუმკლავდეთ ბარათი, რომელიც, როგორც ჩანს, 34 00:01:21,050 --> 00:01:26,570 იღებს deck, როგორც მისი პარამეტრი და დაბეჭდავს ჩემთვის ერთი ბარათი. 35 00:01:26,570 --> 00:01:30,990 >> და მე ვაკეთებ რაღაც აქ, სადაც მე აქვს loop, რომელიც ეშვება 0-დან 52, 36 00:01:30,990 --> 00:01:33,394 და მე გაუმკლავდეთ ბარათი. 37 00:01:33,394 --> 00:01:35,310 ისე, ჩვენ მივიღეთ ჯადოსნური ნომერი აქ, მარჯვნივ. 38 00:01:35,310 --> 00:01:38,790 ნუ ხედავთ, რა ჯადოსნური ნომერი? 39 00:01:38,790 --> 00:01:42,280 ან კიდევ უფრო მნიშვნელოვანია, თქვენ რა პრობლემა აქ? 40 00:01:42,280 --> 00:01:44,310 განსაკუთრებით, თუ ეს მხოლოდ ერთი ფუნქცია 41 00:01:44,310 --> 00:01:48,030 საკუთარი ფაილი საქაღალდე, რომელიც შეიცავს 42 00:01:48,030 --> 00:01:49,970 bunch სხვადასხვა ფაილი, რომელთაგან თითოეული 43 00:01:49,970 --> 00:01:51,670 ჯერ კიდევ ერთი რამ deck ბარათების. 44 00:01:51,670 --> 00:01:57,310 შესაძლოა, ეს ურევს მათ, ან ეხება ხელით ხუთი ბარათების ნაცვლად ერთი ბარათი. 45 00:01:57,310 --> 00:01:59,420 >> ნუ ხედავთ, თუ რა პრობლემა შეიძლება იყოს აქ? 46 00:01:59,420 --> 00:02:03,220 ხედავთ ჯადოსნური ნომერი მე გაუკეთეს შევიდა კოდი? 47 00:02:03,220 --> 00:02:04,390 ეს არის 52, მარჯვნივ. 48 00:02:04,390 --> 00:02:06,440 >> მსგავსად, ინტუიციურად თქვენ ალბათ იცით, OK. 49 00:02:06,440 --> 00:02:09,740 ისევე როგორც სტანდარტული deck ბარათები შეიცავს 52 ბარათები. 50 00:02:09,740 --> 00:02:12,570 მაგრამ ჩვენი პროგრამა, უბრალოდ სახის მცურავი გარშემო არსებობს. 51 00:02:12,570 --> 00:02:15,280 ეს იგივეა, უეცრად იქ არის 52. 52 00:02:15,280 --> 00:02:18,290 >> ერთი გზა, რათა მოგვარდეს ეს პრობლემა ის არის, რომ ამის გაკეთება. 53 00:02:18,290 --> 00:02:22,724 ჩვენ ძალიან მკაფიოდ ახლა მოუხმო გემბანზე ზომა 52. 54 00:02:22,724 --> 00:02:25,390 ეს აძლევს მას ცოტა უფრო ინტუიტიური რაც იმას ნიშნავს, როდესაც ამისთვის მარყუჟის 55 00:02:25,390 --> 00:02:28,650 მოგვიანებით ჩვენ მაშინ ამბობენ, i ნაკლებია, ვიდრე გემბანზე ზომა. 56 00:02:28,650 --> 00:02:32,666 უბრალოდ, როგორც ჩანს, უკეთესი, ვიდრე ამბობდა 52. 57 00:02:32,666 --> 00:02:34,290 ახლა ეს არ რეალურად დაფიქსირება პრობლემა. 58 00:02:34,290 --> 00:02:38,460 ეს არ მისცეს გარკვეული სიმბოლური რაც იმას ნიშნავს, რომ მუდმივი. 59 00:02:38,460 --> 00:02:40,820 მაგრამ ეს იმას სახის რეალურად წარმოგიდგინოთ კიდევ ერთი პრობლემა 60 00:02:40,820 --> 00:02:43,770 რომ არ შეიძლება მაშინვე აშკარა. 61 00:02:43,770 --> 00:02:45,859 მაშინაც კი, თუ ეს ცვლადი ცხადდება globally-- 62 00:02:45,859 --> 00:02:47,650 თქვენ გავიხსენოთ, თუ რა იმას ნიშნავს, როდესაც ვაცხადებთ 63 00:02:47,650 --> 00:02:50,500 ცვლადი გლობალურად წინააღმდეგ ადგილობრივად? 64 00:02:50,500 --> 00:02:53,340 მაშინაც კი, თუ ჩვენ განაცხადოს ცვლადი მსოფლიო მასშტაბით, რა, თუ არ არის 65 00:02:53,340 --> 00:02:55,500 კიდევ ერთი ფუნქცია ჩვენი კომპლექტს ფუნქციები 66 00:02:55,500 --> 00:02:59,750 რომ გარიგება განყოფილებიდან მანიპულირება რომ უნებლიედ ცვლის გემბანზე ზომა, 67 00:02:59,750 --> 00:03:02,727 ან ზრდის მას 1 ან ამცირებს მას 1. 68 00:03:02,727 --> 00:03:04,060 ეს შეიძლება სიტყვიერად პრობლემები, არა? 69 00:03:04,060 --> 00:03:08,261 მით უმეტეს, თუ ჩვენ საქმე კომპლექტი ბარათები, სადაც თვლიან სრული deck 70 00:03:08,261 --> 00:03:08,760 არ არის საჭირო. 71 00:03:08,760 --> 00:03:12,804 თუ deck ზომა შემცირდება 1, მაგალითად, 51, 72 00:03:12,804 --> 00:03:14,970 ჩვენ რეალურად არ თვლიან ყველა ბარათი შესაძლოა. 73 00:03:14,970 --> 00:03:16,500 ჩვენ ტოვებს, მათ შორის ერთი out. 74 00:03:16,500 --> 00:03:21,680 და რომ ღირებულება შესაძლოა იყოს წინასწარმეტყველებს და ექსპლუატაციაში ცუდი მსახიობი. 75 00:03:21,680 --> 00:03:24,920 >> C უზრუნველყოფს რასაც preprocessor დირექტივა, რომელიც 76 00:03:24,920 --> 00:03:27,764 ასევე მოუწოდა მაკრო შექმნის სიმბოლური მუდმივები. 77 00:03:27,764 --> 00:03:30,180 და სინამდვილეში, თქვენ უკვე ჩანს preprocessor დირექტივა, 78 00:03:30,180 --> 00:03:32,916 მაშინაც კი, თუ თქვენ არ გამიგია მოუწოდა, რომ მოიცავს. 79 00:03:32,916 --> 00:03:37,150 ეს არის კიდევ ერთი მაგალითი იმისა, მაკრო ან preprocessor დირექტივა. 80 00:03:37,150 --> 00:03:41,290 >> გზა შექმნა სიმბოლური მუდმივები ან იძლევა სახელი მუდმივი 81 00:03:41,290 --> 00:03:43,740 ისე, რომ მას აქვს უფრო მეტი რაც იმას ნიშნავს, ასეთია. 82 00:03:43,740 --> 00:03:47,030 განსაზღვრავს, სახელი, ჩანაცვლება. 83 00:03:47,030 --> 00:03:49,140 ძალიან მნიშვნელოვანია, განზე აქ მართლაც სწრაფი. 84 00:03:49,140 --> 00:03:54,180 არ დააყენოს მძიმით ბოლოს თქვენი # განსაზღვრავს. 85 00:03:54,180 --> 00:03:57,310 ასე რომ, ეს განსაზღვრავს, სახელი, ჩანაცვლება. 86 00:03:57,310 --> 00:03:59,540 >> როდესაც თქვენი პროგრამა შედგენილია, რა ხდება 87 00:03:59,540 --> 00:04:01,740 არის შემდგენელი თუ აპირებს გავლა თქვენი კოდი 88 00:04:01,740 --> 00:04:06,770 და შეცვლის ყველა ინსტანციის სიტყვა "სახელი" რასაც თქვენ 89 00:04:06,770 --> 00:04:08,860 ბოლო შეცვლის. 90 00:04:08,860 --> 00:04:13,060 ანალოგიურად, თუ # include არის ერთგვარი ანალოგიური გადაწერა და pasting, 91 00:04:13,060 --> 00:04:15,700 შემდეგ განსაზღვრავს სახის მსგავსი იპოვოს და შეცვლის, 92 00:04:15,700 --> 00:04:19,180 თუ თქვენ ოდესმე გამოიყენება, რომ ფუნქცია სიტყვა დამუშავების პროგრამა, მაგალითად. 93 00:04:19,180 --> 00:04:26,345 >> ასე მაგალითად, თუ მე # განსაზღვრავს pi როგორც 3.14159265, 94 00:04:26,345 --> 00:04:28,720 თუ თქვენ უკეთესი მათემატიკურად დახრილი და თქვენ მოულოდნელად 95 00:04:28,720 --> 00:04:31,640 იხილეთ 3.14159265 საფრენი გარშემო თქვენი კოდი, 96 00:04:31,640 --> 00:04:33,517 ალბათ, იცით, ეს ლაპარაკი pi. 97 00:04:33,517 --> 00:04:35,850 მაგრამ იქნებ ჩვენ შეგვიძლია ეს ცოტა უფრო სიმბოლური მნიშვნელობა აქვს. 98 00:04:35,850 --> 00:04:39,850 და ჩვენ შეგვიძლია ნაცვლად ამბობენ, განსაზღვრავს pi, როგორც, რომ mouthful ნომრები 99 00:04:39,850 --> 00:04:42,110 რომ მე არ ვაპირებ, რომ შევინარჩუნოთ კითხულობს მეტი და მეტი. 100 00:04:42,110 --> 00:04:45,560 >> და რა მოხდება მაშინ შედგენა დრო, როდესაც პროგრამა არის 101 00:04:45,560 --> 00:04:48,530 შედგენილი, პირველი, რაც მოხდება ეს გაივლიან 102 00:04:48,530 --> 00:04:51,520 და იგი ჩაანაცვლებს ყველა დროის ის ხედავს დედაქალაქში P, დედაქალაქის I, 103 00:04:51,520 --> 00:04:55,610 ის ყველაფერს სიტყვასიტყვით შეცვალოს იგი 3.14 და ასე შემდეგ, ასე რომ თქვენ 104 00:04:55,610 --> 00:04:58,090 არ უნდა აკრიფოთ ეს ყოველ დროს თქვენი პროგრამა ჯერ 105 00:04:58,090 --> 00:05:00,631 აქვს ფუნქცია, რომ თქვენ ველოდოთ, რადგან თქვენ სამუშაო 106 00:05:00,631 --> 00:05:05,090 ერთად მანიპულირება, გამრავლებით, გამყოფი, რაც არის pi. 107 00:05:05,090 --> 00:05:08,230 >> თქვენ არ შემოიფარგლება ეს ცვლილება ნომრები მხოლოდ. 108 00:05:08,230 --> 00:05:12,279 მაგალითად, მე ვერ # განსაზღვრავს რა თქმა უნდა, როგორც სიმებიანი CS50. 109 00:05:12,279 --> 00:05:14,070 ამ შემთხვევაში, როდესაც პროგრამა შედგენილია, 110 00:05:14,070 --> 00:05:16,236 განსაზღვრავს გაივლიან კოდი, შეცვალოს ყოველ ჯერზე 111 00:05:16,236 --> 00:05:19,900 ის ხედავს "რა თქმა უნდა," სიმებიანი CS50. 112 00:05:19,900 --> 00:05:21,720 >> თქვენ შეამჩნევთ აქ ასევე, რომ მე ხშირად 113 00:05:21,720 --> 00:05:26,090 განსაზღვრავს ყველა ჩემს განსაზღვრული სიმბოლური მუდმივები, ასე ვთქვათ, 114 00:05:26,090 --> 00:05:28,130 ყოველთვის ყველა Caps. 115 00:05:28,130 --> 00:05:28,960 ეს კონვენცია. 116 00:05:28,960 --> 00:05:30,170 ეს არ არის საჭირო. 117 00:05:30,170 --> 00:05:33,900 ამის მიზეზი, ზოგადად, ადამიანი გამოიყენებს ყველა დედაქალაქში, როდესაც ისინი #defining 118 00:05:33,900 --> 00:05:37,590 არის მხოლოდ, რომ მას მართლაც ნათელია, რომ ამ კონკრეტულ ელემენტის ჩემი კოდი 119 00:05:37,590 --> 00:05:38,820 არის განსაზღვრული მუდმივი. 120 00:05:38,820 --> 00:05:43,730 თუ ეს იყო ამას, ეს შესაძლებელია, რომ ეს შეიძლება იყოს დაბნეული ერთად ცვლადი. 121 00:05:43,730 --> 00:05:46,120 და ეს, ალბათ, არ არის კარგი საქციელი. 122 00:05:46,120 --> 00:05:48,910 >> ასე რომ, ამ კონკრეტულ გამოსავალი არის ბევრად უკეთესი 123 00:05:48,910 --> 00:05:50,550 ვიდრე რომელიმე წინა პირობა. 124 00:05:50,550 --> 00:05:59,950 თუ მე პირველად განსაზღვრავს გემბანზე ზომა 52, მაშინ ახლა ჩემი გამოყენება 52, ან გემბანზე ზომა, 125 00:05:59,950 --> 00:06:01,850 არის უფრო ინტუიტიური და ბევრი უფრო უსაფრთხო. 126 00:06:01,850 --> 00:06:03,280 თქვენ არ შეგიძლიათ მანიპულირება მუდმივი. 127 00:06:03,280 --> 00:06:05,259 თქვენ ვერ ვიტყვი, 52 plus plus. 128 00:06:05,259 --> 00:06:06,800 ეს არ აპირებს გარდაქმნას იგი 53. 129 00:06:06,800 --> 00:06:09,390 თქვენ ვერ შეცვლის 52 რაღაც. 130 00:06:09,390 --> 00:06:12,470 >> თქვენ შეგიძლიათ შეცვალოთ ცვლადი რომლის ღირებულება არის 52, 131 00:06:12,470 --> 00:06:14,870 რომელიც იყო პირველი სარემონტო გვქონდა ადრე. 132 00:06:14,870 --> 00:06:17,000 თქვენ შეიძლება გაიზარდოს რომ ცვლადი 53. 133 00:06:17,000 --> 00:06:21,100 მაგრამ ვერ ვიტყვი, 52 plus plus და აქვს, რომ მოულოდნელად იქცეს 52 მხოლოდ 53. 134 00:06:21,100 --> 00:06:23,350 52 ყოველთვის 52. 135 00:06:23,350 --> 00:06:28,860 და ასე რომ თქვენ ვერ უნებლიედ შეცვლა გემბანზე ზომა აქ მანიპულირება, 136 00:06:28,860 --> 00:06:29,940 137 00:06:29,940 --> 00:06:32,390 >> კიდევ ერთი კარგი მხარე ეფექტი, თუმცა არის 138 00:06:32,390 --> 00:06:38,310 რომ თუ იცის, რომ არ ყველა ქვეყნის მთელს მსოფლიოში 139 00:06:38,310 --> 00:06:40,690 გამოყენება deck ბარათების ზომა 52? 140 00:06:40,690 --> 00:06:45,630 მაგალითად, ეს მართლაც საერთო გერმანია გამოიყენოთ deck ზომა 32, 141 00:06:45,630 --> 00:06:48,020 სადაც ისინი ზოლები ზოგიერთი ქვედა ბარათები. 142 00:06:48,020 --> 00:06:50,960 და ამ შემთხვევაში, მე სურდა პორტში ჩემი სუიტა 143 00:06:50,960 --> 00:06:55,390 ფუნქციები რომ გაუმკლავდეთ ანკეტა მანიპულირება გერმანიაში. 144 00:06:55,390 --> 00:06:59,440 შემეძლო, პირველ რიგში, ჩვენ აჩვენა, უნდა წავიდეს და შეცვლის 145 00:06:59,440 --> 00:07:03,570 ყველა ინსტანციის 52 ჩემი კოდი 32. 146 00:07:03,570 --> 00:07:07,940 >> მაგრამ აქ, თუ მე # განსაზღვრავს გემბანზე ზომა 32 ძალიან ზევით ჩემი კოდი, 147 00:07:07,940 --> 00:07:11,730 თუ მე უნდა შეცვალოს იგი, შემიძლია უბრალოდ წასვლა და ცვლილება, რომელიც ერთი რამ. 148 00:07:11,730 --> 00:07:15,010 გადააკომპილეთ ჩემს კოდი, და ყველა უეცრად იგი ვრცელდება მეშვეობით. 149 00:07:15,010 --> 00:07:18,850 ფაქტობრივად, ჩვენ შეგვიძლია შევცვალოთ deck ზომა ნებისმიერი მნიშვნელობა გვინდა. 150 00:07:18,850 --> 00:07:22,500 >> შემიძლია დაგაინტერესოთ in a თამაში გემბანზე ზომა პიკაპი? 151 00:07:22,500 --> 00:07:23,430 >> მე Doug Lloyd. 152 00:07:23,430 --> 00:07:25,840 და ეს არის CS50. 153 00:07:25,840 --> 00:07:27,772