You are on page 1of 48

Trang 1

Khai báo và sử dụng biến và hằng số

Khai báo và sử dụng biến và hằng số


Như bạn đã học trong Chương 1, các mục dữ liệu bao gồm tất cả văn bản, số và thông tin khác
được xử lý bởi máy tính. Khi bạn nhập các mục dữ liệu vào máy tính, chúng sẽ
được lưu trữ trong các biến trong bộ nhớ nơi chúng có thể được xử lý và chuyển đổi thành thông tin
đó là đầu ra. 39

Khi bạn viết chương trình, bạn làm việc với dữ liệu ở ba dạng khác nhau: chữ (hoặc không tên
hằng số), biến và hằng số được đặt tên.

Hiểu các hằng số không có tên, theo nghĩa đen và các kiểu dữ liệu của chúng
Tất cả các ngôn ngữ lập trình đều hỗ trợ hai kiểu dữ liệu rộng; số mô tả dữ liệu
bao gồm các số và chuỗi mô tả dữ liệu không phải là số. Hầu hết các chương trình
ngôn ngữ hỗ trợ một số kiểu dữ liệu bổ sung, bao gồm nhiều kiểu cho các giá trị số
rất lớn hoặc rất nhỏ và đối với những cái có và không có số thập phân phân số
các chữ số. Các ngôn ngữ như C ++, C #, Visual Basic và Java phân biệt giữa số nguyên (toàn bộ
số) biến số và biến số dấu phẩy động (phân số) có chứa
dấu thập phân. (Số dấu phẩy động còn được gọi là số thực .) Do đó, trong một số
ngôn ngữ, các giá trị 4 và 4.3 sẽ được lưu trữ trong các loại biến số khác nhau.
Ngoài ra, nhiều ngôn ngữ cho phép bạn phân biệt giữa các giá trị nhỏ hơn và lớn hơn
chiếm số lượng byte khác nhau trong bộ nhớ. Bạn sẽ tìm hiểu thêm một chút về những
các kiểu dữ liệu chuyên biệt ở phần sau của chương này và thậm chí nhiều hơn nữa khi bạn học lập trình
nhưng cuốn sách này sử dụng hai loại rộng nhất: số và chuỗi.

Khi bạn sử dụng một giá trị số cụ thể, chẳng hạn như 43, trong một chương trình, bạn viết nó bằng cách sử dụng
chữ số và không có dấu ngoặc kép. Một giá trị số cụ thể thường được gọi là một hằng số
(hoặc hằng số theo nghĩa đen ) bởi vì nó không thay đổi — số 43 luôn có giá trị 43. Khi
bạn lưu trữ một giá trị số trong bộ nhớ máy tính, các ký tự bổ sung như ký hiệu đô la và
dấu phẩy không được nhập hoặc lưu trữ. Những ký tự đó có thể được thêm vào đầu ra để dễ đọc, nhưng
chúng không phải là một phần của con số.
Một giá trị văn bản cụ thể hoặc một chuỗi ký tự, chẳng hạn như “Amanda”, là một hằng số chuỗi (hoặc chữ
chuỗi không đổi ). Hằng số chuỗi, không giống như hằng số, xuất hiện trong dấu ngoặc kép
trong các chương trình máy tính. Giá trị chuỗi còn được gọi là giá trị chữ và số vì chúng có thể
chứa các ký tự chữ cái cũng như số và các ký tự khác. Ví dụ,
“$ 3.215,99 US”, bao gồm ký hiệu đô la, dấu phẩy, dấu chấm, chữ cái và số, là một chuỗi.
Mặc dù chuỗi có thể chứa số, giá trị số không được chứa ký tự chữ cái.
Hằng số 43 và hằng số chuỗi “Amanda” là những ví dụ về không đặt tên
hằng số —chúng không có định danh như các biến.

Xem video Khai báo biến và hằng số.


Trang 2

Làm việc với các biến


Các biến là các vị trí bộ nhớ được đặt tên mà nội dung của nó có thể thay đổi hoặc khác nhau theo thời gian. Đối với
ví dụ, trong chương trình nhân đôi số trong Hình 2-1, myNumber và myAnswer là
biến. Tại bất kỳ thời điểm nào, một biến chỉ giữ một giá trị. Đôi khi, myNumber giữ
2 và myAnswer giữ 4; vào những thời điểm khác, myNumber giữ 6 và myAnswer giữ 12. Khả năng
của các biến để thay đổi giá trị là điều làm cho máy tính và lập trình trở nên đáng giá.
Bởi vì một vị trí bộ nhớ có thể được sử dụng nhiều lần với các giá trị khác nhau, bạn có thể ghi
chương trình hướng dẫn một lần và sau đó sử dụng chúng cho hàng nghìn phép tính riêng biệt. Một bộ
hướng dẫn trả lương tại công ty của bạn tạo ra phiếu lương cho từng nhân viên và một bộ
hướng dẫn tại công ty điện của bạn xuất hóa đơn của từng hộ gia đình.

khởi đầu

nhập myNumber

khởi đầu
nhập myNumber
đặt myAnswer =
đặt myAnswer = myNumber * 2
myNumber * 2
xuất myAnswer
dừng lại
xuất myAnswer

dừng lại

Hình 2-1 Lưu đồ và mã giả cho chương trình nhân đôi số


© 2015 Cengage Learning

Trong hầu hết các ngôn ngữ lập trình, trước khi bạn có thể sử dụng bất kỳ biến nào, bạn phải bao gồm
khai báo cho nó. Một tuyên bố là một tuyên bố cung cấp một kiểu dữ liệu và một định danh
cho một biến. Định danh là tên của thành phần chương trình. Kiểu dữ liệu của mục dữ liệu là
phân loại mô tả những điều sau:
Những giá trị nào có thể được giữ bởi mục
Cách mục được lưu trữ trong bộ nhớ máy tính
Những thao tác nào có thể được thực hiện trên mặt hàng
Như đã đề cập trước đó, hầu hết các ngôn ngữ lập
ế trình
ằ ốhỗ trợ một số kiểu dữ liệu, nhưng trong điều này
book, chỉ có hai kiểu dữ liệu sẽ được sử dụng: num và string .
Trang 3 Khai báo và sử dụng biến và hằng số

Khi bạn khai báo một biến, bạn cung cấp cả kiểu dữ liệu và số nhận dạng. Tùy ý, bạn
có thể khai báo giá trị bắt đầu cho bất kỳ biến nào. Khai báo giá trị bắt đầu được gọi là khởi tạo
biến . Ví dụ, mỗi câu lệnh sau đây là một khai báo hợp lệ. Hai trong số
các câu lệnh bao gồm các lần khởi tạo và hai câu lệnh không:

num mySalary
41
num yourSalary = 14,55
string myName
string yourName = "Juanita"

Hình 2-2 cho thấy chương trình nhân đôi số từ Hình 2-1 với các khai báo được thêm vào
bóng mờ. Các biến phải được khai báo trước khi chúng được sử dụng lần đầu tiên trong một chương trình. Một số
ngôn ngữ yêu cầu tất cả các biến phải được khai báo ở đầu chương trình, các biến khác cho phép
các biến được khai báo ở đầu mỗi mô-đun và các biến khác cho phép các biến
được khai báo ở bất kỳ đâu miễn là chúng được khai báo trước lần sử dụng đầu tiên. Cuốn sách này sẽ
tuân theo quy ước khai báo tất cả các biến với nhau.

khởi đầu

Tuyên bố
num myNumber
num myAnswer
khởi đầu
Tuyên bố
nhập myNumber num myNumber
num myAnswer
nhập myNumber

đặt myAnswer = đặt myAnswer = myNumber * 2


myNumber * 2 xuất myAnswer
dừng lại

xuất myAnswer

dừng lại

Hình 2-2 Lưu đồ và mã giả của chương trình nhân đôi số với khai báo biến
© 2015 Cengage Learning

Trong nhiều ngôn ngữ lập trình, nếu bạn khai báo một biến và không khởi tạo nó, biến
chứa một giá trị không xác định cho đến khi nó được gán một giá trị. Giá trị không xác định của một biến thường
được gọi là rác . Mặc dù một số ngôn ngữ sử dụng giá trị mặc định cho một số biến (chẳng hạn như
gán 0 cho bất kỳ biến số nào chưa được gán), cuốn sách này sẽ giả định rằng
biến giữ rác. Trong nhiều ngôn ngữ, việc sử dụng biến chứa rác trong
một câu lệnh số học hoặc để hiển thị nó dưới dạng đầu ra. Ngay cả khi bạn làm việc với một ngôn ngữ
cho phép bạn hiển thị rác, nó không có mục đích gì để làm như vậy và tạo thành một lỗi logic.
Trang 4

Khi bạn tạo một biến mà không gán cho nó một giá trị ban đầu (như với myNumber và
myAnswer trong
Hình 2-2), mục đích của bạn là chỉ định một giá trị sau này — ví dụ: bằng cách nhận
một như đầu vào hoặc đặt kết quả của một phép tính ở đó.

Đặt tên biến


Ví dụ nhân đôi số trong Hình 2-2 yêu cầu hai biến: myNumber và myAnswer .
Ngoài ra, các biến này có thể được đặt tên userEntry và programSolution , hoặc
inputValue và hai lầnTheValue .
Là một lập trình viên, bạn chọn hợp lý và mô tả
tên cho các biến của bạn. Trình dịch ngôn ngữ (thông dịch viên hoặc trình biên dịch) sau đó liên kết
tên bạn chọn với địa chỉ bộ nhớ cụ thể.
Mọi ngôn ngữ lập trình máy tính đều có bộ quy tắc riêng để tạo mã định danh. Phần lớn
ngôn ngữ cho phép các chữ cái và chữ số trong số nhận dạng. Một số ngôn ngữ cho phép dấu gạch nối trong biến
tên, chẳng hạn như lương theo giờ , và một số cho phép gạch dưới, như trong giờ_wage . Một số
ngôn ngữ cho phép ký hiệu đô la hoặc các ký tự đặc biệt khác trong tên biến (ví dụ:
hàng giờ $ );
những người khác cho phép các ký tự trong bảng chữ cái nước ngoài, chẳng hạn như π hoặc Ω . Mỗi chương trình
ngôn ngữ có một vài (có thể từ 100 đến 200) từ khóa dành riêng không được phép là biến
tên bởi vì chúng là một phần của cú pháp ngôn ngữ. Ví dụ: tên kiểu dữ liệu trong
ngôn ngữ, chẳng hạn như num và string , sẽ không được phép làm tên biến. Khi bạn học một
ngôn ngữ lập trình, bạn sẽ tìm hiểu danh sách các từ khóa của nó.
Các ngôn ngữ khác nhau đặt ra các giới hạn khác nhau về độ dài của tên biến, mặc dù nói chung,
độ dài của số nhận dạng trong các ngôn ngữ mới hơn hầu như không giới hạn. Trong máy tính cũ nhất
ngôn ngữ, tất cả các tên biến đã được viết bằng tất cả các chữ cái viết hoa vì keypunch
máy móc được sử dụng vào thời điểm đó chỉ tạo ra các chữ cái viết hoa. Trong hầu hết các ngôn ngữ hiện đại,
số nhận dạng có phân biệt chữ hoa chữ thường, vì vậy HoUrLyWaGe , theo giờ và theo giờ là ba mã riêng biệt
các tên biến. Các lập trình viên sử dụng nhiều quy ước để đặt tên biến, thường tùy thuộc vào
về ngôn ngữ lập trình hoặc các tiêu chuẩn được người sử dụng lao động thông qua. Tham khảo nhanh 2-1
mô tả các quy ước đặt tên biến thường được sử dụng.

THAM KHẢO NHANH 2-1 Quy ước đặt tên biến


Ngôn ngữ ở đâu
Quy ước đặt tên biến Các ví dụ thường được sử dụng

Vỏ lạc đà là quy ước trong đó lương theo giờ Java, C #


biến bắt đầu bằng một chữ cái thường lastName
và bất kỳ từ nào tiếp theo bắt đầu bằng một
chữ viết hoa. Nó đôi khi được gọi là
vỏ lạc đà thấp hơn để nhấn mạnh
sự khác biệt so với cách viết hoa trong Pascal.

(còn tiếp)
Trang 5 Khai báo và sử dụng biến và hằng số

(còn tiếp)

Ngôn ngữ ở đâu


Quy ước đặt tên biến Các ví dụ thường được sử dụng

Cách viết hoa Pascal là một quy ước trong đó Lương theo giờ Ngôn ngữ lập trình 43
chữ cái đầu tiên của tên biến là LastName
chữ hoa. Nó đôi khi được gọi là trên
vỏ lạc đà để phân biệt với thấp hơn
vỏ lạc đà.
Ký hiệu Hungary là một dạng của lạc đà numHourlyWage C dành cho API Windows
cách viết hoa trong đó kiểu dữ liệu của biến là stringLastName lập trình
một phần của định danh.
Vỏ rắn là một quy ước trong đó lương theo giờ C, C ++, Python, Ruby
các phần của một tên biến được tách biệt last_name
bằng dấu gạch dưới.

Trường hợp hỗn hợp có dấu gạch dưới là một Lương theo giờ Ada
quy ước đặt tên biến tương tự như Last_Name
vỏ rắn, nhưng các từ mới bắt đầu bằng
một ký tự hoa.
Trường hợp Kebob đôi khi được sử dụng làm lương theo giờ Lisp (với chữ thường
tên cho kiểu sử dụng dấu gạch ngang để họ chữ cái), COBOL (với
các phần riêng biệt của một tên biến. Các chữ in hoa)
tên bắt nguồn từ thực tế là các từ
trông giống như những miếng thức ăn trên xiên.

Việc áp dụng quy ước đặt tên cho các biến và sử dụng nó một cách nhất quán sẽ giúp làm cho
chương trình dễ đọc và dễ hiểu hơn.
Mặc dù mọi ngôn ngữ đều có quy tắc riêng để đặt tên biến, bạn không nên lo lắng
với cú pháp cụ thể của bất kỳ ngôn ngữ máy tính cụ thể nào khi thiết kế
logic của một chương trình. Suy cho cùng, logic hoạt động với bất kỳ ngôn ngữ nào. Các tên biến được sử dụng
xuyên suốt cuốn sách này chỉ tuân theo ba quy tắc:
1. Tên biến phải là một từ. Tên có thể chứa các chữ cái, chữ số, dấu gạch ngang hoặc
gạch dưới. Không có ngôn ngữ nào cho phép nhúng khoảng trắng trong tên biến và hầu hết không
cho phép dấu câu như dấu chấm, dấu phẩy hoặc dấu hai chấm. Cuốn sách này chỉ sử dụng bảng chữ cái
chữ cái, chữ số và dấu gạch dưới trong tên biến. Do đó, r là một tên biến hợp pháp,
cũng như tốc độ và interestRate . Lãi suất tên biến không được phép
vì không gian.

2. Tên biến phải bắt đầu bằng một chữ cái. Một số ngôn ngữ lập trình cho phép biến
tên bắt đầu bằng một ký tự không có dấu chấm như dấu gạch dưới. Gần như tất cả
ngôn ngữ lập trình cấm tên biến bắt đầu bằng một chữ số. Thisbookfollows
quy ước chung nhất về việc bắt đầu tên biến bằng một chữ cái.
Trang 6

Khi bạn viết một chương trình bằng trình chỉnh sửa được đóng gói với trình biên dịch trong IDE, trình biên dịch có thể
hiển thị tên biến có màu khác với các thành phần chương trình khác. Hỗ trợ trực quan này giúp bạn
tên biến nổi bật so với các từ là một phần của ngôn ngữ lập trình.

3. Tên biến nên có một số ý nghĩa thích hợp. Đây không phải là một quy tắc chính thức
của bất kỳ ngôn ngữ lập trình nào. Khi tính toán lãi suất trong một chương trình,
máy tính không quan tâm nếu bạn gọi biến g , u84 hay fred . Miễn là
kết quả số chính xác được đặt trong biến, tên thực của nó không
vấn đề. Tuy nhiên, việc tuân theo logic của một câu lệnh như
đặt quan tâmEarned = ban đầuInvestment * lãi suất thay vì
một câu lệnh
như set f = i * r hoặc set someBanana = j89 * myFriendLinda . Khi một chương trình
yêu cầu thay đổi, có thể là vài tháng hoặc vài năm sau khi bạn viết bản gốc
phiên bản, bạn và các lập trình viên đồng nghiệp của bạn sẽ đánh giá cao
tên biến thay cho các định danh khó hiểu. Phần sau của chương này, bạn sẽ học
thêm về việc chọn số nhận dạng tốt.

Lưu ý rằng lưu đồ trong Hình 2-2 tuân theo các quy tắc trước cho các biến: Cả hai biến
tên, myNumber và myAnswer , là những từ đơn không có dấu cách nhúng và chúng có
ý nghĩa thích hợp. Một số lập trình viên đặt tên biến theo tên bạn bè hoặc tạo lối chơi chữ với
họ, nhưng các chuyên gia máy tính coi hành vi như vậy là không chuyên nghiệp và nghiệp dư.

Gán giá trị cho các biến


Khi bạn tạo một lưu đồ hoặc mã giả cho một chương trình tăng gấp đôi số lượng, bạn có thể
bao gồm một tuyên bố như sau:
đặt myAnswer = myNumber * 2

