Giải bài 29: Thực hành thiết kế chương trình theo modun | Tin học 11 Kết nối tri thức

Xin gửi tới bạn đọc bài viết Tin học 11 Kết nối tri thức bài 29: Thực hành thiết kế chương trình theo modun. Mời các bạn cùng tham khảo để có thêm tài liệu giải SGK Tin học 11 Kết nối tri thức nhé.

Tin học 11 Kết nối tri thức bài 29
1. Luyện tập
Câu hỏi 1. Hãy chỉnh sửa lại chương trình trên nêu bổ sung thêm điều kiện sau vào
nhiệm vụ:
Trong tệp kết quả đầu ra, thứ tự các vận động viên được ghi theo thứ tự giảm dần
của điểm đánh giá.
Bài làm
def nhapDL(finp):
f = open(finp)
A = []
B = []
for line in f:
s = line.split()
A.append(s[0])
temp = s[1:len(s)]
temp = [float(x) for x in temp]
B.append(temp)
f.close()
return A, B
def diem_gk(d):
diem = sum(d) + d[0] + d[len(d) - 1]
diem = diem / (len(d) + 2)
return round(diem, 2)
def xuly(B):
kq = []
for i in range(len(B)):
diem = diem_gk(B[i])
kq.append(diem)
return kq
def ghiDL(fout, A, B):
f = open(fout, "w")
A, B = zip(*sorted(zip(A, B), key=lambda x: x[1], reverse=True))
for i in range(len(A)):
print(A[i], B[i], file=f)
f.close()
finp = "seagames.inp"
fout = "ketqua.out"
DS, Diem = nhapDL(finp)
Kq = xuly(Diem)
ghiDL(fout, DS, Kq)
Câu hỏi 2. Trong nhiệm vụ trên, nếu công thức tính điểm tổng hợp của Sea Games
thay đổi thì chúng ta có phải sửa lại toàn bộ chương trình hay không? Nếu cần thì
chỉ phải sửa mo đun nào? Hàm nào?
Bài làm
Nếu công thức tính điểm tổng hợp của Sea Games thay đổi, thì chỉ cần sửa lại hàm
diem_gk(d) trong chương trình trên. Hàm diem_gk(d) là hàm tính điểm tổng hợp
dựa trên công thức hiện tại đã được định nghĩa trong đoạn mã.
Nếu công thức tính điểm tổng hợp thay đổi, bạn chỉ cần thay đổi logic tính toán
trong hàm diem_gk(d) để phản ánh công thức mới. Các phần khác của chương trình
không thay đổi, vì chúng sử dụng hàm diem_gk(d) để tính điểm tổng hợp, do đó khi
hàm này được sửa, kết quả đầu ra cũng sẽ được cập nhật theo công thức mới.
3. Vận dụng
Thiết lập chương trình thiết kế theo mô đun cho các bài toán sau:
Câu hỏi 1. Cho trước số tự nhiên n, cần in ra trên màn hình dãy n số nguyên tố đầu
tiên. Ví dụ nếu n = 5 thì dãy cần in ra sẽ là 2, 3, 5, 7, 11.
Bài làm
def is_prime(num):
"""Kiểm tra xem một số có phải là số nguyên tố hay không."""
if num <= 1:
return False
for i in range(2, int(num**0.5) + 1):
if num % i == 0:
return False
return True
def print_prime_numbers(n):
"""In ra n số nguyên tố đầu tiên."""
count = 0
num = 2
while count < n:
if is_prime(num):
print(num)
count += 1
num += 1
# Số nguyên n cần in ra dãy số nguyên tố đầu tiên
n = int(input())
# Gọi hàm in ra dãy số nguyên tố
print_prime_numbers(n)
Câu hỏi 2. Trong một kì thi Tin học trẻ, mỗi học sinh sẽ phải làm 3 bài thi. Với mỗi
bài, nêu học sinh làm sẽ được ban giám khảo chấm và cho điểm, nếu không làm thì
sẽ không tính điểm. Sau khi thi, dữ liệu điểm thi của học sinh sẽ được lưu trong một
tệp văn bản và gửi về ban tổ chức. Mẫu một tệp điểm thi có dạng sau:
Quy định ghi trong tệp trên như sau:
- Mỗi dòng sẽ bắt đầu bằng số báo danh của thí sinh, tiếp theo là ba giá trị điểm
tương ứng với ba bài thì.
- Điểm thi sẽ là một số tự nhiên từ 0 đến 20.
- Nếu học sinh không làm thì bài đó ghi -1.
Em có nhiệm vụ tính toán tổng só điểm thi của các bạn học sinh và đưa dữ liệu ra
tệp ketqua.out là danh sách ba bạn có tổng điểm cao nhất được sắp xếp giảm dần từ
trên xuống đưới. Khuôn dạng dữ liệu đưa ra bao gồm: số báo danh, các điểm thi
từng bài và cuối cùng là tổng điểm cả ba bài.
Ví dụ với dữ liệu trên thì kết quả như sau:
Bài làm
# Đọc dữ liệu từ tệp điểm thi
with open("diemthi.inp", "r") as file:
data = file.readlines()
# Tạo danh sách lưu thông tin điểm thi của các thí sinh
scores = []
for line in data:
line = line.strip().split()# Tách dữ liệu trên mỗi dòng thành các từ
sbd = line[0]# Lấy số báo danh của thí sinh
diem1 = int(line[1])# Lấy điểm bài 1
diem2 = int(line[2])# Lấy điểm bài 2
diem3 = int(line[3])# Lấy điểm bài 3
tong_diem = diem1 + diem2 + diem3# Tính tổng điểm
scores.append((sbd, diem1, diem2, diem3, tong_diem))# Thêm thông tin vào
danh sách
# Sắp xếp danh sách giảm dần theo tổng điểm
scores.sort(key=lambda x: x[4], reverse=True)
# Ghi kết quả vào tệp ketqua.out
with open("ketqua.out", "w") as file:
for score in scores:
sbd = score[0]
diem1 = score[1]
diem2 = score[2]
diem3 = score[3]
tong_diem = score[4]
file.write(f"{sbd}\t{diem1}\t{diem2}\t{diem3}\t{tong_diem}\n")
| 1/4

