[MUSIC CHƠI] DAVID Malan: Tất cả các quyền. Đây là CS50, và điều này là cuối tuần thứ 2. Tôi rất xin lỗi tôi không thể đó với tất cả các bạn ngày hôm nay, nhưng bạn đang ở trong tay rất tốt. Cho phép tôi giới thiệu Riêng Rob Bowden CS50 của. ROB Bowden: Và tất nhiên, sau đó chúng ta phải làm cho niềm vui của thực tế rằng ông đã gửi cho chúng tôi một dọc video và hiển thị này. [VIDEO PLAYBACK] [MUSIC CHƠI] [Chân] Video -Đây không phải tìm cách này. Nó có thể đã được ngăn chặn. Nói không với video theo chiều dọc. Video -Vertical xảy ra khi bạn giữ máy ảnh của bạn một cách sai lầm. Video của bạn sẽ kết thúc lên trông như crap. - [Grunt] -Có Càng nhiều người nghiện để làm video dọc mỗi ngày. Nó không bị nứt hoặc không có gì, nhưng nó vẫn thực sự xấu. Có hai loại khác nhau của người đang bị ảnh hưởng với VVS. Nhóm đầu tiên xử lý các video họ chụp ảnh giống như hình ảnh. Họ không có ý gây hại. Họ chỉ không hiểu rằng trong khi bạn có thể biến một bức tranh, bạn có thể không thực sự quay một video. [CRASH] - [MONKEY SOUNDS] -Các Nhóm khác là những người người không đưa ra một [bleep]. Hội chứng video -Vertical là nguy hiểm. Hình ảnh chuyển động có luôn luôn ngang. TV đều nằm ngang. Màn hình máy tính đều nằm ngang. Đôi mắt của mọi người đang ngang. Chúng tôi không được xây dựng để xem video theo chiều dọc. -Tôi Yêu video dọc. -Nobody Quan tâm đến bạn. -Nếu Của vấn đề này không được kiểm soát, bạn quá sẽ bắt đầu hiển thị bốn video cùng một lúc chỉ để tiết kiệm băng thông. Video dọc -Letterboxed sẽ được kích thước của một con tem bưu chính. -Và Nó sẽ lây lan khắp mọi nơi. Rạp chiếu phim có luôn luôn ngang. Nếu video dọc trở thành được chấp nhận, rạp chiếu phim sẽ phải cao và gầy. -Và Tất cả các rạp chiếu phim sẽ phải bị rách xuống và xây dựng lại. Và vào thời điểm họ được xây dựng lại, Mila Kunis sẽ già và xấu xí. -Birds Sẽ sụp đổ vào chúng và chết. -We'll Tất cả có được cứng cổ từ nhìn lên. -Và Không có ai sẽ ngồi trong hàng ghế đầu bao giờ trở lại. -George Lucas sẽ tái phát hành sao Wars again-- bản gầy. -Tôi Chưa bao giờ thực sự có thể nói câu chuyện mà tôi muốn nói. Đây là một cơ hội tuyệt vời cho tôi để thử nghiệm với một công nghệ mới. -You're Một jerk. -Every Thời gian một thiết bị di động được sử dụng để ghi lại video, sự cám dỗ là có. Chỉ cần nói không. Nói không với George Lucas. Nói không với Mila Kunis cũ. Nói không với video theo chiều dọc. -Và Nếu bạn nhìn thấy ai đó làm nó, nói, "bạn không chụp mà giả đúng!" [MUSIC CHƠI] [END PLAYBACK] [Vỗ tay] [AUDIO OUT] ROB Bowden: --simple hình thức mật mã, mà về cơ bản là mã hóa và giải mã các tin nhắn bí mật. Vì vậy, ở đây chúng ta có một đồ chơi rất đơn giản. Và ý tưởng là vòng ngoài quay xung quanh vành đai. Và bạn có thể thấy, có lẽ nếu tôi phóng to trong, that-- thật khó để nhìn thấy. Nhưng, như thế, số lượng 1-- tốt, mà di chuyển. Số 1 ánh xạ với thư X, số 2 bản đồ để thư J. Cực khó không để bỏ qua phía trước. Thư 2 bản đồ để J. Số 3 bản đồ để D. Vì vậy, với chiếc nhẫn này bạn có thể cho ai đó một tin nhắn 1, 2, 3. Đối với một số lý do bạn muốn nói với họ XJD. Nhưng bạn có thể cung cấp cho họ một số thông số, và miễn là họ có chiếc nhẫn này, họ có thể giải mã những gì bạn đang cố gắng để nói. Vì vậy, bạn có thể đã thấy điều này ví dụ cụ thể về mật mã nếu trước đó, khoảng mùa Giáng sinh bạn đã xem A Christmas Story. Nếu bạn chưa từng thấy nó trước, sau đó chỉ cần bật TBS tại nghĩa đen bất kỳ thời gian vào đêm Giáng sinh, bởi vì họ chỉ thấy nó trở lại trở lại sao sao sao cả ngày. Và các video có liên quan là điều này. [VIDEO PLAYBACK] -Be Nó biết là tất cả và tạp mà Ralph Parker là bãi bổ nhiệm một thành viên của Little Orphan Annie bí mật mối và được hưởng tất cả các danh hiệu và lợi ích xảy ra kèm theo. Ký nhỏ Orphan Annie. Countersigned Pierre Andre bằng mực! Danh dự và lợi ích đã ở tuổi chín! [CÓ LA TỪ RADIO] -Come Trên. Hãy về với nó. Tôi không cần tất cả những jazz về buôn lậu và cướp biển. Tối mai -Listen với cuộc phiêu lưu kết luận Black Pirate Ship. Bây giờ, đó là thời gian cho Thông điệp bí mật của Annie cho bạn thành viên của Secret Circle. Ghi trẻ em, chỉ có các thành viên Bí mật của các mối Annie có thể giải mã thông điệp bí mật của Annie. Hãy nhớ rằng, Annie là tùy thuộc vào bạn. Đặt chân của bạn để B2. Dưới đây là thông điệp. 12. 11. 2. -Tôi Đang trong cuộc họp bí mật đầu tiên của tôi. -25. 14. 11. 18. 16. -Oh, Pierre là trong đêm nay giọng hát tuyệt vời. Tôi có thể nói rằng tối nay tin là thực sự quan trọng. -3. 25. Đó là một tin nhắn từ Annie mình. Hãy nhớ rằng, không nói cho ai biết. -Five Giây sau, tôi đang ở chỉ các phòng trong nhà, nơi một cậu bé chín có thể ngồi trong sự riêng tư và giải mã. Aha! B! Tôi đã đi đến tiếp theo. E. Từ đầu tiên là "có". S. Nó đã đến dễ dàng hơn bây giờ. U. 25. Đó là R. -Come Trên, Ralphie! Tôi đã gotta đi! -I'll Là phải xuống, Ma! Gee rít. T. O. "Hãy chắc chắn" - bảo đảm là gì? Ít Orphan là gì Annie cố gắng để nói? Hãy chắc chắn những gì? -Randy Đã có để đi! Bạn sẽ vui lòng đi ra? -Tất Cả các quyền, mẹ! Sẽ ra ngay! Tôi đã nhận được gần gũi hơn với doanh nghiệp. Sự căng thẳng là khủng khiếp. No la cai gi thê? Số phận của hành tinh có thể treo trong sự cân bằng! -Ralphie, Randy đã đi! -I'll Đúng ra, buồn thì thôi! Hầu hết đó! Ngón tay của tôi đã bay. Tâm trí của tôi là một cái bẫy thép. Mỗi lỗ chân lông rung. Nó đã gần như rõ ràng! Vâng. Vâng. Vâng. Vâng. Hãy chắc chắn để uống Ovaltine của bạn. Ovaltine? Một thương mại dể thương? Con trai của một chó cái. [END PLAYBACK] ROB Bowden: Vậy đó là cách Ovaltine liên quan đến mật mã. Về cơ bản CS50 chỉ được quảng cáo Ovaltine, vì vậy chúng tôi có thể là một thương mại dể thương cho Ovaltine. Được rồi. Vì vậy, doanh nghiệp khoa học máy tính thực tế. Ghi vào thứ hai, chúng tôi rời đi lặn sâu hơn vào chuỗi. Vì vậy, chúng ta đang đối phó với chuỗi "Zamyla." Và chúng tôi đã được công nhận thực tế là chúng ta có thể điều trị "Zamyla" như là một chuỗi các ký tự. Và hãy nhớ rằng chúng ta học các ký hiệu khung. Vì vậy, nếu điều này đã được lưu trữ trong một chuỗi "s", sau đó nếu chúng ta nói s khung 0, mà có chỉ ra Z. vốn thư Và nếu chúng ta nói s khung 1, mà sẽ cho biết đầu tiên thường là một, và cứ thế tăng lên đến s khung 5, mà sẽ chỉ ra một cuối cùng. Bây giờ hãy nhớ rằng chiều dài của chuỗi này là 6, nhưng các chỉ số sang chuỗi là 0 đến 5, Z thông qua đó một. Vì vậy, điều này bây giờ phù hợp với một bức tranh lớn hơn bộ nhớ của máy tính, bộ nhớ RAM của bạn. Vì vậy, một nơi nào đó chương trình bạn đang chạy máy tính của bạn cần phải nhớ Zamyla một nơi nào đó trong bộ nhớ. Vì vậy, tôi có thể có một tình nguyện viên? Vâng làm ơn. Và tên của bạn là gì? DEAN: Dean. ROB Bowden: Dean? Rất vui được gặp bạn, Dean. Vì vậy, đến đây, và chúng ta sẽ có bạn vẽ về cách bố trí tiện lợi đẹp của chúng ta về bộ nhớ. Bây giờ tôi thích nghĩ về bộ nhớ như một dải dài của byte, nhưng chỉ cho mục đích hiển thị chúng tôi sẽ chỉ cần trái sang phải, trên xuống dưới. ĐƯỢC? Vì vậy, tôi sẽ chỉ cho một program-- Getstrings.c. Và vì vậy tất cả chương trình này là làm là yêu cầu bốn dây từ người sử dụng với GetString và sau đó in bất cứ điều gì mà chuỗi đầu tiên bước vào đã. Chúng ta đang bỏ qua hai đến bốn. ĐƯỢC. Vì vậy, ở đây now-- khi Lần đầu tiên tôi yêu cầu s1. Vì vậy, bạn là máy tính. Và bạn đang thực hiện GetString. Vì vậy, bạn yêu cầu một chuỗi từ tôi, và tôi nói, OK, Dean. Cung cấp cho chuỗi "Dean." Vì vậy, ở đâu đó trong bộ nhớ bạn cần nhớ "Dean." Vì vậy, viết nó vào bộ nhớ ở đâu đó. Perfect. ĐƯỢC. Vì vậy, bây giờ chúng tôi đã s2. Và s2 là có được một yêu cầu để GetString. Vì vậy, tôi sẽ nhập vào một chuỗi. Tôi sẽ nhập "Hannah." Vì vậy, nhập "Hannah" một nơi nào đó vào bộ nhớ. Yeah. A-H. OK, vì vậy bây giờ s3. Và nó sẽ là một yêu cầu để GetString. Và vì vậy bây giờ nhập "Maria." Được rồi. Và sau đó là người cuối cùng yêu cầu để GetString, s4. Vì vậy, tôi không biết. Làm thế nào về chúng tôi đi với antidisestablishmentarianism. Vì vậy, nhập đó vào bộ nhớ. Yeah. Vì vậy, chỉ cần làm "Rob." ĐƯỢC. Vì vậy bây giờ explain-- tại sao bạn để lại những khoảng trống? Tại sao bạn phải trống này không gian ở đây, ở đây và ở đây? Vâng. Vì vậy, nhận thấy khi tôi đi in s1-- vì vậy nếu chúng tôi đã "Hannah" chạy phải lên bên cạnh "Dean" làm thế nào để chúng ta biết khi nào chuỗi "Dean" kết thúc? Vì vậy, in chuỗi s1 có thể có chỉ in "DeanHannahMariaRob" nếu nó không có bất kỳ mối khi "Dean" thực sự kết thúc. Được rồi. Vì vậy, trong bộ nhớ theo cách chúng ta thực sự đại diện này kết thúc một chuỗi là với dấu gạch chéo ngược zero. Vì vậy, không gian này là chính xác những gì chúng tôi muốn. Nó phải là một dấu gạch chéo ngược zero. Đây sẽ là một dấu gạch chéo ngược bằng không, và điều này sẽ là một dấu gạch chéo ngược zero. Và bạn có thể có một giải thưởng tuyệt vời vì là một tình nguyện viên hoàn hảo. Đi một quả bóng căng thẳng! ĐƯỢC. Vì vậy, nhân vật này không có dấu gạch chéo ngược làm thế nào chúng ta biết kết thúc của một chuỗi. Đó là cách mà khi bất kỳ chương trình nào đó muốn in một chuỗi, nó how-- nhớ chúng tôi đã học hàm strlen tuần trước? Chuỗi dài? Đó là cách mà chiều dài chuỗi là thể xác định một chuỗi là bao lâu. Nó chỉ cần giữ lặp qua các nhân vật cho đến khi nó tìm thấy dấu gạch chéo ngược zero nhân vật. Vì vậy, điều quan trọng để nhận về nhân vật backslash zero là nó được trình bày bởi tất cả các số trong bit. Vì vậy, nhận thấy rằng đây là khác biệt từ các nhân vật bằng không. Vì vậy, các nhân vật không, nếu bạn nhớ trong ví dụ mà ông đã đưa ra ở cuối các bài giảng mà nhân vật map với: như bản đồ vốn A đến 65. Chữ thường một bản đồ đến 97. Chữ thường b sẽ là 98. Vì vậy, các bản đồ số 0 với: Tôi không biết ra khỏi đỉnh đầu của tôi. 44 hoặc 45. Một nơi nào đó trong khu vực đó. Vì vậy, các nhân vật 0 là một số thực tế. Nhưng không dấu gạch chéo ngược bản đồ cho tất cả các số không bit. Vì vậy, có một sự phân biệt giữa dấu gạch chéo ngược bằng không, mà chúng ta sẽ gọi là terminator null. Có một sự khác biệt giữa backslash zero và các nhân vật bằng không. Được rồi. Vì vậy, nói thêm một chút về dây. Vì vậy, sau đó chúng ta thấy ở đây là làm thế nào nó sẽ được đặt ra trong bộ nhớ. Vì vậy, ý tưởng này của chuỗi như là một chuỗi của characters-- vì vậy các máy tính chính thức sciency hạn cho trình tự là một mảng. Vì vậy, chúng tôi sẽ gọi một chuỗi một mảng ký tự. Và thực sự có dữ liệu khác loại mà chúng ta có thể làm cho các mảng ra khỏi. Vì vậy, để tạo động lực này, nhìn vào một ví dụ. Chúng tôi sẽ gọi nó là ages0.c tôi sẽ sao chép và dán mẫu của chúng tôi. ĐƯỢC. Vì vậy, trong chương trình này những gì chúng tôi muốn làm là lấy tuổi của ba sinh viên trong khóa học. Vì vậy, chúng ta biết được int age-- và bây giờ tôi sẽ nói 0. Vì vậy, bạn có thể muốn nói age1, nhưng cho mục đích chúng ta sẽ thấy rất lâu, Tôi sẽ nói int age0 bằng getInt. Vì vậy, cùng một cuộc gọi để getInt mà chúng ta đã sử dụng tôi không xảy ra để được nhắc nói, "cho tôi tuổi." Nhưng chỉ yêu cầu nó. Và age1 bằng getInt. Và int age2 bằng getInt. Vì vậy, một lần nữa, ba sinh viên, nhưng cuối cùng các chỉ số biến là age0 qua age2. ĐƯỢC. Vì vậy, chương trình này sẽ làm bất cứ điều gì chúng tôi muốn với age0, age1, và age2, nhưng chương trình này cuối cùng làm việc cho ba sinh viên. ĐƯỢC. Vì vậy, bây giờ những gì nếu tôi muốn bốn sinh viên? Vâng, tôi sẽ phải quay trở lại vào mã của tôi, thay đổi những nhận xét, và bây giờ chúng ta có một int age3 bằng getInt. ĐƯỢC. Vì vậy, những người nhìn thấy vấn đề ở đây? Vấn đề là gì với loại này thiết lập? Yeah. Yeah. Vì vậy, chúng tôi đang tạo ra một biến cho mỗi học sinh. Bây giờ mà làm việc, nhưng cuối cùng những gì nếu bây giờ tôi nói, "Tôi muốn lấy tuổi tám học sinh hoặc sinh viên 16 hoặc tuy nhiên nhiều học sinh của hàng trăm sinh viên trong CS50 hoặc hàng ngàn sinh viên trong khuôn viên trường hoặc hàng tỷ người trên thế giới? Vì vậy, cuối cùng này là không bền vững. Bất cứ lúc nào bạn thấy mình sao chép và dán mã như thế này, nói chung bạn nên cảm thấy rằng có một cách tốt hơn. Vì vậy, đây là nơi mà chúng tôi giới thiệu một khai báo mảng. Vì vậy, khi bạn khai báo một mảng, đây là những gì các định dạng chung sẽ trông như thế nào. Chúng ta sẽ nói loại. và sau đó chúng ta sẽ cho tên của mảng đó, cũng như chúng ta xác định bất kỳ biến nhất định. Và cuối cùng, chúng tôi đang sử dụng ký hiệu khung này một lần nữa nhưng trong một bối cảnh khác nhau từ làm thế nào chúng tôi đã sử dụng nó trước đó. Vì vậy, ở đây này trông giống như một bình thường khai báo biến mà chúng tôi đã nhìn thấy. Vì vậy, chúng tôi đã nhìn thấy int x dấu chấm phẩy trước. Vâng bây giờ chúng ta có thể nhìn thấy một cái gì đó như int x ngoặc 5. Và đưa ý tưởng này vào Chương trình getInt rằng chúng tôi have-- vì vậy chúng tôi có thể thực hiện này trong cùng một cách. Hãy nói rằng trong CS chúng ta có xu hướng sử dụng n là số lượng của một cái gì đó. Vì vậy, ở đây chúng ta sẽ lưu trữ bốn sinh viên. Và bây giờ chúng ta có thể nói int tuổi khung n-- không hoàn toàn nhận được nó yet-- để khai báo một mảng của bốn học sinh. Vậy làm thế nào điều này sẽ tìm trong bộ nhớ sẽ được tương tự như này. Rõ ràng điều này. Và chúng ta sẽ có một nơi nào đó trong memory-- tôi sẽ đặt này lên đó. Vì vậy, một nơi nào đó trong bộ nhớ. Một hai ba bốn. Chúng ta có bốn số nguyên liên tiếp cho mảng này của bốn số nguyên. Vì vậy, hiện nay, là những gì kích thước của một trong những hộp? Yeah. Đó là bốn byte. Đó là 32 bit. Vì vậy, bây giờ điều này là khác nhau từ mảng mà chúng ta đã thấy trước đó, các mảng kí tự. Trong một chuỗi mỗi hộp chỉ có một byte, bởi vì một nhân vật chỉ là một byte. Nhưng với một mảng các số nguyên, mỗi hộp có là bốn byte để để phù hợp với toàn bộ một số nguyên. Vì vậy, đây là những gì một mảng của bốn ints sẽ như thế nào. Và sau đó trở lại mã. Bây giờ chúng tôi muốn thực sự cửa hàng số nguyên vào mảng đó. Vì vậy, bây giờ điều này là rất, rất, rất phổ biến mô hình đó sẽ tại một số điểm trở thành bộ nhớ cơ bắp. Vì vậy, int i bằng 0. i nhỏ hơn n. i cộng với cộng với. Độ tuổi tôi bằng getInt. Vì vậy, điều này cho vòng lặp, định dạng này, bạn sẽ nhận được rất được sử dụng để. Vì vậy, điều này nói chung là làm thế nào chúng ta sẽ lặp qua mảng gần như bất kỳ. Bây giờ thấy loại này giải thích tại sao ngay từ đầu chúng tôi không có cho vòng đi cho int i bằng 1, i nhỏ hơn hoặc bằng 10. Lý do được rằng bắt đầu từ không làm cho công việc này cũng với mảng. Vì vậy, mảng là không được lập chỉ mục. Nếu mảng này có chiều dài 4, các chỉ số là 0 đến 3. Vì vậy, thông qua việc đầu tiên lặp đi lặp lại điều này cho vòng lặp chúng ta sẽ được thiết lập độ tuổi khung 0 bằng một cuộc gọi đến getInt. Vì vậy, bất cứ điều gì tôi đã xảy ra nhập vào bàn phím. Trong qua thứ hai, chúng tôi thiết age1 bằng getInt. Vượt qua thứ ba, age2. Thức vượt qua age3. Vì vậy, nếu trong vượt qua đầu tiên của vòng lặp Tôi nhập số 4 vào bàn phím, sau đó chúng ta sẽ chèn một 4 ở đây. Nếu trên đèo thứ hai tôi nhập 50, chúng tôi sẽ đặt một 50 ở đây. Trên đèo thứ ba tôi có thể nhập âm 1, âm 1, và rồi cuối cùng nếu tôi nhập 0-- và bây giờ nhớ rằng đây là mục ba. Sau khi chúng ta lặp lại, tôi là sẽ được tăng lên đến 4. i là không còn nhỏ hơn n, đó là 4. Và chúng ta thoát ra khỏi vòng lặp. Vì vậy, những gì sẽ là sai với điều này? [Không nghe thấy]? Đung [Không nghe thấy] Vâng. Vì vậy, các mảng chỉ có bốn địa điểm, điều đó có nghĩa là chỉ số từ 0 đến 3. Vì vậy, nếu điều này là trường hợp, tôi sẽ đưa vào các giá trị 4 tại một số điểm. độ tuổi 4 sẽ được thiết lập bất cứ điều gì sẽ xảy ra là ở đây với những gì tôi có thể nói, nhập 6. Điều đó sẽ được thiết lập này để 6. Nhưng chúng ta không biết những gì trên đây. Đây không phải là bộ nhớ rằng chúng tôi đã có thể truy cập. Vì vậy, nếu bạn nhớ từ các bài giảng trước, ông được in ra giá trị của Zamyla và tại một số điểm ông nhấn phân khúc này lỗi. Vì vậy, bạn sẽ có thể được nhìn thấy nhiều lỗi segmentation như bạn thực hiện một số bài tập. Nhưng đây là một trong những cách thức mà bạn có thể gặp phải một phân khúc lỗi, khi bạn bắt đầu truy cập bộ nhớ trong những cách mà bạn không nên. Vì vậy, chúng tôi không có quyền truy cập vào vị trí này và đây là một lỗi. Vì vậy, đây là tốt hơn. Bây giờ vẫn còn là một nhỏ vấn đề với mã này. Và đó là cơ bản mà chúng tôi vẫn còn bị mắc kẹt tại bốn sinh viên. Bây giờ nếu tôi muốn sử dụng tám học sinh, OK. Nó không phải là một vấn đề lớn. Tôi có thể đi vào, thay đổi bình luận, và thay đổi n. Bây giờ điều này sẽ làm việc với tám học sinh. Nếu tôi biên dịch này và chạy này, nó sẽ hiển thị me-- nó sẽ yêu cầu số nguyên cho tám sinh viên và nó sẽ chỉ làm việc. Nhưng nó ít hơn lý tưởng để cần biên dịch lại chương trình mỗi lần duy nhất Tôi muốn thay đổi số lượng sinh viên mà tôi muốn vào các lứa tuổi cho. Vì vậy, những cải tiến cuối cùng về này, như chúng ta sẽ thấy here-- chúng tôi sẽ yêu cầu số lượng người. Ở đây chúng ta có một số của người dân trong phòng hoặc bất kỳ lứa tuổi của người trong phòng. Nhưng chúng tôi sẽ yêu cầu số lượng của mọi người trong phòng từ người sử dụng. Vì vậy, đây là chính xác cùng một do-while vòng mà chúng tôi đã nhìn thấy trước. Đó là chính xác giống nhau do-while loop mà bạn có thể được thực hiện trên các thiết lập vấn đề. Vì vậy, miễn là chúng bước vào một n nhỏ hơn 1, do đó đã nhận được tại ít nhất một người trong phòng. Miễn là chúng bước vào một n nhỏ hơn 1, sau đó chúng ta sẽ tiếp tục yêu cầu một lần nữa. Vui lòng nhập số lượng của người trong phòng. Bây giờ, khi chúng tôi có số lượng của người dân ở các room-- vì vậy tôi có thể nhập vào đó có 200 người trong căn phòng này. Sau đó xuống đây chúng ta sẽ đi và khai báo một mảng có kích thước 200. Chúng tôi đang khai báo mảng đó đủ lớn để chứa 200 tuổi. Đi xuống, đó là cho vòng lặp rằng bạn sẽ nhận được rất được sử dụng để. Vì vậy, lặp qua mảng này, ấn định cho mỗi vị trí trong mảng đó một số nguyên, và sau đó cuối cùng ở đây chúng tôi chỉ nhận được một ví dụ về lặp trên mảng đó, không phải để gán giá trị, nhưng để truy cập các giá trị. Vì vậy, ở đây chúng ta thấy rằng chúng ta đang nói, một năm kể từ bây giờ, người% i sẽ được% i tuổi, nơi đầu tiên% i là i + 1. Vì vậy, tôi có thể thay đổi chỉ số này. Và% i thứ hai là có được sự giá trị được lưu trữ trong các lứa tuổi mảng cộng thêm 1. Vì vậy, cộng với 1 này chỉ là vì chúng tôi saying-- cộng 1 này, lứa tuổi tôi cộng thêm 1. Cộng với 1 này chỉ là vì chúng tôi nói, một năm kể từ bây giờ người sẽ là cũ này. Vì vậy, tại sao lại là tôi này cộng với 1? Tại sao chúng ta có một cộng 1 có? Yeah. Vâng. Vì vậy, hãy nhớ mảng được lập chỉ mục zero. Vì vậy, nếu chúng ta đang in này ra cho một người nào đó chỉ cần đọc các đầu ra, sau đó có lẽ họ muốn xem một cái gì đó như người một, người số một, sẽ là 20 tuổi. Người thứ hai sẽ được 15 tuổi. Họ không muốn nhìn thấy người số zero là 15 tuổi. Vì vậy, biên dịch này và chỉ nhìn thấy những gì nó trông like-- Tạo một số không gian. Hãy lứa tuổi biên dịch. Chạy lứa tuổi. Chúng tôi nhìn thấy số lượng người trong phòng. Vì vậy, tôi sẽ nói có ba người trong phòng. Tuổi của người số một, chúng ta hãy nói 15, 20, 25. Và bây giờ tôi sẽ nói một năm từ bây giờ họ sẽ là 16, 21, 26. Hãy thấy rằng công trình này với một n đó không phải là bằng 3. Vì vậy, nếu tôi nói số người là 5, một trong những, hai, ba, hai, một, một năm kể từ bây giờ họ sẽ có hai, ba, bốn, ba, hai tuổi. Vì vậy, tôi có thể chỉ là dễ dàng đã n là 10.000. Bây giờ tôi sẽ ngồi ở đây cho khá một khi bước vào lứa tuổi, nhưng công trình này. Vì vậy, bây giờ trong bộ nhớ ở đâu đó chúng tôi có một mảng có kích thước 10.000, vậy cuối cùng là 40.000 byte, vì có bốn byte cho mỗi của những số nguyên. Vì vậy, có một mảng của kích thước 10,000 nơi chúng ta có thể lưu trữ các lứa tuổi của những người 10.000 người. Được rồi. Các câu hỏi về những điều này? Yeah. Điều gì nếu bạn đã đưa ra một số tiêu cực? Hãy xem những gì sẽ xảy ra. Vì vậy, trong số case-- đặc biệt này của mọi người trong phòng, một trong những tiêu cực. Nó từ chối cho rằng, vì ở đây chúng tôi xảy ra để được xử lý một thực tế rằng nếu n là ít hơn một chúng ta sẽ hỏi một lần nữa. Nếu bạn cố gắng để khai báo một mảng có kích thước tiêu cực, nó thường không làm việc. Vì vậy, hãy cố gắng. Hãy bỏ qua bất cứ điều gì giá trị mà họ đầu vào cho n và chỉ nói int lứa tuổi trong những tiêu cực. Hãy xem nếu nó thậm chí biên dịch. Tôi không chắc. Không. Vì vậy, lứa tuổi được khai báo là một mảng với kích thước tiêu cực. Vì vậy, trả trước nó nhận ra một mảng có thể không có kích cỡ âm và bác bỏ nó. Bây giờ, nếu chúng ta không xử lý này vòng lặp do-while một cách chính xác, nếu chúng ta không kiểm tra nếu n là ít hơn 1-- hãy nói chúng tôi chỉ không có này ở tất cả các và thay vào đó chúng ta chỉ cần lấy một số nguyên. Không có vấn đề gì đó là số nguyên, chúng ta khai báo một mảng có kích thước đó. Vì vậy, các trình biên dịch có thể không có thể phàn nàn bây giờ. Nếu tôi biên dịch this-- do đó, nó không thể phàn nàn, bởi vì nó không thể biết rằng tôi sẽ nhập một số âm, mà có thể là không hợp lệ. Đối với tất cả nó biết, tôi có thể nhập một số dương, đó là hoàn toàn hợp lệ. Vì vậy, tôi tưởng tượng nếu tôi nhập âm 1 người trong phòng, Segmentation Fault. Vì vậy, OK. Vì vậy, hãy thêm điều này lại chỉ giữ cho nó những gì nó ban đầu là. Vì vậy, làm cho các lứa tuổi. Bây giờ nếu tôi muốn thử một tiêu cực age-- vì vậy chúng ta nói có năm người trong phòng. Tuổi của người số một là tiêu cực 4, người ba là số không, người three-- OK. Vì vậy, ở đây, một năm kể từ bây giờ, số người ai sẽ là âm 3 tuổi. Vì vậy, có lẽ không có ý nghĩa. Nhưng đó chỉ là vì tìm kiếm vào mã tất cả chúng ta đang làm được yêu cầu getInt. Bây giờ, nếu chúng ta đã có GetPositiveInt chức năng hoặc chúng tôi đã chỉ đơn giản là làm điều này loại cùng một vòng lặp trong khi xuống đó, sau đó điều này sẽ làm việc hoàn toàn tốt đẹp. Nhưng đặc biệt này trường hợp, chúng ta chỉ cần không xảy ra được xử lý giá trị âm. Bất kỳ câu hỏi khác về mảng? ĐƯỢC. Vì vậy, bây giờ chúng tôi đã nhìn thấy mảng. Và chúng ta sẽ cần phải sử dụng này cho các đối số dòng lệnh. Vì vậy, trong vấn đề thiết two-- Tôi biết nhiều bạn vẫn có thể được làm việc về vấn đề tập hợp một, nhưng vấn đề đặt hai là đến. Trong vấn đề đặt hai, bạn sẽ cần phải được xử lý xâu, mảng, và đối số dòng lệnh. Đối số dòng lệnh như vậy là gì? Bây giờ, bạn có thể nhìn thấy xuống đây một ít teaser cho chính xác những gì sẽ xảy ra. Chúng ta thấy int main, argc inc, ngoặc chuỗi argv. Vì vậy, đầu tiên chúng ta hãy cố gắng để giải thích gì đó là cố gắng để nói. Bây giờ, OK. Vì vậy, tại các dòng lệnh, bạn nên có làm quen với một số lệnh này bây giờ, và bạn đã có thể chạy cd tại nhà ga trước. Vì vậy, nếu chúng ta nói cd pset1, Bạn có biết rằng rằng nên được thay đổi vào thư mục pset1. Bây giờ nhận thấy rằng bạn đã không bao giờ viết một chương trình như thế này trước đây. Mỗi chương trình mà bạn đã viết, bạn sẽ chạy, nói, chấm giảm Mario, dot giảm tham lam, và sau đó nó có thể nhắc bạn cho đầu vào. Bây giờ, đó không phải là những gì thay đổi thư mục nào. Khi bạn chạy cd, không thì nói, mà thư mục nào bạn muốn vào cd? Thay vào đó, bạn chỉ cần nói, cd pset1, và nó chỉ đi vào thư mục pset1. Vì vậy, tương tự như vậy, chúng tôi có những ví dụ khác. làm hello. Khi bạn chạy làm, không thì nói, mà chương trình bạn muốn thực hiện? Bạn chỉ cần nói, tại dòng lệnh làm hello. Động thái này là một ví dụ khác. Điều này chúng ta đang di chuyển mario.c nộp lên một thư mục. Vì vậy, bây giờ chúng ta biết với ví dụ này chúng tôi đang thực sự đi qua hai đối số. Có mario.c như là đối số đầu tiên, và chấm chấm là số thứ hai. Và sau đó khi bạn chạy thực hiện, bạn thấy rằng yêu thực sự dài line-- lệnh này thực sự lâu dài in tại dòng lệnh. Vì vậy mà lâu command-- này chỉ là một phần ngắn của nó, nhưng bây giờ chúng tôi có ba đối số dòng lệnh. Dot gạch ngang bằng không, xin chào, và hello.c. Vì vậy, đây là những dòng lệnh lập luận, tranh luận rằng bạn đang đi qua tại dòng lệnh để nó không phải được nhắc nhở khi bạn chạy chương trình. Nó sẽ là bực bội nếu khi bạn chạy kêu nó nói, "OK, mà program-- mà tập tin được bạn biên dịch? Hello.c. Có gì cờ phải không muốn nhập? dash o. Bạn muốn gì các tập tin được gọi là? hello. Không, bạn chỉ cần chạy kêu vang dash o chào hello.c. Vì vậy, nhìn lại này. Bây giờ argc argc-- là tội đối số. Đó là số của dòng lệnh đối số được nhập vào dòng lệnh. Vâng, argv-- kỹ thuật v là viết tắt của vector, mà về cơ bản có nghĩa là mảng. Nhưng bạn có thể bỏ qua điều đó. Argv-- chúng ta có chuỗi argv, vì vậy ngoặc chuỗi argv. Vì vậy, đây là một hình thức ngoặc bạn chưa từng thấy trước đây. Vì vậy, chúng tôi đã nhìn thấy khung ký hiệu khi chúng tôi đã nói, như, chuỗi s bằng Zamyla. s khung 0 truy cập các ký tự Z. Chúng tôi cũng đã nhìn thấy dấu ngoặc cùng chúng tôi đã nói int tuổi khung 5. Đó là tuyên bố một mảng có kích thước 5. Vì vậy, đây là một phiên bản của ngoặc, chúng tôi đã không nhìn thấy trước. Vì vậy, loại này của chuỗi argv mà sẽ hoàn toàn quen thuộc rằng nó sẽ chỉ là một chuỗi. Bây giờ các dấu ngoặc chỉ ra rằng đây là một mảng. Vì vậy, khung chuỗi argv phương tiện argv đó là một mảng của chuỗi. Bây giờ kỹ thuật một chuỗi là một mảng ký tự. Vì vậy, điều này bây giờ là một mảng của một mảng ký tự. Nhưng nó dễ dàng hơn nhiều để suy nghĩ về đây là chỉ là một mảng của chuỗi. Vậy tại sao các dấu ngoặc đơn có thể là sản phẩm nào? Giống như, tại sao chúng ta không thể nói, khung 5, khung n? Yeah. Yeah. Chúng tôi không biết có bao nhiêu đầu vào có đang có được. Vì vậy, nếu chúng ta nhìn vào ví dụ kêu vang, chúng ta nói Clang dash o chào hello.c. Trong trường hợp cụ thể này, có xảy ra có ba đối số dòng lệnh. Và do đó, chúng ta sẽ thấy brackets-- trong một giây nó sẽ không có ba. Kỹ thuật nó sẽ là bốn. Nhưng các dấu ngoặc đơn, chúng tôi sẽ nói rằng, có ba. Nhưng bây giờ nếu chúng ta nhìn vào động thái mario.c dot dot, các dấu ngoặc chúng tôi muốn đưa hai trong họ. Và có rất nhiều các lệnh có một số biến của các dòng lệnh đối số. Vì vậy, những phiên bản này của ký hiệu khung chỉ là argv là một mảng của chuỗi. Nhưng chúng tôi không biết có bao nhiêu dây là trong mảng đó. Và làm thế nào để chúng ta có biết làm thế nào nhiều chuỗi trong mảng? Đó là điểm toàn argc. argc cho chúng ta biết bao lâu argv là. Vì vậy, điều cuối cùng để giữ nhớ là, về mặt kỹ thuật, lệnh của chính nó tính là một của các đối số dòng lệnh. Vì vậy, cd pset1, có hai đối số dòng lệnh. Các chương trình của riêng mình, cd, và sau đó phần tranh luận thực tế của nó, pset1. Bất kỳ chương trình mà bạn đã viết vậy, đến nay đã có một dòng lệnh argument-- dot giảm Mario. Đó là các đối số dòng lệnh chỉ. Vì vậy, bây giờ nhìn clang dash o chào hello.c. Vì vậy, argc là gì? 4. Vì vậy, argc là 4. Clang, vì vậy argv khung 0 là kêu vang. argv khung 1 là dash 0. argv khung 2 là hello, và argv khung 3 là hello.c. OK, vì vậy câu hỏi về điều này, và sau đó chúng tôi sẽ xem xét một số ví dụ về chương trình. ĐƯỢC. Vì vậy, chúng ta sẽ có một cái nhìn tại hello3.c. Vì vậy, đây nên quen thuộc từ một trong những ví dụ đầu tiên c chúng tôi đã có nơi, chúng tôi sẽ chỉ nói, hello thế giới, nhưng bây giờ điều này là tổng quát hơn. Vì vậy, ở đây chúng ta đang nói xin chào khung argv backslash n% s 1. Notice-- vậy cho đến thời điểm này, đây là những tập tin mẫu của tôi đã như thế nào. Tôi đã có int main (void), và sau đó tôi sẽ làm một cái gì đó trong các chức năng chính. Bây giờ thay vào đó, một khi chúng ta bắt đầu giao dịch với các đối số dòng lệnh, chúng ta cần phải nêu một hình thức khác nhau của chính. Vì vậy, nhìn vào hello3 một lần nữa, chính là có để mất hai đối số now-- int argc, số lượng các đối số dòng lệnh, và chuỗi argv ngoặc, thực tế chuỗi nhập vào dòng lệnh. Vì vậy, tôi sẽ thay đổi điều đó mẫu để phản ánh thực tế đó. Bây giờ mỗi khi bạn viết một chương trình, nếu bạn không cần phải thực hiện bất kỳ dòng lệnh đối số, sau đó chỉ cần sử dụng int main (void). Nhưng bây giờ khi bạn đang viết chương trình đối số dòng lệnh, mà bạn đang đi để được làm cho vấn đề thiết two-- vì vậy bây giờ rằng bạn đang chạy chương trình đó cần phải thực hiện đối số dòng lệnh, bạn cần phải có chính của hình thức này. Vì vậy here-- này là việc sử dụng lớn của các đối số dòng lệnh. Vì vậy, in argv 1. OK vậy hãy biên dịch và chạy chương trình này. Hãy hello3. Biên dịch. Dot giảm hello3. Và hãy nói, "Rob." Xin chào Rob. Nếu tôi nói, "hello Maria," hello Maria. Xin chào Maria. Hannah vẫn nói: "hello Maria, "vì tôi không làm bất cứ điều gì với argv của chúng tôi 2. Argv 2 bây giờ sẽ là "Hannah." Argc sẽ là 3. Nếu tôi đã làm điều này? Vì vậy, xin chào null. Ông nhanh chóng chạm vào thực tế rằng, về mặt kỹ thuật, GetString có thể trả về null, nhưng chúng tôi sẽ có được một nhiều hơn vào những gì thực sự là rỗng. Nhưng lấy nó như là một vấn đề thực tế là không có nói chung là xấu. Chúng tôi đã làm điều gì sai nếu nó in "hello null." Và lý do chúng tôi đã làm một cái gì đó sai is-- tốt, khi tôi chạy dot slash hello3, argc là 1. Vậy có nghĩa là chiều dài của argv là 1. Nếu một mảng có chiều dài 1, các chỉ số chỉ có giá trị là số không. Và do đó, đây là 1 argv ngoài phạm vi của mảng này. Nó tương tự như trước khi tôi đã cố gắng để lưu trữ 6 bên ngoài vào cuối mảng. Vì vậy, tôi đang cố gắng để truy cập vào một cái gì đó bên ngoài của tội argv, và chúng tôi đang nhận được null. Vì vậy, một phiên bản tốt hơn này, một sự cải tiến, được kiểm tra một cách rõ ràng argc. Vì vậy, nếu argc bằng 2, có nghĩa là chúng tôi chạy một cái gì đó giống như dấu chấm dấu gạch chéo hello3 Rob. Và nó sẽ in "hello Rob." Nếu argc không bằng 2, sau đó nó chỉ cần đi để bỏ qua bất cứ điều gì bạn đặt tại các đối số dòng lệnh như các đối số dòng lệnh. Hoặc nếu bạn không đặt bất kỳ ở tất cả, nó là chỉ cần đi để bỏ qua điều đó và chỉ nói, "chào bạn." Vì vậy, biên dịch này. Hãy hello4. Và chạy hello4. Chạy nó theo cách này, những gì sẽ được in? "Chào bạn." Chào bạn. Những gì về hello4 Rob? "Xin chào Rob." Và cuối cùng, xin chào Rob Maria chỉ là "hello Bạn" một lần nữa, bởi vì bạn đã không thực sự nhập cái gì mà nó mong đợi. Bạn đã nhập tên hơn hơn nó có thể xử lý, vì vậy nó chỉ mặc định để hello bạn hành vi. Vì vậy, câu hỏi về điều này? Hoặc đối số dòng lệnh? OK, vì vậy dùng một cái nhìn tại một thêm vài ví dụ về cách sử dụng dòng lệnh arguments-- đầu tiên chúng tôi đã argv dash 1 dot c. Vì vậy, các ý kiến ​​cho đi những gì chương trình này nên được thực hiện. Nhưng chú ý now-- này cho vòng lặp, này phù hợp với mô hình chính xác Tôi đã nói trước. Chúng tôi chỉ xảy ra được sử dụng argc thay vì n. Bây giờ argc thực sự là n. Đó là chiều dài của mảng argv. Vì vậy, được lặp trong argv mảng printf-ing mỗi giá trị argv. Vì vậy, nếu tôi thực hiện điều này. Hãy argv 1. Nó biên dịch. Dot giảm argv 1. Chỉ cần chạy này, nó in chấm slash argv 1 vì đó là chỉ dòng lệnh argument-- tên chương trình. Sẽ luôn có tại least-- argc không thể ít hơn một, vì luôn có sẽ ít nhất là tên chương trình để chạy. Vì vậy, argv 1 Rob sẽ in argv 1 và sau đó trên các dòng mới "Rob." Vì vậy, trong phiên đầu tiên của vòng lặp này, tôi là 0. Argv 0 là tên chương trình. Dot giảm argv 1. Và sau đó argv 1 là đầu tiên của tôi đối số dòng lệnh, đó là Rob. Tại thời điểm này, chúng ta đều bình đẳng để argc. Chúng tôi thoát ra khỏi vòng lặp và chúng tôi đang thực hiện. Vì vậy, điều này sẽ làm việc cho một tùy ý số lượng các đối số dòng lệnh. Chú ý nó in argv 0, argv 1, argv 2, argv 3, argv 4. Và không có argv 5. argc là bằng 5. Vì vậy, tại argc-- tại i = 5, chúng ta thoát ra khỏi vòng lặp. ĐƯỢC. Vì vậy, câu hỏi về điều đó trước khi chúng tôi xem xét một ví dụ phức tạp hơn? Vì vậy, argv 2. Được rồi. Vì vậy, chúng tôi vẫn đang in các đối số dòng lệnh. Nhưng bây giờ, chúng tôi nhận thấy có một lồng nhau cho vòng lặp. Vì vậy, những gì là điều này đang làm gì? Vì vậy, các vòng lặp đầu tiên được làm chính xác những gì nó đã làm trước. Chúng tôi vẫn đang Looping trên mỗi đối số dòng lệnh, nhưng bây giờ loop-- thứ hai này, chúng tôi đã cũng nhìn thấy một cái gì đó như thế này trước đây. Khi ông được lặp qua Zamyla in ra Z-A-M-Y-L-A. Vì vậy vòng lặp thứ hai này cho int j bằng 0, n bằng strlen của khung argv i. Vì vậy, trước tiên hãy suy nghĩ cho the-- hãy đi bộ qua. Hãy suy nghĩ những gì máy tính sẽ làm gì nếu tôi chạy chương trình này là chỉ chấm giảm argv dash 2. Vì vậy, nếu tôi chạy mã này, sau đó argc là có được bằng 1. Và chuỗi argv-- có chỉ sẽ là một chỉ số trong argv, và đó sẽ là bằng nhau để chấm giảm argv 2-- tên chương trình. OK, vậy bây giờ tôi có bằng 0, i ít hơn 1, i cộng với cộng với int j bằng 0, n bằng strlen của khung argv 0, vì vậy trong phiên đầu tiên của vòng lặp này. argv khung 0 là dấu chấm dấu gạch chéo argv 2. Vì vậy, chiều dài của chuỗi đó là gì? Vâng, chấm slash A-R-G-V dash 2. Vì vậy, strlen đó sẽ là 8. Vì vậy, j bằng 0, n bằng 8. Miễn là j là ít hơn 8, j ++. Và với điều đó, chúng ta sẽ được in một nhân vật duy nhất, mà là argv khung khung I j. Vì vậy, tôi chỉ là số không. Chúng tôi vẫn chỉ có một đối số dòng lệnh. Trong phiên đầu tiên của vòng lặp, chúng tôi sẽ được in ấn argv khung khung 0 0. Và sau đó j là sẽ tăng. Và chúng ta sẽ in argv khung 0 1 khung. Và sau đó argv khung khung 0 2. Vì vậy, đây là cuộc gặp gỡ đầu tiên của chúng tôi của mảng đa chiều. Ghi trước đó rằng tôi nói argv đó là về mặt kỹ thuật một mảng của mảng ký tự. Vì vậy, ở đây nếu tôi nói điều gì đó như chuỗi s bằng khung argv i, và sau đó tôi đã nói, s khung j, điều này sẽ hoàn thành những điều tương tự. Bây giờ, bạn đã thấy s khung j trước. Đó chỉ là truy cập j-th nhân vật của chuỗi này. Vì vậy, với điều này, chúng tôi đang nhận được sự j-th nhân vật của i-th argv. Vì vậy, những gì nên điều này cuối cùng đầu ra? Hãy argv 2. Nó biên dịch. Dot giảm argv 2. "Rob Maria Hannah," và cung cấp cho chúng tôi một số phòng. Vì vậy, chúng ta thấy rằng điều này là xuất dot trên đường dây và dấu gạch chéo của riêng mình trên đường dây riêng của mình và trên một dòng riêng. Nó in ra mỗi nhân vật cá nhân của từng đối số dòng lệnh. Và sau đó ở giữa chúng, vì dòng này mới chúng tôi đang in xuống đây, trong giữa chúng nó sẽ in một dòng mới. Vì vậy, đây là tương tự như các dấu gạch ngang argv trước 1, mà in mỗi đối số dòng lệnh, nhưng bây giờ chúng tôi đang in các đối số dòng lệnh và sau đó lặp qua mỗi nhân vật của từng đối số dòng lệnh để có được kết quả này. ĐƯỢC? Vì vậy, câu hỏi về điều này? Một điều cần lưu ý là dòng lệnh arguments-- vì vậy chúng được phân cách bằng dấu như bạn sẽ tự nhiên mong họ được. Vì vậy, một chuỗi có thể có các khoảng trống trong đó. Đó không phải là siêu quan trọng, nhưng nếu tôi muốn các đối số dòng lệnh thứ ba để có một không gian trong nó, sau đó tôi có thể nói một cái gì đó như thế này. ĐƯỢC? Vì vậy, điều này bây giờ vẫn chỉ có ba dòng lệnh arguments-- cũng 4. Dot giảm argv dash 2, Rob, Maria, và Hannah Bloomberg. ĐƯỢC. Các câu hỏi về điều này? Có gì đặc biệt về các nhân vật không gian. Nó chỉ xảy ra được rằng dòng lệnh đối xử với các nhân vật không gian như thế nào bạn tách từng đối số. Được rồi. Vì vậy, sau đó vấn đề đặt two-- bạn sẽ được nhìn vào mật mã bí mật-key. Vì vậy, tương tự như ví dụ mà chúng ta đã thấy từ A Christmas Story, bạn sẽ được thực hiện một số các thuật toán đó, đưa ra một thông điệp, bạn đang đi để có thể để mã hóa thông điệp rằng mà chỉ có một người có bí mật mà quan trọng, với chiếc nhẫn giải mã, nên có thể giải mã. Vì vậy, đó là phiên bản tiêu chuẩn. Bạn sẽ được thực hiện hai phiên bản khác nhau. Nếu bạn xảy ra để có một cái nhìn tại các hacker Edition bây giờ, chúng tôi sẽ cung cấp cho bạn một chuỗi như thế này, đại diện cho một mật khẩu được mã hóa. Vì vậy, mục tiêu của bạn là để tìm ra những gì các mật khẩu giải mã được. Bây giờ điều này là thực sự như thế nào mật khẩu được lưu trữ trong rất nhiều máy tính, và nó chỉ lưu này chuỗi ngẫu nhiên của các nhân vật. Bạn phải tìm ra cách để có được từ chuỗi ngẫu nhiên này của nhân vật với những gì các mật khẩu ban đầu là. Và cuối cùng, sau này Vấn đề đặt, bạn nên có thể hiểu được ý nghĩa gì. Vì vậy, bạn sẽ tìm hiểu làm thế nào để giải mã sắp xếp của chuỗi ngẫu nhiên. Tương tự như vậy, nếu bạn nhớ từ tuần 0, bạn có thể đã thấy URL này. Và bạn sẽ có thể giải mã này cuối cùng. Bạn có thể không được hạnh phúc khi bạn giải mã nó và nhấp vào liên kết. Được rồi. Đó là nó cho ngày hôm nay. Vì vậy, nhìn thấy bạn trong tuần tới! [ELECTRONIC MUSIC CHƠI]