Một câu lệnh như vậy là một câu lệnh gán . Tuyên bố này kết hợp hai hành động. Đầu tiên,
máy tính sẽ tính toán giá trị số học của myNumber * 2 . Thứ hai, giá trị được tính là
được lưu trữ trong vị trí bộ nhớ myAnswer .
Dấu bằng là toán tử gán . Toán tử gán là một ví dụ về
toán tử nhị phân , nghĩa là nó yêu cầu hai toán hạng — mỗi bên một toán hạng. (Một toán hạng đơn giản là
một giá trị được sử dụng bởi một toán tử.) Toán tử gán luôn hoạt động từ phải sang trái,
có nghĩa là nó có tính liên kết phải hoặc tính liên kết từ phải sang trái . Điều này có nghĩa là
giá trị của biểu thức ở bên phải của toán tử gán được đánh giá đầu tiên, sau đó là
kết quả được gán cho toán hạng bên trái. Toán hạng ở bên phải của một phép gán
toán tử phải là một giá trị — ví dụ, một hằng số có tên hoặc không tên hoặc một số học
biểu hiện. Toán hạng ở bên trái của một toán tử gán phải là một tên đại diện cho
một địa chỉ bộ nhớ — tên của vị trí nơi kết quả sẽ được lưu trữ.
Ví dụ: nếu bạn đã khai báo hai biến số có tên là someNumber và
someOtherNumber , thì mỗi câu lệnh sau là một câu lệnh gán hợp lệ:
đặt someNumber = 2
đặt someNumber = 3 + 7
đặt someOtherNumber = someNumber
đặt someOtherNumber = someNumber * 5
Trang 7

Trong mỗi trường hợp, biểu thức ở bên phải của toán tử gán được đánh giá và lưu trữ tại
vị trí được tham chiếu ở phía bên trái. Kết quả bên trái của một toán tử gán là
được gọi là lvalue . Chữ l là bên trái. Giá trị luôn là định danh địa chỉ bộ nhớ.

Tuy nhiên, các câu lệnh sau không hợp lệ: Đừng làm điều đó
Toán hạng bên trái của 45
đặt 2 + 4 = someNumber
một toán tử chuyển nhượng
đặt someOtherNumber * 10 = someNumber
phải đại diện cho một ký ức
đặt someNumber + someOtherNumber = 10 Địa chỉ.

Trong mỗi trường hợp này, giá trị ở bên trái của toán tử gán không phải là bộ nhớ
địa chỉ, vì vậy các câu lệnh không hợp lệ.

Khi bạn viết mã giả hoặc vẽ một lưu đồ, nó có thể giúp bạn sử dụng bộ từ trong
các câu lệnh gán, như được hiển thị trong các ví dụ này, để nhấn mạnh rằng giá trị bên trái là
đang được thiết lập. Tuy nhiên, trong hầu hết các ngôn ngữ lập trình, bộ từ không được sử dụng và phép gán
các câu lệnh có dạng đơn giản hơn sau:
someNumber = 2
someOtherNumber = someNumber

Vì dạng viết tắt là cách các phép gán xuất hiện trong hầu hết các ngôn ngữ, quy ước này
được sử dụng cho phần còn lại của cuốn sách này.

Hiểu các loại dữ liệu của các biến


Máy tính xử lý dữ liệu chuỗi khác với cách chúng xử lý dữ liệu số. Bạn có thể
đã trải qua những khác biệt này nếu bạn đã sử dụng phần mềm ứng dụng như bảng tính
hoặc các chương trình cơ sở dữ liệu. Ví dụ, trong một bảng tính, bạn không thể tính tổng một cột từ.
Tương tự, mọi ngôn ngữ lập trình đều yêu cầu bạn chỉ định đúng loại cho mỗi
và bạn sử dụng từng loại một cách thích hợp.

Một biến số là một trong đó có thể chứa chữ số và có các hoạt động toán học
thực hiện trên đó. Trong cuốn sách này, tất cả các biến số có thể chứa dấu thập phân và dấu
cho biết tích cực hoặc tiêu cực; một số ngôn ngữ lập trình cung cấp số chuyên dụng
loại cho các tùy chọn này. Trong câu lệnh myAnswer = myNumber * 2 , cả myAnswer và
myNumber là
các biến số; nghĩa là, nội dung dự định của chúng là các giá trị số, chẳng hạn như
dưới dạng 6 và 3, 14,8 và 7,4, hoặc –18 và –9.
Một biến chuỗi có thể chứa văn bản, chẳng hạn như các chữ cái trong bảng chữ cái và các
ký tự, chẳng hạn như dấu chấm câu. Nếu một chương trình làm việc có chứa câu lệnh
lastName = "Lincoln" ,
thì lastName là một biến chuỗi. Một biến chuỗi cũng có thể giữ
các chữ số có hoặc không có các ký tự khác. Ví dụ: "235 Main Street" và "86" là
cả hai chuỗi. Một chuỗi như “86” được lưu trữ khác với giá trị số 86 và bạn
không thể thực hiện số học với chuỗi. Các lập trình viên thường sử dụng chuỗi để giữ
các chữ số khi chúng sẽ không bao giờ được sử dụng trong các câu lệnh số học – ví dụ: một tài khoản
số hoặc mã zip.
An toàn kiểu là tính năng của một số ngôn ngữ lập trình ngăn chặn việc gán các giá trị của
một kiểu dữ liệu không chính xác. Bạn chỉ có thể gán dữ liệu cho một biến nếu nó đúng kiểu. (Như là
Trang 8

ngôn ngữ được gọi là được đánh mạnh.) Nếu bạn khai báo taxRate dưới dạng một biến số và
stockItem dưới dạng một chuỗi, khi đó các câu lệnh sau là hợp lệ:
taxRate = 2,5
stockItem = "giám sát"

Các dữ liệu sau không hợp lệ vì loại dữ liệu đang được chỉ định không khớp với biến
kiểu:
Đừng làm điều đó
Nếu taxRate là số
taxRate = "2,5" và mục hàng là
hàng tồn kho = 2,5 một chuỗi, sau đó là những
taxRate = hàng tồn kho bài tập không hợp lệ.
hàng tồn kho = taxRate

Xem video Tìm hiểu các loại dữ liệu.

Khai báo các hằng số được đặt tên


Sử dụng các hằng số được đặt tên giúp chương trình của bạn dễ dàng hơn
Bên cạnh các biến, hầu hết các ngôn ngữ lập trình cho phép bạn tạo các hằng số được đặt tên.
Một hằng được đặt tên tương tự như một biến, ngoại trừ nó chỉ có thể được gán giá trị một lần. Bạn dùng
một hằng số được đặt tên khi bạn muốn gán một tên hữu ích cho một giá trị sẽ không bao giờ
đã thay đổi trong quá trình thực thi chương trình.
để hiểu bằng cách loại bỏ số ma thuật. Một số ma thuật là một hằng số không được đặt tên, giống như
0,06, mà mục đích không rõ ràng ngay lập tức.
Ví dụ: nếu một chương trình sử dụng thuế suất bán hàng là 6 phần trăm, bạn có thể muốn khai báo
được đặt tên là hằng số như sau:

num SALES_TAX_RATE = 0,06

Sau khi SALES_TAX_RATE được khai báo, các câu lệnh sau có ý nghĩa giống hệt nhau: rong cả hai trường hợp,

taxAmount = giá * 0,06


taxAmount = giá * SALES_TAX_RATE

Cách khai báo các hằng được đặt tên là khác nhau giữa các ngôn ngữ lập trình. Điều này
cuốn sách tuân theo quy ước sử dụng tất cả các chữ cái viết hoa trong các mã định danh không đổi và sử dụng
gạch dưới các từ riêng biệt để dễ đọc. Sử dụng các quy ước này làm cho
hằng số dễ nhận ra hơn. Trong nhiều ngôn ngữ, một hằng số phải được gán giá trị của nó khi nó
được khai báo, nhưng trong một số ngôn ngữ, một hằng số có thể được gán giá trị của nó sau đó. T
tuy nhiên, giá trị của hằng số không thể thay đổi sau lần gán đầu tiên. Cuốn sách này sau
quy ước khởi tạo tất cả các hằng khi chúng được khai báo.
Khi bạn khai báo một hằng số được đặt tên, việc bảo trì chương trình trở nên dễ dàng hơn. Ví dụ,
nếu giá trị của thuế suất bán hàng thay đổi từ 0,06 thành 0,07 trong tương lai và bạn đã khai báo
một hằng số được đặt tên là SALES_TAX_RATE , bạn chỉ cần thay đổi giá trị được gán cho
không đổi ở đầu chương trình, sau đó dịch lại chương trình vào máy
ngôn ngữ và tất cả các tham chiếu đến SALES _ TAX_RATE đều được cập nhật tự động. Nếu bạn đã sử dụng
không đặt tên theo nghĩa đen 0,06 thay vào đó, bạn sẽ phải tìm kiếm mọi trường hợp của giá trị và
Trang 9

Thực hiện các phép toán số học

thay thế nó bằng cái mới. Ngoài ra, nếu chữ 0,06 được sử dụng trong các phép tính khác
trong chương trình (ví dụ: như một tỷ lệ chiết khấu hoặc giá cả), bạn sẽ phải cẩn thận
chọn các trường hợp của giá trị để thay đổi và bạn có thể mắc lỗi.

Đôi khi, việc sử dụng các hằng chữ không có tên là thích hợp trong một chương trình, đặc biệt nếu ý nghĩa của chúng rõ ràng
cho hầu hết độc giả. Ví dụ: trong một chương trình tính một nửa giá trị bằng cách chia cho hai, bạn có thể 47
chọn sử dụng nghĩa đen 2 không được đặt tên thay vì phải chịu thêm thời gian và chi phí bộ nhớ khi tạo
một hằng số được đặt tên là HALF và gán 2 cho nó. Chi phí bổ sung do thêm các biến hoặc hướng dẫn vào
một chương trình được gọi là chi phí.

HAI SỰ THẬT & MỘT LỜI NÓI DỐI


Khai báo và sử dụng biến và hằng số

1. Kiểu dữ liệu của một biến mô tả loại giá trị mà biến có thể giữ và
các loại hoạt động có thể được thực hiện với nó.

2. Nếu name là một biến chuỗi, thì câu lệnh đặt tên = "Ed" là hợp lệ.

3. Toán hạng ở bên phải của toán tử gán phải là một tên
đại diện cho một địa chỉ bộ nhớ.

Thực hiện các phép toán số học


Hầu hết các ngôn ngữ lập trình sử dụng các toán tử số học tiêu chuẩn sau:

+ (dấu cộng) —điều chỉnh


- (dấu trừ) —phép trừ
* (dấu hoa thị) —multiplication
/ (gạch chéo) —division
Manylanguagesalso hỗ trợ các điều hành viên bổ sungThatcalculatetheremainderafterdivision, nho khô
số một quyền lực, thao tác trên các bit riêng lẻ được kiểm duyệt giá trị, và thực hiện các hoạt động.
Mỗi toán tử số học tiêu chuẩn là một toán tử nhị phân; nghĩa là, mỗi yêu cầu một
biểu hiện của cả hai bên. Ví dụ: câu lệnh sau đây thêm hai điểm kiểm tra và
gán tổng cho một biến có tên totalScore :

totalScore = test1 + test2


Trang 10 Phần sau thêm 10 vào totalScore và lưu trữ kết quả trong totalScore :
totalScore = totalScore + 10

Nói cách khác, ví dụ này làm tăng giá trị của totalScore . Ví dụ cuối cùng này trông kỳ lạ
trong đại số vì có thể giá trị của totalScore và totalScore cộng với 10 là
tương đương. Bạn phải nhớ rằng dấu bằng là toán tử gán và rằng
câu lệnh thực sự đang lấy giá trị ban đầu của totalScore , thêm 10 vào nó và gán
kết quả đến địa chỉ bộ nhớ ở bên trái của toán tử, là totalScore .
Trong ngôn ngữ lập trình, bạn có thể kết hợp các câu lệnh số học. Khi bạn làm vậy, mọi
toán tử tuân theo các quy tắc ưu tiên (còn được gọi là thứ tự của các hoạt động ) ra lệnh
thứ tự thực hiện các thao tác trong cùng một câu lệnh. Các quy tắc ưu tiên cho
các câu lệnh số học cơ bản như sau:

Các biểu thức trong dấu ngoặc đơn được đánh giá đầu tiên. Nếu có nhiều bộ
dấu ngoặc đơn, biểu thức trong dấu ngoặc đơn trong cùng được đánh giá đầu tiên.
Phép nhân và phép chia được đánh giá tiếp theo, từ trái sang phải.
Phép cộng và phép trừ được đánh giá tiếp theo, từ trái sang phải.
Toán tử gán có mức độ ưu tiên rất thấp. Do đó, trong một tuyên bố chẳng hạn như
d=e*f+g, các phép toán ở bên phải của toán tử gán luôn được thực hiện
trước khi gán cuối cùng cho biến bên trái.

Khi bạn học một ngôn ngữ lập trình cụ thể, bạn sẽ tìm hiểu về tất cả các toán tử được sử dụng trong
ngôn ngữ. Nhiều sách ngôn ngữ lập trình chứa một bảng chỉ định mức độ ưu tiên tương đối của mọi
toán tử được sử dụng trong ngôn ngữ.

Ví dụ, hãy xem xét hai câu lệnh số học sau:


firstAnswer = 2 + 3 * 4
secondAnswer = (2 + 3) * 4

Sau khi các câu lệnh này thực thi, giá trị của firstAnswer là 14. Theo quy tắc của
ưu tiên, phép nhân được thực hiện trước phép cộng, vì vậy 3 được nhân với 4, cho 12,
và sau đó 2 và 12 được thêm vào, và 14 được gán cho firstAnswer . Giá trị của secondAnswer ,
tuy nhiên, là 20, bởi vì các dấu ngoặc đơn buộc thực hiện thao tác bổ sung chứa
Đầu tiên. 2 và 3 được thêm vào, tạo ra 5, và sau đó 5 được nhân với 4, tạo ra 20.
Quên các quy tắc ưu tiên số học hoặc quên thêm dấu ngoặc đơn khi
bạn cần chúng, có thể gây ra các lỗi logic khó tìm thấy trong các chương trình. Ví dụ,
tuyên bố sau có thể xuất hiện để trung bình hai điểm kiểm tra:

trung bình = điểm1 + điểm2 / 2

Tuy nhiên, nó không. Bởi vì phép chia có mức độ ưu tiên cao hơn phép cộng,
tuyên bố mất một nửa số score2 , thêm nó vào score1 , và lưu trữ các kết quả trong trung bình . Các
phát biểu đúng là:
trung bình = (điểm1 + điểm2) / 2
Trang 11

Thực hiện các phép toán số học

Bạn có thể tự do thêm dấu ngoặc đơn ngay cả khi bạn không cần chúng để buộc một thứ tự khác
các hoạt động; đôi khi bạn sử dụng chúng chỉ để làm cho ý định của bạn rõ ràng hơn. Ví dụ,
các câu lệnh sau hoạt động giống hệt nhau:
totalPriceWithTax = price + price * TAX_RATE
totalPriceWithTax = price + (price * TAX_RATE)
49
Trong cả hai trường hợp, trước tiên giá được nhân với TAX_RATE , sau đó nó được thêm vào giá và cuối cùng là
kết quả được lưu trong totalPriceWithTax . Vì phép nhân xảy ra trước phép cộng trên
bên phải của toán tử gán, cả hai câu lệnh đều giống nhau. Tuy nhiên, nếu bạn cảm thấy
rằng tuyên bố có dấu ngoặc đơn làm cho ý định của bạn rõ ràng hơn đối với người đọc
chương trình của bạn, thì bạn nên sử dụng chúng.
Tất cả các toán tử số học đều có tính kết hợp từ trái sang phải . Điều này có nghĩa là các hoạt động với
cùng thứ tự ưu tiên diễn ra từ trái sang phải. Hãy xem xét tuyên bố sau:
answer = a + b + c * d / e - f

Phép nhân và phép chia có mức độ ưu tiên cao hơn so với phép cộng hoặc phép trừ, vì vậy
phép nhân và phép chia được thực hiện từ trái sang phải như sau:

c nhân với d , và kết quả chia cho e , cho một kết quả mới.
Do đó, câu lệnh trở thành:
answer = a + b + (kết quả tạm thời vừa tính) - f

Sau đó, phép cộng và phép trừ được thực hiện từ trái sang phải như sau:

a và b được
thêm vào, kết quả tạm thời được cộng, và sau đó f bị trừ. Kết quả cuối cùng là
sau đó được phân công trả lời .
Một cách khác để nói điều này là hai câu lệnh sau là tương đương:
answer = a + b + c * d / e - f
answer = a + b + ((c * d) / e) - f

Tham khảo nhanh 2-2 tóm tắt mức độ ưu tiên và tính liên kết của năm thường xuyên nhất
toán tử đã sử dụng.

THAM KHẢO NHANH 2-2 Mức độ ưu tiên và tính liên kết của năm toán tử phổ biến
Nhà điều hành Ưu tiên (so với
Biểu tượng Tên người vận hành toán tử trong bảng này) Sự liên kết
= Chuyển nhượng Thấp nhất Phải sang trái

+ Thêm vào Trung b nh Trái sang phải



- Phép trừ Trung b nh Trái sang phải

* Phép nhân Cao nhất Trái sang phải

/ Sư đoàn Cao nhất Trái sang phải


Trang 12

Xem video Tính ưu tiên của toán tử số học.

Kiểu dữ liệu số nguyên


