1 00:00:00,000 --> 00:00:00,940 2 00:00:00,940 --> 00:00:05,440 >> [MUSIC CHƠI] 3 00:00:05,440 --> 00:00:11,577 4 00:00:11,577 --> 00:00:12,660 DAVID J. Malan: Được rồi. 5 00:00:12,660 --> 00:00:15,590 Đây là CS50, và điều này là sự bắt đầu của tuần thứ hai. 6 00:00:15,590 --> 00:00:19,120 Vì vậy, chúng ta hãy bắt đầu ngày hôm nay với một lỗi. 7 00:00:19,120 --> 00:00:20,974 Một lỗi, tất nhiên, là một sai lầm trong một chương trình, 8 00:00:20,974 --> 00:00:22,890 và bạn sẽ nhận được rất quen thuộc với khái niệm này 9 00:00:22,890 --> 00:00:26,050 nếu bạn đã không bao giờ được lập trình trước. pset0 và bây giờ pset1. 10 00:00:26,050 --> 00:00:29,280 Nhưng chúng ta hãy xem xét một cái gì đó một chút đơn giản lúc đầu. 11 00:00:29,280 --> 00:00:32,189 Chương trình này ở đây mà tôi ném lại với nhau trước, 12 00:00:32,189 --> 00:00:37,280 và tôi cho rằng điều này nên in 10 ngôi sao trên màn hình sử dụng printf, 13 00:00:37,280 --> 00:00:41,020 nhưng nó dường như có lỗi một cách nào đó. 14 00:00:41,020 --> 00:00:45,370 >> Với đặc điểm kỹ thuật mà cần in 10 sao, 15 00:00:45,370 --> 00:00:50,230 nhưng nó không rõ ràng, những gì bạn sẽ yêu cầu bồi thường là lỗi? 16 00:00:50,230 --> 00:00:52,004 Vâng? 17 00:00:52,004 --> 00:00:54,420 Vì vậy, nó là một tắt của một lỗi, và làm những gì bạn có nghĩa là bằng cách đó? 18 00:00:54,420 --> 00:01:00,991 19 00:01:00,991 --> 00:01:01,490 OK. 20 00:01:01,490 --> 00:01:09,820 21 00:01:09,820 --> 00:01:10,410 Tuyệt vời. 22 00:01:10,410 --> 00:01:13,930 Vì vậy, chúng tôi đã chỉ định bắt đầu giá trị của số không cho tôi, 23 00:01:13,930 --> 00:01:18,399 và chúng tôi đã chỉ định một giá trị n 10, nhưng chúng tôi đã sử dụng ít hơn hoặc bằng. 24 00:01:18,399 --> 00:01:21,190 Và lý do rằng đây là hai ký tự và không chỉ là một biểu tượng, 25 00:01:21,190 --> 00:01:22,630 như trong một cuốn sách toán học, là bạn không có 26 00:01:22,630 --> 00:01:24,880 một cách thể hiện một nhân vật tương đương. 27 00:01:24,880 --> 00:01:28,450 >> Vì vậy, có nghĩa là ít hơn, nhưng nếu bạn bắt đầu đếm từ số không, 28 00:01:28,450 --> 00:01:31,690 nhưng bạn đếm tất cả các cách lên thông qua và bằng 10, 29 00:01:31,690 --> 00:01:34,170 bạn tất nhiên sẽ tính 11 điều trong tổng số. 30 00:01:34,170 --> 00:01:35,900 Và như vậy bạn sẽ in 11 sao. 31 00:01:35,900 --> 00:01:37,990 Vì vậy, những gì có thể là một sửa chữa cho điều này? 32 00:01:37,990 --> 00:01:39,970 Vâng? 33 00:01:39,970 --> 00:01:43,980 >> Vì vậy, chỉ cần điều chỉnh ít hơn hoặc bằng chỉ ít hơn, 34 00:01:43,980 --> 00:01:46,250 và có, tôi khẳng định, có lẽ một giải pháp khác, quá. 35 00:01:46,250 --> 00:01:47,210 Có thể khác bạn làm gì? 36 00:01:47,210 --> 00:01:48,590 Vâng? 37 00:01:48,590 --> 00:01:53,660 >> Vì vậy, bắt đầu bằng nó là 1, và lại càng ít hơn hoặc bằng. 38 00:01:53,660 --> 00:01:56,187 Và thẳng thắn mà nói tôi sẽ yêu cầu bồi thường rằng, đối với một con người điển hình, 39 00:01:56,187 --> 00:01:57,770 điều này có lẽ đơn giản hơn. 40 00:01:57,770 --> 00:02:00,280 Bắt đầu đếm 1 và đếm đến 10. 41 00:02:00,280 --> 00:02:01,690 Về cơ bản làm những gì bạn có ý nghĩa. 42 00:02:01,690 --> 00:02:04,010 >> Nhưng thực tế là trong lập trình, như chúng ta đã thấy, 43 00:02:04,010 --> 00:02:07,598 các nhà khoa học máy tính và lập trình viên thường không bắt đầu đếm từ số không. 44 00:02:07,598 --> 00:02:09,389 Và đó là tiền phạt nếu bạn đã quen với nó. 45 00:02:09,389 --> 00:02:12,640 Tình trạng của bạn sẽ thường có cái gì đó như ít hơn. 46 00:02:12,640 --> 00:02:14,910 Vì vậy, chỉ đơn giản là hợp lý lỗi mà chúng ta có thể bây giờ 47 00:02:14,910 --> 00:02:17,990 sửa chữa và cuối cùng là biên dịch lại này và nhận được chỉ là 10. 48 00:02:17,990 --> 00:02:19,610 >> Như thế nào về lỗi này ở đây? 49 00:02:19,610 --> 00:02:24,200 Ở đây, một lần nữa, tôi cho rằng tôi có mục tiêu in 10 stars-- 50 00:02:24,200 --> 00:02:28,140 mỗi dòng thời gian này, nhưng nó không. 51 00:02:28,140 --> 00:02:30,940 Trước khi chúng tôi đề xuất những gì sửa chữa là, những gì thực hiện điều này 52 00:02:30,940 --> 00:02:34,640 in trực quan nếu tôi được biên dịch và chạy chương trình này bạn nghĩ gì? 53 00:02:34,640 --> 00:02:35,140 Vâng? 54 00:02:35,140 --> 00:02:38,360 55 00:02:38,360 --> 00:02:38,860 >> Sao. 56 00:02:38,860 --> 00:02:41,690 Vì vậy, tất cả các ngôi sao trên cùng một đường dây là những gì tôi nghe, 57 00:02:41,690 --> 00:02:43,391 và sau đó là ký tự dòng mới. 58 00:02:43,391 --> 00:02:44,140 Vì vậy, hãy cố gắng đó. 59 00:02:44,140 --> 00:02:48,710 Vì vậy, hãy lỗi-1, vào, và tôi thấy lệnh kêu vang 60 00:02:48,710 --> 00:02:50,090 mà chúng ta đã nói về thời gian qua. 61 00:02:50,090 --> 00:02:55,180 ./buggy-1, và thực sự tôi thấy tất cả 10 ngôi sao trên cùng một dòng mặc dù tôi yêu cầu bồi thường 62 00:02:55,180 --> 00:02:58,690 trong đặc điểm kỹ thuật của tôi chỉ là một bình luận trên đỉnh mã mà tôi có ý định làm một trong 63 00:02:58,690 --> 00:02:59,230 dòng. 64 00:02:59,230 --> 00:03:00,580 Nhưng điều này có vẻ đúng. 65 00:03:00,580 --> 00:03:04,620 >> Bây giờ dòng 15 có vẻ như tôi in một ngôi sao, và sau đó dòng 16 66 00:03:04,620 --> 00:03:06,620 có vẻ như tôi là in ấn một ký tự dòng mới, 67 00:03:06,620 --> 00:03:09,560 và chúng đều thụt vào như vậy Tôi bên trong vòng lặp rõ ràng. 68 00:03:09,560 --> 00:03:13,610 Vì vậy, nên tôi không thể làm sao, mới đường, ngôi sao, dòng mới, ngôi sao, dòng sản phẩm mới? 69 00:03:13,610 --> 00:03:14,110 Có? 70 00:03:14,110 --> 00:03:18,430 71 00:03:18,430 --> 00:03:21,240 >> Vâng, không giống như một ngôn ngữ như Python, nếu bạn đã quen thuộc, 72 00:03:21,240 --> 00:03:23,540 thụt đầu dòng không quan trọng đối với máy tính. 73 00:03:23,540 --> 00:03:25,280 Nó chỉ quan trọng đối với con người. 74 00:03:25,280 --> 00:03:29,860 Vì vậy, trong khi dòng ở đây tôi đã phát minh ra 15 16-- trông đẹp, 75 00:03:29,860 --> 00:03:31,330 nhưng máy tính không quan tâm. 76 00:03:31,330 --> 00:03:34,640 Các máy tính quan tâm thực sự có dấu ngoặc nhọn 77 00:03:34,640 --> 00:03:36,310 xung quanh các dòng mã. 78 00:03:36,310 --> 00:03:39,520 >> Vì vậy, nó giống như trong clear-- Scratch-- rằng hai dòng mã 79 00:03:39,520 --> 00:03:40,450 phải được thực hiện. 80 00:03:40,450 --> 00:03:44,390 Giống như một trong những câu đố Scratch vàng miếng một lần nữa và một lần nữa và một lần nữa. 81 00:03:44,390 --> 00:03:50,920 >> Vì vậy, bây giờ nếu tôi chạy lại này program-- ./buggy-2-- Hm. 82 00:03:50,920 --> 00:03:51,770 Tôi có một lỗi ngay bây giờ. 83 00:03:51,770 --> 00:03:54,212 Tôi đã quên những gì để làm gì? 84 00:03:54,212 --> 00:03:55,420 Vâng, vì vậy tôi đã không biên dịch nó. 85 00:03:55,420 --> 00:03:56,740 Vì vậy, hãy lỗi-2. 86 00:03:56,740 --> 00:03:59,840 Không có tập tin như vậy bởi vì tôi đã không thực sự biên dịch phiên bản thứ hai. 87 00:03:59,840 --> 00:04:04,860 Vì vậy, bây giờ thú vị không khai báo variable-- không 2. 88 00:04:04,860 --> 00:04:05,510 Chúng tôi đang làm 1. 89 00:04:05,510 --> 00:04:11,050 Hãy lỗi-1-- ./buggy-1-- và bây giờ mỗi người là trên cùng một dòng. 90 00:04:11,050 --> 00:04:13,880 >> Bây giờ có một ngoại lệ yêu cầu bồi thường phải này của tôi 91 00:04:13,880 --> 00:04:15,520 bạn cần các dấu ngoặc nhọn. 92 00:04:15,520 --> 00:04:20,160 Khi là nó thực sự OK-- nếu bạn đã nhận thấy trong phần hoặc textbooks-- 93 00:04:20,160 --> 00:04:22,130 bỏ qua các dấu ngoặc nhọn? 94 00:04:22,130 --> 00:04:22,630 Vâng? 95 00:04:22,630 --> 00:04:26,290 96 00:04:26,290 --> 00:04:26,870 >> Chính xác. 97 00:04:26,870 --> 00:04:28,940 Khi chỉ có một dòng mã mà bạn 98 00:04:28,940 --> 00:04:32,830 muốn được liên kết với các vòng lặp như trong ví dụ đầu tiên của chúng tôi. 99 00:04:32,830 --> 00:04:36,380 Nó là hoàn toàn hợp pháp bỏ qua các dấu ngoặc nhọn 100 00:04:36,380 --> 00:04:40,310 cũng giống như loại một tiện nghi từ trình biên dịch cho bạn. 101 00:04:40,310 --> 00:04:40,810 Vâng? 102 00:04:40,810 --> 00:04:43,347 103 00:04:43,347 --> 00:04:43,930 Câu hỏi. 104 00:04:43,930 --> 00:04:45,500 Nó sẽ được coi là một lỗi phong cách? 105 00:04:45,500 --> 00:04:49,340 Chúng tôi sẽ promote-- như trong CS50 phong cách dẫn URL mà 106 00:04:49,340 --> 00:04:51,926 là trong pset1-- luôn sử dụng dấu ngoặc nhọn. 107 00:04:51,926 --> 00:04:53,550 Chắc chắn nếu bạn là người mới đến lập trình. 108 00:04:53,550 --> 00:04:56,800 Thực tế là chúng ta không sẽ cấm bạn 109 00:04:56,800 --> 00:04:58,680 từ làm các tiện nghi. 110 00:04:58,680 --> 00:05:00,846 Nhưng nếu bạn chỉ nhận được vào swing của sự vật, 111 00:05:00,846 --> 00:05:04,020 hoàn toàn chỉ luôn luôn sử dụng xoăn niềng răng cho đến khi bạn nhận được hang của nó. 112 00:05:04,020 --> 00:05:04,640 Câu hỏi. 113 00:05:04,640 --> 00:05:05,320 >> Tất cả các quyền. 114 00:05:05,320 --> 00:05:07,660 Vì vậy, mà sau đó là một lỗi. 115 00:05:07,660 --> 00:05:09,190 Ít nhất là trong một cái gì đó khá đơn giản. 116 00:05:09,190 --> 00:05:11,260 Và bạn có thể nghĩ rằng đây là khá thô sơ, phải không? 117 00:05:11,260 --> 00:05:13,635 Đây là loại tuần đầu tiên nhìn vào ngôn ngữ 118 00:05:13,635 --> 00:05:14,890 như thế, nhìn thấy lỗi của mình trong đó. 119 00:05:14,890 --> 00:05:17,250 Nhưng thực tế đây là những thực sự đại diện 120 00:05:17,250 --> 00:05:20,310 một số vấn đề khá đáng sợ có thể phát sinh trong thế giới thực. 121 00:05:20,310 --> 00:05:23,530 >> Vì vậy, một số bạn có thể nhớ lại nếu bạn làm theo tin tức công nghệ, 122 00:05:23,530 --> 00:05:25,740 hoặc thậm chí có thể bị bắt gió này trong tháng Hai 123 00:05:25,740 --> 00:05:29,434 năm vừa qua rằng Apple đã có thực hiện một chút sai lầm trong cả iOS, 124 00:05:29,434 --> 00:05:31,350 hệ điều hành trên điện thoại của họ, và cũng có thể 125 00:05:31,350 --> 00:05:34,220 Mac OS, hệ điều hành trên máy tính để bàn và máy tính xách tay của họ. 126 00:05:34,220 --> 00:05:36,480 Và bạn thấy tiêu đề như thế này. 127 00:05:36,480 --> 00:05:41,120 Và sau đó, Apple hứa sẽ sửa chữa lỗi này, 128 00:05:41,120 --> 00:05:45,950 và rất nhanh chóng đã sửa chữa nó trong iOS, nhưng sau đó cuối cùng là cố định nó trong Mac OS 129 00:05:45,950 --> 00:05:46,810 là tốt. 130 00:05:46,810 --> 00:05:50,370 >> Bây giờ không có những tiêu đề một mình thực sự tiết lộ những vấn đề cơ bản là, 131 00:05:50,370 --> 00:05:55,640 nhưng lỗi sau cùng đã được giảm xuống một lỗi trong SSL, ổ cắm an toàn lớp. 132 00:05:55,640 --> 00:05:57,390 Và câu chuyện dài ngắn, đây là phần mềm 133 00:05:57,390 --> 00:06:01,030 rằng trình duyệt của chúng tôi và các phần mềm được sử dụng để làm gì? 134 00:06:01,030 --> 00:06:04,090 135 00:06:04,090 --> 00:06:06,860 >> Nếu tôi nói rằng SSL là liên quan, bất cứ khi nào bạn 136 00:06:06,860 --> 00:06:13,920 truy cập vào một URL bắt đầu với HTTPS, những gì sau đó SSL có thể liên quan đến? 137 00:06:13,920 --> 00:06:14,580 Mã hóa. 138 00:06:14,580 --> 00:06:16,470 Vì vậy, chúng ta sẽ nói về này trong những ngày tới. 139 00:06:16,470 --> 00:06:18,750 Mã hóa, nghệ thuật xáo trộn thông tin. 140 00:06:18,750 --> 00:06:22,200 >> Nhưng câu chuyện dài ngắn, Apple đôi khi trước đã phạm sai lầm 141 00:06:22,200 --> 00:06:25,970 trong việc thực hiện của họ về SSL, phần mềm mà cuối cùng thực hiện 142 00:06:25,970 --> 00:06:30,120 URL như HTTPS hoặc tối đa kết nối có quá. 143 00:06:30,120 --> 00:06:32,850 Kết quả trong số đó là của bạn kết nối có thể có khả năng 144 00:06:32,850 --> 00:06:33,920 bị chặn. 145 00:06:33,920 --> 00:06:37,130 Và các kết nối của bạn đã được không nhất thiết phải được mã hóa 146 00:06:37,130 --> 00:06:40,350 nếu bạn đã có một số kẻ xấu ở giữa bạn và các trang web đích người 147 00:06:40,350 --> 00:06:42,170 biết làm thế nào để tận dụng lợi thế này. 148 00:06:42,170 --> 00:06:45,090 >> Bây giờ Apple cuối cùng đã đăng một sửa chữa cho điều này cuối cùng, 149 00:06:45,090 --> 00:06:46,920 và mô tả của sửa chữa của họ là như thế này. 150 00:06:46,920 --> 00:06:49,878 Vận chuyển an toàn không xác nhận tính xác thực của kết nối. 151 00:06:49,878 --> 00:06:52,920 Vấn đề này được giải quyết bằng khôi phục lại thiếu bước xác nhận. 152 00:06:52,920 --> 00:06:57,250 >> Vì vậy, đây là một lời giải thích lượn sóng rất tay chỉ đơn giản nói rằng chúng tôi hơi say lên. 153 00:06:57,250 --> 00:07:00,920 Có nghĩa là một dòng mã đó là lỗi 154 00:07:00,920 --> 00:07:05,130 trong việc thực hiện của họ về SSL, và nếu bạn đi trực tuyến và tìm kiếm này 155 00:07:05,130 --> 00:07:07,210 bạn thực sự có thể tìm thấy mã nguồn gốc. 156 00:07:07,210 --> 00:07:11,960 Ví dụ, đây là một ảnh chụp màn hình chỉ là một phần của một tập tin khá lớn, 157 00:07:11,960 --> 00:07:15,965 nhưng điều này dường như là một chức năng được gọi là SSL xác minh dấu hiệu trao đổi khóa máy chủ. 158 00:07:15,965 --> 00:07:17,840 Và phải mất một loạt các lập luận và nguyên liệu đầu vào. 159 00:07:17,840 --> 00:07:20,298 Và chúng tôi sẽ không tập trung quá nhiều vào các minutia đó, 160 00:07:20,298 --> 00:07:24,390 nhưng nếu bạn tập trung vào các mã bên trong trong đó trên cùng function-- hãy 161 00:07:24,390 --> 00:07:25,590 phóng to trên đó. 162 00:07:25,590 --> 00:07:28,140 Bạn có thể đã nghi ngờ những gì các lỗi có thể 163 00:07:28,140 --> 00:07:31,230 là ngay cả khi bạn không có ý tưởng cuối cùng là những gì bạn đang tìm kiếm. 164 00:07:31,230 --> 00:07:35,924 Có loại một sự bất thường ở đây, đó là những gì? 165 00:07:35,924 --> 00:07:38,940 >> Vâng, tôi không thực sự thích giao diện của hai goto không. 166 00:07:38,940 --> 00:07:42,060 Thành thật mà nói, tôi không thực sự biết những gì goto không phương tiện, nhưng có hai người 167 00:07:42,060 --> 00:07:42,810 trở lại trở lại. 168 00:07:42,810 --> 00:07:45,290 Đó chỉ là loại xoa tôi trí tuệ một cách sai lầm, 169 00:07:45,290 --> 00:07:48,910 và thực sự nếu chúng ta phóng to chỉ những dòng, đây là C. 170 00:07:48,910 --> 00:07:52,220 >> Vì vậy, rất nhiều mã của Apple được tự viết bằng C, 171 00:07:52,220 --> 00:07:55,780 và điều này rõ ràng thực sự equivalent-- 172 00:07:55,780 --> 00:07:59,060 không có vết lõm khá phiên bản, nhưng nếu bạn nhận ra thực tế 173 00:07:59,060 --> 00:08:02,560 rằng không có dấu ngoặc nhọn, những gì Apple thực sự đã viết là mã trông 174 00:08:02,560 --> 00:08:03,540 như thế này. 175 00:08:03,540 --> 00:08:07,080 Vì vậy, tôi đã thu nhỏ và tôi chỉ cố định lề trong ý nghĩa 176 00:08:07,080 --> 00:08:10,690 rằng nếu không có dấu ngoặc nhọn, mà goto thứ hai thất bại đó là màu vàng 177 00:08:10,690 --> 00:08:12,500 sẽ thực hiện không có vấn đề gì. 178 00:08:12,500 --> 00:08:15,540 Nó không liên quan đến nếu điều kiện ở trên nó. 179 00:08:15,540 --> 00:08:19,590 >> Vì vậy, thậm chí một lần nữa, nếu bạn không hoàn toàn hiểu những gì này có thể có thể 180 00:08:19,590 --> 00:08:23,230 được làm, biết rằng mỗi người trong các conditions-- mỗi dòng 181 00:08:23,230 --> 00:08:26,180 là một bước rất quan trọng trong quá trình kiểm tra 182 00:08:26,180 --> 00:08:28,350 nếu dữ liệu của bạn là trong thực tế được mã hóa. 183 00:08:28,350 --> 00:08:31,710 Vì vậy, bỏ qua một trong những bước, không phải là ý tưởng tốt nhất. 184 00:08:31,710 --> 00:08:34,840 >> Nhưng bởi vì chúng tôi có điều này goto thứ hai thất bại trong màu vàng, 185 00:08:34,840 --> 00:08:36,840 và bởi vì một khi chúng tôi loại thẩm mỹ 186 00:08:36,840 --> 00:08:40,480 di chuyển nó sang bên trái, nơi nó một cách hợp lý là tại thời điểm này, những gì 187 00:08:40,480 --> 00:08:43,230 Điều này có nghĩa cho các dòng mã dưới đây goto thứ hai 188 00:08:43,230 --> 00:08:46,480 thất bại, bạn sẽ nghĩ gì? 189 00:08:46,480 --> 00:08:48,860 Nó luôn luôn được bỏ qua. 190 00:08:48,860 --> 00:08:52,100 Vì vậy, gotos thường được tán thành vì lý do chúng tôi sẽ không thực sự đi vào, 191 00:08:52,100 --> 00:08:54,940 và thực sự ở CS50 chúng ta có xu hướng không dạy goto tuyên bố này, 192 00:08:54,940 --> 00:08:58,130 nhưng bạn có thể nghĩ goto không như ý nghĩa đi nhảy 193 00:08:58,130 --> 00:08:59,600 một số phần khác của mã này. 194 00:08:59,600 --> 00:09:03,120 >> Nói cách khác nhảy qua dòng cuối cùng này hoàn toàn, 195 00:09:03,120 --> 00:09:07,420 và như vậy là kết quả của ngu ngốc này sai lầm đơn giản đó chỉ là 196 00:09:07,420 --> 00:09:10,330 là kết quả của một người nào đó có thể sao chép và dán một quá 197 00:09:10,330 --> 00:09:14,150 nhiều lần là toàn bộ bảo mật của iOS và Mac OS 198 00:09:14,150 --> 00:09:18,240 là dễ bị đánh chặn bởi kẻ xấu trong một thời gian. 199 00:09:18,240 --> 00:09:19,940 Cho đến khi Apple cuối cùng đã cố định này. 200 00:09:19,940 --> 00:09:23,100 >> Bây giờ, nếu một số bạn đang thực sự chạy các phiên bản cũ của iOS hoặc Mac OS, 201 00:09:23,100 --> 00:09:27,250 bạn có thể vào đó gotofail.com là một trang web mà một người nào đó thành lập 202 00:09:27,250 --> 00:09:29,190 về cơ bản xác định lập trình 203 00:09:29,190 --> 00:09:30,980 nếu máy tính của bạn vẫn còn dễ bị tổn thương. 204 00:09:30,980 --> 00:09:33,600 Và thẳng thắn mà nói, nếu có, nó có thể là một ý tưởng tốt 205 00:09:33,600 --> 00:09:36,870 để cập nhật điện thoại của bạn hoặc Mac của bạn vào thời điểm này. 206 00:09:36,870 --> 00:09:40,120 Nhưng ở đó, chỉ minh chứng cho như thế nào một sự đánh giá cao của các cấp thấp hơn 207 00:09:40,120 --> 00:09:42,400 chi tiết và công bằng ý tưởng đơn giản có thể thực sự 208 00:09:42,400 --> 00:09:44,590 chuyển thành quyết định và những vấn đề 209 00:09:44,590 --> 00:09:47,320 affected-- trong case-- này hàng triệu người. 210 00:09:47,320 --> 00:09:49,107 >> Bây giờ một từ về quản lý. 211 00:09:49,107 --> 00:09:50,690 Phần sẽ bắt đầu vào chủ nhật tới. 212 00:09:50,690 --> 00:09:53,360 Bạn sẽ nhận được một email của cuối tuần về phần, lúc này 213 00:09:53,360 --> 00:09:55,290 quá trình resectioning sẽ bắt đầu nếu bạn đã 214 00:09:55,290 --> 00:09:56,998 nhận ra bây giờ bạn có một số cuộc xung đột mới. 215 00:09:56,998 --> 00:10:00,180 Vì vậy, điều này xảy ra mỗi năm, và chúng tôi sẽ phù hợp trong những ngày tới. 216 00:10:00,180 --> 00:10:02,430 >> Văn phòng làm hours-- giữ một mắt theo đúng kế hoạch này ở đây. 217 00:10:02,430 --> 00:10:05,100 Thay đổi một chút trong tuần này, đặc biệt là thời gian bắt đầu 218 00:10:05,100 --> 00:10:08,180 và vị trí, do đó, tham khảo ý kiến trước khi đến giờ làm việc 219 00:10:08,180 --> 00:10:09,520 bất kỳ trong bốn đêm tiếp theo. 220 00:10:09,520 --> 00:10:12,680 Và bây giờ là một lời đánh giá, đặc biệt là khi bạn đi sâu vào vấn đề 221 00:10:12,680 --> 00:10:14,350 thiết lập một và xa hơn nữa. 222 00:10:14,350 --> 00:10:17,070 >> Vì vậy, theo các đặc điểm kỹ thuật, đây là những thường 223 00:10:17,070 --> 00:10:20,360 các trục dọc mà chúng tôi đánh giá công việc của bạn. 224 00:10:20,360 --> 00:10:23,170 Phạm vi đề cập đến những gì mức độ cụ mã của bạn 225 00:10:23,170 --> 00:10:25,690 các tính năng cần thiết bởi đặc điểm kỹ thuật của chúng tôi. 226 00:10:25,690 --> 00:10:28,290 Nói cách khác, có bao nhiêu một bộ mảnh đã làm bạn cắn. 227 00:10:28,290 --> 00:10:30,440 Bạn đã làm một phần ba của nó, một nửa của nó, 100% của nó. 228 00:10:30,440 --> 00:10:33,000 Ngay cả khi nó không đúng, bao nhiêu bạn đã cố gắng? 229 00:10:33,000 --> 00:10:35,290 Vì vậy, nắm bắt được mức độ nỗ lực và số tiền 230 00:10:35,290 --> 00:10:38,260 mà bạn cắn ra khỏi vấn đề vấn đề của bộ. 231 00:10:38,260 --> 00:10:40,690 >> Correctness-- này, để mức độ nào, là mã của bạn 232 00:10:40,690 --> 00:10:43,150 phù hợp với chúng tôi thông số kỹ thuật và miễn lỗi. 233 00:10:43,150 --> 00:10:44,770 Vì vậy, nó hoạt động một cách chính xác? 234 00:10:44,770 --> 00:10:48,700 Nếu chúng ta cung cấp cho nó một số đầu vào, hiện nó cho chúng ta những kết quả mà chúng ta mong đợi? 235 00:10:48,700 --> 00:10:52,570 Design-- bây giờ đây là lần đầu tiên của những người đặc biệt là chất lượng, 236 00:10:52,570 --> 00:10:56,180 hoặc những người đòi hỏi sự phán xét con người. 237 00:10:56,180 --> 00:10:59,690 Và quả thực, đây là lý do tại sao chúng tôi có một đội ngũ nhân viên của rất nhiều nghiên cứu sinh giảng dạy và học 238 00:10:59,690 --> 00:11:00,350 trợ lý. 239 00:11:00,350 --> 00:11:03,480 Đến mức độ nào là của bạn mã được viết tốt? 240 00:11:03,480 --> 00:11:05,810 >> Và một lần nữa điều này là rất đánh giá định tính 241 00:11:05,810 --> 00:11:09,100 mà sẽ làm việc với bạn về hai hướng trong tuần tới. 242 00:11:09,100 --> 00:11:12,060 Vì vậy, khi bạn nhận được không chỉ có điểm số, mà còn 243 00:11:12,060 --> 00:11:16,682 một điểm bằng văn bản hoặc thông tin phản hồi đánh máy, hoặc bằng văn bản phản hồi từ tiếng Anh. 244 00:11:16,682 --> 00:11:19,640 Đó là những gì chúng tôi sẽ sử dụng để lái xe bạn đối với việc viết mã tốt hơn. 245 00:11:19,640 --> 00:11:23,320 Và trong bài giảng và phần, chúng tôi sẽ cố gắng chỉ out-- thường xuyên như chúng tôi can-- 246 00:11:23,320 --> 00:11:26,420 những gì làm cho một chương trình không chỉ chính xác và chức năng tốt, 247 00:11:26,420 --> 00:11:28,200 mà còn được thiết kế tốt. 248 00:11:28,200 --> 00:11:31,850 Hiệu quả nhất nó có thể được, hoặc thậm chí đẹp nhất có thể. 249 00:11:31,850 --> 00:11:33,100 >> Trong đó dẫn chúng ta đến phong cách. 250 00:11:33,100 --> 00:11:36,876 Phong cách cuối cùng là một phán đoán thẩm mỹ. 251 00:11:36,876 --> 00:11:38,750 Bạn có lựa chọn tốt tên cho các biến của bạn? 252 00:11:38,750 --> 00:11:40,330 Bạn đã thụt vào mã của bạn đúng cách? 253 00:11:40,330 --> 00:11:44,010 Liệu nó nhìn tốt, và do đó, là nó dễ dàng cho một người khác 254 00:11:44,010 --> 00:11:46,550 đọc tương ứng của bạn về tính đúng đắn của nó. 255 00:11:46,550 --> 00:11:50,300 >> Bây giờ nói chung trong các giáo trình, chúng tôi ghi những điều trên thang điểm từ năm điểm. 256 00:11:50,300 --> 00:11:53,640 Và hãy để tôi búa nhà điểm rằng ba thực sự là tốt. 257 00:11:53,640 --> 00:11:55,550 Rất nhanh chóng làm folks bắt đầu làm số học. 258 00:11:55,550 --> 00:11:58,133 Khi họ nhận được một ba trong số năm trên đúng đắn cho một số pset 259 00:11:58,133 --> 00:12:02,040 và họ nghĩ rằng chết tiệt, tôi sẽ 60% mà chủ yếu là D hoặc E. 260 00:12:02,040 --> 00:12:03,980 >> Đó không phải là cách chúng ta nghĩ về những con số này. 261 00:12:03,980 --> 00:12:06,880 Một ba là thực sự tốt, và những gì chúng tôi thường mong đợi ở đầu 262 00:12:06,880 --> 00:12:09,820 của thuật ngữ này là nếu bạn đang nhận được một loạt các three's-- có thể một vài 263 00:12:09,820 --> 00:12:12,540 hội chợ, một vài fours-- hoặc một vài lần hai, một vài fours-- 264 00:12:12,540 --> 00:12:13,748 đó là một nơi tốt để bắt đầu. 265 00:12:13,748 --> 00:12:16,320 Và miễn là chúng ta thấy một quỹ đạo đi lên theo thời gian, 266 00:12:16,320 --> 00:12:18,540 bạn đang ở một nơi đặc biệt tốt. 267 00:12:18,540 --> 00:12:20,752 >> Công thức chúng tôi sử dụng để trọng lượng là điều cơ bản 268 00:12:20,752 --> 00:12:22,710 này theo các giáo trình, mà chỉ có nghĩa là chúng tôi 269 00:12:22,710 --> 00:12:24,750 cung cấp thêm trọng lượng cho chính xác. 270 00:12:24,750 --> 00:12:27,930 Bởi vì nó rất thường xuyên đúng đắn mà phải mất nhiều thời gian nhất. 271 00:12:27,930 --> 00:12:28,760 Hãy tin tôi bây giờ. 272 00:12:28,760 --> 00:12:31,190 Bạn sẽ find-- ít nhất trong một pset-- bạn 273 00:12:31,190 --> 00:12:36,790 dành 90% thời gian của bạn làm việc trên 10% của vấn đề. 274 00:12:36,790 --> 00:12:39,320 >> Và tất cả mọi thứ loại công trình ngoại trừ một hoặc hai lỗi, 275 00:12:39,320 --> 00:12:41,570 và đó là những lỗi mà giữ cho bạn thức khuya. 276 00:12:41,570 --> 00:12:43,380 Đó là những cái mà loại thoát khỏi bạn. 277 00:12:43,380 --> 00:12:45,560 Nhưng sau khi ngủ trên đó, hoặc tham dự các giờ làm việc 278 00:12:45,560 --> 00:12:48,844 hoặc đặt câu hỏi trực tuyến, được khi bạn tới được mục tiêu 100%, 279 00:12:48,844 --> 00:12:50,760 và đó là lý do tại sao chúng tôi cân đúng đắn nhất. 280 00:12:50,760 --> 00:12:54,102 Thiết kế một chút ít, và phong cách một chút ít hơn. 281 00:12:54,102 --> 00:12:56,060 Nhưng hãy phong cách mind-- có lẽ là dễ nhất 282 00:12:56,060 --> 00:12:58,890 trong số này để cắn theo hướng dẫn phong cách. 283 00:12:58,890 --> 00:13:01,580 >> Và bây giờ, một nghiêm trọng hơn lưu ý về sự trung thực trong học tập. 284 00:13:01,580 --> 00:13:05,000 CS50 có sự khác biệt bất hạnh của là nhà sản xuất lớn nhất của Hội đồng quản trị rao vặt 285 00:13:05,000 --> 00:13:07,330 trường hợp hầu như mỗi năm lịch sử. 286 00:13:07,330 --> 00:13:11,012 Đây không phải là bởi vì học sinh gian lận trong CS50 bất kỳ nhiều hơn so với các lớp khác, 287 00:13:11,012 --> 00:13:13,720 nhưng bởi vì tính chất công việc, thực tế là nó là điện tử, 288 00:13:13,720 --> 00:13:16,636 thực tế là chúng ta tìm kiếm nó, và thực tế chúng tôi có các nhà khoa học máy tính, 289 00:13:16,636 --> 00:13:20,570 Tôi có thể nói rằng chúng tôi không may rất giỏi phát hiện nó. 290 00:13:20,570 --> 00:13:22,710 >> Vì vậy, điều này có nghĩa là trong thực tế? 291 00:13:22,710 --> 00:13:24,820 Vì vậy, nó, mỗi giáo trình, triết lý của khóa học 292 00:13:24,820 --> 00:13:28,090 thực sự không đun sôi xuống là hợp lý. 293 00:13:28,090 --> 00:13:31,684 Có dòng này giữa làm công việc của một ngày của riêng bạn 294 00:13:31,684 --> 00:13:34,100 và nhận được một chút giúp đỡ hợp lý từ một người bạn, 295 00:13:34,100 --> 00:13:38,020 và hoàn toàn làm điều đó làm việc cho bạn người bạn, hoặc gửi người đó mã của bạn 296 00:13:38,020 --> 00:13:41,080 để người đó có thể chỉ đơn giản là mất hoặc mượn nó ra ngay. 297 00:13:41,080 --> 00:13:43,580 Và đó là vượt qua dòng mà chúng ta rút ra trong lớp. 298 00:13:43,580 --> 00:13:45,410 >> Xem, giáo trình cuối cùng cho các dòng 299 00:13:45,410 --> 00:13:48,209 mà chúng ta rút ra như là hợp lý và hành vi không hợp lý, 300 00:13:48,209 --> 00:13:50,000 nhưng nó thực sự sôi xuống đến bản chất 301 00:13:50,000 --> 00:13:53,980 công việc của bạn cần phải là của riêng bạn trong các kết thúc. 302 00:13:53,980 --> 00:13:56,230 Bây giờ với những gì đã nói, có một heuristic. 303 00:13:56,230 --> 00:13:58,980 Bởi vì như bạn có thể imagine-- từ giờ hành chính và hình ảnh 304 00:13:58,980 --> 00:14:01,060 và các đoạn video chúng tôi đã thể hiện như vậy, far-- CS50 305 00:14:01,060 --> 00:14:04,530 thực sự có nghĩa là phải như hợp tác và như hợp tác xã và xã hội 306 00:14:04,530 --> 00:14:06,450 càng tốt. 307 00:14:06,450 --> 00:14:08,570 Khi hợp tác vì nó là nghiêm ngặt. 308 00:14:08,570 --> 00:14:11,314 >> Nhưng với điều này cho biết, các heuristic, như bạn sẽ thấy trong giáo trình, 309 00:14:11,314 --> 00:14:12,980 là khi bạn gặp một số vấn đề. 310 00:14:12,980 --> 00:14:16,470 Bạn có một số lỗi trong mã của bạn mà bạn không thể giải quyết, đó là hợp lý cho bạn 311 00:14:16,470 --> 00:14:18,039 để hiển thị mã của bạn cho người khác. 312 00:14:18,039 --> 00:14:21,080 Một người bạn ngay cả trong lớp học, một người bạn ngồi bên cạnh bạn vào những giờ văn phòng, 313 00:14:21,080 --> 00:14:22,680 hoặc một thành viên của nhân viên. 314 00:14:22,680 --> 00:14:25,810 Nhưng họ có thể không hiển thị mã của họ cho bạn. 315 00:14:25,810 --> 00:14:27,710 >> Nói cách khác, một câu trả lời cho question-- của bạn 316 00:14:27,710 --> 00:14:29,940 Tôi cần help-- không oh, đây là mã của tôi. 317 00:14:29,940 --> 00:14:32,440 Hãy xem này và suy ra từ nó những gì bạn muốn. 318 00:14:32,440 --> 00:14:34,580 Bây giờ, tất nhiên, có một cách rõ ràng để chơi game 319 00:14:34,580 --> 00:14:37,760 hệ thống này, trong đó tôi sẽ chỉ cho bạn mã của tôi trước khi có một câu hỏi. 320 00:14:37,760 --> 00:14:40,150 Bạn chỉ cho tôi mã của bạn tôi trước khi có một câu hỏi. 321 00:14:40,150 --> 00:14:45,870 Nhưng thấy các giáo trình một lần nữa cho chi tiết tốt hơn của dòng này là nơi. 322 00:14:45,870 --> 00:14:50,606 >> Chỉ cần bây giờ vẽ lên bức tranh và chia sẻ như minh bạch càng tốt 323 00:14:50,606 --> 00:14:53,480 nơi chúng ta đang ở trong những năm gần đây, đây là số trường hợp Hội đồng quản trị rao vặt 324 00:14:53,480 --> 00:14:56,260 CS50 rằng đã có hơn Trong bảy năm qua. 325 00:14:56,260 --> 00:14:58,717 Với 14 trường hợp này giảm gần đây nhất. 326 00:14:58,717 --> 00:15:01,300 Xét về mặt học sinh tham gia, nó đã được 20 sinh viên một số lẻ 327 00:15:01,300 --> 00:15:02,490 mùa thu vừa qua. 328 00:15:02,490 --> 00:15:05,670 Có một đỉnh cao của 33 sinh viên cách đây vài năm. 329 00:15:05,670 --> 00:15:08,830 Nhiều người trong số họ là không may không còn ở đây trong khuôn viên trường. 330 00:15:08,830 --> 00:15:13,100 >> Học sinh tham gia như là một tỷ lệ phần trăm lớp học có lịch sử dao động từ 0% 331 00:15:13,100 --> 00:15:17,300 5,3%, mà chỉ là để nói đây là một thách thức hàng năm. 332 00:15:17,300 --> 00:15:20,390 Và vào giai đoạn cuối đó, những gì chúng tôi muốn làm là truyền đạt một 333 00:15:20,390 --> 00:15:24,310 rằng chúng ta dd-- chỉ FYI-- so sánh ở một sự công bằng cho những học sinh 334 00:15:24,310 --> 00:15:26,520 sau đây là dòng phù hợp. 335 00:15:26,520 --> 00:15:29,620 Chúng tôi so sánh tất cả hiện tại đệ trình chống lại tất cả các nhiệm vụ trong quá khứ 336 00:15:29,620 --> 00:15:30,840 từ nhiều năm qua. 337 00:15:30,840 --> 00:15:33,620 >> Chúng tôi cũng biết làm thế nào để Google Quyền xung quanh và tìm thấy kho lưu trữ mã 338 00:15:33,620 --> 00:15:36,360 trực tuyến, diễn đàn thảo luận trực tuyến, trang web việc làm trực tuyến. 339 00:15:36,360 --> 00:15:41,580 Nếu một học sinh có thể tìm thấy nó, chúng ta có thể chắc chắn tìm thấy nó nhiều như chúng tôi tiếc làm gì. 340 00:15:41,580 --> 00:15:45,330 Vì vậy, những gì bạn sẽ thấy trong giáo trình mặc dù là khoản hối tiếc này. 341 00:15:45,330 --> 00:15:47,500 Tôi có thể chắc chắn đánh giá cao, và tất cả chúng ta có 342 00:15:47,500 --> 00:15:50,870 nhân viên đã thực hiện quá trình như này, hoặc này một mình theo thời gian, 343 00:15:50,870 --> 00:15:53,997 chắc chắn biết những gì nó giống như khi cuộc sống được trong cách khi bạn có 344 00:15:53,997 --> 00:15:56,080 một số đêm deadline-- không chỉ trong lớp học này, 345 00:15:56,080 --> 00:15:58,660 nhưng another-- khi bạn hoàn toàn kiệt sức, căng thẳng, 346 00:15:58,660 --> 00:16:00,659 có một số lượng quá mức những thứ khác để làm. 347 00:16:00,659 --> 00:16:03,660 Bạn sẽ thực hiện tại một số điểm trong cuộc sống chắc chắn là một xấu, có lẽ cuối 348 00:16:03,660 --> 00:16:04,620 quyết định ban đêm. 349 00:16:04,620 --> 00:16:06,520 >> Vì vậy, mỗi giáo trình, có điều khoản này, 350 00:16:06,520 --> 00:16:10,629 như vậy là nếu trong vòng 72 giờ làm một số quyết định sai lầm, bạn sở hữu lên đến nó 351 00:16:10,629 --> 00:16:12,670 và tiếp cận với tôi và một trong những người đứng đầu của khóa học 352 00:16:12,670 --> 00:16:14,300 và chúng ta sẽ có một cuộc trò chuyện. 353 00:16:14,300 --> 00:16:16,220 Chúng tôi sẽ xử lý mọi thứ nội bộ với hy vọng 354 00:16:16,220 --> 00:16:18,770 của nó ngày càng trở nên một lúc giảng dạy, bài học cuộc sống, 355 00:16:18,770 --> 00:16:22,120 và không phải cái gì với hậu quả đặc biệt mạnh mẽ 356 00:16:22,120 --> 00:16:24,570 như bạn có thể nhìn thấy trên các bảng xếp hạng ở đây. 357 00:16:24,570 --> 00:16:26,540 >> Vì vậy, đó là một giai điệu rất nghiêm trọng. 358 00:16:26,540 --> 00:16:29,960 Chúng ta hãy dừng lại chỉ là một vài giây để phá vỡ sự căng thẳng. 359 00:16:29,960 --> 00:16:34,442 >> [MUSIC CHƠI] 360 00:16:34,442 --> 00:17:17,768 361 00:17:17,768 --> 00:17:20,250 >> DAVID J. Malan: Được rồi, vậy làm thế nào là một segue? 362 00:17:20,250 --> 00:17:22,059 Để chủ đề chính của ngày hôm nay. 363 00:17:22,059 --> 00:17:23,859 Là người đầu tiên trong số đó là trừu tượng. 364 00:17:23,859 --> 00:17:26,900 Một trong số đó là có được các đại diện của dữ liệu, mà thẳng thắn 365 00:17:26,900 --> 00:17:31,640 là một cách thực sự khô nói như thế nào chúng ta có thể đi về giải quyết vấn đề và suy nghĩ 366 00:17:31,640 --> 00:17:33,250 về việc giải quyết vấn đề? 367 00:17:33,250 --> 00:17:37,285 Vì vậy, bạn đã thấy trong Scratch, và bạn đã nhìn thấy có lẽ đã có trong pset1 với C 368 00:17:37,285 --> 00:17:39,930 bạn không chỉ có thể sử dụng chức năng, giống như printf, 369 00:17:39,930 --> 00:17:42,770 rằng những người khác trong năm qua đã viết cho bạn. 370 00:17:42,770 --> 00:17:45,340 Bạn cũng có thể viết các chức năng của riêng bạn. 371 00:17:45,340 --> 00:17:48,440 >> Và mặc dù bạn có thể không có thực hiện điều này trong C, và thẳng thắn trong pset1 372 00:17:48,440 --> 00:17:51,866 bạn không thực sự cần phải viết của bạn chức năng riêng vì problem-- 373 00:17:51,866 --> 00:17:53,990 trong khi có lẽ khó khăn tại glance-- đầu tiên bạn sẽ thấy 374 00:17:53,990 --> 00:17:57,910 cuối cùng có thể được giải quyết với không phải tất cả mà nhiều dòng mã. 375 00:17:57,910 --> 00:18:01,140 Nhưng với những gì đã nói, trong điều kiện viết chức năng riêng của bạn, 376 00:18:01,140 --> 00:18:03,570 nhận ra rằng C không cung cấp cho bạn có khả năng này. 377 00:18:03,570 --> 00:18:06,940 >> Tôi sẽ đi vào mã nguồn của ngày hôm nay, trong đó có sẵn đã được trực tuyến, 378 00:18:06,940 --> 00:18:10,900 và tôi sẽ đi trước và mở một chương trình gọi là chức năng 0.C, 379 00:18:10,900 --> 00:18:14,620 và chức năng không chúng ta sẽ thấy một vài điều. 380 00:18:14,620 --> 00:18:19,160 Trong dòng đầu tiên thông qua 18 23 là chức năng chính của tôi. 381 00:18:19,160 --> 00:18:22,414 Và bây giờ chúng ta đang bắt đầu đọc mã mà chúng tôi không viết trên bay, 382 00:18:22,414 --> 00:18:25,080 nhưng thay vào đó tôi đã viết trước hoặc là bạn trong một vấn đề thiết lập 383 00:18:25,080 --> 00:18:27,910 có thể nhận được có được viết trước. 384 00:18:27,910 --> 00:18:30,040 Một cách tốt để bắt đầu đọc mã của người khác 385 00:18:30,040 --> 00:18:31,400 là tìm kiếm các chức năng chính. 386 00:18:31,400 --> 00:18:34,420 Tìm ra nơi mà mục Vấn đề là để chạy chương trình, 387 00:18:34,420 --> 00:18:36,580 và sau đó thực hiện nó một cách hợp lý từ đó. 388 00:18:36,580 --> 00:18:40,190 >> Vì vậy, chương trình này dường như bản in Tên của bạn theo sau dấu hai chấm. 389 00:18:40,190 --> 00:18:42,490 Sau đó chúng tôi sử dụng GetString từ thư viện CS50 390 00:18:42,490 --> 00:18:46,050 để có được một chuỗi, hoặc một từ hoặc cụm từ từ người sử dụng vào bàn phím. 391 00:18:46,050 --> 00:18:48,390 Và sau đó có này điều PrintName here--. 392 00:18:48,390 --> 00:18:51,420 >> Bây giờ không phải là một PrintName chức năng mà đi kèm với C. 393 00:18:51,420 --> 00:18:52,970 Nó không có trong tiêu chuẩn io.h. 394 00:18:52,970 --> 00:18:55,570 Nó không phải trong CS50.h. 395 00:18:55,570 --> 00:18:57,880 Đó là thay vì trong cùng một tập tin. 396 00:18:57,880 --> 00:19:01,000 Chú ý nếu tôi di chuyển xuống một dòng bit-- 25 đến 27-- 397 00:19:01,000 --> 00:19:05,330 nó chỉ là một cách khá các bình luận mã của bạn bằng cách sử dụng các ngôi sao và dấu gạch chéo. 398 00:19:05,330 --> 00:19:07,320 Đây là một dòng đa bình luận, và điều này chỉ là 399 00:19:07,320 --> 00:19:10,570 mô tả của tôi trong màu xanh của những chức năng này không. 400 00:19:10,570 --> 00:19:14,530 >> Bởi vì trong dòng 28 đến 31, Tôi đã viết một chức năng siêu đơn giản 401 00:19:14,530 --> 00:19:16,280 Tên mà là PrintName. 402 00:19:16,280 --> 00:19:19,560 Phải mất bao nhiêu số, bạn sẽ nói gì? 403 00:19:19,560 --> 00:19:25,120 Vì vậy, một argument-- vì có một Lập luận được liệt kê trong dấu ngoặc đơn. 404 00:19:25,120 --> 00:19:27,000 Các loại đó là String. 405 00:19:27,000 --> 00:19:30,240 Mà là để nói PrintName giống như hộp đen này 406 00:19:30,240 --> 00:19:32,910 hoặc chức năng mà phải mất như là đầu vào một chuỗi. 407 00:19:32,910 --> 00:19:35,730 >> Và tên của String thuận tiện sẽ Name. 408 00:19:35,730 --> 00:19:37,840 Không S, không tồn tại, nhưng Name. 409 00:19:37,840 --> 00:19:41,090 Vì vậy, những gì PrintName làm gì? 410 00:19:41,090 --> 00:19:42,210 Đó là tốt đẹp đơn giản. 411 00:19:42,210 --> 00:19:45,390 Cũng như một dòng mã cho printf, nhưng dường như nó 412 00:19:45,390 --> 00:19:47,950 in ra "Hello", vậy và như vậy. 413 00:19:47,950 --> 00:19:50,070 Trong trường hợp như vậy và do xuất phát từ lập luận. 414 00:19:50,070 --> 00:19:52,300 >> Bây giờ đây không phải là một sự đổi mới rất lớn ở đây. 415 00:19:52,300 --> 00:19:56,710 Thực sự, tôi đã thực hiện một chương trình mà có thể đã được viết với một dòng mã 416 00:19:56,710 --> 00:20:00,190 bằng cách này lên đây, và thay đổi nó để một cái gì đó 417 00:20:00,190 --> 00:20:04,920 có liên quan đến một số sáu hoặc bảy hoặc lâu hơn dòng mã tất cả các con đường xuống đây. 418 00:20:04,920 --> 00:20:08,190 >> Nhưng đó là sự hành nghề của một nguyên tắc được gọi là trừu tượng. 419 00:20:08,190 --> 00:20:12,550 Loại đóng gói bên trong một mới chức năng mà có một cái tên, và tốt hơn 420 00:20:12,550 --> 00:20:14,590 nhưng tên đó theo nghĩa đen nói những gì nó làm. 421 00:20:14,590 --> 00:20:16,880 Ý tôi là printf-- đó không phải là đặc biệt mô tả. 422 00:20:16,880 --> 00:20:18,932 Nếu tôi muốn tạo ra một mảnh ghép, hoặc nếu tôi 423 00:20:18,932 --> 00:20:21,140 muốn tạo ra một chức năng có in tên của một ai đó, 424 00:20:21,140 --> 00:20:23,230 vẻ đẹp làm điều này là tôi thực sự có thể 425 00:20:23,230 --> 00:20:27,170 cung cấp chức năng mà một tên mô tả những gì nó làm. 426 00:20:27,170 --> 00:20:29,844 >> Bây giờ nó có một đầu vào Tôi đã tự ý gọi tên, 427 00:20:29,844 --> 00:20:32,760 nhưng đó cũng là tuyệt vời mô tả thay vì được nhiều hơn một chút 428 00:20:32,760 --> 00:20:36,140 chung chung như S. Và bãi bỏ, bây giờ, chỉ có nghĩa là 429 00:20:36,140 --> 00:20:38,330 rằng chức năng này không đưa cho tôi trở lại bất cứ điều gì. 430 00:20:38,330 --> 00:20:41,127 Nó không giống như GetString rằng nghĩa là đưa tôi trở lại một chuỗi 431 00:20:41,127 --> 00:20:43,960 như chúng ta đã làm với các mảnh giấy với các bạn cùng lớp của bạn tuần trước, 432 00:20:43,960 --> 00:20:45,990 mà đúng hơn là nó chỉ có một tác dụng phụ. 433 00:20:45,990 --> 00:20:48,080 Nó in một cái gì đó ra màn hình. 434 00:20:48,080 --> 00:20:53,880 >> Vì vậy, vào cuối ngày, nếu tôi không thực hiện chức năng-0, ./function-0, 435 00:20:53,880 --> 00:20:55,450 chúng ta sẽ thấy rằng nó hỏi tên của tôi. 436 00:20:55,450 --> 00:20:58,150 Tôi gõ David, và nó loại tên tôi. 437 00:20:58,150 --> 00:21:01,080 Nếu tôi làm điều đó một lần nữa với Rob, nó sẽ nói "Xin chào, Rob." 438 00:21:01,080 --> 00:21:04,280 Vì vậy, một ý tưởng đơn giản, nhưng có lẽ ngoại suy từ này tinh thần 439 00:21:04,280 --> 00:21:06,750 đó là chương trình của bạn có được một chút phức tạp hơn, 440 00:21:06,750 --> 00:21:10,290 và bạn muốn viết một đoạn mã và gọi đó code-- invoke 441 00:21:10,290 --> 00:21:13,270 code-- rằng một số mô tả đặt tên như PrintName, 442 00:21:13,270 --> 00:21:15,600 C không đủ khả năng cho chúng tôi khả năng này. 443 00:21:15,600 --> 00:21:17,660 >> Đây là một ví dụ đơn giản. 444 00:21:17,660 --> 00:21:22,940 Ví dụ, nếu tôi mở ra một nộp từ hôm nay được gọi là return.c, 445 00:21:22,940 --> 00:21:24,270 nhận thấy những gì tôi đã thực hiện ở đây. 446 00:21:24,270 --> 00:21:26,330 Hầu hết các chức năng chính này là printf. 447 00:21:26,330 --> 00:21:30,360 Lần đầu tiên tôi khởi tạo một cách tùy tiện biến gọi là x với số 2. 448 00:21:30,360 --> 00:21:34,110 Sau đó tôi in ra "x giờ là % I "đi qua trong giá trị của x. 449 00:21:34,110 --> 00:21:35,500 Vì vậy, tôi chỉ nói nó là gì. 450 00:21:35,500 --> 00:21:37,208 >> Bây giờ tôi chỉ mạnh dạn tuyên bố với printf. 451 00:21:37,208 --> 00:21:42,050 Tôi cubing rằng giá trị x, và tôi làm như vậy bằng cách gọi một chức năng 452 00:21:42,050 --> 00:21:45,590 gọi là khối lập phương qua trong x như là đối số, 453 00:21:45,590 --> 00:21:49,300 và sau đó tiết kiệm đầu ra trong biến chính nó, x. 454 00:21:49,300 --> 00:21:51,340 Vì vậy, tôi clobbering giá trị của x. 455 00:21:51,340 --> 00:21:53,380 Tôi trọng các giá trị của x với bất cứ điều gì 456 00:21:53,380 --> 00:21:56,510 kết quả của gọi chức năng khối này là. 457 00:21:56,510 --> 00:21:59,530 Và sau đó tôi chỉ in ra một số thứ lông ở đây nói những gì tôi đã làm. 458 00:21:59,530 --> 00:22:01,600 >> Vì vậy, những gì sau đó là khối lập phương? 459 00:22:01,600 --> 00:22:03,510 Chú ý những gì cơ bản khác nhau ở đây. 460 00:22:03,510 --> 00:22:05,540 Tôi đã cho các chức năng một tên như trước. 461 00:22:05,540 --> 00:22:08,270 Tôi đã chỉ định một tên cho một đối số. 462 00:22:08,270 --> 00:22:11,650 Lần này nó được gọi là n thay cho tên, nhưng tôi có thể gọi nó là bất cứ điều gì tôi muốn. 463 00:22:11,650 --> 00:22:12,650 Nhưng điều này là khác nhau. 464 00:22:12,650 --> 00:22:14,080 Điều này bên trái. 465 00:22:14,080 --> 00:22:16,290 Trước đây nó là những gì từ khóa? 466 00:22:16,290 --> 00:22:16,870 Boys. 467 00:22:16,870 --> 00:22:18,580 Bây giờ rõ ràng là int. 468 00:22:18,580 --> 00:22:20,630 >> Vì vậy, những gì có thể lấy đi? 469 00:22:20,630 --> 00:22:24,090 Trong khi đó, khoảng trống biểu thị loại hư vô, và đó là trường hợp. 470 00:22:24,090 --> 00:22:25,970 PrintName trở về không có gì. 471 00:22:25,970 --> 00:22:27,942 Nó đã làm một cái gì đó, nhưng nó không đưa cho tôi trở lại 472 00:22:27,942 --> 00:22:30,650 một cái gì đó mà tôi có thể đưa vào phía bên tay trái của một dấu bằng 473 00:22:30,650 --> 00:22:32,460 như tôi đã làm ở đây trên dòng 22. 474 00:22:32,460 --> 00:22:36,780 >> Vì vậy, nếu tôi nói ra trên đường 30, những gì mà có lẽ ngụ ý 475 00:22:36,780 --> 00:22:38,610 về khối không cho tôi? 476 00:22:38,610 --> 00:22:41,110 Vâng? 477 00:22:41,110 --> 00:22:42,310 Nó trả về một số nguyên. 478 00:22:42,310 --> 00:22:44,590 Vì vậy, nó đưa tôi trở lại, cho Ví dụ, một mảnh giấy 479 00:22:44,590 --> 00:22:46,580 mà nó đã viết câu trả lời. 480 00:22:46,580 --> 00:22:50,130 2 giống tiêu, hoặc 3 giống tiêu, hoặc 4 cubed-- bất cứ điều gì tôi thông qua tại, 481 00:22:50,130 --> 00:22:51,540 và làm thế nào tôi thực hiện điều này? 482 00:22:51,540 --> 00:22:54,810 Vâng, chỉ cần n lần n lần n là làm thế nào tôi có thể cube một giá trị. 483 00:22:54,810 --> 00:22:57,110 Vì vậy, một lần nữa, siêu đơn giản ý tưởng, nhưng chỉ thị 484 00:22:57,110 --> 00:23:00,100 bây giờ làm thế nào chúng ta có thể viết các chức năng mà thực sự đã trở lại với chúng tôi 485 00:23:00,100 --> 00:23:02,380 giá trị mà có thể quan tâm. 486 00:23:02,380 --> 00:23:05,740 >> Hãy xem xét một ví dụ mới nhất đây gọi là chức năng một. 487 00:23:05,740 --> 00:23:08,530 Trong ví dụ này, nó bắt đầu để có được hấp dẫn hơn. 488 00:23:08,530 --> 00:23:12,400 Vì vậy, trong chức năng, thao tác này program-- thông báo cuối cùng 489 00:23:12,400 --> 00:23:14,920 gọi một chức năng được gọi là GetPositiveInt. 490 00:23:14,920 --> 00:23:17,800 GetPositiveInt không phải là một chức năng trong thư viện CS50, 491 00:23:17,800 --> 00:23:20,400 nhưng chúng tôi quyết định muốn nó tồn tại. 492 00:23:20,400 --> 00:23:24,550 >> Vì vậy, nếu chúng ta di chuyển xuống sau này trong các tập tin, nhận thấy làm thế nào tôi đã đi về việc thực hiện 493 00:23:24,550 --> 00:23:26,560 được tích cực int, và tôi nói đó là hấp dẫn hơn 494 00:23:26,560 --> 00:23:28,992 bởi vì đây là một phong nha số dòng mã. 495 00:23:28,992 --> 00:23:30,700 Nó không phải chỉ là một ngớ ngẩn ít chương trình đồ chơi. 496 00:23:30,700 --> 00:23:33,870 Nó thực sự có một số kiểm tra lỗi và làm một cái gì đó hữu ích hơn. 497 00:23:33,870 --> 00:23:38,470 >> Vì vậy, nếu bạn đã không thấy hương video mà chúng tôi đã nhúng vào trong pset1, 498 00:23:38,470 --> 00:23:42,350 biết rằng đây là một loại vòng lặp trong C, tinh thần tương tự 499 00:23:42,350 --> 00:23:44,270 đến các loại điều Scratch có thể làm. 500 00:23:44,270 --> 00:23:46,320 Và làm cho biết làm điều này. 501 00:23:46,320 --> 00:23:47,500 In trang này ra. 502 00:23:47,500 --> 00:23:51,860 Sau đó đi trước và nhận được n-- nhận được một int và lưu nó trong n, 503 00:23:51,860 --> 00:23:55,760 và tiếp tục làm điều này một lần nữa và một lần nữa và một lần nữa, miễn là n là ít hơn một. 504 00:23:55,760 --> 00:23:58,720 >> Vì vậy, n là có được ít hơn một chỉ khi con người không hợp tác. 505 00:23:58,720 --> 00:24:01,980 Nếu người đó là đánh máy trong 0 hoặc -1 hoặc -50, 506 00:24:01,980 --> 00:24:04,790 vòng lặp này sẽ giữ thực hiện một lần nữa và một lần nữa. 507 00:24:04,790 --> 00:24:07,549 Và cuối cùng nhận thấy, tôi chỉ đơn giản là trả về giá trị. 508 00:24:07,549 --> 00:24:09,590 Vì vậy, bây giờ chúng tôi có một chức năng mà có thể đã được tốt đẹp 509 00:24:09,590 --> 00:24:14,040 nếu CS50 sẽ thực hiện trong CS50.h và CS50.c cho bạn, 510 00:24:14,040 --> 00:24:16,520 nhưng ở đây chúng tôi có thể bây giờ thực hiện điều này bản thân mình. 511 00:24:16,520 --> 00:24:19,230 >> Nhưng hai ý kiến ​​trên một số chi tiết quan trọng. 512 00:24:19,230 --> 00:24:24,390 One-- tại sao tôi khai báo int n, bạn có nghĩ rằng, trên đường 29 513 00:24:24,390 --> 00:24:27,139 thay vì chỉ làm ở đây, đó là 514 00:24:27,139 --> 00:24:28,930 phù hợp hơn với những gì chúng tôi đã làm tuần trước? 515 00:24:28,930 --> 00:24:29,430 Vâng? 516 00:24:29,430 --> 00:24:34,485 517 00:24:34,485 --> 00:24:35,110 Một ý nghĩ tốt. 518 00:24:35,110 --> 00:24:37,080 Vì vậy, nếu chúng ta đặt nó ở đây, đó là hình như chúng ta 519 00:24:37,080 --> 00:24:39,110 tiếp tục tuyên bố một lần nữa và một lần nữa. 520 00:24:39,110 --> 00:24:42,000 Đó là trong và của chính nó là không có vấn đề, cho mỗi gia nhập, 521 00:24:42,000 --> 00:24:43,940 bởi vì chúng ta chỉ cần giá trị một lần và sau đó 522 00:24:43,940 --> 00:24:45,330 chúng ta sẽ có được một cái mới nào. 523 00:24:45,330 --> 00:24:45,940 Nhưng một ý nghĩ tốt. 524 00:24:45,940 --> 00:24:46,440 Vâng? 525 00:24:46,440 --> 00:24:52,770 526 00:24:52,770 --> 00:24:53,330 >> Close. 527 00:24:53,330 --> 00:24:59,030 Vì vậy, bởi vì tôi đã tuyên bố trên n đường 29 bên ngoài vòng lặp, 528 00:24:59,030 --> 00:25:01,390 nó có thể truy cập trong suốt toàn bộ chức năng này. 529 00:25:01,390 --> 00:25:05,400 Không phải là các chức năng khác vì n vẫn là bên trong của các xoăn 530 00:25:05,400 --> 00:25:06,470 niềng răng ở đây. 531 00:25:06,470 --> 00:25:07,940 So-- chắc chắn. 532 00:25:07,940 --> 00:25:12,430 533 00:25:12,430 --> 00:25:12,940 >> Chính xác. 534 00:25:12,940 --> 00:25:14,356 Vì vậy, đây thậm chí còn hơn thế nữa. 535 00:25:14,356 --> 00:25:18,600 Nếu chúng ta thay vì tuyên bố n ngay trên đường 32, 536 00:25:18,600 --> 00:25:22,340 đó là vấn đề bởi vì đoán nơi khác tôi cần phải truy cập vào nó? 537 00:25:22,340 --> 00:25:25,620 Trên đường 34, và quy tắc đơn giản của ngón tay cái là 538 00:25:25,620 --> 00:25:30,060 mà bạn chỉ có thể sử dụng một biến bên trong dấu ngoặc nhọn gần đây nhất 539 00:25:30,060 --> 00:25:31,420 mà bạn tuyên bố. 540 00:25:31,420 --> 00:25:35,230 >> Thật không may, dòng 34 là một trong những dòng quá muộn, 541 00:25:35,230 --> 00:25:38,560 bởi vì tôi đã đóng nẹp nhọn trên đường 33 542 00:25:38,560 --> 00:25:41,220 tương ứng với ngoặc móc trên đường 30. 543 00:25:41,220 --> 00:25:44,180 Và vì vậy đây là một cách nói rằng biến int này được scoped, 544 00:25:44,180 --> 00:25:46,970 có thể nói, chỉ trong những dấu ngoặc nhọn. 545 00:25:46,970 --> 00:25:48,910 Nó chỉ không tồn tại bên ngoài của họ. 546 00:25:48,910 --> 00:25:51,580 >> Vì vậy, thực sự, nếu tôi làm điều này sai, hãy để tôi lưu các mã 547 00:25:51,580 --> 00:25:53,530 vì nó is-- không chính xác bằng văn bản. 548 00:25:53,530 --> 00:25:57,990 Hãy để tôi đi trước và làm cho chức năng-1, và lỗi notice--. 549 00:25:57,990 --> 00:26:03,502 Sử dụng không khai báo định danh n trên đường 35, ngay ở đây. 550 00:26:03,502 --> 00:26:05,210 Và nếu chúng ta di chuyển lên hơn nữa, một số khác. 551 00:26:05,210 --> 00:26:08,750 Sử dụng không khai báo n định trên dòng 34. 552 00:26:08,750 --> 00:26:11,200 >> Vì vậy, các trình biên dịch, kêu vang, được nhận thấy rằng nó chỉ 553 00:26:11,200 --> 00:26:13,720 không tồn tại mặc dù rõ ràng nó có trực quan. 554 00:26:13,720 --> 00:26:16,090 Vì vậy, một sửa chữa đơn giản là tuyên bố nó ở đó. 555 00:26:16,090 --> 00:26:18,790 >> Bây giờ hãy để tôi di chuyển đến trên cùng của tập tin. 556 00:26:18,790 --> 00:26:21,080 Có gì nhảy ra lúc bạn như là một chút khác nhau 557 00:26:21,080 --> 00:26:23,070 từ những thứ chúng ta nhìn vào tuần trước? 558 00:26:23,070 --> 00:26:26,990 Không chỉ để tôi có tên, không chỉ làm Tôi có một số sắc nét bao gồm lên hàng đầu, 559 00:26:26,990 --> 00:26:29,340 Tôi có một cái gì đó tôi gọi một nguyên mẫu. 560 00:26:29,340 --> 00:26:36,100 Bây giờ trông hết sức tương tự như những gì chúng tôi chỉ nhìn thấy một thời điểm cách đây trên dòng 27. 561 00:26:36,100 --> 00:26:39,230 >> Vì vậy, hãy suy ra từ một khác nhau thông báo lỗi do tại sao tôi đã làm điều này. 562 00:26:39,230 --> 00:26:42,050 Hãy để tôi đi trước và xóa những dòng đó. 563 00:26:42,050 --> 00:26:44,240 Và vì vậy chúng tôi không biết gì về nguyên mẫu. 564 00:26:44,240 --> 00:26:45,430 Làm lại tập tin này. 565 00:26:45,430 --> 00:26:46,890 Thực hiện chức năng một. 566 00:26:46,890 --> 00:26:48,090 Và bây giờ, chết tiệt, bốn lỗi. 567 00:26:48,090 --> 00:26:50,220 Hãy di chuyển lên đến đầu tiên. 568 00:26:50,220 --> 00:26:55,070 >> Khai tiềm ẩn của chức năng được tích cực int là không hợp lệ trong C99. 569 00:26:55,070 --> 00:26:57,780 C99 chỉ có nghĩa là năm 1999 phiên bản của ngôn ngữ 570 00:26:57,780 --> 00:26:59,710 C, đó là những gì chúng tôi đang thực sự sử dụng. 571 00:26:59,710 --> 00:27:01,050 Vì vậy, điều này có nghĩa là gì? 572 00:27:01,050 --> 00:27:05,250 Vâng C-- và cụ thể hơn C compilers-- là chương trình khá ngớ ngẩn. 573 00:27:05,250 --> 00:27:07,420 Họ chỉ biết những gì bạn đã nói với họ, và đó là 574 00:27:07,420 --> 00:27:08,960 chuyên đề thực sự so với tuần trước. 575 00:27:08,960 --> 00:27:12,910 >> Vấn đề là nếu tôi đi về việc thực hiện tên lên đây, 576 00:27:12,910 --> 00:27:17,640 và tôi gọi một chức năng được gọi là GetPositiveInt ở đây trên đường 20, 577 00:27:17,640 --> 00:27:22,520 chức năng về mặt kỹ thuật không tồn tại cho đến khi trình biên dịch thấy dòng 27. 578 00:27:22,520 --> 00:27:25,450 Thật không may, trình biên dịch làm những việc trên, xuống, trái, phải, 579 00:27:25,450 --> 00:27:29,580 như vậy bởi vì nó đã không nhìn thấy thực hiện GetPositiveInt, 580 00:27:29,580 --> 00:27:32,400 nhưng nó thấy bạn đang cố gắng sử dụng nó lên đây, 581 00:27:32,400 --> 00:27:35,810 nó chỉ sẽ bail-- mắng bạn với một lỗi có lẽ message-- 582 00:27:35,810 --> 00:27:38,440 khó hiểu, và không thực sự biên dịch các tập tin. 583 00:27:38,440 --> 00:27:41,940 >> Vì vậy, một cái gọi là nguyên mẫu lên ở đây là phải thừa nhận là không cần thiết. 584 00:27:41,940 --> 00:27:47,870 Theo nghĩa đen, tôi đi xuống ở đây và tôi sao chép và dán này, và tôi đặt nó lên đây. 585 00:27:47,870 --> 00:27:51,020 Void sẽ là thích hợp hơn, vì vậy chúng tôi sẽ nghĩa là sao chép và dán nó thời gian này. 586 00:27:51,020 --> 00:27:52,854 Tôi nghĩa là sao chép và dán nó. 587 00:27:52,854 --> 00:27:54,270 Thực sự chỉ là giống như một mảnh vụn bánh mì. 588 00:27:54,270 --> 00:27:56,260 >> Một đầu mối nhỏ để trình biên dịch. 589 00:27:56,260 --> 00:27:58,860 Tôi không biết điều này không Chưa hết, nhưng tôi hứa hẹn với bạn 590 00:27:58,860 --> 00:28:00,260 rằng nó sẽ tồn tại cuối cùng. 591 00:28:00,260 --> 00:28:04,010 Và đó là lý do tại sao trong này line-- dòng 16-- kết thúc bằng một dấu chấm phẩy. 592 00:28:04,010 --> 00:28:05,486 Nó là không cần thiết do thiết kế. 593 00:28:05,486 --> 00:28:05,986 Có? 594 00:28:05,986 --> 00:28:11,340 595 00:28:11,340 --> 00:28:14,360 >> Nếu bạn không liên kết thư viện của bạn để gì-- oh, câu hỏi hay. 596 00:28:14,360 --> 00:28:17,350 Sharp bao gồm vùi đầu tập tin. 597 00:28:17,350 --> 00:28:20,040 Cần be-- nên hầu như luôn luôn ở đầu 598 00:28:20,040 --> 00:28:23,270 của tập tin cho một similar-- cho chính xác cùng một lý do, có. 599 00:28:23,270 --> 00:28:26,430 Bởi vì trong tiêu chuẩn io.h đúng là một dòng 600 00:28:26,430 --> 00:28:30,560 như thế này, nhưng với printf từ, và với đối số của nó và kiểu trả về của nó. 601 00:28:30,560 --> 00:28:33,310 Và như vậy bằng cách làm mạnh bao gồm lên ở đây, những gì bạn đang làm nghĩa đen 602 00:28:33,310 --> 00:28:36,380 được sao chép và dán nội dung của ai đó đã viết lên hàng đầu. 603 00:28:36,380 --> 00:28:39,660 Qua đó cluing mã của bạn vào các thực tế là những chức năng không tồn tại. 604 00:28:39,660 --> 00:28:40,160 Vâng? 605 00:28:40,160 --> 00:28:47,520 606 00:28:47,520 --> 00:28:48,260 >> Hoàn toàn. 607 00:28:48,260 --> 00:28:51,690 Vì vậy, rất thông minh và chính xác giải pháp sẽ được, bạn biết không? 608 00:28:51,690 --> 00:28:53,760 Tôi không biết những gì một nguyên mẫu, nhưng tôi biết 609 00:28:53,760 --> 00:28:56,390 nếu tôi hiểu rằng chỉ là C câm và suy nghĩ lại trên xuống dưới. 610 00:28:56,390 --> 00:28:57,820 Vâng chúng ta hãy cung cấp cho nó những gì nó muốn. 611 00:28:57,820 --> 00:29:01,650 Hãy cắt mã, dán nó lên đầu, và bây giờ chính đẩy xuống dưới đây. 612 00:29:01,650 --> 00:29:03,470 Điều này cũng sẽ giải quyết vấn đề. 613 00:29:03,470 --> 00:29:07,409 >> Nhưng bạn có thể dễ dàng đưa ra một kịch bản trong đó A cần phải gọi B, 614 00:29:07,409 --> 00:29:10,075 B và có thể gọi trở lại A. này là một cái gì đó gọi là đệ quy, 615 00:29:10,075 --> 00:29:11,370 và chúng tôi sẽ quay trở lại đó. 616 00:29:11,370 --> 00:29:13,911 Và nó có thể hoặc không có thể là một tốt điều, nhưng bạn có thể chắc chắn 617 00:29:13,911 --> 00:29:15,110 phá vỡ giải pháp này. 618 00:29:15,110 --> 00:29:17,690 >> Và hơn thế nữa, tôi sẽ khẳng định phong cách, 619 00:29:17,690 --> 00:29:20,760 đặc biệt là khi chương trình của bạn trở thành này dài và dài này, 620 00:29:20,760 --> 00:29:23,064 nó chỉ là siêu thuận tiện đặt chính ở đầu 621 00:29:23,064 --> 00:29:25,730 bởi vì đó là điều hầu hết lập trình viên sẽ quan tâm. 622 00:29:25,730 --> 00:29:28,150 Và do đó, nó là một chút sạch hơn, cho là, để làm điều đó cách 623 00:29:28,150 --> 00:29:30,380 Ban đầu tôi đã làm nó với một nguyên mẫu thậm chí 624 00:29:30,380 --> 00:29:33,396 mặc dù nó có vẻ hơi dư thừa ở cái nhìn đầu tiên. 625 00:29:33,396 --> 00:29:33,895 Vâng? 626 00:29:33,895 --> 00:29:36,472 627 00:29:36,472 --> 00:29:37,680 Xin lỗi, bạn có thể nói nó to hơn? 628 00:29:37,680 --> 00:29:45,650 629 00:29:45,650 --> 00:29:49,580 >> Nếu bạn chuyển đổi vị trí của các thực hiện và nguyên mẫu? 630 00:29:49,580 --> 00:29:51,270 Vì vậy, đó là một câu hỏi hay. 631 00:29:51,270 --> 00:29:53,780 Nếu bạn lại tuyên bố này xuống ở đây, chúng ta hãy xem điều gì xảy ra. 632 00:29:53,780 --> 00:29:55,530 Vì vậy, nếu tôi đặt xuống này ở đây, bạn đang nói. 633 00:29:55,530 --> 00:29:57,860 634 00:29:57,860 --> 00:29:58,360 Ồ, xin lỗi. 635 00:29:58,360 --> 00:29:58,859 To hơn? 636 00:29:58,859 --> 00:30:02,000 637 00:30:02,000 --> 00:30:04,011 Thậm chí to hơn. 638 00:30:04,011 --> 00:30:04,760 Ồ, câu hỏi hay. 639 00:30:04,760 --> 00:30:05,860 Nó sẽ mất hiệu lực chức năng? 640 00:30:05,860 --> 00:30:08,901 Bạn biết đấy, sau khi tất cả những năm này, tôi có bao giờ đặt một nguyên mẫu sau đó. 641 00:30:08,901 --> 00:30:13,810 Vì vậy, chúng ta hãy làm cho chức năng-1 sau khi làm điều đó. 642 00:30:13,810 --> 00:30:15,279 >> [Lẩm bẩm] 643 00:30:15,279 --> 00:30:16,320 DAVID J. Malan: Oh, chờ đợi. 644 00:30:16,320 --> 00:30:17,944 Chúng tôi vẫn phải đặt mọi thứ lên hàng đầu. 645 00:30:17,944 --> 00:30:21,400 Vì vậy, hãy làm điều này ở đây, nếu tôi hiểu câu hỏi của bạn một cách chính xác. 646 00:30:21,400 --> 00:30:24,700 Tôi đang đặt tất cả mọi thứ, bao gồm cả các mẫu thử nghiệm trên chính, 647 00:30:24,700 --> 00:30:28,180 nhưng tôi đặt các mẫu thử nghiệm dưới thực hiện. 648 00:30:28,180 --> 00:30:33,190 >> Vì vậy, nếu tôi làm một, tôi nhận được lại không sử dụng một biến n error--. 649 00:30:33,190 --> 00:30:37,280 650 00:30:37,280 --> 00:30:37,860 Oh, có. 651 00:30:37,860 --> 00:30:38,360 Cảm ơn bạn. 652 00:30:38,360 --> 00:30:39,430 Hãy xem, chúng ta thoát khỏi điều này. 653 00:30:39,430 --> 00:30:41,304 Đó là một lỗi khác nhau, vì vậy hãy bỏ qua điều đó. 654 00:30:41,304 --> 00:30:43,910 Hãy thực sự nhanh chóng làm lại này. 655 00:30:43,910 --> 00:30:48,100 >> OK, vì vậy tranh cãi dữ liệu không sử dụng định dạng chuỗi 656 00:30:48,100 --> 00:30:52,310 n-- oh, đó là bởi vì Tôi đã thay đổi những ở đây. 657 00:30:52,310 --> 00:30:55,885 Được rồi, chúng ta biết câu trả lời đang xảy ra đối với: được rồi, ở đây chúng tôi đi. 658 00:30:55,885 --> 00:31:00,560 Ah, nhờ tích cực. 659 00:31:00,560 --> 00:31:03,430 Được rồi, tôi sẽ sửa chữa mã này after-- bỏ qua lỗi này đặc biệt 660 00:31:03,430 --> 00:31:08,300 vì đây was-- nó hoạt động là câu trả lời. 661 00:31:08,300 --> 00:31:11,560 >> Vì vậy, nó không ghi đè lên những gì bạn vừa thực hiện. 662 00:31:11,560 --> 00:31:14,800 Tôi nghi ngờ trình biên dịch được viết theo cách như vậy 663 00:31:14,800 --> 00:31:18,420 rằng nó được bỏ qua nguyên mẫu của bạn bởi vì cơ thể, có thể nói, 664 00:31:18,420 --> 00:31:20,922 chức năng đã có được triển khai lên cao hơn. 665 00:31:20,922 --> 00:31:23,380 Tôi sẽ phải thực sự tham khảo ý kiến hướng dẫn của trình biên dịch 666 00:31:23,380 --> 00:31:26,171 để hiểu nếu có bất kỳ khác ý nghĩa, nhưng ở cái nhìn đầu tiên 667 00:31:26,171 --> 00:31:29,290 chỉ cần cố gắng và thử nghiệm, có vẻ là không có tác động. 668 00:31:29,290 --> 00:31:30,730 Câu hỏi. 669 00:31:30,730 --> 00:31:33,660 >> Vì vậy, chúng ta hãy giả mạo trước bây giờ, di chuyển khỏi tác dụng phụ 670 00:31:33,660 --> 00:31:36,660 là chức năng mà làm điều gì đó như trực quan trên màn hình với printf, 671 00:31:36,660 --> 00:31:38,090 nhưng không trả về giá trị. 672 00:31:38,090 --> 00:31:41,550 Và chức năng có trở lại giá trị như chúng tôi chỉ nhìn thấy một vài trong số. 673 00:31:41,550 --> 00:31:45,350 Chúng ta đã thấy khái niệm về phạm vi, và chúng ta sẽ thấy điều này một lần nữa và một lần nữa. 674 00:31:45,350 --> 00:31:47,210 Nhưng hiện nay, một lần nữa, sử dụng các quy tắc của ngón tay cái 675 00:31:47,210 --> 00:31:51,410 một biến chỉ có thể được sử dụng bên trong mở gần đây nhất 676 00:31:51,410 --> 00:31:54,350 và dấu ngoặc nhọn đóng như chúng ta thấy trong đó ví dụ cụ thể. 677 00:31:54,350 --> 00:31:56,910 >> Và như bạn chỉ ra, có một ability-- 678 00:31:56,910 --> 00:32:00,040 bạn có thể giải quyết một số vấn đề bằng cách đặt một biến toàn cầu 679 00:32:00,040 --> 00:32:01,290 ở đầu của một tập tin. 680 00:32:01,290 --> 00:32:03,630 Nhưng ở hầu hết các trường hợp chúng tôi sẽ tiết kiệm nụ cười khi đó, 681 00:32:03,630 --> 00:32:06,170 và thực sự thậm chí không đi vào rằng giải pháp cho bây giờ. 682 00:32:06,170 --> 00:32:09,890 Vì vậy, bây giờ, takeaway là biến có khái niệm về phạm vi. 683 00:32:09,890 --> 00:32:13,430 >> Nhưng bây giờ chúng ta hãy nhìn vào một cách khô thực sự tìm kiếm 684 00:32:13,430 --> 00:32:15,810 tại một số khá thú vị chi tiết thực hiện. 685 00:32:15,810 --> 00:32:17,810 Làm thế nào chúng ta có thể thể hiện thông tin. 686 00:32:17,810 --> 00:32:20,370 Và chúng tôi đã xem xét này trong tuần đầu tiên của lớp. 687 00:32:20,370 --> 00:32:23,320 Nhìn vào những chương trình, và nhắc nhở chúng ta về số thập phân. 688 00:32:23,320 --> 00:32:28,310 >> Nhưng nhớ lại từ tuần trước rằng C có các kiểu dữ liệu khác nhau và bó hơn, 689 00:32:28,310 --> 00:32:30,600 nhưng những người hữu ích nhất bây giờ có thể là các. 690 00:32:30,600 --> 00:32:36,030 Một char, hoặc nhân vật, trong đó xảy ra là một byte, hoặc tám tổng số bit. 691 00:32:36,030 --> 00:32:40,060 Và đó là để nói rằng kích thước của một char chỉ là một byte. 692 00:32:40,060 --> 00:32:45,370 Một byte là tám bit, vì vậy điều này có nghĩa là chúng ta có thể đại diện cho bao nhiêu ký tự. 693 00:32:45,370 --> 00:32:47,320 Có bao nhiêu chữ cái hoặc biểu tượng trên bàn phím 694 00:32:47,320 --> 00:32:49,210 nếu chúng ta có một byte hoặc tám bit. 695 00:32:49,210 --> 00:32:51,546 Hãy nhớ lại tuần không. 696 00:32:51,546 --> 00:32:53,420 Nếu bạn có tám bit, có bao nhiêu tổng giá trị 697 00:32:53,420 --> 00:32:55,503 bạn có thể đại diện với mô hình số không và những người thân? 698 00:32:55,503 --> 00:32:58,170 699 00:32:58,170 --> 00:33:00,260 One-- nhiều hơn thế. 700 00:33:00,260 --> 00:33:03,490 Vì vậy, tổng số 256 nếu bạn bắt đầu đếm từ số không. 701 00:33:03,490 --> 00:33:07,120 Vì vậy, nếu bạn có tám bits-- vì vậy nếu chúng ta có bóng đèn nhị phân của chúng tôi ở đây một lần nữa, 702 00:33:07,120 --> 00:33:12,180 chúng ta có thể biến những bóng đèn trên và tắt trong bất kỳ 256 mẫu độc đáo. 703 00:33:12,180 --> 00:33:13,640 >> Bây giờ đây là một chút vấn đề. 704 00:33:13,640 --> 00:33:16,857 Không quá nhiều tiếng Anh và ngôn ngữ lãng mạn, nhưng chắc chắn 705 00:33:16,857 --> 00:33:19,190 khi bạn giới thiệu, cho Ví dụ, ngôn ngữ châu Á, trong đó 706 00:33:19,190 --> 00:33:22,580 có thêm rất nhiều biểu tượng hơn như 26 chữ cái trong bảng chữ cái. 707 00:33:22,580 --> 00:33:24,390 Chúng tôi thực sự có thể cần nhiều hơn một byte. 708 00:33:24,390 --> 00:33:28,240 Và may mắn trong những năm gần đây có xã hội 709 00:33:28,240 --> 00:33:31,040 các tiêu chuẩn khác thông qua sử dụng nhiều hơn một byte mỗi lần sạc. 710 00:33:31,040 --> 00:33:34,210 >> Nhưng hiện nay trong C, mặc định chỉ là một byte hoặc tám bit. 711 00:33:34,210 --> 00:33:38,195 Một số nguyên, trong khi đó, là bốn byte, hay còn gọi là 32 bit. 712 00:33:38,195 --> 00:33:41,320 Điều đó có nghĩa những gì là lớn nhất có thể số chúng ta có thể đại diện với một int 713 00:33:41,320 --> 00:33:41,820 rõ ràng? 714 00:33:41,820 --> 00:33:44,426 715 00:33:44,426 --> 00:33:45,050 Với một tỷ USD. 716 00:33:45,050 --> 00:33:46,760 Vì vậy, nó là bốn tỷ nhân đạo hoặc thực hiện. 717 00:33:46,760 --> 00:33:49,840 2 với sức mạnh 32th, nếu chúng ta giả sử không có số âm 718 00:33:49,840 --> 00:33:52,530 và chỉ cần sử dụng tất cả tích cực số, đó là bốn tỷ 719 00:33:52,530 --> 00:33:53,730 cho hoặc mất khả năng. 720 00:33:53,730 --> 00:33:57,890 Một float, trong khi đó, là một loại khác nhau các kiểu dữ liệu trong C. Nó vẫn là một con số, 721 00:33:57,890 --> 00:33:58,990 nhưng đó là một số thực. 722 00:33:58,990 --> 00:34:00,660 Một cái gì đó với một dấu thập phân. 723 00:34:00,660 --> 00:34:03,000 Và nó chỉ ra rằng C cũng sử dụng bốn byte 724 00:34:03,000 --> 00:34:05,340 để đại diện cho các giá trị nổi điểm. 725 00:34:05,340 --> 00:34:09,420 >> Thật không may có bao nhiêu nổi các giá trị điểm đang có trên thế giới? 726 00:34:09,420 --> 00:34:11,582 Có bao nhiêu số thực nào? 727 00:34:11,582 --> 00:34:13,540 Có một vô hạn số, và cho rằng vấn đề 728 00:34:13,540 --> 00:34:15,164 có một số lượng vô hạn các số nguyên. 729 00:34:15,164 --> 00:34:18,070 Vì vậy, chúng tôi đã loại đào mình một lỗ ở đây. 730 00:34:18,070 --> 00:34:21,780 Nhờ đó mà dường như trong computers-- tại chương trình ít nhất viết bằng C trên them-- 731 00:34:21,780 --> 00:34:24,110 chỉ có thể đếm cao bốn tỷ cho hoặc mất, 732 00:34:24,110 --> 00:34:26,260 và nổi các giá trị điểm chỉ có thể rõ ràng 733 00:34:26,260 --> 00:34:28,330 có một số lượng hữu hạn của độ chính xác. 734 00:34:28,330 --> 00:34:30,810 Chỉ có rất nhiều chữ số sau dấu thập phân của họ. 735 00:34:30,810 --> 00:34:32,822 >> Bởi vì, tất nhiên, nếu bạn chỉ có 32 bit, 736 00:34:32,822 --> 00:34:36,030 Tôi không biết làm thế nào chúng ta sẽ đi về đại diện numbers-- thực thể 737 00:34:36,030 --> 00:34:37,409 với các loại khác nhau của các mẫu. 738 00:34:37,409 --> 00:34:40,030 Nhưng có chắc chắn là một hữu hạn số mô hình như vậy, 739 00:34:40,030 --> 00:34:41,830 vì vậy ở đây cũng vậy, đây là vấn đề. 740 00:34:41,830 --> 00:34:43,710 >> Bây giờ chúng ta có thể tránh được vấn đề một chút. 741 00:34:43,710 --> 00:34:45,710 Nếu bạn không sử dụng một phao, bạn có thể sử dụng một đôi 742 00:34:45,710 --> 00:34:50,230 trong C, cho phép bạn tám byte, là cách nhiều mẫu có thể có của số không 743 00:34:50,230 --> 00:34:50,730 và những người thân. 744 00:34:50,730 --> 00:34:55,199 Nhưng nó vẫn còn hữu hạn, đó là sẽ là vấn đề nếu bạn viết phần mềm 745 00:34:55,199 --> 00:34:57,670 cho đồ họa hoặc ưa thích công thức toán học. 746 00:34:57,670 --> 00:35:00,410 Vì vậy, bạn thực sự có thể muốn đếm lớn hơn đó. 747 00:35:00,410 --> 00:35:05,640 Một dài long-- ngớ ngẩn named-- cũng tám byte, hoặc 64 bit là, 748 00:35:05,640 --> 00:35:10,260 và điều này là gấp đôi thời gian như một int, và đó là một giá trị số nguyên dài. 749 00:35:10,260 --> 00:35:15,655 >> Fact-- thú vị nếu một int là bốn byte, bao lâu là một chặng đường dài trong C thường? 750 00:35:15,655 --> 00:35:18,290 751 00:35:18,290 --> 00:35:21,560 Ngoài ra bốn byte, nhưng một lâu dài là tám byte, 752 00:35:21,560 --> 00:35:23,050 và điều này là vì các lý do lịch sử. 753 00:35:23,050 --> 00:35:26,450 >> Nhưng bây giờ takeaway chỉ là dữ liệu có 754 00:35:26,450 --> 00:35:29,625 được đại diện trong một computer-- đó là một thiết bị vật lý như điện, 755 00:35:29,625 --> 00:35:32,190 nó thường được lái xe những số không và ones-- 756 00:35:32,190 --> 00:35:34,320 với số lượng hữu hạn của độ chính xác. 757 00:35:34,320 --> 00:35:35,620 Vì vậy, vấn đề là những gì sau đó? 758 00:35:35,620 --> 00:35:37,480 >> Cũng có một vấn đề tràn số nguyên. 759 00:35:37,480 --> 00:35:39,780 Không chỉ trong C, nhưng trong máy tính nói chung. 760 00:35:39,780 --> 00:35:42,590 Ví dụ, nếu điều này là một byte có giá trị một bit-- 761 00:35:42,590 --> 00:35:45,120 vì vậy nếu đây là tám bit-- tất cả trong đó có một số. 762 00:35:45,120 --> 00:35:47,300 Số lượng này là gì đại diện nếu chúng ta giả 763 00:35:47,300 --> 00:35:50,730 đó là tất cả các giá trị tích cực trong hệ nhị phân? 764 00:35:50,730 --> 00:35:54,410 >> 255, và nó không phải là 256, vì không là số lượng thấp nhất. 765 00:35:54,410 --> 00:35:56,760 Vì vậy, 255 là cao nhất một, nhưng vấn đề 766 00:35:56,760 --> 00:36:00,330 là giả mà tôi muốn tăng biến này 767 00:36:00,330 --> 00:36:04,030 đang sử dụng tổng cộng tám bit nếu tôi muốn tăng nó. 768 00:36:04,030 --> 00:36:07,160 >> Cũng như ngay sau khi tôi thêm một một cho tất cả những người này, 769 00:36:07,160 --> 00:36:10,500 có lẽ bạn có thể tưởng tượng chỉ visually-- như thực hiện một trong những sử dụng decimals-- 770 00:36:10,500 --> 00:36:12,300 một cái gì đó sẽ chảy vào bên trái. 771 00:36:12,300 --> 00:36:15,590 Và quả thực, nếu tôi thêm số một này, những gì xảy ra trong hệ nhị phân 772 00:36:15,590 --> 00:36:17,670 là nó tràn trở lại bằng không. 773 00:36:17,670 --> 00:36:21,730 >> Vì vậy, nếu bạn chỉ use-- không phải là một int, nhưng một byte đơn để đếm số nguyên 774 00:36:21,730 --> 00:36:27,170 trong một chương trình, bởi default-- càng sớm càng bạn nhận được đến 250, 251, 252, 253, 254, 775 00:36:27,170 --> 00:36:32,710 255-- 0 đến sau 255, mà có lẽ không phải những gì 776 00:36:32,710 --> 00:36:34,790 một người sử dụng sẽ mong đợi. 777 00:36:34,790 --> 00:36:39,620 >> Bây giờ trong khi ở dấu chấm động thế giới, bạn cũng có một vấn đề tương tự. 778 00:36:39,620 --> 00:36:42,670 Không quá nhiều với number-- lớn nhất mặc dù đó vẫn là một vấn đề. 779 00:36:42,670 --> 00:36:45,360 Nhưng với số lượng chính xác mà bạn có thể đại diện. 780 00:36:45,360 --> 00:36:49,490 Vì vậy, chúng ta hãy xem ví dụ này ở đây cũng từ code-- nguồn của ngày hôm nay 781 00:36:49,490 --> 00:36:52,070 phao 0.c. 782 00:36:52,070 --> 00:36:54,280 >> Và nhận thấy đó là một siêu chương trình đơn giản 783 00:36:54,280 --> 00:36:56,580 rõ ràng nên in ra giá trị gì? 784 00:36:56,580 --> 00:37:00,777 785 00:37:00,777 --> 00:37:04,110 Điều gì làm bạn cược này sẽ in mặc dù có một chút của cú pháp mới 786 00:37:04,110 --> 00:37:05,540 ở đây? 787 00:37:05,540 --> 00:37:06,700 Vì vậy, hy vọng 0.1. 788 00:37:06,700 --> 00:37:10,000 Vì vậy, tương đương với một phần mười bởi vì tôi đang làm 1 chia cho 10. 789 00:37:10,000 --> 00:37:12,430 Tôi đang lưu trữ các câu trả lời trong một biến gọi là f. 790 00:37:12,430 --> 00:37:15,850 Biến đó là kiểu float, mà là một từ khóa Tôi chỉ đề nghị tồn tại. 791 00:37:15,850 --> 00:37:18,910 >> Chúng tôi đã không nhìn thấy điều này trước đây, nhưng đây là loại một cách gọn gàng trong printf 792 00:37:18,910 --> 00:37:22,110 để xác định có bao nhiêu chữ số bạn muốn nhìn thấy sau khi một điểm thập phân. 793 00:37:22,110 --> 00:37:25,020 Vì vậy, ký hiệu này chỉ có nghĩa là rằng đây là một giữ chỗ. 794 00:37:25,020 --> 00:37:27,900 Đó là một dấu chấm động giá trị, và oh, bằng cách này, 795 00:37:27,900 --> 00:37:31,389 hiển thị nó với dấu thập phân với một số sau dấu thập phân. 796 00:37:31,389 --> 00:37:33,180 Vì vậy, đó là số đáng kể chữ số, 797 00:37:33,180 --> 00:37:34,650 vậy để nói chuyện, bạn có thể muốn. 798 00:37:34,650 --> 00:37:40,450 >> Vì vậy, hãy để tôi đi trước và làm làm nổi-0, ./float-0, 799 00:37:40,450 --> 00:37:46,660 và dường như 1 chia cho 10 là 0.0. 800 00:37:46,660 --> 00:37:47,760 Bây giờ tại sao điều này? 801 00:37:47,760 --> 00:37:51,380 >> Vâng một lần nữa, các máy tính đang tôi theo nghĩa đen, và tôi đã viết 1 802 00:37:51,380 --> 00:37:56,680 và tôi bằng văn bản 10, và hãy đoán những gì là kiểu dữ liệu giả định cho hai 803 00:37:56,680 --> 00:37:58,440 giá trị? 804 00:37:58,440 --> 00:38:00,970 Một int, đó là kỹ thuật một chút gì đó khác nhau. 805 00:38:00,970 --> 00:38:04,150 Đó là điển hình một thời gian dài, nhưng nó cuối cùng là một giá trị không thể thiếu. 806 00:38:04,150 --> 00:38:06,030 Không phải là một giá trị dấu chấm. 807 00:38:06,030 --> 00:38:09,456 >> Mà là để nói rằng nếu điều này là một int và đây là một int, 808 00:38:09,456 --> 00:38:11,830 vấn đề là máy tính không có khả năng 809 00:38:11,830 --> 00:38:13,680 thậm chí lưu trữ mà dấu thập phân. 810 00:38:13,680 --> 00:38:16,430 Vì vậy, khi bạn làm 1 chia 10 cách sử dụng số nguyên 811 00:38:16,430 --> 00:38:20,950 cho cả tử số và mẫu số, câu trả lời phải là 0.1. 812 00:38:20,950 --> 00:38:24,930 Nhưng vì computer-- đó là integers-- 813 00:38:24,930 --> 00:38:27,430 không biết phải làm gì với 0,1. 814 00:38:27,430 --> 00:38:30,010 >> Vì vậy, những gì nó làm rõ ràng không? 815 00:38:30,010 --> 00:38:33,120 Nó chỉ cần ném nó đi, và những gì tôi nhìn thấy cuối cùng 816 00:38:33,120 --> 00:38:38,830 là 0.0 chỉ vì tôi nhấn mạnh rằng printf chỉ cho tôi một điểm thập phân. 817 00:38:38,830 --> 00:38:41,740 Nhưng vấn đề là nếu bạn chia một số nguyên của một số nguyên, 818 00:38:41,740 --> 00:38:44,347 bạn sẽ get-- theo định nghĩa C-- của một số nguyên. 819 00:38:44,347 --> 00:38:46,680 Và nó sẽ không làm một cái gì đó tốt đẹp và thuận tiện 820 00:38:46,680 --> 00:38:49,040 như vòng nó lên đến gần nhất lên hoặc xuống. 821 00:38:49,040 --> 00:38:51,860 Nó sẽ cắt xén tất cả mọi thứ sau khi các số thập phân. 822 00:38:51,860 --> 00:38:54,030 >> Vì vậy, chỉ bằng trực giác, những gì có thể là một sửa chữa? 823 00:38:54,030 --> 00:38:55,351 Sửa chữa đơn giản nhất ở đây là gì? 824 00:38:55,351 --> 00:38:55,850 Vâng? 825 00:38:55,850 --> 00:39:00,570 826 00:39:00,570 --> 00:39:01,100 Chính xác. 827 00:39:01,100 --> 00:39:04,200 Tại sao chúng ta không chỉ điều trị này như là nổi các giá trị điểm hiệu quả 828 00:39:04,200 --> 00:39:05,860 biến chúng thành phao hoặc gấp đôi. 829 00:39:05,860 --> 00:39:10,500 Và bây giờ nếu tôi làm cho nổi-0, hoặc nếu tôi biên dịch nổi-1, 830 00:39:10,500 --> 00:39:12,570 là giống hệt với những gì đã được chỉ là đề xuất. 831 00:39:12,570 --> 00:39:16,400 Và bây giờ tôi làm nổi-0, bây giờ tôi có được 0,1 tôi. 832 00:39:16,400 --> 00:39:17,234 >> Bây giờ điều này là tuyệt vời. 833 00:39:17,234 --> 00:39:19,441 Nhưng bây giờ tôi sẽ làm một chút gì đó khác nhau. 834 00:39:19,441 --> 00:39:22,280 Tôi tò mò để xem những gì thực sự xảy ra dưới mui xe, 835 00:39:22,280 --> 00:39:26,050 và tôi sẽ in này ra 28 chữ số thập phân. 836 00:39:26,050 --> 00:39:29,730 Tôi muốn thực sự thấy 0.1000-- một infinite-- 837 00:39:29,730 --> 00:39:32,710 [Không nghe được] 27 số không sau đó 0.1. 838 00:39:32,710 --> 00:39:34,740 >> Vâng chúng ta hãy xem nếu đó là những gì tôi thực sự nhận được. 839 00:39:34,740 --> 00:39:39,430 Hãy cùng một tập tin nổi-0. 840 00:39:39,430 --> 00:39:41,150 ./floats-0. 841 00:39:41,150 --> 00:39:44,380 Hãy phóng to đáp trả mạnh mẽ. 842 00:39:44,380 --> 00:39:49,980 Tất cả thời gian này, bạn đã suy nghĩ 1 chia cho 10 là 10%, tương đương 0.1. 843 00:39:49,980 --> 00:39:50,810 Nó không phải. 844 00:39:50,810 --> 00:39:53,210 Ít nhất cho đến nay là máy tính có liên quan. 845 00:39:53,210 --> 00:39:57,060 >> Bây giờ why-- OK, đó là hoàn thành lời nói dối 1 chia cho 10 là 0,1. 846 00:39:57,060 --> 00:39:59,710 Nhưng đó không phải là why-- takeaway ngày hôm nay. 847 00:39:59,710 --> 00:40:04,010 Vậy tại sao máy tính nghĩ rằng, không giống như tất cả chúng ta trong phòng, 848 00:40:04,010 --> 00:40:06,870 mà 1 chia cho 10 là thực sự là giá trị điên? 849 00:40:06,870 --> 00:40:10,620 Máy tính làm rõ ràng là gì? 850 00:40:10,620 --> 00:40:12,490 Đó là những gì? 851 00:40:12,490 --> 00:40:13,785 >> Nó không tràn, cho mỗi gia nhập. 852 00:40:13,785 --> 00:40:15,910 Tràn là thường khi bạn quấn quanh một giá trị. 853 00:40:15,910 --> 00:40:18,970 Đó là vấn đề này không chính xác trong một giá trị dấu chấm động 854 00:40:18,970 --> 00:40:22,220 nơi mà bạn chỉ có 32 hoặc thậm chí 64 bit. 855 00:40:22,220 --> 00:40:25,230 Nhưng nếu có một vô hạn số numbers-- thực 856 00:40:25,230 --> 00:40:27,940 với số điểm thập phân và số thereafter-- chắc chắn 857 00:40:27,940 --> 00:40:29,380 bạn không thể đại diện cho tất cả chúng. 858 00:40:29,380 --> 00:40:32,870 Vì vậy, các máy tính đã được chúng ta những trận đấu gần nhất 859 00:40:32,870 --> 00:40:37,090 để giá trị của nó có thể đại diện cho sử dụng mà nhiều bit với giá trị Tôi thực sự muốn, 860 00:40:37,090 --> 00:40:38,690 đó là 0,1. 861 00:40:38,690 --> 00:40:40,685 >> Thật không may, nếu bạn bắt đầu làm toán, hoặc bạn 862 00:40:40,685 --> 00:40:44,360 bắt đầu liên quan đến các loại trôi nổi các giá trị điểm quan trọng trong programs-- 863 00:40:44,360 --> 00:40:46,770 phần mềm tài chính, quân sự bất cứ điều gì software-- 864 00:40:46,770 --> 00:40:49,090 nơi nhận thức là có lẽ là khá quan trọng. 865 00:40:49,090 --> 00:40:51,520 Và bạn bắt đầu thêm số như thế này, và bắt đầu 866 00:40:51,520 --> 00:40:54,050 chạy phần mềm với đầu vào thực sự lớn 867 00:40:54,050 --> 00:40:56,890 hoặc cho rất nhiều giờ hoặc nhiều ngày hoặc nhiều năm, 868 00:40:56,890 --> 00:41:01,060 những sai lầm nhỏ chút chắc chắn có thể tăng lên theo thời gian. 869 00:41:01,060 --> 00:41:04,252 >> Bây giờ là một sang một bên, nếu bạn đã bao giờ Superman nhìn thấy 3 hoặc Office Space 870 00:41:04,252 --> 00:41:05,960 và bạn có thể nhớ lại làm thế nào những kẻ đánh cắp 871 00:41:05,960 --> 00:41:08,668 rất nhiều tiền từ các máy tính của họ bằng cách sử dụng các giá trị điểm nổi 872 00:41:08,668 --> 00:41:11,290 và thêm lên ít còn lại, hy vọng bộ phim mà 873 00:41:11,290 --> 00:41:12,390 bây giờ có ý nghĩa hơn. 874 00:41:12,390 --> 00:41:14,930 Đây là những gì họ ám chỉ đến trong bộ phim đó. 875 00:41:14,930 --> 00:41:16,710 Thực tế là hầu hết các công ty sẽ không nhìn 876 00:41:16,710 --> 00:41:18,600 sau khi một số lượng nhất định các chữ số thập phân, 877 00:41:18,600 --> 00:41:20,009 nhưng đó là những thành phần của xu. 878 00:41:20,009 --> 00:41:22,550 Vì vậy, bạn bắt đầu thêm chúng lên, bạn bắt đầu kiếm được nhiều tiền 879 00:41:22,550 --> 00:41:23,424 trong tài khoản ngân hàng của bạn. 880 00:41:23,424 --> 00:41:25,160 Vì vậy, đó là Office Space giải thích. 881 00:41:25,160 --> 00:41:28,220 >> Bây giờ không may ngoài Office Space, có 882 00:41:28,220 --> 00:41:31,794 một số hợp pháp gây phiền hà và tác động đáng kể 883 00:41:31,794 --> 00:41:33,710 của các loại quyết định thiết kế cơ bản, 884 00:41:33,710 --> 00:41:35,990 và thực sự là một trong những lý do chúng tôi sử dụng C trong khóa học 885 00:41:35,990 --> 00:41:39,640 là như vậy mà bạn thực sự có đất này tăng sự hiểu biết về cách thức các máy tính làm việc, 886 00:41:39,640 --> 00:41:42,440 phần mềm hoạt động như thế nào, và không có bất cứ điều gì cho các cấp. 887 00:41:42,440 --> 00:41:45,820 >> Và quả thật không may, ngay cả với rằng sự hiểu biết cơ bản, 888 00:41:45,820 --> 00:41:47,370 con người chúng ta phạm sai lầm. 889 00:41:47,370 --> 00:41:51,310 Và những gì tôi nghĩ rằng tôi muốn chia sẻ là Video tám phút này đây thực 890 00:41:51,310 --> 00:41:56,980 từ một tập phim Modern Marvels, đó là một chương trình giáo dục về cách làm việc 891 00:41:56,980 --> 00:42:00,370 mà vẽ hai hình ảnh trong khi sử dụng không đúng 892 00:42:00,370 --> 00:42:02,540 và hiểu biết về giá trị dấu chấm động 893 00:42:02,540 --> 00:42:05,610 dẫn đến một số đáng kể kết quả đáng tiếc. 894 00:42:05,610 --> 00:42:06,363 Chúng ta hãy có một cái nhìn. 895 00:42:06,363 --> 00:42:07,029 [VIDEO xem lại] 896 00:42:07,029 --> 00:42:11,290 -Chúng tôi bây giờ quay trở lại "Kỹ thuật Thảm họa "trên Modern Marvels. 897 00:42:11,290 --> 00:42:12,940 Máy tính. 898 00:42:12,940 --> 00:42:15,580 Tất cả chúng ta đã đến để chấp nhận vấn đề thường bực bội mà 899 00:42:15,580 --> 00:42:20,960 có với them-- lỗi, virus, và phần mềm glitches-- cho giá nhỏ 900 00:42:20,960 --> 00:42:23,100 phải trả cho sự tiện lợi. 901 00:42:23,100 --> 00:42:27,770 Nhưng trong công nghệ cao và tốc độ cao quân sự và chương trình không gian ứng dụng, 902 00:42:27,770 --> 00:42:32,780 vấn đề nhỏ nhất có thể được phóng vào thảm họa. 903 00:42:32,780 --> 00:42:38,880 >> Ngày 4 tháng Sáu năm 1996, các nhà khoa học chuẩn bị để khởi động một tên lửa không người lái Ariane 5. 904 00:42:38,880 --> 00:42:41,190 Nó được thực hiện khoa học vệ tinh được thiết kế 905 00:42:41,190 --> 00:42:44,570 thiết lập một cách chính xác như thế nào Tương tác từ trường của Trái đất 906 00:42:44,570 --> 00:42:47,380 với sức gió mặt trời. 907 00:42:47,380 --> 00:42:50,580 Các tên lửa được xây dựng cho Cơ quan Vũ trụ châu Âu, 908 00:42:50,580 --> 00:42:54,400 và dỡ bỏ khỏi cơ sở của mình trên bờ biển French Guiana. 909 00:42:54,400 --> 00:42:57,520 >> -At Khoảng 37 giây vào chuyến bay, họ lần đầu tiên 910 00:42:57,520 --> 00:42:59,070 một cái gì đó nhận thấy đã đi sai. 911 00:42:59,070 --> 00:43:02,240 Đó là các đầu phun được xoay trong một cách mà họ thực sự không nên. 912 00:43:02,240 --> 00:43:06,550 Khoảng 40 giây vào chuyến bay, rõ ràng chiếc xe đang gặp khó khăn, 913 00:43:06,550 --> 00:43:08,820 và đó là khi họ thực hiện quyết định phá hủy nó. 914 00:43:08,820 --> 00:43:12,370 Nhân viên an toàn phạm vi, với quyết tâm to lớn, nhấn nút 915 00:43:12,370 --> 00:43:18,030 và thổi lên các tên lửa trước khi nó có thể trở thành một mối nguy hiểm cho an toàn công cộng. 916 00:43:18,030 --> 00:43:21,010 >> -Đây Là đầu tiên hành trình của tên lửa Ariane 5, 917 00:43:21,010 --> 00:43:23,920 và phá hủy nó mất đặt vì các lỗ hổng 918 00:43:23,920 --> 00:43:25,932 nhúng vào trong phần mềm của tên lửa. 919 00:43:25,932 --> 00:43:27,640 -Các Vấn đề trên Ariane là có 920 00:43:27,640 --> 00:43:30,500 là một số đòi hỏi 64 bit để thể hiện, 921 00:43:30,500 --> 00:43:33,560 và họ muốn chuyển đổi nó đến một số 16-bit. 922 00:43:33,560 --> 00:43:36,820 Họ cho rằng số lượng sẽ không bao giờ là rất lớn. 923 00:43:36,820 --> 00:43:40,940 Rằng hầu hết những chữ số trong số 64-bit là số không. 924 00:43:40,940 --> 00:43:42,450 Họ đã lầm. 925 00:43:42,450 --> 00:43:45,000 >> -Các Không có khả năng của một chương trình phần mềm để chấp nhận 926 00:43:45,000 --> 00:43:49,460 các loại số được tạo ra bởi khác là gốc rễ của sự thất bại. 927 00:43:49,460 --> 00:43:54,260 Phát triển phần mềm đã trở thành một một phần rất tốn kém của công nghệ mới. 928 00:43:54,260 --> 00:43:57,060 Các tên lửa Ariane 4 có đã rất thành công. 929 00:43:57,060 --> 00:44:01,600 Vì vậy, phần lớn các phần mềm được tạo ra cho nó cũng được sử dụng trong tên lửa Ariane 5. 930 00:44:01,600 --> 00:44:04,790 >> -Các Vấn đề cơ bản là các tên lửa Ariane 5. 931 00:44:04,790 --> 00:44:11,200 Được faster-- tăng tốc nhanh hơn, và phần mềm đã không được tính đó. 932 00:44:11,200 --> 00:44:14,910 >> -Các Phá hủy các tên lửa là một thảm họa tài chính khổng lồ. 933 00:44:14,910 --> 00:44:18,630 Tất cả đều do một lỗi phần mềm phút. 934 00:44:18,630 --> 00:44:21,160 Nhưng đây không phải là lần đầu tiên Hiện vấn đề chuyển đổi dữ liệu 935 00:44:21,160 --> 00:44:24,770 đã cản công nghệ tên lửa hiện đại. 936 00:44:24,770 --> 00:44:28,020 >> -Trong năm 1991 với sự khởi đầu Chiến tranh vùng Vịnh đầu tiên, 937 00:44:28,020 --> 00:44:30,540 các tên lửa Patriot kinh nghiệm một loại tương tự 938 00:44:30,540 --> 00:44:32,465 của một vấn đề chuyển đổi số. 939 00:44:32,465 --> 00:44:36,760 Và kết quả là 28 people-- 28 Soldiers-- Mỹ đã thiệt mạng, 940 00:44:36,760 --> 00:44:39,010 và khoảng một trăm người khác bị thương. 941 00:44:39,010 --> 00:44:42,830 Khi Patriot, được cho là để bảo vệ chống lại các tên lửa Scud đến, 942 00:44:42,830 --> 00:44:45,780 thất bại trong việc bắn tên lửa. 943 00:44:45,780 --> 00:44:51,610 >> -Khi Iraq xâm chiếm Kuwait, và Mỹ đưa ra Bão táp sa mạc vào đầu năm 1991, 944 00:44:51,610 --> 00:44:55,720 Pin tên lửa Patriot đã được triển khai để bảo vệ Ả Rập Saudi và Israel 945 00:44:55,720 --> 00:44:59,180 từ các cuộc tấn công tên lửa Scud của Iraq. 946 00:44:59,180 --> 00:45:03,080 Patriot là một Mỹ tầm trung bề mặt-đối-không hệ thống 947 00:45:03,080 --> 00:45:06,530 sản xuất bởi công ty Raytheon. 948 00:45:06,530 --> 00:45:09,500 >> -Các Kích thước của Patriot đánh chặn itself-- 949 00:45:09,500 --> 00:45:14,705 nó dài khoảng khoảng 20 feet, và nó chỉ nặng khoảng 2.000 kg. 950 00:45:14,705 --> 00:45:19,090 Và nó mang một đầu đạn hạt nhân của khoảng, Tôi nghĩ đó là khoảng 150 pounds. 951 00:45:19,090 --> 00:45:23,880 Và chính nó là đầu đạn hạt nhân một vụ nổ, trong đó 952 00:45:23,880 --> 00:45:26,700 có mảnh vỡ xung quanh mình. 953 00:45:26,700 --> 00:45:31,630 Vì vậy, vỏ của đầu đạn hạt nhân là được thiết kế để hoạt động như một đạn chì. 954 00:45:31,630 --> 00:45:34,040 >> -Các Tên lửa được thực hiện bốn trên mỗi container, 955 00:45:34,040 --> 00:45:37,170 và được vận chuyển bằng một trailer bán. 956 00:45:37,170 --> 00:45:44,880 >> -Các Hệ thống chống tên lửa Patriot đi lại ít nhất 20 năm nay. 957 00:45:44,880 --> 00:45:48,380 Nó được thiết kế ban đầu như một tên lửa phòng không 958 00:45:48,380 --> 00:45:50,810 để bắn hạ máy bay của đối phương. 959 00:45:50,810 --> 00:45:54,410 Trong chiến tranh vùng Vịnh đầu tiên khi chiến tranh đã vào, 960 00:45:54,410 --> 00:45:59,650 Quân đội muốn sử dụng nó để bắn hạ tên lửa Scud, không phải máy bay. 961 00:45:59,650 --> 00:46:03,580 Không quân Iraq đã không quá nhiều của một vấn đề, 962 00:46:03,580 --> 00:46:06,590 nhưng quân đội đã lo lắng về tên lửa Scud. 963 00:46:06,590 --> 00:46:10,120 Và vì vậy họ đã cố gắng để nâng cấp Patriot. 964 00:46:10,120 --> 00:46:12,740 >> -Intercepting Một kẻ thù tên lửa đi du lịch ở tốc độ Mach 5 965 00:46:12,740 --> 00:46:15,670 được sẽ được thử thách đủ. 966 00:46:15,670 --> 00:46:18,440 Nhưng khi Patriot được đưa vào hoạt động, 967 00:46:18,440 --> 00:46:22,580 Quân đội đã không nhận thức một sửa đổi của Iraq mà 968 00:46:22,580 --> 00:46:25,880 làm tên lửa Scud của họ gần không thể để nó. 969 00:46:25,880 --> 00:46:30,690 >> Cái gì đã xảy ra là tên lửa Scud mà đã đi vào là không ổn định. 970 00:46:30,690 --> 00:46:32,000 Họ đã lung lay. 971 00:46:32,000 --> 00:46:37,210 Lý do cho điều này là Iraqis-- để có được 600 cây số ra 972 00:46:37,210 --> 00:46:41,680 của một phạm vi 300 km missile-- mất trọng lượng của đầu đạn phía trước, 973 00:46:41,680 --> 00:46:43,340 và thực hiện các đầu đạn nhẹ hơn. 974 00:46:43,340 --> 00:46:48,490 Vì vậy, bây giờ của Patriot cố gắng để đến tại Scud, và hầu hết các time-- 975 00:46:48,490 --> 00:46:52,880 đại đa số các time-- nó sẽ chỉ bay của tên lửa Scud. 976 00:46:52,880 --> 00:46:57,120 >> -Một Khi các nhà khai thác hệ thống Patriot nhận ra Patriot bỏ lỡ mục tiêu của nó, 977 00:46:57,120 --> 00:47:01,630 họ nổ đầu đạn của Patriot để tránh thương vong có thể nếu nó 978 00:47:01,630 --> 00:47:04,440 được phép rơi xuống mặt đất. 979 00:47:04,440 --> 00:47:08,700 >> -Điều Đó là những gì hầu hết mọi người thấy như quả cầu lửa lớn trên bầu trời, 980 00:47:08,700 --> 00:47:14,180 và hiểu lầm như chặn các tên lửa Scud đầu đạn hạt nhân. 981 00:47:14,180 --> 00:47:18,020 >> -Although Trên bầu trời đêm, Patriots xuất hiện để được phá hủy thành công 982 00:47:18,020 --> 00:47:23,280 Tên lửa Scud, tại Dhahran có thể có không có sai lầm về hiệu quả của nó. 983 00:47:23,280 --> 00:47:27,930 Có hệ thống radar của Patriot bị mất theo dõi của một tên lửa Scud đến 984 00:47:27,930 --> 00:47:30,260 và không bao giờ đưa ra do để một lỗ hổng phần mềm. 985 00:47:30,260 --> 00:47:34,060 986 00:47:34,060 --> 00:47:38,880 >> Đó là người Israel đầu tiên phát hiện ra mà còn là hệ thống trên, 987 00:47:38,880 --> 00:47:41,130 lớn hơn các thời gian khác biệt đã trở thành. 988 00:47:41,130 --> 00:47:44,770 Do một đồng hồ nhúng trong máy tính của hệ thống. 989 00:47:44,770 --> 00:47:48,190 >> -Về Hai tuần trước khi thảm kịch ở Dhahran, 990 00:47:48,190 --> 00:47:50,720 Israel báo cáo Bộ Quốc phòng 991 00:47:50,720 --> 00:47:52,410 rằng hệ thống đã làm mất thời gian. 992 00:47:52,410 --> 00:47:54,410 Sau khoảng tám giờ chạy, họ nhận thấy 993 00:47:54,410 --> 00:47:57,690 rằng hệ thống của trở thành đáng chú ý kém chính xác hơn. 994 00:47:57,690 --> 00:48:01,850 Bộ Quốc phòng trả lời bằng cách nói với tất cả các pin Patriot 995 00:48:01,850 --> 00:48:04,800 để không để lại các hệ thống trong một thời gian dài. 996 00:48:04,800 --> 00:48:06,980 Họ không bao giờ nói những gì một thời gian dài được. 997 00:48:06,980 --> 00:48:09,140 8 giờ, 10 giờ, một nghìn giờ. 998 00:48:09,140 --> 00:48:11,300 Không ai biết. 999 00:48:11,300 --> 00:48:13,320 >> -Các Pin Patriot đóng tại doanh trại 1000 00:48:13,320 --> 00:48:18,310 tại Dhahran và thiếu sót nội bộ của mình đồng hồ đã được bật lên trong hơn 100 giờ 1001 00:48:18,310 --> 00:48:21,520 vào đêm 25 tháng 2. 1002 00:48:21,520 --> 00:48:25,792 >> -Nó Theo dõi thời gian với độ chính xác khoảng một phần mười của một giây. 1003 00:48:25,792 --> 00:48:27,950 Bây giờ một phần mười của một giây là một con số thú vị 1004 00:48:27,950 --> 00:48:31,850 bởi vì nó không thể được thể hiện trong hệ nhị phân chính xác, mà 1005 00:48:31,850 --> 00:48:36,500 có nghĩa là nó không thể được thể hiện một cách chính xác trong bất kỳ máy tính kỹ thuật số hiện đại. 1006 00:48:36,500 --> 00:48:41,070 Thật khó để tin, nhưng sử dụng như là một ví dụ. 1007 00:48:41,070 --> 00:48:43,420 >> Hãy lấy số thứ ba. 1008 00:48:43,420 --> 00:48:47,330 Một phần ba không thể thể hiện trong thập phân chính xác. 1009 00:48:47,330 --> 00:48:52,060 Một phần ba là 0,333 diễn ra trong vô cùng. 1010 00:48:52,060 --> 00:48:56,420 Không có cách nào để làm điều đó với độ chính xác tuyệt đối trong một số thập phân. 1011 00:48:56,420 --> 00:48:59,530 Đó chính là loại vấn đề đã xảy ra trong Patriot. 1012 00:48:59,530 --> 00:49:04,040 Các hệ thống còn chạy, tồi tệ hơn đã trở thành lỗi thời gian. 1013 00:49:04,040 --> 00:49:08,840 >> -Sau 100 giờ hoạt động, lỗi trong thời gian chỉ khoảng một phần ba 1014 00:49:08,840 --> 00:49:10,440 của một giây. 1015 00:49:10,440 --> 00:49:14,150 Nhưng về nhắm mục tiêu một tên lửa đi du lịch ở tốc độ Mach 5, 1016 00:49:14,150 --> 00:49:18,560 nó dẫn đến một theo dõi lỗi của hơn 600 mét. 1017 00:49:18,560 --> 00:49:21,870 Nó sẽ là một lỗi nghiêm trọng cho những người lính tại Dhahran. 1018 00:49:21,870 --> 00:49:28,455 >> Cái gì đã xảy ra là một khởi động tên lửa Scud là phát hiện bởi vệ tinh cảnh báo sớm, 1019 00:49:28,455 --> 00:49:32,710 và họ biết rằng một tên lửa Scud đã đến trong chỉ đạo chung của họ. 1020 00:49:32,710 --> 00:49:35,150 Họ không biết nơi nó sẽ đến. 1021 00:49:35,150 --> 00:49:38,210 Bây giờ nó đã lên đến radar thành phần của hệ thống Patriot 1022 00:49:38,210 --> 00:49:43,150 bảo vệ Dhahran để xác định vị trí và giữ theo dõi các tên lửa của địch. 1023 00:49:43,150 --> 00:49:44,561 >> -Các Radar là rất thông minh. 1024 00:49:44,561 --> 00:49:46,560 Nó thực sự có thể theo dõi vị trí của tên lửa Scud 1025 00:49:46,560 --> 00:49:48,930 và sau đó dự đoán nơi nó có lẽ sẽ 1026 00:49:48,930 --> 00:49:51,380 trong thời gian tới radar gửi một xung ra. 1027 00:49:51,380 --> 00:49:53,040 Đó được gọi là cổng phạm vi. 1028 00:49:53,040 --> 00:49:57,620 >> -Sau Khi Patriot quyết định có đủ thời gian 1029 00:49:57,620 --> 00:50:02,400 thông qua để quay trở lại và kiểm tra tiếp theo vị trí cho đối tượng phát hiện này 1030 00:50:02,400 --> 00:50:03,550 nó đi lại. 1031 00:50:03,550 --> 00:50:07,820 Vì vậy, khi trở lại sai vị trí, nó sau đó thấy không có đối tượng. 1032 00:50:07,820 --> 00:50:10,360 Và nó quyết định rằng không có đối tượng. 1033 00:50:10,360 --> 00:50:13,630 Đó là có một phát hiện sai và tụt xuống theo dõi. 1034 00:50:13,630 --> 00:50:16,970 >> -Các Đến Scud biến mất từ màn hình radar, 1035 00:50:16,970 --> 00:50:20,200 và giây sau đó, đâm sầm vào doanh trại. 1036 00:50:20,200 --> 00:50:22,570 Các tên lửa Scud giết chết 28. 1037 00:50:22,570 --> 00:50:26,110 Đó là người cuối cùng bị sa thải trong cuộc chiến tranh vùng Vịnh đầu tiên. 1038 00:50:26,110 --> 00:50:31,920 Buồn thay, phần mềm cập nhật đến lúc bình minh ngày hôm sau. 1039 00:50:31,920 --> 00:50:34,870 Các phần mềm có lỗ hổng được cố định, đóng cửa 1040 00:50:34,870 --> 00:50:39,150 một chương trong khó khăn lịch sử của tên lửa Patriot. 1041 00:50:39,150 --> 00:50:40,030 >> [END IMG xem lại] 1042 00:50:40,030 --> 00:50:41,488 >> DAVID J. Malan: Đó là nó cho CS50. 1043 00:50:41,488 --> 00:50:42,820 Chúng ta sẽ thấy bạn vào ngày thứ Tư. 1044 00:50:42,820 --> 00:50:46,420 1045 00:50:46,420 --> 00:50:50,370 >> [MUSIC CHƠI] 1046 00:50:50,370 --> 00:54:23,446