None (1) Flashcards

1
Q

Vì vậy, những gì chúng ta sắp xem, những gì chúng ta sắp viết từ giờ trở đi, chúng ta sẽ bắt đầu gọi mã nguồn. Mã mà bạn, lập trình viên con người viết, từ đó trở đi được gọi là mã nguồn.

Machine code

A
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Vì vậy, thiết kế là chủ quan hơn.
6:26
Đó là một nghệ thuật học được nhiều hơn, theo đó hai người cuối cùng có thể không đồng ý về phiên bản nào của chương trình được thiết kế tốt hơn.
6:32
Nhưng chúng tôi sẽ cung cấp cho bạn các khối xây dựng và nguyên tắc trong những tuần tới để bạn có thể tự hiểu rõ hơn nếu mã của riêng bạn được thiết kế tốt.

A
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Trong thế giới của Scratch, nó đơn giản như nhấp vào lá cờ xanh vì về cơ bản MIT đã làm tất cả những công việc nặng nhọc ở đó để tìm ra
4:57
làm cách nào để chuyển đổi các mảnh ghép đồ họa này thành mã máy bên dưới. Nhưng bây giờ bắt đầu từ hôm nay, khi chúng ta bắt đầu học lập trình và khoa học máy tính
5:04
đúng rồi, bây giờ sức mạnh đó chuyển sang bạn.

A
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Tuy nhiên, nó chỉ là một phần trong vấn đề hôm nay. Quan trọng hơn, kể từ hôm nay trở đi, là việc viết mã tốt. Và đây là thứ mà bạn không thể học được trong một sớm một chiều. Nó cần có thời gian. Nó cần thực hành.
5:36
Cũng giống như việc viết một bài luận về bất kỳ chủ đề nào có thể mất thời gian, thực hành và lặp đi lặp lại theo thời gian. Nhưng trong một lớp lập trình như CS50, chúng tôi
5:44
nói chung sẽ mong muốn đánh giá chất lượng mã theo ba trục này.

correctness: chính xác
design: thiết kế
style: phong cách

A
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Nó có đúng không, đầu tiên và quan trọng nhất? Liệu mã làm những gì nó phải làm? Rốt cuộc, nếu nó không, thì, vấn đề là gì
5:54
viết nó ở nơi đầu tiên? Vì vậy, không cần phải nói rằng bạn muốn mã bạn viết là chính xác. Và rõ ràng là không phải lúc nào cũng vậy.
6:00
Một lần nữa, bất cứ khi nào máy Mac, PC hoặc điện thoại của bạn gặp sự cố, một số người ở đâu đó đã viết lỗi– đó là mã có lỗi.
6:07
Nhưng tính chính xác của mã sẽ là mục tiêu đầu tiên và quan trọng nhất.

A
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Và chúng ta đã thấy một chút về điều này vào tuần trước khi tôi đề xuất rằng chúng ta có thể thiết kế các chương trình scratch thậm chí còn tốt hơn,
6:19
có thể bằng cách sử dụng các vòng lặp thay vì chỉ bằng cách sao chép và dán lặp đi lặp lại cùng một khối. Vì vậy, thiết kế là chủ quan hơn.
6:26
Đó là một nghệ thuật học được nhiều hơn, theo đó hai người cuối cùng có thể không đồng ý về phiên bản nào của chương trình được thiết kế tốt hơn.
6:32
Nhưng chúng tôi sẽ cung cấp cho bạn các khối xây dựng và nguyên tắc trong những tuần tới để bạn có thể tự hiểu rõ hơn nếu mã của riêng bạn được thiết kế tốt.
6:40
Và tại sao điều đó lại có giá trị? Chà, mã của bạn được thiết kế càng tốt thì thường chạy càng nhanh, bạn hoặc đồng nghiệp sẽ càng dễ bảo trì mã hơn
6:47
nếu bạn đang làm việc với những người khác trong thế giới thực. Vì vậy, thiết kế tốt là một điều tốt. Nó giúp bạn truyền đạt ý tưởng của mình, giống như trong một bài luận tiếng Anh điển hình.

A
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Và cuối cùng, tuần này chúng ta sẽ nói về phong cách. Và đây thực sự chỉ là tính thẩm mỹ của mã của bạn.
6:59
Hóa ra máy tính thường không quan tâm mã thực của bạn cẩu thả đến mức nào,
7:04
trong thế giới mã hóa, hóa ra bạn không thực sự cần phải thụt lề mọi thứ theo một cách đẹp đẽ.
7:10
Bạn không cần phải đánh số trang như trong một bài luận. Máy tính thường không quan tâm, nhưng con người thì có.
7:16
Trợ giảng thì có. Bạn sẽ quan tâm vào ngày hôm sau khi bạn chỉ đang cố hiểu mã của mình làm gì.
7:21
Vì vậy, cuối cùng chúng ta sẽ tập trung vào phong cách, tính thẩm mỹ của mã mà bạn đang viết.

