1 00:00:00,000 --> 00:00:10,940 2 00:00:10,940 --> 00:00:13,060 >> DAVID Malan J: Tất cả phải, vì vậy đây là CS50. 3 00:00:13,060 --> 00:00:15,040 Và điều này rõ ràng là ngày thứ sáu. 4 00:00:15,040 --> 00:00:16,850 Và đây là kết thúc của một tuần. 5 00:00:16,850 --> 00:00:21,020 Vì vậy, bạn có thể nhớ lại rằng chúng ta rời đi, Lần cuối cùng, với một cliffhanger của các loại. 6 00:00:21,020 --> 00:00:25,020 Nhờ đó mà chúng ta vạch trần lời nói dối này, rằng không có có vấn đề gì bạn đã được dạy phát triển 7 00:00:25,020 --> 00:00:31,610 lên, 1 chia cho 10 là không, trong Thực tế, 0,1 hay 0,100 hoặc 0,10000. 8 00:00:31,610 --> 00:00:35,270 Trong thực tế, nếu chúng tôi biên dịch này chương trình, như chúng tôi đã làm ngày hôm qua, với, 9 00:00:35,270 --> 00:00:39,770 làm cho sự thiếu chính xác, và sau đó làm dấu chấm, dấu gạch chéo, thiếu chính xác, 10 00:00:39,770 --> 00:00:43,600 chúng tôi được biết đây là những gì 1 chia cho 10 thực sự là. 11 00:00:43,600 --> 00:00:46,140 Vì vậy, đó không phải là thực sự khá là trường hợp. 12 00:00:46,140 --> 00:00:49,014 Nhưng điều này không gợi ý tại một số hạn chế cơ bản của máy tính. 13 00:00:49,014 --> 00:00:50,930 Và quả thật, trong số các điều chúng ta đang đi làm 14 00:00:50,930 --> 00:00:55,130 hôm nay là hãy xem tại sao điều này có đã xảy ra, những gì tác động này có, 15 00:00:55,130 --> 00:00:58,430 làm thế nào loài người đã thất bại để nắm bắt điều này trong một số rất 16 00:00:58,430 --> 00:01:00,410 situations-- nghiêm trọng kết quả của mà 17 00:01:00,410 --> 00:01:03,141 đã được khá bi thảm và expensive-- và cũng 18 00:01:03,141 --> 00:01:04,849 hãy xem cách chúng tôi thực sự có thể bảo vệ 19 00:01:04,849 --> 00:01:06,530 chống lại các loại hạn chế. 20 00:01:06,530 --> 00:01:10,940 Vì vậy, bằng trực giác, có lẽ, tại sao là 1 chia cho 10, 21 00:01:10,940 --> 00:01:15,480 theo máy tính của tôi ở đây, không chỉ là 1/10, 0.10? 22 00:01:15,480 --> 00:01:15,980 Yeah. 23 00:01:15,980 --> 00:01:16,530 Bạn nghĩ sao? 24 00:01:16,530 --> 00:01:17,860 >> TƯỢNG THÀNH VIÊN: Cơ số là khác nhau? 25 00:01:17,860 --> 00:01:18,550 >> DAVID Malan J: là gì? 26 00:01:18,550 --> 00:01:19,730 Oh, các cơ số là khác nhau? 27 00:01:19,730 --> 00:01:20,720 Vì vậy, không khá. 28 00:01:20,720 --> 00:01:23,200 Đó là thực tế nhiều hơn cơ bản đến phần cứng. 29 00:01:23,200 --> 00:01:23,980 Suy nghĩ khác? 30 00:01:23,980 --> 00:01:24,584 Yeah. 31 00:01:24,584 --> 00:01:26,750 TƯỢNG THÀNH VIÊN: Họ đại diện cho số khác nhau không? 32 00:01:26,750 --> 00:01:27,880 DAVID Malan J: Vậy they-- phải. 33 00:01:27,880 --> 00:01:29,338 Họ đại diện cho số khác nhau. 34 00:01:29,338 --> 00:01:30,700 Không chính xác, rõ ràng. 35 00:01:30,700 --> 00:01:33,190 Vì vậy mà is-- Vâng, khác với những gì? 36 00:01:33,190 --> 00:01:34,490 Hoặc từ ai? 37 00:01:34,490 --> 00:01:35,050 Từ chúng tôi? 38 00:01:35,050 --> 00:01:35,966 TƯỢNG THÀNH VIÊN: Yeah. 39 00:01:35,966 --> 00:01:38,930 Họ không sử dụng các chữ số thập phân hệ thống [không nghe được]. 40 00:01:38,930 --> 00:01:39,680 DAVID Malan J: OK. 41 00:01:39,680 --> 00:01:41,560 Vì vậy, trong một nghĩa nào đó, họ không sử dụng hệ thống số thập phân. 42 00:01:41,560 --> 00:01:43,720 Bên dưới mui xe, tất cả mọi thứ, thực sự, nhị phân, 43 00:01:43,720 --> 00:01:45,510 và đó là có liên quan, trong thực tế. 44 00:01:45,510 --> 00:01:48,135 Nhưng nó thậm chí còn đơn giản hơn một giải thích hơn. 45 00:01:48,135 --> 00:01:48,635 Yeah. 46 00:01:48,635 --> 00:01:49,970 >> TƯỢNG THÀNH VIÊN: Họ chỉ có rất nhiều bit. 47 00:01:49,970 --> 00:01:52,370 Họ chỉ có thể lưu trữ lên đến một số mức độ, giống như với các số thập phân. 48 00:01:52,370 --> 00:01:52,780 >> DAVID Malan J: Vâng. 49 00:01:52,780 --> 00:01:54,420 Đây là những gì đang thực sự nhận được vào nó. 50 00:01:54,420 --> 00:01:57,180 Nó chỉ ra rằng máy tính thường, sẽ luôn luôn chỉ 51 00:01:57,180 --> 00:01:59,690 sử dụng một số lượng hữu hạn của thông tin để đại diện cho một cái gì đó. 52 00:01:59,690 --> 00:01:59,870 Phải không? 53 00:01:59,870 --> 00:02:02,110 Sau khi tất cả, chúng tôi chỉ có một cố định số lượng không gian đĩa cứng. 54 00:02:02,110 --> 00:02:04,210 Chúng tôi chỉ có một số tiền cố định RAM hoặc bộ nhớ máy tính. 55 00:02:04,210 --> 00:02:06,251 Và nếu bạn chỉ có một số tiền cố định của một cái gì đó, 56 00:02:06,251 --> 00:02:09,611 chắc chắn bạn có thể không thực sự đếm lên đến vô cùng hoặc bất kỳ số nào bạn muốn. 57 00:02:09,611 --> 00:02:11,610 Bạn, loại, phải chọn và chọn những gì nhiều 58 00:02:11,610 --> 00:02:13,220 các giá trị mà bạn đang đi để hỗ trợ. 59 00:02:13,220 --> 00:02:18,100 >> Và do đó, ví dụ, một hoặc hai tuần trước, khi chúng tôi nói chuyện về ASCII, 60 00:02:18,100 --> 00:02:21,610 và chúng tôi nói chuyện về 8 bit, hoặc một byte, do đó, để nói chuyện, 61 00:02:21,610 --> 00:02:26,360 số lượng lớn nhất chúng ta có thể đại diện với 8 bit là gì? 62 00:02:26,360 --> 00:02:28,350 255. 63 00:02:28,350 --> 00:02:31,850 Và chúng ta có thể đại diện cho tổng giá trị 256 nhưng nếu chúng ta dành một trong số họ 64 00:02:31,850 --> 00:02:34,190 trên 0-- Vâng, nhưng nếu chúng tôi dành một trong số họ về 0, 65 00:02:34,190 --> 00:02:36,830 sau đó là số lớn nhất là, tất nhiên, 255. 66 00:02:36,830 --> 00:02:39,410 >> Vì vậy, nó quay ra, rằng đây là trường hợp quá, trong bối cảnh này. 67 00:02:39,410 --> 00:02:42,350 Chúng tôi bắt đầu nói chuyện, thời gian qua, về số dấu chấm động, mà 68 00:02:42,350 --> 00:02:44,640 là khác nhau từ số nguyên, trong rằng họ có một điểm thập phân 69 00:02:44,640 --> 00:02:47,056 và, hy vọng, một số con số sau đó, nhưng họ quá. 70 00:02:47,056 --> 00:02:51,730 Một máy tính được chỉ thường đi sử dụng 32 bit, có thể 64 bit 71 00:02:51,730 --> 00:02:53,497 để đại diện cho một giá trị dấu chấm. 72 00:02:53,497 --> 00:02:56,080 Vì vậy, mặc dù chúng tôi đã trưởng thành lên học toán học và biết 73 00:02:56,080 --> 00:02:58,750 rằng bạn hoàn toàn có thể có một số vô hạn các số 74 00:02:58,750 --> 00:03:01,650 sau dấu thập phân, không nếu bạn có bộ nhớ hữu hạn. 75 00:03:01,650 --> 00:03:03,930 Bạn, loại, phải làm tròn, hoặc chọn và chọn 76 00:03:03,930 --> 00:03:05,346 số bạn đang đi để đại diện. 77 00:03:05,346 --> 00:03:08,710 Và như vậy bạn có thể nghĩ đến, trong một nghĩa nào đó, này là của máy tính gần nhất 78 00:03:08,710 --> 00:03:14,050 xấp xỉ với giá trị 1/10 rằng nó có thể có được, chỉ với 32 hay như vậy bit. 79 00:03:14,050 --> 00:03:15,300 Và nó không chỉ là 1/10. 80 00:03:15,300 --> 00:03:19,820 >> Ví dụ, nếu tôi thay đổi này để 1/3, mà chúng tôi nghĩ rằng thậm chí còn đơn giản hơn. 81 00:03:19,820 --> 00:03:21,300 Vì vậy, 1 chia cho 3. 82 00:03:21,300 --> 00:03:22,355 Hãy để tôi lưu các tập tin. 83 00:03:22,355 --> 00:03:24,680 Hãy để tôi đi trước và biên dịch lại nó. 84 00:03:24,680 --> 00:03:25,820 Và hãy để tôi chạy lại nó. 85 00:03:25,820 --> 00:03:30,000 Ở đây cũng vậy, rõ ràng, 1/3 không phải là 0.3 và sau đó một số lượng vô hạn của 3 nhân 86 00:03:30,000 --> 00:03:30,770 sau đó. 87 00:03:30,770 --> 00:03:32,540 Bạn có thiếu chính xác này ở cuối. 88 00:03:32,540 --> 00:03:35,544 Vì vậy, con người chúng ta là chính xác, và những gì bạn đã học được là, trong thực tế, chính xác, 89 00:03:35,544 --> 00:03:37,460 nhưng chúng tôi đang tăng vọt chống lại một số hạn chế. 90 00:03:37,460 --> 00:03:39,420 >> Và những gì tôi nghĩ chúng tôi sẽ làm ngày hôm nay, được bắt đầu 91 00:03:39,420 --> 00:03:42,190 bằng cách nhìn vào, thẳng thắn, các hậu quả bi thảm này 92 00:03:42,190 --> 00:03:45,490 đôi khi, khi nhân loại không hoàn toàn thực hiện 93 00:03:45,490 --> 00:03:48,460 cho thực tế này và những hạn chế này. 94 00:03:48,460 --> 00:03:52,360 Và chúng ta sẽ thấy một loạt các họa tiết từ kênh History mà mất 95 00:03:52,360 --> 00:03:53,950 xem làm thế nào mọi thứ đã đi sai. 96 00:03:53,950 --> 00:03:56,340 Nó dài khoảng 8 phút, và chúng tôi sẽ quay lại sau này 97 00:03:56,340 --> 00:03:59,439 và hãy nhìn vào chính xác những gì khác có thể đi sai. 98 00:03:59,439 --> 00:04:00,605 Nếu chúng ta có thể làm mờ lights-- 99 00:04:00,605 --> 00:04:02,350 >> [VIDEO PLAYBACK] 100 00:04:02,350 --> 00:04:06,310 >> -Computers, Tất cả chúng tôi đến để chấp nhận những vấn đề thường bực bội mà 101 00:04:06,310 --> 00:04:07,750 đi với họ. 102 00:04:07,750 --> 00:04:11,370 Bugs, virus và các phần mềm ổn định là giá nhỏ 103 00:04:11,370 --> 00:04:13,230 phải trả cho sự tiện lợi. 104 00:04:13,230 --> 00:04:17,519 Nhưng trong công nghệ cao và tốc độ cao quân sự và chương trình không gian ứng dụng, 105 00:04:17,519 --> 00:04:22,130 những vấn đề nhỏ nhất có thể được phóng vào thảm họa. 106 00:04:22,130 --> 00:04:27,750 Ngày 4 tháng Sáu năm 1996, các nhà khoa học chuẩn bị để khởi động một không người lái tên lửa Ariane 5. 107 00:04:27,750 --> 00:04:29,890 Nó đang chở khoa học vệ tinh được thiết kế 108 00:04:29,890 --> 00:04:33,030 để thiết lập một cách chính xác như thế nào Tương tác từ trường của Trái đất 109 00:04:33,030 --> 00:04:35,600 với gió mặt trời. 110 00:04:35,600 --> 00:04:37,930 Các tên lửa được xây dựng cho Cơ quan Vũ trụ châu Âu 111 00:04:37,930 --> 00:04:41,620 và dỡ bỏ khỏi cơ sở của mình trên bờ biển French Guiana. 112 00:04:41,620 --> 00:04:44,924 >> -Và Khoảng 30 giây vào các chuyến bay, họ lần đầu tiên 113 00:04:44,924 --> 00:04:46,340 một cái gì đó để ý đã đi sai. 114 00:04:46,340 --> 00:04:49,280 Rằng các vòi phun được xoay trong một cách mà họ thực sự không nên. 115 00:04:49,280 --> 00:04:53,042 Khoảng 40 giây vào chuyến bay, rõ ràng chiếc xe bị rắc rối, 116 00:04:53,042 --> 00:04:55,250 và đó là khi họ đã thực hiện quyết định để tiêu diệt nó. 117 00:04:55,250 --> 00:04:58,970 Một nhân viên an toàn Range ruột to lớn nhấn nút, 118 00:04:58,970 --> 00:05:03,940 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. 119 00:05:03,940 --> 00:05:06,600 >> -Đây Là con gái hành trình của Ariane 5, 120 00:05:06,600 --> 00:05:09,270 và phá hủy của nó mất đặt vì một lỗ hổng 121 00:05:09,270 --> 00:05:10,992 nhúng trong phần mềm của tên lửa. 122 00:05:10,992 --> 00:05:12,700 -Các Vấn đề trên Ariane là có 123 00:05:12,700 --> 00:05:15,370 là một số đòi hỏi 64 bit để thể hiện, 124 00:05:15,370 --> 00:05:18,150 và ông muốn chuyển đổi nó cho một số 16 bit. 125 00:05:18,150 --> 00:05:21,160 Họ giả định rằng số không bao giờ có được rất lớn, 126 00:05:21,160 --> 00:05:25,020 rằng hầu hết những chữ số trong số 64 bit là 0 của. 127 00:05:25,020 --> 00:05:26,310 Họ đã sai. 128 00:05:26,310 --> 00:05:28,680 >> -Các Sự bất lực của một chương trình phần mềm để chấp nhận 129 00:05:28,680 --> 00:05:32,820 các loại số được tạo ra bởi khác là gốc rễ của sự thất bại. 130 00:05:32,820 --> 00:05:37,190 Phát triển phần mềm đã trở thành một phần rất tốn kém của công nghệ mới. 131 00:05:37,190 --> 00:05:40,760 Các tên lửa Ariane 4 đã rất thành công, rất nhiều các phần mềm 132 00:05:40,760 --> 00:05:43,990 tạo ra cho nó cũng là được sử dụng trên các Ariane 5. 133 00:05:43,990 --> 00:05:49,750 >> -Các Vấn đề cơ bản là các Ariane 5 là nhanh hơn, tăng tốc nhanh hơn. 134 00:05:49,750 --> 00:05:53,000 Và các phần mềm có không chiếm đó. 135 00:05:53,000 --> 00:05:56,330 >> -Các Phá hủy các tên lửa là một thảm họa tài chính khổng lồ, 136 00:05:56,330 --> 00:05:59,670 tất cả đều do một lỗi phần mềm phút. 137 00:05:59,670 --> 00:06:01,990 Nhưng đây không phải là lần đầu tiên Hiện vấn đề chuyển đổi dữ liệu 138 00:06:01,990 --> 00:06:05,310 đã cản công nghệ tên lửa hiện đại. 139 00:06:05,310 --> 00:06:08,300 >> -Trong Năm 1991, với sự bắt đầu Chiến tranh vùng Vịnh đầu tiên, 140 00:06:08,300 --> 00:06:10,650 các tên lửa Patriot kinh nghiệm một loại tương tự 141 00:06:10,650 --> 00:06:12,650 của vấn đề chuyển đổi số. 142 00:06:12,650 --> 00:06:15,620 Kết quả là, 28 người, 28 binh sĩ Mỹ 143 00:06:15,620 --> 00:06:18,440 đã thiệt mạng và khoảng 100 người khác bị thương, 144 00:06:18,440 --> 00:06:21,900 khi Patriot, mà đã được yêu để bảo vệ chống lại các tên lửa Scud đến, 145 00:06:21,900 --> 00:06:24,630 không bắn một tên lửa. 146 00:06:24,630 --> 00:06:29,440 >> -Khi Iraq xâm chiếm Kuwait và Mỹ đưa ra Desert Storm trong đầu năm 1991, 147 00:06:29,440 --> 00:06:33,800 Pin tên lửa Patriot đã được triển khai để bảo vệ Saudi Arabia và Israel 148 00:06:33,800 --> 00:06:37,000 từ các cuộc tấn công tên lửa Scud của Iraq. 149 00:06:37,000 --> 00:06:40,610 The Patriot là một Mỹ, tầm trung đất-đối-không khí hệ thống 150 00:06:40,610 --> 00:06:43,010 sản xuất bởi công ty Raytheon. 151 00:06:43,010 --> 00:06:49,080 >> -Các Kích thước của các máy bay đánh chặn Patriot, chính nó, là về, dài khoảng 20 feet. 152 00:06:49,080 --> 00:06:51,250 Và nó chỉ nặng khoảng 2000 bảng Anh. 153 00:06:51,250 --> 00:06:55,195 Và nó mang một đầu đạn hạt nhân của about-- Tôi nghĩ rằng đó là khoảng 150 pounds. 154 00:06:55,195 --> 00:06:59,500 Và các đầu đạn hạt nhân, chính nó, là một vụ nổ, 155 00:06:59,500 --> 00:07:02,570 trong đó có những mảnh vỡ xung quanh nó. 156 00:07:02,570 --> 00:07:06,890 Vỏ của đầu đạn là được thiết kế để hoạt động như đạn chì. 157 00:07:06,890 --> 00:07:09,130 >> -Các Tên lửa là thực, 4 mỗi container, 158 00:07:09,130 --> 00:07:12,080 và được vận chuyển bởi một semi-trailer. 159 00:07:12,080 --> 00:07:19,100 >> -Các Hệ thống chống tên lửa Patriot đi lại ít nhất 20 năm nay. 160 00:07:19,100 --> 00:07:22,320 Nó được thiết kế ban đầu như một tên lửa phòng không 161 00:07:22,320 --> 00:07:24,180 để bắn hạ máy bay của đối phương. 162 00:07:24,180 --> 00:07:27,860 Trong chiến tranh vùng Vịnh đầu tiên, khi chiến tranh mà đến cùng, 163 00:07:27,860 --> 00:07:32,745 Quân đội muốn sử dụng nó để bắn hạ tên lửa Scud, không phải máy bay. 164 00:07:32,745 --> 00:07:36,150 Iraq Force không quá nhiều của một vấn đề, 165 00:07:36,150 --> 00:07:39,110 nhưng quân đội đã lo lắng về tên lửa Scud. 166 00:07:39,110 --> 00:07:42,340 Và do đó, họ đã cố gắng để nâng cấp các Patriot. 167 00:07:42,340 --> 00:07:44,760 >> -Intercepting Một kẻ thù tên lửa đi du lịch tại mach năm 168 00:07:44,760 --> 00:07:47,250 sắp được thử thách đủ. 169 00:07:47,250 --> 00:07:50,000 Nhưng khi Patriot được đưa vào phục vụ, 170 00:07:50,000 --> 00:07:54,030 Quân đội đã không nhận thức một Sửa đổi của Iraq đã làm 171 00:07:54,030 --> 00:07:56,840 tên lửa Scud của họ gần như không thể chạm. 172 00:07:56,840 --> 00:08:01,020 >> -Điều Gì đã xảy ra, là các tên lửa Scud mà đã đến, là không ổn định, 173 00:08:01,020 --> 00:08:02,310 họ bị lắc lư. 174 00:08:02,310 --> 00:08:05,140 Lý do cho điều này, là người Iraq, để 175 00:08:05,140 --> 00:08:09,450 để có được 600 cây số ra khỏi một tên lửa tầm xa 300 km, 176 00:08:09,450 --> 00:08:12,930 mất cân ra khỏi đầu đạn trước và thực hiện các đầu đạn nhẹ hơn. 177 00:08:12,930 --> 00:08:17,710 Vì vậy, bây giờ, các Patriot của cố gắng để đến tại scud, và hầu hết thời gian, 178 00:08:17,710 --> 00:08:21,700 đại đa số các thời gian, nó sẽ chỉ bay bằng các scud. 179 00:08:21,700 --> 00:08:25,700 >> -Sau Khi các nhà khai thác hệ thống Patriot nhận ra Patriot bỏ lỡ mục tiêu của nó, 180 00:08:25,700 --> 00:08:29,790 họ cho nổ đầu đạn của Patriot, để tránh thương vong có thể nếu nó 181 00:08:29,790 --> 00:08:32,380 được phép rơi xuống đất. 182 00:08:32,380 --> 00:08:36,340 >> -đó Là những gì hầu hết mọi người đã thấy, những quả cầu lửa lớn trên bầu trời, 183 00:08:36,340 --> 00:08:41,289 và hiểu nhầm chặn của tên lửa Scud đầu đạn hạt nhân. 184 00:08:41,289 --> 00:08:43,590 Mặc dù trong đêm bầu trời, Patriots xuất hiện 185 00:08:43,590 --> 00:08:47,020 là thành công phá hủy tên lửa Scud, tại Dhahran, 186 00:08:47,020 --> 00:08:49,730 có thể không có sai lầm về hiệu quả của nó. 187 00:08:49,730 --> 00:08:53,990 Có, hệ thống radar của Patriot bị mất theo dõi của một tên lửa Scud đến, 188 00:08:53,990 --> 00:08:56,650 và không bao giờ đưa ra, do một lỗ hổng phần mềm. 189 00:08:56,650 --> 00:08:59,650 190 00:08:59,650 --> 00:09:04,100 Đó là những người Israel đầu tiên phát hiện mà còn là hệ thống trên, 191 00:09:04,100 --> 00:09:07,510 càng lớn thì thời gian khác biệt trở thành, do một đồng hồ nhúng 192 00:09:07,510 --> 00:09:09,490 trong máy tính của hệ thống. 193 00:09:09,490 --> 00:09:12,670 >> -Về 2 tuần trước thảm kịch ở Dhahran, 194 00:09:12,670 --> 00:09:15,010 Israel báo cáo Bộ Quốc phòng, 195 00:09:15,010 --> 00:09:17,940 rằng hệ thống đã làm mất thời gian, rằng sau khoảng 8 giờ chạy, 196 00:09:17,940 --> 00:09:21,410 họ nhận thấy rằng hệ thống đã được trở nên đáng chú ý ít chính xác. 197 00:09:21,410 --> 00:09:25,290 Bộ Quốc phòng trả lời bằng cách nói với tất cả các loại pin Patriot 198 00:09:25,290 --> 00:09:28,070 để không để lại các hệ thống trong một thời gian dài. 199 00:09:28,070 --> 00:09:29,960 Họ không bao giờ biết những gì một thời gian dài được. 200 00:09:29,960 --> 00:09:30,460 8 giờ? 201 00:09:30,460 --> 00:09:30,960 10 giờ? 202 00:09:30,960 --> 00:09:31,870 1000 giờ? 203 00:09:31,870 --> 00:09:33,734 Không ai biết. 204 00:09:33,734 --> 00:09:35,650 -Các Pin Patriot đóng quân tại doanh trại 205 00:09:35,650 --> 00:09:40,410 tại Dhahran, và thiếu sót nội bộ của mình đồng hồ, đã hơn 100 giờ 206 00:09:40,410 --> 00:09:43,041 vào đêm ngày 25 tháng 2. 207 00:09:43,041 --> 00:09:47,416 >> -Nó Theo dõi thời gian với độ chính xác khoảng 1/10 của một giây. 208 00:09:47,416 --> 00:09:49,290 Bây giờ 1/10 của một giây là một số thú vị 209 00:09:49,290 --> 00:09:52,700 bởi vì nó không thể là thể hiện trong hệ nhị phân, chính xác. 210 00:09:52,700 --> 00:09:54,820 Có nghĩa là, nó có thể không được bày tỏ, chính xác, 211 00:09:54,820 --> 00:09:57,420 trong bất kỳ máy tính kỹ thuật số hiện đại. 212 00:09:57,420 --> 00:10:01,460 Thật khó để tin, nhưng sử dụng như là một ví dụ. 213 00:10:01,460 --> 00:10:03,520 Hãy lấy số, 1/3. 214 00:10:03,520 --> 00:10:07,110 1/3 không thể được thể hiện trong hệ thập phân, chính xác. 215 00:10:07,110 --> 00:10:11,490 1/3 là 0,333 xảy ra cho vô cực. 216 00:10:11,490 --> 00:10:15,486 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. 217 00:10:15,486 --> 00:10:18,360 Đó chính xác là cùng một loại vấn đề đã xảy ra trong Patriot. 218 00:10:18,360 --> 00:10:22,510 Các bạn còn hệ thống chạy, tệ hơn các lỗi thời gian đã trở thành. 219 00:10:22,510 --> 00:10:28,420 >> -Sau 100 giờ hoạt động, các lỗi trong thời gian chỉ khoảng 1/3 của một giây là. 220 00:10:28,420 --> 00:10:31,830 Nhưng trong điều kiện của một mục tiêu tên lửa đi du lịch tại mach 5, 221 00:10:31,830 --> 00:10:35,890 nó dẫn đến theo dõi lỗi của hơn 600 mét. 222 00:10:35,890 --> 00:10:38,970 Nó sẽ là một lỗi nghiêm trọng cho những người lính tại Dhahran. 223 00:10:38,970 --> 00:10:45,035 >> -Điều Gì đã xảy ra, là một vụ phóng tên lửa Scud là phát hiện bởi các vệ tinh cảnh báo sớm, 224 00:10:45,035 --> 00:10:48,930 và họ mới là Scud là đến trong hướng chung của họ. 225 00:10:48,930 --> 00:10:51,170 Họ không biết nơi nó sẽ đến. 226 00:10:51,170 --> 00:10:53,990 >> -Nó Là bây giờ lên đến radar thành phần của hệ thống Patriot, 227 00:10:53,990 --> 00:10:58,520 bảo vệ Dhahran, để xác định vị trí và giữ theo dõi các tên lửa của địch. 228 00:10:58,520 --> 00:10:59,690 >> -Các Radar đã rất thông minh. 229 00:10:59,690 --> 00:11:01,710 Nó thực sự sẽ theo dõi vị trí của tên lửa Scud 230 00:11:01,710 --> 00:11:04,040 và sau đó dự đoán nơi nó có lẽ sẽ là, 231 00:11:04,040 --> 00:11:06,140 thời gian tới, radar gửi một xung ra. 232 00:11:06,140 --> 00:11:07,660 Đó được gọi là cổng loạt. 233 00:11:07,660 --> 00:11:11,870 >> -Sau Đó, một khi Patriot quyết định đủ thời gian có 234 00:11:11,870 --> 00:11:16,280 thông qua để quay trở lại và kiểm tra tiếp theo vị trí cho đối tượng phát hiện này, 235 00:11:16,280 --> 00:11:17,280 nó đi lại. 236 00:11:17,280 --> 00:11:21,690 Vì vậy, khi nó đã đi lại với sai chỗ, nó sau đó thấy không có đối tượng 237 00:11:21,690 --> 00:11:25,230 và nó quyết định rằng không có đối tượng, đó là một phát hiện sai, 238 00:11:25,230 --> 00:11:26,650 và giọt theo dõi. 239 00:11:26,650 --> 00:11:29,690 Các tên lửa Scud đến biến mất từ màn hình radar, 240 00:11:29,690 --> 00:11:32,670 và giây sau, nó đâm sầm vào các doanh trại. 241 00:11:32,670 --> 00:11:38,100 Scud giết chết 28 và là người cuối cùng một bắn trong cuộc chiến tranh vùng Vịnh lần thứ nhất. 242 00:11:38,100 --> 00:11:43,460 Buồn thay, phần mềm cập nhật đến Dhahran ngày hôm sau. 243 00:11:43,460 --> 00:11:46,150 Các phần mềm có lỗ hổng được cố định, đóng cửa 244 00:11:46,150 --> 00:11:48,940 một chương trong khó khăn lịch sử của các tên lửa Patriot. 245 00:11:48,940 --> 00:11:50,220 >> [END PLAYBACK] 246 00:11:50,220 --> 00:11:54,340 >> DAVID Malan J: Vậy chúng ta sẽ có một cái nhìn tại một số hạn chế tương tự chỉ trong một chút. 247 00:11:54,340 --> 00:11:58,470 Nhưng trước tiên, chúng ta hãy chuyển đổi sang một vài FYI là. 248 00:11:58,470 --> 00:12:01,575 Vì vậy one-- cuối tuần này, có sẽ được siêu phần, 249 00:12:01,575 --> 00:12:04,200 mà có nghĩa là để thay thế phần thường xuyên theo lịch trình, trong đó 250 00:12:04,200 --> 00:12:05,460 sẽ khởi động một tuần vì thế. 251 00:12:05,460 --> 00:12:08,204 Hãy xem tại trang web của CS50 để biết thêm thông tin về những người. 252 00:12:08,204 --> 00:12:11,120 Họ cũng sẽ được quay và xem trực tiếp sống cho những người không thể tham dự. 253 00:12:11,120 --> 00:12:12,980 Vấn đề đặt 1 là trên website nhiên của đã có, 254 00:12:12,980 --> 00:12:15,105 và chúng ta sẽ có một cái nhìn tại mà chỉ trong một chút. 255 00:12:15,105 --> 00:12:18,350 Và giờ làm quá, sẽ mất đặt thứ Hai đến thứ Năm này. 256 00:12:18,350 --> 00:12:20,960 >> Vì vậy, đây là kinh điển nhất chương trình chúng tôi nhìn lần cuối cùng. 257 00:12:20,960 --> 00:12:23,590 Nó giống như sự đơn giản chương trình bạn có thể viết trong C, 258 00:12:23,590 --> 00:12:25,250 và thậm chí đó là một chút của một tuyên bố táo bạo. 259 00:12:25,250 --> 00:12:25,750 Phải không? 260 00:12:25,750 --> 00:12:28,070 Bởi vì có rất nhiều dường như phức tạp này. 261 00:12:28,070 --> 00:12:30,445 Vì vậy, chúng ta hãy xem nhanh những gì một số các yếu tố này 262 00:12:30,445 --> 00:12:33,080 và sau đó đã cố gắng cung cấp một mô hình về tinh thần cho cách 263 00:12:33,080 --> 00:12:35,710 những đơn giản nhất của chương trình làm việc, và sau đó chúng ta sẽ bắt đầu 264 00:12:35,710 --> 00:12:38,050 nhìn vào những điều phức tạp hơn bao giờ hết. 265 00:12:38,050 --> 00:12:41,280 Vì vậy, dòng này ở đây, đánh dấu có, màu vàng, chúng tôi đã nói gì, thời gian qua, 266 00:12:41,280 --> 00:12:43,200 rằng điều này làm cho chúng ta? 267 00:12:43,200 --> 00:12:45,220 Mục đích mà nó phục vụ là gì? 268 00:12:45,220 --> 00:12:46,984 Bất cứ ai từ xa trở lại? 269 00:12:46,984 --> 00:12:47,483 Yeah. 270 00:12:47,483 --> 00:12:48,649 >> TƯỢNG THÀNH VIÊN: [Không nghe thấy] 271 00:12:48,649 --> 00:12:50,871 272 00:12:50,871 --> 00:12:51,704 DAVID Malan J: Tốt. 273 00:12:51,704 --> 00:12:53,537 Vì vậy, nó sẽ cho bạn truy cập với các lệnh, hoặc chúng ta hãy 274 00:12:53,537 --> 00:12:56,750 gọi cho họ chức năng, mà một người nào đó khác đã viết, được khai báo, 275 00:12:56,750 --> 00:12:58,350 có thể nói, trong một số tập tin khác. 276 00:12:58,350 --> 00:13:02,370 Vì vậy, chúng ta sẽ thấy chính xác những gì một tập tin h là so với một file .c, cuối cùng. 277 00:13:02,370 --> 00:13:04,710 Nhưng hiện nay, chỉ cần biết printf rằng, ví dụ, 278 00:13:04,710 --> 00:13:08,370 là một trong những chức năng mà đã được tuyên bố trong một số tập tin khác, một nơi nào đó 279 00:13:08,370 --> 00:13:12,930 khác trên ổ cứng của đám mây cho phép chúng ta truy cập printf và sử dụng nó 280 00:13:12,930 --> 00:13:15,240 mà không cần phải tái tạo lại mà bánh xe mình. 281 00:13:15,240 --> 00:13:16,930 Trong khi đó, chính. 282 00:13:16,930 --> 00:13:19,690 Sự tương tự của chính, tuần vừa qua là gì? 283 00:13:19,690 --> 00:13:20,190 Yeah. 284 00:13:20,190 --> 00:13:21,460 >> TƯỢNG THÀNH VIÊN: cờ xanh được nhấp. 285 00:13:21,460 --> 00:13:21,740 >> DAVID Malan J: Vâng. 286 00:13:21,740 --> 00:13:23,490 Scratch, khi lá cờ màu xanh lá cây nhấp. 287 00:13:23,490 --> 00:13:25,560 Nó giống như những mảnh ghép mà đá mọi chuyện. 288 00:13:25,560 --> 00:13:28,306 Và như vậy tương tự, đã làm thế giới quyết định một số năm trước đó trong C, 289 00:13:28,306 --> 00:13:30,930 và một loạt các ngôn ngữ khác, nếu bạn muốn viết một chương trình, 290 00:13:30,930 --> 00:13:33,410 Chức năng đầu tiên của bạn đã được gọi là, chính. 291 00:13:33,410 --> 00:13:34,641 Và nó có giống như thế này. 292 00:13:34,641 --> 00:13:36,640 Nhưng chúng tôi sẽ trở lại, một thời điểm khác, những gì, int, 293 00:13:36,640 --> 00:13:38,690 và, void, có nghĩa là trong bối cảnh đó. 294 00:13:38,690 --> 00:13:42,860 Để bây giờ, các dấu ngoặc nhọn là loại giống như Scratch của mảnh ghép hình 295 00:13:42,860 --> 00:13:45,080 mà gói gọn một số số dòng. 296 00:13:45,080 --> 00:13:47,070 Và trong số trên đường ở đây, là một trong những điều này ở đây. 297 00:13:47,070 --> 00:13:51,610 printf là một chức năng mà mục đích trong cuộc sống là để in một chuỗi định dạng. 298 00:13:51,610 --> 00:13:55,010 Và bằng cách định dạng, ý tôi là bạn có thể cắm vào giá trị giữ chỗ, 299 00:13:55,010 --> 00:13:58,360 và bạn có thể xác định có bao nhiêu chữ số thập phân điểm, có bao nhiêu số để in 300 00:13:58,360 --> 00:14:00,040 sau khi một điểm thập phân và các loại tương tự. 301 00:14:00,040 --> 00:14:05,040 Và printf, tất nhiên, phải mất một hoặc nhiều đối số hoặc các thông số, 302 00:14:05,040 --> 00:14:06,770 nếu không được biết, đơn giản hơn, như đầu vào. 303 00:14:06,770 --> 00:14:09,230 >> Vì vậy, printf, giống như rất nhiều chức năng, có đầu vào. 304 00:14:09,230 --> 00:14:12,730 Và những yếu tố đầu vào được chấp nhận bởi hai dấu ngoặc ở đây. 305 00:14:12,730 --> 00:14:15,180 Và bên trong những người là một đầu vào. 306 00:14:15,180 --> 00:14:18,600 Đó là một chuỗi, như chúng tôi đã gọi nó, mà chỉ là một chuỗi các ký tự, 307 00:14:18,600 --> 00:14:22,310 như một từ, hoặc một cụm từ, hoặc toàn bộ tiểu luận thậm chí, ở giữa hai dấu ngoặc kép. 308 00:14:22,310 --> 00:14:25,712 Và đó là những gì sẽ ảnh hưởng đến hành vi của printf vì, tất nhiên, 309 00:14:25,712 --> 00:14:27,170 nó chỉ là một chức năng in chung chung. 310 00:14:27,170 --> 00:14:29,600 Nó sẽ không biết gì in, trừ khi bạn nói với nó. 311 00:14:29,600 --> 00:14:31,000 Và sau đó, một số chi tiết vụn vặt. 312 00:14:31,000 --> 00:14:34,056 Chúng ta đã nói gì kỳ lạ này chuỗi các ký hiệu là? 313 00:14:34,056 --> 00:14:34,556 Yeah. 314 00:14:34,556 --> 00:14:35,410 >> TƯỢNG THÀNH VIÊN: hàng mới. 315 00:14:35,410 --> 00:14:35,990 >> DAVID Malan J: hàng mới. 316 00:14:35,990 --> 00:14:39,340 Vì vậy, nó quay ra, bạn không thể chỉ cần nhấn, nhập, khi bạn đang viết chương trình. 317 00:14:39,340 --> 00:14:42,590 Nói chung, các trình biên dịch là sẽ nhận được một chút nhầm lẫn như những gì bạn có ý nghĩa. 318 00:14:42,590 --> 00:14:45,340 Thay vào đó, bạn phải theo nghĩa đen nói, cho tôi một dòng mới ở đây. 319 00:14:45,340 --> 00:14:49,506 Và như vậy / n là những gì chúng ta thường gọi một nhân vật chạy thoát. 320 00:14:49,506 --> 00:14:50,870 Vì vậy, n, cho dòng mới. 321 00:14:50,870 --> 00:14:53,810 Và trình biên dịch biết rằng khi nó thấy / n, 322 00:14:53,810 --> 00:14:57,420 nó thực sự gây nên các máy tính, cuối cùng, hoặc printf, trong trường hợp này, 323 00:14:57,420 --> 00:15:00,260 để in ra một thực tế mới dòng, như đánh, nhập, 324 00:15:00,260 --> 00:15:01,480 phím trên bàn phím của bạn. 325 00:15:01,480 --> 00:15:05,620 Và cuối cùng, những gì đã làm chúng tôi nói mảnh này của cú pháp là gì? 326 00:15:05,620 --> 00:15:06,591 Nó đại diện cho những gì? 327 00:15:06,591 --> 00:15:07,090 Yeah. 328 00:15:07,090 --> 00:15:07,490 >> TƯỢNG THÀNH VIÊN: [Không nghe thấy] 329 00:15:07,490 --> 00:15:08,660 >> DAVID Malan J: Nó chỉ cuối dòng. 330 00:15:08,660 --> 00:15:09,909 Nó là sự kết thúc của câu lệnh. 331 00:15:09,909 --> 00:15:11,890 Và nhận ra rằng chúng tôi không đặt chúng ở khắp mọi nơi. 332 00:15:11,890 --> 00:15:13,900 Chúng tôi chắc chắn không đặt chúng ở hai đầu của mỗi dòng. 333 00:15:13,900 --> 00:15:16,680 Ví dụ, có không có trên dòng đầu tiên, có không có trên dòng 334 00:15:16,680 --> 00:15:18,680 với, main, có không sau khi các dấu ngoặc, 335 00:15:18,680 --> 00:15:21,740 nhưng bạn sẽ bắt đầu nhìn thấy và nhận được quen thuộc với nơi mà nó được gọi là cho. 336 00:15:21,740 --> 00:15:26,014 Và nó hầu như luôn luôn sau khi một chức năng gọi điện thoại hoặc một tuyên bố, một số hành động 337 00:15:26,014 --> 00:15:27,180 rằng bạn đang thực sự tham gia. 338 00:15:27,180 --> 00:15:29,520 >> Và biết bây giờ, đặc biệt là nếu trong số những người kém thoải mái, 339 00:15:29,520 --> 00:15:32,540 đó là những loại điều ngu ngốc rằng bạn sẽ kết thúc vô tình đập 340 00:15:32,540 --> 00:15:33,873 đầu của bạn chống lại các bức tường trên. 341 00:15:33,873 --> 00:15:36,107 Bởi vì bạn sẽ có một cách logic tự tin trong một số vấn đề 342 00:15:36,107 --> 00:15:38,440 bạn đã giải quyết cho một vấn đề thiết lập, và điều chết tiệt chỉ 343 00:15:38,440 --> 00:15:40,187 sẽ không biên dịch hoặc thậm chí chạy. 344 00:15:40,187 --> 00:15:43,270 Và vì vậy thường xuyên, đầu vào, nó sẽ là do bạn đã bỏ lỡ một dấu ngoặc đơn, 345 00:15:43,270 --> 00:15:44,455 hoặc bạn đã bỏ lỡ một dấu chấm phẩy. 346 00:15:44,455 --> 00:15:46,547 Và vì vậy chỉ cần được lưu tâm các loại của sự vật, 347 00:15:46,547 --> 00:15:49,380 và cố gắng không để thất vọng bởi họ bởi vì rất nhanh chóng thực hiện điều này 348 00:15:49,380 --> 00:15:50,640 trở thành chiếc mũ cũ. 349 00:15:50,640 --> 00:15:53,910 Nhưng nó rất dễ dàng để có được thất vọng sớm, như một kết quả. 350 00:15:53,910 --> 00:15:57,020 >> Vì vậy, bây giờ, chúng ta hãy xem làm thế nào dòng này là thực sự làm việc 351 00:15:57,020 --> 00:15:59,170 và sau đó nhìn vào một hơi một phức tạp hơn. 352 00:15:59,170 --> 00:16:02,017 Vì vậy, chúng tôi có hơn ở đây, khả năng vẽ trên màn hình này. 353 00:16:02,017 --> 00:16:04,100 Và chúng ta hãy giả sử rằng đây là màn hình máy tính của tôi, 354 00:16:04,100 --> 00:16:08,589 nhưng tôi viết, xin chào chương trình, và tôi đã không được thực hiện, printf. 355 00:16:08,589 --> 00:16:10,130 Một người khác đã thực hiện, printf. 356 00:16:10,130 --> 00:16:12,420 Ai muốn yêu cầu bồi thường đã thực hiện, printf? 357 00:16:12,420 --> 00:16:12,920 Nếu chúng ta có thể? 358 00:16:12,920 --> 00:16:13,830 Tất cả các quyền, tên của bạn là gì? 359 00:16:13,830 --> 00:16:14,155 >> HỌC SINH 1: [? Copal. ?] 360 00:16:14,155 --> 00:16:15,529 >> DAVID Malan J: Copal, đi lên trên. 361 00:16:15,529 --> 00:16:16,430 Nào lên. 362 00:16:16,430 --> 00:16:17,070 Được rồi. 363 00:16:17,070 --> 00:16:22,260 Vì vậy, chúng ta có, ở đây, một số thẻ tên, vì chúng ta sẽ làm cho một trò chơi nhỏ này. 364 00:16:22,260 --> 00:16:26,270 Và chúng tôi sẽ gọi cho bạn, printf. 365 00:16:26,270 --> 00:16:30,170 Và nếu bạn muốn đến đây, những gì tôi đã chỉ vẽ trên màn hình, 366 00:16:30,170 --> 00:16:32,340 nó là khá đơn giản, có tôi, điều này. 367 00:16:32,340 --> 00:16:35,550 >> Tất cả các quyền, do đó, xin chào tôi tên là, printf, nếu bạn muốn đặt trên. 368 00:16:35,550 --> 00:16:35,740 Được rồi. 369 00:16:35,740 --> 00:16:37,360 Và nếu bạn có thể đi đứng bởi màn hình máy tính 370 00:16:37,360 --> 00:16:39,730 như thể bạn là những chức năng mà kèm với hệ thống máy tính này. 371 00:16:39,730 --> 00:16:42,063 Và mục đích của bạn trong cuộc sống là để thực sự in một cái gì đó. 372 00:16:42,063 --> 00:16:44,560 Nhưng giống như các chương trình chúng tôi chỉ có trên màn hình, ở đây, 373 00:16:44,560 --> 00:16:47,060 chúng ta sẽ phải thực sự cung cấp cho bạn một số đầu vào. 374 00:16:47,060 --> 00:16:51,810 >> Và như vậy, nếu đầu vào của tôi, ở đây, là rõ ràng, những gì được thông qua với printf, 375 00:16:51,810 --> 00:16:53,730 chúng ta hãy loại châm biếm nó lên như thế này. 376 00:16:53,730 --> 00:16:58,720 Tôi sẽ viết về nghĩa đen một mảnh giấy, "hello, world" 377 00:16:58,720 --> 00:17:03,020 backslash N. Để cho rõ ràng, những gì Tôi vừa mới được vẽ trên tờ giấy này, 378 00:17:03,020 --> 00:17:04,020 trông như thế này. 379 00:17:04,020 --> 00:17:08,730 Vì vậy, khi tôi chạy chương trình này, và điều này dòng màu vàng mã được thực thi, 380 00:17:08,730 --> 00:17:12,970 nó giống như tôi, chương trình hello, đang bàn giao một số đầu vào giảm đến một chức năng 381 00:17:12,970 --> 00:17:13,970 mà người khác đã viết. 382 00:17:13,970 --> 00:17:16,595 >> Và nếu bạn, với ngón tay của bạn, có thể thực sự, với ngón tay của bạn, 383 00:17:16,595 --> 00:17:21,520 vẽ trên màn hình bất cứ điều gì nó là bạn đã được lưu truyền, 384 00:17:21,520 --> 00:17:27,465 hiệu quả, cuối cùng, là để nhìn thấy chính xác điều đó, trên màn hình. 385 00:17:27,465 --> 00:17:29,140 Và một trường hợp góc nhỏ ở đây. 386 00:17:29,140 --> 00:17:31,540 Và tốt, chúng ta không nên xem các, dòng mới, vào thời điểm này. 387 00:17:31,540 --> 00:17:33,900 Nó sẽ là không chính xác cho bạn để vẽ một cách rõ ràng các dòng mới. 388 00:17:33,900 --> 00:17:36,810 Nhưng nếu chúng ta giữ bằng văn bản từ trên màn hình, họ sẽ kết thúc dưới đây mà. 389 00:17:36,810 --> 00:17:39,560 >> Vì vậy, cảm ơn bạn rất nhiều, nhưng dính xung quanh ở đây chỉ trong một khoảnh khắc. 390 00:17:39,560 --> 00:17:42,860 Bây giờ chúng ta cần một khác tình nguyện, nếu chúng ta có thể, 391 00:17:42,860 --> 00:17:46,830 đó là sẽ cần phải đóng vai trò of-- Đó là chỉ có những người trong dàn nhạc 392 00:17:46,830 --> 00:17:47,355 ngay bây giờ. 393 00:17:47,355 --> 00:17:47,980 Làm thế nào about-- OK. 394 00:17:47,980 --> 00:17:48,480 Ngay tại đây. 395 00:17:48,480 --> 00:17:49,180 Nào lên. 396 00:17:49,180 --> 00:17:49,955 Tên bạn là gì? 397 00:17:49,955 --> 00:17:50,922 >> HỌC SINH 2: [? Ivay. ?] 398 00:17:50,922 --> 00:17:51,796 DAVID Malan J: Xin lỗi? 399 00:17:51,796 --> 00:17:52,990 HỌC SINH 2: [? Ivay. ?] 400 00:17:52,990 --> 00:17:55,320 DAVID Malan J: Ethan, đi lên trên. 401 00:17:55,320 --> 00:17:55,820 Không có? 402 00:17:55,820 --> 00:17:58,390 Tôi đã nhận sai mà, thậm chí sau khi bạn nói nó hai lần? 403 00:17:58,390 --> 00:17:58,890 Nào lên. 404 00:17:58,890 --> 00:18:00,030 Thật khó để nghe ở đây. 405 00:18:00,030 --> 00:18:05,240 406 00:18:05,240 --> 00:18:05,740 ĐƯỢC. 407 00:18:05,740 --> 00:18:07,190 Và tôi xin lỗi, tên của bạn là gì? 408 00:18:07,190 --> 00:18:07,680 >> HỌC SINH 2: [? Ivay. ?] 409 00:18:07,680 --> 00:18:08,790 >> [? DAVID Malan J: Ivay. ?] ĐƯỢC. 410 00:18:08,790 --> 00:18:10,430 Để bây giờ, nếu bạn không tâm trí, bạn đang GetString. 411 00:18:10,430 --> 00:18:11,013 >> HỌC SINH 2: OK. 412 00:18:11,013 --> 00:18:11,797 Cool. 413 00:18:11,797 --> 00:18:14,630 DAVID Malan J: Vì vậy, nếu bạn muốn đứng ở đây một lát, 414 00:18:14,630 --> 00:18:17,100 chúng ta hãy nhìn vào một hơi chương trình phức tạp hơn, mà 415 00:18:17,100 --> 00:18:18,670 hiện có ba dòng mã. 416 00:18:18,670 --> 00:18:24,080 Vì vậy, chúng ta có, một, xưng danh của mình bằng cách sử dụng printf; hai, một cuộc gọi đến GetString, 417 00:18:24,080 --> 00:18:28,060 tiếp theo là một bài tập để một biến gọi là, chuỗi s, hay còn gọi là s; 418 00:18:28,060 --> 00:18:31,260 và sau đó một cuộc gọi đến, printf, nhưng lần này với hai đầu vào. 419 00:18:31,260 --> 00:18:33,646 >> Nhà nước vì vậy chúng tôi đã thực hiện Tên của bạn, hay đúng hơn, chúng tôi đã 420 00:18:33,646 --> 00:18:34,770 đã thực hiện một cuộc gọi printf. 421 00:18:34,770 --> 00:18:38,960 Vì vậy, tôi sẽ viết, Nhà nước tên của bạn. 422 00:18:38,960 --> 00:18:42,089 Và như vậy, những gì tôi sẽ vượt qua, printf, chỉ trong một khoảnh khắc, 423 00:18:42,089 --> 00:18:43,005 là khá đơn giản, đây. 424 00:18:43,005 --> 00:18:47,760 Vì vậy, nếu bạn muốn đi trước và vẽ này trên màn hình, đó là đầu vào của bạn bây giờ. 425 00:18:47,760 --> 00:18:48,260 Được rồi. 426 00:18:48,260 --> 00:18:51,160 Và quên chuỗi, bây giờ chúng tôi có dòng riêng của chúng tôi mã ở đây. 427 00:18:51,160 --> 00:18:54,470 Vì vậy, trong, GetString, chúng ta cần để thực sự gọi, GetString. 428 00:18:54,470 --> 00:18:57,920 Vì vậy, mục đích của bạn trong cuộc sống là để chỉ cần đi bộ ra vào các dàn nhạc, nếu bạn có thể, 429 00:18:57,920 --> 00:18:58,980 và có được tên của một ai đó. 430 00:18:58,980 --> 00:19:00,860 Nhưng chúng ta hãy cung cấp cho bạn một cái gì đó để đưa nó vào. 431 00:19:00,860 --> 00:19:02,908 Nếu bạn muốn, đi trước và nhận được một chuỗi, 432 00:19:02,908 --> 00:19:05,241 có được tên của một ai đó trên đó mảnh giấy, nếu bạn có thể. 433 00:19:05,241 --> 00:19:12,940 434 00:19:12,940 --> 00:19:13,530 >> Được rồi. 435 00:19:13,530 --> 00:19:15,250 Và chúng ta sẽ thấy, chỉ trong một khoảnh khắc, mà tên chúng tôi đang nhận được. 436 00:19:15,250 --> 00:19:17,630 Trong khi đó, những gì tôi sẽ có sẵn sàng, là một mảnh trống 437 00:19:17,630 --> 00:19:21,340 giấy, trong đó, tôi sẽ để lưu trữ bất kỳ giá trị nó 438 00:19:21,340 --> 00:19:25,752 được rằng GetString đang trở lại với tôi, Tôi, là một chuỗi biến gọi, s. 439 00:19:25,752 --> 00:19:26,252 Được rồi. 440 00:19:26,252 --> 00:19:27,293 Vì vậy, những gì bạn có ở đây? 441 00:19:27,293 --> 00:19:27,950 Nik. 442 00:19:27,950 --> 00:19:28,450 Được rồi. 443 00:19:28,450 --> 00:19:30,910 Vì vậy, chúng tôi có tên Nik ở đây. 444 00:19:30,910 --> 00:19:33,750 Vì vậy, đây là những gì đúng nghĩa đen đã được trả lại 445 00:19:33,750 --> 00:19:35,810 với tôi, có thể nói, bởi GetString. 446 00:19:35,810 --> 00:19:38,720 >> Tôi, bây giờ, đang đi thực hiện phía bên trái 447 00:19:38,720 --> 00:19:43,440 đó biểu hiện, nơi tôi chỉ đơn giản sao chép, vì mục đích của ngày hôm nay, Nik. 448 00:19:43,440 --> 00:19:46,470 Vì vậy, bây giờ, tôi có một biến gọi, s, lưu trữ tên của Nik. 449 00:19:46,470 --> 00:19:49,520 Tôi đã giao cho printf, một cuộc tranh luận trước đó. 450 00:19:49,520 --> 00:19:52,800 Nhưng trong dòng thứ ba và cuối cùng của chúng tôi mã, tôi thực sự phải tay printf 451 00:19:52,800 --> 00:19:58,500 một chút gì đó different-- "hello,% s," dấu gạch chéo ngược n. 452 00:19:58,500 --> 00:20:01,510 >> Và do đó, dòng cuối cùng tôi sẽ để send-- điều cuối cùng tôi 453 00:20:01,510 --> 00:20:03,060 sẽ viết xuống bây giờ, là điều này. 454 00:20:03,060 --> 00:20:06,310 Vì vậy, hai dòng mã, hoặc chứ không phải dòng cuối cùng của mã, 455 00:20:06,310 --> 00:20:10,690 cuộc gọi cho hai inputs-- một, này, và hai, điều này. 456 00:20:10,690 --> 00:20:13,330 Vì vậy, nếu hàm printf của chúng tôi bây giờ có thể có những như đầu vào, 457 00:20:13,330 --> 00:20:16,000 hãy để tôi xóa màn hình cho bạn. 458 00:20:16,000 --> 00:20:17,250 Trên thực tế không có, bạn có thể đi trước. 459 00:20:17,250 --> 00:20:19,333 Chúng tôi sẽ để nó lên, vì đó là trên cùng một chương trình. 460 00:20:19,333 --> 00:20:21,760 461 00:20:21,760 --> 00:20:27,380 Chúng ta sẽ thấy, hello, Nik. 462 00:20:27,380 --> 00:20:27,880 Được rồi. 463 00:20:27,880 --> 00:20:29,670 Vì vậy, đây là một số khá hoops để nhảy qua, chỉ 464 00:20:29,670 --> 00:20:31,620 để viết, nêu bạn tên, và, xin chào, Nik. 465 00:20:31,620 --> 00:20:37,210 Nhưng ý tưởng đơn giản này của thông điệp đi qua, những đường chuyền vào và đầu ra tiếp nhận, 466 00:20:37,210 --> 00:20:40,430 chính là mô hình chúng ta sẽ có cho ngay cả những chức năng phức tạp nhất. 467 00:20:40,430 --> 00:20:41,804 Vì vậy, cảm ơn bạn rất nhiều cho bạn cả. 468 00:20:41,804 --> 00:20:43,730 Chúng tôi có một sự căng thẳng đáng yêu bóng ở đây cho bạn. 469 00:20:43,730 --> 00:20:48,890 Và cảm ơn bạn GetString của chúng tôi và tình nguyện viên printf như nhau. 470 00:20:48,890 --> 00:20:49,551 Cam on. 471 00:20:49,551 --> 00:20:50,050 Được rồi. 472 00:20:50,050 --> 00:20:50,966 Cảm ơn bạn với bạn cả. 473 00:20:50,966 --> 00:20:56,640 474 00:20:56,640 --> 00:21:00,430 >> Vì vậy, chúng tôi đã nói về vậy, đến nay, chủ yếu là về chuỗi. 475 00:21:00,430 --> 00:21:06,550 Và nó quay ra rằng C có thể thực sự hiểu một vài kiểu dữ liệu khác nhau. 476 00:21:06,550 --> 00:21:08,860 Trong thực tế, chúng ta hãy một nhìn vào những ở đây. 477 00:21:08,860 --> 00:21:12,490 Vì vậy, C, và rất nhiều ngôn ngữ, hiểu được những điều được gọi là ký tự. 478 00:21:12,490 --> 00:21:16,852 Một char thường là một byte duy nhất, hoặc tám bit. 479 00:21:16,852 --> 00:21:19,810 Và nó đại diện cho một ký tự, giống chữ A, hoặc vốn 480 00:21:19,810 --> 00:21:21,990 chữ A, hoặc các chữ cái thường A, hoặc dấu chấm than, 481 00:21:21,990 --> 00:21:25,440 hoặc bất kỳ ký tự mà bạn có thể gõ vào bàn phím của bạn, và đôi khi thậm chí nhiều hơn. 482 00:21:25,440 --> 00:21:26,795 Chúng tôi cũng tình cờ thấy phao nổi. 483 00:21:26,795 --> 00:21:31,160 Một float là, nói chung, một Giá trị 32-bit, hay bốn byte 484 00:21:31,160 --> 00:21:33,660 bởi vì một lần nữa, một byte là tám bit. 485 00:21:33,660 --> 00:21:36,675 >> Vì vậy, một phao là một giá trị dấu chấm, một cái gì đó với một điểm thập phân. 486 00:21:36,675 --> 00:21:38,550 Và quả thực, đó là những gì bộ phim đã nói 487 00:21:38,550 --> 00:21:42,240 khi họ nói về nổi điểm giá trị, một số số bit cố định 488 00:21:42,240 --> 00:21:43,940 được sử dụng để đại diện cho một số thực. 489 00:21:43,940 --> 00:21:45,740 Nhưng cũng có những thứ gọi là tăng gấp đôi. 490 00:21:45,740 --> 00:21:47,860 Những tồn tại trong Java, nếu bạn đã thực hiện APCS, 491 00:21:47,860 --> 00:21:51,540 và một đôi, như tên của may mắn thấy, là hai lần lớn như một phao. 492 00:21:51,540 --> 00:21:54,540 Nó vẫn là một số thực, nó chỉ có nhiều bit 493 00:21:54,540 --> 00:21:58,390 với đó là bao giờ chính xác hơn, hoặc để lưu trữ các số thậm chí còn lớn hơn. 494 00:21:58,390 --> 00:21:58,890 int là dễ dàng. 495 00:21:58,890 --> 00:22:00,181 Chúng tôi đã nói về điều đó thời gian qua. 496 00:22:00,181 --> 00:22:01,160 Nó chỉ là một số nguyên. 497 00:22:01,160 --> 00:22:03,980 Và nó thường 32 bit, hay bốn byte. 498 00:22:03,980 --> 00:22:07,850 >> Và như vậy, nếu bạn có, chúng ta hãy nhìn thấy bây giờ, 32 bits-- và chúng tôi đã làm điều này trong tuần 0, 499 00:22:07,850 --> 00:22:10,820 bao giờ nên briefly-- nếu bạn có 32 bit, những gì là lớn nhất 500 00:22:10,820 --> 00:22:13,580 Số bạn có thể đại diện như một số nguyên? 501 00:22:13,580 --> 00:22:16,080 Cho hoặc mất? 502 00:22:16,080 --> 00:22:18,380 Nó giống như 4 tỷ, và đó là chỉ khi chúng tôi 503 00:22:18,380 --> 00:22:20,690 đại diện cho chỉ số dương. 504 00:22:20,690 --> 00:22:23,930 Nếu bạn có 32 bit, và bạn muốn đại diện cho các số âm là tốt, 505 00:22:23,930 --> 00:22:27,100 phạm vi của bạn là, về cơ bản, tiêu cực 2 tỷ USD để tích cực 2 tỷ. 506 00:22:27,100 --> 00:22:29,250 Nhưng nói chung, chúng ta sẽ bắt đầu 0 đi lên đến 4 tỷ USD. 507 00:22:29,250 --> 00:22:32,400 >> Bạn không cần phải biết chính xác, nhưng chúng ta có thể thấy điều này, trên thực tế, nếu tôi chỉ 508 00:22:32,400 --> 00:22:36,400 mở ra một chút tính toán, ở đây. 509 00:22:36,400 --> 00:22:41,070 Tôi có thể làm 2 32, và đó chính xác là lớn như thế nào, 510 00:22:41,070 --> 00:22:43,190 bao nhiêu giá trị bạn có thể đại diện, với 32 bit. 511 00:22:43,190 --> 00:22:44,442 Và đó là khoảng 4 tỷ USD. 512 00:22:44,442 --> 00:22:46,900 Vì vậy, chúng tôi sẽ tiếp tục nhìn thấy con số đó ở một vài nơi khác nhau. 513 00:22:46,900 --> 00:22:48,890 Nhưng nếu bạn cần còn số hơn thế, 514 00:22:48,890 --> 00:22:51,670 nó quay ra có của một cái gì đó gọi là lâu dài. 515 00:22:51,670 --> 00:22:54,005 Và một lâu dài là nói chung là 64 bit, mà 516 00:22:54,005 --> 00:22:56,380 có nghĩa là nó là một đơn đặt hàng của các cường độ thậm chí lớn hơn một int. 517 00:22:56,380 --> 00:22:59,510 >> Vì vậy, tôi thậm chí không thể phát âm lớn nhất số mà bạn có thể đại diện, 518 00:22:59,510 --> 00:23:01,340 nhưng nó là đáng kể lớn hơn. 519 00:23:01,340 --> 00:23:05,190 Bây giờ là một sang một bên, lịch sử, nếu một int là 32 bit, 520 00:23:05,190 --> 00:23:12,780 và lâu dài là 64 bit, như thế nào lớn là một dài, không phải là dài lâu? 521 00:23:12,780 --> 00:23:16,500 522 00:23:16,500 --> 00:23:20,330 Bạn nghĩ rằng nó dài hơn một int nhưng có lẽ ít lâu hơn một lâu dài, 523 00:23:20,330 --> 00:23:21,400 nhưng nó thực sự phụ thuộc. 524 00:23:21,400 --> 00:23:23,400 >> Và do đó, nó biến ra một những nỗi thất vọng quá, 525 00:23:23,400 --> 00:23:26,830 với viết mã trên hệ thống nhất định, là không phải tất cả các loại dữ liệu 526 00:23:26,830 --> 00:23:28,440 có giá trị được xác định trước. 527 00:23:28,440 --> 00:23:29,771 Đôi khi nó là điều này nhiều bit. 528 00:23:29,771 --> 00:23:31,020 Đôi khi nó có nhiều bit. 529 00:23:31,020 --> 00:23:32,750 Vì vậy, bạn thực sự phải biết, Đôi khi, những gì phần cứng 530 00:23:32,750 --> 00:23:34,083 bạn đang chạy phần mềm của bạn trên. 531 00:23:34,083 --> 00:23:36,960 Rất may, các ngôn ngữ khác và loại dữ liệu khác mà bây giờ tồn tại, 532 00:23:36,960 --> 00:23:38,400 cho phép bạn được chính xác hơn. 533 00:23:38,400 --> 00:23:41,220 Vâng, chúng ta đã thấy chuỗi, và chúng tôi thấy bool, quá, 534 00:23:41,220 --> 00:23:43,960 nhưng nó chỉ ra những yếu chỉ với thư viện CS50. 535 00:23:43,960 --> 00:23:46,240 Vì vậy, những người không được xây dựng vào C. Những thay vào đó, 536 00:23:46,240 --> 00:23:49,340 đến trong tập tin đó được gọi là CS50.h, rằng chúng ta sẽ cuối cùng 537 00:23:49,340 --> 00:23:51,831 bóc lại lớp. 538 00:23:51,831 --> 00:23:53,830 Nhưng hiện nay, họ chỉ kiểu dữ liệu bổ sung. 539 00:23:53,830 --> 00:23:57,060 Một bool là đúng hay sai, và một chuỗi là một chuỗi các ký tự, 540 00:23:57,060 --> 00:23:57,970 như một lời. 541 00:23:57,970 --> 00:24:01,690 Bây giờ printf, chúng ta đã thấy, có placeholders,% s là một. 542 00:24:01,690 --> 00:24:05,430 Và bạn có thể có thể, đến nay, suy ra từ những ví dụ khác, làm thế nào 543 00:24:05,430 --> 00:24:07,720 bạn có thể có một placeholder với nhiều loại dữ liệu khác nhau. 544 00:24:07,720 --> 00:24:11,150 Ví dụ, có nhiều phán đoán, nếu bạn muốn in ra một char duy nhất sử dụng 545 00:24:11,150 --> 00:24:15,270 printf, giữ chỗ có lẽ là% c. 546 00:24:15,270 --> 00:24:19,650 Và nếu bạn muốn in ra một số nguyên với các placeholder,% i. 547 00:24:19,650 --> 00:24:25,150 % lld là một giá trị lâu dài thập phân, nhưng lâu dài, vì vậy mà các bản đồ đó. 548 00:24:25,150 --> 00:24:28,640 Và sau đó% f cho nổi giá trị điểm hoặc cho một đôi, 549 00:24:28,640 --> 00:24:31,270 vì vậy đôi khi họ đang tái sử dụng trong các bối cảnh khác nhau. 550 00:24:31,270 --> 00:24:33,350 Vì vậy, chúng ta sẽ nhìn thấy và sử dụng một số trong những thời gian. 551 00:24:33,350 --> 00:24:36,420 Và printf và các chức năng khác cũng trình tự thoát ra hỗ trợ của người khác, 552 00:24:36,420 --> 00:24:38,080 và đôi khi, đó là cần thiết. 553 00:24:38,080 --> 00:24:39,770 Vì vậy, n dấu gạch chéo ngược là một dòng mới. 554 00:24:39,770 --> 00:24:42,886 Dấu gạch chéo ngược t, không ai muốn sử dụng những đòn? 555 00:24:42,886 --> 00:24:43,760 TƯỢNG THÀNH VIÊN: Tab. 556 00:24:43,760 --> 00:24:44,551 DAVID Malan J: Tab. 557 00:24:44,551 --> 00:24:46,810 Vì vậy, nếu bạn thực sự muốn để in ra một tab, không 558 00:24:46,810 --> 00:24:49,940 một số cố định của không gian mà là một thực tế ký tự tab, bạn không đánh bạn, 559 00:24:49,940 --> 00:24:53,490 tab, phím trên bàn phím, nói chung, bạn thực sự làm dấu chéo ngược t. 560 00:24:53,490 --> 00:24:57,750 Dấu gạch chéo ngược đôi báo, tại sao tôi sẽ không bao giờ muốn điều đó? 561 00:24:57,750 --> 00:24:58,250 Phải không? 562 00:24:58,250 --> 00:25:00,417 Tại sao tôi không thể chỉ cần gõ một nháy kép trên bàn phím của tôi? 563 00:25:00,417 --> 00:25:02,124 TƯỢNG THÀNH VIÊN: Bởi vì, nếu không, nó 564 00:25:02,124 --> 00:25:04,830 sẽ nghĩ rằng đó là cuối cùng của thích in của bạn [? văn bản. ?] 565 00:25:04,830 --> 00:25:05,420 >> DAVID Malan J: Chính xác. 566 00:25:05,420 --> 00:25:07,211 Hãy nhớ rằng, với chúng tôi ví dụ printf, khi chúng ta 567 00:25:07,211 --> 00:25:10,075 đã đi qua để printf trong đầu vào, trên bên trái của chuỗi đầu vào mà 568 00:25:10,075 --> 00:25:12,950 và bên phải của đầu vào mùa xuân, tất nhiên, là một đôi. 569 00:25:12,950 --> 00:25:16,270 Nếu đầu vào của bạn có một đôi quote ở giữa đó, 570 00:25:16,270 --> 00:25:18,920 máy tính có thể có khả năng bị lẫn lộn, như, 571 00:25:18,920 --> 00:25:20,760 không nháy kép này thuộc ở giữa? 572 00:25:20,760 --> 00:25:22,150 Liệu nó thuộc với một trái? 573 00:25:22,150 --> 00:25:23,566 Liệu nó thuộc với một trong những quyền? 574 00:25:23,566 --> 00:25:26,780 Và như vậy, nếu bạn muốn làm cho nó siêu rõ ràng, bạn làm dấu chéo ngược đôi báo, 575 00:25:26,780 --> 00:25:30,480 để nó trốn thoát, vậy để nói chuyện, và nó không đem lồng cho cái gì khác. 576 00:25:30,480 --> 00:25:34,400 Và có một vài người khác ở đây, r xuyệc ngược, dấu ngoặc đơn, 0, 577 00:25:34,400 --> 00:25:36,510 rằng chúng ta có thể thấy qua thời gian, là tốt. 578 00:25:36,510 --> 00:25:37,760 Và bây giờ, những gì về chức năng? 579 00:25:37,760 --> 00:25:41,630 >> Vì vậy, hành động mà chúng ta có thể mất đến nay trong ngôn ngữ này, C, tốt, chúng tôi đã nhìn thấy, 580 00:25:41,630 --> 00:25:44,320 printf, tất nhiên, và tất cả của người khác trên màn hình, 581 00:25:44,320 --> 00:25:47,140 ở đây, chúng ta sẽ sử dụng cho Tất nhiên đầu tiên của vài chỉ vài tuần, 582 00:25:47,140 --> 00:25:48,485 đến khi thư viện CS50. 583 00:25:48,485 --> 00:25:51,850 Và họ làm cho nó dễ dàng hơn nhiều, C, để thực sự có được người dùng nhập vào. 584 00:25:51,850 --> 00:25:54,200 Nó chỉ ra rằng trong C, và thẳng thắn trong một vài ngôn ngữ, 585 00:25:54,200 --> 00:25:57,450 đó là một nỗi đau thực sự ở cổ để làm một cái gì đó đơn giản, giống như nhắc nhở người sử dụng 586 00:25:57,450 --> 00:26:01,310 cho bàn phím, cho đầu vào của mình. 587 00:26:01,310 --> 00:26:03,240 Và do đó, các chức năng này làm cho nó dễ dàng hơn. 588 00:26:03,240 --> 00:26:05,472 >> Và nó cũng có lỗi kiểm tra trong suốt, 589 00:26:05,472 --> 00:26:07,180 do đó, khi bạn nhớ lại hôm thứ tư, chúng tôi 590 00:26:07,180 --> 00:26:09,740 thấy, thử lại, cảnh báo, khi tôi đã không hợp tác, 591 00:26:09,740 --> 00:26:11,700 và tôi đã gõ một từ, thay vì một số? 592 00:26:11,700 --> 00:26:15,402 Chúng tôi đã thực hiện việc nâng hạng nặng đầu trên để đảm bảo sử dụng hợp tác. 593 00:26:15,402 --> 00:26:17,860 Nhưng đây là những chỉ đào tạo bánh xe mà chúng tôi sẽ cuối cùng, 594 00:26:17,860 --> 00:26:19,640 và nhanh chóng, cất cánh. 595 00:26:19,640 --> 00:26:22,630 >> Vì vậy, tóm lại, sau đó, chúng ta hãy có một cái nhìn nhanh chóng, 596 00:26:22,630 --> 00:26:26,620 giống như chúng ta đã làm với Scratch, tại một số cấu trúc kinh điển trong C. 597 00:26:26,620 --> 00:26:28,580 Điều này có nghĩa là để, sắp xếp của, là một tour du lịch lốc, 598 00:26:28,580 --> 00:26:30,990 chỉ cần để bạn có một tài liệu tham khảo và rằng bạn đã nhìn thấy những điều lúc đầu. 599 00:26:30,990 --> 00:26:34,100 Nhưng sau đó chúng tôi sẽ xem xét thực tế mã hóa sử dụng một số các khối xây dựng. 600 00:26:34,100 --> 00:26:36,710 Vì vậy, nhiều như trong Scratch, khi chúng tôi đã báo cáo thích, 601 00:26:36,710 --> 00:26:41,570 nói hay, chờ đợi, trong C, chúng tôi có chức năng là tốt, giống như printf. 602 00:26:41,570 --> 00:26:45,350 >> Nếu chúng tôi muốn bày tỏ một điều kiện trong C, nó tương tự, trong tinh thần, 603 00:26:45,350 --> 00:26:47,840 cho rằng mảnh ghép đó nhìn như thế này trong Scratch. 604 00:26:47,840 --> 00:26:49,850 Nhưng thay vào đó, chúng tôi nghĩa là chỉ cần viết, nếu. 605 00:26:49,850 --> 00:26:51,830 Và sau đó, trong dấu ngoặc đơn, chúng ta đặt một điều kiện, 606 00:26:51,830 --> 00:26:54,807 nơi mà điều kiện đó là những gì chúng tôi sẽ gọi, một lần nữa, một biểu thức boolean. 607 00:26:54,807 --> 00:26:56,390 Và một lần nữa, đây là loại mã giả. 608 00:26:56,390 --> 00:26:58,830 Và, trên thực tế, các // là một nhận xét. 609 00:26:58,830 --> 00:27:00,550 Nó chỉ là những từ tiếng Anh với bản thân mình. 610 00:27:00,550 --> 00:27:03,000 Nhưng đây là nói chung cấu trúc của một, nếu, điều kiện. 611 00:27:03,000 --> 00:27:05,220 Nhưng chúng ta sẽ thấy bê tông ví dụ chỉ trong một khoảnh khắc. 612 00:27:05,220 --> 00:27:07,960 >> Nếu bạn muốn có một hai cách ngã ba đường, 613 00:27:07,960 --> 00:27:11,740 giống như chúng ta đã làm với tình nguyện viên của chúng tôi trên Thứ tư, bạn có thể có một, nếu người nào khác. 614 00:27:11,740 --> 00:27:16,020 Và nếu bạn muốn có một thứ ba và điều kiện cuối cùng, hoặc tình hình mặc định, 615 00:27:16,020 --> 00:27:19,006 bạn có thể có chỉ một khối khác, có. 616 00:27:19,006 --> 00:27:21,880 Và tương tự, với các biểu thức boolean, bạn có thể, và, chúng lại với nhau. 617 00:27:21,880 --> 00:27:24,296 Và chúng ta đã thấy hôm thứ Tư, rằng nó không phải là một ký hiệu duy nhất, 618 00:27:24,296 --> 00:27:28,220 đó là hai, vì những lý do cấp dưới mà chúng tôi sẽ cuối cùng xem và chơi với. 619 00:27:28,220 --> 00:27:30,410 Hoặc-ing việc cùng nhau là 2 thanh dọc. 620 00:27:30,410 --> 00:27:32,240 Trên một bàn phím Mỹ, điều này nói chung là một chìa khóa 621 00:27:32,240 --> 00:27:35,730 với phím Shift trên Nhập phím của bạn hoặc Return. 622 00:27:35,730 --> 00:27:38,620 >> Sau đó có những điều mà chúng tôi sẽ sử dụng có thể một lần hoặc hai lần. 623 00:27:38,620 --> 00:27:42,570 Họ là những chức năng tương đương những gì bạn có thể làm với một, nếu, nếu người nào khác, 624 00:27:42,570 --> 00:27:44,950 khác nếu người nào khác, xây dựng, nhưng chúng được gọi là một switch. 625 00:27:44,950 --> 00:27:48,020 Họ trông rất khác nhau, nhưng chúng tôi sẽ thấy trong một số mã phân phối của chúng tôi, 626 00:27:48,020 --> 00:27:51,890 cho một vấn đề thiết lập trong tương lai, rất có thể, mà đôi khi nó chỉ là một xinh đẹp hơn 627 00:27:51,890 --> 00:27:54,060 cách thể hiện toàn bộ bó của điều kiện, 628 00:27:54,060 --> 00:27:57,590 mà không cần phải có rất nhiều dấu ngoặc nhọn và rất nhiều dấu ngoặc đơn và thụt đầu dòng. 629 00:27:57,590 --> 00:28:01,910 Nhưng họ cho chúng tôi không có nhiều điện năng hơn chúng tôi đã có. 630 00:28:01,910 --> 00:28:02,550 Và bây giờ vòng. 631 00:28:02,550 --> 00:28:05,020 Và một trong những điều này, chúng tôi sẽ xem xét tại chậm hơn một chút. 632 00:28:05,020 --> 00:28:08,470 Nhưng sau đó, chúng ta sẽ bắt đầu sử dụng chúng, đặc biệt là đối với những người đã quen thuộc. 633 00:28:08,470 --> 00:28:13,830 Đây là một cách kinh điển, nếu vô cùng cách phức tạp, để viết một vòng lặp trong C. 634 00:28:13,830 --> 00:28:15,896 >> Bây giờ một vòng lặp trong Scratch là khá đơn giản. 635 00:28:15,896 --> 00:28:17,020 Bạn có một, mãi mãi, khối. 636 00:28:17,020 --> 00:28:19,760 Bạn có một, lặp lại, với khối chỉ một số bạn phải gõ vào. 637 00:28:19,760 --> 00:28:22,220 Và với, cho vòng lặp, bạn có thể thực hiện cả trong những ý tưởng, 638 00:28:22,220 --> 00:28:23,595 nhưng đó là một chút kỹ thuật nhiều hơn. 639 00:28:23,595 --> 00:28:25,994 Nhưng thẳng thắn mà nói, nó cũng tương đối đơn giản. 640 00:28:25,994 --> 00:28:28,160 Một khi bạn biết thứ tự của hoạt động, bạn có nghĩa 641 00:28:28,160 --> 00:28:30,910 chỉ cần đi để cắm vào các giá trị và cho các máy tính phải làm gì. 642 00:28:30,910 --> 00:28:32,800 Vì vậy, đây là một ví dụ. 643 00:28:32,800 --> 00:28:38,040 Đây là một vòng lặp, khá đơn giản, đếm từ một số lên 644 00:28:38,040 --> 00:28:40,187 thông qua một. 645 00:28:40,187 --> 00:28:42,020 Và chỉ cần nhìn liếc ở đó, thậm chí nếu bạn có 646 00:28:42,020 --> 00:28:44,660 chưa có kinh nghiệm với ngôn ngữ này, những gì số 647 00:28:44,660 --> 00:28:46,920 không thì có lẽ nó bắt đầu đếm ở? 648 00:28:46,920 --> 00:28:47,730 OK, 0. 649 00:28:47,730 --> 00:28:50,240 Và tôi đoán đó là bởi vì bạn thấy rằng có một int và một i, 650 00:28:50,240 --> 00:28:51,073 đó là một biến. 651 00:28:51,073 --> 00:28:52,390 Nó khởi tạo 0. 652 00:28:52,390 --> 00:28:55,670 >> Và rồi sau đó, nó trông giống như chúng ta đang đi qua printf, một giá trị. 653 00:28:55,670 --> 00:28:58,000 Và, trên thực tế, tôi đã thực hiện một chút typo ở đây. 654 00:28:58,000 --> 00:28:59,850 Nhưng điều đó dễ thôi. 655 00:28:59,850 --> 00:29:02,390 Hãy để tôi thêm vào, tôi ở đây. 656 00:29:02,390 --> 00:29:06,150 Bây giờ chúng ta có printf phúc thông qua đó giá trị giữ chỗ. 657 00:29:06,150 --> 00:29:08,299 Và điều gì sẽ đếm lên qua? 658 00:29:08,299 --> 00:29:08,840 Đung 50. 659 00:29:08,840 --> 00:29:09,340 50. 660 00:29:09,340 --> 00:29:10,160 49. 661 00:29:10,160 --> 00:29:10,910 DAVID Malan J: 49. 662 00:29:10,910 --> 00:29:13,340 Vì vậy, 50, ở cái nhìn đầu tiên, có vẻ đúng. 663 00:29:13,340 --> 00:29:16,990 Nhưng mà, nó quay ra, là có được điều kiện của chúng tôi rằng chúng tôi tiếp tục kiểm tra. 664 00:29:16,990 --> 00:29:21,740 Và chúng ta sẽ dừng lại một lần i là không còn ít hơn 50. 665 00:29:21,740 --> 00:29:24,920 Vì vậy vòng lặp này, ngược lại, nên thực hiện, miễn là tôi là ít hơn 50. 666 00:29:24,920 --> 00:29:28,891 Nhưng ngay sau khi nó trở thành 50, hoặc 51, hoặc tệ hơn, nó phải tự động dừng. 667 00:29:28,891 --> 00:29:29,390 Được rồi. 668 00:29:29,390 --> 00:29:31,200 >> Vì vậy, những gì thực sự xảy ra ở đây? 669 00:29:31,200 --> 00:29:33,160 Vì vậy, đây là thứ tự của hoạt động cho một vòng lặp. 670 00:29:33,160 --> 00:29:35,440 Một, bạn có cái gọi là khởi tạo. 671 00:29:35,440 --> 00:29:38,264 Đoạn đánh dấu màu vàng này các mã được thực thi đầu tiên, 672 00:29:38,264 --> 00:29:40,930 và nó có tác dụng đó, mỗi Thứ tư, bạn có thể tưởng tượng. 673 00:29:40,930 --> 00:29:45,500 Nó tạo ra một biến gọi là i và nó cửa hàng trong biến đó giá trị 0. 674 00:29:45,500 --> 00:29:47,560 Vì vậy, tôi là 0 vào thời điểm này trong câu chuyện. 675 00:29:47,560 --> 00:29:49,680 >> Điều tiếp theo mà xảy ra trong cấu trúc này, 676 00:29:49,680 --> 00:29:51,540 là điều kiện được kiểm tra. 677 00:29:51,540 --> 00:29:54,325 Vì vậy, tôi kiểm tra ngay lập tức, i là ít hơn 50? 678 00:29:54,325 --> 00:29:57,700 Và tất nhiên, câu trả lời cho bây giờ, chắc chắn, có. 679 00:29:57,700 --> 00:30:00,710 Vâng, bởi vì tôi là 0, và đó là chắc chắn ít hơn 50. 680 00:30:00,710 --> 00:30:03,866 Sau đó, những gì xảy ra, là điều này dòng mã được thực hiện. 681 00:30:03,866 --> 00:30:06,740 Và trên thực tế, nếu có nhiều dòng mã trong những dấu ngoặc, 682 00:30:06,740 --> 00:30:09,020 tất cả họ đều có được thực thi một. 683 00:30:09,020 --> 00:30:11,450 >> Và trong các hiệu ứng ở đây, là rõ ràng, để in ra 684 00:30:11,450 --> 00:30:15,365 i số, mà là có bằng 0, và sau đó 1, và sau đó 2. 685 00:30:15,365 --> 00:30:15,865 Nhưng tại sao? 686 00:30:15,865 --> 00:30:17,410 Tại sao nó được tăng lên? 687 00:30:17,410 --> 00:30:20,680 Vâng, điều thứ tư xảy ra là cú pháp này 688 00:30:20,680 --> 00:30:22,610 được thực thi, sau khi chấm phẩy. 689 00:30:22,610 --> 00:30:27,506 i ++ là một cách viết tắt nói; mất giá trị của i, và thêm 1 đến nó; 690 00:30:27,506 --> 00:30:30,380 và sau đó là khoảng thời gian tới, thêm 1 đến nó; và thời gian tiếp theo xung quanh, 691 00:30:30,380 --> 00:30:31,330 thêm 1 đến nó. 692 00:30:31,330 --> 00:30:33,640 >> Vì vậy, nếu chúng ta tiếp tục đi, những gì sẽ xảy ra 693 00:30:33,640 --> 00:30:35,890 tiếp theo là tôi sẽ không khởi tạo i bao giờ trở lại. 694 00:30:35,890 --> 00:30:38,290 Nếu tôi tiếp tục khởi tạo i 0, ví dụ này 695 00:30:38,290 --> 00:30:41,110 sẽ không bao giờ kết thúc bởi vì i sẽ bị mắc kẹt tại 0. 696 00:30:41,110 --> 00:30:43,870 Nhưng điều gì sẽ xảy ra là tình trạng này sẽ được kiểm tra, 697 00:30:43,870 --> 00:30:54,280 các dòng mã sẽ được thực hiện, i sẽ được tăng lên, 698 00:30:54,280 --> 00:30:56,970 điều kiện sẽ được kiểm tra, mã sẽ được thực thi. 699 00:30:56,970 --> 00:30:59,790 Và nó vẫn giữ được đi xe đạp một lần nữa, và một lần nữa, và một lần nữa, 700 00:30:59,790 --> 00:31:03,340 cho đến khi i ++ gây ra một giá trị 50. 701 00:31:03,340 --> 00:31:05,870 >> Các điều kiện sau đó nói, là 50 ít hơn 50? 702 00:31:05,870 --> 00:31:09,360 Câu trả lời, tất nhiên, là không, và vì vậy toàn bộ mã dừng thực hiện. 703 00:31:09,360 --> 00:31:13,020 Và nếu bạn có mã hơn trên màn hình xuống dưới, đó là những gì sẽ xảy ra tiếp theo. 704 00:31:13,020 --> 00:31:17,530 Nó hiện ra các dấu ngoặc nhọn và tiếp tục in thêm sau đó. 705 00:31:17,530 --> 00:31:20,470 >> Vì vậy, một trò đùa bây giờ, từ Foxtrot, mà bạn sẽ có lẽ bây giờ hiểu được. 706 00:31:20,470 --> 00:31:30,810 707 00:31:30,810 --> 00:31:31,560 Nó luôn luôn vui. 708 00:31:31,560 --> 00:31:34,110 Nó giống như cười khúc khích loại thấm, 709 00:31:34,110 --> 00:31:38,370 và sau đó bạn nhận ra bạn không nên được cười hài hước như thế này. 710 00:31:38,370 --> 00:31:41,160 Nhưng có một số takeaway ở đây, sư phạm, quá. 711 00:31:41,160 --> 00:31:43,577 Vì vậy, nó quay ra rằng tôi là thiếu một mảnh của cú pháp, 712 00:31:43,577 --> 00:31:45,410 hoặc Foxtrot của thiếu một mảnh cú pháp ở đây. 713 00:31:45,410 --> 00:31:48,076 Những gì còn thiếu, mà chúng tôi đã có trong mỗi ví dụ khác, cho đến nay? 714 00:31:48,076 --> 00:31:51,599 715 00:31:51,599 --> 00:31:53,390 Quay trở lại, là có, vì vậy đó là cái gì khác, 716 00:31:53,390 --> 00:31:54,440 rằng chúng tôi sẽ trở lại trước khi dài. 717 00:31:54,440 --> 00:31:55,398 Những gì còn thiếu, mặc dù? 718 00:31:55,398 --> 00:31:55,908 Yeah. 719 00:31:55,908 --> 00:31:58,150 >> TƯỢNG THÀNH VIÊN: Các khởi tạo của [không nghe được]. 720 00:31:58,150 --> 00:31:58,470 >> DAVID Malan J: OK. 721 00:31:58,470 --> 00:31:58,980 Vì vậy, yeah. 722 00:31:58,980 --> 00:32:03,210 Vì vậy, trên thực tế, điều này is-- Vâng, và đếm được khởi tạo 723 00:32:03,210 --> 00:32:05,470 lên trên, hay đúng hơn, tuyên bố lên trên. 724 00:32:05,470 --> 00:32:06,960 Vì vậy, đây là một cách khác để làm việc đó. 725 00:32:06,960 --> 00:32:08,685 Nhưng không phải trong một dòng nó là hợp lệ mặc dù. 726 00:32:08,685 --> 00:32:09,310 Làm thế nào về đây? 727 00:32:09,310 --> 00:32:10,196 >> TƯỢNG THÀNH VIÊN: Đó có phải là dấu ngoặc nhọn? 728 00:32:10,196 --> 00:32:10,640 >> DAVID Malan J: Vâng. 729 00:32:10,640 --> 00:32:12,080 Vì vậy, các dấu ngoặc nhọn đang mất tích. 730 00:32:12,080 --> 00:32:15,495 Tuy nhiên, mã này, tôi có nghĩa là, để tín dụng của họ, việc thực sự là cú pháp hợp lệ. 731 00:32:15,495 --> 00:32:17,610 Hóa ra, bạn không cần các dấu ngoặc nhọn 732 00:32:17,610 --> 00:32:21,691 nếu bạn chỉ có một dòng mã bạn muốn thực hiện bên trong vòng lặp. 733 00:32:21,691 --> 00:32:24,190 Bây giờ chúng ta luôn luôn, trong lớp và trong tất cả các mã phân phối của chúng tôi, 734 00:32:24,190 --> 00:32:26,730 bao gồm các dấu ngoặc nhọn anyway, chỉ vì lợi ích của sự rõ ràng. 735 00:32:26,730 --> 00:32:29,010 Nhưng nhận ra rằng trong sách giáo khoa và ví dụ trực tuyến, 736 00:32:29,010 --> 00:32:31,300 bạn rất có thể sẽ chứng xoăn niềng răng mất tích sometime. 737 00:32:31,300 --> 00:32:34,850 Và đó là OK, nếu những gì bạn đã thụt vào và có ý định 738 00:32:34,850 --> 00:32:38,650 chỉ là một dòng mã, và không nhiều dòng mã, có tiềm năng. 739 00:32:38,650 --> 00:32:39,150 Được rồi. 740 00:32:39,150 --> 00:32:44,500 Vì vậy, liên quan đến vấn đề không chính xác, là một vấn đề của tràn, 741 00:32:44,500 --> 00:32:48,560 trong ý nghĩa đó, tương tự như vậy, làm số nguyên có giới hạn đối với họ 742 00:32:48,560 --> 00:32:49,970 giống như các giá trị điểm nổi? 743 00:32:49,970 --> 00:32:53,120 Trong thế giới một điểm nổi giá trị, chúng tôi chỉ có thể là chính xác như vậy, 744 00:32:53,120 --> 00:32:55,710 sau đó, đôi khi những điều xấu có thể xảy ra, 745 00:32:55,710 --> 00:32:57,760 và các chương trình của chúng tôi có thể có lỗi và lỗi. 746 00:32:57,760 --> 00:33:00,050 Bây giờ ngay cả với số nguyên, bạn có thể chạy vào vấn đề. 747 00:33:00,050 --> 00:33:03,820 Bây giờ một số nguyên không có một điểm thập phân hoặc số sau nó. 748 00:33:03,820 --> 00:33:07,130 Nó chỉ là một số tự nhiên, thông thường. 749 00:33:07,130 --> 00:33:09,430 Vì vậy, những gì có thể đi sai với một int? 750 00:33:09,430 --> 00:33:12,210 Nếu tôi đang sử dụng một int để đếm, những gì có thể đi sai? 751 00:33:12,210 --> 00:33:13,230 Có vẻ đơn giản hơn rất nhiều. 752 00:33:13,230 --> 00:33:13,873 Yeah. 753 00:33:13,873 --> 00:33:16,240 >> TƯỢNG THÀNH VIÊN: Nếu số được [không nghe] 754 00:33:16,240 --> 00:33:17,073 >> DAVID Malan J: Vâng. 755 00:33:17,073 --> 00:33:20,820 Điều gì nếu bạn đếm quá cao, mà bạn không thể diễn tả rằng số thực sự lớn. 756 00:33:20,820 --> 00:33:21,320 Phải không? 757 00:33:21,320 --> 00:33:23,910 Tại một số điểm, bạn sẽ vượt quá ranh giới 758 00:33:23,910 --> 00:33:27,077 của một giá trị 32-bit hoặc một giá trị 64-bit. 759 00:33:27,077 --> 00:33:29,410 Bây giờ một lần nữa, tôi không chắc chắn như thế nào phát âm một giá trị 64-bit, 760 00:33:29,410 --> 00:33:32,230 nhưng tôi biết có một số nguyên 32-bit, giá trị lớn nhất của nó có thể được, 761 00:33:32,230 --> 00:33:35,490 nếu nó chỉ tích cực giá trị, là khoảng 4 tỷ USD. 762 00:33:35,490 --> 00:33:39,000 Vì vậy, nếu tôi cố gắng đếm đến 5 tỷ, một cái gì đó sẽ xảy ra. 763 00:33:39,000 --> 00:33:41,050 Nhưng chúng ta hãy xem những gì, trên thực tế, có thể xảy ra. 764 00:33:41,050 --> 00:33:44,570 Trong thế giới của các số nguyên tràn, nơi bạn, trong một nghĩa nào đó, 765 00:33:44,570 --> 00:33:48,270 tràn năng lực của một số nguyên, những gì có thể xảy ra? 766 00:33:48,270 --> 00:33:51,190 >> Vì vậy, đây là một số nhị phân, đó là một sự nga ra sau 0. 767 00:33:51,190 --> 00:33:54,630 Đó là tất cả 1, và giữ chỗ có, là lũy thừa của 2, 768 00:33:54,630 --> 00:33:55,980 vì vậy đây là nhị phân. 769 00:33:55,980 --> 00:33:59,416 Vì vậy đây là 8, 1 bit trên màn hình. 770 00:33:59,416 --> 00:34:01,290 Và nếu bạn gọi lại hoặc bạn nhanh chóng làm toán, 771 00:34:01,290 --> 00:34:06,074 giá trị những gì đang được đại diện ở đây với những tám 1 bit? 772 00:34:06,074 --> 00:34:06,950 255. 773 00:34:06,950 --> 00:34:09,260 Và thậm chí nếu bạn không phải là khá chắc chắn của toán học, bạn có thể làm điều đó ra. 774 00:34:09,260 --> 00:34:10,550 Hoặc bạn chỉ có thể loại các lý do thông qua nó, 775 00:34:10,550 --> 00:34:12,633 chờ một phút, nếu tôi đại diện cho một giá trị 8 bit, 776 00:34:12,633 --> 00:34:17,750 và tôi đã có 256 giá trị có thể, nhưng là người đầu tiên trong số đó là 0, 777 00:34:17,750 --> 00:34:19,909 Tôi chỉ biết rằng lớn nhất là có được 255, 778 00:34:19,909 --> 00:34:21,510 và đó là điều này có thể được. 779 00:34:21,510 --> 00:34:26,060 >> Vì vậy, giả sử tôi cố gắng thêm 1 giá trị này. 780 00:34:26,060 --> 00:34:28,750 Bạn sẽ làm gì trong lớp trường khi thêm một 1, và nó 781 00:34:28,750 --> 00:34:31,139 không thực sự phù hợp bởi vì bạn phải mang theo 1? 782 00:34:31,139 --> 00:34:34,380 Con số này sẽ là gì để trở thành khi bạn thêm 1? 783 00:34:34,380 --> 00:34:37,030 Nó sẽ trở thành 0. 784 00:34:37,030 --> 00:34:37,530 Phải không? 785 00:34:37,530 --> 00:34:41,139 Bởi vì nếu bạn có bits-- hơn và tôi sẽ cố gắng, loại, loại nó ra here-- 786 00:34:41,139 --> 00:34:44,710 nếu chúng ta có nhiều bit hơn, những gì chúng tôi có thể làm ở đây là thêm 1, 787 00:34:44,710 --> 00:34:47,370 và sau đó chúng ta sẽ có được điều này. 788 00:34:47,370 --> 00:34:48,739 Lỗi chính. 789 00:34:48,739 --> 00:34:52,250 Chúng tôi muốn có một chút 1 tất cả các cách trên đây. 790 00:34:52,250 --> 00:34:55,530 >> Nhưng nếu điều này là hữu hạn giá trị, nó chỉ có 8 bit, 791 00:34:55,530 --> 00:34:57,480 và đó là xác định trước bằng máy tính, 792 00:34:57,480 --> 00:34:59,370 đó là 1 cách hiệu quả không có. 793 00:34:59,370 --> 00:35:00,980 Nó chỉ là loại rơi xuống một vách đá. 794 00:35:00,980 --> 00:35:05,480 Và do đó, nếu bạn thêm 1-255, những gì giá trị để bạn dường như nhận được? 795 00:35:05,480 --> 00:35:06,180 0. 796 00:35:06,180 --> 00:35:09,700 Và như vậy con số vô tình, và có lẽ, vô tình, 797 00:35:09,700 --> 00:35:12,040 kết thúc gói xung quanh như thế này. 798 00:35:12,040 --> 00:35:14,079 Vì vậy, những gì có thể được ngụ ý của nó? 799 00:35:14,079 --> 00:35:15,620 Vâng, có một vài điều khác nhau. 800 00:35:15,620 --> 00:35:18,751 Vì vậy, một trong, nó sẽ chỉ tìm kiếm như 0, vô ý, 801 00:35:18,751 --> 00:35:20,750 nhưng bạn có thể loại thấy, ngay cả trong thế giới thực, 802 00:35:20,750 --> 00:35:23,416 cho tốt hơn hoặc tồi tệ hơn, biểu hiện của ý tưởng này của một giới hạn. 803 00:35:23,416 --> 00:35:26,630 Ví dụ, bất kỳ bạn của những người đã từng chơi Lego Star Wars, 804 00:35:26,630 --> 00:35:28,880 không ai xảy ra cho biết số lượng tối đa của đồng tiền 805 00:35:28,880 --> 00:35:32,032 bạn có thể thu thập trong Lego Star Wars? 806 00:35:32,032 --> 00:35:35,640 Hãy đoán dựa trên câu hỏi hàng đầu hiện nay. 807 00:35:35,640 --> 00:35:39,140 Nó lớn hơn 256 hoặc 255. 808 00:35:39,140 --> 00:35:40,330 Đó là 4 tỷ USD. 809 00:35:40,330 --> 00:35:42,080 Vì vậy, nó quay ra, và có một số people-- 810 00:35:42,080 --> 00:35:46,080 một số googling xác nhận night-- cuối cùng đã nhận được 4 tỷ đồng tiền vàng, 811 00:35:46,080 --> 00:35:47,730 hoặc có điều gì, trong Lego Star Wars. 812 00:35:47,730 --> 00:35:49,860 Mặc dù rõ ràng, có một cách để lừa các trò chơi, 813 00:35:49,860 --> 00:35:53,222 có một lỗi hoặc tính năng, cho phép bạn chỉ tích luỹ rất nhiều và rất nhiều điểm. 814 00:35:53,222 --> 00:35:54,930 Nhưng lớn nhất có thể giá trị, theo 815 00:35:54,930 --> 00:35:58,360 hình chụp màn hình này của một người nào đó tôi tìm thấy trực tuyến, thực sự là, 4 tỷ. 816 00:35:58,360 --> 00:35:59,240 >> Bây giờ tại sao vậy? 817 00:35:59,240 --> 00:36:03,040 Đó là chính xác 4 tỷ, có lẽ bởi vì một người nào đó quyết định, 818 00:36:03,040 --> 00:36:05,500 người đã viết trò chơi này, rằng họ có thể làm 4 tỷ, 819 00:36:05,500 --> 00:36:07,340 một cái gì đó, một cái gì đó, một cái gì đó, như các giá trị mà tôi đưa lên 820 00:36:07,340 --> 00:36:10,256 với các máy tính trước đó, nhưng nó chỉ là một chút sạch hơn cho con người 821 00:36:10,256 --> 00:36:12,610 để nói rằng số lượng tối đa của coins-- hoặc đinh tán, 822 00:36:12,610 --> 00:36:14,860 như họ gọi them-- bạn có thể thu thập được là 4 tỷ USD. 823 00:36:14,860 --> 00:36:16,290 Và như vậy, tại sao điều này là? 824 00:36:16,290 --> 00:36:20,310 Làm thế nào là trò chơi LEGO thực hiện các truy cập 825 00:36:20,310 --> 00:36:23,420 đó là theo dõi các số tiền bạn có? 826 00:36:23,420 --> 00:36:24,266 Họ đang sử dụng những gì? 827 00:36:24,266 --> 00:36:26,390 TƯỢNG THÀNH VIÊN: Nó dừng lại kể sau 4 tỷ USD. 828 00:36:26,390 --> 00:36:27,720 DAVID Malan J: Nó dừng lại kể sau 4 tỷ đồng, 829 00:36:27,720 --> 00:36:29,525 có nghĩa là bạn có thể suy ra, như một lập trình viên, 830 00:36:29,525 --> 00:36:31,960 rằng họ đang có lẽ sử dụng một số nguyên 32 bit. 831 00:36:31,960 --> 00:36:35,380 Giống như các lập trình viên theo nghĩa đen chỉ đánh máy, int, trong mã của mình, 832 00:36:35,380 --> 00:36:39,620 và đó là kiểu của biến mà họ đang sử dụng để lưu trữ mã của một ai đó. 833 00:36:39,620 --> 00:36:42,230 Vì vậy, có các biểu hiện khác của các loại giới hạn. 834 00:36:42,230 --> 00:36:45,063 >> Vì vậy, tôi đã không chơi game-- này và tôi đã được đọc lên trên lịch sử 835 00:36:45,063 --> 00:36:48,470 để xác nhận như much-- nhưng trong Phiên bản gốc của nền văn minh, nơi 836 00:36:48,470 --> 00:36:53,240 bạn dường như tương tác với nhau khác và có thể tiến hành chiến tranh hoặc có hòa bình, 837 00:36:53,240 --> 00:36:56,590 Gandhi được coi là một trong những các nhân vật ôn hòa nhất, như tôi 838 00:36:56,590 --> 00:36:59,280 hiểu nó, trong lần đầu tiên phiên bản của nền văn minh. 839 00:36:59,280 --> 00:37:03,250 Và trên thực tế, trên thang điểm từ 1-10, gây hấn của ông chỉ là một 1. 840 00:37:03,250 --> 00:37:05,620 Vì vậy bao giờ nên nhẹ tích cực, rõ ràng. 841 00:37:05,620 --> 00:37:11,590 >> Nhưng tại một số điểm, bạn có thể rõ ràng cài đặt nền dân chủ ở địa lý của bạn. 842 00:37:11,590 --> 00:37:14,900 Và nếu bạn cài đặt nền dân chủ vào phiên bản của trò chơi, 843 00:37:14,900 --> 00:37:17,320 sau đó mức độ gây hấn của bạn đi xuống. 844 00:37:17,320 --> 00:37:18,460 Đó là một điều tốt. 845 00:37:18,460 --> 00:37:20,890 Mọi người yên tĩnh hơn rõ ràng, trong tình huống đó. 846 00:37:20,890 --> 00:37:23,190 Nhưng dường như, ai đó đã làm không có một, nếu, điều kiện 847 00:37:23,190 --> 00:37:24,780 trong phiên bản gốc của mã này. 848 00:37:24,780 --> 00:37:30,650 >> Vì vậy, mức độ gây hấn của Gandhi đã đi từ tích cực 1, trừ 2, để tiêu cực 1, 849 00:37:30,650 --> 00:37:33,840 nhưng trò chơi không hiểu các số âm. 850 00:37:33,840 --> 00:37:38,680 Vì vậy, những gì đã xảy ra là sự xâm lược của Gandhi mức tăng từ 1, 0, 1 để tiêu cực, 851 00:37:38,680 --> 00:37:40,900 trong đó đã có hiệu lực của gói xung quanh để được 852 00:37:40,900 --> 00:37:44,690 các nhân vật hung hăng nhất trong các trò chơi, tại một giá trị của 255, 853 00:37:44,690 --> 00:37:46,630 trên thang điểm từ 1-10. 854 00:37:46,630 --> 00:37:49,887 Và kể từ đó, đã có nhiều hóa thân của trò chơi này, 855 00:37:49,887 --> 00:37:51,720 và họ đã giữ nó như một loại trứng Phục Sinh, 856 00:37:51,720 --> 00:37:53,870 rằng Gandhi là rõ ràng khủng khiếp như vậy hung hăng. 857 00:37:53,870 --> 00:37:56,740 Nhưng nó là kết quả của một lỗi lập trình rất đơn giản 858 00:37:56,740 --> 00:37:58,630 trong đó phiên bản rất sớm của trò chơi. 859 00:37:58,630 --> 00:38:02,860 >> Bây giờ đáng lo ngại hơn, nhiều hơn Gần đây, các máy bay Boeing 787 860 00:38:02,860 --> 00:38:05,720 đã được ghi nhận là có một lỗi, không phải là loại thiết bị 861 00:38:05,720 --> 00:38:07,340 bạn đặc biệt muốn có một lỗi. 862 00:38:07,340 --> 00:38:10,130 Và các triệu chứng, mà tôi sẽ đọc ở đây, từ một bài báo trực tuyến, 863 00:38:10,130 --> 00:38:13,840 là điều này, một mô hình máy bay 787 mà đã hoạt động được liên tục 864 00:38:13,840 --> 00:38:18,030 cho 248 ngày có thể mất tất cả dòng điện xoay chiều, AC, 865 00:38:18,030 --> 00:38:20,850 năng lượng điện, do các đơn vị điều khiển máy phát điện, 866 00:38:20,850 --> 00:38:23,330 GCUs, đồng thời đi sâu vào chế Fail-an toàn. 867 00:38:23,330 --> 00:38:26,790 Vì vậy, đây là một cảnh báo ban hành khi vấn đề này đã được phát hiện. 868 00:38:26,790 --> 00:38:28,750 Tình trạng này gây ra bởi một phần mềm truy cập, 869 00:38:28,750 --> 00:38:32,230 nội bộ để các GCUs, vì vậy một số nguyên hoặc một biến, 870 00:38:32,230 --> 00:38:36,850 mà sẽ tràn sau 248 ngày giá năng lượng liên tục. 871 00:38:36,850 --> 00:38:40,350 Boeing là trong quá trình phát triển một phần mềm nâng cấp GCU đó 872 00:38:40,350 --> 00:38:42,350 sẽ khắc phục tình trạng không an toàn. 873 00:38:42,350 --> 00:38:44,226 >> Vì vậy, giống như tên lửa kịch bản, trong đó 874 00:38:44,226 --> 00:38:46,850 họ đã có một số loại biến mà đang đếm, đếm, 875 00:38:46,850 --> 00:38:50,720 và đếm, nhưng dần dần tràn ranh giới của khả năng của mình, 876 00:38:50,720 --> 00:38:54,890 tương tự như đã làm các máy bay chết tiệt có một lỗi tràn bộ biến 877 00:38:54,890 --> 00:38:56,410 sau khi đủ thời gian chạy. 878 00:38:56,410 --> 00:38:59,240 Và do đó, cách lưỡi-in-má làm việc xung quanh vấn đề này 879 00:38:59,240 --> 00:39:04,400 là để thực sự, khởi động lại, máy bay của bạn mỗi 247 ngày, do đó các bộ nhớ bị xóa sổ 880 00:39:04,400 --> 00:39:06,100 và biến đi trở về 0. 881 00:39:06,100 --> 00:39:09,410 Nhưng nhận ra, đây là một rất hóa thân lớn các phần mềm, 882 00:39:09,410 --> 00:39:14,070 nhưng đặc biệt là khi chúng ta nghe về Apple điều hành hệ thống đi vào xe ô tô, 883 00:39:14,070 --> 00:39:18,030 và tự lái xe ô tô từ Google, và bất kỳ số lượng các hiện thân của phần mềm 884 00:39:18,030 --> 00:39:21,000 trong cuộc sống hàng ngày, TV của chúng tôi và đồng hồ, và nhiều hơn nữa, 885 00:39:21,000 --> 00:39:24,950 nhận ra được bao quanh bởi các phần mềm, tất cả đều được viết bởi con người chúng ta. 886 00:39:24,950 --> 00:39:28,150 >> Và như chúng ta tất cả sẽ sớm khám phá, nó rất dễ dàng và rất điển hình 887 00:39:28,150 --> 00:39:30,250 mắc sai lầm khi viết phần mềm. 888 00:39:30,250 --> 00:39:32,745 Và nếu bạn không bắt họ, một số điều xấu có thể xảy ra. 889 00:39:32,745 --> 00:39:35,400 Bây giờ đôi khi, một số điều buồn cười có thể xảy ra, 890 00:39:35,400 --> 00:39:38,280 hoặc ít nhất là đôi khi chúng ta biết để mong đợi một số thứ xấu. 891 00:39:38,280 --> 00:39:41,550 Vì vậy, 0 chia cho 0, từ lớp trường học, nói chung là một điều xấu. 892 00:39:41,550 --> 00:39:43,050 Đó là không xác định. 893 00:39:43,050 --> 00:39:46,440 Và nó quay out-- và hãy xem liệu mic của tôi có thể chọn này up-- rằng Apple 894 00:39:46,440 --> 00:39:47,790 đã có một số vui vẻ với điều này gần đây. 895 00:39:47,790 --> 00:39:48,850 Vì vậy, tôi có một chiếc iPhone ở đây. 896 00:39:48,850 --> 00:39:54,160 Tôi sẽ nói chuyện với Siri và hỏi cô ấy để cung cấp cho tôi câu trả lời 0 chia cho 0. 897 00:39:54,160 --> 00:39:55,850 Những gì được 0 chia cho 0? 898 00:39:55,850 --> 00:39:59,350 899 00:39:59,350 --> 00:40:02,230 >> Siri: Hãy tưởng tượng rằng bạn có 0 cookies, và bạn chia chúng ngang nhau 900 00:40:02,230 --> 00:40:03,540 trong số 0 bạn bè. 901 00:40:03,540 --> 00:40:05,810 Làm thế nào nhiều cookie nào mỗi người nhận được? 902 00:40:05,810 --> 00:40:06,350 Thấy không? 903 00:40:06,350 --> 00:40:07,660 Nó không có ý nghĩa. 904 00:40:07,660 --> 00:40:10,540 Và Cookie Monster là buồn rằng không có cookie. 905 00:40:10,540 --> 00:40:13,987 Và bạn đang buồn mà bạn không có bạn bè. 906 00:40:13,987 --> 00:40:15,570 DAVID Malan J: Đó là loại đáng ghét. 907 00:40:15,570 --> 00:40:17,550 Vì vậy, đây là những gì đã vừa nói đó. 908 00:40:17,550 --> 00:40:21,380 Nó không xác định, nó không được định nghĩa, và quả thật, nhiều ngôn ngữ lập trình 909 00:40:21,380 --> 00:40:24,950 hay, thực sự, trình biên dịch sẽ phát hiện khi bạn, trong một chương trình, 910 00:40:24,950 --> 00:40:27,050 cố gắng chia 0 bằng 0. 911 00:40:27,050 --> 00:40:29,830 Vui nhiều hơn mặc dù điều này, là mà rõ ràng, Cookie quái vật 912 00:40:29,830 --> 00:40:31,270 là trên Twitter những ngày này. 913 00:40:31,270 --> 00:40:37,610 Và ông trả lời cho điều này, với điều này, đó là hoàn toàn đáng yêu. 914 00:40:37,610 --> 00:40:40,110 Nhưng chúng ta hãy xem nhanh một vài cấu trúc khác, 915 00:40:40,110 --> 00:40:43,459 và sau đó đặt một số điều này mã để sử dụng, trong những cách tốt. 916 00:40:43,459 --> 00:40:45,250 Vì vậy, nó quay ra, bên cạnh việc cho vòng, có 917 00:40:45,250 --> 00:40:49,174 một cái gì đó gọi là vòng lặp trong khi, đó trông khác nhau và được thực hiện 918 00:40:49,174 --> 00:40:51,590 một chút differently-- và chúng ta sẽ dần dần thấy examples-- 919 00:40:51,590 --> 00:40:53,500 nhưng trong một số ý nghĩa, nó đơn giản bởi vì nó 920 00:40:53,500 --> 00:40:56,670 không cho phép bạn khởi tạo và cập nhật trong vòng ranh giới của các vòng lặp. 921 00:40:56,670 --> 00:40:57,794 Bạn vẫn có thể thực hiện nó. 922 00:40:57,794 --> 00:41:01,219 Vì vậy, bạn có thể làm những điều chính xác cùng với một vòng lặp trong khi, như với một vòng lặp for, 923 00:41:01,219 --> 00:41:03,260 nhưng cú pháp của bạn, ultimately-- như chúng ta sẽ thấy cuối cùng 924 00:41:03,260 --> 00:41:04,551 see-- sẽ là khác nhau. 925 00:41:04,551 --> 00:41:07,450 Thậm chí có một việc phải làm trong khi vòng lặp, mà thực sự là một chút khác nhau, 926 00:41:07,450 --> 00:41:09,640 trong đó trong khi một vòng lặp for và một vòng lặp trong khi luôn luôn 927 00:41:09,640 --> 00:41:13,005 kiểm tra điều kiện đầu tiên của họ, nếu bạn đọc điều này trên xuống dưới, 928 00:41:13,005 --> 00:41:16,440 nó loại trông giống như nó sẽ kiểm tra xem nó của tình trạng cuối cùng bởi vì nó 929 00:41:16,440 --> 00:41:17,910 thực sự là những dòng cuối cùng của mã. 930 00:41:17,910 --> 00:41:20,580 Và quả thực, đó là sẽ có ích trong một số chương trình mà chúng tôi viết, 931 00:41:20,580 --> 00:41:23,746 nếu bạn muốn làm điều gì đó một cách mù quáng chỉ và cuối cùng kiểm tra điều kiện. 932 00:41:23,746 --> 00:41:25,205 Đó không nhất thiết phải là một điều xấu. 933 00:41:25,205 --> 00:41:27,912 Nếu chúng ta muốn biến, chúng ta có thể làm nó trong một vài cách khác nhau. 934 00:41:27,912 --> 00:41:30,290 Và chúng ta đã thấy trong các Foxtrot phim hoạt hình, một cách để làm việc đó, 935 00:41:30,290 --> 00:41:33,400 nơi bạn khai báo biến của bạn, như int counter dấu chấm phẩy, 936 00:41:33,400 --> 00:41:36,570 và sau đó later-- có lẽ tiếp theo dòng, có lẽ 10 dòng later-- 937 00:41:36,570 --> 00:41:37,800 bạn thực sự khởi tạo nó. 938 00:41:37,800 --> 00:41:42,230 Vì vậy, những 2 dòng mã khai báo một biến kiểu int 939 00:41:42,230 --> 00:41:44,930 và gọi nó là truy cập, vì vậy nó mang lại cho tôi đủ bit để giữ một int. 940 00:41:44,930 --> 00:41:48,230 Và rồi cuối cùng, nó đặt giá trị 0 vào biến đó. 941 00:41:48,230 --> 00:41:51,250 Nó sắp xếp của 0 và 1 trong một mô hình, mà chúng ta biết từ tuần trước, 942 00:41:51,250 --> 00:41:53,260 đại diện cho số chúng ta biết như là 0. 943 00:41:53,260 --> 00:41:56,920 Hoặc thẳng thắn, bạn có thể làm điều này nhiều ngắn gọn hơn, chỉ như thế này. 944 00:41:56,920 --> 00:41:59,390 >> Bây giờ chúng ta cũng có khả năng để gọi chức năng. 945 00:41:59,390 --> 00:42:03,070 Và trên thực tế, đây là một dòng 2 chương trình, hoặc một trích đoạn của chúng, 946 00:42:03,070 --> 00:42:06,157 cho phép chúng ta thực sự viết một số mã 947 00:42:06,157 --> 00:42:08,990 được một chuỗi từ user-- nhiều như tình nguyện viên của chúng tôi một thời điểm ago-- 948 00:42:08,990 --> 00:42:11,320 lưu trữ các kết quả trong một biến gọi tên, 949 00:42:11,320 --> 00:42:15,470 và then-- rất giống với tình nguyện viên của chúng tôi với printf-- in ra những giá trị 950 00:42:15,470 --> 00:42:19,180 bằng cách đi qua trong hai tham số, chuỗi, tiếp theo là các biến 951 00:42:19,180 --> 00:42:20,781 gọi là, tên, chính nó. 952 00:42:20,781 --> 00:42:23,155 Vì vậy, chúng ta hãy có một cái nhìn, trước khi chúng ta trở lại Mario có, 953 00:42:23,155 --> 00:42:26,010 ở một vài doanh nghiệp, ví dụ về điều này. 954 00:42:26,010 --> 00:42:30,537 >> Tôi sẽ đi trước và mở lên, hãy nói, chức năng-0.c. 955 00:42:30,537 --> 00:42:33,120 Và như mọi khi, mã này là có sẵn trên trang web của khóa học, 956 00:42:33,120 --> 00:42:35,660 vì vậy bạn có thể chơi cùng lúc nhà và nhìn vào nó sau này. 957 00:42:35,660 --> 00:42:40,400 Nhưng đây là chương trình trong nó Về bản chất, từ dòng 17 đến 22. 958 00:42:40,400 --> 00:42:43,270 Các chương trình chính là nơi mà các chương trình sẽ luôn luôn bắt đầu. 959 00:42:43,270 --> 00:42:46,980 Chương trình này, rõ ràng, được đi để in ra tên của bạn, đại tràng. 960 00:42:46,980 --> 00:42:50,320 Sau đó nó sẽ gọi GetString, giống như chúng ta đã làm với các tình nguyện viên của chúng tôi. 961 00:42:50,320 --> 00:42:53,365 Và sau đó, đây là thú vị, nó sẽ gọi PrintName. 962 00:42:53,365 --> 00:42:56,490 Hóa ra, tất cả các thời gian này, có có vẻ là một chức năng gọi là PrintName. 963 00:42:56,490 --> 00:42:57,614 Mà in tên của ai đó. 964 00:42:57,614 --> 00:43:01,210 Chúng tôi không cần phải sử dụng printf từ năm qua, có PrintName. 965 00:43:01,210 --> 00:43:03,500 >> Nhưng đó là sai lầm vì PrintName không 966 00:43:03,500 --> 00:43:06,760 đi kèm với C. dân không phát minh ra nó khoảng 40 hay 50 năm trước đây, 967 00:43:06,760 --> 00:43:07,990 Tôi đã làm, thay thế. 968 00:43:07,990 --> 00:43:10,330 Và trên thực tế, nếu tôi di chuyển xuống hơn nữa, thông báo 969 00:43:10,330 --> 00:43:14,200 làm thế nào tôi có thể viết riêng của tôi chức năng trong C. Chúng tôi sẽ cuối cùng 970 00:43:14,200 --> 00:43:16,319 giải thích tại sao chúng ta cứ nói, void, ở một vài nơi, 971 00:43:16,319 --> 00:43:18,110 nhưng đối với ngày hôm nay, chúng ta hãy chỉ cần nhìn vào tên. 972 00:43:18,110 --> 00:43:20,905 >> On line 24, nếu bạn muốn tạo ra chức năng của riêng bạn, 973 00:43:20,905 --> 00:43:22,780 bạn có nghĩa là viết tên của hàm. 974 00:43:22,780 --> 00:43:24,340 Tôi đã chọn PrintName. 975 00:43:24,340 --> 00:43:26,159 Trong ngoặc đơn, bạn sau đó xác định những gì các loại 976 00:43:26,159 --> 00:43:28,450 các yếu tố đầu vào, và có bao nhiêu bạn muốn chức năng này để dùng. 977 00:43:28,450 --> 00:43:31,906 Trong trường hợp này, tôi muốn để mất 1 biến được gọi là, tên, 978 00:43:31,906 --> 00:43:34,030 và nó sẽ là của loại, chuỗi, do đó nó sẽ 979 00:43:34,030 --> 00:43:35,780 có một số chuỗi ký tự. 980 00:43:35,780 --> 00:43:39,170 Và sau đó, program-- này giống như trong Scratch, 981 00:43:39,170 --> 00:43:42,590 bạn có thể có tùy chỉnh câu đố pieces-- là sẽ có hành vi tùy chỉnh này. 982 00:43:42,590 --> 00:43:46,760 Nó sẽ gọi printf đi qua trong, hello, giữ chỗ, 983 00:43:46,760 --> 00:43:49,110 và sau đó nó sẽ cắm trong bất cứ người sử dụng gọi. 984 00:43:49,110 --> 00:43:51,450 >> Vì vậy, đây là một ví dụ về những gì một nhà khoa học máy tính sẽ 985 00:43:51,450 --> 00:43:55,090 trừu tượng gọi hoặc chức năng phân hủy, mà chỉ là 986 00:43:55,090 --> 00:43:58,110 cách ưa thích của saying-- là nếu bạn thích ý tưởng cấp cao này, 987 00:43:58,110 --> 00:44:01,569 giống như tôi muốn chức năng in tên của một ai đó, bạn hoàn toàn 988 00:44:01,569 --> 00:44:04,360 nghĩa là có thể viết printf và sau đó vượt qua trong các đối số mà bạn muốn, 989 00:44:04,360 --> 00:44:07,340 và chương trình sẽ làm việc, vì nó có từ hôm thứ Tư. 990 00:44:07,340 --> 00:44:10,510 Nhưng bạn có thể bắt đầu trừu tượng đi các khái niệm về in ấn một cái tên. 991 00:44:10,510 --> 00:44:13,270 Bạn có thể cung cấp cho nó một cái tên, như PrintName, và điều này 992 00:44:13,270 --> 00:44:15,280 là ý tưởng này của layering từ tuần 0. 993 00:44:15,280 --> 00:44:19,910 >> Từ nay trở đi, tôi và bạn không cần phải biết hoặc chăm sóc như thế nào PrintName được thực hiện. 994 00:44:19,910 --> 00:44:22,470 Có nó sử dụng printf, có thể nó không, ai biết được những gì sử dụng? 995 00:44:22,470 --> 00:44:23,410 Ai quan tâm? 996 00:44:23,410 --> 00:44:26,034 Bây giờ tôi đang nói ở đây, thay vì xuống đây. 997 00:44:26,034 --> 00:44:28,700 Và thực sự, như các chương trình của chúng tôi có được nâng cao hơn và tinh vi, 998 00:44:28,700 --> 00:44:32,550 chúng ta sẽ tiếp tục dùng cho các cấp rằng mảnh câu đố cấp thấp tồn tại. 999 00:44:32,550 --> 00:44:34,780 Bởi vì chúng tôi đã viết cho họ hoặc người khác đã làm, vì vậy 1000 00:44:34,780 --> 00:44:36,910 mà sau đó chúng ta có thể xây dựng trên đầu trang của họ. 1001 00:44:36,910 --> 00:44:39,430 Chúng ta hãy nhìn vào điều này biến thể, chức năng một. 1002 00:44:39,430 --> 00:44:41,780 >> Vì vậy, con này nhiều hơn một chút tiên tiến, nhưng nó quay ra 1003 00:44:41,780 --> 00:44:44,570 rằng trong thư viện của CS50, chỉ có một chức năng getInt. 1004 00:44:44,570 --> 00:44:47,720 Chúng tôi không nghĩ rằng, năm trước, để thực hiện một chức năng GetPositiveInt. 1005 00:44:47,720 --> 00:44:50,970 Và đó là một chút khó chịu vì nếu các bạn đang viết một chương trình trong đó 1006 00:44:50,970 --> 00:44:53,325 bạn muốn để có được một dương số nguyên từ người sử dụng, 1007 00:44:53,325 --> 00:44:55,010 bạn hoàn toàn có thể sử dụng getInt. 1008 00:44:55,010 --> 00:44:57,840 Và bạn hoàn toàn có thể kiểm tra với điều kiện và có thể là một vòng lặp 1009 00:44:57,840 --> 00:45:00,320 nếu int mà lớn hơn 0 và la lên với người sử dụng 1010 00:45:00,320 --> 00:45:02,699 nếu người đó không cho bạn một số dương. 1011 00:45:02,699 --> 00:45:04,740 Nhưng chúng ta hãy xây dựng này xây dựng chặn chính mình, một, 1012 00:45:04,740 --> 00:45:06,555 tùy chỉnh Scratch mảnh, nếu bạn sẽ. 1013 00:45:06,555 --> 00:45:08,680 Tôi sẽ có một chương trình ở đây mà cuối cùng, tôi 1014 00:45:08,680 --> 00:45:11,780 muốn để có thể gọi GetPositiveInt, và tôi muốn được 1015 00:45:11,780 --> 00:45:14,200 có thể in ra bất cứ điều gì đó là int. 1016 00:45:14,200 --> 00:45:16,240 Nhưng điều này là trừu tượng đi ngay bây giờ. 1017 00:45:16,240 --> 00:45:19,050 Nó chỉ được đưa ra một mức độ cao tên mà nói những gì nó làm, 1018 00:45:19,050 --> 00:45:21,780 đó là tuyệt vời vì nó rất trực quan để đọc. 1019 00:45:21,780 --> 00:45:24,710 Và nếu tôi làm quan tâm những gì bên dưới mui xe, hãy để tôi di chuyển xuống. 1020 00:45:24,710 --> 00:45:27,140 Và đó là một chút đáng sợ lúc đầu, đặc biệt là 1021 00:45:27,140 --> 00:45:29,470 nếu đây là chương trình đầu tiên của bạn, nhưng chúng ta hãy có một cái nhìn. 1022 00:45:29,470 --> 00:45:32,860 >> Tôi không còn nói, void, vì thực ra chức năng, 1023 00:45:32,860 --> 00:45:34,777 giống như GetString, có thể trả lại một giá trị với tôi. 1024 00:45:34,777 --> 00:45:36,610 Họ không chỉ có để in ra màn hình, 1025 00:45:36,610 --> 00:45:38,410 họ thực sự có thể bàn tay tôi điều gì đó. 1026 00:45:38,410 --> 00:45:41,535 Và trong khi trước PrintName, Tôi không cần bất cứ điều gì trở lại. 1027 00:45:41,535 --> 00:45:44,160 Tôi cần các tác dụng phụ của một cái gì đó hiển thị trên màn hình, 1028 00:45:44,160 --> 00:45:46,570 nhưng tôi không cần một con người để đưa cho tôi một cái gì đó trở lại. 1029 00:45:46,570 --> 00:45:48,840 Ở đây, với GetPositiveInt, như với getInt, 1030 00:45:48,840 --> 00:45:50,640 Tôi muốn được trao cho một cái gì đó trở lại. 1031 00:45:50,640 --> 00:45:53,220 Vì vậy, tôi nói không, void, on line 23, nhưng int, 1032 00:45:53,220 --> 00:45:55,570 mà nói, chức năng này rằng tôi đang viết, 1033 00:45:55,570 --> 00:45:58,860 gọi GetPositiveInt sẽ tay tôi trở lại một số nguyên, không có gì, 1034 00:45:58,860 --> 00:45:59,890 không có hiệu lực. 1035 00:45:59,890 --> 00:46:03,280 >> Trong khi đó, nó sẽ mất không đầu vào, vì vậy tôi đã, loại, ngược lại nó. 1036 00:46:03,280 --> 00:46:08,280 Tôi không đưa ra bất kỳ GetPositiveInt đầu vào, tôi muốn nó để cho tôi sản lượng của nó. 1037 00:46:08,280 --> 00:46:09,800 Và sau đó những gì sẽ xảy ra? 1038 00:46:09,800 --> 00:46:11,640 Vì vậy, đây là cách tôi có thể khai báo một biến. 1039 00:46:11,640 --> 00:46:15,090 Tôi đã thực hiện nó bên ngoài vòng lặp, vì lý do chúng ta sẽ dần dần thấy, 1040 00:46:15,090 --> 00:46:17,700 nhưng điều này chỉ mang lại cho tôi 32 bit được gọi là, n, 1041 00:46:17,700 --> 00:46:20,952 và tôi đã xác định trước chúng để lưu trữ số nguyên. 1042 00:46:20,952 --> 00:46:23,660 Và đây đó, làm trong khi xây dựng, và đây là lý do tại sao nó rất hữu ích. 1043 00:46:23,660 --> 00:46:26,700 Nghĩa đen làm điều này, trong khi n là ít hơn 1. 1044 00:46:26,700 --> 00:46:28,030 Vì vậy, chúng ta hãy xem những gì sẽ xảy ra. 1045 00:46:28,030 --> 00:46:30,760 Tôi in ra, xin vui lòng cho tôi một int tích cực. 1046 00:46:30,760 --> 00:46:34,300 Sau đó tôi nhận được một int, sử dụng CS50 của chức năng và được lưu trữ trong n. 1047 00:46:34,300 --> 00:46:38,990 >> Và sau đó, những dòng mã có lẽ được thực thi tiếp theo, một cách logic? 1048 00:46:38,990 --> 00:46:41,890 Những dòng số? 1049 00:46:41,890 --> 00:46:42,571 Yeah, vì vậy 31. 1050 00:46:42,571 --> 00:46:45,320 Bạn sẽ không biết điều này cho đến khi bạn đã được kể hoặc loại suy ra nó, 1051 00:46:45,320 --> 00:46:45,986 nhưng đó là sự thật. 1052 00:46:45,986 --> 00:46:48,280 Nó đi trên xuống dưới và sau đó giữ lặp đi lặp lại. 1053 00:46:48,280 --> 00:46:55,840 Vì vậy, nếu tôi đã gõ vào tiếng nói, số tiêu cực 1, n là ít tiêu cực hơn 1? 1054 00:46:55,840 --> 00:46:56,340 Yeah. 1055 00:46:56,340 --> 00:46:58,470 Bởi vì tiêu cực 1 là ít hơn 1. 1056 00:46:58,470 --> 00:46:59,510 Vì vậy, những gì sẽ xảy ra? 1057 00:46:59,510 --> 00:47:03,260 Tôi sẽ làm điều này trong khi n là nhỏ hơn 1, 1058 00:47:03,260 --> 00:47:05,760 do đó, tôi sẽ quay lại dòng 28. 1059 00:47:05,760 --> 00:47:09,530 >> Và mỗi time-- và chúng ta hãy chạy this-- làm cho chức năng 1 để biên dịch nó, 1060 00:47:09,530 --> 00:47:11,340 và bây giờ chấm giảm chức năng 1. 1061 00:47:11,340 --> 00:47:14,280 Nếu tôi gõ tiêu cực 1, đó là sẽ tiếp tục hét lên với em 1062 00:47:14,280 --> 00:47:17,530 cho đến khi tôi hợp tác vì mỗi các yếu tố đầu vào của tôi là ít hơn 1 1063 00:47:17,530 --> 00:47:20,070 và nếu đó là trong khi ít hơn 1, Tôi sẽ tiếp tục làm điều này. 1064 00:47:20,070 --> 00:47:24,240 Nếu cuối cùng tôi đã cung cấp cho nó một số như 50, may mắn thay, nó nói, cảm ơn cho 50. 1065 00:47:24,240 --> 00:47:24,970 Tại sao? 1066 00:47:24,970 --> 00:47:30,640 Bởi vì ngay sau khi n không phải là ít hơn 1, tôi ngưng việc bị mắc kẹt trong vòng lặp này, 1067 00:47:30,640 --> 00:47:33,840 và từ khóa mới này ngày hôm nay, Bù lại, theo nghĩa đen nào đó. 1068 00:47:33,840 --> 00:47:36,800 Vì vậy, tôi đã chỉ cần thực hiện, trong một ý nghĩa, tương đương với GetString, 1069 00:47:36,800 --> 00:47:40,590 nơi tôi đang trả lại cho bất cứ ai đang sử dụng cho tôi, một số giá trị. 1070 00:47:40,590 --> 00:47:42,820 Nó không phải là một chuỗi, nó là một int. 1071 00:47:42,820 --> 00:47:44,990 Vì vậy, một đơn giản, nhanh chóng Ví dụ, nhưng chúng tôi sẽ sớm 1072 00:47:44,990 --> 00:47:47,930 thấy một số tinh vi hơn phiên bản vẫn còn. 1073 00:47:47,930 --> 00:47:53,882 Trong thực tế, chúng ta hãy nhìn vào một một số, được gọi là return.c. 1074 00:47:53,882 --> 00:47:55,590 Và điều này thực sự một chút đơn giản. 1075 00:47:55,590 --> 00:47:59,010 Vì vậy, mục đích của chương trình này trong life-- hãy biên dịch và chạy nó, 1076 00:47:59,010 --> 00:48:03,090 do đó hãy trở lại, chấm slash, thông báo return-- 1077 00:48:03,090 --> 00:48:05,530 chương trình chỉ đơn giản là hình khối giá trị 2. 1078 00:48:05,530 --> 00:48:08,410 Nó khá ngu ngốc, thật khó code, nó không mất bất kỳ đầu vào, 1079 00:48:08,410 --> 00:48:12,220 nhưng nó chứng minh khác chức năng mà tôi đã viết bản thân mình. 1080 00:48:12,220 --> 00:48:15,760 Vì vậy, ở đây, tôi đã tuyên bố một biến, được gọi là x, kiểu int, 1081 00:48:15,760 --> 00:48:17,840 bằng số 2, hoàn toàn tùy ý. 1082 00:48:17,840 --> 00:48:19,530 Đây chỉ là một số in ấn mịn. 1083 00:48:19,530 --> 00:48:23,070 Nó nói x là bây giờ, và như vậy chẳng hạn, Cubing dot dot dot. 1084 00:48:23,070 --> 00:48:26,390 Và điều kỳ diệu là dường như ở dòng 21. 1085 00:48:26,390 --> 00:48:30,120 Tôi gọi một chức năng gọi là, khối lập phương, Tôi đưa cho nó một tờ giấy 1086 00:48:30,120 --> 00:48:32,890 với số 2 được viết trên đó, và những gì giá trị, toán học, 1087 00:48:32,890 --> 00:48:34,860 Tôi muốn thoát ra khỏi nó? 1088 00:48:34,860 --> 00:48:36,570 Cũng như một kiểm tra sự tỉnh táo? 1089 00:48:36,570 --> 00:48:37,070 8. 1090 00:48:37,070 --> 00:48:37,570 Phải không? 1091 00:48:37,570 --> 00:48:40,160 Tôi muốn 2 nhỏ hinh khôi trở lại, từ 2 đến sức mạnh của 3, do đó 8 trở lại. 1092 00:48:40,160 --> 00:48:42,570 >> Vì vậy, nơi được khối lập phương thực hiện? 1093 00:48:42,570 --> 00:48:44,349 Vâng, việc thông báo nó được thực hiện ở đây. 1094 00:48:44,349 --> 00:48:47,140 Và giống như trước đây, một cách logic, mặc dù cú pháp có lẽ là 1095 00:48:47,140 --> 00:48:49,320 rất mới với nhiều bạn, Tôi muốn chức năng này 1096 00:48:49,320 --> 00:48:51,780 để bàn tay tôi lại một tờ giấy với một int vào nó. 1097 00:48:51,780 --> 00:48:53,990 Vì vậy, tôi có một int, các tên là tùy tiện, 1098 00:48:53,990 --> 00:48:55,530 nhưng thuận tiện gọi là khối lập phương. 1099 00:48:55,530 --> 00:48:58,430 Các đầu vào cho nó, là n gõ số nguyên, do đó 1100 00:48:58,430 --> 00:49:00,800 làm thế nào tôi có thể vượt qua trong số 2 trên một tờ giấy. 1101 00:49:00,800 --> 00:49:03,910 Và sau đó nó quay ra C hỗ trợ toán học, do đó bạn không có x cho lần, 1102 00:49:03,910 --> 00:49:06,680 bạn chỉ cần sử dụng dấu hoa thị cho phép nhân. 1103 00:49:06,680 --> 00:49:11,070 Và điều này trả về n lần n lần n, mà chỉ đơn giản là một giá trị giống tiêu. 1104 00:49:11,070 --> 00:49:12,840 >> Vì vậy, chúng ta đi đâu với tất cả những điều này? 1105 00:49:12,840 --> 00:49:14,570 Điều này chắc chắn là một tour du lịch lốc, yên tâm, 1106 00:49:14,570 --> 00:49:16,410 mà trong các siêu phần và trong vấn đề thiết lập 1, 1107 00:49:16,410 --> 00:49:18,368 bạn sẽ được đi qua tất cả điều này tất cả các chi tiết. 1108 00:49:18,368 --> 00:49:22,490 Và trong vấn đề thiết lập 1, chúng tôi sẽ chuyển tiếp từ thế giới đồ họa của Scratch 1109 00:49:22,490 --> 00:49:25,640 một cái gì đó nhiều hơn dòng lệnh trong C. Nhưng chúng ta sẽ rút ra cảm hứng 1110 00:49:25,640 --> 00:49:27,680 từ đây trò chơi này từ năm qua, trong đó 1111 00:49:27,680 --> 00:49:31,591 sử dụng C và các phiên bản tiêu chuẩn của p tập mà bạn sẽ thực hiện kim tự tháp của Mario. 1112 00:49:31,591 --> 00:49:34,340 Và trong phiên bản của hacker của p set, nếu bạn lựa chọn để bầu ra, 1113 00:49:34,340 --> 00:49:38,280 bạn sẽ thực hiện nhiều hơn một chút thách thức kim tự tháp với hai đỉnh. 1114 00:49:38,280 --> 00:49:41,239 Bạn cũng sẽ thực hiện một Thuật toán, thuật toán tham lam. 1115 00:49:41,239 --> 00:49:43,030 Hóa ra có của một số logic thú vị 1116 00:49:43,030 --> 00:49:45,640 đằng sau quá trình chạy một trạm thu ngân 1117 00:49:45,640 --> 00:49:47,410 và thực sự trao một người nào đó thay đổi trở lại. 1118 00:49:47,410 --> 00:49:50,410 Có một thuật toán khá đơn giản, bạn thậm chí có thể 1119 00:49:50,410 --> 00:49:53,576 nắm bắt trực giác đầu tiên khi bạn đọc it-- nhận ra đó là những gì tôi đã luôn luôn 1120 00:49:53,576 --> 00:49:57,110 thực hiện bất cứ lúc nào tôi đã cho một người nào đó một số back-- tiền đó cho phép bạn luôn luôn 1121 00:49:57,110 --> 00:50:00,679 giảm thiểu số lượng tiền giấy hoặc tiền kim loại 1122 00:50:00,679 --> 00:50:02,220 rằng bạn đang trả lại cho người sử dụng. 1123 00:50:02,220 --> 00:50:04,610 Và điều này, tất nhiên, là hấp dẫn bởi vì nếu bạn đi đến CVS hoặc có điều gì, 1124 00:50:04,610 --> 00:50:06,430 bạn không muốn trở thành tay một bó toàn bộ những người 1125 00:50:06,430 --> 00:50:07,596 hoặc một bó toàn bộ các đồng xu. 1126 00:50:07,596 --> 00:50:10,120 Bạn muốn con số thấp nhất tiền xu, có lẽ, có thể. 1127 00:50:10,120 --> 00:50:13,070 >> Cuối cùng, bạn cũng sẽ được thử thách đến lĩnh trong thế giới của nước 1128 00:50:13,070 --> 00:50:17,220 và thực sự có được một sự đánh giá cho một ánh xạ giữa lãi suất của dòng chảy, 1129 00:50:17,220 --> 00:50:19,890 của thích, nước trong một vòi sen, chỉ cần bao nhiêu nước được sử dụng. 1130 00:50:19,890 --> 00:50:22,640 Và ám chỉ trong đó, sẽ được Clip này ở đây, 1131 00:50:22,640 --> 00:50:24,840 mà chúng ta sẽ kết thúc vào cho chỉ cần 60 giây, mà 1132 00:50:24,840 --> 00:50:29,070 vẽ nên một bức tranh về dòng chảy thấp tắm đứng. 1133 00:50:29,070 --> 00:50:30,886 >> [VIDEO PLAYBACK] 1134 00:50:30,886 --> 00:50:31,385 -Được rồi. 1135 00:50:31,385 --> 00:50:32,774 Tôi có mọi thứ ở đây. 1136 00:50:32,774 --> 00:50:35,800 Tôi đã nhận các Cyclone F Series, Hydra, Jetflow, Stockholm 1137 00:50:35,800 --> 00:50:37,660 Supersteam, bạn tên nó. 1138 00:50:37,660 --> 00:50:39,265 >> -Và Những gì bạn đề nghị? 1139 00:50:39,265 --> 00:50:40,460 >> Được -Điều gì bạn đang tìm kiếm? 1140 00:50:40,460 --> 00:50:41,300 >> Người đàn ông -Power. 1141 00:50:41,300 --> 00:50:42,285 Power. 1142 00:50:42,285 --> 00:50:42,910 -like Silkwood. 1143 00:50:42,910 --> 00:50:44,520 -đó Là đối với bức xạ. 1144 00:50:44,520 --> 00:50:46,335 -Đúng thế. 1145 00:50:46,335 --> 00:50:48,275 -Bây Giờ cái gì đây? 1146 00:50:48,275 --> 00:50:49,704 -đó Là Commando 450. 1147 00:50:49,704 --> 00:50:50,620 Tôi không bán mà một. 1148 00:50:50,620 --> 00:50:51,700 >> -Nhưng Đó là những gì chúng ta muốn. 1149 00:50:51,700 --> 00:50:52,680 Đó là một commando 450. 1150 00:50:52,680 --> 00:50:53,882 >> -Không Tin tôi. 1151 00:50:53,882 --> 00:50:55,090 Nó chỉ được sử dụng trong các rạp xiếc. 1152 00:50:55,090 --> 00:50:56,512 Nó cho voi. 1153 00:50:56,512 --> 00:50:59,356 >> -I'll Trả bất cứ điều gì. 1154 00:50:59,356 --> 00:51:01,252 >> -Điều Gì về Jerry? 1155 00:51:01,252 --> 00:51:02,760 >> -Anh Không thể xử lý đó. 1156 00:51:02,760 --> 00:51:04,910 Anh ấy là tinh tế. 1157 00:51:04,910 --> 00:51:05,750 Oh yeah. 1158 00:51:05,750 --> 00:51:36,737 1159 00:51:36,737 --> 00:51:37,320 [END PLAYBACK] 1160 00:51:37,320 --> 00:51:37,700 DAVID Malan J: Tất cả các quyền. 1161 00:51:37,700 --> 00:51:38,820 Đó là nếu cho CS50. 1162 00:51:38,820 --> 00:51:40,050 Chúng tôi sẽ gặp bạn vào tuần tới. 1163 00:51:40,050 --> 00:51:45,910 1164 00:51:45,910 --> 00:51:49,029 >> SPEAKER 1: [? Scully?], [? Ian,?] theo như dự án outro này, 1165 00:51:49,029 --> 00:51:50,362 những gì đã các bạn đưa ra? 1166 00:51:50,362 --> 00:51:51,990 >> SPEAKER 2: Vâng, chúng tôi đã đưa ra nó một loạt các tư tưởng, 1167 00:51:51,990 --> 00:51:53,250 và chúng tôi nghĩ rằng cách tốt nhất đối với: 1168 00:51:53,250 --> 00:51:53,660 >> SPEAKER 3: Tôi May? 1169 00:51:53,660 --> 00:51:54,326 >> SPEAKER 2: Yeah. 1170 00:51:54,326 --> 00:51:56,360 Bằng mọi cách, thực sự. 1171 00:51:56,360 --> 00:51:59,425 >> SPEAKER 3: Vì vậy, tôi nghĩ rằng chúng ta có thể tóm tắt ý tưởng của chúng tôi 1172 00:51:59,425 --> 00:52:05,450 cho outros với một không có gì word--. 1173 00:52:05,450 --> 00:52:08,950 1174 00:52:08,950 --> 00:52:10,409 >> DAVID Malan J: Không có gì? 1175 00:52:10,409 --> 00:52:11,200 SPEAKER 3: Không có gì. 1176 00:52:11,200 --> 00:52:12,990 DAVID Malan J: Vậy nghĩa là gì? 1177 00:52:12,990 --> 00:52:16,260 SPEAKER 3: Các outros là về không có gì. 1178 00:52:16,260 --> 00:52:21,720 SPEAKER 2: Vâng, tôi có nghĩa là, trong triết học, Tôi có nghĩa là, không có gì luôn luôn là một cái gì đó. 1179 00:52:21,720 --> 00:52:24,200 SPEAKER 1: Vậy what's-- tiền đề là những gì? 1180 00:52:24,200 --> 00:52:25,720 SPEAKER 3: Vì vậy, nó giống như cuộc sống. 1181 00:52:25,720 --> 00:52:26,680 ĐƯỢC. 1182 00:52:26,680 --> 00:52:28,294 Bạn đã làm gì hôm nay? 1183 00:52:28,294 --> 00:52:31,811 >> DAVID Malan J: Tôi đứng dậy, ăn sáng, và đến làm việc. 1184 00:52:31,811 --> 00:52:34,056 >> SPEAKER 3: Đó là một outro. 1185 00:52:34,056 --> 00:52:36,806 SPEAKER 2: Nhưng, tôi có nghĩa là, không nên một cái gì đó xảy ra với anh ta trên the-- 1186 00:52:36,806 --> 00:52:37,889 SPEAKER 3: Không, không, không, không. 1187 00:52:37,889 --> 00:52:40,220 Chẳng có gì xảy ra. 1188 00:52:40,220 --> 00:52:42,910 >> SPEAKER 1: Vậy tại sao chúng ta lại xem? 1189 00:52:42,910 --> 00:52:46,956 >> SPEAKER 3: Vì nó là một outro cho CS50. 1190 00:52:46,956 --> 00:52:48,652 >> DAVID Malan J: Chưa. 1191 00:52:48,652 --> 00:52:49,151