1 00:00:00,000 --> 00:00:02,000 [Powered by Google Translate] [Phần 4] [Ít thoải mái] 2 00:00:02,000 --> 00:00:04,000 [Nate hardison] [Đại học Harvard] 3 00:00:04,000 --> 00:00:07,000 [Đây là CS50.] [CS50.TV] 4 00:00:07,000 --> 00:00:10,000 >> Được rồi, chào đón trở lại phần. 5 00:00:10,000 --> 00:00:13,000 Trong phần tuần này, chúng tôi đang đi để làm một vài điều. 6 00:00:13,000 --> 00:00:17,000 Chúng tôi sẽ Đặt vấn đề recap 2, 7 00:00:17,000 --> 00:00:20,000 đó là vấn đề tập Caesar và Vigenère. 8 00:00:20,000 --> 00:00:23,000 Và sau đó chúng tôi sẽ đi sâu vào xem xét Câu hỏi nhanh 0 9 00:00:23,000 --> 00:00:26,000 và dành một chút thời gian recapping những gì chúng tôi đã nói chuyện về 10 00:00:26,000 --> 00:00:30,000 trong mỗi của các bài giảng cho đến nay, và chúng tôi cũng sẽ làm một vài vấn đề 11 00:00:30,000 --> 00:00:32,000 từ câu đố của năm trước. 12 00:00:32,000 --> 00:00:36,000 Bằng cách đó bạn có một cách tốt để chuẩn bị cho điều đó. 13 00:00:36,000 --> 00:00:40,000 >> Để bắt đầu, tôi đã khởi động một vài giải pháp tốt 14 00:00:40,000 --> 00:00:45,000 cho các thiết lập vấn đề trước đây, Problem Set 2, vào không gian này. 15 00:00:45,000 --> 00:00:48,000 Nếu bạn tất cả các liên kết này, 16 00:00:48,000 --> 00:00:53,000 và nếu bạn nhấp vào tên của tôi và nhấp vào trên phiên bản đầu tiên của tôi 17 00:00:53,000 --> 00:00:56,000 bạn sẽ thấy caesar.c, đó là chính xác những gì tôi đang nhìn. 18 00:00:56,000 --> 00:01:00,000 Chúng ta hãy nói về điều này thực sự nhanh chóng. 19 00:01:00,000 --> 00:01:02,000 Đây chỉ là một giải pháp mẫu. 20 00:01:02,000 --> 00:01:05,000 Điều này không nhất thiết phải là giải pháp hoàn hảo. 21 00:01:05,000 --> 00:01:08,000 Có nhiều cách khác nhau để viết này, 22 00:01:08,000 --> 00:01:10,000 nhưng có một vài điều mà tôi muốn làm nổi bật 23 00:01:10,000 --> 00:01:13,000 mà tôi thấy như tôi đã phân loại, lỗi thường gặp mà tôi nghĩ rằng 24 00:01:13,000 --> 00:01:18,000 giải pháp này làm một công việc rất tốt xử lý. 25 00:01:18,000 --> 00:01:22,000 >> Việc đầu tiên là có một số loại bình luận tiêu đề ở đầu trang. 26 00:01:22,000 --> 00:01:25,000 Trên các tuyến đường 1 đến 7, bạn thấy các chi tiết, 27 00:01:25,000 --> 00:01:28,000 chính xác những gì chương trình này đang làm. 28 00:01:28,000 --> 00:01:32,000 Một tiêu chuẩn thực hành tốt khi bạn đang viết mã C 29 00:01:32,000 --> 00:01:35,000 không phân biệt nếu chương trình của bạn được chứa trong một tập tin duy nhất hoặc 30 00:01:35,000 --> 00:01:38,000 cho dù đó là phân chia trên nhiều tập tin là có một số loại 31 00:01:38,000 --> 00:01:40,000 định hướng bình luận ở đầu trang. 32 00:01:40,000 --> 00:01:43,000 Đây cũng là những người đi ra ngoài và viết code trong thế giới thực. 33 00:01:43,000 --> 00:01:47,000 Đây là nơi mà họ sẽ đặt thông tin bản quyền. 34 00:01:47,000 --> 00:01:50,000 Dưới đây là bao gồm #. 35 00:01:50,000 --> 00:01:55,000 On line 16 # xác định, mà chúng tôi sẽ trở lại trong chỉ là một chút. 36 00:01:55,000 --> 00:01:59,000 Và sau đó một khi chức năng bắt đầu, bắt đầu một lần chính, 37 00:01:59,000 --> 00:02:03,000 bởi vì chương trình này đã được tất cả chứa trong một chức năng duy nhất 38 00:02:03,000 --> 00:02:09,000 Điều đầu tiên điều đó xảy ra và điều này là rất thành ngữ và điển hình của một chương trình C 39 00:02:09,000 --> 00:02:14,000 mà mất trong dòng lệnh đối số-là nó ngay lập tức kiểm tra 40 00:02:14,000 --> 00:02:18,000 >> số lượng đối số, argc. 41 00:02:18,000 --> 00:02:24,000 Ở đây chúng tôi thấy rằng chương trình này được mong đợi 2 đối số chính xác. 42 00:02:24,000 --> 00:02:27,000 Hãy nhớ rằng có rằng đối số đầu tiên đó là đặc biệt 43 00:02:27,000 --> 00:02:29,000 đó là luôn luôn tên của chương trình đang được chạy, 44 00:02:29,000 --> 00:02:31,000 tên của các tập tin thực thi. 45 00:02:31,000 --> 00:02:36,000 Và do đó, điều này không ngăn cản người sử dụng chạy chương trình 46 00:02:36,000 --> 00:02:42,000 với các đối số nhiều hơn hoặc ít hơn. 47 00:02:42,000 --> 00:02:44,000 Lý do chúng tôi muốn kiểm tra quyền này là bởi vì 48 00:02:44,000 --> 00:02:52,000 chúng ta không thể thực sự truy cập mảng này argv ngay tại đây đáng tin cậy 49 00:02:52,000 --> 00:02:55,000 cho đến khi chúng tôi đã kiểm tra để xem nó là lớn như thế nào. 50 00:02:55,000 --> 00:02:58,000 >> Một trong những lỗi phổ biến tôi thấy là mọi người ngay lập tức sẽ đi vào 51 00:02:58,000 --> 00:03:01,000 và lấy argv [1]. 52 00:03:01,000 --> 00:03:06,000 Họ sẽ lấy tham số quan trọng của mảng và làm các việc để tôi kiểm tra trên đó, 53 00:03:06,000 --> 00:03:11,000 và sau đó họ sẽ làm bài kiểm tra cho argc cũng như các thử nghiệm tiếp theo, 54 00:03:11,000 --> 00:03:16,000 có hoặc không có tham số đầu tiên thực sự là một số nguyên cùng một lúc, 55 00:03:16,000 --> 00:03:20,000 và điều đó không làm việc vì trong trường hợp mà không có đối số cung cấp 56 00:03:20,000 --> 00:03:26,000 bạn sẽ được lấy một luận cứ không có hoặc cố gắng để lấy một trong đó là không có. 57 00:03:26,000 --> 00:03:29,000 >> Điều lớn khác mà bạn nên chú ý là 58 00:03:29,000 --> 00:03:32,000 bạn luôn muốn in ra một số loại thông báo lỗi hữu ích 59 00:03:32,000 --> 00:03:34,000 cho người sử dụng để định hướng cho chúng. 60 00:03:34,000 --> 00:03:37,000 Tôi chắc chắn rằng bạn đã tất cả các chương trình chạy, nơi tất cả các của một bất ngờ nó bị treo, 61 00:03:37,000 --> 00:03:41,000 và bạn nhận được hộp thoại này vô lý nhỏ bật lên và nói 62 00:03:41,000 --> 00:03:44,000 một cái gì đó khủng khiếp khó hiểu và có thể cung cấp cho bạn một mã lỗi hoặc một cái gì đó như thế 63 00:03:44,000 --> 00:03:47,000 mà làm cho không có ý nghĩa. 64 00:03:47,000 --> 00:03:50,000 Đây là nơi mà bạn thực sự muốn cung cấp một cái gì đó hữu ích 65 00:03:50,000 --> 00:03:54,000 và nhắm mục tiêu cho người sử dụng do đó mà khi chạy nó họ đi "Oh," khuôn mặt lòng bàn tay. 66 00:03:54,000 --> 00:03:58,000 "Tôi biết chính xác phải làm gì tôi biết làm thế nào để sửa lỗi này." 67 00:03:58,000 --> 00:04:01,000 >> Nếu bạn không in một tin nhắn, sau đó bạn kết thúc thực sự 68 00:04:01,000 --> 00:04:04,000 để lại người sử dụng để kiểm tra mã nguồn của bạn 69 00:04:04,000 --> 00:04:07,000 để tìm ra những gì đã đi sai. 70 00:04:07,000 --> 00:04:11,000 Ngoài ra còn có một số lần mà bạn sẽ sử dụng các mã lỗi khác nhau. 71 00:04:11,000 --> 00:04:14,000 Ở đây chúng tôi chỉ được sử dụng để nói rằng có một lỗi, 72 00:04:14,000 --> 00:04:16,000 có một lỗi, đã có một lỗi. 73 00:04:16,000 --> 00:04:20,000 Lớn hơn các chương trình, thường chương trình được gọi là các chương trình khác, 74 00:04:20,000 --> 00:04:25,000 sẽ trở lại một số loại mã lỗi đặc biệt trong các kịch bản khác nhau 75 00:04:25,000 --> 00:04:28,000 để lập trình truyền đạt những gì bạn làm khác 76 00:04:28,000 --> 00:04:32,000 chỉ cần sử dụng một thông điệp tốt đẹp Tiếng Anh. 77 00:04:32,000 --> 00:04:35,000 Cool. 78 00:04:35,000 --> 00:04:37,000 Khi chúng tôi làm việc, bạn có thể thấy chúng tôi kéo ra chìa khóa. 79 00:04:37,000 --> 00:04:40,000 Chúng tôi thử nghiệm để xem nếu khoá phù hợp. 80 00:04:40,000 --> 00:04:42,000 Chúng tôi nhận được một tin nhắn từ người sử dụng. 81 00:04:42,000 --> 00:04:46,000 Lý do chúng tôi làm điều đó trong này làm trong khi vòng lặp và điều này là một cái gì đó mà chúng ta sẽ 82 00:04:46,000 --> 00:04:50,000 một chút-bit nhưng nó chỉ ra rằng nếu bạn gõ soát D 83 00:04:50,000 --> 00:04:54,000 khi bạn nhận được dấu nhắc rằng GetString trên thiết bị đầu cuối 84 00:04:54,000 --> 00:04:59,000 những gì mà thực hiện là nó sẽ gửi một ký tự đặc biệt 85 00:04:59,000 --> 00:05:01,000 cho chương trình. 86 00:05:01,000 --> 00:05:05,000 Nó được gọi là ELF hoặc kết thúc của tập tin ký tự. 87 00:05:05,000 --> 00:05:08,000 Và trong trường hợp đó, chuỗi tin nhắn của chúng tôi sẽ được null, 88 00:05:08,000 --> 00:05:14,000 do đó, điều này không phải là một cái gì đó chúng tôi kiểm tra trong vấn đề thiết lập chính nó. 89 00:05:14,000 --> 00:05:17,000 >> Nhưng khi chúng tôi đi về, bây giờ mà chúng tôi đã bắt đầu nói về con trỏ 90 00:05:17,000 --> 00:05:21,000 và năng động, cấp phát bộ nhớ trên heap, 91 00:05:21,000 --> 00:05:25,000 kiểm tra cho null bất cứ khi nào bạn có một chức năng mà có thể 92 00:05:25,000 --> 00:05:30,000 trở về null như một giá trị là cái gì mà bạn sẽ muốn có được trong thói quen làm. 93 00:05:30,000 --> 00:05:33,000 Này là ở đây chủ yếu để minh họa. 94 00:05:33,000 --> 00:05:36,000 Nhưng khi bạn thấy GetString trong tương lai, 95 00:05:36,000 --> 00:05:41,000 Vấn đề Set 4 trên, bạn sẽ muốn giữ điều này trong tâm trí. 96 00:05:41,000 --> 00:05:44,000 Một lần nữa, điều này không phải là một vấn đề đối với vấn đề Set 3 hoặc kể từ khi chúng tôi đã không bao phủ nó. 97 00:05:44,000 --> 00:05:53,000 Cuối cùng, chúng tôi nhận được này là một phần mà chúng tôi nhận được vòng lặp mã hóa chính, 98 00:05:53,000 --> 00:05:57,000 và có một vài điều xảy ra ở đây. 99 00:05:57,000 --> 00:06:02,000 Đầu tiên, chúng ta lặp qua chuỗi toàn bộ tin nhắn. 100 00:06:02,000 --> 00:06:07,000 Ở đây chúng tôi đã giữ cuộc gọi strlen trong điều kiện, 101 00:06:07,000 --> 00:06:12,000 mà một số bạn đã chỉ ra không phải là một cách tuyệt vời để đi. 102 00:06:12,000 --> 00:06:15,000 Nó chỉ ra trong trường hợp này nó cũng không lớn, 103 00:06:15,000 --> 00:06:20,000 một phần bởi vì chúng ta đang sửa đổi các nội dung của thông điệp riêng của mình 104 00:06:20,000 --> 00:06:27,000 bên trong cho vòng lặp, do đó, nếu chúng ta có một tin nhắn dài 10 ký tự, 105 00:06:27,000 --> 00:06:32,000 lần đầu tiên chúng tôi bắt đầu cho vòng lặp strlen sẽ trả lại những gì? 106 00:06:32,000 --> 00:06:35,000 10. 107 00:06:35,000 --> 00:06:40,000 >> Nhưng nếu chúng ta sau đó sửa đổi tin nhắn, nói rằng chúng ta sửa đổi nhân vật thứ 5, 108 00:06:40,000 --> 00:06:46,000 và chúng tôi ném vào một nhân vật 0 \ ở vị trí thứ 5, 109 00:06:46,000 --> 00:06:49,000 trên lặp đi lặp lại tiếp theo strlen (message) sẽ không trả lại những gì đã làm 110 00:06:49,000 --> 00:06:52,000 lần đầu tiên chúng tôi lặp, 111 00:06:52,000 --> 00:06:56,000 nhưng thay vào đó sẽ trở lại 5 bởi vì chúng tôi đã ném trong đó terminator vô giá trị, 112 00:06:56,000 --> 00:06:59,000 và chiều dài của chuỗi được định nghĩa 113 00:06:59,000 --> 00:07:03,000 bởi vị trí đó \ 0. 114 00:07:03,000 --> 00:07:09,000 Trong trường hợp này, đây là một cách tuyệt vời để đi bởi vì chúng ta đang sửa đổi nó tại chỗ. 115 00:07:09,000 --> 00:07:13,000 Nhưng bạn có nhận thấy rằng điều này là thực sự đáng ngạc nhiên đơn giản để mã hóa 116 00:07:13,000 --> 00:07:16,000 nếu bạn có thể tính toán chính xác. 117 00:07:16,000 --> 00:07:19,000 Tất cả những gì cần thiết để kiểm tra hay không lá thư mà bạn đang tìm kiếm 118 00:07:19,000 --> 00:07:21,000 là chữ hoa hoặc chữ thường. 119 00:07:21,000 --> 00:07:24,000 >> Lý do chúng tôi chỉ phải kiểm tra cho điều đó và chúng tôi không có để kiểm tra 120 00:07:24,000 --> 00:07:27,000 là alpha trường hợp là do 121 00:07:27,000 --> 00:07:30,000 nếu một nhân vật là chữ hoa hoặc nếu nó là chữ thường 122 00:07:30,000 --> 00:07:33,000 sau đó nó chắc chắn là một ký tự chữ cái, 123 00:07:33,000 --> 00:07:38,000 vì chúng ta không có chữ số chữ hoa và chữ thường. 124 00:07:38,000 --> 00:07:41,000 Những điều khác mà chúng tôi làm và điều này là một chút khó khăn 125 00:07:41,000 --> 00:07:45,000 là chúng tôi đã sửa đổi công thức tiêu chuẩn Caesar cipher 126 00:07:45,000 --> 00:07:49,000 mà chúng tôi đã cung cấp trong vấn đề thiết lập các đặc điểm kỹ thuật. 127 00:07:49,000 --> 00:07:52,000 Có gì khác nhau ở đây là chúng ta trừ 128 00:07:52,000 --> 00:07:58,000 trong trường hợp vốn chữ hoa A, sau đó chúng tôi đã thêm A hoa 129 00:07:58,000 --> 00:08:02,000 sao ở cuối. 130 00:08:02,000 --> 00:08:05,000 >> Tôi biết một số các bạn đã làm điều này trong mã của bạn. 131 00:08:05,000 --> 00:08:09,000 Có phải bất kỳ của bạn làm điều này trong bản đệ trình của bạn? 132 00:08:09,000 --> 00:08:13,000 Bạn đã làm điều này. Bạn có thể giải thích điều này không, Sahb? 133 00:08:13,000 --> 00:08:18,000 Bằng cách trừ nó ra, bởi vì bạn đã làm một mod ngay sau khi nó, 134 00:08:18,000 --> 00:08:21,000 bạn phải lấy nó ra, để cách bạn nhận được [ho] vị trí. 135 00:08:21,000 --> 00:08:25,000 Và sau đó bằng cách thêm nó trở lại sau đó, bạn chuyển qua một trong những bạn muốn. 136 00:08:25,000 --> 00:08:27,000 Yeah, chính xác. 137 00:08:27,000 --> 00:08:32,000 Sahb nói là khi chúng ta muốn thêm 138 00:08:32,000 --> 00:08:36,000 tin nhắn của chúng tôi và chìa khóa của chúng tôi lại với nhau 139 00:08:36,000 --> 00:08:42,000 và sau đó mod, mod NUM_LETTERS, 140 00:08:42,000 --> 00:08:50,000 nếu chúng ta không quy mô thông điệp của chúng tôi vào trong phạm vi 0 đến 25 thích hợp đầu tiên, 141 00:08:50,000 --> 00:08:54,000 sau đó chúng tôi có thể kết thúc nhận được một số thực sự lạ 142 00:08:54,000 --> 00:08:59,000 bởi vì các giá trị mà chúng tôi đang tìm kiếm tại khi chúng ta nhìn vào tin nhắn [i], 143 00:08:59,000 --> 00:09:03,000 khi chúng ta nhìn vào các ký tự thứ i của tin nhắn đồng bằng văn bản của chúng tôi, 144 00:09:03,000 --> 00:09:08,000 là một giá trị một nơi nào đó trong phạm vi 65 đến 122 145 00:09:08,000 --> 00:09:13,000 dựa trên các giá trị ASCII chữ hoa A đến chữ thường z. 146 00:09:13,000 --> 00:09:18,000 Và như vậy khi mod nó bởi 26 hoặc NUM_LETTERS, 147 00:09:18,000 --> 00:09:23,000 vì đó là của chúng tôi # xác định ở phía trên bên phải lên đây, 148 00:09:23,000 --> 00:09:28,000 đó là sẽ cung cấp cho chúng tôi một giá trị trong khoảng 0 đến 25, 149 00:09:28,000 --> 00:09:30,000 và chúng ta cần một cách để sau đó quy mô trở lại 150 00:09:30,000 --> 00:09:32,000 và nhận được nó trong phạm vi ASCII thích hợp. 151 00:09:32,000 --> 00:09:36,000 Cách dễ nhất để làm điều đó là chỉ cần quy mô tất cả mọi thứ xuống 152 00:09:36,000 --> 00:09:39,000 vào phạm vi 0 đến 25 để bắt đầu với, 153 00:09:39,000 --> 00:09:43,000 và sau đó chuyển tất cả mọi thứ trở lại ở cuối. 154 00:09:43,000 --> 00:09:46,000 >> Một lỗi phổ biến mà tôi thấy mọi người chạy vào là 155 00:09:46,000 --> 00:09:50,000 nếu bạn không thực sự làm rộng này ngay lập tức 156 00:09:50,000 --> 00:09:53,000 và bạn thêm tin nhắn và khóa lại với nhau và bạn thêm chúng, nói, 157 00:09:53,000 --> 00:09:58,000 vào một biến char, vấn đề với điều đó 158 00:09:58,000 --> 00:10:01,000 kể từ khi tin nhắn [i] là một số lượng tương đối lớn để bắt đầu với 159 00:10:01,000 --> 00:10:05,000 nhớ nó ít nhất 65 nếu nó là một chữ hoa nhân vật 160 00:10:05,000 --> 00:10:09,000 nếu bạn có một chìa khóa lớn, nói rằng, một cái gì đó như 100, 161 00:10:09,000 --> 00:10:13,000 và bạn thêm những 2 lại với nhau thành một char ký bạn sẽ nhận được một tràn. 162 00:10:13,000 --> 00:10:17,000 Bạn sẽ nhận được một giá trị lớn hơn 127, 163 00:10:17,000 --> 00:10:22,000 đó là giá trị lớn nhất mà một biến char có thể giữ. 164 00:10:22,000 --> 00:10:26,000 Một lần nữa, đó là lý do tại sao bạn muốn làm được một điều để bắt đầu với. 165 00:10:26,000 --> 00:10:29,000 Một số người xung quanh trường hợp đó bằng cách làm một nếu khác và thử nghiệm 166 00:10:29,000 --> 00:10:33,000 để xem nếu nó sẽ tràn trước khi làm điều đó, 167 00:10:33,000 --> 00:10:36,000 nhưng cách này được xung quanh đó. 168 00:10:36,000 --> 00:10:40,000 Và sau đó trong giải pháp này, chúng tôi in ra toàn bộ chuỗi ở cuối. 169 00:10:40,000 --> 00:10:45,000 Những người khác in ra một nhân vật tại một thời điểm. Cả hai đều là awesome. 170 00:10:45,000 --> 00:10:51,000 Tại thời điểm này, làm bạn có bất kỳ câu hỏi nào, bất kỳ bình luận nào về điều này? 171 00:10:51,000 --> 00:10:56,000 Những điều bạn thích, những điều bạn không thích? 172 00:10:56,000 --> 00:10:58,000 >> Tôi có một câu hỏi. 173 00:10:58,000 --> 00:11:01,000 Có lẽ tôi bị mất nó trong lời giải thích của bạn, nhưng làm thế nào để chương trình này 174 00:11:01,000 --> 00:11:07,000 bỏ qua không gian để kết nối chìa khóa để dài của văn bản? 175 00:11:07,000 --> 00:11:10,000 Đây chỉ là Caesar cơ yếu. >> Ồ, xin lỗi, yeah. 176 00:11:10,000 --> 00:11:13,000 Yeah, chúng ta sẽ thấy. 177 00:11:13,000 --> 00:11:16,000 Trong mật mã Caesar, chúng tôi có xung quanh rằng vì 178 00:11:16,000 --> 00:11:18,000 chúng tôi chỉ lộn ký tự. 179 00:11:18,000 --> 00:11:27,000 Chúng tôi chỉ xoay họ nếu họ là chữ hoa hoặc chữ thường. 180 00:11:27,000 --> 00:11:32,000 Các bạn cảm thấy khá tốt về điều này? 181 00:11:32,000 --> 00:11:34,000 Cảm thấy tự do để sao chép này về nhà, lấy nó, 182 00:11:34,000 --> 00:11:37,000 so sánh nó với những gì bạn đã viết. 183 00:11:37,000 --> 00:11:42,000 Chắc chắn cảm thấy tự do để gửi câu hỏi về nó quá. 184 00:11:42,000 --> 00:11:46,000 Và một lần nữa, nhận ra rằng mục tiêu ở đây với vấn đề của bạn thiết lập 185 00:11:46,000 --> 00:11:50,000 là không để có được bạn để viết mã hoàn hảo cho bộ vấn đề của bạn. 186 00:11:50,000 --> 00:11:57,000 Đó là một kinh nghiệm học tập. Yeah. 187 00:11:57,000 --> 00:12:01,000 >> Quay lại do trong khi vòng lặp, nếu nó bằng null, 188 00:12:01,000 --> 00:12:06,000 nên vô giá trị chỉ có nghĩa là không có gì, họ chỉ cần nhấn Enter? 189 00:12:06,000 --> 00:12:12,000 Null là một giá trị con trỏ đặc biệt, 190 00:12:12,000 --> 00:12:17,000 và chúng tôi sử dụng null khi chúng ta muốn nói 191 00:12:17,000 --> 00:12:23,000 chúng ta có một biến con trỏ trỏ để không có gì. 192 00:12:23,000 --> 00:12:28,000 Và do đó thường có nghĩa là biến này, biến thông điệp này 193 00:12:28,000 --> 00:12:35,000 là trống rỗng, và ở đây, bởi vì chúng tôi đang sử dụng các loại đặc biệt chuỗi CS50, 194 00:12:35,000 --> 00:12:37,000 loại dây CS50 là gì? 195 00:12:37,000 --> 00:12:42,000 Bạn đã nhìn thấy những gì nó là khi David kéo lại mui xe trong bài giảng? 196 00:12:42,000 --> 00:12:44,000 Đó là một funky nó là một con trỏ, phải không? 197 00:12:44,000 --> 00:12:48,000 Được rồi, yeah >> Nó là một *. 198 00:12:48,000 --> 00:12:52,000 Và như vậy thực sự chúng ta có thể thay thế này 199 00:12:52,000 --> 00:12:56,000 ngay tại đây với thông điệp char *, 200 00:12:56,000 --> 00:13:04,000 và do đó, các chức năng GetString, nếu nó không thành công có được một chuỗi từ người dùng, 201 00:13:04,000 --> 00:13:08,000 nó không thể phân tích một chuỗi, và một trường hợp trong đó nó không thể phân tích một chuỗi 202 00:13:08,000 --> 00:13:11,000 là nếu người sử dụng các loại phần cuối của tập tin ký tự, D kiểm soát, 203 00:13:11,000 --> 00:13:17,000 mà không phải là một cái gì đó bạn thường làm, nhưng nếu điều đó xảy ra 204 00:13:17,000 --> 00:13:20,000 sau đó chức năng sẽ trở lại giá trị vô giá trị này như là một cách nói 205 00:13:20,000 --> 00:13:23,000 "Này, tôi không nhận được một chuỗi". 206 00:13:23,000 --> 00:13:27,000 Điều gì sẽ xảy ra nếu chúng ta không đặt tin nhắn = null, 207 00:13:27,000 --> 00:13:30,000 đó là một cái gì đó mà chúng tôi đã không được làm chưa? 208 00:13:30,000 --> 00:13:32,000 Tại sao đó sẽ là một vấn đề ở đây? 209 00:13:32,000 --> 00:13:38,000 Bởi vì tôi biết rằng chúng tôi nói chuyện một chút trong bài giảng về rò rỉ bộ nhớ. 210 00:13:38,000 --> 00:13:42,000 Yeah, chúng ta hãy làm điều đó, và chúng ta hãy xem những gì sẽ xảy ra. 211 00:13:42,000 --> 00:13:44,000 >> Câu hỏi của Basil là những gì sẽ xảy ra nếu chúng ta không thực sự có 212 00:13:44,000 --> 00:13:48,000 thông điệp này = null thử nghiệm? 213 00:13:48,000 --> 00:13:51,000 Hãy di chuyển lên đến đỉnh. 214 00:13:51,000 --> 00:13:53,000 Các bạn có thể bình luận này ra ngoài. 215 00:13:53,000 --> 00:13:55,000 Thực ra, tôi sẽ lưu nó trong bản chỉnh sửa. 216 00:13:55,000 --> 00:13:58,000 Điều này sẽ được sửa đổi 3. 217 00:13:58,000 --> 00:14:02,000 Những gì bạn sẽ phải làm gì để chạy chương trình này là bạn sẽ phải bấm vào biểu tượng thiết bị này lên đây, 218 00:14:02,000 --> 00:14:04,000 và bạn sẽ có thêm một đối số cho nó. 219 00:14:04,000 --> 00:14:10,000 Bạn sẽ phải cung cấp cho nó các tham số quan trọng vì chúng ta muốn vượt qua trong một đối số dòng lệnh. 220 00:14:10,000 --> 00:14:13,000 Ở đây tôi sẽ cung cấp cho nó số 3. Tôi thích 3. 221 00:14:13,000 --> 00:14:19,000 Bây giờ phóng to trở lại, chạy chương trình. 222 00:14:19,000 --> 00:14:24,000 Nó đang chạy, biên soạn, xây dựng. 223 00:14:24,000 --> 00:14:27,000 Ở đây chúng tôi đi. Nó chờ đợi để được nhắc nhở. 224 00:14:27,000 --> 00:14:33,000 Nếu tôi gõ một cái gì đó giống như hello-nơi đã làm điều đó đi đâu? 225 00:14:33,000 --> 00:14:38,000 Oh, chương trình của tôi đã quá lâu để chạy. Tôi đã jawing quá lâu. 226 00:14:38,000 --> 00:14:40,000 Ở đây nó đi. 227 00:14:40,000 --> 00:14:43,000 Bây giờ tôi gõ trong hello. 228 00:14:43,000 --> 00:14:46,000 Chúng tôi thấy rằng nó mã hóa một cách thích hợp. 229 00:14:46,000 --> 00:14:52,000 Bây giờ những gì sẽ xảy ra nếu chúng ta làm GetString nhanh chóng để trở về null? 230 00:14:52,000 --> 00:14:57,000 Hãy nhớ rằng, tôi đã nói rằng chúng tôi đã làm điều đó bằng cách nhấn D kiểm soát cùng một lúc. 231 00:14:57,000 --> 00:14:59,000 Tôi sẽ di chuyển lên ở đây. Chúng tôi sẽ chạy lại nó. 232 00:14:59,000 --> 00:15:01,000 Xây dựng. Nó đi. 233 00:15:01,000 --> 00:15:04,000 Bây giờ khi tôi nhấn soát D 234 00:15:04,000 --> 00:15:12,000 Tôi có dòng này nói rằng opt/sandbox50/bin/run.sh, phân đoạn lỗi. 235 00:15:12,000 --> 00:15:15,000 Bạn đã thấy rằng trước? 236 00:15:15,000 --> 00:15:17,000 >> [Sinh viên] Tại sao lại có không >>-Xin lỗi? 237 00:15:17,000 --> 00:15:20,000 [Sinh viên] Tại sao không có bãi chứa lõi trong trường hợp này? 238 00:15:20,000 --> 00:15:26,000 Các bãi chứa lõi là câu hỏi là tại sao lại có không có bãi chứa lõi ở đây? 239 00:15:26,000 --> 00:15:29,000 Câu hỏi đặt ra là có thể được, nhưng các bãi chứa lõi là một tập tin 240 00:15:29,000 --> 00:15:31,000 mà được lưu trữ trên ổ đĩa cứng. 241 00:15:31,000 --> 00:15:34,000 Trong trường hợp này, chúng tôi đã vô hiệu hóa bãi lõi 242 00:15:34,000 --> 00:15:37,000 trên máy chủ chạy để chúng tôi không có người seg đứt gãy 243 00:15:37,000 --> 00:15:40,000 và xây dựng tấn bãi lõi. 244 00:15:40,000 --> 00:15:46,000 Nhưng bạn có thể nhận được một. 245 00:15:46,000 --> 00:15:48,000 Bãi lõi là các loại điều mà bạn thường có thể vô hiệu hóa, 246 00:15:48,000 --> 00:15:52,000 và đôi khi bạn. 247 00:15:52,000 --> 00:15:55,000 Lỗi phân khúc, để trả lời câu hỏi của bạn, Basil, 248 00:15:55,000 --> 00:16:00,000 nói rằng chúng tôi đã cố gắng để truy cập vào một con trỏ 249 00:16:00,000 --> 00:16:05,000 không được thiết lập để trỏ đến bất cứ điều gì. 250 00:16:05,000 --> 00:16:09,000 Ghi Binky trong đoạn video khi Binky cố gắng 251 00:16:09,000 --> 00:16:12,000 truy cập vào một con trỏ đó không phải chỉ để bất cứ điều gì? 252 00:16:12,000 --> 00:16:16,000 Trong trường hợp này tôi đoán kỹ thuật con trỏ trỏ đến một cái gì đó. 253 00:16:16,000 --> 00:16:20,000 Nó trỏ đến null, về mặt kỹ thuật là 0, 254 00:16:20,000 --> 00:16:25,000 nhưng được xác định là trong một phân đoạn đó là không thể truy cập 255 00:16:25,000 --> 00:16:28,000 chương trình của bạn, để bạn có được một lỗi phân khúc 256 00:16:28,000 --> 00:16:31,000 bởi vì bạn không truy cập bộ nhớ đó là trong một phân đoạn hợp lệ 257 00:16:31,000 --> 00:16:38,000 như phân khúc đống hoặc phân đoạn ngăn xếp hoặc phân đoạn dữ liệu. 258 00:16:38,000 --> 00:16:40,000 Cool. 259 00:16:40,000 --> 00:16:48,000 Bất kỳ câu hỏi về Caesar? 260 00:16:48,000 --> 00:16:51,000 >> Hãy di chuyển. Chúng ta hãy nhìn vào phiên bản 2 thực sự nhanh chóng. 261 00:16:51,000 --> 00:17:00,000 Đó là Vigenère. 262 00:17:00,000 --> 00:17:04,000 Trong Vigenère 263 00:17:04,000 --> 00:17:06,000 chúng tôi sẽ đi bộ qua một trong những điều này khá nhanh chóng bởi vì, một lần nữa, 264 00:17:06,000 --> 00:17:10,000 Vigenère và Caesar là khá giống nhau. 265 00:17:10,000 --> 00:17:12,000 Tiêu đề nhận xét là trước đây, 266 00:17:12,000 --> 00:17:17,000 # Xác định trước để tránh sử dụng những con số ma thuật. 267 00:17:17,000 --> 00:17:21,000 Những điều tốt đẹp là nói chúng tôi muốn chuyển đến 268 00:17:21,000 --> 00:17:23,000 một bảng chữ cái khác nhau hoặc một cái gì đó như thế. 269 00:17:23,000 --> 00:17:26,000 Thay vì phải tự thay đổi số 26 trong các mã 270 00:17:26,000 --> 00:17:30,000 chúng ta có thể thay đổi đến 27 hoặc thả nó xuống 271 00:17:30,000 --> 00:17:34,000 nếu chúng ta đang sử dụng bảng chữ cái khác nhau, ngôn ngữ khác nhau. 272 00:17:34,000 --> 00:17:38,000 Một lần nữa, chúng tôi đã có sẽ kiểm tra số lượng đối số, 273 00:17:38,000 --> 00:17:42,000 và thực sự bạn gần như có thể thực hiện việc này như một bản mẫu. 274 00:17:42,000 --> 00:17:46,000 Khá nhiều mỗi chương trình bạn viết nên có 275 00:17:46,000 --> 00:17:50,000 nếu nó mất đối số dòng lệnh-một số trình tự của các dòng 276 00:17:50,000 --> 00:17:55,000 mà đọc như thế này ở đầu. 277 00:17:55,000 --> 00:17:59,000 Đó là một trong các bài kiểm tra sanity đầu tiên bạn muốn làm. 278 00:17:59,000 --> 00:18:03,000 >> Ở đây những gì chúng tôi đã được chúng tôi đã chắc chắn rằng 279 00:18:03,000 --> 00:18:06,000 từ khóa là hợp lệ, và đó là kiểm tra thứ hai mà chúng tôi đã làm. 280 00:18:06,000 --> 00:18:11,000 Chú ý rằng chúng ta chỉ cách nhau từ argc và 2. 281 00:18:11,000 --> 00:18:14,000 Lưu ý rằng trong trường hợp này, một trong những điều mà chúng tôi phải làm là thay vì 282 00:18:14,000 --> 00:18:18,000 của việc sử dụng i, chúng tôi muốn xác nhận toàn bộ chuỗi, 283 00:18:18,000 --> 00:18:21,000 và để làm được điều mà bạn thực sự phải đi ký tự bằng ký tự 284 00:18:21,000 --> 00:18:23,000 trên chuỗi. 285 00:18:23,000 --> 00:18:29,000 Không có cách nào tốt để gọi một cái gì đó vào nó 286 00:18:29,000 --> 00:18:31,000 bởi vì ngay cả, ví dụ, để tôi sẽ trở về 0 287 00:18:31,000 --> 00:18:37,000 nếu nó không thể phân tích một số nguyên, do đó, mà thậm chí không làm việc. 288 00:18:37,000 --> 00:18:42,000 Một lần nữa, đẹp thông báo cho người sử dụng một cách chính xác những gì đã xảy ra. 289 00:18:42,000 --> 00:18:45,000 Sau đó, ở đây, một lần nữa, chúng tôi cũng xử lý trường hợp 290 00:18:45,000 --> 00:18:50,000 loại người dùng trong một nhân vật kiểm soát ngẫu nhiên D. 291 00:18:50,000 --> 00:18:54,000 >> Và sau đó Charlotte đã có một câu hỏi trước đó về cách chúng tôi quản lý để bỏ qua không gian 292 00:18:54,000 --> 00:18:57,000 trong chuỗi của chúng tôi ở đây. 293 00:18:57,000 --> 00:19:00,000 Đây là loại tương tự như những gì chúng ta đã làm với chương trình Myspace 294 00:19:00,000 --> 00:19:04,000 mà chúng tôi đã làm trong phần, và cách này làm việc 295 00:19:04,000 --> 00:19:08,000 là chúng ta theo dõi số lượng thư mà chúng tôi đã nhìn thấy. 296 00:19:08,000 --> 00:19:13,000 Khi chúng tôi bước trong chuỗi tin nhắn, khi chúng tôi đi qua nhân vật bằng cách nhân vật, 297 00:19:13,000 --> 00:19:16,000 chúng tôi theo dõi các chỉ số như là một phần của chúng tôi cho vòng lặp, và sau đó chúng tôi cũng theo dõi 298 00:19:16,000 --> 00:19:21,000 số lượng chữ cái, vì thế các ký tự đặc biệt, chữ số, không gian không phải da trắng 299 00:19:21,000 --> 00:19:27,000 mà chúng tôi muốn nhìn thấy trong các biến riêng biệt. 300 00:19:27,000 --> 00:19:33,000 Và sau đó giải pháp này thay đổi phím 301 00:19:33,000 --> 00:19:41,000 để có được một số nguyên thực tế quan trọng, và nó thực hiện trên bay, 302 00:19:41,000 --> 00:19:47,000 ngay trước khi nó sau đó đi để mã hóa các ký tự tin nhắn thực tế. 303 00:19:47,000 --> 00:19:50,000 Có một số giải pháp hoàn hảo tuyệt vời quá 304 00:19:50,000 --> 00:19:58,000 sẽ sửa đổi quan trọng khi thử nghiệm hiệu lực của phím. 305 00:19:58,000 --> 00:20:01,000 Ngoài việc đảm bảo rằng các nhân vật và từ khóa 306 00:20:01,000 --> 00:20:05,000 được một ký tự chữ cái, nó cũng biến đó vào một số nguyên 307 00:20:05,000 --> 00:20:13,000 trong phạm vi 0 đến 25 sau đó bỏ qua phải để làm điều đó sau này trong điều này cho vòng lặp. 308 00:20:13,000 --> 00:20:18,000 Một lần nữa, bạn thấy ở đây này thực sự là cùng mã chính xác 309 00:20:18,000 --> 00:20:22,000 đã sử dụng trong Caesar vào thời điểm này. 310 00:20:22,000 --> 00:20:25,000 Bạn đang làm cùng một điều chính xác, do đó, các trick thực sự là tìm hiểu 311 00:20:25,000 --> 00:20:30,000 làm thế nào để biến các từ khóa vào một số nguyên. 312 00:20:30,000 --> 00:20:35,000 >> Một điều mà chúng tôi đã làm ở đây đó là một chút dày đặc 313 00:20:35,000 --> 00:20:39,000 là chúng ta lặp đi lặp lại cụm từ này, tôi đoán bạn có thể gọi nó, 314 00:20:39,000 --> 00:20:45,000 3 riêng lần trên đường 58, 59, và 61. 315 00:20:45,000 --> 00:20:52,000 Ai đó có thể giải thích cụm từ này chính xác những gì? 316 00:20:52,000 --> 00:20:55,000 Nó truy cập vào một nhân vật, như bạn nói. 317 00:20:55,000 --> 00:20:59,000 Yeah, đó là [không nghe được một nhân vật trong từ khóa, 318 00:20:59,000 --> 00:21:04,000 nên nó là số của các chữ cái nhìn thấy bởi vì bạn đang di chuyển dọc theo 319 00:21:04,000 --> 00:21:06,000 từ khóa khi bạn đã nhìn thấy bức thư, 320 00:21:06,000 --> 00:21:10,000 đó là sẽ bỏ qua không gian và các công cụ như thế có hiệu quả. 321 00:21:10,000 --> 00:21:12,000 Yeah, chính xác. 322 00:21:12,000 --> 00:21:16,000 Và sau đó một khi bạn đã nhìn thấy trống từ khóa, bạn chỉ cần mod, do đó bạn di chuyển trở lại xung quanh. 323 00:21:16,000 --> 00:21:18,000 Chính xác. Đó là một lời giải thích hoàn hảo. 324 00:21:18,000 --> 00:21:23,000 Kevin nói là chúng tôi muốn chỉ mục vào từ khóa. 325 00:21:23,000 --> 00:21:28,000 Chúng tôi muốn có được nhân vật num_letters_seen, nếu bạn sẽ, 326 00:21:28,000 --> 00:21:32,000 nhưng nếu num_letters_seen vượt quá độ dài của từ khóa, 327 00:21:32,000 --> 00:21:37,000 cách chúng ta lấy lại vào phạm vi thích hợp là chúng ta sử dụng các nhà điều hành mod 328 00:21:37,000 --> 00:21:40,000 để có hiệu quả bọc xung quanh. 329 00:21:40,000 --> 00:21:43,000 Ví dụ, như trong ngắn hạn, từ khóa của chúng tôi là thịt xông khói, 330 00:21:43,000 --> 00:21:46,000 và đó là 5 chữ cái. 331 00:21:46,000 --> 00:21:50,000 Nhưng chúng tôi đã nhìn thấy 6 chữ cái trong văn bản đơn giản của chúng tôi vào thời điểm này 332 00:21:50,000 --> 00:21:52,000 và mã hóa 6. 333 00:21:52,000 --> 00:21:57,000 Chúng tôi sẽ kết thúc truy cập num_letters_seen, 334 00:21:57,000 --> 00:22:00,000 là 6, mod chiều dài của từ khóa, 5, 335 00:22:00,000 --> 00:22:04,000 và vì vậy chúng tôi sẽ nhận được 1, và như vậy những gì chúng tôi sẽ làm là chúng tôi sẽ 336 00:22:04,000 --> 00:22:14,000 truy cập bên trong ký tự đầu tiên của từ khóa của chúng tôi tại thời điểm đó. 337 00:22:14,000 --> 00:22:21,000 >> Tất cả các quyền, bất kỳ câu hỏi về Vigenère 338 00:22:21,000 --> 00:22:26,000 trước khi chúng tôi di chuyển trên? 339 00:22:26,000 --> 00:22:31,000 Các bạn cảm thấy khá tốt về điều này? 340 00:22:31,000 --> 00:22:35,000 Cool, tuyệt vời. 341 00:22:35,000 --> 00:22:38,000 Tôi muốn làm cho chắc chắn rằng bạn đang nhận được các cơ hội để xem mã 342 00:22:38,000 --> 00:22:48,000 mà chúng tôi nghĩ có vẻ tốt và có cơ hội để học hỏi từ nó. 343 00:22:48,000 --> 00:22:53,000 Điều này sẽ là lần cuối cùng chúng tôi sẽ được sử dụng không gian cho thời gian được, 344 00:22:53,000 --> 00:22:59,000 và chúng tôi sẽ chuyển đổi ngay bây giờ, và tôi sẽ đi đến cs50.net/lectures 345 00:22:59,000 --> 00:23:06,000 vì vậy chúng tôi có thể làm một chút của bài kiểm tra đánh giá. 346 00:23:06,000 --> 00:23:10,000 Cách tốt nhất tôi nghĩ rằng để bắt đầu làm bài kiểm tra đánh giá 347 00:23:10,000 --> 00:23:15,000 là để đến trang này bài giảng, cs50.net/lectures, 348 00:23:15,000 --> 00:23:20,000 và bên dưới mỗi thuộc các nhóm tuần, do đó, nếu tôi xem xét ở đây tại Tuần lễ 0, 349 00:23:20,000 --> 00:23:27,000 Tôi thấy rằng chúng tôi có một danh sách các chủ đề mà chúng tôi đã giới thiệu trong tuần 0. 350 00:23:27,000 --> 00:23:31,000 >> Nếu bất kỳ của các chủ đề này có vẻ quen thuộc với bạn 351 00:23:31,000 --> 00:23:34,000 bạn chắc chắn sẽ muốn quay trở lại và sói các bài giảng và có thể 352 00:23:34,000 --> 00:23:39,000 thậm chí lướt qua các bài giảng, xem chúng một lần nữa nếu bạn muốn 353 00:23:39,000 --> 00:23:44,000 để có được một cảm giác về những gì đang xảy ra với mỗi người trong số những chủ đề. 354 00:23:44,000 --> 00:23:49,000 Tôi sẽ nói thêm một năm các nguồn tài nguyên mát mẻ, chúng tôi đã có 355 00:23:49,000 --> 00:23:55,000 là những quần short mà chúng tôi đã tạo ra, và nếu bạn nhìn tại Tuần lễ 0, 356 00:23:55,000 --> 00:24:00,000 chúng tôi không có tất cả các chủ đề được đề cập, nhưng chúng tôi đã có khá một vài trong số họ, 357 00:24:00,000 --> 00:24:03,000 một số trong những người phức tạp hơn, do đó, xem những quần short 358 00:24:03,000 --> 00:24:08,000 là một cách tốt để giúp bạn để tăng tốc độ. 359 00:24:08,000 --> 00:24:15,000 Trong đó, tôi sẽ phải đặt trong một plug cho 3 dưới đáy, kể từ khi tôi đã làm những. 360 00:24:15,000 --> 00:24:20,000 Nhưng nếu bạn đang đấu tranh với nhị phân, bit, hex, rằng loại công cụ, 361 00:24:20,000 --> 00:24:22,000 nhị phân là một nơi tuyệt vời để bắt đầu. 362 00:24:22,000 --> 00:24:25,000 ASCII là một số khác đó là tốt để xem quá. 363 00:24:25,000 --> 00:24:31,000 Bạn thậm chí có thể xem tôi ở tốc độ 1.5x nếu tôi sẽ quá chậm đối với bạn. 364 00:24:31,000 --> 00:24:35,000 Kể từ khi xem xét nó, cảm thấy tự do để làm điều đó. 365 00:24:35,000 --> 00:24:40,000 >> Chỉ cần để bắt đầu thực sự nhanh chóng, chúng ta sẽ đi qua một vài bài kiểm tra những vấn đề này 366 00:24:40,000 --> 00:24:44,000 chỉ để nhanh chóng khuấy qua các. 367 00:24:44,000 --> 00:24:50,000 Ví dụ, chúng ta hãy nhìn vào vấn đề 16 rằng tôi đã có ngay ở đây trên diễn đàn. 368 00:24:50,000 --> 00:24:54,000 Chúng tôi đã có tính toán sau này trong hệ nhị phân, 369 00:24:54,000 --> 00:24:56,000 và chúng tôi muốn để hiển thị bất kỳ công việc. 370 00:24:56,000 --> 00:24:59,000 Được rồi, tôi sẽ cung cấp cho một shot. 371 00:24:59,000 --> 00:25:01,000 Các bạn nên làm theo cùng với các giấy tờ, 372 00:25:01,000 --> 00:25:04,000 và chúng tôi sẽ làm điều này thực sự nhanh chóng. 373 00:25:04,000 --> 00:25:06,000 Chúng tôi muốn để thực hiện các tính toán sau trong hệ nhị phân. 374 00:25:06,000 --> 00:25:16,000 Tôi đã có 00.110.010. 375 00:25:16,000 --> 00:25:27,000 Và tôi sẽ để thêm nó 00.110.010. 376 00:25:27,000 --> 00:25:30,000 Đối với toán học thiên tài sau cùng ở nhà, 377 00:25:30,000 --> 00:25:35,000 điều này là có hiệu quả nhân cho 2. 378 00:25:35,000 --> 00:25:37,000 Hãy bắt đầu. 379 00:25:37,000 --> 00:25:39,000 Chúng tôi sẽ theo các thuật toán bổ sung mà chúng tôi làm 380 00:25:39,000 --> 00:25:43,000 khi chúng ta thêm số thập phân với nhau. 381 00:25:43,000 --> 00:25:46,000 Thực sự khác biệt duy nhất ở đây là chúng ta lặp lại xung quanh 382 00:25:46,000 --> 00:25:51,000 một khi chúng ta có 1 + 1 thay vì một khi chúng ta nhận được đến 10. 383 00:25:51,000 --> 00:25:53,000 >> Nếu chúng ta bắt đầu từ bên phải, thực sự nhanh chóng, chữ số đầu tiên là gì? 384 00:25:53,000 --> 00:25:55,000 [Sinh viên] 0 >> [Nate H.. 0. 385 00:25:55,000 --> 00:25:58,000 Tuyệt vời, các chữ số thứ hai? 386 00:25:58,000 --> 00:26:00,000 [Sinh viên] 1. 387 00:26:00,000 --> 00:26:02,000 [Nate H.] Có một 1? 1 + 1? 388 00:26:02,000 --> 00:26:04,000 [Sinh viên] 10. 389 00:26:04,000 --> 00:26:08,000 [Nate H.] Chính xác, vì vậy những gì là các chữ số mà tôi viết ngay bên dưới 2 cái cộng lại với nhau? 390 00:26:08,000 --> 00:26:11,000 [Sinh viên] 1, 0, hoặc 0 và sau đó mang 1. 391 00:26:11,000 --> 00:26:15,000 [Nate H.] 0 và mang theo một 1, chính xác. 392 00:26:15,000 --> 00:26:18,000 Basil lên kế tiếp, bạn đang lên. 393 00:26:18,000 --> 00:26:20,000 Thứ ba là gì? >> [Basil] 1. 394 00:26:20,000 --> 00:26:23,000 [Nate H.] 1, hoàn hảo. Kevin? 395 00:26:23,000 --> 00:26:27,000 [Kevin] 0 >> [Nate H.. 0, Charlotte? 396 00:26:27,000 --> 00:26:30,000 [Charlotte] 0 >> [Nate H.. Yeah, và tôi phải làm gì? 397 00:26:30,000 --> 00:26:32,000 [Sinh viên] 1. 398 00:26:32,000 --> 00:26:34,000 [Nate H.] Và tôi phải làm gì? Và sau đó tôi mang 1. 399 00:26:34,000 --> 00:26:36,000 Hoàn hảo, Sahb >> [Sahb] Bây giờ bạn có 1. 400 00:26:36,000 --> 00:26:40,000 [Nate H.] Và tôi làm bất cứ điều gì ở đây? 401 00:26:40,000 --> 00:26:43,000 [Sahb] Sau đó, cho một kế tiếp bạn có 1 bởi vì bạn thực hiện hơn 1. 402 00:26:43,000 --> 00:26:49,000 [Nate H.] Great, do đó, ở đây chúng tôi có thể hoàn thành nó. 403 00:26:49,000 --> 00:26:51,000 Cool. 404 00:26:51,000 --> 00:26:54,000 [Sinh viên] Có 0 + 0 = 0? 405 00:26:54,000 --> 00:26:56,000 0 + 0 = 0. 406 00:26:56,000 --> 00:27:01,000 1 + 1, như bạn nói, 10, 1, 0, thay vì. 407 00:27:01,000 --> 00:27:07,000 10 là một nhầm lẫn bởi vì tôi 10 có nghĩa là số 10, 408 00:27:07,000 --> 00:27:12,000 và đó là những đứa làm thế nào chúng tôi đang đại diện cho nó khi chúng ta đang viết nó. 409 00:27:12,000 --> 00:27:20,000 Chúng tôi đại diện cho các số 2 1, 0, và số 10 là hơi khác nhau. 410 00:27:20,000 --> 00:27:23,000 >> Loại tốt đẹp về nhị phân là gì là có thực sự không có nhiều 411 00:27:23,000 --> 00:27:25,000 trường hợp, bạn cần phải học. 412 00:27:25,000 --> 00:27:30,000 Có 0 + 0 = 0, 0 + 1 = 1, 413 00:27:30,000 --> 00:27:34,000 1 + 1 là 0, và sau đó thực hiện một 1, 414 00:27:34,000 --> 00:27:37,000 và sau đó bạn có thể thấy ở đây trên cột thứ ba từ bên phải 415 00:27:37,000 --> 00:27:40,000 chúng tôi đã có 1, 1, 1. 416 00:27:40,000 --> 00:27:43,000 Và 1 + 1 + 1 là một 1, 417 00:27:43,000 --> 00:27:45,000 và bạn mang theo khác 1. 418 00:27:45,000 --> 00:27:48,000 Khi bạn đang làm Ngoài ra nhị phân, khá đơn giản. 419 00:27:48,000 --> 00:27:51,000 Tôi muốn làm một vài trong số này để kiểm tra sanity mình 420 00:27:51,000 --> 00:27:54,000 trước khi bạn đi bởi vì đây là 421 00:27:54,000 --> 00:28:00,000 có thể là một cái gì đó mà chúng ta sẽ thấy trên các bài kiểm tra. 422 00:28:00,000 --> 00:28:03,000 Bây giờ chúng ta hãy làm điều này một trong những kế tiếp cũng. 423 00:28:03,000 --> 00:28:06,000 Hãy làm vấn đề 17. 424 00:28:06,000 --> 00:28:12,000 Chúng tôi sẽ chuyển đổi số nhị phân sang thập phân như sau. 425 00:28:12,000 --> 00:28:28,000 Tôi đã có 10100111001. 426 00:28:28,000 --> 00:28:33,000 Nhớ trong video nhị phân mà tôi đã làm 427 00:28:33,000 --> 00:28:36,000 Tôi đi qua một vài ví dụ, và tôi cho thấy làm thế nào 428 00:28:36,000 --> 00:28:41,000 tất cả mọi thứ hoạt động khi bạn đang làm trong thập phân. 429 00:28:41,000 --> 00:28:45,000 Khi bạn đang làm việc trong đại diện thập phân, tôi nghĩ chúng ta 430 00:28:45,000 --> 00:28:48,000 vào thời điểm này trong cuộc sống của chúng tôi để thông thạo nó mà 431 00:28:48,000 --> 00:28:53,000 nó rất dễ dàng để bóng qua các cơ chế như thế nào nó thực sự hoạt động. 432 00:28:53,000 --> 00:28:59,000 >> Nhưng để làm được một bản tóm tắt nhanh chóng, nếu tôi có số 137 433 00:28:59,000 --> 00:29:06,000 điều này thực sự có nghĩa là và một lần nữa, điều này là số thập phân đại diện 434 00:29:06,000 --> 00:29:19,000 số 137 trong hệ thập phân có nghĩa là tôi có 1 x 100 + 3 x 10 + 7 x 1. 435 00:29:19,000 --> 00:29:22,000 Điều này là tất cả ở trên màn hình. 436 00:29:22,000 --> 00:29:29,000 Và sau đó nếu bạn nhìn vào những con số này ngay tại đây, 437 00:29:29,000 --> 00:29:34,000 100, 10 và 1, bạn sẽ thấy rằng họ đang thực sự tất cả các quyền hạn của 10. 438 00:29:34,000 --> 00:29:43,000 Tôi có 10 ², 10 ¹, và 10 số không. 439 00:29:43,000 --> 00:29:48,000 Chúng tôi có một loại tương tự của điều trong nhị phân, 440 00:29:48,000 --> 00:29:55,000 ngoại trừ cơ sở của chúng tôi, như chúng tôi gọi nó là 2 thay vì 10. 441 00:29:55,000 --> 00:29:58,000 Những 10s mà tôi đã viết xuống đây ở phía dưới, 442 00:29:58,000 --> 00:30:02,000 ² 10, 10 ¹, 10 đến số không, 10 là cơ sở của chúng tôi, 443 00:30:02,000 --> 00:30:08,000 và số mũ, 0, 1, hoặc 2, 444 00:30:08,000 --> 00:30:14,000 là ngụ ý vị trí của các chữ số trong số đó chúng tôi viết. 445 00:30:14,000 --> 00:30:21,000 1, nếu chúng ta nhìn vào nó, 1 là ở vị trí thứ 2. 446 00:30:21,000 --> 00:30:27,000 3 là ở vị trí 1, và 7 ở vị trí 0. 447 00:30:27,000 --> 00:30:35,000 Đó là làm thế nào chúng ta có được các số mũ khác nhau dưới đây cho các cơ sở của chúng tôi. 448 00:30:35,000 --> 00:30:40,000 >> Sau này we'll-thực sự, bạn biết những gì? 449 00:30:40,000 --> 00:30:43,000 Chúng tôi sẽ làm không lùi lại nút của tôi đi? 450 00:30:43,000 --> 00:30:45,000 Nó đi. 451 00:30:45,000 --> 00:30:47,000 Tôi thích điều này lùi lại. 452 00:30:47,000 --> 00:30:51,000 Sau này, tôi nghĩ rằng đối với tôi ít nhất 453 00:30:51,000 --> 00:30:54,000 cách dễ nhất để bắt đầu chuyển đổi một số nhị phân 454 00:30:54,000 --> 00:30:57,000 hoặc một số hệ thập lục phân nơi mà cơ sở là 16 455 00:30:57,000 --> 00:31:02,000 và không phải là 10 hoặc 2 là để đi trước và viết ra 456 00:31:02,000 --> 00:31:09,000 cơ sở và số mũ cho tất cả các con số trong số nhị phân của tôi ở đầu trang. 457 00:31:09,000 --> 00:31:14,000 Nếu chúng ta bắt đầu từ trái sang phải một lần nữa, 458 00:31:14,000 --> 00:31:17,000 đó là loại phản, 459 00:31:17,000 --> 00:31:23,000 Tôi sẽ thay đổi trở lại màu đen ở đây, chúng ta có 2 vị trí 0, 460 00:31:23,000 --> 00:31:27,000 và sau đó chúng tôi có 2 ¹, 2 ², 461 00:31:27,000 --> 00:31:33,000 và sau đó 2 đến 3, 2 đến 4, 2 5, 6, 462 00:31:33,000 --> 00:31:39,000 7, 8, 9, và 10. 463 00:31:39,000 --> 00:31:41,000 Những con số này tôi đã viết ra tất cả các số mũ. 464 00:31:41,000 --> 00:31:48,000 Tôi chỉ viết các căn cứ ở đây trong 3 đầu tiên chỉ cho không gian. 465 00:31:48,000 --> 00:31:50,000 >> Tại thời điểm này tôi sẽ đi trước và tôi thực sự sẽ để xóa 466 00:31:50,000 --> 00:31:53,000 những thứ mà chúng tôi đã làm trong thập phân, nếu đó là okay. 467 00:31:53,000 --> 00:31:57,000 Bạn đã có tất cả các điều đó. 468 00:31:57,000 --> 00:32:05,000 Những người bạn xem trực tuyến Tôi chắc chắn sẽ có thể quay ngược tôi nếu bạn muốn. 469 00:32:05,000 --> 00:32:07,000 Chuyển đổi qua lại cây bút. 470 00:32:07,000 --> 00:32:12,000 Bây giờ, những gì chúng ta có thể làm nếu bạn không phải là hoàn toàn lên đến tốc độ trên quyền hạn của 2, 471 00:32:12,000 --> 00:32:15,000 đó là hoàn toàn mát mẻ. 472 00:32:15,000 --> 00:32:18,000 Nó sẽ xảy ra. Tôi hiểu. 473 00:32:18,000 --> 00:32:23,000 Tôi đã từng có một cuộc phỏng vấn công việc mà tôi đã nói với tôi nên biết tất cả quyền hạn của 2 474 00:32:23,000 --> 00:32:26,000 lên thông qua 2 đến ngày 30. 475 00:32:26,000 --> 00:32:29,000 Đó không phải là một công việc tôi có. 476 00:32:29,000 --> 00:32:32,000 Dù sao, các bạn có thể đi trước và làm toán ở đây, 477 00:32:32,000 --> 00:32:35,000 nhưng với nhị phân nó không thực sự có ý nghĩa, 478 00:32:35,000 --> 00:32:38,000 và cũng không phải không có ý nghĩa với số thập phân hoặc thập lục phân, 479 00:32:38,000 --> 00:32:43,000 làm toán ra nơi mà bạn có số không. 480 00:32:43,000 --> 00:32:49,000 Bạn có thể thấy tôi có 0, 0, 0, 0, 0, 0 đây. 481 00:32:49,000 --> 00:32:52,000 Tại sao có thể không có ý nghĩa để làm toán thực tế 482 00:32:52,000 --> 00:32:56,000 để tính toán sức mạnh thích hợp của 2 cho vị trí đó? 483 00:32:56,000 --> 00:32:59,000 Chính xác, như Charlotte nói, nó sẽ là 0. 484 00:32:59,000 --> 00:33:05,000 Cũng có thể tiết kiệm cho mình thời gian nếu tính toán quyền hạn của 2 không phải là điểm mạnh của bạn. 485 00:33:05,000 --> 00:33:10,000 Trong trường hợp này, chúng ta chỉ cần để tính toán nó cho 2 0 đó là? 486 00:33:10,000 --> 00:33:12,000 [Sinh viên] 1. 487 00:33:12,000 --> 00:33:14,000 [Nate H.] 1, 2 3 các- 488 00:33:14,000 --> 00:33:16,000 [Sinh viên] 8 >> [Nate H.]. 8. 489 00:33:16,000 --> 00:33:18,000 2 cho 4? 490 00:33:18,000 --> 00:33:21,000 [Sinh viên] 2. Tôi xin lỗi, 1. 491 00:33:21,000 --> 00:33:26,000 [Nate H.] 2 cho 4 là 16, chính xác. 492 00:33:26,000 --> 00:33:28,000 2 đến 5, Kevin >> 32. 493 00:33:28,000 --> 00:33:32,000 Nate H. 32, 2 với 8? 494 00:33:32,000 --> 00:33:38,000 [Sinh viên] 32 x 8, 256. 495 00:33:38,000 --> 00:33:41,000 [Nate H.] Perfect. 496 00:33:41,000 --> 00:33:43,000 Và 2 với 10? 497 00:33:43,000 --> 00:33:45,000 [Sinh viên 1024. 498 00:33:45,000 --> 00:33:49,000 [Nate H.] Yeah, 1024. 499 00:33:49,000 --> 00:33:57,000 >> Một khi chúng ta đã có những con số này chúng ta có thể tổng hợp tất cả lên. 500 00:33:57,000 --> 00:34:01,000 Và đây là nơi mà nó thực sự quan trọng để làm một vài điều. 501 00:34:01,000 --> 00:34:07,000 Một là đi chậm lại và kiểm tra công việc của bạn. 502 00:34:07,000 --> 00:34:10,000 Bạn có thể nói rằng có một 1 vào cuối của số này, 503 00:34:10,000 --> 00:34:15,000 vì vậy tôi chắc chắn sẽ nhận được một số lẻ như là kết quả của tôi, 504 00:34:15,000 --> 00:34:18,000 bởi vì tất cả những người khác đang có được ngay cả con số 505 00:34:18,000 --> 00:34:21,000 cho rằng đó là một số nhị phân. 506 00:34:21,000 --> 00:34:24,000 Điều khác để làm là nếu bạn nhận được đến thời điểm này trong bài thi 507 00:34:24,000 --> 00:34:27,000 và bạn đã viết nó ra điều này đến nay 508 00:34:27,000 --> 00:34:30,000 và bạn đang chạy ra khỏi thời gian 509 00:34:30,000 --> 00:34:33,000 nhìn vào số lượng các điểm rằng vấn đề này là giá trị. 510 00:34:33,000 --> 00:34:40,000 Vấn đề này, bạn có thể thấy nếu tôi lật trở lại để máy tính xách tay của tôi thực sự nhanh chóng 511 00:34:40,000 --> 00:34:44,000 vấn đề này là giá trị 2 điểm, do đó, điều này không phải là thứ bổ sung 512 00:34:44,000 --> 00:34:47,000 bạn cần phải đi qua nếu bạn đang thực sự ép cho thời gian. 513 00:34:47,000 --> 00:34:52,000 Nhưng chúng tôi sẽ chuyển đổi qua lại với iPad, và chúng tôi sẽ đi qua nó thực sự nhanh chóng. 514 00:34:52,000 --> 00:34:54,000 >> Tôi thích làm những con số nhỏ đầu tiên 515 00:34:54,000 --> 00:34:56,000 bởi vì tôi thấy rằng dễ dàng hơn. 516 00:34:56,000 --> 00:35:00,000 Tôi thích 32 và 8 bởi vì họ đi với nhau khá dễ dàng, và chúng tôi nhận được 50. 517 00:35:00,000 --> 00:35:03,000 16 và 1 được 17. 518 00:35:03,000 --> 00:35:05,000 Hiện chúng tôi nhận được 57, 519 00:35:05,000 --> 00:35:14,000 và sau đó chúng ta có thể làm phần còn lại của điều này, vì vậy chúng tôi có thể làm 57, 156. 520 00:35:14,000 --> 00:35:16,000 Đi nào. 521 00:35:16,000 --> 00:35:19,000 Man, tốt, chúng ta hãy xem. 522 00:35:19,000 --> 00:35:27,000 Chúng tôi đã có 57, 256, và 1024. 523 00:35:27,000 --> 00:35:31,000 Tại thời điểm này, tôi muốn chỉ cần đi qua. 524 00:35:31,000 --> 00:35:35,000 Tôi không có đầu mối. Tôi rõ ràng cần phải đọc lên trên này. 525 00:35:35,000 --> 00:35:40,000 7, 6, và 4, bạn nhận được 17. 526 00:35:40,000 --> 00:35:42,000 1, 5, 5, 2, 13. 527 00:35:42,000 --> 00:35:45,000 Sau đó, chúng tôi nhận được 3, và sau đó chúng tôi nhận được 1. 528 00:35:45,000 --> 00:35:52,000 1337. 529 00:35:52,000 --> 00:35:55,000 Trứng Phục Sinh, bất cứ ai? 530 00:35:55,000 --> 00:35:59,000 Bất kỳ ai nhận ra con số này? 531 00:35:59,000 --> 00:36:02,000 Chris nhận ra số. Có nghĩa là gì, Chris? 532 00:36:02,000 --> 00:36:04,000 [Chris] Leet. 533 00:36:04,000 --> 00:36:11,000 Leet, do đó, nếu bạn nhìn vào điều này, có vẻ như Leet. 534 00:36:11,000 --> 00:36:15,000 Hacker công cụ. Xem ra cho rằng loại công cụ trên bài kiểm tra giữa kỳ hoặc, thay. 535 00:36:15,000 --> 00:36:19,000 Nếu bạn thấy rằng loại công cụ và bạn đang tự hỏi "Huh," 536 00:36:19,000 --> 00:36:22,000 mà thực sự có thể có nghĩa là một cái gì đó. 537 00:36:22,000 --> 00:36:24,000 Tôi không biết. David thích đặt. 538 00:36:24,000 --> 00:36:26,000 Đó là một cách tốt để kiểm tra sanity. 539 00:36:26,000 --> 00:36:30,000 Như được rồi, tôi có thể nhìn thấy những gì đang xảy ra. 540 00:36:30,000 --> 00:36:34,000 >> Đó là Tuần 0/Week 1 thứ. 541 00:36:34,000 --> 00:36:39,000 Nếu chúng ta chuyển về máy tính xách tay của chúng tôi bây giờ, 542 00:36:39,000 --> 00:36:46,000 thu nhỏ, và một vài thứ khác. 543 00:36:46,000 --> 00:36:50,000 Có ASCII, mà chúng tôi đã làm rất nhiều với các bộ vấn đề. 544 00:36:50,000 --> 00:36:55,000 Khái niệm về vốn A. là thực sự? 545 00:36:55,000 --> 00:36:57,000 Biết đó là số nguyên thập phân. 546 00:36:57,000 --> 00:37:00,000 65 là những gì nó được ánh xạ tới trong bảng mã ASCII, 547 00:37:00,000 --> 00:37:03,000 và đó là lý do đó máy tính viết nó như thế nào, 548 00:37:03,000 --> 00:37:06,000 và đó là cách chúng tôi đã nhận được đi với việc viết 549 00:37:06,000 --> 00:37:09,000 vốn ký tự A và ký tự chữ thường 550 00:37:09,000 --> 00:37:14,000 trong một số các giải pháp này và bộ vấn đề mà bạn đã làm. 551 00:37:14,000 --> 00:37:16,000 Một vài thứ khác. 552 00:37:16,000 --> 00:37:25,000 Chúng tôi đã có báo cáo, biểu thức boolean, điều kiện, vòng lặp, các biến và chủ đề. 553 00:37:25,000 --> 00:37:29,000 >> Tất cả những ai có vẻ có ý nghĩa đối với hầu hết các phần? 554 00:37:29,000 --> 00:37:35,000 Một số thuật ngữ này là một funky ít lần. 555 00:37:35,000 --> 00:37:46,000 Tôi thích nghĩ của một tuyên bố như đối với một cái gì đó hầu hết các phần kết thúc bằng một dấu chấm phẩy. 556 00:37:46,000 --> 00:37:51,000 Báo cáo chẳng hạn như x = 7, trong đó đặt ra một biến, 557 00:37:51,000 --> 00:37:54,000 có lẽ gọi là x = 7. 558 00:37:54,000 --> 00:38:01,000 Có lẽ x cũng là một loại có thể lưu trữ số 7, 559 00:38:01,000 --> 00:38:05,000 do đó, nó là một int hoặc có thể một phao hoặc một đoạn ngắn hoặc một char, 560 00:38:05,000 --> 00:38:07,000 một cái gì đó như thế. 561 00:38:07,000 --> 00:38:12,000 Một biểu thức boolean là sử dụng những đôi bằng 562 00:38:12,000 --> 00:38:17,000 và bang bằng hoặc bằng không, ít hơn, lớn hơn, 563 00:38:17,000 --> 00:38:22,000 nhỏ hơn hoặc bằng, rằng tất cả các loại công cụ. 564 00:38:22,000 --> 00:38:28,000 Điều kiện sau đó là những tuyên bố nếu người nào khác. 565 00:38:28,000 --> 00:38:32,000 Tôi sẽ nhớ rằng bạn không thể có một người nào khác mà không có một tương ứng nếu. 566 00:38:32,000 --> 00:38:37,000 Tương tự như vậy, bạn không thể có một người nào khác nếu không có tương ứng nếu. 567 00:38:37,000 --> 00:38:40,000 Loops, nhớ lại 3 loại của các vòng chúng tôi đã được búa vào bạn 568 00:38:40,000 --> 00:38:43,000 cho các cặp vợ chồng cuối cùng của các bộ phận và bộ vấn đề. 569 00:38:43,000 --> 00:38:46,000 Sử dụng làm trong khi khi bạn đang nhận được người dùng nhập vào, 570 00:38:46,000 --> 00:38:51,000 bằng cách sử dụng trong khi các vòng cho đến khi một điều kiện cụ thể là sự thật, 571 00:38:51,000 --> 00:38:56,000 và sau đó sử dụng những người cho vòng lặp nếu bạn cần 572 00:38:56,000 --> 00:39:01,000 biết mà lặp đi lặp lại của vòng lặp bạn hiện đang là cách tôi suy nghĩ về nó. 573 00:39:01,000 --> 00:39:07,000 Hoặc nếu bạn đang làm cho mỗi ký tự trong một chuỗi tôi muốn làm một cái gì đó, 574 00:39:07,000 --> 00:39:15,000 cho mỗi phần tử trong một mảng tôi muốn làm một cái gì đó cho phần tử đó. 575 00:39:15,000 --> 00:39:18,000 >> Chủ đề và các sự kiện. 576 00:39:18,000 --> 00:39:21,000 Này, chúng tôi đã không trình bày một cách rõ ràng trong C, 577 00:39:21,000 --> 00:39:23,000 nhưng hãy nhớ điều này từ đầu. 578 00:39:23,000 --> 00:39:26,000 Đây là khái niệm có các kịch bản khác nhau. 579 00:39:26,000 --> 00:39:32,000 Đây cũng là khái niệm này phát sóng một sự kiện. 580 00:39:32,000 --> 00:39:37,000 Một số người không sử dụng phát sóng trong các dự án của họ ban đầu, 581 00:39:37,000 --> 00:39:40,000 đó là hoàn toàn mát mẻ, 582 00:39:40,000 --> 00:39:46,000 nhưng đây là 2 cách khác nhau xử lý vấn đề này lớn hơn được gọi là đồng thời, 583 00:39:46,000 --> 00:39:49,000 đó là làm thế nào để bạn có được để thực hiện chương trình 584 00:39:49,000 --> 00:39:54,000 hoặc dường như thực hiện cùng một lúc? 585 00:39:54,000 --> 00:39:59,000 Nhiệm vụ khác nhau chạy các nhiệm vụ khác cũng đang chạy. 586 00:39:59,000 --> 00:40:01,000 Đây là hệ điều hành của bạn như thế nào dường như làm việc. 587 00:40:01,000 --> 00:40:04,000 Đây là lý do tại sao mặc dù, ví dụ, 588 00:40:04,000 --> 00:40:10,000 Tôi đã có trình duyệt của tôi chạy, tôi cũng có thể bật Spotify và chơi một bài hát. 589 00:40:10,000 --> 00:40:14,000 Đó là một khái niệm để hiểu. 590 00:40:14,000 --> 00:40:17,000 Tôi sẽ có một cái nhìn tại các chủ đề ngắn 591 00:40:17,000 --> 00:40:21,000 nếu bạn muốn tìm hiểu thêm về điều đó. 592 00:40:21,000 --> 00:40:26,000 >> Hãy xem, tôi tin rằng có thể có được 593 00:40:26,000 --> 00:40:31,000 một vấn đề về điều này trong một trong những. 594 00:40:31,000 --> 00:40:35,000 Một lần nữa, tôi nghĩ rằng các chủ đề và các sự kiện không phải là một cái gì đó mà chúng tôi sẽ giới thiệu trong C 595 00:40:35,000 --> 00:40:41,000 chỉ vì nó là nhiều hơn đáng kể khó khăn hơn trong Scratch. 596 00:40:41,000 --> 00:40:44,000 Bạn không nên lo lắng về nó ở đó, nhưng chắc chắn hiểu các khái niệm, 597 00:40:44,000 --> 00:40:47,000 hiểu những gì đang xảy ra. 598 00:40:47,000 --> 00:40:52,000 Trước khi chúng tôi di chuyển trên, bất kỳ câu hỏi nào về Tuần 0 tài liệu? 599 00:40:52,000 --> 00:40:55,000 Mọi người đều cảm thấy khá tốt? 600 00:40:55,000 --> 00:41:03,000 Biến sự hiểu biết và những gì một biến? 601 00:41:03,000 --> 00:41:08,000 >> Di chuyển trên. Tuần 1. 602 00:41:08,000 --> 00:41:12,000 Một vài điều ở đây không đặc biệt bao phủ 603 00:41:12,000 --> 00:41:21,000 trong việc xem xét bài kiểm tra cần thiết và cũng là những điều khái niệm nhiều hơn để suy nghĩ về. 604 00:41:21,000 --> 00:41:30,000 Đầu tiên là khái niệm về mã nguồn, trình biên dịch và mã đối tượng. 605 00:41:30,000 --> 00:41:32,000 Ai? Basil. 606 00:41:32,000 --> 00:41:37,000 Là mã đối tượng có nghĩa là mã nguồn là những gì bạn đưa vào kêu vang, 607 00:41:37,000 --> 00:41:42,000 và đối tượng đang kêu vang đặt ra để máy tính của bạn có thể đọc các chương trình. 608 00:41:42,000 --> 00:41:44,000 Chính xác. 609 00:41:44,000 --> 00:41:47,000 Mã nguồn là mã C mà bạn thực sự gõ lên. 610 00:41:47,000 --> 00:41:50,000 Mã đối tượng là những gì bạn có được ra khỏi kêu vang. 611 00:41:50,000 --> 00:41:54,000 Trong đó định dạng nhị phân 0 và 1. 612 00:41:54,000 --> 00:41:59,000 Sau đó, những gì xảy ra là khi bạn có một loạt các đối tượng tập tin, 613 00:41:59,000 --> 00:42:04,000 nói rằng bạn đang biên soạn một dự án hay một chương trình có sử dụng nhiều tập tin mã nguồn, 614 00:42:04,000 --> 00:42:09,000 theo quy ước được đưa ra phần mở rộng tập tin c. 615 00:42:09,000 --> 00:42:13,000 Đó là lý do tại sao chúng tôi có caesar.c, vigenère.c. 616 00:42:13,000 --> 00:42:18,000 Nếu bạn đang viết các chương trình Java, bạn cung cấp cho họ phần mở rộng. Java. 617 00:42:18,000 --> 00:42:24,000 Python chương trình có phần mở rộng py thường xuyên. 618 00:42:24,000 --> 00:42:26,000 >> Một khi bạn có nhiều c file, bạn biên dịch chúng. 619 00:42:26,000 --> 00:42:29,000 Clang spits ra tất cả những điều này rác nhị phân. 620 00:42:29,000 --> 00:42:33,000 Sau đó, vì bạn chỉ muốn 1 chương trình 621 00:42:33,000 --> 00:42:37,000 bạn có liên kết mối liên kết tất cả các đối tượng này tập tin với nhau 622 00:42:37,000 --> 00:42:40,000 vào 1 tập tin thực thi. 623 00:42:40,000 --> 00:42:45,000 Đây cũng là những gì sẽ xảy ra khi bạn sử dụng các thư viện CS50, ví dụ. 624 00:42:45,000 --> 00:42:50,000 Thư viện CS50 là cả hai, h phần đầu tập tin 625 00:42:50,000 --> 00:42:53,000 mà bạn đọc, # includecs50.h. 626 00:42:53,000 --> 00:42:58,000 Và sau đó nó cũng là một tập tin nhị phân thư viện đặc biệt 627 00:42:58,000 --> 00:43:02,000 được biên dịch là 0 và 1, 628 00:43:02,000 --> 00:43:08,000 và l cờ, vì vậy nếu chúng ta quay trở lại không gian của chúng tôi và chúng ta nhìn thực sự nhanh chóng 629 00:43:08,000 --> 00:43:11,000 vào những gì đang xảy ra ở đây khi chúng ta nhìn vào lệnh kêu vang của chúng tôi, 630 00:43:11,000 --> 00:43:15,000 những gì chúng tôi đã có là đây là tập tin mã nguồn của chúng tôi ngay tại đây. 631 00:43:15,000 --> 00:43:18,000 Đây là một loạt các cờ biên dịch. 632 00:43:18,000 --> 00:43:22,000 Và sau đó vào cuối những liên kết trong l cờ 633 00:43:22,000 --> 00:43:30,000 các tập tin nhị phân thực tế cho 2 thư viện, thư viện CS50 và sau đó thư viện toán học. 634 00:43:30,000 --> 00:43:35,000 >> Hiểu biết về mỗi loại mục đích files ' 635 00:43:35,000 --> 00:43:38,000 trong quá trình biên dịch là một cái gì đó bạn sẽ muốn để có thể 636 00:43:38,000 --> 00:43:43,000 cung cấp cho ít nhất là một mức khái quát cao. 637 00:43:43,000 --> 00:43:46,000 Mã nguồn có in mã đối tượng đi ra. 638 00:43:46,000 --> 00:43:53,000 Các tập tin mã đối tượng liên kết với nhau, và bạn nhận được một tập tin, xinh đẹp và thực thi. 639 00:43:53,000 --> 00:43:55,000 Cool. 640 00:43:55,000 --> 00:43:58,000 Đây cũng là nơi bạn có thể nhận được lỗi tại nhiều thời điểm 641 00:43:58,000 --> 00:44:00,000 trong quá trình biên dịch. 642 00:44:00,000 --> 00:44:04,000 Đây là nơi mà, ví dụ, nếu bạn đưa ra lá cờ này liên kết, 643 00:44:04,000 --> 00:44:10,000 CS50 cờ, và bạn bỏ qua nó trong không gian hoặc khi bạn đang chạy mã của bạn, 644 00:44:10,000 --> 00:44:13,000 đây là nơi mà bạn sẽ nhận được một lỗi trong giai đoạn liên kết, 645 00:44:13,000 --> 00:44:18,000 và các mối liên kết sẽ nói, "Hey, bạn gọi một GetString chức năng 646 00:44:18,000 --> 00:44:20,000 đó là trong thư viện CS50. " 647 00:44:20,000 --> 00:44:25,000 "Bạn nói với tôi đó là trong thư viện CS50, và tôi không thể tìm thấy mã cho nó." 648 00:44:25,000 --> 00:44:28,000 Đó là nơi mà bạn có để liên kết nó, và đó là riêng biệt 649 00:44:28,000 --> 00:44:33,000 từ một lỗi biên dịch bởi vì trình biên dịch là nhìn vào cú pháp và các loại công cụ. 650 00:44:33,000 --> 00:44:38,000 Đó là tốt để biết những gì đang xảy ra khi. 651 00:44:38,000 --> 00:44:42,000 >> Những thứ khác để biết về. 652 00:44:42,000 --> 00:44:49,000 Tôi sẽ nói bạn chắc chắn muốn có một cái nhìn ngắn trên typecasting thực hiện bởi Jordan 653 00:44:49,000 --> 00:44:55,000 để hiểu những gì ints dưới mui xe, 654 00:44:55,000 --> 00:44:58,000 những ký tự nằm dưới mui xe. 655 00:44:58,000 --> 00:45:02,000 Khi chúng ta nói về ASCII và chúng tôi thực sự nhìn vào bảng mã ASCII, 656 00:45:02,000 --> 00:45:07,000 đó là làm cho chúng ta một dưới cái nhìn mui xe 657 00:45:07,000 --> 00:45:13,000 làm thế nào máy tính thực sự đại diện cho vốn A và 7 chữ số 658 00:45:13,000 --> 00:45:17,000 và một dấu phẩy và dấu một câu hỏi. 659 00:45:17,000 --> 00:45:20,000 Máy tính cũng có những cách đặc biệt để đại diện cho 660 00:45:20,000 --> 00:45:23,000 số 7 là một số nguyên. 661 00:45:23,000 --> 00:45:27,000 Nó có một cách đặc biệt để đại diện cho số 7 là một số điểm nổi, 662 00:45:27,000 --> 00:45:29,000 và những người rất khác nhau. 663 00:45:29,000 --> 00:45:32,000 Typecasting là làm thế nào bạn cho máy tính "Này, tôi muốn bạn chuyển đổi 664 00:45:32,000 --> 00:45:37,000 từ một trong những đại diện khác đại diện. " 665 00:45:37,000 --> 00:45:40,000 Tại sao chúng ta không có một cái nhìn ở đó. 666 00:45:40,000 --> 00:45:44,000 >> Tôi cũng sẽ có một cái nhìn ngắn vào thư viện và ngắn trên trình biên dịch. 667 00:45:44,000 --> 00:45:47,000 Những người nói về quá trình biên dịch, 668 00:45:47,000 --> 00:45:53,000 một thư viện, và đi qua một số câu hỏi mà bạn có thể nhận được yêu cầu. 669 00:45:53,000 --> 00:45:55,000 Các câu hỏi về vật chất 1 Tuần? 670 00:45:55,000 --> 00:46:03,000 Có bất kỳ chủ đề nào ở đây mà có vẻ khó khăn bạn muốn để trang trải? 671 00:46:03,000 --> 00:46:07,000 Tôi đang cố gắng để thổi thông qua hầu hết các chủ đề này trước đó để chúng tôi có thể nhận được 672 00:46:07,000 --> 00:46:13,000 con trỏ và làm một ít đệ quy. 673 00:46:13,000 --> 00:46:15,000 Suy nghĩ? 674 00:46:15,000 --> 00:46:19,000 Bất cứ điều gì để trang trải? 675 00:46:19,000 --> 00:46:21,000 Thời gian cho một số sô cô la có thể? 676 00:46:21,000 --> 00:46:23,000 Các bạn đang làm việc thông qua nó. 677 00:46:23,000 --> 00:46:26,000 Tôi sẽ tiếp tục nhấm nháp cà phê của tôi. 678 00:46:26,000 --> 00:46:31,000 Tuần 2. 679 00:46:31,000 --> 00:46:34,000 Cuộc gọi, cuộc gọi tốt. 680 00:46:34,000 --> 00:46:38,000 Tuần 2 chúng tôi nói chuyện hơn một chút về chức năng. 681 00:46:38,000 --> 00:46:43,000 >> Trong bộ vấn đề đầu tiên chúng tôi đã không thực sự viết bất kỳ chức năng ở tất cả các 682 00:46:43,000 --> 00:46:45,000 khác hơn có chức năng nào? 683 00:46:45,000 --> 00:46:47,000 [Sinh viên] Main >> Main, chính xác. 684 00:46:47,000 --> 00:46:51,000 Và vì vậy chúng tôi đã nhìn thấy những bộ trang phục khác nhau mà chính mặc. 685 00:46:51,000 --> 00:46:54,000 Có mà trong đó không có đối số, 686 00:46:54,000 --> 00:46:58,000 và chúng tôi chỉ nói rằng khoảng trống giữa các dấu ngoặc đơn, 687 00:46:58,000 --> 00:47:01,000 và sau đó có một trong những khác mà chúng ta muốn đối số dòng lệnh, 688 00:47:01,000 --> 00:47:08,000 và như chúng ta đã thấy, đó là nơi bạn có int argc và chuỗi mảng argv 689 00:47:08,000 --> 00:47:13,000 hay bây giờ mà chúng tôi đã thực sự tiếp xúc với chuỗi là char * rằng đó là 690 00:47:13,000 --> 00:47:20,000 chúng ta sẽ bắt đầu viết nó như là char * argv và sau đó dấu ngoặc. 691 00:47:20,000 --> 00:47:22,000 Trong 3 Set vấn đề, bạn nhìn thấy một loạt các chức năng, 692 00:47:22,000 --> 00:47:27,000 và bạn thực hiện một loạt các chức năng, vẽ, nhìn lên, tranh giành. 693 00:47:27,000 --> 00:47:31,000 Các nguyên mẫu tất cả được viết cho bạn. 694 00:47:31,000 --> 00:47:33,000 >> Những gì tôi muốn nói chuyện về ở đây với các chức năng thực sự nhanh chóng 695 00:47:33,000 --> 00:47:38,000 là có 3 phần cho họ bất cứ khi nào bạn viết một chức năng. 696 00:47:38,000 --> 00:47:43,000 Bạn phải xác định kiểu trả về của hàm. 697 00:47:43,000 --> 00:47:46,000 Bạn phải xác định một tên định chức năng, nhiệm vụ, và sau đó bạn phải chỉ rõ 698 00:47:46,000 --> 00:47:51,000 danh sách đối số hoặc danh sách các tham số. 699 00:47:51,000 --> 00:47:57,000 Ví dụ, nếu tôi được viết một chức năng để tổng hợp một loạt các số nguyên 700 00:47:57,000 --> 00:48:03,000 và sau đó trở về tôi tổng hợp những gì sẽ là kiểu của tôi trở lại 701 00:48:03,000 --> 00:48:06,000 nếu tôi muốn tổng hợp số nguyên và sau đó trả lại số tiền? 702 00:48:06,000 --> 00:48:12,000 Sau đó, tên của hàm. 703 00:48:12,000 --> 00:48:27,000 Nếu tôi đi về tương lai và màu xanh lá cây, phần này là kiểu trả về. 704 00:48:27,000 --> 00:48:34,000 Phần này là tên. 705 00:48:34,000 --> 00:48:40,000 Và sau đó ở giữa dấu ngoặc đơn 706 00:48:40,000 --> 00:48:46,000 là nơi mà tôi cung cấp cho các đối số, 707 00:48:46,000 --> 00:48:56,000 thường được viết tắt là args, đôi khi được gọi là params cho các thông số. 708 00:48:56,000 --> 00:49:00,000 Và nếu bạn có, bạn chỉ cần chỉ định một. 709 00:49:00,000 --> 00:49:06,000 Nếu bạn có nhiều bạn tách mỗi một bằng dấu phẩy. 710 00:49:06,000 --> 00:49:13,000 Và cho mỗi đối số bạn cung cấp cho nó 2 điều mà-Kevin? 711 00:49:13,000 --> 00:49:18,000 [Kevin] Bạn có để cung cấp cho các loại và sau đó tên. 712 00:49:18,000 --> 00:49:21,000 Và sau đó tên, và tên là tên mà bạn đang sử dụng 713 00:49:21,000 --> 00:49:25,000 để tham khảo lập luận rằng trong phạm vi chức năng tổng hợp, 714 00:49:25,000 --> 00:49:27,000 trong phạm vi chức năng mà bạn đang viết. 715 00:49:27,000 --> 00:49:32,000 >> Bạn không cần phải ví dụ, nếu tôi sẽ tổng hợp, 716 00:49:32,000 --> 00:49:41,000 nói, một mảng các số nguyên we'll làm mảng int, 717 00:49:41,000 --> 00:49:46,000 và tôi sẽ cung cấp cho bản thân mình một số dấu ngoặc nhọn 718 00:49:46,000 --> 00:49:51,000 sau đó khi tôi vượt qua một mảng chức năng tổng hợp 719 00:49:51,000 --> 00:49:55,000 Tôi vượt qua nó ở vị trí đầu tiên của danh sách đối số. 720 00:49:55,000 --> 00:49:59,000 Nhưng các mảng mà tôi vượt qua trong không có có arr tên. 721 00:49:59,000 --> 00:50:07,000 Arr là có được tôi đề cập đến lý luận rằng trong cơ thể của các chức năng. 722 00:50:07,000 --> 00:50:10,000 Một thứ khác mà chúng ta cần phải đưa vào tài khoản, 723 00:50:10,000 --> 00:50:14,000 và điều này là hơi khác nhau từ các chức năng, nhưng tôi nghĩ rằng đó là một điểm quan trọng, 724 00:50:14,000 --> 00:50:20,000 là trong C khi tôi đang viết một chức năng như thế này 725 00:50:20,000 --> 00:50:29,000 làm thế nào để tôi biết nhiều yếu tố trong mảng này? 726 00:50:29,000 --> 00:50:31,000 Đây là phần nào của một câu hỏi trick. 727 00:50:31,000 --> 00:50:35,000 Chúng tôi đã nói chuyện về việc này một chút trong phần cuối cùng của tuần. 728 00:50:35,000 --> 00:50:40,000 Làm thế nào để biết số lượng các yếu tố bên trong một mảng trong C? 729 00:50:40,000 --> 00:50:44,000 Có cách nào không? 730 00:50:44,000 --> 00:50:49,000 >> Nó chỉ ra rằng không có cách nào để biết. 731 00:50:49,000 --> 00:50:52,000 Bạn phải vượt qua nó một cách riêng biệt. 732 00:50:52,000 --> 00:50:55,000 Có một thủ thuật mà bạn có thể làm 733 00:50:55,000 --> 00:51:00,000 nếu bạn đang ở trong cùng một chức năng, trong đó mảng đã được khai báo, 734 00:51:00,000 --> 00:51:04,000 và bạn đang làm việc với một mảng ngăn xếp. 735 00:51:04,000 --> 00:51:06,000 Nhưng điều đó chỉ hoạt động nếu bạn đang trong cùng chức năng. 736 00:51:06,000 --> 00:51:09,000 Một khi bạn vượt qua một mảng chức năng khác hoặc nếu bạn đã khai báo một mảng 737 00:51:09,000 --> 00:51:12,000 và bạn đặt mà mảng trên heap, bạn đã sử dụng malloc 738 00:51:12,000 --> 00:51:15,000  và đó là loại công cụ, sau đó tất cả các cược đang tắt. 739 00:51:15,000 --> 00:51:18,000 Sau đó, bạn thực sự có để vượt qua xung quanh 740 00:51:18,000 --> 00:51:21,000 một đối số đặc biệt hoặc tham số khác 741 00:51:21,000 --> 00:51:23,000 nói cho bạn mảng lớn như thế nào. 742 00:51:23,000 --> 00:51:28,000 Trong trường hợp này, tôi muốn sử dụng một dấu phẩy - Tôi xin lỗi, nó sẽ tắt màn hình ở đây 743 00:51:28,000 --> 00:51:32,000 và tôi muốn vượt qua trong đối số khác 744 00:51:32,000 --> 00:51:40,000  và gọi nó là int len ​​cho chiều dài. 745 00:51:40,000 --> 00:51:44,000 >> Một điều mà có thể đi lên trên quiz 746 00:51:44,000 --> 00:51:49,000 yêu cầu bạn viết hoặc thực hiện một chức năng cụ thể được gọi là một cái gì đó. 747 00:51:49,000 --> 00:51:54,000 Nếu chúng ta không cung cấp cho bạn các mẫu thử nghiệm, do đó, toàn bộ điều này ở đây, 748 00:51:54,000 --> 00:51:58,000 đống lộn xộn này được gọi là khai báo hàm hoặc mẫu thử nghiệm chức năng, 749 00:51:58,000 --> 00:52:01,000 đây là một trong những điều đầu tiên mà bạn sẽ muốn để móng tay xuống nếu nó không được 750 00:52:01,000 --> 00:52:03,000 cho bạn ngay lập tức trên các bài kiểm tra. 751 00:52:03,000 --> 00:52:06,000 Thủ thuật khác mà tôi đã học được là 752 00:52:06,000 --> 00:52:11,000 nói rằng chúng tôi cung cấp cho bạn một nguyên mẫu cho một chức năng, và chúng tôi nói, "Này, bạn đã có để viết nó." 753 00:52:11,000 --> 00:52:16,000 Bên trong dấu ngoặc nhọn mà bạn có trên quiz 754 00:52:16,000 --> 00:52:20,000 nếu bạn nhận thấy rằng có một kiểu trả về và bạn nhận thấy rằng kiểu trả về 755 00:52:20,000 --> 00:52:25,000 là một cái gì đó khác hơn là bãi bỏ, điều đó có nghĩa rằng các chức năng không trả lại bất cứ điều gì, 756 00:52:25,000 --> 00:52:28,000 sau đó một trong những điều mà bạn chắc chắn muốn làm là viết 757 00:52:28,000 --> 00:52:33,000 một số loại tuyên bố trở lại vào cuối của hàm. 758 00:52:33,000 --> 00:52:40,000 Quay trở lại, và trong trường hợp này, chúng tôi sẽ đặt một trống vì chúng tôi muốn điền vào chỗ trống. 759 00:52:40,000 --> 00:52:44,000 Nhưng điều này khiến bạn suy nghĩ một cách đúng đắn về việc làm thế nào tôi sẽ tiếp cận vấn đề này? 760 00:52:44,000 --> 00:52:49,000 Và nó nhắc nhở bạn bạn sẽ phải trả lại một giá trị 761 00:52:49,000 --> 00:52:51,000 người gọi của chức năng. 762 00:52:51,000 --> 00:52:54,000 >> Vâng >> [Sinh viên]. Có phong cách áp dụng khi chúng ta đang viết mã trên quiz? 763 00:52:54,000 --> 00:52:58,000 Chẳng hạn như thụt đầu dòng và loại thứ >> [Sinh viên] Yeah. 764 00:52:58,000 --> 00:53:00,000 Không, không phải là nhiều. 765 00:53:00,000 --> 00:53:09,000 Tôi nghĩ rằng rất nhiều-đây là một cái gì đó chúng tôi sẽ làm rõ về bài kiểm tra vào ngày, 766 00:53:09,000 --> 00:53:15,000 nhưng thường lo lắng về # bao gồm và rằng loại công cụ, nó là loại bên ngoài. 767 00:53:15,000 --> 00:53:17,000 [Sinh viên] bạn cần phải bình luận mã viết tay của bạn? 768 00:53:17,000 --> 00:53:19,000 Bạn cần phải bình luận mã viết tay của bạn? 769 00:53:19,000 --> 00:53:24,000 Bình luận luôn luôn là tốt nếu bạn đang lo lắng về tín dụng một phần 770 00:53:24,000 --> 00:53:29,000 hoặc bạn muốn truyền đạt ý định của bạn để các học sinh lớp. 771 00:53:29,000 --> 00:53:33,000 Nhưng tôi, một lần nữa, sẽ làm rõ trên các bài kiểm tra riêng của mình và vào ngày thi đố vui, 772 00:53:33,000 --> 00:53:39,000 nhưng tôi không tin rằng bạn sẽ được yêu cầu để viết ý kiến, không có. 773 00:53:39,000 --> 00:53:42,000 Thường không, nhưng nó chắc chắn các loại điều 774 00:53:42,000 --> 00:53:45,000 bạn có thể truyền đạt ý định của bạn, như "Này, đây là nơi tôi đang đi với nó." 775 00:53:45,000 --> 00:53:49,000 Và đôi khi có thể giúp với tín dụng một phần. 776 00:53:49,000 --> 00:53:51,000 Cool. 777 00:53:51,000 --> 00:53:53,000 >> Basil. 778 00:53:53,000 --> 00:53:56,000 [Basil] sự khác biệt giữa việc khai báo, nói rằng, int lang là gì 779 00:53:56,000 --> 00:54:03,000 trong các đối số hoặc các thông số so với khai báo một biến trong phạm vi chức năng? 780 00:54:03,000 --> 00:54:05,000 Wow, cà phê đi xuống khí quản. 781 00:54:05,000 --> 00:54:07,000 Basil] Cũng giống như những điều chúng ta muốn đặt trong lập luận. 782 00:54:07,000 --> 00:54:09,000 Vâng, đó là một câu hỏi lớn. 783 00:54:09,000 --> 00:54:11,000 Làm thế nào để bạn lựa chọn những gì những thứ bạn muốn đặt trong các đối số 784 00:54:11,000 --> 00:54:17,000 so với những gì điều bạn nên làm bên trong của hàm? 785 00:54:17,000 --> 00:54:24,000 Trong trường hợp này, chúng tôi bao gồm cả hai như là đối số 786 00:54:24,000 --> 00:54:29,000 bởi vì họ là một cái gì đó rằng bất cứ ai sẽ sử dụng chức năng tổng hợp 787 00:54:29,000 --> 00:54:32,000 cần phải xác định những điều đó. 788 00:54:32,000 --> 00:54:35,000 >> Các chức năng tổng hợp, giống như chúng ta đã nói, không có cách nào để biết 789 00:54:35,000 --> 00:54:40,000 lớn như thế nào mảng là nó được từ người gọi hoặc bất cứ ai đang sử dụng chức năng tổng hợp. 790 00:54:40,000 --> 00:54:44,000 Nó không có cách nào biết mảng đó lớn như thế nào. 791 00:54:44,000 --> 00:54:48,000 Lý do chúng tôi vượt qua trong chiều dài này ngay tại đây như một tham số 792 00:54:48,000 --> 00:54:51,000 bởi vì đó là một cái gì đó về cơ bản chúng ta đang nói với người gọi của chức năng, 793 00:54:51,000 --> 00:54:55,000 bất cứ ai sử dụng chức năng tổng hợp, "Hey, không chỉ làm bạn có để cung cấp cho chúng tôi một mảng 794 00:54:55,000 --> 00:54:59,000 ints, bạn cũng phải cho chúng tôi biết làm thế nào các mảng lớn mà bạn đã ban cho chúng ta. " 795 00:54:59,000 --> 00:55:03,000 Basil] Những người sẽ được cả hai đối số dòng lệnh? 796 00:55:03,000 --> 00:55:06,000 Không, đây là đối số thực tế rằng bạn sẽ vượt qua chức năng. 797 00:55:06,000 --> 00:55:10,000 >> Hãy để tôi làm một trang mới đây. 798 00:55:10,000 --> 00:55:13,000 [Basil] Giống như tên sẽ vượt qua 799 00:55:13,000 --> 00:55:24,000 [Nate H. Nếu tôi có int main (void), 800 00:55:24,000 --> 00:55:27,000 và tôi sẽ đặt trong 0 trở lại của tôi xuống đây ở phía dưới, 801 00:55:27,000 --> 00:55:31,000 và nói rằng tôi muốn gọi hàm tổng. 802 00:55:31,000 --> 00:55:42,000 Tôi muốn nói int x = sum (); 803 00:55:42,000 --> 00:55:46,000 Để sử dụng chức năng tổng hợp, tôi phải vượt qua trong cả hai mảng mà tôi muốn tổng hợp 804 00:55:46,000 --> 00:55:51,000 và chiều dài của mảng, do đó, đây là nơi mà 805 00:55:51,000 --> 00:55:54,000 giả sử tôi có một mảng ints, 806 00:55:54,000 --> 00:56:12,000 nói rằng tôi đã có int numbaz [] = 1, 2, 3, 807 00:56:12,000 --> 00:56:16,000 loại sử dụng hack lên đúng cú pháp, 808 00:56:16,000 --> 00:56:21,000 sau đó những gì tôi sẽ làm là tóm tôi sẽ muốn vượt qua trong 809 00:56:21,000 --> 00:56:27,000 cả hai numbaz và số 3 810 00:56:27,000 --> 00:56:30,000 nói với chức năng tổng hợp "rồi, đây là mảng tôi muốn bạn tổng hợp." 811 00:56:30,000 --> 00:56:34,000 "Đây là kích thước của nó." 812 00:56:34,000 --> 00:56:39,000 Điều đó làm cho tinh thần? Điều đó trả lời câu hỏi của bạn? 813 00:56:39,000 --> 00:56:42,000 >> Trong nhiều cách nó không song song những gì chúng tôi đang làm với chính 814 00:56:42,000 --> 00:56:44,000 khi chúng ta có các đối số dòng lệnh. 815 00:56:44,000 --> 00:56:47,000 Một chương trình như Caesar cipher, ví dụ, cần 816 00:56:47,000 --> 00:56:53,000 đối số dòng lệnh sẽ không thể làm bất cứ điều gì. 817 00:56:53,000 --> 00:56:57,000 Nó sẽ không biết làm thế nào để mã hóa nếu bạn không nói với nó những gì quan trọng để sử dụng 818 00:56:57,000 --> 00:57:03,000 hoặc nếu bạn không nói cho nó chuỗi bạn muốn mã hóa. 819 00:57:03,000 --> 00:57:08,000 Khiến cho đầu vào, đây là nơi mà chúng tôi đã có 2 cơ chế khác nhau 820 00:57:08,000 --> 00:57:14,000 đầu vào từ người dùng, để lấy thông tin từ người sử dụng. 821 00:57:14,000 --> 00:57:19,000 Cho vấn đề là Set 1, chúng ta đã thấy getInt này, GetString, cách GetFloat 822 00:57:19,000 --> 00:57:26,000 khiến cho đầu vào, và đó được gọi là bằng cách sử dụng các dòng đầu vào tiêu chuẩn. 823 00:57:26,000 --> 00:57:28,000 Nó hơi khác nhau. 824 00:57:28,000 --> 00:57:31,000 Đó là một cái gì đó mà bạn có thể làm cùng một lúc như trái ngược với 825 00:57:31,000 --> 00:57:35,000 khi bạn gọi các chương trình, khi bạn bắt đầu chương trình đang chạy. 826 00:57:35,000 --> 00:57:41,000 Tất cả các đối số dòng lệnh được quy định cụ thể khi bạn bắt đầu chạy chương trình. 827 00:57:41,000 --> 00:57:47,000 Chúng tôi đã pha trộn hai của những người. 828 00:57:47,000 --> 00:57:52,000 Khi chúng ta sử dụng đối số đến một chức năng, nó giống như các đối số dòng lệnh chính. 829 00:57:52,000 --> 00:57:56,000 Đó là khi bạn gọi các chức năng bạn cần để cho nó 830 00:57:56,000 --> 00:58:05,000 chính xác những gì nó cần để thực hiện nhiệm vụ của mình. 831 00:58:05,000 --> 00:58:08,000 Một điều tốt để xem xét, và tôi sẽ cho bạn nhìn vào nó trong thời gian rảnh rỗi của bạn, 832 00:58:08,000 --> 00:58:11,000 và nó đã được bao gồm trong các bài kiểm tra là khái niệm phạm vi này 833 00:58:11,000 --> 00:58:15,000 và các biến địa phương so với các biến toàn cầu. 834 00:58:15,000 --> 00:58:18,000 Do chú ý đó. 835 00:58:18,000 --> 00:58:23,000 >> Bây giờ chúng ta đang nhận được vào các công cụ này khác, 836 00:58:23,000 --> 00:58:27,000 trong tuần 3, chúng tôi bắt đầu nói về tìm kiếm và phân loại. 837 00:58:27,000 --> 00:58:32,000 Tìm kiếm và phân loại, ít nhất là trong CS50, 838 00:58:32,000 --> 00:58:39,000 là rất nhiều một giới thiệu về một số trong những phần lý thuyết của khoa học máy tính. 839 00:58:39,000 --> 00:58:42,000 Các vấn đề của tìm kiếm, vấn đề phân loại 840 00:58:42,000 --> 00:58:46,000 là lớn, các vấn đề kinh điển. 841 00:58:46,000 --> 00:58:52,000 Làm thế nào để bạn tìm thấy một số lượng cụ thể trong một mảng tỷ số nguyên? 842 00:58:52,000 --> 00:58:55,000 Làm thế nào để bạn tìm thấy một tên cụ thể bên trong một cuốn sách điện thoại 843 00:58:55,000 --> 00:58:59,000 được lưu trữ trên máy tính xách tay của bạn? 844 00:58:59,000 --> 00:59:04,000 Và vì vậy chúng tôi giới thiệu khái niệm về thời gian chạy tiệm cận 845 00:59:04,000 --> 00:59:11,000 để thực sự định lượng bao lâu, khó khăn thế nào những vấn đề, 846 00:59:11,000 --> 00:59:14,000 bao lâu họ thực hiện để giải quyết. 847 00:59:14,000 --> 00:59:20,000 , Tôi tin rằng, bài kiểm tra năm 2011, có một vấn đề mà tôi nghĩ rằng giá trị 848 00:59:20,000 --> 00:59:27,000 bao gồm rất nhanh chóng, đó là này, vấn đề 12. 849 00:59:27,000 --> 00:59:32,000 O không có, nó là Omega. 850 00:59:32,000 --> 00:59:41,000 >> Ở đây chúng ta đang nói về thời gian chạy nhanh nhất có thể 851 00:59:41,000 --> 00:59:46,000 cho một thuật toán cụ thể và sau đó chạy thời gian chậm nhất có thể. 852 00:59:46,000 --> 00:59:52,000 Này Omega và O là thực sự chỉ là các phím tắt. 853 00:59:52,000 --> 00:59:55,000 Họ là những phím tắt ký hiệu để nói 854 00:59:55,000 --> 00:59:59,000 nhanh như thế nào trong trường hợp tốt nhất có thể chạy thuật toán của chúng tôi, 855 00:59:59,000 --> 01:00:06,000 và thuật toán của chúng tôi sẽ chạy chậm trong trường hợp xấu nhất có thể như thế nào? 856 01:00:06,000 --> 01:00:10,000 Hãy làm một vài trong số này, và chúng cũng được bảo hiểm 857 01:00:10,000 --> 01:00:13,000 trong ngắn trên ký hiệu tiệm cận, mà tôi đánh giá cao đề nghị. 858 01:00:13,000 --> 01:00:17,000 Jackson đã làm một công việc thực sự tốt. 859 01:00:17,000 --> 01:00:23,000 Với tìm kiếm nhị phân, chúng ta nói về tìm kiếm nhị phân là một thuật toán, 860 01:00:23,000 --> 01:00:28,000 và chúng ta thường nói về nó trong các điều khoản của lớn O. 861 01:00:28,000 --> 01:00:30,000 O lớn là gì? 862 01:00:30,000 --> 01:00:34,000 Thời gian chạy chậm nhất có thể tìm kiếm nhị phân là gì? 863 01:00:34,000 --> 01:00:36,000 [Sinh viên] N ²? 864 01:00:36,000 --> 01:00:41,000 Đóng cửa, tôi đoán tương tự như. 865 01:00:41,000 --> 01:00:43,000 Đó là nhanh hơn rất nhiều hơn thế. 866 01:00:43,000 --> 01:00:45,000 [Sinh viên] Binary >> Vâng, tìm kiếm nhị phân. 867 01:00:45,000 --> 01:00:47,000 [Sinh viên] log n. 868 01:00:47,000 --> 01:00:49,000 Đăng nhập n, do đó, những gì không đăng nhập n có nghĩa là? 869 01:00:49,000 --> 01:00:51,000 Nó nửa mỗi lần lặp. 870 01:00:51,000 --> 01:00:56,000 Chính xác, do đó, trong trường hợp chậm nhất có thể, 871 01:00:56,000 --> 01:01:00,000 nói rằng nếu bạn có một mảng được sắp xếp 872 01:01:00,000 --> 01:01:08,000 của một triệu số nguyên và số lượng bạn đang tìm kiếm 873 01:01:08,000 --> 01:01:14,000 hoặc là yếu tố đầu tiên trong mảng hoặc phần tử cuối cùng trong mảng. 874 01:01:14,000 --> 01:01:18,000 Hãy nhớ rằng, các thuật toán tìm kiếm nhị phân hoạt động bằng cách nhìn vào các yếu tố trung lưu, 875 01:01:18,000 --> 01:01:21,000 nhìn thấy nếu đó là trận đấu mà bạn đang tìm kiếm. 876 01:01:21,000 --> 01:01:23,000 Nếu có, sau đó tuyệt vời, bạn thấy nó. 877 01:01:23,000 --> 01:01:27,000 >> Trong trường hợp tốt nhất có thể, không tìm kiếm nhị phân chạy nhanh như thế nào? 878 01:01:27,000 --> 01:01:29,000 [Sinh viên] 1. 879 01:01:29,000 --> 01:01:32,000 1, nó là hằng số thời gian, O lớn của 1. Yeah. 880 01:01:32,000 --> 01:01:36,000 [Sinh viên] Tôi có một câu hỏi. Khi bạn nói đăng nhập của n, bạn có nghĩa là đối với cơ sở 2, phải không? 881 01:01:36,000 --> 01:01:40,000 Có, vì vậy đó là điều khác. 882 01:01:40,000 --> 01:01:44,000 Chúng ta nói n log, và tôi đoán khi tôi còn học trung học 883 01:01:44,000 --> 01:01:48,000 Tôi luôn luôn giả định rằng bản ghi là 10 cơ sở. 884 01:01:48,000 --> 01:01:57,000 Yeah, vì vậy có, đăng nhập cơ sở 2 thường là những gì chúng tôi sử dụng. 885 01:01:57,000 --> 01:02:02,000 Một lần nữa, sẽ trở lại tìm kiếm nhị phân, nếu bạn đang tìm kiếm cho một trong hai 886 01:02:02,000 --> 01:02:05,000 phần tử ở cuối hoặc phần tử ở đầu rất, 887 01:02:05,000 --> 01:02:08,000 bởi vì bạn bắt đầu ở giữa và sau đó bạn loại bỏ 888 01:02:08,000 --> 01:02:13,000 tùy theo điều kiện nào 1/2 không đáp ứng được các tiêu chí mà bạn đang tìm kiếm, 889 01:02:13,000 --> 01:02:15,000 và bạn đi đến nửa rưỡi tiếp theo tiếp theo và một nửa sau. 890 01:02:15,000 --> 01:02:19,000 Nếu tôi đang tìm kiếm các yếu tố lớn nhất trong mảng số nguyên triệu 891 01:02:19,000 --> 01:02:25,000 Tôi sẽ giảm một nửa đăng nhập 1 triệu lần 892 01:02:25,000 --> 01:02:28,000 trước khi cuối cùng tôi đã kiểm tra và thấy rằng các phần tử tôi đang tìm kiếm 893 01:02:28,000 --> 01:02:33,000 là lớn nhất trong chỉ số cao nhất của mảng, 894 01:02:33,000 --> 01:02:38,000 và nó sẽ đưa log n, đăng nhập 1 triệu lần. 895 01:02:38,000 --> 01:02:40,000 >> Bong bóng sắp xếp. 896 01:02:40,000 --> 01:02:43,000 Bạn có nhớ các thuật toán sắp xếp bong bóng? 897 01:02:43,000 --> 01:02:47,000 Kevin, bạn có thể cung cấp cho tôi một bản tóm tắt nhanh chóng của những gì đã xảy ra trong các thuật toán sắp xếp bong bóng? 898 01:02:47,000 --> 01:02:50,000 [Kevin] Về cơ bản nó đi qua tất cả mọi thứ trong danh sách. 899 01:02:50,000 --> 01:02:52,000 Nó nhìn đầu tiên hai. 900 01:02:52,000 --> 01:02:55,000 Nếu một trong những đầu tiên là lớn hơn so với cái thứ hai nó hoán đổi chúng. 901 01:02:55,000 --> 01:02:58,000 Sau đó, nó so sánh điều, thứ hai và thứ ba cùng, hoán đổi, 902 01:02:58,000 --> 01:03:00,000 thứ ba và thứ tư, tất cả các con đường xuống. 903 01:03:00,000 --> 01:03:03,000 Lớn hơn con số sẽ theo dõi đến cùng. 904 01:03:03,000 --> 01:03:07,000 Và sau khi vòng tuy nhiên nhiều người bạn đang làm. 905 01:03:07,000 --> 01:03:11,000 Chính xác, do đó, những gì Kevin nói rằng chúng tôi sẽ xem lớn hơn con số 906 01:03:11,000 --> 01:03:15,000 bong bóng lên đến cuối mảng. 907 01:03:15,000 --> 01:03:19,000 Ví dụ, bạn có tâm đi bộ chúng tôi thông qua các ví dụ này nếu điều này là mảng của chúng tôi? 908 01:03:19,000 --> 01:03:21,000 [Kevin] Bạn sẽ mất 2 và 3. 909 01:03:21,000 --> 01:03:23,000 3 là lớn hơn 2, do đó, bạn trao đổi chúng. 910 01:03:23,000 --> 01:03:29,000 [Nate H. phải, vì vậy chúng tôi trao đổi này, và do đó, chúng tôi nhận được 2, 3, 6, 4, và 9. 911 01:03:29,000 --> 01:03:31,000 [Kevin] Sau đó bạn so sánh 3 và 6. 912 01:03:31,000 --> 01:03:33,000 3 là nhỏ hơn 6, do đó, bạn để lại cho họ, 913 01:03:33,000 --> 01:03:37,000 và 6 và 4, bạn muốn trao đổi chúng vì 4 là nhỏ hơn 6. 914 01:03:37,000 --> 01:03:42,000 [Nate H.] Quyền, do đó tôi nhận được 2, 3, 4, 6, 9. 915 01:03:42,000 --> 01:03:46,000 [Kevin] Và 9 là lớn hơn 6, vì vậy bạn rời khỏi nó. 916 01:03:46,000 --> 01:03:48,000 Và bạn muốn quay trở lại thông qua nó một lần nữa. 917 01:03:48,000 --> 01:03:50,000 >> [Nate H.] Tôi thực hiện vào thời điểm này? >> [Kevin] số 918 01:03:50,000 --> 01:03:52,000 Và tại sao tôi không được thực hiện vào thời điểm này? 919 01:03:52,000 --> 01:03:54,000 Bởi vì nó trông giống như mảng của tôi được sắp xếp. Tôi đang nhìn vào nó. 920 01:03:54,000 --> 01:03:57,000 [Kevin] Đi qua nó một lần nữa và chắc chắn rằng có những giao dịch hoán đổi không 921 01:03:57,000 --> 01:04:00,000 trước khi bạn hoàn toàn có thể dừng lại. 922 01:04:00,000 --> 01:04:04,000 Chính xác, vì vậy bạn cần tiếp tục đi qua và chắc chắn rằng không có giao dịch hoán đổi 923 01:04:04,000 --> 01:04:06,000 bạn có thể làm vào thời điểm này. 924 01:04:06,000 --> 01:04:08,000 Đó là thực sự chỉ là may mắn, như bạn nói, mà chúng ta đã kết thúc 925 01:04:08,000 --> 01:04:12,000 chỉ có làm cho 1 đi qua và chúng tôi đang sắp xếp. 926 01:04:12,000 --> 01:04:16,000 Nhưng để làm điều này trong trường hợp chung, chúng tôi thực sự sẽ phải làm điều này hơn và hơn nữa. 927 01:04:16,000 --> 01:04:20,000 Và trên thực tế, đây là một ví dụ về trường hợp tốt nhất có thể, 928 01:04:20,000 --> 01:04:24,000 như chúng ta đã thấy vấn đề này. 929 01:04:24,000 --> 01:04:28,000 Chúng tôi thấy rằng trường hợp tốt nhất có thể được n. 930 01:04:28,000 --> 01:04:32,000 Chúng tôi đã đi qua thời gian 1 mảng. 931 01:04:32,000 --> 01:04:35,000 Trường hợp xấu nhất có thể cho thuật toán này là gì? 932 01:04:35,000 --> 01:04:37,000 [Kevin] N ². 933 01:04:37,000 --> 01:04:41,000 Và những gì mà nhìn như thế nào? Một cái nhìn mảng sẽ như thế sẽ mất thời gian ² n? 934 01:04:41,000 --> 01:04:43,000 [Kevin] [không nghe được sắp xếp. 935 01:04:43,000 --> 01:04:51,000 Chính xác, do đó, nếu tôi đã có các mảng 9, 7, 6, 5, 2, 936 01:04:51,000 --> 01:04:54,000 đầu tiên 9 bong bóng tất cả các con đường lên. 937 01:04:54,000 --> 01:04:59,000 Sau 1 lặp đi lặp lại, chúng tôi muốn có 7, 6, 5, 2, 9. 938 01:04:59,000 --> 01:05:07,000 Thì 7 sẽ bong bóng lên, 6, 5, 2, 7, 9, và vv và vv. 939 01:05:07,000 --> 01:05:13,000 >> Chúng tôi phải đi qua toàn bộ mảng n lần, 940 01:05:13,000 --> 01:05:16,000 và bạn thực sự có thể nhận được hơn một chút chính xác hơn này 941 01:05:16,000 --> 01:05:23,000 bởi vì một khi chúng tôi đã di chuyển trong 9 tất cả các cách vào vị trí có thể có của nó. 942 01:05:23,000 --> 01:05:26,000 chúng ta biết rằng chúng ta không bao giờ có để so sánh với phần tử đó một lần nữa. 943 01:05:26,000 --> 01:05:29,000 Một khi chúng ta bắt đầu sủi bọt trong 7 944 01:05:29,000 --> 01:05:35,000 chúng ta biết rằng chúng ta có thể dừng lại một khi 7 ngay trước khi các 9 945 01:05:35,000 --> 01:05:37,000 kể từ khi chúng tôi đã so sánh 9 đến nó. 946 01:05:37,000 --> 01:05:46,000 Nếu bạn làm điều này một cách thông minh, nó không phải là thực sự, tôi đoán, có nhiều thời gian. 947 01:05:46,000 --> 01:05:49,000 Bạn sẽ không so sánh tất cả có thể không nghe được] kết hợp 948 01:05:49,000 --> 01:05:55,000 mỗi lần duy nhất bạn đi qua mỗi lần lặp. 949 01:05:55,000 --> 01:05:59,000 Tuy nhiên, vẫn còn, khi chúng ta nói về điều này trên ràng buộc chúng ta nói rằng 950 01:05:59,000 --> 01:06:04,000 bạn đang tìm kiếm tại n ² so sánh tất cả các cách thức thông qua. 951 01:06:04,000 --> 01:06:12,000 >> Hãy quay trở lại, và kể từ khi chúng tôi đang bắt đầu để có được một chút ngắn về thời gian 952 01:06:12,000 --> 01:06:15,000 Tôi sẽ nói bạn chắc chắn nên đi qua phần còn lại của bảng này, 953 01:06:15,000 --> 01:06:17,000 điền vào nó tất cả ra ngoài. 954 01:06:17,000 --> 01:06:20,000 Hãy suy nghĩ của các ví dụ. Hãy suy nghĩ của các ví dụ cụ thể. 955 01:06:20,000 --> 01:06:22,000 Đó là thực sự tiện dụng và hữu ích để làm. 956 01:06:22,000 --> 01:06:25,000 Vẽ nó ra. 957 01:06:25,000 --> 01:06:28,000 Đây là loại bảng khi bạn đi qua trong lĩnh vực khoa học máy tính 958 01:06:28,000 --> 01:06:32,000 bạn thực sự nên bắt đầu để biết những trái tim bằng. 959 01:06:32,000 --> 01:06:34,000 Đây là loại câu hỏi mà bạn nhận được trong các cuộc phỏng vấn. 960 01:06:34,000 --> 01:06:36,000 Đây là những loại những điều tốt để biết, 961 01:06:36,000 --> 01:06:41,000 và suy nghĩ về những trường hợp cạnh đó, thực sự tìm ra làm thế nào để suy nghĩ về 962 01:06:41,000 --> 01:06:45,000 biết rằng cho bong bóng sắp xếp các mảng tồi tệ nhất có thể 963 01:06:45,000 --> 01:06:52,000 để sắp xếp với đó là một trong đó là theo thứ tự ngược. 964 01:06:52,000 --> 01:06:58,000 >> Con trỏ. Hãy nói một chút về con trỏ. 965 01:06:58,000 --> 01:07:03,000 Trong những phút cuối, chúng tôi có ở đây 966 01:07:03,000 --> 01:07:11,000 Tôi biết đây là một cái gì đó cùng với tập tin I / O còn khá mới mẻ. 967 01:07:11,000 --> 01:07:19,000 Khi chúng ta nói về con trỏ là lý do chúng ta muốn nói về con trỏ 968 01:07:19,000 --> 01:07:24,000 là bởi vì, một, khi chúng tôi đang làm việc trong C 969 01:07:24,000 --> 01:07:33,000 chúng tôi thực sự ở mức khá thấp so với hầu hết các ngôn ngữ lập trình hiện đại. 970 01:07:33,000 --> 01:07:38,000 Chúng tôi thực sự có thể thao tác các biến trong bộ nhớ, 971 01:07:38,000 --> 01:07:43,000 tìm ra nơi mà họ đang thực sự nằm trong bộ nhớ RAM của chúng tôi. 972 01:07:43,000 --> 01:07:46,000 Khi bạn đã đi vào học các lớp hệ điều hành bạn sẽ thấy 973 01:07:46,000 --> 01:07:48,000 rằng đó là, một lần nữa, loại một trừu tượng. 974 01:07:48,000 --> 01:07:50,000 Đó không phải là thực sự là trường hợp. 975 01:07:50,000 --> 01:07:52,000 Chúng tôi đã có bộ nhớ ảo ẩn những chi tiết từ chúng tôi. 976 01:07:52,000 --> 01:07:58,000 >> Nhưng bây giờ bạn có thể giả định rằng khi bạn có một chương trình, 977 01:07:58,000 --> 01:08:02,000 ví dụ, khi bạn bắt đầu chạy chương trình mật mã Caesar của bạn 978 01:08:02,000 --> 01:08:06,000 Tôi sẽ chuyển đổi trở lại iPad của tôi thực sự nhanh chóng 979 01:08:06,000 --> 01:08:12,000 chương trình của bạn khi bắt đầu, nếu bạn có, nói, 980 01:08:12,000 --> 01:08:15,000 4 GB bộ nhớ RAM trên máy tính xách tay của bạn, 981 01:08:15,000 --> 01:08:21,000 bạn được đặt sang một bên đoạn này, và chúng tôi sẽ gọi đây là bộ nhớ RAM. 982 01:08:21,000 --> 01:08:25,000 Và nó bắt đầu ở một nơi chúng ta sẽ gọi 0, 983 01:08:25,000 --> 01:08:30,000 và nó kết thúc ở một nơi mà chúng ta sẽ gọi 4 gigabyte. 984 01:08:30,000 --> 01:08:37,000 Tôi thực sự không thể viết. Người đàn ông, đó là tấn công. 985 01:08:37,000 --> 01:08:40,000 Khi chương trình của bạn thực hiện 986 01:08:40,000 --> 01:08:44,000 hệ điều hành khắc RAM, 987 01:08:44,000 --> 01:08:51,000 và nó xác định các phân đoạn khác nhau cho các phần khác nhau của chương trình của bạn. 988 01:08:51,000 --> 01:08:58,000 Xuống đây khu vực này là của một vùng đất không có người đàn ông. 989 01:08:58,000 --> 01:09:02,000 Khi bạn đi lên xa hơn một chút ở đây 990 01:09:02,000 --> 01:09:05,000 bạn đã thực sự nơi 991 01:09:05,000 --> 01:09:09,000 mã cho chương trình của bạn sống. 992 01:09:09,000 --> 01:09:13,000 Đó là mã nhị phân thực tế, đó là tập tin thực thi thực sự được nạp vào bộ nhớ 993 01:09:13,000 --> 01:09:17,000 khi bạn chạy một chương trình, và nó sống trong các đoạn mã. 994 01:09:17,000 --> 01:09:22,000 Và khi chương trình của bạn thực hiện các bộ vi xử lý xem xét đoạn mã này 995 01:09:22,000 --> 01:09:24,000 để tìm ra các lệnh tiếp theo là gì? 996 01:09:24,000 --> 01:09:27,000 Dòng tiếp theo của mã tôi cần phải thực hiện là gì? 997 01:09:27,000 --> 01:09:31,000 >> Ngoài ra còn có một phân đoạn dữ liệu, và đây là nơi mà những người hằng chuỗi 998 01:09:31,000 --> 01:09:34,000 được lưu trữ mà bạn đã sử dụng. 999 01:09:34,000 --> 01:09:42,000 Và sau đó xa hơn nữa nơi này được gọi là đống. 1000 01:09:42,000 --> 01:09:46,000 Chúng tôi truy cập vào bộ nhớ trong đó bằng cách sử dụng malloc, 1001 01:09:46,000 --> 01:09:49,000 và sau đó về phía đầu của chương trình của bạn 1002 01:09:49,000 --> 01:09:52,000 có ngăn xếp, 1003 01:09:52,000 --> 01:09:57,000 và đó là nơi chúng tôi đã được chơi cho hầu hết đầu. 1004 01:09:57,000 --> 01:09:59,000 Đây không phải là quy mô hay bất cứ điều gì. 1005 01:09:59,000 --> 01:10:03,000 Rất nhiều trong số này là rất phụ thuộc vào máy, 1006 01:10:03,000 --> 01:10:10,000 hệ điều hành phụ thuộc, nhưng điều này là tương đối những thứ như thế nào chửi rủa lên. 1007 01:10:10,000 --> 01:10:17,000 Khi bạn chạy một chương trình và bạn khai báo một biến gọi là x- 1008 01:10:17,000 --> 01:10:27,000 Tôi sẽ rút ra một hộp bên dưới, và điều này là có được RAM là tốt. 1009 01:10:27,000 --> 01:10:29,000 Và tôi sẽ xem xét. 1010 01:10:29,000 --> 01:10:34,000 Chúng tôi sẽ vẽ các đường lởm chởm để cho biết đây chỉ là một phần nhỏ của RAM 1011 01:10:34,000 --> 01:10:38,000 và không phải tất cả của nó như chúng ta rút ra ở đầu trang. 1012 01:10:38,000 --> 01:10:43,000 >> Nếu tôi tuyên bố một biến số nguyên được gọi là x, 1013 01:10:43,000 --> 01:10:49,000 sau đó những gì tôi thực sự có được một bản đồ 1014 01:10:49,000 --> 01:10:54,000 được lưu trữ trong bảng biểu tượng của chương trình của tôi 1015 01:10:54,000 --> 01:11:00,000 kết nối x tên cho vùng này của bộ nhớ mà tôi đã rút ra 1016 01:11:00,000 --> 01:11:03,000 ngay tại đây giữa các thanh dọc. 1017 01:11:03,000 --> 01:11:08,000 Nếu tôi có một dòng mã trong chương trình của tôi nói rằng x = 7 1018 01:11:08,000 --> 01:11:15,000 bộ xử lý biết "Ồ, được rồi, tôi biết rằng x sống tại vị trí này trong bộ nhớ." 1019 01:11:15,000 --> 01:11:25,000 "Tôi sẽ đi trước và viết một 7". 1020 01:11:25,000 --> 01:11:28,000 Làm thế nào để biết vị trí này là trong bộ nhớ? 1021 01:11:28,000 --> 01:11:30,000 Vâng, đó là tất cả được thực hiện tại thời gian biên dịch. 1022 01:11:30,000 --> 01:11:34,000 Trình biên dịch sẽ chăm sóc của bố trí nơi mỗi biến sẽ đi 1023 01:11:34,000 --> 01:11:40,000 và tạo ra một bản đồ đặc biệt hay đúng hơn là kết nối các dấu chấm 1024 01:11:40,000 --> 01:11:43,000 giữa một biểu tượng và sẽ đi đâu, tên của một biến 1025 01:11:43,000 --> 01:11:46,000 và nơi mà nó sẽ sống trong bộ nhớ. 1026 01:11:46,000 --> 01:11:50,000 Nhưng nó quay ra rằng chúng tôi thực sự có thể truy cập nó trong các chương trình của chúng tôi là tốt. 1027 01:11:50,000 --> 01:11:55,000 Điều này trở nên quan trọng khi chúng tôi bắt đầu nói chuyện về một số cấu trúc dữ liệu, 1028 01:11:55,000 --> 01:11:58,000 đó là một khái niệm mà chúng tôi sẽ giới thiệu sau. 1029 01:11:58,000 --> 01:12:09,000 >> Nhưng bây giờ, những gì bạn có thể biết là tôi có thể tạo một con trỏ đến vị trí này, x. 1030 01:12:09,000 --> 01:12:12,000 Ví dụ, tôi có thể tạo ra một biến con trỏ. 1031 01:12:12,000 --> 01:12:16,000 Khi chúng ta tạo một biến con trỏ, chúng tôi sử dụng các ký hiệu ngôi sao. 1032 01:12:16,000 --> 01:12:21,000 Trong trường hợp này, điều này nói tôi sẽ tạo ra một con trỏ đến một int. 1033 01:12:21,000 --> 01:12:24,000 Đó là một loại giống như bất kỳ khác. 1034 01:12:24,000 --> 01:12:27,000 Chúng tôi cung cấp cho nó một biến như y, 1035 01:12:27,000 --> 01:12:32,000 và sau đó chúng tôi thiết lập nó bằng với địa chỉ, địa chỉ. 1036 01:12:32,000 --> 01:12:38,000 Trong trường hợp này, chúng ta có thể thiết lập y để trỏ đến x 1037 01:12:38,000 --> 01:12:43,000 bằng cách lấy địa chỉ của x, mà chúng ta làm với ký hiệu này, 1038 01:12:43,000 --> 01:12:55,000 và sau đó chúng tôi thiết lập y để trỏ đến nó. 1039 01:12:55,000 --> 01:12:59,000 Điều này về cơ bản không có gì nếu chúng ta nhìn vào bộ nhớ RAM của chúng tôi 1040 01:12:59,000 --> 01:13:02,000 điều này tạo ra một biến riêng biệt. 1041 01:13:02,000 --> 01:13:04,000 Nó sẽ gọi nó là y, 1042 01:13:04,000 --> 01:13:06,000 và khi dòng này của mã thực thi 1043 01:13:06,000 --> 01:13:13,000 nó thực sự sẽ tạo ra một con trỏ ít mà chúng tôi thường vẽ như một mũi tên, 1044 01:13:13,000 --> 01:13:15,000 và nó đặt y để trỏ đến x. 1045 01:13:15,000 --> 01:13:17,000 Vâng. 1046 01:13:17,000 --> 01:13:19,000 [Sinh viên] Nếu x là một con trỏ, bạn sẽ chỉ cần làm 1047 01:13:19,000 --> 01:13:22,000 int * y = x thay vì có dấu "và"? 1048 01:13:22,000 --> 01:13:24,000 Vâng. 1049 01:13:24,000 --> 01:13:27,000 Nếu x là một con trỏ, sau đó bạn có thể thiết lập 2 con trỏ bình đẳng với nhau, 1050 01:13:27,000 --> 01:13:30,000 trong trường hợp đó y sẽ không trỏ đến x, 1051 01:13:30,000 --> 01:13:34,000 nhưng nó sẽ trỏ đến bất cứ điều gì x được trỏ đến. 1052 01:13:34,000 --> 01:13:37,000 Thật không may, chúng tôi hết thời gian. 1053 01:13:37,000 --> 01:13:44,000 >> Những gì tôi sẽ nói vào thời điểm này, chúng ta có thể nói về ẩn này, 1054 01:13:44,000 --> 01:13:49,000 nhưng tôi sẽ nói bắt đầu làm việc thông qua vấn đề này, # 14. 1055 01:13:49,000 --> 01:13:53,000 Bạn có thể thấy đã có một chút điền vào cho bạn ở đây. 1056 01:13:53,000 --> 01:13:57,000 Bạn có thể thấy rằng khi chúng ta khai báo 2 con trỏ, int * x * y, 1057 01:13:57,000 --> 01:14:01,000 và lưu ý chỉ * bên cạnh các biến là một cái gì đó đã được thực hiện năm ngoái. 1058 01:14:01,000 --> 01:14:05,000 Nó chỉ ra rằng điều này là tương tự như những gì chúng tôi đang làm trong năm nay. 1059 01:14:05,000 --> 01:14:11,000 Nó không quan trọng nơi bạn viết * khi bạn khai báo con trỏ. 1060 01:14:11,000 --> 01:14:17,000 Nhưng chúng tôi đã viết bên cạnh các loại * 1061 01:14:17,000 --> 01:14:24,000 bởi vì điều đó làm cho nó rất rõ ràng rằng bạn đang khai báo một biến con trỏ. 1062 01:14:24,000 --> 01:14:27,000 Bạn có thể thấy rằng tuyên bố 2 con trỏ cho chúng ta 2 hộp. 1063 01:14:27,000 --> 01:14:31,000 Ở đây khi chúng ta thiết lập x bằng malloc 1064 01:14:31,000 --> 01:14:34,000 điều này nói là thiết lập bộ nhớ lưu trữ trong heap. 1065 01:14:34,000 --> 01:14:41,000 Hộp nhỏ này ngay tại đây, vòng tròn này, nằm trên heap này. 1066 01:14:41,000 --> 01:14:43,000 X được trỏ đến nó. 1067 01:14:43,000 --> 01:14:46,000 Lưu ý rằng y vẫn không trỏ đến bất cứ điều gì. 1068 01:14:46,000 --> 01:14:50,000 Để có được bộ nhớ lưu trữ 42 số vào x 1069 01:14:50,000 --> 01:14:55,000 chúng ta sẽ sử dụng ký hiệu không? 1070 01:14:55,000 --> 01:14:59,000 [Sinh viên] * x = 42. 1071 01:14:59,000 --> 01:15:01,000 Chính xác, * x = 42. 1072 01:15:01,000 --> 01:15:06,000 Điều đó có nghĩa là theo các mũi tên và ném 42 trong đó. 1073 01:15:06,000 --> 01:15:09,000 Ở đây, nơi chúng tôi đặt y và x, chúng tôi đã y chỉ x. 1074 01:15:09,000 --> 01:15:13,000 Một lần nữa, điều này giống như những gì Kevin nói nơi chúng tôi thiết lập y bằng x. 1075 01:15:13,000 --> 01:15:15,000 Y không chỉ vào x. 1076 01:15:15,000 --> 01:15:19,000 Thay vào đó, nó trỏ đến những gì x được trỏ đến là tốt. 1077 01:15:19,000 --> 01:15:24,000 >> Và cuối cùng trong hộp cuối cùng có 2 điều có thể mà chúng ta có thể làm. 1078 01:15:24,000 --> 01:15:28,000 Một là chúng ta có thể nói * x = 13. 1079 01:15:28,000 --> 01:15:33,000 Điều khác là chúng ta có thể nói Alex, bạn có biết những gì chúng tôi có thể làm ở đây? 1080 01:15:33,000 --> 01:15:37,000 Bạn có thể nói * x = 13 hoặc 1081 01:15:37,000 --> 01:15:41,000 [Sinh viên] Bạn có thể nói bất cứ điều gì int. 1082 01:15:41,000 --> 01:15:45,000 [Nate H.] Nếu điều này được gọi là một biến int, chúng ta có thể làm điều đó. 1083 01:15:45,000 --> 01:15:49,000 Chúng tôi cũng có thể nói * y = 13 bởi vì họ đang cả hai chỉ đến cùng một nơi, 1084 01:15:49,000 --> 01:15:51,000 vì vậy chúng tôi có thể sử dụng một trong hai biến để đến đó. 1085 01:15:51,000 --> 01:15:56,000 Vâng >> [Sinh viên]. Nó sẽ trông như thế nào nếu chúng ta chỉ nói int x là 13? 1086 01:15:56,000 --> 01:16:00,000 Điều đó sẽ được tuyên bố một biến mới tên là x, mà sẽ không làm việc. 1087 01:16:00,000 --> 01:16:04,000 Chúng tôi muốn có một vụ va chạm vì chúng ta khai báo x là một con trỏ lên ở đây. 1088 01:16:04,000 --> 01:16:10,000 [Sinh viên] Nếu chúng ta chỉ có rằng tuyên bố của chính nó những gì nó sẽ giống như thế về của vòng tròn? 1089 01:16:10,000 --> 01:16:14,000 Nếu chúng ta có x = 13 sau đó chúng tôi muốn có một hộp, và thay vì có một mũi tên 1090 01:16:14,000 --> 01:16:16,000 ra khỏi hộp, chúng tôi rút ra nó như là một 13. 1091 01:16:16,000 --> 01:16:19,000 [Sinh viên] Trong hộp thoại này. Okay. 1092 01:16:19,000 --> 01:16:24,000 >> Cảm ơn bạn đã xem, và may mắn trên quiz 0. 1093 01:16:24,000 --> 01:16:28,000 [CS50.TV]