A
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Tuy nhiên, ở đây có một giao diện mà nhiều người có thể chưa biết. Đó là cửa sổ terminal.
9:44
Và một cửa sổ terminal cung cấp cái được gọi là Giao diện Dòng lệnh hoặc CLI.
9:49
Và điều này trái ngược với Giao diện Người dùng Đồ họa hoặc GUI. Bây giờ, bạn và tôi hàng ngày đang sử dụng GUI trên điện thoại và máy tính của chúng ta.
9:57
Và GUI thực ra là đồ họa - vì vậy có menu, nút và biểu tượng. Và bạn thường sử dụng ngón tay hoặc touchpad hoặc chuột để tương tác với nó. Nhưng hóa ra nhiều lập trình viên - họ nói rằng hầu hết các lập trình viên, ít nhất là theo thời gian, thích sử dụng CLI, Giao diện Dòng lệnh, nơi bạn thực sự làm mọi thứ hơi phức tạp chỉ thông qua bàn phím.
10:20
Tại sao? Thì với việc sử dụng bàn phím, chỉ có nhiều tính năng được tích hợp vào hầu hết các máy tính.
10:26
Hóa ra, hầu hết chúng ta có thể gõ nhanh hơn là bạn có thể chỉ tay vào và nhấp chuột. Và vậy điều đó dẫn đến việc tiết kiệm thời gian hiệu quả theo thời gian.
10:32
Vì vậy, theo thời gian, bạn sẽ cảm thấy thoải mái sử dụng cửa sổ terminal này để làm những việc như biên dịch mã hoặc tạo chương trình của mình,
10:39
cũng như chạy nó. Ban đầu, bạn sẽ không có thói quen chỉ đôi lần nhấp chuột vào biểu tượng như chúng ta làm trong thế giới thực của chúng ta.
10:45
Bạn sẽ làm theo cách của lập trình viên. Tuy nhiên, điều đó không loại trừ việc thêm biểu tượng và khả năng nhấp chuột, v.v.

A
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Và xa xa bên trái là cái gọi là Activity Bar,
11:09
và đây là nơi bạn nhận được rất nhiều menu và nút truyền thống. Vì vậy, VS Code tự cung cấp cho bạn cả GUI và CLI.
11:16
Nhưng chính trong CLI, cửa sổ đầu cuối, vùng dưới cùng của màn hình mà chúng ta thực sự sẽ nhập hầu hết các lệnh của mình.
11:22
Và nói chung trong lớp, tôi sẽ giấu tất cả những thứ đồ họa không mấy thú vị.
11:28
Vì vậy, như đã nói, hãy để tôi thực sự chuyển sang phiên bản trực tiếp của Mã VS. Và tôi thực sự đã ẩn trong Activity Bar.
11:34
Tôi thực sự đã ẩn File Explorer. Vì vậy, những gì tôi có ở đây để hiển thị là một khu vực thực sự lớn để viết mã và một cửa sổ đầu cuối thực sự lớn ở phía dưới.

A
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

code hello.c
make hello
./hello

A
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Vì vậy, nếu tôi không mắc lỗi đánh máy nào, Enter, dường như không có gì xảy ra.
14:37
Và đó là một điều tốt. Hầu như luôn luôn, nếu không có gì xuất ra trên màn hình, thì bạn đã làm tốt. Bạn đã không phạm sai lầm nào.
14:43
Bạn đã không bị la mắng. Không có thông báo lỗi. Vì vậy, đây thực sự là một điều tốt.

A
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

tiêu chuẩn io: standard io

A
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

statement: printf(“Hello, world /n”);
escape sequence: /n

A
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

header file : tuyên bố chức năng tồn tại

A
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Lưu ý rằng tài liệu của nó không nhất thiết phải thân thiện với người dùng.
33:52
Nhưng những gì chúng tôi có cho khóa học là phiên bản đơn giản hóa của tài liệu chính thức dành cho C tại URL này tại đây, manual.cs50.io.
34:01
Vì vậy, trong thế giới của C và các ngôn ngữ khác, có những thứ được gọi là trang thủ công. Và đây chỉ là tài liệu dựa trên văn bản
34:08
thành thật mà nói, nó thường được viết bằng một giọng văn mà bạn phải là một lập trình viên có kinh nghiệm mới hiểu được phần nào.
34:14
Vì vậy, những gì chúng tôi đã làm trong phiên bản này của cùng một tài liệu là chúng tôi đã nhập tất cả các tài liệu chính thức ban đầu,
34:20
nhưng chúng tôi đã thêm các bản dịch ít thoải mái hơn bằng tiếng Anh cho nhiều chức năng mà bạn có thể chỉ sử dụng trong lớp
34:26
để giúp đỡ bạn trên tàu.