Như đã đề cập trước đó trong chương này, nhiều ngôn ngữ lập trình hiện đại cho phép
lập trình viên để phân biệt rõ ràng giữa các kiểu dữ liệu số. Đặc biệt, nhiều
ngôn ngữ xử lý các giá trị số nguyên (số nguyên) và các giá trị số dấu phẩy động
(số có chữ số thập phân) khác nhau. Trong các ngôn ngữ này, bạn luôn có thể chỉ định một
số nguyên, chẳng hạn như 3, thành một biến dấu phẩy động hoặc hằng số được đặt tên, và nó sẽ được chuyển đổi thành
3.0. Tuy nhiên, bạn không thể chỉ định trực tiếp giá trị dấu phẩy động (chẳng hạn như 3.0) cho một số nguyên
vì các giá trị vị trí thập phân sẽ bị mất, ngay cả khi chúng bằng 0.

Khi bạn làm việc với một ngôn ngữ phân biệt giữa số nguyên và dấu phẩy động
giá trị, bạn có thể kết hợp các loại khác nhau trong biểu thức số học. Khi bạn làm, ngoài ra,
phép trừ và phép nhân hoạt động như mong đợi. Ví dụ: kết quả của 2,3 + 5 là 7,3 và
kết quả của 4,2 * 2 là 8,4. Khi bạn kết hợp các loại, phân chia cũng hoạt động như mong đợi. Đối với
Ví dụ, kết quả của 9.3 / 3 là 3.1.
Tuy nhiên, trong nhiều ngôn ngữ, chia một số nguyên cho một số nguyên khác là một trường hợp đặc biệt. Trong
các ngôn ngữ như Java, C ++ và C #, chia hai số nguyên dẫn đến một số nguyên và bất kỳ
một phần nhỏ của kết quả bị mất. Ví dụ: trong các ngôn ngữ này, kết quả của 7/2 là 3, không phải
3.5 như bạn có thể mong đợi. Các nhà lập trình nói rằng phần thập phân của kết quả bị cắt bỏ,
hoặc bị cắt ngắn.

Khi lập trình bằng ngôn ngữ cắt bớt kết quả của phép chia số nguyên, bạn phải đặc biệt
cẩn thận với các số thấp hơn 1. Ví dụ: nếu bạn viết một chương trình giảm một nửa công thức, bạn có thể sử dụng
một biểu thức chẳng hạn như 1/2 * cốcSugar. Bất kể giá trị của cốcSugar là bao nhiêu, kết quả sẽ
luôn luôn là 0 bởi vì 2 đi vào 1 0 nguyên lần.

Nhiều ngôn ngữ lập trình cũng hỗ trợ toán tử phần dư , đôi khi được gọi là
toán tử mô đun hoặc toán tử mô đun. Khi được sử dụng với hai toán hạng số nguyên,
toán tử phần dư là giá trị còn lại sau khi chia. Ví dụ: 24 Mod 10 là 4
vì khi 24 chia cho 10 thì 4 là số dư. Trong Visual Basic, toán tử phần dư
là từ khóa Mod . Trong Java, C ++ và C #, toán tử là dấu phần trăm (%).
Toán tử còn lại có thể hữu ích trong nhiều trường hợp. Ví dụ, bạn có thể
xác định xem một số là số chẵn hay lẻ bằng cách tìm phần dư khi số đó là
chia cho 2. Bất kỳ số nào có dư là 0 là số chẵn và bất kỳ số nào có dư
của 1 là số lẻ.

Bởi vì toán tử còn lại khác nhau giữa các ngôn ngữ lập trình và vì
hoạt động tự nó được xử lý khác nhau khi được sử dụng với các toán hạng phủ định, phần còn lại
toán tử sẽ không được sử dụng trong phần còn lại của cuốn sách độc lập với ngôn ngữ này. Tương tự, cuốn sách này
sử dụng một kiểu dữ liệu, num , cho tất cả các giá trị số và giả định rằng cả số nguyên và
các giá trị dấu phẩy động có thể được lưu trữ trong các biến num và các hằng số được đặt tên.
Trang 13

HAI SỰ THẬT & MỘT LỜI NÓI DỐI


Thực hiện các phép toán số học

1. Dấu ngoặc đơn có mức độ ưu tiên cao hơn bất kỳ phép số học thông thường nào 51
các toán tử.

2. Các phép toán trong câu lệnh số học xảy ra từ trái sang phải theo thứ tự
họ xuất hiện.

3. Phần sau thêm 5 vào một biến có tên là các điểm :

điểm = điểm + 5

Hiểu những lợi thế của mô-đun hóa


Các lập trình viên hiếm khi viết chương trình thành một chuỗi các bước dài. Thay vào đó, họ phá vỡ
chia các vấn đề lập trình của họ thành các đơn vị nhỏ hơn và giải quyết một nhiệm vụ gắn kết tại một
thời gian. Các đơn vị nhỏ hơn này là các mô-đun . Các lập trình viên cũng gọi chúng là các chương trình con ,
thủ tục , chức năng hoặc phương pháp ; tên thường phản ánh ngôn ngữ lập trình
đang được sử dụng. Ví dụ, các lập trình viên Visual Basic sử dụng thủ tục (hoặc quy trình con). C
và các lập trình viên C ++ gọi các hàm mô-đun của họ, trong khi C #, Java và các đối tượng khác-
các lập trình viên ngôn ngữ định hướng có nhiều khả năng sử dụng phương pháp hơn. Lập trình viên trong COBOL,
RPG và BASIC (tất cả các ngôn ngữ cũ hơn) có nhiều khả năng sử dụng chương trình con nhất.

Bạn có thể tìm hiểu về các mô-đun nhận và trả dữ liệu trong Chương 9 của phiên bản toàn diện của
Cuốn sách này.

Một chương trình chính thực thi một mô-đun bằng cách gọi nó. Để gọi một mô-đun là sử dụng tên của nó để gọi
mô-đun, khiến nó thực thi. Khi nhiệm vụ của mô-đun hoàn tất, điều khiển trả về
đến vị trí mà từ đó mô-đun được gọi trong chương trình chính. Khi bạn truy cập
một mô-đun, hành động tương tự như đặt đầu đĩa DVD ở trạng thái tạm dừng. Bạn từ bỏ chính của bạn
hành động (xem video), thực hiện một số công việc khác (ví dụ: làm bánh mì sandwich) và
sau đó quay lại nhiệm vụ chính chính xác nơi bạn đã dừng lại.
Trang 14

Quá trình chia nhỏ một chương trình lớn thành các mô-đun là quá trình mô- đun hóa ;
các nhà khoa học máy tính cũng gọi nó là sự phân hủy chức năng . Bạn không bao giờ bắt buộc phải
mô-đun hóa một chương trình lớn để làm cho nó chạy trên máy tính, nhưng có ít nhất ba
lý do để làm như vậy:

Mô đun hóa cung cấp tính trừu tượng hóa.


Mô-đun hóa giúp nhiều lập trình viên làm việc trên một vấn đề.
Mô-đun hóa cho phép bạn tái sử dụng công việc dễ dàng hơn.

Mô-đun hóa cung cấp tính trừu tượng


Một lý do khiến các chương trình được mô-đun hóa dễ hiểu hơn là chúng cho phép
lập trình viên để xem “bức tranh lớn”. Trừu tượng hóa là quá trình chú ý đến
các thuộc tính quan trọng trong khi bỏ qua các chi tiết không cần thiết. Trừu tượng là sự thiếu hiểu biết có chọn lọc.
Cuộc sống sẽ tẻ nhạt nếu không có sự trừu tượng. Ví dụ: bạn có thể tạo một danh sách những thứ để
hoàn thành ngày hôm nay:
Giặt quần áo
Gọi cho dì Nan
Bắt đầu học kỳ

Nếu không có sự trừu tượng, danh sách công việc sẽ bắt đầu:

Nhặt giỏ giặt


Đặt giỏ giặt vào ô tô
Lái xe đến Laundromat
Ra khỏi xe với giỏ
Đi bộ vào Laundromat
Đặt giỏ xuống
Tìm khu vực cho máy giặt
… và như thế.

Bạn có thể liệt kê hàng chục bước nữa trước khi hoàn thành việc giặt là và chuyển sang bước thứ hai
việc vặt trong danh sách ban đầu của bạn. Nếu bạn phải xem xét từng chi tiết nhỏ, cấp thấp của mọi nhiệm vụ trong
ngày của bạn, có thể bạn sẽ không bao giờ rời khỏi giường vào buổi sáng. Sử dụng cấp cao hơn,
danh sách trừu tượng hơn làm cho ngày của bạn có thể quản lý được. Tính trừu tượng làm cho các nhiệm vụ phức tạp trông đơn giản.

Các nghệ sĩ trừu tượng tạo ra những bức tranh trong đó họ chỉ nhìn thấy bức tranh lớn — màu sắc và hình thức — và bỏ qua
chi tiết. Trừu tượng có một ý nghĩa tương tự giữa các lập trình viên.

Tương tự như vậy, một số mức độ trừu tượng xảy ra trong mọi chương trình máy tính. Năm mươi năm trước, một
lập trình viên phải hiểu các hướng dẫn mạch cấp thấp mà máy tính sử dụng. Nhưng
giờ đây, các ngôn ngữ lập trình cấp cao mới hơn cho phép bạn sử dụng từ vựng giống như tiếng Anh trong
mà một câu lệnh rộng tương ứng với hàng chục lệnh máy. Không có vấn đề gì
ngôn ngữ lập trình cấp cao mà bạn sử dụng, nếu bạn hiển thị thông báo trên màn hình, bạn đang
không bao giờ bắt buộc phải hiểu cách màn hình hoạt động để tạo ra từng pixel trên màn hình. Bạn
Trang 15

viết một hướng dẫn như thông báo đầu ra và các chi tiết của các hoạt động phần cứng là
xử lý cho bạn bởi hệ điều hành.

Mô-đun cung cấp một cách khác để đạt được sự trừu tượng. Ví dụ, một chương trình trả lương có thể gọi
một mô-đun có tên computeFederalWithholdingTax () . Khi bạn gọi mô-đun này từ
chương trình, bạn sử dụng một câu lệnh; bản thân mô-đun có thể chứa hàng chục câu lệnh. Bạn
53
có thể viết chi tiết toán học của mô-đun sau này, người khác có thể viết chúng, hoặc bạn
có thể mua chúng từ một nguồn bên ngoài. Khi bạn lập kế hoạch cho chương trình trả lương chính của mình,
chỉ có mối quan tâm là thuế khấu lưu liên bang sẽ phải được tính toán; bạn lưu các chi tiết
cho sau này.

Mô-đun hóa giúp nhiều lập trình viên làm việc trên một vấn đề
Khi bạn chia bất kỳ nhiệm vụ lớn nào thành các mô-đun, bạn có khả năng dễ dàng phân chia
nhiệm vụ giữa những người khác nhau. Hiếm khi có một lập trình viên nào viết một chương trình thương mại
mà bạn mua. Xem xét bất kỳ chương trình xử lý văn bản, bảng tính hoặc cơ sở dữ liệu nào bạn có
đã sử dụng. Mỗi chương trình có rất nhiều tùy chọn và đáp ứng các lựa chọn của người dùng trong rất nhiều lựa chọn có thể
theo cách, sẽ mất nhiều năm để một lập trình viên viết tất cả các hướng dẫn.
Các nhà phát triển phần mềm chuyên nghiệp có thể viết các chương trình mới trong vài tuần hoặc vài tháng, thay vì
năm, bằng cách chia các chương trình lớn thành các mô-đun và gán mỗi mô-đun cho một cá nhân
lập trình viên hoặc nhóm.

Mô-đun hóa cho phép bạn sử dụng lại công việc


Nếu một mô-đun hữu ích và được viết tốt, bạn có thể muốn sử dụng nó nhiều lần trong một
chương trình hoặc trong các chương trình khác. Ví dụ, một quy trình xác minh tính hợp lệ của ngày tháng là
hữu ích trong nhiều chương trình được viết cho một doanh nghiệp. (Ví dụ: giá trị tháng hợp lệ nếu
nó không thấp hơn 1 hoặc cao hơn 12, giá trị ngày có giá trị nếu nó không thấp hơn
1 hoặc cao hơn 31 nếu tháng là 1, v.v.) Nếu tệp nhân sự được vi tính hóa
chứa ngày sinh, ngày tuyển dụng, ngày thăng chức cuối cùng và ngày chấm dứt của mỗi nhân viên,
mô-đun xác nhận ngày tháng có thể được sử dụng bốn lần với mỗi hồ sơ nhân viên. Khác
các chương trình trong một tổ chức cũng có thể sử dụng mô-đun; những chương trình này có thể xuất xưởng
đơn đặt hàng của khách hàng, lên kế hoạch tổ chức tiệc sinh nhật của nhân viên hoặc tính toán thời điểm thanh toán khoản vay
nên được thực hiện. Nếu bạn viết hướng dẫn kiểm tra ngày tháng nên chúng bị vướng vào
các câu lệnh khác trong một chương trình, chúng rất khó để cô lập và sử dụng lại. Mặt khác,
nếu bạn đặt các hướng dẫn trong một mô-đun riêng biệt, thiết bị này rất dễ sử dụng và di động đến
các ứng dụng khác. Tính năng của các chương trình mô-đun cho phép các mô-đun riêng lẻ
được sử dụng trong nhiều ứng dụng là khả năng tái sử dụng .
Bạn có thể tìm thấy nhiều ví dụ thực tế về khả năng tái sử dụng. Khi bạn xây một ngôi nhà, bạn không
phát minh ra hệ thống ống nước và hệ thống sưởi ấm; bạn kết hợp các hệ thống với các thiết kế đã được chứng minh. Điều này
chắc chắn giảm thời gian và công sức xây nhà. Hệ thống bạn chọn đang ở trong
dịch vụ tại các ngôi nhà khác, vì vậy chúng đã được thử nghiệm trong nhiều trường hợp, ngày càng tăng
độ tin cậy của họ. Độ tin cậy là đặc điểm của các chương trình đảm bảo cho bạn một mô-đun đã được
được chứng minh là hoạt động chính xác. Phần mềm đáng tin cậy giúp tiết kiệm thời gian và tiền bạc. Nếu bạn tạo
Trang 16

các thành phần chức năng của chương trình của bạn dưới dạng các mô-đun độc lập và kiểm tra chúng trong
các chương trình hiện tại, phần lớn công việc sẽ được thực hiện khi bạn sử dụng các mô-đun trong tương lai
các ứng dụng.
54

HAI SỰ THẬT & MỘT LỜI NÓI DỐI


Hiểu những lợi thế của mô-đun hóa

1. Mô-đun hóa loại bỏ tính trừu tượng, một tính năng làm cho các chương trình nhiều hơn
gây nhầm lẫn.

2. Mô-đun hóa giúp nhiều lập trình viên làm việc trên một vấn đề dễ dàng hơn.

3. Mô-đun hóa cho phép bạn sử dụng lại công việc dễ dàng hơn.

Modularizing một chương trình


Hầu hết các chương trình bao gồm một chương trình chính , trong đó có các bước cơ bản, hoặc dòng chính
logic , của chương trình. Sau đó, chương trình chính truy cập vào các mô-đun cung cấp
chi tiết.

Khi bạn tạo một mô-đun, bạn bao gồm những điều sau:
Tiêu đề — Tiêu đề mô-đun bao gồm số nhận dạng mô-đun và có thể khác
thông tin nhận dạng cần thiết.

Một phần thân — Phần thân mô-đun chứa tất cả các câu lệnh trong mô-đun.
Một sự trở lại statement-Các mô-đun trở lại tuyên bố đánh dấu sự kết thúc của mô-đun và
xác định điểm tại đó điều khiển quay trở lại chương trình hoặc mô-đun được gọi là
mô-đun. Trong hầu hết các ngôn ngữ lập trình, nếu bạn không bao gồm câu lệnh trả về tại
khi kết thúc mô-đun, logic vẫn sẽ trả về. Tuy nhiên, cuốn sách này tuân theo quy ước
của một cách rõ ràng bao gồm một câu lệnh trả về với mọi mô-đun.

Đặt tên cho một mô-đun tương tự như đặt tên cho một biến. Các quy tắc và quy ước đặt tên
các mô-đun hơi khác nhau trong mọi ngôn ngữ lập trình, nhưng trong văn bản này, tên mô-đun
tuân theo các quy tắc chung được sử dụng cho các số nhận dạng biến:
Tên mô-đun phải bắt đầu bằng một chữ cái và không được chứa khoảng trắng.
Tên mô-đun nên có một số ý nghĩa.
Trang 17

Mặc dù nó không phải là một yêu cầu của bất kỳ ngôn ngữ lập trình nào, nhưng việc sử dụng một động từ thường là hợp lý.
hoặc một phần của tên mô-đun, vì mô-đun thực hiện một số hành động. Tên mô-đun điển hình bắt đầu bằng hành động
các từ như nhận được, tính toán và hiển thị. Khi bạn lập trình bằng ngôn ngữ trực quan sử dụng màn hình
các thành phần như nút và hộp văn bản, tên mô-đun thường chứa các động từ đại diện cho người dùng
các hành động, chẳng hạn như nhấp hoặc kéo.

55
Ngoài ra, trong văn bản này, tên mô-đun được theo sau bởi một tập hợp các dấu ngoặc đơn. Điều này sẽ giúp
bạn phân biệt tên mô-đun với tên biến. Phong cách này tương ứng với cách
mô-đun được đặt tên trong nhiều ngôn ngữ lập trình, chẳng hạn như Java, C ++ và C #.

