Professional Documents
Culture Documents
Chương 3
Chương 3
Ví dụ: giả sử rằng bạn bắt đầu công việc như một người giặt chó và bạn nhận được
hướng dẫn trong Hình 3-1. Sơ đồ này là một ví dụ về mì spaghetti không có cấu trúc
mã. Một chương trình máy tính được tổ chức tương tự có thể "hoạt động" — nghĩa là, nó có thể
tạo ra kết quả chính xác — nhưng sẽ khó đọc và duy trì, cũng như logic của nó
sẽ khó theo dõi.
Bạn có thể làm theo logic của quy trình rửa chó trong Hình 3-1 vì hai lý do:
Bạn có thể đã biết làm thế nào để rửa một con chó.
Lưu đồ chứa một số bước giới hạn.
Trang 2
Bắt chó
Có chó không Đúng
chạy trốn?
Không
dừng lại
Tuy nhiên, hãy tưởng tượng rằng bạn không quen với việc giặt giũ cho chó, hoặc quá trình này còn xa
phức tạp hơn. (Ví dụ: hãy tưởng tượng bạn phải giặt 100 con chó đồng thời trong khi
bôi thuốc trị bọ chét và ve, cắt tóc cho chúng và nghiên cứu gia phả của chúng.)
Trang 3
90
Mô tả logic phức tạp hơn theo cách không có cấu trúc sẽ rất cồng kềnh. Cuối cùng
của chương này, bạn sẽ hiểu cách thực hiện quy trình không có cấu trúc trong Hình 3-1
rõ ràng hơn và ít bị lỗi hơn.
Các nhà phát triển phần mềm nói rằng một chương trình chứa mã spaghetti có tuổi thọ ngắn hơn chương trình có
mã có cấu trúc. Điều này có nghĩa là các chương trình được phát triển bằng mã spaghetti tồn tại dưới dạng sản xuất
các chương trình trong một tổ chức với thời gian ít hơn. Các chương trình như vậy rất khó thay đổi nên khi cải tiến
là bắt buộc, các nhà phát triển thường thấy dễ dàng hơn khi từ bỏ chương trình hiện có và bắt đầu lại từ đầu.
Điều này làm mất thêm thời gian và tốn nhiều tiền hơn.
2. Các chương trình được viết bằng mã spaghetti không thể tạo ra kết quả chính xác.
3. Các chương trình được viết bằng mã spaghetti khó bảo trì hơn các chương trình khác
các chương trình.
sự nối tiếp
sự lựa chọn
vòng
Chỉ với ba cấu trúc này, bạn có thể lập sơ đồ cho bất kỳ nhiệm vụ nào, từ nhân đôi một số đến
thực hiện phẫu thuật não. Bạn có thể lập sơ đồ từng cấu trúc với cấu hình cụ thể của
các ký hiệu lưu đồ.
được thể hiện trong Hình 3-3. Với cấu trúc này, một
trong số hai quá trình hành động được thực hiện dựa trên câu trả lời cho một câu hỏi. Lưu đồ mô tả
cấu trúc lựa chọn bắt đầu bằng ký hiệu quyết định và các nhánh của quyết định phải nối
ở dưới cùng của cấu trúc. Mã giả
mô tả cấu trúc lựa chọn bắt đầu bằng if .
Mã giả sử dụng câu lệnh cấu trúc cuối
endif để hiển thị rõ ràng nơi kết thúc của cấu trúc.
Không Đúng
Một số người gọi cấu trúc lựa chọn là
if-then-else bởi vì nó phù hợp với những điều sau
tuyên bố:
nếu một số Điều kiện là đúng thì
làm một
khác
làm theOtherProcess
endif
Hình 3-3 Cấu trúc lựa chọn
Ví dụ: bạn có thể cung cấp một phần của © 2015 Cengage Learning
Tương tự, một chương trình trả lương có thể bao gồm một tuyên bố như:
nếu giờ làm việc nhiều hơn 40 thì
tính toán Trả thường xuyên và trả ngoài giờ
khác
tính toán thường xuyên
endif
Những if-else ví dụ này cũng có thể được gọi kép thay thế nếu s (hoặc lựa chọn kép thay thế )
bởi vì chúng chứa hai lựa chọn thay thế — hành động được thực hiện khi điều kiện được kiểm tra là đúng
92
Trang 5
và hành động được thực hiện khi nó sai. Lưu ý rằng nó hoàn toàn chính xác cho một nhánh của
lựa chọn trở thành một nhánh "không làm gì cả". Trong mỗi ví dụ sau, một hành động chỉ được thực hiện
khi điều kiện được kiểm tra là đúng:
nếu trời mưa thì
lấy một chiếc ô
endif
nếu nhân viên tham gia vào chương trình nha khoa thì
khấu trừ $ 40 từ tổng lương của nhân viên
endif
Vòng lặp while kiểm tra một điều kiện trước khi thực thi phần thân của vòng lặp dù chỉ một lần. Một loại cấu trúc khác
vòng lặp kiểm tra một điều kiện sau khi thực thi phần thân của vòng lặp đầu tiên. Bạn sẽ tìm hiểu thêm về loại vòng lặp thay thế này
trong Chương 4 và trong Phụ lục D. Đối với phần còn lại của chương này, giả sử rằng tất cả các vòng lặp đều là các vòng lặp while yêu cầu
câu hỏi điều khiển trước khi thân vòng lặp thực thi. Tất cả các vấn đề logic có thể được giải quyết chỉ bằng cách sử dụng
ba cấu trúc — trình tự, lựa chọn và vòng lặp while.
Một số lập trình viên gọi một khi vòng một thời gian ... làm vòng lặp , bởi vì nó phù hợp với tuyên bố sau:
Khi bạn cung cấp chỉ đường đến ngôi nhà của mình, một phần của chỉ đường có thể là:
trong khi địa chỉ ngôi nhà bạn đang đi qua vẫn dưới 634
đi tiếp đến ngôi nhà tiếp theo
nhìn vào địa chỉ trên ngôi nhà
cuối cùng
93
Bạn gặp các ví dụ về lặp mỗi ngày, như trong mỗi ví dụ sau:
trong khi bạn tiếp tục đói
ăn một miếng nữa
xác định xem bạn có còn cảm thấy đói không
cuối cùng
trong khi các trang chưa đọc vẫn nằm trong bài tập đọc
đọc một trang chưa đọc khác
xác định xem có nhiều trang hơn để đọc hay không
cuối cùng
bướcA
bướcB
nếu điều kiệnC là đúng thì
bướcA bướcD
khác
sự nối tiếp stepE
endif
bướcB trong khi điều kiệnF là đúng
stepG
cuối cùng
Không Đúng
điều kiệnC?
sự lựa chọn
stepE bướcD
Hình 3-6 Lưu đồ có cấu trúc và mã giả với ba cấu trúc xếp chồng lên nhau
Trang 7
Cho dù bạn đang vẽ lưu đồ hay viết mã giả, bạn có thể sử dụng bất kỳ
các từ để thể hiện kết quả quyết định — ví dụ: Có và Không hoặc đúng và sai. Cuốn sách này theo sau
quy ước sử dụng Có và Không trong sơ đồ lưu đồ và đúng và sai trong mã giả.
Mã giả trong Hình 3-6 cho thấy một chuỗi, tiếp theo là một vùng chọn, tiếp theo là một vòng lặp.
Bước đầu tiênA và bướcB thực thi theo trình tự. Sau đó, một cấu trúc lựa chọn bắt đầu với việc kiểm tra
điều kiệnC .
Lệnh theo sau mệnh đề if ( stepD ) thực thi khi nó được kiểm tra
điều kiện ( conditionC ) là đúng, lệnh theo sau else ( stepE ) thực thi khi
điều kiện đã kiểm tra là sai và bất kỳ hướng dẫn nào theo endif đều thực thi trong cả hai trường hợp. Trong
nói cách khác, các câu lệnh ngoài câu lệnh endif là “bên ngoài” cấu trúc lựa chọn.
Tương tự, câu lệnh endared cho biết nơi kết thúc của cấu trúc vòng lặp. Trong Hình 3-6, trong khi
conditionF tiếp
tục đúng, stepG tiếp tục thực thi. Nếu bất kỳ câu lệnh nào theo sau
endwhile tuyên bố, họ sẽ ở bên ngoài, và không phải là một phần của, vòng lặp.
Bên cạnh cấu trúc xếp chồng, bạn có thể thay thế bất kỳ bước riêng lẻ nào trong một lưu đồ có cấu trúc
sơ đồ hoặc mã giả với các cấu trúc bổ sung. Điều này có nghĩa là bất kỳ trình tự, lựa chọn nào,
hoặc vòng lặp có thể chứa các cấu trúc trình tự, lựa chọn hoặc vòng lặp khác. Ví dụ, bạn có thể có
một chuỗi ba nhiệm vụ trên một nhánh của vùng chọn, như trong Hình 3-7. Đặt một
cấu trúc bên trong cấu trúc khác được gọi là cấu trúc lồng nhau .
94
Hình 3-7 Lưu đồ và mã giả hiển thị các cấu trúc lồng nhau — một trình tự được lồng trong một vùng chọn
Trong mã giả cho logic được hiển thị trong Hình 3-7, phần thụt lề cho thấy rằng cả ba
các câu lệnh ( stepJ , stepK và stepL ) phải thực thi nếu điều kiệnH là true. Ba cái này
các câu lệnh tạo thành một khối hoặc một nhóm các câu lệnh thực thi như một đơn vị duy nhất.
Thay cho một trong các bước trong trình tự trong Hình 3-7, bạn có thể chèn một cấu trúc khác. Trong
Hình 3-8, quy trình có tên stepK đã được thay thế bằng cấu trúc vòng lặp bắt đầu bằng
một thử nghiệm của điều kiện có tên là conditionM .
Trang 8 nếu điều kiệnH là đúng thì
stepJ
Không Đúng trong khi điều kiệnM là đúng
điều kiệnH? stepN
cuối cùng
stepL
95
stepJ endif
Đúng
điều kiệnM? stepN
Không
stepL
Hình 3-8 Lưu đồ và mã giả hiển thị các cấu trúc lồng nhau — một vòng lặp được lồng trong một chuỗi,
lồng trong một lựa chọn
© 2015 Cengage Learning
Trong mã giả được hiển thị trong Hình 3-8, lưu ý rằng if và endif được căn chỉnh theo chiều dọc. Điều này
cho thấy rằng họ “ở cùng một cấp độ”. Tương tự như vậy, stepJ , trong khi , endwhile , và stepL là
căn chỉnh và chúng được thụt lề đều nhau. Trong sơ đồ ở Hình 3-8, bạn có thể vẽ một đường thẳng đứng
dòng thông qua những biểu tượng chứa stepJ , các điểm ra vào của trong khi vòng lặp, và
bướcL . Lưu đồ và mã giả biểu diễn chính xác cùng một logic.
Khi bạn lồng các cấu trúc, các câu lệnh bắt đầu và kết thúc một cấu trúc luôn nằm trên
cùng cấp và luôn luôn theo cặp. Các cấu trúc không được chồng lên nhau. Ví dụ, nếu bạn có một if
cấu trúc có chứa một trong khi cấu trúc, thì endwhile tuyên bố sẽ đến trước
endif .
Mặt khác, nếu bạn có một khoảng thời gian có chứa if , thì câu lệnh endif
sẽ đến trước khi endwhile .
Không có giới hạn về số lượng cấp độ bạn có thể tạo khi lồng ghép và xếp chồng các cấu trúc.
Ví dụ, Hình 3-9 cho thấy logic đã được làm phức tạp hơn bằng cách thay thế
stepN với một lựa chọn. Cấu trúc thực hiện stepP hoặc stepQ dựa trên kết quả của
conditionO được lồng trong vòng lặp được điều khiển bởi conditionM . Trong mã giả
trong Hình 3-9, hãy để ý xem if , else và endif mô tả lựa chọn điều kiện như thế nào
liên kết với nhau và trong cấu trúc while được điều khiển bởi conditionM .
Như trước đây, thụt lề được sử dụng trong mã giả phản ánh logic được trình bày bằng đồ thị trong
lưu đồ.
Trang 9
Đúng
điều kiệnM?
Không
stepL
Không Đúng
điều kiệnO?
stepQ stepP
Hình 3-9 Lưu đồ và mã giả cho một lựa chọn trong một vòng lặp trong một trình tự trong một lựa chọn
© 2015 Cengage Learning
Nhiều ví dụ trước là chung chung để bạn có thể tập trung vào các mối quan hệ của
biểu tượng mà không cần lo lắng về những gì họ làm. Hãy nhớ rằng các hướng dẫn chung chung như bướcA
và các điều kiện chung như conditionC có thể đại diện cho bất cứ điều gì. Ví dụ, Hình 3-10
cho thấy quá trình mua và trồng hoa ngoài trời vào mùa xuân sau khi nguy
sương giá đã qua. Lưu đồ và cấu trúc mã giả giống như trong Hình 3-9.
Trong các bài tập ở cuối chương này, bạn sẽ được yêu cầu phát triển thêm các tình huống
phù hợp với cùng một mẫu.
Trang 10
là sương giá
vẫn Đúng
khả thi?
Không
cây
những bông hoa
trong lòng đất
Không kết thúc chưa Đúng
50F hôm nay?
Hình 3-10 Quy trình mua và trồng hoa vào mùa xuân
Sự kết hợp có thể có của các cấu trúc logic là vô tận, nhưng mỗi phân đoạn của một cấu trúc
chương trình là một chuỗi, một lựa chọn hoặc một vòng lặp. Ba cấu trúc được hiển thị cùng nhau trong
Tham khảo nhanh 3-1. Lưu ý rằng mỗi cấu trúc có một điểm vào và một điểm thoát. Một
cấu trúc có thể gắn với cấu trúc khác chỉ tại một trong những điểm này.
Trang 11
98
nhập cảnh nhập cảnh nhập cảnh
Không
lối ra
lối ra
lối ra
Hãy thử tưởng tượng về mặt vật lý chọn bất kỳ cấu trúc nào trong ba cấu trúc bằng cách sử dụng các “chốt” nhập và xuất. đó là
những điểm mà bạn có thể kết nối cấu trúc này với cấu trúc khác. Tương tự, bất kỳ cấu trúc hoàn chỉnh nào, từ
điểm vào đến điểm thoát của nó, có thể được chèn vào trong biểu tượng quy trình của bất kỳ cấu trúc nào khác, tạo thành
cấu trúc.
Tóm lại, một chương trình có cấu trúc có các đặc điểm sau:
Một chương trình có cấu trúc chỉ bao gồm sự kết hợp của ba cấu trúc cơ bản—
trình tự, lựa chọn và vòng lặp. Bất kỳ chương trình có cấu trúc nào cũng có thể chứa một, hai hoặc tất cả
ba loại cấu trúc.
Mỗi cấu trúc có một điểm vào duy nhất và một điểm thoát duy nhất.
Các cấu trúc có thể được xếp chồng lên nhau hoặc kết nối với nhau chỉ tại các điểm vào hoặc ra của chúng.
Bất kỳ cấu trúc nào cũng có thể được lồng trong cấu trúc khác.
Một chương trình có cấu trúc không bao giờ bắt buộc phải chứa các ví dụ về cả ba cấu trúc. Ví dụ, nhiều
các chương trình đơn giản chỉ chứa một chuỗi một số tác vụ thực thi từ đầu đến cuối mà không có bất kỳ
các lựa chọn hoặc vòng lặp cần thiết. Một ví dụ khác, một chương trình có thể hiển thị một chuỗi số, lặp lại để làm
vì vậy, nhưng không bao giờ đưa ra bất kỳ quyết định nào về các con số.
Trang 12
1. Mỗi cấu trúc trong lập trình có cấu trúc là một chuỗi, lựa chọn hoặc
vòng.
2. Tất cả các vấn đề logic chỉ có thể được giải quyết bằng cách sử dụng ba cấu trúc — trình tự,
99
lựa chọn và vòng lặp.
3. Ba cấu trúc không thể được kết hợp trong một chương trình duy nhất.
Tuyên bố
num originalNumber
100 num tínhAnswer
Không
không eof? dừng lại
Đúng
tínhAnswer =
originalNumber * 2
đầu ra
tính toán
Hình 3-11 Lưu đồ không có cấu trúc của chương trình nhân đôi số
© 2015 Cengage Learning
Nhớ lại từ Chương 1 rằng cuốn sách này sử dụng eof để biểu thị một điều kiện cuối dữ liệu chung khi
các thông số được kiểm tra không quan trọng đối với cuộc thảo luận. Trong ví dụ này, bài kiểm tra không phải là eof vì
quá trình xử lý sẽ tiếp tục trong khi chưa đạt đến phần cuối của dữ liệu.
Chương trình được biểu diễn bằng hình 3-11 có cấu trúc không? khởi đầu
Lúc đầu, có thể khó nói. Ba cho phép
cấu trúc đã được minh họa trong Tài liệu tham khảo nhanh 3-1, và
lưu đồ trong Hình 3-11 trông không giống hệt như Tuyên bố
bất kỳ hình dạng nào trong ba hình dạng đó. Tuy nhiên, vì bạn có thể num originalNumber
cấu trúc ngăn xếp và lồng nhau trong khi vẫn giữ lại tổng thể num tínhAnswer
Phần này của lưu đồ có được cấu trúc không? Vâng, nó là một
chuỗi hai nhiệm vụ — khai báo và
nhập một giá trị.
Hình 3-12 Sự bắt đầu của một
lưu đồ nhân đôi số
© 2015 Cengage Learning
Trang 14
Cả hai cấu trúc lựa chọn và lặp đều bắt đầu bằng một câu hỏi,
đầu vào
nhưng chúng khác nhau như sau: ban đầu
Trong cấu trúc lựa chọn, các nhánh logic ở một trong các
hai hướng sau câu hỏi, và sau đó là luồng
quay lại với nhau; câu hỏi không được hỏi a Không
không eof?
lần thứ hai trong cấu trúc lựa chọn.
Trong một vòng lặp, mỗi khi câu trả lời cho câu hỏi Đúng
dẫn đến việc thực thi phần thân của vòng lặp, luồng của
logic trở lại câu hỏi bắt đầu vòng lặp.
Khi phần thân của một vòng lặp thực thi, câu hỏi rằng Hình 3-13 Nhân đôi số
điều khiển vòng lặp luôn được hỏi lại.
lưu đồ tiếp tục
Nếu điều kiện cuối dữ liệu không được đáp ứng trong số- © 2015 Cengage Learning
Lưu đồ trong Hình 3-14 cho thấy chương trình với luồng logic quay trở lại
không eof? câu hỏi ngay sau chuỗi hai bước lồng nhau. Hình 3-14 cho thấy
Trang 15 Đừng làm điều đó
khởi đầu
Đúng
không eof?
Không
đầu ra
tính toán
Hình 3-14 Lưu đồ có cấu trúc, nhưng không chức năng, của bài toán nhân đôi số
một lưu đồ có cấu trúc, nhưng nó có một lỗ hổng lớn - lưu đồ không thực hiện công việc của
liên tục nhân đôi số lượng khác nhau.
Thực hiện theo sơ đồ thông qua một lần chạy chương trình điển hình, giả sử điều kiện eof là
giá trị đầu vào bằng 0. Giả sử khi chương trình bắt đầu, người dùng nhập giá trị 9 cho giá trị
trong số originalNumber . Đó không phải là eof , vì vậy số được nhân với 2 và 18 là
được hiển thị dưới dạng giá trị của countAnswer . Sau đó, câu hỏi không eof? được hỏi lại.
Không phải là eof? điều kiện vẫn phải đúng bởi vì một giá trị mới đại diện cho trạm gác
giá trị (kết thúc) chưa được nhập và không thể nhập được. Logic không bao giờ trở lại
các originalNumber đầu vào công việc, vì vậy giá trị của originalNumber bao giờ thay đổi.
Do đó, 9 nhân đôi một lần nữa và câu trả lời 18 được hiển thị một lần nữa. Không phải là eof? kết quả là
vẫn đúng, vì vậy các bước tương tự được lặp lại. Điều này diễn ra mãi mãi, với câu trả lời 18 là
được tính toán và xuất nhiều lần. Logic chương trình được hiển thị trong Hình 3-14 được cấu trúc,
nhưng nó không hoạt động như dự định. Ngược lại, chương trình trong Hình 3-15 hoạt động, nhưng
nó không có cấu trúc bởi vì sau khi các tác vụ thực thi trong một vòng lặp có cấu trúc, luồng
logic phải trở lại trực tiếp câu hỏi điều khiển vòng lặp. Trong Hình 3-15, lôgic
không trở lại câu hỏi này; thay vào đó, nó đi "quá cao" bên ngoài vòng lặp để lặp lại
các originalNumber đầu vào công việc.
Trang 16 khởi đầu
Đừng làm điều đó
Logic này không có cấu trúc.
Tuyên bố
num originalNumber
num tínhAnswer 103
đầu vào
ban đầu
Đúng
không eof?
Không
đầu ra
tính toán
Làm thế nào để bài toán nhân đôi số vừa được cấu trúc vừa hoạt động như dự định? Thường,
để một chương trình được cấu trúc, bạn phải thêm một thứ gì đó bổ sung. Trong trường hợp này, nó là mồi
bước đầu vào. Một mồi đầu vào hoặc mồi đọc là một tuyên bố nói thêm rằng bị đầu vào đầu tiên
giá trị trong một chương trình. Ví dụ: nếu một chương trình sẽ nhận 100 giá trị dữ liệu làm đầu vào, bạn nhập
giá trị đầu tiên trong một câu lệnh tách biệt với 99 giá trị khác. Bạn phải làm điều này để giữ
chương trình có cấu trúc.
Hãy xem xét giải pháp trong Hình 3-16; nó được cấu trúc và nó thực hiện những gì nó phải làm.
Nó chứa một câu lệnh originalNumber đầu vào được tô bóng, bổ sung . Logic chương trình
chứa một chuỗi và một vòng lặp. Vòng lặp chứa một chuỗi khác.
Trang 17 khởi đầu
Tuyên bố
num originalNumber
104 num tínhAnswer
Đúng
không eof?
Không
tínhAnswer =
originalNumber * 2
dừng lại
đầu ra
tính toán
Hình 3-16 Lưu đồ chức năng, có cấu trúc cho bài toán nhân đôi số
© 2015 Cengage Learning
Bước đầu vào bổ sung originalNumber được hiển thị trong Hình 3-16 là điển hình trong cấu trúc
các chương trình. Bước đầu tiên trong hai bước đầu vào là đầu vào mồi. Thuật ngữ sơn lót đến
từ thực tế là đầu vào là đầu tiên hoặc chính (nó giúp quá trình diễn ra, như trong “mồi
máy bơm ”). Mục đích của bước đầu vào mồi là để kiểm soát vòng lặp sắp tới
điều đó bắt đầu với không phải eof? câu hỏi. Phần tử cuối cùng trong vòng lặp có cấu trúc được
tiếp theo và tất cả các giá trị đầu vào tiếp theo. Điều này cũng là điển hình trong các vòng lặp có cấu trúc —
bước cuối cùng được thực thi trong phần thân vòng lặp sẽ thay đổi điều kiện được kiểm tra trong câu hỏi
bắt đầu vòng lặp, mà trong trường hợp này không phải là eof? câu hỏi.
Trong Chương 2, bạn đã biết rằng nhóm các nhiệm vụ sơ bộ tạo tiền đề cho công việc chính của
một chương trình được gọi là phần dọn phòng. Đầu vào mồi là một ví dụ về nhiệm vụ dọn phòng.
Hình 3-17 cho thấy một cách khác mà bạn có thể cố gắng rút ra logic cho số-
chương trình nhân đôi. Thoạt nhìn, hình có vẻ như cho thấy một giải pháp có thể chấp nhận được
vấn đề — nó có cấu trúc, nó chứa một chuỗi theo sau là một vòng lặp với
một chuỗi gồm ba bước được lồng trong nó và nó dường như loại bỏ nhu cầu về
câu lệnh đầu vào mồi. Khi chương trình bắt đầu, các khai báo được thực hiện và
Trang 18
không eof? câuhỏi được hỏi. Nếu nó không phải là phần cuối của dữ liệu đầu vào, thì chương trình sẽ nhận được một
số, nhân đôi nó và hiển thị nó. Sau đó, nếu không phải eof? điều kiện vẫn đúng,
chương trình nhận một số khác, nhân đôi nó và hiển thị nó. Chương trình có thể tiếp tục
trong khi nhiều số là đầu vào. Tại một số điểm, số đầu vào sẽ đại diện cho eof
tình trạng; ví dụ, chương trình có thể đã được viết để nhận ra giá trị 0 là
giá trị kết thúc chương trình. Sau khi giá trị eof được nhập, điều kiện của nó không 105
ngay lập tức được thử nghiệm. Thay vào đó, kết quả được tính toán và hiển thị lần cuối trước
câu hỏi kiểm soát vòng lặp được hỏi lại. Nếu chương trình được viết để nhận ra eof
khi số gốc là 0, thì câu trả lời không liên quan của số 0 sẽ được hiển thị trước
chương trình kết thúc. Tùy thuộc vào ngôn ngữ bạn đang sử dụng và loại đầu vào
đang được sử dụng, kết quả có thể tồi tệ hơn: Chương trình có thể kết thúc bằng cách hiển thị
thông báo lỗi hoặc đầu ra giá trị có thể là rác không thể giải mã được. Trong mọi trường hợp, điều này cuối cùng
đầu ra là thừa — không có giá trị nào nên được nhân đôi và đầu ra sau điều kiện eof là
đã gặp.
Theo nguyên tắc chung, kiểm tra kết thúc chương trình phải luôn đến ngay sau đầu vào
vì đó là điểm sớm nhất mà nó có thể được đánh giá. Do đó, tốt nhất
giải pháp cho vấn đề nhân đôi số vẫn là giải pháp được hiển thị trong Hình 3-16 —
giải pháp có cấu trúc chứa câu lệnh đầu vào mồi.
khởi đầu
Logic này được cấu trúc,
nhưng thiếu sót. Khi người dùng
Tuyên bố nhập giá trị eof, nó sẽ
num originalNumber
num tínhAnswer
Đúng không chính xác được nhân đôi và
không eof?
đầu ra.
đầu vào
Không
ban đầu
dừng lại
tínhAnswer =
originalNumber * 2
đầu ra
tính toán
Hình 3-17 Giải pháp có cấu trúc nhưng không chính xác cho bài toán nhân đôi số
© 2015 Cengage Learning
Trang 19
106 1. Đầu vào mồi là câu lệnh lặp đi lặp lại tất cả dữ liệu được nhập vào
trong một chương trình.
2. Một chương trình có cấu trúc có thể chứa nhiều hướng dẫn hơn một chương trình không có cấu trúc.
3. Một chương trình có thể được cấu trúc nhưng vẫn không chính xác.
Trong các ngôn ngữ cũ hơn, bạn có thể để lại một lựa chọn hoặc vòng lặp trước khi nó hoàn tất bằng cách sử dụng câu lệnh “go to”.
Câu lệnh cho phép logic "đi đến" bất kỳ phần nào khác của chương trình cho dù nó nằm trong cùng
cấu trúc hay không. Lập trình có cấu trúc đôi khi được gọi là lập trình goto-less .
Bảo trì — Bạn và các lập trình viên khác sẽ thấy dễ dàng hơn trong việc sửa đổi và bảo trì
các chương trình có cấu trúc như những thay đổi được yêu cầu trong tương lai.
Tính mô-đun — Các chương trình có cấu trúc có thể dễ dàng được chia nhỏ thành các mô-đun có thể
được gán cho bất kỳ số lượng lập trình viên nào. Các thói quen sau đó được ghép lại với nhau như
đồ nội thất mô-đun tại mỗi điểm vào hoặc ra duy nhất của mỗi thói quen. Ngoài ra, một mô-đun thường
có thể được sử dụng trong nhiều chương trình, tiết kiệm thời gian phát triển trong dự án mới.
Trang 20
1. Chương trình có cấu trúc rõ ràng hơn các chương trình không có cấu trúc. 107
2. Bạn và các lập trình viên khác sẽ thấy dễ dàng hơn khi sửa đổi và duy trì cấu trúc
các chương trình thay đổi được yêu cầu trong tương lai.
Hình 3-19 Ví dụ 2
© 2015 Cengage Learning
Trang 21
G
Đừng làm điều đó
Phân đoạn chương trình này là
108 Không Đúng không có cấu trúc.
H?
2
Không Đúng
G
TÔI?
J K 3 G
H?
Không
H?
4
G 5
G
Không Đúng
H? J
Không Đúng
H?
TÔI?
Không
TÔI?
J
J J
G
6
G
7
Không Đúng
H?
Không Đúng
H?
Không Đúng
TÔI?
Không Đúng
TÔI?
J J K
J J K
Nhìn vào sơ đồ ở góc trên bên trái của Hình 3-20. Nếu bạn có thể bắt đầu kéo
mũi tên ở trên cùng, bạn sẽ gặp một hộp có nhãn G. (Xem Hình 3-20, Bước 1.)
quy trình như G là một phần của cấu trúc có thể chấp nhận được — ít nhất nó tạo thành phần đầu của một
cấu trúc trình tự.
Hãy tưởng tượng rằng bạn tiếp tục kéo các biểu tượng từ phân đoạn rối. Mặt hàng tiếp theo
trong lưu đồ là một câu hỏi kiểm tra một điều kiện có nhãn H, như bạn có thể thấy trong
Hình 3-20, Bước 2. Tại thời điểm này, bạn biết chuỗi bắt đầu bằng G đã kết thúc.
Chuỗi không bao giờ có câu hỏi trong chúng, vì vậy chuỗi kết thúc; hoặc là một lựa chọn
hoặc một vòng lặp bắt đầu bằng câu hỏi H. Một vòng lặp phải quay trở lại điều khiển vòng lặp
câu hỏi ở một số thời điểm sau đó. Bạn có thể thấy từ logic ban đầu rằng liệu
câu trả lời cho H là Có hoặc Không, logic không bao giờ trở lại H. Do đó, H bắt đầu lựa chọn
cấu trúc, không phải là cấu trúc lặp.
Để tiếp tục tháo gỡ logic, bạn sẽ kéo lên trên dòng chảy xuất hiện từ bên trái
bên (bên Không) của Câu hỏi H. Bạn gặp J, như thể hiện trong Bước 3 của Hình 3-20. Khi nào
bạn tiếp tục vượt qua J, bạn đến cuối lưu đồ.
Bây giờ bạn có thể chuyển sự chú ý của mình sang phía Có (phía bên phải) của điều kiện được kiểm tra
ở H. Khi bạn kéo lên ở phía bên phải, bạn gặp Câu hỏi I. (Xem Bước 4 của
Hình 3-20.)
Trong phiên bản ban đầu của lưu đồ ở Hình 3-20, hãy làm theo dòng ở phía bên trái
của Câu hỏi I. Đường nổi lên từ phía bên trái của lựa chọn I được gắn với J,
nằm ngoài cấu trúc lựa chọn. Bạn có thể nói rằng lựa chọn do tôi kiểm soát đang trở thành
vướng mắc với lựa chọn được kiểm soát H, vì vậy bạn phải gỡ rối các cấu trúc bằng cách
lặp lại bước gây rối. (Trong ví dụ này, bạn lặp lại Bước J để
gỡ rối nó khỏi cách sử dụng khác của J.) Tiếp tục kéo dòng chảy mà
xuất hiện từ J cho đến khi bạn đến cuối phân đoạn chương trình, như được hiển thị trong Bước 5 của
Hình 3-20.
Bây giờ kéo ở phía bên phải của Câu hỏi I. Quy trình K bật lên, như được hiển thị trong Bước 6 của
Hình 3-20; sau đó bạn đạt đến cuối cùng.
Tại thời điểm này, sơ đồ không bị rối có ba đầu lỏng lẻo. Các kết thúc lỏng lẻo của Câu hỏi Tôi có thể
được tập hợp lại với nhau để tạo thành một cấu trúc lựa chọn; thì các đầu lỏng lẻo của Câu H có thể là
kết hợp với nhau để tạo thành một cấu trúc lựa chọn khác. Kết quả là lưu đồ được hiển thị trong
Bước 7 của Hình 3-20. Toàn bộ phân đoạn lưu đồ được cấu trúc — nó có một trình tự theo sau
bởi một lựa chọn bên trong một lựa chọn.
Nếu bạn muốn thử cấu trúc một ví dụ khó hơn về chương trình không có cấu trúc, hãy xem Phụ lục B.
Trang 23
1. Một số quy trình không thể được thể hiện trong một định dạng có cấu trúc.
2. Một lưu đồ phi cấu trúc có thể đạt được kết quả chính xác.
3. Bất kỳ lưu đồ không có cấu trúc nào đều có thể được “tách rời” để trở thành có cấu trúc.
1 2 khởi đầu
khởi đầu
Bắt chó
Bắt chó 111
3
khởi đầu
Có chó không Đúng
chạy trốn?
Bắt chó
Không Tắt
Nước
Bật nước
Đừng làm điều đó
Vòng lặp này không có cấu trúc
Có chó không Đúng
bởi vì logic của nó
chạy trốn?
Tắt
không trở lại câu hỏi
Không Nước sau khi cơ thể của nó thực thi.
Bắt chó
Không
Bật nước
Hình 3-21 Các bước cấu trúc quy trình rửa chó
Trang 25
112
Trong sơ đồ ban đầu ở Hình 3-1, bạn bật nước khi con chó không chạy
xa. Bước này là một trình tự đơn giản, vì vậy nó có thể được thêm vào sau vòng lặp một cách chính xác. Khi mà
nước được bật, logic ban đầu sẽ kiểm tra xem con chó có bỏ chạy sau cái mới này hay không
phát triển. Điều này bắt đầu một vòng lặp. Trong sơ đồ ban đầu, các đường chéo nhau, tạo ra một đám rối, vì vậy
bạn lặp lại nhiều bước nếu cần để tách các đường. Sau khi bạn tắt nước và
bắt con chó, bạn gặp câu hỏi Con chó có gội đầu không? Bởi vì logic
chưa đến bước gội đầu thì không cần hỏi câu này; câu trả lời tại
điểm này luôn luôn là Không. Khi một trong những con đường hợp lý xuất hiện từ một câu hỏi có thể
không bao giờ được đi du lịch, bạn có thể loại bỏ câu hỏi. Phần 2 của Hình 3-21 cho thấy rằng nếu
con chó chạy đi sau khi bạn bật nước, nhưng trước khi bạn làm con chó bị ướt và
gội đầu cho nó thì phải tắt nước, bắt chó, trả lời câu hỏi.
hỏi liệu con chó có chạy đi không.
Logic trong Phần 2 của Hình 3-21 không có cấu trúc vì vòng lặp thứ hai bắt đầu
với câu hỏi Con chó có chạy trốn không? không ngay lập tức trở lại vòng lặp-
câu hỏi kiểm soát sau khi phần thân của nó thực thi. Vì vậy, để tạo cấu trúc vòng lặp, bạn có thể
lặp lại các hành động xảy ra trước khi quay lại câu hỏi kiểm soát vòng lặp. Các
phân đoạn lưu đồ trong Phần 3 của Hình 3-21 được cấu trúc; nó chứa một chuỗi, một vòng lặp, một
và một vòng lặp cuối cùng, lớn hơn. Vòng lặp cuối cùng này chứa trình tự, vòng lặp và
sự nối tiếp.
Sau khi bắt được chó và hết nước, bạn làm ướt và gội đầu cho chó. Sau đó,
theo sơ đồ ban đầu trong Hình 3-1, bạn kiểm tra lại một lần nữa để xem liệu
con chó đã bỏ chạy. Nếu nó có, bạn tắt nước và bắt con chó. Từ đây
vị trí trong logic, câu trả lời cho Con chó có bật dầu gội đầu không? câu hỏi sẽ luôn luôn
được Có; như trước đây, không cần đặt câu hỏi khi chỉ có một
câu trả lời. Vì vậy, nếu con chó bỏ chạy, vòng lặp cuối cùng sẽ thực thi. Bạn tắt nước, tiếp tục
để bắt con chó khi nó chạy trốn liên tục và vặn nước. Khi con chó
bắt được cuối cùng, bạn rửa sạch con chó và kết thúc chương trình. Hình 3-22 cho thấy cả hai
lưu đồ hoàn chỉnh và mã giả.
Trang 26
khởi đầu
khởi đầu
Bắt chó
trong khi con chó chạy trốn
Bắt chó
Bắt chó cuối cùng
Bật nước
trong khi con chó chạy trốn 113
Tắt nước
Có chó không Đúng
Bắt chó Bắt chó
chạy trốn? trong khi con chó chạy trốn
Bắt chó
Không
cuối cùng
Bật nước
Bật nước cuối cùng
Làm ướt chó và thoa dầu gội đầu
trong khi con chó chạy trốn
Đúng Tắt nước
Có chó không
Bắt chó
chạy trốn?
trong khi con chó chạy trốn
Tắt nước Bắt chó
Không
cuối cùng
Bật nước
Bắt chó cuối cùng
Rửa sạch chó
Làm ướt chó
dừng lại
và áp dụng
dầu gội đầu
Có chó không Đúng
Bắt chó
chạy trốn?
Không
Bật nước
Bắt chó
Bật nước
Lưu đồ trong Hình 3-22 đã hoàn chỉnh và có cấu trúc. Nó chứa trình tự xen kẽ
và các cấu trúc vòng lặp.
Trang 27
Hình 3-22 bao gồm ba vị trí mà trình tự vòng lặp của việc bắt chó và
bật nước được lặp lại. Nếu muốn, bạn có thể sửa đổi bản sao
để các tập lệnh của chúng được viết một lần và được chứa trong một mô-đun riêng biệt.
Hình 3-23 cho thấy một phiên bản được mô-đun hóa của chương trình; ba lệnh gọi mô-đun được tô bóng.
114
khởi đầu khởi đầu
catchDogStartWater ()
trong khi con chó chạy trốn
Tắt nước
catchDogStartWater () catchDogStartWater ()
cuối cùng
Làm ướt chó và thoa dầu gội đầu
trong khi con chó chạy trốn
Tắt nước
Có chó không Đúng catchDogStartWater ()
chạy trốn? cuối cùng
Rửa sạch chó
Tắt nước dừng lại
Không
catchDogStartWater ()
Bắt chó
Làm ướt chó và catchDogStartWater () trong khi con chó chạy trốn
thoa dầu gội đầu
Bắt chó
cuối cùng
Đúng Bật nước
Có chó không
chạy trốn? trở về
Tắt nước
Không
Bắt chó
Không
Bật nước
trở về
Hình 3-23 Phiên bản mô-đun hóa của chương trình rửa chó
© 2015 Cengage Learning
Trang 28
Một lợi thế để mô-đun hóa các bước cần thiết để bắt chó và bắt đầu xuống nước
là chương trình chính trở nên ngắn hơn và dễ hiểu hơn. Khác
lợi thế là nếu quy trình này cần được sửa đổi, các thay đổi có thể được thực hiện chỉ trong 115
một địa điểm. Ví dụ, nếu bạn quyết định rằng cần phải kiểm tra nước
nhiệt độ mỗi lần bạn bật nước, bạn sẽ chỉ thêm các hướng dẫn đó
một lần trong phiên bản mô-đun hóa. Trong phiên bản gốc ở Hình 3-22, bạn sẽ có
để thêm các hướng dẫn đó ở ba nơi, gây ra nhiều công việc hơn và tăng cơ hội
vì lỗi.
Cho dù phức tạp đến đâu, bất kỳ tập hợp bước nào cũng luôn có thể được rút gọn thành các tổ hợp
của ba cấu trúc tuần tự, lựa chọn và vòng lặp cơ bản. Những cấu trúc này có thể
lồng nhau và xếp chồng lên nhau theo vô số cách để mô tả logic của bất kỳ quy trình nào
và để tạo logic cho mọi chương trình máy tính được viết trong quá khứ, hiện tại hoặc
Tương lai.
Để thuận tiện, nhiều ngôn ngữ lập trình cho phép hai biến thể của ba cấu trúc cơ bản. Trường hợp
cấu trúc là một biến thể của cấu trúc lựa chọn và vòng lặp do là một biến thể của vòng lặp while. Bạn có thể
tìm hiểu về hai cấu trúc này trong Phụ lục D. Mặc dù những cấu trúc bổ sung này có thể được sử dụng trong hầu hết các
ngôn ngữ lập trình, tất cả các vấn đề logic có thể được giải quyết mà không cần chúng.
1. Khi bạn gặp một câu hỏi trong sơ đồ logic, một trình tự sẽ
được kết thúc.
2. Trong vòng lặp có cấu trúc, logic trở lại câu hỏi điều khiển vòng lặp sau
phần thân vòng lặp thực thi.
3. Nếu một lưu đồ hoặc mã giả chứa một câu hỏi mà câu trả lời không bao giờ
khác nhau, bạn có thể loại bỏ câu hỏi.
Trang 29
116
Chương trình không có cấu trúc là chương trình không tuân theo các quy tắc của logic có cấu trúc.
Chương trình có cấu trúc là chương trình tuân theo các quy tắc của logic có cấu trúc.
Một cấu trúc là một đơn vị cơ bản của lập trình logic; mỗi cấu trúc là một chuỗi, lựa chọn hoặc vòng lặp.
Một cấu trúc chuỗi chứa loạt các bước thực hiện theo thứ tự. Một chuỗi có thể chứa bất kỳ
số lượng nhiệm vụ, nhưng không có tùy chọn để phân nhánh, bỏ qua bất kỳ nhiệm vụ nào.
Một cấu trúc lựa chọn hoặc cấu trúc quyết định chứa một câu hỏi, và, tùy thuộc vào
trả lời, thực hiện một trong hai quy trình hành động trước khi tiếp tục với nhiệm vụ tiếp theo.
Một tuyên bố cuối cùng cấu trúc chỉ định vào cuối của một cấu trúc giả.
If -then-else là một tên khác của cấu trúc lựa chọn thay thế kép.
Thay thế kép nếu s (hoặc lựa chọn thay thế kép ) xác định một hành động sẽ được thực hiện khi
điều kiện đã thử nghiệm là đúng và một hành động khác cần thực hiện khi điều kiện đó là sai.
Thay thế duy nhất nếu s (hoặc các lựa chọn thay thế duy nhất ) chỉ thực hiện hành động trên một nhánh của
quyết định.
Các trường hợp rỗng hoặc chi nhánh rỗng là một nhánh của một quyết định mà không có hành động được thực hiện.
Một cấu trúc vòng lặp tiếp tục lặp lại hành động trong khi một điều kiện thử nghiệm vẫn còn đúng.
Trang 30
Nội dung vòng lặp là tập hợp các hành động xảy ra trong một vòng lặp.
Một khi vòng lặp là một cấu trúc mà vẫn tiếp tục lặp lại một quá trình trong khi một số điều kiện
vẫn đúng.
117
Lặp lại và lặp là các tên thay thế cho một cấu trúc vòng lặp.
Một thời gian ... làm vòng lặp là một tên thay thế cho một trong khi vòng lặp.
Xếp chồng các cấu trúc là hành động gắn các cấu trúc từ đầu đến cuối.
Các cấu trúc lồng vào nhau là hành động đặt một cấu trúc vào trong một cấu trúc khác.
Một khối là một nhóm các câu lệnh thực thi như một đơn vị duy nhất.
Một mồi đầu vào hoặc mồi đọc là tuyên bố mà đọc đầu vào đầu trước khi bắt đầu
một vòng lặp có cấu trúc sử dụng dữ liệu.
Lập trình Goto-less là một cái tên để mô tả lập trình có cấu trúc, vì có cấu trúc
lập trình viên không sử dụng câu lệnh “go to”.
Bài tập
4. Từ nào sau đây không phải là một thuật ngữ khác cho cấu trúc lựa chọn?
a. cấu trúc quyết định c. cấu trúc if kép thay thế
b. cấu trúc vòng lặp d. cấu trúc if-then-else
5. Cấu trúc kiểm tra một điều kiện, thực hiện hành động nếu kết quả là đúng, và sau đó kiểm tra
điều kiện một lần nữa có thể được gọi là tất cả các điều kiện sau ngoại trừ a (n) .
Trang 31
6. Đặt một cấu trúc trong một cấu trúc khác được gọi là các cấu trúc.
a. xếp chồng c. xây dựng
b. gỡ rối d. làm tổ
7. Các cấu trúc gắn kết từ đầu đến cuối được gọi là .
118
a. xếp chồng c. xây dựng
b. gỡ rối d. làm tổ
8. Khi một hành động được yêu cầu nếu một điều kiện là đúng, nhưng không cần hành động nếu điều kiện đó là đúng
sai, bạn sử dụng một .
a. sự nối tiếp c. lựa chọn thay thế kép
b. vòng d. lựa chọn thay thế duy nhất
9. Để thực hiện hành động miễn là một điều kiện vẫn đúng, bạn sử dụng .
a. sự nối tiếp c. lựa chọn thay thế kép
b. vòng d. lựa chọn thay thế duy nhất
10. Khi bạn phải thực hiện một hành động khi một điều kiện đúng và một điều kiện khác
https://translate.googleusercontent.com/translate_f 31/37
9/7/2021 Nhược điểm của Mã mì Ý không có cấu trúc
khi nó sai, bạn sử dụng .
a. sự nối tiếp c. lựa chọn thay thế kép
b. vòng d. lựa chọn thay thế duy nhất
11. Thuộc tính nào sau đây cả ba cấu trúc cơ bản đều dùng chung?
a. Tất cả các sơ đồ của chúng đều chứa chính xác ba biểu tượng xử lý.
b. Tất cả đều có một điểm vào và một điểm ra.
c. Tất cả chúng đều chứa đựng một quyết định.
d. Tất cả đều bắt đầu với một quá trình.
13. Khi bạn nhập dữ liệu vào một vòng lặp trong một chương trình, câu lệnh đầu vào đứng trước
vòng lặp .
a. là phần duy nhất của chương trình được phép không có cấu trúc
b. không thể dẫn đến eof
c. được gọi là đầu vào mồi
d. thực hiện hàng trăm hoặc thậm chí hàng nghìn lần trong hầu hết các chương trình kinh doanh
Trang 32
Bài tập
14. Một nhóm câu lệnh thực thi như một đơn vị là .
a. khối c. khúc gỗ
b. gia đình d. đội quân
15. Điều nào sau đây được chấp nhận trong một chương trình có cấu trúc?
119
a. đặt một trình tự trong nhánh thực sự của một quyết định thay thế kép
b. đặt một quyết định trong một vòng lặp
c. đặt một vòng lặp trong một trong các bước theo trình tự
d. Tất cả những điều này đều có thể chấp nhận được.
16. Trong cấu trúc lựa chọn, câu hỏi kiểm soát cấu trúc là .
a. đã hỏi một lần ở đầu cấu trúc
b. hỏi một lần ở cuối cấu trúc
c. được hỏi nhiều lần cho đến khi nó sai
d. hỏi lặp đi lặp lại cho đến khi nó là sự thật
17. Khi một vòng lặp thực thi, câu hỏi kiểm soát cấu trúc là .
https://translate.googleusercontent.com/translate_f 32/37
9/7/2021 Nhược điểm của Mã mì Ý không có cấu trúc
a. đã hỏi chính xác một lần
b. không bao giờ hỏi nhiều hơn một lần
c. được hỏi trước hoặc sau khi phần thân vòng lặp thực thi
d. chỉ hỏi nếu nó là đúng, và không được hỏi nếu nó là sai
18. Điều nào sau đây không phải là lý do để thực thi các quy tắc cấu trúc trong máy tính
các chương trình?
a. Các chương trình có cấu trúc dễ hiểu hơn các chương trình không có cấu trúc.
b. Các lập trình viên chuyên nghiệp khác sẽ mong đợi các chương trình có cấu trúc.
c. Các chương trình có cấu trúc thường ngắn hơn các chương trình không có cấu trúc.
d. Các chương trình có cấu trúc có thể được chia nhỏ thành các mô-đun một cách dễ dàng.
19. Điều nào sau đây không phải là lợi ích của việc điều biến chương trình?
a. Các chương trình mô-đun dễ đọc và dễ hiểu hơn các chương trình không mô-đun.
b. Nếu bạn sử dụng mô-đun, bạn có thể bỏ qua các quy tắc cấu trúc.
c. Các thành phần mô-đun có thể được sử dụng lại trong các chương trình khác.
d. Nhiều lập trình viên có thể làm việc trên các mô-đun khác nhau cùng một lúc.
20. Điều nào sau đây là đúng với logic có cấu trúc?
a. Bạn có thể sử dụng logic có cấu trúc với các ngôn ngữ lập trình mới hơn, chẳng hạn như Java
và C #, nhưng không phải với những cái cũ hơn.
b. Bất kỳ nhiệm vụ nào cũng có thể được mô tả bằng cách sử dụng một số kết hợp của ba cấu trúc:
trình tự, lựa chọn và vòng lặp.
c. Các chương trình có cấu trúc yêu cầu bạn chia mã thành dễ xử lý
mỗi mô-đun chứa không quá năm hành động.
d. Tất cả những điều này đều đúng.
Trang 33
1. Trên hình 3-10 trình bày quy trình mua và trồng hoa vào mùa xuân.
sử dụng các cấu trúc tương tự như ví dụ chung trong Hình 3-9. Sử dụng cùng một lôgic
120 cấu trúc như trong Hình 3-9 để tạo lưu đồ hoặc mã giả mô tả một số
quy trình khác mà bạn biết.
2. Mỗi phân đoạn của lưu đồ trong Hình 3-24 là không có cấu trúc. Vẽ lại từng
phân đoạn để nó làm điều tương tự nhưng có cấu trúc.
a. b.
A D
https://translate.googleusercontent.com/translate_f 33/37
9/7/2021 Nhược điểm của Mã mì Ý không có cấu trúc
B? C E?
Không
F H
c.
Đúng
G?
K
Không Tôi
Không Đúng
L?
M P
N Đúng
Q?
Không
Đúng
Ơ?
Không R
Trang 34
Bài tập
(còn tiếp)
d. e.
S Không Đúng
B?
121
Không Đúng C G
T?
Đúng
U Y H?
Không
D
Đúng
Z?
Tôi
Đúng
Không E? Tôi
V
https://translate.googleusercontent.com/translate_f 34/37
9/7/2021 Nhược điểm của Mã mì Ý không có cấu trúc
Không
Đúng F
W?
Không
X A
3. Viết mã giả cho mỗi ví dụ (từ a đến e) trong Bài tập 2, đảm bảo
mã giả được cấu trúc và thực hiện các nhiệm vụ tương tự như phân đoạn lưu đồ.
4. Giả sử rằng bạn đã tạo ra một cánh tay máy móc có thể giữ một cây bút. Cánh tay có thể
thực hiện các nhiệm vụ sau:
Trang 35
như cánh tay máy móc và thực hiện các hướng dẫn của bạn. Không tiết lộ mong muốn
kết quả cho đối tác của bạn cho đến khi bài tập hoàn thành.
5. Giả sử rằng bạn đã tạo ra một robot cơ khí có thể thực hiện những việc sau
nhiệm vụ:
Đứng lên.
Ngồi xuống.
Đi một bước.
Ngoài ra, robot có thể xác định câu trả lời cho một điều kiện thử nghiệm:
Tôi có đang chạm vào thứ gì đó không?
a. Đặt hai chiếc ghế cách nhau 20 feet, đối diện trực tiếp với nhau. Vẽ một cấu trúc
lưu đồ hoặc viết mã giả mô tả logic cho phép rô bốt
bắt đầu từ vị trí ngồi trên một chiếc ghế, băng qua phòng và kết thúc là ngồi trong
ghế khác. Yêu cầu một sinh viên khác đóng vai trò là người máy và thực hiện
hướng dẫn.
b. Vẽ lưu đồ có cấu trúc hoặc viết mã giả mô tả logic sẽ
cho phép robot bắt đầu từ vị trí ngồi trên một chiếc ghế, đứng lên và đi vòng tròn
chiếc ghế, băng qua phòng, vòng qua chiếc ghế khác, quay trở lại chiếc ghế đầu tiên và ngồi.
Yêu cầu một bạn học đóng vai trò là người máy và thực hiện các chỉ dẫn của bạn.
7. Tra cứu một từ trong từ điển có thể là một quá trình phức tạp. Ví dụ,
giả sử rằng bạn muốn tra cứu logic. Bạn có thể mở từ điển một cách ngẫu nhiên
trang và xem nước trái cây. Bạn biết từ này có thứ tự bảng chữ cái trước logic, vì vậy bạn lật
chuyển tiếp và xem thịt cừu. Điều đó vẫn chưa đủ xa, vì vậy bạn hãy lật về phía trước và xem
con khỉ. Bạn đã đi quá xa, vì vậy bạn quay ngược lại, v.v. Vẽ một cấu trúc
lưu đồ hoặc viết mã giả mô tả quá trình tra cứu một từ trong
từ điển. Chọn một từ ngẫu nhiên và nhờ một học viên khác cố gắng thực hiện
hướng dẫn của bạn.
Trang 36
Bài tập
8. Vẽ lưu đồ có cấu trúc hoặc viết mã giả có cấu trúc mô tả cách thực hiện một
khối lượng đồ giặt. Bao gồm ít nhất hai quyết định và hai vòng lặp.
10. Vẽ lưu đồ có cấu trúc hoặc viết mã giả có cấu trúc mô tả cách 123
bọc một món quà. Bao gồm ít nhất hai quyết định và hai vòng lặp.
11. Vẽ lưu đồ có cấu trúc hoặc viết mã giả có cấu trúc mô tả các bước để
chuẩn bị món ăn yêu thích của bạn. Bao gồm ít nhất hai quyết định và hai vòng lặp.
https://translate.googleusercontent.com/translate_f 36/37
9/7/2021 Nhược điểm của Mã mì Ý không có cấu trúc
tệp
rằngvết
nólõm. Giả đổi
cần sửa sử rằng chương
như được môtrình này các
tả trong là một chương
nhận trình
xét (các làmbắt
dòng việc
đầutrong
bằngtổhai
chức của bạn và
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ái mới
thông số kỹ thuật.
Tìm lỗi
1. Các tệp có thể tải xuống của bạn cho Chương 3 bao gồm DEBUG03-01.txt, DEBUG03-02.txt,
và DEBUG03-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à các dòng bắt đầu bằng hai dấu gạch chéo (//). Tiếp theo các 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.
2. Các tệp có thể tải xuống của bạn cho Chương 3 bao gồm một tệp có tên DEBUG03-04.jpg
chứa một sơ đồ có lỗi cú pháp và / hoặc lôgic. Kiểm tra lưu đồ và
sau đó tìm và sửa tất cả các lỗi.
3. Chọn một môn thể thao như bóng chày hoặc bóng đá và mô tả các hành động trong một giới hạn
thời gian chơi (chẳng hạn như gậy at-bat trong bóng chày hoặc sở hữu trong bóng đá) bằng cách sử dụng
lưu đồ cấu trúc hoặc mã giả.
Trang 37
https://translate.googleusercontent.com/translate_f 37/37