A
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Nhưng hóa ra tài liệu cuối cùng sẽ luôn là nguồn có thẩm quyền của bạn cho những câu hỏi như, tôi có thể làm gì,
35:16
và làm thế nào tôi có thể làm điều đó?

A
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
17
Q

Hóa ra trong C, đầu ra thực sự là
35:28
khá dễ dàng, nói một cách tương đối, một khi bạn đã quen với tất cả các dấu ngoặc nhọn, dấu ngoặc đơn, dấu ngoặc kép, v.v.
35:34
Nhưng đầu vào là một chút khó khăn hơn. Và nếu bạn đã lập trình trước đó, thì việc nhập liệu không khó đến thế trong Python.
35:41
Nó không khó để làm trong Java. Điều đó khó thực hiện hơn trong C. Và chúng ta sẽ thấy lý do tại sao sau vài tuần nữa.

A
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
18
Q

Vì vậy, trong C, khi bạn sử dụng một dấu bằng duy nhất,
38:58
điều đó có nghĩa là sao chép giá trị bên phải sang giá trị bên trái– từ phải sang trái.

A
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
19
Q

Bây giờ, hãy để tôi đề xuất rằng một điều phổ biến trong lập trình là ngay khi chúng ta đưa ra quyết định về cách thiết kế một thứ gì đó,
48:57
chúng ta thường dồn mình vào một góc và hối tiếc về một quyết định. Có ai có thể nghĩ ra vấn đề phát sinh từ việc sử dụng %s làm trình giữ chỗ không
49:08
trong chuỗi này để printf? Điều gì có thể sai nếu chúng ta sử dụng phần trăm theo cách đặc biệt này?
49:14
KHÁN GIẢ: [KHÔNG NGHE ĐƯỢC] DAVID J. Malan: Vâng. Nếu bạn thực sự muốn nói, vì bất kỳ lý do kỳ lạ nào,
49:20
%s trên màn hình– hay thành thật mà nói, thậm chí chỉ một %. Nó chỉ ra rằng một dấu hiệu phần trăm được xử lý
49:25
đặc biệt bên trong chuỗi printf. Vậy giải pháp ở đây là gì?
49:31
Có nhiều kiểu giải pháp khác nhau cho những vấn đề như thế này. Nhưng giả sử bạn muốn nói, tôi có 100% chẳng hạn.
49:40
Hãy để tôi tiếp tục và thay đổi điều này hoàn toàn. Vì vậy, tôi đã đạt 100% trong bài kiểm tra của bạn hoặc bất cứ điều gì.
49:47
Được rồi, hãy để tôi tiếp tục và chạy chào, Enter. Được rồi, do đó, công cụ xác định chuyển đổi không hợp lệ.
49:52
Ý tôi là, tôi không biết điều này có nghĩa là gì, nhưng nó nhấn mạnh dấu phần trăm là có vấn đề. Chà, hóa ra con người nhiều năm trước đã quyết định, ugh, được rồi, chết tiệt.
50:00
Chúng tôi đã sử dụng %. Vâng, hai dấu hiệu phần trăm sẽ có nghĩa là một phần trăm, theo nghĩa đen.

A
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
20
Q

Đây là một câu hỏi làm rõ hơn. Chính xác thì %s có nghĩa là gì?
50:52
DAVID J. Malan: Nó chỉ là một phần giữ chỗ. Nó được gọi là mã định dạng và nó chỉ có nghĩa thông thường là nhập một số giá trị
50:58
đây. Và printf– những người đã viết printf nhiều thập kỷ trước đã quyết định xử lý %s
51:04
đặc biệt. Tại sao? Chỉ vì. Họ cần một số giữ chỗ. Họ quyết định rằng, ồ, sẽ không có ai thực sự muốn gõ %s.
51:10
Và nếu có, họ chỉ có thể làm %%s. Vì vậy, họ quyết định triển khai printf theo cách mà họ có mã
51:17
phân tích bất kỳ văn bản nào xuất hiện, tìm kiếm %s, rồi bằng cách nào đó chèn các giá trị tiếp theo vào trình giữ chỗ đó.

A
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
21
Q