Khi bạn tìm hiểu thêm về các mô-đun trong các ngôn ngữ lập trình cụ thể, bạn sẽ thấy rằng đôi khi bạn đặt
tên biến trong dấu ngoặc đơn theo sau tên mô-đun. Bất kỳ biến nào được đặt trong dấu ngoặc đơn
chứa thông tin bạn muốn gửi đến mô-đun. Hiện tại, dấu ngoặc đơn ở cuối tên mô-đun
sẽ trống trong cuốn sách này.

Khi một chương trình chính muốn sử dụng một mô-đun, nó sẽ gọi mô-đun đó. Một mô-đun có thể gọi một mô-đun khác
và mô-đun được gọi có thể gọi một mô-đun khác. Số lượng cuộc gọi theo chuỗi chỉ có giới hạn
theo dung lượng bộ nhớ có sẵn trên máy tính của bạn. Trong cuốn sách này, biểu tượng sơ đồ
được sử dụng để gọi một mô-đun là một hình chữ nhật với một thanh ngang trên cùng. Bạn đặt tên của
mô-đun bạn đang gọi bên trong hình chữ nhật.

Một số lập trình viên sử dụng một hình chữ nhật với các sọc dọc xuống mỗi bên để đại diện cho một mô-đun trong một sơ đồ,
và cuốn sách này sử dụng quy ước đó nếu một mô-đun nằm ngoài một chương trình. Ví dụ, viết sẵn, dựng sẵn
mô-đun tạo các số ngẫu nhiên, tính toán các hàm lượng giác tiêu chuẩn và thường xuyên sắp xếp các giá trị
là bên ngoài các chương trình của bạn. Tuy nhiên, nếu mô-đun đang được tạo như một phần của chương trình, sách
sử dụng một hình chữ nhật với một sọc duy nhất trên đỉnh.

Trong một sơ đồ, bạn vẽ từng mô-đun riêng biệt với các ký hiệu lính canh của riêng nó. Các

đầu sentinel chứa tên của mô-đun. Tên này phải giống với
tên được sử dụng trong chương trình hoặc mô-đun gọi. Kết thúc sentinel chứa trả về ,
chỉ ra rằng khi mô-đun kết thúc, tiến trình logic của các câu lệnh sẽ
thoát khỏi mô-đun và quay lại chương trình hoặc mô-đun đang gọi. Tương tự, trong mã giả,
bạn bắt đầu mỗi mô-đun với tên của nó và kết thúc bằng một câu lệnh trả về ; mô-đun
câu lệnh name và return được căn chỉnh theo chiều dọc và tất cả các câu lệnh mô-đun đều
thụt vào giữa chúng.

Ví dụ, hãy xem xét chương trình trong Hình 2-3, không chứa bất kỳ mô-đun nào. Nó
chấp nhận tên và số dư đến hạn của khách hàng làm đầu vào và lập hóa đơn. Ở đầu hóa đơn,
tên và địa chỉ của công ty được hiển thị trên ba dòng, theo sau là
tên khách hàng và số dư đến hạn. Để hiển thị tên và địa chỉ công ty, bạn có thể chỉ cần
bao gồm ba câu lệnh đầu ra trong logic dòng chính của một chương trình, như thể hiện trong Hình 2-3, hoặc
bạn có thể modularizethe chương trình bằng cách tạo cả logic dòng chính và displayAddressInfo ()
mô-đun, như trong Hình 2-4.
Trang 18

khởi đầu Trong một chương trình tương tác,


bạn sẽ thêm lời nhắc
chẳng hạn như Vui lòng nhập
tên và Vui lòng nhập
Tuyên bố thăng bằng. Đây đã được
56 tên chuỗi bỏ qua ở đây để giữ
số dư ví dụ ngắn gọn. Bạn sẽ
tìm hiểu thêm về lời nhắc
ở phần sau của chương này.
tên đầu vào,
thăng bằng
khởi đầu

Tuyên bố

đầu ra "ABC tên chuỗi


Chế tạo" số dư

tên đầu vào, số dư


đầu ra "ABC Manufacturing"
đầu ra "47 Park
đầu ra "47 Park Lane"
Làn đường "
đầu ra "Omro, WI 54963"
đầu ra "Khách hàng:", tên
đầu ra "Omro, đầu ra "Tổng:", số dư
WI 54963 "
dừng lại

đầu ra "Khách hàng:",


Tên

đầu ra "Tổng:",
thăng bằng

dừng lại

Hình 2-3 Chương trình tạo hóa đơn chỉ sử dụng chương trình chính
© 2015 Cengage Learning
khởi đầu

Trang 19
Tuyên bố
tên chuỗi
số dư

displayAddressInfo ()
tên đầu vào,
thăng bằng

đầu ra "ABC
Chế tạo"
displayAddressInfo ()

đầu ra "47 Park


đầu ra "Khách hàng:", Làn đường "
Tên

đầu ra "Omro, WI
đầu ra "Tổng:", 54963 "
thăng bằng

trở về
dừng lại
57

khởi đầu

Tuyên bố
tên chuỗi
số dư

tên đầu vào, số dư

displayAddressInfo ()
đầu ra "Khách hàng:", tên

đầu ra "Tổng:", số dư

dừng lại

displayAddressInfo ()
đầu ra "ABC Manufacturing"

đầu ra "47 Park Lane"

đầu ra "Omro, WI 54963"


trở về

Hình 2-4 Chương trình tạo hóa đơn sử dụng chương trình chính gọi mô-đun displayAddressInfo ()
© 2015 Cengage Learning

Khi mô-đun displayAddressInfo () được gọi trong Hình 2-4, logic chuyển từ
chương trình chính của mô-đun displayAddressInfo () , như được hiển thị bằng mũi tên lớn màu đỏ trong
cả lưu đồ và mã giả. Ở đó, mỗi câu lệnh mô-đun thực thi lần lượt
trước khi điều khiển logic được chuyển trở lại chương trình chính, nơi nó tiếp tục với
Trang 20

câu lệnh theo sau lệnh gọi mô-đun, như được hiển thị bằng mũi tên lớn màu xanh lam. Lập trình viên nói
các câu lệnh được chứa trong một mô-đun đã được đóng gói .

Cả hai chương trình trong Hình 2-3 và 2-4 đều không vượt trội hơn chương trình kia về mặt
chức năng; cả hai đều thực hiện chính xác các nhiệm vụ giống nhau theo cùng một thứ tự. Tuy nhiên, bạn có thể
thích phiên bản được mô-đun hóa của chương trình vì ít nhất hai lý do:
58
Đầu tiên, chương trình chính vẫn ngắn gọn và dễ theo dõi vì nó chỉ chứa một
câu lệnh để gọi mô-đun, thay vì ba câu lệnh đầu ra riêng biệt để thực hiện
công việc của mô-đun.

Thứ hai, một mô-đun rất dễ sử dụng lại. Sau khi bạn tạo mô-đun thông tin địa chỉ, bạn
có thể sử dụng nó trong bất kỳ ứng dụng nào cần tên và địa chỉ của công ty. Nói cách khác,
bạn thực hiện công việc một lần và sau đó bạn có thể sử dụng mô-đun nhiều lần.

Một nhược điểm tiềm ẩn trong việc tạo các mô-đun và di chuyển giữa chúng là chi phí phát sinh. Máy tính
theo dõi địa chỉ bộ nhớ chính xác mà nó sẽ trả về sau khi thực thi một mô-đun bằng cách ghi lại
địa chỉ bộ nhớ ở một vị trí được gọi là ngăn xếp. Quá trình này yêu cầu một lượng nhỏ máy tính
thời gian và nguồn lực. Trong hầu hết các trường hợp, lợi thế của việc tạo mô-đun vượt xa số lượng nhỏ
chi phí yêu cầu.

Việc xác định thời điểm mô đun hóa một chương trình không phụ thuộc vào một bộ quy tắc cố định; nó
đòi hỏi kinh nghiệm và cái nhìn sâu sắc. Các lập trình viên tuân theo một số nguyên tắc khi quyết định cách thức
xa để chia nhỏ các mô-đun hoặc số lượng cần đưa vào mỗi mô-đun. Một số công ty có thể có
các quy tắc tùy ý, chẳng hạn như "hướng dẫn của mô-đun không bao giờ được chiếm nhiều hơn một trang" hoặc "a
mô-đun không bao giờ được có nhiều hơn 30 câu lệnh, ”hoặc“ không bao giờ có mô-đun chỉ có một
tuyên bố." Thay vì sử dụng các quy tắc tùy tiện như vậy, một chính sách tốt hơn là đặt cùng nhau
các câu lệnh đóng góp vào một nhiệm vụ cụ thể. Các tuyên bố càng đóng góp vào
cùng một công việc, chức năng gắn kết của mô-đun càng lớn. Một mô-đun kiểm tra
tính hợp lệ của giá trị của biến ngày tháng hoặc giá trị yêu cầu người dùng nhập giá trị và chấp nhận nó làm đầu vào, là
được coi là cố kết. Một mô-đun kiểm tra tính hợp lệ của ngày, khấu trừ phí bảo hiểm và
tính thuế khấu lưu của liên bang cho một nhân viên sẽ kém gắn kết hơn.

Chương 9 của phiên bản toàn diện của cuốn sách này cung cấp thêm thông tin về việc thiết kế các mô-đun cho
tính liên kết cao. Nó cũng khám phá chủ đề ghép nối, là thước đo mức độ phụ thuộc vào các mô-đun
lẫn nhau.

Xem video Modularizing một chương trình.

Khai báo các biến và hằng số trong các mô-đun


Bạn có thể đặt bất kỳ câu lệnh nào trong các mô-đun, bao gồm đầu vào, xử lý và đầu ra
các câu lệnh. Bạn cũng có thể bao gồm các khai báo biến và hằng trong các mô-đun. Đối với
ví dụ, bạn có thể quyết định sửa đổi chương trình thanh toán trong Hình 2-4 để nó trông giống như
Trang 21

Modularizing một chương trình

trong Hình 2-5. Trong phiên bản này của chương trình, ba hằng số được đặt tên giữ ba dòng
dữ liệu công ty được khai báo trong mô-đun displayAddressInfo () . (Xem phần đổ bóng.)

khởi đầu 59
displayAddressInfo ()

Tuyên bố Tuyên bố
tên chuỗi
string LINE1 = "Sản xuất ABC"
số dư
string LINE2 = "47 Ngõ Công viên"
string LINE3 = "Omro, WI 54963"

tên đầu vào,


thăng bằng
đầu ra LINE1

displayAddressInfo ()
đầu ra LINE2

đầu ra "Khách hàng:",


Tên
đầu ra LINE3

đầu ra "Tổng:",
thăng bằng trở về

khởi đầu
dừng lại
Tuyên bố
tên chuỗi
số dư
tên đầu vào, số dư
displayAddressInfo ()
đầu ra "Khách hàng:", tên
đầu ra "Tổng:", số dư
dừng lại

displayAddressInfo ()
Tuyên bố
string LINE1 = "Sản xuất ABC"
string LINE2 = "47 Ngõ Công viên"
string LINE3 = "Omro, WI 54963"
đầu ra LINE1
đầu ra LINE2
đầu ra LINE3
trở về

Hình 2-5 Chương trình thanh toán với các hằng số được khai báo trong mô-đun
© 2015 Cengage Learning
Trang 22

Các biến và hằng số chỉ có thể sử dụng được trong mô-đun mà chúng được khai báo.
Các nhà lập trình cho biết các mục dữ liệu chỉ hiển thị hoặc trong phạm vi trong mô-đun mà
chúng được khai báo. Điều đó có nghĩa là chương trình chỉ nhận ra chúng ở đó. Lập trình viên cũng
nói rằng các biến và hằng là cục bộ của mô-đun mà chúng được khai báo. Trong khác
từ, khi các chuỗi LINE1 , LINE2 và LINE3 được khai báo trong displayAddressInfo ()
mô-đun trong Hình 2-5, chúng không được nhận dạng và không thể được sử dụng bởi mô-đun chính.
Một trong những động lực để tạo mô-đun là các mô-đun riêng biệt có thể dễ dàng sử dụng lại trong
nhiều chương trình. Nếu mô-đun displayAddressInfo () sẽ được một số chương trình sử dụng
trong tổ chức, có nghĩa là các định nghĩa cho các biến và hằng số của nó
phải đi kèm với nó. Điều này làm cho các mô-đun di động hơn ; nghĩa là, họ sống khép kín
đơn vị dễ dàng vận chuyển.
Bên cạnh các biến cục bộ và hằng số, bạn có thể tạo các biến và hằng số toàn cục. Toàn cầu
các biến và hằng được biết đến với toàn bộ chương trình; họ được cho là được khai báo tại
cấp độ chương trình. Điều đó có nghĩa là chúng có thể nhìn thấy và sử dụng được trong tất cả các mô-đun được gọi bởi
chương trình. Điều ngược lại là không đúng - các biến và hằng số được khai báo trong một mô-đun không
sử dụng được ở nơi khác; chúng chỉ hiển thị với mô-đun đó.
Trong nhiều ngôn ngữ lập trình hiện đại, bản thân chương trình chính là một mô-đun, vì vậy các biến
và các hằng được khai báo ở đó không thể được sử dụng ở nơi khác. Để làm các ví dụ trong cuốn sách này
dễ theo dõi hơn, các biến và hằng được khai báo khi bắt đầu chương trình chính sẽ
được coi là toàn cầu và có thể sử dụng được trong tất cả các mô-đun. Cho đến Chương 9 trong phiên bản toàn diện,
cuốn sách này sẽ chỉ sử dụng các biến và hằng số toàn cục để bạn có thể tập trung vào
logic và chưa quan tâm đến các kỹ thuật cần thiết để tạo dữ liệu của một mô-đun
có sẵn cho người khác. Ví dụ, trong Hình 2-5, tên các biến chương trình chính và
số dư là các biến toàn cục và có thể được sử dụng bởi bất kỳ mô-đun nào.

Nhiều lập trình viên không tán thành việc sử dụng các biến và hằng số toàn cục. Chúng được sử dụng ở đây để bạn có thể
dễ dàng hiểu mô-đun hóa hơn trước khi bạn học các kỹ thuật gửi các biến cục bộ từ một
mô-đun khác. Chương 9 của phiên bản toàn diện của cuốn sách này sẽ mô tả cách bạn có thể thực hiện
mọi biến cục bộ.

Hiểu cấu hình phổ biến nhất cho Logic đường chính
Trong Chương 1, bạn đã biết rằng một chương trình thủ tục chứa các thủ tục tuân theo một
khác trong trình tự. Logic dòng chính của hầu hết mọi chương trình máy tính thủ tục đều có thể
tuân theo một cấu trúc chung bao gồm ba phần riêng biệt:
1. Các công việc vệ sinh bao gồm bất kỳ bước nào bạn phải thực hiện khi bắt đầu
chương trình để sẵn sàng cho phần còn lại của chương trình. Chúng có thể bao gồm các nhiệm vụ như
khai báo biến và hằng số, hiển thị hướng dẫn cho người dùng, hiển thị báo cáo
tiêu đề, mở bất kỳ tệp nào mà chương trình yêu cầu và nhập phần dữ liệu đầu tiên.

Nhập mục dữ liệu đầu tiên luôn là một phần của mô-đun dọn phòng. Bạn sẽ học lý thuyết
đằng sau thực tiễn này trong Chương 3. Chương 7 bao gồm xử lý tệp, bao gồm ý nghĩa của việc mở và
đóng một tệp.
Trang 23

2. Các nhiệm vụ vòng lặp chi tiết thực hiện công việc cốt lõi của chương trình. Khi một chương trình xử lý nhiều
các bản ghi, các tác vụ vòng lặp chi tiết thực thi lặp đi lặp lại cho mỗi tập dữ liệu đầu vào cho đến khi có
không còn nữa. Ví dụ, trong một chương trình tính lương, cùng một tập hợp các phép tính được thực hiện
lặp đi lặp lại cho đến khi kiểm tra được cho từng nhân viên.

3. Nhiệm vụ cuối công việc là các bước bạn thực hiện ở cuối chương trình để hoàn thành
61
ứng dụng. Bạn có thể gọi đây là các nhiệm vụ hoàn thành hoặc dọn dẹp. Chúng có thể bao gồm
hiển thị tổng hoặc các thông báo cuối cùng khác và đóng mọi tệp đang mở.
Hình 2-6 cho thấy mối quan hệ của ba phần chương trình điển hình này. Chú ý làm thế nào
Các tác vụ housekeeping () và endOfJob () chỉ
được thực thi một lần, nhưng các tác vụ detailLoop ()
lặp lại miễn là điều kiện eof chưa được đáp ứng. Lưu đồ sử dụng một dòng để hiển thị
mô-đun detailLoop () lặp lại như thế nào ; các giả sử dụng các từ trong khi và endwhile
để chứa các câu lệnh thực thi trong một vòng lặp. Bạn sẽ tìm hiểu thêm về thời gian và
endwhile điều
khoản trong chương tiếp theo; bây giờ, hãy hiểu rằng chúng là một cách
diễn đạt các hành động lặp đi lặp lại.

khởi đầu

Tuyên bố

khởi đầu
dọn phòng () Tuyên bố
dọn phòng ()
trong khi không có
detailLoop ()
Đúng
không eof? cuối cùng
detailLoop ()
endOfJob ()
dừng lại
Không

endOfJob ()

dừng lại

Hình 2-6 Lưu đồ và mã giả của logic dòng chính cho một chương trình thủ tục điển hình
© 2015 Cengage Learning
Trang 24

62

