[MUSIC CHƠI] DAVID J. Malan: Được rồi. Đây là CS50, và điều này là kết thúc của tuần 2. Vì vậy, ngày hôm nay, chúng ta sẽ tiếp tục xem xét của chúng tôi làm thế nào chúng tôi đại diện thứ bên dưới hood-- di chuyển ra từ con số như số nguyên và nổi các giá trị điểm và tập trung vào chuỗi và chương trình cuối cùng là thú vị hơn. Nhưng chúng tôi cũng sẽ có một cái nhìn tại một vài tên miền cụ thể problems-- là người đầu tiên trong số đó sẽ có liên quan đến mật mã, nghệ thuật xáo trộn thông tin, mà bạn nhìn thấy ở trên đây là một hình ảnh của Đài phát thanh Orphan Annie vòng giải mã bí mật từ trước đây. Đây thực sự là hình thức rất thô sơ và hình thức thân thiện với trẻ của cryptopgraphy nhờ đó mà chiếc nhẫn này có hai disks-- một bên trong và một bên ngoài. Và bằng cách quay một trong những người, bạn có thể về cơ bản xếp hàng chữ như A đến Z với các chữ cái khác như B qua A. Nói cách khác, bạn có nghĩa là có thể xoay bảng chữ cái, do đó đến với một ánh xạ từ thư cho thư do đó, nếu bạn muốn gửi một thông điệp bí mật với một người như Annie, bạn có thể viết xuống tin nhắn của bạn và sau đó xoay các chữ cái, theo đó, nếu bạn có ý nghĩa để nói "A," bạn thay vì nói "B" bạn có nghĩa là để nói "B" bạn thay vì nói "C" - hoặc một cái gì đó nhiều hơn một chút thông minh that-- hơn và sau đó, cuối cùng, miễn là Annie có bộ giải mã này nhẫn, cô ấy có thể giải mã các tin nhắn. Bây giờ, bạn có thể nhớ lại, trên thực tế, điều này được sử dụng trong một bộ phim rất nổi tiếng đóng nauseum quảng cáo trong mùa Giáng sinh. Chúng ta hãy xem ở đây. RALPHIE PARKER: "Có thể là biết là tất cả trong bản tóm tắt rằng Ralph Parker được bổ nhiệm hướng một thành viên của Little Orphan Annie bí mật Vòng tròn và được hưởng tất cả các danh dự và lợi ích xảy ra kèm theo. " RALPHIE PARKER (Tự thuật): Ký nhỏ Orphan Annie. Countersigned, Andre Pierre! Trong mực. Danh dự và lợi ích, đã ở tuổi chín. [MUSIC CHƠI] [RADIO nhí] RALPHIE PARKER: Đi nào. Hãy về với nó. Tôi không cần tất cả những nhạc jazz về buôn lậu và cướp biển. RADIO truyện: Nghe ngày mai đêm cho cuộc phiêu lưu kết luận của The Black Pirate Ship. Bây giờ, đó là thời gian cho Annie Tin nhắn bí mật cho bạn các thành viên của Secret Circle. Ghi trẻ em, chỉ các thành viên Secret mối của 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 để B-2. Đây là message-- 12, 11, 2-- RALPHIE PARKER (Tự thuật): Tôi đang trong cuộc họp bí mật đầu tiên của tôi. RADIO truyện: --25, 14, 11, 18, 16-- RALPHIE PARKER (Tự thuật): 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à rất quan trọng. RADIO truyện: --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. [Thở hổn hển] RALPHIE PARKER (Tự thuật): Chín mươi giây sau, tôi trong căn phòng duy nhất trong ngôi nhà nơi một cậu bé chín có thể ngồi trong sự riêng tư và giải mã. Ah. "B." [Cười khúc khích] RALPHIE PARKER (Tự thuật): Tôi đã đi đến tiếp theo. "E." Từ đầu tiên là "có". Có! Nó đã đến dễ dàng hơn bây giờ. "U" [Cười khúc khích] Randy PARKER: Aw, thôi nào, Ralphie. Tôi phải đi thôi! RALPHIE PARKER: Tôi sẽ xuống ngay, Ma. Gee rít. "T." "O." "Hãy chắc chắn đến. "" Hãy chắc chắn để "những gì? Ít Orphan Annie là gì cố gắng để nói? "Hãy chắc chắn để" những gì? Mẹ: Ralphie, Randy đã phải đi. Bạn sẽ vui lòng đi ra? RALPHIE PARKER: Được rồi, mẹ! Tôi sẽ ra ngay! RALPHIE PARKER (Tự thuật): Tôi đã nhận được gần gũi hơn bây giờ. Sự căng thẳng là khủng khiếp. Nó là gì? Số phận của hành tinh có thể treo trong sự cân bằng. Mẹ: Ralphie, Randy đã đi! RALPHIE PARKER: Tôi sẽ đến ngay ra, buồn thì thôi! RALPHIE PARKER (Tự thuật): Hầu như có! 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! Có! Có! Có! Có! RALPHIE PARKER: "Hãy chắc chắn uống Ovaltine của bạn. " Ovaltine? Một thương mại dể thương? [MUSIC CHƠI] RALPHIE PARKER: Thằng khốn. [Laughing] DAVID J. Malan: Vì vậy, mà sau đó là một cái nhìn vào những gì mật mã có thể được cho một this-- uống từ trước đây. Vì vậy, một thông báo nhanh chóng. Nếu bạn là miễn phí Thứ Sáu lúc 1:15 và sẽ muốn tham gia với chúng tôi để CS50 ăn trưa, đi đến URL này ở đây. Lần đầu tiên đến, đầu tiên phục vụ như bình thường. Nhưng qua thời gian, chúng tôi sẽ đảm bảo rằng hầu hết bất cứ ai muốn tham gia có thể sắp xếp khôn ngoan. Vì vậy, chuỗi. Chúng tôi có Zamyla-- người bây giờ bạn đã có thể đáp ứng hầu hết các Vấn đề ở Set 1-- có Tên được viết như vậy. Và giả sử bạn đã gõ tên của mình thành một chương trình máy tính là sử dụng giống như getString. Để lấy những tổ hợp phím, làm thế nào Chúng ta đi về đại diện cho một chuỗi, một từ, một đoạn văn, hoặc nhiều chữ như thế này đây? Chúng tôi nói chuyện lần cuối cùng về số nguyên và các vấn đề phát sinh với số nguyên tràn và nổi các giá trị điểm và những vấn đề phát sinh trong độ chính xác. Với chuỗi, chúng tôi ít nhất có sự linh hoạt hơn một chút vì strings-- chỉ trong world-- thực có thể là một chiều dài hơi tùy tiện. Khá ngắn, khá dài. Nhưng thậm chí sau đó, chúng ta sẽ thấy rằng máy tính đôi khi có thể chạy ra khỏi bộ nhớ và thậm chí không lưu trữ một chuỗi đủ lớn. Nhưng hiện nay, chúng ta hãy bắt đầu hình dung một chuỗi như là một cái gì đó trong các hộp ở đây. Vì vậy, sáu hộp đó, mỗi trong số đó đại diện cho một nhân vật hay "char". Vì vậy, nhớ lại rằng "char" - c-h-a-r-- là một trong các loại dữ liệu tích hợp sẵn trong C. Và những gì tốt đẹp là bạn có thể sử dụng rằng loại như là một khối xây dựng, một mảnh ghép, nếu bạn muốn, để tạo thành một loại lớn dữ liệu mà chúng ta sẽ tiếp tục để gọi một "chuỗi". Bây giờ, những gì hữu ích về tư duy về những thứ như dây theo cách này? Vâng, nó chỉ ra rằng chúng ta có thể thực sự tận dụng cấu trúc này để thực sự truy cập đặc điểm cá nhân một cách khá dễ dàng. Tôi sẽ đi trước và tạo ra một tập tin gọi là "stringzero.c" nhưng bạn có thể gọi nó là bất cứ điều gì bạn muốn. Và trên trang web của khóa học là đã ví dụ này trước, do đó bạn không cần phải gõ tất cả mọi thứ ra ngoài. Và tôi sẽ đi trước và lần đầu tiên làm int void main. Và trong vòng vài ngày, chúng tôi sẽ bắt đầu trêu chọc nhau những khoảng trống ở đây, tại sao nó int bên cạnh chính, và vân vân. Nhưng hiện nay, chúng ta hãy tiếp tục sao chép dán đó. Tôi sẽ khai báo một chuỗi gọi là s. Và tôi sẽ trở về từ GetString bất cứ điều gì mà người dùng trong. Điều này là có được một đơn giản chương trình, không có hướng dẫn, Tôi chỉ cần đi một cách mù quáng hy vọng rằng người dùng biết phải làm gì để giữ cho nó đơn giản. Và bây giờ tôi sẽ có một vòng lặp. Và trong vòng lặp của tôi sẽ có int i được không. Và tôi là, một lần nữa, chỉ là một quy ước, một biến chỉ số đếm, nhưng tôi có thể gọi đây là bất cứ điều gì tôi muốn. Tôi sẽ làm gì tôi cũng ít than-- Tên Zamyla là dài sáu ký tự. Vì vậy, tôi sẽ cứng mã có cho bây giờ. Và sau đó tôi ++. Và bây giờ bên trong của các xoăn niềng răng tôi sẽ làm printf, và tôi muốn in một nhân vật tại một thời điểm. Vì vậy, tôi sẽ sử dụng% c cho có lẽ là lần đầu tiên. Và sau đó tôi muốn in mỗi nhân vật trên một dòng riêng. Vì vậy, tôi sẽ đặt một ít dấu gạch chéo ngược n có. Đóng cửa giá. Và bây giờ tôi muốn làm một cái gì đó ở đây. Tôi muốn in ra thư cụ thể trong chuỗi, s, như tôi đang lặp lại từ số không trên lên đến sáu. Nói cách khác, tôi muốn in các nhân vật i'th của s. Bây giờ làm thế nào tôi có thể làm điều này? Cũng giống như các hộp trong đại diện này ở đây, loại, gợi lên ý niệm về quyền anh chữ cái trong, bạn có thể làm điều đó tương tự cú pháp trong C bằng cách xác định, Tôi muốn in ra s i'th nhân vật. Sử dụng dấu ngoặc vuông trên bàn phím máy tính của bạn mà trên bàn phím Mỹ là nói chung ở trên chính lợi nhuận của bạn. Vì vậy, đây không phải là hoàn toàn đúng Chưa hết, khi bạn có thể nhận thấy. Nhưng tôi sẽ loại một cách mù quáng giả mạo trước đây. Và tôi sẽ làm cho chuỗi 0. Nhưng trước khi tôi làm điều này, chúng ta hãy xem nếu chúng ta không thể lường trước một số sai lầm phổ biến. Điều này sẽ biên dịch? Không, tôi là thiếu một bó toàn bộ của sự vật. Thư viện tôi nghe. Vì vậy mà tập tin tiêu đề Tôi có thể muốn thêm ở đây? Yeah. TƯỢNG: Bạn cần tiêu chuẩn I / O [không nghe được] DAVID J. Malan: Tuyệt vời. Vì vậy, tôi cần chuẩn I / O. Đối với những gì Mục đích tôi muốn tiêu chuẩn I / O? Đối với printf. Vì vậy, bao gồm stdio.h. Và bạn cũng có đề nghị tôi bao gồm thư viện CS50 lý do gì? Để có dây. Vì vậy, chúng ta sẽ thấy những gì Thư viện CS50 được làm để tạo ra khái niệm về một chuỗi. Nhưng hiện nay, bạn chỉ có thể nghĩ của nó như là một kiểu dữ liệu thực tế. Vì vậy, đó có vẻ là một chút làm sạch. Và bây giờ tôi sẽ đi trước và thực sự làm cho chuỗi 0. Biên soạn. Vì vậy, đó là tốt. Vì vậy, ./string0 cho tôi phóng to vì vậy chúng tôi có thể xem kỹ hơn những gì đang xảy ra. Enter. Z-A-M-Y-L-A nhập. Và chúng tôi đã in ra tên của Zamyla. Vì vậy, đó là khá tốt. Vì vậy, bây giờ chúng ta hãy đi trước và chạy chương trình này một lần nữa, và gõ ra tên đầy đủ của Daven. Bất ngờ, ngạc nhiên. Enter. Hmm. Chúng tôi đã không được in của Daven tên đầy đủ đầu tiên một cách chính xác. Bây giờ điều này nên được rõ ràng trong Nhìn lại quá khứ vì những gì, loại, quyết định thiết kế ngu ngốc? Vâng, tôi cứng mã hoá các sáu bên trong vòng lặp cho tôi. Bây giờ tôi đã làm điều đó chỉ vì Tôi biết tên của Zamyla đã có được sáu ký tự. Nhưng chắc chắn đây không phải là một giải pháp chung. Vì vậy, hóa ra chúng ta có thể tự động tìm ra độ dài của một chuỗi bằng cách gọi một chức năng gọi là strlen. Một lần nữa, cố tình ngắn gọn tên chỉ để làm cho nó thuận tiện hơn để loại. Nhưng điều đó cũng đồng nghĩa với nhận được độ dài của một chuỗi. Tôi sẽ quay trở lại vào thiết bị đầu cuối của tôi cửa sổ và lại chạy trình biên dịch. Nhưng nó la tôi. Ngầm tuyên bố chức năng thư viện strlen với kiểu int const-- Tôi bị lạc. Hoàn toàn. Vì vậy, đặc biệt là khi bạn mắt bắt đầu nhòa dần với các thông báo lỗi như thế này, tập trung một cách trung thực về những từ đầu tiên. Chúng tôi biết vấn đề là ở 8 dòng, như được chỉ ra ở đây. Và nó trong chuỗi 0.c. Ngầm tuyên bố chức năng thư viện strlen. Vì vậy, đó là nói chung sẽ là một mô hình của các thông báo lỗi. Ngầm tuyên bố một cái gì đó. Vì vậy, trong ngắn hạn, có những gì tôi dường như đã thực hiện đối với dòng 8, ở đây. Những gì có thể là giải pháp thậm chí còn nếu bạn đã bao giờ sử dụng strlen mình? TƯỢNG: Một phần của một thư viện khác nhau? DAVID J. Malan: Phần của một thư viện khác nhau. Vì vậy, nó được khai báo, do đó, để nói chuyện. Nó được đề cập trong một số tập tin khác hơn là stdio.h và CS50.h. Bây giờ, nơi nó được định nghĩa? Thành thật mà nói, bạn có phải chỉ biết điều này ra khỏi đỉnh đầu của bạn, hoặc bạn Google này và tìm hiểu. Hoặc biết điều này, tôi đã mở ra trong CS50 thiết bị đầu cuối chương trình, trong đó chỉ là lớn, phiên bản màn hình đầy đủ những gì ở dưới cùng của cửa sổ gedit của. Và nó chỉ ra rằng có một lệnh ngắn gọn tương tự, gọi là người đàn ông để sử dụng, mà nếu bạn gõ vào tên của một hàm và nhấn Enter, bạn sẽ nhận được lại khá tài liệu phức tạp. Nó chỉ là văn bản nói chung trông một chút gì đó như thế này. Đó là một chút áp đảo ở cái nhìn đầu tiên. Nhưng thẳng thắn mà nói tôi sẽ để cho đôi mắt tôi nhòa dần và chỉ tập trung vào phần Tôi quan tâm đến thời điểm này. Đó là này. Trông như cấu trúc một cái gì đó tôi là quen thuộc với. Trên thực tế, người đàn ông, vì vậy để nói chuyện, sẽ cho bạn biết trong những gì tiêu đề tập tin một chức năng như strlen được xác định. Vì vậy, tôi sẽ quay trở lại ngay bây giờ để gedit. Và tôi sẽ đi trước và thêm ở đây # include và lưu các tập tin. Tôi sẽ để xóa màn hình với Kiểm soát L Nếu bạn đã tự hỏi. Và tôi sẽ lại chạy làm string.0, biên dịch thời gian này. ./string.0 Zamyla. Điều đó dường như làm việc Hãy để tôi đi phía trước và chạy lại nó với Davenport. Enter. Và đó cũng vậy, dường như làm việc. Vì vậy, chúng ta có thể làm tốt hơn một chút so với điều này, Mặc dù vậy, chúng ta có thể bắt đầu mọi thứ gọn gàng lên chỉ là một chút. Và tôi sẽ thực sự giới thiệu một điều khác bây giờ. Tôi sẽ đi trước và tiết kiệm này trong một tập tin khác nhau. Và tôi sẽ gọi string1.c tập tin này chỉ để phù hợp với mã bạn sẽ có thể tìm thấy trực tuyến. Và chúng ta hãy tập trung vào chính xác cùng mã. Nó chỉ ra rằng tôi đã được loại lấy cho các cấp thực tế là máy tính xách tay của tôi, và lần lượt, các thiết bị CS50 có rất nhiều bộ nhớ, rất nhiều RAM, rất nhiều byte của không gian trong đó tôi có thể lưu trữ các chuỗi. Nhưng thực tế nếu tôi đánh máy dài đủ, và đủ tổ hợp phím, Tôi có thể trong loại lý thuyết trong nhiều ký tự hơn so với máy tính của tôi vật lý có bộ nhớ cho. Và đây là vấn đề. Giống như một int chỉ có thể tính quá cao, trên lý thuyết, bạn chỉ có thể nhồi nhét quá nhiều ký tự vào bộ nhớ RAM của máy tính hoặc ngẫu nhiên Bộ nhớ truy cập. Vì vậy, tôi đã dự đoán tốt hơn vấn đề này, thậm chí mặc dù nó có thể là một hiếm trường hợp góc, vậy để nói chuyện. Không xảy ra thường xuyên, có thể xảy ra. Và nếu điều đó xảy ra và tôi không dự đoán và chương trình cho nó, chương trình của tôi có thể làm những người hiểu biết. Đóng băng, treo, khởi động lại, bất cứ điều gì. Một cái gì đó dự kiến ​​có thể xảy ra. Vì vậy, những gì tôi sẽ làm bây giờ, thực sự từ nay về sau, là trước khi tôi một cách mù quáng sử dụng một biến như s mà đã được chỉ định giá trị trả lại một số chức năng khác như getString, Tôi sẽ đảm bảo mà giá trị của nó là hợp lệ. Vì vậy, tôi chỉ biết từ khi đọc Tài liệu CS50 cho getString, mà cuối cùng chúng tôi sẽ chỉ cho bạn ở, getString trả về một biểu tượng đặc biệt gọi là NULL, N-U-L-L trong tất cả mũ, nếu có điều gì sai. Vì vậy, thông thường, nó sẽ trả về một chuỗi. Nhưng nếu không nếu nó trả về N-U-L-L-- cuối cùng chúng tôi sẽ xem những gì mà thực sự means-- mà chỉ cần phương tiện cái gì xấu xảy ra. Bây giờ điều này có nghĩa là, giống như trong Scratch, Tôi có thể kiểm tra một điều kiện ở đây trong C, nếu không phải làm bằng NULL. Vì vậy, nếu bạn đã không nhìn thấy điều này trước đây, này chỉ có nghĩa là không bằng. Vì vậy, nó là đối diện của bình đẳng như nhau, trong đó, nhớ lại, là khác nhau từ đơn bằng, đó là chuyển nhượng. Vì vậy, nếu s không bằng NULL, chỉ sau đó làm Tôi muốn thực hiện các dòng mã. Vì vậy, nói cách khác, trước khi tôi đi sâu vào một cách mù quáng và bắt đầu iterating hơn, và xử lý nó như thể nó là một chuỗi các nhân vật, tôi sẽ kiểm tra đầu tiên, chờ một phút, là s chắc chắn không phải tương đương với giá trị đặc biệt này, NULL? Bởi vì nếu nó là, những điều xấu có thể xảy ra. Và bây giờ, giả sử những điều xấu xảy ra tai nạn có nghĩa là chương trình của bạn, và bạn không thể nhất thiết phải phục hồi. Vì vậy, thẳng thắn, có vẻ xấu hơn. nó loại khó hiểu tại để nhìn lướt qua. Nhưng điều này sẽ càng trở nên quen thuộc trước khi dài. Nhưng tôi sẽ đề xuất bây giờ là một cải tiến khác. Đó là một sự cải tiến đúng đắn. Chương trình của tôi bây giờ là chính xác hơn, bởi vì trong trường hợp hiếm hoi mà không đủ bộ nhớ tồn tại, tôi sẽ xử lý nó, và tôi sẽ không làm gì cả. Tôi ít nhất sẽ không sụp đổ. Nhưng chúng ta hãy làm một phiên bản cuối cùng ở đây. Và một tập tin gọi là string2.c. Tôi sẽ dán mà cùng một mã cho chỉ là một thời điểm, và tôi sẽ làm nổi bật này dòng, 11, ở đây, chỉ một khoảnh khắc. Bây giờ thực tế là trình biên dịch thông minh như kêu vang có thể sửa lỗi này cho chúng tôi đằng sau hậu trường chúng tôi không bao giờ biết. Nhưng hãy nghĩ về điều này về cơ bản là một thiết kế có vấn đề. Dòng mã này là, tất nhiên, nói, khởi tạo một số biến i 0. Đó là khá đơn giản. Và một lần nữa là đây tuyên bố, ở đây, tôi ++, làm gì? Chúng tôi đã nhìn thấy nó trước, nhưng chúng tôi đã không thực sự nói về nó. TƯỢNG: Tăng dần tôi. DAVID J. Malan: Tăng dần tôi. Vì vậy, trên mỗi lần lặp thông qua vòng này, mỗi chu kỳ, bạn đang incrementing tôi một. Vì vậy, nó được lớn hơn và lớn hơn, và lớn hơn cho đến khi kết thúc vòng lặp. Làm thế nào để nó chấm dứt? Cũng có trung này điều kiện mà chúng tôi đã sử dụng trước. Bạn đã nhìn thấy và trong walkthroughs trong tập P. Nhưng câu nói này là gì? Làm vòng lặp sau đây để miễn là tôi là ít hơn những gì? TƯỢNG: Chiều dài của chuỗi. DAVID J. Malan: Các chiều dài của chuỗi. Vì vậy, nó dịch khá sạch để tiếng Anh trong ý nghĩa đó. Bây giờ vấn đề là mỗi khi tôi lặp qua vòng này về mặt lý thuyết, Tôi hỏi câu hỏi này. Là tôi nhỏ hơn độ dài chuỗi s? Là tôi nhỏ hơn độ dài chuỗi s? Bây giờ là tôi thay đổi trên mỗi lần lặp? Đó là. Do ++. Vì vậy, mỗi lần lặp i là nhận được lớn hơn. Nhưng s nhận được lớn hơn, hoặc nhỏ hơn, hoặc thay đổi ở tất cả? Số Vì vậy, về mặt thiết kế, một trong những trục theo đó chúng ta cố gắng để đánh giá mã trong lớp, điều này cảm thấy ngu ngốc. Cũng giống như bạn nghĩa là, trên mỗi lần lặp của vòng lặp này yêu cầu cùng một câu hỏi chết tiệt một lần nữa, và một lần nữa, và một lần nữa, và theo nghĩa đen nó sẽ không bao giờ thay đổi. Ít nhất là nếu tôi không chạm vào s và cố gắng thay đổi các nội dung của s. Vì vậy, tôi có thể làm tốt hơn một chút so với điều này. Và những gì tôi sẽ làm không phải là tuyên bố chỉ là một biến i, nhưng một biến thứ hai tôi sẽ tùy tiện, nhưng thông thường, gọi nó là n. Chỉ định n bằng chiều dài chuỗi s. Và sau đó ở đây, tôi sẽ làm một tối ưu hóa rất thông minh, vì vậy để nói chuyện, mà vào cuối ngày là không chính xác hoặc không ít chính xác hơn trước. Nhưng đó là một thiết kế tốt hơn. Trong thực tế là tôi đang sử dụng ít thời gian, chu kỳ CPU ít hơn, vì vậy để nói chuyện, để trả lời giống nhau câu hỏi, nhưng chỉ một lần. Mọi thắc mắc về chung nguyên tắc cải thiện, nói, hiệu quả của chương trình? Vâng? TƯỢNG: Tại sao bạn sử dụng [không nghe được]? DAVID J. Malan: Câu hỏi. Vì vậy, tại sao chúng ta đặt ++ vào cuối i thay vì đầu của tôi? Trong trường hợp này, nó có không ảnh hưởng đến chức năng. Và nói chung, tôi có xu hướng sử dụng toán tử postfix để nó nhiều hơn một chút rõ ràng như để khi hoạt động đang xảy ra. Đối với những người không quen thuộc, có một báo cáo, theo đó bạn có thể làm ++ tôi. Đây là những chức năng tương đương trong trường hợp này bởi vì không có gì khác là xung quanh incrementation đó. Nhưng bạn có thể đến với trường hợp và dòng mã trong đó mà làm cho một sự khác biệt. Vì vậy, nói chung, chúng tôi không thậm chí còn nói về việc này. Bởi vì thẳng thắn, nó làm cho bạn đang hấp dẫn hơn, và các loại áo mưa, và ký tự. Nhưng thực tế là nó khó hơn rất nhiều, Tôi nghĩ rằng, ngay cả đối với tôi để bọc tâm trí của tôi xung quanh nó đôi khi, thứ tự của các hoạt động. Vì vậy, như một sang một bên, nếu bạn thực sự không như thế này, mặc dù đây là loại sexy tìm kiếm, bạn cũng có thể làm i + = 1, đó là phiên bản xấu hơn của cùng một ý tưởng cho postfix incrementation. Tôi nói điều này và bạn nên làm cho niềm vui của nó, nhưng bạn sẽ đến để xem mã như một cái gì đó đẹp trước khi dài. [Cười] DAVID J. Malan: Phải không? Yeah. Câu hỏi ở giữa. TƯỢNG: Bạn cần phải nói int n? DAVID J. Malan: Bạn làm không cần phải nói int n. Vì vậy, bởi vì chúng tôi đã nói int, bạn không cần phải nói lại lần nữa. Việc nắm bắt được rằng n phải có cùng kiểu dữ liệu như tôi. Vì vậy, đó chỉ là một tiện nghi ở đây. Yeah. TƯỢNG: Bạn có thể đi qua khung in nhân vật của tôi một lần nữa? DAVID J. Malan: Tuyệt đối. Vì vậy,% c, nhớ lại từ cuối thời gian, chỉ là một giữ chỗ. Nó có nghĩa là đặt một char ở đây. n dấu gạch chéo ngược, tất nhiên, chỉ phương tiện đưa ngắt dòng ở đây. Vì vậy, đó chỉ là lá, bây giờ, mảnh cú pháp mới. Và đây là nghĩa đen nói, lấy chuỗi gọi là s và đi được của nó i'th nhân vật, vì vậy để nói chuyện. Và tôi luôn nói nhân vật i'th bởi vì trên mỗi lần lặp của vòng lặp này nó như chúng ta đang in ra, s khung đầu tiên 0, như một lập trình viên có thể nói. Sau đó, s khung 1, sau đó s khung 2, sau đó 3, sau đó 4. Nhưng tất nhiên đó là một biến, vì vậy tôi chỉ thể hiện nó với tôi. Quan trọng, tuy nhiên, là để nhận ra, đặc biệt là nếu bạn đã không được thích nghi với thế giới này của chương trình, trong đó tất cả chúng ta dường như để đếm từ số không, gotta bắt đầu đếm từ số không bây giờ. Bởi vì chuỗi, ký tự đầu tiên, các z trong Zamyla là tốt hơn hoặc tồi tệ hơn sẽ sống ở vị trí số không. Được rồi, vì vậy hãy để tôi mang chúng tôi trở lại đây để Zamyla và xem những gì đang thực sự xảy ra vào bên dưới mui xe. Vì vậy, có khái niệm về loại đúc. Bạn có thể thực sự chơi với này đã có, có thể cho các hacker phiên bản của P thiết lập một. Nhưng loại đúc chỉ đề cập đến khả năng trong C và một số ngôn ngữ khác để chuyển đổi một kiểu dữ liệu khác. Bây giờ làm thế nào chúng ta có thể thấy điều này khá thẳng thắn? Vì vậy, đây, nhớ lại, là sự khởi đầu của bảng chữ cái tiếng Anh. Và bối cảnh, nhớ lại, từ như một tuần trước đây là ASCII. Mỹ Mã Tiêu chuẩn để trao đổi thông tin. Mà chỉ là một cách thực sự dài nói một ánh xạ từ các chữ cái đến các số, và từ con số để các chữ cái. Vì vậy, từ A đến M ở đây, dấu chấm dấu chấm dấu chấm, đường dây với, thu hồi, số thập phân 65 trở lên. Và chúng tôi đã không nói chuyện về điều này một cách rõ ràng, nhưng chắc chắn có tương tự số cho chữ thường. Và quả thực, có. Thế giới đã quyết định một số năm trước đó ít một, chữ thường một, sẽ là 97. Và ít b sẽ là 98, và vv. Và đối với bất kỳ phím nào khác trên bàn phím của bạn, có sẽ là một mô hình tương tự của các bit. Hoặc tương đương, một số thập phân. Vậy câu hỏi ở bàn tay, sau đó, là làm thế nào chúng ta có thể thực sự thấy điều này dưới mui xe? Vì vậy, tôi sẽ đi qua để gedit lại. Và thay vì loại này từ đầu, Tôi sẽ đi trước và chỉ cần mở một cái gì đó từ mã ngày nay được gọi là ASCII không. Và ASCII không trông như thế này. Vì vậy, hãy bọc tâm trí của chúng tôi xung quanh này. Vì vậy, đầu tiên, tôi đã nhận xét mã, đó là tốt đẹp. Bởi vì đó là nghĩa đen nói với tôi những gì mong đợi, hiển thị một bản đồ cho chữ hoa. Bây giờ tôi hoàn toàn không biết những gì tôi nghĩa là bằng cách đó, vì vậy chúng ta hãy suy luận. Trong tiếng Anh, có thể Anh hơi iPod, những gì hiện dòng 18 xuất hiện phải làm cho chúng ta? Chỉ cần dòng 18. Đó là những gì gây? Đó là những gì sẽ tung ra ở đây? TƯỢNG: Một vòng lặp. DAVID J. Malan: Một vòng lặp. Và bao nhiêu lần là đó sẽ lặp lại? TƯỢNG: [interposing GIỌNG NÓI] sáu lần. DAVID J. Malan: Không sáu lần. TƯỢNG: 26 lần. DAVID J. Malan: 26 lần. Vâng, xin lỗi. 26 lần. Tại sao? Vâng, đó là một chút lạ, nhưng Tôi đã bắt đầu kể từ 65. Đó là kỳ lạ, nhưng không sai. Nó không phải là xấu mỗi nói. Và tôi đang làm mà chỉ bởi vì, cho ví dụ này, Tôi là loại dự đoán rằng vốn A là 65. Bây giờ đây không phải là thanh lịch nhất cách để làm điều này, để loại mã cứng giá trị huyền bí mà không ai là bao giờ sẽ nhớ. Nhưng hiện nay, nhận thấy rằng tôi làm điều này thông qua lên 65 cộng với 26. Bởi vì dường như tôi thậm chí không muốn để làm các phép tính số học trong đầu tôi. Vì vậy, tôi sẽ cho các trình biên dịch làm điều đó. Nhưng sau đó vào mỗi vòng lặp, mỗi lần lặp của vòng lặp, tôi incrementing i. Vì vậy, bây giờ điều này có vẻ hơi khó hiểu. Nhưng chúng ta nên có xây dựng cơ bản khối nào đó để hiểu điều này. % C chỉ là một giữ chỗ cho một char. % I là một giữ chỗ cho một int. Và nó chỉ ra rằng bằng cách sử dụng này cú pháp mới, trong ngoặc đơn này, vì vậy để nói chuyện, vì vậy một kiểu dữ liệu bên trong một dấu ngoặc đơn, Tôi có thể buộc các trình biên dịch để điều trị tôi không phải là một số nguyên, nhưng như là một char. Qua đó cho thấy tôi những nhân vật tương đương với con số đó. Bây giờ ở đây, mã này là khá nhiều giống hệt nhau. Tôi chỉ muốn làm cho siêu rõ ràng thực tế mà tôi đang bắt đầu từ 97, đó là một chữ thường. Trên lên đến 26 ký tự hơn. Và tôi doing-- một lần nữa, đúc tôi, vậy để nói chuyện. Hoặc loại đúc tôi, vậy để nói chuyện. Từ một int đến một char. Vì vậy, kết quả cuối cùng là có được, thẳng thắn, thông tin chúng tôi đã biết. Tôi sẽ làm cho ascii-0 dot-- không chấm c. Chú ý, bạn có thể thực hiện mà sai lầm như tôi chỉ cần làm vô tình. Hãy ascii-0. Bây giờ tôi sẽ làm ./ascii-0. Tôi sẽ phóng to, và không may nó sẽ di chuyển ra khỏi màn hình. Nhưng chúng ta thấy toàn bộ biểu đồ nơi một bản đồ 97, bản đồ b đến 98, và nếu chúng ta di chuyển lên cao hơn nữa Một, tất nhiên, bản đồ 65. Vì vậy, đây chỉ là để nói rằng những gì chúng ta đã rao giảng, có tương đương này, được trong thực tế, trường hợp trong thực tế. Vì vậy, một thay đổi nhanh chóng này. Hãy để tôi mở ra ascii-1.c. Và thông báo thông minh này, sắp xếp của, làm rõ về điều này. Đây là ascii-1.c, và nhận thấy điều này điên. Và điều này thực sự được đến trái tim những gì các máy tính đang làm. Mặc dù con người chúng ta sẽ không tính về letters-- Tôi không bắt đầu suy nghĩ, tất cả phải vào một sau đó b, và sử dụng những tính đối tượng vật lý. Bạn chắc chắn có thể nói rằng tôi muốn khởi tạo một số biến được gọi là c-- nhưng tôi có thể gọi anything-- này để c được khởi tạo vốn A. Bởi vì lúc cuối ngày, máy tính không quan tâm đến những gì bạn đang lưu trữ, nó chỉ quan tâm làm thế nào bạn muốn trình bày thông tin đó. Làm thế nào để bạn muốn máy tính giải thích rằng mô hình của bit? Vì vậy, đây không phải là một cái gì đó tôi nói chung sẽ khuyên bạn nên làm. Nó thực sự chỉ là một ví dụ để truyền tải những gì bạn có thể hoàn toàn khởi tạo một số nguyên cho một char. Bởi vì bên dưới mui xe của một char, tất nhiên, chỉ là một số từ 0 đến 255. Vì vậy, bạn có thể chắc chắn đặt nó bên trong của một int. Và điều này cũng chứng minh được rằng chúng ta có thể chuyển đổi từ một loại khác, ở đây, cuối cùng là in những điều tương tự. Và trên thực tế, điều này tôi sẽ sửa chữa online-- có nghĩa là để nói điều này, một lần nữa, ở đây. Hãy để tôi làm sạch này lên mạng, và chúng tôi sẽ nhìn thấy trong một hương trực tuyến khi cần thiết, những gì được dự định đó. OK. Vì vậy, ví dụ mới nhất tại liên quan đến một và b và sau đó chúng tôi sẽ có những điều lên một notch. Vì vậy, với một và b và của c trong vốn và sự tương đương của chúng, chúng ta hãy hãy nhìn vào ví dụ này, ở đây. Một ví dụ khác mã. Chúng tôi sẽ mở một trong đó là đã được thực hiện, vì vậy chúng tôi không cần phải gõ tất cả ra từ đầu. Và thông báo trong dự đoán chúng tôi đang sử dụng nhiều tiêu đề tác phẩm, trong đó có người bạn mới của chúng tôi, string.h. Bây giờ điều này có vẻ, lúc đầu Trong nháy mắt, một chút khó hiểu. Nhưng chúng ta hãy xem nếu chúng ta không thể lý luận thông qua những gì đang xảy ra ở đây. Lần đầu tiên tôi nhận được một chuỗi từ người sử dụng, và tôi đặt chuỗi trong một biến gọi là s. Sao chép dán từ trước. Trong dòng 22, tôi là rõ ràng làm chính xác những gì Tôi đã làm một thời điểm trước đây, tôi đang lặp lại qua các nhân vật trong s. Và thủ đoạn mới ở đây đang sử dụng chiều dài chuỗi, tối ưu hóa nhỏ lưu trữ các chuỗi dài trong n, thay vì gọi điện thoại strlen một lần nữa, và một lần nữa, và một lần nữa. Và chỉ cần kiểm tra xem tôi là nhỏ hơn n. Bây giờ đây, những thứ có được một chút thú vị. Nhưng nó chỉ là một ứng dụng của ý tưởng này cùng mới. Có gì trong tiếng Anh không s khung tôi đại diện? TƯỢNG: Đếm từng nhân vật [không nghe được]. DAVID J. Malan: Đếm từng nhân vật. Và thậm chí nhiều hơn một cách ngắn gọn, s khung tôi đại diện cho những gì? Bạn sẽ nói. Không được đưa bạn vào vị trí ở đây. TƯỢNG: Well-- DAVID J. Malan: Vì vậy, nếu từ is-- nếu chuỗi là Zamyla, mà starts-- TƯỢNG: --Bạn đối phó với các nhân vật separately-- DAVID J. Malan: Tốt. Chính xác. Các ký hiệu khung vuông cho phép bạn để truy cập mỗi nhân vật cá nhân, nên s khung 0 là có được các ký tự đầu tiên trong chuỗi. s khung 1 là có được thứ hai, và vv. Vậy câu hỏi tôi hỏi, ở đây, trong tình trạng này là gì? Là nhân vật i'th của s lớn hơn hơn hoặc bằng chữ thường một? Và điều này có nghĩa là, ở đây, với các dấu và đôi? TƯỢNG (kèm): Và. DAVID J. Malan: Và. Nó chỉ tương đương với này. Và không phải là một từ khóa trong C, bạn phải sử dụng, khó chịu, dấu và ký hiệu. Và điều này, ngược lại, là yêu cầu là s i'th nhân vật nhỏ hơn hoặc bằng thành chữ thường z? Và một lần nữa, đây là nơi sự hiểu biết cơ bản thực hiện một máy tính làm cho tinh thần. Chú ý rằng, mặc dù tôi có chấm chấm chấm ở đó, trông giống như từ a đến z trong chữ thường được tất cả các giá trị liên tiếp tăng từ 97 trở lên. Và tương tự cho chữ hoa bắt đầu từ 65. Vì vậy, takeaway, sau đó, là bằng tiếng Anh, làm thế nào bạn có thể mô tả những dòng 24 đang làm gì? Vâng? TƯỢNG: Ngày 24 nó kiểm tra để xem cho dù mỗi nhân vật là một chữ thường. DAVID J. Malan: Nó kiểm tra xem mỗi nhân vật là một chữ viết thường. Vì vậy, thậm chí nhiều hơn một cách ngắn gọn, là nhân vật i'th của s chữ thường? Đó là tất cả chúng tôi thể hiện ở đây một cách hợp lý, một chút khó hiểu, nhưng cuối cùng là khá thẳng thắn. Là s i'th chữ thường? Nếu như vậy, và đây là nơi mà mọi thứ có được một chút tâm uốn chỉ trong một thời điểm, nếu như vậy, đi trước và in ra một nhân vật. Vì vậy, đây chỉ là một trình giữ chỗ, nhưng những gì nhân vật? Tại sao tôi làm khung của tôi trừ biểu hiện này ở đây? Cũng nhận thấy mô hình ở đây. Những con số thực tế không quan trọng rất nhiều. Nhưng chú ý rằng 97 là cách xa 65? TƯỢNG: 32. DAVID J. Malan: 32. Làm thế nào xa là 98 từ 66? TƯỢNG: 32. DAVID J. Malan: Little c từ lớn C? 32. Vì vậy, có 32 bước nhảy từ một lá thư khác. Vì vậy, tôi thẳng thắn, có thể đơn giản hóa này với. Nhưng sau đó tôi là loại mã hóa cứng sự hiểu biết ở mức độ thấp này rằng không có người đọc là bao giờ sẽ hiểu. Vì vậy, tôi sẽ khái quát nó như là, tôi biết chữ thường là lớn hơn. Tôi biết các chữ cái vốn là giá trị nhỏ hơn, trớ trêu thay. Nhưng điều này là có hiệu quả tương đương với nói trừ đi 32 từ khung của tôi. Vì vậy, trong bối cảnh của những chữ cái, nếu thư xảy ra là một, chữ thường một, và tôi trừ đi 32, gì có hiệu lực không có, toán học, vào một chữ thường? TƯỢNG: Capitalizes-- DAVID J. Malan: tận nó. Và quả thực, đây là lý do tại sao chúng tôi chương trình được gọi là tận dụng không. Chương trình này hoặc tận thư, sau khi kiểm tra nếu nó là thực sự là một chữ viết thường. Nếu không, trong dòng 30, tôi phải làm gì nếu nó không phải là một chữ thường rằng tôi nhìn ở đặc biệt lặp đi lặp lại trong vòng lặp. Chỉ cần in ra. Vì vậy, không thay đổi thứ đó không phải là ngay cả chữ thường. Giới hạn mình vào ít một đường nhỏ z. Bây giờ điều này là khá phức tạp. Nhưng vào cuối ngày, điều này là cách chúng ta, một khi có một thời gian, phải thực hiện những điều. Nếu tôi thay vì mở tận một, oh cảm ơn thần. Có một chức năng kêu gọi trên, có thể làm tất cả mọi thứ chúng tôi chỉ làm ở mức khá thấp. Bây giờ để trên là thú vị bởi vì nó được khai báo trong một tập tin, và bạn sẽ chỉ biết điều này bằng cách kiểm tra các tài liệu, hoặc được nói, nói, trong lớp học, nơi nó tồn tại, trong một tập tin gọi là ctype.h. Vì vậy, đây là một người bạn mới của chúng ta. Và trên thực hiện chính xác những tên gọi của nó. Bạn có thể vượt qua trong, như một tham số, giữa các dấu ngoặc đơn, một số nhân vật. Tôi sẽ vượt qua trong các nhân vật i'th s sử dụng các ký hiệu mới ưa thích của chúng tôi liên quan đến dấu ngoặc vuông. Và có nhiều phán đoán, sự trở lại là những gì giá trị để trên rõ ràng sẽ được? Một bức thư vốn. Một bức thư vốn. Vì vậy, nếu tôi vượt qua trong một chữ thường, hy vọng, theo định nghĩa của để trên, nó sẽ trả lại một hoa A. Nếu không, nếu nó không phải là một chữ thường trong nơi đầu tiên, tôi chỉ in ra. Và quả thực, thông báo người bạn thứ hai ở đây. Không chỉ để tồn tại trên, nhưng là thấp hơn, thực sự trả lời câu hỏi đó cho tôi. Bây giờ bất cứ ai đã viết những điều này, 10s của năm trước, bạn biết những gì? Thực hiện để trên và là giảm sử dụng mã như thế này. Nhưng một lần nữa, phù hợp với ý tưởng này của trừu tượng đi, loại, cấp dưới chi tiết thực hiện. Và đứng trên vai người những người đến trước chúng ta, sử dụng chức năng giống như trên và thấp hơn, mà đủ tuyệt vời là độc đáo tên để nói những gì họ làm, là một mô hình tuyệt vời để áp dụng. Bây giờ, nó chỉ ra rằng nếu tôi đọc trang người đàn ông cho, nói, để trên, Tôi học được điều gì khác. Vì vậy, người đàn ông toupper. Đó là một chút áp đảo. Tuy nhiên, thông báo, đây là đề cập đến tập tin tiêu đề mà tôi nên sử dụng. Là một sang một bên, bởi vì đây là sai lầm, chức năng sử dụng int thay vì ký tự vì lý do kiểm tra lỗi. Nhưng có lẽ chúng tôi sẽ đến lại cho rằng trong tương lai. Nhưng chú ý, ở đây, để chuyển đổi trên thư c chữ hoa nếu có thể. Vì vậy, đó là khá đơn giản. Và bây giờ chúng ta hãy thêm một chút cụ thể. Chúng ta hãy nhìn vào một phần của trang người đàn ông dưới giá trị trả về. Giá trị trả lại là của bức thư được chuyển đổi. Hoặc c, nếu chuyển đổi là không thể, trong đó c là đầu vào ban đầu. Mà tôi biết từ đây, từ các tham số để để trên. Vì vậy, các takeaway của việc này là gì? Giá trị trả lại là của bức thư được chuyển đổi, hoặc c, bức thư ban đầu, nếu việc chuyển đổi là không thể. Do đó cải thiện những gì tôi có thể thực hiện để thiết kế mã của tôi không? Vâng? TƯỢNG: Bạn có thể loại bỏ các khác. DAVID J. Malan: Tôi có thể loại bỏ các báo cáo khác, và không chỉ các báo cáo khác. TƯỢNG: Bạn có thể loại bỏ [không nghe được]. DAVID J. Malan: Tôi có thể loại bỏ toàn bộ ngã ba trên đường, nếu khác hoàn toàn. Vì vậy, thực sự, hãy để tôi mở phiên bản cuối cùng này, tận-2 và nhận thấy như thế nào, nếu bạn sẽ, gợi cảm, các mã được bây giờ nhận được, trong đó tôi đã giảm từ một số bảy hay để dòng để chỉ bốn, các chức năng mà tôi đã định bằng cách gọi điện thoại đến phía trên, đi qua trong khung của tôi, và in ấn ra, với giữ chỗ% c, mà nhân vật cụ thể. Bây giờ tranh cãi, đó là một lỗi, hoặc ít nhất là nguy cơ lỗi, trong chương trình này. Vì vậy, chỉ để trở lại một takeaway trước đó, những gì nên tôi cũng có thể làm trong chương trình này để làm cho nó mạnh mẽ hơn, do đó không có cách nào nó có thể sụp đổ, ngay cả trong trường hợp hiếm hoi? TƯỢNG: Hãy chắc chắn rằng nó không phải là NULL. DAVID J. Malan: Hãy chắc chắn rằng nó không phải là NULL. Vì vậy, thực sự, để làm cho siêu này thích hợp, tôi phải làm một cái gì đó như thế nào, nếu không phải là NULL, sau đó đi trước và thực hiện các dòng mã, mà Sau đó tôi có thể thụt như thế, và sau đó đưa vào cú đúp thân của tôi. Vì vậy, tốt buộc lại với nhau của hai ý tưởng. Vâng? TƯỢNG: bạn có thể sử dụng làm một vòng lặp trong khi, để thay thế? DAVID J. Malan: Có thể Tôi làm một việc phải làm trong khi vòng lặp? TƯỢNG: --Bạn muốn chắc chắn mà bạn thực sự [không nghe được]. DAVID J. Malan: Có thể bạn sử dụng trong khi làm? Câu trả lời ngắn, không có. Bởi vì bạn đang về để giới thiệu một trường hợp góc. Nếu chuỗi là số không dài. Nếu ví dụ, tôi chỉ cần nhấn Nhập, mà không bao giờ gõ Zamyla. Tôi sẽ trao lại cho bạn một thực tế chuỗi, như chúng ta cuối cùng sẽ thấy, có không ký tự. Nó vẫn là một chuỗi, nó chỉ là siêu ngắn. Nhưng nếu bạn sử dụng một do thời gian, bạn đang đi một cách mù quáng cố gắng làm điều gì đó với tôn trọng đến chuỗi, và không có gì đang xảy ra ở đó. TƯỢNG: Vâng, nếu bạn đã làm làm [không nghe được] trong khi s-- DAVID J. Malan: Oh tôi nhìn thấy, giữ nhận được một chuỗi từ người sử dụng. Vì vậy, câu trả lời ngắn, bạn có thể, và tiếp tục làm phiền họ cung cấp cho bạn một chuỗi đó là đủ ngắn để phù hợp trong bộ nhớ. Hoàn toàn. Tôi chỉ quyết định không. Nếu họ không cho tôi chuỗi tôi muốn, tôi bỏ, tôi bỏ cuộc. Nhưng hoàn toàn, cho mục đích đó, bạn hoàn toàn có thể làm điều đó. Vì vậy, tập tin tiêu đề của thư viện mà chúng tôi bây giờ là quen thuộc với những, đây. Tiêu chuẩn I / O, CS50.h, string.h, ctype.h, và có, thực sự, những người khác. Một số bạn đã phát hiện ra thư viện toán học trong math.h. Nhưng hãy để tôi giới thiệu với bạn, bây giờ, để nguồn tài nguyên này là nhân viên CS50, Davin, và Rob, và Gabe đặc biệt đã đặt lại với nhau. Điều đó sẽ sớm liên kết trên trang web của khóa học. Nó được gọi là CS50 tham khảo. Mà chỉ để cung cấp cho bạn một cách nhanh chóng hương vị của nó, hoạt động như sau. Hãy để tôi đi đến reference.cs50.net. Bạn sẽ nhìn thấy trên tay trái bên kia một danh sách áp đảo các chức năng đi kèm với c. Nhưng nếu tôi quan tâm, cho thời điểm này, về một cái gì đó giống như strlen, Tôi có thể đánh nó ở đó. Nó lọc xuống danh sách để chỉ những gì tôi quan tâm. Tôi sẽ nhấp vào nó. Và bây giờ ở bên trái, bạn sẽ thấy những gì chúng tôi hy vọng là một đơn giản hơn, con người thân thiện với lời giải thích như thế nào Chức năng này hoạt động. Trả về độ dài của một chuỗi. Dưới đây là một tóm tắt, đây là cách bạn sử dụng nó trong điều khoản của các tập tin tiêu đề, và về những gì chức năng trông giống như trong điều khoản của đối số của nó. Và sau đó ở đây, lợi nhuận chiều dài của một chuỗi. Nhưng đối với những người bạn thoải mái hơn, bạn thực sự có thể bấm thoải mái hơn, và nội dung này trang, bây giờ, sẽ thay đổi là các giá trị mặc định của những gì bạn sẽ có được bằng cách sử dụng trang người đàn ông. Nói cách khác, CS50 tham chiếu là một đơn giản hóa trang người đàn ông của các nhân viên, cho học sinh. Đặc biệt, những người kém thoải mái và ở giữa, để bạn không cần phải cố gắng để bọc tâm trí của bạn xung quanh, thẳng thắn, một số cú pháp khá khó hiểu và đôi khi tài liệu hướng dẫn. Vì vậy, giữ cho rằng trong tâm trí trong những ngày tới. Vì vậy, ở đây, một lần nữa, là một Zamyla. Bây giờ hãy đặt một câu hỏi đó là nhiều hơn một chút con người có thể truy cập. Nhờ Chang, người được in nhiều voi không ngừng trong vài ngày qua. Chúng tôi có một cơ hội để cung cấp cho ít nhất một trong số họ đi. Nếu chúng ta có thể nhận được chỉ là một tình nguyện viên đến trên lên để vẽ trên màn hình. Làm thế nào về đây? Nào lên. Tên của bạn là gì? ALEX: Alex. DAVID J. Malan: Alex. Tất cả các quyền. Alex, đến ngày lên. Chúng tôi về để xem bạn chữ viết tay trên màn hình ở đây. Được rồi, rất vui được gặp bạn. ALEX: Nice bạn gặp các bạn. DAVID J. Malan: Được rồi. Vì vậy, tập thể dục siêu đơn giản. Bar là không cao có được một con voi ngày nay. Bạn đang chơi vai trò của getString. Và tôi sẽ chỉ cho bạn biết chuỗi mà bạn đã nhận được. Và giả sử rằng bạn, getString, đã được gọi. Và con người, như tôi, có gõ vào Zamyla, Z-A-M-Y-L-A. Chỉ cần đi trước và viết Zamyla trên màn hình như thể bạn đã nhận nó và lưu trữ nó ở đâu đó trong bộ nhớ. Để lại chỗ cho những gì sẽ có một vài words-- khác đó là OK, tiếp tục đi. [Cười] Vì vậy, Zamyla, xuất sắc. Vì vậy, bây giờ giả sử là bạn, getString, được gọi là một lần nữa. Và vì thế, tôi cung cấp cho bạn, tại bàn phím, với một cái tên khác, Belinda. Tất cả các quyền. Và giờ đây, trong thời gian tới là getString gọi, tôi gõ vào một cái gì đó giống như Gabe, G-A-B-E. Bạn đang thực sự tham gia với trái tim bộ nhớ truy cập ngẫu nhiên. Đó là vẽ tất cả mọi thứ hoàn toàn ngẫu nhiên. OK. [Cười] Alex: Xin lỗi chữ viết tay của tôi là xấu. DAVID J. Malan: Không, đó là OK. Và làm thế nào về Rob, R-O-B. OK. Tốt. Vì vậy, tôi đã không dự đoán bạn sẽ loại đặt những điều trên theo cách này. Nhưng chúng ta có thể làm công việc này. Vì vậy, làm thế nào bạn đi về đặt ra các ký tự trong bộ nhớ? Nói cách khác, nếu chúng ta nghĩ màn hình màu đen hình chữ nhật này là đại diện cho một máy tính của RAM, hoặc bộ nhớ. Và nhớ RAM mà chỉ là một bó toàn bộ các byte, và byte là một bó toàn bộ các bit. Và bit là bằng cách nào đó thực hiện, thường với một số hình thức điện trong phần cứng. Vì vậy, đó là sắp xếp của phân lớp chúng tôi đã nói chuyện về và bây giờ có thể đưa cho các cấp. Làm thế nào để bạn đi về quyết định nơi để viết Rob so với so với Gabe Belinda so với Zamyla? Alex: Tôi chỉ cần làm nó trong đặt hàng mà bạn nói với tôi. DAVID J. Malan: Và đó là sự thật. Nhưng những gì chi phối nơi mà bạn đặt Tên Belinda và tên Gabe không? Alex: Không có gì? DAVID J. Malan: [LAUGHS] Vì vậy, hoạt động, đó là tốt. Vì vậy, máy tính là ít hơn trật tự hơn. Và như vậy khi chúng tôi ở lại đó implement-- chỉ một moment-- khi chúng tôi thực sự thực hiện một cái gì đó giống như GetString trong một máy tính, Zamyla có thể được đặt ra khá nhiều như bạn đã làm trên màn hình, có. Và những gì là chìa khóa để nhận thấy ở đây, những gì Alex đã làm, là có một loại phân giới cắm mốc trong từng lời nói, phải không? Bạn đã không viết Z-A-M-Y-L-A-B-E-L-I-N-D-A-G-A-B-- nói cách khác, có một số loại phân giới cắm mốc mà có vẻ là, loại, khoảng cách ngẫu nhiên giữa các từ khác nhau. Nhưng đó là tốt, bởi vì con người chúng ta có thể bây giờ hình dung rằng đây là những bốn dây khác nhau. Nó không phải chỉ là một chuỗi của rất nhiều nhân vật. Vì vậy, một máy tính, sau đó, trong khi đó, có thể mất một chuỗi như Zamyla, đưa từng của những chữ cái bên trong một byte của bộ nhớ. Tuy nhiên, con số này lớn hơn rất nhiều, tất nhiên, hơn sáu ký tự. Có một bó toàn bộ bộ nhớ RAM. Và thế là từ đó trở đi, điều này mạng lưới các hộp sẽ để đại diện cho những gì Alex chỉ đã làm ở đây trên màn hình. Và bây giờ, Alex, chúng tôi có thể cung cấp cho bạn một màu xanh hoặc một con voi màu da cam từ Chang. Alex: Tôi sẽ đưa một con voi màu xanh. DAVID J. Malan: Một con voi màu xanh. Vì vậy, một tràng pháo tay, nếu chúng ta có thể, cho Alex ở đây. [Vỗ tay] Alex: Cảm ơn bạn. DAVID J. Malan: Cảm ơn bạn. Vì vậy, các takeaway là, mặc dù mô hình loại thay đổi theo thời gian, ở đây trên diễn đàn, đã có này phân định ranh giới giữa các dây khác nhau Alex đã cho chúng ta. Bây giờ máy tính, thẳng thắn, có thể làm điều tương tự. Họ có thể loại tiếng tom chuỗi bất cứ nơi nào trong bộ nhớ RAM. Ở đây, ở đây, ở đây, ở đây. Họ có thể làm chính xác điều đó. Nhưng, tất nhiên, đó là lẽ không phải là kế hoạch tốt nhất. Phải không? Nếu tôi tiếp tục hỏi Alex có tên, có lẽ ông muốn đặt xuống một số chi tiết ở đây, có thể lên ở đây, ở đây, ở đây, cuối cùng ở đây. Nhưng với một chút kế hoạch, chắc chắn, chúng ta có thể đặt những điều trên sạch hơn. Và quả thực, đó là những gì một máy tính thực hiện. Tuy nhiên, nắm bắt được rằng nếu chuỗi tiếp theo tôi nhận được sau khi Zamyla là một cái gì đó như Belinda, đề xuất mà chúng ta có thể viết b thư liên quan đến mạng lưới này với? Bạn sẽ đi đâu? Ở bên phải của một, dưới z, dưới một? Những gì bản năng đầu tiên của bạn sẽ là gì? TƯỢNG: Dưới z. DAVID J. Malan: Vì vậy, dưới đây z. Và đó là khá đơn giản, phải không? Đó là loại gọn gàng, đó là những gì chúng ta làm trên bàn phím khi nhấn Enter, hoặc email khi thực hiện một danh sách liệt kê của sự vật. Nhưng thực tế là máy tính cố gắng để được hiệu quả hơn, và chắc chắn nhồi nhét càng nhiều dữ liệu vào bộ nhớ RAM càng tốt, để bạn không lãng phí bất kỳ byte. Vì vậy, bạn không nên lãng phí bất kỳ màn hình bất động sản. Và vấn đề, tuy nhiên, là nếu chúng ta theo nghĩa đen đưa thư b sau một, làm thế nào chúng ta sẽ biết tên của Zamyla kết thúc và tên của Belinda bắt đầu? Vì vậy, bạn con người chỉ là đề xuất, tốt, nhấn phím Enter, về cơ bản. Đặt nó xuống dưới đây. Hoặc thậm chí là Alex đã làm, chỉ cần bắt đầu bằng văn bản tên tiếp theo dưới đây trước đó, và dưới đây là một điều đó, và thì dưới đây là một. Đó là một cách trực quan. Máy tính có một dấu hiệu trực quan, nhưng đó là một chút gọn gàng hơn. Đó là nhân vật sôi nổi này. Dấu gạch chéo ngược 0, mà có lẽ là gợi nhớ đến dấu gạch chéo ngược n, và vân vân, bây giờ. Các trình tự thoát đặc biệt. Dấu gạch chéo ngược 0 là cách đại diện cho tám số không bit liên tiếp. 0000 0000. Cách bạn thể hiện rằng không phải là nhấn số không trên bàn phím của bạn, bởi vì trong thực tế đó là một ASCII char. Nó trông giống như một số, nhưng thực sự là một số thập phân đại diện cho tròn Glyph, kiểu chữ tròn. Trong khi đó, dấu gạch chéo ngược không có nghĩa là, theo nghĩa đen đưa tám byte ở đây cho tôi. Vì vậy, đây là một việc khó. Chúng ta có thể đã sử dụng bất kỳ mô hình bit, nhưng thế giới quyết định một số năm trước đây, mà đại diện cho kết thúc của một chuỗi trong bộ nhớ, chỉ cần đặt một bó toàn bộ số không. Bởi vì chúng ta có thể phát hiện. Bây giờ có nghĩa là không có bức thư của bảng chữ cái có thể được biểu diễn bằng số không. Nhưng đó là OK, chúng ta đã thấy mà chúng ta đang sử dụng trên 65 trong 97 trở lên. Chúng tôi đã không nhận được bất cứ nơi nào đóng cửa cho tất cả các số không. Vì vậy, Belinda trong bộ nhớ của máy tính thực sự là sẽ đi đây. Tôi đã vẽ nó màu vàng chỉ để thu hút sự chú ý của chúng tôi với nó. Và thông báo, quá, điều này là hoàn toàn tùy ý. Tôi đã rút ra nó như là một mạng lưới. Giống như, RAM chỉ là một số đối tượng vật lý. Nó không nhất thiết phải hàng và cột, mỗi gia nhập. Nó chỉ có một bó toàn bộ các byte thực hiện trong phần cứng bằng cách nào đó. Nhưng nếu sau khi Belinda tôi gõ vào tên của Gabe, anh ta sẽ kết thúc ở đây trong bộ nhớ, và nếu tôi gõ vào tên của Daven, Ví dụ, anh ấy sẽ kết thúc ở đây. Và tôi có thể tiếp tục ghi tên nhiều hơn. Thật không may, nếu tôi cố gắng viết tên siêu dài, Tôi cuối cùng đã có thể chạy ra khỏi bộ nhớ. Trong trường hợp này, là getString sẽ trở về NULL, như chúng tôi đã nói. Nhưng may mắn thay, ít nhất là trong hình ảnh này ở đây, chúng tôi đã không nhận được khá xa. Bây giờ những gì là tốt đẹp là điều này ý tưởng chung của điều trị điều như là trong hộp là đại diện của một tính năng của C và rất nhiều ngôn ngữ, được biết đến như là một mảng. Một mảng là một kiểu dữ liệu. Đó là một cấu trúc dữ liệu, nếu bạn sẽ. Cấu trúc theo ý nghĩa của nó thực sự, loại, trông như một cái hộp, ít nhất trong mắt của tâm trí của bạn. Một mảng là một tiếp giáp chuỗi các kiểu dữ liệu giống nhau, trở lại trở lại để trở lại trở lại. Vì vậy, một chuỗi, trong khác từ, là một mảng ký tự. Một mảng các ký tự. Nhưng hóa ra bạn có thể có mảng chùm của sự vật. Trong thực tế, chúng ta có thể đặt thậm chí số trong một mảng. Vì vậy, hình thức mà chúng ta sẽ bắt đầu khai báo dữ liệu này cấu trúc được biết đến như là một mảng cũng sẽ sử dụng dấu ngoặc vuông. Tuy nhiên, các dấu ngoặc vuông sẽ có ý nghĩa khác nhau trong bối cảnh này. Và chúng ta hãy xem nó như sau. Giả sử rằng tôi đã mở lên một tập tin mới ở đây. Và tôi tiết kiệm này là ages.c. Và tôi sẽ tiết kiệm này trong thư mục của tôi ở đây. Và bây giờ tôi sẽ đi trước và bắt đầu gõ một cái gì đó như bao gồm CS50.h, bao gồm stdio.h, int void main. Và sau đó bên trong ở đây, tôi muốn lần đầu tiên có một int gọi là tuổi tác. Và tôi sẽ sử dụng để có được một int từ người sử dụng so với tuổi của mình. Tuy nhiên, chương trình này có nghĩa là để được sử dụng bởi nhiều người, cho bất cứ ngữ cảnh. Tôi đã có một dòng người. Tất cả đều phải nhập của họ tuổi có thể một số, tôi không biết, cạnh tranh, hoặc sự kiện rằng họ đã đến cho. Vì vậy, người kế tiếp, tôi cần một biến khác. Bởi vì nếu tôi chỉ làm tuổi được getInt, đó là sẽ clobber, hoặc ghi đè lên tuổi người trước. Vì vậy, đó là không tốt. Vì vậy, bản năng đầu tiên của tôi có thể được, oh, được rồi, nếu tôi muốn để có được nhiều nhân dân ages-- chúng ta hãy gọi age1 này, int Age2 được int, int age3 được getInt. Và bây giờ tôi sẽ sử dụng một số mã giả ở đây. Làm điều gì đó với những con số. Chúng tôi sẽ để lại cho một ngày khác gì chúng ta đang làm gì ở đó, bởi vì chúng ta chỉ quan tâm trong thời điểm này về age1, Age2, age3. Thật không may, một khi tôi biên dịch chương trình này và đặt nó ở phía trước của người sử dụng thực tế, thiết kế về cơ bản là những gì người nghèo quyết định tôi dường như đã thực hiện? Vâng? TƯỢNG: [không nghe được] DAVID J. Malan: Yeah, Tôi thậm chí còn không cố gắng để tìm ra bao nhiêu tuổi Tôi thực sự quan tâm? Nếu tôi có ít hơn ba người dân ở đây, và do đó ít hơn ba tuổi, Tôi vẫn hy vọng một cách mù quáng ba. Thiên Chúa cấm bốn người xuất hiện. Chương trình của tôi thậm chí sẽ không chỉ hỗ trợ họ. Và vì vậy đây, câu chuyện dài Tóm lại, không phải là một thói quen tốt. Phải không? Tôi đã cơ bản sao chép và dán mã và chỉ cần tinh chỉnh các tên biến. Và, thần của tôi, nếu bạn đã có, chứ không phải ba lứa tuổi, nhưng 10, hoặc 100, hoặc thậm chí 6500 sinh viên đại học, ví dụ. Điều này sẽ không được đặc biệt đang thanh lịch, hoặc bền vững. Bạn sẽ phải ghi lại các chương trình mỗi khi số điện thoại của người dân thay đổi. Vì vậy, may mắn thay, trong thực tế của chúng tôi tập tin ages.c cho ngày hôm nay, chúng ta có một giải pháp thông minh hơn. Đầu tiên, tôi sẽ mượn xây dựng, chúng tôi đã sử dụng một vài lần, này làm trong khi vòng lặp, để có được số lượng người trong phòng. Tôi chỉ cần đi làm phiền người sử dụng, một lần nữa và một lần nữa, cho đến khi người đó mang lại cho tôi một giá trị của n đó là một số nguyên dương. Tôi có thể sử dụng, cuối cùng thời gian của chiều hướng tích cực int. Nhưng chúng ta không có mà thật, vì vậy tôi đã đi trước và đang thực hiện ý tưởng này. Bây giờ ở đây, đây là thủ thuật mới. Trong dòng 27, như các ý kiến trong dòng 26 cho thấy, khai báo một mảng trong đó để lưu trữ tuổi của tất cả mọi người. Vì vậy, nếu bạn muốn nhận được, không phải là một int, không hai ints, nhưng một bó toàn bộ int. Cụ thể số nguyên n, n là might có ba, có thể là 100, có thể là 1.000. Cú pháp, khá đơn giản, là để nói rằng, những dữ liệu loại nào bạn muốn? Những gì bạn muốn gọi rằng đoạn bộ nhớ? Những gì bạn muốn gọi điện lưới trông giống như những bức tranh này? Và trong dấu ngoặc ở đây, bạn nói lớn như thế nào bạn muốn mảng được. Và như vậy trước đó, khi tôi nói cú pháp là một chút khác nhau ở đây, chúng tôi vẫn sử dụng dấu ngoặc vuông, nhưng khi tôi đang khai báo một mảng, số bên trong dấu ngoặc vuông phương tiện lớn làm thế nào để bạn muốn mảng được. Ngược lại, khi chúng ta đang sử dụng s khung tôi một chút thời gian trước, s, một chuỗi, thực sự là một mảng các ký tự, nhưng khi bạn không khai báo một biến, như với từ khóa này ở đây, bạn chỉ đơn giản nhận được một chỉ số cụ thể, một cụ thể phần tử từ mảng đó. Một khi chúng ta biết rằng, phần còn lại điều này là đơn giản. Nếu mới lần đầu tiên tôi sẽ in ra tuổi số người tôi là những gì. Nơi mà tôi chỉ nói một số người, người thứ hai, người thứ ba. Và tôi chỉ cần làm phép tính số học, để mọi người như bình thường, chúng tôi đếm từ một cho điều này chương trình, chứ không phải từ con số không. Sau đó, tôi gọi getInt, nhưng tôi lưu trữ câu trả lời trong độ tuổi từ trong ngoặc tôi. Đó là tuổi i'th trong mảng. Vì vậy, trong khi lần cuối cùng chúng tôi đã xử lý các hộp như ký tự cho tên của Zamyla, và những người khác. Bây giờ, các ô đại diện cho 32 bit, hay bốn byte trong đó chúng ta có thể lưu trữ một int, int, int. Tất cả điều đó, một lần nữa, là cùng kiểu dữ liệu. Bây giờ tôi làm điều gì đó ngớ ngẩn, như thời gian trôi qua, chỉ để biện minh cho viết chương trình này. Và sau đó xuống đây, tôi một lần nữa lặp lại trong mảng nói một năm kể từ bây giờ, số người một ý có một cái gì đó tuổi. Và để tìm ra rằng math-- tôi là, đây không phải là rất phức tạp arithmetic-- Tôi chỉ cần thêm một tuổi của họ. Chỉ cần để chứng minh, một lần nữa, điều này. Cũng giống như tôi có thể chỉ số thành một chuỗi, s, vì vậy tôi có thể chỉ vào một loạt các lứa tuổi, như thế đó. Vì vậy, nơi là điều này sẽ được tham gia với chúng tôi? Vì vậy, chúng ta sẽ thấy, cuối cùng, một vài điều trong những ngày tới. Một, tất cả thời gian này, khi viết chương trình của riêng bạn, như Mario, tham lam, tín dụng. Bạn đã nhập tên của chương trình và hit Enter. Và sau đó nhận được đầu vào của người dùng. Với getString, getInt, getLongLong, hoặc tương tự. Nhưng nó chỉ ra rằng hỗ trợ C một cái gì đó gọi là dòng lệnh lập luận, đó là sẽ để cho chúng tôi thực sự có được những lời mà bạn gõ, tại dấu nhắc nhấp nháy, sau khi tên của chương trình của bạn. Vì vậy, trong những ngày tới, bạn có thể gõ một cái gì đó như Caesar, hoặc ./caesar số 13, sau đó. Chúng tôi sẽ xem làm thế nào mà các công trình. Bởi vì trên thực tế, trong Vấn đề đặt hai, chúng tôi sẽ giới thiệu với bạn để một chút gì đó gợi nhớ của Ralphie thách thức trước đó của bản đồ. Nghệ thuật xáo trộn thông tin. Điều này, trên thực tế, rất gợi nhớ về những gì đã làm Ralphie. Đây là một ví dụ về mã hóa thuật toán gọi là ROT13, R-O-T 13. Mà chỉ đơn giản có nghĩa là xoay các chữ cái trong bảng chữ cái 13 địa điểm. Và nếu bạn làm điều đó, bạn sẽ thấy bây giờ những gì, có lẽ, một cụm từ quen thuộc. Tuy nhiên, cách mà chúng ta đang sử dụng này, cuối cùng, thường là nhiều hơn nữa. Trong P đặt hai, trong phiên bản tiêu chuẩn, bạn sẽ thực hiện một vài thuật toán mã hóa, một gọi là Caesar, một gọi là Vigenere. Cả hai đều quay thuật toán mã hóa, trong đó bằng cách nào đó bạn biến một lá thư vào một thư khác nhau. Và Caesar là siêu đơn giản. Bạn có thêm một, bạn thêm 13, hoặc một số số lượng lên đến 26. Vigenere nào đó trên một cơ sở cho mỗi thư. Vì vậy, Vigenere, như bạn sẽ thấy trong suy nghi, an toàn hơn. Nhưng vào cuối ngày, những gì bạn sẽ được thực hiện và P đặt hai, là chìa khóa mà bạn sử dụng cả hai để mã hóa và giải mã. Đề cập đến quá trình chuyển văn bản đơn giản, một số thông báo ban đầu, vào văn bản cypher, mà là một cái gì đó mã hóa. Và sau đó giải mã nó một lần nữa. Trong ấn bản của hacker, Trong khi đó, bạn sẽ có giao nhiệm vụ với một cái gì đó tương tự trong tinh thần, nơi mà chúng tôi sẽ cung cấp cho bạn một tập tin, từ một Linux điển hình, hoặc Mac, Unix hoặc máy tính được gọi là Etsy mật khẩu, trong đó có một toàn bộ loạt các tên người dùng và mật khẩu. Và những mật khẩu có tất cả được mã hóa, hoặc băm, có thể nói, đúng hơn như bạn sẽ thấy trong spec. Và phiên bản hacker sẽ thách thức bạn dùng một đầu vào như thế này, và nứt mật khẩu. Đó là, để tìm ra những gì mật khẩu của con người thực sự là. Bởi vì, trên thực tế, mật khẩu là thường không được lưu trữ trong rõ ràng, và nói chung password nên khó đoán. Đó không phải là thường xảy ra. Và những gì tôi nghĩ rằng chúng tôi muốn làm là kết luận với một vài phút liếc qua một đặc biệt sự lựa chọn tốt của mật khẩu từ một bộ phim, bạn có thể nhớ lại một cách trìu mến. Và nếu không, bạn nên thuê. [VIDEO xem lại] -Helmet, Bạn quái vật, những gì đang xảy ra? Bạn đang làm gì với con gái của tôi không? -Permit Tôi để giới thiệu bác sĩ phẫu thuật trẻ rực rỡ, Bác sĩ Phillip Schlotkin. Người đàn ông mũi vĩ đại nhất trong toàn thể vũ trụ và Beverly Hills. -Your Hoàng thân. Công việc -Nose? Tôi không hiểu. Cô ấy đã có một công việc mũi. Đó là cô ngọt ngào 16 hiện tại. Không, nó không phải là những gì bạn nghĩ. Đó là nhiều, tồi tệ hơn nhiều. Nếu bạn không cho tôi kết hợp với lá chắn không khí, Schlotkin bác sĩ sẽ cung cấp cho bạn con gái sao mũi cũ của cô. - [Hổn hển] Nooooooooooooo. Nơi mà bạn đã có được điều đó? Được rồi. Tôi sẽ nói, tôi sẽ nói. Không, Daddy, không có. Bạn không được. -Anh Bên phải thân yêu của tôi. Tôi sẽ bỏ lỡ mũi mới của bạn. Nhưng tôi sẽ không nói cho họ biết kết hợp không có vấn đề gì. -Rất Tốt. Bác sĩ Schlotkin, làm tồi tệ nhất của bạn. Niềm vui -Tôi. -Không! Chờ đợi, chờ đợi. Tôi sẽ nói cho. Tôi sẽ nói cho. -I Biết nó sẽ làm việc. Được rồi, đưa nó cho tôi. -Các Kết hợp là một. -One. -One. -Hai. -Hai. -Hai. -Ba. -Ba. -Ba. Four. Four. Four. -Five. -Five. -Five. -Vậy Sự kết hợp là một, hai, ba, bốn, năm. Đó là sự kết hợp ngu ngốc Tôi từng nghe thấy trong cuộc sống của tôi. Đó là điều mà một ngốc sẽ có hành lý của mình. Cảm ơn anh, Điện hạ của bạn. [REMOTE CLICKS] Bạn đã làm Cái gì? -I Tắt tường. Không, bạn không, bạn tắt toàn bộ phim. Chắc hẳn -I nhấn nút sai. -Vâng, Đưa nó trở lại! Đưa bộ phim trở lại! Vâng, thưa ngài! Vâng, thưa ngài. -Let Đi, Arnold. Hãy đến, Gretchen. Tất nhiên bạn biết tôi sẽ phải lập hoá đơn cho việc này. -Vâng? Nó đã làm việc? Trường hợp của vua? -Nó Làm việc, thưa ông, chúng tôi có sự kết hợp. Tuyệt. Bây giờ chúng ta có thể tận dụng mọi hơi thở cuối cùng không khí trong lành từ hành tinh Druidia. Sự kết hợp là gì? -One, hai, ba, bốn, năm. -One, hai, ba, bốn, năm? Vâng. -Điều Đó là tuyệt vời. Tôi đã có cùng kết hợp hành lý của tôi. Chuẩn bị cho 1 Spaceball khởi hành ngay lập tức. Vâng, thưa ông. -Và Thay đổi kết hợp hành lý của tôi. [ĐÓNG CỬA SOUND] [Tiếng leng keng của cửa đánh mũ bảo hiểm] -Ahh. [END IMG xem lại] DAVID J. Malan: Đó là nó cho CS50, chúng ta sẽ thấy bạn vào tuần tới. Người kể chuyện: Và bây giờ, Deep Suy nghĩ, bởi Daven Farnham. DAVEN Farnham: Mã hóa trong C khó khăn hơn rất nhiều so với Scratch. printf, Scratch là một lời nói dối. [Cười SOUNDBITE]