[MUSIC CHƠI] Andi Peng: Đây là CS50, và chào mừng bạn đến tuần thứ hai của phần. Điều này là thực sự trong khi tuần hai của class-- chúng ta thực sự, tuần đầu tiên chúng tôi đã có phần. Giơ tay, bao nhiêu trong số tất cả các bạn đến siêu phần tuần trước? OK, đó là OK. Vậy là được rồi. Có bao nhiêu bạn đã xem siêu phần tuần trước? ĐƯỢC. Và các bạn đã làm tốt về vấn đề thiết lập một trong những? Vì vậy, tôi sẽ mang nó mà chúng ta có một đám trẻ thực sự thông minh trong lớp học này và mọi chuyện sẽ tốt đẹp. ĐƯỢC. Vì vậy first-- Đầu tiên, chúng ta chỉ cần đi một thời gian ngắn đi qua các chương trình nghị sự cho ngày hôm nay. Chúng tôi sẽ nói về logistics nhiên. Rất nhiều bạn có thể có câu hỏi liên quan cách điều hành trong khóa học này. Chúng tôi sẽ trả lời chúng. Chúng tôi sẽ để một thời gian ngắn đi qua các vòng trong trường hợp bất kỳ của các bạn đã bỏ lỡ siêu phần. Chúng tôi sẽ nói về bản đồ ASCII. Chúng ta sẽ nói về mảng, chức năng, các đối số dòng lệnh. Và cuối cùng, những gì bạn guys có lẽ tất cả thực sự muốn được ở đây để tìm hiểu về, là pset2 của bạn. Chúng tôi sẽ có một số thủ thuật tốt đẹp và lời khuyên cho việc làm thế nào để làm điều đó. ĐƯỢC. Ngoài ra, thứ hai, chúng tôi có rất nhiều kẹo ở đây. Những ai yêu thích kẹo, chỉ đi lên đây. Lấy một số. Tôi có một bó. Chúng tôi có một tấn trong văn phòng. Tôi không thực sự muốn ăn kẹo cả ngày. Các bạn nên ăn tất cả các bánh kẹo, bởi vì tôi đã mang nó ở đây cho các bạn. Chỉ cần ăn kẹo. Sẽ có kẹo mỗi phần. Vì vậy, lần đầu tiên, tôi là ai? Tên tôi là Andi Peng. Tôi là người đứng đầu của TA CS50 đây tại Yale. Và ngoài đó, tôi cũng sẽ be-- nếu có ai sẽ like-- chạy của bạn buddy, vai để khóc. Nếu đêm hôm trước do của pset của bạn, bạn không có ý tưởng những gì đang xảy ra, đánh tôi lên. Chúng tôi sẽ động lòng với nhau, vân vân. Chỉ biết rằng tôi ở đây như là một tài nguyên cho bạn như tiền tuyến trong việc giúp các bạn tìm ra cách để giải quyết các vấn đề trong CS50 và xa hơn nữa. Email của tôi là andi.peng@yale.edu. Tôi cũng sẽ gửi ra một cá nhân gửi email với số điện thoại của tôi trong nó do đó không phải tất cả mọi người trên Internet có thể nhìn thấy số điện thoại của tôi. Hãy gọi cho tôi bất cứ lúc nào. Nghiêm túc, điện thoại của tôi là thường gắn liền với bàn tay của tôi. Tôi không thể trả lời trong vòng một vài phút. Tôi không thể trả lời trong vòng một vài giờ. Nhưng tôi có thể đảm bảo với bạn, nếu bạn e-mail cho tôi, nếu bạn gọi cho tôi, văn bản tôi, tôi sẽ trả lời trong vòng 24 giờ. Thông thường, tôi sẽ trả lời trước rằng, bởi vì tôi hiểu mà mọi người có một số vấn đề, và bạn muốn câu trả lời của bạn để được trả lời rất nhanh. Tuy nhiên, nếu bạn gọi tôi 30 phút trước rằng mảnh đó là do thứ năm night-- được như thế, Andi, giúp tôi, Tôi đã không thể cung cấp cho tôi started-- bạn vai mà khóc trên. Nhưng nó có thể là thời gian để suy nghĩ về làm thế nào để không làm mà thời gian tới. ĐƯỢC. Rất tiếc. Làm thế nào để tôi quay trở lại? Hiện chúng tôi đi. Vì vậy, trong quá trình này, chúng ta có một tấn hỗ trợ cho tất cả mọi người. Ngoài chỉ phần ở đây, mà bạn mỗi tuần nhận được để chi tiêu 90 phút tuyệt vời với tôi, chúng tôi cũng có giờ làm việc. Bao nhiêu người trong các bạn đã có đã đến giờ làm việc để được giúp đỡ? Thật tuyệt. Đó là thực sự tốt để xem, bởi vì chúng tôi có đội ngũ hơn 45 HTKT và CA đào tạo cho khóa học này mà đang ở đây giúp đỡ các bạn với psets của bạn. Thứ Hai họ đang tổ chức tại TEAL lớp học trong 17 Hill House ở đây tại Yale. Thứ Ba và Thứ Năm, họ đang tổ chức tại commons. 8:00-11:00 khá nhiều mỗi ngày trong tuần. Đi vào, đi ra. Bất kỳ vấn đề, không problem-- chỉ đi vào trong, và sau đó chúng tôi sẽ giúp bạn ra ngoài với điều đó. Thứ hai, ngoài giờ hành chính và các phần, chúng tôi cũng có quần short. Có ai đã từng nhìn thấy một vài sự quần short hoặc walkthroughs trong video trên trang web? ĐƯỢC. Vì vậy, chúng tôi thực sự, thực sự hữu ích. Đáng yêu của chúng tôi sản xuất Harvard đội bên kia, trên trường mà lên phía bắc, họ đã quay phim và sản xuất những đoạn phim hương lạ thường. Họ sẽ đưa bạn qua từng bước làm thế nào để đi về việc giải quyết một vấn đề. Thông thường, nếu bạn đang nhầm lẫn về một khái niệm đơn giản, một khái niệm số ít, hãy xem, bởi vì chúng tôi có thể có một đoạn ngắn trên nó ở đâu đó trên trang web của chúng tôi. Và nó thường là một nguồn lực lớn để tìm kiếm khi bạn đầu tiên bị mất về cách xử lý một vấn đề. Thứ ba, chúng tôi cũng có study50 và reference50. Vì vậy, nghiên cứu trên 50 trang web chỉ là một liên kết. Đó là, tôi nghĩ rằng, study.cs50.net hay đại loại thế. Chỉ cần Google nó. Chúng tôi có rất nhiều slide chuẩn bị. Chúng tôi có rất nhiều quần short và điều walkthroughs-- tất cả biên soạn rất đẹp và gọn gàng cho các bạn tất cả duyệt qua, nhìn thấy bất cứ khái niệm mà bạn đang nhầm lẫn về. Có lẽ nó muốn được bảo hiểm ở đó trong study50. Reference50-- tương tự. Chúng tôi có rất nhiều ghi chú khác nhau sẵn sàng để xử lý của bạn. Và cuối cùng, chúng tôi có những gì gọi là CS50 Thảo luận, một diễn đàn trong đó, nếu trong đêm trước bạn đang làm vấn đề của mình, nói, bạn có một câu hỏi. Đăng nhập để CS50 Thảo luận. Đăng câu hỏi của bạn. Và sau đó một trong những hundreds-- có lẽ, thousands-- của đồng nghiệp lấy lớp này trực tuyến sẽ đăng nhập. Và có lẽ ai đó có thể nhận được Câu trả lời của bạn trước khi một lon TA. Đó là về cơ bản chỉ là một diễn đàn trực tuyến mà chúng tôi có thể tất cả sử dụng để thảo luận về các vấn đề của chúng tôi. Đó là mát mẻ. ĐƯỢC. Vì vậy, vấn đề đặt ra. Chúng tôi về ngay dày của vấn đề đặt hai. Rất nhiều người trong chúng ta đã có vật lộn với vấn đề thiết lập một. Chúng ta đã biết rằng có lẽ chờ đợi cho đêm cuối cùng để làm pset của bạn không phải là điều thông minh nhất để làm trong CS50. Mẹo và thủ thuật cơ bản cho thành công được đọc toàn bộ spec. Có bao nhiêu bạn có đã đọc spec cho pset 2? ĐƯỢC. Đó là một số lượng rắn. Tôi biết các bạn đã có thể nhận ra bây giờ các thông số kỹ thuật thực sự lâu dài. Họ thực sự, thực sự dài. Thật sự rất khó để đọc tất cả các dòng đó cẩn thận từng chữ. Bạn muốn chỉ cần đọc lướt đến nơi nó cho bạn biết phải làm gì đó. Tôi có thể đảm bảo với bạn, không làm điều đó. Nếu bạn làm điều đó, có lẽ bạn đang sẽ bỏ lỡ một nơi nào đó nơi nó nói với bạn làm thế nào để bắt đầu một vấn đề hoặc nó cho bạn biết những gì để tên vấn đề của bạn hoặc nó cho bạn biết, đây có lẽ là cách tốt nhất để bắt đầu làm vấn đề của bạn. Và sau đó bạn sẽ bị mất. Khi bạn cố gắng đọc của bạn spec nửa chừng, rất nhiều sự quan trọng information-- trong đó bạn không đi để có thể thực sự truy cập. Vì vậy, đọc toàn bộ spec. Hãy thử để đọc toàn bộ thông số trước khi bạn đến phần, bởi vì sau đó, khi chúng ta nói về pset, tất cả chúng ta có thể có một ý tưởng về những gì đang xảy ra. Thứ hai, đây là một khái niệm rằng tôi sẽ muốn tham khảo rất nhiều trong suốt học kỳ khóa học. Nhưng về cơ bản, chúng tôi đáp ứng một nửa, phải không? Me, như hỗ trợ kỹ thuật và Jason của bạn như khóa học quản lý và Scaz như giáo sư của bạn và David là giáo sư của bạn và tất cả các các hỗ trợ kỹ thuật đáng yêu khác trong khóa học này, trợ lý trong course-- này chúng tôi sẽ làm tốt nhất của chúng tôi để đảm bảo rằng bạn được thiết lập lên để thành công trong khóa học này. Chúng tôi sẽ giữ phần. Chúng tôi sẽ tổ chức giờ hành chính. Chúng tôi sẽ trả lời điện thoại của bạn cuộc gọi, trả lời e-mail của bạn, làm tất cả mọi thứ có thể để đảm chắc chắn câu hỏi của bạn được trả lời. Tuy nhiên, giúp chúng tôi hiểu quá. Gặp chúng tôi nửa chừng. Nếu bạn đến giờ văn phòng không có đi vào phần, không khi nhìn thấy các bài giảng, không có ý tưởng những gì đang xảy ra, được như thế, giúp tôi. Tôi có được như thế, tốt, tôi xin lỗi. Nó có thể là thời gian để cho vay vai mà khóc trên, bởi vì tôi không chắc chắn những gì tôi có thể làm gì để giúp đỡ bạn nếu bạn không cố gắng để ít nhất là giúp đỡ cho mình một chút trong đầu. Gặp chúng tôi nửa chừng. Bạn biết đấy, xin vui lòng đến chuẩn bị sẵn sàng để trả lời và nhận được sẵn sàng tham gia vào các vật liệu. Nó làm cho mọi thứ nhiều dễ dàng hơn cho tất cả mọi người tham gia. Vâng, đó là khá nhiều đó. Chấm điểm. Vì vậy, trên các giáo trình, nó đẹp chuyên sâu liên quan đến cách chúng ta lớp. Nhưng về cơ bản, sự phân hủy ở đây là 50% của lớp của bạn sẽ là psets, mà là đáng yêu, bởi vì đó là nơi bạn đang chi tiêu rộng lớn Phần lớn thời gian khóa học của bạn trên. Trắc nghiệm 40%, và của bạn dự án cuối cùng sẽ là 10%. Sẽ có hai câu đố trong suốt các khóa học của học kỳ. Tôi nghĩ rằng thời gian và ngày là cũng được liệt kê trên các giáo trình. Cách mà chúng tôi sẽ được phân loại psets của bạn là chúng ta có bốn cơ bản giá trị mà chúng ta gán cho mỗi lớp. Chúng tôi có một giá trị của phạm vi, đúng đắn, thiết kế, và phong cách. Vì vậy, như bạn thấy, đó là loại của chúng tôi Công thức tính psets. Ba chúng tôi cung cấp nhiều nhất trọng lượng để tính đúng đắn, bởi vì rõ ràng HLV của mình nên thử nghiệm cho các trường hợp mà chúng tôi muốn nó để kiểm tra. Các bạn có tất cả check50 lúc xử lý của bạn. Đó là một chức năng rất hữu ích rằng các bạn có thể tất cả tải lên mã của bạn đến các máy chủ của chúng tôi, nơi chúng tôi sẽ kiểm tra xem nó cho bạn. Và bạn đã nhìn thấy những khuôn mặt frowny, khuôn mặt cười. Họ thực sự, thực sự hữu ích. Xin vui lòng không được học sinh đó muốn cố gắng hardcode trong tất cả các câu trả lời cho họ. Tôi đã chắc chắn nhìn thấy một pset nơi ai đó đã nhìn thấy tất cả các giá trị của check50 và họ chỉ cứng mã hoá in-- nếu số này, in ra số này. Nếu con số đó, in ra số đó. Đừng làm điều đó. Mặc dù kỹ thuật check50 là đúng, theo cách của bạn trong việc giải quyết vấn đề là không chính xác. Vì vậy, chỉ cần sử dụng một cách tiết kiệm check50. Nhưng cũng chắc chắn rằng bạn hiểu làm thế nào nó hoạt động, các chương trình đang hoạt động ngoài check50, bởi vì chúng tôi không thể kiểm tra tất cả trường hợp có thể có của check50. Chúng tôi sẽ thử nghiệm một số trong số họ. Thiết kế cơ bản là, làm thế nào cũng được thiết kế là mã của bạn? Nếu bạn là copy-paste nhiều dòng mã nhiều, rất nhiều lần. Có lẽ bạn không có khá thiết kế tốt nhất trong mã của bạn. Có lẽ đó là thời gian để thêm vòng lặp đó. Về cơ bản, đây nó chỉ là tất cả về cố gắng để làm mã của bạn, cố gắng để viết mã của bạn một cách hiệu quả nhất có thể để chương trình của bạn chạy càng nhanh càng tốt. Cuối cùng, chúng tôi có phong cách. Vì vậy, phong cách là loại một tùy tiện, chủ quan hạn. Tôi biết chúng tôi chính thức có một hướng dẫn phong cách cho 50 CS50, nơi nó nói với bạn, oh, bạn cần phải có một không gian ở đây. Bạn nên loại định dạng mã của bạn theo cách này. Bạn nên đặt tên thứ theo cách này. Tôi không thực sự quan tâm, mỗi se, làm thế nào bạn chọn kiểu mã của bạn, chỉ miễn là bạn ở phù hợp. Ví dụ, nếu bạn muốn lại một khoảng trống sau bốn của bạn trước bốn vòng lặp của bạn, chỉ làm điều đó mỗi lần. Không loại làm điều đó. Đừng làm điều đó lần khác. Nếu bạn muốn giữ xoăn niềng răng không gian một cách nào đó, chỉ luôn làm theo cách đó. Không loại làm điều đó một nơi nào đó ở đây và ở một nơi nào đó không có. Khi chúng tôi đang phân loại, nó thực sự khó khăn nếu tôi không có ý tưởng như thế nào bạn đang định dạng mã của bạn, điều này là lập dị và ra khỏi chỗ. Nếu bạn chỉ cần giữ cho nó phù hợp, đó là dễ dàng hơn nhiều cho tôi như lớn hơn để có thể đọc code của bạn. Nó dễ dàng hơn nhiều cho bạn như là một sinh viên để có thể xem xét thông qua mã của bạn và xem những gì đang xảy ra với nó giảm do tại sao có vấn đề. Phong cách là một trong những điều đơn giản nhất các bạn có thể làm để có được đầy đủ điểm số. Về cơ bản, nếu bạn chỉ quan tâm, nếu bạn phải thường năm phút của sự chú ý mã của bạn mỗi tuần, bạn nên được nhận điểm phong cách đầy đủ. Cuối cùng, chúng ta có những gì được gọi là số nhân của phạm vi. Scope-- Tôi biết đó là một lớn từ, đặc biệt là trong các lớp học này. Nhưng phạm vi, tất cả những phương tiện là bạn đang cố gắng các psets đến hết khả năng của bạn. Nếu bạn lần lượt trong ba ra bốn vấn đề của mình và thậm chí không cố gắng cuối cùng, có lẽ bạn đang sẽ mất một số điểm trên phạm vi. Ngay cả khi bạn chỉ cần bắt đầu các vấn đề, làm tốt nhất của bạn để đi qua nó. Thậm chí nếu nó không hoạt động, biến nó trong, vì rằng lãm và chứng minh để chúng tôi rằng bạn đang cố gắng, mà bạn đã cố gắng thiết lập các vấn đề đến hết khả năng của bạn. Và sau đó chúng tôi có thể cung cấp cho bạn điểm đầy đủ cho phạm vi. Phạm vi cũng rất quan trọng vì khi chúng ta nói về sự sụt giảm số pset thấp nhất. Vì vậy, trong quá trình của các học kỳ, các bạn có chín psets. Và chúng ta sẽ thực sự được thả số điểm thấp nhất trong số chín, nhưng chỉ nếu bạn có đầy đủ điểm phạm vi. Vì vậy, nếu bạn bật trong một pset không đầy đủ, không may, chúng tôi không thể thả một mà, bởi vì phạm vi của bạn điểm không được hoàn thành. Vì vậy, ngay cả khi bạn có tuần khủng khiếp nơi bạn đang chết dần và bạn đang bị bệnh hoặc con chó của bạn qua đời, con mèo của bạn chết, và bạn đang quá tải với các bài tập về nhà, chỉ cố các pset. Làm điều đó với hết khả năng của bạn. Nếu nó không hoạt động, nó không quan trọng. Chỉ cần tắt nó trong. Ít nhất chúng tôi có thể cung cấp cho bạn chỉ cho nỗ lực. A cho nỗ lực trong lớp học này. Ít nhất là giảm số điểm thấp nhất cho nỗ lực. Vì vậy, yeah. Đó là khá nhiều đó. Có ai có câu hỏi như vậy đến nay trên lớp như thế nào chúng tôi trong lớp học? Hoặc bất kỳ trong những? Bất kỳ của những cái far-- phần, giờ làm việc? Mát. ĐƯỢC. Vì vậy, đây là một chủ đề mà không có ai thực sự thích nói về. Tôi thực sự không muốn nói về nó. Các bạn không thực sự muốn nghe tôi nói về nó. Nhưng thật không may, tất cả chúng ta phải nói về nó. David đã dành 20 phút một giảng nói về nó. Và đó là chủ đề trung thực trong học tập. Vì vậy, tất cả chúng ta ở đây đã có thể bằng văn bản một đôi tiểu luận trong sự nghiệp Yale của chúng tôi. Chúng tôi đã có thể nhận được một cuộc nói chuyện mà chúng tôi đã được cho biết không đạo nhạc bài tiểu luận của chúng tôi, vì công việc mà không phải là của chúng ta. Trong khoa học máy tính, chúng ta có cùng một loại khái niệm. Tất cả các công việc mà bạn gửi, tất cả các mã mà bạn viết nên là mã mà bạn đã viết. Không nên mã mà bạn đã sao chép từ một nơi khác. Không nên mã bạn đã googled và ngồi phịch ở và bạn không thực sự biết nếu nó hoạt động. Bạn chắc hẳn sẽ có một cảm giác những gì nó làm, nhưng không thực sự. Khi nghi ngờ, về cơ bản, nó chỉ là hợp lý. Trên giáo trình của chúng tôi, chúng tôi có một danh sách toàn bộ những thứ chúng ta thấy là hợp lý so với không hợp lý. Ví dụ, hợp lý là bạn và bạn của bạn thảo luận về những cách tốt nhất để đi khoảng cách hợp lý việc giải quyết một vấn đề. Đó là khá hợp lý. Điều gì sẽ không được hợp lý là nếu bạn kẻ đã cùng nhau, gõ mã cùng, và lại cùng mã. Đó là chưa hợp lý. Cùng một điều, loại của một bài tiểu luận. Nếu bạn muốn thảo luận với bạn bè của bạn, hey, đây là những gì tôi muốn viết về. Đây là các bước tôi muốn mất để viết về nó, tuyệt vời. Thật tuyệt vời. Hãy hợp tác với nhau. Nếu các bạn bắt đầu viết những điều tương tự, biến trong các bài tiểu luận tương tự, đó là ít OK. Vì vậy, khi nghi ngờ, chỉ cần không làm điều đó. Dưới đây, chúng tôi trong CS50, chúng tôi có các kịch bản chạy mà để tự động để kiểm tra không chỉ tính đúng đắn của mã của bạn, nhưng cũng có những nét độc đáo của mã của bạn. Vì vậy, xin vui lòng không đặt chúng ta vào vị trí vì phải tham khảo trường hợp của bạn để EXCOMM. Xin vui lòng chỉ cho tất cả mọi người, chúng ta hãy chỉ làm cho một kinh nghiệm tuyệt vời. Mỗi người học tốt hơn, tất cả chúng ta sẽ hạnh phúc hơn, và chúng tôi đang thiết lập để thành công trong khóa học này. Cái gì đó rất độc đáo về lớp này mà tôi nghĩ rằng tất cả mọi người nên thực sự chú ý đến là chúng ta có những gì gọi là hối tiếc điều khoản trong chương trình học của chúng tôi. Vì vậy, về cơ bản, trong vòng 72 giờ, nếu bạn tin rằng bạn đã làm điều gì đó bạn không thực sự chắc chắn được thích hợp, hãy đến với chúng tôi. Chúng tôi hứa với bạn rằng trong vòng 72 giờ chúng tôi sẽ xử lý trường hợp bản thân mà không đề cập đến một cao hơn thẩm quyền trong chính quyền. Vì vậy, nếu bạn đến với tôi và nói, Andi, hey, tôi thật sự xin lỗi, nhưng tôi nghĩ rằng có một vài dòng trong tôi Mã đêm qua mà tôi loại googled, đã ra khỏi Stack Overflow, sao chép và dán, và tôi thực sự, thực sự xin lỗi về điều đó, cho tôi biết. Xin vui lòng không chỉ để cho nó mưng mủ và hy vọng rằng mình bắt nó. Chúng tôi sẽ bắt nó. Chỉ cần đến với tôi. Hãy cho tôi biết trong vòng 72 giờ. Chúng tôi sẽ tìm ra một giải pháp. Và chúng tôi hứa rằng chúng tôi sẽ không đề cập đến giám đốc đại học về cơ bản. Vì vậy, đó là lợi ích tốt nhất của bạn chỉ cần trung thực với tất cả mọi người tham gia vào khóa học. ĐƯỢC. ĐƯỢC. Vì vậy, bây giờ, nhanh chóng trước Tôi di chuyển trên, không ai có thắc mắc liên quan đến dịch vụ hậu cần các khóa học về cách chúng tôi đang đi để chạy, làm thế nào phần sẽ để chạy, bất kỳ điều đó? ĐƯỢC. Yeah. Đung [Không nghe thấy]? Andi PENG: Yeah. Vì vậy quizzes-- bao nhiêu bạn trong phần thứ hai / thứ tư? Có bao nhiêu bạn đang ở trong Thứ Ba / Thứ Năm? OK, vì vậy đó là một tách rắn ở đây. Vì vậy, cách mà chúng ta chạy nó ở Yale là chúng ta rằng sẽ có hai riêng biệt quizzes-- một cho mỗi section-- đó sẽ được thực hiện trong lớp học. Tôi nghĩ rằng đó là tháng mười, cuối tháng mười, một cái gì đó như thế, như một tuần của các bài kiểm tra. Yeah, vì vậy chỉ cần đến lớp. Trên đó thứ hai hoặc thứ tư, bạn sẽ mất các bài kiểm tra. Trên đó thứ ba hoặc thứ năm, bạn sẽ có một bài kiểm tra khác nhau. Nhưng cùng một tài liệu sẽ được bảo hiểm. Yeah. Câu hỏi hay. Yeah. Đung chúng ta làm ở đâu đi kiểm tra các lớp của chúng tôi? Andi PENG: Yeah. Vì vậy, tôi sẽ được gửi ra một e-mail bất cứ điều gì mỗi tuần khi câu đố là graded-- hay, xin lỗi, khi psets được chấm điểm. Psets thường quay trong buổi trưa hoặc thứ sáu. Vì vậy, tôi hứa rằng tôi sẽ cố gắng để có được chúng trở lại với bạn bởi những buổi trưa của ngày thứ Sáu sau. Bất cứ khi nào tôi học lớp một pset, tôi sẽ gửi ra một thông báo trên sổ điểm mà cho bạn điểm số của bạn có thể được xem trực tuyến. Vì vậy, ngay trong tuần này, sau khi tôi hoàn thành phân loại psets tuần trước, các bạn sẽ nhận được một e-mail thông báo nói cho bạn, hey này là nơi bạn đi để xem điểm của bạn. Và bạn có thể thấy hàng phân tích về điểm số của bạn. Bạn có thể xem ý kiến. Oh, điều nhanh chóng cũng. Phần bình luận trong great Cuốn sách là nơi tôi sẽ có thể dành phần lớn thời gian của tôi chấm điểm. Vì vậy, một trong những điều đó là thực sự quan trọng khi các bạn đang xem điểm của bạn về psets của bạn không chỉ tìm kiếm tại các điểm vật lý nhưng cũng dành thời gian để thực sự đọc ý kiến ​​của tôi. Thường cung cấp cho bạn thông tin phản hồi vào cách bạn đang giải quyết một vấn đề. Nếu bạn cần làm một cái gì đó tốt hơn một chút, phê bình xây dựng thường là cho tốt nhất trong những phần ý kiến. Vì vậy, xin vui lòng, xin vui lòng, tôi sẽ để dành thời gian viết bình luận. Xin vui lòng, tôi thực sự sẽ đánh giá cao nó nếu các bạn sẽ đọc được những ý kiến. ĐƯỢC. Mát. Được rồi. Vì vậy, chúng ta sẽ bắt đầu nói chuyện và chỉ cần xem lại một cách nhanh chóng một số vật liệu từ tuần không chỉ như vậy chúng tôi trên trang bên phải cho bắt đầu từ vấn đề của tuần này. Vì vậy, các vòng lặp while là một trong ba loại của các vòng chúng ta đã thảo luận trước đó trong lớp này. Một vòng lặp trong khi về cơ bản được viết theo cú pháp ở đâu, khi một điều kiện nhất định, làm điều này nhiều lần, phải không? Hãy suy nghĩ về nó trong đồ họa này ở đây. Bạn sẽ bắt đầu tại một điểm nhất định trong mã của bạn. Bạn sẽ nhập các điều kiện vòng lặp if-- tôi không know-- x là ít hơn một. Nếu đó là sự thật, bạn sẽ để thực hiện thân vòng lặp. Và bạn sẽ tiếp tục làm đó một lần nữa, một lần nữa, một lần nữa, hơn và over-- đó là lý do nó là một loop-- đến khi tình trạng của bạn trở nên sai. Vì vậy, trong cách này, một vòng lặp trong khi là một trong những cách đơn giản phải viết bất kỳ loại điều kiện đó cần phải lặp lại hơn và hơn và hơn. Chỉ cần cẩn thận bất cứ khi nào bạn viết bất kỳ loại vòng lặp rằng bạn có một điều kiện xuất cảnh như cũng như một bản cập nhật để bất cứ điều gì là vì vậy mà vòng lặp của bạn không chỉ chạy hơn và hơn vô hạn. Trong mọi trường hợp, bạn sẽ để muốn chắc chắn rằng bạn đang thay đổi một số khía cạnh của mã của bạn hoặc ở cuối của vòng lặp chỉ để chắc chắn rằng bạn có một cách của tiến đến điều kiện rằng bạn muốn gặp để kết thúc. Điều đó có ý nghĩa với tất cả mọi người? Chúng tôi chỉ không muốn có bị cuốn vào vòng xoáy này nơi chúng tôi đi vòng quanh và không có cách nào để phá vỡ các vòng lặp. Và mỗi vòng lặp cơ bản có một cách để làm điều đó. ĐƯỢC. Thứ hai, nhiều bạn trong psets Mario của bạn có lẽ đã phải sử dụng loại này của vòng lặp. Nó được gọi là một việc phải làm trong khi vòng lặp. Trước hết, bất cứ ai có thể cho tôi biết những gì khác biệt giữa một làm trong khi vòng lặp và vòng lặp while là? Yeah. Đung Việc làm trong khi vòng lặp chạy ở đầu tiên [Không nghe thấy]. Andi PENG: Yeah, chính xác. Vì vậy, một làm trong khi vòng lặp luôn luôn làm bất cứ điều gì là bên trong do, bên trong dấu ngoặc có và không điều kiện trước khi kiểm tra the-- xin lỗi, không mã mà trước kiểm tra các điều kiện. Và điều này đặc biệt có liên quan đến chúng tôi ở đây trong lớp này, vì hầu hết các lần chúng ta sẽ muốn nhắc người sử dụng cho một số loại đầu vào. Và sau đó, tùy thuộc vào các đầu vào mà họ cung cấp cho chúng tôi, sau đó chúng ta có thể đánh giá, oh, làm chúng ta cần phải nhắc lại họ không? Vì vậy, trong Mario, nếu người sử dụng đã cho bạn một chiều cao tiêu cực, ví dụ, bạn sẽ nhanh chóng đầu tiên và làm những gì ở bên trong. Sau đó bạn sẽ kiểm tra trong khi. Bạn biết đấy, là âm 1, là một số dương? Nếu không, tôi sẽ đi lại và lặp lại những việc cần làm và lặp lại và lặp lại và lặp lại cho đến khi họ cuối cùng là cung cấp cho bạn một số mà bạn thích, rằng tất cả chúng ta có thể sử dụng trong mã của chúng tôi. Nó khá quan trọng đối với về cơ bản bất kỳ người dùng nhập vào. Tôi có thể đảm bảo cho bạn bất kỳ thời gian trong một pset nơi chúng tôi yêu cầu bạn nhập bất kỳ loại mã, chúng tôi có thể sẽ cung cấp cho bạn một trường hợp thử nghiệm, trong đó chúng tôi sẽ cung cấp cho bạn một cái gì đó xấu đó là sẽ cố gắng để phá vỡ mã của bạn. Nếu chúng ta cố gắng để yêu cầu bạn một đầu vào số nguyên, chúng tôi chỉ có thể cung cấp cho bạn một chuỗi và xem làm thế nào bạn sẽ xử lý đó. Nếu chúng tôi yêu cầu bạn phải sử dụng một thời đại, chúng tôi có thể cung cấp cho bạn một số tiêu cực để xem làm thế nào bạn sẽ xử lý đó. Chỉ cần chắc chắn rằng các bạn đang thử nghiệm cho trường hợp mà bạn không có được tốt nhất đầu vào, chúng ta hãy chỉ nói. Và một việc phải làm trong khi vòng lặp thưòng tốt nhất cách để thiết kế mã của bạn để rằng nó đáp ứng phạm vi đó. ĐƯỢC. ĐƯỢC. Vì vậy, đây có lẽ là nhất vòng lặp phức tạp ra khỏi ba mà chúng ta đã xem xét cho đến nay. Và có vẻ như rất đáng sợ lúc đầu. Nhưng tôi đảm bảo với bạn, khi các bạn nhận được hang của làm thế nào để sử dụng một vòng lặp for, đó là một trong những điều hữu ích nhất, hầu hết các công cụ hữu ích trong kho vũ khí của bạn để di chuyển về phía trước trong lớp này. Vì vậy, ví dụ, trong Scratch, chúng tôi đã có khối rất đơn giản này mà chỉ nói lặp lại điều này nhất định Cụm từ số lần nhất định. Bằng cách này, SAJ-- đó là Scaz Andi Jason. Chúng ta đôi khi ký email SAJ của chúng tôi. Nếu chúng ta nói SAJ, không bị nhầm lẫn. Đó là chỉ cho chúng tôi. Vì vậy, trong Scratch, chúng tôi đã có thể có một khối mà nói, lặp lại tôi yêu SAJ! 10 lần. Rất đơn giản. Logic đằng sau đó là một rất, rất đơn giản, phải không? Tôi muốn đầu tiên đi qua đầu tiên thời gian và thấy rằng, lần thứ hai và thấy rằng, lần thứ ba, vv và như vậy, cho đến khi bạn đạt đến 10. Và cách chúng ta sẽ đại diện cho rằng trong code chỉ là thông qua một đơn giản cho vòng lặp. Vì vậy, cho, bạn sẽ phải khai báo biến của bạn ở đây, trong trường hợp này, với một int. Chúng tôi sẽ đặt tên nó tôi. Chúng ta sẽ khởi tạo nó để 0. Và phiên bản dừng là sẽ là i nhỏ hơn 10. Và các bản cập nhật sẽ là i ++. Và trong vòng lặp, nó sẽ để thực hiện cho đến khi cuối cùng nó hits cuối condition-- trong đó trường hợp, nó sẽ phá vỡ các vòng lặp. Có phải là thứ mà bạn kẻ đã tất cả các loại nhìn thấy trước và phải làm cho vấn đề của bạn thiết lập một. Có ai có bất kỳ câu hỏi về cho vòng ngay bây giờ? ĐƯỢC. Thật tuyệt. ĐƯỢC. Vì vậy, đối với những người bạn của những người có đọc spec pset cho tuần này biết rằng chúng ta sẽ phải sử dụng một cái gì đó gọi là ASCII và bảng mã ASCII. Vì vậy, David trong bài giảng đã đi qua một thời gian ngắn thế nào máy tính essentially-- tất cả mọi thứ được mã hóa trong một máy tính trong nhị phân, trong số không và những người thân. Và cách mà máy tính có thể để lưu trữ các giá trị khác nhau, thêm đến số không và những người là thông qua bản đồ những con số đại diện cho chữ số khác hoặc các ký tự cơ bản khác. Vì vậy, trong trường hợp này, một ASCII table-- tất cả nó là nhân vật bản đồ, hoặc ký tự, để các con số. Vì vậy, các tập tin mã nguồn trong computer-- nó thấy bạn, hey, một loạt các số không và những người thân, số không và những người thân, số không và những người thân. Đó là những gì được lưu trữ trong bộ nhớ thực tế của máy tính của bạn. Nhưng khi con người chúng ta muốn giao tiếp với máy tính, chúng tôi want-- nói, ví dụ, nếu tôi muốn các chữ hoa A, Tôi sẽ cần một số cách nói cho các máy tính, oh, khi tôi gõ chữ hoa A, tôi có ý nghĩa đại diện này trong hệ nhị phân. Và do đó, cách chúng tôi làm điều đó là ném một điều tùy tiện gọi là một bảng mã ASCII, nơi chúng tôi, như con người, như lập trình, một số thời gian trước đây, chúng tôi tự ý quyết định rằng chúng tôi đã đi để chỉ định các số giá trị cho những nhân vật này. Vì vậy, các bạn có thể google trực tuyến này. Tôi nghĩ rằng có một liên kết đến nó trong bạn pset-- chỉ là một bảng đồ ASCII, ASCII bàn. Nó chỉ dịch nhị phân số thành ký tự. Và nó sẽ là rất hữu ích cho bộ vấn đề của bạn bất cứ khi nào bạn muốn tính toán bất cứ điều gì hoặc nếu bạn muốn hiển thị số ký tự hoặc số nguyên hoặc thao tác một số ký tự. Nó sẽ là rất quan trọng là tất cả các bạn biết làm thế nào để điều hướng một bảng mã ASCII. Vì vậy, ví dụ, các chữ hoa A được đại diện bởi số 65. Và chữ thường một được đại diện bởi 97. Vì vậy, điều quan trọng là phải biết rằng Sự khác biệt giữa hai giá trị là 32. Thông thường, nếu bạn cần để chuyển đổi từ một đến khác, sự khác biệt là 32. Và đừng lo lắng nếu bạn loại nhầm lẫn về điều này lần đầu tiên. Chúng tôi sẽ đi qua như thế nào, chúng tôi sẽ dụng này trong mã thực tế. ĐƯỢC. Vì vậy, đối với những người bạn với máy tính xách tay ra, cảm thấy tự do để kéo lên một bảng mã ASCII, vì những lẽ sẽ đòi hỏi các bạn phải tham khảo những gì các nhân vật. ĐƯỢC. Vì vậy, khi biết rằng nhất định nhân vật đồ để số lượng nhất định, nếu tôi chạy chỉ là đầu tiên dòng đó code-- printf một, chữ thường a, trừ chữ hoa A. Có ai có dự đoán về những gì sẽ là in ra màn hình ngay bây giờ? Vì vậy, trước hết, những gì hiện Chữ thường một đại diện? Số nào là mã hóa trong bảng ASCII. Lấy làm tiếc? Đung 97? Andi PENG: 97, tuyệt vời. Và chữ hoa A là gì? Đung 65. Andi PENG: Vậy là những gì 97 trừ đi 65? Đung 32. Andi PENG: OK. Vì vậy, những gì bạn nghĩ là sẽ xảy ra khi tôi nhập vào đó dòng mã vào máy tính của tôi? Đung [không nghe được]. Andi PENG: Xin lỗi, lên nói chuyện. Đừng lo lắng. Điều này là rất an toàn môi trường, trừ các máy ảnh. Tất cả chúng tôi đi với: không phải lo lắng. Chỉ cần tất cả chúng ta sẽ giả vờ như nó chỉ là chúng ta làm lạnh trong phòng này. Đừng lo lắng. Không có câu hỏi là quá ngu ngốc. Không có câu trả lời là một câu trả lời ngu ngốc. Tôi rất có thể sẽ có những sai sót trong quá trình giảng dạy của tôi. Nghiêm túc, guys, vừa thốt ra. Hãy tự tin vào chính mình, bạn có biết? Vì vậy, đó là cái gì? Ai nói rằng câu trả lời cuối cùng? ĐƯỢC. Shout là tốt đẹp và rõ ràng. Đung 32? Andi PENG: 32. OK, chúng ta hãy chạy đoạn mã này và xem đó là những gì sẽ xảy ra. ĐƯỢC. Vì vậy, các bạn có thể loại thấy, các ký hiệu điển hình tôi đã thiết lập ở đây để làm thế nào chúng ta sẽ sử dụng bất cứ loại chương trình trong máy tính của chúng tôi. Chúng có chức năng chính của chúng tôi trong phạm vi chức năng chính của chúng tôi. Tôi chỉ cần đi để sao chép và dán dòng mã này. Cũng phải cẩn thận khi các bạn sao chép và dán mã. Đôi khi một số nhà khai thác không dán trên một cách chính xác. Trong trường hợp đó, trừ dấu hiệu thực sự là một dấu gạch ngang. Và do đó, các máy tính không nhặt nó lên. Vì vậy, tôi đã phải quay trở lại và vật lý gõ lại đó. Chỉ cần cẩn thận khi các bạn đang làm điều đó. ĐƯỢC. Chúng tôi đang đi để chạy này ở đây. Vì vậy, chúng ta sẽ cd vào section2 của chúng tôi. Tôi đã gọi chương trình asciimath này. Vì vậy, hãy nhớ, khi chúng tôi chạy bất kỳ chương trình, chúng tôi muốn đầu tiên biên dịch nó bằng cách chạy nó thông qua make của chúng tôi. Và sau đó, chúng tôi muốn thực sự chạy các chương trình bằng cách làm dot-slash. Vì vậy, chúng ta sẽ ./asciimath. Phải, có chúng tôi đi. Và chúng ta thấy 32. Làm tốt. Bạn xứng đáng được một viên kẹo. Kẹo cho bạn. Lấy làm tiếc. Được rồi. ĐƯỢC. Vì vậy, chúng ta có thể quay trở lại với ví dụ của chúng tôi ở đây. À, không. Aah. ĐƯỢC. Tôi chỉ cần đi để giữ cho nó như thế. ĐƯỢC. ĐƯỢC. Vì vậy, các bạn có thể thấy, chúng ta có thể làm rất nhiều thứ rất thú vị, rất nhiều thứ rất mát mẻ, rất nhiều những điều rất phức tạp liên quan Ký tự ASCII và số. Một khi bạn nhận được xuống để xếp hàng năm, đó là rất nhiều để làm theo cùng. Chúng tôi sẽ không đi thông qua phần này. Hãy đến, nếu bạn có thể, lý do nó ra trên giấy đầu tiên về những gì nên xảy ra khi bạn nhập vào như một chuỗi các giá trị. Ví dụ, trong đó dòng cuối cùng, chúng ta có z-- đại diện cho một number-- nhất định a-- mà còn đại diện cho một nhất định number-- cộng 1 modulos 26 cộng với chữ thường a. Nếu các bạn hãy đọc thông qua đó, bạn có thể thấy một mô hình đi lên trong làm thế nào chúng ta đang thao tác mã. Tôi đánh giá cao, giá cao đề nghị sau khi tất cả các phần của bạn kẻ đi trước và đầu vào tất cả những người trong máy tính của bạn và xem những gì loại số được sắp ra và lý luận thông qua các lý do tại sao những người đang có xảy ra, bởi vì đối với psets của bạn nó sẽ được thực sự quan trọng để bạn có thể hiểu tại sao những điều nào đó đang xảy ra. Tất cả các slide sẽ được trực tuyến. Vì vậy, không phải lo lắng về việc cố gắng thể chất sao chép lại các ghi chú. Trực tuyến của tất cả mọi thứ. Phần này tự nó sẽ được trực tuyến. Tất cả các mã nguồn của tôi mà Tôi đang chạy sẽ được trực tuyến. Yeah. Đã bạn vẫn có một câu hỏi? Đung modulos là gì? Andi PENG: OK. Vì vậy, theo modulo là một nhà điều hành đó sẽ là khá quan trọng để pset của chàng trai của bạn chỗ này. Vì vậy, cách mà các nhà khai thác trong C và trong công việc lập trình là bạn có những gì được gọi là biểu tượng bộ phận và các biểu tượng mô đun, mà là giống như các ký hiệu phần trăm. Vì vậy, trong C, khi bạn làm một số nguyên chia một số nguyên với một dấu gạch chéo, C có xu hướng muốn cắt off tất cả các điểm thập phân, vì một số nguyên muốn để chuyển đổi sang một số nguyên. Nó sẽ không muốn trở thành một đôi với một loạt các số thập phân sau khi tất cả nó. Vì vậy, nếu tôi làm 3 chia cho 2, nó sẽ để cắt đứt các 0,5 và chỉ cung cấp cho bạn 1. Vì vậy, đó là một cái gì đó để được rất cẩn thận khi bạn làm bất kỳ loại của toán học trong lập trình, là các số bạn nhận được có thể không phải là số rằng bạn đã suy nghĩ, đó là lý do làm tròn trong của bạn pset cuối cùng là rất quan trọng. Modulo cung cấp cho bạn phần còn lại. Vì vậy, ví dụ, nếu tôi đã làm 3 modulo 2-- so 3 phần trăm dấu 2-- nó sẽ cung cấp cho bạn phần còn lại của điều đó. Vì vậy, 3 chia cho 2 là 1,5. Đó là 1 phần còn lại của 1. Nó sẽ cung cấp cho bạn 1, là phần còn lại của điều đó. Vì vậy, khi các bạn đang di chuyển thông qua các bảng mã ASCII, modulo sẽ kết thúc được cái gì đó là rất quan trọng, và chúng ta sẽ thảo luận sau này. ĐƯỢC. Vì vậy, cái gì đó là đẹp, khá mới và khá độc đáo mà chúng ta đã thảo luận trong tuần này các khái niệm về những gì một mảng. Vì vậy, mảng là người đầu tiên Loại cấu trúc dữ liệu rằng chúng ta sẽ gặp phải trong lớp này. Tất cả các cấu trúc dữ liệu được là một số loại tùy ý, nghĩa là những thứ như cấu trúc rằng chúng tôi là lập trình viên đã tạo ra, mà chúng tôi đã đặt trong mã của chúng tôi có thể chứa các phần khác của mã. Vì vậy, trong ý nghĩa này, một array-- nghĩ về nó như một tủ hồ sơ, mà nếu bạn mở khác nhau kệ của nội các tập tin của bạn, bạn có thể truy cập vào những việc khác nhau. Trong bộ nhớ, một mảng được chỉ làm điều tương tự trên máy tính của bạn. Bạn có thể có chúng tôi blocks-- khác nhau gọi họ indices-- của một mảng. Nó giống như một khối, một hạn sử dụng của bộ nhớ mà chúng ta đã tạo ra trong bạn máy tính mà bạn có thể nhập vào điều nào đó trong không gian khác nhau. Vì vậy, với một mảng, bạn luôn luôn phải specify-- bạn phải xác định tuyên bố một mảng trong các định dạng sau đây. Bạn đang đi đến đầu tiên xác định kiểu dữ liệu mà bạn muốn tạo ra các mảng. Nếu tôi muốn một mảng các số nguyên, Tôi sẽ đặt int ngay tại đó. Nếu tôi muốn một mảng của chuỗi, Tôi sẽ đưa dây có, tên của mảng của bạn, và sau đó bạn sẽ có dấu ngoặc vuông. Và bên trong các dấu ngoặc vuông, bạn sẽ có kích thước của mảng của bạn. Cái gì đó thực sự quan trọng để lưu ý khi tạo mảng là rằng, một khi bạn tạo ra một mảng, kích thước mà không thể thay đổi. Vì vậy, nếu bạn biết rằng ngay bây giờ bạn có một mảng có kích thước 10, Bạn có biết rằng tôi sẽ có 10 tế bào trong hoặc 10 chỉ số trong mảng này, và nó sẽ không bao giờ để mở rộng hoặc giảm không có vấn đề gì, và rằng có hiện nay chỉ 10 khối không gian phân bổ trong bộ nhớ của bạn có thể lưu trữ lên đến 10 điều của bất cứ điều gì bạn đã đặt. Vì vậy, trong cách này, một kiểu dữ liệu mảng, các cấu trúc dữ liệu là một mảng là rất khác nhau từ một số người khác chúng tôi sẽ được bao gồm trong phần sau của khóa học này. Yeah. Ví dụ, nếu bạn muốn tạo ra một mảng có kích thước 3 mà chứa biến của integer-- oh, xin lỗi, của temperature-- và nhiệt độ, của Tất nhiên, là một số nguyên. Vì vậy, chúng tôi sẽ tạo ra int, mà là kiểu dữ liệu của những gì chúng ta muốn lưu trữ. Chúng tôi sẽ gọi cho nhiệt độ này vì lợi ích của danh pháp của việc đặt tên điều mà tất cả chúng ta hiểu. Và chúng ta sẽ có dấu ngoặc vuông. Và chúng tôi muốn ba con số. Vì vậy, chúng ta sẽ đặt ba bên trong của nó. Cái gì đó thực sự quan trọng cần lưu ý là mảng được lập chỉ mục zero. Tất cả điều đó có nghĩa là bạn bắt đầu với chỉ số 0, và bạn chạy lên qua kích thước của mảng trừ đi 1. Vì vậy, ví dụ ở đây, chúng tôi có một mảng có kích thước 3. Nó sẽ có thể để giữ ba giá trị. Nhưng những con số mà themselves-- số, mảng, chỉ số đó, mảng, là 0 đến 2. Vì vậy, guys, được thực sự, thực sự cẩn thận khi bạn đang trải qua những vấn đề của bạn thiết lập và tạo ra bất kỳ loại mảng, bởi vì rất nhiều lần nó thực sự, thực sự dễ dàng để quên rằng. Tôi thực sự không có các chỉ số 3, mà tôi hiện chỉ có chỉ số của 2. Và nếu bạn cố gắng truy cập vào các chỉ số thứ ba, nó sẽ là gì gọi là terminator null. Nó sẽ không thực sự tồn tại trong mảng. Và các máy tính là sẽ không thích điều đó. Vì vậy, hãy cẩn thận bất cứ khi nào bạn đang truy cập thứ chỉ để đảm bảo rằng bạn nhớ rằng mảng là zero-lập chỉ mục. ĐƯỢC. Vì vậy, ví dụ đầu tiên chỉ là một cách để tạo ra một mảng. Ví dụ thứ hai tôi có dưới đây là chỉ là một cách riêng biệt của việc tạo ra các dữ liệu tương tự là gì cấu trúc mà chúng ta vừa nhập. Vì vậy, thay vì thể chất chạy thông qua và đưa về nhiệt độ trên 0 bằng bất cứ điều gì, nhiệt độ 1 bằng bất cứ điều gì, nhiệt độ 2 equals bất cứ điều gì, tôi có thể thực sự chỉ trực tiếp tạo ra nó tất cả trong một dòng vào nhiệt độ bằng dấu ngoặc vuông. Và thông báo trong trường hợp này, bạn không cần để chỉ định cách lớn mảng của bạn là, bởi vì máy tính sẽ đi qua và thấy rằng có ba yếu tố trong những dấu ngoặc nhọn. Và nó sẽ biết, OK, Tôi cần một mảng có kích thước 3. Bạn sẽ không cần phải đầu vào nó theo cách sau. Và cũng có thể, yeah, theo cách đó. Có ai có câu hỏi liên quan đến cách chúng ta làm cho mảng hoặc cách cơ cấu của một mảng hoạt động? Yeah. Đung [Không nghe thấy]? Andi PENG: Yeah, chính xác. Vì vậy, nếu bạn đã khai báo và khởi tạo một mảng các phương pháp sau đây, đó là cách thứ hai, bạn chỉ có thể để lại những người. Và các máy tính tự động biết rằng nó cần phải đếm bao nhiêu yếu tố được trong những dấu ngoặc nhọn, tách bởi dấu phẩy. Vì vậy, ở đây họ nhìn thấy 65, 87, 30. Vì vậy, các máy tính biết, oh, có ba số nguyên. Tôi biết để tạo ra một tên mảng nhiệt độ với ba yếu tố trong nó. Câu hỏi hay. Yeah. Đung Không phải là nó có thể tạo ra một mảng với các loại dữ liệu khác nhau mà có thể được nhập vào nó? Ví dụ, với số nguyên [Không nghe thấy]? Andi PENG: Đối với các mục đích của lớp này, không, ngay bây giờ. Khi bạn tạo ra một dữ liệu cấu trúc giống như một mảng, bạn đang nói sự máy tính, hey, tôi cần bạn để phân bổ này nhiều bộ nhớ trong ổ cứng của tôi, với mỗi tế bào là một số lượng nhất định các bit. Nhớ là chúng tôi đã học được trong tuần zero rằng dữ liệu khác nhau loại có kích cỡ khác nhau? Vì vậy, ví dụ, một chuỗi là một số tiền khác nhau không gian hơn một char, mà là một số tiền khác nhau của không gian từ một số nguyên. Và vì vậy nếu bạn không xác định và bạn trộn và kết hợp những loại biến bạn có, các máy tính của sẽ rất bối rối. Và nó không phải đi để biết bao nhiêu bộ nhớ để cung cấp cho bạn. Vì vậy, mục đích của quyền Bây giờ, máy tính có thể chỉ nhận ra một loại của một mảng. Câu hỏi hay. ĐƯỢC. Vì vậy, tự nhiên, Câu hỏi thứ hai, chúng tôi có là, tốt, bây giờ mà chúng tôi đã tạo ra một mảng và chúng tôi đã đặt tất cả những việc này trong mảng, làm thế nào chúng tôi đi để có thể truy cập vào nó? Vì vậy, các cấu trúc điển hình mà chúng ta luôn luôn truy cập vào một mảng là đáng yêu của chúng tôi cho vòng lặp. Tôi hứa với các bạn rằng chúng tôi sẽ được nhìn thấy rất nhiều đồng nghiệp ở đây. Về cơ bản, bất cứ lúc nào bạn muốn để nhập giá trị vào một mảng hoặc bạn muốn truy cập chúng, các Cách tốt nhất để làm điều đó là một vòng lặp for, bởi vì trong một vòng lặp for, bạn biết bao nhiêu lần bạn sẽ muốn chạy qua mảng, bởi vì bạn có một ấn bản dừng lại, phải không? Và mỗi khi bạn chạy thông qua, bạn có thể truy cập một yếu tố khác nhau của mảng. Và cũng có thể, đây là một lý do tại sao thường chúng tôi bắt đầu của chúng tôi cho vòng ở các giá trị 0, bởi vì khi bạn truy cập vào các mảng, bạn có thể truy cập vào các chỉ số zero. Và do đó, nó song song rất độc đáo. Các bạn có thể muốn viết cho int i bằng 1. i nhỏ hơn hoặc bằng 3. Nhưng nó sẽ không làm việc khá cũng ở đây, bởi vì bạn chỉ có yếu tố từ 0, 1 và 2. Và vì vậy nếu bạn đã bắt đầu i của bạn ở phần 1, 2, và 3, bạn sẽ kết thúc chạy ra khỏi giới hạn của mảng của bạn, và những điều xấu sẽ xảy ra. Vì vậy, tôi hy vọng các bạn thấy segue lý do tại sao trong các lớp trước chúng ta đã dạy các bạn làm thế nào để chạy và định dạng một vòng lặp cho cách mà chúng tôi đã có. Đó là bởi vì, bây giờ chúng tôi đã chuyển thành các mảng, bạn có thể thấy tại sao 0 cho vay chính nó rất độc đáo để truy cập. Vì vậy, cách chúng tôi làm điều đó là that-- tôi chỉ cần in nó ra ở đây, vì lợi ích in ấn nó ra. Nhưng tôi phải giữ chỗ của tôi, dấu phẩy. Và việc truy cập đến thực tế phần đang xảy ra. Tên của mảng được gọi là nhiệt độ. Vì vậy, nó là nhiệt độ và thứ i phần tử của mảng. Vì vậy, khi cho vòng lặp chạy qua, nó sẽ bắt đầu từ 0. Nó sẽ in ra Chỉ số 0 của mảng này. Sau đó, nó sẽ in ra phần tử đầu tiên. Sau đó, nó sẽ in ra một lần thứ hai. Và sau đó chúng ta sẽ phá vỡ. Là tất cả mọi người rõ ràng về làm thế nào mà đang xảy ra? Thật tuyệt. Được rồi. Vì vậy, ở đây chúng ta có một cách nói, nếu chúng ta không muốn tự code in-- tôi như là các lập trình viên. Tôi không muốn thực sự về thể chất đặt trong mỗi yếu tố cá nhân của mảng này. Nếu tôi muốn thay có giá trị sử dụng đầu vào, cách tốt nhất để làm điều đó là gì? Vâng, ở đây tôi đã tạo ra Chức năng này đáng yêu, trong đó tôi có thể khai báo một mảng. Vì vậy, chúng ta hãy int scores-- chỉ nói rằng chúng ta muốn thực hiện một mảng mà tổ chức các lớp của tất cả 18 của học sinh ở đây trong phần này. Tôi nghĩ rằng chúng tôi đã có một chút hơn 18 trẻ em ngày nay. Nhưng vì lợi ích của ví dụ, chúng ta hãy giả sử chúng ta đã có 18. Tôi sẽ tạo ra một điểm tên mảng với kiểu int, vì điểm số, tất nhiên, là những con số. Và tôi sẽ có 18 trong dấu ngoặc vuông, bởi vì đó là bao nhiêu học sinh tôi muốn có thể để lưu trữ điểm số của. Và cách tôi cư mảng là tôi muốn chạy nó thông qua một vòng lặp, các Tất nhiên, với 0 là số 0 của tôi. Và sau đó với 18 là của tôi dừng phiên bản, bởi vì có 18 yếu tố trong mảng. Và sau đó tôi sẽ làm printf, Nhập tỉ số student-- yada yada yada. Bất cứ ai có thể cho tôi biết tại sao ở đây tôi là in i cộng với 1 và không phải tôi? Đó là một loại lừa câu hỏi, không thực sự. Nó không thực sự thể chất ảnh hưởng đến hoạt động của các mã. Yeah. Đung [Không nghe thấy] 0? Andi PENG: Yeah, chính xác. Đó là một chút khó khăn để nói, hey, bạn là sinh viên 0 trong lớp này. Đó là một chút lạ. Vì vậy, chúng tôi, như con người, thật sự không thích để suy nghĩ về cách thức các máy tính nghĩ. Vì vậy, mặc dù trong máy tính, nó lưu trữ các giá trị trong chỉ số 0-th, khi chúng tôi con người, chúng ta không thực sự muốn đề cập đến mình là zero. Vì vậy, khi tôi chỉ in đó, Tôi đang chuẩn bị in và thêm 1 chỉ vì lợi ích của sự rõ ràng. Vì vậy, khi tôi in, tôi sẽ được có khả năng in các học sinh từ 1 đến 18. Nó không thực sự ảnh hưởng các hoạt động của các mã trong bất kỳ cách nào, cách tôi in. Nhưng hãy cẩn thận khi bạn thực sự truy cập mảng. Khi bạn nhìn thấy những điểm i, ý ở đây tôi thực sự truy cập vào các chỉ số 0 và không phải là 1 cộng 0-- hoặc 1 cộng với 1, trong trường hợp này, chỉ số vậy rằng nó thực sự rõ ràng. Là tất cả mọi người loại OK trên cách này được chạy qua và với mỗi chỉ số tôi đưa giá trị vào mảng và tạo ra một mảng với 18 số mà người sử dụng sẽ đầu vào? ĐƯỢC. Mát. ĐƯỢC. Bây giờ chúng ta chuyển thành một cái gì đó là khá có liên quan cho phần này thiết lập như là tốt. Tôi biết trong bài giảng, David-- xin lỗi, bạn đã có một câu hỏi? Đung bạn có thể phóng to nó? Andi PENG: Yeah, vì vậy tôi đã cố gắng. Nhưng tôi không biết. Đối với một số lý do, điều này phiên bản của PowerPoint thực sự không làm việc tốt với màn hình hiển thị. Vì vậy, chúng tôi chỉ cần đi để giữ nó như thế này. Tất cả những sẽ được tải lên trực tuyến. Xin lỗi các bạn. Yeah. ĐƯỢC. Vì vậy, chúng ta cũng có thể có các chuỗi. Vì vậy, nếu các bạn thực sự notice-- tôi biết Rob đã đi qua này trong bài giảng mà rằng ông did-- một chuỗi thực sự là chỉ là một mảng kí tự, nếu bạn nghĩ về nó, phải không? Một chuỗi là một tên hoặc một câu hoặc một từ, phải không? Nếu tôi là để tạo ra một chuỗi tên là Andi-- chỉ tên của tôi, A-N-D-I. Bạn nghĩ rằng như chỉ là một biến. Nhưng trên thực tế, nó bị hỏng xuống vào chỉ là một mảng của các ký tự. Vì vậy, nó có một nhân vật của một lưu trữ trong một mảng giá trị. Nó có một nhân vật của n được lưu trữ trong Chỉ số thứ hai và vv và vv. Vì vậy, trong một cách như vậy, chúng tôi thực sự có loại này của cấu trúc thiết lập trong đặt cho chuỗi của chúng tôi. Vì vậy, ở đây, nếu tôi đã nhập Từ "ăn" - vì vậy từ chuỗi bằng nhận được chuỗi. Nếu tôi được nhập vào từ "ăn", mà là chất cách mà máy tính của tôi được lưu trữ đó chuỗi trong bộ nhớ của tôi. Và nếu tôi muốn chạy qua mà và in mà out-- nên cho vào i bằng không, hãy nhớ, trong bài giảng, chúng tôi một cái gì đó bao phủ đó được gọi là strlen, hoặc chiều dài của chuỗi. Bởi vì tôi không thực sự biết làm thế nào lớn mảng là của bất cứ inputting-- của người dùng Ví dụ, tôi đã nhập vào từ "ăn", và tôi biết đó là dài ba nhân vật, phải không? Vì vậy, tôi có thể đặt trong một ba có và tất cả mọi thứ sẽ tốt đẹp. Nhưng nếu một cái gì đó vào người sử dụng của bạn đó là một số lượng khác nhau của các giá trị, bạn sẽ không có khả năng thực sự biết rằng khi bạn chương trình mã của bạn. Vì vậy, cách mà chúng ta xử lý các trường hợp thử nghiệm như thế là chúng ta có một cái gì đó gọi là strlen, mà chỉ là một chức năng mà nói với bạn một chuỗi là bao lâu. Vì vậy, strlen của từ. Lời của tôi là ăn. n bằng strlen của từ. Ai có thể cho tôi biết những gì mà giá trị thực sự là phải có? Gì n đại diện cho quyền Hiện tại, trong ví dụ này, nếu tôi đã ăn gì? Đung 3. Andi PENG: 3, chính xác. Vì vậy, chúng tôi đã cho int i bằng bằng không, n bằng 3, về cơ bản. Và tôi sẽ chạy cho đến khi nó ít hơn 3i ++. Và nó sẽ yếu đi thông qua và thực hiện tương tự. Nó sẽ in ra mỗi giá trị và cung cấp cho bạn ĂN. Nó chỉ biểu thị một cách khác nhau của văn bản đó. Điều đó sẽ rất hữu ích. Yeah. Đung những lợi ích của việc đưa là gì các n bằng từ bên trong mà strlen cho vòng lặp [Không nghe thấy]? Andi PENG: Yeah. Vì vậy, nếu tôi là nhằm: nói, ví dụ, nếu tôi được làm điều đó và sau đó do-- oop-- rằng, trong mã của tôi, nó sẽ thực sự có thể làm như điều tương tự. Tuy nhiên, cách mà David giải thích nó trong quá trình giảng bài, nếu bất kỳ của các bạn nhớ, đó là, như con người, như lập trình, chúng tôi thực sự cố gắng để chương của chúng tôi code để máy tính của chúng tôi có để làm việc càng ít càng tốt, vì vậy mà mã của chúng tôi là rất hiệu quả. Vì vậy, nếu tôi đã có, những gì sẽ xảy ra thông qua các vòng lặp của tôi là đầu tiên tôi muốn khai báo một biến i có tên là có được 0. Tôi sẽ kiểm tra, oh, strlen của từ là gì? Oh, strlen là 3. Vậy là tôi ít hơn ba? Vâng, đó là. Tôi sẽ chạy. Và sau đó lần thứ hai trở lại xung quanh các vòng lặp, tôi sẽ tăng i. i là có được một. Và tôi sẽ kiểm tra, oh, nhưng strlen của từ là gì? Oh, đó là ba. Và điều ấy có loại lãng phí, mỗi khi bạn chạy qua các vòng lặp, được kiểm tra các chức năng, mặc dù strlen của từ không bao giờ thực sự thay đổi? Vì vậy, nó thêm sức mạnh cho một máy tính. Khi bạn bắt đầu nói về những điều đó là tỷ tỷ và hàng tỷ địa điểm dài, hãy tưởng tượng máy tính của bạn có thể chất đi qua và kiểm tra tất cả mà mỗi lần duy nhất. Đó là lý do tại sao, để làm cho chỉ vì lợi ích của hiệu quả, chúng ta có xu hướng chỉ làm điều này, bởi vì cách này chúng tôi chỉ gọi hàm một lần trong đầu, và rằng mỗi khi nó đi qua nó sẽ để lưu trữ các giá trị 3 ở đó, mà bạn không phải liên tục kiểm tra tất cả thời gian. Yeah. Đung Xin lỗi. Chỉ cần [không nghe được]. Bạn có thể làm int n bằng strlen và đặt rằng trên lớp bên ngoài của vòng lặp for cũng? Andi PENG: Yeah. Bạn có thể làm điều đó, hoàn toàn. Lý do chúng tôi có nó ở đây là vì cách một công trình vòng lặp được rằng nó được gọi là một biến địa phương trong ý nghĩa rằng tất cả mọi thứ bạn tạo bên trong của vòng lặp for chỉ tồn tại bên trong vòng lặp for. Vì vậy, các biến i chỉ tồn tại trong những dấu ngoặc đơn. Và ở đây các biến của n cũng chỉ tồn tại trong những dấu ngoặc đơn. Vì vậy, nếu bạn đã sử dụng strlen của từ nhiều lần xuống bên dưới, hoàn toàn là cách tốt nhất để làm điều đó sẽ là tuyên bố nó lên hàng đầu vì vậy bạn không cần phải làm điều đó một lần. Yeah. Đung Tại sao bạn có một dòng mới sau khi các phần trăm nhìn thấy nếu bạn muốn đặt tất cả các chữ cái tiếp theo để nó tách biệt? Andi Peng: Oh, tôi muốn in tất cả trên mỗi dòng. Nó không quan trọng. Vâng, đó là một định dạng. Đó là một câu hỏi hay, mặc dù. Vâng, nếu tôi muốn in tất cả trên chỉ là một dòng, Tôi sẽ không có dấu gạch ngang trong. ĐƯỢC. Tất cả mọi người tốt? ĐƯỢC. Mát. Vì vậy, tôi nghĩ rằng tôi đã nói hơi nhiều. Lần lượt các bạn để chạy qua mã và cho tôi biết những gì là sai trái ở đây. Trường hợp của lỗi? Vì vậy, như bạn có thể thấy, tôi đã tuyên bố một mảng mới có kiểu string tên lớp. Và tôi đã đầu vào Sam, Jess, và Kim vào nó. Và tôi đang cố gắng để in ra tất cả các phần tử của mảng. Ai có thể cho tôi biết tại sao điều này sẽ cung cấp cho tôi những vấn đề? Tôi sẽ cung cấp cho các bạn 10 giây để suy nghĩ về điều này. ĐƯỢC. Yeah? Đung Là trung tâm trái bằng 3 hay [không nghe được]? Andi PENG: Đúng vậy. Vì vậy, bao nhiêu lần là điều này thực sự sẽ chạy qua vòng lặp này? Đung Four. Andi PENG: Chính xác. Nó sẽ để thông qua bốn lần. Nó sẽ chạy qua 0, 1, 2, và 3, vì phần tử của họ là i là nhỏ hơn hoặc bằng 3. Nó sẽ không dừng lại khi nó 2. Nó sẽ giữ đi cho đến khi nó chạm 3. Và như chúng ta đã biết, có chỉ là ba các phần tử trong mảng thực tế của chúng tôi. Nếu chúng ta cố gắng để truy cập thứ tư phần tử hay các chỉ số của 3, bạn đang đi để đạt một nơi nào đó trong bộ nhớ mà không tồn tại. Nó được gọi là terminator null. Không có gì đang xảy ra ở đó. Máy tính của bạn không phải là đi là rất hạnh phúc với bạn. Yeah. Có ai có câu hỏi về lý do tại sao mà đã xảy ra? Đó là một khu vực chung để tránh. Yeah. Đung Không những lần đầu tiên trượt cũng có một chuỗi của 2? Andi PENG: No. Vì vậy, về cơ bản, khi bạn đang làm cho một mảng, đó khung bên phải ở đó, rằng number-- tất cả nó nói cho bạn là như thế nào nhiều yếu tố tôi có. Nó không thực sự nói tôi các chỉ số của bất cứ điều gì. Vì vậy, trong trường hợp này, tôi biết tôi muốn để viết với ba nơi, với ba vị trí vật lý giữ bất cứ điều gì tôi muốn giữ. Vì vậy, đó là lý do tại sao số ba là có. Tuy nhiên, nếu tôi muốn để thực sự truy cập vào nó, nếu tôi muốn nói, printf số khung lớp, sau đó bạn sẽ thực sự đặt các chỉ số vật lý đó. Vâng, câu hỏi hay. Đung Vì vậy, là vật lý chỉ số cho là [Không nghe thấy]? Andi Peng: Tôi xin lỗi. Bạn có thể nói lên một chút? Đung Vậy là chỉ số vật lý [Không nghe thấy] mỗi hộp? [Không nghe thấy]? Andi PENG: Yeah. Vì vậy, tôi sẽ quay lại ngay đây. Nghĩ ngay đây. Chúng tôi có một mảng có kích thước 3. Có ba nơi, như, placeholders vật lý ở đây. Nhưng chúng ta đã đặt tên 0, 1 và 2. Vì vậy, nếu tôi muốn truy cập chúng, cách mà tôi truy cập chúng là printf của bất cứ điều gì tôi muốn ở đây. Bạn sẽ phải in ra tên của nó, bởi vì sau đó máy tính biết, oh, tôi cần phải nhìn trong mảng này cho các chỉ số 0. Yeah. Nhưng kích thước của nó không thay đổi. Kích thước là 3, không phân biệt làm thế nào bạn đánh giá chúng. ĐƯỢC. Tất cả mọi người tốt? Đung Vì vậy, mỗi khi tôi [Không nghe thấy]? Andi PENG: OK. Vì vậy, trong trường hợp này, chúng ta không thực sự nhận được vào nó ngay bây giờ trong khóa học. Nhưng biết rằng một string-- như tôi cho biết trước đó, một chuỗi là cơ bản một mảng ký tự. Vì vậy, nếu tôi tạo ra một mảng dây, tôi loại có một mảng của mảng của nhân vật, phải không? Vì vậy, trong trường hợp này, bởi vì tôi có một mảng các chuỗi, nếu bạn đã nhập vào một từ rất lâu, mà vẫn chỉ chiếm một không gian, bởi vì đó là một chuỗi. Nhưng nếu bạn đã nghĩ các nhân vật của mảng đó, thì đó chiếm rất nhiều hơn nhân vật nhiều hơn bất cứ từ nào khác là. Không thực sự quan trọng đối với ngay bây giờ. Nhưng đó chỉ là nói chung làm thế nào nó làm việc. ĐƯỢC. Vì vậy, đây là một cái gì đó tôi sẽ cho bạn làm rất nhiều trong quá trình học kỳ. Tôi cần phải nghỉ ngơi giọng nói của tôi. Các bạn cần phải kích thích chính mình. Rất nhiều bạn có thể phải ngủ ngay bây giờ. Tôi nhập vào vấn đề ngẫu nhiên nơi chúng tôi như là một lớp hay bạn với một đối tác bên cạnh bạn đang đi để dành một vài phút thảo luận làm thế nào chúng ta sẽ đi về giải quyết hoặc tạo ra một chương trình như thế này. Vì vậy, ngay bây giờ, chúng tôi muốn để tạo ra một program-- chúng ta sẽ gọi nó upper.c-- rằng cải đạo một từ chữ thường để một lớp trên chữ hoa string--, xin lỗi. Từ trong chuỗi, xin lỗi, là đồng nghĩa. Tôi sẽ thay đổi chúng để có cùng một nghĩa. Yeah. Đi một vài phút. Nó không phải là được viết bằng ngôn ngữ nào. Chỉ trong mã giả hoặc một cách hợp lý như thế nào, chúng tôi sẽ thậm chí đi về làm một vấn đề như vậy. Yeah. [SIDE thoại] Tôi cũng nhận thấy rằng các bạn can-- Tôi đã nhìn thấy loại chương trình. Tôi đoán tôi thiếu chế độ thuyết trình là một vấn đề. Nhưng nó ổn. [SIDE thoại] Vâng, xin vui lòng, guys. Hãy đến nhận kẹo. Hãy đến nhận kẹo. Đung thê! [SIDE thoại] Andi PENG: Ngoài ra, yeah, Tôi sẽ bắt đầu ném kẹo ở những người không trả lời câu hỏi. Vì vậy, bạn nên tất cả các câu trả lời. Hoặc Tôi cho rằng những người không trả lời câu hỏi. Yeah, cách khác xung quanh. [SIDE thoại] Đung [Không nghe thấy] Andi PENG: Yeah. Yeah. [SIDE thoại] Tất cả các quyền, guys. Đi, như, 10 giây nữa. [SIDE thoại] OK, guys. Vì vậy, trước khi chúng tôi bắt đầu cố gắng để thực chất viết code, một thói quen tốt để phát huy được sức chúng ta muốn loại đầu tiên của lý ra một cách hợp lý như thế nào, chúng tôi sẽ làm điều đó. Bạn muốn chắc chắn, trước khi bạn có thể chất bắt đầu cố gắng để mã trong Mario, mà bạn thực hiện chắc chắn rằng bạn có mã giả của bạn. Đó là đưa bạn qua những gì bạn cần để tạo nên rằng, khi bạn thể chất viết chương trình của bạn sau này, bạn có thể tốt hơn để bắt lỗi trong mã và những điều như thế của bạn. Vì vậy, chúng ta sẽ chỉ bắt đầu tuỳ theo trường bằng tiếng Anh, trong giả, không ai muốn cho cho tôi một lời giải thích chung chung làm thế nào chúng ta sẽ đi về việc này? Yeah. Đung [không nghe được]. Andi PENG: Chắc chắn, không phải lo lắng. Đung bạn có thể yêu cầu nó hay hỏi một người nào đó để có được chuỗi 1-- yeah, chuỗi, và sau đó-- Andi PENG: Có, vì vậy đây là một khởi đầu tốt. Tôi sẽ bắt đầu đánh máy, xin lỗi, như bạn nói. Vì thế-- Đung --Thông chữ thường con số này cao hơn, phải không? Hoặc các chữ cái viết thường có số lượng cao? Andi PENG: Chính xác. Đung Vì vậy, sau đó chúng tôi loại trừ 32 từ bất cứ điều gì [không nghe được]. Andi PENG: Great. Vì vậy, chúng ta hẳn sẽ có một cảm giác chung làm thế nào để làm việc về vấn đề này. Biết rằng chúng tôi đã loại học cách vật lý chuỗi được lưu trữ trong bộ nhớ, làm những gì bạn đã biết rằng bạn đang đi để có thể phải viết trong mã của bạn để di chuyển qua các chuỗi? Đung Đối với loop. Andi PENG: Một vòng lặp for, chính xác. Thật tuyệt. Vì vậy, chúng ta hẳn sẽ có một chung giả viết ra loại đó là đem lại cho bạn lưu ý về cách bạn sẽ di chuyển về việc giải quyết vấn đề. Bây giờ bạn có điều này, bạn có thể tham khảo nó cho sau này trên khi bạn đang cố gắng để thực sự viết code của bạn. Vì vậy, chúng tôi thực sự có thể đi đây. Và tôi đã có một chức năng gọi là upper.c-- có nó is-- chỉ một mẫu trống ngay bây giờ rằng các bạn sẽ giúp tôi tìm ra làm thế nào để viết dòng này của code-- không dòng mã. Nó sẽ có nhiều dòng mã. Khi bắt đầu bất kỳ loại của pset trống, những gì điều đầu tiên tôi cần nhớ để làm gì? Đung [không nghe được]. Andi PENG: Great Yep. Bao gồm. stdio.h. Thông thường đây là một trong những sai lầm dễ dàng hầu hết mọi người sẽ thực hiện khi họ đang viết, là họ sẽ quên bao gồm một thư viện quan trọng mà họ cần. Vì vậy, nếu đó là giờ làm việc và bạn giống như, Tôi không biết lý do tại sao mã của tôi không hoạt động. Bạn có thể cho tôi biết lý do tại sao nó không làm việc? Chúng ta sẽ nói rằng bạn đã #include? Bạn nên #include nó. ĐƯỢC. Vì vậy, chúng tôi đã có các tiêu chuẩn I / O ở đây. Là thư viện duy nhất chúng ta sẽ cần ở đây? Chúng tôi Những gì người khác sẽ làm gì? Lấy làm tiếc. Có người chỉ la hét nó ra? Đung [không nghe được]. Andi PENG: Có bạn đi. ĐƯỢC. Và làm thế nào để tôi đi về bắt đầu bất kỳ loại chức năng, bất kỳ loại chức năng chính trong chương trình của chúng tôi? Int chính. ĐƯỢC. Tôi đặt những gì bên trong ở đây? Điều đầu tiên bạn muốn làm là gì? Nếu chúng ta muốn có được một chuỗi từ người dùng, được những gì chúng ta sẽ có làm trên dòng đầu tiên này? Xin lỗi, các bạn chỉ cảm thấy miễn phí để lên tiếng và lớn. Chỉ hét ra bất cứ điều gì. Đung hỏi người sử dụng? Andi PENG: Làm thế nào để chúng tôi làm điều đó? Ask-- tôi sẽ gõ "yêu cầu người sử dụng"? Đung Printf. Andi PENG: OK. Printf. Tôi muốn gì printf? Đung Gõ vào một cái gì đó. Andi PENG: Giống như điều đó không? Guys, giả vờ như tôi là một máy tính. Thể chất cho tôi từng bước rằng tôi cần phải gõ vào đây? Tôi làm điều gì sai? Tôi nên đã gõ một cái gì đó? Đung Bạn cần dấu ngoặc kép. Andi Peng: Tôi cần báo giá? ĐƯỢC. ĐƯỢC. Đung Và dòng sau đó mới. Dấu chấm phẩy. Andi PENG: dấu chấm phẩy? ĐƯỢC. Tốt. Đung Và có thể chỉ định mà bạn muốn nó ở dạng chữ thường? Andi PENG: Great. Các bạn cười tôi quên đặt một dấu chấm phẩy. Tôi đảm bảo với bạn một nơi nào đó trong quá trình của lớp này, bạn sẽ quên đặt một dấu chấm phẩy, và nó sẽ đưa bạn ba giờ để tìm hiểu tại sao mã của bạn không làm việc. Nó đã xảy ra với tất cả chúng ta. Nó có thể sẽ xảy ra với bạn. Nhận được trong một thói quen tốt của việc sử dụng dấu chấm phẩy. ĐƯỢC. Đung Bạn có muốn để làm dấu chéo ngược trong? Andi PENG: Chắc chắn rồi. Bạn có muốn làm các dấu gạch chéo ngược trong? Đung thê. Andi PENG: Great. ĐƯỢC. Tôi phải làm gì tiếp theo? Đung Nhận chuỗi. Andi PENG: Nhận chuỗi. Vì vậy, tôi gõ những gì? Ai đó? Đung String s. Andi PENG: String s. Đung GetString. Andi PENG: Ai đó, bạn có thể cho tôi biết nơi hàm GetString này là đến từ đâu? Đung string.h. Andi PENG: string.h? Bạn nghĩ rằng đó là từ string.h? Đung [không nghe được]. Andi PENG: Có bạn đi. Đó là từ CS50.h. Nếu bạn luôn luôn nhầm lẫn về một nơi tập tin thư viện là hoặc một tập tin tiêu đề là, google nghĩa đen string.h, và tôi sẽ cho bạn biết là những gì tất cả các chức năng đó là trong string.h. ĐƯỢC. Vì vậy, bây giờ mà tôi đã tạo ra một chuỗi và tôi đã nhắc nhở người dùng nó, Tôi đã cất nó trong một biến tên là s, những gì tôi cần phải làm gì bây giờ? Đung Kiểm tra nếu nó ở dạng chữ thường. Andi PENG: Xin lỗi? Đung Kiểm tra nếu nó ở dạng chữ thường. Andi PENG: Được rồi, chúng ta hãy làm điều đó. Làm thế nào để làm điều đó? Trên thực tế, cho các mục đích của lớp ngay bây giờ, chúng tôi chỉ cần đi để cho rằng mọi thứ rằng đầu vào, chúng tôi đã có trong chữ thường. Nếu bạn muốn kiểm tra, bạn sẽ chỉ cần thêm một câu lệnh điều kiện mà kiểm tra, chạy qua mỗi phần tử mảng duy nhất và kiểm tra nếu nó giữa các giá trị nhất định. Tôi quên những gì số các giá trị của chữ viết thường. Bạn có thể tìm nó lên trên các bảng mã ASCII. Nhưng yeah, đó là một điểm thực sự tốt. Nhưng ngay bây giờ, chúng tôi chỉ cần đi để giả định rằng tất cả các chuỗi đầu vào chúng tôi là chữ thường. ĐƯỢC. Vì vậy, làm thế nào tôi sẽ đi về Vấn đề này tiếp theo? Đung Đối với loop. Andi PENG: Đối với các vòng lặp? ĐƯỢC. Nói cho tôi biết những gì để đánh. Đung Đối int i bằng 0. Andi PENG: OK. Đung Oh, thực sự, sau đó bạn làm một dấu phẩy và làm n bằng strlen. Andi PENG: điều quan trọng Vì vậy, mà tôi nghĩ rằng cô ấy nhận thấy ở đây là chúng ta đã không phải nói int n lần thứ hai chúng tôi đã làm điều này. Chỉ biết rằng trong một cho vòng lặp khi bạn khai báo, bạn thực sự không cần các int của lần thứ hai bạn làm một biến. Bạn có thể nói n strlen. Đung Of s. Andi PENG: s. ĐƯỢC. Đung Sau đó, một dấu chấm phẩy. Andi PENG: Chắc chắn rồi. Đung Và sau đó [Không nghe thấy] n. Sau đó, i ++. Andi PENG: Great. Được rồi. Chúng ta muốn gì bên trong điều này cho vòng lặp bây giờ? Hãy nhớ rằng, nếu chúng ta sẽ chạy qua một chuỗi và chạy thông qua một mảng, chúng tôi muốn kiểm tra những thứ trong đó. Chúng ta sẽ cần đến? Đây là loại phần khó khăn hiện nay. Bất cứ ai cũng có một đoán? ĐƯỢC. Vì vậy, đầu tiên, làm thế nào để chúng ta thậm chí truy cập? Làm thế nào để chúng tôi thậm chí kiểm tra đầu tiên hoặc truy cập vào một phần tử trong mảng? Làm thế nào để chúng tôi làm điều đó? Các ký hiệu, chúng tôi sử dụng để làm điều đó là gì? Tên của mảng này là gọi là gì? Nó được gọi là s, phải không? Hãy nhớ rằng, bất kỳ chuỗi luôn luôn là một mảng. Vì vậy, khung s i, phải không? Bởi vì đó là giá trị hiện tại hoặc giá trị chỉ số, chúng tôi đang kiểm tra. Và chúng ta sẽ thiết lập đó bằng đối với: chúng tôi muốn có một giá trị chữ thường, phải không? Chúng tôi muốn biến mà lower-- xin lỗi, chúng ta muốn một chữ hoa. Chúng tôi muốn biến chữ thường giá trị vào một chữ hoa. Và như vậy like-- Tôi xin lỗi, Bạn tên là gì? Đung Heidi. Andi PENG: Xin lỗi? Đung Heidi. Andi PENG: Heidi. Giống như Heidi nói Ban đầu, chúng tôi có thể sẽ cần the-- chúng tôi có lẽ sẽ phải trừ đi 32 từ bất cứ charc mà, phải không? Bởi vì trên một ASCII bảng, sự khác biệt giữa một chữ cái thường và một ký tự hoa là 32. Vì vậy, khi chúng tôi đang làm điều này, chúng tôi có thể sẽ muốn trừ đi 32, phải không? Vì vậy, chúng tôi đang đi làm s i. Có tất cả mọi người hiểu được lý do tại sao tôi đã làm điều đó? Bởi vì ngay bây giờ, trong mảng của chúng tôi, chúng tôi đang kiểm tra các chỉ số 0, phải không? Và trong số 0 của chuỗi, đó là nhân vật đầu tiên. Và nhân vật mà chúng ta đang đi để giả định đó là chữ thường. Nếu chúng ta muốn làm cho nó chữ hoa, chúng tôi phải trừ đi 32 từ giá trị của nó, bởi vì trong ASCII của chúng tôi bảng, đó là cách mà chúng tôi có được nó tiếp theo tương ứng giá trị mà làm cho nó thành chữ hoa. Có phải mọi người hiểu điều đó không? Yeah. Đung Có thể bạn cũng làm chữ thường một minus-- Andi PENG: Yeah, vì vậy đó là thực sự thực sự tốt. Tôi sẽ trở lại mà câu hỏi sau khi chúng ta làm điều này. Yeah. Và sau đó nếu tôi muốn xem những gì đang xảy ra, Tôi rất có thể sẽ muốn in, phải không? Ai đó cho tôi biết những gì Tôi muốn in ở đây. Đung printf phần trăm c backslash [không nghe được]. Đó là giá trị của [Không nghe thấy] s i. Andi PENG: s i, xin lỗi? Đung [không nghe được]. Andi Peng: Tôi không biết. Bạn nghĩ sao? Đung Vâng, tôi wouldn't-- Tôi đoán tôi sẽ không bring-- Tôi sẽ mang nó ra bên trong, bởi vì [không nghe được]. Andi Peng: Oh, bạn đã có thể làm được điều đó? Đung Yeah. Andi PENG: Hãy để sau đường nó là, và tôi sẽ giải thích lý do tại sao sau đó. Hãy nhớ rằng, ngay cả khi bạn có một giữ chỗ, bạn muốn đặt dấu ngoặc xung quanh nó. Được rồi. Vì vậy, đây phải là một chức năng vững chắc ở đây. Hãy chạy nó và xem nếu nó biên dịch. Làm trên. Uh-oh. Điều đó không nhìn quá tốt. Tại sao điều này xảy ra? Như với bất kỳ lỗi, bạn muốn đi trở lại và bắt đầu với một trong những đầu tiên, vì thường gây ra một lỗi rất nhiều lỗi khác sau khi nó. Ở đây chúng ta thấy upper.c: 18: 25, trong đó kể tôi trong chương trình này có tên upper.c, on line 18, lỗi ngầm tuyên bố thư viện hàm strlen với loại blah unassigned--, tôi không biết những gì đang xảy ra sau đó. Tất cả nó nói với tôi ngay bây giờ là một cái gì đó đang xảy ra trên strlen. Và các máy tính đang bối rối, bởi vì nó như thế, tôi không biết những gì là strlen? Điều đó có lẽ cho bạn biết bạn đang bị thiếu? Đung Bạn đang thiếu [không nghe được]. Andi PENG: Bạn nói đúng. Đúng như vậy. Vì vậy, đây là nơi mà nó quan trọng để đảm bảo mà mỗi chức năng bạn sử dụng trong của bạn đang có những tiêu đề chính xác nộp cho thư viện, hoặc người nào khác bạn sẽ nhận được rất nhiều lỗi và mã của bạn không phải là đi để biết những gì đang xảy ra. Vì vậy, chúng ta sẽ bao gồm string.h đây. Bây giờ khi chúng tôi cố gắng để biên dịch trên. Biên dịch một cách chính xác. Hãy chạy chương trình này. Vì vậy, cái gì đó kiểu chữ thường. Những gì các bạn muốn gõ? Hét ra một cái gì đó. Tất cả các quyền, Charly chỉ bước vào. Chúng tôi sẽ gõ tên của Charly. Charly trong chữ thường. Và hy vọng, hy vọng, đây là sẽ hét lên và nhổ ra Charly chữ hoa. Yay! ai cũng hiểu như thế nào Tôi đã đi đến việc giải quyết đó? Cách mà tôi có thể thao tác sử dụng số nguyên để giải quyết cái gì đó Tôi muốn làm trong chuỗi, bởi vì các ký tự và số nguyên thể được tham chiếu trong cùng một cách bởi vì lập bản đồ ASCII. Vì vậy, để trở lại với quan điểm của bạn, nếu tôi muốn đặt ở đây thay vì 32 chữ hoa chữ thường A trừ một giống như rằng, đó sẽ làm việc như nhau là tốt, vì đó đơn giản chỉ là Sự khác biệt giữa hai giá trị. Nếu tôi muốn làm cho Charly again-- này. Ồ không. Tôi nghĩ rằng chúng tôi đã đi sai đường, yeah? Đung [Không nghe thấy] chữ thường a. Andi PENG: Có bạn đi. Yep. Và ra spits Charly. Vì vậy, hãy cẩn thận khi bạn trừ đi giá trị nhớ đó là một trong lớn hơn khác. Ví dụ, ở đây tôi quên mà thực sự là một chữ thường lớn hơn chữ hoa A. Vì vậy, khi tôi cố gắng để trừ chúng theo cách khác xung quanh, tôi đã âm 32. Và máy tính của tôi là như thế, Tôi không biết đó là gì. Đó là xác suất chỉ là một số ngẫu nhiên giá trị đó không phải là rất tốt. Và do đó hãy chắc chắn rằng bạn đang trừ đi trong chiều dài chính xác để tìm các ký tự bạn muốn. ĐƯỢC. Có ai nhầm lẫn về cách chúng tôi đi về cách viết chức năng này? ĐƯỢC. Vì vậy, trên thực tế, một chức năng đã tồn tại trong thư viện được gọi ctype.h. Các thư viện được gọi là ctype.h. Chức năng này thực sự là đã viết cho bạn. Nó được gọi là để phía trên. Và như vậy với mục đích pset này, bạn đang đi để thấy rằng bạn thực sự muốn sử dụng rất nhiều các chức năng chứa trong thư viện CType. Để thượng, hạ, là thượng, là lower-- đó là tất cả các chức năng rằng bạn sẽ có thể sử dụng rất, rất nhanh chóng trong mã của riêng bạn mà thực hiện chính xác những gì điều này. Chúng tôi đã viết ra như thế nào để chuyển đổi một chuỗi sang chữ hoa. Nhưng điều này thực sự là mã rằng ai đó đã viết và rằng bạn có thể truy cập qua một chức năng khác nhau. Yeah? Đung Vì vậy, bạn chỉ cần sao chép của một trong đó và làm điều đó cho mỗi chữ cái? Andi PENG: Vâng, bởi vì tôi không quan tâm đến các giá trị của a. Tôi chỉ quan tâm rằng sự khác biệt giữa chúng là 32, phải không? Sự khác biệt giữa chữ thường b và chữ hoa B cũng là 32. Và sự khác biệt giữa c và chữ hoa C luôn luôn là 32. Tôi chỉ cần phải quan tâm đến Sự khác biệt giữa hai, bởi vì tất cả các chữ cái theo cùng một khuôn mẫu, phải không? Nếu tôi có sự khác biệt giữa một trong số họ, Tôi biết những gì khác biệt giữa tất cả trong số họ. Câu hỏi hay. Yeah. Tất cả mọi người tốt? ĐƯỢC. Oop. ĐƯỢC. Vì vậy, khái niệm khác đó là sẽ rất hữu ích khi bạn tiếp tục phát triển mã của bạn là ý tưởng này của việc tạo ra các chức năng hoặc trừu tượng. Vì vậy, ngay bây giờ, chúng tôi đã thực hiện tất cả các đại số. Trong đại số, bạn được dạy rằng có Điều tuyệt vời này được gọi là một chức năng máy, mà nếu bạn đầu vào một loại số, nó chạy qua chức năng tuyệt vời này và ra khỏi hiện ra một đầu ra khác nhau, phải không? Trong mã, điều tương tự sẽ xảy ra trong bất kỳ loại chức năng. Vì vậy, tôi có thể thể chất viết trong cơ thể của tôi về code của tôi một tuyên bố chính mà thực sự làm bất cứ điều gì cơ thể của mã đang làm. Nhưng bên ngoài đó, tôi cũng có thể viết nhiều chức năng khác nhau mà làm nhiều việc khác nhau. Ví dụ, chúng tôi đã đã bắt đầu sử dụng một số trong số họ. Printf-- đó là một chức năng mà người khác đã viết rằng chúng ta có thể gọi trong mã của chúng tôi. Để upper-- trong trường hợp này, upper-- là một chức năng khác chúng tôi đã viết rằng chúng ta có thể gọi trong mã của chúng tôi. Và vì vậy tôi đoán tại sao chúng tôi thậm chí có chức năng này? Tại sao chúng ta không chỉ tiếng tom nó tất cả trong cùng một dòng mã? Nó làm cho nó dễ dàng cho tất cả mọi người. Vâng, lý do đằng sau đó là, trước hết, tổ chức. Nó thực sự gây phiền nhiễu đi thông qua mã của ai đó và một chức năng như printf. Nếu các bạn thực sự biết những gì hàm printf kéo theo để viết, đó là, như, 1.000 dòng mã. Nếu mỗi lần muốn printf một cái gì đó, Tôi đã phải viết 1.000 dòng mã, đó sẽ là thực sự gây phiền nhiễu để đọc, bên phải? Đó là lý do tại sao chúng tôi đã chỉ tạo ra chức năng trừu tượng này chúng ta đã có một người nào đó khác đã viết ở một nơi khác. Và mỗi lần chúng ta cần phải sử dụng nó trong mã của chúng tôi, chúng tôi chỉ có thể nói printf. Và đó có thể sử dụng chức năng ai đó đã viết trong mã của chúng tôi. Nó làm cho nó dễ dàng hơn về tổ chức để đọc mã. Thứ hai, đó là đơn giản hóa. Nó đơn giản hóa các bước mà chúng ta có cần thực hiện để giải quyết vấn đề của chúng tôi. Printf, chức năng giống như printf, chức năng giống như trên là tất cả những điều đó cho phép chúng tôi đơn giản hóa mã của chúng tôi xuống để nó dễ dàng hơn. Và điều cuối cùng là có thể dùng lại. Vì vậy, thực tế là chúng tôi có một chức năng gọi là printf rằng chúng ta có thể gọi nhiều khác nhau lần và cho phép nó được tái sử dụng. Nếu tôi được viết printf, Tôi chỉ viết nó một lần. Nó chỉ tồn tại trong đó một nơi. Nếu tôi muốn làm điều đó một lần nữa, tôi sẽ phải sao chép và dán tất cả mà vào dòng thứ hai của tôi về code. Đó là lý do tại sao nếu chúng ta tạo ra một chức năng mà tồn tại bên ngoài của chính chúng ta, chúng ta chỉ có thể kêu gọi nó và tái sử dụng nó bất cứ khi nào chúng ta cần để nó dễ dàng hơn nhiều đối với chúng tôi như các chương trình để viết. Vì vậy, cách mà chúng tôi thực sự sẽ viết một chức năng là rất giống nhau, phải không? Đây là loại đầu tiên Chẳng hạn, trong đó chúng tôi sẽ thấy một chức năng cất trên một phong cách khác với int void main của chúng tôi. Trong trường hợp này, nếu tôi muốn viết một chức năng gọi là q, phải không? Và các giá trị int đây là tất cả nói với tôi, làm những gì tôi muốn điều này chức năng để trở về với tôi? Nếu tôi muốn cube một số nguyên, Tôi sẽ muốn đầu vào. Đây là các thông số. Tôi sẽ nhập vào một giá trị kiểu int. Và tôi sẽ quay trở lại một giá trị kiểu int. Và ở đây, như bạn có thể thấy, tất cả tôi đang làm được Cubing bất cứ đầu vào của tôi là như đầu ra của tôi và trả lại nó. Vì vậy, tất cả các chức năng này không được có một số loại nguyên. Nó sẽ nhân nó bằng chính nó hai lần để nó Cubes có hiệu lực. Và sau đó nó sẽ trả về bất cứ điều gì đầu ra đó là. Vì vậy, trong trường hợp này, đó là hai dòng mã mà chúng tôi đã phải viết thêm. Nhưng nếu chúng ta muốn gọi trên này nhiều lần, nó dễ dàng hơn rất nhiều để gõ một mà dòng ngay tại đây đó là trong khối hơn phải đi qua nhiều lần. Vì vậy, cách mà thực chất bất cứ định dạng cho bất kỳ loại chức năng sẽ tồn tại giống như ở đây. Vì vậy, chúng tôi có các tên hàm. Trong trường hợp này, nó được gọi là khối lập phương. Và chúng tôi đặt tên cho nó vì khối lập phương nó dễ nhớ. Bạn có thể đặt tên cho nó vuông và nó thực sự có thể được cắt nhỏ hinh khôi. Không quan trọng. Chỉ cần một cái tên mà bạn giao chức năng của bạn. Quyền này ở đây, int, là kiểu của tham số bạn cần. Vì vậy, những gì hiện chức năng này cần để hoạt động? Vâng, nó cần một đầu vào. Tôi đặt tên nó là đầu vào. Bạn có thể đặt tên nó bất cứ điều gì bạn muốn. Nhưng tôi cần một cái gì đó kiểu int. Nó sẽ thực sự thực thi bất cứ điều gì là bên trong ở đây, các cơ quan chức năng. Và sau đó là kiểu trả về ngay tại đây, int-- này tất cả nó nói với tôi là Chức năng của hàm này là sẽ trở về với tôi trong int. Vì vậy, nó sẽ mất trong một int, và nó sẽ cho bạn trở lại một int. Có phải mọi người hiểu như thế nào định dạng của loại công trình này? Mát. ĐƯỢC. Vì vậy, đừng lo lắng nếu điều này có vẻ một chút trừu tượng ngay bây giờ. Đây là điều mà chúng ta sẽ nói về. Chúng ta sẽ đi sâu vào sâu hơn sau này trong khóa học. Cách mà bất kỳ loại cấp cao hơn trừu tượng của những sự vật hoạt động là, trong bộ nhớ, trong máy tính của bạn, tất cả mọi thứ được lưu trữ trong loại này của chồng, tôi sẽ nói. Vì vậy, lên đó ở đầu trang. Tôi không biết nếu bạn guys có thể nhìn thấy những gì tốt. Tôi sẽ cố gắng để phóng to. Dưới đây ở đầu, chúng tôi có văn bản vật lý của những gì máy tính là interpreting-- tất cả các số không và những người tồn tại trong máy tính của chúng tôi. Và sau đó, chúng tôi đã khởi sự dữ liệu và chưa được khởi tạo dữ liệu, những gì chúng ta gọi là biến toàn cầu. Vì vậy, các biến tồn tại trên tất cả các chương trình và trên toàn bộ của bạn, về cơ bản, mã. Không phải lo lắng nếu các bạn là loại không rõ ràng về điều này. Nó không quan trọng ngay bây giờ. Và sau đó chúng tôi có những gì được gọi là một đống trong một chồng. Hãy suy nghĩ của một chồng theo nghĩa đen như giống như một đống thứ, một chồng khác nhau thứ bị đẩy lên trên của nhau mà lưu trữ khác nhau biến và cú pháp trong mã của bạn. Và sau đó ở đây ở phía dưới rất, chúng tôi có các biến môi trường về những gì bạn đang thực hiện trong vòng chỉ đường nhỏ của mã. Và chúng tôi chỉ cần đi để phóng to ở trên stack phần thực tế. Vì vậy, ngay ở đây, nếu chúng ta để phóng to ở trên chỉ là khu vực này của chồng, đây là những gì nó trông như thế nào. Và điều này thực sự khá quan trọng khi các bạn nói về chức năng, vì thông báo rằng bộ nhớ của máy tính của bạn được lưu trữ các biến và các chức năng và các thông số của cả hai bạn chức năng và các biến chính của bạn ở những nơi khác nhau. Vì vậy, ngay bây giờ, chính là chức năng thực tế rằng bạn đang thực hiện trong một mã số. Bạn có những tham số của nó được lưu trữ ở đây và các biến cục bộ của nó được lưu trữ ở đây. Biến cục bộ chỉ có nghĩa là bất kỳ biến mà chỉ tồn tại bên trong hàm đó. Và trên đầu trang của nó, bạn có điều này chức năng riêng biệt được gọi là khối lập phương. Bạn có chừng đó là các thông số cũng như những người dân địa phương. Và lý do bạn có thể thấy ở đây là những gì xảy ra khi khối lập phương mất trong một giá trị từ chức năng chính của bạn mà thực sự là nó sao chép rằng hơn. Vì vậy, nếu tôi muốn cube 2 và trả lại 8, mà 2 thực sự là đầu vào như một tham số và nó sao chép trên để bạn có nó hiện tại ở hai nơi khác nhau trong bộ nhớ. Và bạn phải rất cẩn thận trên ghi nhớ mà một trong những bạn đang thực sự thao tác. Và một ví dụ về những gì đã xảy ra đó sẽ là rất, rất xấu tồn tại ngay tại đây. Vì vậy, ngay ở đây, tôi đã có, trên lý thuyết, một chương trình ngay tại đây, một chức năng chính rằng tôi tuyên bố một int x = 1. Tôi tuyên bố một int y = 2. Và sau đó tôi đang chạy nó thông qua chức năng này gọi là trao đổi, mà tôi cho rằng nó trao đổi hai giá trị. Và sau đó tôi sẽ in chúng ra, phải không? Đó là những gì tôi muốn chương trình này để làm. Vì vậy, chúng ta hãy đi xuống và có một cái nhìn. Vì vậy, nếu tôi thực sự viết khác nhau chức năng, như bạn có thể thấy, chúng tôi có chức năng chính của chúng tôi ở đây. Và sau đó chúng tôi có của chúng tôi Chức năng thứ hai ở đây. Swap Void. Void chỉ có nghĩa là nó sẽ không trả lại gì cả. Tên chức năng là gọi là trao đổi, và nó sẽ ăn hai biến, int a và int b, từ bạn [Không nghe thấy] chức năng. Vì vậy, về cơ bản ở đây, chúng tôi đi qua x và y vào chức năng này. Và nếu chúng ta tạo this-- vì vậy chúng tôi muốn để tạo ra một giá trị tạm thời, phải không? Chúng ta sẽ gán cho một. Và sau đó một là đi đến nay bằng b. Và b là có được trở lại trong đó giá trị temp, mà là một, bởi vì khi bạn muốn trao đổi mọi thứ, bạn có thể không chỉ muốn trao đổi chúng. Bạn cần phải giữ một trong ra ngoài ở đây vì vậy mà nó nhớ đó là những gì, bởi vì một khi bạn trao đổi một, bạn quên những gì mà giá trị ban đầu là, phải không? Vì vậy, về mặt lý thuyết, chương trình này phải làm việc, phải không? Nếu tôi muốn trao đổi các hai, họ nên trao đổi. Vì vậy, chúng ta hãy chạy nó và xem nếu nó hoạt động. Vì vậy, các bạn có thể thấy, x đã từng là 1 và y đã từng 2. Và nếu tôi in ra, x vẫn là 1 và y là 2. Hmm, chương trình này dường như không được làm việc theo cách mà tôi muốn nó làm việc. Có ai muốn tham gia một shot tại đoán tại sao điều này xảy ra? Nó đã làm với đường rằng những điều khác nhau là được lưu trữ ở những nơi khác nhau trong bộ nhớ. ĐƯỢC. Vì vậy, các bạn không phải lo lắng quá nhiều về việc này ngay bây giờ. Nhưng biết rằng của khối địa phương biến là a và b, bởi vì ở đây trong chức năng của chúng tôi, chúng ta đã khai báo a và b như các biến tồn tại trong khối lập phương, chức năng đó. Tuy nhiên, như bạn có thể thấy, các thông số nó lấy trong đã được lưu trữ ở đây. Nhưng chúng tôi đã không thực sự trở về bất cứ điều gì. Chúng tôi đã không thực sự thay đổi x và y. Chúng tôi đã chỉ cần thay đổi một và b. Chúng tôi đã sao chép x và y vào một cái gì đó gọi là a và b. Nhưng chúng ta không bao giờ thực sự thao tác x và y mình. Các bạn nhìn thấy làm thế nào mà đang xảy ra? Là chúng ta chỉ cần sao chép nó hơn, nhưng chúng tôi đã không thực sự giữ theo dõi của họ đang ở đâu trong bộ nhớ. Và vì vậy bây giờ máy tính đang tìm kiếm, oh, tôi đã chạy điều này thông qua chức năng đáng yêu này. Nhưng x và y vẫn là x và y. Không có gì đã xảy ra với họ vì thực tế rằng những thông số và các biến địa phương được lưu trữ trong một khác nhau đặt trong bộ nhớ. Và đây là một cấp cao hơn khái niệm rằng chúng ta sẽ bắt đầu thấy sau này trong khóa học. Nhưng chỉ biết rằng đây là một vấn đề có thể xảy ra và chúng ta sẽ tìm ra cách làm thế nào để đối phó với điều này sau này trong khóa học. ĐƯỢC. Được rồi. Vì vậy, khái niệm cuối cùng chúng tôi thực sự sẽ bao gồm đó là sẽ có ích cho pset tuần này được những gì được gọi là đối số dòng lệnh. Vì vậy, Rob trong bài giảng của mình đã đi qua loại ngắn gọn về cách làm việc. Về cơ bản biết rằng khi bạn đang viết như một chức năng chính, khi chúng ta viết hàm trước trong quá khứ, chúng tôi đã có int void main. Và lý do chúng tôi đã có khoảng trống đó là vì các chương trình của chúng tôi đã không cần các giá trị đầu vào để chạy, phải không? Khi tôi chạy Mario, tôi không cần để thực sự chỉ cần gõ vào một cái gì đó khi tôi chạy Mario. Tôi có thể nhắc nhở người dùng về sau. Nhưng điều đó sẽ không phải luôn luôn là trường hợp. Ví dụ, trong này Vấn đề tuần của bộ, bạn sẽ được hỏi rằng, trong Ngoài ra để chạy chương trình của bạn, bạn sẽ muốn đầu vào điều nào đó trong thẳng như bạn chạy chương trình của bạn. Vì vậy, cách chúng ta làm điều đó được gọi là một đối số dòng lệnh, mà giống như một đối số bạn có thể nhập trực tiếp như bạn đang cố gắng để chạy chương trình của bạn. Vì vậy, các ký hiệu cho điều này, nó khá phức tạp, tìm kiếm, nhưng nó thực sự không phải là khó. Vì vậy, int main-- đó chỉ là chức năng chính của bạn. Into argc dấu phẩy dấu ngoặc chuỗi argv. Vì vậy, tất cả những gì nói là điều này int argc-- tất cả những gì bạn nói là những người đang có số lượng lập luận của các máy tính nên mong đợi. Vì vậy, một trong những điều đó là thực sự quan trọng để theo dõi là tên vật lý của chương trình của bạn tính là một trong những lý luận. Vì vậy, nếu tôi muốn có chương trình của tôi chạy cộng với một dòng lệnh bổ sung lập luận, tôi thực sự sẽ có hai. Argc thực sự sẽ là hai. Và sau đó chuỗi argv bracket-- tất cả những gì đang làm, nó đem lại cho tôi một mảng các chuỗi đó sẽ chỉ hiển thị và lưu trữ những gì tất cả những đối số dòng lệnh được. Vì vậy, ví dụ, nếu tôi muốn có này chương trình, ./copy infile outfile, phải không? Đó chỉ là một lệnh Linux điển hình. Điều gì thực sự là argc? Có bao nhiêu đối số dòng lệnh là có thực sự trong việc này? Tất cả điều này là tạo một bản sao của một Infile của tên của một tập tin và nó sao chép nó vào tập tin khác, phải không? Đó là tất cả điều này đang làm. Như bạn có thể thấy, tôi đang làm nó trên một dòng mà không thực sự cần chạy các chương trình. Argc của chúng tôi trong trường hợp này là gì? Có bao nhiêu lý lẽ nào chúng ta có? Đung Ba? Andi PENG: Chúng tôi có ba, chính xác. Vì vậy, nó rất trực quan để chỉ nghĩ rằng nó chỉ là các Infile và outfile. Nhưng biết rằng tên vật lý của chương trình bạn đang chạy tính là một. Vì vậy, trong trường hợp này, argc thực sự là ba. Làm thế nào về, argv 0 là gì? Hãy nhớ rằng, tất cả các đối số dòng lệnh được lưu trữ trong một mảng các chuỗi. Vì vậy, nếu tôi cố gắng truy cập vào nó, những gì sẽ argv khung 0 cho tôi? Đung [không nghe được]. Andi PENG: Chính xác. Nó sẽ cung cấp cho tôi những dấu chấm giảm copy, bởi vì đó là các yếu tố 0, các Yếu tố đầu tiên của mảng của tôi. Những gì về argv 1? Đung Infile. Andi PENG: Infile, chính xác. Những gì về argv 2? Đung outfile. Andi PENG: outfile. Đây là một chút khó khăn hiện nay. Những gì bạn nghĩ argv 3 sắp được đem lại cho tôi nếu tôi cố gắng để in mà ra? Đung [Không nghe thấy]? Andi PENG: Bạn đã có một bàn tay lên? Yeah. Đung Một thay thế. Andi PENG: Chính xác. Vì vậy, hãy nhớ trong bài giảng mà chúng tôi có vào cuối của một cuộc đua một cái gì đó gọi là terminator null? Chúng tôi sẽ nhận được vào điều này cũng hơn nữa vào trong lớp. Nhưng biết rằng trong ký hiệu, cách máy tính của bạn biết rằng nó cuối cùng của mảng là nó đặt một cái gì đó gọi là một null terminator hoặc một dấu gạch ngang bằng không. Vì vậy, nếu bạn cố gắng để truy cập argv 3, bạn đang đi để đạt dash này 0. Điều này thậm chí còn nhiều hơn một câu hỏi trick. Những gì về argv 4? Vì vậy, đây là terminator rỗng quá khứ, qua những giới hạn của mảng của chúng tôi. Bạn nghĩ điều gì sẽ xảy ra khi chúng tôi cố gắng để làm điều đó? Đung [Không nghe thấy]? Andi PENG: Xin lỗi? Nói rằng một chút to hơn? Đung [không nghe được]. Andi PENG: Yes. Đó là tên của khu vực nhiều khả năng bạn sẽ nhận được. Nhưng biết argv mà 4-- cho phép bạn truy cập nơi trong máy tính của bạn bộ nhớ mà bạn thực sự không nên chạm vào, bởi vì ngay bây giờ bạn biết những gì là argv. Bạn biết rằng nó là một mảng có kích thước 3 có chấm sao chép, Infile và outfile. Nếu bạn cố gắng đi xa hơn thế nữa rằng bạn đang quá khứ terminator null, máy tính của bạn có thể một cái gì đó được lưu trữ trong argv 4. Và bạn thực sự không nên cho phép truy cập vào argv 4, bởi vì bạn có một tập tin tủ và bạn chỉ cho phép truy cập đến những ba kệ. Nhưng nếu bạn cố gắng để đạt được cách xa hơn kệ của nơi mà bạn được cho phép, bạn sẽ bắt đầu rối tung với những thứ khác trong bộ nhớ của máy tính. Điều đó sẽ được thực sự, thực sự xấu. Vì vậy, chỉ biết rằng. Hãy rất cẩn thận mà bạn không chỉ bắt đầu ngẫu nhiên truy cập vào các phần tử trong một mảng không những gì bạn muốn tạo ra. Yep. ĐƯỢC. Vì vậy, chúng tôi sẽ làm khác Ví dụ thiết bị đầu cuối ở đây. ĐƯỢC. Vì vậy, Rob nhanh chóng trong bài giảng hôm nọ đi thông qua ví dụ này, nơi ông có int main int argc chuỗi argv ngoặc, mà là nói cho tôi rằng tôi là sẽ có các đối số dòng lệnh. Ông có, nếu argc bằng bằng 2-- nhớ, bằng equals có nghĩa là so sánh. Nếu nó bằng 2, sau đó tôi sẽ in hello, bất cứ điều gì đầu tiên phần tử của mảng là. In khác, xin chào thế giới. Những gì được này sẽ xảy ra về cơ bản? Ai đó có thể chỉ giải thích English gì chương trình này đang làm gì? Yeah. Đung Nếu một người nào đó gõ vào lệnh và cho biết tên đầu tiên và cuối cùng của họ, nó sẽ không chỉ in đầu tiên và nói, xin chào, bất cứ tên đầu tiên của bạn là. Andi PENG: OK, chúng ta hãy chạy nó. Vì vậy, ví dụ, nếu tôi được làm tập tin này làm đối với: xin chào xin chào với: làm những gì bạn muốn tôi đầu vào? Đung và Tên. Andi PENG: Đầu tiên và cuối cùng tên? Không gian? Đung Yeah. Andi PENG: Ai có thể cho tôi ngay bây giờ, những gì là argc? Vừa phải có? Rất tiếc, xin lỗi. Hãy để tôi quay trở lại. Có bao nhiêu đối số dòng lệnh are-- các bạn có thể không thực sự nhìn thấy. Nhưng tôi sẽ cố gắng để phóng to. Tôi đang cô. Yeah, có ba, phải không? Đó là dấu chấm dấu gạch chéo hello, nó Andi, và nó Peng. Vì vậy, những gì bạn nghĩ này Chương trình sẽ được in ra? Oh. Ồ xin lỗi. Sai tên. Nó in ra, xin chào thế giới. Có ai muốn giải thích tại sao điều đó xảy ra? Yeah? Đung [không nghe được]. Andi PENG: Chính xác. Vì vậy, ở đây, phải có điều kiện là, nếu argc bằng = 2. Vì vậy, chỉ trong trường hợp đó có hai đối số dòng lệnh. Sau đó, tôi sẽ in, hello, bất cứ điều gì nó được. Nhưng khác, tôi sẽ in chỉ, xin chào thế giới. Vì vậy, không ai muốn để cung cấp cho tôi một ví dụ như thế nào tôi sẽ có thể thực sự làm cho nó để in giá trị của argv 1? Tôi sẽ có những gì để vào đây? Chỉ có một điều, phải không? Bởi vì các dot chào đã tính như là đối số đầu tiên. Tôi chỉ có một nhiều hơn. Vì vậy, chấm chào nếu tôi chỉ làm Andi. Xin chào, Andi. Có phải mọi người hiểu tại sao điều đó xảy ra? Yeah. Đung vậy, không gian giữa các lệnh line-- là nó [không nghe được]? Andi PENG: No. Vì vậy, không gian trong một dòng lệnh lập luận, x, để nói cho máy tính của bạn rằng đây là khởi đầu của một chuỗi mới. Vì vậy, chuỗi argv here-- nó cửa hàng tất cả các đối số dòng lệnh của bạn trong chuỗi. Và do đó, không gian trong dòng lệnh argument-- tất cả điều đó không được nói với bạn, này là ở phần cuối của một chuỗi và đó là thời gian để chuyển sang một. Yeah. Điều này là khá quan trọng đối với pset của bạn, bởi vì bạn sẽ được thử nghiệm này. Vì vậy, không ai có bất kỳ câu hỏi về điều này? OK, mát mẻ. Yeah? Đung Vì vậy, lý do bạn sẽ đưa số nguyên lập luận calc thay của [không nghe được] sẽ là khi bạn muốn gõ thêm thông tin cho [Không nghe thấy]? Andi PENG: Yeah, chính xác. Một số chương trình sẽ yêu cầu bạn để nhập vào một đối số dòng lệnh mà nó chuyển vào và sử dụng mà. Yeah. Đung Vì vậy, nếu những gì [không nghe được]? Andi PENG: Vâng, những gì tôi có thay đổi sau đó trong chương trình của tôi? Đung Chỉ cần 3. Andi PENG: Tại sao vậy xảy ra, bạn có nghĩ? Đung Bởi vì [không nghe được]. Đung Bạn phải thay đổi nó để 2 [Không nghe thấy]. Đung 1 và 2. Andi PENG: 1 và 2, chính xác. Vì vậy, trong trường hợp này, bạn có lẽ sẽ muốn có hai printf statements-- một mà in argv 1 và một trong đó in argv 2. Chỗ này. Tôi thực sự có thể làm điều đó nhanh chóng thực. Của bạn đó. Oh. Không khá gì bạn muốn. Nhưng nếu các bạn mess xung quanh với định dạng, nó sẽ đi ra. Yeah. Mát. Tôi biết chúng tôi một chút về mặt thời gian. Nhưng tôi chỉ cần đi để nhanh chóng dành vài phút đi qua helpful-- Đung Bạn có hai phút. Andi Peng: Tôi có hai phút? Cam on. Một số lời khuyên pset nhanh chóng. Vì vậy, cho pset này, tôi khuyên, như tôi đã nói, tất cả mọi người để đọc spec. Bạn sẽ viết ba một programs-- gọi initials.c, một gọi là caesar.c, một gọi là vigenere.c. Một số lời khuyên quan trọng các bạn thực sự muốn để giữ mind-- vậy có chức năng này gọi atoi-- như tôi muốn nói, một trois. Không rõ ràng nếu đó là thực sự như thế nào bạn nói nó. Nhưng tất cả nó làm, nó nhập. Nó chuyển đổi một chuỗi thành int. Vì vậy, một đại diện ASCII để i số nguyên. Nó chỉ chuyển đổi ASCII giá trị để nguyên giá trị. Vì vậy, hãy nhớ argv, mảng mà các cửa hàng tất cả các lệnh của bạn xếp hàng arguments-- nó lưu tất cả chúng như dây đàn. Và do đó, nếu bạn muốn để có thể có một trong số họ trở thành một số nguyên, bạn sẽ có sử dụng giá trị này ở đây. Modulo, như chúng ta đã trước đó trong lớp học ngày hôm nay, cho phép bạn có còn lại của bất cứ điều gì bạn có. Vì vậy, nếu chúng ta có thực sự, thực sự số lượng lớn trong Caesar, nếu chúng ta có cuối cùng của một chuỗi các Vigenere? Làm thế nào thì bạn sẽ có thể nhận được rằng để quấn xung quanh? Nếu tôi nhấn z và tôi muốn nó quay trở lại một, làm thế nào tôi sẽ nhận được mà để bọc xung quanh? Có lẽ muốn sử dụng modulo ở đâu đó. Thứ hai, duyệt qua xung quanh thư viện của bạn. ctype.h. Đó là một thư viện mới, chúng tôi có. Bạn sẽ tìm thấy rất nhiều thực sự, thực sự isupper hữu ích functions--, islower, toupper, ToLower, isalpha, vân vân. Tất cả các chức năng mà sẽ rất hữu ích khi bạn đang cố gắng để tìm ra, là nhân vật này một chữ cái thường? Làm thế nào để chuyển đổi này chuỗi thành chữ hoa? Tất cả những điều này sẽ rất, rất hữu ích cho pset của bạn. ĐƯỢC. Thời gian làm việc tối nay là 8:00 11:00 trong lớp học TEAL ngày mai cũng như thứ tư và thứ năm đêm. Văn phòng giờ đang ở commons. Giá cao đề nghị các bạn tất cả được bắt đầu ngay lập tức, bởi vì bạn không muốn được rằng đứa trẻ đêm thứ năm có vấn đề trình pset của bạn và được như thế, tôi không biết phải làm gì. Tôi bắt đầu, tôi đã hoàn thành, tôi nộp. Cố gắng để cung cấp cho mình một số phòng, bởi vì trong vấn đề mã luôn luôn xảy ra. Bạn muốn chắc chắn mà bạn cung cấp cho mình rất nhiều thời gian để có thể để hoàn thành psets. Mát. Tôi sẽ treo xung quanh đây. Đung là tuyến điều này chưa? Andi Peng: Tôi không biết nếu nó trực tuyến đã có, nhưng nó sẽ được. Tôi sẽ treo xung quanh ở đây nếu có ai có bất kỳ câu hỏi đã. Cám ơn vì đã tới.