1 00:00:00,000 --> 00:00:10,920 >> [Chơi nhạc] 2 00:00:10,920 --> 00:00:14,680 >> DAVID J Malan: Được rồi, chào đón trở lại CS50. 3 00:00:14,680 --> 00:00:16,500 Đây là khởi đầu của tuần hai. 4 00:00:16,500 --> 00:00:18,940 Một lời từ một trong những của chúng tôi bạn bè trong khuôn viên trường - 5 00:00:18,940 --> 00:00:22,620 nếu bạn quan tâm, có thể, hoặc ngay bây giờ hoặc trong một số hạn tương lai 6 00:00:22,620 --> 00:00:25,670 thậm chí, một khi thoải mái hơn, giảng dạy học sinh trung học một chút 7 00:00:25,670 --> 00:00:27,680 một cái gì đó về khoa học máy tính, làm đầu đến URL đó. 8 00:00:27,680 --> 00:00:32,360 Họ có nhu cầu đặc biệt ngay bây giờ của giáo viên, đặc biệt là nếu bạn có 9 00:00:32,360 --> 00:00:34,700 đã có một số tiếp xúc với khoa học máy tính. 10 00:00:34,700 --> 00:00:38,060 >> Vì vậy, nhớ lại rằng thời gian qua, chúng tôi giới thiệu một vài kiểu dữ liệu trong C, và 11 00:00:38,060 --> 00:00:40,590 bạn có thể đã bắt đầu để có được của bạn tay bẩn với những vậy, đến nay 12 00:00:40,590 --> 00:00:41,940 trong vấn đề thiết lập một. 13 00:00:41,940 --> 00:00:43,230 Và chúng tôi đã có một char. 14 00:00:43,230 --> 00:00:49,100 Vì vậy, về phần kỹ thuật, những gì là một char như bạn biết điều đó ngày hôm nay? 15 00:00:49,100 --> 00:00:51,050 >> Vì vậy, đó là một nhân vật, nhưng chúng ta hãy được chính xác hơn bây giờ. 16 00:00:51,050 --> 00:00:53,735 Chúng ta có ý nghĩa gì bởi nhân vật hoặc cá nhân char? 17 00:00:53,735 --> 00:00:56,700 18 00:00:56,700 --> 00:00:59,500 Một nhân vật không số - 19 00:00:59,500 --> 00:01:00,670 do đó, không nhất thiết. 20 00:01:00,670 --> 00:01:04,580 Nó chỉ ra rằng con số thậm chí, ngay cả dấu chấm câu và chữ là 21 00:01:04,580 --> 00:01:06,980 đại diện với dữ liệu này gõ được biết đến như một char. 22 00:01:06,980 --> 00:01:09,440 Vì vậy, nó không nhất thiết phải theo thứ tự abc. 23 00:01:09,440 --> 00:01:11,100 Yeah? 24 00:01:11,100 --> 00:01:12,275 >> Vì vậy, nó là một ký tự ASCII. 25 00:01:12,275 --> 00:01:15,510 Vì vậy, nếu bạn nghĩ về tuần không, khi chúng tôi đã có byte của chúng tôi tình nguyện viên 26 00:01:15,510 --> 00:01:19,150 đi lên và hai nắm tay của họ lên hoặc không phải tất cả, họ đại diện cho bit. 27 00:01:19,150 --> 00:01:22,450 Nhưng chung là một nhóm tám, họ đại diện cho một byte. 28 00:01:22,450 --> 00:01:26,030 Và chúng tôi giới thiệu các khái niệm về ASCII ở bài giảng đó, mà chỉ đơn giản là một 29 00:01:26,030 --> 00:01:28,170 lập bản đồ giữa các con số và chữ cái. 30 00:01:28,170 --> 00:01:32,010 Và sử dụng ASCII, như những con người ngụ ý, tám bit 31 00:01:32,010 --> 00:01:33,660 để đại diện cho một nhân vật. 32 00:01:33,660 --> 00:01:36,890 >> Vì vậy, cho phù hợp, nếu tám bit có thể từng đảm nhận một trong hai giá trị - 33 00:01:36,890 --> 00:01:38,010 không hoặc một - 34 00:01:38,010 --> 00:01:40,280 đó có nghĩa là có hai khả năng cho người này - 35 00:01:40,280 --> 00:01:41,230 không hoặc một - 36 00:01:41,230 --> 00:01:44,070 hai cho người này, hai này người, hai cho một này. 37 00:01:44,070 --> 00:01:47,450 Vì vậy, tổng cộng hai lần hai lần hai lần hai lần hai - 38 00:01:47,450 --> 00:01:49,700 do đó, hai thứ tám trong tổng số. 39 00:01:49,700 --> 00:01:54,320 Do đó, có một tổng số ký tự 256 có thể là bạn có thể 40 00:01:54,320 --> 00:01:55,750 đại diện với tám bit. 41 00:01:55,750 --> 00:01:59,210 >> Bây giờ, những người bạn của người nói tiếng châu Á ngôn ngữ có thể biết rằng có hơn 42 00:01:59,210 --> 00:02:02,620 các nhân vật trong thế giới hơn là chỉ A và B và Cs và Ds. 43 00:02:02,620 --> 00:02:06,130 Và quả thực, ASCII không đủ cho rất nhiều ngôn ngữ trên thế giới. 44 00:02:06,130 --> 00:02:07,760 Nhưng thêm vào đó một thời gian. 45 00:02:07,760 --> 00:02:11,240 Cho bây giờ, biết rằng trong C nếu bạn muốn để đại diện cho một lá thư, một mảnh 46 00:02:11,240 --> 00:02:15,780 dấu chấm câu, hoặc chỉ cần một cái gì đó nhân vật trong tự nhiên, chúng tôi sử dụng một char. 47 00:02:15,780 --> 00:02:18,240 Và đó là một byte hoặc tám bit. 48 00:02:18,240 --> 00:02:19,690 >> Làm thế nào về một int? 49 00:02:19,690 --> 00:02:20,780 Vâng, một int là một số nguyên. 50 00:02:20,780 --> 00:02:23,175 Bao nhiêu bit, nếu bạn nhớ lại, là một số nguyên thường? 51 00:02:23,175 --> 00:02:25,930 52 00:02:25,930 --> 00:02:27,512 Bất cứ ai thu hồi? 53 00:02:27,512 --> 00:02:29,600 Vì vậy, nó thường 32. 54 00:02:29,600 --> 00:02:32,120 Nó thực sự phụ thuộc vào máy tính mà bạn đang sử dụng. 55 00:02:32,120 --> 00:02:35,770 Nhưng trong thiết bị, và trong rất nhiều máy tính, đó là 32 bit hoặc bốn 56 00:02:35,770 --> 00:02:37,140 byte - tám lần bốn. 57 00:02:37,140 --> 00:02:39,790 Và số nguyên chỉ được sử dụng để lưu trữ số, hoặc là tiêu cực, 58 00:02:39,790 --> 00:02:41,610 tích cực, hoặc không. 59 00:02:41,610 --> 00:02:45,250 >> Và nếu bạn đã có 32 bit, và bạn chỉ chăm sóc về những con số tích cực, có thể 60 00:02:45,250 --> 00:02:48,960 bất cứ ai sân chơi bóng chày bao nhiêu có thể nguyên một máy tính có thể đại diện cho từ 61 00:02:48,960 --> 00:02:51,820 không vào lên? 62 00:02:51,820 --> 00:02:56,130 Vì vậy, nó sẽ là hai đến 32, trong đó là khoảng bốn tỷ USD. 63 00:02:56,130 --> 00:02:59,720 Vì vậy, các quyền hạn của hai sẽ được chủ đề định kỳ trong khoa học máy tính. 64 00:02:59,720 --> 00:03:03,930 Như chúng ta sẽ thấy, họ đang khá thuận tiện làm việc với ngay cả khi nó không hoàn toàn 65 00:03:03,930 --> 00:03:05,790 dễ dàng để làm các phép tính trong đầu của một người. 66 00:03:05,790 --> 00:03:07,000 >> Vì vậy, chúng tôi sẽ nói khoảng bốn tỷ USD. 67 00:03:07,000 --> 00:03:08,620 Bây giờ, một lâu dài - 68 00:03:08,620 --> 00:03:09,770 bạn có thể loại đoán. 69 00:03:09,770 --> 00:03:10,480 Nó dài hơn một int. 70 00:03:10,480 --> 00:03:12,440 Bao nhiêu bit? 71 00:03:12,440 --> 00:03:14,250 Vì vậy, 64 bit hoặc tám byte. 72 00:03:14,250 --> 00:03:17,480 Điều này chỉ có nghĩa là bạn có thể đại diện cho cả số lớn hơn, lớn hơn tích cực hay 73 00:03:17,480 --> 00:03:19,160 số âm lớn hơn. 74 00:03:19,160 --> 00:03:20,060 >> Và làm thế nào về nổi? 75 00:03:20,060 --> 00:03:22,260 Đó là một điểm nổi giá trị của 32 bit. 76 00:03:22,260 --> 00:03:25,180 Đây chỉ là một số thực, một cái gì đó với một dấu thập phân. 77 00:03:25,180 --> 00:03:30,100 Nhưng nếu bạn thay vì cần nhiều nơi hơn sau dấu thập phân hoặc bạn muốn 78 00:03:30,100 --> 00:03:33,720 đại diện cho một số lượng lớn hơn với một số phần sau nó, bạn có thể sử dụng một 79 00:03:33,720 --> 00:03:36,260 đôi, đó là 64 bit. 80 00:03:36,260 --> 00:03:38,240 >> Nhưng có một thú vị takeaway đây. 81 00:03:38,240 --> 00:03:42,890 Vì vậy, nếu số nguyên được giới hạn bởi 32 bit và thậm chí chờ đợi lâu được giới hạn bởi 64 82 00:03:42,890 --> 00:03:46,180 bit, sắp xếp của đặt ra câu hỏi, nếu bạn thực sự muốn đếm 83 00:03:46,180 --> 00:03:48,790 cao hơn 4 tỷ USD cho một int? 84 00:03:48,790 --> 00:03:50,330 Vâng, bạn chỉ cần sử dụng một lâu dài. 85 00:03:50,330 --> 00:03:54,200 Nhưng nếu bạn muốn đếm cao hơn hai đến thứ 64, cho hay phải mất? 86 00:03:54,200 --> 00:03:55,810 >> Bây giờ, đó là một số lượng lớn. 87 00:03:55,810 --> 00:03:59,250 Nhưng cuối cùng, bạn có thể thực sự quan tâm đến các loại giá trị, 88 00:03:59,250 --> 00:04:03,070 đặc biệt là nếu bạn đang sử dụng một cơ sở dữ liệu và bắt đầu thu thập rất nhiều và rất nhiều 89 00:04:03,070 --> 00:04:06,190 và rất nhiều dữ liệu và phân công độc đáo số điện thoại để mỗi phần dữ liệu đó. 90 00:04:06,190 --> 00:04:07,430 Vì vậy, chúng tôi loại có một vấn đề. 91 00:04:07,430 --> 00:04:10,700 Và tương tự, với dấu chấm động giá trị - nổi hoặc đôi - 92 00:04:10,700 --> 00:04:14,290 nếu bạn đã chỉ có một số hữu hạn bit, bao nhiêu tổng số có thể bạn 93 00:04:14,290 --> 00:04:16,980 có thể đại diện? 94 00:04:16,980 --> 00:04:19,540 >> Vâng, đó là chưa rõ ràng khi bạn liên quan đến một điểm thập phân. 95 00:04:19,540 --> 00:04:20,899 Nhưng nó chắc chắn hữu hạn. 96 00:04:20,899 --> 00:04:24,390 Nếu bạn có một số hữu hạn các bit, một số hữu hạn của con người, một hữu hạn 97 00:04:24,390 --> 00:04:27,350 số lượng bóng đèn, chắc chắn bạn có thể chỉ đại diện cho một số hữu hạn các 98 00:04:27,350 --> 00:04:28,510 nổi các giá trị điểm. 99 00:04:28,510 --> 00:04:33,170 Nhưng bao nhiêu số thực là của họ trên thế giới? 100 00:04:33,170 --> 00:04:33,680 Có một vô hạn. 101 00:04:33,680 --> 00:04:37,280 Vì vậy, đó là loại một vấn đề bởi vì chúng tôi không có một số lượng vô hạn của 102 00:04:37,280 --> 00:04:39,970 bộ nhớ hoặc bộ nhớ RAM trong máy tính của chúng tôi. 103 00:04:39,970 --> 00:04:41,780 Vì vậy, một số điều khó khăn có thể xảy ra. 104 00:04:41,780 --> 00:04:43,900 >> Vì vậy, chúng ta hãy đi trước và thử để thể hiện điều này ở đây. 105 00:04:43,900 --> 00:04:46,240 Hãy để tôi đi trước và mở gedit. 106 00:04:46,240 --> 00:04:50,360 Tôi sẽ đi trước và lưu một tập tin được gọi là "floats0.c" chỉ để được 107 00:04:50,360 --> 00:04:54,630 phù hợp với một ví dụ đó là có sẵn trực tuyến, nếu bạn muốn. 108 00:04:54,630 --> 00:04:58,080 Và tôi sẽ đi trước và định nghĩa nó như sau - 109 00:04:58,080 --> 00:05:01,540 Tôi sẽ đi trước và nói, int void main, như chúng ta thường làm. 110 00:05:01,540 --> 00:05:07,190 >> Và sau đó trong chương trình này, tôi sẽ tuyên bố bản thân mình một phao, do đó, một 32-bit 111 00:05:07,190 --> 00:05:09,700 biến được gọi là f, tùy tiện. 112 00:05:09,700 --> 00:05:13,910 Và sau đó tôi sẽ lưu trữ trong nó Tôi không biết, một phần mười, vì vậy 0.1. 113 00:05:13,910 --> 00:05:16,590 Vì vậy, tôi sẽ thể hiện điều đó như một chia cho 10, đó là hoàn toàn 114 00:05:16,590 --> 00:05:17,790 hợp pháp trong C. 115 00:05:17,790 --> 00:05:20,460 >> Và sau đó trên dòng thứ hai, tôi chỉ đơn giản là muốn in ra giá trị đó. 116 00:05:20,460 --> 00:05:22,950 Vì vậy, nhớ lại rằng chúng ta có thể sử dụng quen thuộc printf. 117 00:05:22,950 --> 00:05:25,420 Chúng tôi không muốn sử dụng% i cho một int. 118 00:05:25,420 --> 00:05:28,360 Chúng tôi muốn sử dụng% f cho một phao. 119 00:05:28,360 --> 00:05:33,080 Và sau đó tôi sẽ làm dấu gạch chéo ngược n, quote gần, dấu phẩy, f, dấu chấm phẩy. 120 00:05:33,080 --> 00:05:34,400 >> Vì vậy, đây là chương trình của tôi. 121 00:05:34,400 --> 00:05:35,820 Đã có một lỗi. 122 00:05:35,820 --> 00:05:38,640 Không ai cho ai này nhấp đã muốn chỉ ở mức tối thiểu 123 00:05:38,640 --> 00:05:40,220 một lỗi tôi đã thực hiện? 124 00:05:40,220 --> 00:05:42,470 Yeah? 125 00:05:42,470 --> 00:05:42,800 Vâng. 126 00:05:42,800 --> 00:05:47,860 Tôi quên "# bao gồm" ở đầu, triệu chứng của họ mà nếu tôi cố gắng 127 00:05:47,860 --> 00:05:50,490 biên dịch này là có được rằng biên dịch sẽ hét vào mặt tôi, 128 00:05:50,490 --> 00:05:52,770 nói biểu tượng không xác định hoặc một cái gì đó để có hiệu lực đó. 129 00:05:52,770 --> 00:05:55,360 Nó không hiểu điều gì đó như printf. 130 00:05:55,360 --> 00:05:59,380 >> Vì vậy, tôi sẽ làm "# bao gồm ", Lưu tập tin. 131 00:05:59,380 --> 00:06:00,400 Và bây giờ là trong hình dạng tốt hơn. 132 00:06:00,400 --> 00:06:02,690 Nhưng tôi cũng sẽ chỉ ra một chi tiết mới hôm nay. 133 00:06:02,690 --> 00:06:08,620 Ngoài việc xác định nơi chủ như% f% i% s, bạn có thể 134 00:06:08,620 --> 00:06:12,320 đôi khi ảnh hưởng đến hành vi của giữ chỗ đó. 135 00:06:12,320 --> 00:06:15,540 Ví dụ, trong trường hợp của một nổi giá trị điểm, nếu tôi chỉ muốn 136 00:06:15,540 --> 00:06:22,200 để hiển thị một số thập phân sau khi thời gian, tôi thực sự có thể làm 0.1f. 137 00:06:22,200 --> 00:06:26,830 Vì vậy, nói cách khác, tôi tách f và các dấu phần trăm với 0.1, chỉ 138 00:06:26,830 --> 00:06:30,200 nói printf, bạn có thể có toàn bộ loạt các con số sau dấu thập phân 139 00:06:30,200 --> 00:06:30,930 chỉ cho tôi. 140 00:06:30,930 --> 00:06:32,870 Nhưng tôi chỉ muốn xem một trong số họ. 141 00:06:32,870 --> 00:06:36,280 >> Vì vậy, tôi sẽ đi trước bây giờ và tiết kiệm chương trình này, đi vào thiết bị đầu cuối của tôi 142 00:06:36,280 --> 00:06:41,870 cửa sổ, và tôi sẽ đi trước và loại làm nổi 0, nhập. 143 00:06:41,870 --> 00:06:44,930 Tôi thấy rằng dòng hơi khó hiểu mà sẽ bắt đầu có ý nghĩa hơn khi chúng ta 144 00:06:44,930 --> 00:06:46,900 trêu chọc nó ra trong tuần này và tiếp theo. 145 00:06:46,900 --> 00:06:50,480 Bây giờ tôi sẽ đi trước và chạy nổi không. 146 00:06:50,480 --> 00:06:52,020 Và, chết tiệt. 147 00:06:52,020 --> 00:06:54,880 >> Do đó, có lỗi khác đây đối với một số lý do. 148 00:06:54,880 --> 00:07:02,490 Tôi khá chắc chắn rằng một phần mười, hoặc một chia cho 10, không phải là 0.0. 149 00:07:02,490 --> 00:07:04,590 Có lẽ tôi chỉ không tìm kiếm tại đủ chữ số. 150 00:07:04,590 --> 00:07:08,580 Vì vậy, tại sao tôi không nói hai 0,2 để xem hai chữ số thập phân thay vì chỉ một. 151 00:07:08,580 --> 00:07:11,810 Hãy để tôi quay trở lại cửa sổ thiết bị đầu cuối của tôi đây và nhấn lên một vài lần để 152 00:07:11,810 --> 00:07:12,840 xem lịch sử của tôi. 153 00:07:12,840 --> 00:07:15,910 Đừng làm nổi không nữa, và sau đó một lần nữa. 154 00:07:15,910 --> 00:07:17,730 Và bây giờ nhập. 155 00:07:17,730 --> 00:07:20,000 >> Và bây giờ tôi chắc rằng điều này là sai. 156 00:07:20,000 --> 00:07:23,030 Và tôi có thể làm ba và bốn, và tôi có thể sẽ tiếp tục nhìn thấy số không. 157 00:07:23,030 --> 00:07:24,880 Vậy mà là lỗi? 158 00:07:24,880 --> 00:07:27,910 Một chia cho 10 sẽ là 0,1. 159 00:07:27,910 --> 00:07:30,310 Ai đó muốn mất một đâm vào những gì vấn đề cơ bản là? 160 00:07:30,310 --> 00:07:32,400 Yeah? 161 00:07:32,400 --> 00:07:33,420 Chúng đều là số nguyên. 162 00:07:33,420 --> 00:07:33,920 Vì vậy, những gì? 163 00:07:33,920 --> 00:07:37,820 Vì vậy, với một chia cho 10, đó là những gì tôi làm trong số học. 164 00:07:37,820 --> 00:07:41,185 Và tôi nhận được 0.1. 165 00:07:41,185 --> 00:07:41,660 >> Vâng. 166 00:07:41,660 --> 00:07:43,240 Và do đó, nó thực sự là vấn đề. 167 00:07:43,240 --> 00:07:46,700 Khi bạn có một số nguyên trong một máy tính và bạn chia nó cho số nguyên khác, 168 00:07:46,700 --> 00:07:50,430 máy tính theo mặc định sẽ cho rằng bạn muốn một số nguyên. 169 00:07:50,430 --> 00:07:54,620 Vấn đề mặc dù, tất nhiên, là mà 0.1 không phải là một số nguyên. 170 00:07:54,620 --> 00:07:55,680 Đó là một số thực. 171 00:07:55,680 --> 00:07:59,610 Và vì vậy những gì các máy tính không bằng mặc định là nó chỉ ném đi 172 00:07:59,610 --> 00:08:01,070 tất cả mọi thứ sau dấu thập phân. 173 00:08:01,070 --> 00:08:03,380 Nó không làm tròn xuống hoặc lên cho mỗi gia nhập. 174 00:08:03,380 --> 00:08:06,480 Nó chỉ ném đi tất cả mọi thứ sau dấu thập phân. 175 00:08:06,480 --> 00:08:07,430 Và bây giờ có ý nghĩa. 176 00:08:07,430 --> 00:08:09,740 Bởi vì bây giờ chúng tôi rõ ràng trái với không. 177 00:08:09,740 --> 00:08:10,250 >> Nhưng chờ một phút. 178 00:08:10,250 --> 00:08:11,840 Tôi không nhìn thấy một không int. 179 00:08:11,840 --> 00:08:14,910 Tôi đang thực sự nhìn thấy 0.00. 180 00:08:14,910 --> 00:08:16,340 Vì vậy, làm thế nào để dung hòa này ngay bây giờ? 181 00:08:16,340 --> 00:08:22,850 Nếu một chia cho 10 là số không, nhưng tôi nhìn thấy 0.00, ở đâu là nó nhận được 182 00:08:22,850 --> 00:08:24,250 chuyển đổi trở lại một số thực? 183 00:08:24,250 --> 00:08:25,500 Vâng. 184 00:08:25,500 --> 00:08:29,850 185 00:08:29,850 --> 00:08:30,630 Chính xác. 186 00:08:30,630 --> 00:08:35,600 >> Vì vậy, ở đây trong dòng năm, khi tôi thực sự lưu trữ là 0.1, mà sau đó 187 00:08:35,600 --> 00:08:39,549 cắt ngắn không, bên trong của một phao, đó là có hiệu quả tương đương với 188 00:08:39,549 --> 00:08:42,100 lưu trữ nó không phải là một int nhưng, thực sự, như một phao. 189 00:08:42,100 --> 00:08:46,540 Hơn nữa, tôi sau đó sử dụng printf để rõ ràng in số đó để hai 190 00:08:46,540 --> 00:08:49,740 chữ số thập phân mặc dù có có thể không thực sự có bất kỳ. 191 00:08:49,740 --> 00:08:51,020 >> Vì vậy, loại này hút, phải không? 192 00:08:51,020 --> 00:08:53,640 Rõ ràng bạn không thể làm toán, ít nhất là ở mức độ thành 193 00:08:53,640 --> 00:08:55,600 chính xác, trong một máy tính. 194 00:08:55,600 --> 00:08:56,930 Nhưng chắc chắn có một giải pháp. 195 00:08:56,930 --> 00:09:00,410 Sửa chữa đơn giản nhất chúng ta có thể có thể là những gì làm, thậm chí chỉ là trực giác đây để 196 00:09:00,410 --> 00:09:01,130 giải quyết này? 197 00:09:01,130 --> 00:09:02,380 Yeah? 198 00:09:02,380 --> 00:09:04,700 199 00:09:04,700 --> 00:09:06,574 Lần lượt các số nguyên vào - 200 00:09:06,574 --> 00:09:06,976 yeah. 201 00:09:06,976 --> 00:09:10,420 Ngay cả khi tôi không hoàn toàn chắc chắn những gì thực sự xảy ra ở đây, nếu nó 202 00:09:10,420 --> 00:09:13,440 về cơ bản đã làm với những cả là số nguyên, tốt, tại sao không tôi 203 00:09:13,440 --> 00:09:18,230 làm cho rằng 10,0, làm này 1.0, lưu lại các tập tin. 204 00:09:18,230 --> 00:09:20,990 Hãy để tôi quay trở lại xuống phía dưới và biên dịch lại. 205 00:09:20,990 --> 00:09:23,030 Cho tôi bây giờ chạy lại. 206 00:09:23,030 --> 00:09:23,420 Và có - 207 00:09:23,420 --> 00:09:27,690 bây giờ, tôi đã có một phần mười của tôi đại diện là 0.10. 208 00:09:27,690 --> 00:09:28,420 >> Được rồi. 209 00:09:28,420 --> 00:09:29,220 Vì vậy, đó không phải là xấu. 210 00:09:29,220 --> 00:09:31,730 Và hãy để tôi chỉ ra một cách khác chúng ta có thể giải quyết điều này. 211 00:09:31,730 --> 00:09:35,580 Hãy để tôi thực sự quay trở lại trong thời gian đến khi chúng tôi đã có điều này như một 212 00:09:35,580 --> 00:09:36,680 thứ mười một thời điểm trước đây. 213 00:09:36,680 --> 00:09:40,800 Và để cho tôi đi trước và lưu lại tập tin này như một tên tập tin khác nhau, chỉ để 214 00:09:40,800 --> 00:09:41,750 có một trạm kiểm soát ít. 215 00:09:41,750 --> 00:09:43,450 Vì vậy, đó là phiên bản một. 216 00:09:43,450 --> 00:09:45,520 Và bây giờ hãy để tôi đi trước và làm một phiên bản hơn. 217 00:09:45,520 --> 00:09:48,540 Chúng tôi sẽ gọi phiên bản này hai không lập chỉ mục. 218 00:09:48,540 --> 00:09:51,280 >> Và tôi sẽ thay vì làm điều này - bạn biết gì không? 219 00:09:51,280 --> 00:09:54,400 Thêm dấu chấm không hoạt động trong trường hợp này. 220 00:09:54,400 --> 00:09:56,060 Nhưng giả sử một là một biến. 221 00:09:56,060 --> 00:09:57,680 Coi 10 là một biến. 222 00:09:57,680 --> 00:10:00,680 Nói cách khác, giả sử rằng tôi không thể chỉ mã hóa cứng 0,0 ở cuối 223 00:10:00,680 --> 00:10:02,340 của biểu thức số học này. 224 00:10:02,340 --> 00:10:05,820 Vâng, tôi thực sự có thể làm điều gì đó trong dấu ngoặc đơn được gọi là đúc. 225 00:10:05,820 --> 00:10:11,920 Tôi có thể sử rằng số nguyên 10 nổi một, và tôi có thể bỏ rằng một số nguyên cho một 226 00:10:11,920 --> 00:10:12,800 nổi, là tốt. 227 00:10:12,800 --> 00:10:17,190 Sau đó, toán học đó sẽ được thực hiện là 1.0 có hiệu quả chia cho 10,0, 228 00:10:17,190 --> 00:10:19,250 kết quả trong số đó đi trong e như trước. 229 00:10:19,250 --> 00:10:26,130 Vì vậy, nếu tôi biên dịch lại này như làm nổi 2, và bây giờ nổi 2, tôi nhận được cùng một 230 00:10:26,130 --> 00:10:27,020 trả lời, là tốt. 231 00:10:27,020 --> 00:10:29,640 >> Vì vậy, đây là một ví dụ khá giả tạo, để giải quyết vấn đề này 232 00:10:29,640 --> 00:10:31,400 bằng cách giới thiệu đúc. 233 00:10:31,400 --> 00:10:34,410 Nhưng nói chung, đúc sẽ là một điều mạnh mẽ, đặc biệt đối với 234 00:10:34,410 --> 00:10:38,180 vấn đề thiết lập hai trong thời gian một tuần, khi bạn muốn chuyển đổi một kiểu dữ liệu 235 00:10:38,180 --> 00:10:41,800 khác mà vào cuối ngày được thể hiện trong cùng một cách. 236 00:10:41,800 --> 00:10:44,970 Vào cuối ngày, mỗi đơn điều chúng tôi đã nói chuyện về cho đến nay là 237 00:10:44,970 --> 00:10:46,710 chỉ số nguyên bên dưới mui xe. 238 00:10:46,710 --> 00:10:48,950 Hoặc nếu đó là quá thấp cấp cho bạn, họ chỉ là con số 239 00:10:48,950 --> 00:10:49,750 bên dưới mui xe. 240 00:10:49,750 --> 00:10:52,850 Ngay cả nhân vật, một lần nữa, nhớ lại từ tuần không, là những con số 241 00:10:52,850 --> 00:10:53,990 bên dưới mui xe. 242 00:10:53,990 --> 00:10:57,240 >> Có thể nói là, chúng ta có thể chuyển đổi giữa các loại khác nhau của số nếu 243 00:10:57,240 --> 00:10:58,060 họ bit chỉ. 244 00:10:58,060 --> 00:11:01,020 Chúng ta có thể chuyển đổi giữa các số và chữ nếu họ chỉ 245 00:11:01,020 --> 00:11:02,580 bit, và ngược lại. 246 00:11:02,580 --> 00:11:07,170 Và đúc theo cách này là một cơ chế trong lập trình cho phép bạn buộc phải 247 00:11:07,170 --> 00:11:10,970 thay đổi một kiểu dữ liệu khác. 248 00:11:10,970 --> 00:11:14,570 Thật không may, điều này không như là đơn giản như tôi có thể đã thích. 249 00:11:14,570 --> 00:11:19,220 >> Tôi sẽ quay trở lại vào phao nổi 1, đó là đơn giản, hơn 250 00:11:19,220 --> 00:11:22,830 một đơn giản với 0,0 nhất vào với nhau. 251 00:11:22,830 --> 00:11:25,260 Và cũng giống như một bồi dưỡng nhanh chóng, hãy để tôi đi trước và biên dịch lại 252 00:11:25,260 --> 00:11:27,670 này, làm nổi 2 - 253 00:11:27,670 --> 00:11:30,300 xin lỗi, đây là làm nổi 1. 254 00:11:30,300 --> 00:11:32,050 Và bây giờ chúng ta hãy chạy nổi 1. 255 00:11:32,050 --> 00:11:34,810 Và ở phía dưới, chú ý mà tôi thực sự có được 0.1. 256 00:11:34,810 --> 00:11:36,165 Vì vậy, vấn đề được giải quyết. 257 00:11:36,165 --> 00:11:37,280 >> Nhưng không được nêu ra. 258 00:11:37,280 --> 00:11:40,000 Bây giờ tôi đang đi để có được một chút tò mò, và tôi sẽ quay trở lại vào tôi 259 00:11:40,000 --> 00:11:41,620 Báo cáo printf và nói, bạn biết những gì? 260 00:11:41,620 --> 00:11:44,090 Tôi muốn khẳng định đây thực sự là một phần mười. 261 00:11:44,090 --> 00:11:47,890 Và tôi sẽ muốn thấy điều này , nói rằng, năm chữ số thập phân. 262 00:11:47,890 --> 00:11:48,570 Nó không phải là một vấn đề. 263 00:11:48,570 --> 00:11:52,020 Tôi thay đổi hai đến một năm, Tôi biên dịch lại với thực hiện. 264 00:11:52,020 --> 00:11:53,770 Tôi chạy lại nó như nổi 1. 265 00:11:53,770 --> 00:11:54,990 Tìm kiếm khá tốt. 266 00:11:54,990 --> 00:11:58,570 Kiểm tra sự tỉnh táo của tôi có thể dừng lại ở đó, nhưng Tôi nhận được một chút mạo hiểm hơn. 267 00:11:58,570 --> 00:12:00,330 Tôi sẽ thay đổi 0,5-0,10. 268 00:12:00,330 --> 00:12:03,440 Tôi muốn nhìn thấy 10 chữ số sau số thập phân. 269 00:12:03,440 --> 00:12:09,060 >> Và tôi sẽ đi trước và biên dịch lại này và chạy lại nổi 1. 270 00:12:09,060 --> 00:12:13,060 Tôi loại tiếc vì thử nghiệm này hơn nữa bởi vì toán học của tôi không phải là quá 271 00:12:13,060 --> 00:12:14,320 sửa chữa nữa, có vẻ như. 272 00:12:14,320 --> 00:12:15,630 Nhưng chờ một phút, có thể đó chỉ là một sự may mắn. 273 00:12:15,630 --> 00:12:17,810 Có lẽ máy tính là hành động một chút lạ. 274 00:12:17,810 --> 00:12:21,810 Hãy để tôi đi trước và làm 20 điểm thập phân và trấn an bản thân mình rằng tôi biết 275 00:12:21,810 --> 00:12:22,540 làm thế nào để làm toán. 276 00:12:22,540 --> 00:12:23,460 Tôi biết làm thế nào để lập trình. 277 00:12:23,460 --> 00:12:26,960 Làm nổi 1, biên dịch lại, và chết tiệt. 278 00:12:26,960 --> 00:12:31,110 Đó thực sự là, thực sự nhận được xa nhãn hiệu. 279 00:12:31,110 --> 00:12:32,490 >> Vì vậy, những gì đang xảy ra ở đây? 280 00:12:32,490 --> 00:12:36,050 Trực quan, dựa trên những giả định của chúng tôi trước đó về kích thước của các loại dữ liệu, 281 00:12:36,050 --> 00:12:38,040 những gì phải xảy ra ở đây bên dưới mui xe? 282 00:12:38,040 --> 00:12:39,290 Yeah? 283 00:12:39,290 --> 00:12:43,000 284 00:12:43,000 --> 00:12:43,590 Chính xác. 285 00:12:43,590 --> 00:12:46,480 Nếu bạn muốn chính xác hơn này, và đó là một heck của rất nhiều chính xác - 286 00:12:46,480 --> 00:12:48,770 20 con số sau dấu thập phân. 287 00:12:48,770 --> 00:12:51,990 Bạn có thể không có thể đại diện cho một số lượng tùy ý, trừ khi bạn có một 288 00:12:51,990 --> 00:12:52,930 số tùy ý của bit. 289 00:12:52,930 --> 00:12:54,190 Nhưng chúng tôi thì không. 290 00:12:54,190 --> 00:12:57,200 Đối với một phao, chúng tôi chỉ có 32 bit. 291 00:12:57,200 --> 00:13:02,260 >> Vì vậy, nếu 32 bit chỉ có thể được hoán vị trong một cách - giống như con người của chúng tôi trên, giai đoạn 292 00:13:02,260 --> 00:13:05,780 tay lên hoặc xuống - trong một số hữu hạn cách, chỉ có một số hữu hạn 293 00:13:05,780 --> 00:13:08,640 các số thực, bạn có thể đại diện cho với những bit. 294 00:13:08,640 --> 00:13:10,500 Và do đó, máy tính cuối cùng sẽ phải 295 00:13:10,500 --> 00:13:11,730 bắt đầu cắt góc. 296 00:13:11,730 --> 00:13:15,500 Máy tính có thể che giấu những chi tiết từ chúng tôi cho một chút thời gian. 297 00:13:15,500 --> 00:13:18,880 Nhưng nếu chúng ta bắt đầu đâm vào những con số và nhìn xa hơn và xa hơn tại 298 00:13:18,880 --> 00:13:23,220 theo sau con số trong số nguyên, sau đó chúng tôi bắt đầu thấy rằng nó 299 00:13:23,220 --> 00:13:26,480 thực sự xấp xỉ ý tưởng về một phần mười. 300 00:13:26,480 --> 00:13:29,860 >> Và do đó, nó quay ra, bi kịch, có một số lượng vô hạn các số 301 00:13:29,860 --> 00:13:35,060 chúng tôi không thể bảo đảm chính xác trong một máy tính, ít nhất là với một hữu hạn 302 00:13:35,060 --> 00:13:38,030 số bit, một hữu hạn số lượng bộ nhớ RAM. 303 00:13:38,030 --> 00:13:41,210 Bây giờ không may, điều này đôi khi có những hậu quả thực tế. 304 00:13:41,210 --> 00:13:45,980 Nếu mọi người không hoàn toàn đánh giá cao này hoặc loại đưa cho các cấp thực tế 305 00:13:45,980 --> 00:13:48,310 rằng máy tính của họ sẽ chỉ làm những gì họ nói với nó để làm và làm không 306 00:13:48,310 --> 00:13:51,430 hiểu được những tiềm ẩn chi tiết đại diện - 307 00:13:51,430 --> 00:13:55,290 trong đó, thẳng thắn, trong một số ngôn ngữ là ẩn từ người dùng, không giống như trong C - 308 00:13:55,290 --> 00:13:56,500 một số những điều xấu có thể xảy ra. 309 00:13:56,500 --> 00:13:58,650 >> Và những gì tôi nghĩ chúng tôi sẽ làm được lùi lại một bước. 310 00:13:58,650 --> 00:14:00,420 Và điều này là về một tám phút video. 311 00:14:00,420 --> 00:14:04,200 Phát sóng một vài năm trước đây, và nó mang lại cho cái nhìn sâu vào thực tế những gì có thể đi 312 00:14:04,200 --> 00:14:09,290 sai khi bạn dưới đánh giá cao những các loại chi tiết trong rất tất cả các quá 313 00:14:09,290 --> 00:14:10,080 thế giới thực. 314 00:14:10,080 --> 00:14:12,965 Nếu chúng ta có thể tắt đèn trong một vài phút. 315 00:14:12,965 --> 00:14:14,360 >> SPEAKER 1: Bây giờ chúng ta quay trở lại kỹ thuật 316 00:14:14,360 --> 00:14:17,160 thiên tai đối với tuyệt đại. 317 00:14:17,160 --> 00:14:18,680 >> Máy tính - 318 00:14:18,680 --> 00:14:21,340 chúng tôi đã đến để chấp nhận vấn đề thường bực bội 319 00:14:21,340 --> 00:14:23,170 mà đi với họ. 320 00:14:23,170 --> 00:14:27,570 Lỗi, virus, và ổn định phần mềm là giá nhỏ để trả cho các 321 00:14:27,570 --> 00:14:28,960 thuận tiện. 322 00:14:28,960 --> 00:14:32,040 Nhưng trong công nghệ cao và tốc độ cao quân sự và chương trình không gian 323 00:14:32,040 --> 00:14:38,650 các ứng dụng, các vấn đề nhỏ nhất có thể được phóng đại thành thảm họa. 324 00:14:38,650 --> 00:14:44,480 >> 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 Ariane 5 tên lửa không người lái. 325 00:14:44,480 --> 00:14:48,700 Nó được mang vệ tinh khoa học được thiết kế để thiết lập một cách chính xác như thế nào 326 00:14:48,700 --> 00:14:53,250 từ trường của trái đất tương tác với gió mặt trời. 327 00:14:53,250 --> 00:14:57,540 Các tên lửa được xây dựng cho châu Âu Cơ quan không gian và cất cánh từ của nó 328 00:14:57,540 --> 00:14:59,906 cơ sở trên bờ biển của Guyane thuộc Pháp. 329 00:14:59,906 --> 00:15:03,660 >> JACK GANSSLE: Vào khoảng 37 giây vào các chuyến bay, lần đầu tiên họ nhận thấy 330 00:15:03,660 --> 00:15:04,910 một cái gì đó đã đi sai. 331 00:15:04,910 --> 00:15:08,130 Các đầu phun đã được xoay trong một cách mà họ thực sự không nên. 332 00:15:08,130 --> 00:15:12,380 Khoảng 40 giây vào các chuyến bay, rõ ràng chiếc xe đã gặp rắc rối. 333 00:15:12,380 --> 00:15:14,400 Và đó là khi họ thực hiện một quyết định phá hủy nó. 334 00:15:14,400 --> 00:15:18,520 Nhân viên an toàn phạm vi, với quyết tâm to lớn, nhấn nút, 335 00:15:18,520 --> 00:15:23,900 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. 336 00:15:23,900 --> 00:15:27,810 >> SPEAKER 1: Đây là chuyến đi đầu tiên của tên lửa Ariane 5, và tàn phá của nó 337 00:15:27,810 --> 00:15:32,020 diễn ra do có một lỗ hổng nhúng trong phần mềm của tên lửa. 338 00:15:32,020 --> 00:15:33,980 >> JACK GANSSLE: Vấn đề trên Ariane là có một số 339 00:15:33,980 --> 00:15:36,390 rằng cần 64 bit để thể hiện. 340 00:15:36,390 --> 00:15:39,420 Và họ muốn chuyển đổi một số 16-bit. 341 00:15:39,420 --> 00:15:43,130 Họ cho rằng con số này là không bao giờ sẽ là rất lớn, mà hầu hết 342 00:15:43,130 --> 00:15:46,810 các chữ số trong 64-bit số là số không. 343 00:15:46,810 --> 00:15:48,270 Họ đã lầm. 344 00:15:48,270 --> 00:15:51,380 >> SPEAKER 1: Không có khả năng của một phần mềm chương trình để chấp nhận các loại 345 00:15:51,380 --> 00:15:55,350 số được tạo ra bởi một người khác là ở gốc của sự thất bại. 346 00:15:55,350 --> 00:15:59,970 Phát triển phần mềm đã trở thành một rất một phần chi phí của công nghệ mới. 347 00:15:59,970 --> 00:16:03,980 Ariane 4 tên lửa đã được rất thành công, rất nhiều các phần mềm 348 00:16:03,980 --> 00:16:07,480 tạo ra cho nó cũng là được sử dụng trong tên lửa Ariane 5. 349 00:16:07,480 --> 00:16:11,980 >> PHILIP COYLE: Vấn đề cơ bản là rằng tên lửa Ariane 5 là nhanh hơn, 350 00:16:11,980 --> 00:16:13,720 tăng tốc nhanh hơn. 351 00:16:13,720 --> 00:16:17,250 Và các phần mềm có không chiếm đó. 352 00:16:17,250 --> 00:16:20,770 >> SPEAKER 1: Sự hủy diệt của tên lửa là một thảm họa tài chính khổng lồ, 353 00:16:20,770 --> 00:16:24,200 tất cả đều do một lỗi phần mềm phút. 354 00:16:24,200 --> 00:16:27,820 Nhưng đây không phải là dữ liệu lần đầu tiên vấn đề chuyển đổi đã cản hiện đại 355 00:16:27,820 --> 00:16:30,620 công nghệ tên lửa. 356 00:16:30,620 --> 00:16:34,480 >> JACK GANSSLE: Năm 1991, với sự bắt đầu của Chiến tranh vùng Vịnh đầu tiên, Patriot 357 00:16:34,480 --> 00:16:38,610 tên lửa đã trải qua một loại tương tự của một vấn đề chuyển đổi số. 358 00:16:38,610 --> 00:16:44,910 Kết quả là, 28 lính Mỹ đã thiệt mạng và khoảng 100 người khác bị thương 359 00:16:44,910 --> 00:16:48,600 khi Patriot, được cho là để bảo vệ chống lại tên lửa Scud đến, 360 00:16:48,600 --> 00:16:51,630 thất bại trong việc bắn tên lửa. 361 00:16:51,630 --> 00:16:55,110 >> SPEAKER 1: Khi Iraq xâm lược Kuwait và Mỹ đưa ra Bão táp sa mạc trong 362 00:16:55,110 --> 00:17:00,570 đầu năm 1991, tên lửa Patriot đã được triển khai để bảo vệ Saudi Arabia 363 00:17:00,570 --> 00:17:04,760 và Israel từ Iraq tên lửa Scud các cuộc tấn công tên lửa. 364 00:17:04,760 --> 00:17:09,720 Patriot là một tầm trung của Mỹ hệ thống bề mặt-đối-không được sản xuất bởi 365 00:17:09,720 --> 00:17:11,569 các công ty Raytheon. 366 00:17:11,569 --> 00:17:16,410 >> THEODORE POSTOL: Kích thước của Patriot tự đánh chặn là khoảng 367 00:17:16,410 --> 00:17:17,710 Dài 20 feet. 368 00:17:17,710 --> 00:17:20,800 Và nó chỉ nặng khoảng 2.000 kg. 369 00:17:20,800 --> 00:17:22,940 Và nó mang một đầu đạn khoảng - 370 00:17:22,940 --> 00:17:24,905 Tôi nghĩ rằng đó là khoảng 150 bảng Anh. 371 00:17:24,905 --> 00:17:31,030 Và các đầu đạn hạt nhân tự nó là một nổ cao trong đó có 372 00:17:31,030 --> 00:17:33,270 mảnh vỡ xung quanh nó. 373 00:17:33,270 --> 00:17:37,490 Vỏ của đầu đạn hạt nhân được thiết kế để hành động như đạn chì. 374 00:17:37,490 --> 00:17:40,720 >> SPEAKER 1: Các tên lửa được tiến hành bốn mỗi container và vận chuyển 375 00:17:40,720 --> 00:17:43,050 bởi một trailer bán. 376 00:17:43,050 --> 00:17:47,490 >> PHILIP COYLE: The Patriot chống tên lửa hệ thống đi lại 377 00:17:47,490 --> 00:17:50,710 ít nhất 20 năm nay. 378 00:17:50,710 --> 00:17:54,350 Ban đầu nó được thiết kế như một tên lửa phòng không để 379 00:17:54,350 --> 00:17:56,190 bắn hạ máy bay của đối phương. 380 00:17:56,190 --> 00:18:02,490 Trong Chiến tranh vùng Vịnh đầu tiên, khi cuộc chiến tranh đến cùng, quân đội muốn sử dụng nó 381 00:18:02,490 --> 00:18:05,535 để bắn hạ tên lửa Scud, không máy bay. 382 00:18:05,535 --> 00:18:09,310 Lực lượng không quân Iraq là không quá nhiều của một vấn đề. 383 00:18:09,310 --> 00:18:12,450 Nhưng quân đội đã lo lắng về tên lửa Scud. 384 00:18:12,450 --> 00:18:15,950 Và vì vậy họ đã cố gắng để nâng cấp Patriot. 385 00:18:15,950 --> 00:18:18,750 >> SPEAKER 1: Chặn một tên lửa của đối phương đi du lịch ở mach năm là 386 00:18:18,750 --> 00:18:20,890 sẽ được thử thách đủ. 387 00:18:20,890 --> 00:18:25,590 Nhưng khi Patriot được đưa vào dịch vụ, quân đội đã không nhận thức một 388 00:18:25,590 --> 00:18:31,710 Sửa đổi Iraq đã làm cho họ Tên lửa Scud gần như không thể đạt. 389 00:18:31,710 --> 00:18:35,240 >> THEODORE POSTOL: Điều gì đã xảy ra là tên lửa Scud đã được 390 00:18:35,240 --> 00:18:36,570 đến trong là không ổn định. 391 00:18:36,570 --> 00:18:37,532 Họ đã lắc lư. 392 00:18:37,532 --> 00:18:43,220 Lý do cho điều này là người Iraq, trong Để có được 600 km ra khỏi một 393 00:18:43,220 --> 00:18:47,530 300-km-tên lửa tầm xa, mất trọng lượng ra khỏi đầu đạn phía trước. 394 00:18:47,530 --> 00:18:49,290 Họ thực hiện các đầu đạn nhẹ hơn. 395 00:18:49,290 --> 00:18:53,110 Vì vậy bây giờ Patriot đang cố gắng để đến lúc các tên lửa Scud. 396 00:18:53,110 --> 00:18:56,470 Và hầu hết thời gian, áp đảo Phần lớn thời gian, nó sẽ chỉ 397 00:18:56,470 --> 00:18:58,730 bay của tên lửa Scud. 398 00:18:58,730 --> 00:19:01,760 >> SPEAKER 1: Sau khi hệ thống Patriot nhà điều hành nhận ra Patriot bỏ lỡ 399 00:19:01,760 --> 00:19:06,690 mục tiêu của nó, họ phát nổ Patriots đầu đạn hạt nhân để tránh có thể 400 00:19:06,690 --> 00:19:10,300 thương vong nếu nó được cho phép để rơi xuống đất. 401 00:19:10,300 --> 00:19:14,540 >> THEODORE POSTOL: Đó là những gì hầu hết người ta thấy như quả cầu lửa lớn trên bầu trời 402 00:19:14,540 --> 00:19:20,350 và hiểu lầm như chặn của tên lửa Scud đầu đạn hạt nhân. 403 00:19:20,350 --> 00:19:23,320 >> SPEAKER 1: Mặc dù trên bầu trời đêm Người yêu nước dường như là thành công 404 00:19:23,320 --> 00:19:27,530 phá hủy tên lửa Scud, tại Dhahran có có thể là không có lỗi về mình 405 00:19:27,530 --> 00:19:29,140 hiệu suất. 406 00:19:29,140 --> 00:19:34,180 Ở đó, hệ thống radar của Patriot bị mất theo dõi của một tên lửa Scud vào và không bao giờ 407 00:19:34,180 --> 00:19:36,380 đưa ra do một lỗ hổng phần mềm. 408 00:19:36,380 --> 00:19:39,890 409 00:19:39,890 --> 00:19:42,700 >> Đó là người Israel đầu tiên phát hiện ra mà còn hệ thống 410 00:19:42,700 --> 00:19:48,020 là trên, càng có nhiều thời gian khác biệt đã trở thành do một đồng hồ 411 00:19:48,020 --> 00:19:50,470 nhúng trong máy tính của hệ thống. 412 00:19:50,470 --> 00:19:54,640 >> JACK GANSSLE: Khoảng hai tuần trước khi bi kịch ở Dhahran, Israel 413 00:19:54,640 --> 00:19:58,440 báo cáo Bộ Quốc phòng rằng hệ thống đã làm mất thời gian. 414 00:19:58,440 --> 00:20:01,280 Sau khoảng tám giờ chạy, họ nhận thấy rằng hệ thống là 415 00:20:01,280 --> 00:20:03,530 ngày càng trở nên đáng chú ý ít chính xác. 416 00:20:03,530 --> 00:20:07,710 Bộ Quốc phòng trả lời bằng cách nói với tất cả các pin Patriot 417 00:20:07,710 --> 00:20:10,500 để không rời khỏi hệ thống trong một thời gian dài. 418 00:20:10,500 --> 00:20:12,430 Họ không bao giờ nói những gì một thời gian dài được. 419 00:20:12,430 --> 00:20:13,330 Tám giờ? 420 00:20:13,330 --> 00:20:13,810 10 giờ? 421 00:20:13,810 --> 00:20:14,990 1.000 giờ? 422 00:20:14,990 --> 00:20:17,150 Không ai biết. 423 00:20:17,150 --> 00:20:20,220 >> SPEAKER 1: pin Patriot đóng tại doanh trại ở Dhahran 424 00:20:20,220 --> 00:20:24,660 và đồng hồ nội bộ thiếu sót của nó đã được trên hơn 100 giờ trong đêm 425 00:20:24,660 --> 00:20:27,470 Ngày 25 tháng 2. 426 00:20:27,470 --> 00:20:31,770 >> JACK GANSSLE: Nó theo dõi thời gian để một độ chính xác khoảng một phần mười của một giây. 427 00:20:31,770 --> 00:20:34,480 Bây giờ, một phần mười của một giây là một số thú vị bởi vì nó không thể được 428 00:20:34,480 --> 00:20:39,940 thể hiện trong hệ nhị phân chính xác, có nghĩa là nó không thể được thể hiện chính xác trong 429 00:20:39,940 --> 00:20:42,500 bất kỳ máy tính kỹ thuật số hiện đại. 430 00:20:42,500 --> 00:20:46,920 Thật khó để tin, nhưng sử dụng như là một ví dụ. 431 00:20:46,920 --> 00:20:49,000 Hãy lấy số một phần ba. 432 00:20:49,000 --> 00:20:53,150 Một phần ba không thể được thể hiện trong số thập phân chính xác. 433 00:20:53,150 --> 00:20:57,500 Một phần ba là 0,333 đi trên cho vô cực. 434 00:20:57,500 --> 00:21:02,270 Không có cách nào để làm điều đó với độ chính xác tuyệt đối trong số thập phân. 435 00:21:02,270 --> 00:21:05,370 Đó là chính xác cùng một loại vấn đề đã xảy ra trong Patriot. 436 00:21:05,370 --> 00:21:09,880 Dài hệ thống chạy, tồi tệ nhất đã trở thành lỗi thời. 437 00:21:09,880 --> 00:21:13,840 >> SPEAKER 1: Sau 100 giờ hoạt động, lỗi trong thời gian chỉ 438 00:21:13,840 --> 00:21:16,140 khoảng một phần ba của một giây. 439 00:21:16,140 --> 00:21:20,800 Nhưng về mục tiêu tên lửa đi du lịch ở mach năm, nó dẫn đến 440 00:21:20,800 --> 00:21:24,410 một lỗi theo dõi của hơn 600 mét. 441 00:21:24,410 --> 00:21:27,670 Nó sẽ là một lỗi nghiêm trọng cho những người lính tại Dhahran. 442 00:21:27,670 --> 00:21:33,450 >> THEODORE POSTOL: Điều gì đã xảy ra là một Scud ra mắt đã được phát hiện vào đầu 443 00:21:33,450 --> 00:21:34,280 vệ tinh cảnh báo. 444 00:21:34,280 --> 00:21:38,550 Và họ biết rằng các tên lửa Scud đã đến trong chỉ đạo chung của họ. 445 00:21:38,550 --> 00:21:41,000 Họ không biết nó sẽ đến. 446 00:21:41,000 --> 00:21:43,900 >> SPEAKER 1: Đó là lên đến radar thành phần của hệ thống Patriot 447 00:21:43,900 --> 00:21:48,910 bảo vệ Dhahran để xác định vị trí và giữ theo dõi các tên lửa của địch. 448 00:21:48,910 --> 00:21:50,580 >> JACK GANSSLE: Radar là rất thông minh. 449 00:21:50,580 --> 00:21:53,770 Nó thực sự có thể theo dõi vị trí của các tên lửa Scud và sau đó tiên đoán nó 450 00:21:53,770 --> 00:21:57,160 có lẽ sẽ là thời gian tiếp theo radar gửi một xung ra. 451 00:21:57,160 --> 00:21:58,870 Đó được gọi là cổng phạm vi. 452 00:21:58,870 --> 00:22:04,020 >> THEODORE POSTOL: Sau đó, một khi Patriot QUYẾT ĐỊNH đủ thời gian đã trôi qua đi 453 00:22:04,020 --> 00:22:09,420 sao lưu và kiểm tra các vị trí tiếp theo cho đối tượng phát hiện này, nó đi lại. 454 00:22:09,420 --> 00:22:14,450 Vì vậy, khi quay trở lại sai nơi, nó sau đó thấy không có đối tượng. 455 00:22:14,450 --> 00:22:18,200 Và nó quyết định rằng không có đối tượng, đó là một phát hiện sai, và 456 00:22:18,200 --> 00:22:19,680 xuống theo dõi. 457 00:22:19,680 --> 00:22:22,970 >> SPEAKER 1: Tên lửa Scud đến biến mất từ màn hình radar, và 458 00:22:22,970 --> 00:22:26,050 giây sau nó đập vào doanh trại. 459 00:22:26,050 --> 00:22:31,950 Tên lửa Scud giết chết 28 và là người cuối cùng bắn trong chiến tranh vùng Vịnh đầu tiên. 460 00:22:31,950 --> 00:22:37,700 Bi kịch, phần mềm cập nhật đến tại Dhahran ngày hôm sau. 461 00:22:37,700 --> 00:22:41,800 Các lỗ hổng phần mềm đã được cố định, đóng một chương trong khó khăn 462 00:22:41,800 --> 00:22:43,690 lịch sử của tên lửa Patriot. 463 00:22:43,690 --> 00:22:46,780 464 00:22:46,780 --> 00:22:50,710 >> Người yêu nước thực sự là một từ viết tắt cho Phased Array theo dõi 465 00:22:50,710 --> 00:22:51,960 Trong đánh chặn mục tiêu. 466 00:22:51,960 --> 00:22:54,650 467 00:22:54,650 --> 00:23:00,840 >> DAVID J Malan: Được rồi, do đó, một nghiêm túc ví dụ, để đảm bảo. 468 00:23:00,840 --> 00:23:03,430 Và may mắn thay, những cấp độ thấp hơn lỗi không phải là một cái gì đó mà chúng ta sẽ 469 00:23:03,430 --> 00:23:06,220 thường phải đánh giá cao, chắc chắn không với một số của chúng tôi 470 00:23:06,220 --> 00:23:07,360 đầu tiên của chương trình. 471 00:23:07,360 --> 00:23:10,450 Thay vào đó, hầu hết các lỗi bạn sẽ cuộc gặp gỡ sẽ là hợp lý trong tự nhiên, 472 00:23:10,450 --> 00:23:12,900 cú pháp trong tự nhiên theo đó đang không hoạt động đúng. 473 00:23:12,900 --> 00:23:14,140 Và bạn biết điều đó khá nhanh. 474 00:23:14,140 --> 00:23:16,850 >> Nhưng đặc biệt là khi chúng tôi đến được với các kết thúc học kỳ, nó sẽ 475 00:23:16,850 --> 00:23:20,620 ngày càng trở nên nhiều hơn một khả năng thực sự nghĩ rằng khó khăn về thiết kế 476 00:23:20,620 --> 00:23:22,960 chương trình của bạn và cơ bản đại diện 477 00:23:22,960 --> 00:23:24,520 ở đó, các dữ liệu. 478 00:23:24,520 --> 00:23:28,010 Ví dụ, chúng tôi sẽ giới thiệu MySQL, mà là một cơ sở dữ liệu phổ biến 479 00:23:28,010 --> 00:23:30,850 mà bạn có thể sử dụng với các trang web để lưu trữ dữ liệu trở lại vào cuối. 480 00:23:30,850 --> 00:23:34,630 Và bạn sẽ phải bắt đầu quyết định ở kết thúc học kỳ không chỉ những gì 481 00:23:34,630 --> 00:23:38,790 các loại dữ liệu dọc theo những dòng sử dụng nhưng chính xác bao nhiêu bit để sử dụng, 482 00:23:38,790 --> 00:23:42,740 hay không, bạn muốn để lưu trữ ngày như ngày và giờ như thời gian, và cũng 483 00:23:42,740 --> 00:23:46,890 những thứ như thế nào lớn nào bạn muốn ID duy nhất để được cho, nói rằng, những người sử dụng 484 00:23:46,890 --> 00:23:47,680 trong cơ sở dữ liệu của bạn. 485 00:23:47,680 --> 00:23:51,210 >> Trong thực tế, nếu một số bạn có có Facebook chiếm một thời gian, 486 00:23:51,210 --> 00:23:53,680 và bạn biết làm thế nào để có được truy cập để Tên người dùng - 487 00:23:53,680 --> 00:23:57,930 mà đôi khi xuất hiện trong của bạn URL của hồ sơ, trừ khi bạn đã chọn một 488 00:23:57,930 --> 00:24:02,070 biệt danh cho URL, hoặc nếu bạn đã Đồ thị được sử dụng API của Facebook, các 489 00:24:02,070 --> 00:24:05,510 công bố công khai API mà bạn có thể yêu cầu Facebook cho dữ liệu thô - 490 00:24:05,510 --> 00:24:07,580 bạn có thể xem số ID của bạn. 491 00:24:07,580 --> 00:24:10,880 Và một số năm trước, Facebook chủ yếu đã phải thay đổi từ việc sử dụng 492 00:24:10,880 --> 00:24:15,980 tương đương với số nguyên để sử dụng lâu lâu bởi vì theo thời gian khi người dùng đến 493 00:24:15,980 --> 00:24:19,780 và đi và tạo ra nhiều tài khoản và tài khoản giả, ngay cả khi họ rất dễ dàng 494 00:24:19,780 --> 00:24:24,630 đã có thể làm cạn kiệt một cái gì đó giống như một 4 tỷ có giá trị như một int. 495 00:24:24,630 --> 00:24:28,340 >> Vì vậy, nhiều trên các loại của các vấn đề xuống đường, là tốt. 496 00:24:28,340 --> 00:24:30,750 Được rồi, do đó đã được đúc. 497 00:24:30,750 --> 00:24:31,670 Đó là không chính xác. 498 00:24:31,670 --> 00:24:32,730 Một vài thông báo nhanh chóng. 499 00:24:32,730 --> 00:24:35,710 Vì vậy, phần chính thức bắt đầu này tới Chủ nhật, thứ hai, thứ ba. 500 00:24:35,710 --> 00:24:39,080 Bạn sẽ nghe thông qua email vào cuối tuần này như sự phân công phần của bạn. 501 00:24:39,080 --> 00:24:42,570 Và bạn cũng ở đây vào thời điểm đó sẽ như thế nào để thay đổi phần của bạn nếu bạn 502 00:24:42,570 --> 00:24:45,660 lịch trình bây giờ đã thay đổi hoặc của bạn mức độ thoải mái bây giờ đã thay đổi. 503 00:24:45,660 --> 00:24:49,380 Trong khi đó P thiết lập một và hacker là một do thứ năm này với các tùy chọn 504 00:24:49,380 --> 00:24:52,450 mở rộng thời hạn mà theo các thông số kỹ thuật đến thứ Sáu 505 00:24:52,450 --> 00:24:53,830 một cách điển hình. 506 00:24:53,830 --> 00:24:57,500 >> Nhận ra rằng đi kèm với vấn đề thiết lập thông số kỹ thuật là hướng dẫn 507 00:24:57,500 --> 00:25:02,770 cách sử dụng các thiết bị CS50, thực hiện, cũng như một số công cụ cụ thể CS50 508 00:25:02,770 --> 00:25:06,540 như phong cách 50, có thể cung cấp cho bạn với thông tin phản hồi tự động trên 509 00:25:06,540 --> 00:25:10,230 chất lượng của phong cách mã của bạn và cũng có kiểm tra 50, có thể cung cấp cho bạn 510 00:25:10,230 --> 00:25:13,160 thông tin phản hồi năng động như của bạn chính xác mã của. 511 00:25:13,160 --> 00:25:16,850 Tha thứ mà chúng ta vẫn còn ủi ra một vài trở ngại với kiểm tra 50. 512 00:25:16,850 --> 00:25:21,490 Một vài người bạn cùng lớp của bạn những người đã bắt đầu khoảng 04:00 vào tối thứ Sáu khi 513 00:25:21,490 --> 00:25:25,130 spec lên đã nhận thấy kể từ đó một vài lỗi mà chúng ta đang làm việc 514 00:25:25,130 --> 00:25:29,010 thông qua, và lời xin lỗi cho bất cứ ai đã trải qua nỗi thất vọng quá mức. 515 00:25:29,010 --> 00:25:30,340 Lỗi là của tôi. 516 00:25:30,340 --> 00:25:34,080 Nhưng chúng tôi sẽ tiếp tục công CS50 thảo luận khi điều đó được giải quyết. 517 00:25:34,080 --> 00:25:35,700 >> Vì vậy, một từ trên điểm số của mình. 518 00:25:35,700 --> 00:25:38,990 Vì vậy, nó sẽ có một hoặc hai tuần trước khi bạn bắt đầu để có được thông tin phản hồi về bài tập 519 00:25:38,990 --> 00:25:40,640 bởi vì bạn chưa có một giảng viên. 520 00:25:40,640 --> 00:25:44,510 Và thậm chí sau đó, chúng tôi sẽ bắt đầu để đánh giá vấn đề đặt ra trước khi chúng tôi C 521 00:25:44,510 --> 00:25:46,970 quay trở lại và đánh giá đầu để mà bạn nhận được có liên quan hơn 522 00:25:46,970 --> 00:25:48,150 thông tin phản hồi một cách nhanh chóng hơn. 523 00:25:48,150 --> 00:25:51,870 Nhưng nói chung mỗi giáo trình, CS50 bộ vấn đề được đánh giá theo 524 00:25:51,870 --> 00:25:53,580 sau bốn trục - 525 00:25:53,580 --> 00:25:55,760 phạm vi, chính xác, thiết kế, và phong cách. 526 00:25:55,760 --> 00:25:59,210 >> Phạm vi là có được một số thông thường giữa số không và thứ năm có 527 00:25:59,210 --> 00:26:01,830 chụp bao nhiêu mảnh mà bạn cắn ra. 528 00:26:01,830 --> 00:26:03,750 Thông thường, bạn muốn điều này là năm. 529 00:26:03,750 --> 00:26:05,300 Bạn ít nhất là cố gắng tất cả mọi thứ. 530 00:26:05,300 --> 00:26:09,330 Và nhận thấy đó là một yếu tố nhân giống để làm chỉ là một phần của 531 00:26:09,330 --> 00:26:12,520 tập hợp vấn đề không phải là chiến lược tốt nhất. 532 00:26:12,520 --> 00:26:15,610 >> Trong khi đó, rõ ràng hơn là tầm quan trọng của tính chính xác - 533 00:26:15,610 --> 00:26:18,620 chỉ là chương trình của bạn đúng với tôn trọng với đặc điểm kỹ thuật? 534 00:26:18,620 --> 00:26:21,510 Này là trọng cố tình hơn nhiều hơn so với hai trục khác bởi một 535 00:26:21,510 --> 00:26:24,450 yếu tố của ba bởi vì chúng tôi nhận ra mà thông thường bạn sẽ phải chi tiêu một 536 00:26:24,450 --> 00:26:28,600 thời gian nhiều hơn đuổi xuống một số lỗi, nhận được mã của bạn để làm việc, sau đó bạn 537 00:26:28,600 --> 00:26:31,540 được thụt vào nó và chọn tên biến thích hợp và 538 00:26:31,540 --> 00:26:33,800 thích, mà là ở đầu bên kia của quang phổ của phong cách. 539 00:26:33,800 --> 00:26:36,160 >> Đó không phải để nói rằng phong cách không phải là quan trọng, và chúng tôi sẽ rao giảng trên 540 00:26:36,160 --> 00:26:37,920 thời gian cả trong các bài giảng và trong phần. 541 00:26:37,920 --> 00:26:40,520 Phong cách đề cập đến thẩm mỹ mã của bạn. 542 00:26:40,520 --> 00:26:43,980 Bạn đã chọn cũng được đặt tên biến đó là ngắn nhưng hơi 543 00:26:43,980 --> 00:26:44,680 mô tả? 544 00:26:44,680 --> 00:26:47,840 Là mã của bạn thụt vào như bạn đã thấy trong bài giảng và trong một cách nhất quán 545 00:26:47,840 --> 00:26:49,070 với phong cách 50? 546 00:26:49,070 --> 00:26:51,220 >> Cuối cùng là thiết kế phù hợp có ở giữa. 547 00:26:51,220 --> 00:26:54,090 Thiết kế là một khó khăn hơn để đặt một ngón tay trên bởi vì nó nhiều hơn nữa 548 00:26:54,090 --> 00:26:55,000 chủ quan. 549 00:26:55,000 --> 00:26:58,610 Nhưng nó có lẽ là quan trọng nhất của ba trục về sư phạm 550 00:26:58,610 --> 00:27:02,050 giá trị theo thời gian và điều này sẽ được cơ hội đồng giảng dạy để 551 00:27:02,050 --> 00:27:04,110 cung cấp cho bạn thông tin phản hồi về chất lượng. 552 00:27:04,110 --> 00:27:08,100 Thật vậy, trong CS50 mặc dù chúng tôi có các công thức và điểm số, cuối cùng 553 00:27:08,100 --> 00:27:11,350 trong những ngày này rất cố tình xô rất nhỏ - các giá trị điểm 554 00:27:11,350 --> 00:27:13,460 giữa không và ba và số không và năm. 555 00:27:13,460 --> 00:27:17,800 Chúng tôi không cố gắng để vẽ đường rất thô giữa các bộ vấn đề hoặc giữa 556 00:27:17,800 --> 00:27:21,490 sinh viên mà là tập trung càng nhiều càng tốt chúng ta có thể về chất lượng, longhand 557 00:27:21,490 --> 00:27:25,490 thông tin phản hồi, hoặc đánh máy hoặc bằng lời nói từ đồng giảng dạy cụ thể của bạn, 558 00:27:25,490 --> 00:27:27,050 bạn sẽ nhận được để biết khá tốt. 559 00:27:27,050 --> 00:27:32,340 >> Nhưng nói chung, đó là những trọng lượng rằng các trục khác nhau sẽ có. 560 00:27:32,340 --> 00:27:35,480 Trong khi đó, quá, nó có giá trị lưu giữ trong nhớ rằng bạn không nên cho rằng một 561 00:27:35,480 --> 00:27:38,870 ba trong số năm là 60% và do đó khoảng không. 562 00:27:38,870 --> 00:27:41,410 Ba là cố ý có nghĩa là phải loại giữa đường tốt. 563 00:27:41,410 --> 00:27:43,480 Nếu bạn nhận được chia thành ba tại bắt đầu học kỳ, đó là 564 00:27:43,480 --> 00:27:46,340 thực sự có nghĩa là một tốt đặt để bắt đầu. 565 00:27:46,340 --> 00:27:50,510 Nếu bạn nhận được hàng hai, hội chợ, có chắc chắn một số việc phải trả một ít 566 00:27:50,510 --> 00:27:53,250 quan tâm hơn nữa, để tận dụng lợi thế các bộ phận và giờ làm việc. 567 00:27:53,250 --> 00:27:54,590 >> Nếu bạn nhận được bốn chân và đập tay, tuyệt vời. 568 00:27:54,590 --> 00:27:57,430 Nhưng thực sự, chúng tôi hy vọng sẽ nhìn thấy quỹ đạo giữa các học sinh - rất 569 00:27:57,430 --> 00:28:00,575 từng cá nhân mỗi học sinh, nhưng bắt đầu học kỳ ở đây trong loại 570 00:28:00,575 --> 00:28:04,100 hai phạm vi ba nhưng kết thúc ở đây trong khoảng 4-5. 571 00:28:04,100 --> 00:28:05,440 Đó là những gì chúng tôi đang thực sự tìm kiếm. 572 00:28:05,440 --> 00:28:09,590 Và chúng tôi lưu ý rằng vùng đồng bằng bạn thể hiện giữa không tuần và tuần 573 00:28:09,590 --> 00:28:12,170 12 khi tôi đang làm lớp. 574 00:28:12,170 --> 00:28:16,380 Nó không quan trọng để chúng tôi hoàn toàn như thế nào bạn công bằng ngay từ đầu nếu bạn 575 00:28:16,380 --> 00:28:19,330 quỹ đạo thực sự là trở lên và mạnh mẽ. 576 00:28:19,330 --> 00:28:24,000 >> Trung thực học - vì vậy hãy để tôi đặt trên của tôi hơn giọng nói nghiêm trọng cho một thời điểm. 577 00:28:24,000 --> 00:28:28,510 Vì vậy, khóa học này có sự khác biệt gửi nhiều sinh viên hơn bất kỳ khác 578 00:28:28,510 --> 00:28:30,950 trong lịch sử để hội đồng quản trị quảng cáo, tôi tin. 579 00:28:30,950 --> 00:28:34,220 Chúng tôi đã loại số bị mất tại này điểm thường xuyên điều này xảy ra. 580 00:28:34,220 --> 00:28:37,090 Và đó không phải bởi vì học sinh trong 50 được nữa không trung thực hơn của họ 581 00:28:37,090 --> 00:28:38,690 bạn cùng lớp ở những nơi khác. 582 00:28:38,690 --> 00:28:42,800 Nhưng nhận ra, quá, mà chúng tôi rất tốt khả năng phát hiện các loại điều này. 583 00:28:42,800 --> 00:28:45,920 >> Và đó là lợi thế mà một lớp học khoa học máy tính có trong chúng ta 584 00:28:45,920 --> 00:28:49,110 có thể và chúng tôi so sánh tất cả học sinh vấn đề đặt ra cặp-khôn ngoan chống lại mọi 585 00:28:49,110 --> 00:28:51,470 khác, không chỉ trong năm nay nhưng tất cả các năm trước. 586 00:28:51,470 --> 00:28:55,080 Chúng tôi có khả năng, như học sinh các lớp học, để Google và tìm mã 587 00:28:55,080 --> 00:28:57,440 trên các trang web như github và diễn đàn thảo luận. 588 00:28:57,440 --> 00:29:00,840 Có hoàn toàn giải pháp của CS50 p-đặt nổi xung quanh đó. 589 00:29:00,840 --> 00:29:02,710 Nhưng nếu bạn có thể tìm thấy chúng, chúng ta có thể tìm thấy chúng. 590 00:29:02,710 --> 00:29:07,130 Và tất cả điều này là rất nhiều tự động và dễ dàng và buồn cho chúng tôi để tìm. 591 00:29:07,130 --> 00:29:10,990 >> Nhưng tôi muốn nhấn mạnh, quá, mà các chính sách học tập trung thực tất nhiên là 592 00:29:10,990 --> 00:29:13,960 rất nhiều có nghĩa là rất nhiều trái ngược với tinh thần đó. 593 00:29:13,960 --> 00:29:17,506 Thật vậy, năm nay chúng tôi đã viết lại những điều trong giáo trình được điều này, dấu chấm 594 00:29:17,506 --> 00:29:19,790 chấm điểm, với nhiều chi tiết trong giáo trình. 595 00:29:19,790 --> 00:29:22,860 Nhưng chủ đề bao quát trong khóa học thực sự là hợp lý. 596 00:29:22,860 --> 00:29:26,160 Chúng tôi nhận ra rằng có một ý nghĩa số lượng sư phạm 597 00:29:26,160 --> 00:29:30,550 giá trị trong cộng tác, đến mức độ nào, với bạn cùng lớp, nhờ đó mà bạn 598 00:29:30,550 --> 00:29:33,700 hai hoặc ba bạn hoặc bạn hơn là đứng ở một bảng trắng 599 00:29:33,700 --> 00:29:35,670 whiteboarding, do đó, để nói chuyện, ý tưởng của bạn - 600 00:29:35,670 --> 00:29:39,480 viết ra giả trong hình ảnh, biểu đồ gì Mario nên nếu 601 00:29:39,480 --> 00:29:41,350 bạn đã viết nó đầu tiên trong giả. 602 00:29:41,350 --> 00:29:43,240 Nên những gì các thuật toán tham lam - 603 00:29:43,240 --> 00:29:46,100 cách mã sẽ chạy mỗi vấn đề đặt ra không? 604 00:29:46,100 --> 00:29:50,440 >> Và để nhận ra hành vi mà chúng tôi khuyến khích là rất 605 00:29:50,440 --> 00:29:51,470 nhiều dọc theo các dòng. 606 00:29:51,470 --> 00:29:53,890 Và trong các giáo trình, bạn sẽ thấy một bó toàn bộ các viên đạn trong một 607 00:29:53,890 --> 00:29:57,740 thể loại hợp lý và không hợp lý thể loại giúp chúng ta giúp 608 00:29:57,740 --> 00:30:00,740 bạn chiếm hết tâm trí của bạn xung quanh nơi chúng tôi vẽ một đường cong đó. 609 00:30:00,740 --> 00:30:04,340 Và nói chung, một quy tắc phong nha của ngón tay cái là nếu bạn đang đấu tranh để giải quyết 610 00:30:04,340 --> 00:30:07,990 một số lỗi và bạn bè hoặc bạn cùng lớp của bạn đang ngồi bên cạnh bạn, nó được 611 00:30:07,990 --> 00:30:11,530 hợp lý cho bạn để cho anh ta hoặc cô mã của bạn và nói, hey, bạn có thể giúp 612 00:30:11,530 --> 00:30:13,700 tôi tìm ra những gì đang xảy ra sai ở đây? 613 00:30:13,700 --> 00:30:17,110 >> Chúng tôi không thường ôm hôn phía đối diện. 614 00:30:17,110 --> 00:30:20,730 Nó không phải là một câu trả lời chính xác cho bạn bạn bè hoặc bạn cùng lớp ở đây để nói, oh, 615 00:30:20,730 --> 00:30:22,510 chỉ cần nhìn vào tôi và con số nó ra từ đó. 616 00:30:22,510 --> 00:30:24,400 Đó là loại không hợp lý. 617 00:30:24,400 --> 00:30:27,750 Nhưng có người khác, não khác, một đôi mắt nhìn vào 618 00:30:27,750 --> 00:30:31,620 màn hình hoặc cái nhìn của bạn vào code của bạn và nói, bạn có chắc bạn muốn 619 00:30:31,620 --> 00:30:32,760 để có một vòng lặp ở đây? 620 00:30:32,760 --> 00:30:34,800 Hoặc bạn có chắc bạn muốn rằng dấu chấm phẩy đây? 621 00:30:34,800 --> 00:30:37,090 Hoặc oh, thông báo lỗi có nghĩa này. 622 00:30:37,090 --> 00:30:39,580 Đó là rất hợp lý và hành vi khuyến khích. 623 00:30:39,580 --> 00:30:44,010 >> Các trường hợp mà tôi đề cập tới trước đó đun sôi xuống để khi học sinh 624 00:30:44,010 --> 00:30:47,350 muộn vào ban đêm làm cho sự phán xét người nghèo quyết định và gửi email mã của họ để 625 00:30:47,350 --> 00:30:50,130 người khác hoặc chỉ nói, ở đây, đó là trong Dropbox hoặc 626 00:30:50,130 --> 00:30:51,610 Googling muộn vào ban đêm. 627 00:30:51,610 --> 00:30:54,880 Và vì vậy tôi sẽ khuyến khích và cầu xin của bạn, nếu bạn có những người không thể tránh khỏi 628 00:30:54,880 --> 00:30:58,450 những giây phút căng thẳng, bạn đang va chạm với thời hạn, bạn không có cuối 629 00:30:58,450 --> 00:31:01,490 ngày kể từ khi nó đã thứ sáu tại đó điểm, gửi email cho người đứng đầu của khóa học hoặc 630 00:31:01,490 --> 00:31:02,330 bản thân mình trực tiếp. 631 00:31:02,330 --> 00:31:04,790 Nói, nghe, tôi đang ở tôi vi phạm điểm ở đây. 632 00:31:04,790 --> 00:31:06,660 Chúng ta hãy có một cuộc trò chuyện và con số nó ra. 633 00:31:06,660 --> 00:31:10,400 Phải dùng đến các trang web hay không một số khác hành vi hợp lý không bao giờ là 634 00:31:10,400 --> 00:31:13,070 giải pháp, và quá nhiều của bạn bạn cùng lớp không còn đây trên 635 00:31:13,070 --> 00:31:15,150 khuôn viên vì sự phán xét người nghèo. 636 00:31:15,150 --> 00:31:17,840 Nhưng nó rất dễ dàng để bao quanh các đường dây đó. 637 00:31:17,840 --> 00:31:22,950 >> Và đây là một hình ảnh nhỏ để cổ vũ bạn từ Reddit để bây giờ 638 00:31:22,950 --> 00:31:25,720 mọi thứ sẽ ổn. 639 00:31:25,720 --> 00:31:30,210 >> Vì vậy, một bản tóm tắt nhanh chóng, sau đó, nơi chúng tôi rời đi. 640 00:31:30,210 --> 00:31:33,690 Vì vậy, tuần trước, nhớ lại rằng chúng tôi giới thiệu điều kiện, không trong Scratch 641 00:31:33,690 --> 00:31:34,880 nhưng trong C thời gian này. 642 00:31:34,880 --> 00:31:38,300 Và đã có một số cú pháp mới nhưng thực sự không có ý tưởng mới cho mỗi gia nhập. 643 00:31:38,300 --> 00:31:42,630 Chúng tôi đã có các biểu thức Boolean mà chúng ta có thể hoặc cùng với hai theo chiều dọc 644 00:31:42,630 --> 00:31:46,490 thanh hay và cùng với hai ampersands, nói rằng cả hai bên trái 645 00:31:46,490 --> 00:31:49,990 và quyền phải đúng sự thật cho này để thực thi. 646 00:31:49,990 --> 00:31:53,150 Sau đó, chúng tôi đã có công tắc, mà chúng tôi nhìn tại một thời gian ngắn, nhưng tôi đề nghị là thực sự 647 00:31:53,150 --> 00:31:56,830 chỉ là cú pháp khác nhau để đạt được các cùng một loại mục tiêu nếu bạn biết 648 00:31:56,830 --> 00:31:59,270 thúc đẩy những trường hợp của bạn đang có được. 649 00:31:59,270 --> 00:32:00,160 >> Chúng tôi nhìn vào các vòng lặp. 650 00:32:00,160 --> 00:32:03,340 Một vòng lặp là có thể phổ biến nhất, hoặc ít nhất là một trong những người 651 00:32:03,340 --> 00:32:05,330 thường tiếp cận với bản năng. 652 00:32:05,330 --> 00:32:08,240 Mặc dù có vẻ hơi khó hiểu, bạn sẽ thấy rất nhiều, rất nhiều ví dụ về điều này 653 00:32:08,240 --> 00:32:11,590 Không lâu sau, như bạn có đã vào cuối tuần trước. 654 00:32:11,590 --> 00:32:14,280 Trong khi các vòng có thể tương tự đạt được điều tương tự. 655 00:32:14,280 --> 00:32:17,550 Nhưng nếu bạn muốn làm bất kỳ incrementation hoặc cập nhật 656 00:32:17,550 --> 00:32:20,230 giá trị của biến, bạn phải làm điều đó bằng tay hơn so với 657 00:32:20,230 --> 00:32:22,440 cho vòng trước khi cho phép. 658 00:32:22,440 --> 00:32:25,310 Và sau đó là do-trong khi vòng lặp, cho phép chúng tôi làm điều gì đó tại 659 00:32:25,310 --> 00:32:28,460 ít nhất một lần trong khi một cái gì đó khác là sự thật. 660 00:32:28,460 --> 00:32:31,550 Và điều này đặc biệt tốt cho chương trình hoặc cho các trò chơi mà bạn muốn 661 00:32:31,550 --> 00:32:33,810 để nhắc nhở người dùng cho một cái gì đó ít nhất một lần. 662 00:32:33,810 --> 00:32:37,110 Và sau đó nếu người đó không hợp tác, bạn có thể muốn làm điều đó 663 00:32:37,110 --> 00:32:38,420 một lần nữa và một lần nữa. 664 00:32:38,420 --> 00:32:41,270 >> Với các biến số, trong khi đó, chúng tôi đã có dòng mã như thế này, mà có thể 665 00:32:41,270 --> 00:32:41,950 được hai dòng. 666 00:32:41,950 --> 00:32:44,830 Bạn có thể khai báo một int truy cập, dấu chấm phẩy. 667 00:32:44,830 --> 00:32:47,660 Hoặc bạn có thể chỉ cần kê khai, xác định nó, vì vậy để nói chuyện. 668 00:32:47,660 --> 00:32:49,950 Cung cấp cho nó một giá trị cùng một lúc. 669 00:32:49,950 --> 00:32:51,890 >> Và sau đó cuối cùng, chúng tôi nói chuyện về chức năng. 670 00:32:51,890 --> 00:32:54,270 Và đây là một ví dụ tốt đẹp trong nghĩa là nó minh họa 671 00:32:54,270 --> 00:32:55,840 hai loại chức năng. 672 00:32:55,840 --> 00:32:59,030 Một là GetString (), trong đó, một lần nữa, được một chuỗi từ người sử dụng. 673 00:32:59,030 --> 00:33:02,040 Nhưng GetString () lại khá thú vị, cho đến nay như chúng ta đã sử dụng nó, 674 00:33:02,040 --> 00:33:05,620 bởi vì chúng tôi đã luôn luôn sử dụng nó với một cái gì đó ở phía bên tay trái của một 675 00:33:05,620 --> 00:33:06,600 dấu bằng. 676 00:33:06,600 --> 00:33:09,830 Đó là để nói rằng GetString () trả về giá trị. 677 00:33:09,830 --> 00:33:11,970 Nó trả về, tất nhiên, một chuỗi. 678 00:33:11,970 --> 00:33:15,130 Và sau đó ở phía bên trái, chúng tôi chỉ đơn giản là tiết kiệm chuỗi bên trong một 679 00:33:15,130 --> 00:33:16,580 biến được gọi tên. 680 00:33:16,580 --> 00:33:21,100 >> Điều này là khác nhau, trong một nghĩa nào đó, từ printf vì printf, ít nhất là của chúng tôi 681 00:33:21,100 --> 00:33:23,540 sử dụng ở đây, không trả lại bất cứ điều gì. 682 00:33:23,540 --> 00:33:24,960 Như một sang một bên, nó trở lại một cái gì đó. 683 00:33:24,960 --> 00:33:26,380 Chúng tôi không quan tâm nó là gì. 684 00:33:26,380 --> 00:33:29,090 Nhưng nó không có gì được gọi là một tác dụng phụ. 685 00:33:29,090 --> 00:33:31,840 Và tác dụng phụ trong mỗi là những gì trường hợp chúng tôi đã nhìn thấy cho đến nay? 686 00:33:31,840 --> 00:33:34,720 Những gì printf làm gì? 687 00:33:34,720 --> 00:33:37,780 Nó in một cái gì đó để màn hình, hiển thị văn bản hoặc số hoặc một cái gì đó 688 00:33:37,780 --> 00:33:38,380 trên màn hình. 689 00:33:38,380 --> 00:33:41,170 Và đó là chỉ được coi là một tác dụng phụ bởi vì nó không thực sự giao 690 00:33:41,170 --> 00:33:41,900 nó trở lại với tôi. 691 00:33:41,900 --> 00:33:44,770 Nó không phải là một câu trả lời bên trong một hộp đen mà tôi có thể sau đó 692 00:33:44,770 --> 00:33:46,130 đạt được vào và lấy. 693 00:33:46,130 --> 00:33:49,160 Nó chỉ làm nó ngày của riêng mình, nhiều như Colton đã được cắm vào điều này 694 00:33:49,160 --> 00:33:52,560 hộp đen tuần trước, và anh ta bằng cách nào đó kỳ diệu đã được vẽ trên bảng 695 00:33:52,560 --> 00:33:54,500 mà không có tôi thực sự có liên quan. 696 00:33:54,500 --> 00:33:55,560 Đó sẽ là một tác dụng phụ. 697 00:33:55,560 --> 00:33:59,100 Nhưng nếu tôi thực sự đã phải quay trở về ở đây và nói, ồ, đây là chuỗi 698 00:33:59,100 --> 00:34:02,040 từ người sử dụng, mà có thể là một giá trị trả về. 699 00:34:02,040 --> 00:34:05,650 >> Và cho đến nay chúng tôi đã chỉ được sử dụng các chức năng mà người khác đã viết. 700 00:34:05,650 --> 00:34:09,219 Nhưng chúng tôi thực sự có thể làm những cả mọi thứ mình. 701 00:34:09,219 --> 00:34:12,730 Vì vậy, tôi sẽ đi vào CS50 thiết bị một lần nữa. 702 00:34:12,730 --> 00:34:16,020 Hãy để tôi đóng tab đó chúng tôi đã mở ra một thời điểm trước đây. 703 00:34:16,020 --> 00:34:18,530 Và để cho tôi đi trước và tạo ra một tập tin mới. 704 00:34:18,530 --> 00:34:22,400 Và tôi sẽ đi trước và gọi một positive.c này. 705 00:34:22,400 --> 00:34:24,770 Vì vậy, tôi muốn làm một cái gì đó với số dương ở đây. 706 00:34:24,770 --> 00:34:27,219 Vì vậy, tôi sẽ đi trước và làm int - 707 00:34:27,219 --> 00:34:28,000 xin lỗi - 708 00:34:28,000 --> 00:34:31,840 # Bao gồm. 709 00:34:31,840 --> 00:34:34,280 Chúng ta không làm cho rằng cùng sai lầm như trước. 710 00:34:34,280 --> 00:34:40,020 Int main (void), mở xoăn cú đúp, đóng xoăn cú đúp. 711 00:34:40,020 --> 00:34:41,639 >> Và bây giờ tôi muốn làm như sau. 712 00:34:41,639 --> 00:34:44,600 Tôi muốn viết một chương trình khẳng định rằng người sử dụng cung cấp cho 713 00:34:44,600 --> 00:34:46,770 tôi một số nguyên dương. 714 00:34:46,770 --> 00:34:50,969 Vì vậy, không có chức năng GetPositiveInt trong thư viện CS50. 715 00:34:50,969 --> 00:34:52,610 Chỉ có getInt (). 716 00:34:52,610 --> 00:34:55,790 Nhưng đó là OK bởi vì tôi có cấu trúc mà tôi có thể áp đặt một 717 00:34:55,790 --> 00:34:59,360 hạn chế hơn về giá trị đó. 718 00:34:59,360 --> 00:35:00,990 Tôi có thể làm một cái gì đó như thế này. 719 00:35:00,990 --> 00:35:02,780 >> Vì vậy, int n - 720 00:35:02,780 --> 00:35:04,920 và nếu bạn gõ cùng, chỉ cần nhận ra Tôi sẽ quay trở lại và 721 00:35:04,920 --> 00:35:06,430 thay đổi một số điều trong một thời điểm - 722 00:35:06,430 --> 00:35:09,960 để int n bằng getInt (). 723 00:35:09,960 --> 00:35:11,780 Và điều đó sẽ đặt một trong int n. 724 00:35:11,780 --> 00:35:13,830 Và hãy để tôi được mô tả nhiều hơn. 725 00:35:13,830 --> 00:35:23,270 Hãy để tôi nói điều gì đó như Tôi yêu cầu bạn cung cấp cho tôi một số nguyên dương. 726 00:35:23,270 --> 00:35:23,550 >> Được rồi. 727 00:35:23,550 --> 00:35:25,250 Vì vậy, chỉ cần một chút hướng dẫn. 728 00:35:25,250 --> 00:35:26,270 Và bây giờ những gì tôi có thể làm gì? 729 00:35:26,270 --> 00:35:29,840 Vâng, tôi đã biết từ đơn giản của tôi điều kiện hoặc chi nhánh, giống như tôi 730 00:35:29,840 --> 00:35:36,100 đã có trong cào, tôi có thể nói điều gì đó thích nếu n là nhỏ hơn hoặc bằng 731 00:35:36,100 --> 00:35:44,460 bằng không, thì tôi muốn làm một cái gì đó thích, đó không phải là tích cực. 732 00:35:44,460 --> 00:35:45,560 Và sau đó tôi có thể làm - 733 00:35:45,560 --> 00:35:47,310 OK, nhưng tôi thực sự muốn được int đó. 734 00:35:47,310 --> 00:35:52,020 Vì vậy, tôi có thể đi lên đây và tôi có thể loại các bản sao này và indent này. 735 00:35:52,020 --> 00:35:52,570 Và sau đó, OK. 736 00:35:52,570 --> 00:35:56,990 Vì vậy, nếu n là nhỏ hơn hoặc bằng không làm điều này. 737 00:35:56,990 --> 00:35:58,900 >> Bây giờ, nếu người sử dụng không hợp tác? 738 00:35:58,900 --> 00:36:01,560 Vâng, sau đó tôi sẽ vay này đây. 739 00:36:01,560 --> 00:36:03,130 Và sau đó tôi đi trong đây và đây và đây. 740 00:36:03,130 --> 00:36:06,420 Vì vậy, đây rõ ràng là không các giải pháp, phải không? 741 00:36:06,420 --> 00:36:07,810 Bởi vì không có kết thúc trong cảnh. 742 00:36:07,810 --> 00:36:13,100 Nếu tôi muốn yêu cầu người dùng cung cấp cho tôi một số nguyên dương, tôi có thể 743 00:36:13,100 --> 00:36:14,150 thực sự có được các int. 744 00:36:14,150 --> 00:36:15,620 Sau đó tôi có thể kiểm tra cho int đó. 745 00:36:15,620 --> 00:36:18,570 Nhưng sau đó tôi muốn kiểm tra xem nó một lần nữa và kiểm tra lại và kiểm tra lại. 746 00:36:18,570 --> 00:36:21,680 Vì vậy, rõ ràng, những gì là tốt hơn xây dựng được sử dụng ở đây? 747 00:36:21,680 --> 00:36:22,840 Được rồi, vì vậy một số loại vòng lặp. 748 00:36:22,840 --> 00:36:25,430 >> Vì vậy, tôi đang đi để thoát khỏi của gần như tất cả điều này. 749 00:36:25,430 --> 00:36:27,320 Và tôi muốn có được điều này int ít nhất một lần. 750 00:36:27,320 --> 00:36:28,890 Vì vậy, tôi sẽ nói làm - 751 00:36:28,890 --> 00:36:32,110 và tôi sẽ quay trở lại trong khi chỉ trong một thời điểm - 752 00:36:32,110 --> 00:36:33,050 bây giờ, làm những gì? 753 00:36:33,050 --> 00:36:35,860 Tôi sẽ làm int n được getInt (). 754 00:36:35,860 --> 00:36:36,080 OK. 755 00:36:36,080 --> 00:36:37,250 Vì vậy, đó là khá tốt. 756 00:36:37,250 --> 00:36:39,750 Và bây giờ mức độ thường xuyên làm Tôi muốn làm điều này? 757 00:36:39,750 --> 00:36:45,770 >> Hãy để tôi đặt trong printf của vòng lặp vì vậy tôi có thể yêu cầu một lần nữa và một lần nữa, 758 00:36:45,770 --> 00:36:46,740 nếu cần thiết. 759 00:36:46,740 --> 00:36:49,720 Và những gì tôi muốn điều này trong khi điều kiện để làm gì? 760 00:36:49,720 --> 00:36:53,870 Tôi muốn tiếp tục làm điều này trong khi các trường hợp là gì? 761 00:36:53,870 --> 00:36:54,125 Vâng. 762 00:36:54,125 --> 00:36:55,390 N là ít hơn hoặc bằng số không. 763 00:36:55,390 --> 00:36:58,180 Như vậy, chúng tôi đã đáng kể làm sạch mã này lên. 764 00:36:58,180 --> 00:37:00,700 Chúng tôi đã vay rất đơn giản xây dựng - do-trong khi vòng lặp. 765 00:37:00,700 --> 00:37:04,690 Tôi đã bị đánh cắp chỉ là những dòng quan trọng mã mà tôi bắt đầu sao chép và 766 00:37:04,690 --> 00:37:05,960 dán, mà là không khôn ngoan. 767 00:37:05,960 --> 00:37:09,790 Và vì vậy bây giờ tôi sẽ thực sự dán nó ở đây và chỉ làm điều đó một lần. 768 00:37:09,790 --> 00:37:12,990 >> Và bây giờ những gì tôi muốn làm tại cuối của chương trình này? 769 00:37:12,990 --> 00:37:16,810 Tôi sẽ chỉ nói một cái gì đó đơn giản thích, cảm ơn cho - và 770 00:37:16,810 --> 00:37:18,980 Tôi sẽ làm% i cho int - 771 00:37:18,980 --> 00:37:23,270 dấu gạch chéo ngược n, dấu phẩy, và sau đó cắm n, dấu chấm phẩy. 772 00:37:23,270 --> 00:37:23,910 >> Được rồi. 773 00:37:23,910 --> 00:37:27,290 Vì vậy, chúng ta hãy xem những gì sẽ xảy ra khi tôi chạy chương trình này. 774 00:37:27,290 --> 00:37:30,600 Tôi sẽ đi trước và không làm tích cực. 775 00:37:30,600 --> 00:37:30,880 Chết tiệt. 776 00:37:30,880 --> 00:37:31,600 Một vài lỗi. 777 00:37:31,600 --> 00:37:32,960 Vì vậy, hãy để tôi di chuyển trở lại cho đến đầu tiên. 778 00:37:32,960 --> 00:37:34,020 Không làm việc qua chúng về phía sau. 779 00:37:34,020 --> 00:37:37,000 Làm việc thông qua chúng từ trên xuống vì sợ rằng họ thác và chỉ 780 00:37:37,000 --> 00:37:38,630 một điều là sai. 781 00:37:38,630 --> 00:37:42,532 Khai tiềm ẩn của chức năng getInt (). 782 00:37:42,532 --> 00:37:43,020 Vâng. 783 00:37:43,020 --> 00:37:44,420 Vì vậy, nó là không đủ. 784 00:37:44,420 --> 00:37:46,760 Tôi gần như đã sai lầm tương tự, nhưng một chút khác nhau thời gian này. 785 00:37:46,760 --> 00:37:51,940 Tôi cần không chỉ bao gồm stdio.h nhưng cũng cs50.h, trong đó bao gồm các 786 00:37:51,940 --> 00:37:56,770 cái gọi là tờ khai được int, mà dạy cho thiết bị, hoặc dạy 787 00:37:56,770 --> 00:37:58,760 C những gì getInt () là. 788 00:37:58,760 --> 00:37:59,550 >> Vì vậy, hãy để tôi lưu lại. 789 00:37:59,550 --> 00:38:02,040 Tôi sẽ bỏ qua các lỗi khác bởi vì tôi sẽ hy vọng rằng họ 790 00:38:02,040 --> 00:38:05,210 bằng cách nào đó liên quan đến lỗi Tôi đã được cố định. 791 00:38:05,210 --> 00:38:08,710 Vì vậy, hãy để tôi đi trước và biên dịch lại với thực hiện tích cực, Enter. 792 00:38:08,710 --> 00:38:09,020 Chết tiệt. 793 00:38:09,020 --> 00:38:09,985 Ba lỗi, vẫn còn. 794 00:38:09,985 --> 00:38:12,650 Hãy để tôi di chuyển đến đầu tiên. 795 00:38:12,650 --> 00:38:14,320 Không sử dụng biến n. 796 00:38:14,320 --> 00:38:15,850 Chúng tôi đã không nhìn thấy điều này trước đây. 797 00:38:15,850 --> 00:38:17,200 Và điều này cũng là một chút khó hiểu. 798 00:38:17,200 --> 00:38:18,850 Đây là đầu ra của trình biên dịch. 799 00:38:18,850 --> 00:38:23,610 Và những gì mà dòng nhấn mạnh có - positive.c :9:13 - 800 00:38:23,610 --> 00:38:28,960 được nói, nó nói trên dòng chín positive.c, ở nhân vật thứ 13, 801 00:38:28,960 --> 00:38:31,510 Cột thứ 13, bạn đã thực hiện sai lầm này. 802 00:38:31,510 --> 00:38:34,230 >> Và đặc biệt, nó nói tôi không sử dụng biến n. 803 00:38:34,230 --> 00:38:35,790 Vì vậy, chúng ta hãy xem - 804 00:38:35,790 --> 00:38:37,150 đường chín. 805 00:38:37,150 --> 00:38:40,430 Tôi đang sử dụng n theo nghĩa là Tôi cho nó một giá trị. 806 00:38:40,430 --> 00:38:44,200 Nhưng những gì các trình biên dịch không thích là rằng tôi không dường như sử dụng nó. 807 00:38:44,200 --> 00:38:45,560 Nhưng chờ một phút, tôi đang sử dụng nó. 808 00:38:45,560 --> 00:38:48,170 Trong dòng 11, tôi đang sử dụng nó ở đây. 809 00:38:48,170 --> 00:38:52,430 Nhưng nếu tôi di chuyển xuống thấp hơn nữa tại positive.c :11 - 810 00:38:52,430 --> 00:38:56,230 do đó, tại dòng 11, nhân vật 12, trình biên dịch nói với tôi, sử dụng 811 00:38:56,230 --> 00:38:58,670 không khai báo định danh n. 812 00:38:58,670 --> 00:39:02,760 >> Phương tiện để khai báo tôi có không xác định nó như là một 813 00:39:02,760 --> 00:39:04,970 biến với một kiểu dữ liệu. 814 00:39:04,970 --> 00:39:05,500 Nhưng chờ một phút. 815 00:39:05,500 --> 00:39:09,150 Tôi đã làm chính xác điều đó trong dòng chín. 816 00:39:09,150 --> 00:39:11,100 Vì vậy, một người nào đó thực sự nhầm lẫn ở đây. 817 00:39:11,100 --> 00:39:14,900 Nó hoặc là tôi hoặc các trình biên dịch bởi vì trong đường chín, một lần nữa, tôi tuyên bố một 818 00:39:14,900 --> 00:39:18,650 int n, và tôi đang giao nó trả lại giá trị của getInt (). 819 00:39:18,650 --> 00:39:22,930 Sau đó, tôi đang sử dụng mà n biến trong dòng 11 và kiểm tra nếu giá trị của nó là ít 820 00:39:22,930 --> 00:39:24,050 hơn hoặc bằng số không. 821 00:39:24,050 --> 00:39:27,430 Nhưng điều này dường như là xấu và bị hỏng tại sao? 822 00:39:27,430 --> 00:39:30,630 823 00:39:30,630 --> 00:39:32,490 Nói lại lần nữa? 824 00:39:32,490 --> 00:39:35,690 >> Ah, tôi phải khai báo trước khi n bước vào vòng lặp. 825 00:39:35,690 --> 00:39:36,370 Nhưng tại sao? 826 00:39:36,370 --> 00:39:39,830 Ý tôi là, chúng tôi chỉ đề xuất một chút trước đó nó là tốt để khai báo các biến 827 00:39:39,830 --> 00:39:43,600 trên cùng một dòng và sau đó giao cho một số giá trị. 828 00:39:43,600 --> 00:39:46,790 Một biến toàn cầu - chúng ta hãy trở lại với ý tưởng chỉ trong một thời điểm. 829 00:39:46,790 --> 00:39:48,690 Tại sao bạn muốn tôi để đặt nó bên ngoài vòng lặp? 830 00:39:48,690 --> 00:40:03,170 831 00:40:03,170 --> 00:40:03,830 Nó được. 832 00:40:03,830 --> 00:40:06,780 Chính xác. 833 00:40:06,780 --> 00:40:09,610 >> Vì vậy, mặc dù, phần nào phản trực giác, cho phép tôi tóm tắt. 834 00:40:09,610 --> 00:40:13,510 Khi bạn khai báo n trong của khối do đó - 835 00:40:13,510 --> 00:40:16,320 đặc biệt bên trong những dấu ngoặc nhọn - 836 00:40:16,320 --> 00:40:19,210 rằng biến n có gì gọi là phạm vi - 837 00:40:19,210 --> 00:40:23,210 không liên quan đến hệ thống tính điểm của chúng tôi trong tất nhiên - nhưng có một phạm vi đó là 838 00:40:23,210 --> 00:40:25,190 giới hạn trong những dấu ngoặc nhọn. 839 00:40:25,190 --> 00:40:28,460 Nói cách khác, thông thường nếu bạn khai báo một biến trong một bộ 840 00:40:28,460 --> 00:40:33,370 dấu ngoặc nhọn, biến chỉ tồn tại bên trong những dấu ngoặc nhọn. 841 00:40:33,370 --> 00:40:37,320 Vì vậy, theo logic một mình, mặc dù Tôi đã tuyên bố n trong đường chín, nó 842 00:40:37,320 --> 00:40:41,910 về cơ bản biến mất khỏi phạm vi, biến mất khỏi bộ nhớ, có thể nói, 843 00:40:41,910 --> 00:40:43,370 do thời gian tôi nhấn dòng 11. 844 00:40:43,370 --> 00:40:47,370 Vì đường 11, không may, là ngoài những dấu ngoặc nhọn. 845 00:40:47,370 --> 00:40:51,540 >> Vì vậy, tôi tiếc là không có thể sửa lỗi này bằng sẽ trở lại với những gì tôi đã làm điều đó trước. 846 00:40:51,540 --> 00:40:53,370 Bạn có thể lần đầu tiên làm điều này. 847 00:40:53,370 --> 00:40:56,370 Nhưng bạn là gì bây giờ không làm theo chu kỳ? 848 00:40:56,370 --> 00:40:58,260 Bạn rõ ràng là không nhận được int theo chu kỳ. 849 00:40:58,260 --> 00:41:01,320 Vì vậy, chúng ta có thể rời khỏi getInt (), và chúng tôi nên để lại getInt () bên trong 850 00:41:01,320 --> 00:41:04,420 vòng lặp bởi vì đó là những gì chúng tôi muốn làm phiền người sử dụng cho một lần nữa và một lần nữa. 851 00:41:04,420 --> 00:41:08,660 Nhưng nó không đủ để đi đến dòng, nói, sáu. 852 00:41:08,660 --> 00:41:10,150 Int n, dấu chấm phẩy. 853 00:41:10,150 --> 00:41:12,990 Không cung cấp cho nó một giá trị nào vì bạn không cần phải chỉ được nêu ra. 854 00:41:12,990 --> 00:41:16,220 >> Nhưng bây giờ xuống đây, thông báo - điều này sẽ là một sai lầm rất dễ dàng. 855 00:41:16,220 --> 00:41:19,440 Tôi không muốn để bóng trước đây của tôi Tuyên bố của n. 856 00:41:19,440 --> 00:41:22,830 Tôi muốn sử dụng n mà thực sự tồn tại. 857 00:41:22,830 --> 00:41:25,780 Và vì vậy bây giờ trong dòng 10, Tôi chỉ định một giá trị n. 858 00:41:25,780 --> 00:41:28,580 Nhưng trong dòng sáu, tôi tuyên bố n. 859 00:41:28,580 --> 00:41:32,940 Và vì vậy tôi có thể hoặc có thể tôi không sử dụng nó trong dòng 12 bây giờ? 860 00:41:32,940 --> 00:41:37,120 Tôi vì có thể giữa chúng xoăn niềng răng là n tuyên bố bây giờ? 861 00:41:37,120 --> 00:41:38,770 Một ở đây trên đường năm. 862 00:41:38,770 --> 00:41:40,330 Để ai ở đây trên đường 14. 863 00:41:40,330 --> 00:41:49,770 Vì vậy, nếu tôi bây giờ thu nhỏ, lưu tập tin này, đi sao vào và chạy làm tích cực, nó 864 00:41:49,770 --> 00:41:50,820 biên soạn lần này. 865 00:41:50,820 --> 00:41:51,940 Vì vậy, đó là đã có tiến bộ. 866 00:41:51,940 --> 00:41:53,640 Cắt giảm. . / Tích cực, Enter. 867 00:41:53,640 --> 00:41:56,060 >> Tôi yêu cầu bạn cung cấp cho tôi một số nguyên dương. 868 00:41:56,060 --> 00:41:57,750 Tiêu cực 1. 869 00:41:57,750 --> 00:41:59,020 Tiêu cực 2. 870 00:41:59,020 --> 00:42:00,680 Âm tính 3. 871 00:42:00,680 --> 00:42:01,760 Không. 872 00:42:01,760 --> 00:42:03,000 Một. 873 00:42:03,000 --> 00:42:05,130 Và cảm ơn cho một là những gì bây giờ được in. 874 00:42:05,130 --> 00:42:07,400 >> Hãy để tôi thử một cái gì đó khác, ra khỏi tò mò. 875 00:42:07,400 --> 00:42:09,600 Tôi đang được nói đến đầu vào một số nguyên. 876 00:42:09,600 --> 00:42:12,870 Nhưng nếu tôi thay vì gõ trong thịt cừu? 877 00:42:12,870 --> 00:42:14,460 Vì vậy, bây giờ bạn nhìn thấy một cửa sổ khác nhau - 878 00:42:14,460 --> 00:42:15,350 thử lại. 879 00:42:15,350 --> 00:42:17,670 Nhưng không nơi nào trong mã của tôi tôi đã viết thử lại. 880 00:42:17,670 --> 00:42:22,320 Vì vậy, ở đâu, có lẽ, là này thử lại nhắc đến từ, bạn sẽ nói gì? 881 00:42:22,320 --> 00:42:23,540 Yeah, từ getInt () chính nó. 882 00:42:23,540 --> 00:42:26,650 Vì vậy, một trong những điều nhân viên của CS50 không cho bạn, ít nhất là trong vài lần đầu tiên 883 00:42:26,650 --> 00:42:30,400 tuần, là chúng tôi đã viết một số lượng kiểm tra để đảm bảo rằng nếu lỗi 884 00:42:30,400 --> 00:42:34,260 bạn gọi getInt (), bạn sẽ có ít nhất lấy lại một int từ người sử dụng. 885 00:42:34,260 --> 00:42:35,460 Bạn sẽ không nhận được một chuỗi. 886 00:42:35,460 --> 00:42:36,440 Bạn sẽ không có được một char. 887 00:42:36,440 --> 00:42:39,660 Bạn sẽ không nhận được một cái gì đó khác hoàn toàn. 888 00:42:39,660 --> 00:42:40,510 Bạn sẽ nhận được một int. 889 00:42:40,510 --> 00:42:41,890 >> Bây giờ, nó có thể không được tích cực. 890 00:42:41,890 --> 00:42:42,770 Nó có thể không được tiêu cực. 891 00:42:42,770 --> 00:42:44,550 Chúng tôi không đảm bảo xung quanh đó. 892 00:42:44,550 --> 00:42:48,960 Nhưng chúng tôi sẽ làm phiền người sử dụng để thử lại, thử lại, thử lại cho đến khi họ thực sự 893 00:42:48,960 --> 00:42:49,810 hợp tác. 894 00:42:49,810 --> 00:42:53,085 Tương tự như vậy, nếu tôi làm 1.23, đó không phải là một int. 895 00:42:53,085 --> 00:42:58,400 Nhưng nếu tôi gõ vào, nói, 50 tuổi, mà mang lại cho tôi một giá trị mà tôi muốn. 896 00:42:58,400 --> 00:42:59,050 >> Được rồi. 897 00:42:59,050 --> 00:43:01,380 Vì vậy, không xấu. 898 00:43:01,380 --> 00:43:04,780 Bất kỳ câu hỏi về những gì chúng ta vừa thực hiện? 899 00:43:04,780 --> 00:43:07,930 Các Yếu tố chính là, phải rõ ràng, không rất nhiều vòng, mà chúng tôi đã nhìn thấy 900 00:43:07,930 --> 00:43:10,880 trước mặc dù chúng tôi đã không thực sự sử dụng nó, nhưng vấn đề phạm vi, nơi 901 00:43:10,880 --> 00:43:17,045 biến chỉ có thể được có thể chỉ được sử dụng trong một số phạm vi quy định. 902 00:43:17,045 --> 00:43:19,830 >> Được rồi, hãy để tôi giải quyết các đề nghị bạn đã thực hiện trước đó, đó là một 903 00:43:19,830 --> 00:43:20,860 biến toàn cầu. 904 00:43:20,860 --> 00:43:24,880 Như một sang một bên, nó quay ra rằng khác giải pháp cho vấn đề này, nhưng 905 00:43:24,880 --> 00:43:28,880 thường là một giải pháp không chính xác hoặc một giải pháp được thiết kế kém, là 906 00:43:28,880 --> 00:43:31,670 khai báo biến của bạn như những gì được gọi là một biến toàn cầu. 907 00:43:31,670 --> 00:43:34,610 Bây giờ tôi là loại vi phạm định nghĩa của tôi phạm vi vì có 908 00:43:34,610 --> 00:43:37,680 không có dấu ngoặc nhọn ở đầu và dưới cùng của một tập tin. 909 00:43:37,680 --> 00:43:40,190 Nhưng ý nghĩa của mà là bây giờ trong dòng bốn, 910 00:43:40,190 --> 00:43:41,710 n là một biến toàn cầu. 911 00:43:41,710 --> 00:43:44,460 Và như tên gọi của nó, đó là chỉ có thể truy cập ở khắp mọi nơi. 912 00:43:44,460 --> 00:43:45,790 >> Đầu thực sự có này. 913 00:43:45,790 --> 00:43:48,650 Nếu bạn sử dụng một biến, bạn có thể nhớ lại bạn phải lựa chọn nếu nó cho 914 00:43:48,650 --> 00:43:50,780 ma này hoặc cho tất cả các họa tiết. 915 00:43:50,780 --> 00:43:54,270 Vâng, tất cả các họa chỉ là rõ ràng hơn Nói cách toàn cầu. 916 00:43:54,270 --> 00:43:55,520 Yeah? 917 00:43:55,520 --> 00:44:09,690 918 00:44:09,690 --> 00:44:10,990 Ah, câu hỏi thực sự tốt. 919 00:44:10,990 --> 00:44:14,310 >> Vì vậy, nhớ lại rằng trong phiên bản đầu tiên mã của tôi, khi tôi không chính xác 920 00:44:14,310 --> 00:44:17,700 n khai báo và xác định trong đường chín - 921 00:44:17,700 --> 00:44:19,980 Tôi tuyên bố nó như là một biến và tôi đã cho nó một giá trị 922 00:44:19,980 --> 00:44:21,160 các nhà điều hành phân công - 923 00:44:21,160 --> 00:44:22,520 này đã cho tôi hai lỗi. 924 00:44:22,520 --> 00:44:26,560 Một, thực tế là n không được sử dụng, và hai, trong dòng 11 925 00:44:26,560 --> 00:44:27,770 nó chỉ là không khai báo. 926 00:44:27,770 --> 00:44:31,120 Vì vậy, người đầu tiên tôi đã không địa chỉ tại thời điểm đó. 927 00:44:31,120 --> 00:44:35,130 Nó không phải là một lỗi nghiêm chỉnh tuyên bố một biến nhưng không sử dụng nó. 928 00:44:35,130 --> 00:44:38,540 Nhưng một trong những điều chúng tôi đã làm trong thiết bị CS50, cố tình, 929 00:44:38,540 --> 00:44:43,340 sư phạm, là chúng tôi đã tăng chỉ mong đợi của các trình biên dịch để thực hiện 930 00:44:43,340 --> 00:44:46,970 chắc chắn rằng bạn đang làm những việc không chỉ đúng nhưng thực sự chính xác. 931 00:44:46,970 --> 00:44:51,520 >> Bởi vì nếu bạn khai báo một biến như n và không bao giờ sử dụng nó, hoặc sử dụng nó 932 00:44:51,520 --> 00:44:53,700 chính xác, sau đó những gì là nó làm gì ở đó? 933 00:44:53,700 --> 00:44:55,650 Nó thực sự không có mục đích. 934 00:44:55,650 --> 00:44:58,980 Và nó rất dễ dàng theo thời gian, nếu bạn không cấu hình máy tính của mình trong 935 00:44:58,980 --> 00:45:01,960 Bằng cách này, chỉ cần có mã số đó có tàn tích nhỏ ở đây, còn sót lại ở đó. 936 00:45:01,960 --> 00:45:04,390 Và sau đó vài tháng sau bạn nhìn lại và bạn giống như, tại sao dòng này của 937 00:45:04,390 --> 00:45:05,060 đang có? 938 00:45:05,060 --> 00:45:07,940 Và nếu không có lý do chính đáng, nó không có lợi cho bạn hoặc đồng nghiệp của bạn 939 00:45:07,940 --> 00:45:10,650 xuống đường phải vấp ngã trên nó sau đó. 940 00:45:10,650 --> 00:45:12,540 >> Như một sang một bên, mà là đó đến từ đâu? 941 00:45:12,540 --> 00:45:16,410 Vâng, nhớ lại rằng mỗi khi chúng tôi biên dịch chương trình, tất cả các công cụ này là 942 00:45:16,410 --> 00:45:17,380 được in. 943 00:45:17,380 --> 00:45:18,350 Vì vậy, chúng tôi sẽ trở lại vấn đề này. 944 00:45:18,350 --> 00:45:22,230 Nhưng một lần nữa, hãy là một tiện ích tự động hóa quá trình biên soạn bởi 945 00:45:22,230 --> 00:45:24,830 chạy trình biên dịch thực tế gọi là kêu vang. 946 00:45:24,830 --> 00:45:27,650 Điều này, cuối cùng chúng ta sẽ thấy, có để làm với gỡ lỗi với một đặc biệt 947 00:45:27,650 --> 00:45:29,060 chương trình được gọi là trình gỡ lỗi. 948 00:45:29,060 --> 00:45:32,150 Điều này đã làm với tối ưu hóa mã - thêm vào đó trong tương lai. 949 00:45:32,150 --> 00:45:33,620 Std = c99 - 950 00:45:33,620 --> 00:45:37,870 điều này chỉ có nghĩa là sử dụng phiên bản năm 1999 của C. C được xung quanh thậm chí còn hơn 951 00:45:37,870 --> 00:45:40,830 đó, nhưng họ đã thực hiện một số đẹp thay đổi cộng với 10 năm trước đây. 952 00:45:40,830 --> 00:45:42,690 >> Và đây là những người có liên quan. 953 00:45:42,690 --> 00:45:45,880 Chúng ta đang nói làm bất cứ điều gì trước đó sẽ là một cảnh báo 954 00:45:45,880 --> 00:45:48,560 một lỗi ngăn chặn học sinh từ biên soạn. 955 00:45:48,560 --> 00:45:51,400 Và phương tiện tường làm điều đó cho một bó toàn bộ của sự vật, không 956 00:45:51,400 --> 00:45:53,060 chỉ liên quan đến các biến. 957 00:45:53,060 --> 00:45:54,700 Và sau đó cho phép tôi di chuyển đến cuối dòng này. 958 00:45:54,700 --> 00:45:56,430 Và điều này cũng vậy, chúng tôi sẽ cuối cùng quay trở lại. 959 00:45:56,430 --> 00:45:59,040 Điều này rõ ràng là tên của các tập tin tôi đang biên soạn. 960 00:45:59,040 --> 00:46:02,160 Điều này nhắc lại tên của tập tin Tôi xuất như tên 961 00:46:02,160 --> 00:46:04,070 của chương trình Runnable của tôi. 962 00:46:04,070 --> 00:46:08,970 Này-lcs50 chỉ có nghĩa là sử dụng CS50 thư viện, và bất kỳ số không và những người 963 00:46:08,970 --> 00:46:12,390 các nhân viên đã viết và biên soạn trước đó năm nay, tích hợp 964 00:46:12,390 --> 00:46:13,490 chúng vào chương trình của tôi. 965 00:46:13,490 --> 00:46:16,130 >> Và bất cứ ai biết những gì-lm? 966 00:46:16,130 --> 00:46:18,150 Đó là thư viện toán học, đó là chỉ có ngay cả khi bạn 967 00:46:18,150 --> 00:46:19,320 không thực hiện bất kỳ toán học. 968 00:46:19,320 --> 00:46:22,620 Nó chỉ tự động cung cấp cho chúng ta thực hiện. 969 00:46:22,620 --> 00:46:26,540 >> Vâng, hãy để tôi làm một ví dụ khác đây bằng cách mở một tập tin mới. 970 00:46:26,540 --> 00:46:30,560 Và cho tôi tiết kiệm này như string.c. 971 00:46:30,560 --> 00:46:37,980 Nó chỉ ra rằng khi chúng ta nói về dữ liệu loại ngày hôm nay, có nhiều hơn 972 00:46:37,980 --> 00:46:40,630 đang diễn ra bên dưới mui xe hơn chúng ta đã thấy cho đến nay. 973 00:46:40,630 --> 00:46:42,290 Vì vậy, hãy để tôi nhanh chóng làm một chương trình nhanh chóng. 974 00:46:42,290 --> 00:46:44,510 Bao gồm stdio.h. 975 00:46:44,510 --> 00:46:45,730 Và tôi sẽ tiết kiệm đó. 976 00:46:45,730 --> 00:46:48,110 Và bạn biết, hãy để tôi không làm cho cùng một sai lầm một lần nữa và một lần nữa. 977 00:46:48,110 --> 00:46:50,540 Bao gồm cs50.h. 978 00:46:50,540 --> 00:46:54,870 Và để cho tôi đi trước bây giờ và làm int main (void). 979 00:46:54,870 --> 00:46:58,790 >> Và bây giờ tôi chỉ muốn làm một chương trình thực hiện điều này - khai báo một chuỗi 980 00:46:58,790 --> 00:47:03,610 gọi là s và có được một chuỗi từ người sử dụng. 981 00:47:03,610 --> 00:47:05,820 Và để cho tôi làm một ít hướng dẫn tại đây - 982 00:47:05,820 --> 00:47:09,960 xin vui lòng cho tôi một chuỗi - vì vậy người sử dụng biết phải làm gì. 983 00:47:09,960 --> 00:47:13,190 Và sau đó xuống bên dưới đây này, Tôi muốn làm như sau - 984 00:47:13,190 --> 00:47:16,060 cho int i được không. 985 00:47:16,060 --> 00:47:18,580 Một lần nữa, các nhà khoa học máy tính thường bắt đầu đếm từ số không, nhưng chúng tôi có thể 986 00:47:18,580 --> 00:47:20,340 làm cho rằng một khi chúng ta thực sự muốn. 987 00:47:20,340 --> 00:47:27,240 Bây giờ tôi sẽ làm tôi ít hơn chiều dài chuỗi s. 988 00:47:27,240 --> 00:47:28,430 Vì vậy, strlen - 989 00:47:28,430 --> 00:47:29,510 S-T-R-L-E-N - 990 00:47:29,510 --> 00:47:31,650 một lần nữa, đó là chính xác bởi vì nó dễ dàng hơn đánh máy, mặc dù đó là một 991 00:47:31,650 --> 00:47:32,590 chút khó hiểu. 992 00:47:32,590 --> 00:47:35,290 >> Đó là một chức năng chúng tôi đã không được sử dụng trước nhưng nghĩa nào đó - 993 00:47:35,290 --> 00:47:37,810 trở về với tôi một số đại diện chiều dài của chuỗi 994 00:47:37,810 --> 00:47:38,690 mà người dùng gõ. 995 00:47:38,690 --> 00:47:41,740 Nếu họ gõ vào xin chào, nó sẽ trở lại năm bởi vì có năm 996 00:47:41,740 --> 00:47:42,890 chữ trong hello. 997 00:47:42,890 --> 00:47:45,390 Sau đó, trên mỗi lần lặp của vòng lặp này, tôi cộng với cộng với. 998 00:47:45,390 --> 00:47:49,170 Vì vậy, một lần nữa, một tiêu chuẩn xây dựng ngay cả khi bạn không hoàn toàn quá thoải mái hay 999 00:47:49,170 --> 00:47:50,420 quen thuộc với nó được nêu ra. 1000 00:47:50,420 --> 00:47:53,220 >> Nhưng bây giờ mỗi lần lặp của vòng lặp này, thông báo những gì tôi sẽ làm. 1001 00:47:53,220 --> 00:47:56,690 Tôi muốn đi trước và in ra một nhân vật duy nhất - 1002 00:47:56,690 --> 00:47:59,940 để% c n dấu chéo ngược trên một dòng mới. 1003 00:47:59,940 --> 00:48:00,990 Và sau đó, bạn biết những gì tôi muốn làm gì? 1004 00:48:00,990 --> 00:48:05,090 Bất cứ điều gì từ là loại người sử dụng trong, như xin chào, tôi muốn in 1005 00:48:05,090 --> 00:48:09,530 H-E-L-L-O, một ký tự trên mỗi dòng. 1006 00:48:09,530 --> 00:48:13,080 Nói cách khác, tôi muốn có được ở các đặc điểm cá nhân trong một chuỗi, 1007 00:48:13,080 --> 00:48:16,770 theo đó cho đến bây giờ chỉ có một chuỗi là một chuỗi các ký tự. 1008 00:48:16,770 --> 00:48:21,690 >> Và nó quay ra tôi có thể làm s, khung, i, dấu đóng ngoặc, đóng 1009 00:48:21,690 --> 00:48:23,580 ngoặc đơn, dấu chấm phẩy. 1010 00:48:23,580 --> 00:48:25,640 Và tôi phải làm một điều nữa. 1011 00:48:25,640 --> 00:48:30,570 Đó là trong một tập tin gọi là string.h rằng strlen được khai báo. 1012 00:48:30,570 --> 00:48:33,190 Vì vậy, nếu tôi muốn sử dụng chức năng, Tôi cần phải nói với trình biên dịch, 1013 00:48:33,190 --> 00:48:34,450 hy vọng sẽ sử dụng nó. 1014 00:48:34,450 --> 00:48:37,040 Bây giờ hãy để tôi đi trước và thực hiện chương trình được gọi là chuỗi. 1015 00:48:37,040 --> 00:48:39,150 Dấu chấm, dấu gạch chéo, chuỗi. 1016 00:48:39,150 --> 00:48:40,130 >> Xin vui lòng cho tôi một chuỗi. 1017 00:48:40,130 --> 00:48:40,900 Tôi sẽ đi trước và gõ nó. 1018 00:48:40,900 --> 00:48:43,040 Xin chào, trong tất cả các mũ, Enter. 1019 00:48:43,040 --> 00:48:47,390 Và bây giờ tôi nhận thấy đã in này một nhân vật sau khi khác. 1020 00:48:47,390 --> 00:48:51,450 Vì vậy, các chi tiết mới đây là một chuỗi, vào cuối ngày, có thể 1021 00:48:51,450 --> 00:48:54,810 truy cập bằng cách cá nhân của mình nhân vật bằng cách giới thiệu vuông 1022 00:48:54,810 --> 00:48:55,840 khung ký hiệu. 1023 00:48:55,840 --> 00:48:59,090 Và đó là bởi vì một chuỗi bên dưới mui xe thực sự là một chuỗi các 1024 00:48:59,090 --> 00:48:59,810 ký tự. 1025 00:48:59,810 --> 00:49:02,010 Nhưng những gì gọn gàng về họ là RAM trong máy tính của bạn - 1026 00:49:02,010 --> 00:49:05,300 Mac, máy tính, bất cứ điều gì - chúng nghĩa đen trở lại trở lại để trở lại - 1027 00:49:05,300 --> 00:49:06,225 H-E-L-L-O - 1028 00:49:06,225 --> 00:49:09,920 ở cá nhân, liền kề byte trong bộ nhớ. 1029 00:49:09,920 --> 00:49:13,210 >> Vì vậy, nếu bạn muốn nhận được ở thứ tám như vậy byte, trong vòng này sẽ là 1030 00:49:13,210 --> 00:49:16,900 khung bằng không, một khung, khung hai, khung ba, bốn khung - 1031 00:49:16,900 --> 00:49:18,890 đó là không được lập chỉ mục cho đến năm - 1032 00:49:18,890 --> 00:49:23,330 sẽ in ra H-E-L-L-O trên một dòng riêng. 1033 00:49:23,330 --> 00:49:26,320 >> Bây giờ, như một lời trêu ghẹo, hãy để tôi chỉ cho bạn các loại vật bạn cuối cùng sẽ được 1034 00:49:26,320 --> 00:49:31,950 có thể hiểu, ít nhất với một số gần gũi. 1035 00:49:31,950 --> 00:49:35,610 Đối với một, những gì chúng tôi có trong ngày hôm nay ví dụ, nếu bạn muốn, thực sự là 1036 00:49:35,610 --> 00:49:38,300 một trong những jailbreaks đầu tiên cho iPhone. 1037 00:49:38,300 --> 00:49:40,800 Jailbreaking có nghĩa là nứt điện thoại do đó, bạn thực sự có thể sử dụng nó trên một 1038 00:49:40,800 --> 00:49:43,380 nhà cung cấp khác nhau hoặc cài đặt phần mềm của riêng bạn. 1039 00:49:43,380 --> 00:49:45,660 Và bạn sẽ nhận thấy điều này có vẻ hoàn toàn khó hiểu, rất có thể. 1040 00:49:45,660 --> 00:49:46,520 Nhưng nhìn vào điều này. 1041 00:49:46,520 --> 00:49:50,420 IPhone dường như đã bị nứt với một vòng lặp, một điều kiện nếu, một khác 1042 00:49:50,420 --> 00:49:52,580 điều kiện, một loạt các chức năng chúng tôi đã không nhìn thấy. 1043 00:49:52,580 --> 00:49:54,230 >> Và một lần nữa, bạn sẽ không phải ở Thoạt nhìn có thể 1044 00:49:54,230 --> 00:49:55,620 hiểu làm thế nào điều này đang làm việc. 1045 00:49:55,620 --> 00:49:58,940 Nhưng tất cả mọi thứ mà chúng ta loại đi cho các cấp trong cuộc sống hiện đại của chúng tôi 1046 00:49:58,940 --> 00:50:02,040 thực sự có xu hướng giảm thậm chí một số các nguyên tắc cơ bản chúng tôi đã 1047 00:50:02,040 --> 00:50:02,820 xem xét. 1048 00:50:02,820 --> 00:50:06,680 Hãy để tôi đi trước và mở một chương trình khác, holloway.c. 1049 00:50:06,680 --> 00:50:08,970 Vì vậy, đây cũng là một cái gì đó bạn nên không thực sự biết. 1050 00:50:08,970 --> 00:50:12,440 Thậm chí không có nhân viên hoặc tôi có thể có thể con số này ra bằng cách nhìn vào 1051 00:50:12,440 --> 00:50:15,450 vì đây là mã của một ai đó đã được nộp cho những gì 1052 00:50:15,450 --> 00:50:19,630 lịch sử được biết đến như một obfuscated C cuộc thi, nơi bạn viết một chương trình 1053 00:50:19,630 --> 00:50:24,670 đó biên dịch và chạy nhưng là như vậy damn khó hiểu con người không thể hiểu những gì 1054 00:50:24,670 --> 00:50:27,530 nó sẽ làm cho đến khi họ thực sự chạy nó. 1055 00:50:27,530 --> 00:50:29,940 >> Vì vậy, trên thực tế, nếu bạn nhìn vào điều này mã, tôi nhìn thấy một chuyển đổi. 1056 00:50:29,940 --> 00:50:30,870 Tôi thấy chính. 1057 00:50:30,870 --> 00:50:33,800 Tôi nhìn thấy những dấu ngoặc vuông ngụ ý một số loại của một mảng. 1058 00:50:33,800 --> 00:50:35,970 Có ai muốn đoán những gì chương trình này thực sự 1059 00:50:35,970 --> 00:50:37,220 không nếu tôi chạy Holloway? 1060 00:50:37,220 --> 00:50:39,940 1061 00:50:39,940 --> 00:50:40,750 Vâng. 1062 00:50:40,750 --> 00:50:43,050 OK. 1063 00:50:43,050 --> 00:50:44,690 Thực hiện tốt. 1064 00:50:44,690 --> 00:50:48,090 Vì vậy, chỉ có các nhân viên và tôi không thể hình ra những gì những điều làm. 1065 00:50:48,090 --> 00:50:51,670 >> Và bây giờ cuối cùng, hãy để tôi đi trước và mở ra một chương trình khác. 1066 00:50:51,670 --> 00:50:53,440 Này - 1067 00:50:53,440 --> 00:50:55,550 một lần nữa, chúng tôi sẽ làm cho mã nguồn có sẵn trực tuyến - điều này chỉ 1068 00:50:55,550 --> 00:50:57,480 loại khá để xem xét. 1069 00:50:57,480 --> 00:50:59,750 Tất cả họ đã làm là nhấn thanh không gian khá một chút. 1070 00:50:59,750 --> 00:51:01,320 Nhưng đây là mã thực. 1071 00:51:01,320 --> 00:51:04,790 Vì vậy, nếu bạn nghĩ rằng đó là đẹp, nếu chúng ta thực sự chạy này tại dấu nhắc, 1072 00:51:04,790 --> 00:51:08,970 cuối cùng bạn sẽ thấy cách chúng tôi có thể làm những việc như thế này. 1073 00:51:08,970 --> 00:51:14,008 >> Vì vậy, chúng tôi sẽ để lại cho bạn lưu ý và nhìn thấy bạn vào thứ tư. 1074 00:51:14,008 --> 00:51:18,440 >> [Chơi nhạc] 1075 00:51:18,440 --> 00:51:23,380 >> SPEAKER 2: Tại CS50 tiếp theo, các TF giai đoạn một cuộc binh biến. 1076 00:51:23,380 --> 00:51:24,112 >> SPEAKER 3: Có anh. 1077 00:51:24,112 --> 00:51:25,362 Có được anh ta! 1078 00:51:25,362 --> 00:51:29,912 1079 00:51:29,912 --> 00:51:32,074 >> [Chơi nhạc]