You are on page 1of 9

Bài 10A: CẤU TRÚC VÒNG LẶP

Mục tiêu

 Phân tích được bài toán có tính chất lặp


 Xác định được biến lặp, điều kiện lặp và bước lặp
 Sử dụng được vòng lặp để giải quyết các bài toán tìm tối ưu

Nội dung

I. Giới thiệu

Xem xét một số vấn đề sau: Tính tổng các số từ 1 đến 1000, tính trung bình cộng
điểm môn tin học của học sinh toàn trường, in bảng cửu chương, … Các vấn đề này
thực hiện các bước tương tự nhau nhiều lần.

Ví dụ 1: Tính tổng các số nguyên từ 1 đến 1000 sử dụng vòng lặp for

#include <iostream>
using namespace std;

int main()
{
int n = 1000;
int sum = 0;
for (int i = 1; i <= n; i++)
{
sum = sum + i;
}
cout<<"Tổng các số nguyên từ 1 đến 1000 = " << sum;

return 0;
}

Thuật toán: Chúng ta tạo 1 biến lặp i từ 1 đến 1000. Sau đó tạo 1 biến sum để cộng
dồn các giá trị từ 1 đến 1000. Ở mỗi lần lặp biến sum sẽ bằng chính nó cộng dồn thêm

1
1 giá trị i, sau đó biến i sẽ tăng lên 1 đơn vị. cứ tiếp tục cho đến khi i lớn hơn 1000 thì
kết thúc vòng lặp.

Câu lệnh Chức năng

for (int i = 1; i <= n; i++) Tạo vòng lặp với biến i từ 1 đến n, mỗi lần
lặp i sẽ tăng 1 đơn vị

sum = sum + i; Thực hiện cộng dồn: sum bằng sum trước
đó cộng thêm i

 To-Do 1: Thực hiện biên dịch chương trình và chụp hình kết quả vào Class Notebook.

Ví dụ 2: In ra bảng cửu chương của 1 số n, n được được nhập vào từ bàn phím. Hiển thị
kết quả như sau

Nhập vào n: 5
Bảng cửu chương 5
5 * 1 = 5
5 * 2 = 10
5 * 3 = 15
5 * 4 = 20
5 * 5 = 25
5 * 6 = 30
5 * 7 = 35
5 * 8 = 40
5 * 9 = 45
5 * 10 = 50

#include <iostream>
using namespace std;

int main()
{
int n;
cout << "Nhập vào n: ";
cin >> n;

2
cout<<"Bảng cửu chương "<< n<< endl;
for (int i = 1; i <= 10; i++)
{
cout << n <<" * " << i << " = " << n * i <<endl;
}
return 0;
}

Trong bài toán này. Chúng ta tạo 1 biến i lặp lại 10 lần (từ 1 đến 10). Trong mỗi lần lặp ta
hiển thị kết quả tính toán của n*i lên màn hình.

Câu lệnh Chức năng

for (int i = 1; i <= 10; i++) Tạo vòng lặp với biến i từ 0
đến 10, mỗi lần lặp i sẽ tăng 1
đơn vị

cout << n <<" * " << i << " = " << n * i <<endl; Hiển thị lên màn hình với cấu
trúc n * i = kết quả n * i

To-Do 2: Thực hiện biên dịch chương trình và chụp hình kết quả vào Class Notebook

II. Cú pháp vòng lặp for

Cú pháp vòng lặp for

for (initialization; condition; step)


{
// Khối lệnh được lặp
}
Trong đó

Thành phần Mô tả Ví dụ

initialization Giá trị khởi tạo của biến int i = 0


lặp int k = 100

3
float m

condition Điều kiện lặp i < 100


k > 0
m < 10.0

step Bước lặp i++


k--
m = m + 0.1

Ví dụ vòng lặp for

Ví dụ Mô tả

for (int i = 0; i < 10; i++) Khởi tạo: i = 0


Điều kiện lặp: i < 10
Bước lặp là 1. Sau mỗi lần lặp i sẽ tăng
lên 1 đơn vị

i sẽ mang các giá trị 0 đến 9 trong vòng


lặp

for (int k = 1000; k > 0; i--) Khởi tạo: k = 1000


Điều kiện lặp: i > 0
Bước lặp là -1. Sau mỗi lần lặp k sẽ giảm
1 đơn vị

k sẽ mang các giá trị 1000 đến 1 trong


vòng lặp

for (float m = 0.0; m < 10.0; m = m + Khởi tạo: m = 0.0


0.01)
Điều kiện lặp: m < 10.0

4
Bước lặp là 0.01. Sau mỗi lần lặp m sẽ
tăng 0.01 đơn vị

m sẽ mang các giá trị (0.0, 0.01, 0.02,


0.03,…, 9.98, 9.99) trong vòng lặp

Ví dụ: Chương trình sau đây in ra các số từ 1 đến 5

#include <iostream>
using namespace std;

int main()
{
for (int i = 1; i <= 5; i++)
{
cout << i << " ";
}
return 0;
}

int i = 1: Khởi tạo biến i với giá trị khởi tạo bằng 1
i <= 5: Điều kiện lặp. Nếu biến i <= 5 thì vòng lặp sẽ được thực hiện. Chương trình sẽ
thoát khỏi vòng lặp khi i > 5.
i++: Biến i sẽ tăng lên 1 sau mỗi lần lặp
cout << i << “ ”; Câu lệnh này sẽ được lặp lại 5 lần