Tôi vẫn cần phải làm gì? ĐỐI TƯỢNG: Dấu chấm phẩy. DAVID J. Malan: Vì vậy, tôi cần dấu chấm phẩy ở cuối. ĐỐI TƯỢNG: Và int đầu tiên.
1:01:26
DAVID J. Malan: Và int ở đầu. Bạn là lập trình viên, bắt đầu từ hôm nay, cần quyết định bạn là gì
1:01:31
sẽ được lưu trữ trong các biến của bạn. Và bạn chỉ cần nói với máy tính điều đó để nó biết. Bây giờ, như một lời giới thiệu cho các ngôn ngữ như Python, các ngôn ngữ hiện đại hơn,
1:01:38
hóa ra, con người đã nhận ra, chà, điều này thật ngu ngốc. Tại sao máy tính không thể phát hiện ra rằng tôi đang đặt một int ở đó?
1:01:44
Tại sao tôi phải chủ động nói ra? Vì vậy, trong một số ngôn ngữ ngày nay, như Python sẽ loại bỏ một số cú pháp này, sẽ loại bỏ dấu chấm phẩy.
1:01:50
Nhưng hiện tại chúng tôi đang thực sự xem xét nguồn gốc của cách thức hoạt động của tất cả những thứ này. Được rồi, vậy là tôi đã hoàn thành một dòng kết thúc bằng dấu chấm phẩy.
1:01:57
Để tôi làm cái khác.

A
22
Q

Và ở đây, tôi cũng sẽ giúp bạn tiết kiệm một số thao tác gõ phím. Hãy để tôi xóa màn hình của tôi. Thay vì liên tục gõ ./this và ./that,
1:03:30
bạn cũng có thể sử dụng các phím mũi tên trên bàn phím trong Mã VS để cuộn ngược thời gian. Vì vậy, nếu tôi nhấn Lên một lần, đó là lệnh cuối cùng tôi đã viết.
1:03:37
Nếu tôi làm điều đó Lên hai lần, thì tôi đã viết lệnh thứ hai cho đến lệnh cuối cùng. Vì vậy, đôi khi nếu bạn thấy tôi làm mọi việc nhanh,
1:03:43
chỉ là do tôi gian dối và xuyên tạc lịch sử của mình như vậy thôi.

A
23
Q

Và chúng ta nên xem– huh. Tôi đã làm gì sai?
1:04:24
Tại sao tôi không thấy bất kỳ đầu ra nào khác? Vâng? ĐỐI TƯỢNG: Bạn đã thay đổi mã của mình khi xây dựng lại. Bạn cần phải biên dịch nó.
1:04:30
DAVID J. Malan: Chính xác. Bạn phải tập thói quen sau khi bạn thay đổi mã biên dịch lại nó

A
24
Q

Tôi đã từng làm điều gì đó hơi khác một chút mà không giải thích được.
1:09:19
Bạn có nhìn thấy nó không? ĐỐI TƯỢNG: Dấu nháy đơn. DAVID J. Malan: Vâng. Vì vậy, tôi đột nhiên sử dụng dấu ngoặc đơn cho các ký tự đơn lẻ của mình
1:09:27
và dấu ngoặc kép cho chuỗi văn bản thực tế của tôi. Đây là một điều cần thiết trong C. Khi bạn xử lý các chuỗi, chẳng hạn như các chuỗi
1:09:34
của văn bản, chẳng hạn như tên của ai đó, một câu, một đoạn văn, bất kỳ thứ gì thực sự nhiều hơn một ký tự, bạn thường sử dụng dấu ngoặc kép.
1:09:41
Và thực sự, bạn phải. Khi xử lý các ký tự đơn lẻ có chủ ý, chẳng hạn như tôi ở đây vì y hoặc n,
1:09:47
bạn phải sử dụng dấu ngoặc đơn để thay thế. Tại sao? Bởi vì điều đó đảm bảo rằng máy tính biết rằng đó thực sự là một ký tự chứ không phải một chuỗi.
1:09:54
Vì vậy, dấu ngoặc kép dành cho chuỗi. Dấu ngoặc đơn dành cho ký tự.

A
25
Q

Tôi đã từng làm điều gì đó hơi khác một chút mà không giải thích được.
1:09:19
Bạn có nhìn thấy nó không? ĐỐI TƯỢNG: Dấu nháy đơn. DAVID J. Malan: Vâng. Vì vậy, tôi đột nhiên sử dụng dấu ngoặc đơn cho các ký tự đơn lẻ của mình
1:09:27
và dấu ngoặc kép cho chuỗi văn bản thực tế của tôi. Đây là một điều cần thiết trong C. Khi bạn xử lý các chuỗi, chẳng hạn như các chuỗi
1:09:34
của văn bản, chẳng hạn như tên của ai đó, một câu, một đoạn văn, bất kỳ thứ gì thực sự nhiều hơn một ký tự, bạn thường sử dụng dấu ngoặc kép.
1:09:41
Và thực sự, bạn phải. Khi xử lý các ký tự đơn lẻ có chủ ý, chẳng hạn như tôi ở đây vì y hoặc n,
1:09:47
bạn phải sử dụng dấu ngoặc đơn để thay thế. Tại sao? Bởi vì điều đó đảm bảo rằng máy tính biết rằng đó thực sự là một ký tự chứ không phải một chuỗi.
1:09:54
Vì vậy, dấu ngoặc kép dành cho chuỗi. Dấu ngoặc đơn dành cho ký tự.

