>> DAVID Malan J: Tất cả phải, vì vậy đây là CS50.
Và điều này rõ ràng là ngày thứ sáu.
Và đây là kết thúc của một tuần.
Vì vậy, bạn có thể nhớ lại rằng chúng ta rời đi, Lần cuối cùng, với một cliffhanger của các loại.
Nhờ đó mà chúng ta vạch trần lời nói dối này, rằng không có có vấn đề gì bạn đã được dạy phát triển
lên, 1 chia cho 10 là không, trong Thực tế, 0,1 hay 0,100 hoặc 0,10000.
Trong thực tế, nếu chúng tôi biên dịch này chương trình, như chúng tôi đã làm ngày hôm qua, với,
làm cho sự thiếu chính xác, và sau đó làm dấu chấm, dấu gạch chéo, thiếu chính xác,
chúng tôi được biết đây là những gì 1 chia cho 10 thực sự là.
Vì vậy, đó không phải là thực sự khá là trường hợp.
Nhưng điều này không gợi ý tại một số hạn chế cơ bản của máy tính.
Và quả thật, trong số các điều chúng ta đang đi làm
hôm nay là hãy xem tại sao điều này có đã xảy ra, những gì tác động này có,
làm thế nào loài người đã thất bại để nắm bắt điều này trong một số rất
situations-- nghiêm trọng kết quả của mà
đã được khá bi thảm và expensive-- và cũng
hãy xem cách chúng tôi thực sự có thể bảo vệ
chống lại các loại hạn chế.
Vì vậy, bằng trực giác, có lẽ, tại sao là 1 chia cho 10,
theo máy tính của tôi ở đây, không chỉ là 1/10, 0.10?
Yeah.
Bạn nghĩ sao?
>> TƯỢNG THÀNH VIÊN: Cơ số là khác nhau?
>> DAVID Malan J: là gì?
Oh, các cơ số là khác nhau?
Vì vậy, không khá.
Đó là thực tế nhiều hơn cơ bản đến phần cứng.
Suy nghĩ khác?
Yeah.
TƯỢNG THÀNH VIÊN: Họ đại diện cho số khác nhau không?
DAVID Malan J: Vậy they-- phải.
Họ đại diện cho số khác nhau.
Không chính xác, rõ ràng.
Vì vậy mà is-- Vâng, khác với những gì?
Hoặc từ ai?
Từ chúng tôi?
TƯỢNG THÀNH VIÊN: Yeah.
Họ không sử dụng các chữ số thập phân hệ thống [không nghe được].
DAVID Malan J: OK.
Vì vậy, trong một nghĩa nào đó, họ không sử dụng hệ thống số thập phân.
Bên dưới mui xe, tất cả mọi thứ, thực sự, nhị phân,
và đó là có liên quan, trong thực tế.
Nhưng nó thậm chí còn đơn giản hơn một giải thích hơn.
Yeah.
>> TƯỢNG THÀNH VIÊN: Họ chỉ có rất nhiều bit.
Họ chỉ có thể lưu trữ lên đến một số mức độ, giống như với các số thập phân.
>> DAVID Malan J: Vâng.
Đây là những gì đang thực sự nhận được vào nó.
Nó chỉ ra rằng máy tính thường, sẽ luôn luôn chỉ
sử dụng một số lượng hữu hạn của thông tin để đại diện cho một cái gì đó.
Phải không?
Sau khi tất cả, chúng tôi chỉ có một cố định số lượng không gian đĩa cứng.
Chúng tôi chỉ có một số tiền cố định RAM hoặc bộ nhớ máy tính.
Và nếu bạn chỉ có một số tiền cố định của một cái gì đó,
chắc chắn bạn có thể không thực sự đếm lên đến vô cùng hoặc bất kỳ số nào bạn muốn.
Bạn, loại, phải chọn và chọn những gì nhiều
các giá trị mà bạn đang đi để hỗ trợ.
>> Và do đó, ví dụ, một hoặc hai tuần trước, khi chúng tôi nói chuyện về ASCII,
và chúng tôi nói chuyện về 8 bit, hoặc một byte, do đó, để nói chuyện,
số lượng lớn nhất chúng ta có thể đại diện với 8 bit là gì?
255.
Và chúng ta có thể đại diện cho tổng giá trị 256 nhưng nếu chúng ta dành một trong số họ
trên 0-- Vâng, nhưng nếu chúng tôi dành một trong số họ về 0,
sau đó là số lớn nhất là, tất nhiên, 255.
>> Vì vậy, nó quay ra, rằng đây là trường hợp quá, trong bối cảnh này.
Chúng tôi bắt đầu nói chuyện, thời gian qua, về số dấu chấm động, mà
là khác nhau từ số nguyên, trong rằng họ có một điểm thập phân
và, hy vọng, một số con số sau đó, nhưng họ quá.
Một máy tính được chỉ thường đi sử dụng 32 bit, có thể 64 bit
để đại diện cho một giá trị dấu chấm.
Vì vậy, mặc dù chúng tôi đã trưởng thành lên học toán học và biết
rằng bạn hoàn toàn có thể có một số vô hạn các số
sau dấu thập phân, không nếu bạn có bộ nhớ hữu hạn.
Bạn, loại, phải làm tròn, hoặc chọn và chọn
số bạn đang đi để đại diện.
Và như vậy bạn có thể nghĩ đến, trong một nghĩa nào đó, này là của máy tính gần nhất
xấp xỉ với giá trị 1/10 rằng nó có thể có được, chỉ với 32 hay như vậy bit.
Và nó không chỉ là 1/10.
>> Ví dụ, nếu tôi thay đổi này để 1/3, mà chúng tôi nghĩ rằng thậm chí còn đơn giản hơn.
Vì vậy, 1 chia cho 3.
Hãy để tôi lưu các tập tin.
Hãy để tôi đi trước và biên dịch lại nó.
Và hãy để tôi chạy lại nó.
Ở đây cũng vậy, rõ ràng, 1/3 không phải là 0.3 và sau đó một số lượng vô hạn của 3 nhân
sau đó.
Bạn có thiếu chính xác này ở cuối.
Vì vậy, con người chúng ta là chính xác, và những gì bạn đã học được là, trong thực tế, chính xác,
nhưng chúng tôi đang tăng vọt chống lại một số hạn chế.
>> Và những gì tôi nghĩ chúng tôi sẽ làm ngày hôm nay, được bắt đầu
bằng cách nhìn vào, thẳng thắn, các hậu quả bi thảm này
đôi khi, khi nhân loại không hoàn toàn thực hiện
cho thực tế này và những hạn chế này.
Và chúng ta sẽ thấy một loạt các họa tiết từ kênh History mà mất
xem làm thế nào mọi thứ đã đi sai.
Nó dài khoảng 8 phút, và chúng tôi sẽ quay lại sau này
và hãy nhìn vào chính xác những gì khác có thể đi sai.
Nếu chúng ta có thể làm mờ lights--
>> [VIDEO PLAYBACK]
>> -Computers, Tất cả chúng tôi đến để chấp nhận những vấn đề thường bực bội mà
đi với họ.
Bugs, virus và các phần mềm ổn định là giá nhỏ
phải trả cho sự tiện lợi.
Nhưng trong công nghệ cao và tốc độ cao quân sự và chương trình không gian ứng dụng,
những vấn đề nhỏ nhất có thể được phóng vào thảm họa.
Ngày 4 tháng Sáu năm 1996, các nhà khoa học chuẩn bị để khởi động một không người lái tên lửa Ariane 5.
Nó đang chở khoa học vệ tinh được thiết kế
để thiết lập một cách chính xác như thế nào Tương tác từ trường của Trái đất
với gió mặt trời.
Các tên lửa được xây dựng cho Cơ quan Vũ trụ châu Âu
và dỡ bỏ khỏi cơ sở của mình trên bờ biển French Guiana.
>> -Và Khoảng 30 giây vào các chuyến bay, họ lần đầu tiên
một cái gì đó để ý đã đi sai.
Rằng các vòi phun được xoay trong một cách mà họ thực sự không nên.
Khoảng 40 giây vào chuyến bay, rõ ràng chiếc xe bị rắc rối,
và đó là khi họ đã thực hiện quyết định để tiêu diệt nó.
Một nhân viên an toàn Range ruột to lớn nhấn nút,
thổi lên các tên lửa trước khi nó có thể trở thành một mối nguy hiểm cho an toàn công cộng.
>> -Đây Là con gái hành trình của Ariane 5,
và phá hủy của nó mất đặt vì một lỗ hổng
nhúng trong phần mềm của tên lửa.
-Các Vấn đề trên Ariane là có
là một số đòi hỏi 64 bit để thể hiện,
và ông muốn chuyển đổi nó cho một số 16 bit.
Họ giả định rằng số không bao giờ có được rất lớn,
rằng hầu hết những chữ số trong số 64 bit là 0 của.
Họ đã sai.
>> -Các Sự bất lực của một chương trình phần mềm để chấp nhận
các loại số được tạo ra bởi khác là gốc rễ của sự thất bại.
Phát triển phần mềm đã trở thành một phần rất tốn kém của công nghệ mới.
Các tên lửa Ariane 4 đã rất thành công, rất nhiều các phần mềm
tạo ra cho nó cũng là được sử dụng trên các Ariane 5.
>> -Các Vấn đề cơ bản là các Ariane 5 là nhanh hơn, tăng tốc nhanh hơn.
Và các phần mềm có không chiếm đó.
>> -Các Phá hủy các tên lửa là một thảm họa tài chính khổng lồ,
tất cả đều do một lỗi phần mềm phút.
Nhưng đây không phải là lần đầu tiên Hiện vấn đề chuyển đổi dữ liệu
đã cản công nghệ tên lửa hiện đại.
>> -Trong Năm 1991, với sự bắt đầu Chiến tranh vùng Vịnh đầu tiên,
các tên lửa Patriot kinh nghiệm một loại tương tự
của vấn đề chuyển đổi số.
Kết quả là, 28 người, 28 binh sĩ Mỹ
đã thiệt mạng và khoảng 100 người khác bị thương,
khi Patriot, mà đã được yêu để bảo vệ chống lại các tên lửa Scud đến,
không bắn một tên lửa.
>> -Khi Iraq xâm chiếm Kuwait và Mỹ đưa ra Desert Storm trong đầu năm 1991,
Pin tên lửa Patriot đã được triển khai để bảo vệ Saudi Arabia và Israel
từ các cuộc tấn công tên lửa Scud của Iraq.
The Patriot là một Mỹ, tầm trung đất-đối-không khí hệ thống
sản xuất bởi công ty Raytheon.
>> -Các Kích thước của các máy bay đánh chặn Patriot, chính nó, là về, dài khoảng 20 feet.
Và nó chỉ nặng khoảng 2000 bảng Anh.
Và nó mang một đầu đạn hạt nhân của about-- Tôi nghĩ rằng đó là khoảng 150 pounds.
Và các đầu đạn hạt nhân, chính nó, là một vụ nổ,
trong đó có những mảnh vỡ xung quanh nó.
Vỏ của đầu đạn là được thiết kế để hoạt động như đạn chì.
>> -Các Tên lửa là thực, 4 mỗi container,
và được vận chuyển bởi một semi-trailer.
>> -Các Hệ thống chống tên lửa Patriot đi lại ít nhất 20 năm nay.
Nó được thiết kế ban đầu như một tên lửa phòng không
để bắn hạ máy bay của đối phương.
Trong chiến tranh vùng Vịnh đầu tiên, khi chiến tranh mà đến cùng,
Quân đội muốn sử dụng nó để bắn hạ tên lửa Scud, không phải máy bay.
Iraq Force không quá nhiều của một vấn đề,
nhưng quân đội đã lo lắng về tên lửa Scud.
Và do đó, họ đã cố gắng để nâng cấp các Patriot.
>> -Intercepting Một kẻ thù tên lửa đi du lịch tại mach năm
sắp được thử thách đủ.
Nhưng khi Patriot được đưa vào phục vụ,
Quân đội đã không nhận thức một Sửa đổi của Iraq đã làm
tên lửa Scud của họ gần như không thể chạm.
>> -Điều Gì đã xảy ra, là các tên lửa Scud mà đã đến, là không ổn định,
họ bị lắc lư.
Lý do cho điều này, là người Iraq, để
để có được 600 cây số ra khỏi một tên lửa tầm xa 300 km,
mất cân ra khỏi đầu đạn trước và thực hiện các đầu đạn nhẹ hơn.
Vì vậy, bây giờ, các Patriot của cố gắng để đến tại scud, và hầu hết thời gian,
đại đa số các thời gian, nó sẽ chỉ bay bằng các scud.
>> -Sau Khi các nhà khai thác hệ thống Patriot nhận ra Patriot bỏ lỡ mục tiêu của nó,
họ cho nổ đầu đạn của Patriot, để tránh thương vong có thể nếu nó
được phép rơi xuống đất.
>> -đó Là những gì hầu hết mọi người đã thấy, những quả cầu lửa lớn trên bầu trời,
và hiểu nhầm chặn của tên lửa Scud đầu đạn hạt nhân.
Mặc dù trong đêm bầu trời, Patriots xuất hiện
là thành công phá hủy tên lửa Scud, tại Dhahran,
có thể không có sai lầm về hiệu quả của nó.
Có, hệ thống radar của Patriot bị mất theo dõi của một tên lửa Scud đến,
và không bao giờ đưa ra, do một lỗ hổng phần mềm.
Đó là những người Israel đầu tiên phát hiện mà còn là hệ thống trên,
càng lớn thì thời gian khác biệt trở thành, do một đồng hồ nhúng
trong máy tính của hệ thống.
>> -Về 2 tuần trước thảm kịch ở Dhahran,
Israel báo cáo Bộ Quốc phòng,
rằng hệ thống đã làm mất thời gian, rằng sau khoảng 8 giờ chạy,
họ nhận thấy rằng hệ thống đã được trở nên đáng chú ý ít chính xác.
Bộ Quốc phòng trả lời bằng cách nói với tất cả các loại pin Patriot
để không để lại các hệ thống trong một thời gian dài.
Họ không bao giờ biết những gì một thời gian dài được.
8 giờ?
10 giờ?
1000 giờ?
Không ai biết.
-Các Pin Patriot đóng quân tại doanh trại
tại Dhahran, và thiếu sót nội bộ của mình đồng hồ, đã hơn 100 giờ
vào đêm ngày 25 tháng 2.
>> -Nó Theo dõi thời gian với độ chính xác khoảng 1/10 của một giây.
Bây giờ 1/10 của một giây là một số thú vị
bởi vì nó không thể là thể hiện trong hệ nhị phân, chính xác.
Có nghĩa là, nó có thể không được bày tỏ, chính xác,
trong bất kỳ máy tính kỹ thuật số hiện đại.
Thật khó để tin, nhưng sử dụng như là một ví dụ.
Hãy lấy số, 1/3.
1/3 không thể được thể hiện trong hệ thập phân, chính xác.
1/3 là 0,333 xảy ra cho vô cực.
Không có cách nào để làm điều đó, với độ chính xác tuyệt đối, trong số thập phân.
Đó chính xác là cùng một loại vấn đề đã xảy ra trong Patriot.
Các bạn còn hệ thống chạy, tệ hơn các lỗi thời gian đã trở thành.
>> -Sau 100 giờ hoạt động, các lỗi trong thời gian chỉ khoảng 1/3 của một giây là.
Nhưng trong điều kiện của một mục tiêu tên lửa đi du lịch tại mach 5,
nó dẫn đến theo dõi lỗi của hơn 600 mét.
Nó sẽ là một lỗi nghiêm trọng cho những người lính tại Dhahran.
>> -Điều Gì đã xảy ra, là một vụ phóng tên lửa Scud là phát hiện bởi các vệ tinh cảnh báo sớm,
và họ mới là Scud là đến trong hướng chung của họ.
Họ không biết nơi nó sẽ đến.
>> -Nó Là bây giờ lên đến radar thành phần của hệ thống Patriot,
bảo vệ Dhahran, để xác định vị trí và giữ theo dõi các tên lửa của địch.
>> -Các Radar đã rất thông minh.
Nó thực sự sẽ theo dõi vị trí của tên lửa Scud
và sau đó dự đoán nơi nó có lẽ sẽ là,
thời gian tới, radar gửi một xung ra.
Đó được gọi là cổng loạt.
>> -Sau Đó, một khi Patriot quyết định đủ thời gian có
thông qua để quay trở lại và kiểm tra tiếp theo vị trí cho đối tượng phát hiện này,
nó đi lại.
Vì vậy, khi nó đã đi lại với sai chỗ, nó sau đó thấy không có đối tượng
và nó quyết định rằng không có đối tượng, đó là một phát hiện sai,
và giọt theo dõi.
Các tên lửa Scud đến biến mất từ màn hình radar,
và giây sau, nó đâm sầm vào các doanh trại.
Scud giết chết 28 và là người cuối cùng một bắn trong cuộc chiến tranh vùng Vịnh lần thứ nhất.
Buồn thay, phần mềm cập nhật đến Dhahran ngày hôm sau.
Các phần mềm có lỗ hổng được cố định, đóng cửa
một chương trong khó khăn lịch sử của các tên lửa Patriot.
>> [END PLAYBACK]
>> DAVID Malan J: Vậy chúng ta sẽ có một cái nhìn tại một số hạn chế tương tự chỉ trong một chút.
Nhưng trước tiên, chúng ta hãy chuyển đổi sang một vài FYI là.
Vì vậy one-- cuối tuần này, có sẽ được siêu phần,
mà có nghĩa là để thay thế phần thường xuyên theo lịch trình, trong đó
sẽ khởi động một tuần vì thế.
Hãy xem tại trang web của CS50 để biết thêm thông tin về những người.
Họ cũng sẽ được quay và xem trực tiếp sống cho những người không thể tham dự.
Vấn đề đặt 1 là trên website nhiên của đã có,
và chúng ta sẽ có một cái nhìn tại mà chỉ trong một chút.
Và giờ làm quá, sẽ mất đặt thứ Hai đến thứ Năm này.
>> Vì vậy, đây là kinh điển nhất chương trình chúng tôi nhìn lần cuối cùng.
Nó giống như sự đơn giản chương trình bạn có thể viết trong C,
và thậm chí đó là một chút của một tuyên bố táo bạo.
Phải không?
Bởi vì có rất nhiều dường như phức tạp này.
Vì vậy, chúng ta hãy xem nhanh những gì một số các yếu tố này
và sau đó đã cố gắng cung cấp một mô hình về tinh thần cho cách
những đơn giản nhất của chương trình làm việc, và sau đó chúng ta sẽ bắt đầu
nhìn vào những điều phức tạp hơn bao giờ hết.
Vì vậy, dòng này ở đây, đánh dấu có, màu vàng, chúng tôi đã nói gì, thời gian qua,
rằng điều này làm cho chúng ta?
Mục đích mà nó phục vụ là gì?
Bất cứ ai từ xa trở lại?
Yeah.
>> TƯỢNG THÀNH VIÊN: [Không nghe thấy]
DAVID Malan J: Tốt.
Vì vậy, nó sẽ cho bạn truy cập với các lệnh, hoặc chúng ta hãy
gọi cho họ chức năng, mà một người nào đó khác đã viết, được khai báo,
có thể nói, trong một số tập tin khác.
Vì vậy, chúng ta sẽ thấy chính xác những gì một tập tin h là so với một file .c, cuối cùng.
Nhưng hiện nay, chỉ cần biết printf rằng, ví dụ,
là một trong những chức năng mà đã được tuyên bố trong một số tập tin khác, một nơi nào đó
khác trên ổ cứng của đám mây cho phép chúng ta truy cập printf và sử dụng nó
mà không cần phải tái tạo lại mà bánh xe mình.
Trong khi đó, chính.
Sự tương tự của chính, tuần vừa qua là gì?
Yeah.
>> TƯỢNG THÀNH VIÊN: cờ xanh được nhấp.
>> DAVID Malan J: Vâng.
Scratch, khi lá cờ màu xanh lá cây nhấp.
Nó giống như những mảnh ghép mà đá mọi chuyện.
Và như vậy tương tự, đã làm thế giới quyết định một số năm trước đó trong C,
và một loạt các ngôn ngữ khác, nếu bạn muốn viết một chương trình,
Chức năng đầu tiên của bạn đã được gọi là, chính.
Và nó có giống như thế này.
Nhưng chúng tôi sẽ trở lại, một thời điểm khác, những gì, int,
và, void, có nghĩa là trong bối cảnh đó.
Để bây giờ, các dấu ngoặc nhọn là loại giống như Scratch của mảnh ghép hình
mà gói gọn một số số dòng.
Và trong số trên đường ở đây, là một trong những điều này ở đây.
printf là một chức năng mà mục đích trong cuộc sống là để in một chuỗi định dạng.
Và bằng cách định dạng, ý tôi là bạn có thể cắm vào giá trị giữ chỗ,
và bạn có thể xác định có bao nhiêu chữ số thập phân điểm, có bao nhiêu số để in
sau khi một điểm thập phân và các loại tương tự.
Và printf, tất nhiên, phải mất một hoặc nhiều đối số hoặc các thông số,
nếu không được biết, đơn giản hơn, như đầu vào.
>> Vì vậy, printf, giống như rất nhiều chức năng, có đầu vào.
Và những yếu tố đầu vào được chấp nhận bởi hai dấu ngoặc ở đây.
Và bên trong những người là một đầu vào.
Đó là một chuỗi, như chúng tôi đã gọi nó, mà chỉ là một chuỗi các ký tự,
như một từ, hoặc một cụm từ, hoặc toàn bộ tiểu luận thậm chí, ở giữa hai dấu ngoặc kép.
Và đó là những gì sẽ ảnh hưởng đến hành vi của printf vì, tất nhiên,
nó chỉ là một chức năng in chung chung.
Nó sẽ không biết gì in, trừ khi bạn nói với nó.
Và sau đó, một số chi tiết vụn vặt.
Chúng ta đã nói gì kỳ lạ này chuỗi các ký hiệu là?
Yeah.
>> TƯỢNG THÀNH VIÊN: hàng mới.
>> DAVID Malan J: hàng mới.
Vì vậy, nó quay ra, bạn không thể chỉ cần nhấn, nhập, khi bạn đang viết chương trình.
Nói chung, các trình biên dịch là sẽ nhận được một chút nhầm lẫn như những gì bạn có ý nghĩa.
Thay vào đó, bạn phải theo nghĩa đen nói, cho tôi một dòng mới ở đây.
Và như vậy / n là những gì chúng ta thường gọi một nhân vật chạy thoát.
Vì vậy, n, cho dòng mới.
Và trình biên dịch biết rằng khi nó thấy / n,
nó thực sự gây nên các máy tính, cuối cùng, hoặc printf, trong trường hợp này,
để in ra một thực tế mới dòng, như đánh, nhập,
phím trên bàn phím của bạn.
Và cuối cùng, những gì đã làm chúng tôi nói mảnh này của cú pháp là gì?
Nó đại diện cho những gì?
Yeah.
>> TƯỢNG THÀNH VIÊN: [Không nghe thấy]
>> DAVID Malan J: Nó chỉ cuối dòng.
Nó là sự kết thúc của câu lệnh.
Và nhận ra rằng chúng tôi không đặt chúng ở khắp mọi nơi.
Chúng tôi chắc chắn không đặt chúng ở hai đầu của mỗi dòng.
Ví dụ, có không có trên dòng đầu tiên, có không có trên dòng
với, main, có không sau khi các dấu ngoặc,
nhưng bạn sẽ bắt đầu nhìn thấy và nhận được quen thuộc với nơi mà nó được gọi là cho.
Và nó hầu như luôn luôn sau khi một chức năng gọi điện thoại hoặc một tuyên bố, một số hành động
rằng bạn đang thực sự tham gia.
>> Và biết bây giờ, đặc biệt là nếu trong số những người kém thoải mái,
đó là những loại điều ngu ngốc rằng bạn sẽ kết thúc vô tình đập
đầu của bạn chống lại các bức tường trên.
Bởi vì bạn sẽ có một cách logic tự tin trong một số vấn đề
bạn đã giải quyết cho một vấn đề thiết lập, và điều chết tiệt chỉ
sẽ không biên dịch hoặc thậm chí chạy.
Và vì vậy thường xuyên, đầu vào, nó sẽ là do bạn đã bỏ lỡ một dấu ngoặc đơn,
hoặc bạn đã bỏ lỡ một dấu chấm phẩy.
Và vì vậy chỉ cần được lưu tâm các loại của sự vật,
và cố gắng không để thất vọng bởi họ bởi vì rất nhanh chóng thực hiện điều này
trở thành chiếc mũ cũ.
Nhưng nó rất dễ dàng để có được thất vọng sớm, như một kết quả.
>> Vì vậy, bây giờ, chúng ta hãy xem làm thế nào dòng này là thực sự làm việc
và sau đó nhìn vào một hơi một phức tạp hơn.
Vì vậy, chúng tôi có hơn ở đây, khả năng vẽ trên màn hình này.
Và chúng ta hãy giả sử rằng đây là màn hình máy tính của tôi,
nhưng tôi viết, xin chào chương trình, và tôi đã không được thực hiện, printf.
Một người khác đã thực hiện, printf.
Ai muốn yêu cầu bồi thường đã thực hiện, printf?
Nếu chúng ta có thể?
Tất cả các quyền, tên của bạn là gì?
>> HỌC SINH 1: [? Copal. ?]
>> DAVID Malan J: Copal, đi lên trên.
Nào lên.
Được rồi.
Vì vậy, chúng ta có, ở đây, một số thẻ tên, vì chúng ta sẽ làm cho một trò chơi nhỏ này.
Và chúng tôi sẽ gọi cho bạn, printf.
Và nếu bạn muốn đến đây, những gì tôi đã chỉ vẽ trên màn hình,
nó là khá đơn giản, có tôi, điều này.
>> Tất cả các quyền, do đó, xin chào tôi tên là, printf, nếu bạn muốn đặt trên.
Được rồi.
Và nếu bạn có thể đi đứng bởi màn hình máy tính
như thể bạn là những chức năng mà kèm với hệ thống máy tính này.
Và mục đích của bạn trong cuộc sống là để thực sự in một cái gì đó.
Nhưng giống như các chương trình chúng tôi chỉ có trên màn hình, ở đây,
chúng ta sẽ phải thực sự cung cấp cho bạn một số đầu vào.
>> Và như vậy, nếu đầu vào của tôi, ở đây, là rõ ràng, những gì được thông qua với printf,
chúng ta hãy loại châm biếm nó lên như thế này.
Tôi sẽ viết về nghĩa đen một mảnh giấy, "hello, world"
backslash N. Để cho rõ ràng, những gì Tôi vừa mới được vẽ trên tờ giấy này,
trông như thế này.
Vì vậy, khi tôi chạy chương trình này, và điều này dòng màu vàng mã được thực thi,
nó giống như tôi, chương trình hello, đang bàn giao một số đầu vào giảm đến một chức năng
mà người khác đã viết.
>> Và nếu bạn, với ngón tay của bạn, có thể thực sự, với ngón tay của bạn,
vẽ trên màn hình bất cứ điều gì nó là bạn đã được lưu truyền,
hiệu quả, cuối cùng, là để nhìn thấy chính xác điều đó, trên màn hình.
Và một trường hợp góc nhỏ ở đây.
Và tốt, chúng ta không nên xem các, dòng mới, vào thời điểm này.
Nó sẽ là không chính xác cho bạn để vẽ một cách rõ ràng các dòng mới.
Nhưng nếu chúng ta giữ bằng văn bản từ trên màn hình, họ sẽ kết thúc dưới đây mà.
>> Vì vậy, cảm ơn bạn rất nhiều, nhưng dính xung quanh ở đây chỉ trong một khoảnh khắc.
Bây giờ chúng ta cần một khác tình nguyện, nếu chúng ta có thể,
đó là sẽ cần phải đóng vai trò of-- Đó là chỉ có những người trong dàn nhạc
ngay bây giờ.
Làm thế nào about-- OK.
Ngay tại đây.
Nào lên.
Tên bạn là gì?
>> HỌC SINH 2: [? Ivay. ?]
DAVID Malan J: Xin lỗi?
HỌC SINH 2: [? Ivay. ?]
DAVID Malan J: Ethan, đi lên trên.
Không có?
Tôi đã nhận sai mà, thậm chí sau khi bạn nói nó hai lần?
Nào lên.
Thật khó để nghe ở đây.
ĐƯỢC.
Và tôi xin lỗi, tên của bạn là gì?
>> HỌC SINH 2: [? Ivay. ?]
>> [? DAVID Malan J: Ivay. ?] ĐƯỢC.
Để bây giờ, nếu bạn không tâm trí, bạn đang GetString.
>> HỌC SINH 2: OK.
Cool.
DAVID Malan J: Vì vậy, nếu bạn muốn đứng ở đây một lát,
chúng ta hãy nhìn vào một hơi chương trình phức tạp hơn, mà
hiện có ba dòng mã.
Vì vậy, chúng ta có, một, xưng danh của mình bằng cách sử dụng printf; hai, một cuộc gọi đến GetString,
tiếp theo là một bài tập để một biến gọi là, chuỗi s, hay còn gọi là s;
và sau đó một cuộc gọi đến, printf, nhưng lần này với hai đầu vào.
>> Nhà nước vì vậy chúng tôi đã thực hiện Tên của bạn, hay đúng hơn, chúng tôi đã
đã thực hiện một cuộc gọi printf.
Vì vậy, tôi sẽ viết, Nhà nước tên của bạn.
Và như vậy, những gì tôi sẽ vượt qua, printf, chỉ trong một khoảnh khắc,
là khá đơn giản, đây.
Vì vậy, nếu bạn muốn đi trước và vẽ này trên màn hình, đó là đầu vào của bạn bây giờ.
Được rồi.
Và quên chuỗi, bây giờ chúng tôi có dòng riêng của chúng tôi mã ở đây.
Vì vậy, trong, GetString, chúng ta cần để thực sự gọi, GetString.
Vì vậy, mục đích của bạn trong cuộc sống là để chỉ cần đi bộ ra vào các dàn nhạc, nếu bạn có thể,
và có được tên của một ai đó.
Nhưng chúng ta hãy cung cấp cho bạn một cái gì đó để đưa nó vào.
Nếu bạn muốn, đi trước và nhận được một chuỗi,
có được tên của một ai đó trên đó mảnh giấy, nếu bạn có thể.
>> Được rồi.
Và chúng ta sẽ thấy, chỉ trong một khoảnh khắc, mà tên chúng tôi đang nhận được.
Trong khi đó, những gì tôi sẽ có sẵn sàng, là một mảnh trống
giấy, trong đó, tôi sẽ để lưu trữ bất kỳ giá trị nó
được rằng GetString đang trở lại với tôi, Tôi, là một chuỗi biến gọi, s.
Được rồi.
Vì vậy, những gì bạn có ở đây?
Nik.
Được rồi.
Vì vậy, chúng tôi có tên Nik ở đây.
Vì vậy, đây là những gì đúng nghĩa đen đã được trả lại
với tôi, có thể nói, bởi GetString.
>> Tôi, bây giờ, đang đi thực hiện phía bên trái
đó biểu hiện, nơi tôi chỉ đơn giản sao chép, vì mục đích của ngày hôm nay, Nik.
Vì vậy, bây giờ, tôi có một biến gọi, s, lưu trữ tên của Nik.
Tôi đã giao cho printf, một cuộc tranh luận trước đó.
Nhưng trong dòng thứ ba và cuối cùng của chúng tôi mã, tôi thực sự phải tay printf
một chút gì đó different-- "hello,% s," dấu gạch chéo ngược n.
>> Và do đó, dòng cuối cùng tôi sẽ để send-- điều cuối cùng tôi
sẽ viết xuống bây giờ, là điều này.
Vì vậy, hai dòng mã, hoặc chứ không phải dòng cuối cùng của mã,
cuộc gọi cho hai inputs-- một, này, và hai, điều này.
Vì vậy, nếu hàm printf của chúng tôi bây giờ có thể có những như đầu vào,
hãy để tôi xóa màn hình cho bạn.
Trên thực tế không có, bạn có thể đi trước.
Chúng tôi sẽ để nó lên, vì đó là trên cùng một chương trình.
Chúng ta sẽ thấy, hello, Nik.
Được rồi.
Vì vậy, đây là một số khá hoops để nhảy qua, chỉ
để viết, nêu bạn tên, và, xin chào, Nik.
Nhưng ý tưởng đơn giản này của thông điệp đi qua, những đường chuyền vào và đầu ra tiếp nhận,
chính là mô hình chúng ta sẽ có cho ngay cả những chức năng phức tạp nhất.
Vì vậy, cảm ơn bạn rất nhiều cho bạn cả.
Chúng tôi có một sự căng thẳng đáng yêu bóng ở đây cho bạn.
Và cảm ơn bạn GetString của chúng tôi và tình nguyện viên printf như nhau.
Cam on.
Được rồi.
Cảm ơn bạn với bạn cả.
>> Vì vậy, chúng tôi đã nói về vậy, đến nay, chủ yếu là về chuỗi.
Và nó quay ra rằng C có thể thực sự hiểu một vài kiểu dữ liệu khác nhau.
Trong thực tế, chúng ta hãy một nhìn vào những ở đây.
Vì vậy, C, và rất nhiều ngôn ngữ, hiểu được những điều được gọi là ký tự.
Một char thường là một byte duy nhất, hoặc tám bit.
Và nó đại diện cho một ký tự, giống chữ A, hoặc vốn
chữ A, hoặc các chữ cái thường A, hoặc dấu chấm than,
hoặc bất kỳ ký tự mà bạn có thể gõ vào bàn phím của bạn, và đôi khi thậm chí nhiều hơn.
Chúng tôi cũng tình cờ thấy phao nổi.
Một float là, nói chung, một Giá trị 32-bit, hay bốn byte
bởi vì một lần nữa, một byte là tám bit.
>> Vì vậy, một phao là một giá trị dấu chấm, một cái gì đó với một điểm thập phân.
Và quả thực, đó là những gì bộ phim đã nói
khi họ nói về nổi điểm giá trị, một số số bit cố định
được sử dụng để đại diện cho một số thực.
Nhưng cũng có những thứ gọi là tăng gấp đôi.
Những tồn tại trong Java, nếu bạn đã thực hiện APCS,
và một đôi, như tên của may mắn thấy, là hai lần lớn như một phao.
Nó vẫn là một số thực, nó chỉ có nhiều bit
với đó là bao giờ chính xác hơn, hoặc để lưu trữ các số thậm chí còn lớn hơn.
int là dễ dàng.
Chúng tôi đã nói về điều đó thời gian qua.
Nó chỉ là một số nguyên.
Và nó thường 32 bit, hay bốn byte.
>> Và như vậy, nếu bạn có, chúng ta hãy nhìn thấy bây giờ, 32 bits-- và chúng tôi đã làm điều này trong tuần 0,
bao giờ nên briefly-- nếu bạn có 32 bit, những gì là lớn nhất
Số bạn có thể đại diện như một số nguyên?
Cho hoặc mất?
Nó giống như 4 tỷ, và đó là chỉ khi chúng tôi
đại diện cho chỉ số dương.
Nếu bạn có 32 bit, và bạn muốn đại diện cho các số âm là tốt,
phạm vi của bạn là, về cơ bản, tiêu cực 2 tỷ USD để tích cực 2 tỷ.
Nhưng nói chung, chúng ta sẽ bắt đầu 0 đi lên đến 4 tỷ USD.
>> Bạn không cần phải biết chính xác, nhưng chúng ta có thể thấy điều này, trên thực tế, nếu tôi chỉ
mở ra một chút tính toán, ở đây.
Tôi có thể làm 2 32, và đó chính xác là lớn như thế nào,
bao nhiêu giá trị bạn có thể đại diện, với 32 bit.
Và đó là khoảng 4 tỷ USD.
Vì vậy, chúng tôi sẽ tiếp tục nhìn thấy con số đó ở một vài nơi khác nhau.
Nhưng nếu bạn cần còn số hơn thế,
nó quay ra có của một cái gì đó gọi là lâu dài.
Và một lâu dài là nói chung là 64 bit, mà
có nghĩa là nó là một đơn đặt hàng của các cường độ thậm chí lớn hơn một int.
>> Vì vậy, tôi thậm chí không thể phát âm lớn nhất số mà bạn có thể đại diện,
nhưng nó là đáng kể lớn hơn.
Bây giờ là một sang một bên, lịch sử, nếu một int là 32 bit,
và lâu dài là 64 bit, như thế nào lớn là một dài, không phải là dài lâu?
Bạn nghĩ rằng nó dài hơn một int nhưng có lẽ ít lâu hơn một lâu dài,
nhưng nó thực sự phụ thuộc.
>> Và do đó, nó biến ra một những nỗi thất vọng quá,
với viết mã trên hệ thống nhất định, là không phải tất cả các loại dữ liệu
có giá trị được xác định trước.
Đôi khi nó là điều này nhiều bit.
Đôi khi nó có nhiều bit.
Vì vậy, bạn thực sự phải biết, Đôi khi, những gì phần cứng
bạn đang chạy phần mềm của bạn trên.
Rất may, các ngôn ngữ khác và loại dữ liệu khác mà bây giờ tồn tại,
cho phép bạn được chính xác hơn.
Vâng, chúng ta đã thấy chuỗi, và chúng tôi thấy bool, quá,
nhưng nó chỉ ra những yếu chỉ với thư viện CS50.
Vì vậy, những người không được xây dựng vào C. Những thay vào đó,
đến trong tập tin đó được gọi là CS50.h, rằng chúng ta sẽ cuối cùng
bóc lại lớp.
Nhưng hiện nay, họ chỉ kiểu dữ liệu bổ sung.
Một bool là đúng hay sai, và một chuỗi là một chuỗi các ký tự,
như một lời.
Bây giờ printf, chúng ta đã thấy, có placeholders,% s là một.
Và bạn có thể có thể, đến nay, suy ra từ những ví dụ khác, làm thế nào
bạn có thể có một placeholder với nhiều loại dữ liệu khác nhau.
Ví dụ, có nhiều phán đoán, nếu bạn muốn in ra một char duy nhất sử dụng
printf, giữ chỗ có lẽ là% c.
Và nếu bạn muốn in ra một số nguyên với các placeholder,% i.
% lld là một giá trị lâu dài thập phân, nhưng lâu dài, vì vậy mà các bản đồ đó.
Và sau đó% f cho nổi giá trị điểm hoặc cho một đôi,
vì vậy đôi khi họ đang tái sử dụng trong các bối cảnh khác nhau.
Vì vậy, chúng ta sẽ nhìn thấy và sử dụng một số trong những thời gian.
Và printf và các chức năng khác cũng trình tự thoát ra hỗ trợ của người khác,
và đôi khi, đó là cần thiết.
Vì vậy, n dấu gạch chéo ngược là một dòng mới.
Dấu gạch chéo ngược t, không ai muốn sử dụng những đòn?
TƯỢNG THÀNH VIÊN: Tab.
DAVID Malan J: Tab.
Vì vậy, nếu bạn thực sự muốn để in ra một tab, không
một số cố định của không gian mà là một thực tế ký tự tab, bạn không đánh bạn,
tab, phím trên bàn phím, nói chung, bạn thực sự làm dấu chéo ngược t.
Dấu gạch chéo ngược đôi báo, tại sao tôi sẽ không bao giờ muốn điều đó?
Phải không?
Tại sao tôi không thể chỉ cần gõ một nháy kép trên bàn phím của tôi?
TƯỢNG THÀNH VIÊN: Bởi vì, nếu không, nó
sẽ nghĩ rằng đó là cuối cùng của thích in của bạn [? văn bản. ?]
>> DAVID Malan J: Chính xác.
Hãy nhớ rằng, với chúng tôi ví dụ printf, khi chúng ta
đã đi qua để printf trong đầu vào, trên bên trái của chuỗi đầu vào mà
và bên phải của đầu vào mùa xuân, tất nhiên, là một đôi.
Nếu đầu vào của bạn có một đôi quote ở giữa đó,
máy tính có thể có khả năng bị lẫn lộn, như,
không nháy kép này thuộc ở giữa?
Liệu nó thuộc với một trái?
Liệu nó thuộc với một trong những quyền?
Và như vậy, nếu bạn muốn làm cho nó siêu rõ ràng, bạn làm dấu chéo ngược đôi báo,
để nó trốn thoát, vậy để nói chuyện, và nó không đem lồng cho cái gì khác.
Và có một vài người khác ở đây, r xuyệc ngược, dấu ngoặc đơn, 0,
rằng chúng ta có thể thấy qua thời gian, là tốt.
Và bây giờ, những gì về chức năng?
>> Vì vậy, hành động mà chúng ta có thể mất đến nay trong ngôn ngữ này, C, tốt, chúng tôi đã nhìn thấy,
printf, tất nhiên, và tất cả của người khác trên màn hình,
ở đây, chúng ta sẽ sử dụng cho Tất nhiên đầu tiên của vài chỉ vài tuần,
đến khi thư viện CS50.
Và họ làm cho nó dễ dàng hơn nhiều, C, để thực sự có được người dùng nhập vào.
Nó chỉ ra rằng trong C, và thẳng thắn trong một vài ngôn ngữ,
đó là một nỗi đau thực sự ở cổ để làm một cái gì đó đơn giản, giống như nhắc nhở người sử dụng
cho bàn phím, cho đầu vào của mình.
Và do đó, các chức năng này làm cho nó dễ dàng hơn.
>> Và nó cũng có lỗi kiểm tra trong suốt,
do đó, khi bạn nhớ lại hôm thứ tư, chúng tôi
thấy, thử lại, cảnh báo, khi tôi đã không hợp tác,
và tôi đã gõ một từ, thay vì một số?
Chúng tôi đã thực hiện việc nâng hạng nặng đầu trên để đảm bảo sử dụng hợp tác.
Nhưng đây là những chỉ đào tạo bánh xe mà chúng tôi sẽ cuối cùng,
và nhanh chóng, cất cánh.
>> Vì vậy, tóm lại, sau đó, chúng ta hãy có một cái nhìn nhanh chóng,
giống như chúng ta đã làm với Scratch, tại một số cấu trúc kinh điển trong C.
Điều này có nghĩa là để, sắp xếp của, là một tour du lịch lốc,
chỉ cần để bạn có một tài liệu tham khảo và rằng bạn đã nhìn thấy những điều lúc đầu.
Nhưng sau đó chúng tôi sẽ xem xét thực tế mã hóa sử dụng một số các khối xây dựng.
Vì vậy, nhiều như trong Scratch, khi chúng tôi đã báo cáo thích,
nói hay, chờ đợi, trong C, chúng tôi có chức năng là tốt, giống như printf.
>> Nếu chúng tôi muốn bày tỏ một điều kiện trong C, nó tương tự, trong tinh thần,
cho rằng mảnh ghép đó nhìn như thế này trong Scratch.
Nhưng thay vào đó, chúng tôi nghĩa là chỉ cần viết, nếu.
Và sau đó, trong dấu ngoặc đơn, chúng ta đặt một điều kiện,
nơi mà điều kiện đó là những gì chúng tôi sẽ gọi, một lần nữa, một biểu thức boolean.
Và một lần nữa, đây là loại mã giả.
Và, trên thực tế, các // là một nhận xét.
Nó chỉ là những từ tiếng Anh với bản thân mình.
Nhưng đây là nói chung cấu trúc của một, nếu, điều kiện.
Nhưng chúng ta sẽ thấy bê tông ví dụ chỉ trong một khoảnh khắc.
>> Nếu bạn muốn có một hai cách ngã ba đường,
giống như chúng ta đã làm với tình nguyện viên của chúng tôi trên Thứ tư, bạn có thể có một, nếu người nào khác.
Và nếu bạn muốn có một thứ ba và điều kiện cuối cùng, hoặc tình hình mặc định,
bạn có thể có chỉ một khối khác, có.
Và tương tự, với các biểu thức boolean, bạn có thể, và, chúng lại với nhau.
Và chúng ta đã thấy hôm thứ Tư, rằng nó không phải là một ký hiệu duy nhất,
đó là hai, vì những lý do cấp dưới mà chúng tôi sẽ cuối cùng xem và chơi với.
Hoặc-ing việc cùng nhau là 2 thanh dọc.
Trên một bàn phím Mỹ, điều này nói chung là một chìa khóa
với phím Shift trên Nhập phím của bạn hoặc Return.
>> Sau đó có những điều mà chúng tôi sẽ sử dụng có thể một lần hoặc hai lần.
Họ là những chức năng tương đương những gì bạn có thể làm với một, nếu, nếu người nào khác,
khác nếu người nào khác, xây dựng, nhưng chúng được gọi là một switch.
Họ trông rất khác nhau, nhưng chúng tôi sẽ thấy trong một số mã phân phối của chúng tôi,
cho một vấn đề thiết lập trong tương lai, rất có thể, mà đôi khi nó chỉ là một xinh đẹp hơn
cách thể hiện toàn bộ bó của điều kiện,
mà không cần phải có rất nhiều dấu ngoặc nhọn và rất nhiều dấu ngoặc đơn và thụt đầu dòng.
Nhưng họ cho chúng tôi không có nhiều điện năng hơn chúng tôi đã có.
Và bây giờ vòng.
Và một trong những điều này, chúng tôi sẽ xem xét tại chậm hơn một chút.
Nhưng sau đó, chúng ta sẽ bắt đầu sử dụng chúng, đặc biệt là đối với những người đã quen thuộc.
Đây là một cách kinh điển, nếu vô cùng cách phức tạp, để viết một vòng lặp trong C.
>> Bây giờ một vòng lặp trong Scratch là khá đơn giản.
Bạn có một, mãi mãi, khối.
Bạn có một, lặp lại, với khối chỉ một số bạn phải gõ vào.
Và với, cho vòng lặp, bạn có thể thực hiện cả trong những ý tưởng,
nhưng đó là một chút kỹ thuật nhiều hơn.
Nhưng thẳng thắn mà nói, nó cũng tương đối đơn giản.
Một khi bạn biết thứ tự của hoạt động, bạn có nghĩa
chỉ cần đi để cắm vào các giá trị và cho các máy tính phải làm gì.
Vì vậy, đây là một ví dụ.
Đây là một vòng lặp, khá đơn giản, đếm từ một số lên
thông qua một.
Và chỉ cần nhìn liếc ở đó, thậm chí nếu bạn có
chưa có kinh nghiệm với ngôn ngữ này, những gì số
không thì có lẽ nó bắt đầu đếm ở?
OK, 0.
Và tôi đoán đó là bởi vì bạn thấy rằng có một int và một i,
đó là một biến.
Nó khởi tạo 0.
>> Và rồi sau đó, nó trông giống như chúng ta đang đi qua printf, một giá trị.
Và, trên thực tế, tôi đã thực hiện một chút typo ở đây.
Nhưng điều đó dễ thôi.
Hãy để tôi thêm vào, tôi ở đây.
Bây giờ chúng ta có printf phúc thông qua đó giá trị giữ chỗ.
Và điều gì sẽ đếm lên qua?
Đung 50.
50.
49.
DAVID Malan J: 49.
Vì vậy, 50, ở cái nhìn đầu tiên, có vẻ đúng.
Nhưng mà, nó quay ra, là có được điều kiện của chúng tôi rằng chúng tôi tiếp tục kiểm tra.
Và chúng ta sẽ dừng lại một lần i là không còn ít hơn 50.
Vì vậy vòng lặp này, ngược lại, nên thực hiện, miễn là tôi là ít hơn 50.
Nhưng ngay sau khi nó trở thành 50, hoặc 51, hoặc tệ hơn, nó phải tự động dừng.
Được rồi.
>> Vì vậy, những gì thực sự xảy ra ở đây?
Vì vậy, đây là thứ tự của hoạt động cho một vòng lặp.
Một, bạn có cái gọi là khởi tạo.
Đoạn đánh dấu màu vàng này các mã được thực thi đầu tiên,
và nó có tác dụng đó, mỗi Thứ tư, bạn có thể tưởng tượng.
Nó tạo ra một biến gọi là i và nó cửa hàng trong biến đó giá trị 0.
Vì vậy, tôi là 0 vào thời điểm này trong câu chuyện.
>> Điều tiếp theo mà xảy ra trong cấu trúc này,
là điều kiện được kiểm tra.
Vì vậy, tôi kiểm tra ngay lập tức, i là ít hơn 50?
Và tất nhiên, câu trả lời cho bây giờ, chắc chắn, có.
Vâng, bởi vì tôi là 0, và đó là chắc chắn ít hơn 50.
Sau đó, những gì xảy ra, là điều này dòng mã được thực hiện.
Và trên thực tế, nếu có nhiều dòng mã trong những dấu ngoặc,
tất cả họ đều có được thực thi một.
>> Và trong các hiệu ứng ở đây, là rõ ràng, để in ra
i số, mà là có bằng 0, và sau đó 1, và sau đó 2.
Nhưng tại sao?
Tại sao nó được tăng lên?
Vâng, điều thứ tư xảy ra là cú pháp này
được thực thi, sau khi chấm phẩy.
i ++ là một cách viết tắt nói; mất giá trị của i, và thêm 1 đến nó;
và sau đó là khoảng thời gian tới, thêm 1 đến nó; và thời gian tiếp theo xung quanh,
thêm 1 đến nó.
>> Vì vậy, nếu chúng ta tiếp tục đi, những gì sẽ xảy ra
tiếp theo là tôi sẽ không khởi tạo i bao giờ trở lại.
Nếu tôi tiếp tục khởi tạo i 0, ví dụ này
sẽ không bao giờ kết thúc bởi vì i sẽ bị mắc kẹt tại 0.
Nhưng điều gì sẽ xảy ra là tình trạng này sẽ được kiểm tra,
các dòng mã sẽ được thực hiện, i sẽ được tăng lên,
điều kiện sẽ được kiểm tra, mã sẽ được thực thi.
Và nó vẫn giữ được đi xe đạp một lần nữa, và một lần nữa, và một lần nữa,
cho đến khi i ++ gây ra một giá trị 50.
>> Các điều kiện sau đó nói, là 50 ít hơn 50?
Câu trả lời, tất nhiên, là không, và vì vậy toàn bộ mã dừng thực hiện.
Và nếu bạn có mã hơn trên màn hình xuống dưới, đó là những gì sẽ xảy ra tiếp theo.
Nó hiện ra các dấu ngoặc nhọn và tiếp tục in thêm sau đó.
>> Vì vậy, một trò đùa bây giờ, từ Foxtrot, mà bạn sẽ có lẽ bây giờ hiểu được.
Nó luôn luôn vui.
Nó giống như cười khúc khích loại thấm,
và sau đó bạn nhận ra bạn không nên được cười hài hước như thế này.
Nhưng có một số takeaway ở đây, sư phạm, quá.
Vì vậy, nó quay ra rằng tôi là thiếu một mảnh của cú pháp,
hoặc Foxtrot của thiếu một mảnh cú pháp ở đây.
Những gì còn thiếu, mà chúng tôi đã có trong mỗi ví dụ khác, cho đến nay?
Quay trở lại, là có, vì vậy đó là cái gì khác,
rằng chúng tôi sẽ trở lại trước khi dài.
Những gì còn thiếu, mặc dù?
Yeah.
>> TƯỢNG THÀNH VIÊN: Các khởi tạo của [không nghe được].
>> DAVID Malan J: OK.
Vì vậy, yeah.
Vì vậy, trên thực tế, điều này is-- Vâng, và đếm được khởi tạo
lên trên, hay đúng hơn, tuyên bố lên trên.
Vì vậy, đây là một cách khác để làm việc đó.
Nhưng không phải trong một dòng nó là hợp lệ mặc dù.
Làm thế nào về đây?
>> TƯỢNG THÀNH VIÊN: Đó có phải là dấu ngoặc nhọn?
>> DAVID Malan J: Vâng.
Vì vậy, các dấu ngoặc nhọn đang mất tích.
Tuy nhiên, mã này, tôi có nghĩa là, để tín dụng của họ, việc thực sự là cú pháp hợp lệ.
Hóa ra, bạn không cần các dấu ngoặc nhọn
nếu bạn chỉ có một dòng mã bạn muốn thực hiện bên trong vòng lặp.
Bây giờ chúng ta luôn luôn, trong lớp và trong tất cả các mã phân phối của chúng tôi,
bao gồm các dấu ngoặc nhọn anyway, chỉ vì lợi ích của sự rõ ràng.
Nhưng nhận ra rằng trong sách giáo khoa và ví dụ trực tuyến,
bạn rất có thể sẽ chứng xoăn niềng răng mất tích sometime.
Và đó là OK, nếu những gì bạn đã thụt vào và có ý định
chỉ là một dòng mã, và không nhiều dòng mã, có tiềm năng.
Được rồi.
Vì vậy, liên quan đến vấn đề không chính xác, là một vấn đề của tràn,
trong ý nghĩa đó, tương tự như vậy, làm số nguyên có giới hạn đối với họ
giống như các giá trị điểm nổi?
Trong thế giới một điểm nổi giá trị, chúng tôi chỉ có thể là chính xác như vậy,
sau đó, đôi khi những điều xấu có thể xảy ra,
và các chương trình của chúng tôi có thể có lỗi và lỗi.
Bây giờ ngay cả với số nguyên, bạn có thể chạy vào vấn đề.
Bây giờ một số nguyên không có một điểm thập phân hoặc số sau nó.
Nó chỉ là một số tự nhiên, thông thường.
Vì vậy, những gì có thể đi sai với một int?
Nếu tôi đang sử dụng một int để đếm, những gì có thể đi sai?
Có vẻ đơn giản hơn rất nhiều.
Yeah.
>> TƯỢNG THÀNH VIÊN: Nếu số được [không nghe]
>> DAVID Malan J: Vâng.
Điều gì nếu bạn đếm quá cao, mà bạn không thể diễn tả rằng số thực sự lớn.
Phải không?
Tại một số điểm, bạn sẽ vượt quá ranh giới
của một giá trị 32-bit hoặc một giá trị 64-bit.
Bây giờ một lần nữa, tôi không chắc chắn như thế nào phát âm một giá trị 64-bit,
nhưng tôi biết có một số nguyên 32-bit, giá trị lớn nhất của nó có thể được,
nếu nó chỉ tích cực giá trị, là khoảng 4 tỷ USD.
Vì vậy, nếu tôi cố gắng đếm đến 5 tỷ, một cái gì đó sẽ xảy ra.
Nhưng chúng ta hãy xem những gì, trên thực tế, có thể xảy ra.
Trong thế giới của các số nguyên tràn, nơi bạn, trong một nghĩa nào đó,
tràn năng lực của một số nguyên, những gì có thể xảy ra?
>> Vì vậy, đây là một số nhị phân, đó là một sự nga ra sau 0.
Đó là tất cả 1, và giữ chỗ có, là lũy thừa của 2,
vì vậy đây là nhị phân.
Vì vậy đây là 8, 1 bit trên màn hình.
Và nếu bạn gọi lại hoặc bạn nhanh chóng làm toán,
giá trị những gì đang được đại diện ở đây với những tám 1 bit?
255.
Và thậm chí nếu bạn không phải là khá chắc chắn của toán học, bạn có thể làm điều đó ra.
Hoặc bạn chỉ có thể loại các lý do thông qua nó,
chờ một phút, nếu tôi đại diện cho một giá trị 8 bit,
và tôi đã có 256 giá trị có thể, nhưng là người đầu tiên trong số đó là 0,
Tôi chỉ biết rằng lớn nhất là có được 255,
và đó là điều này có thể được.
>> Vì vậy, giả sử tôi cố gắng thêm 1 giá trị này.
Bạn sẽ làm gì trong lớp trường khi thêm một 1, và nó
không thực sự phù hợp bởi vì bạn phải mang theo 1?
Con số này sẽ là gì để trở thành khi bạn thêm 1?
Nó sẽ trở thành 0.
Phải không?
Bởi vì nếu bạn có bits-- hơn và tôi sẽ cố gắng, loại, loại nó ra here--
nếu chúng ta có nhiều bit hơn, những gì chúng tôi có thể làm ở đây là thêm 1,
và sau đó chúng ta sẽ có được điều này.
Lỗi chính.
Chúng tôi muốn có một chút 1 tất cả các cách trên đây.
>> Nhưng nếu điều này là hữu hạn giá trị, nó chỉ có 8 bit,
và đó là xác định trước bằng máy tính,
đó là 1 cách hiệu quả không có.
Nó chỉ là loại rơi xuống một vách đá.
Và do đó, nếu bạn thêm 1-255, những gì giá trị để bạn dường như nhận được?
0.
Và như vậy con số vô tình, và có lẽ, vô tình,
kết thúc gói xung quanh như thế này.
Vì vậy, những gì có thể được ngụ ý của nó?
Vâng, có một vài điều khác nhau.
Vì vậy, một trong, nó sẽ chỉ tìm kiếm như 0, vô ý,
nhưng bạn có thể loại thấy, ngay cả trong thế giới thực,
cho tốt hơn hoặc tồi tệ hơn, biểu hiện của ý tưởng này của một giới hạn.
Ví dụ, bất kỳ bạn của những người đã từng chơi Lego Star Wars,
không ai xảy ra cho biết số lượng tối đa của đồng tiền
bạn có thể thu thập trong Lego Star Wars?
Hãy đoán dựa trên câu hỏi hàng đầu hiện nay.
Nó lớn hơn 256 hoặc 255.
Đó là 4 tỷ USD.
Vì vậy, nó quay ra, và có một số people--
một số googling xác nhận night-- cuối cùng đã nhận được 4 tỷ đồng tiền vàng,
hoặc có điều gì, trong Lego Star Wars.
Mặc dù rõ ràng, có một cách để lừa các trò chơi,
có một lỗi hoặc tính năng, cho phép bạn chỉ tích luỹ rất nhiều và rất nhiều điểm.
Nhưng lớn nhất có thể giá trị, theo
hình chụp màn hình này của một người nào đó tôi tìm thấy trực tuyến, thực sự là, 4 tỷ.
>> Bây giờ tại sao vậy?
Đó là chính xác 4 tỷ, có lẽ bởi vì một người nào đó quyết định,
người đã viết trò chơi này, rằng họ có thể làm 4 tỷ,
một cái gì đó, một cái gì đó, một cái gì đó, như các giá trị mà tôi đưa lên
với các máy tính trước đó, nhưng nó chỉ là một chút sạch hơn cho con người
để nói rằng số lượng tối đa của coins-- hoặc đinh tán,
như họ gọi them-- bạn có thể thu thập được là 4 tỷ USD.
Và như vậy, tại sao điều này là?
Làm thế nào là trò chơi LEGO thực hiện các truy cập
đó là theo dõi các số tiền bạn có?
Họ đang sử dụng những gì?
TƯỢNG THÀNH VIÊN: Nó dừng lại kể sau 4 tỷ USD.
DAVID Malan J: Nó dừng lại kể sau 4 tỷ đồng,
có nghĩa là bạn có thể suy ra, như một lập trình viên,
rằng họ đang có lẽ sử dụng một số nguyên 32 bit.
Giống như các lập trình viên theo nghĩa đen chỉ đánh máy, int, trong mã của mình,
và đó là kiểu của biến mà họ đang sử dụng để lưu trữ mã của một ai đó.
Vì vậy, có các biểu hiện khác của các loại giới hạn.
>> Vì vậy, tôi đã không chơi game-- này và tôi đã được đọc lên trên lịch sử
để xác nhận như much-- nhưng trong Phiên bản gốc của nền văn minh, nơi
bạn dường như tương tác với nhau khác và có thể tiến hành chiến tranh hoặc có hòa bình,
Gandhi được coi là một trong những các nhân vật ôn hòa nhất, như tôi
hiểu nó, trong lần đầu tiên phiên bản của nền văn minh.
Và trên thực tế, trên thang điểm từ 1-10, gây hấn của ông chỉ là một 1.
Vì vậy bao giờ nên nhẹ tích cực, rõ ràng.
>> Nhưng tại một số điểm, bạn có thể rõ ràng cài đặt nền dân chủ ở địa lý của bạn.
Và nếu bạn cài đặt nền dân chủ vào phiên bản của trò chơi,
sau đó mức độ gây hấn của bạn đi xuống.
Đó là một điều tốt.
Mọi người yên tĩnh hơn rõ ràng, trong tình huống đó.
Nhưng dường như, ai đó đã làm không có một, nếu, điều kiện
trong phiên bản gốc của mã này.
>> Vì vậy, mức độ gây hấn của Gandhi đã đi từ tích cực 1, trừ 2, để tiêu cực 1,
nhưng trò chơi không hiểu các số âm.
Vì vậy, những gì đã xảy ra là sự xâm lược của Gandhi mức tăng từ 1, 0, 1 để tiêu cực,
trong đó đã có hiệu lực của gói xung quanh để được
các nhân vật hung hăng nhất trong các trò chơi, tại một giá trị của 255,
trên thang điểm từ 1-10.
Và kể từ đó, đã có nhiều hóa thân của trò chơi này,
và họ đã giữ nó như một loại trứng Phục Sinh,
rằng Gandhi là rõ ràng khủng khiếp như vậy hung hăng.
Nhưng nó là kết quả của một lỗi lập trình rất đơn giản
trong đó phiên bản rất sớm của trò chơi.
>> Bây giờ đáng lo ngại hơn, nhiều hơn Gần đây, các máy bay Boeing 787
đã được ghi nhận là có một lỗi, không phải là loại thiết bị
bạn đặc biệt muốn có một lỗi.
Và các triệu chứng, mà tôi sẽ đọc ở đây, từ một bài báo trực tuyến,
là điều này, một mô hình máy bay 787 mà đã hoạt động được liên tục
cho 248 ngày có thể mất tất cả dòng điện xoay chiều, AC,
năng lượng điện, do các đơn vị điều khiển máy phát điện,
GCUs, đồng thời đi sâu vào chế Fail-an toàn.
Vì vậy, đây là một cảnh báo ban hành khi vấn đề này đã được phát hiện.
Tình trạng này gây ra bởi một phần mềm truy cập,
nội bộ để các GCUs, vì vậy một số nguyên hoặc một biến,
mà sẽ tràn sau 248 ngày giá năng lượng liên tục.
Boeing là trong quá trình phát triển một phần mềm nâng cấp GCU đó
sẽ khắc phục tình trạng không an toàn.
>> Vì vậy, giống như tên lửa kịch bản, trong đó
họ đã có một số loại biến mà đang đếm, đếm,
và đếm, nhưng dần dần tràn ranh giới của khả năng của mình,
tương tự như đã làm các máy bay chết tiệt có một lỗi tràn bộ biến
sau khi đủ thời gian chạy.
Và do đó, cách lưỡi-in-má làm việc xung quanh vấn đề này
là để thực sự, khởi động lại, máy bay của bạn mỗi 247 ngày, do đó các bộ nhớ bị xóa sổ
và biến đi trở về 0.
Nhưng nhận ra, đây là một rất hóa thân lớn các phần mềm,
nhưng đặc biệt là khi chúng ta nghe về Apple điều hành hệ thống đi vào xe ô tô,
và tự lái xe ô tô từ Google, và bất kỳ số lượng các hiện thân của phần mềm
trong cuộc sống hàng ngày, TV của chúng tôi và đồng hồ, và nhiều hơn nữa,
nhận ra được bao quanh bởi các phần mềm, tất cả đều được viết bởi con người chúng ta.
>> Và như chúng ta tất cả sẽ sớm khám phá, nó rất dễ dàng và rất điển hình
mắc sai lầm khi viết phần mềm.
Và nếu bạn không bắt họ, một số điều xấu có thể xảy ra.
Bây giờ đôi khi, một số điều buồn cười có thể xảy ra,
hoặc ít nhất là đôi khi chúng ta biết để mong đợi một số thứ xấu.
Vì vậy, 0 chia cho 0, từ lớp trường học, nói chung là một điều xấu.
Đó là không xác định.
Và nó quay out-- và hãy xem liệu mic của tôi có thể chọn này up-- rằng Apple
đã có một số vui vẻ với điều này gần đây.
Vì vậy, tôi có một chiếc iPhone ở đây.
Tôi sẽ nói chuyện với Siri và hỏi cô ấy để cung cấp cho tôi câu trả lời 0 chia cho 0.
Những gì được 0 chia cho 0?
>> Siri: Hãy tưởng tượng rằng bạn có 0 cookies, và bạn chia chúng ngang nhau
trong số 0 bạn bè.
Làm thế nào nhiều cookie nào mỗi người nhận được?
Thấy không?
Nó không có ý nghĩa.
Và Cookie Monster là buồn rằng không có cookie.
Và bạn đang buồn mà bạn không có bạn bè.
DAVID Malan J: Đó là loại đáng ghét.
Vì vậy, đây là những gì đã vừa nói đó.
Nó không xác định, nó không được định nghĩa, và quả thật, nhiều ngôn ngữ lập trình
hay, thực sự, trình biên dịch sẽ phát hiện khi bạn, trong một chương trình,
cố gắng chia 0 bằng 0.
Vui nhiều hơn mặc dù điều này, là mà rõ ràng, Cookie quái vật
là trên Twitter những ngày này.
Và ông trả lời cho điều này, với điều này, đó là hoàn toàn đáng yêu.
Nhưng chúng ta hãy xem nhanh một vài cấu trúc khác,
và sau đó đặt một số điều này mã để sử dụng, trong những cách tốt.
Vì vậy, nó quay ra, bên cạnh việc cho vòng, có
một cái gì đó gọi là vòng lặp trong khi, đó trông khác nhau và được thực hiện
một chút differently-- và chúng ta sẽ dần dần thấy examples--
nhưng trong một số ý nghĩa, nó đơn giản bởi vì nó
không cho phép bạn khởi tạo và cập nhật trong vòng ranh giới của các vòng lặp.
Bạn vẫn có thể thực hiện nó.
Vì vậy, bạn có thể làm những điều chính xác cùng với một vòng lặp trong khi, như với một vòng lặp for,
nhưng cú pháp của bạn, ultimately-- như chúng ta sẽ thấy cuối cùng
see-- sẽ là khác nhau.
Thậm chí có một việc phải làm trong khi vòng lặp, mà thực sự là một chút khác nhau,
trong đó trong khi một vòng lặp for và một vòng lặp trong khi luôn luôn
kiểm tra điều kiện đầu tiên của họ, nếu bạn đọc điều này trên xuống dưới,
nó loại trông giống như nó sẽ kiểm tra xem nó của tình trạng cuối cùng bởi vì nó
thực sự là những dòng cuối cùng của mã.
Và quả thực, đó là sẽ có ích trong một số chương trình mà chúng tôi viết,
nếu bạn muốn làm điều gì đó một cách mù quáng chỉ và cuối cùng kiểm tra điều kiện.
Đó không nhất thiết phải là một điều xấu.
Nếu chúng ta muốn biến, chúng ta có thể làm nó trong một vài cách khác nhau.
Và chúng ta đã thấy trong các Foxtrot phim hoạt hình, một cách để làm việc đó,
nơi bạn khai báo biến của bạn, như int counter dấu chấm phẩy,
và sau đó later-- có lẽ tiếp theo dòng, có lẽ 10 dòng later--
bạn thực sự khởi tạo nó.
Vì vậy, những 2 dòng mã khai báo một biến kiểu int
và gọi nó là truy cập, vì vậy nó mang lại cho tôi đủ bit để giữ một int.
Và rồi cuối cùng, nó đặt giá trị 0 vào biến đó.
Nó sắp xếp của 0 và 1 trong một mô hình, mà chúng ta biết từ tuần trước,
đại diện cho số chúng ta biết như là 0.
Hoặc thẳng thắn, bạn có thể làm điều này nhiều ngắn gọn hơn, chỉ như thế này.
>> Bây giờ chúng ta cũng có khả năng để gọi chức năng.
Và trên thực tế, đây là một dòng 2 chương trình, hoặc một trích đoạn của chúng,
cho phép chúng ta thực sự viết một số mã
được một chuỗi từ user-- nhiều như tình nguyện viên của chúng tôi một thời điểm ago--
lưu trữ các kết quả trong một biến gọi tên,
và then-- rất giống với tình nguyện viên của chúng tôi với printf-- in ra những giá trị
bằng cách đi qua trong hai tham số, chuỗi, tiếp theo là các biến
gọi là, tên, chính nó.
Vì vậy, chúng ta hãy có một cái nhìn, trước khi chúng ta trở lại Mario có,
ở một vài doanh nghiệp, ví dụ về điều này.
>> Tôi sẽ đi trước và mở lên, hãy nói, chức năng-0.c.
Và như mọi khi, mã này là có sẵn trên trang web của khóa học,
vì vậy bạn có thể chơi cùng lúc nhà và nhìn vào nó sau này.
Nhưng đây là chương trình trong nó Về bản chất, từ dòng 17 đến 22.
Các chương trình chính là nơi mà các chương trình sẽ luôn luôn bắt đầu.
Chương trình này, rõ ràng, được đi để in ra tên của bạn, đại tràng.
Sau đó nó sẽ gọi GetString, giống như chúng ta đã làm với các tình nguyện viên của chúng tôi.
Và sau đó, đây là thú vị, nó sẽ gọi PrintName.
Hóa ra, tất cả các thời gian này, có có vẻ là một chức năng gọi là PrintName.
Mà in tên của ai đó.
Chúng tôi không cần phải sử dụng printf từ năm qua, có PrintName.
>> Nhưng đó là sai lầm vì PrintName không
đi kèm với C. dân không phát minh ra nó khoảng 40 hay 50 năm trước đây,
Tôi đã làm, thay thế.
Và trên thực tế, nếu tôi di chuyển xuống hơn nữa, thông báo
làm thế nào tôi có thể viết riêng của tôi chức năng trong C. Chúng tôi sẽ cuối cùng
giải thích tại sao chúng ta cứ nói, void, ở một vài nơi,
nhưng đối với ngày hôm nay, chúng ta hãy chỉ cần nhìn vào tên.
>> On line 24, nếu bạn muốn tạo ra chức năng của riêng bạn,
bạn có nghĩa là viết tên của hàm.
Tôi đã chọn PrintName.
Trong ngoặc đơn, bạn sau đó xác định những gì các loại
các yếu tố đầu vào, và có bao nhiêu bạn muốn chức năng này để dùng.
Trong trường hợp này, tôi muốn để mất 1 biến được gọi là, tên,
và nó sẽ là của loại, chuỗi, do đó nó sẽ
có một số chuỗi ký tự.
Và sau đó, program-- này giống như trong Scratch,
bạn có thể có tùy chỉnh câu đố pieces-- là sẽ có hành vi tùy chỉnh này.
Nó sẽ gọi printf đi qua trong, hello, giữ chỗ,
và sau đó nó sẽ cắm trong bất cứ người sử dụng gọi.
>> Vì vậy, đây là một ví dụ về những gì một nhà khoa học máy tính sẽ
trừu tượng gọi hoặc chức năng phân hủy, mà chỉ là
cách ưa thích của saying-- là nếu bạn thích ý tưởng cấp cao này,
giống như tôi muốn chức năng in tên của một ai đó, bạn hoàn toàn
nghĩa là có thể viết printf và sau đó vượt qua trong các đối số mà bạn muốn,
và chương trình sẽ làm việc, vì nó có từ hôm thứ Tư.
Nhưng bạn có thể bắt đầu trừu tượng đi các khái niệm về in ấn một cái tên.
Bạn có thể cung cấp cho nó một cái tên, như PrintName, và điều này
là ý tưởng này của layering từ tuần 0.
>> Từ nay trở đi, tôi và bạn không cần phải biết hoặc chăm sóc như thế nào PrintName được thực hiện.
Có nó sử dụng printf, có thể nó không, ai biết được những gì sử dụng?
Ai quan tâm?
Bây giờ tôi đang nói ở đây, thay vì xuống đây.
Và thực sự, như các chương trình của chúng tôi có được nâng cao hơn và tinh vi,
chúng ta sẽ tiếp tục dùng cho các cấp rằng mảnh câu đố cấp thấp tồn tại.
Bởi vì chúng tôi đã viết cho họ hoặc người khác đã làm, vì vậy
mà sau đó chúng ta có thể xây dựng trên đầu trang của họ.
Chúng ta hãy nhìn vào điều này biến thể, chức năng một.
>> Vì vậy, con này nhiều hơn một chút tiên tiến, nhưng nó quay ra
rằng trong thư viện của CS50, chỉ có một chức năng getInt.
Chúng tôi không nghĩ rằng, năm trước, để thực hiện một chức năng GetPositiveInt.
Và đó là một chút khó chịu vì nếu các bạn đang viết một chương trình trong đó
bạn muốn để có được một dương số nguyên từ người sử dụng,
bạn hoàn toàn có thể sử dụng getInt.
Và bạn hoàn toàn có thể kiểm tra với điều kiện và có thể là một vòng lặp
nếu int mà lớn hơn 0 và la lên với người sử dụng
nếu người đó không cho bạn một số dương.
Nhưng chúng ta hãy xây dựng này xây dựng chặn chính mình, một,
tùy chỉnh Scratch mảnh, nếu bạn sẽ.
Tôi sẽ có một chương trình ở đây mà cuối cùng, tôi
muốn để có thể gọi GetPositiveInt, và tôi muốn được
có thể in ra bất cứ điều gì đó là int.
Nhưng điều này là trừu tượng đi ngay bây giờ.
Nó chỉ được đưa ra một mức độ cao tên mà nói những gì nó làm,
đó là tuyệt vời vì nó rất trực quan để đọc.
Và nếu tôi làm quan tâm những gì bên dưới mui xe, hãy để tôi di chuyển xuống.
Và đó là một chút đáng sợ lúc đầu, đặc biệt là
nếu đây là chương trình đầu tiên của bạn, nhưng chúng ta hãy có một cái nhìn.
>> Tôi không còn nói, void, vì thực ra chức năng,
giống như GetString, có thể trả lại một giá trị với tôi.
Họ không chỉ có để in ra màn hình,
họ thực sự có thể bàn tay tôi điều gì đó.
Và trong khi trước PrintName, Tôi không cần bất cứ điều gì trở lại.
Tôi cần các tác dụng phụ của một cái gì đó hiển thị trên màn hình,
nhưng tôi không cần một con người để đưa cho tôi một cái gì đó trở lại.
Ở đây, với GetPositiveInt, như với getInt,
Tôi muốn được trao cho một cái gì đó trở lại.
Vì vậy, tôi nói không, void, on line 23, nhưng int,
mà nói, chức năng này rằng tôi đang viết,
gọi GetPositiveInt sẽ tay tôi trở lại một số nguyên, không có gì,
không có hiệu lực.
>> Trong khi đó, nó sẽ mất không đầu vào, vì vậy tôi đã, loại, ngược lại nó.
Tôi không đưa ra bất kỳ GetPositiveInt đầu vào, tôi muốn nó để cho tôi sản lượng của nó.
Và sau đó những gì sẽ xảy ra?
Vì vậy, đây là cách tôi có thể khai báo một biến.
Tôi đã thực hiện nó bên ngoài vòng lặp, vì lý do chúng ta sẽ dần dần thấy,
nhưng điều này chỉ mang lại cho tôi 32 bit được gọi là, n,
và tôi đã xác định trước chúng để lưu trữ số nguyên.
Và đây đó, làm trong khi xây dựng, và đây là lý do tại sao nó rất hữu ích.
Nghĩa đen làm điều này, trong khi n là ít hơn 1.
Vì vậy, chúng ta hãy xem những gì sẽ xảy ra.
Tôi in ra, xin vui lòng cho tôi một int tích cực.
Sau đó tôi nhận được một int, sử dụng CS50 của chức năng và được lưu trữ trong n.
>> Và sau đó, những dòng mã có lẽ được thực thi tiếp theo, một cách logic?
Những dòng số?
Yeah, vì vậy 31.
Bạn sẽ không biết điều này cho đến khi bạn đã được kể hoặc loại suy ra nó,
nhưng đó là sự thật.
Nó đi trên xuống dưới và sau đó giữ lặp đi lặp lại.
Vì vậy, nếu tôi đã gõ vào tiếng nói, số tiêu cực 1, n là ít tiêu cực hơn 1?
Yeah.
Bởi vì tiêu cực 1 là ít hơn 1.
Vì vậy, những gì sẽ xảy ra?
Tôi sẽ làm điều này trong khi n là nhỏ hơn 1,
do đó, tôi sẽ quay lại dòng 28.
>> Và mỗi time-- và chúng ta hãy chạy this-- làm cho chức năng 1 để biên dịch nó,
và bây giờ chấm giảm chức năng 1.
Nếu tôi gõ tiêu cực 1, đó là sẽ tiếp tục hét lên với em
cho đến khi tôi hợp tác vì mỗi các yếu tố đầu vào của tôi là ít hơn 1
và nếu đó là trong khi ít hơn 1, Tôi sẽ tiếp tục làm điều này.
Nếu cuối cùng tôi đã cung cấp cho nó một số như 50, may mắn thay, nó nói, cảm ơn cho 50.
Tại sao?
Bởi vì ngay sau khi n không phải là ít hơn 1, tôi ngưng việc bị mắc kẹt trong vòng lặp này,
và từ khóa mới này ngày hôm nay, Bù lại, theo nghĩa đen nào đó.
Vì vậy, tôi đã chỉ cần thực hiện, trong một ý nghĩa, tương đương với GetString,
nơi tôi đang trả lại cho bất cứ ai đang sử dụng cho tôi, một số giá trị.
Nó không phải là một chuỗi, nó là một int.
Vì vậy, một đơn giản, nhanh chóng Ví dụ, nhưng chúng tôi sẽ sớm
thấy một số tinh vi hơn phiên bản vẫn còn.
Trong thực tế, chúng ta hãy nhìn vào một một số, được gọi là return.c.
Và điều này thực sự một chút đơn giản.
Vì vậy, mục đích của chương trình này trong life-- hãy biên dịch và chạy nó,
do đó hãy trở lại, chấm slash, thông báo return--
chương trình chỉ đơn giản là hình khối giá trị 2.
Nó khá ngu ngốc, thật khó code, nó không mất bất kỳ đầu vào,
nhưng nó chứng minh khác chức năng mà tôi đã viết bản thân mình.
Vì vậy, ở đây, tôi đã tuyên bố một biến, được gọi là x, kiểu int,
bằng số 2, hoàn toàn tùy ý.
Đây chỉ là một số in ấn mịn.
Nó nói x là bây giờ, và như vậy chẳng hạn, Cubing dot dot dot.
Và điều kỳ diệu là dường như ở dòng 21.
Tôi gọi một chức năng gọi là, khối lập phương, Tôi đưa cho nó một tờ giấy
với số 2 được viết trên đó, và những gì giá trị, toán học,
Tôi muốn thoát ra khỏi nó?
Cũng như một kiểm tra sự tỉnh táo?
8.
Phải không?
Tôi muốn 2 nhỏ hinh khôi trở lại, từ 2 đến sức mạnh của 3, do đó 8 trở lại.
>> Vì vậy, nơi được khối lập phương thực hiện?
Vâng, việc thông báo nó được thực hiện ở đây.
Và giống như trước đây, một cách logic, mặc dù cú pháp có lẽ là
rất mới với nhiều bạn, Tôi muốn chức năng này
để bàn tay tôi lại một tờ giấy với một int vào nó.
Vì vậy, tôi có một int, các tên là tùy tiện,
nhưng thuận tiện gọi là khối lập phương.
Các đầu vào cho nó, là n gõ số nguyên, do đó
làm thế nào tôi có thể vượt qua trong số 2 trên một tờ giấy.
Và sau đó nó quay ra C hỗ trợ toán học, do đó bạn không có x cho lần,
bạn chỉ cần sử dụng dấu hoa thị cho phép nhân.
Và điều này trả về n lần n lần n, mà chỉ đơn giản là một giá trị giống tiêu.
>> Vì vậy, chúng ta đi đâu với tất cả những điều này?
Điều này chắc chắn là một tour du lịch lốc, yên tâm,
mà trong các siêu phần và trong vấn đề thiết lập 1,
bạn sẽ được đi qua tất cả điều này tất cả các chi tiết.
Và trong vấn đề thiết lập 1, chúng tôi sẽ chuyển tiếp từ thế giới đồ họa của Scratch
một cái gì đó nhiều hơn dòng lệnh trong C. Nhưng chúng ta sẽ rút ra cảm hứng
từ đây trò chơi này từ năm qua, trong đó
sử dụng C và các phiên bản tiêu chuẩn của p tập mà bạn sẽ thực hiện kim tự tháp của Mario.
Và trong phiên bản của hacker của p set, nếu bạn lựa chọn để bầu ra,
bạn sẽ thực hiện nhiều hơn một chút thách thức kim tự tháp với hai đỉnh.
Bạn cũng sẽ thực hiện một Thuật toán, thuật toán tham lam.
Hóa ra có của một số logic thú vị
đằng sau quá trình chạy một trạm thu ngân
và thực sự trao một người nào đó thay đổi trở lại.
Có một thuật toán khá đơn giản, bạn thậm chí có thể
nắm bắt trực giác đầu tiên khi bạn đọc it-- nhận ra đó là những gì tôi đã luôn luôn
thực hiện bất cứ lúc nào tôi đã cho một người nào đó một số back-- tiền đó cho phép bạn luôn luôn
giảm thiểu số lượng tiền giấy hoặc tiền kim loại
rằng bạn đang trả lại cho người sử dụng.
Và điều này, tất nhiên, là hấp dẫn bởi vì nếu bạn đi đến CVS hoặc có điều gì,
bạn không muốn trở thành tay một bó toàn bộ những người
hoặc một bó toàn bộ các đồng xu.
Bạn muốn con số thấp nhất tiền xu, có lẽ, có thể.
>> Cuối cùng, bạn cũng sẽ được thử thách đến lĩnh trong thế giới của nước
và thực sự có được một sự đánh giá cho một ánh xạ giữa lãi suất của dòng chảy,
của thích, nước trong một vòi sen, chỉ cần bao nhiêu nước được sử dụng.
Và ám chỉ trong đó, sẽ được Clip này ở đây,
mà chúng ta sẽ kết thúc vào cho chỉ cần 60 giây, mà
vẽ nên một bức tranh về dòng chảy thấp tắm đứng.
>> [VIDEO PLAYBACK]
-Được rồi.
Tôi có mọi thứ ở đây.
Tôi đã nhận các Cyclone F Series, Hydra, Jetflow, Stockholm
Supersteam, bạn tên nó.
>> -Và Những gì bạn đề nghị?
>> Được -Điều gì bạn đang tìm kiếm?
>> Người đàn ông -Power.
Power.
-like Silkwood.
-đó Là đối với bức xạ.
-Đúng thế.
-Bây Giờ cái gì đây?
-đó Là Commando 450.
Tôi không bán mà một.
>> -Nhưng Đó là những gì chúng ta muốn.
Đó là một commando 450.
>> -Không Tin tôi.
Nó chỉ được sử dụng trong các rạp xiếc.
Nó cho voi.
>> -I'll Trả bất cứ điều gì.
>> -Điều Gì về Jerry?
>> -Anh Không thể xử lý đó.
Anh ấy là tinh tế.
Oh yeah.
[END PLAYBACK]
DAVID Malan J: Tất cả các quyền.
Đó là nếu cho CS50.
Chúng tôi sẽ gặp bạn vào tuần tới.
>> SPEAKER 1: [? Scully?], [? Ian,?] theo như dự án outro này,
những gì đã các bạn đưa ra?
>> SPEAKER 2: Vâng, chúng tôi đã đưa ra nó một loạt các tư tưởng,
và chúng tôi nghĩ rằng cách tốt nhất đối với:
>> SPEAKER 3: Tôi May?
>> SPEAKER 2: Yeah.
Bằng mọi cách, thực sự.
>> SPEAKER 3: Vì vậy, tôi nghĩ rằng chúng ta có thể tóm tắt ý tưởng của chúng tôi
cho outros với một không có gì word--.
>> DAVID Malan J: Không có gì?
SPEAKER 3: Không có gì.
DAVID Malan J: Vậy nghĩa là gì?
SPEAKER 3: Các outros là về không có gì.
SPEAKER 2: Vâng, tôi có nghĩa là, trong triết học, Tôi có nghĩa là, không có gì luôn luôn là một cái gì đó.
SPEAKER 1: Vậy what's-- tiền đề là những gì?
SPEAKER 3: Vì vậy, nó giống như cuộc sống.
ĐƯỢC.
Bạn đã làm gì hôm nay?
>> DAVID Malan J: Tôi đứng dậy, ăn sáng, và đến làm việc.
>> SPEAKER 3: Đó là một outro.
SPEAKER 2: Nhưng, tôi có nghĩa là, không nên một cái gì đó xảy ra với anh ta trên the--
SPEAKER 3: Không, không, không, không.
Chẳng có gì xảy ra.
>> SPEAKER 1: Vậy tại sao chúng ta lại xem?
>> SPEAKER 3: Vì nó là một outro cho CS50.
>> DAVID Malan J: Chưa.