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 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ụ:

InputOutput
200 50 20 353

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ệuKết quả thực hiệnÝ đồ test
200         50
20           35
3Bộ test 1: Test ví dụ đề bài
200         50
4             6
15Bộ test 2: Sản xuất thêm 15 ngày, không thừa liều nào
201         50
4             6
16Bộ test 3: Sản xuất thêm 16 ngày, thừa ra 9 liều
1000         1000
1               2
0Bộ test 4: Số liều đã đủ, không cần sản xuất thê,
100000000         0
1                         1
50 000 000Bộ test 5: Cần sản xuất thêm rất nhiều ngày
12          16
1             2
0Bộ test 6: Số liều đã thừa, không cần sản xuất thêm
12          16
0             0
0Bộ test 7: Không cần sản xuất thêm, pa = pb = 0
16          12
0            0
-1Bộ test 8: Không thể sản xuất đủ
100000000       0
100000             100000
500Bộ test 9: Dữ liệu max

Kết quả thực hiện:

TestKết quả mong muốnKết quả thực hiệnTình trạng
133OK
21515OK
31616OK
400OK
550 000 00050 000 000Chạy rất chậm
600OK
700OK
8-1 Lặp vô hạn
9500500OK

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

0 0 đánh giá
Article Rating
Theo dõi
Thông báo của
guest

0 Bình luận
Phản hồi nội tuyến
Xem tất cả bình luận
0
Cùng chia sẻ bình luận của bạn nào!x