Bài Thực hành lập trình giải bài toán trên máy tính trang 117 SGK Tin Học lớp 10 – Cánh Diều, mời các em tham khảo cùng Bumbii.
Chủ đề F. Giải quyết vấn đề với sự trợ giúp của máy tính. Bài 17F. Thực hành lập trình giải bài toán trên máy tính.
Bài 1. Cứu nạn
Em hãy mô tả thuật toán cho bài toán Cứu nạn sau đây bằng cách liệt kê các bước hoặc dùng sơ đồ khối.
Bài toán Cứu nạn
Một tàu đánh cá có ngư dân bị tai nạn cần cấp cứu đã gọi điện về cơ sở y tế ở đảo gần nhất cách đó d (hải lí). Để người bị tai nạn được sơ cứu sớm hơn, tàu đánh cá đổi hướng, đi thẳng về phía đảo với vận tốc v1 (hải lí/giờ), đồng thời từ đảo người ta cũng cho một tàu cứu nạn có thiết bị y tế sơ cứu đi theo đường đó tới hướng tàu cá với vận tốc v2 (hải lí/giờ). Em hãy xác định sau bao lâu hai tàu gặp nhau, khi biết dữ liệu d, v1, v2.
Gợi ý: Vì mỗi giờ, khoảng cách giữa hai tàu giảm đi (v1 + v2) hải lí, vì vậy để hai tàu gặp nhau sẽ cần giờ.
Hướng dẫn:
Thuật toán:
Bước 1. Nhập vào d, v1, v2.
Bước 2. Tính t = d/(v1+v2).
Bước 3. In ra t.
Chương trình:
d = float(input())
v1 = float(input())
v2 = float(input())
t = d/(v1+v2)
print(t)
Bài 2. Dữ trữ vacxin
Với bài toán Dự trữ vacin sau đây, hãy thực hiện từng bước theo hướng dẫn để có chương trình giải quyết được bài toán này.
Hướng dẫn:
Bước 1. Tìm thuật toán và cách tổ chức dữ liệu (kết quả là mô tả thuật toán bằng liệt kê các bước hoặc sơ đồ khối, dự kiến chọn kiểu dữ liệu cho các biến).
Bước 2. Viết chương trình và chạy thử với một vài bộ dữ liệu tự tạo để kiểm thử chương trình.
Bài toán Dự trữ vacxin
Để sẵn sàng triển khai tiêm vacxin cho địa phương có nguy cơ bùng dịch cao, người ta cần dự trữ không ít hơn n liều vacxin. Hiện nay trong kho đang có m liều vacxin. Trong nước có hai cơ sở A và B sản xuất vacxin. Nếu làm việc hết công suất cơ sở A mỗi ngày sản xuất được pa liều, còn cơ sở B sản xuất được pb liều. Em hãy xác định sớm nhất sau bao nhiêu ngày sẽ có đủ n liều vacxin.
Dữ liệu: Đưa vào từ thiết bị vào chuẩn của hệ thống, dòng đầu tiên chứa 2 số nguyên n và m (0 ≤ n, m ≤ 108), dòng thứ hai chứa 2 số nguyên pa và pb (0 ≤ pa, pb ≤ 105).
Kết quả: Đưa ra từ thiết bị ra chuẩn của hệ thống một số nguyên là số ngày sớm nhất có đủ vacxin dự trữ theo kế hoạch.
Ví dụ:
Input | Output |
200 50 20 35 | 3 |
Gợi ý: Sau mỗi ngày thì số vacin đã có tăng lên (pa + pb) liều, điều này lặp lại cho đến khi số liều vacxin đã có không nhỏ hơn n.
Hướng dẫn:
Xác định bài toán
Input: Các dữ liệu
– Số liều đã có m (0 ≤ m ≤ 108).
– Số liều đã có n (0 ≤ n ≤ 108).
– Năng suất một ngày: cơ sở A sản xuất pa, cơ sở B sản xuất pb liều vacxin, (0 ≤ pa, pb ≤ 105).
Output: Số ngày để sản xuất đủ vacxin: k ngày.
Thuật toán
Ta xét một thuật toán đơn giản: Mô phỏng đúng quá trình sản xuất, sau mỗi ngày thì số liều đã có tăng lên (pa + pb) và lặp đi lặp lại cho tới khi đủ số liền cần có.
Bước 1. Nhập vào n, m, pa, pb.
Bước 2. k = 0.
Bước 3. While m < n: # chừng nào chưa đủ số liều.
Bước 4. k += 1 # thêm một ngày.
Bước 5. m += pa + pb # số liều được thêm pa + pb sau một ngày.
Bước 6. In ra k # in ra số ngày.
Chương trình:
n, m = map(int, input().split())
pa, pb = map(int, input().split())
k = 0
while m < n: #chừng nào chưa đủ số liều
k += 1 #thêm một ngày
m += pa + pb #số liều được thêm pa + pb sau một ngày
print(k) #in ra số ngày
Kiểm thử
Xây dựng bộ test:
Dữ liệu | Kết quả thực hiện | Ý đồ test |
200 50 20 35 | 3 | Bộ test 1: Test ví dụ đề bài |
200 50 4 6 | 15 | Bộ test 2: Sản xuất thêm 15 ngày, không thừa liều nào |
201 50 4 6 | 16 | Bộ test 3: Sản xuất thêm 16 ngày, thừa ra 9 liều |
1000 1000 1 2 | 0 | Bộ test 4: Số liều đã đủ, không cần sản xuất thê, |
100000000 0 1 1 | 50 000 000 | Bộ test 5: Cần sản xuất thêm rất nhiều ngày |
12 16 1 2 | 0 | Bộ test 6: Số liều đã thừa, không cần sản xuất thêm |
12 16 0 0 | 0 | Bộ test 7: Không cần sản xuất thêm, pa = pb = 0 |
16 12 0 0 | -1 | Bộ test 8: Không thể sản xuất đủ |
100000000 0 100000 100000 | 500 | Bộ test 9: Dữ liệu max |
Kết quả thực hiện:
Test | Kết quả mong muốn | Kết quả thực hiện | Tình trạng |
1 | 3 | 3 | OK |
2 | 15 | 15 | OK |
3 | 16 | 16 | OK |
4 | 0 | 0 | OK |
5 | 50 000 000 | 50 000 000 | Chạy rất chậm |
6 | 0 | 0 | OK |
7 | 0 | 0 | OK |
8 | -1 | Lặp vô hạn | |
9 | 500 | 500 | OK |
VẬN DỤNG
Các bức ảnh
Trong một hoạt động ngoại khoá của lớp, giáo viên chủ nhệm đã chụp được n bức ảnh, các bức ảnh được lưu trên máy tính có kích thước tương ứng là d1, d2,…, dn (đơn vị Kb).
Giáo viên dự định ghi một số đĩa CD làm phần thưởng cho học sinh. Đĩa CD mà giáo viên dùng chỉ có thể ghi tối đa W (đơn vị Kb). Vì tất cả các bức ảnh đều rất đẹp và thú vị nên giáo viên muốn lựa chọn các bức ảnh để ghi vào đĩa CD với tiêu chí càng nhiều bức ảnh được ghi vào đĩa CD càng tốt. Giáo viên băn khoăn và muốn biết số lượng tối đa các bức ảnh có thể ghi vào đĩa CD là bao nhiêu.
Em hãy chỉ ra kết quả từng bước thực hiện để có được chương trình nhận dữ liệu vào là các số nguyên W, d1, d2,…, dn và trả về số lượng tối đa các bức ảnh có thể ghi vào đĩa CD.
Hướng dẫn:
Tham khảo chương trình sau:
#Thuật toán:Nhận thấy để copy được nhiều file nhất, cần sắp xếp các file tăng dần theo kích thước
w = int(input())
d = [int(i) for i input().split()]
d.sort()
s = 0
for i in range(len(d)):
if w >= d[i]:
w = w - d[i]
s = s + 1
print(s)
Xem thêm các bài khác tại Giải bài tập sách giáo khoa Tin học Lớp 10 – Cánh Diều
Thông tin liên hệ & mạng xã hội:
Website: https://bumbii.com/
Facebook: https://www.facebook.com/bumbiiapp
Pinterest: https://www.pinterest.com/bumbiitech
Không bao giờ từ bỏ hy vọng. Cố gắng mỗi ngày.