Trong Bài 9 có cho sẵn mã lệnh Python thực hiện thuật toán sắp xếp nhanh sử dụng phân đoạn Lomvio. Theo em, đây có phải là kết quả lập trình theo phương pháp mô đun hoá hay không? Vì sao?
Mô tả thuật toán bằng liệt kê các bước còn chứa nhiều cụm từ của ngôn ngữ tự nhiên, mỗi cụm từ nêu một việc phải làm. Để lập trình thực hiện thuật toán, cần làm chi tiết dần từng bước. Theo em đây có phải là "chia để trị" hay không? Vì sao?
Theo em, đây là “chia để trị” => Làm mịn dẫn các bước mô tả thuật toán là để tiến gắn hơn đến các câu lệnh của ngôn ngữ lập trinh. Ở đây lựa chọn sử dụng mã gia để trình bày vì nó ngắn gọn, dễ hiểu và không phụ thuộc vào ngôn ngữ lập trình.
Cách thức chung: Chuyển các cụm từ mô tả một "việc cần làm” thành các đoạn mã giá tiến gần hơn một bước đến các câu lệnh của chương trình chi tiết.
Em hãy viết chương trình Python thực hiện thuật toán sắp xếp chèn tuyến tính dựa trên mã giả đã cho trong bài học.
Tham khảo:
Viết chương trình Python thực hiện thuật toán sắp xếp chèn tuyến tính dựa trên mã giả đã cho trong báo học:
void Insertion_Sort(int a[], int n){
int pos, i;
int x;//lưu giá trị a[i] tránh bị ghi đè khi dời chỗ các phần tử
for(i=1; i<n; i++){//đoạn a[0] đã sắp xếp
x = a[i]; pos = i-1;
//tìm vị trí chèn x
while((pos>=0)&&(a[pos]>x)){
//kết hợp dời chỗ các phần tử sẽ đứng sau x trong danh sách mới
a[pos+1] = a[pos];
pos--;
}
a[pos+1] = x;//chèn x vào danh sách
}
}
void main()
{
int a[5] = {8, 4, 1, 6, 5};
Insertion_Sort(a, 5);
cout<<"Mang sau khi sap xep:"<<endl;
for(int i=0;i<5;i++){
cout<<a[i]<<" ";
}
system("pause");
Viết chương trình thực hiện sắp xếp nhanh một dãy số và chạy thử kiểm tra.
a) Dựa trên mã lệnh thuật toán cho trong Hình 3.
b) Dựa trên mã lệnh thuật toán cho trong Hình 5.
a. Dựa trên mã lệnh thuật toán cho trong Hình 3.
b) Dựa trên mã lệnh thuật toán cho trong Hình 5.
Trong các bước đã thực hiện của bài toán sắp xếp chèn ở trên, bước nào là đơn giản nhất theo nghĩa có thể thực hiện ngay bảng các lệnh lập trình.
Bước đơn giản nhất của bài toán sắp xếp chèn mà có thể thực hiện ngay bằng các lệnh lập trình là quá trình di chuyển các phần tử để đưa phần tử mới vào vị trí đúng của dãy con đã được sắp xếp trước đó.
tham khảo!
Viết phiên bản thứ hai cho hàm thực hiện phân tích dãy điểm . Viết chương trình thực hiện hàm ptDiem theo phương án sử dụng tối đa các hàm có sẵn trong Python và chạy thử kiểm tra.
– Sử dụng hàm sum để tính tổng và điểm trung bình.
- Gọi hàm Python thực hiện sắp xếp thứ tự tăng dần (không giảm); sau khi sắp xếp thì tìm được ngay max, min.
- Dãy số đã sắp thứ tự tăng dần (không giảm) nên có thể dùng hàm bisect left (trong mô đun bisect) tìm được các vị trí phân chia dãy điểm thành 4 đoạn điểm: Chưa đạt, Đạt, Khá và Tốt. Từ đó tính được số lượng điểm theo từng mức xếp hạng.
Em hãy cho biết lược đồ phân đoạn Lomuto theo mã giả cho trong Hình 2 có đáp ứng yêu cầu phân đoạn để sắp xếp nhanh như trình bày ở mục 1 hay không.
trong đoạn văn từ "Đồng bào ta...nồng nàn yêu nước" có sử dụng biện pháp nghệ thuật gì để nêu nhiều dẫn chứng?Các dẫn chứng có được sắp xếp theo một trình tự nào không?Các vế trong mô hình liên kết Từ ...đến có quan hệ với nhau như thế nào?
- Trong văn bản đã sử dụng biện pháp nghệ liệt kê để nêu ra các dẫn chứng.
→ Các dẫn chứng trong đoạn này được đưa theo mô hình “từ…đến…” và được sắp xếp theo trình tự: tuổi tác, vùng miền, giai cấp… Những sự việc này có mối quan hệ theo các bình diện khác nhau nhưng bao quát được mọi khía cạnh.
Trong bài 28, em đã biết tầm quan trọng và ý nghĩa của việc thiết kế chương trình theo mô đun. Mỗi mô đun chính là một chương trình con được xác định khi phân tích thiết kế bài toán lớn. Mỗi mô đun được viết một cách độc lập, có thể sử dụng lại như các thư viện và có thể chia sẻ trong nhóm làm việc. Trong bài tập thực hành này em sẽ được tự mình thiết kế chương trình cho một bài toán hoàn chỉnh theo mô đun.
Tham khảo:
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)
Nếu cần chọn một trong hai việc sau đây, em sẽ chọn việc làm nào? Vì sao?
1. Từ mô tả thuật toán bằng liệt kê các bước, viết chương trình Python thực hiện thuật toán.
2. Từ chương trình Phython thực hiện thuật toán, viết lại ngắn gọn ý tưởng chính của thuật toán.
Chọn bước:
1) Từ mô tả thuật toán bằng liệt kê các bước, viết chương trình Python thực hiện thuật toán.
=> Như vậy dễ nắm được các bước thực hiện và giúp bài toán có phương pháp giải chính xác hơn.