Thực hành vòng lặp for - Phần 2¶
Tóm lược nội dung
Bài này hướng dẫn một số bài toán có áp dụng vòng lặp for:
- In ra bảng cửu chương.
- In ra dãy số cấp số cộng.
- Giải bài toán cổ.
- Đoán nghiệm của phương trình bậc 3.
- Tính dân số.
Bài 1¶
Đề bài¶
Yêu cầu:
Viết chương trình in ra bảng cửu chương \(n\).
Đầu vào:
Số nguyên dương n.
Đầu ra:
\(n \times 1 = \cdots\)
\(n \times 2 = \cdots\)
\(n \times 3 = \cdots\)
\(\cdots\)
\(n \times 10 = \cdots\)
Cách giải đề xuất¶
Ý tưởng chính
Thao tác được lặp nhiều lần là thao tác nhân.
Số lần lặp của thao tác nhân là 10, ứng với các hệ số từ 1 đến 10.
Viết chương trình
1. Viết hàm print_multiplication() dùng để in ra bảng cửu chương n.
Hàm gồm có một tham số đầu vào là n và không có giá trị trả về.
Hàm hoạt động như sau:
-
Dùng vòng lặp
for, choichạy từ1đến10. Ứng với mỗii:In ra phép nhân
ivớin.
:>dùng để căn phải 2 ký tự.
2. Viết chương trình chính:
- Cho người dùng nhập
n. - Gọi hàm
print_multiplication()ra thực hiện.
Lưu ý:
n trong hàm print_multiplication() là tham số, đóng vai trò biến cục bộ trong hàm đó. Còn n trong chương trình chính là biến toàn cục. Mặc dù trùng tên, hai biến này là khác nhau.
3. Chạy chương trình trên, nhập vô 9, kết quả như sau:
Bài 2¶
Đề bài¶
Yêu cầu:
Viết chương trình in ra một dãy số cấp số cộng (1) với số hạng đầu \(u_1\) và côn sai \(d\) cho trước.
-
Cấp số cộng là một dãy số mà trong đó, kể từ số hạng thứ hai, mỗi số hạng đều bằng số hạng đứng ngay trước nó cộng với một số không đổi \(d\). Nghĩa là:
\[u_n = u_{n - 1} + d, n \ge 2\]\(d\) được gọi là công sai của cấp số cộng.
Đầu vào:
u1vàd- Số lượng số hạng
n
Đầu ra:
Dãy số cấp số cộng.
Ví dụ:
| Đầu vào | Đầu ra |
|---|---|
| 19 3 5 |
22 25 28 31 34 |
Cách giải đề xuất¶
Ý tưởng chính
Thao tác được lặp nhiều lần là thao tác cộng với d.
Số lần lặp là n, ứng với n số hạng sẽ được in ra.
Viết chương trình
1. Viết hàm print_ap() (arithmethic progressive) dùng để in ra dãy số cấp số cộng.
Hàm gồm có:
-
Ba tham số đầu vào là:
- Số hạng đầu tiên
u - Công sai
d - Số lượng số hạng sẽ được in ra
n
- Số hạng đầu tiên
-
Giá trị trả về là tổng
s.
Hàm hoạt động như sau:
-
Dùng vòng lặp
for, choichạy từ0đếnn - 1. Ứng với mỗii:- Tính số hạng
utiếp theo. - In ra
u.
- Tính số hạng
2. Viết chương trình chính:
- Cho người dùng nhập
u,dvàn. - Gọi hàm
print_ap()ra thực hiện.
3. Chạy chương trình trên, nhập số hạng đầu là 100, công sai là 4, số lượng số hạng là 12, kết quả như sau:
Bài 3¶
Đề bài¶
Yêu cầu:
Viết chương trình giải bài toán cổ sau:
Vừa gà vừa chó
Bó lại cho tròn
Ba mươi sáu con
Một trăm chân chẵn.
Đầu vào:
Có thể xem là không có dữ liệu đầu vào.
Đầu ra:
Số gà và số chó.
Cách giải đề xuất¶
Ý tưởng chính
Dùng hai vòng lặp lồng nhau:
- Vòng lặp ngoài ứng với số gà
- Vòng lặp trong ứng với số chó
Ta tìm một cặp số (gà, chó) sao cho phù hợp với các biểu thức về số con và số chân.
Viết chương trình
1. Viết hàm solve() dùng để tìm số gà và số chó.
Hàm không có tham số. Giá trị trả về là một cặp số chicken và dog.
Hàm hoạt động như sau:
-
Dùng vòng lặp
for, cho biếnchickenchạy từ1đến36:Ứng với mỗi
chicken, dùng vòng lặpfor, cũng cho biếndogchạy từ1đến36:Nếu cặp giá trị nào của
chickenvàdogthoả cả hai biểu thức:- Tổng số con là
36 - Tổng số chân là
100
thì trả về cặp giá trị đó.
- Tổng số con là
2. Viết chương trình chính:
- Gọi hàm
solve()ra thực hiện, gán kết quả cho biếncvàd, ứng với số gà và số chó. - In ra
cvàd.
3. Chạy chương trình trên, kết quả như sau:
Bài 4¶
Đề bài¶
Yêu cầu:
Viết chương trình giải phương trình bậc 3: \(x^3 - 6x^2 - 367x + 3060 = 0\)
Biết rằng nghiệm đều là nghiệm nguyên.
Đầu vào:
Không có dữ liệu đầu vào vì phương trình đã xác định cụ thể.
Đầu ra:
Nghiệm.
Cách giải đề xuất¶
Ý tưởng chính
Nếu i nào đó là bội số của n thì đồng nghĩa là i chia hết cho n.
Như vậy, thao tác được lặp nhiều lần là: kiểm tra xem i % n có bằng 0 hay không, với i có giá trị từ a đến b.
Viết chương trình
1. Viết hàm solve() dùng in ra các nghiệm.
Hàm không có tham số và không có giá trị trả về.
Hàm hoạt động như sau:
-
Dùng vòng lặp
for, cho biếnxchạy từ-20đến20:Nếu giá trị nào của
xthoả phương trình thì in ra giá trị đó.
Lưu ý:
Ở đây ta đoán mò rằng nghiệm có thể nằm trong đoạn \([-20, 20]\).
2. Viết chương trình chính:
- Gọi hàm
solve()ra thực hiện.
3. Chạy chương trình trên, kết quả như sau:
Bài 5¶
Đề bài¶
Yêu cầu:
Viết chương trình cho người dùng nhập vào một năm, tính dân số Việt Nam vào năm đó.
Biết rằng dân số năm 2025 là khoảng 101,876,843 người và tỉ lệ tăng dân là 0.99%.
Đầu vào:
Năm dương lịch.
Đầu ra:
Dân số.
Ví dụ:
| Đầu vào | Đầu ra |
|---|---|
| 2050 | 130,327,116 |
Cách giải đề xuất¶
Ý tưởng chính
Nếu i nào đó là bội số của n thì đồng nghĩa là i chia hết cho n.
Như vậy, thao tác được lặp nhiều lần là: kiểm tra xem i % n có bằng 0 hay không, với i có giá trị từ a đến b.
Viết chương trình
1. Viết hàm population() dùng để tính dân số.
Hàm gồm có:
- Hai tham số là
rate,year. - Giá trị trả về là dân số
p.
Hàm hoạt động như sau:
- Gọi
plà biến lưu dân số. - Khởi tạo dân số năm 2025:
p = 101_876_843 -
Dùng vòng lặp
for, choichạy từ2025đếnyear:Tính dân số mới của năm
ivà cộng dồn vàpp.
- Ký tự
_là cách viết của Python giúp phân cách hàng nghìn cho dễ đọc.
2. Viết chương trình chính:
- Cho người dùng nhập tỉ lệ tăng dân
rvà nămy. -
Nếu
ytrước2025thì in ra dân số năm 2025.Ngược lại, nếu
ysau 2050 thì gọi hàmpopulation()ra thực hiện, gán kết quả cho biếnresult.In ra
result.
-
,dùng để phân tách hàng ngàn cho dễ đọc..0dùng để quy định không có chữ số thập phân nào.fdùng để định dạng số thựcfloat.
Lưu ý:
Khi nhập tỉ lệ tăng dân số, người dùng không cần nhập ký tự %. Bên trong hàm population() đã có phép chia cho 100.
3. Chạy chương trình trên, nhập vô 0.99 và2050, kết quả như sau:
Mã nguồn¶
Code đầy đủ được đặt tại: