JASON Hirschhorn: Chào mừng với tuần ba, tất cả mọi người. Chúng tôi có một bận rộn nhưng thú vị phần phía trước chúng ta. Vì vậy, đầu tiên, bởi vì chúng tôi đã thực hiện một số Headway với khóa học nhưng chúng tôi vẫn đã rất nhiều học tập còn lại để làm, tôi sẽ cho các bạn thấy một số tài nguyên mà phải chứng minh được vô cùng hữu ích khi bạn không chỉ tiếp cận của bạn vấn đề đặt ra, nhưng cũng tiêu hóa tất cả các tài liệu chúng tôi cung cấp cho các bạn trong bài giảng và quần short và phần. Sau đó chúng ta sẽ dành 20 đầu tiên 25 phút của phần đi qua GDB, mà bạn có thể có hoặc không có sử dụng vào thời điểm này, nhưng nó là một công cụ vô cùng hữu ích đó sẽ giúp bạn gỡ lỗi chương trình của bạn. Rất nhiều bạn có thể đã sử dụng printf trong giữa chương trình của bạn để tìm ra những gì một biến tương đương. GDB thậm chí còn tốt hơn so với printf và không vít lên mã của bạn bởi vì bạn chạy nó trên một tập tin thực thi. Vì vậy, chúng ta sẽ đi qua 10 hữu ích nhất lệnh bạn cần cho GDB, và chúng tôi sẽ đi vào một bài tập với nhau để trong vấn đề thiết lập ba và hơn thế nữa, bạn có thể sử dụng GDB để giúp gỡ rối chương trình của bạn. Và cuối cùng, chúng ta sẽ đi qua một số phân loại và tìm kiếm các thuật toán mà bạn đã thấy trong bài giảng, và chúng tôi sẽ thực sự mã, không chỉ giả, nhưng mã tìm kiếm nhị phân, bong bóng sắp xếp, lựa chọn và phân loại. Vì vậy, đầu tiên, tôi muốn đi hơn các nguồn tài nguyên. Đây là một danh sách đầy đủ, và nó phông chữ nhỏ hơn bởi vì tôi đã có rất nhiều để phù hợp trên đây. Nhưng chúng sẽ không chỉ giúp bạn, một lần nữa, với các bộ vấn đề và tiêu hóa thông tin mà bạn đã học được, nhưng chắc chắn, đến thời điểm bài kiểm tra, chúng sẽ là vô cùng hữu ích. Vì vậy, đầu tiên, các bài giảng ghi nhận. Nếu bạn đi đến cs50.net/lectures và di chuyển đến tuần và ngày cụ thể, bạn sẽ thấy rằng có những ghi chú cho mỗi giảng dạy, trong đó không chỉ đơn giản là một bảng điểm, nhưng một phiên bản chỉnh sửa của những gì đã được đề cập trong bài giảng với mã đoạn và mẩu tin hữu ích khác. Tôi khuyên bạn nên đi qua những người. Và sau đó là tốt, có mã nguồn có sẵn từ mỗi bài giảng. Và một lần nữa, các trang trình bày cũng sẽ được có sẵn trực tuyến tại cs50.net/sections tối nay. Vì vậy, thứ hai là quần short mỗi tuần chủ đề trang bìa, thường 5-15 phút trong chiều dài. Và những hy vọng sẽ cung cấp cho bạn một mồi lớn về các chủ đề khác nhau. Thứ ba - và đây là thương hiệu này mới năm - là study.cs50.net. Nếu bạn đã không kiểm tra nó ra, tôi khuyên bạn nên làm như vậy. Bạn có thể chọn một chủ đề. Chúng tôi có hàng chục chủ đề trên đó. Vì vậy, ví dụ, bạn chọn chức năng. Nó cung cấp cho bạn một số slide và ghi chú về chức năng. Đó là thực sự các slide mà TF được khuyến khích sử dụng trong thời gian của chúng tôi trình bày trong phần. Ngoài ra còn có lời khuyên và thủ thuật để đối phó với các chức năng, và có vấn đề thực tế có thể trợ giúp bạn làm việc với các chức năng. Chúng tôi cũng cung cấp cho bạn các liên kết đến ngắn trên chức năng và thời gian có chức năng đã đưa ra trong bài giảng. Vì vậy, study.cs50.net, thương hiệu mới này năm, một nguồn tài nguyên tuyệt vời. Tiếp theo, tôi có người đàn ông, đó là hướng dẫn lệnh mà bạn có thể chạy ở dòng lệnh. Vì vậy, nếu bạn có bất kỳ câu hỏi về một lệnh, ví dụ, rand, mà chúng tôi gặp tuần trước trong phần và bạn đã có thể gặp phải trong vấn đề của bạn thiết lập khi đi qua tạo ra các mã, nhưng nếu bạn gõ người đàn ông rand, bạn sẽ có được những trang đó cho tất cả các bạn về rand. Nó mang lại cho bạn những gì nó cần, các các thông số cần, cũng như trở lại loại và mô tả ngắn gọn của chức năng đó. Vì vậy, kiểm tra rand. Nó có thể là một chút dài dòng và khó hiểu, vì vậy đôi khi tôi thấy rằng chỉ đơn giản là Googling những gì tôi muốn biết là cách tốt nhất để tìm câu trả lời. Vì vậy, thực hành với Google. Nhận giải tại Google. Nó sẽ trở thành người bạn tốt nhất của bạn. Cũng như Google, nếu bạn không thể tìm thấy nó trên Google, cs50.net/discuss, đó là các diễn đàn thảo luận. Rất có thể là nếu bạn có một câu hỏi, một 700 + đồng nghiệp của bạn cũng có mà câu hỏi và có thể đã yêu cầu nó đã có trong thảo luận diễn đàn và đã trả lời nó. Vì vậy, nếu bạn có một câu hỏi chung hoặc bạn có một câu hỏi mà bạn nghĩ có lẽ những người khác có thể đã chạy vào, kiểm tra cs50.net/discuss. Cuối cùng, cuối cùng hai, nếu bạn muốn nói chuyện với một con người thực sự hạnh phúc, văn phòng giờ từ thứ Hai đến thứ Sáu. Ngoài ra còn có giờ văn phòng trực tuyến cho sinh viên mở rộng. Và cuối cùng nhưng chắc chắn không kém, tôi, dấu chấm than. Tất cả các bạn có thông tin liên lạc của tôi. Nếu bạn cần bất cứ điều gì, xin vui lòng không bao giờ ngần ngại liên hệ với tôi. Luôn luôn cảm thấy tự do để làm như vậy. Rất ít bạn đã thêm tôi trên Gchat, do đó đã gây thất vọng, nhưng hy vọng rằng sẽ thay đổi giữa này và phần tiếp theo. Bất kỳ câu hỏi cho đến nay trên các nguồn tài nguyên? Tuyệt vời. Cuối cùng, một phích cắm cho thông tin phản hồi, sayat.me/cs50. Bạn có thể cho tôi thông tin phản hồi vô danh làm thế nào tôi đang làm. Đó là thực sự hữu ích trong tuần trước. Tôi có một vài ý kiến ​​từ các bạn ngay sau khi phần, cộng với từ sinh viên khác, những người đã xem nó trong tuần, và nó là vô cùng hữu ích. Tôi sẽ cố gắng hạn chế sử dụng của tôi từ "ngọt ngào", nhưng tôi sẽ chỉ cho tôi sự nhiệt tình và hứng thú theo những cách khác. Nhưng có bổ sung khác phản hồi nội dung, cả hai mặt được, đồng bằng. Vì vậy, xin vui lòng, tôi cung cấp cho các bạn thông tin phản hồi trên bộ vấn đề của bạn. Cảm thấy tự do để cung cấp cho tôi thông tin phản hồi về giảng dạy của tôi. Tôi ở đây cho các bạn. Tuyệt vời. Đó là tất cả tôi đã cho phần đầu tiên. Không ai có bất kỳ câu hỏi cho đến nay? Và tôi có một lưu ý cho trung tâm điều khiển. Sinh viên khuyến nông đã nhắn tin cho tôi nói rằng họ không nhận được bất kỳ âm thanh, nhưng đó là ra khỏi quyền lực của tôi để sửa chữa. Vì vậy, hy vọng, mà được giải quyết ngay. Nếu bạn đang xem trực tuyến, hi, nhưng bạn không thể nghe thấy tôi. Vì vậy, đầu tiên, chúng ta sẽ đi qua GDB. GDB, như tôi đã gợi ý trước đó, là một công cụ gỡ lỗi tốt hơn nhiều so printf. Vì vậy, để bắt đầu với GDB, các bạn, nếu bạn muốn mở lên thiết bị của bạn và có những tập tin mà tôi gửi qua email cho bạn trước đó - tập tin này cũng sẽ được có sẵn trực tuyến trong một chút - và chạy GDB. / tên của tập tin. Đầu tiên, tất nhiên, bạn cần phải biên dịch nộp vì GDB chỉ hoạt động trên các file thực thi. Nhưng nếu bạn muốn bắt đầu GDB, điều đầu tiên bạn làm, bạn chạy GDB. / Caesar. Vì vậy, đó là tên của chương trình chúng tôi sẽ đi với nó ngay bây giờ. Vì vậy, tôi sẽ viết cho Caesar, mà sẽ cung cấp cho tôi một tập tin thực thi đây đánh dấu màu xanh. Và sau đó tôi sẽ chạy GDB. / Cesar. Và có bạn đi. Bạn thấy chúng tôi có một số văn bản nói với tôi về phiên bản của GDB, đem lại cho tôi một số thông tin bảo hành, và sau đó chúng tôi có dấu nhắc GDP, trông loại giống như dòng lệnh nhanh chóng của chúng tôi, nhưng bạn thấy nó đang mở Dấu ngoặc đơn, GDB, dấu ngoặc đóng. Trước khi chúng tôi tiếp tục và gỡ lỗi tập tin này mà tôi gửi đến tất cả các bạn, chúng ta hãy xem một số lệnh hữu ích vì vậy chúng tôi có một cảm giác những gì chúng ta đang đi để trang trải. Những lệnh này được liệt kê ở đây thứ tự mà tôi thường sử dụng chúng. Vì vậy, tôi bắt đầu chương trình của tôi bằng cách chạy GBD. / Tên của chương trình, trong trường hợp này, Caesar. Và sau đó là điều đầu tiên tôi làm 99,9% thời gian là loại nghỉ có ý nghĩa. Mà đặt một điểm break ở chính. Về cơ bản, những gì bạn đang làm có là chương trình sẽ dừng lại ở chính vì vậy bạn có thể bắt đầu kiểm tra nó dòng Dòng, chứ không phải chạy tất cả cách thức thông qua. Bạn có thể phá vỡ tại các điểm khác nhau trong mã của bạn, nhưng chính nói chung là một nơi tốt để bắt đầu. Lệnh tiếp theo tôi chạy là chạy. Bắt đầu các chương trình đang chạy, và nếu bạn cần phải nhập dòng lệnh đối số, bạn chạy nó lệnh đó. Chạy với các đối số. Vì vậy, vì chúng ta đang đi trên một phiên bản C, đó là các bạn chương trình viết cho pset hai - này, tất nhiên, có một số lỗi ở trong đó mà chúng tôi hy vọng sẽ tìm thấy - chúng ta sẽ chạy chạy với một số lệnh đối số dòng vì Caesar, như các bạn biết mỗi vấn đề thiết lập thông số, có một số đối số dòng lệnh. Các cặp vợ chồng tiếp theo của lệnh, tiếp theo một là thực sự gọi tới. Một trong đó có bạn từng dòng thông qua chương trình của bạn. Vì vậy, đánh n sau đó Enter sẽ đưa bạn đến dòng kế tiếp, thực hiện các dòng trước đó. Bước không chỉ đưa bạn đến dòng tiếp theo, nhưng nó đưa bạn các chức năng bên trong. Vì vậy, nếu bạn đã viết một chức năng trong mã của bạn hoặc nếu bạn muốn khám phá một i, ví dụ, bạn có thể nhấn, và thay vì đi vào dòng tiếp theo của các tập tin mà bạn đang trải qua ngay bây giờ, bạn sẽ thực sự bước vào chức năng này và xem mã của nó. Danh sách cho bạn thấy, trong rất thân thiện định dạng, 10, hay như vậy dòng xung quanh bạn hiện đang ở trong mã của bạn do đó, bạn thực sự có thể xem các tập tin thay vì phải trao đổi lại giữa quan điểm khác nhau. In giống như printf, như tên gọi của nó. Điều đó cho thấy bạn biết những gì một biến bằng. Người dân địa phương thông tin thực sự hữu ích. Đây là một phiên bản đặc biệt của in ấn. Thông tin người dân địa phương cho bạn thấy tất cả các địa phương biến, in tất cả chúng ra cho bạn hiện đang có sẵn. Vì vậy, tôi nói chung, thay vì phải in ra bốn biến rằng tôi tò mò về nếu tôi đang ở trong một vòng lặp, cho Ví dụ, tôi chỉ viết người dân địa phương thông tin, và nó sẽ chỉ cho tôi những gì tôi truy cập của tôi bằng, cũng như các mảng mà tôi làm việc trên bằng. Cuối cùng, tiếp tục. Gõ nghỉ dừng lại bạn tại các điểm break. Bạn có thể đi bộ qua đường bởi phù hợp với tiếp theo và bước. Tiếp tục chạy chương trình tiếp theo của bạn phá vỡ điểm hoặc cho đến khi hoàn thành nếu có điểm break nữa. Vô hiệu hóa loại bỏ điểm break nếu bạn quyết định nghỉ tại chính là không phù hợp, bạn muốn thiết lập nó ở một nơi khác. Và cuối cùng là q, bỏ thuốc lá, được ra khỏi GDB. Vì vậy, chương trình này,. / Caesar, chúng ta sẽ xem xét thông qua ngay bây giờ và chúng tôi sẽ sử dụng GDB để tìm các lỗi trong chương trình này. Tôi chạy chương trình này trước đó với Kiểm tra 50, và tôi đã nhận một cái cau mày. Tất cả mọi thứ tồn tại, nó biên dịch, nó thông qua rất nhiều các bài kiểm tra, nhưng đối với một số lý do, nó đã không vượt qua thứ năm kiểm tra, quay BARFOO, tất cả mũ, vào E-D-U-I-R-R, tất cả mũ, sử dụng ba như một chìa khóa. Tôi đã khá gần. Tôi đã nhận ra bởi một chữ cái. Do đó, có một số sai lầm nhỏ ở đây. Tôi đã nhìn qua mã của tôi. Tôi không thể hình dung nó ra. Hy vọng rằng, các bạn có thể giúp tôi tìm ra những gì lỗi này là. Vì vậy, đó là lỗi chúng tôi tìm kiếm. Chúng ta hãy di chuyển vào GDB. Một lần nữa, tôi đã chạy GDB. / Caesar, vì vậy bây giờ chúng ta đang ở trong GDB. Và những gì là đầu tiên điều tôi nên làm gì? Tôi vừa bước vào GDB. Ai đó cho tôi một tốt lệnh để nhập. HỌC SINH: Phá vỡ chính. JASON Hirschhorn: Phá vỡ chính. Tuyệt vời. Hãy gõ mà in Các bạn có thể xem ở đây hoặc theo cùng trên máy tính của bạn. Phá vỡ chính, và bạn sẽ thấy một điểm break đã được thiết lập tại - nó mang lại cho tôi một số địa chỉ bộ nhớ kỳ lạ, và nó cũng mang lại cho tôi số dòng. Nếu tôi được nhìn lại tập tin này, Tôi sẽ nhận ra chính đã xảy ra trên đường 21. Tôi nên chạy những gì tiếp theo? Là chương trình của tôi chạy? Không. Vì vậy, những gì tôi nên chạy tiếp theo? HỌC SINH: Chạy. JASON Hirschhorn: Chạy. Nên tôi chỉ chạy chạy, hoặc phải Tôi thêm một số thứ khác trong? HỌC SINH: Chạy với lập luận. JASON Hirschhorn: Chạy với các đối số lệnh. Và kể từ khi tôi gỡ lỗi rất cụ thể trường hợp, tôi nên nhập đó đối số dòng lệnh. Vì vậy tôi sẽ không chạy ba, đó là, một lần nữa, đầu ra tôi nhận được từ Kiểm tra 50. Bắt đầu chương trình. Chúng tôi đi qua một vài dòng. Bây giờ bạn sẽ thấy rằng chúng tôi đang ở trên đường 21. Làm thế nào để tôi biết rằng chúng tôi đang ở trên đường 21? Bởi vì nếu bạn nhìn sang bên trái của cửa sổ thiết bị đầu cuối của tôi, có nó nói dòng 21. Và cung cấp cho tôi, trên thực tế, mã số đó là ở dòng 21. Vì vậy, tôi misspoke trước đó. Chính không phải là thực sự ở dòng 21. Chính là một vài dòng trên 21. Nhưng ở dòng 21, đó là nơi chúng tôi đang phá vỡ. Dòng mã này có không được thực hiện. Đó là quan trọng. Dòng bạn nhìn thấy có không được thực hiện chưa. Đó là dòng tiếp theo của mã bạn đang về để thực hiện. Vì vậy, các dòng tiếp theo, như các bạn là có thể quen với, điều này điều kiện kiểm tra để xem nếu tôi có bước vào một đối số dòng lệnh. Và để tôi, thứ hai là những gì một phần trong đó làm gì? Một là những gì để tôi? HỌC SINH: Thay đổi nó thành một số nguyên. JASON Hirschhorn: Xin lỗi? HỌC SINH: Nó thay đổi đối số cho một số nguyên. JASON Hirschhorn: Vì vậy, một để tôi thay đổi arg v1 từ một chuỗi số nguyên. Và sau đó những gì nó kiểm tra? HỌC SINH: Nếu có một thứ hai đối số dòng lệnh, ngoài chạy chương trình. JASON Hirschhorn: Và những gì nửa cuối năm này Biểu thức boolean kiểm tra? Phần này ở đây, một để tôi? HỌC SINH: Nếu đó là tiêu cực. JASON Hirschhorn: Đảm bảo những gì? HỌC SINH: Đảm bảo nó là, trên thực tế, tích cực. JASON Hirschhorn: Chính xác. Điều này được kiểm tra để xem nếu nó tiêu cực, và nếu nó là tiêu cực, tôi có cảm giác dòng sức mạnh tiếp theo được tôi la hét vào người sử dụng. Vì vậy, hãy đánh cuối để thực hiện dòng này. Chúng ta không thấy dòng đó mà các bạn có thể mong đợi để xem la hét tại người sử dụng và sau đó quay trở lại, bởi vì dòng này đã không thực hiện. Tôi bước vào 3. Vì vậy, tôi đã làm, trên thực tế, nhập hai lệnh đối số dòng và 3 là lớn hơn không. Vì vậy, chúng ta đã thấy dòng đó, chúng tôi thực hiện, nhưng chúng tôi đã không bước trong điều kiện if. Vì vậy, bây giờ, bên cạnh, tôi thấy tôi đang thiết int quan trọng bằng một i arg v1. Vì vậy, đó là tôi tạo ra một chính biến. Vì vậy, nếu tôi in ra chính ngay bây giờ, bởi vì cho phép bạn xem các giá trị bên trong biến, chính bằng 47. Đó là lạ, nhưng tất nhiên, đó là bởi vì tôi đã không thực hiện dòng đó được nêu ra. Vì vậy, bây giờ nếu tôi nhấn n, thực hiện dòng đó, và làm chìa khóa in, chìa khóa sẽ bằng 3, đó là những gì chúng tôi mong đợi nó bằng nhau. Vì vậy, một lần nữa, trong GDB, dòng bạn thấy bạn đã không thực hiện được nêu ra. Bạn phải nhấn n hoặc s hoặc một số các lệnh khác để thực sự thực hiện dòng đó. Phím Print. Của chính tại 3. Cho đến nay, như vậy tốt. Chuỗi văn bản đơn giản. Hãy thực hiện dòng đó. Tôi nhận được một chuỗi từ người dùng. Chúng ta hãy xem Trả tôi 50, tôi nhập BARFOO tất cả các mũ, vì vậy đó là những gì tôi sẽ nhập. Nếu bây giờ tôi in văn bản đơn giản. Bạn sẽ nhìn thấy nó bằng một chuỗi. Nó mang lại cho tôi một số hệ thập lục phân kỳ lạ khác số, nhưng nó trong Thực tế nói rằng chuỗi của tôi là BARFOO. Nếu tôi muốn xem những gì quan trọng tương đương tại thời điểm này, làm thế nào tôi có thể kiểm tra chính? HỌC SINH: phím Print. JASON Hirschhorn: phím Print, chính xác. Và trên thực tế, có một phím tắt. Nếu bạn cảm thấy mệt mỏi gõ in, bạn có thể chỉ cần gõ p. Vì vậy, p chính làm điều chính xác. Và một lần nữa, tôi nhìn thấy nó bằng 3. Nếu tôi muốn tìm hiểu những gì cả khóa và BARFOO tương đương cùng một lúc nhưng tôi đã mệt mỏi của gõ mỗi một trong cá nhân, tôi người dân địa phương có thể gõ thông tin. Cung cấp cho tôi bình đẳng chìa khóa 3. Văn bản đơn giản bằng BARFOO. Nó cũng mang lại cho tôi hai điều kỳ lạ ở đầu trang, biến này tôi và n này biến. Những người đang thực sự tồn tại trong chương trình chính của tôi. Chúng tôi đã không gặp họ chưa, nhưng như một bản xem trước, những tồn tại trong tôi cho vòng lặp. Vì vậy, ngay bây giờ, họ bằng một số lạ số bởi vì họ đã không được khởi tạo, nhưng họ vẫn còn tồn tại trong bộ nhớ, vì vậy chúng tôi chỉ thiết lập một số giá trị rác. Nhưng chúng tôi thấy quan trọng ở đồng bằng văn bản ngay tại đó. Vì vậy, tôi sẽ thực hiện dòng này, dòng 34, vòng lặp cho. Chúng ta sẽ nhảy vào cho vòng lặp bằng cách nhấn n. Và chúng tôi đang ở trong vòng lặp for. Chúng tôi đang ở kiểm tra đầu tiên của chúng tôi. Và một lần nữa, các loại nên nhìn quen thuộc với bạn vì đây là một Chương trình Caesar được viết, nhưng một lần nữa, có một số loại lỗi. Và bây giờ nếu tôi làm người dân địa phương thông tin, bởi vì tôi bên trong vòng lặp, bạn sẽ thấy mà tôi bằng không, như chúng ta mong đợi. Đó là những gì chúng tôi đặt nó vào và khởi tạo nó để trong vòng lặp for. n bằng 6. Mà cũng có ý nghĩa bởi vì chúng tôi thiết lập nó vào strlen văn bản đơn giản. Vì vậy, tôi muốn làm người dân địa phương thông tin hoặc in để biến thường xuyên để đảm bảo rằng tất cả mọi thứ luôn luôn là những gì Tôi hy vọng nó sẽ bằng nhau. Trong trường hợp này, tất cả mọi thứ là những gì tôi mong đợi nó bằng nhau. Vì vậy, hãy bắt đầu di chuyển qua này cho vòng lặp. Dòng Tôi đang trên là dòng 36, nếu đồng bằng văn bản tôi lớn hơn một và đồng bằng văn bản i nhỏ hơn hoặc bằng z. Tôi biết vấn đề của tôi không phải là đầu tiên của tôi với thư, đó là với lá thư thứ hai. Nếu chúng ta nhìn lại Kiểm tra 50, B đi vào E tốt. Tôi lấy một và để lại nó như A, không thay đổi nó để D. Vì vậy, một cái gì đó sai với lá thư thứ hai. Vì vậy, tôi sẽ di chuyển có trong một giây. Nhưng nếu tôi muốn kiểm tra những gì đồng bằng văn bản tôi tương đương đặc biệt này trường hợp, tôi nghĩ rằng nó nên được những gì? Nên văn bản đơn giản tôi bằng những gì trong này vòng đầu tiên thông qua các vòng lặp? HỌC SINH: Zero? JASON Hirschhorn: Đồng bằng văn bản của tôi? Vì vậy, nó phải là vốn B. tôi, tất nhiên, bằng không, nhưng văn bản đơn giản khung không khung kín bằng B vì dây, như chúng ta đã thấy tuần trước, là mảng, vì vậy chúng tôi đang nhận được ký tự đầu tiên từ đó. Vì vậy, một lần nữa, nếu tôi in ra văn bản đơn giản của Tôi, tôi, trên thực tế, có được nhân vật B. Và đó là gọn gàng, phải không? Tôi không thực sự có đồng bằng văn bản I. Đó không phải là một trong những biến tôi thành lập hoặc khởi tạo, nhưng bạn có thể in ra một máy chủ toàn bộ những thứ nếu bạn muốn. Nhưng chúng ta hãy chuyển qua. Nếu văn bản đơn giản tôi là lớn hơn A và đồng bằng văn bản tôi là nhỏ hơn hoặc bằng Z, đó rõ ràng là đúng bởi vì chúng tôi có B. vốn tôi sẽ chạy một số lệnh trên nó. Chúng ta đã thấy toán học mà tuần trước, vì vậy chúng tôi sẽ phải công nhận rằng nó hoạt động phải theo Kiểm tra 50. Các dấu ngoặc nhọn, là đầu tiên cho thấy rằng tôi đã được xuất cảnh nếu điều kiện, điều thứ hai cho thấy mà tôi đang thoát khỏi vòng lặp. Và vì vậy bây giờ khi tôi nhấn Tiếp theo, chúng ta sẽ thấy chúng tôi đang trở lại tại vòng lặp lại. Chúng tôi sẽ thông qua cho vòng lặp lại. Chúng ta hãy thực sự bước vào thứ hai lặp đi lặp lại của vòng lặp và loại Thông tin người dân địa phương. Vì vậy, chúng ta đang ở phiên thứ hai vòng lặp cho chúng tôi. Tôi bằng 1, mà chúng tôi mong đợi. N bằng 6, mà chúng tôi mong đợi. Quan trọng bằng 3, mà chúng tôi mong đợi. Và văn bản đơn giản, bạn sẽ thấy, bằng EARFOO bây giờ, không BARFOO nữa vì trong phiên trước đó của chúng tôi, B là thay đổi vốn E. Vì vậy, chúng tôi về gặp phải vấn đề, vì vậy đây là nơi mà chúng ta sẽ nhảy vào gỡ lỗi. Nhưng không ai có bất kỳ câu hỏi về những gì chúng tôi đã làm cho đến nay? Tuyệt vời. Vì vậy, chúng tôi đang về để thực hiện điều này nếu điều kiện, khung văn bản đơn giản tôi đóng cửa khung lớn hơn A và đồng bằng văn bản tôi nhỏ hơn hoặc bằng đến Z. Nhưng trước khi Tôi đi vào đó, vì đây là nơi Tôi biết lỗi của tôi là, tôi muốn chỉ ra văn bản đơn giản của I. Vì vậy, chúng ta hãy đặt in ra. Nó tương đương với ký tự A, do đó dường như cho đến nay, tất cả là tốt và tốt. Vì vậy, tôi hy vọng dòng này mỗi logic của tôi, dòng này nên là sự thật. Đó là một bức thư vốn. Nhưng nếu tôi nhấn n, chúng tôi nhận ra rằng đây dòng, trên thực tế, đã không thực hiện. Tôi nhảy xuống nếu người nào khác. Tại sao điều đó xảy ra? HỌC SINH: Bởi vì bạn có điều kiện của bạn văn bản đơn giản là lớn hơn hơn A, không bằng hoặc lớn hơn. JASON Hirschhorn: Vì vậy, tôi đã có văn bản đơn giản của tôi Tôi lớn hơn A, không lớn hơn hơn hoặc bằng. Vì vậy, rõ ràng, thủ đô Một không kích hoạt này nếu điều kiện, và chúng tôi đã làm không bước vào nó, và chúng tôi đã làm không làm thay đổi cần thiết. Vì vậy, đó là nó, thực sự. Tôi đã tìm ra lỗi của tôi. Tôi có thể trở lại trong tập tin nguồn của tôi, thay đổi nó, và cập nhật nó và chạy Kiểm tra 50 một lần nữa. Nhưng chúng ta sẽ thấy, chỉ cần cho phương pháp sư phạm của vì lợi ích, nếu tôi tiếp tục đi. Các khác nếu không thực hiện một trong hai, nhưng những gì thay bằng lệnh này điều đó không thay đổi. Vì vậy, nó không thay đổi gì cả, và nếu tôi in văn bản đơn giản ở đây, chúng ta sẽ thấy đi qua đó cho vòng lặp không, trên thực tế, thay đổi nhân vật thứ hai ở tất cả. Nó vẫn là một A. vốn Vì vậy, một lần nữa, chúng tôi sửa lỗi lỗi của chúng tôi. Chúng tôi nhận ra rằng có một số logic mất tích. Và chúng tôi sửa lỗi nó trước thời gian trước khi thực sự thực hiện dòng đó, nhưng bạn đã có thể nhận thấy nếu chúng ta chỉ nhấn Next và nhảy đến đó nếu người nào khác, điều đó có nghĩa rằng nếu điều kiện là không đúng sự thật. Chúng tôi không, trên thực tế, có được kết quả chúng tôi mong đợi. Vì vậy, sau đó chúng tôi có thể đã được nhắc nhở, có chúng tôi không được như vậy sắc sảo, nhìn vào rằng nếu điều kiện và kiểm tra xem, trên thực tế, điều kiện của chúng tôi cần phải đánh giá để đúng trong bối cảnh hiện nay. Đó là tất cả để gỡ lỗi chương trình này. Không ai có bất kỳ câu hỏi? Lệnh những gì tôi có thể đánh bỏ GDB? Q. Và sau đó tôi sẽ được nhắc nhở, bỏ không? Có hoặc không. Tôi sẽ đánh có, và tôi sẽ phải bỏ GDB. Vì vậy, đó là một mồi nhanh để GDB. Trên thực tế, trong một kịch bản thực tế, Tôi đã làm điều này vào những giờ văn phòng. Tôi GDBed chương trình này chính xác tại giờ làm việc với một học sinh. Và nếu chúng ta quay trở lại lệnh chúng ta đã thấy trước đây, chúng tôi sử dụng phá vỡ chính, đầu tiên điều chúng tôi đã làm. Chúng tôi sử dụng chạy với các lệnh, Điều thứ hai chúng tôi đã làm. Chúng tôi sử dụng rất nhiều tiếp theo để di chuyển chúng tôi qua đường dây. Và một lần nữa, phiên bản ngắn của tiếp theo là n. Đó là trong dấu ngoặc đơn màu xám trên slide. Chúng tôi không sử dụng bước, nhưng chúng tôi đã không nhất thiết cần phải cho trường hợp này. Nhưng chúng ta có thể sử dụng nó trong một chút sau ngày hôm nay nếu chúng ta đang gỡ lỗi, cho khi dụ, tìm kiếm nhị phân nhị phân tìm kiếm được gọi là trong một riêng biệt chức năng nhưng có một số lỗi với nó. Chúng ta sẽ muốn bước vào các cuộc gọi đến và tìm kiếm nhị phân thực sự gỡ lỗi nó. Danh sách chúng tôi đã không sử dụng hoặc vì chúng tôi đã có một cảm giác tốt về mã của chúng tôi, nhưng nếu tôi đã muốn có được một cảm giác về những gì mã tôi là xung quanh, tôi chỉ có thể sử dụng danh sách. In chúng tôi sử dụng, người dân địa phương thông tin chúng tôi sử dụng. Tiếp tục chúng tôi không cần phải sử dụng này trường hợp, không sao chúng ta cần phải sử dụng vô hiệu hóa, nhưng chúng tôi đã sử dụng bỏ thuốc lá. Một lần nữa, những 10 lệnh, thực hành chúng. Nếu bạn hiểu được những 10 lệnh, bạn nên được thiết lập để gỡ lỗi bất kỳ Ban hành kèm theo GDB. Vì vậy chúng tôi về để đi về, một lần nữa, để các Điểm mấu chốt của phần ngày hôm nay, đi qua các phân loại và tìm kiếm các thuật toán. Trước khi chúng tôi làm như vậy, một lần nữa, bất kỳ câu hỏi, ý kiến, mối quan tâm cho GDB? Vì vậy, tất cả mọi người là sẽ sử dụng GDB hơn là printf? Vì vậy, tất cả mọi người, vì lợi ích vĩnh viễn của, tất cả mọi người gật đầu ngay đầu của họ bây giờ, vì vậy tôi sẽ nhìn thấy bạn trong giờ văn phòng và tất cả các TF sẽ nhìn thấy bạn và họ sẽ nói, chỉ cho tôi cách sử dụng GDB, và bạn sẽ có thể để chỉ cho họ, phải không? Loại? Có thể hy vọng. Mát mẻ. Vì vậy, chúng ta sẽ di chuyển vào phân loại và tìm kiếm. Bạn sẽ thấy tôi có một danh sách đã được sắp xếp cho chúng tôi, nhưng điều đó sẽ không là trường hợp luôn luôn. Vì vậy, trong vấn đề thiết lập đặc điểm kỹ thuật vấn đề đặt ba, bạn có quần short bạn có thể xem, và nó thực sự hỏi bạn xem những quần short. Cũng trong bài giảng tuần trước, chúng tôi đã đi qua rất nhiều các thuật toán, vì vậy tôi sẽ không dành nhiều thời gian trong lớp đi trên các thuật toán lại hoặc bản vẽ hình ảnh cho làm thế nào những thuật toán làm việc. Một lần nữa, thông tin mà bạn có thể lại đồng hồ bài giảng, hoặc thông tin được chụp xuất sắc trên quần short cho, những tìm kiếm tất cả các trong đó có sẵn tại cs50.net. Vì vậy, thay vào đó, những gì chúng ta sẽ làm là viết các chương trình này. Chúng tôi có một cảm giác, một mô hình về tinh thần, như thế nào họ làm việc, và vì vậy những gì chúng ta sẽ làm là mã họ cho thực tế. Chúng tôi sẽ lần lượt là mô hình tâm thần, hình ảnh đó, nếu bạn sẽ, vào mã thực tế. Và nếu bạn là một chút nhầm lẫn hoặc mờ trên mô hình về tinh thần, tôi hoàn toàn hiểu. Chúng tôi không thực sự đi vào nhảy vào mã ngay lập tức. Vì vậy, trong khi dấu nhắc này trong slide này đề nghị bạn mã tìm kiếm nhị phân, và trên thực tế, một phiên bản lặp đi lặp lại của tìm kiếm nhị phân, điều đầu tiên tôi thực sự muốn bạn phải làm là viết một số mã giả. Vì vậy, bạn có mô hình tinh thần này làm thế nào các công trình nhị phân tìm kiếm. Đưa ra một tờ giấy nếu bạn có một có sẵn, hoặc mở ra một soạn thảo văn bản, và tôi muốn tất cả mọi người để viết. Mất bốn phút để viết giả cho tìm kiếm nhị phân. Một lần nữa, suy nghĩ về mô hình tâm thần. Tôi sẽ quay xung quanh nếu bạn có câu hỏi và chúng ta có thể rút ra những hình ảnh ra. Nhưng trước tiên, trước khi chúng tôi bắt đầu chương trình, Tôi muốn viết giả cho tìm kiếm nhị phân khi chúng tôi bổ nhào vào, chúng tôi có một số hướng như nơi chúng ta nên đi. HỌC SINH: Chúng ta có thể giả định các mảng giá trị chúng ta đã được sắp xếp? JASON Hirschhorn: Vì vậy, để tìm kiếm nhị phân để làm việc - câu hỏi tuyệt vời - bạn phải có trong một sắp xếp mảng các giá trị. Vì vậy, giả sử nó sẽ làm việc. Chúng tôi sẽ quay trở lại slide này. Bạn sẽ thấy màu tím chức năng tuyên bố là bool binary_search int giá trị, giá trị int, int n. Này nên nhìn quen thuộc nếu bạn đã đã tiếp cận hoặc nhận của bạn tay bẩn với bộ vấn đề. Nhưng đó là tuyên bố chức năng của bạn. Một lần nữa, không cần phải lo lắng về rằng có rất nhiều tại thời điểm này. Những gì tôi thực sự muốn bạn làm là lấy bốn phút để nhị phân giả tìm kiếm, và sau đó chúng tôi sẽ đi trên đó như là một nhóm. Và tôi sẽ đi xung quanh. Nếu bạn có thắc mắc, cảm thấy miễn phí để nâng cao tay của bạn. Tại sao bạn không mất hai phút nữa để hoàn tất cái giả? Tôi biết điều này có vẻ vô lý mà chúng tôi đang chi tiêu quá nhiều thời gian một cái gì đó thậm chí không thực sự trong C, nhưng đặc biệt là cho những hơn các thuật toán đầy thách thức và vấn đề bộ mà chúng ta phải tìm ra, bắt đầu từ giả không đáng lo ngại về cú pháp, chỉ lo lắng về logic, là vô cùng hữu ích. Và theo cách đó, bạn không giải quyết hai vấn đề vô cùng khó khăn cùng một lúc. Bạn chỉ cần tập trung vào logic, và sau đó bạn di chuyển vào cú pháp. OK. Hãy bắt đầu đi qua mã giả. Tôi đã viết lên đây, nhị phân tìm kiếm giả. Chúng tôi sẽ viết này trên hội đồng quản trị với nhau. Hoặc tôi sẽ viết nó và bạn sẽ cung cấp cho tôi nhắc nhở tôi cần. Vì vậy, bất cứ ai có thể cho tôi là người đầu tiên dòng của bạn giả viết cho tìm kiếm nhị phân? Có, Annie? HỌC SINH: Trong khi chiều dài của danh sách là lớn hơn không. JASON Hirschhorn: Trong khi chiều dài của danh sách lớn hơn không. Và một lần nữa, chúng ta thấy một số C-tìm kiếm điều cú pháp trên đây. Nhưng hầu hết trong số này là bằng tiếng Anh. Đã ai có bất cứ dòng họ đặt trước khi điều này trong mã giả của họ? HỌC SINH: Nhận được một mảng sắp xếp của số. JASON Hirschhorn: Bạn đã viết "có được một mảng các số được sắp xếp. "Theo các khai báo hàm, chúng ta sẽ đi qua một mảng các số được sắp xếp. HỌC SINH: [nghe được]. JASON Hirschhorn: Vì vậy, chúng tôi sẽ có điều đó. Nhưng có, nếu chúng ta không có điều đó, chúng tôi sẽ cần phải sắp xếp các mảng của chúng tôi số, bởi vì tìm kiếm nhị phân chỉ hoạt động trên các mảng được sắp xếp. Vì vậy, trong khi chiều dài của danh sách bằng không, tôi sẽ đưa vào một số dấu ngoặc nhọn để làm cho nó trông hơi giống C. Nhưng trong khi, dường như bản đồ vào một trong khi vòng lặp, vì vậy trong khi điều này vòng lặp làm những gì chúng ta cần phải làm cho tìm kiếm nhị phân? Một người khác đã không cho tôi một trả lời nào nhưng người đã viết này? HỌC SINH: Đến giữa của danh sách. JASON Hirschhorn: Tom. Tới giữa của danh sách. Và câu hỏi tiếp theo, những gì Chúng ta phải làm một lần chúng tôi đang ở giữa danh sách? HỌC SINH: Làm một kiểm tra cho dù đó là số bạn đang tìm kiếm. JASON Hirschhorn: Tuyệt vời. Đi giữa danh sách và kiểm tra nếu giá trị của chúng tôi là có - tuyệt vời. Có ai có bất cứ điều gì khác đó là khác với điều này? Đó chính quyền. Điều đầu tiên chúng ta làm trong tìm kiếm nhị phân là đi đến giữa danh sách và kiểm tra xem giá trị của chúng tôi là ở đó. Vì vậy, tôi giả sử nếu giá trị của chúng tôi là ở đó, chúng ta làm gì? HỌC SINH: Chúng tôi trở lại bằng không [nghe được]. JASON Hirschhorn: Vâng, nếu chúng tôi giá trị là có, chúng tôi tìm thấy nó. Vì vậy, chúng ta có thể nói một cách nào đó, tuy nhiên điều này chức năng được xác định, chúng tôi cho người sử dụng chúng tôi tìm thấy nó. Nếu nó không có ở đó, mặc dù, đó là nơi này được khéo léo. Vì vậy, nếu nó không có, người khác người đã làm việc trên tìm kiếm nhị phân hoặc đã có một ý tưởng bây giờ, chúng ta làm gì? HỌC SINH: Câu hỏi. JASON Hirschhorn: Có? HỌC SINH: là mảng đã được sắp xếp? JASON Hirschhorn: Vâng, chúng tôi đang giả định mảng đã được sắp xếp. HỌC SINH: Vì vậy, sau đó bạn phải kiểm tra xem giá trị mà bạn nhìn thấy lớn hơn giá trị mà bạn muốn, bạn có thể di chuyển đến giữa của nửa kia. JASON Hirschhorn: Vì vậy, nếu giữa danh sách là lớn hơn so với những gì chúng tôi tìm kiếm, sau đó chúng tôi làm những gì? Chúng tôi di chuyển ở đâu? HỌC SINH: Bạn muốn chuyển đến một nửa của danh sách với số thấp hơn. JASON Hirschhorn: Vì vậy, chúng tôi sẽ gọi đó là bên trái. Vì vậy, nếu giữa lớn hơn, chúng ta có thể tìm kiếm nửa còn lại của danh sách. Và sau đó bằng cách tìm kiếm, những gì Tôi có ý nghĩa bằng cách tìm kiếm? HỌC SINH: [nghe được]. JASON Hirschhorn: Chúng tôi đi giữa. Chúng tôi thực sự lặp lại điều này. Chúng tôi quay trở lại thông qua vòng lặp trong khi của chúng tôi. Tôi sẽ cung cấp cho bạn các tác phẩm mới nhất - khác, nếu, giữa là ít hơn những gì chúng tôi, chúng ta làm gì đây? HỌC SINH: Đi bên phải. JASON Hirschhorn: Tìm kiếm bên phải. Điều này có vẻ tốt, nhưng không ai có bất cứ điều gì mà chúng ta có thể bị thiếu hoặc bất cứ điều gì khác mà bạn đặt trong giả mã của bạn? Vì vậy, đây là những gì chúng tôi có cho đến nay. Trong khi chiều dài của danh sách là lớn hơn hơn không, chúng ta sẽ đi đến giữa danh sách và kiểm tra xem giá trị của chúng tôi là ở đó. Nếu giữa là lớn hơn, chúng ta sẽ tìm kiếm lại, nếu người nào khác giữa là ít hơn, chúng ta sẽ tìm kiếm bên phải. Vì vậy, tất cả chúng tôi đã có một số quen thuộc với các điều khoản chúng tôi sử dụng trong khoa học máy tính và các công cụ chúng ta có. Nhưng bạn sẽ nhận thấy chúng tôi đã nói tiếng Anh, nhưng chúng tôi thấy một rất nhiều điều mà dường như bản đồ trên để các công cụ chúng tôi có trong bộ công cụ mã hóa của chúng tôi. Vì vậy, ngay lập tức, chúng tôi không sẽ thực sự mã được nêu ra. Những gì chúng ta thấy ở đây trong tiếng Anh mà bản đồ vào những điều chúng ta có thể viết trong C? HỌC SINH: Trong khi. JASON Hirschhorn: Trong khi. Vì vậy, trong khi điều này ngay tại đây bản đồ trên để làm gì? HỌC SINH: Một vòng lặp while. JASON Hirschhorn: Một vòng lặp trong khi? Hoặc có thể, nói chung, một vòng lặp. Chúng tôi muốn làm một cái gì đó hơn và hơn. Vì vậy, chúng tôi đang đi vào mã một vòng lặp. Và chúng ta đã biết, bởi vì chúng tôi đã thực hiện này một vài lần và chúng tôi có rất nhiều ví dụ trên mạng, như thế nào thực sự để viết chỉ số này cho một vòng lặp. Vì vậy, nên được khá dễ dàng. Chúng ta sẽ có thể nhận được rằng bắt đầu khá nhanh chóng. Những gì khác để chúng ta thấy trong đây? Những gì khác cấu trúc cú pháp, mọi thứ mà chúng ta đã quen thuộc với C, làm chúng tôi đã có một cảm giác based tắt của những từ chúng tôi sử dụng? Có, Anna? [Nghe được] chỉ đùa thôi. Anna, đi trước. HỌC SINH: Nếu và khác. JASON Hirschhorn: Nếu và khác - ngay tại đây. Vậy điều gì làm những người như thế nào? HỌC SINH: Một nếu khác tuyên bố. JASON Hirschhorn: Vâng, điều kiện, phải không? Vì vậy, chúng tôi có lẽ sẽ cần phải viết một số điều kiện. Và một lần nữa, mặc dù có thể gây nhầm lẫn tại đầu tiên, chúng ta thường có một cảm giác bây giờ làm thế nào để viết các điều kiện và cú pháp cho điều kiện. Và nếu chúng ta không, chúng ta chỉ cần nhìn lên Cú pháp cho điều kiện, cắt và dán đó, bởi vì chúng tôi biết chúng tôi cần một điều kiện ở đây. Bất kỳ những thứ khác chúng ta thấy bản đồ đó lên những điều chúng ta có thể cần phải làm trong C? Yeah, Aleha? HỌC SINH: Điều này có thể được rõ ràng, bằng cách chỉ kiểm tra nếu một giá trị tương đương với một cái gì đó. JASON Hirschhorn: Vì vậy, làm thế nào để chúng tôi kiểm tra và - để đi đến giữa của danh sách và kiểm tra xem giá trị của chúng tôi là ở đó? Làm thế nào để chúng tôi làm điều đó trong C? Cú pháp cho đó là những gì? HỌC SINH: Bình đẳng, bằng. JASON Hirschhorn: Bình đẳng, bằng. Vì vậy, việc kiểm tra này có lẽ sẽ là một người ngang bằng. Vì vậy, chúng ta sẽ biết chúng ta cần một nơi nào đó. Và trên thực tế, chỉ bằng văn bản đó, chúng ta thấy những điều khác. Chúng ta sẽ phải làm một số toán tử so sánh trong đó - tuyệt vời. Vì vậy, nó thực sự là như thế, bởi và lớn, chúng tôi đã không viết một từ mã C được nêu ra. Nhưng chúng tôi đã nhận mô hình tinh thần xuống thông qua các bài giảng và những quần short. Chúng tôi đã viết mã giả như một nhóm. Và đã có, chúng tôi có 80% nếu không 90% những gì chúng ta cần làm. Bây giờ, chúng ta chỉ cần mã nó, mà một lần nữa, là một vấn đề không nhỏ để giải quyết. Nhưng ít nhất chúng ta đang mắc kẹt trên logic. Ít nhất là bây giờ khi chúng tôi đi đến giờ làm việc, Tôi có thể nói, tôi biết những gì tôi cần để làm, nhưng bạn có thể nhắc nhở tôi về cú pháp? Hoặc ngay cả khi giờ làm việc đông đúc, bạn có thể Google cho cú pháp, chứ không phải hơn bị mắc kẹt trên logic. Và một lần nữa, thay vì cố gắng để giải quyết logic và những vấn đề cú pháp tất cả cùng một lúc, nó thường là tốt hơn để phá vỡ hai vấn đề khó khăn ra vào hai người quản lý hơn và làm mã giả đầu tiên và sau đó mã trong C. Vì vậy, chúng ta hãy xem những gì tôi đã làm cho pseudo-code trước thời hạn. Trong khi chiều dài của danh sách là lớn hơn hơn không, nhìn vào trung lộ, danh sách. Nếu số lượng tìm thấy trở lại đúng, khác nếu số lượng cao hơn, tìm kiếm bên trái. Khác nếu số thấp hơn, tìm kiếm đúng, trả về false. Vì vậy, trông gần như giống hệt nhau nếu không gần giống với những gì chúng tôi đã viết. Trên thực tế, Tom, những gì bạn nói đầu tiên, phá vỡ giữa danh sách và nếu số tìm thấy vào hai báo cáo thực sự là những gì tôi đã làm. Tôi kết hợp chúng ở đó. Tôi nên nghe lời bạn lần đầu tiên. Vì vậy, đó là mã giả chúng ta có. Nếu bạn muốn bây giờ, xin lỗi, đi sao cho vấn đề ban đầu của chúng tôi. Hãy đang binary.c. Vì vậy, thực hiện một phiên bản lặp đi lặp lại của tìm kiếm nhị phân bằng cách sử dụng sau đây khai báo hàm. Và bạn không cần phải sao chép nó xuống chỉ được nêu ra. Tôi thực sự sẽ mở lên ngay tại đây binary.c. Vì vậy, có khai báo hàm ở giữa màn hình. Và bạn sẽ thấy tôi đã giả mã từ trên mặt tôi, nhưng gần như giống hệt nhau với những gì chúng tôi đã viết, và đặt rằng trong cho bạn. Vì vậy, bây giờ, chúng ta hãy năm phút mã chức năng này. Và một lần nữa, nếu bạn có bất kỳ câu hỏi, nâng cao tay của bạn, cho tôi biết, tôi sẽ đến xung quanh. HỌC SINH: [nghe được]. JASON Hirschhorn: Vì vậy tôi đã nhị phân định nghĩa tìm kiếm ở đầu, trên dòng 12. Đó là những gì tôi đã cho trình chiếu của tôi. Và sau đó tất cả điều này giả mã tôi chỉ sao chép và dán từ slide, mã giả slide. Tôi vẫn không nghe [nghe được]. Vì vậy, nếu bạn đã hoàn thành của bạn thực hiện, tôi muốn kiểm tra xem nó. Tôi gửi qua email cho bạn những tập tin helpers.h trước đó trong lớp này. Và nó sẽ có sẵn trực tuyến là tốt để tải về cho người xem Hiện phần này bị trì hoãn. Và tôi chỉ sử dụng phân phối chung mã từ pset3. Vì vậy tôi đã find.C, sử dụng tập tin helpers.h của tôi chứ không phải là tập tin helpers.h đó là đưa ra trong mã phân phối. Và tôi đã phải thực hiện một sự thay đổi khác trong find.C thay vì gọi chỉ đơn giản là tìm kiếm, gọi binary_search. Vì vậy, nếu bạn muốn kiểm tra mã của bạn, biết rằng đó là cách để làm điều đó. Trong thực tế, khi chúng ta sẽ chạy mã này ngay bây giờ, tôi chỉ cần thực hiện một bản sao của thư mục pset3 của tôi, một lần nữa, hoán đổi các tập tin giúp đỡ và sau đó thực hiện mà thay đổi trong find.C gọi binary_search chứ không phải chỉ đơn giản là tìm kiếm. JASON Hirschhorn: Có. Bạn có một câu hỏi? HỌC SINH: Nevermind. JASON Hirschhorn: Không có lo lắng. Vâng, chúng ta hãy bắt đầu. Chúng tôi sẽ mã này như là một nhóm. Một lưu ý khác. Một lần nữa, điều này, có thể dễ dàng được trao đổi trong cho vấn đề Set Ba. Tôi có tập tin helpers.h của tôi mà, chứ không phải hơn helpers.h chúng tôi đang đưa ra, tuyên bố nhị phân tìm kiếm, bong bóng sắp xếp, lựa chọn và phân loại. Và trong find.c bạn sẽ nhận thấy trên đường dây, những gì là, dòng 68, chúng ta gọi là nhị phân tìm kiếm chứ không phải là tìm kiếm. Vì vậy, một lần nữa, các mã có sẵn trực tuyến hoặc mã mà bạn tạo ra ngay bây giờ có thể dễ dàng trao đổi trong p thiết lập 3 để kiểm tra nó. Nhưng trước tiên, chúng ta hãy tìm kiếm mã nhị phân. Khai báo hàm của chúng tôi, chúng ta trở lại một bool. Chúng tôi có một số nguyên được gọi là giá trị. Chúng tôi có một mảng các số nguyên được gọi là giá trị, và chúng tôi là n kích thước của mảng. Trên đường 10, ngay tại đây, tôi có sắc nét bao gồm stdbool.h. Không ai biết lý do tại sao mà ở đó? Vì vậy, điều đó không có dòng mã làm gì? HỌC SINH: Nó cho phép bạn sử dụng một loại bool trở lại. JASON Hirschhorn: Chính xác. HỌC SINH: Hoặc đó là một thư viện cho phép sử dụng một loại bool trở lại. JASON Hirschhorn: Vì vậy, sắc nét bao gồm dòng stdbool.h mang lại cho tôi một số định nghĩa và khai báo cho những thứ mà tôi được phép sử dụng trong thư viện này. Vì vậy, trong số những người nói rằng có loại này được gọi là bool, và nó có thể được đúng hay sai. Vì vậy, đó là những gì dòng nào. Và nếu tôi không có dòng đó, tôi sẽ gặp rắc rối vì đã viết này từ bên phải ở đây, short, ngay tại đó. Chính xác. Vì vậy, tôi cần phải có trong mã này. OK. Vì vậy, đây lại là một lặp đi lặp lại phiên bản, không phải là một đệ quy. Vì vậy, chúng ta hãy bắt đầu. Hãy bắt đầu với điều này đầu tiên dòng mã giả. Và hy vọng, chúng tôi sẽ - hoặc không hy vọng. Chúng ta sẽ đi quanh phòng. Chúng tôi sẽ đi từng dòng, và tôi sẽ giúp bạn tìm ra đường mà chúng ta cần viết đầu tiên. Vì vậy, trong khi chiều dài của danh sách là lớn hơn không. Hãy bắt đầu ở phía trước. Dòng những gì tôi nên viết ở đây, trong mã? HỌC SINH: Trong khi ngoặc n lớn hơn 0. JASON Hirschhorn: Trong khi n là lớn hơn 0. Vì vậy, n là kích thước của một danh sách, và chúng tôi đang kiểm tra nếu - [Interposing TIẾNG NÓI] JASON Hirschhorn: - xin lỗi? HỌC SINH: Làm thế nào để chúng ta biết rằng n là kích thước của danh sách? JASON Hirschhorn: Xin lỗi. Theo các đặc điểm kỹ thuật pset, tìm kiếm và sắp xếp các chức năng bạn cần phải viết, n là kích thước của danh sách. Tôi quên giải thích rằng đây. Nhưng có. n là kích thước của danh sách, trong trường hợp này. Vì vậy, trong khi n lớn hơn 0. OK. Điều đó có thể chứng minh một chút vấn đề tuy nhiên, nếu mọi thứ đi vào. Bởi vì chúng tôi sẽ tiếp tục biết kích thước của danh sách này trong suốt chức năng, nhưng nói rằng chúng ta bắt đầu với một mảng gồm 5 số nguyên. Và chúng tôi đi qua và chúng tôi đã bây giờ thu hẹp nó xuống một mảng của 2 số nguyên. Trong đó có 2 số nguyên là? Kích thước là 2 giờ mà chúng tôi muốn xem xét, nhưng mà 2 là? Điều đó có ý nghĩa, câu hỏi đó? OK. Tôi sẽ hỏi lại lần nữa. Vì vậy, chúng tôi bắt đầu với mảng này của 5 số nguyên, và n = 5, phải không? Chúng tôi sẽ chạy qua đây. chúng tôi có thể sẽ thay đổi kích thước, phải, như mọi thứ đi vào. Đó là những gì chúng ta nói rằng chúng ta muốn làm. Chúng tôi không muốn tìm kiếm điều đầy đủ một lần nữa. Vì vậy, nói rằng chúng ta thay đổi nó để 2. Chúng tôi có một nửa danh sách đó là lẻ. Vì vậy, chỉ cần chọn 2. Vì vậy bây giờ n bằng 2. Tôi xin lỗi vì người nghèo đánh dấu xóa khô. Phải không? Và chúng tôi đang tìm kiếm thông qua danh sách một lần nữa với một danh sách các kích thước 2. Vâng, chúng tôi vẫn là mảng có kích thước 5. Chúng ta nói rằng chúng ta chỉ muốn tìm kiếm 2 điểm trong đó. Vì vậy, trong đó có 2 điểm là những? Điều đó có ý nghĩa? Là họ để lại 2 điểm? Họ có quyền 2 điểm? Họ có 2 điểm trung? Chúng tôi đã bị phá vỡ vấn đề xuống, nhưng chúng tôi thực sự không biết đó là một phần của vấn đề chúng tôi vẫn đang xem xét, chỉ bằng cách có những 2 biến. Vì vậy, chúng ta cần một chút sau đó nhiều hơn, trong khi n lớn hơn 0. Chúng ta cần phải biết rằng n là trong mảng thực tế của chúng tôi. Vì vậy, không ai có một thay đổi dòng này? Nhất của dòng này là hoàn toàn chính xác. Ngoài ra có khác? Chúng ta có thể trao đổi một cái gì đó cho n làm cho dòng này tốt hơn một chút? Mm-hm? HỌC SINH: Bạn có thể khởi tạo một biến như chiều dài n mà sau đó sẽ được sử dụng sau này trong chức năng? JASON Hirschhorn: Vì vậy, khởi tạo chiều dài biến n, và chúng tôi sử dụng sau này? Nhưng sau đó chúng tôi chỉ cần cập nhật chiều dài và chúng tôi vẫn còn chạy vào vấn đề này mà chúng ta cắt giảm chiều dài của vấn đề của chúng tôi, nhưng chúng ta không bao giờ biết, trên thực tế, chiều dài mà các bản đồ lên. HỌC SINH: Đó không phải là sẽ xảy ra sau khi bạn đang nói, tìm lại, tìm kiếm phải không? Bạn sẽ đi đến một khác nhau diện tích của bạn - JASON Hirschhorn: Chúng ta sẽ đi đến một khu vực, nhưng làm thế nào để chúng ta biết mà là để đi đến? Nếu chúng ta chỉ có các mảng và điều này n, làm thế nào để chúng tôi biết được nơi để đi trong mảng. Trong trở lại, phải không? HỌC SINH: Bạn có, như, thấp hơn ràng buộc và một biến ràng buộc trên hoặc một cái gì đó như thế? JASON Hirschhorn: OK. Vì vậy, đây là một ý tưởng khác. Thay vì chỉ theo dõi các kích thước, chúng tôi tiếp tục theo dõi những thấp hơn và trên biến ràng buộc. Vì vậy, làm thế nào để chúng tôi tính toán kích thước từ một ràng buộc thấp hơn và trên ràng buộc? [Interposing TIẾNG NÓI] JASON Hirschhorn: Phép trừ. Và cũng theo dõi thấp hơn ràng buộc và trên ràng buộc để cho chúng tôi biết, Chúng ta tìm kiếm hai? Chúng ta tìm kiếm hai ở đây? Chúng ta đang tìm kiếm giữa hai? Có lẽ không phải là giữa hai, bởi vì này, trên thực tế, là tìm kiếm nhị phân. Nhưng bây giờ chúng tôi sẽ có thể để có được kích thước, nhưng cũng có những giới hạn của mảng. Về bản chất, nếu chúng ta có khổng lồ của chúng tôi danh bạ điện thoại, chúng tôi trích xuất nó ra. Bây giờ chúng ta biết rằng nhỏ hơn danh bạ điện thoại là. Nhưng chúng tôi không thực sự trích xuất danh bạ điện thoại trong một nửa. Chúng tôi vẫn cần phải biết nơi mà các giới hạn mới của vấn đề của chúng tôi là. Không ai có bất kỳ câu hỏi về điều đó? Có? HỌC SINH: Nó sẽ làm việc bằng cách tạo ra một biến, tôi, mà bạn sau đó chỉ cần thay đổi vị trí của tôi liên quan đến nó vị trí hiện tại, và chiều dài, n? JASON Hirschhorn: Và tôi là gì? HỌC SINH: Giống như tôi được như loại - Như bạn sẽ khởi tạo i là vị trí giữa của mảng. Và sau đó, nếu giá trị ở vị trí i trong giữa các mảng trong phát hiện được thấp hơn giá trị bạn cần, tôi bây giờ trở thành chiều dài của mảng, cộng với giá trị của i chia cho 2. Như, xem, bạn thay đổi tôi - JASON Hirschhorn: Đúng vậy. HỌC SINH: - đến - JASON Hirschhorn: Vì vậy, tôi gần như tích cực sẽ làm việc. Nhưng điểm phúc, bạn cần hai mẩu thông tin ở đây. Bạn có thể làm điều đó với đầu và cuối, hoặc bạn có thể làm điều đó với kích thước, và sau đó một số điểm đánh dấu. Nhưng bạn cần hai mảnh thông tin ở đây. Bạn không thể nhận được bởi với chỉ một. Điều đó làm cho tinh thần? Vì vậy, chúng ta sẽ đi qua, và chúng ta sẽ làm [không nghe được] và tạo ra một số dấu hiệu. Vì vậy, Anh đã viết trong mã của bạn? HỌC SINH: Tôi chỉ nói int ràng buộc một là bằng 0. JASON Hirschhorn: Hãy gọi mà int, bắt đầu. HỌC SINH: OK. JASON Hirschhorn: Điều đó làm cho ý nghĩa hơn đối với tôi. Và? HỌC SINH: tôi đã nói, tôi đoán, int kết thúc. JASON Hirschhorn: int kết thúc. HỌC SINH: Tôi đoán, n trừ đi 1, hoặc một cái gì đó như thế. Như, yếu tố cuối cùng. JASON Hirschhorn: Vì vậy, bạn đã viết, int bắt đầu bằng 0, dấu chấm phẩy, và int kết thúc bằng n trừ đi 1, dấu chấm phẩy. Vì vậy, về cơ bản, những gì chúng tôi đang làm ở đây, 0 vị trí đầu tiên. Và như chúng ta biết trong mảng, họ không đi đến n, họ đi lên đến n trừ đi 1. Vì vậy, chúng tôi có một số giới hạn của mảng. Và những giới hạn ban đầu xảy ra được giới hạn ban đầu của vấn đề của chúng tôi. OK. Vì vậy, âm thanh tốt. Sau đó, nếu chúng ta trở lại dòng này, trong khi chiều dài của danh sách là lớn hơn 0, những gì, thay vì n, nên chúng tôi đưa vào đây? HỌC SINH: Viết kết thúc trừ đi đầu. JASON Hirschhorn: Trong khi kết thúc trừ bắt đầu lớn hơn 0? OK. Và chúng ta có thể, nếu chúng ta muốn làm cho rằng một chút đẹp hơn, những gì khác chúng ta có thể làm gì? Nếu chúng ta muốn để làm sạch mã này lên một chút? Làm thế nào chúng ta có thể thoát khỏi số 0? Đây chỉ là một câu hỏi phong cách. Đó là chính xác ngay bây giờ. HỌC SINH: Kết thúc không đầu bằng nhau? JASON Hirschhorn: Chúng ta có thể làm những gì? [Interposing TIẾNG NÓI] HỌC SINH: Kết thúc là lớn hơn? JASON Hirschhorn: Vâng. Chúng tôi chỉ có thể làm trong khi kết thúc lớn hơn đầu. Đúng. Chúng tôi bổ sung bắt đầu từ phía bên kia đó, và chúng tôi đã thoát khỏi số 0. Vì vậy, đây chỉ trông chút sạch hơn. OK. Vì vậy, trong khi chiều dài của danh sách là 0, chúng tôi đã viết rằng, trong khi kết thúc lớn hơn bắt đầu. Chúng ta sẽ đưa vào cần thiết của chúng tôi dấu ngoặc nhọn, và sau đó điều đầu tiên chúng tôi muốn làm là nhìn vào chúng trong một danh sách nhỏ. Bạn? Bạn có thể cho tôi - HỌC SINH: Nếu ngoặc khung vuông giá trị - JASON Hirschhorn: Nếu ngoặc khung vuông giá trị. HỌC SINH: kết thúc chia cho 2. JASON Hirschhorn: Kết thúc? HỌC SINH: Tôi thấy một vấn đề với bạn - JASON Hirschhorn: OK. Vâng, nhìn vào giữa. Làm thế nào để chúng tôi biết những gì giữa là? Yeah. Vì vậy, hãy để tôi xóa mã. Làm thế nào để chúng tôi biết những gì giữa là? Trong bất cứ điều gì, khi bạn có đầu và cuối cùng, làm thế nào để bạn tìm thấy giữa? HỌC SINH: Bạn trung bình. HỌC SINH: Bạn thêm với nhau và sau đó - JASON Hirschhorn: Thêm chúng với nhau và sau đó? HỌC SINH: Và bạn trung bình. Chia cho 2. JASON Hirschhorn: Thêm chúng với nhau và chia cho 2. Vì vậy, int giữa bằng? Tom, bạn có thể đưa nó cho tôi? HỌC SINH: Bắt đầu cộng với kết thúc - JASON Hirschhorn: Từ khi bắt đầu cộng với kết thúc. HỌC SINH: Tất cả, khung, chia cho 2. JASON Hirschhorn: Tất cả, trong dấu ngoặc đơn, chia cho 2. Để mang lại cho tôi giữa bất cứ điều gì, có đúng không? HỌC SINH: Bạn cũng cần phải làm tròn lên. JASON Hirschhorn: Điều gì làm bạn có nghĩa là, tôi cần phải làm tròn nó? [Interposing TIẾNG NÓI] HỌC SINH: Bởi vì nếu Đây là một kỳ lạ số lượng, sau đó nó giống như - JASON Hirschhorn: Vâng, OK. Vì vậy, tôi có thể làm tròn lên. Nhưng nếu đó là một số lẻ, 5, tôi có thể dùng 1 cách giữa. Hoặc nếu đó là một số chẵn, đúng hơn, đó là một trường hợp tốt hơn. Nếu đó là 4, chúng tôi chỉ có 4, tôi có thể mất là người đầu tiên "giữa", trích dẫn, hoặc unquote thứ hai "giữa" một. Hoặc sẽ làm việc cho một tìm kiếm nhị phân, vì vậy tôi không thực sự cần phải làm tròn. Nhưng có một điều tôi khác cần phải nhìn vào dòng này. Chúng ta có thể không nhận ra được chưa, nhưng chúng tôi sẽ trở về với nó. Vì dòng này thực sự vẫn còn cần một điều khác. Nhưng cho đến nay, chúng tôi đã viết bốn dòng mã. Chúng tôi đã có khởi đầu của chúng tôi và kết thúc đánh dấu. Chúng tôi có vòng lặp trong khi của chúng tôi, mà bản đồ trên trực tiếp để giả của chúng tôi. Chúng tôi đang tìm kiếm ở giữa mà các bản đồ trực tiếp lên giả của chúng tôi. Tôi sẽ nói điều này đi vào giữa danh sách, dòng mã này. Và sau đó, khi chúng tôi đi đến giữa danh sách, điều tiếp theo chúng ta cần làm được kiểm tra xem giá trị của chúng tôi là có cho mã giả, chúng tôi đã viết trước đó. Vì vậy, làm thế nào để chúng tôi kiểm tra nếu giá trị của chúng tôi là ở giữa danh sách? Bạn. Tại sao bạn không làm điều này? HỌC SINH: Nếu giá trị của chúng tôi là ở giữa là bằng bất cứ điều gì chúng ta thiết lập - Tôi có nghĩa là bình đẳng bằng - JASON Hirschhorn: Nó - OK. HỌC SINH: Tôi không chắc chắn những gì biến chúng tôi đang tìm kiếm cho dù, là bởi vì - [Interposing TIẾNG NÓI] HỌC SINH: [nghe được]. JASON Hirschhorn: Chính xác. Mỗi khai báo hàm, chúng tôi đang tìm kiếm một giá trị. Vì vậy, chúng tôi đang tìm kiếm một giá trị trong một mảng các giá trị. Vì vậy, bạn hoàn toàn đúng. Bạn sẽ làm gì, nếu khung giá trị mở dấu ngoặc trung đóng khung bình đẳng bằng giá trị, và bên trong có những gì chúng ta cần phải làm gì? Nếu giá trị của chúng tôi có, những gì chúng ta cần phải làm gì? [Interposing TIẾNG NÓI] HỌC SINH: Quay trở lại không. JASON Hirschhorn: Quay trở lại thực sự. HỌC SINH: Quay trở lại thực sự. JASON Hirschhorn: Michael, những gì dòng này làm gì? HỌC SINH: [nghe được] chương trình đã chạy khóa học của mình, và đó là kết thúc, và bạn đã những gì bạn cần làm gì? JASON Hirschhorn: Các chương trình hoặc những gì? Trong trường hợp này? HỌC SINH: Chức năng. JASON Hirschhorn: Chức năng. Và như vậy, quay trở lại bất cứ điều gì được gọi là nó và cho nó giá trị, sự thật. Chính xác. Chính. Kiểu trả về là những gì của chính, Michael? HỌC SINH: int, số nguyên? JASON Hirschhorn: int, chính xác. Một số nguyên. Đó chỉ là một câu hỏi để đảm bảo các bạn đã trên đầu trang của nó. Những gì nó thường trở lại, nếu tất cả mọi thứ đang làm việc tốt? HỌC SINH: Zero. JASON Hirschhorn: Zero. Chính xác. HỌC SINH: Nếu đây chỉ trả về true, không có thông tin được đưa ra về những gì - Oh, đây là chỉ nói rằng đó giá trị bên trong mảng. JASON Hirschhorn: Chính xác. Chương trình này không cung cấp thông tin nơi chính xác giá trị là. Nó chỉ nói rằng, có, chúng tôi tìm thấy nó, hoặc không, chúng tôi không tìm thấy nó. Vì vậy, nếu số lượng tìm thấy, trả về true. Vâng, thực sự chúng tôi chỉ làm điều đó thực sự một cách nhanh chóng với một dòng mã. Vì vậy tôi sẽ di chuyển mà dòng giả. HỌC SINH: Chúng ta không cần thay đổi mảng? Nó phải là giá trị, không có giá trị, phải không? JASON Hirschhorn: Xin lỗi. Cảm ơn bạn. HỌC SINH: Vâng. JASON Hirschhorn: Dòng này nên giá trị. Chính xác. OK. Vì vậy, chúng tôi đã nhìn vào danh sách trung. Nếu số lượng tìm thấy trở lại đúng sự thật. Tiếp tục trên với giả của chúng tôi, nếu trung lớn, tìm kiếm lại. Vì vậy, tôi đã có trong đây, nếu số cao hơn, tìm kiếm lại. Constantine, bạn có thể cung cấp cho tôi dòng mã này? HỌC SINH: Nếu giá trị của trung - JASON Hirschhorn: Vì vậy, nếu giá trị - nếu mở dấu ngoặc giá trị khung khung gần trung - HỌC SINH: là nhỏ hơn so với giá trị? JASON Hirschhorn: Có ít hơn. HỌC SINH: Ít hơn giá trị. JASON Hirschhorn: Giá trị. Vâng, thực sự, bạn muốn kiểm tra xem số - Xin lôi. Đây là một chút bối rối. Nhưng khác nếu số lượng trong giữa danh sách lớn. HỌC SINH: Oh, OK. JASON Hirschhorn: Tôi sẽ thay đổi điều đó. Khác nếu trung cao hơn, chúng tôi muốn tìm kiếm bên trái, OK? Và chúng ta làm gì bên trong này nếu điều kiện? HỌC SINH: Tôi có thể làm cho một thay đổi nhỏ điều kiện, thay đổi nó để nếu người nào khác? JASON Hirschhorn: Khác nếu? OK. Vì vậy, mã này sẽ thực hiện như nhau. Nhưng những điều tốt đẹp về việc sử dụng nếu, khác nếu, nếu người nào khác hoặc nếu, nếu người nào khác, khác có nghĩa là chỉ một trong những sẽ được kiểm tra, không phải tất cả ba trong số họ, có khả năng. Và làm cho nó một chút đẹp hơn trên máy tính đó là chạy chương trình của bạn. Vì vậy, [? Constantine,?] chúng ta đang ở trong dòng này, nếu người nào khác giá trị, khung giữa khung gần lớn hơn giá trị. Những gì chúng ta cần phải làm gì? Chúng tôi cần phải tìm kiếm ở bên trái. Làm thế nào để chúng tôi làm điều đó? Tôi sẽ cung cấp cho bạn một sự khởi đầu. Chúng tôi có hai điều này được gọi là bắt đầu và kết thúc. Vì vậy, những gì cần phải xảy ra để bắt đầu? Nếu bạn muốn tìm kiếm bên trái của danh sách, chúng tôi nhận đầu hiện nay của chúng tôi. Những gì chúng ta cần phải làm điều đó? HỌC SINH: Chúng tôi đặt đầu đến giữa cộng với 1. JASON Hirschhorn: Vì vậy, nếu chúng ta tìm kiếm bên trái? HỌC SINH: Xin lỗi, trừ trung - để kết thúc sẽ là trung trừ đi 1 và bắt đầu - JASON Hirschhorn: Và những gì xảy ra từ đầu? HỌC SINH: Nó vẫn như nhau. JASON Hirschhorn: Vì vậy, ý nghĩa vẫn như nhau. Nếu chúng ta tìm kiếm bên trái, chúng tôi sử dụng đầu cùng - chính xác. Và kết thúc? Xin lỗi, những gì hiện các kết thúc bằng một lần nữa? HỌC SINH: trừ Trung 1. JASON Hirschhorn: trừ Trung 1. Bây giờ, tại sao trừ đi 1, không chỉ giữa? HỌC SINH: Giữa là trong số các hình ảnh đã có, bởi vì chúng tôi đã có kiểm tra rằng nó ra? JASON Hirschhorn: Đó là chính xác. Giữa là trong số các hình ảnh. Chúng tôi đã kiểm tra giữa. Vì vậy, chúng tôi không muốn "giữa," trích dẫn unquote, để tiếp tục được ở mảng mà chúng ta đang tìm kiếm. Vì vậy, đây là tuyệt vời. Khác nếu giá trị khung trung lớn hơn giá trị kết thúc bình đẳng trừ giữa 1. Jeff, những gì về dòng cuối cùng này? HỌC SINH: khac. Giá trị trung thấp hơn giá trị? JASON Hirschhorn: Chúng tôi sẽ bạn đang đem lại cho tôi khác. Vì vậy, nếu bạn không cung cấp cho tôi - HỌC SINH: Vì vậy, sau đó bắt đầu sẽ được cộng thêm 1 trung. JASON Hirschhorn: bình đẳng Bắt đầu cộng với trung 1, một lần nữa, cho cùng một Vì lý do đó Constantine đã cho chúng tôi trước đó. Và cuối cùng, những người đã không đưa ra tôi một dòng mã nào? Return false, Aleha, những gì chúng ta viết ở đây? HỌC SINH: Trở về sai. JASON Hirschhorn: Trở về sai. Và chúng ta cần phải làm điều đó, bởi vì nếu chúng tôi không tìm thấy nó, chúng ta cần phải nói rằng chúng ta không tìm thấy nó. Và chúng tôi đã nói chúng ta sẽ trở lại một bool, vì vậy chúng tôi chắc chắn phải quay trở lại một nơi nào đó bool. Vì vậy, hãy chạy mã này. Tôi đang thực sự đi vào - vì vậy chúng tôi đang ở trong nhà ga. Chúng tôi sẽ xóa cửa sổ của chúng tôi. Chúng ta hãy làm tất cả. Chúng tôi thấy có một lỗi. Có một lỗi trên dòng 15, dự kiến dấu chấm phẩy ở cuối kê khai. Vì vậy, tôi đã quên những gì? HỌC SINH: Dấu chấm phẩy. JASON Hirschhorn: Dấu chấm phẩy phải lên đây. Tôi nghĩ đó là đang Tom. Vì vậy, Tom, [nghe được]. Chỉ đùa thôi. Chúng ta hãy làm làm tất cả một lần nữa. HỌC SINH: thư mục Dropbox gì chúng ta phải ở trong cho điều này? JASON Hirschhorn: Vì vậy, bạn có thể chỉ xem cho bit này. Nhưng một lần nữa, nếu bạn muốn di chuyển này mã vào thư mục pset3 của bạn để thử nó ra, đó là những gì tôi đã làm. Nếu bạn sẽ nhận thấy ở đây - xin lỗi, câu hỏi hay. [? LS,?] Tôi có ở đây mã find.c từ mã distro trong tuần này. Tôi có helpers.h. Tôi có một file Make rằng tôi thực sự chỉnh sửa một chút để bao gồm các mới tập tin chúng tôi đang viết. Tất cả các mã sẽ có sẵn, không mã phân phối, nhưng mới Tạo tập tin, các tập tin mới sẽ helpers.h có sẵn trực tuyến để tải về. Một lần nữa, vì vậy đó là những Mã thêm chúng ta có. Vì vậy, làm cho tất cả, mỗi dòng này, làm cho thấy, nhị phân, lựa chọn bong bóng - làm cho tất cả ba trong số họ và biên dịch thành đang tìm file thực thi này. Vì vậy, nói chung, chúng tôi không muốn để thẳng đến check50. Chúng tôi muốn chạy một số xét nghiệm trên của chúng ta. Nhưng chỉ vì vậy chúng tôi có thể tiến hành điều này một chút, check50 2013 pset3.find sẽ vượt qua trong helpers.c-- xấu của tôi. Tôi không có ngay bây giờ. Vì vậy, chúng tôi đang thực sự đi vào chạy mã thực sự. Usage.find /, bạn biết những gì có nghĩa là? HỌC SINH: Bạn cần một thứ hai dòng lệnh trên nó. JASON Hirschhorn: Tôi cần một dòng lệnh thứ hai. Và theo các đặc điểm kỹ thuật, tôi cần vào những gì chúng ta đang tìm kiếm. Vì vậy, hãy tìm kiếm 42. Chúng tôi sẽ giữ nó trong sắp xếp, bởi vì chúng tôi đã không viết một chức năng sắp xếp được nêu ra - 42, 43, 44. Và điều khiển D không tìm thấy kim trong Haystack. Đó là xấu. Đó chắc chắn là có. Hãy thử một cái gì đó khác. Có lẽ đó là bởi vì tôi đặt nó ngay từ đầu. Chúng ta hãy làm 41, 42, 43. Có chúng tôi đi. Nó tìm thấy nó. Hãy đặt nó ở cuối bây giờ, chỉ vì vậy chúng tôi có thể được triệt để - 40, 41, 42. Không tìm thấy kim. Vì vậy, tôi đã đề cập điều này trước đó. Thật không may, tôi biết điều này sẽ xảy ra. Nhưng đối với các mục đích sư phạm, rất tốt để khám phá nó. Nó không hoạt động. Đối với một số lý do, nó không thể tìm thấy nó. Chúng tôi biết những gì ở trong đó, nhưng chúng tôi không tìm kiếm nó. Vì vậy, có một điều chúng ta có thể làm là đi qua GDB để tìm thấy nó, nhưng không ai, mà không qua GDB, có một ý nghĩa của nơi mà chúng tôi hơi say lên? [? Madu? ?] HỌC SINH: Tôi nghĩ rằng nó có thể được khi kết thúc bằng đầu, và nó chỉ là một danh sách một phần tử. Sau đó, nó chỉ cần bỏ qua nó thay vì của thực sự kiểm tra nó. JASON Hirschhorn: Đó là chính xác. Khi kết thúc bằng đầu, chúng ta vẫn còn có một yếu tố trong danh sách của chúng tôi? HỌC SINH: Có. JASON Hirschhorn: Vâng, trên thực tế, chúng tôi có một và chỉ một phần tử. Và rất có thể sẽ xảy ra khi nào, mỗi mã chúng tôi thử nghiệm, chúng tôi đang ở trước đống cỏ khô hoặc cuối đống cỏ khô. Đó là nơi bắt đầu và kết thúc sẽ bằng một, với tìm kiếm nhị phân. Vì vậy, trong những trường hợp hai nó không làm việc, bởi vì kết thúc là bằng đầu. Nhưng nếu kết thúc bằng đầu, không vòng lặp trong khi thực hiện điều này? Nó không. Và chúng ta có thể kiểm tra một lần nữa thông qua GDB. Vậy làm thế nào chúng ta có thể sửa mã này, bởi vì khi khi kết thúc bằng bắt đầu, chúng tôi cũng muốn điều này trong khi vòng lặp chạy. Vì vậy, những gì chúng tôi sửa chữa có thể làm cho dòng 18? HỌC SINH: [nghe được] lớn hơn hoặc bằng. JASON Hirschhorn: Chính xác ngay. Trong khi kết thúc lớn hơn hoặc bằng đầu. Vì vậy, bây giờ, chúng tôi đảm bảo để nhận được rằng trường hợp góc ở cuối. Và chúng ta hãy xem. Hãy chạy này một lần nữa. Chúng ta hãy làm tất cả. Một lần nữa, bạn sẽ phải chỉ theo cùng ở đây. Tìm 41 lần này. Chỉ cần giữ cho nó phù hợp. Tìm 42. Hãy đặt nó ở đầu - 42, 43, 44. Chúng tôi tìm thấy nó. Vì vậy, đó thực sự thay đổi chúng tôi cần phải thực hiện. Đó là rất nhiều mã hóa chúng tôi chỉ cần làm, tìm kiếm nhị phân. Không ai có bất kỳ câu hỏi trước khi Tôi chuyển vào dòng chúng tôi đã viết trong tìm kiếm nhị phân hoặc làm thế nào chúng tôi đã tìm ra những gì chúng tôi đã tìm ra? Trước khi chúng tôi di chuyển trên, tôi cũng muốn chỉ ra rằng bằng và lớn, chúng tôi ánh xạ chúng tôi mã giả một đến một vào mã của chúng tôi. Chúng tôi đã có mà điều khó khăn để tìm ra các bắt đầu và kết thúc. Nhưng đã không tìm mà ra, bạn sẽ có văn bản khá nhiều đang giống hệt nhau, tiết kiệm cho những đầu hai dòng. Và sau đó bạn sẽ nhận ra khi bạn đã thực hiện nó trong kiểm tra và các trường hợp mà bạn cần một cái gì đó khác. Vì vậy, ngay cả khi bạn đã theo chúng tôi mã giả dòng dòng, bạn sẽ đã nhận được tất cả, nhưng hai dòng mã bạn cần viết. Và tôi muốn được sẵn sàng đặt cược rằng các bạn sẽ có tất cả figured mà ra khá nhanh chóng, bạn cần thiết để đưa một số loại đánh dấu vào đó để tìm ra mà bạn muốn. Mà một lần nữa, là sức mạnh của làm pseudo-code trước thời hạn. Vì vậy, chúng ta có thể làm logic đầu tiên, và sau đó chúng ta có thể lo lắng về cú pháp. Đã có chúng tôi bị nhầm lẫn về logic trong khi cố gắng để viết mã này trong C, chúng tôi đã có thể nhận tất cả các điều sai lầm. Và sau đó chúng tôi được đặt câu hỏi về logic và cú pháp và chia lưới tất cả chúng lại với nhau. Và chúng tôi đã có thể nhận bị mất trong những gì có thể nhanh chóng trở thành một vấn đề rất khó khăn. Vì vậy, chúng ta hãy chuyển bây giờ để lựa chọn loại. Chúng tôi có 20 phút còn lại. Vì vậy, tôi có cảm giác chúng tôi sẽ không thể vượt qua tất cả các lựa chọn loại và bong bóng sắp xếp. Nhưng chúng ta ít nhất là nỗ lực để kết thúc lựa chọn sắp xếp. Vì vậy, thực hiện lựa chọn loại sử dụng sau khai báo hàm. Một lần nữa, điều này được lấy từ vấn đề đặt đặc điểm kỹ thuật. Giá trị int là dấu ngoặc đơn, là một mảng các số nguyên. Và int.n là kích thước của mảng đó. Loại lựa chọn sẽ để sắp xếp mảng này. Vì vậy, mỗi mô hình tinh thần của chúng tôi lựa chọn sắp xếp, chúng tôi kéo - đầu tiên, chúng tôi đi qua danh sách đầu tiên thời gian, tìm số nhỏ nhất, đặt nó ở đầu, tìm ra thứ hai số nhỏ nhất, đặt nó trong vị trí thứ hai nếu chúng ta muốn loại thứ tự tăng dần. Tôi không buộc bạn phải viết pseudo-mã ngay bây giờ. Nhưng trước khi chúng ta làm mã như là một lớp trong năm phút, chúng ta sẽ viết mã giả vì vậy chúng tôi có một số ý nghĩa của chúng ta đang đi. Vì vậy, cố gắng để viết mã giả ngày của riêng bạn. Và sau đó cố gắng để biến giả mã vào mã. Chúng tôi sẽ làm điều đó như là một nhóm trong năm phút. Và tất nhiên, cho tôi biết nếu bạn có bất kỳ câu hỏi. HỌC SINH: Đó là nó? JASON Hirschhorn: Xem cách xa bạn có thể nhận được trong hai phút nữa. Tôi hiểu bạn sẽ không có thể hoàn thành. Nhưng chúng ta sẽ đi qua này như là một nhóm. Bạn tất cả các mã hóa như vậy [không nghe được], vì vậy tôi xin lỗi tạm dừng những gì bạn đang làm. Nhưng hãy đi qua này như là một nhóm. Và một lần nữa, tìm kiếm nhị phân, tất cả các bạn cho tôi một nếu không dòng mã. Cảm ơn bạn cho điều đó. Chúng ta sẽ làm điều tương tự ở đây, mã với nhau như một nhóm. Vì vậy, lựa chọn loại - chúng ta hãy viết một số nhanh chóng mã giả. Mỗi mô hình tâm thần, một người nào đó có thể cho tôi dòng đầu tiên của mã giả, xin vui lòng? Tôi muốn làm gì? HỌC SINH: Trong khi danh sách là ra lệnh. JASON Hirschhorn: OK, trong khi danh sách là ra lệnh. Và làm những gì bạn có nghĩa là "ra lệnh?" HỌC SINH: Trong khi [nghe được] chưa được sắp xếp. JASON Hirschhorn: Trong khi danh sách là ra lệnh, chúng ta làm gì? Cho tôi dòng thứ hai, xin vui lòng, Marcus. HỌC SINH: Vì vậy, tìm tiếp theo số nhỏ nhất. Điều này sẽ được thụt vào. JASON Hirschhorn: Vì vậy, tìm tiếp theo số nhỏ nhất. Và sau đó người khác? Một khi chúng ta tìm thấy những nhỏ nhất tiếp theo số lượng, chúng ta làm gì? Tôi sẽ nói tìm số lượng nhỏ nhất. Đó là những gì chúng tôi muốn làm. Vì vậy, tìm số nhỏ nhất. Sau đó chúng ta làm gì? HỌC SINH: [nghe được] để bắt đầu. JASON Hirschhorn: Xin lỗi? HỌC SINH: Đặt nó trong bắt đầu của danh sách. JASON Hirschhorn: Vì vậy, đặt nó trong đầu danh sách. Và chúng ta làm gì để điều đó là trong đầu danh sách, phải không? Chúng tôi ghi đè lên một cái gì đó. Vì vậy, nơi nào chúng ta đặt điều đó không? Yeah, Anna? HỌC SINH: Trường hợp nhỏ nhất số là? JASON Hirshhorn: Vì vậy, đặt đầu danh sách các nơi số nhỏ nhất là. Vì vậy, trong khi danh sách là ra lệnh, tìm số lượng nhỏ, đặt nó trong đầu danh sách, đặt bắt đầu của danh sách mà số nhỏ nhất là. Marcus, bạn có thể nói lại dòng này trong khi danh sách là ra lệnh? HỌC SINH: Trong khi các con số chưa được sắp xếp? JASON Hirshhorn: OK, vì vậy để biết rằng những con số đã không được sắp xếp, những gì chúng ta cần phải làm gì? Bao nhiêu chúng ta cần phải đi qua danh sách này? HỌC SINH: Vì vậy, tôi đoán một vòng lặp, hoặc trong khi, trong khi con số kiểm tra là ít hơn chiều dài của danh sách? JASON Hirshhorn: OK, đó là tốt. Tôi nghĩ rằng tôi misphrased câu hỏi của tôi kém. Tôi chỉ cố gắng để có được ở chúng ta sẽ phải đi thông qua toàn bộ danh sách. Vì vậy, trong khi danh sách là ra lệnh, đối với tôi, rất khó để lập bản đồ trên. Nhưng về cơ bản, đó là cách Tôi nghĩ về điều này. Đi qua toàn bộ danh sách, tìm số nhỏ nhất, đặt nó trong bắt đầu - thực sự, bạn nói đúng. Chúng ta hãy đặt cả hai. Vì vậy, trong khi danh sách là ra lệnh, chúng tôi cần phải đi qua toàn bộ danh sách một lần, tìm số, nơi nhỏ nhất nó vào đầu danh sách, đặt đầu danh sách các nơi số nhỏ nhất là, và sau đó nếu danh sách vẫn là ra lệnh, chúng tôi đã phải đi qua này quá trình một lần nữa, phải không? Đó là lý do tại sao lựa chọn sắp xếp, Big-O thời gian chạy lựa chọn loại, bất cứ ai? HỌC SINH: n bình phương. JASON Hirshhorn: n bình phương. Vì như Marcus và tôi chỉ nhận ở đây, chúng ta sẽ phải đi qua danh sách danh sách số lần. Vì vậy, đi qua một cái gì đó chiều dài n n số lần là trong thực tế n bình phương. Vì vậy, đây là mã giả của chúng tôi. Điều này có vẻ rất tốt. Không ai có bất kỳ câu hỏi về giả? Bởi vì thực sự lựa chọn loại nên có thể đến 12:59, mã từ giả. Vì vậy, bất kỳ câu hỏi về logic của giả? Xin hỏi bây giờ. Loại lựa chọn - trong khi danh sách là ra trật tự, chúng ta sẽ đi qua nó và tìm thấy những nhỏ mỗi lần và đặt nó ở phía trước. Vì vậy, trong khi danh sách là ra lệnh, có thể ai đó cho tôi rằng dòng mã người đã không cho tôi một dòng mã nào, xin vui lòng? Nghe có vẻ giống như cái gì? HỌC SINH: Đó là một vòng lặp. JASON Hirshhorn: Có vẻ như một vòng lặp. OK, bạn có thể cho tôi cho vòng lặp? Cho - HỌC SINH: i Equals 0. JASON Hirshhorn: i hoặc - được những gì chúng ta thiếu? Những gì diễn ra ở đây? HỌC SINH: Int. JASON Hirshhorn: Chính xác. (Int i = 0; - HỌC SINH: i