A
26
Q

Và trong các ngôn ngữ khác, thậm chí còn có nhiều cách hơn
1:14:13
để chỉ chuẩn hóa đầu vào của người dùng, loại bỏ bất kỳ ký tự khoảng trắng nào mà họ có thể đã vô tình nhấn phải, buộc mọi thứ phải viết thường.
1:14:19
Trong C, chúng tôi sẽ phải làm việc nhiều hơn một chút để làm điều đó. Nhưng trên thực tế, vào đầu tuần tới, chúng ta sẽ xem chúng ta có thể làm điều đó như thế nào.
1:14:26
Nhưng hiện tại chúng tôi đang so sánh thực sự chỉ những giá trị theo nghĩa đen này.

A
27
Q

Để ý một bên mỗi khi bôi đậm các dòng bạn sẽ thấy các chấm nhỏ xuất hiện.
1:16:22
Đây chỉ là một gợi ý trực quan để bạn tính xem mình đã thụt vào bao nhiêu khoảng trắng. Mã VS, giống như nhiều trình chỉnh sửa, sẽ tự động thụt lề mã cho bạn.
1:16:30
Tôi đã không nhấn phím cách bốn lần mỗi lần. Tôi thậm chí còn chưa nhấn Tab. Tuy nhiên, trong C, quy ước thực sự là thụt lề các dòng
1:16:38
nơi thích hợp bằng bốn khoảng trắng

A
28
Q

Chính xác. Nó kêu meo meo ba lần.
1:16:55
Nhưng tất nhiên, điều này không được thiết kế tốt. Nó không được thiết kế tốt trong Scratch tuần trước. Tại sao? Tôi nên làm gì khác đi?
1:17:03
Vâng? ĐỐI TƯỢNG: Một vòng lặp? ĐỐI TƯỢNG: Đây có thể là một vòng lặp. DAVID J. Malan: Vâng. Đó là một cơ hội hoàn hảo cho một vòng lặp.
1:17:09
Tại sao? Bởi vì nếu bạn muốn thay đổi có thể cách viết hoa của những từ này, hoặc bạn muốn thay đổi âm thanh giống như tiếng gâu của con chó hay gì đó,
1:17:16
bạn sẽ phải thay đổi nó một, hai, ba chỗ. Và đó chỉ là loại ngu ngốc, phải không? Trong mã, lý tưởng nhất là bạn nên thay đổi mọi thứ ở một nơi.

A
29
Q

Chính xác. Nó kêu meo meo ba lần.
1:16:55
Nhưng tất nhiên, điều này không được thiết kế tốt. Nó không được thiết kế tốt trong Scratch tuần trước. Tại sao? Tôi nên làm gì khác đi?
1:17:03
Vâng? ĐỐI TƯỢNG: Một vòng lặp? ĐỐI TƯỢNG: Đây có thể là một vòng lặp. DAVID J. Malan: Vâng. Đó là một cơ hội hoàn hảo cho một vòng lặp.
1:17:09
Tại sao? Bởi vì nếu bạn muốn thay đổi có thể cách viết hoa của những từ này, hoặc bạn muốn thay đổi âm thanh giống như tiếng gâu của con chó hay gì đó,
1:17:16
bạn sẽ phải thay đổi nó một, hai, ba chỗ. Và đó chỉ là loại ngu ngốc, phải không? Trong mã, lý tưởng nhất là bạn nên thay đổi mọi thứ ở một nơi.

A
30
Q

building block: variable
variable: sử dụng khi nói đến hàm
dấu bằng biểu thị phép gán từ phải sang trái

A
31
Q

Vì vậy, chỉ khi bạn tạo một biến trong C, bạn mới sử dụng từ chuỗi hoặc từ int hoặc bất kỳ từ nào khác mà cuối cùng chúng ta sẽ
1:19:19
xem

A
32
Q

counter=counter +1
counter+=1
counter++

A
33
Q

int i = 3;
while (i > 0)
{
printf(“meow\n”);
i = i - 1;
}

int i = 0;
while (i < 3)
{
printf(“meow\n”);
i++;
}
(phổ biến hơn)

