[NHẠC] DAVID J. Malan: Tất cả các quyền. Đây là CS50 và điều này là sự bắt đầu của tuần 2. Và bạn sẽ nhớ lại rằng hơn quá khứ vài tuần, chúng tôi đã giới thiệu máy tính khoa học và, lần lượt, lập trình. Và chúng tôi bắt đầu câu chuyện bằng cách Scratch, mà ngôn ngữ đồ họa từ Media Lab của MIT'S. Và sau đó gần đây nhất, tuần trước, chúng tôi đã làm giới thiệu một higher-- một ngôn ngữ cấp thấp hơn được biết đến như C, một cái gì đó hoàn toàn là văn bản. Và, quả thật vậy, thời gian qua chúng tôi khám phá trong bối cảnh một số khái niệm. , Thu hồi này, là rất Chương trình đầu tiên chúng ta nhìn vào. Và chương trình này, khá đơn giản, in ra, "hello, thế giới." Nhưng có rất nhiều dường như kỳ diệu xảy ra. Có #include này với các dấu ngoặc nhọn. Có int. Có (void). Có dấu ngoặc đơn, dấu ngoặc, dấu chấm phẩy, và nhiều hơn nữa. Và như vậy, nhớ lại rằng chúng tôi giới thiệu Scratch để chúng tôi có thể, tốt nhất, xem qua rằng cú pháp, những thứ đó thực sự không tất cả những trí tuệ thú vị, nhưng sớm là, hoàn toàn, một chút khéo léo để hết tâm trí bạn. Và, quả thật vậy, một trong những phổ biến nhất điều sớm trong một lớp học lập trình, đặc biệt là cho những người kém thoải mái, là để có được thất vọng bởi vấp ngã bởi cú pháp nhất định lỗi, chưa kể đến các lỗi logic. Và như vậy giữa các mục tiêu của chúng tôi ngày hôm nay, thực sự, sẽ được trang bị cho bạn với một số kỹ thuật giải quyết vấn đề như thế nào cho để giải quyết tốt hơn những vấn đề bản thân trong các hình thức gỡ lỗi. Và bạn sẽ nhớ lại, quá, mà các môi trường mà chúng tôi giới thiệu Lần cuối cùng được gọi là CS50 IDE. Đây là phần mềm dựa trên web cho phép bạn để chương trình trong các đám mây, vậy để nói chuyện, trong khi vẫn giữ tất cả các bạn tập tin với nhau, như chúng ta sẽ một lần nữa ngày hôm nay. Và nhớ lại chúng tôi rằng xem xét lại các chủ đề này ở đây, trong đó có chức năng, và các vòng lặp, và biến và biểu thức Boolean và điều kiện. Và trên thực tế một vài chi tiết mà chúng ta dịch từ thế giới của Scratch với thế giới của C. Nhưng việc xây dựng cơ bản khối, có thể nói, đã thực sự vẫn như nhau vào tuần trước. Trong thực tế, chúng tôi thực sự chỉ có một khác nhau mảnh ghép, nếu bạn muốn. Thay vào đó màu tím tiết kiệm khối, chúng tôi thay vì đã printf, đó là chức năng này trong C cho phép bạn in một cái gì đó và định dạng nó trên màn hình. Chúng tôi giới thiệu CS50 Thư viện, nơi bạn có tại get_char ý của bạn, và get_int, và get_string, và một vài chức năng khác như tốt, thông qua đó bạn có thể nhận được đầu vào từ bàn phím riêng của người dùng. Và chúng tôi cũng đã xem xét mọi thứ như these- bool và char, và double, float, int, string long_long. Và thậm chí còn có các kiểu dữ liệu khác trong C. Nói cách khác, khi bạn khai báo một biến để lưu trữ một số giá trị, hoặc khi bạn thực hiện một chức năng mà trả về một số giá trị, bạn có thể chỉ định những gì loại của giá trị đó là. Nó là một chuỗi, như một chuỗi các ký tự? Có một số, giống như một số nguyên? Có một điểm nổi giá trị, hoặc như thế nào? Vì vậy, trong C, không giống như Scratch, chúng tôi thực sự bắt đầu để xác định loại dữ liệu chúng tôi đã trở về hoặc sử dụng. Nhưng, tất nhiên, chúng tôi cũng chạy vào một số giới hạn cơ bản của máy tính. Và đặc biệt, này ngôn ngữ C, thu hồi mà chúng ta đã xem xét tràn số nguyên, thực tế rằng nếu bạn chỉ có một số lượng hữu hạn của bộ nhớ hay cụ thể, một số hữu hạn bit, bạn chỉ có thể đếm quá cao. Và vì vậy chúng tôi đã xem xét ví dụ này đây theo đó một truy cập trong một chiếc máy bay,, trên thực tế, nếu chạy đủ lâu sẽ tràn và kết quả trong một phần mềm một lỗi tiềm năng vật lý thực tế. Chúng tôi cũng nhìn nổi điểm không chính xác, thực tế mà chỉ có một số hữu hạn bit, cho dù đó là 32 hoặc 64, bạn chỉ có thể chỉ định nhiều số sau khi một điểm thập phân, sau đó bạn bắt đầu để có được chính xác. Vì vậy, ví dụ, một phần ba trong thế giới ở đây, trong thế giới của con người, chúng ta biết chỉ là một số lượng vô hạn của 3s sau dấu thập phân. Tuy nhiên, một máy tính có thể không nhất thiết phải đại diện một số vô hạn các số nếu bạn chỉ cho phép nó một số số lượng hữu hạn của thông tin. Vì vậy, chúng tôi không chỉ trang bị cho bạn với sức mạnh lớn hơn trong điều kiện làm thế nào bạn có thể thể hiện chính mình tại một bàn phím về lập trình, chúng tôi cũng giới hạn những gì bạn thực sự có thể làm. Và quả thực, lỗi và những sai lầm có thể phát sinh từ những loại vấn đề. Và quả thực, trong số các chủ đề hiện nay sẽ được các chủ đề như gỡ lỗi và thực sự tìm kiếm bên dưới mui xe cách điều đã được giới thiệu tuần trước đang thực sự thực hiện để bạn tốt hơn hiểu cả những khả năng và những hạn chế của một ngôn ngữ như C. Và trên thực tế, chúng tôi sẽ bóc lại các lớp trong những đơn giản của cấu trúc dữ liệu, một cái gì đó gọi là một mảng, mà Scratch xảy ra để gọi một "danh sách." Đó là một chút khác nhau trong bối cảnh đó. Và sau đó chúng tôi cũng sẽ giới thiệu một trong những đầu tiên của các vấn đề tên miền cụ thể của chúng tôi trong CS50, thế giới mật mã học, nghệ thuật xáo trộn hoặc trong mã hoá thông tin để bạn có thể gửi tin nhắn bí mật và giải mã thông điệp bí mật giữa hai người, A và B. Vì vậy, trước khi chuyển chúng tôi cho rằng thế giới mới, chúng ta hãy cố gắng trang bị cho bạn với một số kỹ thuật mà bạn có thể loại bỏ hoặc ít nhất là giảm số những nỗi thất vọng mà bạn có thể gặp phải trong tuần vừa qua. Trong thực tế, trước mắt của bạn được such-- một số vấn đề đầu tiên của bạn trong C. Và tỷ lệ cược là, nếu bạn đang như tôi, lần đầu tiên bạn cố gắng để loại ra một chương trình, thậm chí nếu bạn suy nghĩ logic chương trình khá đơn giản, bạn rất tốt có thể đánh một bức tường, và trình biên dịch sẽ không hợp tác. Thực hiện hoặc Clang sẽ không để thực sự làm đấu thầu của bạn. Và tại sao điều đó có thể được? Vâng, chúng ta hãy nhìn vào, có lẽ, một chương trình đơn giản. Tôi sẽ đi trước và lưu này trong một tập tin gọi là cố tình buggy0.c, bởi vì tôi biết nó đến có những thiếu sót trước. Nhưng tôi có thể không nhận ra rằng nếu điều này là chương trình đầu tiên hoặc thứ hai hoặc thứ ba rằng tôi thực sự làm cho bản thân mình. Vì vậy, tôi sẽ đi trước và loại ra, int main (void). Và sau đó bên trong các dấu ngoặc nhọn của tôi, rất quen thuộc ( "hello, world-- xuyệc ngược, n ") - và một dấu chấm phẩy. Tôi đã lưu tập tin. Bây giờ tôi sẽ đi xuống đến cửa sổ thiết bị đầu cuối của tôi và kiểu make buggy0, bởi vì, một lần nữa, tên của tập tin hôm nay là buggy0.c. Vì vậy, tôi gõ làm buggy0, Enter. Và, ồ, trời ơi, nhớ lại từ lần cuối cùng mà không có thông báo lỗi là một điều tốt. Vì vậy, không có đầu ra là một điều tốt. Nhưng ở đây tôi có rõ ràng một số số những sai lầm. Vì vậy, dòng đầu tiên của đầu ra sau khi nhập làm buggy0, thu hồi, là đầu ra khá dài dòng Clang của. Bên dưới mui xe, CS50 IDE được cấu hình sử dụng một bó toàn bộ tùy chọn với trình biên dịch này do đó bạn không có để suy nghĩ về chúng. Và đó là tất cả những dòng đầu tiên phương tiện bắt đầu với Clang. Nhưng sau đó, những vấn đề bắt đầu làm cho sự xuất hiện của họ. Buggy0.c trên dòng 3, nhân vật 5, có một lỗi lớn màu đỏ. Đó là gì? Ngầm tuyên bố chức năng thư viện printf với kiểu int (const char *, ...) [-Werror]. Ý tôi là, nó rất nhanh chóng sẽ rất phức tạp. Và chắc chắn, lần đầu tiên Trong nháy mắt, chúng tôi sẽ không mong bạn hiểu được toàn bộ các tin nhắn đó. Và vì vậy một trong những bài học cho ngày hôm nay sẽ để được thử để ý mô hình, hoặc những điều tương tự, lỗi bạn có thể có gặp phải trong quá khứ. Vì vậy, hãy trêu chọc nhau chỉ những từ mà trông quen thuộc. Việc lớn, báo lỗi màu đỏ rõ ràng là biểu tượng của một cái gì đó là sai. ngầm tuyên bố Thư viện hàm printf. Vì vậy, ngay cả khi tôi không hoàn toàn hiểu những gì ngầm tuyên bố chức năng thư viện phương tiện, vấn đề chắc chắn liên quan đến printf bằng cách nào đó. Và nguồn gốc của vấn đề đó đã làm với tuyên bố nó. Khai báo một chức năng là nhắc đến nó lần đầu tiên. Và chúng tôi sử dụng các thuật ngữ tuần trước khai báo nguyên mẫu của một chức năng, hoặc với một dòng ở đầu của bạn tập tin riêng hoặc trong một tập tin tiêu đề cái gọi là. Và trong những tập tin đã làm chúng ta nói Tuần trước, printf là báo giá, unquote, tuyên bố? Trong tập tin những gì là nguyên mẫu của nó? Vì vậy, nếu bạn gọi lại, điều đầu tiên tôi đánh máy, hầu hết các chương trình time-- cuối cùng và vô tình một thời điểm trước đây bắt đầu gõ myself-- là này một đây-- hash-- #include