Nhiều công việc hàng ngày tuân theo định dạng ba mô-đun vừa được mô tả. Ví dụ, một cái kẹo
Nhà máy mở cửa vào buổi sáng, và các máy móc được khởi động và chứa đầy nguyên liệu. Những
Các nhiệm vụ dọn phòng chỉ diễn ra một lần vào đầu ngày. Sau đó, lặp đi lặp lại trong ngày,
kẹo được sản xuất. Quá trình này có thể thực hiện nhiều bước, mỗi bước xảy ra nhiều
lần. Đây là các bước trong vòng lặp chi tiết. Sau đó, vào cuối ngày, máy móc sẽ
làm sạch và tắt. Đây là những nhiệm vụ cuối cùng của công việc.
Không phải tất cả các chương trình đều có định dạng logic như trong Hình 2-6, nhưng nhiều chương trình thì có. Giữ cái này
cấu hình chung khi bạn nghĩ về cách bạn có thể tổ chức nhiều chương trình.
Ví dụ, Hình 2-7 cho thấy một báo cáo tiền lương mẫu cho một công ty nhỏ. Một người dùng nhập
tên nhân viên cho đến khi không còn nữa để nhập, lúc này người dùng nhập XXX.
Miễn là tên đã nhập không phải là XXX, người dùng nhập tổng lương hàng tuần của nhân viên.
Các khoản khấu trừ được tính bằng 25% cố định của tổng lương và số liệu thống kê cho từng
nhân viên là đầu ra. Người dùng nhập tên khác và miễn là nó không phải là XXX,
quá trình tiếp tục. Kiểm tra logic trong Hình 2-8 để xác định các thành phần trong
quản lý nhà, vòng lặp chi tiết và các nhiệm vụ cuối công việc. Bạn sẽ tìm hiểu thêm về bảng lương
chương trình báo cáo trong vài chương tiếp theo. Bây giờ, hãy tập trung vào bức tranh toàn cảnh về cách
một ứng dụng điển hình hoạt động.

Báo cáo lương

Tên Tổng Các khoản khấu trừ Mạng lưới

Andrews 1000,00 250,00 750,00

nâu 1400,00 350,00 1050,00

Carter 1275,00 318,75 956,25


Trẻ 1100,00 275,00 825,00

*** Cuối báo cáo

Hình 2-7 Mẫu báo cáo bảng lương


© 2015 Cengage Learning
Trang 25

khởi đầu dọn phòng ()

Tuyên bố đầu ra
tên chuỗi REPORT_HEADING
num tổng 63
khấu trừ num
num net đầu ra
num RATE = 0,25
COLUMN_HEADING
string QUIT = "XXX"
string REPORT_HEADING = "Báo cáo Bảng lương"
string COLUMN_HEADING = "Tổng Tên
Khấu trừ ròng " tên đầu vào
string END_LINE = "*** Kết thúc báo cáo"

trở về
dọn phòng ()
Đúng
tên không bằng
detailLoop ()
đến QUIT?
Một số lập trình viên sẽ không bận tâm đến
tạo một mô-đun chỉ chứa một hoặc
Không hai câu lệnh. Thay vào đó, họ sẽ giữ
detailLoop ()
các câu lệnh này trong logic dòng chính. Các
mô-đun được hiển thị ở đây để bạn có thể tốt hơn
endOfJob () xem bức tranh lớn về cách dòng chính
logic hoạt động bằng cách sử dụng bắt đầu, lặp lại,
tổng đầu vào
và kết thúc nhiệm vụ.

dừng lại

khấu trừ =
Tổng tỉ lệ endOfJob ()

net = đầu ra END_LINE


gộp - khấu trừ

trở về
tên đầu ra,
tổng, khấu trừ, ròng

tên đầu vào

trở về

Hình 2-8 Logic cho báo cáo bảng lương


© 2015 Cengage Learning
Trang 26

HAI SỰ THẬT & MỘT LỜI NÓI DỐI


Modularizing một chương trình

1. Một chương trình gọi sẽ gọi tên của mô-đun khi nó muốn sử dụng mô-đun.

2. Bất cứ khi nào một chương trình chính gọi một mô-đun, logic sẽ chuyển đến mô-đun đó;
khi mô-đun kết thúc, chương trình kết thúc.

3. Các công việc dọn phòng bao gồm bất kỳ bước nào bạn phải thực hiện chỉ một lần tại
bắt đầu một chương trình để sẵn sàng cho phần còn lại của chương trình.

Tạo biểu đồ phân cấp


Bạn có thể đã thấy các biểu đồ phân cấp cho các tổ chức, chẳng hạn như biểu đồ trong Hình 2-9. Các
biểu đồ cho thấy ai báo cáo cho ai, không báo cáo khi nào hoặc tần suất ra sao.
CEO

VP TIẾP THỊ VP THÔNG TIN

PHƯƠNG ĐÔNG MIỀN TÂY VẬN HÀNH LẬP TRÌNH


QUẢN LÝ KINH DOANH QUẢN LÝ KINH DOANH GIÁM ĐỐC GIÁM ĐỐC

TỐI
NGƯỜI LẬP TRÌNH LẬP TRÌNH
NHÀ ĐIỀU HÀNH

Hình 2-9 Biểu đồ phân cấp tổ chức


© 2015 Cengage Learning

Khi một chương trình có một số mô-đun gọi các mô-đun khác, người lập trình thường sử dụng một chương trình
biểu đồ phân cấp (đôi khi được gọi là biểu đồ cấu trúc) hoạt động theo cách tương tự như
hiển thị bức tranh tổng thể về cách các mô-đun liên quan với nhau. Biểu đồ phân cấp không
cho bạn biết những tác vụ nào sẽ được thực hiện trong một mô-đun, khi các mô-đun được gọi, cách
thực thi mô-đun hoặc tại sao chúng được gọi - thông tin đó nằm trong lưu đồ hoặc mã giả.
Biểu đồ phân cấp chỉ cho bạn biết mô-đun nào tồn tại trong một chương trình và mô-đun nào gọi
Trang 27

khác. Biểu đồ phân cấp cho chương trình trong Hình 2-8 giống như Hình 2-10. Nó cho thấy rằng
mô-đun chính gọi ba mô-đun khác— housekeeping () , detailLoop () và endOfJob () .

chương trình chính


65

dọn phòng () detailLoop () endOfJob ()

Hình 2-10 Biểu đồ phân cấp của chương trình báo cáo tiền lương trong Hình 2-8
© 2015 Cengage Learning

Hình 2-11 cho thấy một ví dụ về biểu đồ phân cấp cho chương trình thanh toán của một đơn đặt hàng qua thư
Công ty. Biểu đồ phân cấp dành cho một chương trình phức tạp hơn, nhưng giống như báo cáo bảng lương
biểu đồ trong Hình 2-10, nó cung cấp tên mô-đun và tổng quan chung về các nhiệm vụ
thực hiện, mà không chỉ định bất kỳ chi tiết.

chương trình chính

dọn phòng () detailLoop () endOfJob ()

getOrder () processOrder () getOrder () displaySummaries ()

checkInventory () checkCredit () computeBill ()

computeTax ()

Hình 2-11 Biểu đồ phân cấp chương trình thanh toán


© 2015 Cengage Learning

Bởi vì các mô-đun chương trình có thể sử dụng lại, một mô-đun cụ thể có thể được gọi từ một số vị trí
trong một chương trình. Ví dụ: trong biểu đồ phân cấp chương trình thanh toán ở Hình 2-11, bạn có thể thấy
rằng mô-đun getOrder () được sử dụng hai lần. Theo quy ước, bạn bôi đen một góc của mỗi hộp
đại diện cho một mô-đun được sử dụng nhiều hơn một lần. Hành động này cảnh báo người đọc rằng bất kỳ thay đổi nào đối với điều này
mô-đun có thể có hậu quả ở nhiều vị trí.
Trang 28

Biểu đồ phân cấp có thể vừa là một công cụ lập kế hoạch để phát triển mối quan hệ tổng thể của
chương trình mô-đun trước khi bạn viết chúng và một công cụ tài liệu để giúp những người khác xem cách
các mô-đun có liên quan sau khi một chương trình được viết. Ví dụ: nếu luật thuế thay đổi,
lập trình viên có thể được yêu cầu viết lại mô-đun computeTax () trong chương trình thanh toán
được vẽ trên hình 2-11. Khi người lập trình thay đổi mô-đun computeTax () ,
biểu đồ phân cấp hiển thị các mô-đun phụ thuộc khác có thể bị ảnh hưởng. Biểu đồ phân cấp là
hữu ích để có được bức tranh toàn cảnh trong một chương trình phức tạp.

Biểu đồ phân cấp được sử dụng trong lập trình thủ tục, nhưng các loại biểu đồ khác thường được sử dụng trong
môi trường hướng đối tượng. Chương 13 của ấn bản toàn diện của cuốn sách này mô tả sự Hợp nhất
Ngôn ngữ mô hình hóa, sử dụng một tập hợp các sơ đồ để mô tả một hệ thống.

HAI SỰ THẬT & MỘT LỜI NÓI DỐI


Tạo biểu đồ phân cấp

1. Bạn có thể sử dụng biểu đồ phân cấp để minh họa mối quan hệ của các mô-đun.

2. Biểu đồ phân cấp cho bạn biết những tác vụ nào sẽ được thực hiện trong một mô-đun.

3. Biểu đồ phân cấp chỉ cho bạn biết mô-đun nào gọi các mô-đun khác.

Đặc điểm của thiết kế chương trình tốt


Khi các chương trình của bạn trở nên lớn hơn và phức tạp hơn, nhu cầu lập kế hoạch tốt và
thiết kế tăng lên. Hãy nghĩ về một ứng dụng bạn sử dụng, chẳng hạn như trình xử lý văn bản hoặc bảng tính.
Số lượng và sự đa dạng của các tùy chọn người dùng là đáng kinh ngạc. Nó không chỉ là không thể cho một
một lập trình viên để viết một ứng dụng như vậy, nhưng không có kế hoạch và thiết kế kỹ lưỡng,
các thành phần sẽ không bao giờ hoạt động bình thường với nhau. Tốt nhất, mỗi mô-đun chương trình bạn
thiết kế cần hoạt động tốt như một thành phần độc lập và như một phần tử của các hệ thống lớn hơn.
Giống như một ngôi nhà có hệ thống ống nước kém hoặc một chiếc xe có hệ thống phanh kém là một sai sót nghiêm trọng, một chiếc máy tính-
ứng dụng dựa trên chỉ có thể có chức năng cao nếu mỗi thành phần được thiết kế tốt. Đi dạo
thông qua logic của chương trình của bạn trên giấy (được gọi là kiểm tra bàn, như bạn đã học trong Chương 1) là
một bước quan trọng để đạt được các chương trình ưu việt. Ngoài ra, bạn có thể triển khai một số
thiết kế các tính năng trong khi tạo các chương trình dễ viết và dễ bảo trì hơn. Để tạo tốt
bạn nên làm như sau:

Cung cấp các bình luận về chương trình nếu thích hợp.

Chọn số nhận dạng một cách cẩn thận.


Trang 29

Cố gắng thiết kế các tuyên bố rõ ràng trong các chương trình và mô-đun của bạn.
Viết lời nhắc rõ ràng và đầu vào tiếng vọng.

Tiếp tục duy trì thói quen lập trình tốt khi bạn phát triển kỹ năng lập trình của mình.

Sử dụng Nhận xét Chương trình


Khi bạn viết chương trình, bạn thường có thể muốn chèn các chú thích của chương trình. Chương trình
nhận xét là lời giải thích bằng văn bản không phải là một phần của logic chương trình nhưng đóng vai trò như
tài liệu cho độc giả của chương trình. Nói cách khác, chúng là những tuyên bố không mang tính quyết định
giúp người đọc hiểu được các câu lệnh lập trình. Người đọc có thể bao gồm những người dùng trợ giúp
bạn kiểm tra chương trình và các lập trình viên khác, những người có thể phải sửa đổi chương trình của bạn trong
tương lai. Ngay cả bạn, với tư cách là tác giả của chương trình, sẽ đánh giá cao những nhận xét khi bạn đưa ra
sửa đổi trong tương lai và quên lý do tại sao bạn đã xây dựng một tuyên bố theo một cách nhất định.
Cú pháp được sử dụng để tạo chú thích chương trình khác nhau giữa các ngôn ngữ lập trình. Điều này
sách bắt đầu nhận xét bằng mã giả với hai dấu gạch chéo về phía trước. Ví dụ, Hình 2-12
chứa các nhận xét giải thích nguồn gốc và mục đích của các biến trong chương trình bất động sản.

Nhận xét chương trình là một loại tài liệu nội bộ. Thuật ngữ này phân biệt chúng với hỗ trợ
tài liệu bên ngoài chương trình, được gọi là tài liệu bên ngoài. Phụ lục C thảo luận về các
các loại tài liệu.

Tuyên bố
num sqFeet
// sqFeet là ước tính do người bán tài sản cung cấp
num pricePerFoot
// pricePerFoot được xác định theo điều kiện thị trường hiện tại
num lotPremium
// lotPremium phụ thuộc vào các tiện nghi, chẳng hạn như lô có phải là mặt nước hay không

Hình 2-12 Mã giả khai báo các biến và bao gồm các chú thích
© 2015 Cengage Learning

Trong sơ đồ, bạn có thể sử dụng biểu tượng chú thích để chứa thông tin mở rộng về những gì
được lưu trữ trong một biểu tượng lưu đồ khác. Một biểu tượng chú thích thường được biểu diễn bằng một
hộp ba mặt được kết nối với bước mà nó tham chiếu bằng một đường đứt nét. Chú thích
các biểu tượng được sử dụng để chứa các bình luận hoặc đôi khi là các câu lệnh quá dài để có thể xếp gọn gàng
thành một biểu tượng lưu đồ. Ví dụ, Hình 2-13 cho thấy cách một lập trình viên có thể sử dụng một số
các ký hiệu chú thích trong một sơ đồ cho một chương trình trả lương.
khởi đầu
Trang 30

Tuyên bố
string PROMPT = "Nhập giờ làm việc:" Lưu ý: RATE dự kiến sẽ

​​
num giờ tăng vào ngày 1 tháng Giêng.
num RATE = 13,00
num trả

đầu ra PROMPT

giờ đầu vào

68
Chương trình giả định tất cả nhân viên
pay = giờ * RATE thực hiện cùng một tiêu chuẩn hàng giờ
tỷ lệ.

trả đầu ra

dừng lại

Hình 2-13 Lưu đồ bao gồm các ký hiệu chú thích


© 2015 Cengage Learning

Bạn có thể sẽ sử dụng nhận xét trong các chương trình được mã hóa của mình thường xuyên hơn so với việc bạn sử dụng chúng trong mã giả
hoặc lưu đồ. Đối với một điều, lưu đồ và mã giả giống tiếng Anh hơn mã trong một số
ngôn ngữ, do đó, các tuyên bố của bạn có thể ít khó hiểu hơn. Ngoài ra, nhận xét của bạn sẽ vẫn còn trong chương trình như
một phần của tài liệu chương trình, nhưng các công cụ lập kế hoạch của bạn có thể bị loại bỏ khi chương trình
đi vào sản xuất.

Việc bao gồm nhận xét chương trình là không cần thiết để tạo chương trình làm việc, nhưng nhận xét
có thể giúp bạn nhớ mục đích của các biến hoặc giải thích các phép tính phức tạp,
đặc biệt là khi bạn quay lại một chương trình vài tháng hoặc vài năm sau khi viết nó. Một số sinh viên
không thích đưa nhận xét vào chương trình của họ vì phải mất thời gian nhập chúng và
chúng không phải là một phần của chương trình "thực", nhưng các chương trình bạn viết trong tương lai có thể sẽ
yêu cầu một số nhận xét. Khi bạn có được công việc lập trình đầu tiên và sửa đổi
chương trình được viết bởi một lập trình viên khác, bạn sẽ đánh giá cao những nhận xét đúng chỗ
giải thích các phần phức tạp của mã.
Trang 31

Một trách nhiệm bổ sung liên quan đến các nhận xét là chúng phải được cập nhật khi một chương trình được sửa đổi.
Nhận xét lỗi thời có thể cung cấp thông tin sai lệch về trạng thái của chương trình.

69
Chọn số nhận dạng
Việc lựa chọn các mã nhận dạng tốt là một yếu tố thường bị bỏ qua trong thiết kế chương trình. Khi bạn
viết chương trình, bạn chọn số nhận dạng cho các biến, hằng số và mô-đun. Bạn đã học được
quy tắc đặt tên biến và mô-đun trước đó trong chương này: Mỗi biến phải là một từ duy nhất với
không có dấu cách nhúng và phải bắt đầu bằng một chữ cái. Những quy tắc đơn giản đó cung cấp rất nhiều thời gian trong
đặt tên cho các phần tử chương trình, nhưng không phải tất cả các số nhận dạng đều tốt như nhau. Chọn số nhận dạng tốt
đơn giản hóa công việc lập trình của bạn và giúp người khác hiểu công việc của bạn dễ dàng hơn.

Một số nguyên tắc chung bao gồm những điều sau:


Mặc dù không được yêu cầu trong bất kỳ ngôn ngữ lập trình nào, nhưng việc cung cấp một
biến hoặc hằng số tên là danh từ (hoặc sự kết hợp của tính từ và danh từ)
bởi vì nó đại diện cho một sự vật. Tương tự, việc cung cấp cho một mô-đun một mã định danh là
một động từ, hoặc một động từ và danh từ kết hợp, bởi vì một mô-đun thực hiện hành động.