Chà, lặp lại hoặc lặp lại điều gì đó ba lần có nghĩa là gì? Chà, nó giống như làm điều gì đó ba lần,
1:21:35
và sau đó thực hiện, sau đó đếm ngược, sau đó thực hiện, sau đó đếm ngược, rồi thực hiện, cho đến khi bạn không còn đếm được nữa.

A
34
Q

Trước đó tôi đã khẳng định rằng khi sử dụng các biến đơn lẻ, mọi người thường chỉ gọi nó là i cho int hoặc c cho char,
1:22:41
hoặc s cho chuỗi trừ khi bạn có nhiều biến

A
35
Q

vòng lặp: while, for

A
36
Q

for (int i =0; i < 3; i++)
{
printf(“meow\n”);
}

A
37
Q

Meo meo mãi, hơi phiền. Nhưng bạn có thể nghĩ ra những trường hợp phổ biến mà bạn có thể muốn viết mã hoặc sử dụng một chương trình lặp mãi mãi không?
1:32:19
Vâng? ĐỐI TƯỢNG: Phát nhạc trong toàn bộ trò chơi. DAVID J. Malan: Vâng, chơi nhạc. Giống như danh sách phát Spotify, cứ lặp đi lặp lại
1:32:25
sẽ là một số loại vòng lặp. ĐỐI TƯỢNG: Kiểm tra va chạm. DAVID J. Malan: Kiểm tra các va chạm trong Scratch, để xem liệu có thứ gì đó nảy ra khỏi tường hoặc một sprite khác không.
1:32:32
Vâng? ĐỐI TƯỢNG: Ồ, đang kiểm tra đầu vào. DAVID J. Malan: Kiểm tra đầu vào.
1:32:37
Vì vậy, vâng, get_string về cơ bản chỉ đợi ở đó mãi mãi để tôi nhập một số thông tin đầu vào cho đến khi tôi thực hiện.
1:32:43
ĐỐI TƯỢNG: Kiểm tra thời gian. DAVID J. Malan: Kiểm tra thời gian và thực sự duy trì thời gian của con người, giống như một chiếc đồng hồ treo tường. Đằng sau bạn?
1:32:48
Có giống nhau không? ĐỐI TƯỢNG: Tôi định nói là kiểm tra thời gian. DAVID J. Malan: OK, đang kiểm tra thời gian. Và một cái nữa? Phát hiện có phím bấm.
1:32:53
Giống như trong Scratch, chỉ cần chờ đợi một loại sự kiện nào đó xảy ra, giống như trên điện thoại hoặc trình duyệt.

A
38
Q

building block forever

A
39
Q

Một mô hình phổ biến khác trước đúng và sai
1:33:48
trở nên phổ biến sẽ là làm điều này thay vào đó– thay đổi trong khi 1.
1:33:54
Bạn có thể thấy trong các ví dụ và văn bản trực tuyến và những thứ tương tự, trong khi 1 thực sự giống nhau.
1:33:59
Bất kỳ giá trị nào bằng 0 thường được máy tính hiểu là sai.
1:34:04
Bất kỳ giá trị nào là 1 hoặc bất kỳ giá trị khác không nào khác thường được hiểu là đúng

A
40
Q

Nhưng Control-C để hủy sẽ làm gián đoạn chương trình đang chạy

A
41
Q

lệnh cho cửa sổ đầu cuối
cd: locate
cp: copy
ls: list
mkdir: make dir
mv: move
rm: remove
rmdir: remove dir

A
42
Q

chẳng hạn, đã tạo một tệp có tên là hello thay vì hello.c. Vì vậy, bạn đã ở trong một tình huống vô tình làm điều này và nhấn Enter.
1:40:27
Và sau đó bạn tiếp tục và nhập tất cả mã của mình như thế này. Và sau đó trong cửa sổ đầu cuối của bạn, bạn
1:40:32
đang cố chào, Enter. Và điều này bây giờ đã không thực sự làm bất cứ điều gì.
1:40:38
Tôi không thể– Tôi đang đánh– Tôi đang cố chạy lệnh. Tôi đã bị từ chối cấp phép, như ít nhất một trong số các bạn đã làm.
1:40:44
Bây giờ, tại sao vậy? Vâng, chúng ta hãy làm một kiểm tra nhanh. Nếu tôi làm ls, tôi thấy bây giờ xin chào, nhưng xin chào có
1:40:50
không có dấu hoa thị bên cạnh, có nghĩa là nó không thể thực thi được. Đó là mã của tôi. Tại sao? Chà, hãy để ý phần trên cùng của tab của tôi đã xác nhận, ồ, tôi đã làm hỏng việc.
1:40:57
Tôi đã không đặt tên cho tệp của mình là hello.c, mà nó phải như vậy. Vậy bạn làm gì? Chà, bạn có thể sao chép nó một cách khéo léo, tạo một tệp mới, dán nó vào.
1:41:05
Hoặc không, không, không. Chúng tôi biết cách đổi tên mọi thứ ở đây vì đó là một trong những lựa chọn của chúng tôi. Hãy để tôi làm chuyện này.
1:41:11
Để tôi làm mv cho di chuyển, xin chào, rồi chào.c, rồi nhấn Enter.
1:41:17
Bạn sẽ thấy tab đóng lại vì xin chào không còn tồn tại. Nhưng nếu bây giờ tôi gõ ls, bạn sẽ thấy, ah, có hello.c.

