2. Đề mục
Khái niệm về vòng lặp
Câu lệnh while
Vòng lặp thực hiện các công việc giống nhau
Vòng lặp cộng dồn
Vòng lặp không biết trước số lần lặp
Vòng lặp nhập dữ liệu tuỳ biến
Vòng lặp 2
3. Khái niệm về vòng lặp
Cấu trúc tuần tự : Các câu lệnh được thực hiện lần lượt.
Cấu trúc rẽ nhánh (if/switch) : Các câu lệnh được thực hiện
phụ thuộc vào điều kiện
Cấu trúc lặp : Các câu lệnh được thực hiện lặp đi lặp lại.
Ví dụ:
Tính lương cho tất cả các công nhân trong một công ty
Hiển thị 100 kí tự ‘*’ ra màn hình
Sự lặp lại của một dãy các bước trong chương trình gọi là
vòng lặp (loop)
Các cấu trúc lặp trong C++ : while, for và do-while
Vòng lặp 3
4. Vòng lặp thực hiện các công việc giống nhau
Ví dụ 1: In ra màn hình 100 kí tự ‘*’
Phân tích:
Số kí tự in ra màn hình lúc đầu bằng 0
Trong khi số kí tự đã in ra màn hình chưa đạt tới 100 thì
• In ra kí tự ‘*’
• Tăng số kí tự đã in lên 1
Cài đặt:
dem = 0;
while (dem < 100)
{
cout<<‘*’;
dem = dem + 1;
}
Vòng lặp 4
5. Vòng lặp thực hiện các công việc giống nhau
Giải thích :
dem = 0; // Khởi tạo biến dem
Kiểm tra điều kiện (dem < 100) là đúng, vậy
In ra kí tự ‘*’
Tăng biến dem lên 1, như vậy dem = 1
Kiểm tra điều kiện (dem < 100) là đúng, vậy
In ra kí tự ‘*’
Tăng biến dem lên 1, như vậy dem = 2
…
Vòng lặp 5
6. Vòng lặp thực hiện các công việc giống nhau
Giải thích :
Kiểm tra điều kiện (dem < 100) là đúng, vậy
In ra kí tự ‘*’
Tăng biến dem lên 1, như vậy dem = 99
Kiểm tra điều kiện (dem < 100) là đúng, vậy
In ra kí tự ‘*’
Tăng biến dem lên 1, như vậy dem = 100
Kiểm tra điều kiện (dem < 100) là sai, vậy
Ra khỏi vòng lặp
Vòng lặp 6
7. Vòng lặp thực hiện các công việc giống nhau
Ví dụ 2 : Tính lương cho 10 công nhân dựa trên số
sản phẩm (mỗi sản phẩm được trả 5 nghìn đồng)
dem_cn = 0;
while (dem_cn < 10)
{
cout<<“So san pham lam duoc : quot;;
cin>>SoSP;
Luong = SoSP * 5;
cout<<“Luong cua ban la : quot;<<Luong<<quot; nghin dongquot;<<endl;
dem_cn++;
} // end while
Vòng lặp 7
8. Vòng lặp thực hiện các công việc giống nhau
Giải thích :
dem_cn = 0; // Khởi tạo biến dem_cn
Kiểm tra điều kiện (dem_cn < 10) là đúng, vậy
Thực hiện các câu lệnh nhập số sản phẩm và tính lương
dem_cn = dem_cn + 1 vậy dem_cn = 1;
Kiểm tra điều kiện (dem_cn < 10) là đúng, vậy
Thực hiện các câu lệnh nhập số sản phẩm và tính lương
dem_cn = dem_cn + 1 vậy dem_cn = 2;
…
Vòng lặp 8
9. Vòng lặp thực hiện các công việc giống nhau
Giải thích :
Kiểm tra điều kiện (dem_cn < 10) là đúng, vậy
Thực hiện các câu lệnh nhập số sản phẩm và tính lương
dem_cn = dem_cn + 1 vậy dem_cn = 9;
Kiểm tra điều kiện (dem_cn < 10) là đúng, vậy
Thực hiện các câu lệnh nhập số sản phẩm và tính lương
dem_cn = dem_cn + 1 vậy dem_cn = 10;
Kiểm tra điều kiện (dem_cn < 10) là sai, vậy
Ra khỏi vòng lặp
Vòng lặp 9
10. Sơ đồ minh hoạ
while
false
dem_cn < 10
true
Đọc dữ liệu
Tính và hiển thị lương
Tăng giá trị biến dem_cn
Vòng lặp 10
11. Câu lệnh while
Cú pháp
while (biểu thức logic)
<câu lệnh>; // hoặc <khối lệnh>
Quá trình thực hiện của while
Kiểm tra điều kiện
• Nếu điều kiện đúng thì thực hiện câu lệnh. Sau khi thực hiện xong câu lệnh lại
quay lại kiểm tra điều kiện…
• Nếu điều kiện sai thì thoát khỏi vòng lặp.
Vòng lặp 11
12. Biến điều khiển
Các biến như dem, dem_cn gọi là biến điều khiển
vòng lặp
Giá trị của biến điều khiển vòng lặp sẽ quyết định
vòng lặp có tiếp tục hay không
Có 3 bước liên quan đến biến điều khiển
Khởi tạo
Kiểm tra
Cập nhật giá trị
Vòng lặp 12
13. Bài tập
Viết chương trình in ra các số từ -10 đến 10, mỗi số
trên 1 dòng.
Viết chương trình in ra các số từ 1 đến 20 và căn bậc
2 của chúng, mỗi cặp giá trị trên 1 dòng.
Vòng lặp 13
14. Lời giải
Viết chương trình in ra các số từ -10 đến 10, mỗi số
trên 1 dòng
Phân tích
so = -10;
Trong khi (so <= 10)
• In ra so
• Tăng so lên 1
Vòng lặp 14
15. Lời giải
Viết chương trình in ra các số từ 1 đến 20 và căn bậc
2 của chúng, mỗi cặp giá trị trên 1 dòng.
Phân tích :
so = 1;
Trong khi (so <= 20)
• In ra so và căn bậc 2 của so
• Tăng so lên 1
Vòng lặp 15
16. Các toán tử tăng và giảm
Toán tử tăng 1 đơn vị ++
i++ : Tính toán rồi mới tăng i
++i : Tăng i rồi mới tính toán
Toán tử giảm 1 đơn vị --
i-- : Tính toán rồi mới giảm i
--i : Giảm i rồi mới tính toán
Ví dụ: i = 3
k = i ++ ; // gán giá trị 3 cho k rồi tăng i lên 1 là 4
k = ++ i ; // tăng i lên 1 là 5 rồi gán 5 cho k
k = i -- ; // gán giá trị 5 cho k và giảm i đi 1 còn 4
k = -- i ; // giảmg i đi 1 còn 3 và gán 3 cho
Vòng lặp 16
17. Các toán tử gộp
Một số ví dụ minh hoạ
a+=b a=a+b
a-=b a=a–b
a*=b a=a*b
a/=b a= a/b
a&=b a=a&b
Vòng lặp 17
18. Vòng lặp cộng dồn
Ví dụ : Mở rộng bài toán tính lương công nhân
Nhập số sản phẩm mà mỗi công nhân làm được
Tính lương cho công nhân đó (1 sp = 5000 đ)
Tính tổng lương của các công nhân
Vòng lặp 18
19. Bài toán : Tính Lương
Phân tích bài toán
Dữ liệu vào :
• Số lượng công nhân
• Số lượng sản phẩm mà từng công nhân làm được
Dữ liệu ra :
• Số tiền lương phải trả cho từng công nhân
• Tổng lương phải trả cho tất cả các công nhân
Vòng lặp 19
20. Bài toán : Tính Lương
Thiết kế thuật toán
Nhập số lượng công nhân
Khởi tạo giá trị tổng lương cho tất cả các công nhân là 0
Với mỗi công nhân
• Nhập số sản phẩm mà công nhân làm được
• Tính số tiền lương phải trả cho công nhân
• Hiển thị số tiền phải trả cho công nhân
• Thêm vào tổng lương số tiền lương của công nhân vừa tính
Hiển thị tổng lương phải trả cho tất cả các công nhân
Vòng lặp 20
21. Bài toán : Tính Lương
Làm mịn thuật toán cho bước 2 và 3
Tổng Lương = 0 ;
Đếm = 0;
Trong khi (Đếm < Số công nhân)
• Nhập số lượng sản phẩm
• Tính số tiền lương phải trả
– Lương = Số sản phẩm * 5 (nghìn đồng)
• Hiển thị số tiền phải trả
• Thêm vào tổng lương
– Tổng Lương = Tổng Lương + Lương;
Vòng lặp 21
22. Bài toán : Tính Lương
Cài đặt
#include <iostream.h>
#include <iostream.h>
void main()
void main()
{
{
// Khai báo các biến
// Khai báo các biến
int SoCN;
int SoCN;
int SoSP;
int SoSP;
int Luong;
int Luong;
int TongLuong;
int TongLuong;
int Dem;
int Dem;
// Nhập vào số lượng công nhân
// Nhập vào số lượng công nhân
cout<<quot;Nhap vao so cong nhan: quot;;
cout<<quot;Nhap vao so cong nhan: quot;;
cin>>SoCN;
cin>>SoCN;
//Khởi tạo các biến
//Khởi tạo các biến
Dem = 0;
Dem = 0;
TongLuong=0;
TongLuong=0;
Vòng lặp 22
23. Bài toán : Tính Lương
while (Dem < SoCN)
while (Dem < SoCN)
{
{
//Nhập số sản phẩm cho 1 công nhân
//Nhập số sản phẩm cho 1 công nhân
cout<<quot;Nhap so san pham: quot;;
cout<<quot;Nhap so san pham: quot;;
cin>>SoSP;
cin>>SoSP;
//Tính lương phải trả cho công nhân này
//Tính lương phải trả cho công nhân này
Luong = SoSP * 5;
Luong = SoSP * 5;
cout<<quot;Luong: quot;<<Luong<<quot; nghin dongquot;<<endl;
cout<<quot;Luong: quot;<<Luong<<quot; nghin dongquot;<<endl;
//Thêm vào tổng lương
//Thêm vào tổng lương
TongLuong += Luong;
TongLuong += Luong;
//Tăng biến Đếm
//Tăng biến Đếm
Dem++;
Dem++;
} // end while
} // end while
//Hiển thị tổng lương phải trả
//Hiển thị tổng lương phải trả
cout<<“Tong luong: quot;<<TongLuong<<quot; nghin dongquot;<<endl;
cout<<“Tong luong: quot;<<TongLuong<<quot; nghin dongquot;<<endl;
}
}
Vòng lặp 23
24. Vòng lặp không biết trước số lần lặp
Bài toán : Mô phỏng hiện tượng rơi tự do của một vật
Lập một bảng cho biết độ cao của vật sau mỗi giây
Phân tích :
Input : Độ cao ban đầu của vật
Output : Bảng độ cao sau mỗi giây
Trong khi vật rơi, độ cao mà nó đã rơi qua được tính theo
công thức : khoảng cách = ½ gt2 (g = 9.80665)
2
Như vậy sau một thời gian t, độ cao của vật so với mặt
đất là : Độ cao ban đầu - độ cao đã rơi sau thời gian t
Vòng lặp 24
25. Bài toán mô phỏng rơi tự do
Thiết kế thuật toán
Nhập dữ liệu độ cao ban đầu
Lập bảng cho biết độ cao của vật sau mỗi giây
Làm mịn bước lập bảng
Khởi tạo độ cao hiện tại của vật là độ cao ban đầu
Khởi tạo thời gian là 0
Trong khi (độ cao hiện tại > 0)
• Hiển thị thời gian và độ cao hiện tại
• Tăng thời gian lên 1 (giây)
• Tính lại độ cao hiện tại
Vòng lặp 25
26. Bài toán mô phỏng rơi tự do
Cài đặt
#include <iostream.h>
#include <iomanip.h>
void main()
{
// Khai bao hang va bien
const float g = 9.80655;
float do_cao_ban_dau;
float thoi_gian;
float do_cao_hien_tai;
// Nhap du lieu
cout<<quot;Nhap do cao ban dau cua vat : quot;;
cin>>do_cao_ban_dau;
Vòng lặp 26
27. Bài toán mô phỏng rơi tự do
Cài đặt
// Lap bang do cao
// Lap bang do cao
cout<<setw(10)<<quot;Thoi gianquot;<<setw(8)<<quot;Do caoquot;<<endl;
cout<<setw(10)<<quot;Thoi gianquot;<<setw(8)<<quot;Do caoquot;<<endl;
thoi_gian = 0;
thoi_gian = 0;
do_cao_hien_tai = do_cao_ban_dau;
do_cao_hien_tai = do_cao_ban_dau;
cout.setf(ios::fixed);
cout.setf(ios::fixed);
cout.precision(2);
cout.precision(2);
while (do_cao_hien_tai > 0)
while (do_cao_hien_tai > 0)
{{
cout<<setw(10)<<thoi_gian<<setw(8)<<do_cao_hien_tai<<endl;
cout<<setw(10)<<thoi_gian<<setw(8)<<do_cao_hien_tai<<endl;
thoi_gian ++;
thoi_gian ++;
do_cao_hien_tai = do_cao_ban_dau -- 0.5*g*thoi_gian*thoi_gian;
do_cao_hien_tai = do_cao_ban_dau 0.5*g*thoi_gian*thoi_gian;
}}
cout<<endl;
cout<<endl;
cout<<quot;CHAM DAT !!!quot;;
cout<<quot;CHAM DAT !!!quot;;
}}
Vòng lặp 27
28. Bài toán mô phỏng rơi tự do
Kiểm tra chương trình
Nhap do cao ban dau cua vat : 100
Thoi gian Do cao
0.00 100.00
1.00 95.10
2.00 80.39
3.00 55.87
4.00 21.55
CHAM DAT !!!
Vòng lặp 28
29. Xuất dữ liệu có định dạng
Đặt độ rộng để hiển thị giá trị
cout.width(4)
cout<<setw(4)
Đặt dạng hiển thị của số thực
cout.setf(ios::fixed) // hiển thị ở dạng dấu chấm
cout.setf(ios::scientific) // hiển thị ở dạng khoa học
Đặt số chữ số sau dấu chấm
cout.precision(2)
cout<<setprecision(2)
Vòng lặp 29
30. Vòng lặp không biết trước số lần lặp
Mở rộng bài toán :
Viết hàm để lập bảng độ cao sau từng giây. Hàm có đầu
vào là độ cao ban đầu của vật.
Sửa chương trình để cho phép in ra độ cao sau một
khoảng thời gian bất kỳ, thay vì sau mỗi giây.
Vòng lặp 30