Sử dụng tên có ý nghĩa. Tạo một mục dữ liệu có tên someData hoặc một mô-đun có tên
firstModule () làm
cho một chương trình khó hiểu. Không chỉ những người khác sẽ cảm thấy khó đọc
nhưng bạn sẽ quên mục đích của những số nhận dạng này ngay cả trong
các chương trình. Tất cả các lập trình viên đôi khi sử dụng các tên ngắn gọn, không mô tả như x hoặc
tạm thời trong một chương trình nhanh chóng; tuy nhiên, trong hầu hết các trường hợp, dữ liệu và tên mô-đun phải là
có ý nghĩa. Các lập trình viên đề cập đến các chương trình có chứa các tên có nghĩa là
tự lập tài liệu . Điều này có nghĩa là ngay cả khi không có thêm tài liệu, chương trình
mã tự giải thích cho người đọc.
Sử dụng tên có thể phát âm. Tên biến như pzf không thể phát âm hoặc
có ý nghĩa. Một cái tên trông có ý nghĩa khi bạn viết nó có thể không có ý nghĩa
khi ai đó đọc nó; ví dụ: readyad () có thể có nghĩa là "Chuẩn bị quảng cáo" cho bạn,
nhưng "Chuẩn bị một bài đọc" cho những người khác. Xem xét tên của bạn một cách nghiêm túc để đảm bảo rằng chúng có thể
phát âm. Các chữ viết tắt rất chuẩn không nhất thiết phải phát âm được. Ví dụ,
hầu hết các doanh nhân sẽ giải thích ssn là một số An sinh Xã hội.
Đừng quên rằng không phải tất cả các lập trình viên đều chia sẻ văn hóa của bạn. Một chữ viết tắt có ý nghĩa
có vẻ như hiển nhiên đối với bạn, có thể khó hiểu đối với một người nào đó ở một nơi khác trên thế giới, hoặc thậm chí
phần khác nhau của đất nước của bạn. Ví dụ: bạn có thể đặt tên một biến là roi để giữ một giá trị
cho lợi tức đầu tư, nhưng một người nói tiếng Pháp có thể hiểu nghĩa là vua.
Hãy thận trọng trong việc sử dụng các chữ viết tắt của bạn. Bạn có thể lưu một vài lần nhấn phím khi tạo
mô-đun được gọi là getStat () , nhưng mục đích của mô-đun là tìm trạng thái trong đó một thành phố
xác định vị trí, nhập một số thống kê hoặc xác định trạng thái của một số biến? Tương tự, là một
biến có tên fn có nghĩa là để chứa tên, số tệp hoặc một cái gì đó khác?
Các từ viết tắt cũng có thể gây nhầm lẫn cho mọi người trong các lĩnh vực công việc khác nhau: AKA có thể đề xuất
nữ sinh (Alpha Kappa Alpha) cho một quản trị viên đại học, một cơ quan đăng ký (American Kennel
Liên kết) với một người nuôi chó, hoặc một bí danh (còn được gọi là) cho một thám tử cảnh sát.
Trang 32

Để tiết kiệm thời gian đánh máy khi bạn phát triển một chương trình, bạn có thể sử dụng một tên ngắn như efn. Sau chương trình
hoạt động chính xác, bạn có thể sử dụng tính năng Tìm kiếm và Thay thế của trình soạn thảo văn bản để thay thế tên mã của bạn bằng
một tên có ý nghĩa hơn chẳng hạn như EmployFirstName. Khi làm việc trong một sự phát triển tích hợp
môi trường, bạn có thể sử dụng kỹ thuật được gọi là tái cấu trúc để đổi tên mọi trường hợp của số nhận dạng.

70

Nhiều IDE hỗ trợ tính năng hoàn thành câu lệnh tự động giúp tiết kiệm thời gian đánh máy. Sau lần đầu tiên bạn
sử dụng tên như workerFirstName, bạn chỉ cần nhập một vài ký tự đầu tiên trước trình biên dịch
trình soạn thảo cung cấp một danh sách các tên có sẵn để chọn. Danh sách được xây dựng từ tất cả những cái tên bạn
đã sử dụng bắt đầu bằng các ký tự giống nhau.

Thông thường, tránh các chữ số trong tên. Số 0 có thể bị nhầm lẫn với chữ O và
chữ l viết thường bị đọc sai thành chữ số 1. Tất nhiên, hãy sử dụng phán đoán của bạn:
BudgetFor2014 có thể sẽ không bị hiểu sai.
Sử dụng các quy tắc mà ngôn ngữ của bạn cho phép để tách các từ trong các tên biến dài, nhiều từ. Đối với
ví dụ: nếu ngôn ngữ lập trình bạn sử dụng cho phép dấu gạch ngang hoặc dấu gạch dưới, thì hãy sử dụng
tên mô-đun như initialize-data () hoặc initialize_data () , dễ đọc hơn
khởi tạo dữ liệu () .
Một tùy chọn khác là sử dụng vỏ lạc đà để tạo mã nhận dạng chẳng hạn như
khởi tạo dữ liệu () .
Nếu bạn sử dụng ngôn ngữ phân biệt chữ hoa chữ thường, ngôn ngữ đó là hợp pháp nhưng dễ gây nhầm lẫn khi sử dụng
tên biến chỉ khác nhau trong trường hợp. Ví dụ: nếu một chương trình có chứa empName ,
EmpName và Empname , chắc chắn sẽ xảy ra sự nhầm lẫn.
Cân nhắc đưa một dạng của động từ to be, chẳng hạn như is hoặc are, vào tên cho các biến
nhằm giữ một trạng thái. Ví dụ: sử dụng isFinishing làm biến chuỗi chứa
Y hoặc N để cho biết tệp đã hết hay chưa. Tên ngắn hơn hoàn thành có nhiều khả năng
bị nhầm lẫn với một mô-đun thực thi khi một chương trình được thực hiện xong. (Nhiều ngôn ngữ
hỗ trợ kiểu dữ liệu Boolean mà bạn gán cho các biến có nghĩa là chỉ giữ đúng hoặc
sai. Sử dụng một dạng của để ở trong số nhận dạng cho các biến Boolean là thích hợp.)

Nhiều lập trình viên tuân theo quy ước đặt tên hằng số bằng cách sử dụng tất cả các chữ hoa
chữ cái, chèn gạch dưới giữa các từ để dễ đọc. Trong chương này bạn đã thấy
ví dụ như SALES_TAX_RATE .
Các tổ chức đôi khi thực thi các quy tắc khác nhau để các lập trình viên tuân theo khi đặt tên
các thành phần của chương trình. Bạn có trách nhiệm tìm ra các quy ước được sử dụng trong
tổ chức và tuân thủ chúng.

Các lập trình viên đôi khi tạo một từ điển dữ liệu, là danh sách của mọi tên biến được sử dụng trong một
chương trình, cùng với loại, kích thước và mô tả của nó. Khi một từ điển dữ liệu được tạo, nó sẽ trở thành một phần của
tài liệu chương trình.

Khi bạn bắt đầu viết chương trình, quá trình xác định biến, hằng số và
các mô-đun bạn cần và đặt tên cho chúng tất cả có vẻ quá sức. Quá trình thiết kế
là rất quan trọng, tuy nhiên. Khi bạn nhận được nhiệm vụ lập trình chuyên nghiệp đầu tiên của mình,
quá trình thiết kế rất có thể đã được hoàn thành. Rất có thể, nhiệm vụ đầu tiên của bạn sẽ là
để viết hoặc sửa đổi một mô-đun thành viên nhỏ của một ứng dụng lớn hơn nhiều. Càng nhiều
các lập trình viên ban đầu tuân thủ các nguyên tắc đặt tên, thiết kế ban đầu càng tốt và
công việc sửa đổi của bạn sẽ dễ dàng hơn.
Trang 33

Thiết kế các tuyên bố rõ ràng


Ngoài việc sử dụng các nhận xét của chương trình và chọn các số nhận dạng tốt, bạn có thể sử dụng
các chiến thuật sau để đóng góp vào sự rõ ràng của các tuyên bố trong các chương trình của bạn:
Tránh ngắt dòng khó hiểu.
71
Sử dụng các biến tạm thời để làm rõ các câu lệnh dài.

Tránh ngắt dòng khó hiểu


Một số ngôn ngữ lập trình cũ hơn yêu cầu các câu lệnh chương trình phải được đặt trong
cột. Hầu hết các ngôn ngữ lập trình hiện đại là dạng tự do; bạn có thể sắp xếp các dòng của bạn
mã theo bất kỳ cách nào bạn thấy phù hợp. Như trong cuộc sống thực, tự do đi kèm với trách nhiệm; khi bạn có
linh hoạt trong việc sắp xếp các dòng mã của bạn, bạn phải cẩn thận để đảm bảo rằng ý nghĩa của bạn là
thông thoáng. Với mã dạng tự do, lập trình viên được phép đặt hai hoặc ba câu lệnh trên một dòng,
hoặc ngược lại, để phổ biến một tuyên bố duy nhất trên nhiều dòng. Cả hai đều làm cho các chương trình khó hơn
đọc. Tất cả các ví dụ về mã giả trong cuốn sách này sử dụng khoảng cách thích hợp, rõ ràng và ngắt dòng.

Sử dụng các biến tạm thời để làm rõ các câu lệnh dài
Khi bạn cần một số phép toán để xác định kết quả, hãy xem xét sử dụng một chuỗi
của các biến tạm thời để giữ các kết quả trung gian. Một biến tạm thời (hoặc biến công việc )
không được sử dụng cho đầu vào hoặc đầu ra, mà thay vào đó chỉ là một biến làm việc mà bạn sử dụng trong
thực hiện chương trình. Ví dụ, Hình 2-14 cho thấy hai cách để tính giá trị cho một giá trị thực
nhân viên kinh doanh bất động sản Biến truyền tải. Mỗi ví dụ đều đạt được kết quả giống nhau —
hoa hồng của nhân viên bán hàng dựa trên bộ vuông nhân với giá mỗi bộ vuông,
cộng với bất kỳ khoản phí bảo hiểm nào cho lô đất có tính năng đặc biệt, chẳng hạn như lô đất có nhiều cây cối hoặc ven sông. Tuy nhiên,
ví dụ thứ hai sử dụng hai biến tạm thời: basePropertyPrice và totalSalePrice .
Khi việc tính toán được chia nhỏ thành các bước riêng lẻ, ít phức tạp hơn, thì việc
xem tổng giá được tính như thế nào. Trong các phép tính với nhiều bước tính toán hơn nữa,
thực hiện số học theo từng giai đoạn sẽ ngày càng trở nên hữu ích.

// Sử dụng một câu lệnh duy nhất để tính hoa hồng


nhân viên bán hàngCommission = (sqFeet * pricePerFoot + lotPremium) * hoa hồng

// Sử dụng nhiều câu lệnh để tính hoa hồng


basePropertyPrice = sqFeet * pricePerFoot
totalSalePrice = basePropertyPrice + lotPremium
nhân viên bán hàngCommission = totalSalePrice * hoa hồngRate

Hình 2-14 Hai cách để đạt được cùng một nhân viên bán hàng
© 2015 Cengage Learning
Các lập trình viên có thể nói rằng việc sử dụng các biến tạm thời, như ví dụ thứ hai trong Hình 2-14, là rẻ.
Trang 34
Khi thực hiện một câu lệnh số học dài dòng, ngay cả khi bạn không đặt tên rõ ràng cho các biến tạm thời,
trình biên dịch ngôn ngữ lập trình tạo chúng đằng sau hậu trường (mặc dù không có tên mô tả),
vì vậy việc tự khai báo chúng không tốn nhiều chi phí về thời gian thực hiện chương trình.

Viết lời nhắc rõ ràng và đầu vào tiếng vang


Khi đầu vào chương trình phải được truy xuất từ người dùng, bạn hầu như luôn muốn cung cấp

​​
nhắc nhở cho người dùng. Lời nhắc là một thông báo được hiển thị trên màn hình để yêu cầu người dùng
phản hồi và có thể giải thích cách phản hồi đó nên được định dạng. Lời nhắc được sử dụng cả hai
trong các chương trình tương tác dòng lệnh và GUI.
Ví dụ: giả sử một chương trình yêu cầu người dùng nhập số danh mục cho một mặt hàng mà người dùng
đặt hàng. Lời nhắc sau không hữu ích lắm:
Vui lòng nhập một số.

Lời nhắc sau sẽ hữu ích hơn:

Vui lòng nhập số thứ tự danh mục gồm năm chữ số.

Lời nhắc sau thậm chí còn hữu ích hơn:


Số thứ tự danh mục gồm năm chữ số xuất hiện ở bên phải hình ảnh của mặt hàng
trong danh mục. Vui lòng nhập nó ngay bây giờ.

Khi đầu vào chương trình đến từ tệp được lưu trữ thay vì người dùng, không cần lời nhắc.
Tuy nhiên, khi một chương trình mong đợi phản hồi của người dùng, các lời nhắc sẽ có giá trị. Ví dụ, Hình
2-15 hiển thị lưu đồ và mã giả cho phần bắt đầu của chương trình tạo hóa đơn
được hiển thị trước đó trong chương này. Nếu đầu vào đến từ một tệp dữ liệu, sẽ không có lời nhắc nào
bắt buộc, và logic có thể giống như logic trong Hình 2-15.

khởi đầu
khởi đầu
Tuyên bố

Tuyên bố tên chuỗi


tên chuỗi số dư
số dư
tên đầu vào, số dư

tên đầu vào,


thăng bằng

Hình 2-15 Bắt đầu một chương trình chấp nhận tên và số dư làm đầu vào
© 2015 Cengage Learning
Trang 35

Tuy nhiên, nếu đầu vào đến từ người dùng, bao gồm cả lời nhắc sẽ hữu ích. Bạn
có thể cung cấp một lời nhắc đơn lẻ chẳng hạn như Vui lòng nhập tên khách hàng và số dư đến hạn, nhưng
việc chèn nhiều yêu cầu hơn vào lời nhắc thường khiến người dùng ít có khả năng
nhớ nhập đầy đủ các bộ phận hoặc nhập đúng thứ tự. Nó hầu như luôn luôn là tốt nhất để
bao gồm một lời nhắc riêng cho từng mục cần nhập. Hình 2-16 cho thấy một ví dụ.
73

khởi đầu

Tuyên bố
tên chuỗi
số dư

khởi đầu
Tuyên bố
đầu ra "Please
nhập của khách hàng tên chuỗi
Tên " số dư
đầu ra "Vui lòng nhập tên khách hàng"
tên đầu vào

tên đầu vào đầu ra "Vui lòng nhập số dư đến hạn"


số dư đầu vào

đầu ra "Please
nhập số dư
do "

số dư đầu vào

Hình 2-16 Bắt đầu một chương trình chấp nhận tên và số dư làm đầu vào và sử dụng
nhắc nhở cho từng mục
© 2015 Cengage Learning

Người dùng cũng thấy hữu ích khi bạn lặp lại thông tin đầu vào của họ. Đầu vào tiếng vọng là hành động lặp lại
nhập lại cho người dùng trong lời nhắc tiếp theo hoặc trong đầu ra. Ví dụ, Hình 2-17
cho thấy lời nhắc thứ hai trong Hình 2-16 có thể được cải thiện như thế nào bằng cách lặp lại lời nhắc đầu tiên của người dùng
phần dữ liệu đầu vào trong dấu nhắc thứ hai. Khi người dùng chạy chương trình được khởi động trong
Hình 2-17 và nhập Màu xanh lá cây cho tên khách hàng, lời nhắc thứ hai sẽ không là Vui lòng
nhập số dư đến hạn. Thay vào đó, nó sẽ là Vui lòng nhập số dư đến hạn cho Màu xanh lá cây. Ví dụ, nếu một nhân viên bán hàng
sắp nhập số dư cho khách hàng sai, đề cập đến Màu xanh lá cây có thể là
đủ để cảnh báo cho nhân viên về lỗi tiềm ẩn.
Trang 36

khởi đầu

Tuyên bố
74 tên chuỗi
số dư
khởi đầu

Tuyên bố
đầu ra "Please tên chuỗi
nhập của khách hàng
Tên " số dư
đầu ra "Vui lòng nhập tên khách hàng"

tên đầu vào

tên đầu vào đầu ra "Vui lòng nhập số dư đến hạn cho", tên

số dư đầu vào

đầu ra "Please
nhập số dư
do ", name

Chú ý khoảng trắng trước dấu ngoặc kép


trong lời nhắc yêu cầu người dùng cho số dư
số dư đầu vào đến hạn. Khoảng trắng sẽ xuất hiện giữa "for" và
họ.

Hình 2-17 Bắt đầu một chương trình chấp nhận tên của khách hàng và sử dụng nó trong lời nhắc thứ hai

Duy trì thói quen lập trình tốt


Khi bạn học một ngôn ngữ lập trình và bắt đầu viết các dòng mã chương trình, thật dễ dàng
để quên các nguyên tắc bạn đã học trong văn bản này. Có một số kiến thức lập trình
và một bàn phím trong tầm tay của bạn có thể thu hút bạn nhập các dòng mã trước khi bạn nghĩ
những điều thông qua. Nhưng mọi chương trình bạn viết sẽ tốt hơn nếu bạn lập kế hoạch trước khi viết mã.
Duy trì thói quen vẽ sơ đồ đầu tiên hoặc viết mã giả, như bạn đã học
tại đây, sẽ giúp cho các dự án lập trình sau này của bạn diễn ra suôn sẻ hơn. Nếu bạn kiểm tra bàn của bạn
lập trình logic trên giấy trước khi mã hóa các câu lệnh bằng ngôn ngữ lập trình, các chương trình của bạn
sẽ chạy chính xác sớm hơn. Nếu bạn suy nghĩ cẩn thận về tên biến và mô-đun, bạn
chọn và thiết kế các câu lệnh chương trình để dễ đọc và dễ sử dụng, các chương trình của bạn sẽ
dễ dàng hơn để phát triển và duy trì.
Trang 37