A
43
Q

Hãy yên tâm rằng trong các bộ bài tập và phòng thí nghiệm, hầu như chúng tôi sẽ– chắc chắn là trong những tuần đầu tiên của lớp học– cung cấp cho bạn chính xác các lệnh để nhập.
1:43:50
Rất có thể do còn mới nên nhiều bạn sẽ vô tình gõ sai lệnh. Không có gì to tát.
1:43:56
Chỉ cần nhớ rằng bạn có nhiều cách khác nhau để giải quyết những vấn đề này. Bạn đã có File Explorer đồ họa, sẽ cảm thấy quen thuộc hơn một chút.
1:44:02
Nhưng theo thời gian, bạn sẽ bắt đầu biết và thành thật mà nói, có lẽ bạn sẽ thích những lệnh như thế này– vì vậy, cd cho Change Directory,

A
44
Q

vì vậy, cd cho Change Directory,
1:44:08
cp để sao chép tệp, ls để tạo danh sách, mkdir để tạo thư mục–
1:44:14
tạo một thư mục mới tại dòng lệnh thay vì bằng nút– mv để di chuyển hoặc đổi tên, rm để–
1:44:21
ĐỐI TƯỢNG: Xóa. DAVID J. Malan: Xóa. Vì vậy, hãy cẩn thận với cái đó. Rmdir, xóa thư mục. Và còn hàng chục, hàng trăm câu lệnh khác.
1:44:28
Bạn sẽ không cần nhiều trong số chúng, nhưng chúng ta sẽ bắt đầu làm trầy xước bề mặt nhiều hơn theo thời gian.Nhưng cuối cùng, giao diện dòng lệnh này
1:44:35
sẽ là một cơ chế mạnh mẽ hơn, một cơ chế có năng lực hơn và cuối cùng là một cơ chế hiệu quả hơn
1:44:40
để viết mã, chạy lệnh, giải quyết vấn đề, phân tích dữ liệu tổng quát hơn, mặc dù biết rằng sẽ có
1:44:46
sớm trở thành một số khó khăn chỉ vì nó có thể còn quá mới đối với nhiều bạn.

A
45
Q

Nhưng bây giờ hãy để tôi lướt qua và đề xuất rằng chúng ta cố gắng thực hiện trong nghệ thuật ASCII– ASCII, một lần nữa, là mã ánh xạ các số
1:46:03
sang các chữ cái, ít nhất là đối với tiếng Anh

A
46
Q

