Với Giải Câu 32.8 trang 67 SBT Tin học 10 trong Bài 32: Ôn tập lập trình Python Sách bài tập Tin học 10 Kết nối tri thức hay nhất, chi tiết sẽ giúp học sinh dễ dàng làm bài tập trong SBT Tin học 10.
Câu 32.8 trang 67 SBT Tin học 10
Câu 32.8 trang 67 SBT Tin học 10: Mở rộng bài tập trên như sau:
- Việc sắp xếp thứ tự phải ưu tiên tính theo tên trước, rồi đến họ, rồi đến đệm.
- Sắp xếp theo thứ tự của bảng chữ cái tiếng Việt.
Lưu ý: Bảng chữ cái tiếng Việt (bao gồm cả dấu thanh) được sắp xếp theo thứ tự sau:
AÀÁẢÃẠĂẰẮẲẴẶÂẤẨẪẬBCDĐEÈÉẺẼẸÊỀẾỂỄỆGHIÌÍỈĨỊJKLMNOÒÓỎÕỌƠỚỞỠỢÔỒỐỔỖỘPQRSTUÙÚỦŨỤƯỪỨỬỮỰVXXYỲÝỶỸỴaàáảãạăằắẳẵặâấẩẫậbcdđeèéẻẽẹêềếểễệghiìíỉĩịjklmnoòóỏõọơớởỡợôồốổỗộpqrstuùúủũụưừứửữựvxxyỳýỷỹỵ.
Lời giải:
Để làm được bài tập này chúng ta cần thiết kế cơ chế so sánh từ điển tiếng Việt giữa hai xâu bất kì. Cách làm là đưa ra một từ điển Alphabet bao gồm các chữ cái tiếng Việt theo đúng thứ tự. Việc so sánh theo thứ tự từ điển được thực hiện bởi hàm so_sanh(s1, s2). Hàm này có ý nghĩa như sau:
Giá trị hàm trả lại: Bằng 0, nếu s1 = s2.
Bằng 1, nếu s1 > s2.
Bằng -1, nếu s1 < s2.
Sau khi đã định nghĩa được thứ tự từ điển mới thì các bước tiếp theo là khá dễ dàng.
Chương trình có thể viết như sau:
Alphabet = " AÀÁẢÃẠĂẰẮẲẴẶÂẤẨẪẬBCDĐEÈÉẺẼẸÊỀẾỂỄỆGHIÌÍỈĨỊJKLMN\ OÒÓỎÕỌƠỚỞỠỢÔỒỐỔỖỘPQRSTUÙÚỦŨỤƯỪỨỬỮỰVXXYỲÝỶỸỴ\ aàáảãạăằắẳẵặâấẩẫậbcdđeèéẻẽẹêềếểễệghiìíỉĩịjklmn\ oòóỏõọơớởỡợôồốổỗộpqrstuùúủũụưừứửữựvxxyỳýỷỹỵ."
MAX = 30
def so_sanh(s1, s2):
m = min(len (s1), len(s2))
kq = 0
k = 0
while k < m and kq == 0:
ch1, ch2 = s1[k], s2[k]
if Alphabet.index(ch1) < Alphabet.index(ch2):
kq = -1
return -1
if Alphabet.index(ch1) > Alphabet.index(ch2):
kq = 1
return 1
k = k + 1
if len(s1) < len(s2):
return -1
elif len(s1) > len(s2):
return 1
else:
return 0
def tach_ten(hoten):
sline = hoten.split()
return sline[len(sline)-1]
def space(k):
return " "*k
def transform(A):
B = []
for s in A:
ten = tach_ten(s)
tenmoi = ten + space(MAX - len(ten)) + s
B.append(tenmoi)
return B
def sap_xep(A):
hs = A.copy( )
B = transform(A)
for i in range(1, len(B)):
j = i
while j > 0 and so_sanh (B[j],B[j-1]) == -1:
B[j],B[j-1] = B[j-1],B[j]
hs[j],hs[j-1] = hs[j-1],hs[j]
j = j-1
return hs
# Chương trình chính
A = []
n = int(input("Nhập số học sinh của lớp: "))
for k in range(n):
hoten = input("Nhập tên học sinh thứ "+str(k+1)+": ")
A.append(hoten)
hs = sap_xep(A)
print("Danh sách học sinh trong lớp: ")
for s in hs:
print(s)
Xem thêm lời giải SBT Tin học 10 Kết nối tri thức hay, chi tiết khác:
Câu 32.8 trang 67 SBT Tin học 10: Mở rộng bài tập trên như sau:
Câu 32.10 trang 67 SBT Tin học 10: Bài toán mô tả đường bay của hòn đá khi được ném lên.
Xem thêm lời giải SBT Tin học 10 Kết nối tri thức hay, chi tiết khác:
Bài 29: Nhận biết lỗi chương trình
Bài 30: Kiểm thử và gỡ lỗi chương trình
Bài 31: Thực hành viết chương trình đơn giản
CÔNG TY TNHH ĐẦU TƯ VÀ DỊCH VỤ GIÁO DỤC VIETJACK
- Người đại diện: Nguyễn Thanh Tuyền
- Số giấy chứng nhận đăng ký kinh doanh: 0108307822, ngày cấp: 04/06/2018, nơi cấp: Sở Kế hoạch và Đầu tư thành phố Hà Nội.
2021 © All Rights Reserved.