1 00:00:00,000 --> 00:00:00,980 2 00:00:00,980 --> 00:00:04,410 >> [MUSIC CHƠI] 3 00:00:04,410 --> 00:00:11,147 4 00:00:11,147 --> 00:00:12,230 DAVID J. Malan: Được rồi. 5 00:00:12,230 --> 00:00:16,440 Đây là CS50, và điều này là kết thúc của tuần 2. 6 00:00:16,440 --> 00:00:18,480 Vì vậy, ngày hôm nay, chúng ta sẽ tiếp tục xem xét của chúng tôi 7 00:00:18,480 --> 00:00:21,150 làm thế nào chúng tôi đại diện thứ bên dưới hood-- di chuyển ra 8 00:00:21,150 --> 00:00:23,520 từ con số như số nguyên và nổi các giá trị điểm 9 00:00:23,520 --> 00:00:26,810 và tập trung vào chuỗi và chương trình cuối cùng là thú vị hơn. 10 00:00:26,810 --> 00:00:30,140 Nhưng chúng tôi cũng sẽ có một cái nhìn tại một vài tên miền cụ thể problems-- 11 00:00:30,140 --> 00:00:33,620 là người đầu tiên trong số đó sẽ có liên quan đến mật mã, 12 00:00:33,620 --> 00:00:36,570 nghệ thuật xáo trộn thông tin, mà bạn nhìn thấy ở trên đây 13 00:00:36,570 --> 00:00:41,480 là một hình ảnh của Đài phát thanh Orphan Annie vòng giải mã bí mật từ trước đây. 14 00:00:41,480 --> 00:00:46,490 >> Đây thực sự là hình thức rất thô sơ và hình thức thân thiện với trẻ của cryptopgraphy 15 00:00:46,490 --> 00:00:50,590 nhờ đó mà chiếc nhẫn này có hai disks-- một bên trong và một bên ngoài. 16 00:00:50,590 --> 00:00:54,740 Và bằng cách quay một trong những người, bạn có thể về cơ bản xếp hàng chữ như A 17 00:00:54,740 --> 00:00:59,520 đến Z với các chữ cái khác như B qua A. Nói cách khác, 18 00:00:59,520 --> 00:01:03,730 bạn có nghĩa là có thể xoay bảng chữ cái, do đó đến với một ánh xạ từ 19 00:01:03,730 --> 00:01:07,820 thư cho thư do đó, nếu bạn muốn gửi một thông điệp bí mật 20 00:01:07,820 --> 00:01:11,820 với một người như Annie, bạn có thể viết xuống tin nhắn của bạn và sau đó xoay 21 00:01:11,820 --> 00:01:15,370 các chữ cái, theo đó, nếu bạn có ý nghĩa để nói "A," bạn thay vì nói "B" 22 00:01:15,370 --> 00:01:17,280 bạn có nghĩa là để nói "B" bạn thay vì nói "C" - 23 00:01:17,280 --> 00:01:20,240 hoặc một cái gì đó nhiều hơn một chút thông minh that-- hơn và sau đó, cuối cùng, 24 00:01:20,240 --> 00:01:24,630 miễn là Annie có bộ giải mã này nhẫn, cô ấy có thể giải mã các tin nhắn. 25 00:01:24,630 --> 00:01:28,540 Bây giờ, bạn có thể nhớ lại, trên thực tế, điều này được sử dụng trong một bộ phim rất nổi tiếng 26 00:01:28,540 --> 00:01:31,140 đóng nauseum quảng cáo trong mùa Giáng sinh. 27 00:01:31,140 --> 00:01:32,650 Chúng ta hãy xem ở đây. 28 00:01:32,650 --> 00:01:35,294 29 00:01:35,294 --> 00:01:37,210 RALPHIE PARKER: "Có thể là biết là tất cả trong bản tóm tắt 30 00:01:37,210 --> 00:01:41,000 rằng Ralph Parker được bổ nhiệm hướng một thành viên của Little Orphan Annie bí mật 31 00:01:41,000 --> 00:01:44,860 Vòng tròn và được hưởng tất cả các danh dự và lợi ích xảy ra kèm theo. " 32 00:01:44,860 --> 00:01:47,410 >> RALPHIE PARKER (Tự thuật): Ký nhỏ Orphan Annie. 33 00:01:47,410 --> 00:01:50,070 Countersigned, Andre Pierre! 34 00:01:50,070 --> 00:01:51,490 Trong mực. 35 00:01:51,490 --> 00:01:55,494 Danh dự và lợi ích, đã ở tuổi chín. 36 00:01:55,494 --> 00:01:57,402 >> [MUSIC CHƠI] 37 00:01:57,402 --> 00:02:00,470 >> [RADIO nhí] 38 00:02:00,470 --> 00:02:01,470 RALPHIE PARKER: Đi nào. 39 00:02:01,470 --> 00:02:02,344 Hãy về với nó. 40 00:02:02,344 --> 00:02:06,029 Tôi không cần tất cả những nhạc jazz về buôn lậu và cướp biển. 41 00:02:06,029 --> 00:02:08,820 RADIO truyện: Nghe ngày mai đêm cho cuộc phiêu lưu kết luận 42 00:02:08,820 --> 00:02:11,060 của The Black Pirate Ship. 43 00:02:11,060 --> 00:02:14,740 Bây giờ, đó là thời gian cho Annie Tin nhắn bí mật cho bạn các thành viên 44 00:02:14,740 --> 00:02:17,110 của Secret Circle. 45 00:02:17,110 --> 00:02:20,700 Ghi trẻ em, chỉ các thành viên Secret mối của Annie 46 00:02:20,700 --> 00:02:23,270 có thể giải mã thông điệp bí mật của Annie. 47 00:02:23,270 --> 00:02:27,270 >> Hãy nhớ rằng, Annie là tùy thuộc vào bạn. 48 00:02:27,270 --> 00:02:30,060 Đặt chân của bạn để B-2. 49 00:02:30,060 --> 00:02:34,004 Đây là message-- 12, 11, 2-- 50 00:02:34,004 --> 00:02:36,503 RALPHIE PARKER (Tự thuật): Tôi đang trong cuộc họp bí mật đầu tiên của tôi. 51 00:02:36,503 --> 00:02:40,041 RADIO truyện: --25, 14, 11, 18, 16-- 52 00:02:40,041 --> 00:02:42,790 RALPHIE PARKER (Tự thuật): Oh, Pierre là trong đêm nay giọng hát tuyệt vời. 53 00:02:42,790 --> 00:02:46,110 Tôi có thể nói rằng tối nay tin là rất quan trọng. 54 00:02:46,110 --> 00:02:47,930 >> RADIO truyện: --3, 25. 55 00:02:47,930 --> 00:02:49,940 Đó là một tin nhắn từ Annie mình. 56 00:02:49,940 --> 00:02:52,182 Hãy nhớ rằng, không nói cho ai biết. 57 00:02:52,182 --> 00:02:55,077 >> [Thở hổn hển] 58 00:02:55,077 --> 00:02:57,285 RALPHIE PARKER (Tự thuật): Chín mươi giây sau, tôi 59 00:02:57,285 --> 00:03:00,090 trong căn phòng duy nhất trong ngôi nhà nơi một cậu bé chín 60 00:03:00,090 --> 00:03:04,380 có thể ngồi trong sự riêng tư và giải mã. 61 00:03:04,380 --> 00:03:04,990 Ah. 62 00:03:04,990 --> 00:03:05,680 "B." 63 00:03:05,680 --> 00:03:06,524 >> [Cười khúc khích] 64 00:03:06,524 --> 00:03:08,684 >> RALPHIE PARKER (Tự thuật): Tôi đã đi đến tiếp theo. 65 00:03:08,684 --> 00:03:09,610 "E." 66 00:03:09,610 --> 00:03:11,641 Từ đầu tiên là "có". 67 00:03:11,641 --> 00:03:12,140 Có! 68 00:03:12,140 --> 00:03:14,293 Nó đã đến dễ dàng hơn bây giờ. 69 00:03:14,293 --> 00:03:15,259 "U" 70 00:03:15,259 --> 00:03:16,225 >> [Cười khúc khích] 71 00:03:16,225 --> 00:03:18,157 >> Randy PARKER: Aw, thôi nào, Ralphie. 72 00:03:18,157 --> 00:03:19,606 Tôi phải đi thôi! 73 00:03:19,606 --> 00:03:21,538 >> RALPHIE PARKER: Tôi sẽ xuống ngay, Ma. 74 00:03:21,538 --> 00:03:22,504 Gee rít. 75 00:03:22,504 --> 00:03:25,402 76 00:03:25,402 --> 00:03:31,220 "T." "O." "Hãy chắc chắn đến. "" Hãy chắc chắn để "những gì? 77 00:03:31,220 --> 00:03:33,981 Ít Orphan Annie là gì cố gắng để nói? "Hãy chắc chắn để" những gì? 78 00:03:33,981 --> 00:03:35,522 Mẹ: Ralphie, Randy đã phải đi. 79 00:03:35,522 --> 00:03:36,735 Bạn sẽ vui lòng đi ra? 80 00:03:36,735 --> 00:03:38,190 >> RALPHIE PARKER: Được rồi, mẹ! 81 00:03:38,190 --> 00:03:39,787 Tôi sẽ ra ngay! 82 00:03:39,787 --> 00:03:41,995 RALPHIE PARKER (Tự thuật): Tôi đã nhận được gần gũi hơn bây giờ. 83 00:03:41,995 --> 00:03:43,370 Sự căng thẳng là khủng khiếp. 84 00:03:43,370 --> 00:03:44,794 Nó là gì? 85 00:03:44,794 --> 00:03:47,656 Số phận của hành tinh có thể treo trong sự cân bằng. 86 00:03:47,656 --> 00:03:50,518 >> Mẹ: Ralphie, Randy đã đi! 87 00:03:50,518 --> 00:03:53,635 >> RALPHIE PARKER: Tôi sẽ đến ngay ra, buồn thì thôi! 88 00:03:53,635 --> 00:03:55,343 RALPHIE PARKER (Tự thuật): Hầu như có! 89 00:03:55,343 --> 00:03:56,520 Ngón tay của tôi đã bay! 90 00:03:56,520 --> 00:03:58,500 Tâm trí của tôi là một cái bẫy thép. 91 00:03:58,500 --> 00:03:59,850 Mỗi lỗ chân lông rung. 92 00:03:59,850 --> 00:04:01,806 Nó đã gần như rõ ràng! 93 00:04:01,806 --> 00:04:02,773 Có! 94 00:04:02,773 --> 00:04:03,273 Có! 95 00:04:03,273 --> 00:04:03,773 Có! 96 00:04:03,773 --> 00:04:04,740 Có! 97 00:04:04,740 --> 00:04:10,250 >> RALPHIE PARKER: "Hãy chắc chắn uống Ovaltine của bạn. " 98 00:04:10,250 --> 00:04:10,750 Ovaltine? 99 00:04:10,750 --> 00:04:14,864 100 00:04:14,864 --> 00:04:17,539 Một thương mại dể thương? 101 00:04:17,539 --> 00:04:19,439 >> [MUSIC CHƠI] 102 00:04:19,439 --> 00:04:21,724 >> RALPHIE PARKER: Thằng khốn. 103 00:04:21,724 --> 00:04:23,460 >> [Laughing] 104 00:04:23,460 --> 00:04:27,070 >> DAVID J. Malan: Vì vậy, mà sau đó là một cái nhìn vào những gì mật mã 105 00:04:27,070 --> 00:04:29,880 có thể được cho một this-- uống từ trước đây. 106 00:04:29,880 --> 00:04:30,900 Vì vậy, một thông báo nhanh chóng. 107 00:04:30,900 --> 00:04:33,410 Nếu bạn là miễn phí Thứ Sáu lúc 1:15 và sẽ 108 00:04:33,410 --> 00:04:36,610 muốn tham gia với chúng tôi để CS50 ăn trưa, đi đến URL này ở đây. 109 00:04:36,610 --> 00:04:38,080 Lần đầu tiên đến, đầu tiên phục vụ như bình thường. 110 00:04:38,080 --> 00:04:41,840 Nhưng qua thời gian, chúng tôi sẽ đảm bảo rằng hầu hết bất cứ ai muốn tham gia 111 00:04:41,840 --> 00:04:43,640 có thể sắp xếp khôn ngoan. 112 00:04:43,640 --> 00:04:45,170 >> Vì vậy, chuỗi. 113 00:04:45,170 --> 00:04:47,940 Chúng tôi có Zamyla-- người bây giờ bạn đã có thể đáp ứng hầu hết các 114 00:04:47,940 --> 00:04:50,750 Vấn đề ở Set 1-- có Tên được viết như vậy. 115 00:04:50,750 --> 00:04:53,570 Và giả sử bạn đã gõ tên của mình thành một chương trình máy tính là 116 00:04:53,570 --> 00:04:55,710 sử dụng giống như getString. 117 00:04:55,710 --> 00:04:57,890 Để lấy những tổ hợp phím, làm thế nào 118 00:04:57,890 --> 00:05:01,620 Chúng ta đi về đại diện cho một chuỗi, một từ, một đoạn văn, 119 00:05:01,620 --> 00:05:03,960 hoặc nhiều chữ như thế này đây? 120 00:05:03,960 --> 00:05:06,790 >> Chúng tôi nói chuyện lần cuối cùng về số nguyên và các vấn đề 121 00:05:06,790 --> 00:05:09,960 phát sinh với số nguyên tràn và nổi các giá trị điểm 122 00:05:09,960 --> 00:05:12,190 và những vấn đề phát sinh trong độ chính xác. 123 00:05:12,190 --> 00:05:16,080 Với chuỗi, chúng tôi ít nhất có sự linh hoạt hơn một chút 124 00:05:16,080 --> 00:05:17,970 vì strings-- chỉ trong world-- thực 125 00:05:17,970 --> 00:05:19,790 có thể là một chiều dài hơi tùy tiện. 126 00:05:19,790 --> 00:05:21,055 Khá ngắn, khá dài. 127 00:05:21,055 --> 00:05:23,680 Nhưng thậm chí sau đó, chúng ta sẽ thấy rằng máy tính đôi khi có thể 128 00:05:23,680 --> 00:05:27,200 chạy ra khỏi bộ nhớ và thậm chí không lưu trữ một chuỗi đủ lớn. 129 00:05:27,200 --> 00:05:30,840 >> Nhưng hiện nay, chúng ta hãy bắt đầu hình dung một chuỗi như là một cái gì đó trong các hộp 130 00:05:30,840 --> 00:05:31,340 ở đây. 131 00:05:31,340 --> 00:05:36,410 Vì vậy, sáu hộp đó, mỗi trong số đó đại diện cho một nhân vật hay "char". 132 00:05:36,410 --> 00:05:40,646 Vì vậy, nhớ lại rằng "char" - c-h-a-r-- là một trong các loại dữ liệu tích hợp sẵn trong C. 133 00:05:40,646 --> 00:05:43,520 Và những gì tốt đẹp là bạn có thể sử dụng rằng loại như là một khối xây dựng, 134 00:05:43,520 --> 00:05:47,880 một mảnh ghép, nếu bạn muốn, để tạo thành một loại lớn dữ liệu mà chúng ta sẽ tiếp tục 135 00:05:47,880 --> 00:05:49,410 để gọi một "chuỗi". 136 00:05:49,410 --> 00:05:53,650 >> Bây giờ, những gì hữu ích về tư duy về những thứ như dây theo cách này? 137 00:05:53,650 --> 00:05:57,720 Vâng, nó chỉ ra rằng chúng ta có thể thực sự tận dụng cấu trúc này 138 00:05:57,720 --> 00:06:01,420 để thực sự truy cập đặc điểm cá nhân một cách khá dễ dàng. 139 00:06:01,420 --> 00:06:04,099 Tôi sẽ đi trước và tạo ra một tập tin gọi là "stringzero.c" 140 00:06:04,099 --> 00:06:05,765 nhưng bạn có thể gọi nó là bất cứ điều gì bạn muốn. 141 00:06:05,765 --> 00:06:08,500 Và trên trang web của khóa học là đã ví dụ này trước, 142 00:06:08,500 --> 00:06:10,430 do đó bạn không cần phải gõ tất cả mọi thứ ra ngoài. 143 00:06:10,430 --> 00:06:13,820 >> Và tôi sẽ đi trước và lần đầu tiên làm int void main. 144 00:06:13,820 --> 00:06:15,980 Và trong vòng vài ngày, chúng tôi sẽ bắt đầu trêu chọc nhau 145 00:06:15,980 --> 00:06:19,070 những khoảng trống ở đây, tại sao nó int bên cạnh chính, và vân vân. 146 00:06:19,070 --> 00:06:21,180 Nhưng hiện nay, chúng ta hãy tiếp tục sao chép dán đó. 147 00:06:21,180 --> 00:06:23,455 >> Tôi sẽ khai báo một chuỗi gọi là s. 148 00:06:23,455 --> 00:06:26,920 Và tôi sẽ trở về từ GetString bất cứ điều gì mà người dùng trong. 149 00:06:26,920 --> 00:06:29,170 Điều này là có được một đơn giản chương trình, không có hướng dẫn, 150 00:06:29,170 --> 00:06:31,336 Tôi chỉ cần đi một cách mù quáng hy vọng rằng người dùng biết 151 00:06:31,336 --> 00:06:32,600 phải làm gì để giữ cho nó đơn giản. 152 00:06:32,600 --> 00:06:34,220 >> Và bây giờ tôi sẽ có một vòng lặp. 153 00:06:34,220 --> 00:06:37,450 Và trong vòng lặp của tôi sẽ có int i được không. 154 00:06:37,450 --> 00:06:40,660 Và tôi là, một lần nữa, chỉ là một quy ước, một biến chỉ số đếm, 155 00:06:40,660 --> 00:06:42,350 nhưng tôi có thể gọi đây là bất cứ điều gì tôi muốn. 156 00:06:42,350 --> 00:06:46,275 Tôi sẽ làm gì tôi cũng ít than-- Tên Zamyla là dài sáu ký tự. 157 00:06:46,275 --> 00:06:48,150 Vì vậy, tôi sẽ cứng mã có cho bây giờ. 158 00:06:48,150 --> 00:06:49,730 >> Và sau đó tôi ++. 159 00:06:49,730 --> 00:06:53,190 Và bây giờ bên trong của các xoăn niềng răng tôi sẽ làm printf, 160 00:06:53,190 --> 00:06:55,460 và tôi muốn in một nhân vật tại một thời điểm. 161 00:06:55,460 --> 00:06:58,227 Vì vậy, tôi sẽ sử dụng% c cho có lẽ là lần đầu tiên. 162 00:06:58,227 --> 00:07:00,560 Và sau đó tôi muốn in mỗi nhân vật trên một dòng riêng. 163 00:07:00,560 --> 00:07:02,550 Vì vậy, tôi sẽ đặt một ít dấu gạch chéo ngược n có. 164 00:07:02,550 --> 00:07:03,640 Đóng cửa giá. 165 00:07:03,640 --> 00:07:06,250 >> Và bây giờ tôi muốn làm một cái gì đó ở đây. 166 00:07:06,250 --> 00:07:10,610 Tôi muốn in ra thư cụ thể trong chuỗi, 167 00:07:10,610 --> 00:07:13,670 s, như tôi đang lặp lại từ số không trên lên đến sáu. 168 00:07:13,670 --> 00:07:17,150 Nói cách khác, tôi muốn in các nhân vật i'th của s. 169 00:07:17,150 --> 00:07:18,420 Bây giờ làm thế nào tôi có thể làm điều này? 170 00:07:18,420 --> 00:07:21,550 >> Cũng giống như các hộp trong đại diện này ở đây, 171 00:07:21,550 --> 00:07:25,560 loại, gợi lên ý niệm về quyền anh chữ cái trong, bạn có thể làm điều đó tương tự 172 00:07:25,560 --> 00:07:32,630 cú pháp trong C bằng cách xác định, Tôi muốn in ra s i'th nhân vật. 173 00:07:32,630 --> 00:07:35,640 Sử dụng dấu ngoặc vuông trên bàn phím máy tính của bạn 174 00:07:35,640 --> 00:07:38,910 mà trên bàn phím Mỹ là nói chung ở trên chính lợi nhuận của bạn. 175 00:07:38,910 --> 00:07:42,630 >> Vì vậy, đây không phải là hoàn toàn đúng Chưa hết, khi bạn có thể nhận thấy. 176 00:07:42,630 --> 00:07:44,780 Nhưng tôi sẽ loại một cách mù quáng giả mạo trước đây. 177 00:07:44,780 --> 00:07:47,020 Và tôi sẽ làm cho chuỗi 0. 178 00:07:47,020 --> 00:07:50,860 Nhưng trước khi tôi làm điều này, chúng ta hãy xem nếu chúng ta không thể lường trước một số sai lầm phổ biến. 179 00:07:50,860 --> 00:07:52,844 Điều này sẽ biên dịch? 180 00:07:52,844 --> 00:07:54,510 Không, tôi là thiếu một bó toàn bộ của sự vật. 181 00:07:54,510 --> 00:07:55,280 Thư viện tôi nghe. 182 00:07:55,280 --> 00:07:58,480 >> Vì vậy mà tập tin tiêu đề Tôi có thể muốn thêm ở đây? 183 00:07:58,480 --> 00:07:59,205 Yeah. 184 00:07:59,205 --> 00:08:01,580 >> TƯỢNG: Bạn cần tiêu chuẩn I / O [không nghe được] 185 00:08:01,580 --> 00:08:02,663 >> DAVID J. Malan: Tuyệt vời. 186 00:08:02,663 --> 00:08:06,060 Vì vậy, tôi cần chuẩn I / O. Đối với những gì Mục đích tôi muốn tiêu chuẩn I / O? 187 00:08:06,060 --> 00:08:06,670 Đối với printf. 188 00:08:06,670 --> 00:08:09,220 Vì vậy, bao gồm stdio.h. 189 00:08:09,220 --> 00:08:13,490 Và bạn cũng có đề nghị tôi bao gồm thư viện CS50 lý do gì? 190 00:08:13,490 --> 00:08:14,650 Để có dây. 191 00:08:14,650 --> 00:08:17,780 Vì vậy, chúng ta sẽ thấy những gì Thư viện CS50 được làm 192 00:08:17,780 --> 00:08:19,260 để tạo ra khái niệm về một chuỗi. 193 00:08:19,260 --> 00:08:21,930 Nhưng hiện nay, bạn chỉ có thể nghĩ của nó như là một kiểu dữ liệu thực tế. 194 00:08:21,930 --> 00:08:23,596 >> Vì vậy, đó có vẻ là một chút làm sạch. 195 00:08:23,596 --> 00:08:27,060 Và bây giờ tôi sẽ đi trước và thực sự làm cho chuỗi 0. 196 00:08:27,060 --> 00:08:27,700 Biên soạn. 197 00:08:27,700 --> 00:08:28,370 Vì vậy, đó là tốt. 198 00:08:28,370 --> 00:08:32,799 Vì vậy, ./string0 cho tôi phóng to vì vậy chúng tôi có thể xem kỹ hơn những gì đang xảy ra. 199 00:08:32,799 --> 00:08:33,850 Enter. 200 00:08:33,850 --> 00:08:37,789 Z-A-M-Y-L-A nhập. 201 00:08:37,789 --> 00:08:39,440 Và chúng tôi đã in ra tên của Zamyla. 202 00:08:39,440 --> 00:08:40,409 >> Vì vậy, đó là khá tốt. 203 00:08:40,409 --> 00:08:43,220 Vì vậy, bây giờ chúng ta hãy đi trước và chạy chương trình này một lần nữa, 204 00:08:43,220 --> 00:08:45,659 và gõ ra tên đầy đủ của Daven. 205 00:08:45,659 --> 00:08:46,450 Bất ngờ, ngạc nhiên. 206 00:08:46,450 --> 00:08:48,021 Enter. 207 00:08:48,021 --> 00:08:48,520 Hmm. 208 00:08:48,520 --> 00:08:51,750 Chúng tôi đã không được in của Daven tên đầy đủ đầu tiên một cách chính xác. 209 00:08:51,750 --> 00:08:54,250 Bây giờ điều này nên được rõ ràng trong Nhìn lại quá khứ vì những gì, 210 00:08:54,250 --> 00:08:57,010 loại, quyết định thiết kế ngu ngốc? 211 00:08:57,010 --> 00:08:59,590 >> Vâng, tôi cứng mã hoá các sáu bên trong vòng lặp cho tôi. 212 00:08:59,590 --> 00:09:01,610 Bây giờ tôi đã làm điều đó chỉ vì Tôi biết tên của Zamyla 213 00:09:01,610 --> 00:09:02,776 đã có được sáu ký tự. 214 00:09:02,776 --> 00:09:04,720 Nhưng chắc chắn đây không phải là một giải pháp chung. 215 00:09:04,720 --> 00:09:07,720 Vì vậy, hóa ra chúng ta có thể tự động tìm ra độ dài của một chuỗi 216 00:09:07,720 --> 00:09:10,440 bằng cách gọi một chức năng gọi là strlen. 217 00:09:10,440 --> 00:09:12,840 >> Một lần nữa, cố tình ngắn gọn tên chỉ 218 00:09:12,840 --> 00:09:14,450 để làm cho nó thuận tiện hơn để loại. 219 00:09:14,450 --> 00:09:17,170 Nhưng điều đó cũng đồng nghĩa với nhận được độ dài của một chuỗi. 220 00:09:17,170 --> 00:09:23,190 Tôi sẽ quay trở lại vào thiết bị đầu cuối của tôi cửa sổ và lại chạy trình biên dịch. 221 00:09:23,190 --> 00:09:24,170 Nhưng nó la tôi. 222 00:09:24,170 --> 00:09:29,130 Ngầm tuyên bố chức năng thư viện strlen với kiểu int const-- 223 00:09:29,130 --> 00:09:29,780 Tôi bị lạc. 224 00:09:29,780 --> 00:09:30,590 Hoàn toàn. 225 00:09:30,590 --> 00:09:32,940 >> Vì vậy, đặc biệt là khi bạn mắt bắt đầu nhòa dần 226 00:09:32,940 --> 00:09:36,000 với các thông báo lỗi như thế này, tập trung một cách trung thực về những từ đầu tiên. 227 00:09:36,000 --> 00:09:38,590 Chúng tôi biết vấn đề là ở 8 dòng, như được chỉ ra ở đây. 228 00:09:38,590 --> 00:09:40,500 Và nó trong chuỗi 0.c. 229 00:09:40,500 --> 00:09:43,580 Ngầm tuyên bố chức năng thư viện strlen. 230 00:09:43,580 --> 00:09:47,000 Vì vậy, đó là nói chung sẽ là một mô hình của các thông báo lỗi. 231 00:09:47,000 --> 00:09:49,190 Ngầm tuyên bố một cái gì đó. 232 00:09:49,190 --> 00:09:53,250 >> Vì vậy, trong ngắn hạn, có những gì tôi dường như đã thực hiện đối với dòng 8, ở đây. 233 00:09:53,250 --> 00:09:56,880 Những gì có thể là giải pháp thậm chí còn nếu bạn đã bao giờ sử dụng strlen mình? 234 00:09:56,880 --> 00:09:58,907 >> TƯỢNG: Một phần của một thư viện khác nhau? 235 00:09:58,907 --> 00:10:00,740 DAVID J. Malan: Phần của một thư viện khác nhau. 236 00:10:00,740 --> 00:10:02,400 Vì vậy, nó được khai báo, do đó, để nói chuyện. 237 00:10:02,400 --> 00:10:07,510 Nó được đề cập trong một số tập tin khác hơn là stdio.h và CS50.h. 238 00:10:07,510 --> 00:10:09,179 Bây giờ, nơi nó được định nghĩa? 239 00:10:09,179 --> 00:10:12,220 Thành thật mà nói, bạn có phải chỉ biết điều này ra khỏi đỉnh đầu của bạn, 240 00:10:12,220 --> 00:10:13,640 hoặc bạn Google này và tìm hiểu. 241 00:10:13,640 --> 00:10:18,150 Hoặc biết điều này, tôi đã mở ra trong CS50 thiết bị đầu cuối chương trình, trong đó 242 00:10:18,150 --> 00:10:22,200 chỉ là lớn, phiên bản màn hình đầy đủ những gì ở dưới cùng của cửa sổ gedit của. 243 00:10:22,200 --> 00:10:24,970 >> Và nó chỉ ra rằng có một lệnh ngắn gọn tương tự, gọi là 244 00:10:24,970 --> 00:10:29,280 người đàn ông để sử dụng, mà nếu bạn gõ vào tên của một hàm và nhấn Enter, 245 00:10:29,280 --> 00:10:32,240 bạn sẽ nhận được lại khá tài liệu phức tạp. 246 00:10:32,240 --> 00:10:35,299 Nó chỉ là văn bản nói chung trông một chút gì đó như thế này. 247 00:10:35,299 --> 00:10:37,090 Đó là một chút áp đảo ở cái nhìn đầu tiên. 248 00:10:37,090 --> 00:10:39,048 Nhưng thẳng thắn mà nói tôi sẽ để cho đôi mắt tôi nhòa dần 249 00:10:39,048 --> 00:10:41,930 và chỉ tập trung vào phần Tôi quan tâm đến thời điểm này. 250 00:10:41,930 --> 00:10:42,780 >> Đó là này. 251 00:10:42,780 --> 00:10:45,470 Trông như cấu trúc một cái gì đó tôi là quen thuộc với. 252 00:10:45,470 --> 00:10:48,080 Trên thực tế, người đàn ông, vì vậy để nói chuyện, sẽ cho bạn biết 253 00:10:48,080 --> 00:10:51,590 trong những gì tiêu đề tập tin một chức năng như strlen được xác định. 254 00:10:51,590 --> 00:10:54,170 Vì vậy, tôi sẽ quay trở lại ngay bây giờ để gedit. 255 00:10:54,170 --> 00:10:59,070 Và tôi sẽ đi trước và thêm ở đây # include 256 00:10:59,070 --> 00:11:00,480 và lưu các tập tin. 257 00:11:00,480 --> 00:11:04,300 >> Tôi sẽ để xóa màn hình với Kiểm soát L Nếu bạn đã tự hỏi. 258 00:11:04,300 --> 00:11:08,210 Và tôi sẽ lại chạy làm string.0, biên dịch thời gian này. 259 00:11:08,210 --> 00:11:11,790 ./string.0 Zamyla. 260 00:11:11,790 --> 00:11:15,020 Điều đó dường như làm việc Hãy để tôi đi phía trước và chạy lại nó với Davenport. 261 00:11:15,020 --> 00:11:15,860 Enter. 262 00:11:15,860 --> 00:11:17,730 Và đó cũng vậy, dường như làm việc. 263 00:11:17,730 --> 00:11:21,220 >> Vì vậy, chúng ta có thể làm tốt hơn một chút so với điều này, Mặc dù vậy, chúng ta có thể bắt đầu mọi thứ gọn gàng 264 00:11:21,220 --> 00:11:23,257 lên chỉ là một chút. 265 00:11:23,257 --> 00:11:25,590 Và tôi sẽ thực sự giới thiệu một điều khác bây giờ. 266 00:11:25,590 --> 00:11:28,930 Tôi sẽ đi trước và tiết kiệm này trong một tập tin khác nhau. 267 00:11:28,930 --> 00:11:31,770 Và tôi sẽ gọi string1.c tập tin này chỉ 268 00:11:31,770 --> 00:11:34,620 để phù hợp với mã bạn sẽ có thể tìm thấy trực tuyến. 269 00:11:34,620 --> 00:11:37,050 >> Và chúng ta hãy tập trung vào chính xác cùng mã. 270 00:11:37,050 --> 00:11:39,000 Nó chỉ ra rằng tôi đã được loại lấy 271 00:11:39,000 --> 00:11:42,600 cho các cấp thực tế là máy tính xách tay của tôi, và lần lượt, các thiết bị CS50 272 00:11:42,600 --> 00:11:47,450 có rất nhiều bộ nhớ, rất nhiều RAM, rất nhiều byte của không gian 273 00:11:47,450 --> 00:11:48,920 trong đó tôi có thể lưu trữ các chuỗi. 274 00:11:48,920 --> 00:11:53,560 >> Nhưng thực tế nếu tôi đánh máy dài đủ, và đủ tổ hợp phím, 275 00:11:53,560 --> 00:11:56,170 Tôi có thể trong loại lý thuyết trong nhiều ký tự 276 00:11:56,170 --> 00:11:58,830 hơn so với máy tính của tôi vật lý có bộ nhớ cho. 277 00:11:58,830 --> 00:11:59,830 Và đây là vấn đề. 278 00:11:59,830 --> 00:12:03,050 Giống như một int chỉ có thể tính quá cao, trên lý thuyết, 279 00:12:03,050 --> 00:12:06,600 bạn chỉ có thể nhồi nhét quá nhiều ký tự vào bộ nhớ RAM của máy tính hoặc ngẫu nhiên 280 00:12:06,600 --> 00:12:07,920 Bộ nhớ truy cập. 281 00:12:07,920 --> 00:12:11,140 >> Vì vậy, tôi đã dự đoán tốt hơn vấn đề này, thậm chí 282 00:12:11,140 --> 00:12:13,660 mặc dù nó có thể là một hiếm trường hợp góc, vậy để nói chuyện. 283 00:12:13,660 --> 00:12:15,670 Không xảy ra thường xuyên, có thể xảy ra. 284 00:12:15,670 --> 00:12:18,815 Và nếu điều đó xảy ra và tôi không dự đoán và chương trình cho nó, 285 00:12:18,815 --> 00:12:20,300 chương trình của tôi có thể làm những người hiểu biết. 286 00:12:20,300 --> 00:12:22,220 Đóng băng, treo, khởi động lại, bất cứ điều gì. 287 00:12:22,220 --> 00:12:24,490 Một cái gì đó dự kiến ​​có thể xảy ra. 288 00:12:24,490 --> 00:12:27,120 >> Vì vậy, những gì tôi sẽ làm bây giờ, thực sự từ nay về sau, 289 00:12:27,120 --> 00:12:31,630 là trước khi tôi một cách mù quáng sử dụng một biến như s mà 290 00:12:31,630 --> 00:12:36,790 đã được chỉ định giá trị trả lại một số chức năng khác như getString, 291 00:12:36,790 --> 00:12:40,200 Tôi sẽ đảm bảo mà giá trị của nó là hợp lệ. 292 00:12:40,200 --> 00:12:44,280 Vì vậy, tôi chỉ biết từ khi đọc Tài liệu CS50 cho getString, 293 00:12:44,280 --> 00:12:49,020 mà cuối cùng chúng tôi sẽ chỉ cho bạn ở, getString trả về một biểu tượng đặc biệt 294 00:12:49,020 --> 00:12:53,610 gọi là NULL, N-U-L-L trong tất cả mũ, nếu có điều gì sai. 295 00:12:53,610 --> 00:12:55,650 >> Vì vậy, thông thường, nó sẽ trả về một chuỗi. 296 00:12:55,650 --> 00:12:59,700 Nhưng nếu không nếu nó trả về N-U-L-L-- cuối cùng chúng tôi sẽ xem những gì mà thực sự 297 00:12:59,700 --> 00:13:01,790 means-- mà chỉ cần phương tiện cái gì xấu xảy ra. 298 00:13:01,790 --> 00:13:05,560 Bây giờ điều này có nghĩa là, giống như trong Scratch, Tôi có thể kiểm tra một điều kiện ở đây trong C, 299 00:13:05,560 --> 00:13:08,830 nếu không phải làm bằng NULL. 300 00:13:08,830 --> 00:13:11,930 Vì vậy, nếu bạn đã không nhìn thấy điều này trước đây, này chỉ có nghĩa là không bằng. 301 00:13:11,930 --> 00:13:15,290 >> Vì vậy, nó là đối diện của bình đẳng như nhau, trong đó, nhớ lại, 302 00:13:15,290 --> 00:13:18,940 là khác nhau từ đơn bằng, đó là chuyển nhượng. 303 00:13:18,940 --> 00:13:23,030 Vì vậy, nếu s không bằng NULL, chỉ sau đó làm 304 00:13:23,030 --> 00:13:25,980 Tôi muốn thực hiện các dòng mã. 305 00:13:25,980 --> 00:13:28,080 Vì vậy, nói cách khác, trước khi tôi đi sâu vào một cách mù quáng 306 00:13:28,080 --> 00:13:30,919 và bắt đầu iterating hơn, và xử lý nó 307 00:13:30,919 --> 00:13:33,710 như thể nó là một chuỗi các nhân vật, tôi sẽ kiểm tra đầu tiên, 308 00:13:33,710 --> 00:13:37,900 chờ một phút, là s chắc chắn không phải tương đương với giá trị đặc biệt này, NULL? 309 00:13:37,900 --> 00:13:40,030 >> Bởi vì nếu nó là, những điều xấu có thể xảy ra. 310 00:13:40,030 --> 00:13:43,080 Và bây giờ, giả sử những điều xấu xảy ra tai nạn có nghĩa là chương trình của bạn, 311 00:13:43,080 --> 00:13:45,070 và bạn không thể nhất thiết phải phục hồi. 312 00:13:45,070 --> 00:13:46,800 Vì vậy, thẳng thắn, có vẻ xấu hơn. 313 00:13:46,800 --> 00:13:48,660 nó loại khó hiểu tại để nhìn lướt qua. 314 00:13:48,660 --> 00:13:50,780 Nhưng điều này sẽ càng trở nên quen thuộc trước khi dài. 315 00:13:50,780 --> 00:13:52,920 >> Nhưng tôi sẽ đề xuất bây giờ là một cải tiến khác. 316 00:13:52,920 --> 00:13:54,660 Đó là một sự cải tiến đúng đắn. 317 00:13:54,660 --> 00:13:58,800 Chương trình của tôi bây giờ là chính xác hơn, bởi vì trong trường hợp hiếm hoi mà không đủ bộ nhớ 318 00:13:58,800 --> 00:14:01,180 tồn tại, tôi sẽ xử lý nó, và tôi sẽ không làm gì cả. 319 00:14:01,180 --> 00:14:02,680 Tôi ít nhất sẽ không sụp đổ. 320 00:14:02,680 --> 00:14:05,000 >> Nhưng chúng ta hãy làm một phiên bản cuối cùng ở đây. 321 00:14:05,000 --> 00:14:07,690 Và một tập tin gọi là string2.c. 322 00:14:07,690 --> 00:14:10,190 Tôi sẽ dán mà cùng một mã cho chỉ là một thời điểm, 323 00:14:10,190 --> 00:14:14,210 và tôi sẽ làm nổi bật này dòng, 11, ở đây, chỉ một khoảnh khắc. 324 00:14:14,210 --> 00:14:18,179 Bây giờ thực tế là trình biên dịch thông minh như kêu vang có thể sửa lỗi này cho chúng tôi 325 00:14:18,179 --> 00:14:19,970 đằng sau hậu trường chúng tôi không bao giờ biết. 326 00:14:19,970 --> 00:14:24,670 Nhưng hãy nghĩ về điều này về cơ bản là một thiết kế có vấn đề. 327 00:14:24,670 --> 00:14:29,010 >> Dòng mã này là, tất nhiên, nói, khởi tạo một số biến i 0. 328 00:14:29,010 --> 00:14:30,260 Đó là khá đơn giản. 329 00:14:30,260 --> 00:14:34,691 Và một lần nữa là đây tuyên bố, ở đây, tôi ++, làm gì? 330 00:14:34,691 --> 00:14:37,066 Chúng tôi đã nhìn thấy nó trước, nhưng chúng tôi đã không thực sự nói về nó. 331 00:14:37,066 --> 00:14:37,900 >> TƯỢNG: Tăng dần tôi. 332 00:14:37,900 --> 00:14:39,191 >> DAVID J. Malan: Tăng dần tôi. 333 00:14:39,191 --> 00:14:41,890 Vì vậy, trên mỗi lần lặp thông qua vòng này, mỗi chu kỳ, 334 00:14:41,890 --> 00:14:43,570 bạn đang incrementing tôi một. 335 00:14:43,570 --> 00:14:45,740 Vì vậy, nó được lớn hơn và lớn hơn, và lớn hơn cho đến khi kết thúc vòng lặp. 336 00:14:45,740 --> 00:14:46,810 Làm thế nào để nó chấm dứt? 337 00:14:46,810 --> 00:14:49,430 Cũng có trung này điều kiện mà chúng tôi đã sử dụng trước. 338 00:14:49,430 --> 00:14:52,500 Bạn đã nhìn thấy và trong walkthroughs trong tập P. 339 00:14:52,500 --> 00:14:53,880 >> Nhưng câu nói này là gì? 340 00:14:53,880 --> 00:14:58,352 Làm vòng lặp sau đây để miễn là tôi là ít hơn những gì? 341 00:14:58,352 --> 00:14:59,810 TƯỢNG: Chiều dài của chuỗi. 342 00:14:59,810 --> 00:15:01,518 DAVID J. Malan: Các chiều dài của chuỗi. 343 00:15:01,518 --> 00:15:04,300 Vì vậy, nó dịch khá sạch để tiếng Anh trong ý nghĩa đó. 344 00:15:04,300 --> 00:15:08,810 Bây giờ vấn đề là mỗi khi tôi lặp qua vòng này về mặt lý thuyết, 345 00:15:08,810 --> 00:15:10,000 Tôi hỏi câu hỏi này. 346 00:15:10,000 --> 00:15:12,250 Là tôi nhỏ hơn độ dài chuỗi s? 347 00:15:12,250 --> 00:15:14,500 Là tôi nhỏ hơn độ dài chuỗi s? 348 00:15:14,500 --> 00:15:18,380 >> Bây giờ là tôi thay đổi trên mỗi lần lặp? 349 00:15:18,380 --> 00:15:18,880 Đó là. 350 00:15:18,880 --> 00:15:19,629 Do ++. 351 00:15:19,629 --> 00:15:21,700 Vì vậy, mỗi lần lặp i là nhận được lớn hơn. 352 00:15:21,700 --> 00:15:25,411 Nhưng s nhận được lớn hơn, hoặc nhỏ hơn, hoặc thay đổi ở tất cả? 353 00:15:25,411 --> 00:15:25,910 Số 354 00:15:25,910 --> 00:15:30,240 Vì vậy, về mặt thiết kế, một trong những trục theo đó chúng ta cố gắng để đánh giá mã 355 00:15:30,240 --> 00:15:32,610 trong lớp, điều này cảm thấy ngu ngốc. 356 00:15:32,610 --> 00:15:34,690 >> Cũng giống như bạn nghĩa là, trên mỗi lần lặp 357 00:15:34,690 --> 00:15:37,110 của vòng lặp này yêu cầu cùng một câu hỏi chết tiệt một lần nữa, 358 00:15:37,110 --> 00:15:40,770 và một lần nữa, và một lần nữa, và theo nghĩa đen nó sẽ không bao giờ thay đổi. 359 00:15:40,770 --> 00:15:44,220 Ít nhất là nếu tôi không chạm vào s và cố gắng thay đổi các nội dung của s. 360 00:15:44,220 --> 00:15:46,610 Vì vậy, tôi có thể làm tốt hơn một chút so với điều này. 361 00:15:46,610 --> 00:15:49,530 >> Và những gì tôi sẽ làm không phải là tuyên bố chỉ là một biến i, 362 00:15:49,530 --> 00:15:53,330 nhưng một biến thứ hai tôi sẽ tùy tiện, nhưng thông thường, gọi nó là n. 363 00:15:53,330 --> 00:15:55,940 Chỉ định n bằng chiều dài chuỗi s. 364 00:15:55,940 --> 00:15:59,090 Và sau đó ở đây, tôi sẽ làm một tối ưu hóa rất thông minh, vì vậy 365 00:15:59,090 --> 00:16:03,460 để nói chuyện, mà vào cuối ngày là không chính xác hoặc không ít chính xác 366 00:16:03,460 --> 00:16:04,260 hơn trước. 367 00:16:04,260 --> 00:16:05,500 Nhưng đó là một thiết kế tốt hơn. 368 00:16:05,500 --> 00:16:09,480 Trong thực tế là tôi đang sử dụng ít thời gian, chu kỳ CPU ít hơn, vì vậy 369 00:16:09,480 --> 00:16:14,040 để nói chuyện, để trả lời giống nhau câu hỏi, nhưng chỉ một lần. 370 00:16:14,040 --> 00:16:17,870 >> Mọi thắc mắc về chung nguyên tắc cải thiện, 371 00:16:17,870 --> 00:16:21,294 nói, hiệu quả của chương trình? 372 00:16:21,294 --> 00:16:21,991 Vâng? 373 00:16:21,991 --> 00:16:23,699 TƯỢNG: Tại sao bạn sử dụng [không nghe được]? 374 00:16:23,699 --> 00:16:25,760 375 00:16:25,760 --> 00:16:27,010 DAVID J. Malan: Câu hỏi. 376 00:16:27,010 --> 00:16:30,690 Vì vậy, tại sao chúng ta đặt ++ vào cuối i thay vì đầu của tôi? 377 00:16:30,690 --> 00:16:33,070 Trong trường hợp này, nó có không ảnh hưởng đến chức năng. 378 00:16:33,070 --> 00:16:36,670 Và nói chung, tôi có xu hướng sử dụng toán tử postfix 379 00:16:36,670 --> 00:16:41,750 để nó nhiều hơn một chút rõ ràng như để khi hoạt động đang xảy ra. 380 00:16:41,750 --> 00:16:46,670 >> Đối với những người không quen thuộc, có một báo cáo, theo đó bạn có thể làm ++ tôi. 381 00:16:46,670 --> 00:16:48,747 Đây là những chức năng tương đương trong trường hợp này 382 00:16:48,747 --> 00:16:51,080 bởi vì không có gì khác là xung quanh incrementation đó. 383 00:16:51,080 --> 00:16:54,435 Nhưng bạn có thể đến với trường hợp và dòng mã 384 00:16:54,435 --> 00:16:55,810 trong đó mà làm cho một sự khác biệt. 385 00:16:55,810 --> 00:16:57,810 Vì vậy, nói chung, chúng tôi không thậm chí còn nói về việc này. 386 00:16:57,810 --> 00:17:00,690 Bởi vì thẳng thắn, nó làm cho bạn đang hấp dẫn hơn, và các loại áo mưa, 387 00:17:00,690 --> 00:17:01,776 và ký tự. 388 00:17:01,776 --> 00:17:04,859 Nhưng thực tế là nó khó hơn rất nhiều, Tôi nghĩ rằng, ngay cả đối với tôi để bọc tâm trí của tôi 389 00:17:04,859 --> 00:17:07,319 xung quanh nó đôi khi, thứ tự của các hoạt động. 390 00:17:07,319 --> 00:17:09,750 Vì vậy, như một sang một bên, nếu bạn thực sự không như thế này, 391 00:17:09,750 --> 00:17:14,650 mặc dù đây là loại sexy tìm kiếm, bạn cũng có thể làm i + = 1, 392 00:17:14,650 --> 00:17:18,880 đó là phiên bản xấu hơn của cùng một ý tưởng cho postfix incrementation. 393 00:17:18,880 --> 00:17:22,250 >> Tôi nói điều này và bạn nên làm cho niềm vui của nó, 394 00:17:22,250 --> 00:17:25,140 nhưng bạn sẽ đến để xem mã như một cái gì đó đẹp trước khi dài. 395 00:17:25,140 --> 00:17:27,160 >> [Cười] 396 00:17:27,160 --> 00:17:28,410 >> DAVID J. Malan: Phải không? 397 00:17:28,410 --> 00:17:29,360 Yeah. 398 00:17:29,360 --> 00:17:30,480 Câu hỏi ở giữa. 399 00:17:30,480 --> 00:17:32,146 >> TƯỢNG: Bạn cần phải nói int n? 400 00:17:32,146 --> 00:17:34,020 DAVID J. Malan: Bạn làm không cần phải nói int n. 401 00:17:34,020 --> 00:17:37,670 Vì vậy, bởi vì chúng tôi đã nói int, bạn không cần phải nói lại lần nữa. 402 00:17:37,670 --> 00:17:41,820 Việc nắm bắt được rằng n phải có cùng kiểu dữ liệu như tôi. 403 00:17:41,820 --> 00:17:43,310 Vì vậy, đó chỉ là một tiện nghi ở đây. 404 00:17:43,310 --> 00:17:44,058 Yeah. 405 00:17:44,058 --> 00:17:47,806 >> TƯỢNG: Bạn có thể đi qua khung in nhân vật của tôi một lần nữa? 406 00:17:47,806 --> 00:17:48,930 DAVID J. Malan: Tuyệt đối. 407 00:17:48,930 --> 00:17:52,110 Vì vậy,% c, nhớ lại từ cuối thời gian, chỉ là một giữ chỗ. 408 00:17:52,110 --> 00:17:53,930 Nó có nghĩa là đặt một char ở đây. 409 00:17:53,930 --> 00:17:56,780 n dấu gạch chéo ngược, tất nhiên, chỉ phương tiện đưa ngắt dòng ở đây. 410 00:17:56,780 --> 00:17:59,540 Vì vậy, đó chỉ là lá, bây giờ, mảnh cú pháp mới. 411 00:17:59,540 --> 00:18:03,730 Và đây là nghĩa đen nói, lấy chuỗi gọi là s và đi được của nó 412 00:18:03,730 --> 00:18:06,050 i'th nhân vật, vì vậy để nói chuyện. 413 00:18:06,050 --> 00:18:10,590 >> Và tôi luôn nói nhân vật i'th bởi vì trên mỗi lần lặp của vòng lặp này 414 00:18:10,590 --> 00:18:14,540 nó như chúng ta đang in ra, s khung đầu tiên 0, 415 00:18:14,540 --> 00:18:15,780 như một lập trình viên có thể nói. 416 00:18:15,780 --> 00:18:18,680 Sau đó, s khung 1, sau đó s khung 2, sau đó 3, sau đó 4. 417 00:18:18,680 --> 00:18:21,610 Nhưng tất nhiên đó là một biến, vì vậy tôi chỉ thể hiện nó với tôi. 418 00:18:21,610 --> 00:18:23,900 >> Quan trọng, tuy nhiên, là để nhận ra, đặc biệt là nếu bạn đã không 419 00:18:23,900 --> 00:18:26,358 được thích nghi với thế giới này của chương trình, trong đó tất cả chúng ta 420 00:18:26,358 --> 00:18:28,950 dường như để đếm từ số không, gotta bắt đầu đếm từ số không bây giờ. 421 00:18:28,950 --> 00:18:35,130 Bởi vì chuỗi, ký tự đầu tiên, các z trong Zamyla là tốt hơn hoặc tồi tệ hơn 422 00:18:35,130 --> 00:18:40,490 sẽ sống ở vị trí số không. 423 00:18:40,490 --> 00:18:48,210 >> Được rồi, vì vậy hãy để tôi mang chúng tôi trở lại đây để Zamyla 424 00:18:48,210 --> 00:18:50,746 và xem những gì đang thực sự xảy ra vào bên dưới mui xe. 425 00:18:50,746 --> 00:18:52,370 Vì vậy, có khái niệm về loại đúc. 426 00:18:52,370 --> 00:18:53,800 Bạn có thể thực sự chơi với này đã có, 427 00:18:53,800 --> 00:18:55,970 có thể cho các hacker phiên bản của P thiết lập một. 428 00:18:55,970 --> 00:19:00,320 Nhưng loại đúc chỉ đề cập đến khả năng trong C và một số ngôn ngữ khác 429 00:19:00,320 --> 00:19:03,170 để chuyển đổi một kiểu dữ liệu khác. 430 00:19:03,170 --> 00:19:05,450 >> Bây giờ làm thế nào chúng ta có thể thấy điều này khá thẳng thắn? 431 00:19:05,450 --> 00:19:08,530 Vì vậy, đây, nhớ lại, là sự khởi đầu của bảng chữ cái tiếng Anh. 432 00:19:08,530 --> 00:19:11,265 Và bối cảnh, nhớ lại, từ như một tuần trước đây là ASCII. 433 00:19:11,265 --> 00:19:13,790 Mỹ Mã Tiêu chuẩn để trao đổi thông tin. 434 00:19:13,790 --> 00:19:17,080 Mà chỉ là một cách thực sự dài nói một ánh xạ từ các chữ cái 435 00:19:17,080 --> 00:19:19,370 đến các số, và từ con số để các chữ cái. 436 00:19:19,370 --> 00:19:22,940 >> Vì vậy, từ A đến M ở đây, dấu chấm dấu chấm dấu chấm, đường dây với, thu hồi, 437 00:19:22,940 --> 00:19:25,582 số thập phân 65 trở lên. 438 00:19:25,582 --> 00:19:27,290 Và chúng tôi đã không nói chuyện về điều này một cách rõ ràng, 439 00:19:27,290 --> 00:19:29,850 nhưng chắc chắn có tương tự số cho chữ thường. 440 00:19:29,850 --> 00:19:30,820 Và quả thực, có. 441 00:19:30,820 --> 00:19:33,730 Thế giới đã quyết định một số năm trước đó ít một, chữ thường một, 442 00:19:33,730 --> 00:19:35,020 sẽ là 97. 443 00:19:35,020 --> 00:19:38,010 Và ít b sẽ là 98, và vv. 444 00:19:38,010 --> 00:19:40,200 >> Và đối với bất kỳ phím nào khác trên bàn phím của bạn, có 445 00:19:40,200 --> 00:19:42,190 sẽ là một mô hình tương tự của các bit. 446 00:19:42,190 --> 00:19:44,540 Hoặc tương đương, một số thập phân. 447 00:19:44,540 --> 00:19:47,110 Vậy câu hỏi ở bàn tay, sau đó, là làm thế nào chúng ta có thể 448 00:19:47,110 --> 00:19:49,400 thực sự thấy điều này dưới mui xe? 449 00:19:49,400 --> 00:19:51,539 Vì vậy, tôi sẽ đi qua để gedit lại. 450 00:19:51,539 --> 00:19:53,330 Và thay vì loại này từ đầu, 451 00:19:53,330 --> 00:19:55,330 Tôi sẽ đi trước và chỉ cần mở một cái gì đó 452 00:19:55,330 --> 00:19:58,350 từ mã ngày nay được gọi là ASCII không. 453 00:19:58,350 --> 00:20:01,210 >> Và ASCII không trông như thế này. 454 00:20:01,210 --> 00:20:02,710 Vì vậy, hãy bọc tâm trí của chúng tôi xung quanh này. 455 00:20:02,710 --> 00:20:04,969 Vì vậy, đầu tiên, tôi đã nhận xét mã, đó là tốt đẹp. 456 00:20:04,969 --> 00:20:07,010 Bởi vì đó là nghĩa đen nói với tôi những gì mong đợi, 457 00:20:07,010 --> 00:20:08,950 hiển thị một bản đồ cho chữ hoa. 458 00:20:08,950 --> 00:20:13,690 Bây giờ tôi hoàn toàn không biết những gì tôi nghĩa là bằng cách đó, vì vậy chúng ta hãy suy luận. 459 00:20:13,690 --> 00:20:16,870 >> Trong tiếng Anh, có thể Anh hơi iPod, 460 00:20:16,870 --> 00:20:20,660 những gì hiện dòng 18 xuất hiện phải làm cho chúng ta? 461 00:20:20,660 --> 00:20:21,500 Chỉ cần dòng 18. 462 00:20:21,500 --> 00:20:22,430 Đó là những gì gây? 463 00:20:22,430 --> 00:20:25,192 Đó là những gì sẽ tung ra ở đây? 464 00:20:25,192 --> 00:20:26,100 >> TƯỢNG: Một vòng lặp. 465 00:20:26,100 --> 00:20:26,630 >> DAVID J. Malan: Một vòng lặp. 466 00:20:26,630 --> 00:20:28,463 Và bao nhiêu lần là đó sẽ lặp lại? 467 00:20:28,463 --> 00:20:31,562 468 00:20:31,562 --> 00:20:33,270 TƯỢNG: [interposing GIỌNG NÓI] sáu lần. 469 00:20:33,270 --> 00:20:34,830 DAVID J. Malan: Không sáu lần. 470 00:20:34,830 --> 00:20:35,840 TƯỢNG: 26 lần. 471 00:20:35,840 --> 00:20:36,560 DAVID J. Malan: 26 lần. 472 00:20:36,560 --> 00:20:37,060 Vâng, xin lỗi. 473 00:20:37,060 --> 00:20:37,960 26 lần. 474 00:20:37,960 --> 00:20:38,460 Tại sao? 475 00:20:38,460 --> 00:20:41,590 Vâng, đó là một chút lạ, nhưng Tôi đã bắt đầu kể từ 65. 476 00:20:41,590 --> 00:20:43,300 Đó là kỳ lạ, nhưng không sai. 477 00:20:43,300 --> 00:20:44,610 Nó không phải là xấu mỗi nói. 478 00:20:44,610 --> 00:20:46,980 Và tôi đang làm mà chỉ bởi vì, cho ví dụ này, 479 00:20:46,980 --> 00:20:50,455 Tôi là loại dự đoán rằng vốn A là 65. 480 00:20:50,455 --> 00:20:53,330 Bây giờ đây không phải là thanh lịch nhất cách để làm điều này, để loại mã cứng 481 00:20:53,330 --> 00:20:56,130 giá trị huyền bí mà không ai là bao giờ sẽ nhớ. 482 00:20:56,130 --> 00:21:00,155 >> Nhưng hiện nay, nhận thấy rằng tôi làm điều này thông qua lên 65 cộng với 26. 483 00:21:00,155 --> 00:21:03,030 Bởi vì dường như tôi thậm chí không muốn để làm các phép tính số học trong đầu tôi. 484 00:21:03,030 --> 00:21:04,440 Vì vậy, tôi sẽ cho các trình biên dịch làm điều đó. 485 00:21:04,440 --> 00:21:08,600 Nhưng sau đó vào mỗi vòng lặp, mỗi lần lặp của vòng lặp, tôi incrementing i. 486 00:21:08,600 --> 00:21:10,196 >> Vì vậy, bây giờ điều này có vẻ hơi khó hiểu. 487 00:21:10,196 --> 00:21:13,320 Nhưng chúng ta nên có xây dựng cơ bản khối nào đó để hiểu điều này. 488 00:21:13,320 --> 00:21:15,510 % C chỉ là một giữ chỗ cho một char. 489 00:21:15,510 --> 00:21:19,010 % I là một giữ chỗ cho một int. 490 00:21:19,010 --> 00:21:23,310 Và nó chỉ ra rằng bằng cách sử dụng này cú pháp mới, trong ngoặc đơn này, vì vậy 491 00:21:23,310 --> 00:21:26,100 để nói chuyện, vì vậy một kiểu dữ liệu bên trong một dấu ngoặc đơn, 492 00:21:26,100 --> 00:21:32,270 Tôi có thể buộc các trình biên dịch để điều trị tôi không phải là một số nguyên, nhưng như là một char. 493 00:21:32,270 --> 00:21:35,520 >> Qua đó cho thấy tôi những nhân vật tương đương với con số đó. 494 00:21:35,520 --> 00:21:37,986 Bây giờ ở đây, mã này là khá nhiều giống hệt nhau. 495 00:21:37,986 --> 00:21:39,860 Tôi chỉ muốn làm cho siêu rõ ràng thực tế 496 00:21:39,860 --> 00:21:42,095 mà tôi đang bắt đầu từ 97, đó là một chữ thường. 497 00:21:42,095 --> 00:21:44,080 Trên lên đến 26 ký tự hơn. 498 00:21:44,080 --> 00:21:46,970 Và tôi doing-- một lần nữa, đúc tôi, vậy để nói chuyện. 499 00:21:46,970 --> 00:21:49,160 Hoặc loại đúc tôi, vậy để nói chuyện. 500 00:21:49,160 --> 00:21:51,420 >> Từ một int đến một char. 501 00:21:51,420 --> 00:21:55,760 Vì vậy, kết quả cuối cùng là có được, thẳng thắn, thông tin chúng tôi đã biết. 502 00:21:55,760 --> 00:21:59,411 Tôi sẽ làm cho ascii-0 dot-- không chấm c. 503 00:21:59,411 --> 00:22:02,160 Chú ý, bạn có thể thực hiện mà sai lầm như tôi chỉ cần làm vô tình. 504 00:22:02,160 --> 00:22:03,820 Hãy ascii-0. 505 00:22:03,820 --> 00:22:06,090 Bây giờ tôi sẽ làm ./ascii-0. 506 00:22:06,090 --> 00:22:09,050 Tôi sẽ phóng to, và không may nó sẽ di chuyển ra khỏi màn hình. 507 00:22:09,050 --> 00:22:15,060 Nhưng chúng ta thấy toàn bộ biểu đồ nơi một bản đồ 97, bản đồ b đến 98, 508 00:22:15,060 --> 00:22:18,931 và nếu chúng ta di chuyển lên cao hơn nữa Một, tất nhiên, bản đồ 65. 509 00:22:18,931 --> 00:22:21,180 Vì vậy, đây chỉ là để nói rằng những gì chúng ta đã rao giảng, 510 00:22:21,180 --> 00:22:25,310 có tương đương này, được trong thực tế, trường hợp trong thực tế. 511 00:22:25,310 --> 00:22:28,000 Vì vậy, một thay đổi nhanh chóng này. 512 00:22:28,000 --> 00:22:31,220 Hãy để tôi mở ra ascii-1.c. 513 00:22:31,220 --> 00:22:38,070 Và thông báo thông minh này, sắp xếp của, làm rõ về điều này. 514 00:22:38,070 --> 00:22:41,770 Đây là ascii-1.c, và nhận thấy điều này điên. 515 00:22:41,770 --> 00:22:45,120 >> Và điều này thực sự được đến trái tim những gì các máy tính đang làm. 516 00:22:45,120 --> 00:22:48,150 Mặc dù con người chúng ta sẽ không tính về letters-- 517 00:22:48,150 --> 00:22:50,380 Tôi không bắt đầu suy nghĩ, tất cả phải vào một sau đó b, 518 00:22:50,380 --> 00:22:52,590 và sử dụng những tính đối tượng vật lý. 519 00:22:52,590 --> 00:22:58,680 Bạn chắc chắn có thể nói rằng tôi muốn khởi tạo một số biến được gọi là c-- 520 00:22:58,680 --> 00:23:03,220 nhưng tôi có thể gọi anything-- này để c được khởi tạo vốn A. 521 00:23:03,220 --> 00:23:07,560 >> Bởi vì lúc cuối ngày, máy tính không quan tâm đến những gì bạn đang lưu trữ, 522 00:23:07,560 --> 00:23:10,170 nó chỉ quan tâm làm thế nào bạn muốn trình bày thông tin đó. 523 00:23:10,170 --> 00:23:13,560 Làm thế nào để bạn muốn máy tính giải thích rằng mô hình của bit? 524 00:23:13,560 --> 00:23:16,320 Vì vậy, đây không phải là một cái gì đó tôi nói chung sẽ khuyên bạn nên làm. 525 00:23:16,320 --> 00:23:19,500 Nó thực sự chỉ là một ví dụ để truyền tải những gì bạn có thể hoàn toàn 526 00:23:19,500 --> 00:23:22,049 khởi tạo một số nguyên cho một char. 527 00:23:22,049 --> 00:23:24,090 Bởi vì bên dưới mui xe của một char, tất nhiên, 528 00:23:24,090 --> 00:23:26,170 chỉ là một số từ 0 đến 255. 529 00:23:26,170 --> 00:23:28,540 >> Vì vậy, bạn có thể chắc chắn đặt nó bên trong của một int. 530 00:23:28,540 --> 00:23:30,890 Và điều này cũng chứng minh được rằng chúng ta 531 00:23:30,890 --> 00:23:34,040 có thể chuyển đổi từ một loại khác, ở đây, 532 00:23:34,040 --> 00:23:36,780 cuối cùng là in những điều tương tự. 533 00:23:36,780 --> 00:23:44,760 Và trên thực tế, điều này tôi sẽ sửa chữa online-- có nghĩa là để nói điều này, một lần nữa, ở đây. 534 00:23:44,760 --> 00:23:48,610 Hãy để tôi làm sạch này lên mạng, và chúng tôi sẽ nhìn thấy trong một hương trực tuyến khi cần thiết, 535 00:23:48,610 --> 00:23:50,280 những gì được dự định đó. 536 00:23:50,280 --> 00:23:50,960 >> OK. 537 00:23:50,960 --> 00:23:53,892 Vì vậy, ví dụ mới nhất tại liên quan đến một và b và sau đó chúng tôi sẽ 538 00:23:53,892 --> 00:23:54,850 có những điều lên một notch. 539 00:23:54,850 --> 00:23:58,330 Vì vậy, với một và b và của c trong vốn 540 00:23:58,330 --> 00:24:01,560 và sự tương đương của chúng, chúng ta hãy hãy nhìn vào ví dụ này, ở đây. 541 00:24:01,560 --> 00:24:02,752 Một ví dụ khác mã. 542 00:24:02,752 --> 00:24:04,460 Chúng tôi sẽ mở một trong đó là đã được thực hiện, vì vậy chúng tôi 543 00:24:04,460 --> 00:24:06,440 không cần phải gõ tất cả ra từ đầu. 544 00:24:06,440 --> 00:24:09,420 >> Và thông báo trong dự đoán chúng tôi đang sử dụng nhiều tiêu đề 545 00:24:09,420 --> 00:24:13,240 tác phẩm, trong đó có người bạn mới của chúng tôi, string.h. 546 00:24:13,240 --> 00:24:15,597 Bây giờ điều này có vẻ, lúc đầu Trong nháy mắt, một chút khó hiểu. 547 00:24:15,597 --> 00:24:18,180 Nhưng chúng ta hãy xem nếu chúng ta không thể lý luận thông qua những gì đang xảy ra ở đây. 548 00:24:18,180 --> 00:24:21,150 Lần đầu tiên tôi nhận được một chuỗi từ người sử dụng, và tôi đặt chuỗi trong một biến 549 00:24:21,150 --> 00:24:22,286 gọi là s. 550 00:24:22,286 --> 00:24:24,090 Sao chép dán từ trước. 551 00:24:24,090 --> 00:24:27,250 Trong dòng 22, tôi là rõ ràng làm chính xác những gì 552 00:24:27,250 --> 00:24:30,760 Tôi đã làm một thời điểm trước đây, tôi đang lặp lại qua các nhân vật trong s. 553 00:24:30,760 --> 00:24:34,780 >> Và thủ đoạn mới ở đây đang sử dụng chiều dài chuỗi, tối ưu hóa nhỏ 554 00:24:34,780 --> 00:24:37,930 lưu trữ các chuỗi dài trong n, thay vì gọi điện thoại strlen một lần nữa, 555 00:24:37,930 --> 00:24:38,850 và một lần nữa, và một lần nữa. 556 00:24:38,850 --> 00:24:41,120 Và chỉ cần kiểm tra xem tôi là nhỏ hơn n. 557 00:24:41,120 --> 00:24:43,330 Bây giờ đây, những thứ có được một chút thú vị. 558 00:24:43,330 --> 00:24:45,980 Nhưng nó chỉ là một ứng dụng của ý tưởng này cùng mới. 559 00:24:45,980 --> 00:24:48,470 Có gì trong tiếng Anh không s khung tôi đại diện? 560 00:24:48,470 --> 00:24:51,772 561 00:24:51,772 --> 00:24:54,260 >> TƯỢNG: Đếm từng nhân vật [không nghe được]. 562 00:24:54,260 --> 00:24:55,926 >> DAVID J. Malan: Đếm từng nhân vật. 563 00:24:55,926 --> 00:24:58,680 Và thậm chí nhiều hơn một cách ngắn gọn, s khung tôi đại diện cho những gì? 564 00:24:58,680 --> 00:25:00,950 Bạn sẽ nói. 565 00:25:00,950 --> 00:25:04,084 Không được đưa bạn vào vị trí ở đây. 566 00:25:04,084 --> 00:25:06,375 >> TƯỢNG: Well-- 567 00:25:06,375 --> 00:25:09,500 DAVID J. Malan: Vì vậy, nếu từ is-- nếu chuỗi là Zamyla, mà starts-- 568 00:25:09,500 --> 00:25:12,380 TƯỢNG: --Bạn đối phó với các nhân vật separately-- 569 00:25:12,380 --> 00:25:13,690 DAVID J. Malan: Tốt. 570 00:25:13,690 --> 00:25:14,190 Chính xác. 571 00:25:14,190 --> 00:25:17,940 Các ký hiệu khung vuông cho phép bạn để truy cập mỗi nhân vật cá nhân, 572 00:25:17,940 --> 00:25:21,120 nên s khung 0 là có được các ký tự đầu tiên trong chuỗi. 573 00:25:21,120 --> 00:25:24,110 s khung 1 là có được thứ hai, và vv. 574 00:25:24,110 --> 00:25:28,050 Vậy câu hỏi tôi hỏi, ở đây, trong tình trạng này là gì? 575 00:25:28,050 --> 00:25:33,984 Là nhân vật i'th của s lớn hơn hơn hoặc bằng chữ thường một? 576 00:25:33,984 --> 00:25:36,400 Và điều này có nghĩa là, ở đây, với các dấu và đôi? 577 00:25:36,400 --> 00:25:36,800 TƯỢNG (kèm): Và. 578 00:25:36,800 --> 00:25:37,210 DAVID J. Malan: Và. 579 00:25:37,210 --> 00:25:38,418 Nó chỉ tương đương với này. 580 00:25:38,418 --> 00:25:42,310 Và không phải là một từ khóa trong C, bạn phải sử dụng, khó chịu, dấu và ký hiệu. 581 00:25:42,310 --> 00:25:47,520 Và điều này, ngược lại, là yêu cầu là s i'th nhân vật nhỏ hơn hoặc bằng 582 00:25:47,520 --> 00:25:49,030 thành chữ thường z? 583 00:25:49,030 --> 00:25:52,440 Và một lần nữa, đây là nơi sự hiểu biết cơ bản 584 00:25:52,440 --> 00:25:54,550 thực hiện một máy tính làm cho tinh thần. 585 00:25:54,550 --> 00:25:57,330 Chú ý rằng, mặc dù tôi có chấm chấm chấm ở đó, 586 00:25:57,330 --> 00:26:04,410 trông giống như từ a đến z trong chữ thường được tất cả các giá trị liên tiếp tăng từ 97 trở lên. 587 00:26:04,410 --> 00:26:07,820 >> Và tương tự cho chữ hoa bắt đầu từ 65. 588 00:26:07,820 --> 00:26:10,410 Vì vậy, takeaway, sau đó, là bằng tiếng Anh, 589 00:26:10,410 --> 00:26:12,760 làm thế nào bạn có thể mô tả những dòng 24 đang làm gì? 590 00:26:12,760 --> 00:26:15,736 591 00:26:15,736 --> 00:26:16,728 Vâng? 592 00:26:16,728 --> 00:26:21,575 >> TƯỢNG: Ngày 24 nó kiểm tra để xem cho dù mỗi nhân vật là một chữ thường. 593 00:26:21,575 --> 00:26:24,700 DAVID J. Malan: Nó kiểm tra xem mỗi nhân vật là một chữ viết thường. 594 00:26:24,700 --> 00:26:28,590 Vì vậy, thậm chí nhiều hơn một cách ngắn gọn, là nhân vật i'th của s chữ thường? 595 00:26:28,590 --> 00:26:30,690 Đó là tất cả chúng tôi thể hiện ở đây một cách hợp lý, 596 00:26:30,690 --> 00:26:33,750 một chút khó hiểu, nhưng cuối cùng là khá thẳng thắn. 597 00:26:33,750 --> 00:26:36,480 Là s i'th chữ thường? 598 00:26:36,480 --> 00:26:40,130 >> Nếu như vậy, và đây là nơi mà mọi thứ có được một chút tâm uốn 599 00:26:40,130 --> 00:26:44,760 chỉ trong một thời điểm, nếu như vậy, đi trước và in ra một nhân vật. 600 00:26:44,760 --> 00:26:47,360 Vì vậy, đây chỉ là một trình giữ chỗ, nhưng những gì nhân vật? 601 00:26:47,360 --> 00:26:53,710 Tại sao tôi làm khung của tôi trừ biểu hiện này ở đây? 602 00:26:53,710 --> 00:26:55,110 >> Cũng nhận thấy mô hình ở đây. 603 00:26:55,110 --> 00:26:57,380 Những con số thực tế không quan trọng rất nhiều. 604 00:26:57,380 --> 00:27:02,700 Nhưng chú ý rằng 97 là cách xa 65? 605 00:27:02,700 --> 00:27:03,560 >> TƯỢNG: 32. 606 00:27:03,560 --> 00:27:04,480 >> DAVID J. Malan: 32. 607 00:27:04,480 --> 00:27:06,890 Làm thế nào xa là 98 từ 66? 608 00:27:06,890 --> 00:27:07,740 >> TƯỢNG: 32. 609 00:27:07,740 --> 00:27:09,890 >> DAVID J. Malan: Little c từ lớn C? 610 00:27:09,890 --> 00:27:10,420 32. 611 00:27:10,420 --> 00:27:14,550 Vì vậy, có 32 bước nhảy từ một lá thư khác. 612 00:27:14,550 --> 00:27:17,790 Vì vậy, tôi thẳng thắn, có thể đơn giản hóa này với. 613 00:27:17,790 --> 00:27:20,400 Nhưng sau đó tôi là loại mã hóa cứng sự hiểu biết ở mức độ thấp này 614 00:27:20,400 --> 00:27:21,740 rằng không có người đọc là bao giờ sẽ hiểu. 615 00:27:21,740 --> 00:27:25,080 Vì vậy, tôi sẽ khái quát nó như là, tôi biết chữ thường là lớn hơn. 616 00:27:25,080 --> 00:27:28,400 Tôi biết các chữ cái vốn là giá trị nhỏ hơn, trớ trêu thay. 617 00:27:28,400 --> 00:27:33,216 >> Nhưng điều này là có hiệu quả tương đương với nói trừ đi 32 từ khung của tôi. 618 00:27:33,216 --> 00:27:35,430 Vì vậy, trong bối cảnh của những chữ cái, nếu thư 619 00:27:35,430 --> 00:27:38,950 xảy ra là một, chữ thường một, và tôi trừ đi 32, 620 00:27:38,950 --> 00:27:43,442 gì có hiệu lực không có, toán học, vào một chữ thường? 621 00:27:43,442 --> 00:27:44,400 TƯỢNG: Capitalizes-- 622 00:27:44,400 --> 00:27:45,691 DAVID J. Malan: tận nó. 623 00:27:45,691 --> 00:27:48,440 Và quả thực, đây là lý do tại sao chúng tôi chương trình được gọi là tận dụng không. 624 00:27:48,440 --> 00:27:51,590 Chương trình này hoặc tận thư, 625 00:27:51,590 --> 00:27:54,580 sau khi kiểm tra nếu nó là thực sự là một chữ viết thường. 626 00:27:54,580 --> 00:27:59,810 Nếu không, trong dòng 30, tôi phải làm gì nếu nó không phải là một chữ thường rằng tôi 627 00:27:59,810 --> 00:28:02,852 nhìn ở đặc biệt lặp đi lặp lại trong vòng lặp. 628 00:28:02,852 --> 00:28:03,890 Chỉ cần in ra. 629 00:28:03,890 --> 00:28:07,010 >> Vì vậy, không thay đổi thứ đó không phải là ngay cả chữ thường. 630 00:28:07,010 --> 00:28:10,790 Giới hạn mình vào ít một đường nhỏ z. 631 00:28:10,790 --> 00:28:12,730 Bây giờ điều này là khá phức tạp. 632 00:28:12,730 --> 00:28:15,230 Nhưng vào cuối ngày, điều này là cách chúng ta, một khi có một thời gian, 633 00:28:15,230 --> 00:28:16,460 phải thực hiện những điều. 634 00:28:16,460 --> 00:28:19,780 Nếu tôi thay vì mở tận một, oh cảm ơn thần. 635 00:28:19,780 --> 00:28:22,320 Có một chức năng kêu gọi trên, có thể 636 00:28:22,320 --> 00:28:25,410 làm tất cả mọi thứ chúng tôi chỉ làm ở mức khá thấp. 637 00:28:25,410 --> 00:28:28,752 >> Bây giờ để trên là thú vị bởi vì nó được khai báo trong một tập tin, 638 00:28:28,752 --> 00:28:31,210 và bạn sẽ chỉ biết điều này bằng cách kiểm tra các tài liệu, 639 00:28:31,210 --> 00:28:35,730 hoặc được nói, nói, trong lớp học, nơi nó tồn tại, trong một tập tin gọi là ctype.h. 640 00:28:35,730 --> 00:28:37,630 Vì vậy, đây là một người bạn mới của chúng ta. 641 00:28:37,630 --> 00:28:40,750 Và trên thực hiện chính xác những tên gọi của nó. 642 00:28:40,750 --> 00:28:44,860 >> Bạn có thể vượt qua trong, như một tham số, giữa các dấu ngoặc đơn, một số nhân vật. 643 00:28:44,860 --> 00:28:48,390 Tôi sẽ vượt qua trong các nhân vật i'th s sử dụng các ký hiệu mới ưa thích của chúng tôi 644 00:28:48,390 --> 00:28:49,870 liên quan đến dấu ngoặc vuông. 645 00:28:49,870 --> 00:28:53,391 Và có nhiều phán đoán, sự trở lại là những gì giá trị để trên rõ ràng sẽ 646 00:28:53,391 --> 00:28:53,890 được? 647 00:28:53,890 --> 00:28:56,460 648 00:28:56,460 --> 00:28:57,770 Một bức thư vốn. 649 00:28:57,770 --> 00:28:58,620 Một bức thư vốn. 650 00:28:58,620 --> 00:29:02,330 >> Vì vậy, nếu tôi vượt qua trong một chữ thường, hy vọng, theo định nghĩa của để trên, 651 00:29:02,330 --> 00:29:05,600 nó sẽ trả lại một hoa A. Nếu không, 652 00:29:05,600 --> 00:29:08,590 nếu nó không phải là một chữ thường trong nơi đầu tiên, tôi chỉ in ra. 653 00:29:08,590 --> 00:29:10,800 Và quả thực, thông báo người bạn thứ hai ở đây. 654 00:29:10,800 --> 00:29:13,840 Không chỉ để tồn tại trên, nhưng là thấp hơn, 655 00:29:13,840 --> 00:29:16,200 thực sự trả lời câu hỏi đó cho tôi. 656 00:29:16,200 --> 00:29:19,730 >> Bây giờ bất cứ ai đã viết những điều này, 10s của năm trước, bạn biết những gì? 657 00:29:19,730 --> 00:29:23,840 Thực hiện để trên và là giảm sử dụng mã như thế này. 658 00:29:23,840 --> 00:29:27,270 Nhưng một lần nữa, phù hợp với ý tưởng này của trừu tượng đi, 659 00:29:27,270 --> 00:29:29,190 loại, cấp dưới chi tiết thực hiện. 660 00:29:29,190 --> 00:29:32,600 Và đứng trên vai người những người đến trước chúng ta, sử dụng chức năng 661 00:29:32,600 --> 00:29:36,300 giống như trên và thấp hơn, mà đủ tuyệt vời là độc đáo 662 00:29:36,300 --> 00:29:40,190 tên để nói những gì họ làm, là một mô hình tuyệt vời để áp dụng. 663 00:29:40,190 --> 00:29:44,040 >> Bây giờ, nó chỉ ra rằng nếu tôi đọc trang người đàn ông cho, nói, để trên, 664 00:29:44,040 --> 00:29:45,010 Tôi học được điều gì khác. 665 00:29:45,010 --> 00:29:46,890 Vì vậy, người đàn ông toupper. 666 00:29:46,890 --> 00:29:48,050 Đó là một chút áp đảo. 667 00:29:48,050 --> 00:29:51,110 Tuy nhiên, thông báo, đây là đề cập đến tập tin tiêu đề mà tôi nên sử dụng. 668 00:29:51,110 --> 00:29:54,460 Là một sang một bên, bởi vì đây là sai lầm, chức năng 669 00:29:54,460 --> 00:29:59,070 sử dụng int thay vì ký tự vì lý do kiểm tra lỗi. 670 00:29:59,070 --> 00:30:01,260 Nhưng có lẽ chúng tôi sẽ đến lại cho rằng trong tương lai. 671 00:30:01,260 --> 00:30:05,910 >> Nhưng chú ý, ở đây, để chuyển đổi trên thư c chữ hoa nếu có thể. 672 00:30:05,910 --> 00:30:07,674 Vì vậy, đó là khá đơn giản. 673 00:30:07,674 --> 00:30:09,340 Và bây giờ chúng ta hãy thêm một chút cụ thể. 674 00:30:09,340 --> 00:30:12,750 Chúng ta hãy nhìn vào một phần của trang người đàn ông dưới giá trị trả về. 675 00:30:12,750 --> 00:30:15,420 Giá trị trả lại là của bức thư được chuyển đổi. 676 00:30:15,420 --> 00:30:18,690 Hoặc c, nếu chuyển đổi là không thể, 677 00:30:18,690 --> 00:30:20,250 trong đó c là đầu vào ban đầu. 678 00:30:20,250 --> 00:30:24,140 Mà tôi biết từ đây, từ các tham số để để trên. 679 00:30:24,140 --> 00:30:25,780 >> Vì vậy, các takeaway của việc này là gì? 680 00:30:25,780 --> 00:30:28,060 Giá trị trả lại là của bức thư được chuyển đổi, 681 00:30:28,060 --> 00:30:32,110 hoặc c, bức thư ban đầu, nếu việc chuyển đổi là không thể. 682 00:30:32,110 --> 00:30:36,460 Do đó cải thiện những gì tôi có thể thực hiện để thiết kế mã của tôi không? 683 00:30:36,460 --> 00:30:37,146 Vâng? 684 00:30:37,146 --> 00:30:38,810 >> TƯỢNG: Bạn có thể loại bỏ các khác. 685 00:30:38,810 --> 00:30:40,810 DAVID J. Malan: Tôi có thể loại bỏ các báo cáo khác, 686 00:30:40,810 --> 00:30:42,510 và không chỉ các báo cáo khác. 687 00:30:42,510 --> 00:30:44,150 >> TƯỢNG: Bạn có thể loại bỏ [không nghe được]. 688 00:30:44,150 --> 00:30:46,310 >> DAVID J. Malan: Tôi có thể loại bỏ toàn bộ ngã ba 689 00:30:46,310 --> 00:30:48,209 trên đường, nếu khác hoàn toàn. 690 00:30:48,209 --> 00:30:50,250 Vì vậy, thực sự, hãy để tôi mở phiên bản cuối cùng này, 691 00:30:50,250 --> 00:30:55,540 tận-2 và nhận thấy như thế nào, nếu bạn sẽ, gợi cảm, các mã được bây giờ nhận được, 692 00:30:55,540 --> 00:31:00,040 trong đó tôi đã giảm từ một số bảy hay để dòng để chỉ bốn, 693 00:31:00,040 --> 00:31:03,850 các chức năng mà tôi đã định bằng cách gọi điện thoại đến phía trên, 694 00:31:03,850 --> 00:31:09,410 đi qua trong khung của tôi, và in ấn ra, với giữ chỗ% c, 695 00:31:09,410 --> 00:31:11,090 mà nhân vật cụ thể. 696 00:31:11,090 --> 00:31:14,560 >> Bây giờ tranh cãi, đó là một lỗi, hoặc ít nhất là nguy cơ lỗi, 697 00:31:14,560 --> 00:31:15,350 trong chương trình này. 698 00:31:15,350 --> 00:31:18,200 Vì vậy, chỉ để trở lại một takeaway trước đó, 699 00:31:18,200 --> 00:31:21,820 những gì nên tôi cũng có thể làm trong chương trình này để làm cho nó mạnh mẽ hơn, 700 00:31:21,820 --> 00:31:24,974 do đó không có cách nào nó có thể sụp đổ, ngay cả trong trường hợp hiếm hoi? 701 00:31:24,974 --> 00:31:26,390 TƯỢNG: Hãy chắc chắn rằng nó không phải là NULL. 702 00:31:26,390 --> 00:31:28,056 DAVID J. Malan: Hãy chắc chắn rằng nó không phải là NULL. 703 00:31:28,056 --> 00:31:31,030 Vì vậy, thực sự, để làm cho siêu này thích hợp, tôi phải làm một cái gì đó như thế nào, 704 00:31:31,030 --> 00:31:35,300 nếu không phải là NULL, sau đó đi trước và thực hiện 705 00:31:35,300 --> 00:31:38,470 các dòng mã, mà Sau đó tôi có thể thụt như thế, 706 00:31:38,470 --> 00:31:39,870 và sau đó đưa vào cú đúp thân của tôi. 707 00:31:39,870 --> 00:31:41,550 Vì vậy, tốt buộc lại với nhau của hai ý tưởng. 708 00:31:41,550 --> 00:31:42,429 Vâng? 709 00:31:42,429 --> 00:31:44,470 TƯỢNG: bạn có thể sử dụng làm một vòng lặp trong khi, để thay thế? 710 00:31:44,470 --> 00:31:47,270 DAVID J. Malan: Có thể Tôi làm một việc phải làm trong khi vòng lặp? 711 00:31:47,270 --> 00:31:50,020 TƯỢNG: --Bạn muốn chắc chắn mà bạn thực sự [không nghe được]. 712 00:31:50,020 --> 00:31:51,728 DAVID J. Malan: Có thể bạn sử dụng trong khi làm? 713 00:31:51,728 --> 00:31:52,450 Câu trả lời ngắn, không có. 714 00:31:52,450 --> 00:31:54,700 Bởi vì bạn đang về để giới thiệu một trường hợp góc. 715 00:31:54,700 --> 00:31:56,660 Nếu chuỗi là số không dài. 716 00:31:56,660 --> 00:31:59,600 Nếu ví dụ, tôi chỉ cần nhấn Nhập, mà không bao giờ gõ Zamyla. 717 00:31:59,600 --> 00:32:02,490 Tôi sẽ trao lại cho bạn một thực tế chuỗi, như chúng ta cuối cùng sẽ thấy, 718 00:32:02,490 --> 00:32:03,780 có không ký tự. 719 00:32:03,780 --> 00:32:05,630 Nó vẫn là một chuỗi, nó chỉ là siêu ngắn. 720 00:32:05,630 --> 00:32:07,960 Nhưng nếu bạn sử dụng một do thời gian, bạn đang đi một cách mù quáng 721 00:32:07,960 --> 00:32:10,050 cố gắng làm điều gì đó với tôn trọng đến chuỗi, 722 00:32:10,050 --> 00:32:12,537 và không có gì đang xảy ra ở đó. 723 00:32:12,537 --> 00:32:18,607 >> TƯỢNG: Vâng, nếu bạn đã làm làm [không nghe được] trong khi s-- 724 00:32:18,607 --> 00:32:21,190 DAVID J. Malan: Oh tôi nhìn thấy, giữ nhận được một chuỗi từ người sử dụng. 725 00:32:21,190 --> 00:32:23,525 Vì vậy, câu trả lời ngắn, bạn có thể, và tiếp tục làm phiền 726 00:32:23,525 --> 00:32:26,150 họ cung cấp cho bạn một chuỗi đó là đủ ngắn để phù hợp trong bộ nhớ. 727 00:32:26,150 --> 00:32:26,700 Hoàn toàn. 728 00:32:26,700 --> 00:32:27,630 Tôi chỉ quyết định không. 729 00:32:27,630 --> 00:32:30,505 Nếu họ không cho tôi chuỗi tôi muốn, tôi bỏ, tôi bỏ cuộc. 730 00:32:30,505 --> 00:32:33,260 Nhưng hoàn toàn, cho mục đích đó, bạn hoàn toàn có thể làm điều đó. 731 00:32:33,260 --> 00:32:37,500 >> Vì vậy, tập tin tiêu đề của thư viện mà chúng tôi bây giờ là quen thuộc với những, đây. 732 00:32:37,500 --> 00:32:41,550 Tiêu chuẩn I / O, CS50.h, string.h, ctype.h, và có, thực sự, những người khác. 733 00:32:41,550 --> 00:32:44,460 Một số bạn đã phát hiện ra thư viện toán học trong math.h. 734 00:32:44,460 --> 00:32:48,200 Nhưng hãy để tôi giới thiệu với bạn, bây giờ, để nguồn tài nguyên này là nhân viên CS50, Davin, 735 00:32:48,200 --> 00:32:50,630 và Rob, và Gabe đặc biệt đã đặt lại với nhau. 736 00:32:50,630 --> 00:32:52,630 Điều đó sẽ sớm liên kết trên trang web của khóa học. 737 00:32:52,630 --> 00:32:54,870 Nó được gọi là CS50 tham khảo. 738 00:32:54,870 --> 00:32:58,230 >> Mà chỉ để cung cấp cho bạn một cách nhanh chóng hương vị của nó, hoạt động như sau. 739 00:32:58,230 --> 00:33:00,740 Hãy để tôi đi đến reference.cs50.net. 740 00:33:00,740 --> 00:33:02,990 Bạn sẽ nhìn thấy trên tay trái bên kia một danh sách áp đảo 741 00:33:02,990 --> 00:33:04,595 các chức năng đi kèm với c. 742 00:33:04,595 --> 00:33:07,790 Nhưng nếu tôi quan tâm, cho thời điểm này, về một cái gì đó giống như strlen, 743 00:33:07,790 --> 00:33:08,746 Tôi có thể đánh nó ở đó. 744 00:33:08,746 --> 00:33:10,870 Nó lọc xuống danh sách để chỉ những gì tôi quan tâm. 745 00:33:10,870 --> 00:33:11,940 Tôi sẽ nhấp vào nó. 746 00:33:11,940 --> 00:33:14,740 Và bây giờ ở bên trái, bạn sẽ thấy những gì chúng tôi hy vọng 747 00:33:14,740 --> 00:33:18,290 là một đơn giản hơn, con người thân thiện với lời giải thích như thế nào 748 00:33:18,290 --> 00:33:19,170 Chức năng này hoạt động. 749 00:33:19,170 --> 00:33:20,600 >> Trả về độ dài của một chuỗi. 750 00:33:20,600 --> 00:33:24,060 Dưới đây là một tóm tắt, đây là cách bạn sử dụng nó trong điều khoản của các tập tin tiêu đề, 751 00:33:24,060 --> 00:33:27,430 và về những gì chức năng trông giống như trong điều khoản của đối số của nó. 752 00:33:27,430 --> 00:33:30,250 Và sau đó ở đây, lợi nhuận chiều dài của một chuỗi. 753 00:33:30,250 --> 00:33:34,280 Nhưng đối với những người bạn thoải mái hơn, bạn thực sự có thể bấm thoải mái hơn, 754 00:33:34,280 --> 00:33:37,070 và nội dung này trang, bây giờ, sẽ thay đổi 755 00:33:37,070 --> 00:33:41,660 là các giá trị mặc định của những gì bạn sẽ có được bằng cách sử dụng trang người đàn ông. 756 00:33:41,660 --> 00:33:44,100 >> Nói cách khác, CS50 tham chiếu là một đơn giản hóa 757 00:33:44,100 --> 00:33:46,220 trang người đàn ông của các nhân viên, cho học sinh. 758 00:33:46,220 --> 00:33:49,320 Đặc biệt, những người kém thoải mái và ở giữa, để bạn 759 00:33:49,320 --> 00:33:51,660 không cần phải cố gắng để bọc tâm trí của bạn xung quanh, thẳng thắn, 760 00:33:51,660 --> 00:33:55,030 một số cú pháp khá khó hiểu và đôi khi tài liệu hướng dẫn. 761 00:33:55,030 --> 00:33:57,650 >> Vì vậy, giữ cho rằng trong tâm trí trong những ngày tới. 762 00:33:57,650 --> 00:33:59,560 Vì vậy, ở đây, một lần nữa, là một Zamyla. 763 00:33:59,560 --> 00:34:03,255 Bây giờ hãy đặt một câu hỏi đó là nhiều hơn một chút con người có thể truy cập. 764 00:34:03,255 --> 00:34:05,380 Nhờ Chang, người được in nhiều voi 765 00:34:05,380 --> 00:34:07,090 không ngừng trong vài ngày qua. 766 00:34:07,090 --> 00:34:09,730 Chúng tôi có một cơ hội để cung cấp cho ít nhất một trong số họ đi. 767 00:34:09,730 --> 00:34:13,239 Nếu chúng ta có thể nhận được chỉ là một tình nguyện viên đến trên lên để vẽ trên màn hình. 768 00:34:13,239 --> 00:34:14,530 Làm thế nào về đây? 769 00:34:14,530 --> 00:34:15,340 >> Nào lên. 770 00:34:15,340 --> 00:34:16,720 Tên của bạn là gì? 771 00:34:16,720 --> 00:34:17,219 ALEX: Alex. 772 00:34:17,219 --> 00:34:17,760 DAVID J. Malan: Alex. 773 00:34:17,760 --> 00:34:18,259 Tất cả các quyền. 774 00:34:18,259 --> 00:34:19,388 Alex, đến ngày lên. 775 00:34:19,388 --> 00:34:21,679 Chúng tôi về để xem bạn chữ viết tay trên màn hình ở đây. 776 00:34:21,679 --> 00:34:24,325 777 00:34:24,325 --> 00:34:25,570 Được rồi, rất vui được gặp bạn. 778 00:34:25,570 --> 00:34:26,429 >> ALEX: Nice bạn gặp các bạn. 779 00:34:26,429 --> 00:34:27,512 >> DAVID J. Malan: Được rồi. 780 00:34:27,512 --> 00:34:28,969 Vì vậy, tập thể dục siêu đơn giản. 781 00:34:28,969 --> 00:34:31,440 Bar là không cao có được một con voi ngày nay. 782 00:34:31,440 --> 00:34:33,439 Bạn đang chơi vai trò của getString. 783 00:34:33,439 --> 00:34:35,980 Và tôi sẽ chỉ cho bạn biết chuỗi mà bạn đã nhận được. 784 00:34:35,980 --> 00:34:38,080 Và giả sử rằng bạn, getString, đã được gọi. 785 00:34:38,080 --> 00:34:42,480 Và con người, như tôi, có gõ vào Zamyla, Z-A-M-Y-L-A. 786 00:34:42,480 --> 00:34:45,650 Chỉ cần đi trước và viết Zamyla trên màn hình như thể bạn đã nhận nó 787 00:34:45,650 --> 00:34:47,250 và lưu trữ nó ở đâu đó trong bộ nhớ. 788 00:34:47,250 --> 00:34:52,370 789 00:34:52,370 --> 00:34:55,570 >> Để lại chỗ cho những gì sẽ có một vài words-- khác đó là OK, tiếp tục đi. 790 00:34:55,570 --> 00:34:59,620 >> [Cười] 791 00:34:59,620 --> 00:35:00,800 >> Vì vậy, Zamyla, xuất sắc. 792 00:35:00,800 --> 00:35:04,880 Vì vậy, bây giờ giả sử là bạn, getString, được gọi là một lần nữa. 793 00:35:04,880 --> 00:35:09,350 Và vì thế, tôi cung cấp cho bạn, tại bàn phím, với một cái tên khác, Belinda. 794 00:35:09,350 --> 00:35:17,560 795 00:35:17,560 --> 00:35:18,060 Tất cả các quyền. 796 00:35:18,060 --> 00:35:22,380 Và giờ đây, trong thời gian tới là getString gọi, tôi gõ vào một cái gì đó giống như Gabe, 797 00:35:22,380 --> 00:35:27,560 G-A-B-E. Bạn đang thực sự tham gia với trái tim bộ nhớ truy cập ngẫu nhiên. 798 00:35:27,560 --> 00:35:29,631 Đó là vẽ tất cả mọi thứ hoàn toàn ngẫu nhiên. 799 00:35:29,631 --> 00:35:30,130 OK. 800 00:35:30,130 --> 00:35:31,104 >> [Cười] 801 00:35:31,104 --> 00:35:32,520 Alex: Xin lỗi chữ viết tay của tôi là xấu. 802 00:35:32,520 --> 00:35:33,770 DAVID J. Malan: Không, đó là OK. 803 00:35:33,770 --> 00:35:40,480 Và làm thế nào về Rob, R-O-B. OK. 804 00:35:40,480 --> 00:35:41,020 Tốt. 805 00:35:41,020 --> 00:35:43,853 Vì vậy, tôi đã không dự đoán bạn sẽ loại đặt những điều trên theo cách này. 806 00:35:43,853 --> 00:35:45,020 Nhưng chúng ta có thể làm công việc này. 807 00:35:45,020 --> 00:35:48,810 Vì vậy, làm thế nào bạn đi về đặt ra các ký tự trong bộ nhớ? 808 00:35:48,810 --> 00:35:51,310 Nói cách khác, nếu chúng ta nghĩ màn hình màu đen hình chữ nhật này 809 00:35:51,310 --> 00:35:53,550 là đại diện cho một máy tính của RAM, hoặc bộ nhớ. 810 00:35:53,550 --> 00:35:55,850 >> Và nhớ RAM mà chỉ là một bó toàn bộ các byte, 811 00:35:55,850 --> 00:35:57,480 và byte là một bó toàn bộ các bit. 812 00:35:57,480 --> 00:35:59,350 Và bit là bằng cách nào đó thực hiện, thường 813 00:35:59,350 --> 00:36:01,119 với một số hình thức điện trong phần cứng. 814 00:36:01,119 --> 00:36:03,160 Vì vậy, đó là sắp xếp của phân lớp chúng tôi đã nói chuyện về 815 00:36:03,160 --> 00:36:04,510 và bây giờ có thể đưa cho các cấp. 816 00:36:04,510 --> 00:36:07,020 Làm thế nào để bạn đi về quyết định nơi để viết 817 00:36:07,020 --> 00:36:11,634 Rob so với so với Gabe Belinda so với Zamyla? 818 00:36:11,634 --> 00:36:14,020 >> Alex: Tôi chỉ cần làm nó trong đặt hàng mà bạn nói với tôi. 819 00:36:14,020 --> 00:36:15,650 >> DAVID J. Malan: Và đó là sự thật. 820 00:36:15,650 --> 00:36:20,100 Nhưng những gì chi phối nơi mà bạn đặt Tên Belinda và tên Gabe không? 821 00:36:20,100 --> 00:36:20,764 >> Alex: Không có gì? 822 00:36:20,764 --> 00:36:22,930 DAVID J. Malan: [LAUGHS] Vì vậy, hoạt động, đó là tốt. 823 00:36:22,930 --> 00:36:25,290 Vì vậy, máy tính là ít hơn trật tự hơn. 824 00:36:25,290 --> 00:36:29,000 Và như vậy khi chúng tôi ở lại đó implement-- chỉ một moment-- khi chúng tôi thực sự 825 00:36:29,000 --> 00:36:31,470 thực hiện một cái gì đó giống như GetString trong một máy tính, 826 00:36:31,470 --> 00:36:34,480 Zamyla có thể được đặt ra khá nhiều như bạn đã làm trên màn hình, có. 827 00:36:34,480 --> 00:36:36,660 >> Và những gì là chìa khóa để nhận thấy ở đây, những gì Alex đã làm, 828 00:36:36,660 --> 00:36:40,260 là có một loại phân giới cắm mốc trong từng lời nói, phải không? 829 00:36:40,260 --> 00:36:46,580 Bạn đã không viết Z-A-M-Y-L-A-B-E-L-I-N-D-A-G-A-B-- 830 00:36:46,580 --> 00:36:49,740 nói cách khác, có một số loại phân giới cắm mốc mà có vẻ là, 831 00:36:49,740 --> 00:36:52,370 loại, khoảng cách ngẫu nhiên giữa các từ khác nhau. 832 00:36:52,370 --> 00:36:54,120 Nhưng đó là tốt, bởi vì con người chúng ta có thể bây giờ 833 00:36:54,120 --> 00:36:56,470 hình dung rằng đây là những bốn dây khác nhau. 834 00:36:56,470 --> 00:36:59,540 Nó không phải chỉ là một chuỗi của rất nhiều nhân vật. 835 00:36:59,540 --> 00:37:04,190 Vì vậy, một máy tính, sau đó, trong khi đó, có thể mất một chuỗi như Zamyla, 836 00:37:04,190 --> 00:37:07,220 đưa từng của những chữ cái bên trong một byte của bộ nhớ. 837 00:37:07,220 --> 00:37:10,400 Tuy nhiên, con số này lớn hơn rất nhiều, tất nhiên, hơn sáu ký tự. 838 00:37:10,400 --> 00:37:11,690 >> Có một bó toàn bộ bộ nhớ RAM. 839 00:37:11,690 --> 00:37:15,330 Và thế là từ đó trở đi, điều này mạng lưới các hộp sẽ 840 00:37:15,330 --> 00:37:17,560 để đại diện cho những gì Alex chỉ đã làm ở đây trên màn hình. 841 00:37:17,560 --> 00:37:20,937 Và bây giờ, Alex, chúng tôi có thể cung cấp cho bạn một màu xanh hoặc một con voi màu da cam từ Chang. 842 00:37:20,937 --> 00:37:22,270 Alex: Tôi sẽ đưa một con voi màu xanh. 843 00:37:22,270 --> 00:37:23,120 DAVID J. Malan: Một con voi màu xanh. 844 00:37:23,120 --> 00:37:25,580 Vì vậy, một tràng pháo tay, nếu chúng ta có thể, cho Alex ở đây. 845 00:37:25,580 --> 00:37:26,100 >> [Vỗ tay] 846 00:37:26,100 --> 00:37:26,766 >> Alex: Cảm ơn bạn. 847 00:37:26,766 --> 00:37:28,820 DAVID J. Malan: Cảm ơn bạn. 848 00:37:28,820 --> 00:37:36,230 Vì vậy, các takeaway là, mặc dù mô hình loại thay đổi theo thời gian, ở đây 849 00:37:36,230 --> 00:37:40,430 trên diễn đàn, đã có này phân định ranh giới giữa các dây khác nhau 850 00:37:40,430 --> 00:37:42,610 Alex đã cho chúng ta. 851 00:37:42,610 --> 00:37:45,230 Bây giờ máy tính, thẳng thắn, có thể làm điều tương tự. 852 00:37:45,230 --> 00:37:48,210 Họ có thể loại tiếng tom chuỗi bất cứ nơi nào trong bộ nhớ RAM. 853 00:37:48,210 --> 00:37:50,710 Ở đây, ở đây, ở đây, ở đây. 854 00:37:50,710 --> 00:37:52,020 >> Họ có thể làm chính xác điều đó. 855 00:37:52,020 --> 00:37:54,280 Nhưng, tất nhiên, đó là lẽ không phải là kế hoạch tốt nhất. 856 00:37:54,280 --> 00:37:54,780 Phải không? 857 00:37:54,780 --> 00:37:57,340 Nếu tôi tiếp tục hỏi Alex có tên, có lẽ ông muốn 858 00:37:57,340 --> 00:38:01,370 đặt xuống một số chi tiết ở đây, có thể lên ở đây, ở đây, ở đây, cuối cùng 859 00:38:01,370 --> 00:38:02,211 ở đây. 860 00:38:02,211 --> 00:38:05,460 Nhưng với một chút kế hoạch, chắc chắn, chúng ta có thể đặt những điều trên sạch hơn. 861 00:38:05,460 --> 00:38:07,350 Và quả thực, đó là những gì một máy tính thực hiện. 862 00:38:07,350 --> 00:38:10,720 >> Tuy nhiên, nắm bắt được rằng nếu chuỗi tiếp theo tôi nhận được 863 00:38:10,720 --> 00:38:14,050 sau khi Zamyla là một cái gì đó như Belinda, 864 00:38:14,050 --> 00:38:17,929 đề xuất mà chúng ta có thể viết b thư liên quan đến mạng lưới này với? 865 00:38:17,929 --> 00:38:18,720 Bạn sẽ đi đâu? 866 00:38:18,720 --> 00:38:21,480 Ở bên phải của một, dưới z, dưới một? 867 00:38:21,480 --> 00:38:23,204 Những gì bản năng đầu tiên của bạn sẽ là gì? 868 00:38:23,204 --> 00:38:24,120 TƯỢNG: Dưới z. 869 00:38:24,120 --> 00:38:25,100 DAVID J. Malan: Vì vậy, dưới đây z. 870 00:38:25,100 --> 00:38:26,530 Và đó là khá đơn giản, phải không? 871 00:38:26,530 --> 00:38:29,321 Đó là loại gọn gàng, đó là những gì chúng ta làm trên bàn phím khi nhấn Enter, 872 00:38:29,321 --> 00:38:31,770 hoặc email khi thực hiện một danh sách liệt kê của sự vật. 873 00:38:31,770 --> 00:38:34,310 Nhưng thực tế là máy tính cố gắng để được hiệu quả hơn, 874 00:38:34,310 --> 00:38:37,170 và chắc chắn nhồi nhét càng nhiều dữ liệu vào bộ nhớ RAM càng tốt, 875 00:38:37,170 --> 00:38:38,890 để bạn không lãng phí bất kỳ byte. 876 00:38:38,890 --> 00:38:41,545 Vì vậy, bạn không nên lãng phí bất kỳ màn hình bất động sản. 877 00:38:41,545 --> 00:38:44,170 Và vấn đề, tuy nhiên, là nếu chúng ta theo nghĩa đen đưa thư 878 00:38:44,170 --> 00:38:49,940 b sau một, làm thế nào chúng ta sẽ biết tên của Zamyla kết thúc 879 00:38:49,940 --> 00:38:51,840 và tên của Belinda bắt đầu? 880 00:38:51,840 --> 00:38:55,270 Vì vậy, bạn con người chỉ là đề xuất, tốt, nhấn phím Enter, về cơ bản. 881 00:38:55,270 --> 00:38:56,410 Đặt nó xuống dưới đây. 882 00:38:56,410 --> 00:38:59,750 Hoặc thậm chí là Alex đã làm, chỉ cần bắt đầu bằng văn bản tên tiếp theo dưới đây trước đó, 883 00:38:59,750 --> 00:39:01,583 và dưới đây là một điều đó, và thì dưới đây là một. 884 00:39:01,583 --> 00:39:02,510 Đó là một cách trực quan. 885 00:39:02,510 --> 00:39:05,960 >> Máy tính có một dấu hiệu trực quan, nhưng đó là một chút gọn gàng hơn. 886 00:39:05,960 --> 00:39:07,840 Đó là nhân vật sôi nổi này. 887 00:39:07,840 --> 00:39:11,890 Dấu gạch chéo ngược 0, mà có lẽ là gợi nhớ đến dấu gạch chéo ngược n, 888 00:39:11,890 --> 00:39:12,640 và vân vân, bây giờ. 889 00:39:12,640 --> 00:39:14,120 Các trình tự thoát đặc biệt. 890 00:39:14,120 --> 00:39:19,120 Dấu gạch chéo ngược 0 là cách đại diện cho tám số không bit liên tiếp. 891 00:39:19,120 --> 00:39:22,000 0000 0000. 892 00:39:22,000 --> 00:39:26,130 >> Cách bạn thể hiện rằng không phải là nhấn số không trên bàn phím của bạn, 893 00:39:26,130 --> 00:39:28,140 bởi vì trong thực tế đó là một ASCII char. 894 00:39:28,140 --> 00:39:30,990 Nó trông giống như một số, nhưng thực sự là một số thập phân 895 00:39:30,990 --> 00:39:35,910 đại diện cho tròn Glyph, kiểu chữ tròn. 896 00:39:35,910 --> 00:39:38,410 Trong khi đó, dấu gạch chéo ngược không có nghĩa là, theo nghĩa đen 897 00:39:38,410 --> 00:39:40,700 đưa tám byte ở đây cho tôi. 898 00:39:40,700 --> 00:39:42,136 >> Vì vậy, đây là một việc khó. 899 00:39:42,136 --> 00:39:44,260 Chúng ta có thể đã sử dụng bất kỳ mô hình bit, nhưng thế giới 900 00:39:44,260 --> 00:39:46,610 quyết định một số năm trước đây, mà đại diện cho 901 00:39:46,610 --> 00:39:49,710 kết thúc của một chuỗi trong bộ nhớ, chỉ cần đặt một bó toàn bộ số không. 902 00:39:49,710 --> 00:39:51,000 Bởi vì chúng ta có thể phát hiện. 903 00:39:51,000 --> 00:39:54,790 Bây giờ có nghĩa là không có bức thư của bảng chữ cái có thể được biểu diễn bằng số không. 904 00:39:54,790 --> 00:39:58,480 >> Nhưng đó là OK, chúng ta đã thấy mà chúng ta đang sử dụng trên 65 trong 97 trở lên. 905 00:39:58,480 --> 00:40:00,290 Chúng tôi đã không nhận được bất cứ nơi nào đóng cửa cho tất cả các số không. 906 00:40:00,290 --> 00:40:03,040 907 00:40:03,040 --> 00:40:06,540 Vì vậy, Belinda trong bộ nhớ của máy tính thực sự là sẽ đi đây. 908 00:40:06,540 --> 00:40:09,764 Tôi đã vẽ nó màu vàng chỉ để thu hút sự chú ý của chúng tôi với nó. 909 00:40:09,764 --> 00:40:11,680 Và thông báo, quá, điều này là hoàn toàn tùy ý. 910 00:40:11,680 --> 00:40:12,680 Tôi đã rút ra nó như là một mạng lưới. 911 00:40:12,680 --> 00:40:14,460 Giống như, RAM chỉ là một số đối tượng vật lý. 912 00:40:14,460 --> 00:40:17,300 Nó không nhất thiết phải hàng và cột, mỗi gia nhập. 913 00:40:17,300 --> 00:40:20,490 Nó chỉ có một bó toàn bộ các byte thực hiện trong phần cứng bằng cách nào đó. 914 00:40:20,490 --> 00:40:22,817 Nhưng nếu sau khi Belinda tôi gõ vào tên của Gabe, 915 00:40:22,817 --> 00:40:25,650 anh ta sẽ kết thúc ở đây trong bộ nhớ, và nếu tôi gõ vào tên của Daven, 916 00:40:25,650 --> 00:40:27,316 Ví dụ, anh ấy sẽ kết thúc ở đây. 917 00:40:27,316 --> 00:40:29,310 Và tôi có thể tiếp tục ghi tên nhiều hơn. 918 00:40:29,310 --> 00:40:32,100 >> Thật không may, nếu tôi cố gắng viết tên siêu dài, 919 00:40:32,100 --> 00:40:33,730 Tôi cuối cùng đã có thể chạy ra khỏi bộ nhớ. 920 00:40:33,730 --> 00:40:37,810 Trong trường hợp này, là getString sẽ trở về NULL, như chúng tôi đã nói. 921 00:40:37,810 --> 00:40:41,720 Nhưng may mắn thay, ít nhất là trong hình ảnh này ở đây, chúng tôi đã không nhận được khá xa. 922 00:40:41,720 --> 00:40:45,860 >> Bây giờ những gì là tốt đẹp là điều này ý tưởng chung của điều trị điều 923 00:40:45,860 --> 00:40:49,720 như là trong hộp là đại diện của một tính năng của C 924 00:40:49,720 --> 00:40:52,690 và rất nhiều ngôn ngữ, được biết đến như là một mảng. 925 00:40:52,690 --> 00:40:55,490 Một mảng là một kiểu dữ liệu. 926 00:40:55,490 --> 00:40:57,380 Đó là một cấu trúc dữ liệu, nếu bạn sẽ. 927 00:40:57,380 --> 00:41:01,160 Cấu trúc theo ý nghĩa của nó thực sự, loại, trông như một cái hộp, ít nhất 928 00:41:01,160 --> 00:41:02,320 trong mắt của tâm trí của bạn. 929 00:41:02,320 --> 00:41:09,680 Một mảng là một tiếp giáp chuỗi các kiểu dữ liệu giống nhau, 930 00:41:09,680 --> 00:41:11,330 trở lại trở lại để trở lại trở lại. 931 00:41:11,330 --> 00:41:14,720 >> Vì vậy, một chuỗi, trong khác từ, là một mảng ký tự. 932 00:41:14,720 --> 00:41:16,120 Một mảng các ký tự. 933 00:41:16,120 --> 00:41:19,070 Nhưng hóa ra bạn có thể có mảng chùm của sự vật. 934 00:41:19,070 --> 00:41:21,870 Trong thực tế, chúng ta có thể đặt thậm chí số trong một mảng. 935 00:41:21,870 --> 00:41:23,920 Vì vậy, hình thức mà chúng ta sẽ bắt đầu 936 00:41:23,920 --> 00:41:26,590 khai báo dữ liệu này cấu trúc được biết đến như là một mảng 937 00:41:26,590 --> 00:41:28,250 cũng sẽ sử dụng dấu ngoặc vuông. 938 00:41:28,250 --> 00:41:31,500 Tuy nhiên, các dấu ngoặc vuông sẽ có ý nghĩa khác nhau trong bối cảnh này. 939 00:41:31,500 --> 00:41:33,450 >> Và chúng ta hãy xem nó như sau. 940 00:41:33,450 --> 00:41:36,780 Giả sử rằng tôi đã mở lên một tập tin mới ở đây. 941 00:41:36,780 --> 00:41:38,535 Và tôi tiết kiệm này là ages.c. 942 00:41:38,535 --> 00:41:41,280 943 00:41:41,280 --> 00:41:43,470 Và tôi sẽ tiết kiệm này trong thư mục của tôi ở đây. 944 00:41:43,470 --> 00:41:46,130 Và bây giờ tôi sẽ đi trước và bắt đầu gõ một cái gì đó 945 00:41:46,130 --> 00:41:53,940 như bao gồm CS50.h, bao gồm stdio.h, int void main. 946 00:41:53,940 --> 00:41:57,370 Và sau đó bên trong ở đây, tôi muốn lần đầu tiên có một int gọi là tuổi tác. 947 00:41:57,370 --> 00:42:01,371 >> Và tôi sẽ sử dụng để có được một int từ người sử dụng so với tuổi của mình. 948 00:42:01,371 --> 00:42:04,620 Tuy nhiên, chương trình này có nghĩa là để được sử dụng bởi nhiều người, cho bất cứ ngữ cảnh. 949 00:42:04,620 --> 00:42:05,490 Tôi đã có một dòng người. 950 00:42:05,490 --> 00:42:08,281 Tất cả đều phải nhập của họ tuổi có thể một số, tôi không biết, 951 00:42:08,281 --> 00:42:10,530 cạnh tranh, hoặc sự kiện rằng họ đã đến cho. 952 00:42:10,530 --> 00:42:13,030 Vì vậy, người kế tiếp, tôi cần một biến khác. 953 00:42:13,030 --> 00:42:15,790 >> Bởi vì nếu tôi chỉ làm tuổi được getInt, đó là 954 00:42:15,790 --> 00:42:18,500 sẽ clobber, hoặc ghi đè lên tuổi người trước. 955 00:42:18,500 --> 00:42:19,760 Vì vậy, đó là không tốt. 956 00:42:19,760 --> 00:42:21,790 Vì vậy, bản năng đầu tiên của tôi có thể được, oh, được rồi, 957 00:42:21,790 --> 00:42:26,260 nếu tôi muốn để có được nhiều nhân dân ages-- chúng ta hãy gọi age1 này, 958 00:42:26,260 --> 00:42:31,280 int Age2 được int, int age3 được getInt. 959 00:42:31,280 --> 00:42:35,340 Và bây giờ tôi sẽ sử dụng một số mã giả ở đây. 960 00:42:35,340 --> 00:42:37,679 >> Làm điều gì đó với những con số. 961 00:42:37,679 --> 00:42:40,470 Chúng tôi sẽ để lại cho một ngày khác gì chúng ta đang làm gì ở đó, bởi vì chúng ta chỉ 962 00:42:40,470 --> 00:42:44,200 quan tâm trong thời điểm này về age1, Age2, age3. 963 00:42:44,200 --> 00:42:46,450 Thật không may, một khi tôi biên dịch chương trình này 964 00:42:46,450 --> 00:42:51,140 và đặt nó ở phía trước của người sử dụng thực tế, thiết kế về cơ bản là những gì người nghèo 965 00:42:51,140 --> 00:42:53,890 quyết định tôi dường như đã thực hiện? 966 00:42:53,890 --> 00:42:54,624 Vâng? 967 00:42:54,624 --> 00:42:55,499 TƯỢNG: [không nghe được] 968 00:42:55,499 --> 00:42:58,071 969 00:42:58,071 --> 00:42:59,820 DAVID J. Malan: Yeah, Tôi thậm chí còn không cố gắng 970 00:42:59,820 --> 00:43:02,028 để tìm ra bao nhiêu tuổi Tôi thực sự quan tâm? 971 00:43:02,028 --> 00:43:05,380 Nếu tôi có ít hơn ba người dân ở đây, và do đó ít hơn ba tuổi, 972 00:43:05,380 --> 00:43:07,260 Tôi vẫn hy vọng một cách mù quáng ba. 973 00:43:07,260 --> 00:43:08,720 Thiên Chúa cấm bốn người xuất hiện. 974 00:43:08,720 --> 00:43:10,990 Chương trình của tôi thậm chí sẽ không chỉ hỗ trợ họ. 975 00:43:10,990 --> 00:43:13,280 >> Và vì vậy đây, câu chuyện dài Tóm lại, không phải là một thói quen tốt. 976 00:43:13,280 --> 00:43:13,780 Phải không? 977 00:43:13,780 --> 00:43:16,530 Tôi đã cơ bản sao chép và dán mã và chỉ cần tinh chỉnh 978 00:43:16,530 --> 00:43:17,430 các tên biến. 979 00:43:17,430 --> 00:43:22,410 Và, thần của tôi, nếu bạn đã có, chứ không phải ba lứa tuổi, nhưng 10, hoặc 100, hoặc thậm chí 6500 980 00:43:22,410 --> 00:43:23,820 sinh viên đại học, ví dụ. 981 00:43:23,820 --> 00:43:26,950 Điều này sẽ không được đặc biệt đang thanh lịch, hoặc bền vững. 982 00:43:26,950 --> 00:43:29,200 Bạn sẽ phải ghi lại các chương trình mỗi khi 983 00:43:29,200 --> 00:43:30,760 số điện thoại của người dân thay đổi. 984 00:43:30,760 --> 00:43:35,090 >> Vì vậy, may mắn thay, trong thực tế của chúng tôi tập tin ages.c cho ngày hôm nay, 985 00:43:35,090 --> 00:43:36,970 chúng ta có một giải pháp thông minh hơn. 986 00:43:36,970 --> 00:43:39,800 Đầu tiên, tôi sẽ mượn xây dựng, chúng tôi đã sử dụng một vài lần, 987 00:43:39,800 --> 00:43:43,744 này làm trong khi vòng lặp, để có được số lượng người trong phòng. 988 00:43:43,744 --> 00:43:46,910 Tôi chỉ cần đi làm phiền người sử dụng, một lần nữa và một lần nữa, cho đến khi người đó mang lại cho tôi 989 00:43:46,910 --> 00:43:49,260 một giá trị của n đó là một số nguyên dương. 990 00:43:49,260 --> 00:43:51,590 >> Tôi có thể sử dụng, cuối cùng thời gian của chiều hướng tích cực int. 991 00:43:51,590 --> 00:43:53,720 Nhưng chúng ta không có mà thật, vì vậy tôi đã đi trước 992 00:43:53,720 --> 00:43:55,660 và đang thực hiện ý tưởng này. 993 00:43:55,660 --> 00:43:58,410 Bây giờ ở đây, đây là thủ thuật mới. 994 00:43:58,410 --> 00:44:02,260 Trong dòng 27, như các ý kiến trong dòng 26 cho thấy, 995 00:44:02,260 --> 00:44:05,180 khai báo một mảng trong đó để lưu trữ tuổi của tất cả mọi người. 996 00:44:05,180 --> 00:44:09,320 >> Vì vậy, nếu bạn muốn nhận được, không phải là một int, không hai ints, nhưng một bó toàn bộ int. 997 00:44:09,320 --> 00:44:13,800 Cụ thể số nguyên n, n là might có ba, có thể là 100, có thể là 1.000. 998 00:44:13,800 --> 00:44:17,570 Cú pháp, khá đơn giản, là để nói rằng, những dữ liệu loại nào bạn muốn? 999 00:44:17,570 --> 00:44:19,620 Những gì bạn muốn gọi rằng đoạn bộ nhớ? 1000 00:44:19,620 --> 00:44:23,530 Những gì bạn muốn gọi điện lưới trông giống như những bức tranh này? 1001 00:44:23,530 --> 00:44:27,700 >> Và trong dấu ngoặc ở đây, bạn nói lớn như thế nào bạn muốn mảng được. 1002 00:44:27,700 --> 00:44:30,450 Và như vậy trước đó, khi tôi nói cú pháp là một chút khác nhau ở đây, 1003 00:44:30,450 --> 00:44:33,614 chúng tôi vẫn sử dụng dấu ngoặc vuông, nhưng khi tôi đang khai báo một mảng, 1004 00:44:33,614 --> 00:44:35,530 số bên trong dấu ngoặc vuông phương tiện 1005 00:44:35,530 --> 00:44:37,610 lớn làm thế nào để bạn muốn mảng được. 1006 00:44:37,610 --> 00:44:42,490 >> Ngược lại, khi chúng ta đang sử dụng s khung tôi một chút thời gian trước, s, một chuỗi, 1007 00:44:42,490 --> 00:44:46,820 thực sự là một mảng các ký tự, nhưng khi bạn không khai báo một biến, 1008 00:44:46,820 --> 00:44:49,760 như với từ khóa này ở đây, bạn chỉ đơn giản nhận được 1009 00:44:49,760 --> 00:44:54,280 một chỉ số cụ thể, một cụ thể phần tử từ mảng đó. 1010 00:44:54,280 --> 00:44:57,090 Một khi chúng ta biết rằng, phần còn lại điều này là đơn giản. 1011 00:44:57,090 --> 00:45:00,765 Nếu mới lần đầu tiên tôi sẽ in ra tuổi số người tôi là những gì. 1012 00:45:00,765 --> 00:45:03,890 Nơi mà tôi chỉ nói một số người, người thứ hai, người thứ ba. 1013 00:45:03,890 --> 00:45:06,306 >> Và tôi chỉ cần làm phép tính số học, để mọi người như bình thường, 1014 00:45:06,306 --> 00:45:09,030 chúng tôi đếm từ một cho điều này chương trình, chứ không phải từ con số không. 1015 00:45:09,030 --> 00:45:13,620 Sau đó, tôi gọi getInt, nhưng tôi lưu trữ câu trả lời trong độ tuổi từ trong ngoặc tôi. 1016 00:45:13,620 --> 00:45:16,610 Đó là tuổi i'th trong mảng. 1017 00:45:16,610 --> 00:45:21,640 Vì vậy, trong khi lần cuối cùng chúng tôi đã xử lý các hộp như ký tự cho tên của Zamyla, 1018 00:45:21,640 --> 00:45:22,490 và những người khác. 1019 00:45:22,490 --> 00:45:26,530 Bây giờ, các ô đại diện cho 32 bit, hay bốn byte 1020 00:45:26,530 --> 00:45:29,510 trong đó chúng ta có thể lưu trữ một int, int, int. 1021 00:45:29,510 --> 00:45:31,890 Tất cả điều đó, một lần nữa, là cùng kiểu dữ liệu. 1022 00:45:31,890 --> 00:45:33,890 >> Bây giờ tôi làm điều gì đó ngớ ngẩn, như thời gian trôi qua, chỉ 1023 00:45:33,890 --> 00:45:35,510 để biện minh cho viết chương trình này. 1024 00:45:35,510 --> 00:45:40,050 Và sau đó xuống đây, tôi một lần nữa lặp lại trong mảng nói một năm kể từ bây giờ, 1025 00:45:40,050 --> 00:45:43,090 số người một ý có một cái gì đó tuổi. 1026 00:45:43,090 --> 00:45:45,010 Và để tìm ra rằng math-- tôi là, đây 1027 00:45:45,010 --> 00:45:49,260 không phải là rất phức tạp arithmetic-- Tôi chỉ cần thêm một tuổi của họ. 1028 00:45:49,260 --> 00:45:51,240 Chỉ cần để chứng minh, một lần nữa, điều này. 1029 00:45:51,240 --> 00:45:57,910 >> Cũng giống như tôi có thể chỉ số thành một chuỗi, s, vì vậy tôi có thể chỉ vào một loạt các lứa tuổi, 1030 00:45:57,910 --> 00:45:59,950 như thế đó. 1031 00:45:59,950 --> 00:46:03,340 Vì vậy, nơi là điều này sẽ được tham gia với chúng tôi? 1032 00:46:03,340 --> 00:46:07,070 Vì vậy, chúng ta sẽ thấy, cuối cùng, một vài điều trong những ngày tới. 1033 00:46:07,070 --> 00:46:09,510 Một, tất cả thời gian này, khi viết chương trình của riêng bạn, 1034 00:46:09,510 --> 00:46:11,239 như Mario, tham lam, tín dụng. 1035 00:46:11,239 --> 00:46:13,780 Bạn đã nhập tên của chương trình và hit Enter. 1036 00:46:13,780 --> 00:46:15,610 Và sau đó nhận được đầu vào của người dùng. 1037 00:46:15,610 --> 00:46:18,137 >> Với getString, getInt, getLongLong, hoặc tương tự. 1038 00:46:18,137 --> 00:46:20,720 Nhưng nó chỉ ra rằng hỗ trợ C một cái gì đó gọi là dòng lệnh 1039 00:46:20,720 --> 00:46:25,740 lập luận, đó là sẽ để cho chúng tôi thực sự có được những lời mà bạn gõ, 1040 00:46:25,740 --> 00:46:28,570 tại dấu nhắc nhấp nháy, sau khi tên của chương trình của bạn. 1041 00:46:28,570 --> 00:46:31,430 >> Vì vậy, trong những ngày tới, bạn có thể gõ một cái gì đó như Caesar, 1042 00:46:31,430 --> 00:46:34,950 hoặc ./caesar số 13, sau đó. 1043 00:46:34,950 --> 00:46:36,070 Chúng tôi sẽ xem làm thế nào mà các công trình. 1044 00:46:36,070 --> 00:46:37,550 Bởi vì trên thực tế, trong Vấn đề đặt hai, chúng tôi 1045 00:46:37,550 --> 00:46:39,383 sẽ giới thiệu với bạn để một chút gì đó 1046 00:46:39,383 --> 00:46:42,360 gợi nhớ của Ralphie thách thức trước đó của bản đồ. 1047 00:46:42,360 --> 00:46:43,970 Nghệ thuật xáo trộn thông tin. 1048 00:46:43,970 --> 00:46:46,660 Điều này, trên thực tế, rất gợi nhớ về những gì đã làm Ralphie. 1049 00:46:46,660 --> 00:46:51,380 >> Đây là một ví dụ về mã hóa thuật toán gọi là ROT13, R-O-T 13. 1050 00:46:51,380 --> 00:46:54,910 Mà chỉ đơn giản có nghĩa là xoay các chữ cái trong bảng chữ cái 13 địa điểm. 1051 00:46:54,910 --> 00:46:58,309 Và nếu bạn làm điều đó, bạn sẽ thấy bây giờ những gì, có lẽ, một cụm từ quen thuộc. 1052 00:46:58,309 --> 00:47:01,100 Tuy nhiên, cách mà chúng ta đang sử dụng này, cuối cùng, thường là nhiều hơn nữa. 1053 00:47:01,100 --> 00:47:04,390 >> Trong P đặt hai, trong phiên bản tiêu chuẩn, bạn sẽ thực hiện một vài thuật toán mã hóa, 1054 00:47:04,390 --> 00:47:06,720 một gọi là Caesar, một gọi là Vigenere. 1055 00:47:06,720 --> 00:47:10,090 Cả hai đều quay thuật toán mã hóa, trong đó bằng cách nào đó bạn 1056 00:47:10,090 --> 00:47:11,826 biến một lá thư vào một thư khác nhau. 1057 00:47:11,826 --> 00:47:12,950 Và Caesar là siêu đơn giản. 1058 00:47:12,950 --> 00:47:16,220 Bạn có thêm một, bạn thêm 13, hoặc một số số lượng lên đến 26. 1059 00:47:16,220 --> 00:47:19,570 Vigenere nào đó trên một cơ sở cho mỗi thư. 1060 00:47:19,570 --> 00:47:22,140 Vì vậy, Vigenere, như bạn sẽ thấy trong suy nghi, an toàn hơn. 1061 00:47:22,140 --> 00:47:24,973 >> Nhưng vào cuối ngày, những gì bạn sẽ được thực hiện và P đặt hai, 1062 00:47:24,973 --> 00:47:29,050 là chìa khóa mà bạn sử dụng cả hai để mã hóa và giải mã. 1063 00:47:29,050 --> 00:47:32,160 Đề cập đến quá trình chuyển văn bản đơn giản, một số thông báo ban đầu, 1064 00:47:32,160 --> 00:47:34,490 vào văn bản cypher, mà là một cái gì đó mã hóa. 1065 00:47:34,490 --> 00:47:36,220 Và sau đó giải mã nó một lần nữa. 1066 00:47:36,220 --> 00:47:38,119 >> Trong ấn bản của hacker, Trong khi đó, bạn sẽ có 1067 00:47:38,119 --> 00:47:40,660 giao nhiệm vụ với một cái gì đó tương tự trong tinh thần, nơi mà chúng tôi sẽ cung cấp cho bạn 1068 00:47:40,660 --> 00:47:44,610 một tập tin, từ một Linux điển hình, hoặc Mac, Unix hoặc máy tính được gọi là Etsy 1069 00:47:44,610 --> 00:47:47,800 mật khẩu, trong đó có một toàn bộ loạt các tên người dùng và mật khẩu. 1070 00:47:47,800 --> 00:47:50,932 Và những mật khẩu có tất cả được mã hóa, hoặc băm, 1071 00:47:50,932 --> 00:47:53,140 có thể nói, đúng hơn như bạn sẽ thấy trong spec. 1072 00:47:53,140 --> 00:47:57,090 >> Và phiên bản hacker sẽ thách thức bạn dùng một đầu vào như thế này, 1073 00:47:57,090 --> 00:47:58,800 và nứt mật khẩu. 1074 00:47:58,800 --> 00:48:02,590 Đó là, để tìm ra những gì mật khẩu của con người thực sự là. 1075 00:48:02,590 --> 00:48:05,570 Bởi vì, trên thực tế, mật khẩu là thường không được lưu trữ trong rõ ràng, 1076 00:48:05,570 --> 00:48:08,260 và nói chung password nên khó đoán. 1077 00:48:08,260 --> 00:48:09,610 Đó không phải là thường xảy ra. 1078 00:48:09,610 --> 00:48:12,110 >> Và những gì tôi nghĩ rằng chúng tôi muốn làm là kết luận với một vài phút 1079 00:48:12,110 --> 00:48:15,160 liếc qua một đặc biệt sự lựa chọn tốt của mật khẩu 1080 00:48:15,160 --> 00:48:17,260 từ một bộ phim, bạn có thể nhớ lại một cách trìu mến. 1081 00:48:17,260 --> 00:48:18,915 Và nếu không, bạn nên thuê. 1082 00:48:18,915 --> 00:48:20,070 >> [VIDEO xem lại] 1083 00:48:20,070 --> 00:48:22,320 >> -Helmet, Bạn quái vật, những gì đang xảy ra? 1084 00:48:22,320 --> 00:48:24,240 Bạn đang làm gì với con gái của tôi không? 1085 00:48:24,240 --> 00:48:28,010 >> -Permit Tôi để giới thiệu bác sĩ phẫu thuật trẻ rực rỡ, 1086 00:48:28,010 --> 00:48:30,010 Bác sĩ Phillip Schlotkin. 1087 00:48:30,010 --> 00:48:35,020 Người đàn ông mũi vĩ đại nhất trong toàn thể vũ trụ và Beverly Hills. 1088 00:48:35,020 --> 00:48:36,140 >> -Your Hoàng thân. 1089 00:48:36,140 --> 00:48:36,820 >> Công việc -Nose? 1090 00:48:36,820 --> 00:48:37,700 Tôi không hiểu. 1091 00:48:37,700 --> 00:48:39,070 Cô ấy đã có một công việc mũi. 1092 00:48:39,070 --> 00:48:40,800 Đó là cô ngọt ngào 16 hiện tại. 1093 00:48:40,800 --> 00:48:42,590 >> Không, nó không phải là những gì bạn nghĩ. 1094 00:48:42,590 --> 00:48:44,490 Đó là nhiều, tồi tệ hơn nhiều. 1095 00:48:44,490 --> 00:48:48,160 Nếu bạn không cho tôi kết hợp với lá chắn không khí, 1096 00:48:48,160 --> 00:48:52,748 Schlotkin bác sĩ sẽ cung cấp cho bạn con gái sao mũi cũ của cô. 1097 00:48:52,748 --> 00:48:53,748 - [Hổn hển] Nooooooooooooo. 1098 00:48:53,748 --> 00:48:57,684 1099 00:48:57,684 --> 00:48:59,652 Nơi mà bạn đã có được điều đó? 1100 00:48:59,652 --> 00:49:00,640 >> Được rồi. 1101 00:49:00,640 --> 00:49:02,506 Tôi sẽ nói, tôi sẽ nói. 1102 00:49:02,506 --> 00:49:03,498 >> Không, Daddy, không có. 1103 00:49:03,498 --> 00:49:04,490 Bạn không được. 1104 00:49:04,490 --> 00:49:06,090 >> -Anh Bên phải thân yêu của tôi. 1105 00:49:06,090 --> 00:49:07,390 Tôi sẽ bỏ lỡ mũi mới của bạn. 1106 00:49:07,390 --> 00:49:10,990 Nhưng tôi sẽ không nói cho họ biết kết hợp không có vấn đề gì. 1107 00:49:10,990 --> 00:49:12,450 >> -Rất Tốt. 1108 00:49:12,450 --> 00:49:14,830 Bác sĩ Schlotkin, làm tồi tệ nhất của bạn. 1109 00:49:14,830 --> 00:49:15,744 >> Niềm vui -Tôi. 1110 00:49:15,744 --> 00:49:19,860 1111 00:49:19,860 --> 00:49:20,800 >> -Không! 1112 00:49:20,800 --> 00:49:22,780 Chờ đợi, chờ đợi. 1113 00:49:22,780 --> 00:49:24,000 Tôi sẽ nói cho. 1114 00:49:24,000 --> 00:49:25,830 Tôi sẽ nói cho. 1115 00:49:25,830 --> 00:49:28,270 >> -I Biết nó sẽ làm việc. 1116 00:49:28,270 --> 00:49:31,390 Được rồi, đưa nó cho tôi. 1117 00:49:31,390 --> 00:49:36,220 >> -Các Kết hợp là một. 1118 00:49:36,220 --> 00:49:36,740 >> -One. 1119 00:49:36,740 --> 00:49:37,473 >> -One. 1120 00:49:37,473 --> 00:49:37,972 -Hai. 1121 00:49:37,972 --> 00:49:38,471 -Hai. 1122 00:49:38,471 --> 00:49:39,800 -Hai. 1123 00:49:39,800 --> 00:49:40,300 -Ba. 1124 00:49:40,300 --> 00:49:40,800 -Ba. 1125 00:49:40,800 --> 00:49:41,800 -Ba. 1126 00:49:41,800 --> 00:49:42,300 Four. 1127 00:49:42,300 --> 00:49:42,800 Four. 1128 00:49:42,800 --> 00:49:44,707 Four. 1129 00:49:44,707 --> 00:49:45,521 -Five. 1130 00:49:45,521 --> 00:49:46,430 -Five. 1131 00:49:46,430 --> 00:49:47,930 -Five. 1132 00:49:47,930 --> 00:49:53,480 -Vậy Sự kết hợp là một, hai, ba, bốn, năm. 1133 00:49:53,480 --> 00:49:56,140 Đó là sự kết hợp ngu ngốc Tôi từng nghe thấy trong cuộc sống của tôi. 1134 00:49:56,140 --> 00:49:58,640 Đó là điều mà một ngốc sẽ có hành lý của mình. 1135 00:49:58,640 --> 00:50:00,000 >> Cảm ơn anh, Điện hạ của bạn. 1136 00:50:00,000 --> 00:50:01,340 >> [REMOTE CLICKS] 1137 00:50:01,340 --> 00:50:02,450 >> Bạn đã làm Cái gì? 1138 00:50:02,450 --> 00:50:03,800 >> -I Tắt tường. 1139 00:50:03,800 --> 00:50:05,010 >> Không, bạn không, bạn tắt toàn bộ phim. 1140 00:50:05,010 --> 00:50:06,220 >> Chắc hẳn -I nhấn nút sai. 1141 00:50:06,220 --> 00:50:07,064 >> -Vâng, Đưa nó trở lại! 1142 00:50:07,064 --> 00:50:07,910 Đưa bộ phim trở lại! 1143 00:50:07,910 --> 00:50:08,300 >> Vâng, thưa ngài! 1144 00:50:08,300 --> 00:50:08,799 Vâng, thưa ngài. 1145 00:50:08,799 --> 00:50:09,660 -Let Đi, Arnold. 1146 00:50:09,660 --> 00:50:10,450 Hãy đến, Gretchen. 1147 00:50:10,450 --> 00:50:12,533 Tất nhiên bạn biết tôi sẽ phải lập hoá đơn cho việc này. 1148 00:50:12,533 --> 00:50:16,720 1149 00:50:16,720 --> 00:50:17,220 -Vâng? 1150 00:50:17,220 --> 00:50:17,802 Nó đã làm việc? 1151 00:50:17,802 --> 00:50:18,510 Trường hợp của vua? 1152 00:50:18,510 --> 00:50:20,218 >> -Nó Làm việc, thưa ông, chúng tôi có sự kết hợp. 1153 00:50:20,218 --> 00:50:20,740 Tuyệt. 1154 00:50:20,740 --> 00:50:24,810 Bây giờ chúng ta có thể tận dụng mọi hơi thở cuối cùng không khí trong lành từ hành tinh Druidia. 1155 00:50:24,810 --> 00:50:25,890 Sự kết hợp là gì? 1156 00:50:25,890 --> 00:50:28,155 >> -One, hai, ba, bốn, năm. 1157 00:50:28,155 --> 00:50:29,890 >> -One, hai, ba, bốn, năm? 1158 00:50:29,890 --> 00:50:30,390 Vâng. 1159 00:50:30,390 --> 00:50:31,110 -Điều Đó là tuyệt vời. 1160 00:50:31,110 --> 00:50:34,550 Tôi đã có cùng kết hợp hành lý của tôi. 1161 00:50:34,550 --> 00:50:37,160 Chuẩn bị cho 1 Spaceball khởi hành ngay lập tức. 1162 00:50:37,160 --> 00:50:38,160 >> Vâng, thưa ông. 1163 00:50:38,160 --> 00:50:40,745 >> -Và Thay đổi kết hợp hành lý của tôi. 1164 00:50:40,745 --> 00:50:41,578 [ĐÓNG CỬA SOUND] 1165 00:50:41,578 --> 00:50:42,064 [Tiếng leng keng của cửa đánh mũ bảo hiểm] 1166 00:50:42,064 --> 00:50:42,550 -Ahh. 1167 00:50:42,550 --> 00:50:43,383 [END IMG xem lại] 1168 00:50:43,383 --> 00:50:46,700 DAVID J. Malan: Đó là nó cho CS50, chúng ta sẽ thấy bạn vào tuần tới. 1169 00:50:46,700 --> 00:50:49,883 Người kể chuyện: Và bây giờ, Deep Suy nghĩ, bởi Daven Farnham. 1170 00:50:49,883 --> 00:50:53,160 1171 00:50:53,160 --> 00:50:55,860 >> DAVEN Farnham: Mã hóa trong C khó khăn hơn rất nhiều so với Scratch. 1172 00:50:55,860 --> 00:50:57,320 printf, Scratch là một lời nói dối. 1173 00:50:57,320 --> 00:50:59,930 1174 00:50:59,930 --> 00:51:01,430 >> [Cười SOUNDBITE] 1175 00:51:01,430 --> 00:51:02,486