1 00:00:00,000 --> 00:00:01,940 [Powered by Google Translate] [Walkthrough - Vấn đề Set 2] 2 00:00:01,940 --> 00:00:04,130 [Zamyla Chan - Đại học Harvard] 3 00:00:05,170 --> 00:00:07,490 [Đây là CS50. CS50.TV] 4 00:00:07,490 --> 00:00:10,750 Được rồi. Xin chào, tất cả mọi người, và được chào đón để Walkthrough 2. 5 00:00:10,750 --> 00:00:14,330 Trước tiên, tôi muốn chúc mừng bạn đã hoàn thành pset 1. 6 00:00:14,330 --> 00:00:18,140 Tôi biết rằng nó có thể có được một chút khó khăn cho một số bạn, 7 00:00:18,140 --> 00:00:20,460 có thể là chương trình đầu tiên máy tính của bạn mà bạn đã viết, 8 00:00:20,460 --> 00:00:24,500 nhưng chỉ cần nhớ rằng vào cuối này, khi bạn nhìn lại vào cuối học kỳ, 9 00:00:24,500 --> 00:00:29,820 bạn sẽ nhìn pset 1 và bạn sẽ nói, "Hey, tôi có thể đã làm điều đó trong 5 phút." 10 00:00:29,820 --> 00:00:35,700 Vì vậy, biết và tin tưởng rằng vào cuối này, bạn chắc chắn sẽ tìm thấy pset 1 khá đơn giản. 11 00:00:35,700 --> 00:00:40,640 Nhưng bây giờ nó là một thành tựu rất lớn, và chúc mừng cho việc thực hiện. 12 00:00:40,640 --> 00:00:44,010 Bây giờ, cũng là một lưu ý nhanh chóng trước khi chúng tôi nhận được vào thịt của hương. 13 00:00:44,010 --> 00:00:48,340 Tôi chỉ muốn làm cho một lưu ý nhanh chóng mà tôi đôi khi sẽ không có đủ thời gian 14 00:00:48,340 --> 00:00:52,500 trong walkthroughs đi qua mọi cách duy nhất để làm bộ vấn đề 15 00:00:52,500 --> 00:00:56,140 và thay vì chỉ có thể tập trung vào 1 hoặc 2 loại hiện thực, 16 00:00:56,140 --> 00:00:57,750 cách mà bạn có thể làm điều này. 17 00:00:57,750 --> 00:01:01,970 Nhưng đó không phải là để nói rằng bạn bị cấm không được làm việc đó một cách khác. 18 00:01:01,970 --> 00:01:05,980 Có thường xuyên, như với khoa học máy tính, nhiều cách để làm việc, 19 00:01:05,980 --> 00:01:12,190 và vì vậy chắc chắn cảm thấy miễn phí để sử dụng một loại khác nhau của các giải pháp hơn là tôi có thể trình bày. 20 00:01:12,190 --> 00:01:14,520 [Pset 2: Crypto - Zamyla Chan - zamyla@cs50.net] 21 00:01:14,520 --> 00:01:17,160 [Pset2 - 0. Một phần của câu hỏi - 1. Caesar - 2. Vigenere] 22 00:01:17,160 --> 00:01:20,650 Được rồi. Vì vậy, vấn đề thiết lập 2 Crypto là một niềm vui. 23 00:01:20,650 --> 00:01:24,500 Một lần nữa, với mỗi pset bạn sẽ bắt đầu với một phần của câu hỏi 24 00:01:24,500 --> 00:01:29,600 đó là sẽ được tiến hành trong các phần của bạn với giáo viên giảng dạy được giao của bạn. 25 00:01:29,600 --> 00:01:31,670 Chúng tôi sẽ không phải đi qua những hơn walkthrough, 26 00:01:31,670 --> 00:01:35,100 nhưng họ chắc chắn sẽ giúp bạn hoàn thành pset. 27 00:01:35,100 --> 00:01:38,100 Vì vậy, phần đầu tiên của bộ vấn đề là Caesar. 28 00:01:38,100 --> 00:01:43,470 Và như vậy trong Caesar ai đó sẽ vượt qua bạn một chìa khóa bằng một số nguyên, 29 00:01:43,470 --> 00:01:48,420 và bạn sẽ mã hóa một chuỗi văn bản mà họ cung cấp cho bạn 30 00:01:48,420 --> 00:01:50,670 và cung cấp cho họ lại là một điều được mã hóa. 31 00:01:50,670 --> 00:01:56,050 Nếu bất cứ ai xem A Christmas Story, có một ví dụ rằng có. 32 00:01:56,050 --> 00:01:59,090 Sau đó, phần thứ hai của bộ vấn đề là Vigenere, 33 00:01:59,090 --> 00:02:01,790 đó là một kỹ thuật mã hóa tiên tiến hơn. 34 00:02:01,790 --> 00:02:05,640 Và vì vậy chúng ta sẽ để encipher một đoạn văn bản, 35 00:02:05,640 --> 00:02:09,600 ngoại trừ thay vì với chỉ một số nguyên duy nhất, chúng ta đang thực sự sẽ mã hóa nó 36 00:02:09,600 --> 00:02:13,340 với một từ khóa mà người sử dụng sẽ cung cấp cho chúng tôi. 37 00:02:16,270 --> 00:02:22,090 Được rồi, do đó, công cụ đầu tiên trong ngày hôm nay hộp công cụ thực sự sẽ được cập nhật thiết bị. 38 00:02:22,090 --> 00:02:26,430 Trên các diễn đàn thảo luận, chúng ta sẽ thấy những thứ như: "Tại sao không làm việc này?" 39 00:02:26,430 --> 00:02:28,110 "Tại sao không nộp 50 công việc?" 40 00:02:28,110 --> 00:02:31,830 và thường là giải pháp thực sự là chỉ để cập nhật thiết bị của bạn. 41 00:02:31,830 --> 00:02:36,730 Và vì vậy nếu bạn chỉ chạy trong một cửa sổ terminal sudo thiết bị của bạn yum-y - 42 00:02:36,730 --> 00:02:40,040 đó là một lá cờ khẳng định là có, cập nhật tất cả mọi thứ - cập nhật, 43 00:02:40,040 --> 00:02:42,280 sau đó thiết bị của bạn sẽ cập nhật nếu cần thiết. 44 00:02:42,280 --> 00:02:46,960 Và nó không đau, nếu bạn đã có phiên bản mới nhất của thiết bị. 45 00:02:46,960 --> 00:02:51,280 Sau đó, nó sẽ chỉ nói không có bản cập nhật mới có sẵn và bạn có thể tiếp tục làm việc cùng. 46 00:02:51,280 --> 00:02:55,800 Nhưng điều này là tốt để thực hiện ngay cả mỗi khi bạn mở thiết bị 47 00:02:55,800 --> 00:02:57,140 bởi vì chúng ta vẫn còn rất nhiều - 48 00:02:57,140 --> 00:03:00,320 đôi khi nếu chúng ta đi vào một lỗi - sửa chữa nó trong thiết bị. 49 00:03:00,320 --> 00:03:03,180 Vì vậy, hãy chắc chắn rằng bạn có phiên bản mới nhất của thiết bị 50 00:03:03,180 --> 00:03:07,710 và chạy mà cập nhật có. 51 00:03:07,710 --> 00:03:14,360 Được rồi. Vì vậy, kể từ khi chúng tôi đang làm việc với các chữ cái và thay đổi, enciphering điều, 52 00:03:14,360 --> 00:03:20,410 chúng ta sẽ thực sự muốn trở thành người bạn tốt nhất với các biểu đồ ASCII của chúng tôi. 53 00:03:20,410 --> 00:03:24,350 Có rất nhiều những trực tuyến, nếu bạn tìm thấy. Thậm chí có thể làm của riêng bạn. 54 00:03:24,350 --> 00:03:29,950 Về cơ bản, với mỗi chữ và số hàng và mỗi nhân vật 55 00:03:29,950 --> 00:03:32,210 có một số liên kết với chúng, 56 00:03:32,210 --> 00:03:38,670 và vì thế rất tốt để xem các giá trị ASCII của họ cùng với các thư thực tế. 57 00:03:38,670 --> 00:03:42,310 Điều đó chắc chắn sẽ giúp bạn trong vấn đề thiết lập. 58 00:03:42,310 --> 00:03:45,750 Một điều mà thực sự đã giúp tôi trong vấn đề thiết lập này là thực sự in nó ra, 59 00:03:45,750 --> 00:03:48,380 và như tôi đã đi qua, tôi thực sự sẽ thu hút vào nó, 60 00:03:48,380 --> 00:03:51,150 viết, "Nếu điều này để đi đến đó, sau đó ..." 61 00:03:51,150 --> 00:03:55,270 Loại vẽ vào nó và đánh dấu nó lên, trở thành người bạn tốt nhất với bảng mã ASCII của bạn. 62 00:03:57,240 --> 00:04:00,750 Sau đó, chúng tôi có một vài công cụ khác lúc xử lý của chúng tôi. 63 00:04:00,750 --> 00:04:03,750 Lần này thay vì thực sự khiến người sử dụng cho tất cả các đầu vào của họ 64 00:04:03,750 --> 00:04:05,230 chúng ta sẽ làm một sự kết hợp. 65 00:04:05,230 --> 00:04:06,880 Chúng tôi sẽ nhắc cho một số đầu vào, 66 00:04:06,880 --> 00:04:11,350 nhưng chúng tôi cũng sẽ chỉ cần sử dụng các đối số dòng lệnh. 67 00:04:11,350 --> 00:04:15,600 Vì vậy, khi họ chạy chương trình của họ, thường là bạn nói / hello, ví dụ, 68 00:04:15,600 --> 00:04:17,310 nếu chương trình của bạn là hello.c. 69 00:04:17,310 --> 00:04:22,500 Nhưng lần này thay vì chỉ nói rằng, họ có thể đặt từ, lập luận sau đó. 70 00:04:22,500 --> 00:04:27,210 Và vì vậy chúng ta sẽ sử dụng bất cứ điều gì họ vượt qua cho chúng ta như là đầu vào của họ cũng, 71 00:04:27,210 --> 00:04:31,720 để di chuyển vượt ra ngoài chỉ khiến cho số nguyên, nhưng cũng bằng cách sử dụng các đối số dòng lệnh. 72 00:04:31,720 --> 00:04:36,590 Và sau đó chúng tôi sẽ đi vào mảng và chuỗi, mà chúng ta sẽ được sử dụng rất là tốt. 73 00:04:41,460 --> 00:04:44,810 Dưới đây chỉ là một ví dụ của 1 biểu đồ ASCII nhỏ. 74 00:04:44,810 --> 00:04:48,460 Như tôi đã nói, mỗi chữ tương ứng với một số, 75 00:04:48,460 --> 00:04:52,510 và để làm quen với điều đó. Nó sẽ có ích. 76 00:04:52,510 --> 00:04:55,610 Và sau đó khi chúng tôi bắt đầu làm một số ASCIIMath đối phó với những con số - 77 00:04:55,610 --> 00:05:00,110 cộng, trừ họ - sau đó chắc chắn tốt để tham khảo bảng xếp hạng này. 78 00:05:02,860 --> 00:05:06,920 Vì vậy, đây là một ví dụ của một mật mã Caesar - một cái gì đó mà bạn có thể đã chơi với. 79 00:05:06,920 --> 00:05:11,190 Nó chỉ là một bánh xe. Về cơ bản, một bảng chữ cái bên ngoài và sau đó có một bảng chữ cái bên trong. 80 00:05:11,190 --> 00:05:15,290 Vì vậy, ngay ở đây là một ví dụ về mật mã Caesar nhưng với một phím từ 0. 81 00:05:15,290 --> 00:05:21,540 Về cơ bản, phù hợp với A, B phù hợp với B, tất cả các con đường lên đến Z. 82 00:05:21,540 --> 00:05:26,590 Nhưng sau đó nói rằng chúng tôi muốn một chìa khóa 3, ví dụ. 83 00:05:26,590 --> 00:05:33,280 Sau đó, chúng tôi sẽ xoay bánh xe bên trong để phù hợp với D, vv 84 00:05:33,280 --> 00:05:35,250 Và do đó, điều này về cơ bản là những gì chúng ta sẽ làm. 85 00:05:35,250 --> 00:05:38,340 Chúng tôi không có một bánh xe, nhưng những gì chúng ta sẽ làm là làm cho chương trình của chúng tôi 86 00:05:38,340 --> 00:05:44,490 loại thay đổi bảng chữ cái cùng với chúng tôi một số tiền nhất định các con số. 87 00:05:44,490 --> 00:05:48,650 Vì vậy, như tôi đã nói, chúng ta sẽ được giao dịch với đối số dòng lệnh 88 00:05:48,650 --> 00:05:50,390 cũng như nhận được một số nguyên. 89 00:05:50,390 --> 00:05:55,050 Vì vậy, cách mà một người dùng sẽ chạy chương trình của bạn Caesar bằng cách nói / caesar 90 00:05:55,050 --> 00:05:58,090 và sau đó nhập một số sau đó. 91 00:05:58,090 --> 00:06:01,130 Và con số đó đại diện cho chìa khóa, thay đổi, 92 00:06:01,130 --> 00:06:06,740 bao nhiêu lần bạn sẽ được quay bánh xe bên trong của mật mã Caesar của bạn. 93 00:06:06,740 --> 00:06:08,390 Và để bạn nhìn thấy ở đây một ví dụ. 94 00:06:08,390 --> 00:06:14,550 Nếu chúng tôi đã nhập các chữ cái từ A L để bằng khoá mật mã Caesar của chúng tôi, 95 00:06:14,550 --> 00:06:19,520 sau đó nó sẽ nhập D qua O bởi vì đó là tất cả các bức thư chuyển hơn 3 lần, 96 00:06:19,520 --> 00:06:22,080 giống như ví dụ của bánh xe mà tôi đã giới thiệu cho các bạn. 97 00:06:22,080 --> 00:06:25,300 Vì vậy, sau đó nếu bạn đã nhập vào, ví dụ, Đây là CS50! 98 00:06:25,300 --> 00:06:27,960 sau đó nó cũng sẽ di chuyển tất cả các chữ cái. 99 00:06:27,960 --> 00:06:31,040 Và đó là một điều quan trọng trong cả hai Caesar và Vigenere 100 00:06:31,040 --> 00:06:34,890 rằng chúng ta sẽ bỏ qua bất cứ lá thư nào không. 101 00:06:34,890 --> 00:06:39,160 Vì vậy, bất kỳ không gian, nhân vật, vv, số, chúng ta sẽ để giữ cho chúng giống nhau. 102 00:06:39,160 --> 00:06:42,920 Chúng tôi sẽ chỉ chuyển đổi các ký tự trong trường hợp này. 103 00:06:42,920 --> 00:06:45,870 Vì vậy, như bạn thấy trong bánh xe, chúng tôi chỉ có các chữ cái có sẵn cho chúng tôi, 104 00:06:45,870 --> 00:06:50,150 vì vậy chúng tôi chỉ muốn thay đổi các chữ cái và mã hóa các chữ cái. 105 00:06:51,370 --> 00:06:56,720 Vì vậy, điều đầu tiên cần làm, bạn đã thấy rằng việc sử dụng cho Caesar trong vấn đề thiết lập 2 106 00:06:56,720 --> 00:07:05,280 là chạy Caesar và sau đó nhập một số khi bạn chạy nó trong thiết bị đầu cuối. 107 00:07:05,280 --> 00:07:10,940 Vì vậy, những gì chúng ta cần làm là bằng cách nào đó nhận được rằng chìa khóa và truy cập nó. 108 00:07:10,940 --> 00:07:14,730 Và vì vậy chúng tôi muốn bằng cách nào đó nó sẽ là đối số dòng lệnh thứ hai. 109 00:07:14,730 --> 00:07:20,950 Người đầu tiên là có được / caesar., Và một trong những tiếp theo sẽ là phím số. 110 00:07:22,190 --> 00:07:29,200 Vì vậy, trước khi chúng tôi đã có int main (void) để bắt đầu các chương trình C của chúng tôi. 111 00:07:29,200 --> 00:07:31,790 Chúng tôi sẽ để một lớp vỏ trở lại một chút 112 00:07:31,790 --> 00:07:34,720 và thực sự thấy rằng thay vì đi qua trong khoảng trống chức năng chính của chúng tôi 113 00:07:34,720 --> 00:07:37,920 chúng tôi đang thực sự đối phó với 2 thông số. 114 00:07:37,920 --> 00:07:44,070 Chúng tôi có một int có tên là argc và sau đó một mảng của chuỗi được gọi là argv. 115 00:07:44,070 --> 00:07:46,030 Vì vậy, argc là một số nguyên, 116 00:07:46,030 --> 00:07:49,640 và nó đại diện cho số lượng các đối số được truyền vào chương trình của bạn. 117 00:07:49,640 --> 00:07:53,590 Và sau đó argv thực sự là danh sách các đối số được truyền. 118 00:07:53,590 --> 00:08:00,820 Tất cả các đối số là chuỗi, và như vậy argv đại diện cho một mảng, một danh sách, các chuỗi. 119 00:08:01,830 --> 00:08:03,990 Chúng ta hãy nói về mảng một chút. 120 00:08:03,990 --> 00:08:05,940 Mảng là bản chất là một cấu trúc dữ liệu mới. 121 00:08:05,940 --> 00:08:09,660 Chúng tôi có ints, chúng tôi đã tăng gấp đôi, chúng tôi có các chuỗi, và bây giờ chúng tôi có mảng. 122 00:08:09,660 --> 00:08:13,820 Mảng là cấu trúc dữ liệu có thể chứa nhiều giá trị cùng loại, 123 00:08:13,820 --> 00:08:18,320 Vì vậy, về cơ bản, một danh sách của bất cứ điều gì bạn muốn loại. 124 00:08:18,320 --> 00:08:24,400 Về cơ bản, nếu bạn muốn có một danh sách các số nguyên tất cả trong 1 biến, 125 00:08:24,400 --> 00:08:29,090 sau đó bạn sẽ tạo ra một biến mới đó là mảng kiểu int. 126 00:08:29,090 --> 00:08:34,450 Vì vậy, mảng là zero-lập chỉ mục, có nghĩa rằng các phần tử đầu tiên của mảng là chỉ số 0. 127 00:08:34,450 --> 00:08:41,799 Nếu mảng có chiều dài 4, như trong ví dụ này, sau đó yếu tố cuối cùng của bạn sẽ là tại chỉ số 3, 128 00:08:41,799 --> 00:08:44,810 đó là 4 - 1. 129 00:08:45,940 --> 00:08:48,420 Vì vậy, để tạo ra mảng, bạn sẽ làm một cái gì đó như thế này. 130 00:08:48,420 --> 00:08:51,440 Giả sử bạn muốn có một mảng đôi. 131 00:08:51,440 --> 00:08:56,520 Điều này đi cho bất kỳ loại kiểu dữ liệu, mặc dù. 132 00:08:56,520 --> 00:09:00,210 Vì vậy, nói bạn muốn có một mảng đôi. Giả sử bạn muốn gọi nó là hộp thư. 133 00:09:00,210 --> 00:09:04,760 Giống như bạn sẽ khởi tạo bất kỳ đôi khác, 134 00:09:04,760 --> 00:09:09,760 bạn sẽ nói đôi và sau đó tên, nhưng lần này chúng tôi đặt các dấu ngoặc vuông, 135 00:09:09,760 --> 00:09:13,570 và sau đó là số sẽ có độ dài của mảng. 136 00:09:13,570 --> 00:09:16,840 Lưu ý trong mảng, chúng ta có thể không bao giờ thay đổi chiều dài, 137 00:09:16,840 --> 00:09:21,230 vì vậy bạn luôn phải xác định và lựa chọn bao nhiêu hộp, 138 00:09:21,230 --> 00:09:25,440 bao nhiêu giá trị mảng của bạn sẽ tổ chức. 139 00:09:25,440 --> 00:09:31,820 Vì vậy, để thiết lập các giá trị khác nhau trong mảng của bạn, bạn sẽ sử dụng cú pháp sau đây, 140 00:09:31,820 --> 00:09:33,200 như bạn thấy trên slide. 141 00:09:33,200 --> 00:09:37,620 Chỉ số 0 hộp thư bạn có sẽ được thiết lập đến 1,2, 142 00:09:37,620 --> 00:09:42,180 hộp thư chỉ số 1 thiết lập để 2,4, vv 143 00:09:42,180 --> 00:09:47,910 Vì vậy, bây giờ mà chúng tôi đã xem xét các mảng một chút, chúng ta hãy quay trở lại argc và argv. 144 00:09:47,910 --> 00:09:52,220 Chúng tôi biết rằng argv bây giờ là một mảng của chuỗi. 145 00:09:52,220 --> 00:09:55,080 Vì vậy, khi người dùng đi - nói rằng họ đang chạy một chương trình - 146 00:09:55,080 --> 00:09:58,740 họ nói. / hello David Malan, 147 00:09:58,740 --> 00:10:05,160 chương trình sẽ làm cho bạn đã thực sự đến với những gì argc và argv là. 148 00:10:05,160 --> 00:10:07,620 Vì vậy, bạn không cần phải lo lắng về điều đó. 149 00:10:07,620 --> 00:10:14,370 Argc trong trường hợp này sẽ là 3 bởi vì nó thấy 3 từ riêng biệt bằng dấu cách. 150 00:10:14,370 --> 00:10:18,850 Và như vậy thì mảng trong trường hợp này, chỉ số đầu tiên sẽ là / hello, 151 00:10:18,850 --> 00:10:21,770 một David, một trong những Malan. 152 00:10:21,770 --> 00:10:25,640 Có ai nhìn thấy ngay lập tức những gì các mối quan hệ giữa argv, 153 00:10:25,640 --> 00:10:28,990  mảng, và argc? 154 00:10:32,820 --> 00:10:38,090 Yeah. Chúng tôi sẽ nhận được vào đó trong một ví dụ trong args.c. 155 00:10:38,090 --> 00:10:42,880 Hãy xem nếu chúng ta có thể tận dụng lợi thế của các mối quan hệ giữa 2. 156 00:10:42,880 --> 00:10:46,550 Ở đây bạn có thể thấy rằng trong thiết bị ứng dụng mặc định 157 00:10:46,550 --> 00:10:49,450 mở các tập tin c. đôi khi Emacs. 158 00:10:49,450 --> 00:10:54,660 Nhưng chúng tôi muốn để đối phó với gedit, do đó, những gì bạn có thể làm là bạn có thể nhấp chuột phải vào tập tin C của bạn, 159 00:10:54,660 --> 00:11:04,580 vào Properties, Open With, và sau đó chọn gedit, Đặt làm mặc định, 160 00:11:04,580 --> 00:11:13,020 và bây giờ chương trình của bạn nên mở trong gedit thay vì của Emacs. 161 00:11:14,710 --> 00:11:16,290 Hoàn hảo. 162 00:11:17,120 --> 00:11:25,520 Vì vậy, ở đây tôi có một chương trình mà tôi muốn in ra mỗi đối số dòng lệnh. 163 00:11:25,520 --> 00:11:32,050 Vì vậy, người sử dụng đầu vào bất cứ điều gì, tôi muốn để cơ bản trở lại nó trở lại chúng trên một dòng mới. 164 00:11:32,050 --> 00:11:36,710 Vì vậy, một cấu trúc mà chúng ta có thể sử dụng để lặp qua một cái gì đó là những gì - 165 00:11:36,710 --> 00:11:40,380 một cái gì đó mà bạn có thể sử dụng trong pset 1 của bạn? 166 00:11:40,380 --> 00:11:45,840 Nếu bạn muốn đi qua một số thiết lập của sự vật? >> [Sinh viên] Đối với loop. 167 00:11:45,840 --> 00:11:48,910 Đối với loop. Chính xác. Vì vậy, chúng ta hãy bắt đầu với vòng lặp for. 168 00:11:48,910 --> 00:11:56,900 Chúng tôi có cho int i = 0. Hãy bắt đầu ngay với một biến khởi tạo tiêu chuẩn. 169 00:11:56,900 --> 00:12:02,370 Tôi sẽ để lại những điều kiện cho một bộ và sau đó nói i + +, sẽ làm những điều đó. 170 00:12:02,370 --> 00:12:04,090 Được rồi. 171 00:12:04,090 --> 00:12:11,590 Vì vậy, suy nghĩ lại argv, nếu argv là danh sách các đối số được truyền vào chương trình 172 00:12:11,590 --> 00:12:15,380 và argc là số lượng các đối số trong chương trình, 173 00:12:15,380 --> 00:12:21,280 thì đó có nghĩa rằng argc cơ bản là chiều dài của argv, phải, 174 00:12:21,280 --> 00:12:28,970 bởi vì có đang có được nhiều như các đối số là giá trị của argc. 175 00:12:28,970 --> 00:12:35,910 Vì vậy, nếu chúng ta muốn để lặp lại trên mỗi phần tử trong argv, 176 00:12:35,910 --> 00:12:43,290 chúng ta sẽ muốn cho mỗi thời gian truy cập vào các biến trong argv tại chỉ số nhất định. 177 00:12:43,290 --> 00:12:49,060 Điều đó có thể được đại diện với điều này, phải không? 178 00:12:49,060 --> 00:12:53,430 Biến này ở đây đại diện cho chuỗi cụ thể trong trường hợp này 179 00:12:53,430 --> 00:12:57,030 bởi vì đó là một mảng chuỗi chuỗi cụ thể tại đó chỉ số nhất định. 180 00:12:57,030 --> 00:13:00,690 Những gì chúng tôi muốn làm, trong trường hợp này, chúng tôi muốn in nó ra, vì vậy chúng ta hãy nói printf. 181 00:13:00,690 --> 00:13:04,680 Và bây giờ argv là một chuỗi, vì vậy chúng tôi muốn đặt giữ chỗ đó có. 182 00:13:04,680 --> 00:13:08,430 Chúng tôi muốn có một dòng mới chỉ để làm cho nó trông tốt. 183 00:13:08,430 --> 00:13:12,530 Vì vậy, ở đây chúng tôi có một vòng lặp cho. Chúng tôi không có điều kiện được nêu ra. 184 00:13:12,530 --> 00:13:20,020 Vì vậy, tôi bắt đầu từ 0, và sau đó mỗi khi nó sẽ in các chuỗi cung cấp 185 00:13:20,020 --> 00:13:22,980 lúc đó chỉ số cụ thể trong mảng. 186 00:13:22,980 --> 00:13:28,410 Vì vậy, khi nào chúng ta muốn in ra các phần tử trong mảng? 187 00:13:28,410 --> 00:13:35,720 Khi chúng tôi đã hoàn tất, phải không? Khi chúng ta đã đến cuối của mảng. 188 00:13:35,720 --> 00:13:38,870 Vì vậy, chúng tôi không muốn vượt qua chiều dài của mảng, 189 00:13:38,870 --> 00:13:43,700 và chúng ta đã biết chúng tôi không cần phải thực sự tích cực tìm ra chiều dài của argv 190 00:13:43,700 --> 00:13:47,520 bởi vì nó được ban cho chúng ta, và đó là những gì? Argc. Chính xác. 191 00:13:47,520 --> 00:13:56,640 Vì vậy, chúng tôi muốn làm con số này argc quá trình lần. 192 00:13:56,640 --> 00:13:59,550 Tôi không ở trong thư mục bên phải. 193 00:14:02,100 --> 00:14:03,490 Được rồi. 194 00:14:03,490 --> 00:14:08,990 Bây giờ chúng ta hãy làm args. Không có lỗi, đó là rất tốt. 195 00:14:08,990 --> 00:14:11,430 Vì vậy, chúng ta hãy chỉ chạy args. 196 00:14:11,430 --> 00:14:15,130 Này là những gì sẽ trở lại với chúng ta? Nó chỉ là sẽ in lại. 197 00:14:15,130 --> 00:14:18,320 "Bạn inputted args vào chương trình, tôi sẽ để cho nó trở về với bạn." 198 00:14:18,320 --> 00:14:23,170 Vì vậy, hãy nói rằng chúng tôi muốn nói args sau đó foo bar. 199 00:14:23,170 --> 00:14:26,570 Vì vậy, sau đó nó in nó ra lại cho chúng tôi. Tất cả phải không? 200 00:14:26,570 --> 00:14:30,790 Vì vậy, có một ví dụ về làm thế nào bạn có thể sử dụng argc và argv 201 00:14:30,790 --> 00:14:33,460 biết rằng argc đại diện cho chiều dài của argv. 202 00:14:33,460 --> 00:14:42,750 Hãy chắc chắn rằng bạn không bao giờ với mảng truy cập vượt quá chiều dài của mảng 203 00:14:42,750 --> 00:14:45,140 bởi vì C chắc chắn sẽ hét vào bạn. 204 00:14:45,140 --> 00:14:47,560 Bạn sẽ nhận được một cái gì đó được gọi là một lỗi phân khúc, 205 00:14:47,560 --> 00:14:52,470 bao giờ vui vẻ, về cơ bản nói rằng bạn đang cố gắng để truy cập vào một cái gì đó 206 00:14:52,470 --> 00:14:55,000 điều đó không tồn tại, không thuộc về bạn. 207 00:14:55,000 --> 00:14:59,430 Vì vậy, chắc chắn, và đặc biệt là với việc lập chỉ mục bằng không, chúng tôi không muốn - 208 00:14:59,430 --> 00:15:02,390 Giống như ví dụ, nếu chúng ta có một mảng có chiều dài 4, 209 00:15:02,390 --> 00:15:07,240 rằng chỉ số mảng 4 không tồn tại bởi vì chúng tôi bắt đầu từ 0, không chỉ số. 210 00:15:07,240 --> 00:15:11,730 Nó sẽ trở thành bản chất thứ hai giống như cho các vòng lặp khi chúng tôi bắt đầu từ 0. 211 00:15:11,730 --> 00:15:13,610 Vì vậy, chỉ cần giữ cho rằng trong tâm trí. 212 00:15:13,610 --> 00:15:22,590 Bạn không muốn bao giờ truy cập vào các chỉ số của một mảng đó là vượt quá tầm tay của bạn. 213 00:15:26,710 --> 00:15:32,560 Vì vậy, chúng ta có thể thấy bây giờ làm thế nào chúng ta có thể loại truy cập 214 00:15:32,560 --> 00:15:35,930 đối số dòng lệnh được thông qua. 215 00:15:35,930 --> 00:15:41,330 Tuy nhiên, như bạn đã thấy các chuỗi, argv thực sự là một mảng chuỗi. 216 00:15:41,330 --> 00:15:45,740 Vì vậy, nó thực sự không phải là một số nguyên nào được nêu ra, nhưng Caesar, chúng tôi muốn để đối phó với số nguyên. 217 00:15:45,740 --> 00:15:54,430 May mắn thay, có một chức năng được tạo ra cho chúng ta thực sự có thể chuyển đổi một chuỗi đến một số nguyên. 218 00:15:54,430 --> 00:15:58,710 Cũng ở đây, chúng tôi không phải đối phó với đầu vào của người sử dụng, nơi chúng tôi đang thúc đẩy họ 219 00:15:58,710 --> 00:16:03,740 cho đầu vào đây để chìa khóa, vì vậy chúng tôi có thể không thực sự nhắc nhở lại và nói, 220 00:16:03,740 --> 00:16:07,840 "Oh, cho tôi một số nguyên khác, nói rằng, nếu nó không hợp lệ." 221 00:16:07,840 --> 00:16:10,540 Nhưng chúng ta vẫn cần phải kiểm tra để sử dụng chính xác. 222 00:16:10,540 --> 00:16:13,520 Trong Caesar, họ chỉ được phép để vượt qua trong số 1, 223 00:16:13,520 --> 00:16:18,030 và vì vậy họ phải chạy / caesar. và sau đó họ có để cung cấp cho bạn một số. 224 00:16:18,030 --> 00:16:23,660 Vì vậy, argc có được một số lượng nhất định. 225 00:16:23,660 --> 00:16:29,060 Những gì số đó sẽ là nếu họ có để vượt qua bạn / caesar. Và sau đó một phím? 226 00:16:29,060 --> 00:16:32,920 Argc là gì? >> [Sinh viên] 2. >> Hai. Chính xác. 227 00:16:32,920 --> 00:16:35,490 Vì vậy, bạn muốn làm cho chắc chắn rằng argc là 2. 228 00:16:35,490 --> 00:16:39,620 Nếu không, bạn về cơ bản từ chối để chạy chương trình. 229 00:16:39,620 --> 00:16:43,040 Trong chính nó là một chức năng nói rằng int main, 230 00:16:43,040 --> 00:16:47,360 do đó, sau đó chúng tôi luôn luôn trong 0 tốt trở lại thực hành ở phần cuối của một chương trình thành công. 231 00:16:47,360 --> 00:16:50,840 Vì vậy, nếu nói, họ cung cấp cho bạn 3 đối số dòng lệnh thay vì 2 232 00:16:50,840 --> 00:16:54,350 hoặc cung cấp cho bạn 1, ví dụ, sau đó những gì bạn sẽ làm là bạn sẽ muốn kiểm tra cho rằng 233 00:16:54,350 --> 00:16:59,900 và sau đó trở về 1 nói rằng, không có, tôi không thể tiến hành với chương trình này. 234 00:16:59,900 --> 00:17:03,190 [Sinh viên] Không thể có một không gian trong văn bản của bạn. >> Xin lỗi? 235 00:17:03,190 --> 00:17:06,780 [Sinh viên] Không thể có một không gian trong văn bản mà bạn đang cố gắng để mã hóa. 236 00:17:06,780 --> 00:17:08,480 Ah! 237 00:17:08,480 --> 00:17:11,280 Trong điều khoản của các văn bản mà chúng tôi đang cố gắng để mã hóa, mà thực sự đến sau 238 00:17:11,280 --> 00:17:13,970 khi chúng tôi cung cấp cho văn bản đó. 239 00:17:13,970 --> 00:17:18,260 Vì vậy, ngay bây giờ chúng tôi chỉ chấp nhận như là đối số lệnh số thực tế, 240 00:17:18,260 --> 00:17:21,579 sự chuyển đổi thực tế cho các mã hóa Caesar. 241 00:17:21,579 --> 00:17:27,569 [Sinh viên] Tại sao bạn cần 2 như trái ngược với argc 1 chỉ? Có chắc chắn là số 1. 242 00:17:27,569 --> 00:17:32,200 Đúng. Lý do tại sao chúng ta cần 2 cho argc thay vì 1 243 00:17:32,200 --> 00:17:36,260 bởi vì khi bạn chạy một chương trình và nói. / caesar hoặc / hello. 244 00:17:36,260 --> 00:17:38,280 mà thực sự có giá trị như một đối số dòng lệnh. 245 00:17:38,280 --> 00:17:43,020 Vì vậy, sau đó đã chiếm 1 và sau đó chúng tôi đang nhập thêm 1. 246 00:17:45,030 --> 00:17:49,440 Vì vậy, bạn nhập vào một chuỗi trong đối số dòng lệnh. 247 00:17:49,440 --> 00:17:52,730 Những gì bạn muốn làm, cho Caesar chúng tôi muốn để đối phó với một số nguyên, 248 00:17:52,730 --> 00:17:57,180 vì vậy bạn có thể sử dụng chức năng này atoi. 249 00:17:57,180 --> 00:18:02,850 Và về cơ bản, bạn vượt qua nó trong một chuỗi và sau đó nó sẽ đưa bạn trở lại một số nguyên 250 00:18:02,850 --> 00:18:06,070 nếu nó có thể để làm cho rằng chuỗi thành một số nguyên. 251 00:18:06,070 --> 00:18:10,960 Bây giờ hãy nhớ khi chúng ta đang đối phó với những điều printf hay GetString, như thế, 252 00:18:10,960 --> 00:18:13,390 chúng tôi bao gồm các thư viện được cụ thể cho chúng tôi. 253 00:18:13,390 --> 00:18:19,450 Vì vậy, ngay từ đầu, chúng tôi bắt đầu với một cái gì đó tag băm I / O, h, tiêu chuẩn như thế. 254 00:18:19,450 --> 00:18:22,430 Vâng, atoi không phải là trong một trong những thư viện, 255 00:18:22,430 --> 00:18:26,600 vì vậy những gì chúng ta phải làm là chúng ta phải bao gồm các thư viện cho rằng. 256 00:18:26,600 --> 00:18:32,720 Vì vậy, nhớ lại trở lại Walkthrough 1 nơi tôi đã thảo luận chức năng hướng dẫn sử dụng. 257 00:18:32,720 --> 00:18:37,110 Bạn gõ người đàn ông trong thiết bị đầu cuối của bạn và sau đó tiếp theo là tên của một hàm. 258 00:18:37,110 --> 00:18:39,720 Và đó sẽ mang đến một danh sách toàn bộ cách sử dụng của nó, 259 00:18:39,720 --> 00:18:42,890 nhưng cũng như nó sẽ mang đến thư viện mà thuộc về. 260 00:18:42,890 --> 00:18:47,000 Vì vậy, tôi sẽ để lại cho bạn để sử dụng chức năng hướng dẫn sử dụng với atoi 261 00:18:47,000 --> 00:18:53,360 và tìm ra thư viện mà bạn cần bao gồm có thể sử dụng chức năng atoi. 262 00:18:54,450 --> 00:18:57,670 Vì vậy, chúng tôi đã có chìa khóa và bây giờ nó để nhận được các văn bản đơn giản, 263 00:18:57,670 --> 00:19:01,820 và do đó thực sự là có được người dùng nhập vào nơi mà bạn nhắc nhở. 264 00:19:01,820 --> 00:19:05,540 Chúng tôi xử lý với getInt và GetFloat, và do đó trong cùng một tĩnh mạch 265 00:19:05,540 --> 00:19:07,670 chúng ta sẽ được giao dịch với GetString. 266 00:19:07,670 --> 00:19:12,440 Nhưng trong trường hợp này, chúng tôi không cần phải làm bất cứ do khi hoặc trong khi vòng lặp để kiểm tra. 267 00:19:12,440 --> 00:19:14,480 GetString chắc chắn sẽ cho chúng ta một chuỗi, 268 00:19:14,480 --> 00:19:17,630 và chúng ta sẽ mã hóa bất cứ điều gì người sử dụng cung cấp cho chúng ta. 269 00:19:17,630 --> 00:19:23,770 Vì vậy, bạn có thể giả định rằng tất cả những chuỗi người dùng nhập vào là chính xác. 270 00:19:23,770 --> 00:19:24,670 Lớn. 271 00:19:24,670 --> 00:19:27,270 Vì vậy, sau đó một khi bạn đã có chìa khóa và một khi bạn đã có các văn bản, 272 00:19:27,270 --> 00:19:31,660 bây giờ những gì còn lại là bạn phải để encipher bản rõ. 273 00:19:31,660 --> 00:19:36,530 Chỉ cần để nhanh chóng bao gồm theo biệt ngữ, rõ là những gì người dùng cung cấp cho bạn, 274 00:19:36,530 --> 00:19:41,030 và bản mã là những gì bạn trả lại cho họ. 275 00:19:42,450 --> 00:19:45,850 Vì vậy, chuỗi, để có thể đi qua thực sự thư bằng thư 276 00:19:45,850 --> 00:19:48,550 bởi vì chúng tôi phải chuyển tất cả thư, 277 00:19:48,550 --> 00:19:51,390 chúng tôi hiểu rằng chuỗi, nếu chúng ta loại vỏ lớp trở lại, 278 00:19:51,390 --> 00:19:54,130 chúng ta thấy rằng họ chỉ thực sự là một danh sách các ký tự. 279 00:19:54,130 --> 00:19:55,930 Một đi kèm sau khi khác. 280 00:19:55,930 --> 00:20:01,690 Và vì vậy chúng tôi có thể điều trị chuỗi như mảng, vì họ là mảng ký tự. 281 00:20:01,690 --> 00:20:05,640 Vì vậy, nói rằng bạn có một chuỗi văn bản có tên là, 282 00:20:05,640 --> 00:20:09,400 và trong đó văn bản biến được lưu trữ Đây là CS50. 283 00:20:09,400 --> 00:20:15,680 Sau đó, văn bản chỉ số 0 sẽ là một T vốn, chỉ số 1 sẽ là h, vv 284 00:20:17,530 --> 00:20:23,970 Và sau đó với mảng, trong ví dụ argc trong args.c, 285 00:20:23,970 --> 00:20:27,090 chúng tôi thấy rằng chúng tôi đã phải lặp qua một mảng 286 00:20:27,090 --> 00:20:32,440 và vì vậy chúng tôi đã để lặp từ i = 0 cho đến khi tôi là ít hơn chiều dài. 287 00:20:32,440 --> 00:20:35,560 Vì vậy, chúng tôi cần một số cách để tìm ra chiều dài của chuỗi ký tự của chúng tôi là những gì 288 00:20:35,560 --> 00:20:37,090 nếu chúng ta để iterate qua nó. 289 00:20:37,090 --> 00:20:42,300 May mắn một lần nữa, có một chức năng đó cho chúng tôi, mặc dù sau này trong CS50 290 00:20:42,300 --> 00:20:45,860 bạn chắc chắn sẽ có thể thực hiện và làm cho chức năng của riêng bạn 291 00:20:45,860 --> 00:20:48,260 có thể tính toán chiều dài của một chuỗi. 292 00:20:48,260 --> 00:20:52,120 Nhưng bây giờ chúng ta sẽ sử dụng chiều dài chuỗi, do đó strlen. 293 00:20:52,120 --> 00:21:00,440 Bạn vượt qua trong một chuỗi, và sau đó nó sẽ trả về cho bạn một int đại diện cho chiều dài của chuỗi của bạn. 294 00:21:00,440 --> 00:21:05,840 Hãy nhìn vào một ví dụ về làm thế nào chúng ta có thể lặp qua mỗi nhân vật trong một chuỗi 295 00:21:05,840 --> 00:21:08,470 và làm điều gì đó với điều đó. 296 00:21:08,470 --> 00:21:13,250 Những gì chúng tôi muốn làm là lặp qua mỗi nhân vật của chuỗi, 297 00:21:13,250 --> 00:21:19,150 và những gì chúng tôi muốn làm là chúng tôi in lại mỗi nhân vật 1 của 1 298 00:21:19,150 --> 00:21:22,060 ngoại trừ chúng tôi thêm một cái gì đó bên cạnh nó. 299 00:21:22,060 --> 00:21:27,020 Vì vậy, chúng ta hãy bắt đầu với vòng lặp for. Int i = 0. 300 00:21:27,020 --> 00:21:30,070 Chúng tôi sẽ để lại không gian cho tình trạng này. 301 00:21:32,700 --> 00:21:36,840 Chúng tôi muốn để lặp lại cho đến khi chúng tôi đạt được kết thúc của chuỗi, phải không? 302 00:21:36,840 --> 00:21:41,340 Vì vậy, sau đó những gì chức năng cho chúng ta chiều dài của chuỗi? 303 00:21:41,340 --> 00:21:43,160 [Không nghe được sinh viên phản ứng] 304 00:21:43,160 --> 00:21:46,420 Đó là chiều dài của các đối số dòng lệnh. 305 00:21:46,420 --> 00:21:50,650 Nhưng đối với một chuỗi chúng ta muốn sử dụng một chức năng mà cho chúng ta chiều dài của chuỗi. 306 00:21:50,650 --> 00:21:53,090 Vì vậy, đó là chuỗi dài. 307 00:21:53,090 --> 00:21:57,130 Và như vậy thì bạn phải vượt qua trong một chuỗi cho nó. 308 00:21:57,130 --> 00:21:59,760 Nó cần phải biết chuỗi nó cần phải tính toán chiều dài. 309 00:21:59,760 --> 00:22:03,160 Vì vậy, sau đó trong trường hợp này, chúng tôi đang làm việc với chuỗi s. 310 00:22:04,790 --> 00:22:05,860 Lớn. 311 00:22:05,860 --> 00:22:10,770 Vì vậy, sau đó những gì chúng tôi muốn làm, chúng ta hãy printf. 312 00:22:10,770 --> 00:22:14,850 Bây giờ, chúng tôi muốn để đối phó với các nhân vật. Chúng tôi muốn in ra mỗi nhân vật cá nhân. 313 00:22:14,850 --> 00:22:22,150 Khi bạn muốn nó để in ra một phao, bạn sẽ sử dụng giữ chỗ như f%. 314 00:22:22,150 --> 00:22:24,580 Với một int, bạn sẽ sử dụng% d. 315 00:22:24,580 --> 00:22:30,890 Và tương tự như vậy, với một nhân vật bạn sử dụng c% nói rằng tôi sẽ được in một nhân vật 316 00:22:30,890 --> 00:22:34,570 được lưu trữ bên trong một biến. 317 00:22:34,570 --> 00:22:40,840 Vì vậy, chúng tôi có điều này, và chúng ta hãy thêm một khoảng thời gian và không gian cho nó. 318 00:22:40,840 --> 00:22:45,430 Nhân vật mà chúng ta sử dụng? 319 00:22:45,430 --> 00:22:49,780 Chúng tôi sẽ được sử dụng bất kỳ hình thức nào chúng ta đang ở của chuỗi. 320 00:22:49,780 --> 00:22:52,890 Vì vậy, sau đó chúng ta sẽ được sử dụng một cái gì đó với chuỗi, 321 00:22:52,890 --> 00:22:56,420 nhưng chúng tôi muốn được truy cập vào nhân vật nào đó có. 322 00:22:56,420 --> 00:23:02,740 Vì vậy, nếu một chuỗi chỉ là một mảng, sau đó làm thế nào để chúng ta truy cập phần tử của mảng? 323 00:23:02,740 --> 00:23:06,480 Chúng tôi có những dấu ngoặc vuông, và sau đó chúng tôi đặt các chỉ số trong đó. 324 00:23:06,480 --> 00:23:11,820 Vì vậy, chúng tôi có dấu ngoặc vuông. Chỉ mục của chúng tôi trong trường hợp này, chúng tôi chỉ có thể sử dụng i. Chính xác. 325 00:23:15,290 --> 00:23:22,370 Vì vậy, ở đây chúng ta đang nói rằng chúng tôi đang đi để được in một ký tự tiếp theo là một dấu chấm và một không gian, 326 00:23:22,370 --> 00:23:30,870 và rằng nhân vật là có được ký tự thứ i trong chuỗi s của chúng tôi. 327 00:23:32,920 --> 00:23:39,330 Tôi chỉ cần đi để tiết kiệm mà. Okay. 328 00:23:42,510 --> 00:23:46,840 Bây giờ tôi sẽ chạy chiều dài chuỗi. 329 00:23:46,840 --> 00:23:53,440 Vì vậy, chúng tôi đã có một chuỗi được gọi là OMG, và bây giờ nó nhấn mạnh nhiều hơn. 330 00:23:53,440 --> 00:23:57,870 Tương tự như vậy, chúng ta hãy nói rằng chúng tôi thực sự muốn để có được một chuỗi từ người sử dụng. 331 00:23:57,870 --> 00:23:59,580 Làm thế nào chúng ta có thể làm điều này? 332 00:23:59,580 --> 00:24:01,610 Trước đây, làm thế nào chúng ta có được một int? 333 00:24:01,610 --> 00:24:08,040 Chúng tôi nói getInt, phải không? Nhưng điều này không phải là int, vì vậy hãy GetString. 334 00:24:11,780 --> 00:24:17,770 Hãy làm cho chiều dài chuỗi. Ở đây chúng tôi không nhập một gợi ý cụ thể. 335 00:24:17,770 --> 00:24:19,940 Vì vậy, tôi không biết. 336 00:24:19,940 --> 00:24:23,820 Tôi sẽ đặt tên của tôi ở đây và vì vậy sau đó tôi có thể làm một trong những điều 337 00:24:23,820 --> 00:24:29,600 nơi mà tôi chỉ định một từ cho mỗi lá thư hoặc một cái gì đó như thế. Cool. 338 00:24:29,600 --> 00:24:31,900 Vì vậy, đó là chuỗi dài. 339 00:24:33,000 --> 00:24:34,640 Vì vậy, chúng tôi đang trở lại Caesar. 340 00:24:34,640 --> 00:24:38,620 Chúng tôi có một vài công cụ về làm thế nào chúng ta lặp qua một chuỗi, 341 00:24:38,620 --> 00:24:41,250 làm thế nào chúng ta truy cập mỗi yếu tố cá nhân. 342 00:24:41,250 --> 00:24:44,720 Vì vậy, bây giờ chúng tôi có thể quay lại vào chương trình. 343 00:24:44,720 --> 00:24:48,650 Như tôi đã đề cập trước đây, trong bảng mã ASCII, người bạn tốt nhất của bạn, 344 00:24:48,650 --> 00:24:52,300 bạn sẽ nhìn thấy các con số được liên kết với mỗi thư. 345 00:24:52,300 --> 00:24:55,900 Vì vậy, ở đây nói rõ chúng tôi là tôi chóng mặt! 346 00:24:55,900 --> 00:25:01,090 Sau đó, mỗi người trong số những nhân vật này sẽ có một số lượng và giá trị ASCII liên kết với nó, 347 00:25:01,090 --> 00:25:04,710 ngay cả những dấu nháy đơn, ngay cả không gian, ngay cả những dấu chấm than, 348 00:25:04,710 --> 00:25:06,600 vì vậy bạn sẽ muốn giữ cho rằng trong tâm trí. 349 00:25:06,600 --> 00:25:12,360 Vì vậy, nói chính của chúng tôi là người sử dụng bao gồm trong đối số dòng lệnh của họ là 6. 350 00:25:12,360 --> 00:25:17,770 Điều đó có nghĩa là chữ cái đầu tiên, đó là cái ta, là đại diện của 73, 351 00:25:17,770 --> 00:25:25,610 bạn muốn trả lại cho họ bất cứ điều gì thư được đại diện bởi giá trị ASCII của 73 + 6. 352 00:25:25,610 --> 00:25:29,020 Trong trường hợp này, đó sẽ là 79. 353 00:25:30,840 --> 00:25:35,040 Bây giờ chúng tôi muốn đi đến ký tự tiếp theo. 354 00:25:35,040 --> 00:25:40,960 Vì vậy, tiếp theo trong chỉ số 1 của bản rõ sẽ là dấu nháy đơn. 355 00:25:40,960 --> 00:25:46,780 Nhưng hãy nhớ rằng chúng ta chỉ muốn encipher các chữ cái. 356 00:25:46,780 --> 00:25:50,040 Vì vậy, chúng tôi muốn chắc chắn rằng dấu lược thực sự vẫn như nhau, 357 00:25:50,040 --> 00:25:54,310 rằng chúng ta không thay đổi từ 39 đến bất cứ điều gì 45. 358 00:25:54,310 --> 00:25:57,150 Chúng tôi muốn giữ nó như là một dấu nháy đơn. 359 00:25:57,150 --> 00:26:00,780 Vì vậy, chúng tôi muốn ghi nhớ chỉ encipher các chữ cái 360 00:26:00,780 --> 00:26:04,560 bởi vì chúng tôi muốn tất cả những biểu tượng khác vẫn không thay đổi trong chương trình của chúng tôi. 361 00:26:04,560 --> 00:26:07,130 Một điều mà chúng tôi muốn là để bảo tồn vốn. 362 00:26:07,130 --> 00:26:10,250 Vì vậy, khi bạn có một ký tự hoa, nó phải ở lại như là một chữ hoa. 363 00:26:10,250 --> 00:26:12,830 Lowercases nên ở lại như là chữ thường. 364 00:26:13,620 --> 00:26:19,480 Vì vậy, một số chức năng hữu ích để có thể để đối phó với các chữ cái chỉ enciphering 365 00:26:19,480 --> 00:26:22,380 và tiếp tục bảo tồn vốn điều 366 00:26:22,380 --> 00:26:25,130 isalpha, isupper, chức năng islower. 367 00:26:25,130 --> 00:26:29,270 Và vì vậy đây là những chức năng mà trả lại cho bạn một giá trị Boolean. 368 00:26:29,270 --> 00:26:34,180 Về cơ bản, đúng hay sai. Một chữ hoa? Chữ số này? 369 00:26:34,180 --> 00:26:37,180 Thư, về cơ bản. 370 00:26:37,180 --> 00:26:41,070 Vì vậy, đây là 3 ví dụ về cách bạn sẽ sử dụng chức năng. 371 00:26:41,070 --> 00:26:47,060 Về cơ bản, bạn có thể kiểm tra xem giá trị trả lại cho bạn bởi chức năng đó là đúng hay sai 372 00:26:47,060 --> 00:26:49,400 dựa trên đầu vào đó. 373 00:26:49,400 --> 00:26:54,880 Hoặc là làm một cái gì đó không encipher, cơ yếu hoặc làm cho chắc chắn rằng đó là chữ hoa, vv 374 00:26:54,880 --> 00:27:01,080 [Sinh viên] bạn chỉ có thể giải thích những người hơn một chút và bạn sử dụng chúng như thế nào? >> Yeah, cho chắc chắn. 375 00:27:01,080 --> 00:27:08,470 Vì vậy, nếu chúng ta nhìn lại, ở đây chúng tôi có một số vốn tôi, phải không? 376 00:27:08,470 --> 00:27:14,550 Vì vậy, chúng tôi biết rằng tôi đi đến O vì tôi + 6 là O. 377 00:27:14,550 --> 00:27:18,740 Nhưng chúng tôi muốn chắc chắn rằng O sẽ là một vốn O. 378 00:27:18,740 --> 00:27:22,940 Vì vậy, về cơ bản, đó là sẽ thay đổi đầu vào của chúng tôi. 379 00:27:22,940 --> 00:27:26,870 Vì vậy, cho dù đó là chữ hoa hay không sẽ loại thay đổi cách mà chúng ta đối phó với nó. 380 00:27:26,870 --> 00:27:32,360 Vì vậy, sau đó nếu chúng ta sử dụng chức năng isupper trên rằng chỉ số cụ thể, 381 00:27:32,360 --> 00:27:36,480 để isupper ("I"), trả về cho chúng ta sự thật, vì vậy chúng tôi biết rằng đó là trên. 382 00:27:36,480 --> 00:27:40,360 Vì vậy, sau đó trên cơ sở đó, sau này chúng ta sẽ đi vào một công thức 383 00:27:40,360 --> 00:27:42,750 là bạn sẽ được sử dụng để thay đổi mọi thứ trong Caesar, 384 00:27:42,750 --> 00:27:46,560 như vậy thì về cơ bản, có sẽ là một công thức hơi khác nhau nếu nó là chữ hoa 385 00:27:46,560 --> 00:27:50,670 như trái ngược với thành chữ thường. Có ý nghĩa? 386 00:27:51,020 --> 00:27:52,760 Yeah. Không có lo lắng. 387 00:27:54,900 --> 00:27:58,990 Tôi đã nói chuyện một chút về thêm 6 một lá thư, không hoàn toàn có ý nghĩa 388 00:27:58,990 --> 00:28:05,500 trừ khi chúng tôi loại hiểu rằng những nhân vật này 389 00:28:05,500 --> 00:28:08,920 là loại hoán đổi cho nhau với số nguyên. 390 00:28:08,920 --> 00:28:11,250 Những gì chúng tôi làm là chúng ta loại đúc sử dụng tiềm ẩn. 391 00:28:11,250 --> 00:28:18,100 Tôi sẽ đi vào đúc một chút sau đó vào nơi bạn có một giá trị và biến nó thành một loại khác nhau 392 00:28:18,100 --> 00:28:20,440 hơn so với ban đầu là. 393 00:28:20,440 --> 00:28:25,910 Nhưng với pset này, chúng tôi sẽ có thể loại thay thế cho nhau sử dụng các ký tự 394 00:28:25,910 --> 00:28:30,880 và tương ứng với giá trị số nguyên. 395 00:28:30,880 --> 00:28:35,140 Vì vậy, nếu bạn chỉ đơn giản là bọc lấy một nhân vật chỉ với các dấu nháy đơn, 396 00:28:35,140 --> 00:28:40,390 sau đó bạn sẽ có thể làm việc với nó với số nguyên, đối phó với nó là một số nguyên. 397 00:28:40,390 --> 00:28:48,040 Vì vậy, các C vốn liên quan đến 67. F chữ thường liên quan đến 102. 398 00:28:48,040 --> 00:28:51,480 Một lần nữa, nếu bạn muốn biết những giá trị này, nhìn vào bảng mã ASCII của bạn. 399 00:28:51,480 --> 00:28:56,160 Vì vậy, chúng ta hãy đi vào một số ví dụ về cách bạn có thể có thể trừ và thêm, 400 00:28:56,160 --> 00:29:03,130 làm thế nào bạn có thể thực sự thực sự làm việc với những nhân vật này, sử dụng chúng thay thế cho nhau. 401 00:29:03,870 --> 00:29:11,350 Tôi nói rằng ASCIIMath được để tính toán bổ sung của một nhân vật đến một số nguyên 402 00:29:11,350 --> 00:29:17,590 và sau đó hiển thị các ký tự kết quả cũng như các giá trị kết quả ASCII. 403 00:29:17,590 --> 00:29:22,290 Và vì vậy ở đây tôi đang nói đến - we'll đối phó với phần này sau đó - 404 00:29:22,290 --> 00:29:29,100 nhưng về cơ bản, tôi nói rằng người dùng nên nói ASCIIMath chạy cùng với một phím, 405 00:29:29,100 --> 00:29:30,880 và tôi nói rằng mà quan trọng là có được số lượng 406 00:29:30,880 --> 00:29:34,600 mà chúng ta sẽ thêm nhân vật này. 407 00:29:34,600 --> 00:29:38,560 Vì vậy, ở đây nhận thấy rằng kể từ khi tôi đòi hỏi một phím, 408 00:29:38,560 --> 00:29:40,590 kể từ khi tôi yêu cầu họ cho tôi 1 điều, 409 00:29:40,590 --> 00:29:45,600 Tôi chỉ muốn chấp nhận / asciimath. Và một phím. 410 00:29:45,600 --> 00:29:49,330 Vì vậy, tôi sẽ yêu cầu rằng argc bằng 2. 411 00:29:49,330 --> 00:29:54,360 Nếu nó không phải, sau đó tôi sẽ trở về 1 và chương trình sẽ thoát. 412 00:29:55,070 --> 00:29:58,540 Vì vậy, tôi nói chính là sẽ không phải là đối số dòng lệnh đầu tiên, 413 00:29:58,540 --> 00:30:05,080 nó sẽ là thứ hai, và như bạn thấy ở đây, 414 00:30:05,080 --> 00:30:11,790 Tôi sẽ biến chúng thành một số nguyên. 415 00:30:15,740 --> 00:30:19,230 Sau đó, tôi sẽ thiết lập một nhân vật được r. 416 00:30:19,230 --> 00:30:23,970 Chú ý rằng các loại của chr biến là một số nguyên. 417 00:30:23,970 --> 00:30:30,480 Cách mà tôi có thể sử dụng r là một số nguyên bằng cách bọc nó với những dấu nháy đơn. 418 00:30:33,850 --> 00:30:40,560 Vì vậy, sao tuyên bố printf của chúng tôi, nơi chúng tôi có một giữ chỗ cho một nhân vật 419 00:30:40,560 --> 00:30:43,590 và sau đó là một giữ chỗ cho một số nguyên, 420 00:30:43,590 --> 00:30:49,450 nhân vật này được đại diện bởi chr, và số nguyên là chìa khóa. 421 00:30:49,450 --> 00:30:54,320 Và như vậy thì chúng ta sẽ trong kết quả thêm 2 lại với nhau. 422 00:30:54,320 --> 00:30:58,420 Vì vậy, chúng ta sẽ để thêm r + bất cứ điều gì quan trọng là, 423 00:30:58,420 --> 00:31:03,520 và sau đó chúng ta sẽ in kết quả đó. 424 00:31:06,210 --> 00:31:14,220 Vì vậy, chúng ta hãy làm asciimath. Đến nay, vì vậy hãy chỉ cần chạy asciimath. 425 00:31:14,220 --> 00:31:18,290 Ồ, nhưng nhìn thấy, nó không làm bất cứ điều gì vì chúng tôi không thực sự cung cấp cho nó một phím. 426 00:31:18,290 --> 00:31:23,850 Vì vậy, khi vừa trở về 1, chức năng chính của chúng tôi, nó chỉ quay trở lại với chúng ta. 427 00:31:23,850 --> 00:31:29,250 Vì vậy, sau đó để vượt qua trong một chìa khóa. Ai đó đưa cho tôi một số. >> [Sinh viên] 4. 428 00:31:29,250 --> 00:31:30,920 4. Okay. 429 00:31:30,920 --> 00:31:39,280 Vì vậy, r tăng 4 được sẽ để cho chúng ta v, tương ứng với giá trị ASCII của 118. 430 00:31:39,280 --> 00:31:43,880 Vì vậy, sau đó nó loại làm cho cảm giác rằng - 431 00:31:43,880 --> 00:31:51,250 Thực ra, tôi có thể hỏi bạn, những gì bạn nghĩ rằng giá trị ASCII của r là nếu r + 4 là 118? 432 00:31:53,070 --> 00:31:55,470 Sau đó, yeah, r là 114. 433 00:31:55,470 --> 00:32:03,010 Vì vậy, nếu bạn nhìn vào bảng ASCII sau đó, chắc chắn, bạn sẽ thấy r được thể hiện bởi 114. 434 00:32:03,010 --> 00:32:08,610 Vì vậy, bây giờ chúng ta biết rằng chúng ta có thể thêm các số nguyên với các nhân vật, điều này có vẻ khá đơn giản. 435 00:32:08,610 --> 00:32:12,740 Chúng tôi chỉ để lặp lại một chuỗi như chúng ta đã thấy trong một ví dụ trước. 436 00:32:12,740 --> 00:32:17,170 Chúng tôi sẽ kiểm tra nếu nó là một lá thư. 437 00:32:17,170 --> 00:32:20,420 Nếu có, sau đó chúng tôi sẽ thay đổi nó bằng bất kỳ phím nào. 438 00:32:20,420 --> 00:32:23,650 Khá đơn giản, trừ khi bạn nhận được như thế này, 439 00:32:23,650 --> 00:32:32,140 bạn thấy rằng z, đại diện 122, sau đó sẽ cung cấp cho bạn một nhân vật khác. 440 00:32:32,140 --> 00:32:37,770 Chúng tôi thực sự muốn ở lại trong bảng chữ cái của chúng tôi, phải không? 441 00:32:37,770 --> 00:32:43,180 Vì vậy, chúng ta cần phải tìm ra một số cách để loại gói xung quanh. 442 00:32:43,180 --> 00:32:47,190 Khi bạn đạt đến Zed và bạn muốn tăng một số lượng nhất định, 443 00:32:47,190 --> 00:32:51,230 bạn không muốn đi vào vượt ra ngoài phần bảng chữ cái ASCII; 444 00:32:51,230 --> 00:32:54,140 bạn muốn để bọc lại tất cả các cách để A. 445 00:32:54,140 --> 00:32:58,550 Nhưng hãy nhớ bạn vẫn còn bảo tồn các trường hợp. 446 00:32:58,550 --> 00:33:00,980 Vì vậy, biết rằng chữ cái không thể trở thành biểu tượng 447 00:33:00,980 --> 00:33:05,290 giống như biểu tượng sẽ không được thay đổi là tốt. 448 00:33:05,290 --> 00:33:08,170 Trong pset cuối cùng, bạn chắc chắn không cần phải, 449 00:33:08,170 --> 00:33:14,310 nhưng là một lựa chọn là thực hiện pset tham lam của bạn bằng cách sử dụng chức năng modulus. 450 00:33:14,310 --> 00:33:17,230 Nhưng bây giờ chúng tôi đang thực sự sẽ cần phải sử dụng mô đun, 451 00:33:17,230 --> 00:33:19,900 vì vậy chúng ta hãy đi qua này một chút một chút. 452 00:33:19,900 --> 00:33:26,920 Về cơ bản, khi bạn có x modulo y, cung cấp cho bạn phần còn lại của x chia cho y. 453 00:33:26,920 --> 00:33:30,930 Dưới đây là một số ví dụ ở đây. Chúng tôi có 27% 15. 454 00:33:30,930 --> 00:33:36,200 Về cơ bản, khi bạn trừ đi 15 từ 27 như nhiều lần nhất có thể mà không nhận được tiêu cực 455 00:33:36,200 --> 00:33:39,060 sau đó bạn nhận được 12 trái qua. 456 00:33:39,060 --> 00:33:44,650 Vì vậy, đó là loại giống như trong bối cảnh toán học, nhưng làm thế nào chúng ta có thể thực sự sử dụng này? 457 00:33:44,650 --> 00:33:47,100 Nó sẽ có ích cho wrapover của chúng tôi. 458 00:33:47,100 --> 00:33:55,420 Đối với điều này, chúng ta hãy chỉ nói rằng tôi yêu cầu tất cả các bạn để phân chia thành 3 nhóm. 459 00:33:55,420 --> 00:33:58,010 Đôi khi bạn làm điều này trong các nhóm và một cái gì đó như thế. 460 00:33:58,010 --> 00:34:01,320 Nói rằng tôi nói: "Được rồi, tôi muốn tất cả các bạn được chia thành 3". 461 00:34:01,320 --> 00:34:04,240 Làm thế nào bạn có thể làm điều đó? 462 00:34:04,240 --> 00:34:06,810 [Không nghe được sinh viên phản ứng] Yeah, chính xác. Đếm. Okay. 463 00:34:06,810 --> 00:34:10,260 Hãy thực sự làm điều đó. Nào bạn muốn để bắt đầu? 464 00:34:10,260 --> 00:34:13,810 [Sinh viên, kể] 1, 2, 3, 4. 465 00:34:13,810 --> 00:34:16,620 Nhưng hãy nhớ ... >> [Sinh viên] Ồ, xin lỗi. 466 00:34:16,620 --> 00:34:18,730 Đó là một điểm thực sự tốt. 467 00:34:18,730 --> 00:34:24,130 Bạn nói 4, nhưng chúng tôi thực sự muốn bạn nói 1 bởi vì chúng tôi chỉ muốn 3 nhóm. 468 00:34:24,130 --> 00:34:30,159 Vì vậy, sau đó, làm thế nào - Không, đó là một ví dụ thực sự tốt bởi vì sau đó làm thế nào bạn có thể nói 1? 469 00:34:30,159 --> 00:34:33,370 Mối quan hệ giữa 4 và 1 là gì? 470 00:34:33,370 --> 00:34:36,760 Vâng, 4 mod 3 là 1. 471 00:34:36,760 --> 00:34:41,460 Vì vậy, nếu bạn tiếp tục, bạn sẽ là 2. 472 00:34:41,460 --> 00:34:44,540 Vì vậy, chúng tôi có 1, 2, 3, 1, 2. 473 00:34:44,540 --> 00:34:49,420 Một lần nữa, bạn đang thực sự người thứ 5. Làm thế nào để bạn biết để nói 2 thay vì 5? 474 00:34:49,420 --> 00:34:53,760 Bạn nói 5 mod 3 là 2. 475 00:34:53,760 --> 00:34:59,100 Tôi muốn xem có bao nhiêu nhóm 3 còn lại, sau đó để am I. 476 00:34:59,100 --> 00:35:02,860 Và như vậy sau đó nếu chúng tôi tiếp tục cùng cả căn phòng, 477 00:35:02,860 --> 00:35:07,760 sau đó chúng ta sẽ thấy rằng chúng tôi luôn thực sự áp dụng chức năng mod với chính bản thân mình 478 00:35:07,760 --> 00:35:09,990 loại đếm. 479 00:35:09,990 --> 00:35:14,490 Đó là một loại nhiều ví dụ hữu hình của cách bạn có thể sử dụng modulo 480 00:35:14,490 --> 00:35:17,960 bởi vì tôi chắc chắn rằng hầu hết chúng ta có thể trải qua quá trình đó 481 00:35:17,960 --> 00:35:19,630 nơi mà chúng tôi đã có để đếm ra. 482 00:35:19,630 --> 00:35:21,840 Bất kỳ câu hỏi trên modulo? 483 00:35:21,840 --> 00:35:25,360 Nó sẽ là khá quan trọng để hiểu các khái niệm này, 484 00:35:25,360 --> 00:35:28,640 vì vậy tôi muốn chắc chắn rằng các bạn hiểu. 485 00:35:28,640 --> 00:35:34,660 [Sinh viên] Nếu có còn lại, nó cung cấp cho bạn số lượng thực tế? 486 00:35:34,660 --> 00:35:40,430 Nếu một trong 3 đầu tiên của họ đã thực hiện nó, nó sẽ cho họ những gì họ thực sự là, 487 00:35:40,430 --> 00:35:43,310 hoặc nó sẽ cho họ không nghe được] >> Đó là một câu hỏi hay. 488 00:35:43,310 --> 00:35:48,750 Khi không có còn lại cho modulo - vì vậy nói rằng bạn có 6 mod 3 - 489 00:35:48,750 --> 00:35:52,340 mà thực sự cung cấp cho bạn trở lại 0. 490 00:35:53,670 --> 00:35:57,290 Chúng ta sẽ nói về điều đó một chút sau đó. 491 00:35:58,810 --> 00:36:07,720 Oh yeah, ví dụ, người thứ 3 - 3 mod 3 thực sự là 0, nhưng cô cho biết 3. 492 00:36:07,720 --> 00:36:14,900 Vì vậy, đó là loại giống như một catch bên trong, ví dụ, 493 00:36:14,900 --> 00:36:17,620 như okay, nếu mod 0 sau đó tôi sẽ là người thứ 3. 494 00:36:17,620 --> 00:36:22,740 Nhưng chúng tôi sẽ nhận được vào loại làm thế nào chúng ta có thể muốn để đối phó với những gì 0 là sau đó. 495 00:36:22,740 --> 00:36:32,750 Vì vậy, bây giờ chúng tôi bằng cách nào đó có một cách để lập bản đồ các Zed thư. 496 00:36:32,750 --> 00:36:34,920 Vì vậy, bây giờ chúng ta đã đi qua những ví dụ, 497 00:36:34,920 --> 00:36:37,880 chúng ta thấy Caesar có thể làm việc như thế nào. 498 00:36:37,880 --> 00:36:42,640 Bạn thấy 2 bảng chữ cái và sau đó bạn nhìn thấy chúng thay đổi. 499 00:36:42,640 --> 00:36:44,430 Vì vậy, hãy cố gắng và thể hiện rằng trong điều khoản của công thức. 500 00:36:44,430 --> 00:36:46,940 Công thức này được thực sự trao cho bạn trong spec, 501 00:36:46,940 --> 00:36:52,070 nhưng chúng ta hãy xem qua những gì mỗi biến có nghĩa là 502 00:36:52,070 --> 00:36:55,000 Kết quả cuối cùng của chúng tôi là có được các bản mã. 503 00:36:55,000 --> 00:36:58,300 Vì vậy, điều này nói rằng nhân vật thứ i của các bản mã 504 00:36:58,300 --> 00:37:02,500 sẽ tương ứng với ký tự thứ i của bản rõ. 505 00:37:02,500 --> 00:37:08,130 Có ý nghĩa bởi vì chúng tôi muốn luôn luôn được xếp hàng những việc này lên. 506 00:37:08,130 --> 00:37:13,480 Vì vậy, nó sẽ là nhân vật thứ i cộng với bản mã k, đó là chìa khóa của chúng ta - 507 00:37:13,480 --> 00:37:17,230 ý nghĩa - và sau đó chúng ta có mod 26. 508 00:37:17,230 --> 00:37:19,860 Hãy nhớ lại khi chúng tôi đã có Zed 509 00:37:19,860 --> 00:37:24,190 chúng tôi không muốn để có được vào nhân vật, vì vậy chúng tôi muốn mod nó 510 00:37:24,190 --> 00:37:26,540 và loại bọc quanh bảng chữ cái. 511 00:37:26,540 --> 00:37:33,430 Sau khi Zed, bạn sẽ đi đến một, b, c, d, cho đến khi bạn có số bên phải. 512 00:37:33,430 --> 00:37:44,690 Vì vậy, chúng ta biết rằng Zed, nếu + 6, sẽ cung cấp cho chúng tôi f bởi vì sau khi Zed đến a, b, c, d, e, f. 513 00:37:44,690 --> 00:37:52,530 Vì vậy, hãy nhớ là chúng tôi biết chắc chắn rằng Zed + 6 sẽ cung cấp cho chúng tôi f. 514 00:37:52,530 --> 00:38:03,530 Trong các giá trị ASCII, z là 122 và f là 102. 515 00:38:03,530 --> 00:38:10,570 Vì vậy, chúng ta phải tìm một số cách để làm cho công thức Caesar của chúng tôi cung cấp cho chúng tôi 102 516 00:38:10,570 --> 00:38:13,590 sau khi vào 122. 517 00:38:13,590 --> 00:38:19,550 Vì vậy, nếu chúng ta chỉ cần áp dụng công thức này,% ('z' + 6) 26, mà thực sự cung cấp cho bạn 24 518 00:38:19,550 --> 00:38:25,980 vì 122 + 6 là 128; 128% 26 cung cấp cho bạn 24 còn lại. 519 00:38:25,980 --> 00:38:29,140 Nhưng điều đó không thực sự có nghĩa là f. Đó chắc chắn không phải 102. 520 00:38:29,140 --> 00:38:33,590 Đó cũng không phải là chữ thứ 6 trong bảng chữ cái. 521 00:38:33,590 --> 00:38:41,550 Vì vậy, rõ ràng là, chúng ta cần có một số cách tinh chỉnh một chút. 522 00:38:42,970 --> 00:38:51,340 Trong điều kiện của bảng chữ cái thông thường, chúng ta biết rằng z là lá thư thứ 26 và f là 6. 523 00:38:51,340 --> 00:38:55,460 Nhưng chúng ta đang ở trong khoa học máy tính, do đó, chúng ta sẽ chỉ số 0. 524 00:38:55,460 --> 00:39:00,690 Vì vậy, sau đó thay vì z là số 26, chúng ta sẽ nói rằng số của 25 525 00:39:00,690 --> 00:39:02,630 bởi vì một là 0. 526 00:39:02,630 --> 00:39:04,770 Vì vậy, bây giờ hãy áp dụng công thức này. 527 00:39:04,770 --> 00:39:11,710 Chúng tôi có z đại diện bởi 25 + 6, trong đó cung cấp cho bạn 31. 528 00:39:11,710 --> 00:39:15,790 Và 31 mod 26 cung cấp cho bạn 5 như còn lại một. 529 00:39:15,790 --> 00:39:20,500 Đó là hoàn hảo bởi vì chúng ta biết rằng f là lá thư thứ 5 trong bảng chữ cái. 530 00:39:20,500 --> 00:39:26,400 Nhưng nó vẫn không phải là f, phải không? Nó vẫn không phải là 102. 531 00:39:26,400 --> 00:39:32,730 Vì vậy, sau đó cho pset này, một thách thức sẽ được cố gắng tìm ra mối quan hệ 532 00:39:32,730 --> 00:39:36,910 giữa chuyển đổi giữa các giá trị ASCII và chỉ số thứ tự chữ cái. 533 00:39:36,910 --> 00:39:40,280 Về cơ bản, những gì bạn sẽ muốn làm, bạn muốn bắt đầu với các giá trị ASCII, 534 00:39:40,280 --> 00:39:45,390 nhưng sau đó bạn muốn bằng cách nào đó dịch đó vào một chỉ số theo thứ tự abc 535 00:39:45,390 --> 00:39:52,610 sau đó tính toán nó phải là những gì thư - về cơ bản, chỉ số chữ cái của nó là gì 536 00:39:52,610 --> 00:39:57,660 của các ký tự mật mã - sau đó dịch lại cho rằng các giá trị ASCII. 537 00:39:57,660 --> 00:40:04,870 Vì vậy, nếu bạn whip ra bảng mã ASCII của bạn, sau đó thử và tìm thấy mối quan hệ giữa, nói rằng, 102 và 5 538 00:40:04,870 --> 00:40:10,440 hoặc 122 và 25. 539 00:40:12,140 --> 00:40:15,690 Chúng tôi đã nhận được chìa khóa của chúng tôi từ các đối số dòng lệnh, chúng tôi đã nhận được các bản rõ, 540 00:40:15,690 --> 00:40:17,520 chúng tôi đã enciphered nó. 541 00:40:17,520 --> 00:40:19,820 Bây giờ tất cả chúng tôi còn lại để làm là in nó. 542 00:40:19,820 --> 00:40:22,040 Chúng ta có thể làm điều này một vài cách khác nhau. 543 00:40:22,040 --> 00:40:24,570 Những gì chúng ta có thể làm là thực sự in như chúng tôi đi cùng. 544 00:40:24,570 --> 00:40:28,250 Như chúng ta lặp qua các ký tự trong chuỗi, 545 00:40:28,250 --> 00:40:31,660 chúng ta có thể chỉ đơn giản là chỉ cần in ngay sau đó khi chúng tôi tính toán nó. 546 00:40:31,660 --> 00:40:36,030 Ngoài ra, bạn cũng có thể lưu trữ nó trong một mảng và có một loạt các nhân vật 547 00:40:36,030 --> 00:40:39,280 và cuối cùng lặp lại rằng toàn bộ mảng và in ra. 548 00:40:39,280 --> 00:40:40,980 Vì vậy, bạn có một vài lựa chọn cho điều đó. 549 00:40:40,980 --> 00:40:47,280 Và hãy nhớ rằng% c là có được giữ chỗ cho in một nhân vật. 550 00:40:47,280 --> 00:40:50,420 Vì vậy, chúng tôi đã có Caesar, và bây giờ chúng ta chuyển đến Vigenere, 551 00:40:50,420 --> 00:40:57,580 mà là rất giống với Caesar nhưng chỉ hơi phức tạp hơn. 552 00:40:57,580 --> 00:41:03,310 Vì vậy, về cơ bản với Vigenere bạn sẽ đi qua trong một từ khóa. 553 00:41:03,310 --> 00:41:06,510 Vì vậy, thay vì một số, bạn sẽ có một chuỗi, 554 00:41:06,510 --> 00:41:09,200 và do đó sẽ hành động như từ khóa của bạn. 555 00:41:09,200 --> 00:41:14,440 Sau đó, như thường lệ, bạn sẽ nhận được một nhắc nhở cho một chuỗi từ người sử dụng 556 00:41:14,440 --> 00:41:19,050 và sau đó encipher nó và sau đó cung cấp cho họ trở lại bản mã. 557 00:41:19,050 --> 00:41:24,650 Vì vậy, như tôi đã nói, nó rất giống với Caesar, ngoại trừ thay vì chuyển một số lượng nhất định, 558 00:41:24,650 --> 00:41:30,620 con số này đang thực sự sẽ thay đổi mỗi khi từ nhân vật này đến nhân vật khác. 559 00:41:30,620 --> 00:41:34,890 Đại diện cho rằng con số thực tế thay đổi, nó được trình bày bởi các chữ cái của bàn phím. 560 00:41:34,890 --> 00:41:43,150 Vì vậy, nếu bạn nhập vào một sự thay đổi của một, ví dụ, sau đó sẽ tương ứng với một sự thay đổi từ 0. 561 00:41:43,150 --> 00:41:45,900 Vì vậy, đó là một lần nữa trở lại với chỉ số chữ cái. 562 00:41:45,900 --> 00:41:49,100 Những gì có thể có ích nếu bạn nhìn thấy rằng chúng tôi đang thực sự đối phó với các giá trị ASCII 563 00:41:49,100 --> 00:41:51,790 cũng như các chữ cái, cũng như chỉ số theo thứ tự abc, 564 00:41:51,790 --> 00:41:58,020 có thể tìm thấy hoặc làm cho bảng ASCII của bạn cho thấy các chỉ số theo thứ tự chữ cái 0 đến 25, 565 00:41:58,020 --> 00:42:03,750 a đến z, và các giá trị ASCII để bạn có loại có thể thấy mối quan hệ 566 00:42:03,750 --> 00:42:07,020 và phác thảo ra và thử và tìm thấy một số mẫu. 567 00:42:07,020 --> 00:42:11,010 Tương tự như vậy, nếu bạn đã chuyển đổi ở các trường hợp nhất định f 568 00:42:11,010 --> 00:42:21,110 và điều này là một trong hai f chữ thường hoặc chữ hoa thì đó sẽ tương ứng đến 5. 569 00:42:21,110 --> 00:42:24,180 Chúng tôi tốt cho đến nay? 570 00:42:25,770 --> 00:42:30,050 Công thức cho Vigenere là một chút khác nhau. 571 00:42:30,050 --> 00:42:32,960 Về cơ bản, bạn sẽ thấy rằng nó chỉ giống như Caesar, 572 00:42:32,960 --> 00:42:37,390 ngoại trừ thay vì chỉ k có k chỉ số j. 573 00:42:37,390 --> 00:42:44,810 Chú ý rằng chúng tôi không sử dụng i bởi vì về cơ bản, độ dài của từ khóa 574 00:42:44,810 --> 00:42:49,850 không nhất thiết phải là chiều dài của bản mã của chúng tôi. 575 00:42:49,850 --> 00:42:56,130 Đây sẽ là một rõ ràng hơn chút khi chúng ta thấy một ví dụ mà tôi có một chút sau này. 576 00:42:56,130 --> 00:43:03,160 Về cơ bản, nếu bạn chạy chương trình của bạn với một từ khóa ohai, 577 00:43:03,160 --> 00:43:08,560 thì đó có nghĩa là mọi thời gian, ohai là có được sự thay đổi của bạn. 578 00:43:08,560 --> 00:43:11,060 Vì vậy, tùy thuộc vào vị trí bạn đang ở trong từ khóa của bạn, 579 00:43:11,060 --> 00:43:15,800 bạn đang đi để thay đổi nhân vật nào đó bản mã của bạn bằng số tiền đó. 580 00:43:15,800 --> 00:43:19,630 Một lần nữa, giống như Caesar, chúng tôi muốn đảm bảo rằng chúng tôi duy trì mức vốn điều 581 00:43:19,630 --> 00:43:22,900 và chúng ta chỉ có chữ encipher, không phải là các ký tự hoặc các không gian. 582 00:43:22,900 --> 00:43:26,330 Vì vậy, nhìn lại cho Caesar về chức năng mà bạn có thể sử dụng, 583 00:43:26,330 --> 00:43:32,570 cách thức mà bạn đã quyết định làm thế nào để thay đổi mọi thứ, và áp dụng cho chương trình của bạn ở đây. 584 00:43:32,570 --> 00:43:35,260 Vì vậy, hãy bản đồ này ra. 585 00:43:35,260 --> 00:43:39,680 Chúng tôi có một bản rõ rằng chúng tôi đã nhận được từ người sử dụng từ getString 586 00:43:39,680 --> 00:43:44,090 nói ... là CS50! 587 00:43:44,090 --> 00:43:47,090 Sau đó, chúng tôi có một từ khoá của ohai. 588 00:43:47,090 --> 00:43:50,930 4 ký tự đầu tiên là khá đơn giản. 589 00:43:50,930 --> 00:43:55,580 Chúng tôi biết rằng T sẽ được chuyển bởi o, 590 00:43:55,580 --> 00:44:01,990 sau đó h sẽ được chuyển bởi h, tôi sẽ được chuyển bởi một. 591 00:44:01,990 --> 00:44:04,610 Ở đây bạn thấy rằng một đại diện cho 0, 592 00:44:04,610 --> 00:44:11,940 do đó, sau đó giá trị cuối cùng là thực sự chỉ là cùng một lá thư như trước đây. 593 00:44:11,940 --> 00:44:15,250 Sau đó, s là chuyển của tôi. 594 00:44:15,250 --> 00:44:19,370 Nhưng sau đó bạn có những khoảng thời gian ở đây. 595 00:44:19,370 --> 00:44:25,960 Chúng tôi không muốn để encipher đó, vì vậy sau đó chúng tôi không thay đổi nó bằng bất cứ điều gì 596 00:44:25,960 --> 00:44:31,280 và chỉ cần in ra khoảng thời gian không thay đổi. 597 00:44:31,280 --> 00:44:38,020 [Sinh viên] Tôi không hiểu làm thế nào bạn biết rằng đây là chuyển - còn bạn thì sao - >> Ồ, xin lỗi. 598 00:44:38,020 --> 00:44:41,620 Ở phía trên ở đây, bạn thấy rằng các đối số dòng lệnh ohai đây, 599 00:44:41,620 --> 00:44:43,740 đó là sẽ là từ khoá. 600 00:44:43,740 --> 00:44:49,550 Và do đó, về cơ bản, bạn đang đi xe đạp trên các ký tự trong từ khóa. 601 00:44:49,550 --> 00:44:52,020 [Sinh viên] Vì vậy, o sẽ được chuyển 602 00:44:52,020 --> 00:44:56,260 Vì vậy, o tương ứng với một số lượng nhất định trong bảng chữ cái. 603 00:44:56,260 --> 00:44:58,400 [Sinh viên] Right. Nhưng nơi mà bạn đã nhận được một phần CS50? 604 00:44:58,400 --> 00:45:02,540 Oh. Đó là trong getString nơi bạn đang như thế, "Hãy cho tôi một chuỗi để mã hóa." 605 00:45:02,540 --> 00:45:07,510 [Sinh viên] Họ sẽ cung cấp cho bạn rằng đối số thay đổi bởi 606 00:45:07,510 --> 00:45:09,380 và sau đó bạn sẽ yêu cầu cho chuỗi đầu tiên của bạn. >> Yeah. 607 00:45:09,380 --> 00:45:12,440 Vì vậy, khi chạy chương trình, họ sẽ bao gồm các từ khóa 608 00:45:12,440 --> 00:45:14,740 trong đối số dòng lệnh của họ khi họ chạy nó. 609 00:45:14,740 --> 00:45:19,740 Sau đó, một khi bạn đã kiểm tra rằng họ đã thực sự cho bạn 1 và không nhiều hơn, không ít hơn, 610 00:45:19,740 --> 00:45:23,750 sau đó bạn sẽ để nhắc nhở cho một chuỗi, nói rằng, "Hãy cho tôi một chuỗi." 611 00:45:23,750 --> 00:45:27,630 Vì vậy, đó là nơi mà trong trường hợp này họ đã đưa cho bạn này ... là CS50! 612 00:45:27,630 --> 00:45:32,090 Vì vậy, sau đó bạn sẽ sử dụng nó và sử dụng ohai và duyệt qua. 613 00:45:32,090 --> 00:45:38,200 Chú ý rằng ở đây chúng tôi bỏ qua mã hóa các thời kỳ, 614 00:45:38,200 --> 00:45:51,660 nhưng về vị trí của chúng tôi cho ohai, tiếp theo, chúng tôi sử dụng o. 615 00:45:51,660 --> 00:45:54,990 Trong trường hợp này đó là một chút khó nhìn thấy bởi vì đó là 4, 616 00:45:54,990 --> 00:45:57,710 do đó, chúng ta hãy tiếp tục một chút. Chỉ gắn bó với tôi ở đây. 617 00:45:57,710 --> 00:46:02,960 Sau đó, chúng tôi có i và s, sau đó được dịch bởi o và h tương ứng. 618 00:46:02,960 --> 00:46:09,370 Sau đó, chúng tôi có một không gian, và do đó, sau đó chúng tôi biết rằng chúng tôi sẽ không để encipher không gian. 619 00:46:09,370 --> 00:46:18,930 Nhưng chú ý rằng thay vì đi đến một chỗ này ngay tại đây, 620 00:46:18,930 --> 00:46:28,330 chúng tôi đang mã hóa bởi một - Tôi không biết nếu bạn có thể thấy rằng ngay tại đây. 621 00:46:28,330 --> 00:46:33,710 Vì vậy, nó không giống như bạn thực sự được xác định trước, nói, o đi ở đây, h đi ở đây, 622 00:46:33,710 --> 00:46:39,200 đi ở đây, tôi đi đây, o, h, a, i, o, h, một, tôi. Bạn không làm điều đó. 623 00:46:39,200 --> 00:46:43,760 Bạn chỉ thay đổi vị trí của bạn trong từ khóa 624 00:46:43,760 --> 00:46:51,020 khi bạn biết rằng bạn đang thực sự sẽ được mã hóa một bức thư thực tế. 625 00:46:51,020 --> 00:46:53,920 Loại đó có ý nghĩa? 626 00:46:53,920 --> 00:46:55,800 Okay. 627 00:46:56,490 --> 00:46:58,500 Vì vậy, chỉ một số nhắc nhở. 628 00:46:58,500 --> 00:47:03,760 Bạn muốn đảm bảo rằng bạn chỉ tạm ứng cho chữ cái tiếp theo trong từ khóa của bạn 629 00:47:03,760 --> 00:47:06,390 nếu nhân vật trong bản rõ của bạn là một lá thư. 630 00:47:06,390 --> 00:47:09,120 Vì vậy, nói chúng ta đang ở o. 631 00:47:09,120 --> 00:47:19,310 Chúng tôi nhận thấy rằng nhân vật tiếp theo, chỉ số i của bản rõ, là một con số, ví dụ. 632 00:47:19,310 --> 00:47:31,630 Sau đó, chúng tôi không tiến j, chỉ số cho từ khóa của chúng tôi, cho đến khi chúng ta đạt được một lá thư khác. 633 00:47:31,630 --> 00:47:36,230 Một lần nữa, bạn cũng muốn làm cho chắc chắn rằng bạn wraparound đầu của từ khóa 634 00:47:36,230 --> 00:47:37,770 khi bạn đang ở phần cuối của nó. 635 00:47:37,770 --> 00:47:42,030 Nếu bạn thấy ở đây chúng tôi đang ở tôi, một trong những kế tiếp có được o. 636 00:47:42,030 --> 00:47:47,690 Vì vậy, bạn muốn tìm một số cách có thể để wraparound đến đầu của từ khóa của bạn 637 00:47:47,690 --> 00:47:49,470 mỗi khi bạn đạt được kết thúc. 638 00:47:49,470 --> 00:47:55,040 Và như vậy một lần nữa, những gì loại của nhà điều hành là hữu ích trong trường hợp đó, để gói xung quanh? 639 00:47:56,630 --> 00:47:59,840 Giống như trong kiểm off ví dụ. 640 00:47:59,840 --> 00:48:03,710 [Sinh viên] dấu phần trăm. >> Yeah, dấu phần trăm, đó là modulo. 641 00:48:03,710 --> 00:48:11,250 Vì vậy, modulo sẽ có ích khi bạn muốn để bọc trên các chỉ số trong ohai của bạn. 642 00:48:11,250 --> 00:48:17,700 Và chỉ cần một gợi ý nhanh chóng: Hãy thử nghĩ về gói qua từ khóa một chút như đếm off, 643 00:48:17,700 --> 00:48:23,590 mà nếu có 3 nhóm, người thứ 4, 644 00:48:23,590 --> 00:48:30,610 số của họ mà họ nói là 4 mod 3, là 1. 645 00:48:30,610 --> 00:48:32,880 Vì vậy, hãy thử và nghĩ về nó theo cách đó. 646 00:48:34,770 --> 00:48:42,740 Như bạn đã thấy trong công thức, bất cứ nơi nào bạn có ci và sau đó pi nhưng sau đó kj, 647 00:48:42,740 --> 00:48:44,700 bạn muốn làm cho chắc chắn rằng bạn theo dõi những người. 648 00:48:44,700 --> 00:48:47,580 Bạn không cần phải gọi nó là, bạn không cần phải gọi nó là j, 649 00:48:47,580 --> 00:48:53,270 nhưng bạn muốn làm cho chắc chắn rằng bạn theo dõi các vị trí mà bạn đang ở trong bản rõ của bạn 650 00:48:53,270 --> 00:48:55,790 cũng như vị trí mà bạn đang ở trong từ khóa của bạn 651 00:48:55,790 --> 00:48:59,840 bởi vì những người không nhất thiết sẽ là như vậy. 652 00:48:59,840 --> 00:49:06,400 Không chỉ các từ khóa - nó có thể có một chiều dài hoàn toàn khác với bản rõ của bạn. 653 00:49:06,400 --> 00:49:09,140 Ngoài ra, bản rõ của bạn, có số và ký tự, 654 00:49:09,140 --> 00:49:14,450 do đó, nó sẽ không hoàn toàn phù hợp với nhau. Vâng. 655 00:49:14,450 --> 00:49:19,280 [Sinh viên] Có một chức năng để thay đổi trường hợp? 656 00:49:19,280 --> 00:49:24,530 Bạn có thể thay đổi một vốn A? >> Yeah, có chắc chắn là. 657 00:49:24,530 --> 00:49:27,890 Bạn có thể kiểm tra - Tôi tin rằng toupper của nó, tất cả các từ 1. 658 00:49:30,650 --> 00:49:36,310 Tuy nhiên, khi bạn đang cố gắng thuật toán mã hóa và bảo quản các văn bản, 659 00:49:36,310 --> 00:49:39,350 nó về cơ bản tốt nhất để có những trường hợp riêng biệt. 660 00:49:39,350 --> 00:49:42,040 Nếu nó là một chữ hoa, sau đó bạn muốn thay đổi của thành viên này 661 00:49:42,040 --> 00:49:46,460 bởi vì trong công thức của bạn, khi bạn nhìn lại cách chúng ta phải loại đi 662 00:49:46,460 --> 00:49:50,900 hoán đổi cho nhau giữa cách ASCII đại diện cho những con số 663 00:49:50,900 --> 00:49:55,020 và chữ cái chỉ số thực tế, chúng tôi muốn chắc chắn 664 00:49:55,020 --> 00:50:01,850 có sẽ là một số loại mô hình mà các bạn đang sử dụng. 665 00:50:01,850 --> 00:50:04,580 Một lưu ý trên mẫu, thực sự. 666 00:50:04,580 --> 00:50:07,250 Bạn sẽ chắc chắn được giao dịch với số. 667 00:50:07,250 --> 00:50:11,280 Cố gắng không để sử dụng các con số ma thuật, đó là một ví dụ về phong cách. 668 00:50:11,280 --> 00:50:18,470 Vì vậy, nói rằng bạn muốn mỗi một cái gì đó thay đổi thời gian thích 669 00:50:18,470 --> 00:50:22,400 Được rồi, do đó, gợi ý, spoiler khác là khi nào bạn sẽ được thay đổi một cái gì đó 670 00:50:22,400 --> 00:50:26,310 một số tiền nhất định, cố gắng không để đại diện cho rằng một số thực tế 671 00:50:26,310 --> 00:50:32,810 mà đúng hơn là cố gắng và xem bạn có thể sử dụng giá trị ASCII, trong đó loại sẽ có ý nghĩa hơn. 672 00:50:32,810 --> 00:50:35,470 Một lưu ý: Bởi vì chúng tôi đang làm việc với các công thức, 673 00:50:35,470 --> 00:50:41,200 mặc dù TF của bạn loại sẽ biết những mẫu mà bạn có thể sử dụng, 674 00:50:41,200 --> 00:50:44,430 tốt nhất để loại ý kiến ​​của bạn giải thích logic, thích, 675 00:50:44,430 --> 00:50:51,880 "Tôi đang sử dụng mô hình này bởi vì ..." và loại giải thích các mô hình một cách ngắn gọn trong ý kiến ​​của bạn. 676 00:50:54,090 --> 00:50:58,990 [Đây là hương 2] Nếu không có bất kỳ câu hỏi nào khác, sau đó tôi sẽ chỉ ở lại đây cho một ít. 677 00:50:58,990 --> 00:51:04,370 Chúc may mắn với pset 2: Crypto và cảm ơn vì đã đến. 678 00:51:06,070 --> 00:51:08,620 [Sinh viên] Cảm ơn bạn. >> Cảm ơn. 679 00:51:09,220 --> 00:51:10,800 [Bài intro Media]