Hyutars
Mario & Luigi
- 26/11/05
- 713
- 3
- Thread starter
- #21
Bài 2.6: Dùng vòng lặp do
Giống như vòng lặp while, vòng lặp do cho phép bạn lặp lại một đoạn code dựa theo điều kiện nào đó. Điểm khác biệt của vòng lặp do là nó kiểm tra điều kiện sau khi thực hiện mỗi vòng lặp (while là kiểm tra điều kiện trước mỗi vòng lặp). Có nghĩa là, thân vòng lặp luôn được thực hiện ít nhất một lần. Sau đây là cú pháp:
Chương trình thi hành statement trước, sau đó mới kiểm tra expression, nếu nó true, vòng lặp sẽ tiếp tục. Ngược lại, nếu expression trả về giá trị false thì vòng lặp sẽ kết thúc.
Giới thiệu chương trình Play Again 2.0:
Chương trình Play Again 2.0 giống y như chương trình Play Again ở bài trước. Chỉ có điều chương trình dùng vòng lặp do thay cho vòng lặp while. Hình 2.6 cho thấy chương trình đang hoạt động:
Tạo vòng lặp với do:
Trước khi vòng lặp do bắt đầu, tôi khai báo biến again thuộc kiểu char. Tôi không cần phải khởi tạo nó vì nó chưa được kiểm tra cho đến khi chương trình thực hiện xong vòng lặp thứ nhất. Tôi nhận giá trị mới cho biến again từ người chơi ở thân vòng lặp. Sau đó tôi kiểm tra expression. Nếu nó bằng ‘y’, vòng lặp được lặp lại, ngược lại, vòng lặp kết thúc.
Trong thực tế: Mặc dù bạn có thể dùng vòng lặp while và do để thay thế lẫn nhau, nhưng đa số lập trình viên thường dùng vòng lặp while. Có thể là vòng lặp do nhìn tự nhiên hơn trong một số trường hợp, nhưng lợi thế của vòng lặp while là expression xuất hiện ngay phía trên vòng lặp, bạn không cần phải tìm kiếm đến dòng cuối của vòng lặp để thấy nó.
Bẫy: Nếu bạn đã từng mắc kẹt khi chơi một game nào đó bởi chu trình không bao giờ kết thúc, bạn đã có kinh nghiệm về vòng lặp vô hạn (infinite loop) – vòng lặp không bao giờ kết thúc. Sau đây là một ví dụ đơn giản của vòng lặp vô hạn:
Trong trường hợp này, vòng lặp được thực hiện vì test là 10. Nhưng vì test không bao giờ thay đổi, vòng lặp sẽ không bao giờ kết thúc. Kết quả, người dùng phải “kill” chương trình đang chạy để kết thúc nó. Bài học? Hãy luôn chắc rằng expression của vòng lặp đến một lúc nào đó phải trả về giá trị false.
(hyutars: Có một số kĩ thuật lập trình rất hay dùng vòng lặp vô hạn, chẳng hạn như để tạo menu ... nếu bạn muốn xài vòng lặp vô hạn thì nhớ dùng break hoặc exit(1) để kết thúc nó, bạn không cần vội, cứ học đến các bài sau thì bạn sẽ biết ^^).
Giống như vòng lặp while, vòng lặp do cho phép bạn lặp lại một đoạn code dựa theo điều kiện nào đó. Điểm khác biệt của vòng lặp do là nó kiểm tra điều kiện sau khi thực hiện mỗi vòng lặp (while là kiểm tra điều kiện trước mỗi vòng lặp). Có nghĩa là, thân vòng lặp luôn được thực hiện ít nhất một lần. Sau đây là cú pháp:
Mã:
do
statement;
while (expression);
Chương trình thi hành statement trước, sau đó mới kiểm tra expression, nếu nó true, vòng lặp sẽ tiếp tục. Ngược lại, nếu expression trả về giá trị false thì vòng lặp sẽ kết thúc.
Giới thiệu chương trình Play Again 2.0:
Chương trình Play Again 2.0 giống y như chương trình Play Again ở bài trước. Chỉ có điều chương trình dùng vòng lặp do thay cho vòng lặp while. Hình 2.6 cho thấy chương trình đang hoạt động:
Mã:
// Play Again 2.0
// Demonstrates do loops
#include <iostream>
using namespace std;
int main()
{
char again;
do
{
cout << "\n**Played an exciting game**";
cout << "\nDo you want to play again? (y/n):";
cin >> again;
} while (again == 'y');
cout << "\nOkay, bye.";
return 0;
}
Tạo vòng lặp với do:
Trước khi vòng lặp do bắt đầu, tôi khai báo biến again thuộc kiểu char. Tôi không cần phải khởi tạo nó vì nó chưa được kiểm tra cho đến khi chương trình thực hiện xong vòng lặp thứ nhất. Tôi nhận giá trị mới cho biến again từ người chơi ở thân vòng lặp. Sau đó tôi kiểm tra expression. Nếu nó bằng ‘y’, vòng lặp được lặp lại, ngược lại, vòng lặp kết thúc.
Trong thực tế: Mặc dù bạn có thể dùng vòng lặp while và do để thay thế lẫn nhau, nhưng đa số lập trình viên thường dùng vòng lặp while. Có thể là vòng lặp do nhìn tự nhiên hơn trong một số trường hợp, nhưng lợi thế của vòng lặp while là expression xuất hiện ngay phía trên vòng lặp, bạn không cần phải tìm kiếm đến dòng cuối của vòng lặp để thấy nó.
Bẫy: Nếu bạn đã từng mắc kẹt khi chơi một game nào đó bởi chu trình không bao giờ kết thúc, bạn đã có kinh nghiệm về vòng lặp vô hạn (infinite loop) – vòng lặp không bao giờ kết thúc. Sau đây là một ví dụ đơn giản của vòng lặp vô hạn:
Mã:
int test = 10;
while (test == 10)
cout << test;
Trong trường hợp này, vòng lặp được thực hiện vì test là 10. Nhưng vì test không bao giờ thay đổi, vòng lặp sẽ không bao giờ kết thúc. Kết quả, người dùng phải “kill” chương trình đang chạy để kết thúc nó. Bài học? Hãy luôn chắc rằng expression của vòng lặp đến một lúc nào đó phải trả về giá trị false.
(hyutars: Có một số kĩ thuật lập trình rất hay dùng vòng lặp vô hạn, chẳng hạn như để tạo menu ... nếu bạn muốn xài vòng lặp vô hạn thì nhớ dùng break hoặc exit(1) để kết thúc nó, bạn không cần vội, cứ học đến các bài sau thì bạn sẽ biết ^^).
. Sự thực là mình mới thi xong, tưởng rãnh lắm, ai ngờ bây giờ trường nó chơi ác, bắt học kinh dị luôn, học cả ngày, ca tối cũng có, học cả chủ nhật, giờ suy ra lúc ôn thi còn rảnh hơn :whew: . Mình sẽ cố gắng có bản dịch tiếp theo, tối nay nếu thức được thì mai mình sẽ up ::)
