Lý thuyết Tin học 11 Kết nối tri thức bài 26
Với nội dung bài Lý thuyết Tin học lớp 11 bài 26: Phương pháp làm mịn dần trong thiết kế chương trình hay, chi tiết sách Kết nối tri thức sẽ giúp học sinh nắm vững kiến thức trọng tâm, ôn luyện để học tốt Tin học 11.
Bài: Phương pháp làm mịn dần trong thiết kế chương trình
A. Lý thuyết Tin học 11 bài 26
1. Phương pháp thiết kế làm mịn dần
- Bài toán gốc: Cho trước dãy số A: A[0], A[ 1], ..., A[n-1]. Cần tiến hành sắp xếp dãy phải nhận được là trên theo thứ tự tăng dần. Kết quả phải nhận được: A[0] ≤ A[1] ≤ ... ≤ A[n-1]
- Ví dụ với bộ dữ liệu đầu vào là dãy [2, 1,7,10,4] thì kết quả thu được dãy [1,2,4,7,101. Quá trình phân tích, thiết kế được mô tả theo các bước sau.
a) Tìm hiểu bài toán
- Bài toán gốc là cho trước dãy A, cần sắp xếp lại dãy này theo thứ tự tăng dần.
b) Thiết kế chương trình giải bài toán
* Việc thiết kế chương trình giải bài toán được chia thành nhiều bước:
- Bước 1: Thiết lập ý tưởng thiết kế ban đầu.
+ Ý tưởng ban đầu của thuật toán là duyệt từ phần tử thứ hai đến phần tử cuối của dãy để sắp xếp dãy.
+ Sử dụng vòng lặp với biến i chạy từ chỉ số 1 đến n-1.
+ Thực hiện các thao tác để bổ sung A[i] vào dãy các phần tử đã được sắp xếp A[0], A[1]..., A[i-1].
- Bước 2: Thực hiện việc "Chèn A[i] vào đúng vị trí."
+ Lấy phần tử A[i] ra và chuyển các phần tử bên trái A[i] nhưng có giá trị lớn hơn A[i] sang phải.
+ Đặt A[i] vào vị trí trống.
- Bước 3: Nhấc A[i] lên bằng cách tạo biến value để lưu giá trị A[i].
- Bước 4: Chuyển các phần tử bên trái A[i] và lớn hơn A[i] sang phải.
+ Thiết lập biến j = i - 1 là chỉ số của phần tử ngay bên trái A[i].
+ Liên tục so sánh A[j] với value, nếu A[j] > value thì chuyển A[j] sang phải một vị trí bằng lệnh A[j+1] = A[j] và giảm j = j - 1.
+ Quá trình kết thúc khi đi hết bên trái của dãy hoặc A[j] <= value.
- Bước 5: Chèn A[i] vào đúng vị trí trống.
+ Vị trí j+1 là vị trí trống cần chèn.
+ Chèn phần tử A[i] (giá trị được lưu trong value) vào vị trí j+1 bằng câu lệnh A[j+1] = value.
- Quá trình thiết kế kết thúc sau khi chi tiết hoá bằng các câu lệnh tất cả các thao tác được mô tả trong các bước trên.
c) Chương trình hoàn chỉnh
Chương trình giải bài toán đặt ra được thiết kế hoàn chỉnh dưới dạng hàm InsertionSort(A). Tổng hợp các bước trên chúng ta có chương trình hoàn chỉnh như sau:
Quá trình thiết kế chương trình sắp xếp chèn đã trải qua nhiều bước, mỗi bước làm mịn dần các phân tích của bước trước đó.
2. Thiết kế chương trình bằng phương pháp làm mịn dần
- Bài toán: Cho trước dãy số A: A[0], A[ 1], ..., A[n-1]. Cặp phần tử A[i], A[j] được gọi là nghịch đảo nếu i < j nhưng A[i] > A[j]. Cần viết chương trình đếm số các cặp nghịch đảo của dãy A. Ví dụ dãy 3, 4, 2, 1 sẽ có 5 cặp nghịch đảo là (3,2), (3, 1), (4,2), (4,1), (2,1). Thiết kế theo phương pháp làm mịn dần
a) Tìm hiểu bài toán
Bài toán gốc là cho trước dãy số A có n phần tử, cần đếm số các cặp phần tử nghịch đảo của A.
b) Thiết kế chương trình giải bài toán
Chúng ta sẽ thiết kế lời giải bài toán theo phương pháp làm mịn dần.
- Bước 1: Thiết lập ý tưởng thiết kế ban đầu.
+ Bài toán đếm các cặp chỉ số nghịch đảo của dãy A.
+ Chương trình sẽ trả về số lượng các cặp số nghịch đảo.
+ Cần tìm tất cả các cặp chỉ số (i, j) có thể tạo cặp nghịch đảo A[i], A[j], sau đó kiểm tra xem cặp này có là nghịch đảo không.
- Bước 2: Tìm tất cả các cặp chỉ số (ij).
+ Thiết lập 2 vòng lặp theo i, j để tìm.
+ Tìm các chỉ số i chạy từ 0 đến n-2, chỉ số j chạy từ i+1 đến n-1 để tiết kiệm thời gian.
- Bước 3: Kiểm tra tính nghịch đảo của cặp (i)).
+ Cặp (i, j) sẽ là nghịch đảo khi A[i] > A[j].
+ Điều kiện i < j đã được đảm bảo tại bước 2.
c) Chương trình hoàn chỉnh
Trên cơ sở các phân tích trên chúng ta có thể thiết lập hàm Nghichdao(A) để đếm số các cặp nghịch đảo của dãy A cụ thể như sau:
B. Trắc nghiệm Tin học 11 bài 26
Câu 1: Mô tả thuật toán pha trà mời khách
+ B1: Tráng ấm, chén bằng nước sôi
+ B2: Rót nước sôi vào ấm và đợi khoảng 3 đến 4 phút.
+ B3: Cho trà vào ấm
+ B4: Rót trà ra chén để mời khách.
A. B1- B3-B4- B2
B. B1- B3- B2-B4
C. B2-B4-B1-B3
D. B3-B4-B1-B2
Câu 2: Hãy cho biết kết quả sau khi thực hiện thuật toán sau:
Bước 1. Tam←x;
Bước 2. x←y;
Bước 3. y← tam;
A. Giá trị của biến x bằng giá trị của biến y
B. Hoán đổi giá trị hai biến x và y
C. Giá trị của biến y bằng giá trị của biến x
D. Khác
Câu 3: Quá trình giải bài toán trên máy tính gồm mấy bước?
A. 2
B. 3
C. 4
D. 5
Câu 4: Thứ tự các bước giải bài toán trên máy tính:
A. Xác định bài toán → Viết chương trình → Mô tả thuật toán
B. Xác định bài toán → Mô tả thuật toán → Viết chương trình
C. Mô tả thuật toán → Xác định bài toán → Viết chương trình
D. Viết chương trình → Xác định bài toán → Mô tả thuật toán
Câu 5: Hãy xác định bài toán sau: "Tìm số lớn nhất trong dãy n số tự nhiên cho trước"?
A. INPUT: Dãy n số tự nhiên. OUTPUT: Số lớn nhất trong dãy n số.
B. INPUT: Dãy n số tự nhiên. OUTPUT: Số các số lớn nhất trong dãy n số.
C. INPUT: Số lớn nhất trong dãy n số. OUTPUT: Dãy n số tự nhiên.
D. INPUT: Số các số lớn nhất trong dãy n số. OUTPUT: Dãy n số tự nhiên.
Câu 6: Hãy chọn phát biểu Đúng:
A. Các bước giải bài toán trên máy tính là: Mô tả thuật toán → Xác định bài toán → Viết chương trình
B. Cần phải xác định bài toán trước khi giải bài toán trên máy tính
C. Máy tính có hiểu được chương trình viết bằng ngôn ngữ tự nhiên
D. Với mỗi bài toán cụ thể, phải lựa chọn ngôn ngữ lập trình phù hợp rồi mới xây dựng thuật toán giải bài toán đó
Câu 7: Xác định bài toán: “kiểm tra n có phải là số nguyên tố hay không?”
A. Input: Nhập số n; Output: n là số nguyên tố hoặc n không là số nguyên tố
B. Input: n là số nguyên tố hoặc n không là số nguyên tố; Output: Nhập số n
C. Input: n là số nguyên tố; Output: Nhập số n
D. Input: Nhập số n; Output: n là số nguyên tố
Câu 8: Thuật toán là:
A. Dãy các thao tác cần thực hiện theo 1 trình tự xác định để thu được kết quả cần thiết từ những điều kiện cho trước.
B. Một thao tác cần thực hiện để thu được kết quả cần thiết từ những điều kiện cho trước.
C. Dãy các thao tác cần thực hiện để thu được kết quả cần thiết từ những điều kiện cho trước.
D. Tất cả đều sai
Câu 9: Hãy chọn phát biểu Sai?
A. Việc thực hiện cả 3 bước khi giải bài toán trên máy tính là cần thiết, nhất là đối với bài toán phức tạp
B. Xác định bài toán là xác định rõ các điều kiện cho trước và kết quả cần thu được
C. Dãy hữu hạn các thao tác cần thực hiện để giải một bài toán được gọi là thuật toán
D. Đối với mỗi bài toán cụ thể chúng ta chỉ có 1 thuật toán duy nhất để giải bài toán đó trên máy tính
Câu 10: Mô tả thuật toán là:
A. Liệt kê các bước thực hiện công việc.
B. Liệt kê các cách thực hiện công việc.
C. Liệt kê một bước thực hiện công việc.
D. Tất cả đều đúng
>>> Bài tiếp theo: Lý thuyết Tin học 11 Kết nối tri thức bài 27