HAI SỰ THẬT & MỘT LỜI NÓI DỐI


Đặc điểm của thiết kế chương trình tốt

1. Nhận xét chương trình là một thông báo được hiển thị trên màn hình để hỏi người dùng 75
để có phản hồi và có thể giải thích cách định dạng phản hồi đó.

2. Thông thường, việc đặt cho mỗi biến một tên có chứa danh từ và để
đặt tên cho mỗi mô-đun có chứa động từ.

3. Đầu vào tiếng vọng có thể giúp người dùng xác nhận rằng một mục dữ liệu đã được nhập chính xác.

Tóm tắt chương


Các chương trình chứa dữ liệu ở ba dạng khác nhau: các ký tự (hoặc các hằng số không được đặt tên), các biến,
và các hằng số được đặt tên. Mỗi loại dữ liệu này có thể là số hoặc chuỗi. Các biến là
các vị trí bộ nhớ được đặt tên, nội dung của chúng có thể khác nhau. Một khai báo biến bao gồm
một kiểu dữ liệu và một định danh; tùy chọn, nó có thể bao gồm một khởi tạo. Mọi máy tính
ngôn ngữ lập trình có bộ quy tắc riêng để đặt tên biến; tuy nhiên, tất cả các biến
tên phải được viết thành một từ không có dấu cách nhúng và phải có
ý nghĩa thích hợp. Một hằng số được đặt tên tương tự như một biến, ngoại trừ nó có thể được gán một
giá trị chỉ một lần.
Hầu hết các ngôn ngữ lập trình sử dụng +, -, * và / như bốn toán tử số học tiêu chuẩn.
Mọi toán tử tuân theo các quy tắc ưu tiên quy định thứ tự các hoạt động trong
cùng một tuyên bố được thực hiện; nhân và chia luôn được ưu tiên
hơn cộng và trừ. Các quy tắc ưu tiên có thể được ghi đè bằng cách sử dụng
dấu ngoặc đơn.
Lập trình viên chia nhỏ các vấn đề lập trình thành các đơn vị nhỏ hơn, gắn kết được gọi
mô-đun, chương trình con, thủ tục, chức năng hoặc phương thức. Để thực thi một mô-đun, bạn gọi nó
từ một chương trình hoặc mô-đun khác. Bất kỳ chương trình nào cũng có thể chứa một số lượng không giới hạn
mô-đun và mỗi mô-đun có thể được gọi không giới hạn số lần. Mô-đun hóa
cung cấp tính trừu tượng, cho phép nhiều lập trình viên làm việc trên một vấn đề và làm cho nó
dễ dàng hơn để bạn sử dụng lại công việc.
Trang 38

Khi bạn tạo một mô-đun, bạn bao gồm một tiêu đề, một nội dung và một câu lệnh trả về .
Một chương trình hoặc mô-đun gọi tên của mô-đun để thực thi nó. Bạn có thể đặt bất kỳ câu lệnh nào
trong các mô-đun, bao gồm các khai báo, là cục bộ của mô-đun. Các biến toàn cục
và hằng số là những thứ mà toàn bộ chương trình đã biết. Logic dòng chính của
hầu hết mọi chương trình máy tính thủ tục đều có thể tuân theo một cấu trúc chung bao gồm
ba phần riêng biệt: nhiệm vụ dọn phòng, nhiệm vụ vòng lặp chi tiết và nhiệm vụ kết thúc công việc.

Biểu đồ phân cấp minh họa các mô-đun và mối quan hệ của chúng; nó cho biết mô-đun nào
tồn tại trong một chương trình và mô-đun nào gọi những người khác.

Khi các chương trình trở nên lớn hơn và phức tạp hơn, nhu cầu lập kế hoạch và thiết kế tốt
tăng. Bạn nên sử dụng các bình luận của chương trình nếu thích hợp. Chọn số nhận dạng
một cách khôn ngoan, cố gắng thiết kế các tuyên bố rõ ràng trong các chương trình và mô-đun của bạn, viết rõ ràng
lời nhắc và đầu vào tiếng vọng, đồng thời tiếp tục duy trì thói quen lập trình tốt khi bạn
phát triển kỹ năng lập trình của bạn.

Điều khoản quan trọng


Numeric mô tả dữ liệu bao gồm các số.

Chuỗi mô tả dữ liệu không phải là số.

Một số nguyên là một số nguyên.

Số dấu phẩy động là một số có chữ số thập phân.

Số thực là số dấu phẩy động.

Một hằng số (hoặc hằng số theo nghĩa đen ) là một giá trị số cụ thể.

Một hằng số chuỗi (hoặc chuỗi liên tục theo nghĩa đen ) là một nhóm cụ thể của nhân vật kèm theo trong vòng
dấu ngoặc kép.

Giá trị chữ và số có thể chứa các ký tự chữ cái, số và dấu chấm câu.

Một hằng số không được đặt tên là một giá trị số hoặc chuỗi theo nghĩa đen.

Một khai báo là một câu lệnh cung cấp một kiểu dữ liệu, một số nhận dạng và, tùy chọn, một
giá trị ban đầu.

Định danh là tên của thành phần chương trình.

Kiểu dữ liệu của mục dữ liệu là một phân loại mô tả những giá trị nào có thể được chỉ định, cách
mục được lưu trữ và những loại thao tác nào có thể được thực hiện với mục đó.
Khởi tạo một biến là hành động gán giá trị đầu tiên của nó, thường là cùng lúc biến
khai báo.

Garbage mô tả giá trị không xác định được lưu trữ trong một biến chưa được gán.

Từ khóa bao gồm tập hợp từ giới hạn được dành riêng cho một ngôn ngữ.
Trang 39

Camel casing là một quy ước đặt tên trong đó ký tự đầu tiên là chữ thường, nhiều từ
các tên được chạy cùng nhau và mỗi từ mới trong tên bắt đầu bằng một chữ cái viết hoa.

Vỏ lạc đà dưới là một tên gọi khác của quy ước đặt tên vỏ lạc đà.

Cách viết hoa trong Pascal là một quy ước đặt tên trong đó chữ cái đầu tiên là chữ hoa, nhiều từ
các tên được chạy cùng nhau và mỗi từ mới trong tên bắt đầu bằng một chữ cái viết hoa.

Vỏ lạc đà trên là một tên gọi khác của quy ước đặt tên vỏ trong Pascal.

Ký hiệu Hungary là quy ước đặt tên trong đó kiểu dữ liệu hoặc thông tin khác
được lưu trữ như một phần của tên.

Vỏ rắn là một quy ước trong đó các phần của tên được phân tách bằng dấu gạch dưới.

Trường hợp hỗn hợp có dấu gạch dưới là một quy ước đặt tên tương tự như cách đặt tên cho rắn, nhưng là các từ mới
bắt đầu bằng một chữ cái viết hoa.

Trường hợp Kebob đôi khi được sử dụng làm tên cho kiểu sử dụng dấu gạch ngang để tách các bộ phận
của một cái tên.

Một câu lệnh gán sẽ gán một giá trị từ bên phải của toán tử gán cho
biến hoặc hằng ở bên trái của toán tử gán.

Các toán tử gán là dấu bằng; nó được sử dụng để gán một giá trị cho biến
hoặc hằng số ở bên trái của nó.

Một nhà điều hành nhị phân là một nhà điều hành mà yêu cầu hai toán hạng-one ở mỗi bên.

Một toán hạng là một giá trị được sử dụng bởi một nhà điều hành.

Thuyết kết hợp phải và liên kết từ phải sang trái mô tả các toán tử đánh giá
biểu thức bên phải đầu tiên.

Giá trị là mã định danh địa chỉ bộ nhớ ở bên trái của toán tử gán.

Một biến số là một trong đó có thể chứa chữ số, đã hoạt động toán học thực hiện
trên đó, và thường có thể chứa một dấu thập phân và một dấu hiệu cho biết dương hoặc âm.

Một biến chuỗi có thể chứa văn bản bao gồm các chữ cái, chữ số và các ký tự đặc biệt như
dấu chấm câu.

An toàn kiểu là tính năng của một số ngôn ngữ lập trình ngăn chặn việc gán các giá trị của
một kiểu dữ liệu không chính xác.

Một hằng số được đặt tên tương tự như một biến, ngoại trừ việc giá trị của nó không thể thay đổi sau giá trị đầu tiên
sự phân công.

Một số ma thuật là một hằng số không có tên mà mục đích của nó không rõ ràng ngay lập tức.

Overhead mô tả các tài nguyên bổ sung mà một nhiệm vụ yêu cầu.

Các quy tắc ưu tiên quy định thứ tự thực hiện các thao tác trong cùng một câu lệnh
thực hiện.
Trang 40

Thứ tự của các hoạt động mô tả các quy tắc ưu tiên.

Phép kết hợp trái sang phải mô tả các toán tử đánh giá biểu thức ở bên trái trước tiên.

Các nhà điều hành còn lại là một toán tử số học được sử dụng trong một số ngôn ngữ lập trình;
khi được sử dụng với hai toán hạng số nguyên, nó dẫn đến phần còn lại sau khi chia.

Mô-đun là các đơn vị chương trình nhỏ mà bạn có thể sử dụng cùng nhau để tạo chương trình. Lập trình viên
cũng đề cập đến các mô-đun dưới dạng chương trình con , thủ tục , hàm hoặc phương thức .

Để gọi một mô-đun là sử dụng tên của mô-đun để gọi nó, làm cho nó thực thi.

Mô-đun hóa là quá trình chia nhỏ một chương trình thành các mô-đun.

Phân rã chức năng là hành động giảm một chương trình lớn thành các mô-đun dễ quản lý hơn.

Trừu tượng hóa là quá trình chú ý đến các thuộc tính quan trọng trong khi bỏ qua
chi tiết không cần thiết.

Khả năng tái sử dụng là tính năng của các chương trình mô-đun cho phép các mô-đun riêng lẻ được sử dụng trong một
nhiều ứng dụng.

Độ tin cậy là đặc điểm của các chương trình mô-đun đảm bảo cho bạn một mô-đun đã được thử nghiệm và
được chứng minh là hoạt động chính xác.

Một chương trình chính chạy từ đầu đến dừng và gọi các mô-đun khác.

Các lý đường chính là logic xuất hiện trong mô-đun chính của chương trình; nó gọi các mô-đun khác.

Các tiêu đề mô-đun bao gồm nhận dạng mô-đun và cần thiết có thể khác xác định
thông tin.

Phần thân mô-đun chứa tất cả các câu lệnh trong mô-đun.

Câu lệnh trả về mô-đun đánh dấu sự kết thúc của mô-đun và xác định điểm
tại đó điều khiển quay trở lại chương trình hoặc mô-đun được gọi là mô-đun.

Đóng gói là hành động chứa các lệnh của một tác vụ trong một mô-đun.

Một ngăn xếp là một vị trí bộ nhớ, trong đó máy tính theo dõi bộ nhớ đúng
địa chỉ mà nó sẽ trả về sau khi thực thi một mô-đun.

Sự gắn kết chức năng của một mô-đun là thước đo mức độ mà tất cả các mô-đun
các câu lệnh đóng góp vào cùng một nhiệm vụ.

Hiển thị mô tả các mục dữ liệu khi một mô-đun có thể nhận ra chúng.

Trong phạm vi mô tả dữ liệu có thể nhìn thấy được.

Cục bộ mô tả các biến được khai báo trong mô-đun sử dụng chúng.

Một di mô-đun là một trong đó có thể dễ dàng được tái sử dụng trong nhiều chương trình.

Toàn cầu mô tả các biến mà toàn bộ chương trình đã biết.

Các công việc dọn phòng bao gồm các bước bạn phải thực hiện khi bắt đầu chương trình để có được
sẵn sàng cho phần còn lại của chương trình.
Trang 41

Các nhiệm vụ vòng lặp chi tiết của một chương trình bao gồm các bước được lặp lại cho mỗi tập dữ liệu đầu vào.

Nhiệm vụ cuối công việc giữ các bước bạn thực hiện ở cuối chương trình để hoàn thành ứng dụng.

Một biểu đồ phân cấp là một sơ đồ minh họa mối quan hệ module với nhau.

Nhận xét chương trình là giải thích bằng văn bản không phải là một phần của logic chương trình nhưng 79
phục vụ như tài liệu cho những người đọc chương trình.

Tài liệu nội bộ là tài liệu trong một chương trình được mã hóa.

Tài liệu bên ngoài là tài liệu nằm ngoài một chương trình được mã hóa.

Một biểu tượng chú thích chứa thông tin mở rộng về những gì xuất hiện trong một
ký hiệu lưu đồ; nó thường được đại diện bởi một hộp ba mặt được kết nối
đến bước mà nó tham chiếu bằng một đường đứt nét.

Các chương trình tự lập tài liệu là những chương trình có chứa các số nhận dạng có ý nghĩa mô tả
mục đích.

Một từ điển dữ liệu là một danh sách của tất cả các tên biến được sử dụng trong một chương trình, cùng với loại của nó,
kích thước và mô tả.

Một biến tạm thời (hoặc biến công việc ) là một biến mà bạn sử dụng để giữ các kết quả trung gian
trong quá trình thực hiện chương trình.

Lời nhắc là một thông báo được hiển thị trên màn hình để yêu cầu người dùng phản hồi và
có lẽ giải thích cách phản hồi đó nên được định dạng.

Đầu vào tiếng vọng là hành động lặp lại đầu vào trở lại người dùng trong một lời nhắc tiếp theo
hoặc ở đầu ra.

.
Trang 42 Bài tập

Câu hỏi đánh giá

1. Khai báo cung cấp gì cho một biến?

a. một cái tên c. cả hai ở trên


b. một kiểu dữ liệu d. không có cái nào ở trên
2. Kiểu dữ liệu của một biến mô tả tất cả những điều sau, ngoại trừ .
a. những giá trị nào mà biến có thể giữ
b. cách biến được lưu trữ trong bộ nhớ
c. những thao tác nào có thể được thực hiện với biến
d. phạm vi của biến
3. Giá trị được lưu trữ trong một biến chưa được khởi tạo là
a. rác c. phân trộn
b. vô giá trị d. định danh của nó

4. Giá trị 3 là a .
80
a. biến số c. biến chuỗi
b. hằng số d. chuỗi không đổi
5. Toán tử chuyển nhượng .

a. là một toán tử nhị phân c. thường được biểu thị bằng dấu hai chấm
b. có sự kết hợp từ trái sang phải d. hai trong số những điều trên
6. Điều nào sau đây là đúng về cấp số cộng?

a. Phép nhân có mức độ ưu tiên cao hơn phép chia.


b. Các toán tử có mức độ ưu tiên thấp nhất luôn có từ trái sang phải
sự liên kết.
c. Phép chia có mức độ ưu tiên cao hơn phép trừ.
d. tất cả những điều trên
7. Điều nào sau đây là một thuật ngữ được sử dụng như một từ đồng nghĩa với mô-đun trong một số
ngôn ngữ lập trình?

a. phương pháp c. cả hai


b. thủ tục d. không ai trong số này
8. Lý do nào sau đây là lý do để sử dụng mô đun hóa?

a. Mô đun hóa tránh trừu tượng hóa.


b. Mô-đun hóa làm giảm chi phí.
c. Mô-đun hóa cho phép bạn dễ dàng sử dụng lại công việc của mình.
d. Mô-đun hóa loại bỏ sự cần thiết của cú pháp.
9. Tên cho quá trình chú ý đến các thuộc tính quan trọng trong khi
bỏ qua các chi tiết không cần thiết?
a. sự trừu tượng c. sự tuyệt chủng
b. khai thác d. mô đun hóa
10. Mọi mô-đun đều có tất cả những điều sau đây ngoại trừ .
a. một tiêu đề c. một cơ thể
b. biến cục bộ d. một tuyên bố trở lại
11. Các lập trình viên nói rằng một mô-đun có thể khác, có nghĩa là người đầu tiên
mô-đun làm cho mô-đun thứ hai thực thi.

a. khai báo c. ban hành


Trang 43
b. định nghĩa d. gọi
12. Các câu lệnh của mô-đun càng đóng góp cho cùng một công việc, thì
các của mô-đun.
a. kết cấu c. sự gắn kết chức năng
b. mô đun d. kích thước
13. Trong hầu hết các ngôn ngữ lập trình hiện đại, một biến hoặc hằng số được khai báo trong 81
một mô-đun là trong mô-đun đó.
a. toàn cầu c. trong phạm vi
b. vô hình d. chưa xác định
14. Công việc nào sau đây không phải là nhiệm vụ dọn phòng điển hình?

a. hiển thị hướng dẫn c. mở tệp


b. in tóm tắt d. hiển thị các tiêu đề báo cáo
15. Mô-đun nào trong một chương trình điển hình sẽ thực thi nhiều lần nhất?
a. mô-đun dọn phòng c. mô-đun cuối công việc
b. vòng lặp chi tiết d. Nó khác nhau trong mọi chương trình.
16. Biểu đồ phân cấp cho bạn biết .
a. những tác vụ nào sẽ được thực hiện trong mỗi mô-đun chương trình
b. khi một mô-đun thực thi
c. thói quen nào gọi những thói quen nào khác
d. tất cả những điều trên

