Hãy viết chương trình nhập một số nguyên N (<=10), sử dụng thủ tục trên để hiển thị tất cả các S-term trên màn hình.. Xét một phép tính với các S-term.[r]
(1)V S-TERMS
S-term chuỗi gồm ký tự S dấu ngoặc đơn định nghĩa cách đệ quy sau: S S-term, M N s-term, (MN) s-term
Ví dụ:
((((SS)(SS))S)(SS))
Các dấu ngoặc đơn bên phải khơng chứa thơng tin mới, bỏ chúng đi, ví dụ (MN thay cho (MN), chuỗi ban đầu trở thành:
((((SS(SSS(SS
1 Hãy viết thủ tục "tạo chuỗi" để tạo S-term: thủ tục bạn phải sinh n (n = độ dài = số ký tự S chuỗi) tệp văn chứa tất S-term có độ dài 1, , n Các S-term ngăn cách dấu chấm phảy";" Kết thúc S-term cuối tệp văn dấu chấm"." Hãy viết chương trình nhập số nguyên N (<=10), sử dụng thủ tục để hiển thị tất S-term hình
Xét phép tính với term Quy tắc S sử dụng là: chuỗi S-term có dạng (((SA)B)C), A, B C s-S-term viết dạng: ((AC)(BC)) ứng dụng quy tắc S-term gọi rút gọn S-term
Có nhiều cách khác để chọn chuỗi để áp dụng quy tắc S Một ứng dụng khác quy tắc với S-term gọi "chuẩn hóa" S-term
Ví dụ chuỗi thu nhỏ:
((((SS)(SS))S)(SS)) -> (((SS)((SS)S))(SS)) -> ((S(SS))(((SS)S)(SS))) -> ((S(SS))((S(SS))(S(SS)))) Chọn cấu trúc liệu phù hợp để biểu diễn S-term hỗ trợ áp dụng quy tắc S Hãy viết hai thủ tục "đọc chuỗi" "in chuỗi" chuyển S-term từ cách biểu diễn "tạo chuỗi" sang cách biểu diễn bạn ngược lại Chương trình bạn phải thể q trình chuyển
3 Hãy viết thủ tục "thu nhỏ" biểu diễn bước thu nhỏ theo quy tắc S chuỗi S-term Chương trình phải minh họa điều
4 Hãy viết thủ tục "chuẩn hóa": cho trước S-term, chọn chuỗi để áp dụng quy tắc S đến không thu nhỏ số lần thu nhỏ vượt q mức tối đa, ví dụ 30 Chương trình phải minh họa trình
5 Cuối cùng, kết hợp tất thủ tục thành chương trình có thể: a) u cầu người dùng nhập độ dài n,
b) Dùng S-term độ dài n quy trình "tạo chuỗi" tạo ra, c) Chuyển S-term sang cách biểu diễn bạn,
d) Chuẩn hóa (nếu có thể),
e) Ghi kết chuẩn hóa s-term,
f) Ghi số bước thu nhỏ với s-term, đoạn thông điệp 'not normalized' không chuẩn hóa sau 30 bước, Và
(2)