Chương trình hoạt động như sau

Lần lặp Giá trị i i <= 5 Hoạt động

1 i = 1 true In ra giá trị i (i=1) sau đó


tăng biến i lên 2

2 i = 2 true In ra giá trị i (i=2) sau đó


tăng biến i lên 3

5
3 i = 3 true In ra giá trị i (i=3) sau đó
tăng biến i lên 4

4 i = 4 true In ra giá trị i (i=4) sau đó


tăng biến i lên 5

5 i = 5 true In ra giá trị i (i=5) sau đó


tăng biến i lên 6

6 i = 6 false Thoát vòng lặp

 To-Do 3: Chỉnh sửa chương trình trên để in ra các số từ 5 đến 1. Biên dịch chương
trình và chụp hình kết quả vào Class Notebook

III. Ví dụ về sử dụng vòng lặp


1. Tìm giá trị lớn nhất của 1 mảng

Chương trình in ra phần tử lớn nhất của mảng và chỉ số của phần tử đó.

#include <iostream>
using namespace std;
int main()
{
int numbers[10] = {10, 100, 235, 356, 3, 675, 117, 8, 19, 100};
int soLonNhat = 0; //Biến để lưu số lớn nhất
int viTriSoLonNhat = 0; //Biến để lưu chỉ số
for(int i=0; i <10; i++)
{
if(numbers[i] > soLonNhat) //Kiểm tra phần tử hiện tại có lớn hơn
soLonNhat
{
soLonNhat = numbers[i]; //Gán số lớn nhất bằng phần tử hiện tại
viTriSoLonNhat = i; //Gán vị trí số lớn nhất bằng vị trí hiện tại
}
}
cout<<"Phần tử lớn nhất của mảng = " << soLonNhat << endl;
cout<<"Chỉ số của phần tử lớn nhất của mảng = " << viTriSoLonNhat;
return 0;

6
}

Biến i dùng để duyệt các phần tử của mảng, i biểu thị chỉ số của mảng. Giá trị khởi tạo
của i=0, điều kiện lặp i<10, bước lặp là 1. Chương trình gồm 1 biến dùng để lưu số lớn
nhất, so sánh biến này lần lượt với các phần tử của mảng. Nếu phần tử mảng lớn hơn số
lớn nhất hiện tại thì gán phần tử đó cho số lớn nhất. Sau khi kết thúc vòng lặp thì in ra số
lớn nhất và vị trí tương ứng.

 To-Do 4: Chỉnh sửa lại chương trình để tìm số nhỏ nhất trong mảng. Biên dịch và
chụp hình kết quả vào Class Notebook

2. Tính tổng các giá trị

Tính tổng các giá trị (0, 0.1, 0.2, 0.3, …, 499.8, 499.9, 500.0)

#include <iostream>
#include <iomanip>
using namespace std;

int main()
{
float sum = 0;
for(float k = 0.0; k <= 500.0; k = k + 0.1 )
{
sum += k;
}
cout <<fixed <<setprecision(2)<< "Tổng bằng = " << sum << endl;
}

IV. Phần chuẩn bị cho tiết học Online

 To-Do 5:

Cho một hình trụ có bán kính ra và chiều cao h

7
Diện toàn phần của của hình trụ được tính bằng công thức

Stp =S xq +2 S đáy

Trong đó

Stp : diện tích toàn phần của hình trụ

S xq: diện tích xung quanh của hình trụ

S xq=2 πrh

Sđáy : diện tích đáy của hình trụ

2
Sđáy =π r

V
Biết h= 2 . V là thể tích của hình trụ. Hãy tìm công thức liên hệ giữa diện tích toàn
πr
phần với thể tích và bán kính đáy (Công thức không chứa đường cao)

V. Bài tập

Bài 1.

8
Nhập số tự nhiên n rồi tính tổng:
S = 1 + 1/2 + 1/3 + 1/4 +... 1/n ( n > 0)
Bài 2.

E. coli là vi khuẩn đường ruột gây tiêu chảy, đau bụng dữ dội. Cứ sau 20 phút thì
số lượng vi khuẩn E. coli tăng gấp đôi. Ban đầu, chỉ có 40 vi khuẩn E. coli trong đường
ruột. Hỏi sau bao lâu, số lượng vi khuẩn E. coli là 671088640 con?

Bài 3.

Huyện A có 100 000 người. Với mức tăng dân số bình quân 1,5% năm thì sau n
năm dân số sẽ vượt lên 130 000 người. Hỏi n nhỏ nhất là bao nhiêu?

Bài 4.

Một công ty nước giải khát muốn sản xuất ra những lon nước ngọt bằng nhôm
hình trụ có thể tích 330 ml. Chi phí cho vật liệu làm nhôm ảnh hưởng đến lợi nhuận. Với
vai trò người cố vấn cho công ty, em hãy tìm kích thước của lon nước ngọt (bán kính đáy
và chiều cao) để vật liệu làm lon đạt chi phí thấp nhất. (Giả sử lon nước ngọt là hình trụ
lý tưởng, độ mỏng của vật liệu là như nhau)

Biết:
V 2
Stp =S xq +2. S day =2 +2 π R
R

Chiều cao của hình trụ:

V
h= 2
πR

π=3.14

You might also like