Trong các bài trước, mình đã giới thiệu tới bạn một số cấu trúc cơ bản (cấu trúc if, cấu trúc switch…case). Hôm nay mình sẽ hướng dẫn một cấu trúc mới, đó là cấu trúc lặp (vòng lặp). Nội dung bài viết sẽ tập trung trình bày về cấu trúc lặp while (còn gọi là vòng lặp white).
Cấu trúc lặp là gì?
Khái niệm về cấu trúc lặp
Về khái niệm vòng lặp thì mình sẽ trình bày lại như sau. “Cấu trúc lặp (vòng lặp), là cách thức để giúp chúng ta thực hiện nhiều lần một lệnh hoặc khối lệnh bằng cách lặp đi lặp lại lệnh hoặc khối lệnh đó (có thể xác định được số lần lặp hoặc không).“
Sơ đồ hoạt động của một cấu trúc lặp
Có thể khái niệm trên vẫn còn khá mơ hồ và khó hình dung phải không nào. Bây giờ, chúng ta hãy cùng xem sơ đồ sau xem có dễ hiểu hơn chút nào không nhé.
Từ sơ đồ trên, bạn hãy để ý luồng xử lý màu đỏ nhé, đó chính là vòng lặp đấy bạn. Rõ ràng, vòng lặp sẽ cần điều kiện để quản lý việc thực hiện khối lệnh. Nếu điều kiện đúng thì khối lệnh lặp sẽ được thực hiện, sau đó chương trình sẽ kiểm tra lại điều kiện lặp. Nếu điều kiện lặp vẫn còn đúng thì khối lệnh sẽ được thực hiện lại một lần nữa. Chu trình này cứ lặp đi lặp lại cho đến khi điều kiện lặp sai.
Ví dụ minh hoạ
Có lẽ sơ đồ trên vẫn chưa thoả mãn được một vài bạn. Thôi thì chúng ta xét một ví dụ sau để hiểu rõ hơn nữa nhé.
Thời học sinh, có bạn nào đã từng bị phạt bằng hình thức chép phạt một câu nào đó nhiều lần chưa? Có lẽ ít nhiều cũng 01 lần bị rồi phải không nào? Với ví dụ này, bạn sẽ thấy được rằng việc chép phạt chính là một hành động lặp (lặp đi lặp lại việc ghi chép phạt nhiều lần). Giả sử bạn sẽ cần chép phạt 100 lần câu “Học lập trình C++” nhé. Sơ đồ hoạt động lúc này như sau:
Mình hy vọng là tới thời điểm này bạn đã có thể tự đọc được flowchart ở trên. Mình lưu ý là bạn cũng đừng bận tâm về code lúc này nhé. Hãy hiểu về “tư tưởng” đã rồi sau đó chúng ta mới bắt đầu chuyển từ sơ đồ sang code.
Vòng lặp while
Khái niệm và cú pháp vòng lặp while
Vòng lặp while (hay cấu trúc lặp while) là cấu trúc lặp khá phổ biến trong nhiều ngôn ngữ. Trong C++ cũng vậy, while là một cấu trúc lặp đơn giản giúp bạn thực hiện lặp đi lặp lại một lệnh hoặc khối lệnh nào đó nhiều lần nếu điều kiện lặp vẫn còn được thoả mãn.
➤ Cú pháp vòng lặp while
Vòng lặp while cần có điều kiện lặp để quản lý việc lặp khối lệnh bên trong. Có nghĩa là nếu điều kiện lặp còn đúng thì việc lặp đi lặp lại khối lệnh bên trong vẫn còn được diễn ra. Vòng lặp sẽ chỉ dừng lại khi điệu kiện lặp không còn đúng nữa mà thôi. Hiểu cách khác thì số lần thực hiện lệnh / khối lệnh con bên trong phụ thuộc vào việc bạn đặt điều kiện lặp.
Ví dụ minh hoạ cho vòng lặp while
Mình sẽ chuyển sơ đồ (ví dụ chép phạt ở trên) sang code bằng cách sử dụng vòng lặp while. Như sau:Mình sẽ diễn giải sơ đoạn code ở trên tuần tự như sau để bạn dễ hiểu hơn nhé.
- Đầu tiên, khai báo biến soLanChepPhat để quản lý việc lặp bằng cách đếm số lần lặp.
- Ban đầu, soLanChepPhat bằng 0 tương ứng với việc vòng lặp sẽ chưa được thực hiện lần nào cả.
- Tiếp đó, vòng while (dòng 5) sẽ kiểm tra điều kiện trước khi thực hiện lặp. soLanChepPhat lúc này là 0 thì chắc chắn sẽ thoả điều kiện nhỏ hơn 100. Do đó vòng lặp sẽ thực hiện các lệnh con bên trong.
- Câu lệnh cout tại dòng 7 sẽ được thực thi do đã thoả mãn điều kiện của while. Sau cùng, tăng giá trị của soLanChepPhat lên 01 để xác nhận đã thực hiện 01 lần lặp.
- Tới đây chưa kết thúc đâu bạn nhé, hãy xem lại sơ đồ ở trên một lần nữa. Bạn sẽ thấy rắng, sau khi thực hiện xong khối lệnh bên trong, chương trình sẽ quay lại kiểm tra điều kiện của vòng lặp while. Nếu lúc này soLanChepPhat vẫn nhỏ hơn 100 thì khối lệnh while vẫn sẽ quay lại thực hiện lại khối lệnh con của nó. Vòng tuần hoàn cứ như vậy cho đến khi điều kiện không còn thoả mãn nữa (soLanChepPhat lớn hơn hoặc bằng 100) thì sẽ thoát khỏi khối lệnh while và thực thi câu lệnh tại dòng 11.
Vòng lặp vô tận
Vòng lặp vô tận là vòng lặp thực hiện đi thực hiện lại khối lệnh con của nó mà không có điểm kết thúc. Hiểu theo cách khác là biểu thức điều kiện lặp luôn luôn đúng dẫn tới vòng lặp không có khả năng dừng lại. Nếu bị rơi vào vòng lặp vô tận, chương trình của bạn chắc chắn sẽ bị lỗi, dẫn tới “treo” hoặc “thoát” đột ngột. Vì vậy bạn cần hết sức cẩn thận khi đặt điều kiện lặp và quản lý vòng lặp để tránh rơi vào tình trạng này.
Trong trường hợp đặc biệt cần sử dụng vòng lặp vô tận do không thể xác định trước được điều kiện lặp hoặc số lần lặp, bạn có thể sử dụng lệnh break, goto, return để thoát khỏi vòng lặp vô tận khi thoả điều kiện nào đó bên trong thân của vòng lặp.
➤ Ví dụ về một trường hợp lặp vô tận so đặt điều kiện lặp không phù hợp (điều kiện lặp luôn đúng).
Vòng lặp lồng
Tương tự như cấu trúc if, bạn có thể đặt một hoặc nhiều vòng lặp while bên trong một vòng lặp while nào đó. Trường hợp này được gọi là vòng lặp while lồng nhau. Đối với trường hợp vòng lặp lồng sẽ không có một cú pháp cụ thể nào cả. Tuỳ theo từng ngữ cảnh mà bạn sẽ có cách dùng cho phù hợp mà thôi.
➤ Ví dụ: sửa lại ví dụ trước một chút nhé. Ví dụ lần này mình cũng sẽ thực hiện việc in ra màn hình câu “Học lập trình C++” nhưng với mỗi một câu “Học lập trình C++” thì sẽ in thêm 02 cụm “thật chăm chỉ”. Chương trình mình sẽ thực hiện như thế này:
Tới thời điểm này chắc là bạn đã có khả năng đọc hiểu code rồi đúng không nào. Đoạn code trên sẽ in ra câu “Học lập trình C++, thật chăm chỉ, thật chăm chỉ” 05 lần.
- Tại lần lặp đầu tiên, chương trình in câu “Học lập trình C++” tại vòng lặp bên ngoài.
- Tuy nhiên trong vòng lặp này chứa 01 vòng lặp while nữa bên trong, đây chính là vòng lặp lồng. Vòng lặp này sẽ lặp 02 lần để in ra 02 cụm từ “, thật chăm chỉ”. Như vậy bạn có thể hình dung, với 01 lần lặp của vòng lặp bên ngoài thì sẽ có 02 lần lặp của vòng lặp lồng bên trong. Vì thế vòng lặp bên ngoài lặp 05 lần thì tổng chúng ta sẽ có 10 lần lặp.
Ví dụ trên là một ví dụ vui thôi bạn nhé. Hy vọng bạn sẽ không bắt bẻ sao không in ra luôn mà dùng vòng lặp lồng chi :D.
TỔNG KẾT
Bài viết này được viết với mong muốn bạn có thêm một nguồn tài liệu để tìm hiểu về cấu trúc lặp nói chung và vòng lặp while nói riêng. Vòng lặp while là vòng lặp đơn giản và phổ biến trong nhiều ngôn ngữ, vì vậy cũng không quá khó để học. Nhưng bạn cần lưu ý việc kiểm soát và đặt điều kiện lặp, nếu bạn đặt điều kiện lặp không chính xác có thể làm cho số lần lặp của bạn không như ý muốn.