Có một tập tiếng Việt chứa n từ cụm từ xếp lộn xộn
Sách bài tập Tin học 11 Bài 8: Lập trình một số thuật toán sắp xếp - Cánh diều
Câu Fcs35 trang 59 SBT Tin học 11: Sắp xếp tiếng Việt
Có một tập tiếng Việt chứa n từ (cụm từ) xếp lộn xộn. Em hãy viết chương trình sắp xếp lại n từ (cụm từ) đó theo thứ tự từ điển tiếng Việt để dễ tra cứu.
Dữ liệu: Nhập từ tệp danhsach.txt:
• Dòng đầu tiên chứa số nguyên dương n.
• n dòng sau, mỗi dòng là một xâu biểu thị từ hoặc cụm từ tiếng Việt. Kết quả: Đưa ra tệp Tudien.out:
Gồm n dòng, dòng thứ i in ra từ hoặc cụm từ thứ i theo thứ tự từ điển.
Lời giải:
Để so sánh thứ tự từ điển của các xâu tiếng Việt, em không thể dùng các phép toán so sánh “<, >, ...” như bình thường, vì trên bảng mã Unicode, các kí tự có dấu sẽ đứng sau 26 kí tự Latinh không dấu trong bảng ASCII. Vì vậy, em sẽ sử dụng thư viện locale là một thư viện chuyên dùng để xử quy chuẩn của các ngôn ngữ.
Em khai báo thư viện locale, sau đó khai báo sử dụng ngôn ngữ tiếng Việt bằng câu lệnh: locale.setlocale(locale.LC_ALL, "vi_VN"). Thư viện này cho phép ta dùng hai hàm như sau:
• locale.strcoll(s1, s2) : so sánh hai xâu và trả về:
– Một số âm nếu s1 đứng trước s2.
- Số 0, nếu s1 giống hệt s2.
– Một số dương nếu s2 đứng trước s1.
locale.strxfrm(s): chuyển đổi một xâu s thành một con số để thuận tiện cho việc so sánh thứ tự.
Câu lệnh locale.strcoll(s1, s2)có thể được viết thành biểu thức locale.strxfrm (s1) < locale.strxfrm (s2).
Trong bài này, đầu tiên em khai báo nhập xuất tệp (phải để mã hoá bằng UTF-8) và sử dụng thư viện locale với ngôn ngữ là tiếng Việt (mã vi_VN hoặc vi). Sau đó, em tạo mảng các xâu s rồi nhập n, tiếp theo em lần lượt nhập n dòng rồi cho vào mảng s. Cuối cùng, em sắp xếp mảng s sau cho strxfrm ( ) của các xâu trong mảng s theo chiều hướng tăng dần (có thể dùng hàm sort với cú pháp như ở dưới) và in ra kết quả.
Chương trình mẫu:
import sys
sys.stdin = open("danhsach.txt", "r", encoding="utf8") sys.stdout open ("Tudien.txt", "w", encoding="utf8") import locale
locale.setlocale (locale. LC ALL, "vi_VN")
n=int (input())
s=[]for i in range (n):
s.append(input())
s.sort (key=locale.strxfrm) for x in s:
print (x)
Lời giải SBT Tin 11 Bài 8: Lập trình một số thuật toán sắp xếp hay khác:
Xem thêm các bài giải sách bài tập Tin học lớp 11 Cánh diều hay, chi tiết khác:
Xem thêm các tài liệu học tốt lớp 11 hay khác:
- Giải sgk Tin học 11 Cánh diều
- Giải Chuyên đề Tin học 11 Cánh diều
- Giải SBT Tin học 11 Cánh diều
- Giải lớp 11 Cánh diều (các môn học)
- Giải lớp 11 Kết nối tri thức (các môn học)
- Giải lớp 11 Chân trời sáng tạo (các môn học)
Tủ sách VIETJACK shopee lớp 10-11 cho học sinh và giáo viên (cả 3 bộ sách):
Đã có app VietJack trên điện thoại, giải bài tập SGK, SBT Soạn văn, Văn mẫu, Thi online, Bài giảng....miễn phí. Tải ngay ứng dụng trên Android và iOS.
Theo dõi chúng tôi miễn phí trên mạng xã hội facebook và youtube:Nếu thấy hay, hãy động viên và chia sẻ nhé! Các bình luận không phù hợp với nội quy bình luận trang web sẽ bị cấm bình luận vĩnh viễn.
- Soạn văn 11 Cánh diều (hay nhất)
- Soạn văn 11 Cánh diều (ngắn nhất)
- Giải sgk Toán 11 - Cánh diều
- Giải Tiếng Anh 11 Global Success
- Giải sgk Tiếng Anh 11 Smart World
- Giải sgk Tiếng Anh 11 Friends Global
- Giải sgk Vật Lí 11 - Cánh diều
- Giải sgk Hóa học 11 - Cánh diều
- Giải sgk Sinh học 11 - Cánh diều
- Giải sgk Lịch Sử 11 - Cánh diều
- Giải sgk Địa Lí 11 - Cánh diều
- Giải sgk Giáo dục KTPL 11 - Cánh diều
- Giải sgk Tin học 11 - Cánh diều
- Giải sgk Công nghệ 11 - Cánh diều
- Giải sgk Hoạt động trải nghiệm 11 - Cánh diều
- Giải sgk Giáo dục quốc phòng 11 - Cánh diều
- Giải sgk Âm nhạc 11 - Cánh diều