Giải bài tập 31.2 trang 63 SBT Tin học 10 Kết nối tri thức
Bài toán sắp xếp: Cho trước một dãy số A, viết chương trình sắp xếp dãy số này theo thứ tự tăng dần.
Giả sử chúng ta sẽ áp dụng thuật toán sắp xếp chèn để cài đặt cho chương trình này. Ý tưởng của thuật toán này như sau: Sẽ duyệt từng phần tử của dãy A, tính từ vị trí thứ 2 trở đi. Với mỗi phần tử (giả sử A[k]), sẽ tìm cách chèn phần tử này vào đúng vị trí của dãy con phía trước A[0], A[1], ..., A[k-1 ] sao cho dãy con này được sắp xếp đúng. Sau khi duyệt xong các phần tử của dãy thì dãy gốc đã được sắp xếp xong.
Với mỗi phần tử A[k], việc chèn vào vị trí đúng trong dãy con phía trước được thực hiện bằng một vòng lặp như sau:
j = k - 1
while j > 0 and A[j] > A[j+1]:
A[j], A[j + 1] = A[j+l],A[j]
j = j - 1
Để tìm lỗi chương trình trên chúng ta áp dụng công cụ printline, in các giá trị trung gian. Với mỗi vòng lặp chính (vòng lặp for k in range(1,n)), chúng ta sẽ in ra các giá trị sau: k, A[k] và kết quả dãy A.
Chương trình được viết như sau, sau khi bổ sung các lệnh in phần tử trung gian.
Em hãy viết lại chương trình trên và tiến hành kiểm thử xem chương trình có lỗi không? Nếu có thì tìm ra lỗi và sửa lại cho chương trình chạy đúng.
Hướng dẫn giải chi tiết bài tập 31.2
Phương pháp giải:
Dựa vào kiến thức đã học để viết chương trình
Lời giải chi tiết:
Kết quả chạy chương trình có thể như sau:
Dãy gốc: [5, 1, 8, 4, 2]
vòng 1 số đang xét: 1 [5, 1, 8, 4, 2]
vòng 2 số đang xét: 8 [5, 1, 8, 4, 2]
vòng 3 số đang xét: 4 [5, 1, 4, 8, 2]
vòng 4 số đang xét: 2 [5, 1, 2, 4, 8]
Dãy đích: [5, 1, 2, 4, 8]
Nhận xét: tại mỗi vòng lặp, các giá trị A[k] cũng đã được di chuyển để được chèn vào một vị trí trong dãy con A[0], A[1],..., A[k-1 ], tuy nhiên vị trí A[0] không bị thay đổi. Từ đó chúng ta tìm ra lỗi của chương trình tại vị trí lệnh while:
while j > 0 and A[j] > A[j +1] :
Cần sửa lại như sau:
while j >= 0 and A[j] > A[j + 1] :
Chương trình đã tìm ra lỗi nhờ công cụ kiểm thử printline. Chương trình chính thức sau khi sửa như sau.
-- Mod Tin Học 10 HỌC247
Chưa có câu hỏi nào. Em hãy trở thành người đầu tiên đặt câu hỏi.
Bài tập SGK khác
Vận dụng trang 152 SGK Tin học 10 Kết nối tri thức - KNTT
Giải bài tập 31.1 trang 63 SBT Tin học 10 Kết nối tri thức - KNTT
Giải bài tập 31.3 trang 64 SBT Tin học 10 Kết nối tri thức - KNTT
Giải bài tập 31.4 trang 64 SBT Tin học 10 Kết nối tri thức - KNTT
Giải bài tập 31.5 trang 65 SBT Tin học 10 Kết nối tri thức - KNTT
Giải bài tập 31.6 trang 65 SBT Tin học 10 Kết nối tri thức - KNTT
Giải bài tập 31.7 trang 65 SBT Tin học 10 Kết nối tri thức - KNTT
Giải bài tập 31.8 trang 65 SBT Tin học 10 Kết nối tri thức - KNTT
Giải bài tập 31.9 trang 65 SBT Tin học 10 Kết nối tri thức - KNTT
Giải bài tập 31.10 trang 65 SBT Tin học 10 Kết nối tri thức - KNTT