Preview text:

Tin học 11 Kết nối tri thức bài 29 1. Luyện tập
Câu hỏi 1. Hãy chỉnh sửa lại chương trình trên nêu bổ sung thêm điều kiện sau vào nhiệm vụ:
Trong tệp kết quả đầu ra, thứ tự các vận động viên được ghi theo thứ tự giảm dần của điểm đánh giá. Bài làm def nhapDL(finp): f = open(finp) A = [] B = [] for line in f: s = line.split() A.append(s[0]) temp = s[1:len(s)]
temp = [float(x) for x in temp] B.append(temp) f.close() return A, B def diem_gk(d):
diem = sum(d) + d[0] + d[len(d) - 1] diem = diem / (len(d) + 2) return round(diem, 2) def xuly(B): kq = [] for i in range(len(B)): diem = diem_gk(B[i]) kq.append(diem) return kq def ghiDL(fout, A, B): f = open(fout, "w")
A, B = zip(*sorted(zip(A, B), key=lambda x: x[1], reverse=True)) for i in range(len(A)): print(A[i], B[i], file=f) f.close() finp = "seagames.inp" fout = "ketqua.out" DS, Diem = nhapDL(finp) Kq = xuly(Diem) ghiDL(fout, DS, Kq)
Câu hỏi 2. Trong nhiệm vụ trên, nếu công thức tính điểm tổng hợp của Sea Games
thay đổi thì chúng ta có phải sửa lại toàn bộ chương trình hay không? Nếu cần thì
chỉ phải sửa mo đun nào? Hàm nào? Bài làm
Nếu công thức tính điểm tổng hợp của Sea Games thay đổi, thì chỉ cần sửa lại hàm
diem_gk(d) trong chương trình trên. Hàm diem_gk(d) là hàm tính điểm tổng hợp
dựa trên công thức hiện tại đã được định nghĩa trong đoạn mã.
Nếu công thức tính điểm tổng hợp thay đổi, bạn chỉ cần thay đổi logic tính toán
trong hàm diem_gk(d) để phản ánh công thức mới. Các phần khác của chương trình
không thay đổi, vì chúng sử dụng hàm diem_gk(d) để tính điểm tổng hợp, do đó khi
hàm này được sửa, kết quả đầu ra cũng sẽ được cập nhật theo công thức mới. 3. Vận dụng
Thiết lập chương trình thiết kế theo mô đun cho các bài toán sau:
Câu hỏi 1. Cho trước số tự nhiên n, cần in ra trên màn hình dãy n số nguyên tố đầu
tiên. Ví dụ nếu n = 5 thì dãy cần in ra sẽ là 2, 3, 5, 7, 11. Bài làm def is_prime(num):
"""Kiểm tra xem một số có phải là số nguyên tố hay không.""" if num <= 1: return False
for i in range(2, int(num**0.5) + 1): if num % i == 0: return False return True def print_prime_numbers(n):
"""In ra n số nguyên tố đầu tiên.""" count = 0 num = 2 while count < n: if is_prime(num): print(num) count += 1 num += 1
# Số nguyên n cần in ra dãy số nguyên tố đầu tiên n = int(input())
# Gọi hàm in ra dãy số nguyên tố print_prime_numbers(n)
Câu hỏi 2. Trong một kì thi Tin học trẻ, mỗi học sinh sẽ phải làm 3 bài thi. Với mỗi
bài, nêu học sinh làm sẽ được ban giám khảo chấm và cho điểm, nếu không làm thì
sẽ không tính điểm. Sau khi thi, dữ liệu điểm thi của học sinh sẽ được lưu trong một
tệp văn bản và gửi về ban tổ chức. Mẫu một tệp điểm thi có dạng sau:
Quy định ghi trong tệp trên như sau:
- Mỗi dòng sẽ bắt đầu bằng số báo danh của thí sinh, tiếp theo là ba giá trị điểm
tương ứng với ba bài thì.
- Điểm thi sẽ là một số tự nhiên từ 0 đến 20.
- Nếu học sinh không làm thì bài đó ghi -1.
Em có nhiệm vụ tính toán tổng só điểm thi của các bạn học sinh và đưa dữ liệu ra
tệp ketqua.out là danh sách ba bạn có tổng điểm cao nhất được sắp xếp giảm dần từ
trên xuống đưới. Khuôn dạng dữ liệu đưa ra bao gồm: số báo danh, các điểm thi
từng bài và cuối cùng là tổng điểm cả ba bài.
Ví dụ với dữ liệu trên thì kết quả như sau: Bài làm
# Đọc dữ liệu từ tệp điểm thi
with open("diemthi.inp", "r") as file: data = file.readlines()
# Tạo danh sách lưu thông tin điểm thi của các thí sinh scores = [] for line in data:
line = line.strip().split()# Tách dữ liệu trên mỗi dòng thành các từ
sbd = line[0]# Lấy số báo danh của thí sinh
diem1 = int(line[1])# Lấy điểm bài 1
diem2 = int(line[2])# Lấy điểm bài 2
diem3 = int(line[3])# Lấy điểm bài 3
tong_diem = diem1 + diem2 + diem3# Tính tổng điểm
scores.append((sbd, diem1, diem2, diem3, tong_diem))# Thêm thông tin vào danh sách
# Sắp xếp danh sách giảm dần theo tổng điểm
scores.sort(key=lambda x: x[4], reverse=True)
# Ghi kết quả vào tệp ketqua.out
with open("ketqua.out", "w") as file: for score in scores: sbd = score[0] diem1 = score[1] diem2 = score[2] diem3 = score[3] tong_diem = score[4]
file.write(f"{sbd}\t{diem1}\t{diem2}\t{diem3}\t{tong_diem}\n")
Document Outline

  • 1. Luyện tập
  • 3. Vận dụng