Bây giờ, vẫn còn một chút cẩu thả ở đây. Nếu tôi muốn cái này luôn là hình vuông chỉ vì đó là
1:53:16
nó trông như thế nào trong trò chơi, vâng, tôi có thể thay đổi nó thành hình vuông 4 nhân 4 bằng cách làm điều này hoặc lưới 5 nhân 5–
1:53:24
rất tiếc– bằng cách làm điều này. Tại sao đây có lẽ không phải là thiết kế tốt nhất để tiếp tục thay đổi số khi
1:53:30
Tôi muốn thay đổi kích thước? Trường hợp này có thể đi sai? Vâng? KHÁN GIẢ: Nếu là hình vuông, [KHÔNG NGHE ĐƯỢC]
1:53:38
DAVID J. Malan: Vâng. Nếu nó luôn là một hình vuông và chiều cao sẽ bằng chiều rộng, thì tôi chỉ đang rước rắc rối vào đây, phải không? Cuối cùng, tôi sẽ vít lên.
1:53:44
Tôi sẽ thay đổi cái này chứ không phải cái kia. Sau đó, nó sẽ trở thành một hình chữ nhật thay vì một hình vuông thích hợp. Vì vậy, tôi có lẽ nên giải quyết điều này một chút khác nhau.
1:53:50
Vì vậy, hãy để tôi làm điều đó. Ở đầu chức năng chính của tôi ở đây, hãy để tôi tiếp tục và đặt cho mình một biến có thể gọi là n cho số lượng gạch tôi muốn theo chiều ngang
1:53:59
và theo chiều dọc. Và tôi sẽ chỉ khởi tạo nó thành 3 ban đầu. Và thay vì đặt 3 ở đây, tôi sẽ chỉ sử dụng n theo đúng nghĩa đen.
1:54:06
Nhưng tôi sẽ làm điều đó ở cả hai nơi để bây giờ, kể từ bây giờ, nếu tôi muốn thay đổi điều này và thay đổi nó thành 4, hoặc 5, hoặc bất kỳ thứ gì khác,
1:54:13
Tôi đã hoàn thành tất cả. Nó được thiết kế tốt hơn vì có xác suất mắc lỗi thấp hơn. Nhưng về mặt kỹ thuật, tôi vẫn có thể làm hỏng việc bằng cách nào đó.
1:54:19
Về mặt kỹ thuật, tôi có thể vô tình viết một dòng mã như n++ hoặc tôi có thể thay đổi giá trị của biến đó mặc dù tôi không muốn
1:54:28
để bao giờ thay đổi. Và có lẽ do tôi là một lập trình viên tồi, tôi đã sao chép/dán sai, tôi đang làm việc với một người không biết n đại diện cho cái gì,
1:54:34
Tôi có thể bảo vệ bản thân và mã của mình trước lỗi của con người như vậy bằng cách đi lên dòng 5 ở đây.
1:54:41
Và thay vì chỉ khai báo một biến đơn giản như chúng ta đã làm trong Scratch, tôi có thể làm cứng mã của mình hơn nữa, có thể nói như vậy,
1:54:47
bằng cách khai báo nó là một hằng số sử dụng từ khóa const. Bây giờ, đây chỉ là một tính năng của C và một số ngôn ngữ khác
1:54:53
để bảo vệ bạn chống lại chính mình bằng cách chủ động nói, n là một hằng số, cụ thể là số 5 hoặc trước đây là số 3.
1:55:02
Bạn không thể vô tình viết mã ở nơi khác làm thay đổi nó. Máy tính sẽ báo lỗi và bắt lỗi đó.
1:55:08
Vì vậy, đó chỉ là một cách lập trình phòng thủ hơn một chút. Một số ngôn ngữ có điều này. Một số ngôn ngữ thì không.
1:55:14
Nhưng nói chung, đó là một thực hành tốt. Nó làm cho mã của bạn được thiết kế tốt hơn vì nó ít bị mắc lỗi bởi bạn, đồng nghiệp hoặc bất kỳ ai khác
1:55:22
sử dụng mã.Vì vậy, hãy để tôi thay đổi lại thành 3 để làm mặc định của chúng tôi. Nhưng bây giờ tôi đang sử dụng n ở cả hai nơi.
1:55:28
Và nếu tôi tạo mario, ./mario, chúng ta sẽ quay lại nơi bắt đầu ban đầu. Nhưng mã được thiết kế tốt hơn một chút.

A
47
Q

2:02:28
Và nói chung, do while cực kỳ hữu ích khi bạn muốn nhận thông tin đầu vào từ người dùng và đảm bảo rằng nó đáp ứng các yêu cầu nhất định.

A
48
Q

2:08:33
tôi sẽ nói rằng nó không có giá trị trả lại. Nó chỉ là khoảng trống.

A
49
Q

Và hãy để tôi làm điều này. Đây là lần duy nhất trong CS50 và, thực sự trong lập trình C, nơi sao chép/dán là hợp lý.
2:10:46
Nếu bạn sao chép và dán dòng mã đầu tiên của mỗi chức năng rồi kết thúc bằng dấu chấm phẩy, bạn có thể trêu chọc trình biên dịch
2:10:55
bằng cách cung cấp cho nó một gợi ý vừa đủ ở đầu tệp, OK, các chức năng này không tồn tại cho đến sau này.
2:11:01
Nhưng đây là một gợi ý rằng chúng sẽ tồn tại. Đây là cách bạn có thể thuyết phục trình biên dịch tin tưởng bạn.

A
50
Q

operator: toán tử
integer overflow: nơi bạn muốn sử dụng nhiều bit hơn bạn có sẵn. Và kết quả là bạn làm tràn dung lượng có sẵn.
fomat code trong printf:
truncation: cắt ngắn, mất mọi thứ sau dấu thập phân
type casting:
floating-point imprecision: sự không chính xác của dấu phẩy động
(đây là các vấn đề khi dùng toán tử)

A

x / y mang kiểu dữ liệu gì

51
Q

Chà, nếu bạn là lập trình viên biết rằng bạn đang làm việc trong một thế giới sẽ mang đến cho bạn dấu phẩy động
2:21:52
các giá trị có dấu thập phân, rất có thể bạn cần sử dụng tính năng được gọi là tính năng định kiểu

A