Nội dung chính
Định nghĩa kiểu tập hợp : Một số đối tượng nào đó có cùng bản chất.
Ví dụ
Những quả cam trên bàn.
Nhóm học sinh lớp 5.1.
Các bạn trai của trường.
Bài toán: Có 4 bạn tên là Xuân, Hạ, Thu, Đông được đánh số từ 1 tới 4, hãy dùng MswLogo để in ra màn hình tất cả các vị trí có được bằng cách hoán đổi vị trí của 4 người, tất nhiên các vị trí là không giống nhau ví dụ
Xuân Hạ Thu Đông
Xuân Đông Thu Hạ
Hạ Xuân Thu Đông
Đông Hạ Thu Xuân
…..
Nhận xét: Đây là một bài toán tương đối phức tạp nên chúng tôi xếp nó vào loại khó.
Cách giải in ra số thứ tự 4 bạn :
To HoanVi Cs pu rt 90 Make "y 300 For [i 1 4 1] [ For [j 1 4 1] [ For [k 1 4 1] [ For [n 1 4 1] [ IF (and not :i=:j not :i=:k not :i=:n not :j=:k not :j=:n not :k=:n) [ Sety :y label (List :i " :j " :k " :n) Make "y :y-30]]]]] END
Cách giải in ra tên của 4 bạn (sử dụng mảng).
To HoanVi2 Cs pu rt 90 make "y 300 make "ten (array 4 1) setitem 1 :ten "Xuan setitem 2 :ten "Ha setitem 3 :ten "Thu setitem 4 :ten "Dong for [i 1 4 1] [ for [j 1 4 1] [ for [k 1 4 1] [ for [n 1 4 1] [ if (and not :i=:j not :i=:k not :i=:n not :j=:k not :j=:n not :k=:n) [ sety :y label (list item :i :ten " item :j :ten " item :k :ten " item :n :ten)make "y :y-30]]]]] End
Code trên do cô Ngọc Thu Thủy (FB) cung cấp.
Chú ý : if (and not :i=:j not :i=:k not :i=:n not :j=:k not :j=:n not :k=:n) các bạn có thể chuyển về OR cho gọn IF not (OR :i=:j :i=:k :i=:n :j=:k :j=:n :k=:n)
Cách giải sử dụng kiểu tập hợp
To HV Make "h 400 ;Vi tri dung de xac dinh toa do y Make "ten {Xuan Ha Thu Dong} CS RT 90 PU HT SetY 400 For [a 1 4 1][ For [b 1 4 1][ Make "m MEMBERP :b (list :a) For [ Make "n MEMBERP :c (list :a :b) For [d 1 4 1][ Make "p MEMBERP :d (list :a :b :c) IF not(or :m :n :p) [ Label (List item :a :ten " item :b :ten " item :c :ten " item :d :ten) Make "h :h-18 SetY :h] ;if ] ; d ] ; c ] ; b ] ; a END
Cách giải: Giả sử tôi có rất nhiều người mang tên Xuân, Hạ, Thu, Đông, tôi mang người đầu tiên ra đứng trước ở vị trí số 1, kế đó tôi chọn một người và so sánh với người số 1 nếu giống, hoặc không thì ghi nhận lại vào cờ m, mang tiếp một người nữa ra, so sánh với 2 người đã có, làm tiếp cho người cuối cùng. Dựa vào các lá cờ m, n và p mà tôi biết được kiểu xếp có hợp lệ hay không.
Các bạn có thể thấy ở trên tôi khai báo
Make “ten {Xuan Ha Thu Dong} tên là một tập hợp gồm 4 phần tử, có thể hiểu nó là mảng cũng được.
MEMBERP :b (List :a) Lệnh này trả về giá trị đúng nếu như b là một phần tử của a ví dụ MEMBERP Xoài (list :trái cây) sẽ được kết quả đúng.
List ( danh sách các phần tử) lệnh này trả về một danh sách các phần tử liệt kê bên trong, tập hợp tên chỉ sử dụng trong vòng if nhằm mục đích lấy ra tên của 4 bạn dựa vào số a, b, c, d tương ứng