I. Lặp với số lần biết trước và lặp với số lần không biết trước
Hãy xem xét hai bài toán sau đây:
Bài toán 1: Tính giá trị tổng S khi biết S = 1/1 + 1/2 + 1/3 + ... + 1/N.
Bài toán 2: Tính giá trị tổng S khi biết S = 1 + 2 + 3 + ... + N, và dừng lại khi S ≥ 10^6.
Để giải bài toán 1, ta có thể thực hiện các bước sau:
Bước 1: Gán giá trị ban đầu cho S là 1/1.
Bước 2: Tiếp theo, lặp lại việc cộng vào tổng S một giá trị 1/N với N là các số từ 2 đến N. Việc này được thực hiện (N-1) lần cho đến khi N = N, tức là ta đã tính được tổng ban đầu S.
Đối với bài toán 2, ta có thể thực hiện các bước sau:
Bước 1: Gán giá trị ban đầu cho S là 1.
Bước 2: Tiếp theo, lặp lại việc cộng vào tổng S các số 2, 3, 4,... cho đến khi tổng S đạt hoặc vượt quá giá trị 10^6. Số lần lặp này không được biết trước, nhưng chúng ta sẽ dừng lại khi tổng S đạt hoặc vượt quá giá trị 10^6.
Nhìn chung, các thuật toán đều có những thao tác lặp lại nhiều lần. Với con người, khi số lần lặp lại quá lớn, việc thực hiện trở nên không thể. Tuy nhiên, máy tính có khả năng tính toán nhanh chóng, giúp việc thực hiện các thao tác lặp lại trở nên hiệu quả. C++ cung cấp hai cấu trúc lặp để biểu diễn hai loại thao tác lặp này: lặp với số lần biết trước và lặp với số lần không biết trước.
II. Định nghĩa về Câu lệnh for
- Lặp với số lần biết trước
Khái niệm: Câu lệnh for là một cấu trúc điều khiển rất hiệu quả để lặp đi lặp lại một công việc trong một số lần nhất định.
Cú pháp:
Quy trình thực hiện của vòng lặp:
Bước 1 - Khởi tạo biến đếm: Ta khởi tạo một hoặc nhiều biến đếm bất kỳ trong vòng lặp, hoặc có thể không khởi tạo biến nào cả (nhưng vẫn phải có dấu chấm phẩy).
Bước 2 - Điều kiện dừng: Đây là một biểu thức logic xác định điều kiện để vòng lặp dừng lại. Trước khi thực hiện khối lệnh, biểu thức này sẽ được kiểm tra. Nếu biểu thức trả về giá trị true, khối lệnh sẽ được thực hiện và quá trình lặp sẽ tiếp tục. Ngược lại, nếu biểu thức trả về giá trị false, vòng lặp sẽ dừng lại.
Bước 3 - Khối lệnh: Sau khi kiểm tra điều kiện dừng và thấy kết quả là true, khối lệnh sẽ được thực hiện. Đây là nơi thực hiện các lệnh cần lặp đi lặp lại.
Bước 4 - Tăng/giảm biến đếm: Ở bước này, ta cập nhật giá trị của biến đếm theo cách mong muốn (có thể không cập nhật gì cả, nhưng vẫn phải có dấu chấm phẩy). Sau khi cập nhật xong, quá trình sẽ quay trở lại bước 2 và kiểm tra điều kiện dừng. Quá trình này lặp lại cho đến khi điều kiện dừng trả về giá trị false.
Ví dụ: Cùng xét chương trình sau:
Quá trình bắt đầu bằng việc thiết lập biến đếm i = 1. Tiếp theo, chúng ta kiểm tra điều kiện i <= N. Trong trường hợp điều kiện này đúng, chúng ta thực hiện câu lệnh S = S + i. Sau đó, giá trị của biến i được tăng lên 1 đơn vị và quay trở lại bước kiểm tra điều kiện i <= N. Quá trình này tiếp tục cho đến khi giá trị của biến i đạt đến N+1, khi đó vòng lặp dừng lại.
Giả sử nhập vào N bằng 10, kết quả in ra là:
III. Định nghĩa về Câu lệnh while
- lặp với số lần không biết trước
Thỉnh thoảng, chúng ta cần thực hiện một công việc lặp lại mà không biết trước số lần lặp, chỉ có điều kiện dừng. Trong trường hợp này, vòng lặp while trở nên vô cùng hữu ích. Trong C++, có hai dạng vòng lặp while: while và do...while.
1. Vòng lặp while là gì?
Cú pháp:
Quy trình thực hiện vòng lặp:
Bước 1 - {Điều_kiện_dừng}: Đây là một biểu thức logic xác định điều kiện dừng của vòng lặp. Trước khi thực thi {Khối_lệnh}, chương trình sẽ kiểm tra {Điều_kiện_dừng}. Nếu kết quả là true, vòng lặp sẽ tiếp tục thực thi {Khối_lệnh}. Ngược lại, nếu kết quả là false, vòng lặp sẽ kết thúc.
Bước 2 - {Khối_lệnh}: Sau khi kiểm tra {Điều_kiện_dừng} và thấy kết quả là true, {Khối_lệnh} sẽ được thực hiện. Sau đó, quá trình quay lại bước 1 sẽ tiếp tục cho đến khi điều kiện dừng của vòng lặp được đáp ứng.
Ví dụ:
Ban đầu, chương trình sẽ khởi tạo hai biến S = 0 và i = 1. Sau đó, khi bước vào vòng lặp, chương trình sẽ kiểm tra điều kiện S <= 100. Nếu điều kiện này đúng, chương trình sẽ thực hiện câu lệnh S = S + i, sau đó tăng giá trị biến i lên 5 đơn vị. Sau đó, chương trình quay trở lại bước kiểm tra điều kiện i <= N. Quá trình này sẽ tiếp tục lặp lại cho đến khi biến S có giá trị lớn hơn 100, khi đó vòng lặp sẽ kết thúc.
Kết quả in ra khi chạy chương trình là:
2. Vòng lặp do...while là gì?
Về cơ bản, vòng lặp do...while tương tự với vòng lặp while, nhưng khác biệt nằm ở thứ tự thực hiện. Vòng lặp do...while sẽ thực hiện khối lệnh trước và sau đó mới kiểm tra điều kiện dừng. Điều này có nghĩa là khối lệnh trong vòng lặp do...while sẽ luôn được thực thi ít nhất một lần, trong khi vòng lặp while có thể không được thực hiện lần nào.
Cú pháp:
Quy trình thực hiện vòng lặp:
Bước 1 - {Khối_lệnh}: Ban đầu, {Khối_lệnh} sẽ được thực thi.
Bước 2 - {Điều_kiện_dừng}: Sau đó, chương trình sẽ kiểm tra {Điều_kiện_dừng}. Nếu biểu thức logic trả về kết quả true, chương trình sẽ quay trở lại bước 1 và tiếp tục thực thi {Khối_lệnh}. Ngược lại, nếu kết quả là false, vòng lặp sẽ dừng lại.
Ví dụ:
Ban đầu, chương trình sẽ khởi tạo hai biến S = 0 và i = 1. Khi bước vào vòng lặp, chương trình sẽ tính S = S + i trước, sau đó gán i = i + 5 và tiếp tục kiểm tra điều kiện S <= 100. Nếu điều kiện này vẫn đúng, chương trình sẽ tiếp tục thực hiện lại khối lệnh, lặp lại quá trình cho đến khi biến S có giá trị lớn hơn 100. Khi đó, vòng lặp sẽ dừng lại.
Kết quả in ra khi chạy chương trình là:
IV. Vòng lặp lồng nhau là gì?
Cú pháp C++ cho phép người dùng có khả năng lồng nhiều vòng lặp vào nhau. Khi đó, mỗi lần lặp của vòng lặp bên ngoài sẽ kích hoạt vòng lặp bên trong để thực hiện số lần lặp tương ứng của nó.