[Powered by Google Translate] DAVID J. Malan: Được rồi, đây là CS50, và đây là
bắt đầu của tuần thứ hai.
Cảm ơn bạn.
Hãy để chúng tôi bắt đầu ở đây với một cuộc gọi điện thoại.
Tôi về để quay số 617-BUG-CS50.
CS50: Đây là CS50.
Boy Shuttle, nhấn 1.
Để bắt đầu, bấm 9.
DAVID J. Malan: Vì vậy, ông cho biết Boy Shuttle, báo chí 1.
Vì vậy, chúng ta sẽ bấm phím 1.
CS50: nguồn gốc của bạn là gì?
Đối với quad, báo chí 1.
Mather, bấm 2.
Boylston, bấm phím 3.
Lamont, bấm 4.
Mem Hall, bấm 5.
Để bắt đầu, bấm 0.
DAVID J. Malan: Chúng tôi sẽ bấm 1 cho quad.
CS50: tàu con thoi tiếp theo lá này rất phút tại 1:10 PM, và
sau đó tại 1:20 PM, 1:30 PM, 1:40 PM.
Đây là CS50.
>> DAVID J. Malan: Vì vậy, đây là giọng của CS50.
Và nó là một ví dụ của các loại dự án cuối cùng,
Ví dụ, bạn có thể cắn hướng về
cuối học kỳ.
Ví dụ, shuttleboy.cs50.net tồn tại -
thực sự là một dự án mà tôi đã viết sau khi CS51
trở lại khi tôi là một đại học.
Và nguồn cảm hứng ở đây đã trở lại sau đó, tất cả những gì họ có là
in đưa đón lịch trình xe buýt, và không có
khái niệm tìm kiếm những thứ trực tuyến.
Và vì vậy tôi loại bồ câu trong một ngày cuối tuần, đổ qua
in lịch biểu, và chuyển nó vào một chương trình máy tính.
Tại thời điểm đó, chương trình máy tính xảy ra phải được viết
trong C. Và bạn thực sự chạy nó bởi Boy Shuttle gõ tại một
nhấp nháy nhắc như chúng tôi đã làm cho đến nay.
Tuy nhiên, trong những năm qua, nó phát triển thành ngay lập tức
tin nhắn bot.
Nó được phát triển gần đây vào trang web này, trở thành một
SMS dựa trên công cụ, cũng như thành công cụ này dựa trên giọng nói.
Và đây là gợi ý ở cả các loại vật mà bạn có thể
làm cho chính mình vào cuối học kỳ.
>> Ví dụ, có, phiên bản SMS của Boy Shuttle xảy ra
hoạt động như sau.
Nếu trên điện thoại di động của bạn, bạn gửi một tin nhắn văn bản đến 41.411 và
sau đó gửi sboy biểu tượng đặc biệt, Shuttle Boy,
tiếp theo là A và B, trong đó A là một nguồn gốc và B là một
điểm đến -
ví dụ, Boylston Space Quad -
những gì bạn sẽ nhận được trở lại trong vòng vài giây là một văn bản
tin nhắn từ Boy Shuttle nói cho bạn chính xác khi
tàu con thoi tới, từ thời điểm đó đó
điểm B.
Và đây là một ví dụ tổng quát hơn về những gì được biết đến như
bằng cách sử dụng một API.
>> Vì vậy, ví dụ, điều này ở đây là chỉ shuttleboy.cs50.net,
hóa thân thực tế dựa trên web này.
Tuy nhiên, các dữ liệu nhấn mạnh này và các ứng dụng khác mà CS50
đã phát triển được tiếp xúc với tất cả mọi người ở đây trong những hình thức
các API, các giao diện lập trình ứng dụng.
Và đó chỉ là một cách nói rằng những người như chúng tôi
Internet và những người khác đã dành thời gian tạo
phần mềm mà bạn có thể sử dụng để lấy dữ liệu từ chúng tôi và
sau đó xây dựng các ứng dụng riêng của bạn trên đầu
bộ dữ liệu.
Vì vậy, ví dụ, trang này Boy Shuttle API ở đây, mà
sẽ xảy ra là trong cuốn hướng dẫn CS50, về cơ bản các tài liệu
làm thế nào bạn có thể đi về yêu cầu CS50 cho các máy chủ dữ liệu.
Ví dụ, nếu bạn đã quen thuộc với các tập tin CSV, dấu phẩy
giá trị tách nhau, đây chỉ là loại nhanh chóng và bẩn
Như các tập tin Excel.
Vì vậy, bạn có thể yêu cầu Boy Shuttle cho tất cả các dữ liệu trên tất cả các
nhà ở và các tọa độ GPS của họ, và bạn sẽ nhận được
trở lại, về cơ bản, một bảng tính như thế đó
sau đó bạn có thể đọc vào một chương trình của riêng bạn và sau đó
tạo kết quả, như Shuttle Boy chính nó
xảy ra để được làm.
Đối với những người quen thuộc hơn, dữ liệu hiện đại hơn đại diện
bao gồm JSON, JavaScript Object Notation.
Một cái gì đó sẽ trở về với bạn hướng tới
cuối học kỳ.
>> Nhưng một lần nữa, đây chỉ là một trong một số các API riêng của CS50.
Và điều thú vị là bây giờ, những ngày này, Facebook và
Twitter và Google và khá nhiều mỗi trang web phổ biến ra
có một số loại của API, có nghĩa là nếu bạn đọc
tài liệu trên trang web của họ, bạn đăng ký một
tài khoản, sau đó bạn có thể bắt đầu viết phần mềm trên đầu trang của
bất kỳ công cụ hoặc dữ liệu mà công ty cung cấp.
Và như vậy một nghiên cứu sinh giảng dạy của chúng ta một vài năm trở lại
đã viết một phiên bản Mac này.
Vì vậy, tại các liên kết có tiêu đề Mac đây ở trên cùng bên trái, bạn có thể thực sự
tải về một tiện ích cho hệ điều hành Mac OS chạy trên máy Mac của bạn để làm
cùng các loại của sự vật.
Vì vậy, nó là tất cả về xây dựng trên các bộ dữ liệu như thế này.
Nhưng thêm vào đó vào cuối học kỳ.
>> Vì vậy, hãy nhảy vào thật nhanh chóng để một lỗi, chỉ cần các loại có được
những điều ấm lên ngày hôm nay, và suy nghĩ về một số
những điều chúng ta nhìn vào tuần trước.
Đặc biệt, hãy để tôi đi trước và kéo lên, nói,
ví dụ này ở đây.
Buggy1.c, điều này hiện có sẵn trên trang web của khóa học nếu bạn muốn
để tải về nó và poke xung quanh mình.
Nhưng chúng ta hãy phóng to ở đây tại chương trình này tương đối ngắn, và chỉ cần
một recap siêu nhanh của một số các khối xây dựng cơ bản mà
chúng tôi thực sự sẽ chỉ bắt đầu dùng cho các cấp.
>> Vì vậy, các công cụ màu xanh, trong các dòng từ 1 đến 9, chỉ là
softball câu hỏi.
Vì vậy, đây chỉ là ý kiến.
Họ không có ý nghĩa chức năng.
Nhưng họ nhận xét theo ý nghĩa rằng họ đang ghi chú
I, con người, bản thân mình vì vậy trong bài giảng và sau khi
bài giảng, tôi thực sự có thể nhớ những gì chương trình này
không mà không cần phải đọc qua từng dòng và
tái tạo lịch sử trong tâm trí của tôi.
Hơn nữa, nếu tôi giao chương trình này để người khác như
bạn, nó rõ ràng hơn nhiều cho bạn, bởi vì ý kiến ​​như thế này,
những gì chương trình thực sự làm, hoặc ít nhất là những gì
chương trình là nghĩa vụ phải được thực hiện.
Đó là chính xác hay không là một vấn đề khác hoàn toàn.
Bây giờ, trong C, với nhiều dòng ý kiến, nhớ lại rằng trên đường dây
ở đây là biểu tượng ma thuật, / *.
Nó có nghĩa là ở đây có sự bắt đầu của một chú thích.
Và không có gì khác vấn đề cho đến khi bạn đạt đến kết thúc cuối cùng,
* /, điều ngược lại.
Vì vậy, thực tế là tôi có 80-một số ngôi sao lẻ ở đây từ
trái sang phải là thực sự chỉ là một chi tiết thẩm mỹ.
Nó không có ý nghĩa chức năng.
>> Bây giờ làm thế nào về dòng 11?
Làm gì trong các điều khoản của layman?
Đó là những gì?
TƯỢNG: Bao gồm các tiêu chuẩn.
DAVID J. Malan: OK, tốt.
Vì vậy, nó bao gồm các thư viện stdio.h.
Vì vậy, điều đó không có nghĩa là gì?
Vâng, bên trong tập tin đó, stdio.h, một bó toàn bộ
chức năng khai báo
có nghĩa là, mã mà người khác đã viết.
Và một ví dụ hoàn hảo của một chức năng đó là tuyên bố trong
stdio.h -
yêu thích bây giờ?
Vì vậy, printf, một trong những người phổ biến nhất để sử dụng, chắc chắn
sớm, từ thư viện mà là ở đó.
Nếu tôi loại trừ rằng dòng mã, Clang sẽ hét lên
tôi một cái gì đó về bằng cách sử dụng một biểu tượng không khai báo.
Một cái gì đó không khai báo có lẽ là từ khóa, bởi vì
chúng tôi đã không thông báo cho trình biên dịch những gì printf trông
như thế trừ khi chúng tôi bao gồm dòng.
Và nhiều hơn nữa xuống Trái Đất, thực sự, những gì dòng nói là
mở tập tin đó, stdio.h, bất cứ nơi nào nó là của máy chủ
ổ cứng, ổ đĩa cứng của thiết bị, và sao chép-dán nó
ngay vào tập tin của tôi, không của tôi
phải làm điều đó bằng tay.
>> Bây giờ, khi chúng tôi nhận được xuống đây chính, bao lâu chúng ta sẽ bắt đầu
trêu chọc ngoài int và khoảng trống là gì.
Nhưng hiện nay, chúng ta hãy nhìn vào ba dòng
trong vòng 15 đến 17.
Này ở đây tôi đòi hỏi như là lỗi.
Dòng 7 trong ý kiến ​​của tôi "nên in 10
dấu hoa thị nhưng không phải là "Tại sao điều này không in, trên thực tế,
10 như vậy sao?
Khán giả: không nghe được.
DAVID J. Malan: Chính xác.
Vì vậy, nhận thấy rằng chúng ta đang bắt đầu đếm từ 0.
Và điều này thực sự là một quy ước trong lập trình và
khoa học máy tính nói chung, bắt đầu đếm
từ 0 thay vì 1.
Và điều này thực sự chỉ xuất phát từ thực tế rằng, đối với
Ví dụ, khi chúng tôi đã có tám người trên sân khấu, khi
không có ai giơ tay của họ, họ đã
tất cả các số không có hiệu quả.
Và do đó, nó chỉ là loại một quy ước máy tính như vậy,
do đó, để bắt đầu đếm từ 0.
Nếu đó là số lượng thấp nhất, bạn có thể đại diện trong hệ nhị phân.
>> Vì vậy, ở đây chúng tôi đã bắt đầu khởi tạo i là 0.
Chúng tôi đã thiết lập i bằng 0.
Nhưng sau đó tôi đã sai lầm này ở đây, nói i nhỏ hơn hoặc
bằng 10.
Nhưng nếu bạn nghĩ rằng thông qua, nếu tôi bắt đầu từ 0 và sau đó tôi đi
lên đến 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, tôi thực sự sẽ
in ra 11 ngôi sao để màn hình, bởi vì tôi đã đi lên
đến và bằng 10.
Vì vậy, sửa chữa dễ dàng ở đây sau đó là gì?
Khán giả: không nghe được.
DAVID J. Malan: Chỉ cần thay đổi nó để ít hơn.
Nếu bạn thực sự muốn, bạn có thể làm điều này.
Nhưng nói chung, đó là tán thành.
Và do đó, bắt đầu đếm từ 0 chỉ là một cái gì đó bạn nên
thường được sử dụng để.
Bây giờ, những gì về xây dựng này cả trong và của chính nó?
Này 15 dòng demarks một vòng lặp for.
Vì vậy, đối với không phải là một chức năng.
Nó chỉ là một tuyên bố.
Đó là một cấu trúc vòng lặp, như chúng ta đã thấy trong Scratch.
Và nó có ba phần.
Chú ý rằng có là phần đầu tiên
bên trái của dấu chấm phẩy.
Có phần giữa giữa hai dấu chấm phẩy.
Và sau đó có phần bên phải ở bên phải
của các dấu chấm phẩy thứ hai.
Bây giờ, lần đầu tiên trong số này làm những gì?
Khán giả: không nghe được.
DAVID J. Malan: ở đó không?
Yeah?
TƯỢNG: Khởi tạo.
>> DAVID J. Malan: Khởi tạo.
Vì vậy, điều này có nghĩa gì?
Chúng tôi đã khai báo một biến tên gọi là i.
Đây là kiểu int, bởi vì tôi đã chỉ định int i.
Và tôi khởi tạo i với giá trị là 0.
Vì vậy, đây là những gì thực sự nói gì?
Đó là hiệu quả nói vào máy tính này, cho tôi đủ
bộ nhớ, đủ bộ nhớ RAM, để phù hợp với một số, và sau đó đặt các
số 0 trong đó đoạn bộ nhớ RAM.
Và như một sang một bên, lớn như thế nào là một int thường, ít nhất là bên trong
của thiết bị?
Khán giả: 32 bit.
DAVID J. Malan: 32 bit.
Vì vậy, đó có nghĩa là cung cấp cho tôi 32 bit, hay còn gọi là 4 byte,
và đặt giá trị 0 trong nó, mà là khá dễ dàng bởi vì
nó chỉ có nghĩa là tất cả các bit là 0.
>> Vì vậy, bây giờ, phần thứ hai ở đây là điều kiện.
Và tình trạng này, như tên cho thấy, là những gì được kiểm tra
một lần nữa và một lần nữa và một lần nữa cho dù đó là đúng hay sai.
Vì vậy, đây chỉ là nói làm dòng mã sau đây
cụ thể là dòng 16, bởi vì đó là một trong những chỉ thụt vào
ở dưới -
khi i nhỏ hơn 10.
Và sau mỗi lần lặp thông qua vòng lặp này, làm
incrementation, mà trong trường hợp này là i + +.
Bây giờ, nó không phải là i + +.
Nó có thể là i -
Nhưng nếu tôi làm điều này, các hành vi gì
của chương trình này?
Khán giả: Nó sẽ là một vòng lặp vô hạn.
DAVID J. Malan: Nó sẽ là một số loại vòng lặp vô hạn,
trừ khi chúng tôi nhận được may mắn sau khi tiêu cực 2 tỷ.
Có lẽ điều này sẽ quấn xung quanh, bởi bản chất của hữu hạn
số bit mà chúng tôi đã phân bổ cho một int.
Nhưng nó chắc chắn sẽ lặp hơn 10
chắc chắn hơn 11 lần ở đây.
>> Và bây giờ, cũng giống như một sang một bên, nhận ra rằng i + + và i -
thực sự chỉ là cú pháp đường.
Nó chỉ là ký hiệu viết tắt cho những gì nhiều hơn một chút
một cách rõ ràng bằng văn bản như sau:
i = i + 1.
Đó là giống hệt với i + +.
Nó chỉ loại trông xinh đẹp hơn để nói i + +.
Đó là gọn gàng hơn, dễ đọc hơn.
Và do đó, hầu hết mọi người làm điều đó thay.
Nhưng điều này là giống hệt nhau chức năng
những gì chúng ta vừa thấy.
Vì vậy, trong ngắn hạn, sửa chữa nhanh chóng ở đây chỉ là để nói lặp i
từ 0 tất cả các con đường lên đến nhỏ hơn 10.
Và sau đó chúng tôi thực sự sẽ nhận được 10 sao.
>> Vì vậy, hãy thử này.
Hãy để tôi mở các thiết bị đầu cuối ở phía dưới.
Hãy để tôi đi vào thư mục này.
Và tôi sẽ biên dịch nó bằng tay với Clang cho bây giờ.
Và tôi sẽ biên dịch này là buggy1.c, Enter.
Và bây giờ buggy1, tại sao không có tập tin hoặc thư mục
gọi là buggy1?
Khán giả: không nghe được.
DAVID J. Malan: Yeah.
Vì vậy, nó thực sự gọi là a.out.
Vì vậy, gọi lại nếu bạn chỉ cần chạy Clang, nơi Clang
biên dịch, và bạn không chỉ định tên mà bạn muốn
cung cấp cho chương trình của bạn, nó sẽ mặc định a.out.
Vì vậy, thực sự nếu tôi làm ls -
oops.
Và tôi didn't - vấn đề màu đen và trắng một số
bạn phải đối mặt đã được cố định.
Nhưng hãy để tôi làm việc này.
Hiện chúng tôi có a.out ở phía bên trái.
Vì vậy, chúng tôi phải chạy a.out thay vì buggy1.
>> Vì vậy, hãy để tôi đi trước và làm điều này.
/ A.out, Enter.
Và tôi dường như đã không làm những gì?
Khán giả: Lưu.
DAVID J. Malan: Lưu tập tin của tôi.
Vì vậy, đó có thể dễ dàng giải quyết bằng cách nhấn S kiểm soát, hoặc sẽ
File, Save, như trong hầu hết các chương trình.
Hãy để tôi đi xuống ở đây, xóa màn hình, chạy nó một lần nữa.
Và vẫn không có một lỗi.
Vì vậy, những gì đang xảy ra -
Khán giả: Bạn không biên dịch.
DAVID J. Malan: Ah, tốt.
Tôi đã không biên dịch nó.
Như một thằng ngốc, tôi nhìn vào mã để xem những gì là sai.
Vì vậy, kêu vang buggy1.c, tại a.out.
Và phew, lưu.
>> Vì vậy, có vẻ một chút xấu xí vì không có dòng mới
bất cứ nơi nào trong chương trình.
Nhưng một lần nữa, đó chỉ là một chi tiết thẩm mỹ.
Và ít nhất nếu chúng ta tính những người ra, chúng ta nên
bây giờ nhìn thấy 10 ngôi sao như vậy.
Vâng, những gì về ví dụ này khởi động thứ hai?
Vì vậy, vào buggy2, tôi cho rằng phiên bản này cũng sẽ in
10 ngôi sao, mỗi dòng.
Vì vậy, thời gian này, tôi có một ký tự xuống dòng, chỉ để chắc
một chút đẹp hơn mọi thứ.
Nhưng thay vì những gì tôi nhận được là điều này.
Vì vậy, hãy để tôi làm buggy2.c kêu vang, Enter.
Bây giờ nó lại được gọi là a.out.
Enter.
Tôi chỉ nhìn thấy một dòng mới, chỉ có những dòng mới nhất
di chuyển dấu nhắc của tôi đến dòng kế tiếp.
Và rõ ràng tôi đã in *, sau đó một dòng mới,
*, Sau đó một dòng mới.
Tuy nhiên, lỗi ở đây là gì?
Yeah?
Khán giả: không nghe được.
>> DAVID J. Malan: Chính xác.
Vì vậy, không giống như một số ngôn ngữ, như Python, thụt đầu dòng
thực sự có ý nghĩa chức năng, trong một
ngôn ngữ như C -
như chúng ta sẽ thấy, PHP, JavaScript -
thụt đầu dòng thực sự là chỉ vì lợi ích của con người.
Vì vậy, thực tế là tôi đã thụt vào dòng 16 và 17 sẽ rất tốt,
nhưng nó không có ý nghĩa chức năng ở đây.
Nếu tôi muốn cả hai dòng để thực hiện như một phần của
vòng lặp, sau đó tôi phải gửi kèm theo trong dấu ngoặc nhọn bằng cách làm này.
Bạn chỉ có thể cắt góc và bỏ qua các dấu ngoặc nhọn nếu
trường hợp này là những gì?
Khán giả: Chỉ cần một dòng.
DAVID J. Malan: Chỉ cần một dòng.
Vì vậy, đó chỉ là loại một loại tốt đẹp của các chi tiết cú pháp để
bạn không lãng phí thời gian để viết ba dòng, hai trong số đó là
dấu ngoặc nhọn, chỉ cần viết một dòng mã nào.
Nhưng nếu bạn có hai hay nhiều dòng, chúng tôi
thực sự cần để làm điều này.
>> Vì vậy, bây giờ cho tôi lưu này.
Hãy để tôi đi trước và Clang chạy lại.
Sau đó, hãy để tôi chạy lại a.out, và bây giờ tôi nhận được một trong mỗi dòng.
Bây giờ, a.out lại là của một tên câm cho một chương trình.
Làm thế nào tôi có thể nói Clang thực sự cho tôi một tên tập tin
đó là thân thiện với người dùng hơn, như buggy2 chính nó?
Một ít rõ ràng hơn?
Khán giả: không nghe được.
DAVID J. Malan: OK, vì vậy tôi thực sự có thể mất rất
thân thiện với người sử dụng phím tắt và chỉ cần viết buggy2.
Tôi không chỉ định c trong trường hợp này, và nhấn Enter.
Và những gì làm cho không là nó biên dịch buggy2.c cho tôi
yêu cầu Clang để làm điều đó.
Cụ thể, nó gọi Clang, nó chạy Clang sử dụng cách
đối số dòng lệnh hoặc thiết bị chuyển mạch tôi thực sự cần.
Theo thời gian, chúng tôi sẽ trở lại với tất cả những khác nhau
biểu hiện khó hiểu hyphenated có nghĩa.
Nhưng hiện nay, đó là chỉ cần tiết kiệm cho tôi những rắc rối của
phải nhớ và phải loại ra tất cả những người
biểu thức khác nhau hyphenated.
Và xu hướng tăng giá của nó cuối cùng là
bây giờ tôi có buggy2.
Nếu tôi muốn làm điều này bằng tay, mặc dù, tôi
thay vì có thể làm điều này -
kêu vang-o buggy2 và sau đó buggy2.c.
Và đó tương tự sẽ cung cấp cho tôi một tập tin gọi là buggy2.
>> Vì vậy, trong ngắn hạn, Clang trình biên dịch.
Hãy chỉ là một công cụ thân thiện với người sử dụng rằng chúng tôi sẽ được sử dụng nhiều
và nhiều hơn nữa, bởi vì nó chỉ bắt đầu
đơn giản hóa mọi thứ cho chúng tôi.
Và chúng tôi trở về 0, cuối cùng.
Để bây giờ, chỉ vì, nhưng chúng tôi sẽ bắt đầu trêu chọc rằng một phần
ngày hôm nay và hôm thứ Tư.
Bất kỳ câu hỏi về bất cứ điều này?
Yeah?
Khán giả: không nghe được]
ls trong dấu ngoặc kép ở đó?
DAVID J. Malan: OK.
Khi tôi đã gõ ls trong dấu ngoặc kép, đó là tôi làm một số phép thuật
đằng sau hậu trường để sửa chữa một lỗi.
Tôi quên, như chúng tôi đã từng nói với nhiều bạn trên
Hội đồng thảo luận, để làm -
chúng tôi sẽ làm điều này ngay bây giờ - sudo yum-y update appliance50.
Whoops, đánh vần.
Vì vậy, thiết bị này là giống như một hệ điều hành.
Nó đang chạy hệ điều hành này được gọi là Fedora.
Và bây giờ bởi vì kết nối Internet chậm chạp của tôi, tôi đã
thực sự hosed nó.
Vì vậy, chạy cập nhật yum sudo, khi chúng tôi nói cho bạn biết phải làm gì trong
vấn đề tập hợp, chủ yếu là chạy cập nhật tự động
trong hệ điều hành Mac OS hoặc Windows.
Và lý do để chạy lúc bắt đầu của
vấn đề thiết lập là bởi vì khi chúng tôi tạo ra thiết bị, tôi
điều sai lầm, và tôi vô tình làm cho tất cả các chương trình của bạn trông
màu đen trên một màn hình màu đen, đó là lý do tại sao bạn không nhìn thấy chúng
theo mặc định.
Tuy nhiên, phiên bản mới nhất của thiết bị sửa chữa này.
Và tôi sẽ khắc phục điều đó trong thời gian nghỉ một lần tôi có Internet
kết nối.
>> Vì vậy, có dấu ngoặc kép chỉ ẩn sai lầm của tôi, rất kín đáo,
rõ ràng.
Các câu hỏi khác?
Vâng?
Khán giả: làm cho đến từ?
[Không nghe được]
DAVID J. Malan: Tốt câu hỏi.
Trường hợp không thực hiện đến từ đâu?
Nó là một chương trình Linux đã tồn tại trong nhiều năm dài,
trước khi CS50.
Và nó đi kèm với một hệ thống hoạt động như Fedora.
Nó không đến từ thư viện CS50.
Trong thực tế, chỉ có những thứ đến từ các thư viện CS50
vậy, đến nay, mà chúng ta đã thấy, là GetString, getInt, tất cả các
những người có được chức năng, và chuỗi từ, và một số
mức độ, từ bool.
Nhưng chúng tôi sẽ trêu chọc rằng ngoài khi chúng tôi nhảy vào các CS50
thiết bị chính nó.
>> Vì vậy, có thêm một câu hỏi ở đây.
Khán giả: Khi bạn thực hiện và sau đó lỗi, như thế nào
máy tính biết không nghe được]
DAVID J. Malan: Tốt câu hỏi.
Vì vậy, khi bạn chỉ cần chạy làm cho buggy1 hoặc làm cho buggy2, làm thế nào
làm cho biết?
Vì vậy, theo mặc định, nếu bạn gõ làm buggy1, vẻ cho một
tập tin gọi là buggy1.c.
Và sau đó nó thực hiện lệnh Clang thích hợp,
do đó ghi đè lên tập tin đầu ra mặc định được gọi là a.out.
Trong thực tế, nếu chúng ta nhìn vào những gì làm cho những gì
chúng ta hãy bỏ điều này.
Nếu chúng ta nhìn vào những gì làm được thực sự làm, làm cho buggy2,
nó đã được cập nhật.
Vì vậy, hãy để tôi loại bỏ các lệnh rm,
chương trình tôi đã viết trước đây.
Gõ Y-E-S để xác nhận rằng tôi muốn loại bỏ nó.
Nếu bây giờ tôi làm, nhận thấy rằng trong dòng này rất dài,
có điều cuối cùng này,-o buggy2.
Tất cả làm cho đang làm là đi qua đó lập luận, có thể nói,
Clang, vì vậy mà tôi không phải gõ nó bản thân mình.
>> Được rồi, do đó, một vài nhanh chóng hành chính
thông báo.
Vì vậy, đối với phần, chính thức bắt đầu đến
Chủ nhật, bạn sẽ luôn luôn muốn mang lại, nếu
bạn có một, một máy tính xách tay.
Nếu bạn không có một máy tính xách tay, không đến được với tôi
thả cho tôi một email.
Và chúng ta sẽ tìm ra một quy trình làm việc.
Nói chung bạn sẽ tìm thấy trong phần là chúng là một phần
khái niệm, một phần tay.
Chúng tôi đặc biệt sẽ sử dụng phần câu hỏi, một phần của
tuần đặt vấn đề, để đi bộ qua một số các
khái niệm tài liệu từ bài giảng.
Và đó là tất cả trong các vấn đề hiện tại.
Và chúng tôi cũng sẽ nhảy vào một số hoạt động tay vào, đôi khi
trong số đó sẽ được yêu cầu phải nộp, đôi khi
đó sẽ không.
Ví dụ, tuần đầu tiên, họ có nghĩa là chỉ như là một
ấm lên tập thể dục.
Và bạn sẽ thấy rằng những vấn đề thực sự chỉ.
Họ đang có nghĩa là khá nhỏ, nhưng không nhất thiết phải
chương trình tầm thường để viết, không nhất thiết phải
thú vị và của chính họ, nhưng là cơ hội tốt để
thực hành với cú pháp, với các chức năng mới, trong sự thoải mái của một
phần mà bạn có một vài người bạn cùng lớp của bạn trình bày như
cũng như TF của bạn.
>> Và những gì chúng tôi sẽ làm theo thời gian là sử dụng một công cụ gọi là CS50 Spaces,
theo đó thay vì chỉ bằng cách sử dụng gia dụng CS50, bạn sẽ
thay vì đi đến một trang web trong trình duyệt, bạn sẽ có thể
để viết mã trong một cửa sổ trình duyệt trong quá trình phần.
Và sau đó nếu bạn chọn tham gia, giáo viên giảng dạy của bạn sau đó có thể hiển thị
bất cứ điều gì nó là bạn đang gõ trên màn hình của bạn trong trình duyệt của bạn
cửa sổ ở phía trước của lớp, cho dù nặc danh hoặc
công khai, do đó, rằng người đó có thể đi bộ qua với
các bạn cùng lớp của bạn những gì bạn đã làm tốt, những gì bạn không làm tốt.
Và một lần nữa, phần còn lại đảm bảo tất cả những điều này có thể được ẩn danh độc đáo.
Nhưng nó sẽ là một cơ hội tốt đẹp cho nhiều hơn nữa
tương tác hơn một cái gì đó giống như bài giảng cho phép.
>> Trong khi chờ đợi, chúng tôi sẽ có những việc này được gọi là siêu
phần, là tùy chọn nhưng được mở cho tất cả mọi người trong
các lớp học, do đó bạn có thể làm điều này chung hơn cho
vấn đề thiết lập một.
Dưới đây là lịch trình.
Điều này cũng được đăng trên trang chủ tại cs50.net.
Chú ý rằng sẽ có một hacker cụ thể
một chiều mai.
Và chúng ta sẽ quay một ngày hôm nay và ngày mai và gửi những
trực tuyến trong vòng 24 giờ.
Vì vậy, nếu bạn không thể thực hiện bất kỳ của những lần này, không phải lo lắng.
Và một lần nữa, lịch trình tuyến tại cs50.net.
>> Về khu vực riêng của mình, bạn nên đã nhận một
gửi email hướng dẫn bạn đi đến trang chủ của khóa học để tìm
ra phần của bạn.
Nếu cuộc sống đã thay đổi và bạn cần thay đổi phần của bạn,
không phải là một vấn đề.
Quay trở lại là URL đó, cs50.net/section, số ít,
và bạn sẽ điền vào các hình thức tương tự để bạn có thể
sau đó cung cấp cho chúng tôi sở thích của bạn.
Và chúng ta sẽ theo dõi vào cuối tuần như những gì chúng ta có thể
cung cấp.
Tuần trước, nhớ lại rằng chúng tôi đề xuất sử dụng CS50 bàn,
công cụ của khóa học thảo luận, trong bài giảng.
Vì vậy, chúng tôi đã có 40 câu hỏi đã được hỏi và
trả lời trong bài giảng.
Vì vậy, nó dường như làm việc tốt, vì vậy chúng tôi sẽ tiếp tục
cố gắng để làm điều này.
Nếu, trong bài giảng, bạn không chỉ cảm thấy nuôi thoải mái
bàn tay của bạn, không phải là một vấn đề.
Tới cs50.net/discuss, gửi ở đó, và một trong những giảng dạy của chúng tôi
nghiên cứu sinh hoặc là sẽ trả lời điện tử hoặc nâng cao của họ
tay thay cho bạn nặc danh yêu cầu, tùy thuộc
theo tính chất của câu hỏi.
Và về thông tin phản hồi, nói chung psets sẽ
trả lại trong vòng một tuần.
Bởi vì phải mất một chút thời gian cho các bộ phận để đạt được
cân bằng, pset đầu tiên, 0 và 1, sẽ là một chút
chậm trễ như mọi thứ lắng xuống.
Nhưng chơ cho rằng trong những tuần tới.
>> Được rồi, vì vậy hãy để tôi đưa vào nghiêm trọng của tôi
giọng nói chỉ là một thời điểm.
Vì vậy, đây thực sự là một môi trường thú vị để được
có cuộc thảo luận này, những gì với tất cả những thứ khác
xảy ra trong Phụ lục trường có liên quan.
Nhưng CS50 ràng đã có một lịch sử đặc biệt này
chủ đề, càng nhiều như mọi năm, khóa học này, đối với nhiều
năm, Ad-Ban khoảng 3% của lớp.
Năm nay, gần đây nhất, năm 2011, CS50 rao vặt lên 35 sinh viên.
Đây không phải là, tôi nghĩ rằng, do thiếu sự rõ ràng.
Nhận ra rằng trong giáo trình của khóa học, có một trang
tuyên bố giải thích nơi các đường dây.
Đó là tuyên bố tương tự được lặp đi lặp lại trên mỗi một trong những
vấn đề đặt ra trên một trang.
>> Vì vậy, tôi đề cập đến điều này ngày hôm nay thực sự chỉ để làm cho
người lưu tâm đến điều này.
Và chúng tôi đã thử những thứ khác nhau.
Và những gì tôi nghĩ chúng tôi sẽ làm ngày hôm nay chỉ mất một chút thời gian để
thực sự nhìn tại một số các trường hợp trong quá khứ đã đưa ra.
Thay vì giữ những bí mật nhỏ bẩn, thực sự
chỉ ra những gì học sinh đã làm và làm thế nào chúng ta đã phát hiện
và thực sự những gì các động lực bao quát cho
thậm chí có cuộc trò chuyện này.
Vì vậy, với mà nói, dòng cơ bản này -
mỗi giáo trình, bạn đang chào đón, bạn được khuyến khích,
nói chuyện với các bạn cùng lớp.
Đó là toàn bộ mục đích của việc có những hợp tác
văn phòng giờ trong Annenberg và khuyến khích mọi người
thức dự án để làm việc cùng nhau.
Nhưng dòng được rút ra khi nói đến thời gian để thực sự ghi
giải pháp cuối cùng của bạn.
Phát biểu bằng tiếng Anh, hoàn toàn tốt, nói trong mã giả,
hoàn toàn tốt.
Gửi email cho một người bạn cùng lớp của bạn pset, cho phép họ nhìn qua
màn hình như tay tiếp tục gõ,
trên đường dây, là tốt.
Đừng nhìn vào các giáo trình cho các dòng cụ thể.
>> Nhưng chỉ để vẽ một bức tranh về cách thức này là tiếc là một
thực tế, nhận ra rằng có những trang web ra có
có giải pháp từ lớp này và các lớp khác.
Thực tế là bạn hoặc khoảng 3% các bạn biết rằng điều này tồn tại
có nghĩa là chúng ta biết rằng điều này tồn tại.
Thực tế là có những trang web như thế này mà bạn
có thể trả một ai đó để thực sự làm bộ vấn đề của bạn - đây là
một trường hợp thực tế đã đưa ra năm ngoái.
Đây là một trang web được gọi là odesk.com.
Và Tim là tên của người đã đăng
trang web này và yêu cầu một người nào đó để làm pset của mình 7
trường hợp đặc biệt này.
Vâng, odesk.com là Google có thể, và chúng tôi cũng là
rất tốt tại Googling.
Ở đây, có các trang web - và một trong những điều này là khá
tàn bạo, thẳng thắn.
[Cười]
DAVID J. Malan: Điều buồn cười về trang web này là nếu
bạn đọc trang Giới thiệu, họ nói về công ty của họ
văn hóa và dịch vụ khách hàng như thế nào là số một
ưu tiên, để đảm bảo rằng các công việc của bạn
biến vào thời gian.
>> Nhưng trong tất cả các mức độ nghiêm trọng, một lần nữa, thực tế là các trang web này
tồn tại, nhận ra chúng ta cũng nhận thức của
các loại trang web.
Và để cung cấp cho bạn một cảm giác về những gì các hình thức này thường
mất, chúng ta thường không có những vụ bê bối lớn, nơi mọi người
đang cộng tác trên bất kỳ loại quy mô lớn, mà là
đó là những khoảnh khắc ban đêm của sự yếu đuối, nơi bạn có như vậy
nhiều việc phải làm, nó là 4:00 AM, bạn đang cạn kiệt, và bạn
nghĩ đến bản thân, tốt, hãy để tôi chỉ cần có một cái nhìn tại của tôi
bạn cùng phòng hoặc mã số bạn bè của tôi hoặc các loại tương tự.
Và các biểu hiện này không may liên quan đến sinh viên
Một cái gì đó trình như thế này trình B cho sinh viên
một cái gì đó như thế này, chắc chắn, trong một máy tính
khoa học, một lớp học đáng kể dễ dàng cho các nhà khoa học máy tính
để phát hiện với phần mềm.
Đây là một mô hình phổ biến, nơi bạn đã loại
được làm việc cùng với một người nào đó, có thể nói chuyện trong
Tiếng Anh, chỉ cần tốt, mã giả.
Nhưng sau đó nó nói đến thời gian để thực sự trình, và các psets
chỉ trao đổi qua email hoặc Dropbox hoặc tương tự.
Nhưng trong một nỗ lực để làm cho nó ít rõ ràng rằng đây là
những gì đã xảy ra, thì đây là những gì đã được gửi.
Điều này cũng không đi lên viết mẩu
phần mềm như chúng ta phải thực sự phát hiện
các loại của sự vật.
Và thực sự là những gì chúng tôi làm là chạy phần mềm so sánh tất cả các
năm nay đệ trình chống lại tất cả các năm qua
đệ trình, chống lại tất cả những gì chúng tôi tìm thấy trên
Internet, chống lại tất cả các trang web việc làm hiện có.
Đó là tất cả rất tự động.
Và vì vậy chúng tôi làm điều này thực sự công bằng tuyệt vời đến 97%
đang thực sự làm việc lừa của họ trong việc này và trong các
các lớp học và đưa vào tất cả các nỗ lực đó để các công việc
họ cuối cùng trình là của riêng mình.
Và tôi có thể cho các lứa tuổi.
>> Đây chỉ là một số ít các trường hợp năm ngoái.
Một vài học sinh đã gửi những tập tin này hệt cho pset 2,
pset 3, 4 pset, pset 5, 6 pset, pset 9.
Trong trường hợp này, đây là bài kiểm tra 0 và trong năm ngoái, trong đó hai
sinh viên nộp hệt câu này trong số rất nhiều
người khác ", yêu cầu của loại -" dấu chấm, dấu chấm, dấu chấm.
Vì vậy, ngay cả trong một lớp học của 600 chúng tôi đã phát hiện điều này
trình các câu đố.
Vì vậy, trong ngắn hạn, điều này - thẳng thắn, tôi ghét phải loại
cuộc trò chuyện - nhưng điều này thực sự là một nỗ lực cố ý
trong năm nay để cố gắng lái xe xuống con số đó.
Bởi vì mặc dù chúng ta nói những điều mà mỗi
năm, tôi nghĩ rằng thực tế đã trú ngụ trên đó cho một vài
thêm giây hơn bình thường và thực sự chỉ cần chỉ ra
rằng những gì có vẻ như, eh, không phải là một thỏa thuận lớn như vậy, ít nhất là
suy nghĩ lại về thời điểm cụ thể này, cả trong sự công bằng cho
bản thân và các bạn cùng lớp của bạn ở đây.
Vì vậy, nếu bạn đã bao giờ có bất kỳ câu hỏi về nơi dòng
, xin vui lòng chỉ tiếp cận với cá nhân tôi.
Tuy nhiên, câu trả lời là luôn luôn, hoàn toàn nhấn mạnh tại
phút cuối cùng, tiền mặt trong một ngày cuối năm.
Hoặc nếu nó là một vấn đề không có bất kỳ ngày cuối,
trung thực, gửi email cho tôi cá nhân.
Chúng tôi sẽ tìm một cái gì đó.
Xin vui lòng không đặt thời gian của bạn ở đây tại Harvard có nguy cơ.
>> Bây giờ, tôi nghĩ chúng ta phải làm sáng tâm trạng, vì vậy tôi
bao gồm như slide tiếp theo.
[Cười]
DAVID J. Malan: Trang web này là rất lớn.
Tôi thực sự có một chút phân tâm.
Có một này.
Và sau đó một trong những điều này là tuyệt vời.
Được rồi, do đó, nghĩ rằng con mèo con muộn vào ban đêm khi thực hiện
Quyết định đó.
Tất cả, phải để trở lại vui vẻ hơn và ít nghiêm trọng các công cụ, giống như
điều kiện.
>> Được rồi, do đó, chúng tôi nói chuyện một thời gian ngắn về việc này.
Đây là cái gì đó có thể là khá quen thuộc từ
thế giới của Scratch.
Và trong thế giới của Scratch, chúng tôi có nhu cầu này đôi khi đến
đi dĩa trên đường.
Có làm điều này hay điều này ở đây.
Và khi chúng ta muốn làm điều này, chúng ta có thể sử dụng, trong C bây giờ, điều này nếu
khác xây dựng.
Và sau đó ở đây chúng ta có biểu thức Boolean.
Ví dụ, biểu thức Boolean ở đây, chúng ta có thể OR
chúng lại với nhau, theo nghĩa chúng ta đã có điều kiện OR
rằng tình trạng.
Chúng ta có thể và chúng lại với nhau, theo nghĩa mà chúng ta muốn
kiểm tra điều kiện này, điều kiện.
Và ở đây chúng tôi có một tuyên bố chuyển đổi bây giờ, mà không phải là
tương tự như cú pháp cho các loại điều kiện, nhưng nó
cho phép chúng ta làm tương đương với nếu, nếu người nào khác, nếu người nào khác, khác
nếu, và như thế chỉ đơn giản bằng cách liệt kê từng trường hợp
từng trường hợp.
Vì vậy, chúng tôi nhìn thấy những thời gian cuối cùng.
Và sau đó chúng tôi bắt đầu chạm vào sự vật như vòng.
Chúng tôi nhìn thấy một trong những chỉ là một thời điểm trước đây.
Tuy nhiên, các cấu trúc vòng lặp khác.
>> Ví dụ, này ở đây.
Vì vậy, trong khi (điều kiện), làm điều này một lần nữa và một lần nữa.
Vì vậy, về cơ bản, những gì có vẻ là khác nhau giữa
cho vòng lặp và vòng lặp này trong khi ở đây?
Điều này cho vòng lặp và vòng lặp này trong khi.
Yeah?
Đó là những gì?
Khán giả: không nghe được.
DAVID J. Malan: Tốt.
Vì vậy, trong khi trong điều kiện vòng lặp, có rõ ràng
nhiều cú pháp.
Có khởi tạo này, có cập nhật này.
Trong một vòng lặp trong khi, chỉ có tình trạng này.
Vì vậy, có vẻ như là nó là một chút giảm so với
vòng lặp, có nghĩa là nếu chúng ta muốn có các biến và chúng tôi muốn
có incrementation, chúng tôi thực sự có
làm điều này bản thân mình.
>> Vì vậy, hãy để tôi đi trước và mở gedit.
Hãy để tôi chuyển sang thiết bị.
Và chúng ta chỉ cần làm một ví dụ nhanh chóng nhỏ
phân biệt một trong những từ khác.
Và trong tâm trí của tôi ở đây, tôi có nên nói một điều.
Tôi đặc biệt đề cập đến Tim tên.
Tim là thực sự một ai đó mà một sinh viên đã cố gắng để tìm thấy để làm
bài tập về nhà cho họ.
Chúng tôi không có Tim trong đó phần cụ thể.
Vì vậy, nhận ra, vì sợ rằng tôi tiết lộ một sinh viên, đó không phải là một học sinh.
Đó là một người ngẫu nhiên trên Internet làm việc
năm ngoái chủ proxy.
Vì vậy, chúng ta thấy rằng, quá.
Vì vậy, trong trường hợp này ở đây, hãy để tôi đi trước và
mở ra một tập tin mới.
File, New.
Điều này mang lại cho tôi một tab ở đây.
Hãy để tôi đi trước và lưu nó như là loop.c.
Hãy để tôi đi và nhấp vào Lưu.
Và sau đó xuống đây, chúng ta hãy đi trước và bắt đầu viết
# Include.
Hãy để tôi phóng to.
Bây giờ chúng tôi sẽ làm int main (void).
Bây giờ để tôi đi trước và làm cho (int i = 0; i <
oh, 10; i + +).
Và bây giờ tôi sẽ đi trước và không in sao mà tôi
đã làm trước đó.
Và sau đó ở phần cuối của chương trình này, chúng tôi chỉ cần đi để
in một dòng mới, chỉ cần để tôi nhắc
không xem xét tất cả lộn xộn.
trở về 0.
Dường như đúng cú pháp?
Cho đến nay.
Vì vậy, chúng ta hãy xem.
>> Vì vậy, hãy để tôi thu nhỏ, đi vào cửa sổ thiết bị đầu cuối của tôi.
Và hãy để tôi đi trước và chạy vòng lặp, bởi vì tôi gọi đây là
điều loop.c.
Vì vậy, làm cho vòng lặp.
Dường như để biên dịch OK.
Hãy để tôi chạy vòng lặp, và bây giờ Nhập.
Và có vẻ như đã in 10 ngôi sao.
Vì vậy, chúng ta hãy chỉ chuyển đổi này vào một vòng lặp while và xem những gì
các loại vấn đề chúng tôi đi qua.
Vì vậy, thay vì điều này, hãy để tôi đi ở đây và nói trong khi tôi
ít hơn 10 -
cho tôi có được thoát khỏi vòng lặp for.
OK, vì vậy chúng tôi có một vài vấn đề đã.
Vì vậy, tình trạng này là như nhau, nhưng tôi rõ ràng là thiếu
khởi tạo.
Tôi đang thiếu incrementation.
Vì vậy, trình biên dịch nên những gì có thể cho tôi biết khi tôi cố gắng
biên dịch chương trình này?
Yeah?
Khán giả: không nghe được.
>> DAVID J. Malan: Tốt.
Vì vậy, nó sẽ nói điều gì đó như không khai báo - trong
trường hợp, biến tôi.
Và quả thực, sử dụng định danh không khai báo i.
Và do đó, điều này trái ngược với các ngôn ngữ như PHP và
Python và Ruby, mà một số bạn có thể quen,
nơi bạn có thể chỉ cần loại bắt đầu sử dụng các biến
dù muốn dù không và không phải lo lắng về việc khai báo,
một cách rõ ràng luôn.
Trong C và các ngôn ngữ như Java và C + +, bạn phải
siêu rõ ràng.
Và nếu bạn muốn có một biến tên gọi là i, bạn phải cho tôi biết
loại của biến.
Vì vậy, chúng ta sẽ phải sửa chữa điều này như sau.
Tôi sẽ phải đi lên ở đây và gõ int i, do đó,
Tôi đã khai báo một biến tên gọi là i.
Bây giờ, tôi đã bỏ qua một bước.
Tôi đã rõ ràng là không được khởi tạo nó, nhưng hãy xem liệu rằng ở
ít nhất là làm cho Clang ngừng phàn nàn.
Vì vậy, hãy để tôi làm lại chương trình này.
>> Được rồi, bây giờ nó chỉ là phàn nàn
vì một lý do khác nhau.
"Biến 'i' là uninitialized khi sử dụng ở đây." Được rồi, do đó,
đó là khá rõ ràng.
Khởi tạo chỉ có nghĩa là thiết lập nó bằng với một giá trị.
Và chúng tôi đã không làm điều đó, vì vậy hãy để tôi thử bằng 0.
Bây giờ chúng ta hãy thử một lần nữa và Clang chạy lại.
Tổng hợp thời gian này.
Và tôi là về để chạy nó.
Nhưng lớn tuổi vòng lặp vô hạn, bởi vì tôi đã thực hiện
khởi tạo, tôi đã thực hiện các điều kiện, nhưng tôi đã không bao giờ thực hiện
bất kỳ loại incrementation.
Vì vậy, làm thế nào tôi có thể làm incrementation?
Vâng, trong một vòng lặp while, nó cảm thấy như tôi sẽ có
để làm điều đó bên trong vòng lặp, bởi vì giống như là người đầu tiên
tuần ví dụ về làm cấu trúc vòng lặp, giống như với
vớ và tự kiểm, chúng tôi phải làm
một cái gì đó ở cuối, trở lại vào dòng tiếp theo.
Điều gì sẽ xảy ra nếu tôi đi trước và làm điều này i + + ở đây?
Chúng ta thậm chí không biên dịch này.
Đã bắt được tôi.
Có gì sai ở đây?
Khán giả: không nghe được.
>> DAVID J. Malan: Vì vậy, nó chắc chắn không phải int.
Đó là tôi.
Và dấu ngoặc nhọn, như trước đây,
thụt đầu dòng là không đủ.
Vì vậy, bây giờ tôi đã xây dựng.
Vì vậy, trong khi tôi là ít hơn 10, in một ngôi sao,
sau đó tăng i.
Và cách trong khi các công trình vòng lặp là ngay sau khi bạn nhấn
dưới cùng của vòng lặp, mà trong trường hợp này trông giống như dòng 10,
nó sẽ quay trở lại dòng 6, tại thời điểm đó
điều kiện sẽ được kiểm tra một lần nữa.
Và nếu tôi vẫn còn ít hơn 10, chúng tôi sẽ làm dòng 8 và
sau đó 9, sau đó chúng tôi sẽ đạt 10, và quay trở lại đến 6, một lần nữa và
một lần nữa và một lần nữa và một lần nữa, khi i nhỏ hơn 10.
Vì vậy, hãy chạy lại thực hiện ở đây.
>> Được rồi, chúng tôi đã biên soạn được.
Hãy để tôi lại chạy vòng lặp.
Và bây giờ nó thực sự có vẻ để làm việc.
Vì vậy, mặt được, chưa ở đây?
Vâng, cho đến nay có thực sự không phải là một toàn bộ PLO -
rất dễ thương.
Được rồi, đó là một - ah, đó là một tai nạn.
Được rồi, do đó, hãy quay trở lại cho vòng lặp.
Vì vậy, cho các vòng lặp là tốt đẹp bởi vì họ đang siêu rõ ràng.
Và mặc dù chúng một chút clunky để viết, đó là
rất mạnh mẽ và nó cho phép bạn làm
nhiều thứ cùng một lúc.
Trong khi các vòng dường như không có một số tiền rất lớn của các giá trị chỉ
được nêu ra, bởi vì nó cảm thấy như chúng tôi chỉ cần có để làm được nhiều việc.
Chúng tôi có phải đặt việc khởi tạo ở đây,
cập nhật ở đây, và chúng ta phải nhớ để làm tất cả những điều đó.
Vì vậy, chúng ta sẽ thấy trong thời gian đó các vòng lặp trong khi thực sự cho vay
mình chỉ hoàn cảnh khác nhau, dữ liệu khác nhau
cấu trúc như danh sách và bảng băm, những điều chúng tôi sẽ nhận được
giữa học kỳ.
Nhưng hiện nay, biết rằng có loại thứ ba được gọi là một do-
trong khi vòng lặp.
Và chúng tôi đã nhìn thấy điều này một thời gian ngắn.
Và điều này có thể được siêu hữu ích với pset 1.
Bất cứ lúc nào bạn muốn làm một cái gì đó và sau đó kiểm tra xem
người sử dụng hợp tác, và nếu họ không làm điều đó một lần nữa, một do-
trong khi vòng lặp vay chính nó cho rằng loại logic.
Bởi vì thứ tự từ trên xuống dưới đây cho thấy,
không có nghĩa là làm điều này.
Và làm điều này một lần nữa và một lần nữa, những gì có thể được?
Có lẽ nó có nghĩa là getInt gọi điện thoại hoặc GetString và sau đó
kiểm tra giá trị của getInt hoặc GetString và sau đó la hét
người dùng nếu họ không hợp tác bằng cách yêu cầu họ
một lần nữa và một lần nữa và một lần nữa.
Nơi mà bạn muốn làm điều gì đó một lần,
sau đó kiểm tra một số điều kiện.
>> Vì vậy, hãy thử này.
Hãy để tôi thực sự thay đổi này ngay bây giờ một vòng lặp do-trong khi.
Và tôi sẽ đi trước và làm những điều sau đây.
Vì vậy, làm như sau.
Hãy làm int i = getInt (), nhưng trước tiên hãy nói cho người dùng
phải làm gì.
Vì vậy, một chút khác nhau thời gian này.
"Hãy cho tôi một int".
Vì vậy, tôi sẽ sử dụng printf cho điều đó.
Và bây giờ tôi đang đi xuống ở đây, và tôi sẽ làm điều này
trong khi tôi là, hãy nói, lớn hơn -
chúng ta hãy xem, tôi, chúng ta hãy nói, nhỏ hơn 0, hoặc tôi
lớn hơn 10.
Nói cách khác, tôi muốn một số từ 1 đến 9, chỉ cần
tùy tiện.
Vì vậy, tôi sử dụng một biểu thức kết hợp Boolean đây để
làm cho chắc chắn rằng tôi là nhỏ hơn 0 hoặc lớn hơn 10, trong đó
trường hợp tôi sẽ làm điều này vòng lặp ở đây một lần nữa.
Vì vậy, một lần nữa, làm điều này -
trong khi tôi là nhỏ hơn 0 hoặc lớn hơn 10.
>> Vì vậy, bây giờ chúng ta hãy đi trước và làm điều này khi chúng tôi đã làm điều đó.
Chúng ta hãy làm một kiểm tra sanity nhanh chóng.
printf ("Cảm ơn, tôi là% d", i).
Vì vậy, chương trình này đơn giản yêu cầu người dùng cho một int,
làm cho chắc chắn đó là trong một số phạm vi, 1 đến 9 bao gồm,
và sau đó cảm ơn người sử dụng bằng cách nhắc nhở họ những gì họ chỉ
gõ vào, giống như một kiểm tra sanity ít.
Nhưng chúng ta hãy xem nếu điều này hoạt động như dự định.
Hãy để tôi đi đầu xuống đây và chạy lại làm cho vòng lặp.
Hmm.
"Sử dụng định danh không khai báo 'i'". Đó là lạ.
Tôi nghĩ rằng chúng tôi quyết định rằng.
Cùng một triệu chứng nhưng mã khác nhau.
Yeah?
TƯỢNG: [không nghe được] bên trong, chúng ta phải
[Không nghe được].
>> DAVID J. Malan: Chính xác.
Vì vậy, điều này thực sự dẫn chúng ta đến một chủ đề được biết đến như phạm vi.
Nó chỉ ra rằng C, một lần nữa, nó thực sự cần bạn có nghĩa là.
Và nếu bạn làm một cái gì đó như thế này nơi bạn khai báo một int
và sau đó gán cho nó một số giá trị, nhưng bạn làm điều đó bên trong một
cặp dấu ngoặc nhọn, những gì C không là giả định rằng bạn
chỉ muốn những bit 32 được gọi là tôi tồn tại trong
bối cảnh của những dấu ngoặc nhọn, trong bối cảnh dòng
6 đến 9. Vì vậy, tôi là tuyên bố, và nó được gán một
giá trị ở dòng thứ 8, nhưng ngay sau khi bạn nhận được bên ngoài
dòng 9 dưới đây cú đúp xoăn, tôi không còn trong
phạm vi, vậy để nói chuyện.
S-C-O-P-E. Nó không còn trong bối cảnh phải.
Vì vậy, bây giờ có không có tôi, do đó, nó làm như chúng tôi thậm chí không
tuyên bố nó ở tất cả.
>> Vì vậy, một sửa chữa sau đó cho một cái gì đó như thế này là những gì, nếu
lý do là tôi được khai báo bên trong các dấu ngoặc nhọn,
rõ ràng là xấu?
Ở đây?
Khán giả: không nghe được.
DAVID J. Malan: Yeah.
Vì vậy, chúng ta có thể khởi tạo nó bên ngoài.
Vì vậy, hãy để tôi đi trước và xóa các phần khai theo đó
Tôi xác định các loại, và hãy để tôi làm nó lên đây.
Vì vậy, ở dòng 5, bây giờ nói "Hãy cho tôi một int." Gọi nó là i.
Chú ý trong dòng 9, tôi không muốn làm điều này, bởi vì tôi
đã có các bit 32.
Tôi không muốn để yêu cầu máy tính cho một
32 bit khác nhau.
Tôi muốn sử dụng những 32 bit cùng.
Và bây giờ, vì tôi được khai báo trong dòng 5, nó vẫn còn legit
sử dụng nó trong dòng 11 và dòng 12.
>> Vì vậy, hãy để tôi cố gắng biên dịch lại điều này và xem
nếu Clang ngừng la hét.
làm cho vòng lặp.
Vì vậy, bây giờ nó là "ẩn chức năng kê khai
GetInt 'là không hợp lệ trong C99 "đó là gì?
Yeah?
Khán giả: không nghe được.
DAVID J. Malan: Yeah.
Vì vậy, bây giờ mà tôi đang thực sự sử dụng getInt, điều này không phải là một cái gì đó
mà chỉ đi kèm với C. này xuất phát từ CS50.
Vì vậy, chúng ta cần ở đây.
Và hãy để tôi quay trở lại dấu nhắc xuống
ở đây và chạy lại làm.
Được rồi, cuối cùng.
Bây giờ chúng ta đã giải quyết đó và lỗi khác.
Hãy để tôi chạy vòng lặp và xem những gì sẽ xảy ra.
"Hãy cho tôi một int." Tôi sẽ cho nó 11.
Tôi sẽ cho nó -1.
Tôi sẽ cho nó foo.
Tôi sẽ cho nó 5.
Và bây giờ nó thực sự hoạt động.
Tuy nhiên, dấu nhắc thay đổi vì một lý do ở đây.
Tại sao nó nói thử lại một trong những thời gian này, nhưng cho tôi một
int ba thời điểm khác?
Tại sao là hành vi khác nhau?
TƯỢNG: một chuỗi.
DAVID J. Malan: Xin lỗi?
Khán giả: Bạn đã cho nó một chuỗi.
DAVID J. Malan: Yeah.
Vì vậy, chúng tôi đã cho nó một chuỗi trong nỗ lực thứ ba,
khi tôi đánh foo.
Foo là một chuỗi.
Nó rõ ràng không một int.
Và cách CS50 đã getInt thực hiện là chúng ta
không kiểm tra xem có điều gì đó nhỏ hơn 0 hoặc lớn hơn 10
cho bạn, bởi vì làm thế nào để chúng ta biết trước những gì loại
int bạn muốn?
Nhưng chúng tôi tối thiểu có thể kiểm tra cho bạn, người sử dụng đã ít nhất
gõ một số nguyên?
Và nếu họ không, chúng tôi la lên với người sử dụng bằng cách gõ "retry"
màn hình.
>> Vì vậy, bây giờ chúng ta có một chương trình đó là vòng lặp. Okay.
Bây giờ, mà trong số này là sắp xếp của cấu trúc tốt hơn?
Vì vậy, đây là nơi mà mọi thứ bắt đầu trở nên lộn xộn một chút,
thực tế là bạn phải nhớ khai báo một biến ở đây
nếu bạn muốn sử dụng nó trong một số
dấu ngoặc nhọn và bên ngoài.
Nhưng ngay cả khi điều này có vẻ một chút khó hiểu lúc đầu
nháy mắt, chỉ cần một lần nữa, hãy nhớ logic đơn giản.
Để sử dụng bất cứ điều gì trong C, cho dù đó là một chức năng hoặc
nó là một biến, bạn phải bao gồm nó nếu nó là một chức năng
trong một số thư viện, hoặc bạn cần phải khai báo nó.
Nhưng bây giờ bạn cần phải thêm lưu tâm đến thực tế rằng
bạn tuyên bố nó trong phạm vi quyền.
Bạn không đặt nó quá chặt bên trong dấu ngoặc đơn.
>> Vì vậy, tôi thực sự quay trở lại.
Nếu chúng ta quay của chúng tôi ví dụ từ trước đó, và tôi đi
trở lại cho int, int i = 0; i <10; i + +, và tôi
làm printf sao, như thế này, và sau đó paren gần, và bây giờ
printf tôi là bây giờ -
theo cùng một logic, những gì sẽ xảy ra khi tôi cố gắng
biên dịch chương trình này?
TƯỢNG: không hợp lệ nhận dạng.
DAVID J. Malan: Vì vậy, đó là một định danh không hợp lệ,
không khai báo định danh.
Bây giờ, lý do là một chút khác nhau.
Rõ ràng là không có dấu ngoặc nhọn ở đây, nhưng cùng
ý tưởng, cùng một câu chuyện phạm vi áp dụng.
Nếu bạn đã khai báo một biến như tôi bên trong của một
cho vòng lặp, ngay cả khi bạn đã không rõ ràng bằng văn bản xoăn
niềng răng, suy nghĩ của họ về tinh thần như vẫn còn ở đó, trong đó
trường hợp tôi chỉ có giá trị bên trong cho vòng lặp.
Nó không phải là hợp lệ khi bạn nhận được vào dòng tiếp theo, mà trong
trường hợp này là 10.
Vì vậy, chỉ là một vài vấn đề về phạm vi và các loại tương tự.
Được rồi, bất cứ câu hỏi nào?
>> Được rồi, vì vậy đây là loại một chương trình nhỏ tầm thường,
in chỉ những ngôi sao nhỏ.
Nhưng chúng ta hãy xem nếu bạn nhớ bài hát này ở đây.
Đây là một bài hát cực kỳ khó chịu, những đứa trẻ sẽ hát
xe buýt và các loại tương tự.
Nhưng những gì tốt đẹp về nó là rằng nó có cyclicity,
theo đó, "99 chai bia trên tường,
99 chai bia.
Một xuống, vượt qua nó xung quanh, 98 chai bia trên
bức tường "và sau đó bài hát lặp đi lặp lại số 97, sau đó 96, sau đó
95, sau đó 94, tất cả các con đường xuống 0 nếu bạn thực sự có
xa trên xe buýt.
Vì vậy, đây là một chương trình tốt đẹp để sắp xếp của Dụng, bởi vì tôi
Thiên Chúa, nếu bạn chỉ có thể thực hiện điều này với một vài
dòng mã, bạn có thể nhổ ra toàn bộ lời bài hát này
bài hát khá nhanh chóng.
Nhưng trên đường đi, chúng tôi có thể bắt đầu tách một số
các cấu trúc vòng lặp cơ bản và bây giờ cũng
giới thiệu chức năng mà chúng ta tự viết, trả về giá trị
chúng tôi vượt qua xung quanh.
Nhưng trước tiên, tại sao chúng ta không đi trước và có năm phút của chúng tôi
phá vỡ ở đây?
Và khi chúng tôi nhận được trở lại, chúng tôi sẽ hát bài hát này.
>> Được rồi, vì vậy chúng tôi đang trở lại.
Và khi tôi nói bây giờ chúng ta sẽ hát bài hát này, tôi có nghĩa
lập trình, không phải bằng lời nói.
Vì vậy, ở đây chúng tôi có beer1.c, đó là một trong những thực hiện điều này
đặc biệt là bài hát.
Và chỉ để được rõ ràng, cho những người không quen với những gì
điều này có vẻ như, hãy để tôi đi trước
và làm cho beer1 Enter.
Bây giờ cho phép tôi chạy beer1, và những gì chúng ta sẽ thấy - có bao nhiêu chai
bia sẽ có?
Tôi sẽ gõ vào 99, giống như bài hát nói.
Enter.
Và bây giờ nếu chúng ta di chuyển qua
tiếc - nếu chúng ta di chuyển qua tất cả những điều này, chúng ta sẽ thấy
điều này đã thực sự hát toàn bộ bài hát.
Chờ một phút.
Thanh di chuyển của tôi là một chút sai lầm.
Hãy sử dụng cửa sổ lớn hơn.
Vì vậy, beer1, 99, có chúng tôi đi.
Vì vậy, ở đây chúng tôi có toàn bộ bài hát, hát nhanh hơn nhiều.
máy tính hơn nó có thể có được bởi chúng tôi.
Vì vậy, chú ý, mặc dù, tính chu kỳ ở đây.
Nó nói 99, sau đó 99, sau đó "mất một xuống, vượt qua nó
xung quanh ", sau đó 98.
Và bây giờ nó lặp đi lặp lại một lần nữa và một lần nữa.
>> Vì vậy, đây thực sự là một cơ hội hoàn hảo cho một số loại
Looping xây dựng.
Chú ý rằng tôi là loại cắt một góc ở đây.
Thông báo rằng tôi đang nói "98 chai bia trên tường,
97 chai bia trên tường, "và đó là chỉ để
rằng khi chúng ta nhận được một chai bia, tôi không có
lo lắng về ngữ pháp tiếng Anh.
Nhưng chúng ta cũng có thể sửa lỗi này với một chút của một nếu
điều kiện, có lẽ.
Nếu con số này là số ít, đi trước và nói "chai",
nếu không nếu nó là số nhiều, nói rằng "những bình".
Nhưng bây giờ, tôi hoàn toàn cắt góc đó.
Vì vậy, chúng ta hãy xem những gì chúng tôi đã có ở đây.
Vì vậy, chúng tôi đã có một số ý kiến ​​ở đầu trang.
Tôi là bao gồm hai thư viện,
chúng tôi đã thường được.
Và bây giờ hãy để tôi di chuyển xuống đầu tiên
thực tế dòng mã.
Dòng 17 khai mạc chính.
Dòng 21 và 20 sẽ có bao nhiêu chai bia?
Và sau đó tôi gọi getInt.
Và bây giờ tôi có một chút của một kiểm tra sanity.
>> Vì vậy, đây là một quy ước rằng bây giờ chúng ta sẽ bắt đầu chấp nhận
kiểm tra chặt chẽ hơn đầu vào của người sử dụng.
Đôi khi bạn chỉ không muốn để nhắc nhở họ một lần nữa
và một lần nữa và một lần nữa.
Nếu người dùng vít lên và không hợp tác, tiền phạt.
Bỏ thuốc lá và không đối phó với chúng.
Và đó là những gì tôi đang làm ở đây.
Nếu n là nhỏ hơn 1, tôi chỉ cần đi hét lên ở người sử dụng,
"Xin lỗi, làm cho không có ý nghĩa." Và sau đó tôi sẽ
tự ý trở về 1.
Vì vậy, một lần nữa, đây chỉ là một quy ước để làm quen với.
Để bây giờ, mang nó về đức tin.
Nhưng cho đến bây giờ, chúng tôi đã luôn luôn được trở về 0, bởi vì
chúng tôi đã nói trở về 0 là những gì?
Khán giả: Thành công.
DAVID J. Malan: Thành công, đó là tất cả.
Vì vậy, bây giờ cuối cùng chúng tôi đang bắt đầu suy nghĩ về
không thành công -
nói cách khác, trường hợp góc, điều kiện lỗi -
bây giờ tôi có một nguồn cung cấp vô hạn, hoặc ít nhất là bốn tỷ
có thể những thứ có thể đi sai trong chương trình của tôi.
Và tôi có thể bắt đầu giao cho họ số cá nhân.
Bây giờ, nói chung nó cũng đủ để chỉ trả lại
một cái gì đó khác hơn 0.
Vì vậy, chúng ta sẽ chỉ đơn giản là trở về 1 cho bây giờ.
Nhưng lý do để trở về 1 là ngay sau khi bạn trở về
1, đoán những gì sẽ xảy ra với phần còn lại của chương trình?
Nó dừng lại.
Có bấy nhiêu thôi.
Vì vậy, thực tế là tôi đang trở về 1 là có hiệu quả
ngắn mạch thực hiện của chương trình này để
không có gì dưới đường 27 sẽ tiếp tục thực hiện.
Ngay sau khi trở về chính, đó là nó.
>> Được rồi, do đó, nếu người sử dụng không hợp tác và chúng tôi đến đường 30
bởi vì họ đánh máy trong một số hợp pháp, ở đây là của tôi
thực hiện bài hát này.
Vì vậy, lần đầu tiên tôi in ra ký tự xuống dòng, chỉ cần cho
thẩm mỹ.
Tôi đã có một vòng lặp for.
Và thông báo tôi đang làm việc trong một chút
một hướng khác nhau.
Tôi không phải làm ít hơn, tôi không phải làm + +.
Tôi thay vào đó có thể nói khởi tạo một biến i, thiết lập nó bằng
n, số lượng người sử dụng gõ vào, sau đó làm như sau, do đó,
như tôi là lớn hơn 0, sau đó tôi -
một khi bạn đã hoàn tất một lần lặp của vòng lặp này.
Vì vậy, chúng ta có thể đếm ngược bằng cách sử dụng một vòng lặp for là tốt.
Bây giờ, điều này là khá nhiều tuần một thứ bây giờ, với printf.
Vì vậy, print "% d chai bia trên tường." In "% d
chai bia "" một xuống, vượt qua nó xung quanh. "Print
"% D chai bia trên tường." Vì vậy, nó vẫn còn% d, nhưng
nhận thấy rằng các đối số printf đang thay đổi.
Sau dấu phẩy, tôi có tôi, bởi vì tôi muốn nói 99.
Sau dấu phẩy này, tôi có tôi, bởi vì tôi muốn nói 99.
Sau dấu phẩy này, tôi có tôi - 1, bởi vì tôi muốn nói 98 in
phiên đầu tiên, và vv.
Và bây giờ xuống đây, tôi chỉ cần có một số nhận xét ngu ngốc.
Và sau đó dòng 42, tôi trở về 0 theo quy ước, nghĩa rằng
mọi thứ đều ổn.
>> Vì vậy, điều gì sẽ xảy ra nếu tôi goofed?
Một sai lầm phổ biến ở đây có thể được?
Vâng, những gì nếu tôi vô tình nói, tôi muốn đếm
xuống đến 0, tôi muốn 0 chai bia trên tường?
Vì vậy, tôi nói, tôi là lớn hơn hoặc bằng 0.
Điều gì sẽ thể là triệu chứng mà bây giờ tôi thấy nếu tôi biên dịch lại
beer1 và chạy nó?
Khán giả: Negative.
DAVID J. Malan: Yeah, nó sẽ đi tiêu cực.
Đây là một lỗi off-by-một, một cực
sai lầm phổ biến để thực hiện.
Hãy thực sự quay trở lại cửa sổ thiết bị đầu cuối và làm điều đó
ở đây, vì vậy chúng tôi có thể xem chi tiết tại một thời điểm.
Enter, 99 chai bia.
Đóng lại, nhưng chúng tôi đã đi bao giờ nên hơi quá xa.
Chúng tôi đã hát bài hát quá xa xuống, như vậy mà bây giờ chúng ta nhấn
số âm.
Vì vậy, nó không hoàn toàn làm việc.
>> Được rồi, vì vậy chúng tôi có thể dễ dàng sửa chữa bằng cách đi lại cho các
cách nó một lần được.
Tuy nhiên, một số cơ hội là những gì bây giờ cho
cải thiện?
Vâng, hãy để tôi mở beer2.c và di chuyển xuống ở đây và có một
nhìn vào phiên bản này.
Điều đầu tiên mà nhảy ra lúc bạn như khác nhau là gì
trong phiên bản này ở đây?
Khán giả: không nghe được.
DAVID J. Malan: Yeah, vì vậy không có i, bởi vì nó xảy ra với
bạn biết không, tôi cũng yêu cầu người dùng cho n, và sau đó tôi
thiết lập i bằng n, và sau đó tôi sẽ thay đổi tôi, nhưng tôi không bao giờ
chạm vào n một lần nữa.
Vì vậy, những gì heck là điểm của bạn phân bổ thêm 32 chiếc khác
bit được gọi là tôi chỉ để tôi có thể có một biến khác nhau?
Vì vậy, trong trường hợp này, tôi nhận ra rằng không cần thiết
thiết kế tính năng này.
Và tôi bây giờ sẽ nói trong khi n là lớn hơn 0,
trước và in cùng một bài hát, đi qua một n printf là
đối số thứ hai, và n - 1 như là đối số thứ hai xuống đây.
Và sau đó mỗi lần lặp của vòng lặp này, đi trước và chỉ
giảm giá trị n.
Bây giờ, chức năng, chương trình này
sẽ là giống hệt nhau.
Nếu tôi gõ trong 99, n bắt đầu ở mức 99.
Giảm, giảm, giảm, giảm.
Tôi sẽ có được tất cả các con đường xuống "Một chai bia
bức tường, một chai bia.
Một xuống, vượt qua nó xung quanh.
0 chai bia trên tường "Sự kết thúc, bởi vì tôi đã
điều kiện chính xác.
Nó lớn hơn 0.
Tôi đã không làm cho sai lầm này.
>> Vì vậy, đó là tốt hơn, một trong những phiên bản hoặc phiên bản hai?
Vì vậy, tôi nghe thấy một loạt các murmurings cho hai người.
Tại sao hai?
Đó là những gì?
Khán giả: không nghe được.
DAVID J. Malan: Oh, okay.
Vì vậy, nó sẽ không đi dưới 0, nhưng hãy nhớ, trong phiên bản một,
bản gốc đúng phiên bản không đi hoặc dưới 0.
Vì vậy, hãy nhớ rằng đây là phiên bản chính xác.
Vì vậy, chúng ta hãy ít nhất là so sánh hai phiên bản chính xác.
Một lập luận ủng hộ của phiên bản là gì
2, mmm, tốt hơn?
Yeah?
Khán giả: sử dụng không gian ít hơn.
DAVID J. Malan: Được rồi, do đó, nó sử dụng không gian ít hơn, phải không?
Trong khi một phiên bản sử dụng 32 bit cho n, và sau đó một
32 bit cho tôi.
Hai phiên bản chỉ sử dụng 32 bit cho n, do đó
dường như là một cộng.
Suy nghĩ khác?
Có ai muốn tranh luận trong lợi của một?
Yeah?
Khán giả: Bạn phải sử dụng dòng thêm mã cho n.
>> DAVID J. Malan: Được rồi, chắc chắn.
Vì vậy, đó là công bằng.
Vì vậy, điều này, ít nhất là với tôi -
Tôi có nghĩa là, điều này thực sự cảm thấy có một chút hỗn độn, thực tế là
Tôi không thể sắp xếp gói gọn tất cả logic của tôi trong một
đẹp dòng, cho vòng lặp, như cho vòng lặp.
Ở đây, tôi chắc hẳn sẽ có tack trên này n
ở cuối của vòng lặp, bởi vì
nó một cách hợp lý là cần thiết.
Nhưng nó loại chà tay tôi một cách sai lầm, chỉ vì nó
dường như tách biệt với logic ở đây, mặc dù,
một lần nữa, nó là cần thiết.
Suy nghĩ khác?
Yeah?
Khán giả: không nghe được.
>> DAVID J. Malan: Yeah.
Vì vậy, những gì nếu bạn thay vì, ở phần cuối của bài hát, muốn
in ra một lần nữa tên của bài hát?
Như "Cảm ơn bạn đã chơi 99 chai bia", hoặc một cái gì đó
ngớ ngẩn như vậy?
Nhưng vấn đề là, bạn muốn truy cập vào các giá trị ban đầu.
Thực tế rằng bạn đã bị đột biến hoặc thay đổi n trên mỗi
lặp đi lặp lại và do đó đã phá hủy giá trị ban đầu của nó
có nghĩa là bạn chỉ không thể làm điều đó ở cuối.
Bây giờ, cho là, chúng tôi rõ ràng không muốn làm
rằng trong chương trình này.
Vì vậy, những người quan tâm?
Nhưng đó là một điểm rất hợp lệ.
Và phải trung thực, có thực sự không có ai
phải trả lời ở đây.
Họ là cả hai đều đúng.
Tôi có thể thuyết phục một trong hai cách.
Tôi sẽ nói rằng, nhìn chung, đó là một nguyên tắc tốt nếu bạn
hỏi những người sử dụng cho một số giá trị và bạn được lưu trữ trong một biến
như n, chỉ cần loại theo nguyên tắc, nó có thể là tốt
để giữ cho rằng xung quanh.
Và bất kỳ dữ liệu nào mà bạn muốn biến đổi một lần nữa và một lần nữa, chỉ
cung cấp cho mình một bản sao của biến đó, chỉ cần để bạn
có quyền truy cập với bản gốc.
Bạn đang chi tiêu 32 bit nhiều hơn, nhưng thực tế là điều này
máy tính đã, như, 2 GB RAM những ngày này,
và chúng tôi đang quibbling hơn 32 bit?
Thực sự không phải là một việc lớn như vậy.
Và ngay cả trên các thiết bị này ở đây, với một nửa một buổi biểu diễn hoặc một
GB RAM, 32 bit so với 64 bit,
không phải là một việc lớn như vậy.
Chắc chắn hôm nay, nó sẽ là cách choáng ngợp bởi kích thước
chương trình chính nó, mà là có được vài trăm
kilobytes, nếu không phải là một vài megabyte, những ngày này.
>> Vì vậy, mối quan tâm hợp lý, không có một câu trả lời đúng.
Tuy nhiên, ít nhất là những người đang có những suy nghĩ rằng nên bắt đầu
đi qua tâm trí của bạn?
Bởi vì trong pset 0, mặc dù chúng tôi thực sự chỉ là dự kiến
chính xác, hoặc ít nhất là tuyên bố từ bỏ các lỗi khác nhau mà
bạn có thể gặp phải, như chúng ta tiến lên phía trước, thiết kế
sẽ là một khía cạnh quan trọng khác, cả hai đều viết code
và cũng có thể mã của chúng tôi đánh giá.
Và như vậy ít nhất là cho rằng những thứ như thế này.
Và nếu chỉ vì một cái gì đó công trình không có nghĩa là nó tốt,
không có nghĩa là nó được thiết kế tốt.
Và đó là một trong những điều các nghiên cứu sinh giảng dạy và
bài tập sẽ giúp chúng tôi trêu chọc một phần theo thời gian.
>> Còn vấn đề, chúng ta hãy nói rằng, phiên bản này ở đây?
Hãy để tôi làm một chút gì đó sexy ở đây trong một thời điểm.
Trước tiên hãy để tôi thoát khỏi điều này.
Và bây giờ hãy khắc phục vấn đề ngữ pháp.
Vì vậy, trong phiên bản này, tôi muốn sửa ngữ pháp như vậy đó,
thay vì chỉ nói s ngoặc đơn, như "chai"
hoặc "chai" -
Tôi không muốn cắt cái góc -
Tôi cũng muốn để tự động in ra từ "chai"
hoặc "chai", do đó sử dụng giữ chỗ những s% ngày hôm nay.
Vì vậy, tôi cần phải có điều kiện kiểm tra giá trị của tôi là gì.
Và nếu nó là 1, tôi muốn nói "chai", và nếu nó bất cứ điều gì
khác, tôi muốn nói "chai". Vì vậy, chúng ta hãy cố gắng để làm điều này.
Vì vậy, nếu i == 1, sau đó cho tôi đi trước và tuyên bố -
Tôi cần một chuỗi, do đó, hãy để tôi làm chuỗi s1, bởi vì đó là
1 chuỗi tôi quan tâm ngay bây giờ.
Tôi sẽ nói "chai". Và sau đó, chúng ta hãy xem, chuỗi
s2 - và tôi sẽ giải thích nơi tôi đang đi trong một thời điểm -
"Chai." Vì vậy, nhớ lại rằng, trong bài hát này, chúng ta cần để có thể
để in những thứ, hai từ khác nhau có khả năng.
Vì vậy, nếu chúng ta nhìn trở lại đây, nhận thấy rằng khi chúng tôi nhận được
ví dụ này, ở đây, "hai chai bia trên tường,
hai chai bia, một xuống, vượt qua nó xung quanh ", tôi muốn
Dòng thứ tư này đến nay nói "một chai bia trên
bức tường "Vì vậy, tôi cần phải quyết định, để tôi muốn nói" chai "hoặc
"Chai"? Vì vậy, tôi sẽ tự ý nói, tất cả các quyền,
Tôi sẽ khai báo một biến gọi là s1, chuỗi
một, mà để có được cắm vào và cũng ở đây,
bởi vì những lời luôn luôn giống hệt nhau, chỉ vì những
tính chất của bài hát.
Và tôi sẽ gọi s2 từ bất cứ điều gì tôi muốn
cuối cùng xuất hiện ở đây.
Bây giờ, theo nghĩa đen, 99 lần trong số 100, nó sẽ là
tương tự trong cả hai trường hợp, bởi vì 3 là số nhiều, 2 là
số nhiều, 4 là số nhiều.
Nhưng trong trường hợp này góc, nơi mà chúng tôi nhận được đến 2 và sau đó 1 hoặc
thậm chí 1 và sau đó 0, tôi cần logic này.
Vì vậy, tôi phải mất một số thời gian trong mã của tôi nhận được quyền đó.
Vì vậy, nếu tôi làm điều này, nếu i == 1, sau đó đặt s1 bằng "chai"
và s2 bằng "chai", vì điều này sẽ được cho 1
chai, và điều này sẽ được cho 0 chai.
Và điều này ở đây, đại diện cho những gì?
Chỉ cần được rõ ràng.
Đây chỉ là một lời nhận xét.
Vì vậy, thực tế là bạn có thể có một dòng ý kiến ​​có nghĩa là bạn
có thể nhận xét mã của bạn như thế này, nhưng khác thường
mô hình, quá, đó là nếu bạn có một cụm từ siêu ngắn
bạn muốn đặt mình và nó chỉ là dễ đọc hơn để đưa
nó phải ở cuối của dòng mã, bạn có thể
hoàn toàn làm một cái gì đó như thế này.
>> Vì vậy, bây giờ nếu tôi làm điều này? Khác nếu tôi không phải là bằng 1.
Vì vậy, nổ bằng -
dấu chấm than được biết đến như "bang".
Vì vậy, nổ = 1.
Vì vậy, nếu tôi không phải là bằng 1, tôi làm những gì thay vì muốn làm?
Vâng, từ đầu tiên tôi muốn là những gì?
Vì vậy, chuỗi 1 nên là "chai" cho chai số nhiều,
và sau đó điều này sẽ là số nhiều "chai" là tốt, cho bây giờ.
Và chúng tôi sẽ xem nếu điều này thực sự được chúng tôi
nơi mà chúng tôi muốn đi.
Vì vậy, bây giờ nếu tôi di chuyển xuống đây, nhận thấy rằng tôi đang cắm vào
không chỉ có tôi, nhưng s1.
Tôi đang cắm trong tôi và s1.
Và sau đó xuống đây, tôi trừ đi 1, đó là giống như
trước đây, nhưng s2.
Nói cách khác, tôi muốn từ tiếng Anh để thay đổi dựa
logic này.
Bây giờ, đã có một số vấn đề trong mã này.
Những gì đã bị phá vỡ ra khỏi cổng ở đây?
Yeah?
Khán giả: không nghe được.
>> DAVID J. Malan: Chính xác.
Vì vậy, tôi đã vi phạm bài học về phạm vi.
Vì vậy, tôi đã khai báo s1 và s2, nhưng tôi đã thực hiện nó bên trong
dấu ngoặc nhọn, có nghĩa là yeah, mã này sẽ làm việc
cho đến dòng 42, nhưng ngay sau khi tôi nhấn dòng 43, đoán những gì không
còn tồn tại?
Vâng, đoán những gì không còn trong phạm vi - không s1 hoặc s2.
Vì vậy, chúng ta phải sửa lỗi này.
Vì vậy, hãy để tôi xóa các tờ khai.
Và tôi sẽ rời khỏi tên biến và xóa ở đây
và xóa này ở đây.
Và trong những dòng nên tôi thực sự tuyên bố những điều này?
Khán giả: không nghe được.
DAVID J. Malan: Yeah, có lẽ như vậy
phải lên đây, 33-ish.
Vì vậy, chuỗi s1 và sau đó chuỗi s2.
Và nó quay ra, tôi có thể làm điều này.
Nếu bạn đang khai báo hai biến cùng loại,
bạn có thể thực sự chỉ cần sử dụng một dấu phẩy và làm điều đó trong C. Tất cả
đúng, vì vậy bây giờ tôi có hai biến -
s1 và s2.
Tôi gán cho chúng giá trị trong các
điều kiện ở đây, hoặc ở đây.
Và sau đó tôi đang sử dụng chúng xuống bên dưới.
Tốt như thế nào để làm việc?
>> Vâng, nó vẫn còn một lỗi nhỏ, nhưng chúng ta ít nhất xem
như thế nào đến nay chúng tôi đã nhận được.
Vì vậy, hãy để tôi đi trước và thực beer3.
Beer3 này?
Đúng, đây là beer3.
Và bây giờ hãy để tôi đi trước và chạy beer3.
399 99.
Chúng tôi có thể có thể bỏ qua hầu hết trong số họ.
Và ở đây, nhìn vào đó.
"Một chai bia trên tường, một chai bia,
một xuống, vượt qua nó xung quanh, 0 chai bia trên tường. "
Nhưng tôi đang thu hút sự chú ý của bạn chỉ một nửa của giải pháp.
Loại hơi say lên ở đây.
Vì vậy, có vẻ như là các trường hợp góc phát sinh khi tôi bằng những gì
hai giá trị?
Khán giả: 2, 1.
DAVID J. Malan: 2 và 1.
Nó không phải là 1 và không phải 1.
Nó thực sự chỉ hai khổ thơ cuối cùng của bài hát này.
Vì vậy, tôi phải làm gì thay vì muốn làm gì?
Vì vậy, tôi dường như đã làm trường hợp nếu tôi là == để 1,
sau đó từ đầu tiên là "chai", nhưng từ thứ hai
là "chai". Nhưng ở đây, tôi muốn thay đổi điều này là == 2.
Và nếu điều này là trường hợp, những gì tôi muốn
từ đầu tiên là gì?
Khán giả: "Chai".
DAVID J. Malan: "Chai", do đó, cho hai chai.
Và sau đó từ này ở đây nên được
Khán giả: "Bottle".
DAVID J. Malan: "Bottle", số ít.
>> Được rồi, chúng ta hãy thu nhỏ, quay trở lại trên đây, lại chạy,
lại chạy beer3, loại 99 một lần nữa.
Được rồi, "Segmentation fault (core dumped)".
Tôi đã làm gì sai?
TƯỢNG: Bạn không có một giá trị không nghe được.
DAVID J. Malan: Ah, điểm tuyệt vời.
Được rồi, vì vậy những gì sai ở đây?
Vì vậy, phân khúc lỗi, và chúng tôi đang thực sự sẽ thấy
này khá một vài lần trong tương lai, cố ý.
Nhưng hiện nay, điều này không những gì thực sự có nghĩa là gì?
Một lỗi phân khúc hầu như luôn luôn có nghĩa là bạn có
bằng cách nào đó đã cố gắng để truy cập bộ nhớ, bộ nhớ RAM trong máy tính của bạn,
mà bạn không sở hữu, mà bạn đã không thực sự yêu cầu
hệ điều hành.
Vì vậy, trong trường hợp này, chú ý những gì tôi đã làm, đó là
thiếu sót trong logic của tôi.
Tôi đã chỉ định một giá trị s1 và s2 nếu tôi bằng 1.
Tôi cũng đã làm điều đó nếu tôi bằng 2.
Nhưng tôi đã không thực hiện nó trong vô số khác
khả năng -
Đặc biệt, 3 hoặc 4 hoặc dấu chấm, dấu chấm, dấu chấm, 99.
Vì vậy, một trong những sửa chữa này chỉ có thể là chúng ta hãy
có một điều kiện khác.
Và hãy để tôi đi ở đây và nói s1 bằng -
những gì nó phải là ở đây?
Khán giả: không nghe được.
>> DAVID J. Malan: "Chai", bởi vì trong trường hợp thông thường,
nó chỉ là điều tương tự.
Vì vậy, tương đương với trích dẫn nội dung bài viết, unquote, "chai". Vì vậy, cho số nhiều
chai, và sau đó lên ở đây, chai số nhiều.
Được rồi, vì vậy bây giờ hãy để tôi quay trở lại cửa sổ thiết bị đầu cuối của tôi,
biên dịch lại, lại chạy nó.
99.
Whew.
Và chúng ta hãy làm một kiểm tra sanity nhanh chóng.
Về mặt kỹ thuật, chúng tôi muốn để đọc tất cả trong số này để chắc chắn rằng
họ đúng, nhưng hãy nhìn vào
được biết đến là thủ phạm.
3 chai, 2 chai, 2 chai, 1
chai, 1 chai, 0 chai.
Chúng tôi dường như đã ít nhất là cố định nó cho bây giờ.
Tuy nhiên, đánh bắt ở đây là những gì một mớ hỗn độn thần khủng khiếp này là
chỉ để giải quyết một ngu ngốc
một ký tự ngữ pháp chi tiết.
Vì vậy, có loại một lý do mà tôi cắt góc này
trước đó, bởi vì nó chỉ hoàn toàn gây phiền nhiễu để có
viết nhiều mã này.
Nhưng nó quay ra rằng có những cách hơi thanh lịch hơn
thể hiện cùng một điều chính xác.
Và chúng ta có thể làm điều này như sau.
>> Hãy cho tôi để lại điều này trên màn hình cho một thời điểm và
giới thiệu một cái gì đó được biết đến như là một nhà điều hành ternary.
Đây là loại một lớp lót đó chỉ có nghĩa là để làm cho chúng tôi
sống một quyến rũ hơn chút, như đã hứa.
Và tôi sẽ làm điều này như sau.
Hãy cho tôi một chuỗi được gọi là s1, và cho tôi
gán cho nó như sau.
(I == 1)?
"Chai", nếu không "chai". Chuỗi s2 được (i == 2)?
"Chai", nếu không "chai".
Vì vậy, những gì sau đó là sự khác biệt ở đây?
Hai dòng mã, tôi tranh luận, có thể
thay thế đống lộn xộn này.
Vì vậy, tôi gọi nó là một mớ hỗn độn, chỉ vì nó loại xoa tôi
sai cách mà nó có rất nhiều dòng mã.
Không sai.
Nó không phải là xấu thiết kế.
Thích, điều này là hoàn toàn chính xác và hoàn toàn tốt đẹp.
Tuy nhiên, mã hóa được tẻ nhạt nếu bạn phải thể hiện chính mình
chết tiệt đặc biệt một lần nữa và một lần nữa và một lần nữa với một đơn giản
kịch bản như thế này.
Vì vậy, C có một số phím tắt, như thế này.
Vì vậy, điều này về cơ bản nói rằng tuyên bố một chuỗi được gọi là s1 và
gán cho nó một trong hai giá trị này hoặc giá trị này nếu tôi là == -
xin lỗi, tôi phải nói điều này rõ ràng hơn.
Khai báo một biến s1, gán cho nó giá trị này nếu điều này là đúng.
Nếu không, gán cho nó giá trị này.
Vì vậy, nói cách khác, đây là loại một cách một dòng
nói rằng nếu người nào khác, nhưng làm một bài tập trên đường đi.
Vì vậy, nếu tôi là 1, sau đó đi trước và gọi đây là "chai". Và
sau đó điều này khác, gọi nó là "chai". Trong khi đó, s2,
thứ hai từ mà chúng ta cần phải xác định, nếu tôi bằng 2, chúng tôi sẽ
thiết lập s2 "chai". Nếu không, thiết lập nó "chai". Và những gì
điều này có nghĩa là tôi có thể đi qua này và xóa tất cả các
những dòng mã.
Và khi tôi nói, hơi lố bịch, rằng đây là bây giờ
quyến rũ hơn, quyến rũ hơn trong các loại ý nghĩa phong cách.
Trên thực tế, chức năng, mã này là thực sự sẽ
làm cùng một điều chính xác.
Và mặc dù nó có thể nhìn một chút khó hiểu lúc đầu
nháy mắt, bởi vì chúng tôi đã không nhìn thấy điều này xây dựng trước đây, tôi muốn
lập luận rằng nó cuối cùng sẽ được nhiều hơn nữa
có thể đọc được và dễ dàng hơn rất nhiều cho con người chúng ta để sắp xếp của
hiểu, bởi vì bây giờ bạn chỉ có thể đọc
tất cả các mã trên một dòng.
Nó vẫn còn tinh thần tương tự một, nếu nơi này
điều kiện và sau đó điều này là những gì bên trong nếu và điều này
là những gì bên trong người nào khác.
Nhưng chúng ta có thể làm điều này chỉ cần nhiều hơn nữa thanh lịch.
>> Và nếu bây giờ tôi quay trở lại nhà ga của tôi, sau khi đã xóa tất cả
của các đường này và thay thế chúng bằng hai,
biên dịch lại, chạy lại chai bia với 99, thông báo rằng tôi
ngữ pháp, trên thực tế, vẫn còn chính xác.
Vì vậy, một lần nữa, một cái gì đó để bắt đầu.
2 chai bia, 1 chai bia.
Có vẻ đúng.
Yeah.
Vì vậy, chúng tôi đã có một giải pháp gọn gàng hơn nhiều.
Vì vậy, điều này cũng vậy, khi bạn nhận được thoải mái hơn với C, không phải
nhất thiết phải có pset đầu tiên hoặc thậm chí 2, nhưng
nhận ra rằng cấu trúc này có thể cho phép chúng ta làm những việc bao giờ
hơn thanh lịch.
Bây giờ chúng ta hãy làm một việc khác ở đây.
Hãy để tôi đi trước và mở return1.c.
Bây giờ chúng ta hãy bắt đầu để giải quyết một vấn đề trong một cách mà
cho phép chúng ta viết mã phức tạp hơn.
>> Vì vậy, đây là một chương trình nhỏ đơn giản có mục đích trong cuộc sống
là để tăng giá trị.
Và trên thực tế, chúng ta hãy lùi lại một bước.
Hãy để tôi làm điều này bằng tay.
Hãy để tôi làm bao gồm và int main (void).
Và để cho tôi gọi đây increment.c.
Và những gì tôi muốn làm gì?
Tôi sẽ đi trước và nói điều gì đó như -
chúng tôi sẽ gọi những con số giống nhau -
int x.
Vì vậy, int x được 2; printf x là% d, dòng mới, x.
Vì vậy, tôi là đánh máy nhanh, nhưng sắp xếp các công cụ quen thuộc.
Sau đó, tôi sẽ làm x + +.
Sau đó, tôi sẽ in cùng một câu đó một lần nữa.
Và sau đó tôi sẽ trở về 0 chỉ để thoát khỏi chương trình.
Được rồi, vì vậy đây là một chương trình mà
tăng một con số.
Đầu tiên để khởi tạo một cái gì đó để 2, và sau đó nó
sẽ tăng nó và in nó một lần nữa.
>> Vì vậy, hãy chạy tăng, chương trình cực kỳ đơn giản.
Nhưng giả sử bây giờ mà tôi muốn cube giá trị, do đó,
một cái gì đó phần nào tùy ý.
Và tôi thực sự muốn làm x được lập phương của nó.
Vì vậy, tôi có thể sử dụng những gì được gọi là chức năng pow, nhưng tôi không
thực sự biết nơi đó là chưa.
Vì vậy, tôi sẽ làm điều này theo cách cũ.
x lần này tương đương với x lần x lần x.
Vì vậy, tôi cubing giá trị, nhân nó bằng thân một lần nữa
và một lần nữa và một lần nữa, để chúng ta có được sức mạnh
3 trong trường hợp này.
Vì vậy, bây giờ các con số tôi nên in nên được, như chúng ta sẽ thấy
- làm tăng, do đó, nó thực sự không thực sự tăng
nữa, nhưng chúng tôi sẽ rời khỏi tên một mình -
2 và sau đó 8.
Bây giờ, chúng tôi có sự khởi đầu của một cơ hội để sàng lọc
ở đây, theo đó điều này cubing nhân một số
bởi chính nó bởi chính nó tự cảm thấy như thế này chỉ có thể là
hữu ích để có như là một chức năng, giống như một người nào đó quyết định
năm trước đây - bạn biết, loại hữu ích nếu một người trong chúng ta ngồi xuống
và viết printf vì vậy mà phần còn lại của thế giới có thể sử dụng nó,
sao chúng ta không ngồi xuống và viết một chức năng được gọi là khối lập phương
thực hiện điều này cubing cho chúng tôi vì vậy chúng tôi không phải tự
thực hiện các khái niệm của cubing giá trị ở đây?
>> Vì vậy, một ví dụ đơn giản, nhưng chúng ta hãy đi trước và sử dụng điều này như là một
cơ hội để viết chức năng riêng của chúng tôi.
Vì vậy, cho đến nay, chúng tôi đã chỉ được sử dụng chính, và chúng tôi đã được sử dụng khác
chức năng của người dân, nhưng chúng tôi đã không viết của riêng của chúng tôi.
Vì vậy, ở đây chúng tôi đi.
Tôi sẽ đi trước và viết một chức năng được gọi là khối lập phương.
Và tôi sẽ để có nó mất một đầu vào.
Vì vậy, đầu vào của nó là có được một số nguyên.
Và đó là những gì sẽ làm gì?
Nó sẽ tuyên bố đầu ra int = lần đầu vào đầu vào
lần đầu vào.
Và sau đó nó sẽ trở lại đầu ra đó.
Và sau đó tôi đã được cụ thể.
Chức năng này sẽ phải trả lại một int.
Vì vậy, ở đây sau đó là cách thức bạn viết các chức năng của riêng bạn.
Trước tiên, bạn quyết định tên của bạn là những gì
chức năng có được.
Và nói chung, một cái gì đó giải thích là tốt, vì vậy tôi sẽ
gọi nó là khối lập phương.
Sau đó, bạn phải xác định những gì nó sẽ quay trở lại, những gì
đầu ra của nó có được.
Và chúng ta không có các tùy chọn mà nhiều người.
Int, char, float, bool, string.
Để bây giờ, tôi sẽ gắn bó với một int, bởi vì tôi muốn nó
để trả lại một số nguyên.
Sau đó, bạn phải xác định đầu vào của nó, nếu có, là những gì.
Và nếu khối lập phương có một đối số, có cái gì đó giữa
dấu ngoặc đơn, bạn phải cung cấp cho rằng đối số một tên để
bạn có thể gọi nó là một cái gì đó như là bạn đang thực hiện hoặc bằng văn bản
chức năng này, và bạn phải cung cấp cho nó một kiểu, mà trong
trường hợp là có được int.
Vì vậy, trong ngắn hạn, khối lập phương là một chức năng mà phải mất một số nguyên
là đầu vào và trả về một số nguyên như đầu ra.
>> Vì vậy, nó có gì với đầu vào đó?
Vâng, trong dòng 14, tôi tuyên bố một sản lượng được gọi là biến, và tôi
gán cho nó giá trị, nhập vào lần đầu vào thời gian đầu vào.
Và sau đó tôi trở về đầu ra.
Vì vậy, làm thế nào để sử dụng sau đó?
Tôi phải làm gì thay đổi các ký tự này được đánh dấu trên đường dây
7 được, bạn nghĩ gì?
Khán giả: không nghe được.
DAVID J. Malan: Vâng, khối lập phương của x.
Vì vậy, x là một biến, có nghĩa là nó nắm giữ một số giá trị.
May mắn thay, đó là kiểu số nguyên.
Và bởi vì x là một int, điều đó có nghĩa là tôi có thể vượt qua nó vào khối lập phương.
Và mặc dù tôi đang trọng các giá trị của x với giá trị
x khối lập phương, như đã được các trường hợp vậy, đến nay, bất cứ thời gian nào bạn
có dấu bằng và một dòng mã, những thứ bên phải
được thực hiện và sau đó được giao cho
giá trị bên trái.
Vì vậy, thứ tự của các hoạt động là khi chúng ta hy vọng.
Vì vậy, hiện công việc này?
Vâng, hãy để tôi đi xuống đây.
Hãy để tôi mở cửa sổ thiết bị đầu cuối của tôi.
Hãy để tôi làm tăng, Enter.
"Implicit tuyên bố của khối lập phương 'chức năng là không hợp lệ trong
C99 "Là một dành, C99 đề cập đến ngôn ngữ C như nó đã được
quy định vào năm 1999, là một bản cập nhật trên phiên bản từ
Năm 1989, đó là một bản cập nhật trên bản gốc.
Vì vậy, đó là tất cả những phương tiện.
>> Vì vậy, nó có nghĩa là "ẩn kê khai
chức năng "khối lập phương" không hợp lệ "Nó đây?
Nó phải có trong dòng 12.
Khán giả: không nghe được.
DAVID J. Malan: đó là gì?
TƯỢNG: Nó không phải trước đây.
DAVID J. Malan: Nó không phải trước đây.
Vì vậy, đây là điều.
C là ngu ngốc, hoặc trình biên dịch C là ngu ngốc.
Họ thực sự chỉ làm những gì bạn nói với họ để làm.
Và họ, đặc biệt, chỉ đọc trên mã của bạn xuống dưới,
trái sang phải.
Vì vậy, nếu trình biên dịch, Clang, đọc mã của bạn, dòng 1,
con số ra làm thế nào để làm điều này.
Oh, ở đây có chính.
Được rồi, hãy để tôi đi trước và khai báo một biến x.
Hãy để tôi in cái gì.
Dòng 7, những gì heck là khối lập phương?
Nó không phải khai báo trong stdio.h.
Nó không đến với C. Tôi không có ý tưởng phải làm gì.
Và như vậy Clang chỉ bails và tha với điều đó thông báo lỗi.
Vì vậy, chúng tôi có thể sửa lỗi này trong một vài cách.
Chúng tôi có thể dạy Clang những khối lập phương bằng cách di chuyển nơi
khai báo là.
Vì vậy, tôi cắt và dán nó trên đỉnh chính.
Bây giờ nhận ra rằng chỉ vì chính là không còn đầu tiên, đó là
vẫn được thực thi theo mặc định.
Chính là chính.
Đó là chức năng mặc định tên.
Nó không quan trọng nơi đó là trong một tập tin.
Tuy nhiên, ít nhất bây giờ Clang đã nhìn thấy khối lập phương trước khi tôi sử dụng nó.
Vì vậy, chúng ta hãy xem nếu Clang là hạnh phúc hơn bây giờ.
Hãy tăng, nó đã biên dịch lần này.
>> Hãy để tôi chạy tăng.
Và quả thực, nó có vẻ là làm việc.
Bây giờ, bạn có thể đến với các kịch bản cuối cùng nơi
nó không phải là khả thi để đặt tất cả các chức năng
trên tất cả các chức năng khác.
Bạn sẽ gặp khó khăn trong vòng lặp vô hạn trong thực tế,
nơi mà anh chàng này muốn được ở đây nhưng điều này
anh chàng cần phải ở đó.
Vì vậy, đó không phải luôn luôn làm việc.
Vì vậy, may mắn thay, C có một giải pháp thanh lịch hơn.
Tôi sẽ đặt này trở lại nơi nó được, chỉ vì tôi
thích, như là một vấn đề nguyên tắc, đó chính luôn luôn được
ở đầu trang, bởi vì nó chỉ là tốt đẹp để xem những chương trình này
không theo mặc định.
Và những gì tôi đang làm ở đây là tuyên bố những gì được gọi là
một nguyên mẫu.
Tôi sẽ lại tuyên bố chức năng khối của tôi theo nghĩa đen
sao chép và dán.
Trên thực tế, đó không phải theo nghĩa đen.
Vì vậy nghĩa là sao chép và dán dòng 15
lên trên dòng 6.
Nó không quan trọng dòng này kết thúc lên trên.
Nó xảy ra được trên dòng 4.
Nhưng nó có được trước khi chính.
Nhưng hãy chú ý sự khác biệt.
Dòng 4 kết thúc bằng một dấu chấm phẩy, có nghĩa là hey,
Clang, dùng từ ngữ của tôi cho nó rằng có tồn tại một hàm
gọi là khối lập phương mà phải mất một int và trả về int.
Nhưng tôi sẽ không nói cho bạn biết những gì nó là có.
Chỉ cần biết rằng tôi hứa sẽ nói với bạn cuối cùng.
Và quả thực, bây giờ nó là okay rằng đây là xuống dưới đây.
>> Vì vậy, điều này nói chung là tốt, bởi vì sau đó ở đầu
tập tin của bạn, bạn chỉ có thể rattle off, nhanh chóng cháy, một dòng
nhau, những gì các tên chức năng của bạn, những gì của họ
yếu tố đầu vào, kết quả đầu ra của họ là gì.
Và để được rõ ràng hơn, đầu vào thường có nghĩa là cuộc tranh cãi hoặc
tham số, đồng nghĩa.
Đầu ra có nghĩa là giá trị trả về, những gì nó
tay trở lại với tôi.
Vì vậy, trong trường hợp này ở đây, khối lập phương đã được khai báo ở đầu trang, nhưng
xác định, nếu không được biết đến như triển khai thực hiện, ở phía dưới.
Vì vậy, bây giờ hãy quay trở lại đây và chạy lại này.
Vì vậy, bây giờ hãy để tôi đi trước và chạy lại làm cho, chạy lại tăng.
Và nó bây giờ có vẻ như chỉ làm việc tốt.
Vì vậy, bây giờ chúng tôi có thể đi trước và yếu tố ra một cái gì đó giống như
ví dụ bia vào phiên bản thứ tư.
Vì vậy, hãy để tôi di chuyển xuống.
Và nhận thấy rằng tôi loại này bài học cho trái tim chỉ cần ngay bây giờ.
Thực tế là mình đang hát cùng một khổ thơ một lần nữa và
một lần nữa và một lần nữa, dòng điệp khúc trong bài hát, cảm thấy
thích tại sao tôi không yếu tố mà ra vào một chức năng?
Và quả thực, điều này sẽ là một trong những động lực.
Bên cạnh thực tế là một người nào khác trên thế giới có thể muốn
sử dụng một chức năng khối lập phương -
đó là một lý do tốt để yếu tố một cái gì đó và viết của bạn
chức năng tùy chỉnh của riêng -
nếu có một đoạn mã trong chương trình của bạn mà chỉ làm cho
khái niệm có ý nghĩa, bạn loại muốn để cho nó một
tên - như đoạn điệp khúc, trong trường hợp này -
sau đó bạn có thể viết tương tự như là một chức năng riêng biệt.
Bạn không cần phải viết tất cả mọi thứ trong chính nếu nó chỉ
cảm thấy sạch hơn để tách nó ra và cung cấp cho nó một cái tên.
>> Vì vậy, trong trường hợp này ở đây, nhận thấy rằng tôi có một bình luận trên đỉnh
chức năng này mà chỉ cần hát về
quy định số lượng vỏ chai.
Chú ý ở đây là tôi không cần phải gọi những
điều đầu vào và đầu ra.
Trong thực tế, thời gian này tôi chỉ cần gọi là b đầu vào của tôi cho chai.
Và chú ý ở đây, void cho thấy những gì?
Đó là điệp khúc -
Khán giả: Không trả lại nó.
DAVID J. Malan: Không trả lại một giá trị.
Và thực tế, chức năng không phải để trở về giá trị.
Họ chỉ có thể làm một cái gì đó.
Họ có thể có những gì được gọi là tác dụng phụ, mà trong
trường hợp chỉ là một bó toàn bộ in trên màn hình.
Vì vậy, nhận thấy rằng mã này ở đây, tôi nghĩa đen chỉ lấy trộm từ
ví dụ trước.
Sự khác biệt duy nhất là thay vì sử dụng i như của tôi
biến, tôi là bây giờ sử dụng b là biến của tôi.
Vì vậy, tôi có b xuống đây, tôi có b xuống đây, tôi có b
trừ đi 1 xuống đây.
Tuy nhiên, mã này là chính xác như nhau.
Nhưng chỉ để cho bạn thấy làm thế nào chúng ta có thể sử dụng điều này, để tôi đi
trước và thực sự thay đổi này là một vòng lặp for.
for (int i = n; i> n; i -).
>> Vì vậy, tôi đã bị đánh cắp từ ví dụ trước đây của chúng tôi.
Trước đây, trong dòng 37 mà tôi đã bắt đầu
hát bài hát này gây phiền nhiễu.
Nhưng thay vào đó, tôi là chỉ cần gọi là điệp khúc của tôi.
Xong.
Vì vậy, bây giờ trong mỗi lần lặp của vòng lặp này, tôi gọi đây là
chức năng, đoạn điệp khúc, rằng tôi đã xảy ra để viết.
Nó không được viết bởi người khác năm trước.
Nhưng đoạn điệp khúc, trong khi đó, sử dụng printf để in
ra bốn dòng.
Nhưng thực tế là tôi gọi điệp khúc một lần nữa và một lần nữa trong một
vòng lặp có nghĩa rằng tôi sẽ nhận được, cuối cùng,
chính xác cùng một bài hát như tôi đã vậy, đến nay.
Vì vậy, trong ngắn hạn, bây giờ nếu tôi nhìn lại mã của tôi, mặc dù
chức năng này là tương đương, nhận thấy rằng đó là
bắt đầu để có được thậm chí còn dễ đọc hơn.
Tôi không biết chính xác làm thế nào getInt
được thực hiện.
Thẳng thắn mà nói, tôi không biết điệp khúc được thực hiện như thế nào.
Nhưng nó không quan trọng với tôi.
Tôi không quan tâm, bởi vì bây giờ tôi có thể sắp xếp, như một con người, đọc
dưới này từ trên xuống.
Và bởi vì các chức năng được đặt tên theo những gì họ
làm, mã của tôi là ngày càng có thể đọc được.
Và như các chương trình của chúng tôi nhận được phức tạp hơn nhiều -
kết thúc học kỳ, bạn sẽ được viết hàng trăm dòng
mã trong các ngôn ngữ như PHP và JavaScript và như thế -
bạn sẽ thấy rằng nó dễ dàng hơn nhiều để theo dõi
những gì bạn đã làm.
Và khi bạn bắt đầu cộng tác với bạn bè hoặc
đối tác hay đồng nghiệp, bạn sẽ có thể viết nhiều hơn nữa
lớn các chương trình bắt đầu thực hiện những cơ bản
xây dựng các khối.
>> Vì vậy, với những gì đã nói, tại sao chúng ta không gọi nó là một ngày?
Và chúng ta sẽ thấy hôm thứ tư.
[Vỗ tay]