Bài 11. Thực hành thiết kế và lập trình theo mô đun

Chủ đề Fcs : Giải quyết vấn đề với sự trợ giúp của máy tính – Kĩ thuật lập trình – Bài 11. Thực hành thiết kế và lập trình theo mô đun – sách giáo khoa trang 135 lớp 11 Khoa học máy tính – Cánh Diều, mời các em tham khảo cùng Bumbii.

Chủ đề Fcs : Giải quyết vấn đề với sự trợ giúp của máy tính – Bài 11, 12. Thực hành thiết kế và lập trình theo mô đun

Nhiệm vụ 2

Đọc dữ liệu từ tập và tổ chức dữ liệu trong chương trình.

Yêu cầu:

Viết chương trình thực hiện hàm nhapTuTep và chạy thử kiểm tra.

Hướng dẫn thực hiện:

– Tạo tệp dữ liệu đầu vào: Một cách đơn giản là cắt dán cả khối ô cần thiết từ cửa sổ phần mềm bảng tính điện tử vào tệp đang soạn thảo trong IDE của Python. Lưu thành tệp có đuôi tên “txt”. Để tiện trình bày, ta đặt tên tệp đầu vào, ví dụ là “bangDiem.txt”. Bổ sung thêm vào dòng đầu tiên của tệp hai số nguyên dương n, msố học sinh số môn học.

– Mở tệp ở chế độ “đọc”.

– Viết các câu lệnh đọc dữ liệu từ tệp: kế thừa, sử dụng các câu lệnh đã viết trong các bài thực hành về cấu trúc mảng một và hai chiều. Kết quả đầu ra:

+ Danh sách tenHS: từ cột Tên của bangDiem.

+ Danh sách tenMon: từ hàng tên cột của bangDiem.

+ Mảng hai chiều n × m, mỗi hàng là dãy điểm của một học sinh.

– Đóng tệp sau khi đọc xong.

Tham khảo đoạn chương trình sau:

def nhapTuTep():
    fi = open("../bangDiem.txt", encoding='utf-8')
    dong = fi.readline().split() #đọc dòng thứ nhất
    n = int (dong[0])
    m = int (dong[1])
    dong = fi.readline().split() #đọc dòng thứ hai có các tên môn học
    for i in range(1, m+1):
        tenMon.append(dong[i])
    for i in range(n):           # đọc n dòng tiếp theo
        dong = fi.readline().split()
        ten = dong.pop(0)        # lấy tên HSS
        tenHS.append(ten)        # đưa vào danh sách tenHS
        diem = [float(d) for d in dong]
        a.append(diem)           # nối phần còn lại là điểm của HS 
                                 # thành một hành của a
    fi.close()
    return (n, m)

Ở bên ngoài hàm nhapTuTep có câu lệnh khai báo danh sách a = [] là biến toàn cục dùng làm mảng hai chiều. Hàm chỉ trả về kết quả là hai số n, m kích thước hai chiều của mảng. Mỗi hàng của mảng a là kết quả học tập của một HS.

Nhiệm vụ 3

Tách riêng kết quả học tập từng môn học.

Yêu cầu:

Viết chương trình thực hiện hàm tachMon và chạy thử kiểm tra.

Hướng dẫn thực hiện:

Đầu vào của hàm này là kết quả thực hiện nhapTuTep, gồm có danh sách tenHS (các tên học sinh), danh sách tenMon (các tên môn học) và mảng hai chiều n × m.

– Đọc từng cột của mảng hai chiều để có dãy số các điểm mỗi môn học.

– Ghép tương ứng mỗi tên học sinh từ danh sách tenHS với mỗi điểm môn học sẽ thành danh sách các cặp (tên, điểm) cho môn học đó.

– Trả về tên danh sách dãy điểm số môn học và tên danh sách các cặp (tên, điểm).

Tham khảo đoạn chương trình sau:

def tachMon(ds, chiso):     #ds: mảng hai chiều các điểm môn học
    ten = tenMon[chiso]     # chisp: môn học thứ k
    kq1, kq2 = [], []       # kq1: danh sách điểm môn học
                            # kq2: danh sách các cặp (tên HS, điểm)
    for i in range(soHS):
        kq1.append(ds[i][chiso])    # nối thêm điểm của HS thứ i
        kq2.append([tenHS[i], ds[i][chiso]])    # nối thêm tên của HS
                                                # thứ i và điểm tương ứng
    return (ten, kq1, kq2)

Nhiệm vụ 4

Sắp xếp kết quả một môn học theo thứ tự giảm dần.

Yêu cầu:

Cải biên một hàm thực hiện thuật toán sắp xếp nào đó, ví dụ sắp xếp nhanh quickSort thành hàm quickSort_tuple_down để sắp xếp một danh sách các cặp (tên, điểm) theo thứ tự điểm giảm dần.

Hướng dẫn thực hiện:

– Cải biên hàm phandoanLomuto thành hàm phandoanLomuto_tuple để sắp các cặp (Tên, điểm môn học) theo thành phần điểm môn học.

– Trong him phandoanLomuto_tuple đảo chiều phép so sánh trong câu lệnh if từ “<=” thành “>=” để sắp thứ tự giảm dần, đặt tên hàm mới là phandoanLomuto_tuple_down.

– Dùng hàm phandoanLomuto_tuple_down để cải biên quickSort thành hàm quickSort_tuple_down.

Tham khảo đoạn chương trình sau:

Kế thừa từ Bài 9:

def phandoanLomuto_tuple_down(a, lo, hi):
    i = (lo - 1)
    pivot = a[hi][1]            # thành ohaanf 1 là điểm môn học
    for j in range (lo, hi):    
        if a[j][1] >= pivot:    # giảm dần theo điểm môn học
            i = i + 1
            a[i], a[j] = a[j], a[i]
    a[i+1], a[hi] = a[hi], a[i+1]
    return (i+1)

def quickSort_tuple_down(a, lo, hi):
    if len(a) == 1:
        return a
    if lo < hi:
        p = phandoanLomuto_tuple_down(a, lo, hi)
        quickSort_tuple_down(a, lo, p-1)
        quickSort_tuple_down(a, p+1, hi)

Cải biên thuật toán sắp xếp khác, ví dụ thuật toán sắp xếp chèn:

def sxChen_tuple_down(a):   # chèn tuyến tính, a là ds các bộ
    n = len(a)
    for i in range(1, n):
        val = a[i][1]
        dsCon = a[i]
        j = i
        i = i + 1
        # dịch dần từng bước, tìm vị tris để chèn
        while(j>0) and (a[j-1][1] > val):
            a[j] = a[j - 1]
            j = j - 1
        a[j] = dsCon

Xem các bài giải khác: Giải Bài Tập Sách Giáo Khoa Tin Học Lớp 11 Khoa Học Máy Tính – 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