SPEAKER 1: Được rồi. Chào mừng trở lại. Đây là Tuần Hai trong số CS50, và chúng tôi có vậy, đến nay đã sử dụng chức năng nhưng phần lớn đưa chúng cho các cấp. Chúng tôi đã sử dụng printf trong đó có các tác dụng phụ của in ấn thứ trên màn hình. Chúng tôi đã sử dụng được-int, được thả nổi. Nhưng nếu bạn thực sự muốn tạo ra chức năng của riêng bạn, như một số bạn có thể đã bắt đầu làm cho vấn đề Set Một, mặc dù không yêu cầu nghiêm ngặt? Vâng, chúng ta hãy đi trước và xem lại mà vấn đề chỉ yêu cầu người dùng cho tên và in ấn của họ một cái gì đó trên màn hình, nhưng cố gắng yếu tố ra một số của sự tương đồng mà chúng tôi đã nhìn thấy trong mã của chúng tôi cho đến nay. Vì vậy, theo tôi có nghĩa như sau. Tôi sẽ đi trước và tạo ra một chương trình mới, chỉ cần gọi nó hello.c như bình thường. Tôi sẽ đi trước và cho bản thân mình bao gồm io.h tiêu chuẩn ở đầu trang. Tôi sẽ cũng cung cấp cho bản thân mình đánh phủ đầu các thư viện CS50 để Tôi không được mắng bởi trình biên dịch. Và bây giờ tôi sẽ đi trước và tuyên bố int, chính hiệu. Và sau đó ở đây, đây là nơi mà tôi muốn để bắt đầu thuê ngoài chức năng một số chức năng khác mà chính mình tôi sẽ viết nhưng điều đó không hiện đang tồn tại. Ví dụ, giả sử tôi muốn viết một chức năng cho phép tôi để in ra chào hỏi, dấu phẩy, và sau đó một số tên của người dùng. Thay vì tiếp tục làm printf xin chào,% s, nó sẽ không được tốt đẹp nếu , chỉ có một chức năng được gọi là không printf nhưng tên in? Vì vậy, nói cách khác, tôi muốn để có thể viết một chương trình mà không một chút một cái gì đó như thế này. Đầu tiên, tôi sẽ nói printf của bạn tên, do đó khiến người sử dụng để cung cấp cho tôi tên của mình, và sau đó tôi sẽ sử dụng các s chuỗi quen thuộc với khai báo một chuỗi. Cung cấp cho tôi một biến kiểu chuỗi, gọi nó, và cửa hàng trong đó kết quả của cuộc gọi nhận được chuỗi. Nhưng bây giờ trong tuần qua, tôi đã có hơi tediously thực hiện chào,% s / n. Và nói cách khác, chúng tôi đã nhìn thấy điều này Ví dụ một loạt các lần, và đó là một ví dụ tầm thường bởi vì có chỉ là một dòng mã để nó thực sự không phải là một việc lớn để tiếp tục gõ vào một lần nữa. Nhưng giả sử rằng dòng mã này thực sự đã trở thành một gánh nặng, và nó không phải là một dòng mã nhưng nó là 10 dòng code trong một vài tuần từ bây giờ, và bạn chỉ nhận được mệt mỏi sao chép và dán hoặc gõ lại cùng một mã. Nó sẽ không được tốt đẹp thay vì làm printf hello,% s và vv, nó sẽ không được tốt đẹp nếu có chỉ một chức năng gọi tên in mà có một đối số - nói cách khác, nó có đầu vào - và sau đó dấu chấm phẩy. Vì vậy, chức năng, nó sẽ không được tốt đẹp nếu đã tồn tại? Sau đó, tôi sẽ không phải lo lắng về những gì printf là, những gì% s và tất cả các những sự phức tạp mà không tất cả những gì thú vị. Họ là hữu ích. Vì vậy, tên in, không may, không phát minh ra một số 40 năm cộng với trước. Không ai nghĩ để viết nó. Nhưng đó là vẻ đẹp của việc có một ngôn ngữ lập trình, giống như trong Đầu bạn có thể xác định khối tùy chỉnh, vì vậy trong C và hầu hết bất kỳ ngôn ngữ, có thể bạn xác định chức năng của riêng bạn, có thể bạn xác định chức năng của riêng bạn. Vì vậy, mặc dù chúng ta có được chính bởi tự động miễn phí, chúng ta có thể khai báo chức năng của chúng ta. Vì vậy, tôi sẽ làm cho một số phòng lên đây lên hàng đầu, và tôi sẽ tuyên bố của tôi chức năng riêng đó là sẽ tìm một hơi lạ lúc đầu tiên nhưng chúng tôi sẽ trở trở lại này trước khi dài. Tôi sẽ nói có hiệu lực, do đó cho thấy chức năng này không một cái gì đó, có một tác dụng phụ, nhưng nó không trả lại một cái gì đó với tôi trong các cùng một cách mà có được int hoặc nhận được chuỗi chính nó. Và tôi sẽ cung cấp cho chức năng này một tên của tên in, và tôi sẽ xác định rằng anh chàng này là sẽ mất một chuỗi, và tôi sẽ gọi đó là tên chuỗi. Tôi có thể gọi nó là bất cứ điều gì tôi muốn, nhưng tôi muốn mã của tôi là tự tài liệu. Nói cách khác, nếu một trong những bạn đã mở tập tin này và đọc nó, bạn có thể loại suy luận từ tên của đầu vào những gì vai trò của nó là nghĩa vụ phải chơi. Và bây giờ sau đó, tôi sẽ mở xoăn cú đúp và đóng xoăn cú đúp, và do đó nhận thấy tôi đã theo cùng hoa văn trên dòng bốn đến bảy như Tôi đã làm theo trong một tuần tốt cộng với tại giữa, nói rằng, dòng chín 14 mà sáng tác chính. Nói cách khác, in tên là chức năng khác. Bây giờ, trình biên dịch sẽ không biết gọi điều này tự động bởi vì tôi thật sự chỉ phát minh ra nó, nhưng nó sẽ biết vẫn gọi chính tự động, và sau đó tất nhiên trong dòng 13, tôi gọi chức năng của riêng tôi. Và bởi vì tôi đã tuyên bố rằng chức năng trên đường bốn trước khi chính, điều này sẽ dạy cho các trình biên dịch những gì giá, unquote, "tên in" có nghĩa là và những gì nó phải làm. Vì vậy, tôi đang sắp xếp của tạo cho nó một tùy chỉnh mới chặn trong bối cảnh, nói, Scratch. Vì vậy, ở đây, tôi có thể đặt là rất phổ biến hoặc mẫu định kỳ của mã tôi giữ viết trong lớp, printf % S hello,% s / n ", - làm những gì tôi muốn đặt ở đây? S? Vì vậy, tôi muốn đặt tên trong bối cảnh này. Vì vậy, nhận thấy một chút của một sự phân đôi ở đây. Bởi vì tôi tuyên bố chức năng của riêng tôi và tôi đã có phần tùy tiện gọi nó in tên, và vì tôi đã quy định trong dấu ngoặc đơn rằng điều này chức năng có một đối số, loại mà là một chuỗi - vì vậy nó là một từ hoặc cụm từ hoặc một cái gì đó như thế - và Tôi gọi điện thoại mà tên tham số, mà có nghĩa là chỉ có duy nhất đó là trong phạm vi, có thể nói, là tên. S chỉ tồn tại giữa những gì hai dấu ngoặc nhọn, khóa học nào? Cũng thực sự, giống như dòng 10 thông qua 14, vì vậy giống như hôm thứ hai có thể không sử dụng S, nhưng những gì tôi có thể làm là vượt qua S vào tên in. In tên chỉ để xảy ra để cho nó một bí danh, bí danh, biệt hiệu, gọi đó là tên, và bây giờ sử dụng nó trong dòng này. Vì vậy, bây giờ hãy để tôi tiết kiệm này, thu nhỏ. Hãy để tôi đi trước và thực hiện chào. Có vẻ tốt. Không nhổ ra bất kỳ lỗi nào. . / Hello Enter. Tên tôi là gì? David. Và chào David. Vì vậy, không phải tất cả là thú vị, nhưng chỉ nghĩ rằng bây giờ. Bây giờ bạn có cùng thành phần như chúng tôi đã làm trong Scratch để thực hiện chức năng của chúng ta. Nhưng có một chút của một Gotcha. Giả sử rằng tôi đã không thực sự nghĩ này thông qua và tôi thực sự không thực sự suy nghĩ về nó viết có chức năng xuống đây. Cảm thấy hoàn toàn hợp lý. Trong Scratch không có khái niệm vị trí trong kịch bản của bạn. Bạn có thể đưa lên đây, lên đây, lên đây, và nó có thể bắt đầu để tìm một chút lộn xộn nếu bạn không đẻ nó ra gọn gàng, nhưng nó không vấn đề mà thể chất các kịch bản là trên màn hình. Thật không may trong C - và điều này là không giống như các ngôn ngữ như Java và Python và những người khác mà bạn có thể quen thuộc với - không may trong C, để không quan trọng bởi vì xem những gì sẽ xảy ra bây giờ. Các chức năng mặc định đó sẽ để thực hiện là, tất nhiên, chính. Chính là sẽ gọi tên in trên dòng tám, nhưng không may, trình biên dịch sẽ không biết rằng tên in tồn tại cho đến khi nó được cho dòng 11, mà tiếc là sẽ là quá muộn. Vì vậy, chúng ta hãy làm cho hello. Và bây giờ chết tiệt, hai lỗi phát sinh. Vì vậy, bây giờ hãy để tôi di chuyển đến rất đầu tiên, như chúng tôi luôn luôn nên làm, và nhận thấy rằng nó hét lên với em, "Khai tiềm ẩn của chức năng in tên. " Vì vậy, chúng tôi đã nhìn thấy tin nhắn này trước đây, khai tiềm ẩn của chức năng. Có khi nào chúng ta thấy rằng loại lỗi? Khi tôi đã không bao gồm thư viện. Nếu tôi quên cs50.h và tôi sẽ nhận được mắng cho có được chuỗi hoặc nhận được int. Nhưng trong trường hợp này, chức năng này in tên không có trong thư viện, phải không? Đó là nghĩa đen trong tập tin này, vì vậy những gì thực sự là vấn đề? Cũng không may trong C, nó sẽ đưa bạn nên vô cùng nghĩa rằng nếu bạn muốn có một chức năng được gọi tên để in tồn tại, bạn có phải thực hiện có chức năng ở trên cùng của bạn code để nó có thể truy cập để giảm chức năng, nhưng thẳng thắn, mà trở thành cẩu thả rất nhanh chóng. Cá nhân, tôi thích đặt chính đầu tiên bởi vì sau đó nó rất rõ ràng những gì này chương trình thực hiện ở cái nhìn đầu tiên. Và cộng thêm, bạn có thể nhận được vào góc lạ Trường hợp nếu x muốn gọi y nhưng y có thể gọi x, bạn chỉ cần thể chất không thể thực sự đặt một ở trên kia. Nhưng nó quay ra trong C, chúng ta có thể giải quyết việc này rất đơn giản. Tôi sẽ đặt một chút không gian ở đây, và tôi chỉ cần đi để đánh phủ đầu, mặc dù hơi dư thừa, sẽ dạy cho các trình biên dịch rằng có tồn tại một chức năng gọi tên in, phải mất một chuỗi, và tôi sẽ gọi nó tên dấu chấm phẩy. Vì vậy, điều này bây giờ trong dòng bốn, mà chúng tôi đã không nhìn thấy trước, là một tuyên bố của một tên in chức năng, nhưng nó chỉ một lời hứa rằng chức năng này sẽ cuối cùng đã được xác định, cuối cùng được thực hiện. Điều này bây giờ tôi có thể để lại một mình vì giờ đây là định nghĩa, thực hiện, sắp xếp của những dặm cuối cùng việc thực hiện này chức năng cụ thể. Vì vậy, thẳng thắn đó là ngu ngốc, nó gây phiền nhiễu, nhưng đây là cách C, và nó bởi vì nó sẽ đưa bạn rất nghĩa đen và, như một máy tính thẳng thắn nên, chỉ thực hiện chính xác những gì bạn yêu cầu làm, và để đặt hàng là rất quan trọng. Để giữ cho rằng trong tâm trí và một lần nữa, bắt đầu nhận thấy sự tái phát của các mô hình. Tỷ lệ cược là bạn sẽ, nếu bạn có không đã có, bắt đầu gặp phải thông điệp như thế này mà ở cái nhìn đầu tiên dường như hoàn toàn khó hiểu, nhưng nếu bạn bắt đầu để tìm các từ khóa như "Tuyên bố ngầm," đề cập đến một chức năng trong trường hợp này - và thẳng thắn, bạn đôi khi thậm chí có được một màu xanh lá cây biểu tượng cà rốt cho bạn biết nơi vấn đề có thể là - bạn có thể bắt đầu làm việc theo cách của bạn thông qua nhưng thông báo lỗi không nhìn thấy. Bất kỳ câu hỏi về văn bản của bạn chức năng riêng theo cách này? Chúng ta hãy làm một cái gì đó mà là một ít hấp dẫn hơn. Thay vì chỉ làm một cái gì đó mà có một tác dụng phụ của in ấn, hãy để tôi đi trước và lưu một tập tin mới, và chúng tôi sẽ gọi positive.c này, mặc dù nó sẽ là một chút khác nhau so với thời gian qua. Và lần này, tôi muốn tái thực hiện Ví dụ positive.C lần cuối cùng, mà được buộc người sử dụng để cung cấp cho tôi một số nguyên dương. Nhưng tôi đã phải sử dụng được int thời gian qua. Nó sẽ không được tốt đẹp nếu có một chức năng gọi được int tích cực rằng tôi chỉ có thể thuê ngoài này phần chức năng để? Vì vậy, sự khác biệt ở đây là chúng tôi sẽ thực hiện được int tích cực, nhưng không giống như tên in trong đó có một tác dụng phụ - đó không trở về một cái gì đó với tôi như một số hoặc một chuỗi - được int tích cực được, tất nhiên, sẽ trở lại, hy vọng, một int tích cực. Vì vậy, chúng ta hãy làm điều này. Bao gồm cs50.h, Bao gồm các tiêu chuẩn io.h. Int void main. Và bây giờ ở đây, tôi sẽ đi trước và chúng ta hãy nói int, gọi nó là n, bằng được int tích cực. Và cũng giống như có int đã tồn tại bởi vì các nhân viên đã viết nó, tôi sẽ giả định cho thời điểm mà có được int tích cực tồn tại, và bây giờ tôi sẽ đi trước và nói printf, cảm ơn cho% i / n ", n. Vì vậy, bây giờ nếu tôi biên dịch chương trình này, những gì sẽ xảy ra trong thiết bị đầu cuối của tôi cửa sổ ở dưới cùng của màn hình? Tôi sẽ có thể nhận được rằng cùng một lỗi như trước. Vì vậy, hãy cố gắng này. Thực hiện tích cực. Và một lần nữa, tuyên bố ngầm chức năng, có được int tích cực. Vì vậy, chúng ta có thể giải quyết điều này trong một vài cách. Tôi sẽ giữ nó đơn giản và chỉ đưa tuyên bố của tôi lên đây và nhận được int tích cực. Tôi cần chữ ký cái gọi là. Chữ ký chỉ đề cập đến tính thẩm mỹ của Dòng đầu tiên của chương trình. Vì vậy, những gì cần được tích cực int trở lại? Vì vậy, một int. Tôi có nghĩa là lý tưởng, nó sẽ trở lại một cái gì đó như int tích cực, nhưng mà không tồn tại. Chúng tôi đã không nhìn thấy rằng trong số các dữ liệu của chúng tôi loại, vì vậy chúng tôi phải đối phó với các thực tế là chúng ta có rất ít các loại dữ liệu để làm việc với. Nhưng chúng ta có thể trả lại một int và chỉ tin tưởng rằng nó sẽ được tích cực. Nó sẽ được gọi là được int tích cực. Và bây giờ làm thế nào về lập luận của mình? Liệu nó có bất kỳ đầu vào? Liệu nó cần bất kỳ đầu vào? Vì vậy, nó không cần biết trước bất cứ điều gì. Nhận được chuỗi không, có được int không. Printf không - nó cần phải có một số đầu vào thông qua vào nó - và tên in cần một số đầu vào, nhưng được int tích cực không. Vì vậy, tôi sẽ rõ ràng cho trình biên dịch vô hiệu. Void là sự vắng mặt của bất cứ điều gì khác. Vì vậy, khoảng trống có nghĩa là không có gì đang xảy ra bên trong những dấu ngoặc đơn, dấu chấm phẩy. Và bây giờ ở dưới cùng của tập tin của tôi - và một lần nữa, tôi chỉ là loại hậu môn đây chính đặt ở đầu trang, trong đó là thực hành tốt bởi vì theo cách này, bất cứ lúc nào bạn hay một ai đó mở tập tin của bạn, chức năng là phải có. Bạn có thể nhảy từ một hình vuông. Vì vậy, bây giờ tôi sẽ lặp lại điều này, được tích cực int có hiệu lực, nhưng tôi không sẽ đánh một dấu chấm phẩy bây giờ. Tôi sẽ mở dấu ngoặc nhọn, và bây giờ tôi cần phải vay một số ý tưởng từ thứ hai. Vì vậy, khi bạn nhớ lại, chúng tôi đã làm một cái gì đó thích làm như sau trong khi một cái gì đó là sự thật. Và tôi đã làm những gì? Tôi đã làm một cái gì đó như cho tôi một số nguyên dương, chút chút của một dấu nhắc. Tôi có thể sử dụng bất kỳ từ nào tôi muốn. Và sau đó tôi sử dụng những gì? Int n bằng được int, không có đối số cho nó. Và nhận thấy sự khác biệt. Khi bạn gọi một chức năng, khi bạn sử dụng một chức năng, bạn không đặt trong khoảng trống. Bạn chỉ làm điều đó khi tuyên bố một chức năng, giảng dạy về sự thông dịch nó nên mong đợi. Vì vậy, bạn không cần phải đặt làm mất hiệu lực có chính mình. Và bây giờ tình trạng của tôi là gì? Vâng, n là không bằng tích cực, nhưng đó chỉ là mã giả. Vì vậy, làm thế nào để thể hiện điều này sạch hơn? Vì vậy, ít hơn hoặc bằng số không. Vì vậy, một lần nữa, nhận thấy bạn có thể làm ít hơn hoặc bằng. Mặc dù đó là hai riêng biệt biểu tượng, bạn có thể làm điều đó trên bàn phím của bạn như vậy. Nhưng vẫn có một lỗi Tôi hơi say lên lần cuối cùng quá. Tôi phải khai báo - chính xác. Tôi phải khai báo n bên ngoài của vòng này. Vì vậy, tôi cần phải đặt n lên đây, và tôi không muốn khai báo lại nó trong đây vì sợ rằng tôi nhận được một biến mới. Tôi chỉ muốn chỉ định một giá trị trong đây. Và bây giờ tôi không hoàn toàn thực hiện ở đây. Hãy để tôi có được trước bản thân mình và giả vờ như tôi đang làm. Thực hiện tích cực, và bây giờ có một lỗi mới. Kiểm soát đến cuối không vô hiệu chức năng. Vì vậy, thông báo lỗi mới, nhưng nếu bạn loại trêu chọc nhau của mỗi từ, nó có thể gợi ý về những gì sai. Kiểm soát. Kiểm soát chỉ có nghĩa là trình tự hoạt động trong một chương trình. Máy tính là trong kiểm soát và một cái gì đó đã đi sai. Vì vậy, nó đạt đến cuối một chức năng không có hiệu lực. Chức năng đó là những gì rõ ràng đề cập đến? Chức năng gì là không trống rỗng? Do đó, có int tích cực, và một chút khó hiểu trong rõ rằng, đó là loại trống. Nó có một đặc điểm kỹ thuật của khoảng trống cho nó đối số, nhưng sản lượng của nó sẽ được loại n. Vì vậy, từ trên bên trái là cái gọi là kiểu trả về. Từ bên trong ở đây là số không hoặc nhiều đối số rằng một chức năng có. Vì vậy, những gì tôi cần phải làm gì? Tại thời điểm này trong mã của tôi, dòng 21 nơi dấu nhắc nhấp nháy là, tôi có một int tích cực trong của biến được gọi là n. Làm thế nào để cho nó trở lại chính? Nghĩa đen. Return n dấu chấm phẩy. Vì vậy, cũng giống như Colton trở lại một mảnh giấy với một câu trả lời cho tôi bằng cách thả mảnh giấy trong màu đen nhỏ hộp trên bàn, để làm điều đó trong mã, bạn có nghĩa là chỉ cần viết, trở lại n, và nó giống như Colton đã đưa cho tôi một cái gì đó về vật lý. Trong trường hợp này, những gì đang xảy ra là có được int tích cực là có bàn tay trở lại những gì có lẽ là một tích cực số nguyên cho ai? Trường hợp nào giá trị kết thúc? Mà kết thúc trong biến này, n, và sau đó chúng tôi tiến hành với dòng chín. Vì vậy, nói cách khác, theo thứ tự các hoạt động, chương trình này bắt đầu thực hiện, và trình biên dịch nhận ra, oh, bạn muốn thư viện? Hãy để tôi đi lấy bất cứ điều gì trong đó. Oh, bạn muốn thư viện IO tiêu chuẩn? Hãy để tôi đi lấy bất cứ điều gì trong đó. Những gì các trình biên dịch nói với bản thân khi nó chạm đường bốn? Oh, bạn hứa sẽ thực hiện chức năng được gọi là chiều hướng tích cực, nhưng chúng tôi sẽ lấy lại cho rằng sau, một cái gì đó dọc theo các dòng. Int main khoảng trống chỉ có nghĩa là đây là ruột của chương trình của tôi. Dòng bảy là chỉ một cú đúp xoăn. Dòng tám được nói trên bên trái, cho tôi 32 bit cho một số nguyên, gọi nó là n. Ở phía bên tay phải, nó nói được int tích cực. Bây giờ chúng ta hãy tạm dừng câu chuyện bởi vì bây giờ Tôi không tiếp tục di chuyển con trỏ của tôi xuống. Con trỏ của tôi bây giờ đi xuống đây vì bây giờ có được int tích cực thực hiện. Int n được khai báo. Làm như sau. Printf mang lại cho tôi một số nguyên dương. Nhận được một int từ người sử dụng, lưu trữ nó trong n, và có thể làm điều này một lần nữa và một lần nữa. Vòng này có nghĩa là mã điều này có thể thực hiện lên xuống như thế này nữa và một lần nữa, nhưng khi người sử dụng cuối cùng hợp tác và mang lại cho tôi một tích cực int, tôi nhấn đường 21, mà điểm số được trả lại, và đó là một Tôi nên làm nổi bật bây giờ? Chín. Kiểm soát, có thể nói, trả về xếp hàng chín. Đó là dòng đó là bây giờ phụ trách. Vì vậy, đó là những gì đã xảy ra tất cả thời gian này bên dưới mui xe, nhưng khi chúng ta đã sử dụng các chức năng như printf hoặc thậm chí có được chuỗi mà người khác đã viết cho bạn, kiểm soát đã được trao dòng mã ra để người khác của từng dòng. Nó chỉ là chúng ta không thể nhìn thấy nó và chúng tôi có thể không thực sự mô tả nó trong này chương trình vì nó là trong một số khác tập tin trên ổ đĩa cứng không biết rằng chúng ta. Vì vậy, chúng ta hãy thực sự biên dịch và chạy này ngay bây giờ. Thực hiện tích cực. Biên dịch, đó là sự tiến bộ. . / Tích cực. Cung cấp cho tôi một số nguyên dương. Hãy là khó khăn. Tiêu cực 1. Không. Chúng ta hãy cho nó 50. Cảm ơn cho 50, và do đó kiểm soát bây giờ đã trở lại. Mọi câu hỏi, sau đó, về điều đó? Yeah? [Nghe được]. Nói một lần nữa. Oh, câu hỏi hay. Vì vậy, bạn có thể nhận thấy một song song ở đây là Tôi là loại cắt một góc trên. Trong dòng 12, tôi nói, có được int tích cực trả về một int, nhưng bởi chính logic, bây giờ nó đứng vào lý do mà trong dòng sáu, tôi nói rằng lợi nhuận chính một int, nhưng những gì chúng tôi có bao giờ có trong bất cứ chương trình của chúng tôi? Chúng tôi chưa bao giờ có đề cập đến này trở lại từ khóa. Vì vậy, nó chỉ ra rằng trong C, ít nhất các phiên bản của nó mà chúng ta đang sử dụng được thực hiện trong năm 1999, về mặt kỹ thuật, đây là xảy ra cho bạn tự động. Bất cứ lúc nào bạn thực hiện một chương trình và bạn thực hiện một chức năng được gọi là chính, có chức năng sẽ trở lại bằng bởi mặc định nếu bạn không nói cách khác, và không chỉ là một quy ước. Thế giới trả về số không do đó chỉ ra rằng tất cả là tốt, hiệu quả lại cho chúng tôi với bốn tỷ điều có thể có thể đi sai do đó nếu chúng ta trở lại một, mà có thể biểu hiện một mã có nghĩa này điều đã xảy ra. Chúng tôi có thể trở lại hai, có nghĩa là điều này khác đi sai. Chúng ta có thể trả về bốn tỷ đồng, có nghĩa là điều này khác đi sai. Và nếu bây giờ bạn suy nghĩ về riêng của bạn PC hoặc Mac, bạn có thể nhớ lại rằng đôi khi bạn nhận được thông báo lỗi khó hiểu từ phần mềm mà bạn đang sử dụng, và đôi khi nó có một con người mô tả thân thiện, nhưng có thường là một mã hoặc một số trên màn hình? Nếu điều này không đến với tâm trí, chỉ cần giữ một mắt ra cho nó. Đó thường là những gì những mã số được đề cập đến. Họ đang có trong Microsoft Word và các chương trình khác để nếu quý vị nộp báo cáo lỗi với các công ty, bạn có thể nói với họ, oh, tôi đã nhận lỗi số 45. Và một số lập trình lại các công ty có thể nhìn thấy trong mình mã và nói, ồ, đó là bởi vì tôi đã thực hiện lỗi này và đó là lý do tại sao người sử dụng nhận được tin nhắn này. Nhưng thẳng thắn mà nói, nó chỉ là một chút mất tập trung và một chút buồn tẻ đến kết luận rằng, ít nhất là trên của chúng tôi vài chương trình đầu tiên, vì vậy chúng tôi đã được bỏ qua nó. Nhưng tất cả các thời gian này mỗi một trong những bạn chức năng chính đã bí mật có này dòng tự động thêm vào cho bạn bằng cách trình biên dịch, chỉ theo quy ước để giúp bạn tiết kiệm thời gian. [Nghe được]. Bạn không cần phải bao gồm nó trong chính. Đó là tốt. Bạn không cần phải bao gồm nó nếu bạn đã thực hiện một chức năng như thế này. Nếu không bằng phẳng chức năng ra sẽ không làm việc. Nhưng trong chính, nó không cần thiết. Trong một hoặc hai tuần, chúng tôi sẽ bắt đầu nhận được thành thói quen mà khi chúng tôi muốn bắt đầu nghĩa lỗi. Thực sự tốt câu hỏi. Phá vỡ bằng lời nói như vậy nhanh chóng đề cập đến thứ sáu này, chúng tôi sẽ không được ăn trưa cho mỗi gia nhập, nhưng chúng tôi sẽ được ăn tối với một số sinh viên và nhân viên. Nếu bạn muốn tham gia với chúng tôi, cảm thấy miễn phí để đi đến cs50.net/rsvp. 06:00 thứ sáu này. Không gian là, như mọi khi, hạn chế, nhưng chúng tôi sẽ tiếp tục làm những trên gần hàng tuần nếu không gian hết tuần này. Vì vậy, các cliffhanger mà chúng ta rời đi trên Thứ hai là chuỗi có thể thực sự được lập chỉ mục vào, mà chỉ có nghĩa là bạn có thể có được ở các nhân vật đầu tiên, nhân vật thứ hai, nhân vật thứ ba và vv, bởi vì bạn có thể hiệu quả suy nghĩ của một chuỗi, như xin chào, như là trong trường hợp này năm thư bên trong hộp. Và bạn có thể nhận được ở mỗi người hộp với những gì chúng tôi đã làm cú pháp giới thiệu vào thứ hai? Những dấu ngoặc vuông trên bàn phím của bạn. Điều đó chỉ có nghĩa là đi đến vị trí số không. Chúng tôi bắt đầu đếm từ số không, vì vậy khung không có nghĩa h, một khung nghĩa tử, và vv. Và vì vậy tất cả thời gian khi chúng tôi đã được sử dụng dây và gõ "hello" và "thế giới" và những thứ khác trên màn hình, nó được lưu trữ trong hộp như thế này. Và có nhiều phán đoán. Những gì mỗi ô đại diện cho thể chất bên trong máy tính của bạn? [Nghe được]. Xin lỗi? Ký tự. Vì vậy, một nhân vật, chắc chắn trong trường hợp dây, và một nhân vật chỉ là tám bit hoặc một byte. Vì vậy, bạn có thể ít nhất là mơ hồ quen thuộc với thực tế là bạn máy tính có bộ nhớ. Nó có hai loại bộ nhớ ít nhất. Là một trong những đĩa cứng nơi bạn tiết kiệm thứ vĩnh viễn, và đó là thường lớn, do đó bạn có thể có phim và âm nhạc và vv. Sau đó, bạn có một loại bộ nhớ được gọi là bộ nhớ RAM, R-A-M, truy cập ngẫu nhiên Bộ nhớ, và đây là loại bộ nhớ được sử dụng khi máy tính của bạn chạy nhưng nếu bạn bị mất điện hoặc của bạn pin chết, bất cứ điều gì được lưu trữ trong RAM biến mất nếu bạn bị mất điện hoàn toàn bởi vì nó không dai dẳng. Bạn thường có, những ngày này, một buổi biểu diễn của nó, hai hợp đồng biểu diễn, có thể nhiều hơn. Và xu hướng tăng giá của bộ nhớ RAM là nó nhiều nhiều, nhanh hơn nhiều so với các ổ đĩa cứng hoặc thậm chí ổ đĩa trạng thái rắn những ngày này, nhưng nó thường đắt hơn rất bạn có ít hơn của nó. Vì vậy, cuộc trò chuyện ngày hôm nay thực sự đề cập bộ nhớ RAM, mà loại bộ nhớ chỉ tồn tại trong khi có điện được đưa vào máy tính của bạn. Vì vậy, khi bạn gõ trong H-E-L-L-O, Enter trên bàn phím, H đang diễn ra trong một byte bộ nhớ RAM, E đang diễn ra trong một byte RAM, như là phần còn lại của từ đó. Vì vậy, nhớ lại những gì chúng tôi có thể làm thời gian qua là này. Hãy để tôi đi trước và mở tập tin mà chúng ta gọi là string.c, và nhớ lại nó nhìn một chút một cái gì đó như thế này. Hãy để tôi thực sự quay trở lại và thay đổi nó chính xác những gì nó trông giống như, chiều dài chuỗi s. Vì vậy, nhìn vào chương trình ở đây. Chúng tôi bao gồm các thư viện CS50 để chúng tôi có thể sử dụng được chuỗi. Chúng tôi bao gồm tiêu chuẩn io.h vì vậy chúng tôi có thể sử dụng printf. Tại sao chúng tôi bao gồm string.h? Này là mới vào thứ hai. Vì vậy, chúng tôi muốn chiều dài chuỗi. Str leng. Người quyết định năm trước, chúng ta hãy chỉ được gọn gàng. Thay vì gọi đó là "chiều dài chuỗi," hãy gọi nó là "str leng" và để cho các hình thế giới mà ra, và vì vậy đó là những gì chúng ta có thể truy cập với string.h. Rất quen thuộc. Rất quen thuộc. Rất quen thuộc. Đây là một chút mới. Trong dòng 22 - và chúng tôi sẽ trở lại này, nhưng bây giờ biết - và bạn sẽ chỉ biết điều này từ việc đọc tài liệu hoặc nếu bạn biết C đã - nhận được chuỗi đôi khi có thể vít lên. Nếu người sử dụng thực sự đối lập hoặc bất hợp tác và người đó chỉ không gõ bất cứ điều gì vào bàn phím hoặc loại quá nhiều vào bàn phím mà nó lấn át bộ nhớ của máy tính, trong lý thuyết, có được chuỗi có thể trở lại một cái gì đó khác hơn là một chuỗi ký tự. Nó có thể trả về một giá trị đặc biệt được gọi là NULL trong tất cả các mũ, N-U-L-L, và đây là chỉ là một cái gọi là giá trị trọng điểm. Đó là một giá trị đặc trưng một cái gì đó không hay xảy ra trong trường hợp này. Nó là sự vắng mặt của một chuỗi. Vì vậy, vô giá trị tôi đang kiểm tra đơn giản như vậy đó, dài truyện ngắn, str leng và chức năng khác đi kèm với C, nếu họ mong đợi một chuỗi nhưng bạn vượt qua chúng sự vắng mặt của một chuỗi, nếu bạn vượt qua họ NULL, máy tính hoặc các chương trình chỉ sẽ sụp đổ hoàn toàn. Nó sẽ treo. Nó sẽ ném lên một số thông báo lỗi. Những điều xấu sẽ xảy ra. Vì vậy, mặc dù điều này vẫn còn không được xác định rõ - điều này sẽ có ý nghĩa hơn trong một tuần hoặc hai - trong dòng 22, đây chỉ là một ví dụ về tự kiểm tra lỗi phòng thủ chỉ trong trường hợp một thời gian trong một triệu điều gì sai, tại ít nhất là chương trình của tôi sẽ không sụp đổ. Vì vậy, nếu anh không bằng một cái gì đó xấu, Tôi có điều này cho vòng lặp, và điều này là nơi chúng tôi đã có khác đoạn mới của cú pháp. Tôi có một vòng lặp lặp lại từ không trên lên đến độ dài của s. Và sau đó ở đây, tôi là một in ra s khung tôi, nhưng tại sao tôi sử dụng% c tất cả đột nhiên thay vì% thậm chí còn dù s là một chuỗi? Đó là một nhân vật, phải không? S là một chuỗi, nhưng s khung một cái gì đó, s khung i Trong đó i là số không hoặc một hoặc hai, đó là một cá nhân nhân vật trong chuỗi, và do đó, cho rằng, printf cần phải được thông báo rằng nó thực sự là một nhân vật mong đợi. Và sau đó nhớ lại, những gì đã làm điều này chương trình thực sự làm gì? In nó ra trong cột. Vâng, chính xác. Nó chỉ in từ mà tôi gõ một cột, một ký tự trên mỗi dòng. Vì vậy, chúng ta hãy xem này một lần nữa. Vì vậy, làm cho chuỗi. Biên soạn OK. . / Chuỗi. Hãy để tôi gõ trong H-E-L-L-O, Enter, và thực sự tôi có được nó, mỗi dòng. Vì vậy, hãy để tôi làm một tối ưu hóa ở đây. Nếu bạn nghĩ về nó, đặc biệt là nếu bạn đã lập trình trước, có cho là một sự kém hiệu quả trong dòng 24. Nói cách khác, nó không nhất thiết thiết kế tốt nhất. Đơn giản, ít nhất một lần bạn nhớ những gì str leng, nhưng nó làm điều gì đó ngu ngốc có khả năng. Những gì mà có thể được? [Nghe được]. Chính xác. Nó kiểm tra độ dài của s mỗi lần duy nhất mặc dù H-E-L-L-O là luôn luôn đi là năm nhân vật. Mỗi khi qua vòng lặp này, năm không được thay đổi. Tôi có thể incrementing tôi, nhưng những gì là chiều dài của s trên mỗi lặp đi lặp lại của vòng lặp này? Đó là năm, đó là năm, đó là năm, và nhưng dù sao tôi yêu cầu này câu hỏi một lần nữa và một lần nữa và một lần nữa. Bây giờ mà nói, máy tính là như vậy damn nhanh, không ai sẽ nhận thấy một sự khác biệt trong trường hợp này, nhưng các loại các quyết định thiết kế nghèo có thể bắt đầu tăng lên nếu trình biên dịch tự không cố gắng để sửa lỗi này cho bạn mà nó thường sẽ không, tại ít nhất là trong thiết bị. Vì vậy, tôi sẽ làm điều này. Tôi sẽ thêm một dấu phẩy sau biến đầu tiên của tôi, tôi. Tôi sẽ cung cấp cho bản thân mình khác biến, gọi đó là n, chỉ bằng cách ước cho con số, và sau đó tôi sẽ gán n giá trị của chuỗi chiều dài của s. Và sau đó tôi sẽ thay đổi tình trạng của tôi là những gì? Tôi sẽ thay đổi tình trạng của tôi để trong khi tôi là nhỏ hơn n. Vì vậy, bây giờ, bao nhiêu lần tôi kiểm tra độ dài của s? Một lần, nhưng đó là OK để kiểm tra đối với tôi n một lần nữa và một lần nữa bởi vì bây giờ những giá trị không thực sự thay đổi. Bây giờ cho bây giờ, chỉ biết rằng bất cứ lúc nào bạn gọi một chức năng, có một chút trên cao, không đủ để ngăn cản bạn thực sự từ bao giờ sử dụng chức năng, nhưng chắc chắn khi có một dòng mã như vậy - và các dòng sẽ nhận được thú vị hơn trước dài - nơi có một cơ hội để suy nghĩ, nếu tôi gõ mã này, bao nhiêu thời gian nó sẽ thực hiện? Bạn sẽ bắt đầu thấy theo thời gian thực hiện các chương trình của bạn có thể thực sự thay đổi. Trong thực tế, một trong những vấn đề đặt ra chúng tôi đã thực hiện trong năm qua liên quan đến triển khai thực hiện, như những gì bạn thấy tuần không, kiểm tra chính tả, nhưng một kiểm tra chính tả được thiết kế để hỗ trợ một từ điển của 150.000 cộng từ mà chúng tôi cung cấp cho các bạn. Bạn sẽ phải viết mã tải những từ đó vào bộ nhớ RAM, vì vậy vào hộp như chúng ta đã thấy trên màn hình một lúc trước, và sau đó nhanh như bạn có thể, bạn cần để có thể trả lời một câu hỏi về hình thức, là từ này sai chính tả? Từ này được viết sai chính tả? Từ này được viết sai chính tả? Và trong một cái gì đó giống như những gì chúng tôi đã thực hiện trong năm qua là biến nó thành, mặc dù trên một lựa chọn trong cơ sở tùy chọn, một cạnh tranh của các loại, trong đó sinh viên sử dụng bộ nhớ RAM ít hơn và ít hơn thời gian, chu kỳ CPU ít hơn, kết thúc nổi lên vào đầu một chút Ban lãnh đạo hoặc xếp hạng mà chúng tôi đặt trên trang chủ của khóa học như chúng tôi đã thực hiện trong năm qua. Vì vậy, một lần nữa, hoàn toàn tùy chọn, nhưng điều này nói chuyện với những cơ hội thiết kế đó là trước khi chúng tôi bắt đầu xây dựng trên một số trong những khối xây dựng cơ bản. Vì vậy, hãy để tôi quay trở lại sơ đồ này cho chỉ là một thời điểm và tiết lộ một chút một cái gì đó hơn. Điều này thực sự là một chuỗi, và chúng tôi đã thực hiện lợi thế của một vài thư viện, io.h tiêu chuẩn trong đó có - Printf. Printf, trong số những thứ khác. cs50.h, đã được int và nhận được chuỗi và vv, string.h, mà có str leng. Nhưng hóa ra có thêm một. Thành thật mà nói, có rất nhiều và rất nhiều tiêu đề các tập tin khai báo các chức năng cho các thư viện, nhưng ctype.h này là thực sự có được một chút thuận lợi vì tôi sẽ đi trước và thực hiện một chương trình khác ở đây. Hãy để tôi đi trước và mở ra một cái gì đó Tôi đã viết trước được gọi là capitalize.c, và chúng ta hãy xem làm thế nào các công trình này. Chú ý rằng tôi đang sử dụng, trong phiên bản này của nó, ba tác phẩm quen thuộc. Chú ý rằng trong dòng 18, tôi nhận được một dòng văn bản. Thông báo ở dòng 21, tôi tuyên bố rằng các mã sau đây sẽ tận s, bất cứ điều gì người dùng gõ trong, và làm thế nào tôi làm điều đó? Vâng, tôi đang tham gia - bài học kinh nghiệm từ lần cuối cùng - Tôi tuyên bố tôi và n và lặp lại trên các ký tự trong chuỗi. Và sau đó khối này là gì mã trong dòng 24 đến 27 làm trong điều khoản của layman? Chữ thường thư trở lại. Chính xác. Nếu s khung tôi - vì vậy nếu thứ i nhân vật, mà là một cụ thể char trong chuỗi, lớn hơn hoặc bằng chữ thường và một - nhớ lại rằng ký hiệu đôi có nghĩa là và - và nhân vật tương tự, s khung i, là nhỏ hơn hoặc bằng chữ thường z, có nghĩa là nó là một một hoặc b hoặc c hoặc dấu chấm, dấu chấm, dấu chấm, hoặc một z, có nghĩa là đó là chữ thường. Tôi phải làm gì muốn làm trong trường hợp đó? Vâng, tôi có thể làm điều này phần nào khó hiểu, nhưng chúng ta hãy trêu chọc này ngoài. Tôi sẽ gọi printf, in% c bởi vì tôi muốn in lại này nhân vật trên màn hình. Tôi sau đó sẽ mất s khung i, nhân vật thứ i trong, và sau đó tại sao Tôi đang làm thủ thuật này ít đây, chữ thường vốn A-? Những gì mà sẽ cung cấp cho tôi, nói chung? [Nghe được]. Chính xác. Tôi không thực sự nhớ - đó là 65 vốn A. Tôi không thực sự nhớ những gì một là chữ thường, nhưng không có vấn đề. Máy tính biết. Vì vậy, bằng cách nói, chữ thường trừ một vốn A, thật lạ là trừ một char từ khác, nhưng ký tự bên dưới mui xe là gì? Họ chỉ là con số. Vì vậy, bất cứ điều gì những con số này, để cho các máy tính nhớ chứ không phải là tôi của con người. Vì vậy, chữ thường vốn trừ đi A sẽ cung cấp cho tôi một sự khác biệt. Nó sẽ xảy ra là 32, và đó sẽ là trường hợp chữ thường b và vốn B và vv. Nó vẫn nhất quán, may mắn. Vì vậy, tôi về cơ bản nói, đi chữ thường thư, trừ ra rằng sự khác biệt tiêu chuẩn, và hiệu quả thay đổi s khung tôi từ chữ thường, tất nhiên, chữ hoa, không có tôi thực sự phải suy nghĩ về hay nhớ, là những gì những người số chúng ta đã nói khi tám tình nguyện viên đã đưa ra trên sân khấu? Bây giờ trong khi đó, trong các khác, nếu nó không chữ viết thường được xác định Dòng 24, chỉ cần in ra. Tôi chỉ muốn chạm vào ký tự là thực sự ban đầu thành chữ thường. Vì vậy, chúng ta hãy xem này. Hãy tận. Biên soạn, OK. . / Tận. Và cho tôi nhập vào H-E-L-L-O ở dạng chữ thường, Enter. Và nhận thấy rằng nó được chuyển đổi thành chữ hoa. Hãy để tôi làm điều này một lần nữa với một từ khác nhau. Làm thế nào về D-A-V-I-D với D đầu tiên vốn là một tên thường là? Nhập. Nhận thấy nó vẫn còn đúng. Nó chỉ xuất ra mà lần đầu tiên D không thay đổi thông qua đó xây dựng khác. Vì vậy, giữ trong tâm trí, sau đó, một vài điều ở đây. Một, nếu bạn muốn kiểm tra hai điều kiện cùng một lúc, bạn có thể và chúng với nhau như chúng tôi dự đoán. Bạn có thể so sánh các ký tự theo cách này và hiệu quả điều trị ký tự như số, nhưng thẳng thắn mà nói, đây là như vậy damn khó hiểu tôi sẽ không bao giờ nhớ làm thế nào để đưa ra điều này từ đầu mà không cần lý luận thông qua nó cho khá một chút thời gian. Nó sẽ không được tốt đẹp nếu một người nào đó ra có viết một chức năng được gọi là thấp hơn mà có thể trả lời cho tôi đúng hay giả, nhân vật này là chữ thường? Cũng may mắn, bất cứ ai đã viết ctype.h đã làm chính xác điều đó. Hãy để tôi đi lên đây và thêm ctype cho c loại, và bây giờ hãy để tôi đi xuống đây và viết lại dòng này như sau. Vì vậy, nếu nó được gọi là thấp, tôi khẳng định, s khung tôi, sau đó tôi sẽ xóa hai dòng hoàn toàn. Vì vậy, bây giờ một người nào khác, tôi hy vọng, đã viết một chức năng được gọi là thấp, và nó lần lượt ra họ đã làm và họ tuyên bố nó bên trong ctype.h. Và bây giờ tôi sẽ để lại dòng 27 một mình, tôi sẽ để lại dòng 31 một mình, nhưng nhận thấy tôi đã bao nhiêu thắt chặt lên mã của tôi. Nó bây giờ sạch hơn. Nó ít khó khăn để xem xét thông qua bởi vì bây giờ các chức năng, hơn nữa, là tuyệt vời để đặt tên cho nó chỉ những gì nó nói. Vì vậy, bây giờ tôi sẽ tiết kiệm này. Tôi sẽ thu nhỏ. Và cũng giống như trong Scratch bạn có thể có Các phép toán luận, các giá trị Boolean đúng hay sai, đó là chính xác những gì là giảm hiệu quả trả về. Hãy để tôi biên dịch lại. Hãy để tôi chạy lại. Và bây giờ chúng ta hãy thử lại lần nữa, H-E-L-L-O, Enter. Đó là khá tốt. Và thử lại lần nữa, chắc chắn tôi không vít cái gì lên. Đó là vốn đầu tư là tốt. Nhưng điều này là không đủ tốt vì các điều khác mà tôi sẽ không bao giờ nhớ, trừ khi tôi làm việc thông qua nó thực sự cẩn thận trên, nói rằng, giấy dòng chết tiệt này. Nó sẽ không được tốt đẹp nếu có một chức năng gọi trên? Hóa ra có là trong ctype.h là tốt. Tôi sẽ đi trước và gõ - hãy để tôi mang dòng trở lại. Thay vì điều này đây, hãy để tôi đi trước và nói, thay thế cho% c các kết quả của gọi chức năng này để trên của nhân vật thứ i của s. Và bây giờ thấy nó nhận được một chút cân bằng. Tôi phải theo dõi bao nhiêu ngoặc tôi đã mở và đóng cửa. Vì vậy bây giờ nó thậm chí còn sạch hơn. Bây giờ chương trình này là nhận được tốt hơn và thiết kế tốt hơn cho là bởi vì nó nhiều, nhiều hơn nữa có thể đọc được nhưng nó không hãy sửa. Hãy tận. . / Tận. H-E-L-L-O. Chúng ta hãy chạy nó một lần nữa, D-A-V-I-D. OK, vì vậy chúng tôi vẫn còn trong khá tốt hình dạng. Nhưng bây giờ trên. Tôi đề nghị rằng có một hơn tinh tế chúng ta có thể làm đó sẽ là thật sự tốt đẹp, thực sự có thể thắt chặt lên mã này và thực sự cung cấp cho chúng tôi năm trong số năm để thiết kế, ví dụ. Những gì sẽ được tốt đẹp để thoát khỏi? Vâng, nhìn cách chết tiệt lâu khối này mã chỉ là để làm một cái gì đó đơn giản. Bây giờ như một sang một bên, như bạn có thể có nhìn thấy trong siêu phần quá khứ này cuối tuần, bạn không cần phải chặt chẽ dấu ngoặc nhọn khi bạn chỉ có một dòng mã, mặc dù chúng tôi đề xuất giữ họ để nó làm cho nhiều rõ ràng hơn, như trong hình chữ U của Scratch khối, những gì bên trong của chi nhánh. Nhưng nó sẽ không được tốt đẹp nếu để trên, khi cho đầu vào của nó, biến nó thành chữ hoa nếu nó không phải là, và những gì sẽ là tuyệt vời trong trường hợp ngược lại, nếu nó đã được viết hoa? Chỉ cần vượt qua nó thông qua và để lại một mình. Vì vậy có lẽ nào đó. Tôi có thể cố gắng và hi vọng rằng nó, nhưng hãy để tôi giới thiệu một điều khác. Thay vì sử dụng này được xây dựng trong thiết bị đầu cuối cửa sổ xuống đây, nhớ lại rằng biểu tượng vuông màu đen này mang đến cho bạn một cửa sổ thiết bị đầu cuối lớn hơn mà tôi có thể hoàn toàn sàng lọc nếu tôi muốn? Thực ra, họ đang sắp xếp một cách kỳ lạ được đặt tên, nhưng có những thứ được gọi là trang con người, trang hướng dẫn, người đàn ông cho ngắn, và tôi có thể truy cập vào các bằng gõ người đàn ông - làm những gì tôi muốn loại? Người đàn ông trên. Và bây giờ nhận thấy nếu có một hoạt động bên trong của máy tính, trong trường hợp này các thiết bị, mà chỉ là hệ điều hành Linux, nó sẽ để cung cấp cho tôi một bộ hơi khó hiểu của đầu ra, nhưng bạn sẽ tìm thấy trong thời gian đó nó luôn luôn được định dạng khá nhiều tương tự như vậy bạn bắt đầu làm quen với nó. Chú ý ở phần trên để phía trên, và rõ ràng là tài liệu tương tự cho về hạ lưu. Bất cứ ai đã viết nó đã được cắt giảm một số góc và đặt tất cả trên một trang. Mục đích những điều 'trong cuộc sống là để chuyển đổi một thư để trên hoặc chữ thường. Nhận thấy rằng dưới Nội dung, trang người đàn ông đang dạy tôi những gì tôi có tập tin bao gồm sử dụng điều này. Nó đem lại cho tôi chữ ký cho các chức năng, cả hai người, thậm chí mặc dù chúng tôi ngay bây giờ chỉ quan tâm đến một. Ở đây bây giờ là một mô tả. Để trên chuyển đổi các thư c thành chữ hoa nếu có thể. Vẫn không phải là giáo hóa, nhưng hãy để tôi bây giờ nhìn dưới giá trị trả về, điều đó là giao lại. Vì vậy, giá trị trả về là của thư chuyển đổi hoặc c nếu chuyển đổi là không thể. C là gì? Các nhân vật ban đầu. Các nhân vật ban đầu và chúng tôi biết rằng, một lần nữa, sẽ đến tóm tắt, và bất cứ ai đã viết này chức năng chỉ quyết định rằng các đầu vào để để trên và thấp hơn chỉ là tùy tiện sẽ được gọi là c. Họ có thể gọi nó là bất cứ điều gì nhất họ muốn, nhưng họ giữ nó đơn giản như c. Vì vậy, tôi đã tham khảo ý kiến ​​người đàn ông trang. Câu này bảo đảm với tôi rằng nếu nó không phải là một chữ thường, đó là sẽ chỉ cho tôi trở lại c, đó là hoàn hảo, có nghĩa là tôi có thể thoát khỏi điều kiện khác của tôi. Vì vậy, hãy để tôi quay trở lại gedit, và bây giờ hãy để tôi chỉ làm điều này. Tôi sẽ để sao chép tuyên bố printf của tôi. Tôi sẽ đi trước và ngay trong vòng lặp for in mà ra, và có được loại bỏ toàn bộ bây giờ này nếu xây dựng. Không phải là một ý tưởng tồi, và nó đã được rất nhiều chính xác và phù hợp với tất cả mọi thứ chúng tôi đã rao giảng, nhưng chỉ là không cần thiết. Ngay khi bạn nhận ra một số thư viện chức năng tồn tại mà người khác viết, hoặc có thể bạn đã viết ở nơi khác trong các tập tin, bạn có thể sử dụng nó và thực sự bắt đầu thắt chặt các mã. Và khi tôi nói những điều như phong cách tốt, thực tế là người này được gọi là có chức năng trên, hoặc trước đây là thấp hơn là tuyệt vời hữu ích vì họ rất mô tả. Bạn sẽ không muốn để gọi chức năng của bạn x và y, z, trong đó có nhiều, ít nhiều ý nghĩa. Bất kỳ câu hỏi trên loạt mà cải tiến? Vì vậy, nó đủ để nói một trong những bán đồ ăn thậm chí còn là vấn đề của riêng bạn tập hợp - có thể thiết lập một vấn đề, nhưng chắc chắn P thiết lập hai trở đi, thậm chí khi họ đang đúng không nhất thiết có nghĩa là họ là hoàn hảo chỉ nhưng hoặc đặc biệt được thiết kế tốt. Đó là trục khác bắt đầu nghĩ về. Vì vậy, đây là một chuỗi bên trong của bạn bộ nhớ của máy tính, nhưng nếu bạn có một bó toàn bộ các ký tự như H-E-L-L-O trong bộ nhớ RAM, và giả sử mà bạn có trong chương trình của bạn gọi nhận được chuỗi nhiều lần như vậy mà bạn gọi nhận được chuỗi một lần, sau đó bạn gọi có được chuỗi lại. Vâng, những gì sẽ xảy ra theo thời gian? Nói cách khác, nếu bạn có một dòng mã, mặc dù ra khỏi bối cảnh, như chuỗi không thắng được - chúng ta hãy làm điều này. Tên chuỗi bằng được chuỗi. Vì vậy, giả sử rằng dòng mã có nghĩa là để yêu cầu người dùng cho tên của người. Này dòng tiếp theo của mã có nghĩa là để hỏi người sử dụng cho mình hoặc đi học, và dòng tiếp theo này, và vv. Giả sử chúng ta tiếp tục yêu cầu người sử dụng cho người khác và khác và một chuỗi. Họ sẽ ở lại trong bộ nhớ cùng một lúc. Một là sẽ không để clobber khác. Trường không ghi đè lên khác. Nhưng nơi nào họ tất cả kết thúc trong bộ nhớ? Vâng, nếu chúng ta bắt đầu vẽ trên màn hình, mà chúng tôi có thể sử dụng điều này đây giống như một bảng đen, nếu điều này đen hình chữ nhật đại diện cho máy tính của tôi bộ nhớ, tôi sẽ tự ý bắt đầu chia nó ra thành hình vuông nhỏ, mỗi đại diện cho một byte của bộ nhớ. Thành thật mà nói, nếu bạn có một GB bộ nhớ RAM những ngày này, bạn có một tỷ byte bộ nhớ trong máy tính của bạn, vì vậy một tỷ của các hình vuông. Vì vậy, nó đủ để nói, điều này là không thực sự quy mô. Nhưng chúng tôi có thể tiếp tục thu hút tất cả các rõ ràng không có quy mô quảng trường, và điều này đại diện cho tập thể bộ nhớ máy tính của tôi. Bây giờ chúng tôi sẽ chỉ làm dấu chấm, dấu chấm, dấu chấm. Vì vậy, nói cách khác, khi tôi bây giờ nhắc nhở người người dùng get chuỗi để cho tôi một chuỗi, những gì sẽ xảy ra? Nếu loại người sử dụng trong "xin chào", kết thúc trong H-E-L-L-O. Nhưng giả sử Sau đó người dùng loại trong - thực sự, tôi không nên làm xin chào bởi vì chúng tôi đang yêu cầu họ cho tên của họ. Vì vậy, chúng ta hãy quay trở lại nếu tôi có thể làm điều này. Vì vậy, nếu tôi gõ D-A-V-I-D cho tên của tôi, nhưng nhớ lại rằng dòng thứ hai của mã đã có được chuỗi lại để có được trường học của họ. Mà là từ đó mà người sử dụng loại trong sẽ đi tiếp theo? Vâng, có lẽ nó sẽ đi vào H-A-R-V-A-R-D. Vì vậy, mặc dù tôi đã rút ra nó như là hai hàng, đây chỉ là một bó toàn bộ các byte trong của bạn RAM của máy tính. Có một vấn đề bây giờ bởi vì bây giờ nếu tôi sử dụng bộ nhớ RAM trong này rất hợp lý nhưng loại cách ngây thơ, những gì có thể bạn không phân biệt rõ ràng? Trong trường hợp một bắt đầu và nơi một kết thúc, phải không? Chúng loại làm mờ với nhau. Vì vậy, nó quay ra máy tính không làm điều này. Hãy để tôi thực sự di chuyển trở lại trong thời gian một vài ký tự, và thay vì Harvard đi ngay sau khi tên của người dùng, người sử dụng thực sự được, đằng sau hậu trường, một nhân vật đặc biệt chèn vào bởi máy tính cho người đó. / 0, hay còn gọi là nhân vật nul khó chịu gọi là N-U-L, không N-U-L-L, nhưng bạn viết nó như / 0. Nó chỉ là tất cả các bit không là một dấu hiệu trong giữa lời đầu tiên của người dùng đánh máy và lần thứ hai. Vì vậy, Harvard thực sự bây giờ kết thúc như trình tự này của các nhân vật và thêm một / 0. Vì vậy, nói cách khác, bằng cách này giá trị trọng điểm, tám không tiếp giáp bit, bây giờ bạn có thể bắt đầu phân biệt một nhân vật khác. Vì vậy, tất cả các thời gian này những gì đã "hello" là thực sự "xin chào" với một / 0, và Trong khi đó, có rất rất có thể có khá hơn một chút RAM bên trong của máy tính. Hãy để tôi làm một việc khác ngay bây giờ. Nó chỉ ra rằng tất cả các hình vuông chúng tôi đã được vẽ, họ đang có, có, chuỗi, nhưng nói chung, những điều này là mảng. Một mảng chỉ là một đoạn bộ nhớ đó là trở lại trở lại để trở lại để trở lại, và bạn thường sử dụng một mảng bằng cách ký hiệu này khung vuông. Vì vậy, chúng ta sẽ nhìn thấy những khá một chút theo thời gian, nhưng hãy để tôi đi trước và mở ra, hãy gọi nó là lứa tuổi. Và nhận thấy những gì chúng tôi có thể làm với những thủ thuật tương tự, một chút hơn chút cú pháp ở đây. Vì vậy, trong dòng 17 của chương trình này - thực sự, cho phép tôi chạy chương trình đầu tiên vì vậy chúng tôi có thể thấy những điều này không có gì. Hãy để tôi gọi cho lứa tuổi biên dịch chương trình này. / Lứa tuổi.. Có bao nhiêu người đang ở trong phòng? Gọi nó là ba. Tuổi là người đầu tiên? 18, 19, và 20. Và bây giờ có phần lố bịch, tôi chỉ đã thực hiện một chương trình cho lứa tuổi những ba người. Do đó, rõ ràng là một cơ hội đối với một số số học vui vẻ ở đây. Rất may, toán học là đúng. 18 đến 19, 19 đi đến 20 và vv. Nhưng những gì thực sự có nghĩa là phải minh họa ở đây là làm thế nào chúng ta giữ lứa tuổi ba của người dân. Hãy để tôi phóng to vào những gì xảy ra ở đây. Vì vậy, đầu tiên, những vài dòng đầu tiên nên được nhận được khá quen thuộc. Tôi chỉ khiến người sử dụng cho số lượng người trong phòng. Sau đó, tôi đang sử dụng có được int và làm thời gian để làm điều này một lần nữa và một lần nữa và một lần nữa. Chúng tôi đã nhìn thấy mô hình mà trước đây, nhưng dòng 27 mới và thực sự khá hữu ích, và sẽ trở thành ngày càng hữu ích. Nhận thấy rằng những gì khác nhau trong dòng 27 là tôi xuất hiện để được tuyên bố một int được gọi là lứa tuổi, nhưng chờ đợi. Nó không chỉ là int lứa tuổi. Có những dấu ngoặc vuông, trong số đó là n. Vì vậy, khung n trong bối cảnh này, không bên trong một tuyên bố printf đây nhưng trong dòng duy nhất này 27, dòng này là nói, cho tôi n số nguyên, mỗi trong số đó là kiểu int. Vì vậy, đây là một cái xô, có thể nói, của, trong trường hợp này, ba số nguyên trở lại trở lại trở lại để tôi có hiệu quả có ba biến. Thay thế, được rõ ràng, sẽ được điều này. Nếu tôi muốn học sinh đầu tiên của tuổi, tôi có thể làm điều này. Nếu tôi muốn học sinh thứ hai tuổi tôi có thể làm điều này. Nếu tôi muốn học sinh thứ ba tuổi, tôi có thể làm điều này. Và thần cấm chúng tôi cần tất cả mọi người của tuổi trong căn phòng này - Ý tôi là, đây là một heck của rất nhiều sao chép, dán một lần nữa và một lần nữa và một lần nữa. Và thêm một lần tôi biên dịch chương trình này, nếu học sinh khác đi trong hơn ra các cánh cửa, bây giờ số lượng của tôi các biến là không chính xác. Vì vậy, những gì là tốt đẹp về một mảng là như Ngay sau khi bạn bắt đầu cảm thấy mình sao chép và dán, tỷ lệ cược là đó là không phải là cách tiếp cận tốt nhất. Một mảng là năng động có khả năng. Tôi không biết trước có bao nhiêu người đang có được trong phòng, nhưng tôi biết tôi cần n của họ, và tôi sẽ tìm ra n khi thời gian đến. Dòng mã này bây giờ có nghĩa là, cho tôi một đoạn bộ nhớ trông như thế này mà số lượng các hộp trên màn hình là hoàn toàn phụ thuộc vào n mà người sử dụng đánh máy in Vì vậy, bây giờ phần còn lại của chương trình này là thực sự là khá tương tự như những gì chúng tôi chỉ cần làm với các nhân vật. Thông báo tôi có một vòng lặp for bắt đầu từ đường 30. Vì vậy, ngay sau khi tôi nhận được mảng, tôi lặp đi lặp lại từ y bằng không trên lên đến n. Tôi chỉ có printf giáo huấn này tin nhắn chỉ nói, cho tôi thời đại của người #% i, vì vậy số một, số hai, số ba. Và tại sao tôi lại làm điều này? Thành thật mà nói, con người thích đếm từ một trên lên trong khi các nhà khoa học máy tính, không vào lên. các nhà khoa học máy tính sẽ không sử dụng loại chương trình, vì vậy chúng tôi sẽ chỉ bắt đầu đếm tại một như những người bình thường. Và bây giờ trong dòng 33, chú ý nhẹ đoạn khác nhau của cú pháp. Tuổi thứ i trong đó biến kiểu mảng là sẽ nhận được một int. Và bây giờ cuối cùng, đây chỉ là số học xuống đây. Tôi quyết định trong một vòng lặp riêng biệt để khẳng định một số thời gian trôi qua, và bây giờ trong này vòng lặp riêng biệt, những dòng này thực hiện. Một năm kể từ bây giờ, người tôi sẽ có tôi tuổi, nhưng nhận thấy đây không phải là biến i. Điều này bây giờ là% i cho int. Và thông báo như giữ chỗ đầu tiên, tôi cắm trong tôi cộng với 1, vì vậy chúng tôi đếm như một người bình thường. Và sau đó cho giá trị của tuổi tác, cho i tuổi, tôi tốn thời gian dài khung i - và tại sao tôi lại làm thêm một đây? Họ chỉ ở độ tuổi. Đó là sự lựa chọn ngu ngốc của tôi về chương trình. Họ chỉ từ một năm. Tôi có thể nhập vào bất kỳ con số đó Tôi thực sự muốn có. Vì vậy, những gì thực sự tất cả sự phù hợp đây? Vâng, hãy để tôi thực sự di chuyển trở lại trên đây và vẽ một bức tranh về những gì ở phía trước. Những gì chúng tôi sẽ làm với tiếp theo của chúng tôi Vấn đề Set hai là thâm nhập các thế giới của mật mã. Vì vậy, đây là một chuỗi ký tự, do đó, một trình tự của nhiều ký tự, và những gì điều này không nói? Nó không có trong phiên bản trực tuyến của các slide. Vì vậy, tôi cho rằng điều này bằng này, một quảng cáo ngu ngốc từ nhiều năm trước đây mà thực sự có thể gọi lại một trong những nguồn gốc của nó. Vì vậy, đây là một ví dụ về mã hóa hoặc mật mã. Nó chỉ ra rằng nếu bạn muốn thực sự gửi thông tin hoặc chia sẻ thông tin với một người nào đó an toàn, như một tin nhắn như thế này, bạn có thể tranh giành các chữ cái. Nhưng thông thường, những lời không tranh giành một cách ngẫu nhiên. Họ đang hoán vị một cách nào đó hoặc thay đổi một cách nào đó để - oops. Đó là một cánh lướt gió thú vị cho thời gian tới. Vì vậy, bạn có thể bản đồ những gì là rõ ràng O B. Chú ý rằng dòng lên vốn khôn ngoan. Rõ ràng r trở nên e. Rõ ràng F-H-E-R trở thành S-U-R-E. Vì vậy, Hóa ra có một bản đồ, và trong trường hợp này có một khá ngu ngốc lập bản đồ nếu có ai đã hiểu ra? Đây là một cái gì đó gọi là Thối 13, Xoay 13. Nó là ngu ngốc nhất của mã hóa cơ chế vì nó theo nghĩa đen chỉ thêm 13 đến mỗi một trong các chữ cái, ngu ngốc trong ý nghĩa rằng nếu bạn chỉ có một chút thời gian miễn phí trên tay của bạn và một cây bút chì, hoặc bạn chỉ nghĩ rằng nó thông qua trong đầu của bạn, bạn có thể thử tất cả các bổ sung có thể - một, hai, ba, dấu chấm, dấu chấm, dấu chấm, 25 chỉ xoay toàn bộ bảng chữ cái, và cuối cùng, bạn sẽ tìm ra những tin nhắn này là. Vì vậy, nếu bạn đã làm một cái gì đó như thế này trong trường lớp đi qua tin nhắn cho bạn người bạn tốt nhất, nếu trường lớp của bạn giáo viên chỉ cần đọc qua tin nhắn và brute buộc các giải pháp, bạn có thể đã nhận được một câu trả lời bằng cách đó. Bây giờ tất nhiên, trong thế giới thực, mật mã là phức tạp hơn. Đây là một đoạn văn bản từ một hệ thống máy tính có tên người dùng và mật khẩu, như gần như tất cả chúng ta làm, và đây là những gì mật khẩu của bạn có thể nhìn giống như nếu được lưu trữ trên đĩa cứng của bạn lái xe nhưng ở dạng mã hóa. Đây không chỉ là một vòng quay của các chữ cái, A là B và B là C. nhiều phức tạp hơn, nhưng nó sử dụng những gì thường được gọi là khóa bí mật mật mã. Hình ảnh này kể về sau câu chuyện với một vài biểu tượng. Ở bên trái, chúng ta có những gì chúng tôi sẽ gọi cho văn bản đơn giản. Trong thế giới của mật mã, đồng bằng văn bản chỉ là thông báo ban đầu viết bằng tiếng Anh hoặc tiếng Pháp hoặc bất kỳ ngôn ngữ nào. Nếu bạn muốn mã hóa nó, chúng ta sẽ vượt qua nó những bức tranh thông qua một ổ khóa, vì vậy một số loại thuật toán, một số chức năng hoặc chương trình mà ai đó đã viết mà tranh giành các chữ cái hy vọng hơn phức tạp hơn chỉ cần thêm 13 để mỗi người trong số họ. Những gì bạn có được ra khỏi quá trình trong giữa có được gọi là cyphertext. Vì vậy, một từ rất gợi cảm. Nó chỉ có nghĩa đó là mã hóa phiên bản của văn bản gốc. Và chỉ khi bạn có cùng một bí mật, 13 hoặc trừ đi 13, bạn có thể giải mã một tin nhắn như thế. Vì vậy, trong vấn đề Đặt Hai, một trong những điều bạn sẽ làm gì nếu trong các Hacker Phiên bản, bạn sẽ phải viết code để phá vỡ các mật khẩu, tìm ra chúng là gì và làm thế nào họ mã hóa, mặc dù chúng tôi cung cấp cho bạn một chút hướng dẫn đường đi. Trong phiên bản tiêu chuẩn, chúng tôi giới thiệu một vài thuật toán mã hóa, mã hóa cơ chế, một gọi là Caesar, một gọi là Vigenere, mà vẫn còn mật mã luân phiên trong đó A trở thành một cái gì đó, B sẽ trở thành một cái gì đó, nhưng bạn phải làm nó lập trình bởi vì có thực sự sẽ là một bí mật chính tham gia mà thường là một số hoặc một từ khóa mà chỉ có người gửi và người nhận những thông điệp cần phải hiểu. Bây giờ, điều này thực sự có thân trong thế giới thực. Này, ví dụ, rất ít trẻ mồ côi Bí mật vòng giải mã của Annie, và bạn thực sự có thể thực hiện các mật mã luân phiên - Một trở thành một cái gì đó, B trở thành một cái gì đó - với một vài bánh xe, một ở bên ngoài, một ở bên trong như vậy mà nếu bạn xoay bánh xe hoặc vòng, bạn thực sự có thể xếp hàng chữ với chữ cái khác nhau, nhận được một mã số bí mật. Và như vậy là cliffhanger cho ngày hôm nay, một chút về những gì tôi nghĩ rằng tôi muốn làm là sự nga ra sau đó nếu bạn bật TV vào ngày 24, bạn có thể xem nauseum quảng cáo cho phim 24 giờ liên tục. Nhưng ngày hôm nay, tôi sẽ mở nó lên đây và cung cấp cho chúng tôi chỉ trong hai phút của một sư phạm có liên quan Christmas Story với một cậu bé tên là Ralphie. [VIDEO xem lại] -Có thể là biết tất cả và bệnh lặt vặt mà Ralph Parker được hướng bổ nhiệm một thành viên của Orphan Annie nhỏ bí mật vòng tròn và được hưởng tất cả danh dự và lợi ích xảy ra kèm theo. -Ký, Little Orphan Annie. Countersigned, Pierre Andre trong mực. Danh dự và lợi ích đã được ở tuổi chín. [La hét ON RADIO] Thôi nào, hãy về với nó. Tôi không cần tất cả những gì về nhạc jazz buôn lậu và cướp biển. -Nghe đêm mai cho kết thúc cuộc phiêu lưu của các màu đen con tàu cướp biển. Bây giờ, đó là thời gian cho Annie 's Secret Tin nhắn cho bạn thành viên của vòng tròn bí mật. Hãy nhớ rằng, trẻ em. Chỉ có các thành viên của Annie Secret Circle 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. Đâ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 - -Pierre là trong đêm nay tiếng nói lớn. Tôi có thể nói rằng thông điệp của đêm nay 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. -90 Giây sau đó, tôi đang ở 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ã. Aha, B. Tôi đã đi đến tiếp theo. E. Từ đầu tiên là "có." S. Nó sẽ đến dễ dàng hơn bây giờ. U. 25. Đó là R. -Thôi nào, Ralphie. Tôi phải đi. -Tôi sẽ xuống ngay, Ma. Whiz gee. -T. O. Hãy chắc chắn. Hãy chắc chắn những gì? Little Orphan là gì Annie cố gắng để nói? Hãy chắc chắn những gì? -Ralphie, Randy đã có để đi. Bạn sẽ vui lòng đi ra? -Được rồi, Ma. Tôi sẽ ra ngay. -Tôi đã nhận được gần hơn đến nay. Sự căng thẳng là khủng khiếp. Đó là những gì? Số phận của hành tinh này có thể treo trong sự cân bằng. -Ralphie, phải đi Randy. -Tôi sẽ ra ngay cho buồn thì thôi. -Sắp đến rồi. 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ó, có. -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 xem video] SPEAKER 1: Đây là CS50, và sẽ là vấn đề Set Hai. Hẹn gặp lại vào tuần tới. SPEAKER 2: Vào tiếp theo CS50, điều này xảy ra. SPEAKER 1: Vì vậy, một chủ đề, chúng tôi đã không nhìn vậy, đến nay là của con trỏ hàm. Bây giờ, một con trỏ hàm chỉ là địa chỉ của một công chức năng, nhưng giống như - con trai của một -