17. Các câu lệnh không thực thi mà người lập trình đặt trong mã để giải thích là gì
câu lệnh chương trình bằng tiếng anh?

a. bình luận c. đố vui


b. mã giả d. tài liệu người dùng
18. Chương trình bình luận là .

a. cần thiết để tạo một chương trình chạy được


b. một dạng tài liệu bên ngoài
c. cả hai ở trên
d. không có cái nào ở trên

19. Lời khuyên nào sau đây là hợp lệ để đặt tên biến?
a. Để tiết kiệm việc nhập, hãy đặt hầu hết các tên biến có một hoặc hai chữ cái.
b. Để tránh xung đột với các tên mà người khác đang sử dụng, hãy sử dụng các tên khác thường hoặc
tên không phát âm được.
c. Để làm cho tên dễ đọc hơn, hãy tách các tên dài bằng cách sử dụng dấu gạch dưới
hoặc viết hoa cho mỗi từ mới.
d. Để duy trì sự độc lập của bạn, hãy tránh xa các quy ước của
cơ quan.

Trang 44

CHƯƠNG 2 Các yếu tố của chương trình chất lượng cao

20. Thông báo yêu cầu người dùng nhập đầu vào là a (n) .
a. bình luận c. tiếng vang
b. lời nhắc d. tờ khai

82

Bài tập lập trình

1. Giải thích tại sao mỗi tên sau đây có hoặc không giống như một biến tốt
tên cho bạn.

a. d
b. dsctamt

https://translate.googleusercontent.com/translate_f 39/44
9/7/2021 Khai báo và sử dụng biến và hằng số
c. giảm giá
d. số tiền chiết khấu
e. giảm giá

f. giảm giáAmountForEachNewCustomer
g. giảm giá năm 2015

h. Năm 2015
2. Nếu productCost và productPrice là các biến số, và productName là một
biến chuỗi, câu lệnh nào sau đây là phép gán hợp lệ? Nếu một
tuyên bố không hợp lệ, giải thích tại sao không.
a. productCost = 100

b. productPrice = productCost
c. productPrice = productName

d. productPrice = "24,95"
e. 15,67 = productCost

f. productCost = $ 1,345,52
g. productCost = productPrice - 10
h. productName = "miếng lót chuột"
Tôi. productCost + 20 = productPrice
j. productName = đinh 3 inch
k. productName = 43
l. productName = "44"
m. "99" = productName
n. productName = bàn chải

Trang 45

Bài tập

o. pin = productName
p. productPrice = productPrice

q. productName = productCost
3. Giả sử rằng thu nhập = 8 và chi phí = 6 . Giá trị của mỗi
83
biểu thức sau?

a. thu nhập + chi phí * 2


b. thu nhập + 4 - chi phí / 2

c. (thu nhập + chi phí) * 2


d. thu nhập - 3 * 2 + chi phí

e. 4 * ((thu nhập - chi phí) + 2) + 10

4. Vẽ biểu đồ phân cấp điển hình cho một chương trình tạo hóa đơn hàng tháng cho một
khách hàng điện thoại di động. Hãy thử nghĩ về ít nhất 10 mô-đun riêng biệt có thể
bao gồm. Ví dụ: một mô-đun có thể tính phí cho điện thoại ban ngày
phút đã sử dụng.

5. a. Vẽ biểu đồ phân cấp và sau đó lập kế hoạch logic cho một chương trình cần thiết bởi
giám đốc kinh doanh của The Henry Old Car Dealership. Chương trình sẽ xác định

https://translate.googleusercontent.com/translate_f 40/44
9/7/2021 Khai báo và sử dụng biến và hằng số
lợi nhuận
giá trên
cho một bất kỳ
chiếc chiếcSản
xe hơi. xe lượng
nào đãlàbán.
lợi Đầu vàolàbao
nhuận, giá gồm giáđi
bán trừ bán và giá mua thực tế
giá mua. Sử dụng ba mô-đun. Chương trình chính khai báo các biến toàn cục
và gọi các mô-đun dọn phòng, chi tiết và kết thúc công việc. Công việc dọn phòng
mô-đun nhắc nhở và chấp nhận giá ưu đãi. Mô-đun chi tiết nhắc nhở cho
và chấp nhận giá mua, tính toán lợi nhuận và hiển thị kết quả.
Mô-đun kết thúc công việc hiển thị thông báo Cảm ơn bạn đã sử dụng chương trình này.
b. Sửa đổi chương trình xác định lợi nhuận để nó chạy liên tục cho bất kỳ
số lượng ô tô. Vòng lặp chi tiết thực hiện liên tục trong khi giá bán không phải là 0;
ngoài việc tính toán lợi nhuận, nó còn nhắc người dùng và nhận được lần bán hàng tiếp theo
giá bán. Mô-đun kết thúc công việc thực thi sau khi 0 được nhập cho giá ưu đãi.

6. a. Vẽ biểu đồ phân cấp và sau đó lập kế hoạch logic cho một chương trình tính toán
chỉ số khối cơ thể (BMI) của một người. BMI là một thước đo thống kê so sánh một
cân nặng và chiều cao của người đó. Chương trình sử dụng ba mô-đun. Lời nhắc đầu tiên
người dùng cho và chấp nhận chiều cao của người dùng tính bằng inch. Mô-đun thứ hai chấp nhận
trọng lượng của người dùng tính bằng pound và chuyển đổi chiều cao của người dùng thành mét và cân nặng thành
ki-lô-gam. Sau đó, nó tính BMI bằng trọng lượng theo kg chia cho chiều cao trong
mét bình phương và hiển thị kết quả. Có 2,54 cm trong một inch,
100 cm tính bằng mét, 453,59 gam tính bằng pound và 1.000 gam tính bằng
ki-lô-gam. Sử dụng các biểu tượng được đặt tên bất cứ khi nào bạn nghĩ rằng chúng phù hợp. Cuối cùng
mô-đun hiển thị thông báo Kết thúc công việc.
b. Sửa đổi chương trình xác định BMI để thực thi liên tục cho đến khi người dùng
nhập 0 cho chiều cao tính bằng inch.

Trang 46

CHƯƠNG 2 Các yếu tố của chương trình chất lượng cao

7. Vẽ biểu đồ phân cấp và thiết kế logic cho một chương trình tính toán dịch vụ
tính phí cho dịch vụ Dọn dẹp nhà cửa của Hazel. Chương trình bao gồm dịch vụ dọn phòng,
vòng lặp chi tiết và mô-đun kết thúc công việc. Chương trình chính khai báo bất kỳ toàn cục cần thiết nào
biến và hằng số và gọi các mô-đun khác. Mô-đun dọn phòng
hiển thị lời nhắc và chấp nhận họ của khách hàng. Trong khi người dùng không
84 nhập ZZZZ cho tên, vòng lặp chi tiết chấp nhận số lượng phòng tắm và
số lượng các phòng khác cần được dọn dẹp. Phí dịch vụ được tính là $ 40 cộng thêm
$ 15 cho mỗi phòng tắm và $ 10 cho mỗi phòng khác. Vòng lặp chi tiết cũng
hiển thị phí dịch vụ và sau đó nhắc người dùng cho khách hàng tiếp theo
Tên. Mô-đun kết thúc công việc, thực thi sau khi người dùng vào trạm gác
giá trị cho tên, hiển thị thông báo cho biết chương trình đã hoàn tất.

8. Vẽ biểu đồ phân cấp và thiết kế logic cho một chương trình tính toán
chi phí dự kiến ​của một chuyến đi ô tô. Giả sử rằng ô tô của người dùng đi được quãng đường 20
Miles mỗi gallon khí. Thiết kế một chương trình nhắc người dùng nhập một số
of miles driven and a current cost per gallon. Chương trình tính toán và
hiển thị chi phí của chuyến đi cũng như chi phí nếu giá xăng tăng 10 phần trăm.
Chương trình chấp nhận dữ liệu liên tục cho đến khi nhập số 0 cho số
miles. Sử dụng các mô-đun thích hợp, bao gồm một mô-đun hiển thị Kết thúc chương trình
khi chương trình kết thúc.

9. a. Vẽ biểu đồ phân cấp và thiết kế logic cho một chương trình cần
quản lý của đội bóng mềm Stengel County, người muốn tính toán slugging
phần trăm cho người chơi của mình. Phần trăm slugging là tổng số base kiếm được với
số lần truy cập cơ bản chia cho số con dơi của người chơi. Thiết kế một chương trình
nhắc người dùng về số áo đấu của cầu thủ, số cơ sở kiếm được và
số lượng dơi, và sau đó hiển thị tất cả dữ liệu, bao gồm cả
slugging trung bình. Chương trình nhận người chơi liên tục cho đến khi nhập 0
cho số áo đấu. Sử dụng các mô-đun thích hợp, bao gồm một mô-đun hiển thị
https://translate.googleusercontent.com/translate_f 41/44
9/7/2021 Khai báo và sử dụng biến và hằng số
Kết thúc công việc sau khi người phụ trách được nhập số áo.

b. Sửa đổi chương trình phần trăm trượt để cũng tính toán dựa trên cơ sở của người chơi
tỷ lệ phần trăm. Tỷ lệ phần trăm trên cơ sở được tính bằng cách thêm số lần truy cập của người chơi và
đi bộ, và sau đó chia cho tổng của dơi, đi bộ và ruồi hy sinh.
Nhắc người dùng về tất cả dữ liệu bổ sung cần thiết và hiển thị tất cả dữ liệu cho
mỗi người chơi.
c. Sửa đổi chương trình bóng mềm để nó cũng tính toán tổng sản lượng trung bình
(Điểm trung bình) cho mỗi người chơi. Điểm trung bình được tính bằng cách nhân trên cơ sở của một người chơi
phần trăm của 1,8, sau đó thêm phần trăm trượt của người chơi, và sau đó
chia cho bốn.
10. Vẽ biểu đồ phân cấp và thiết kế logic cho một chương trình cho River Falls
Công ty xây dựng Homes. Thiết kế một chương trình nhắc người dùng về một
số lô trong phân khu River Falls và dữ liệu về ngôi nhà sẽ được xây dựng
ở đó, bao gồm số phòng ngủ, số phòng tắm và số lượng
ô tô các nhà để xe giữ. Đầu ra là giá của ngôi nhà, là cơ sở 50.000 đô la
giá cộng thêm $ 17,000 cho mỗi phòng ngủ, $ 12,500 cho mỗi phòng tắm và $ 6,000 cho

Trang 47

Bài tập

mỗi chiếc xe mà nhà xe giữ. Chương trình nhận số lô liên tục cho đến khi
0 được nhập. Sử dụng các hằng số được đặt tên nếu thích hợp. Ngoài ra, sử dụng thích hợp
mô-đun, bao gồm một mô-đun hiển thị Kết thúc công việc sau khi nhập cảnh sát cho
số lô.

11. Vẽ biểu đồ phân cấp và thiết kế logic cho một chương trình cho Arnie's Appli- 85
dấu ngoặc kép. Thiết kế chương trình nhắc người dùng nhập tên kiểu tủ lạnh và
chiều cao, chiều rộng và chiều sâu của nội thất tính bằng inch. Tính công suất tủ lạnh
tính bằng feet khối trước tiên bằng cách nhân chiều cao, chiều rộng và chiều sâu để có được inch khối,
và sau đó chia cho 1728 (số inch khối trong một foot khối). Các
chương trình chấp nhận tên mô hình liên tục cho đến khi "XXX" được nhập. Sử dụng có tên
hằng số nếu thích hợp. Cũng sử dụng các mô-đun, bao gồm một mô-đun hiển thị Kết thúc
công việc sau khi đã nhập tên mô hình vào mô hình.

Thực hiện bảo trì

1. Tệp có tên MAINTENANCE02-01.txt được bao gồm trong tệp có thể tải xuống của bạn
hồ sơ sinh viên. Giả sử rằng chương trình này là một chương trình làm việc trong tổ chức của bạn-
và nó cần sửa đổi như được mô tả trong các nhận xét (dòng
bắt đầu bằng hai dấu gạch chéo) ở đầu tệp. Công việc của bạn là thay đổi
chương trình để đáp ứng các thông số kỹ thuật mới.

Tìm lỗi

1. Các tệp có thể tải xuống của bạn cho Chương 2 bao gồm DEBUG02-01.txt, DEBUG02-02.
txt và DEBUG02-03.txt. Mỗi tệp bắt đầu với một số nhận xét mô tả
vấn đề. Nhận xét là những dòng bắt đầu bằng hai dấu gạch chéo (//). Theo dõi
nhận xét, mỗi tệp chứa mã giả có một hoặc nhiều lỗi bạn phải
tìm và sửa lại.

2. Các tệp có thể tải xuống của bạn cho Chương 2 bao gồm một tệp có tên DEBUG02-04.jpg
chứa một sơ đồ có lỗi cú pháp và / hoặc lôgic. Kiểm tra lưu đồ và

https://translate.googleusercontent.com/translate_f 42/44
9/7/2021 Khai báo và sử dụng biến và hằng số
sau đó tìm và sửa tất cả các lỗi.

Khu vực chơi game

1. Để các trò chơi thu hút sự quan tâm của bạn, chúng hầu như luôn bao gồm một số ngẫu nhiên,
hành vi không thể đoán trước. Ví dụ, một trò chơi mà bạn bắn tiểu hành tinh sẽ thua
một số điều thú vị nếu các tiểu hành tinh đi theo cùng một con đường có thể dự đoán được mỗi khi bạn chơi.
Do đó, việc tạo ra các giá trị ngẫu nhiên là một thành phần quan trọng trong việc tạo ra hầu hết các
trò chơi máy tính esting. Nhiều ngôn ngữ lập trình được tích hợp sẵn

Trang 48

CHƯƠNG 2 Các yếu tố của chương trình chất lượng cao

mô-đun bạn có thể sử dụng để tạo số ngẫu nhiên. Cú pháp khác nhau ở mỗi
ngôn ngữ, nhưng nó thường giống như sau:
myRandomNumber = ngẫu nhiên (10)

Trong câu lệnh này, myRandomNumber là một biến số mà bạn đã khai báo và
86 biểu thức ngẫu nhiên (10) có nghĩa là “gọi một phương thức tạo và trả về một
số từ 1 đến 10 ” Theo quy ước, trong sơ đồ, bạn sẽ cảm thấy kinh ngạc
như thế này trong một biểu tượng xử lý với hai sọc dọc ở các cạnh, như được hiển thị bên dưới.

myRandomNumber =
ngẫu nhiên (10)

Tạo lưu đồ hoặc mã giả thể hiện logic cho một chương trình tạo
một số ngẫu nhiên, sau đó yêu cầu người dùng nghĩ về một số từ 1 đến 10.
Sau đó, hiển thị số được tạo ngẫu nhiên để người dùng có thể biết liệu họ
đoán là chính xác. (Trong các chương sau, bạn sẽ cải thiện trò chơi này để người dùng
có thể nhập một dự đoán và chương trình có thể xác định xem người dùng có đúng hay không.)

Lên cho cuộc thảo luận

1. Manyprogrammingstyleguidesarepublishedthe Web.Theseguidessuggestgood
số nhận dạng, giải thích các quy tắc thụt lề chuẩn và xác định các vấn đề về kiểu cụ thể
ngôn ngữ lập trình. Tìm hướng dẫn phong cách cho ít nhất hai ngôn ngữ (đối với
ví dụ, C ++, Java, Visual Basic hoặc C #) và liệt kê bất kỳ sự khác biệt nào bạn nhận thấy.
2. Có những ưu điểm gì khi yêu cầu các biến phải có kiểu dữ liệu?
3. Asthischapter đề cập, một số ngôn ngữ lập trình yêu cầu các hằng số được đặt tên
được gán một giá trị khi chúng được khai báo; các ngôn ngữ khác cho phép giá trị của một hằng số
sẽ được chỉ định sau này trong một chương trình. Bạn nghĩ yêu cầu nào tốt hơn? Tại sao?
4. Nhiều sản phẩm sử dụng vỏ Pascal hoặc vỏ lạc đà trong tên của chúng – ví dụ:
Thẻ MasterCard. Đặt tên càng nhiều càng tốt.
5. Đo khoảng cách là một tình huống trong đó sử dụng phép chia số nguyên và
toán tử còn lại có thể hữu ích. Ví dụ, nếu ngôn ngữ lập trình
hỗ trợ nó, bạn có thể chia số đo 123 inch cho 12 để được 10 feet, sau đó
sử dụng toán tử phần dư để phát hiện ra rằng phép đo là 3 inch trên 10 feet.
Hãy nghĩ đến một số tình huống khác mà bạn có thể thấy toán tử phần dư hữu ích.
6. Bạn muốn tự mình viết một chương trình lớn hay làm việc theo nhóm trong
mà mỗi lập trình viên tạo ra một hay nhiều mô-đun? Tại sao?

https://translate.googleusercontent.com/translate_f 43/44
9/7/2021 Khai báo và sử dụng biến và hằng số

7. Lập trình cực đoan là một hệ thống để phát triển phần mềm nhanh chóng. Một trong những nguyên lý của nó
là tất cả mã sản xuất được viết bởi hai lập trình viên ngồi tại một máy.
Đây có phải là một ý tưởng tốt? Làm việc theo cách này với tư cách là một lập trình viên có hấp dẫn bạn không? Tại sao hay
tại sao không?

https://translate.googleusercontent.com/translate_f 44/44

You might also like