PASCAL/Tập hợp
Kiểu tập hợp
[edit]Xác định kiểu tập hợp
TYPE <Tên kiểu tập hợp> = SET OF <Kiểu cơ sở>;
Kiểu cơ sở là kiểu có thứ tự sao cho thứ tự của một giá trị bất kì trong kiểu cơ sở nằm trong khoảng từ 0 đến 255. Các kiểu chuẩn Byte, Char, Boolean hoặc kiểu miền con của các kiểu đó đều có thể làm kiểu cơ sở cho kiểu tập hợp.
- Chú ý: Ngoài các kiểu chuẩn đã được giới thiệu, TP còn có kiểu chuẩn Byte bao gồm các số nguyên từ 0 đến 255. Kiểu chuẩn Byte có tất cả các phép toán, hàm và thủ tục chuẩn của kiểu chuẩn Integer.
Khai báo kiểu tập hợp
[edit]Khai báo gián tiếp
[edit]TYPE <Tên kiểu tập hợp> = SET OF <Kiểu cơ sở>;
VAR <Biến kiểu tập hợp>: <Tên kiểu tập hợp>;
Ví dụ:
TYPE Chucai = SET OF Char;
So = SET OF 0..9; {Tap hop cac chu so tu 0 den 9}
ngay = SET OF (hai, ba, bon, nam);
VAR cca: Chucai;
lietie: So;
thu: ngay;
luot: ngay;
Khai báo gián tiếp giúp các kiểu cơ sở được gán tên Tên kiểu tập hợp có thể sử dụng nhiều lần với nhiều biến kiểu tập hợp khác nhau một cách thuận tiện.
Khai báo trực tiếp
[edit]VAR <Biến kiểu tập hợp>: SET OF <Kiểu cơ sở>;;
Ví dụ:
VAR qwert: SET OF Char;
abcde: SET OF 2..6;
chi: SET OF (lui, tien, dung);
luka: SET OF Byte;
Giá trị kiểu tập hợp
[edit]Giá trị kiểu tập hợp là một tập hợp các giá trị kiểu cơ sở hay phần tử. Viết giá trị kiểu tập hợp bằng cách liệt kê danh sách các phần tử; danh sách nói trên được chứa trong hai dấu "[" và "]". Trong danh sách đó cho phép dùng giá trị miền con dạng Hằng 1..Hằng 2 để liệt kê một miền liên tục các giá trị kiểu cơ sở. Các phần tử cũng có thể là biểu thức, biến, hằng. Ví dụ:
[3, 2, 42, 23]
[2..4] {Tập hợp chữ số từ 2 đến 4}
[1..3, 23, a,fw, 2]
['A'..'H'] {Tập hợp chữ cái từ A đến H}
[a+1, 2, fg, a+b*2, ewe]
Mọi kiểu tập hợp đều có tập hợp rỗng, không chứa một giá trị cơ sở nào. Tập rỗng được viết là
[]
Gán giá trị cho biến kiểu tập hợp
[edit]<Biến kiểu tập hợp>:= <Tập họp hoặc biến hay hằng kiểu tập hợp khác>;
Ví dụ:
Tap1:= [3, 32, 23, 3];
Ta3:= Tap1;
Các phép toán
[edit]Phép hợp hai tập hợp
[edit]Để hợp hai giá trị của hai tập hợp về một tập hợp ta dùng dấu cộng ("+"). Ví dụ với hai tập t1 và t2, phép t1 + t2 cho tập hợp giá trị mới gồm mọi giá trị có trong hoặc t1, hoặc t2 (nếu trùng phần tử) hoặc cả t1 lẫn t2. Ví dụ:
[34, 234, 324] + [123,56] = [34, 234, 324, 123,56]
[12, 345, 543] + [234, 345 , 3] = [12, 345, 543, 234, 3]
[4..10] + [1, 3, 5, 7, 8, 10, 12] = [1, 3..10, 12]
Ví dụ trong cú pháp Pascal:
Tap1:= [12,123] + [534];
Tap2:= Tap1 + [356];
Phép giao hai tập hợp
[edit]Phép giao hai tập hợp, dùng dấu nhân ("*"). Phép giao cho một tập hợp mọi giá trị chung trong cả hai tập được giao nhau. Ví dụ với hai tập t1 và t2, phép t1 * t2 cho tập hợp giá trị mới gồm mọi giá trị chung của t1 và t2. Ví dụ:
[34, 234, 324] * [56, 123] = []
[12, 345, 543] * [3, 234, 345] = [345]
[4..10] * [1, 3, 5, 7, 8, 10, 12] = [5, 7, 8, 10]
Ví dụ trong cú pháp Pascal:
Tap1:= [12, 123] * [534];
Tap2:= Tap1 * [356];
Phép hiệu hai tập hợp
[edit]Phép hiệu hai tập hợp, dùng dấu "-". Ví dụ, phép hiệu hai tập t1 và t2 cho tập hợp mới gồm mọi giá trị có trong t1 mà không có trong t2. Ví dụ:
[4..10] - [1, 3, 5, 7, 8, 10, 12] = [6, 9]
[2, 3, 46, 363] - [1..400] = []
Ví dụ trong cú pháp Pascal:
Tap1:= [12, 37, 123] - [37];
Tap2:= Tap1 - [356];
Phép toán thử "thuộc"
[edit]Phép toán "thuộc" kiểm tra một giá trị cơ sở có thuộc một tập hợp hay không, dùng từ khóa IN' (đây là phép toán quan hệ). Ví dụ, a IN t1 cho TRUE nếu trong t1 có giá trị bằng a, ngược lại là FALSE nếu trong t1 không có giá trị đó. Ví dụ: Giả sử T có giá trị 10. T IN [10, 12] cho giá trị trị TRUE còn T IN [1..8, 11, 12] cho giá trị FALSE.