9-1
|
สถาบันเทคโนโลยีราชมงคล วิทยาเขต บพิตรพิมุข จักรวรรดิ |
บทที่
9 |
เซต หมายถึงกลุ่ม ฝูง พวก ชุด ของสิ่งใดสิ่งหนึ่ง เช่น เพศ ประกอบด้วย หญิง และ ชาย
รายการที่อยู่ในเซต เรียกว่าสมาชิก
เซตย่อย (Subset) คือ เซตย่อยที่อยู่ภายในเซตนั้น เช่น
ทารกเพศชาย หรือ ทารกเพศหญิง เป็น เซตย่อยของเพศ
9-2
เซต
(Set)
ปาสคาล สามารถประมวลผลเรื่องเซต ได้ เช่น
if ((age >= 15) and (age <= 25)) or
((age>=60) and (age <=70)) then .
สามารถเขียนให้สั้นง่ายได้ดังนี้
if age in [12..25],[60..70] then ..
9-3
สมาชิกเซต
สมาชิกของเซต จะเขียนอยู่ในเครื่องหมาย [ ]
[] หมายถึงไม่มีสมาชิก
[1,2,10] หมายถึงมีสมาชิก 1, 2 และ 10
[1..10] หมายถึงมีสมาชิก 1 ถึง 10
[a..z] หมายถึงมีสมาชิก a,b,c จนถึง z
[1..10,30..50] หมายถึงมีสมาชิกเป็น integer 1ถึง10 และ 30ถึง50
9-4
สมาชิกเซต
[mon,tue,wed,thu,fri] หมายถึงมีสมาชิกเป็นวันตั้งแต่จันทร์ถึงศุกร์ อาจเขียน [mon..fri]
ลำดับที่ และ จำนวนครั้งของสมาชิกไม่มีความแตกต่าง เช่น [1,2,3] หรือ [2,1,2,3] มีความหมายเหมือนกัน
ในหนึ่งเซตมีจำนวนสมาชิกไม่เกิน 256 รายการ
9-5
วิธีกำหนดข้อมูลให้กับเซต
การกำหนดใช้คำสั่ง Set of มีรูปแบบดังนี้
TYPE ชื่อเซต = SET OF base type
base type หมายถึงข้อมูลที่มีลำดับ
9-6
วิธีกำหนดข้อมูลให้กับเซต
Type
dayofmonth = set of 1..31;
Capletter = set of A..Z;
primarycolor = set of (red,bule,green);
day=(mon,tue,wed,thu,fri,sat,sun);
week = set of day;
ความหมาย
1 เดือนมีวัน 1 ถึง 30 วัน
เซตตัวอักษรมี A ถึง Z
เซตแม่สีมี
สีแดง เขียว
น้ำเงิน
กำหนดเซตค่าจาก Enumerate
9-7
การประกาศเซต
การประกาศเซต อาจกำหนดแบบค่าคงที่ภายใต้ CONST หรือ ตัวแปรภายใต้ TYPE เช่น
Type
digits = set of 0..9;
var
num :
digit ;
หรือ
CONST
odddigits := digits= [1,3,5,7,9];
evenditits:= digits= [2,4,6,8];
9-8
เซตแบบ
Constant
การกำหนดสระ
TYPE
LETTER = SET OF A..Z;
CONST
VOWEL : LETTER =
[A,E,I,O,U];
การกำหนดเลขฐาน 16
CONST
HEX : SET OF 0..Z =[0..9,A..F,a..f];
9-9
เซตแบบ
Variable
TYPE
LETTER = SET OF A..Z;
VAR
VOWEL,CONSONANTS : LETTER;
BEGIN
VOWEL := [A,E,I,O,U];
CONSONANTS := LETTER - VOWEL;
9-10
Click to add title
TYPE
day=(mon,tue,wed,thu,fri,sat,sun);
VAR
WORKDAY,WEEKEND: DAY;
BEGIN
WEEKEND := [SUN,SAT];
WORKDAY := DAY - WEEKEND;
9-11
โอเปอเรชันของเซต
Union
Intersection
Difference
9-12
Difference
Union เป็นการรวม 2 เซต(+)เข้าด้วยกันโดยเซตใหม่ มีจำนวนสมาชิกของทั้ง 2 เซต เช่น
set [a,b]
+ set [c,g,m] จะได้ [a,b
,c,g,m]
9-13
Difference
Difference เป็นการหาผลต่าง (-)ระหว่างเซต 2 เซต โดยผลลัพธ์จะเป็นสมาชิกของเซตด้านซ้าย ที่ไม่อยู่ ในเซตด้านขวามือ เช่น
[b j] - [e,g..y] จุ°ได้ [b..d,f]
9-14
Intersection
Intersection เป็นการสร้างเซตใหม่ที่รวม( *) เอาสมาชิกที่เหมือนกันทั้ง 2 เซตเข้าด้วยกัน เช่น
[2..7,10,12] * [1..5,11..6] จะได้ [2..5,12]
9-15
Relation
Relation ความสัมพันธ์อันเกิดจากการเปรียบเทียบของเซต มีคำตอบเป็น จริงกับเท็จ มี 5 แบบคือ
เซตเท่ากัน (Equality)
เซตไม่เท่ากัน (Inequality)
ซับเซต (Subset)
ซูเปอร์เซต(Superset)
เป็นสมาชิกของเซต (Set member)
9-16
เซตเท่ากัน
(Equality)
เซตเท่ากัน (Equality) ใช้ เครื่องหมายเท่ากับ = เช่น
[1,4] = [1,4] ผลลัพธ์เป็น true
[1,4] = [2,4] ผลลัพธ์เป็น false
[4,1] = [1,4] ผลลัพธ์เป็น true
[] = [0] ผลลัพธ์เป็น false
9-17
เซตไม่เท่ากัน
(Inequality)
เซตไม่เท่ากัน (Inequality) ใช้เครื่องหมาย <> ถ้าเซตซ้ายมีสมาชิกไม่เหมือน เซตขวามือ ผลลัพธ์เป็นจริง
[1,4] <> [1,4] ผลลัพธ์เป็น false
[1,4] <> [2,4] ผลลัพธ์เป็น ture
[4,1] <> [1,4] ผลลัพธ์เป็น false
[] <> [0] ผลลัพธ์เป็น ture
9-18
ซับเซต
(Subset)
ซับเซต (Subset) ใช้เครื่องหมาย <=
ถ้าสมาชิกทุกตัวของเซตซ้ายมือ เป็นสมาชิกใน เซตขวามือ ผลลัพธ์เป็นจริง
[1,3] <= [1,3] ผลลัพธ์เป็น true
[1,3] <= [1..5] ผลลัพธ์เป็น true
[a,p] <= [a,q..z] ผลลัพธ์เป็น false
[1,2,3,4] <= [1,4] ผลลัพธ์เป็น false
9-19
ซูเปอร์เซต(Superset)
ซูเปอร์เซต(Superset) ใช้เครื่องหมาย >=
ถ้าสมาชิกทุกตัวของเซตขวามือเป็นสมาชิกในเซตซ้ายมือ ผลลัพธ์เป็นจริง
[1,3] >= [1,3] ผลลัพธ์เป็น true
[1,3] >= [1..5] ผลลัพธ์เป็น false
[a,p] >= [a,q..z] ผลลัพธ์เป็น false
[1,2,3,4] >= [1,4] ผลลัพธ์เป็น ture
9-20
เป็นสมาชิกของเซต
(Set member)
เป็นสมาชิกของเซต (Set member) ใช้เครื่องหมาย IN
ค่าทางซ้ายของ IN เป็นสมาชิกของเซตขาวมือ ผลลัพธ์เป็นจริง
A IN [A..Z] ผลลัพธ์เป็น true
Z IN [A..N] ผลลัพธ์เป็น false
5 IN [15..30] ผลลัพธ์เป็น false
10 IN [1..17] ผลลัพธ์เป็น true
9-21
การใช้เซตในโปรแกรม
โปรแกรม
1. ( a=w) and (b=w) and (c=w)
2. ( a=w) or (b=w) or (c=w)
3. if ((age >= 15) and (age <=
25)) or ((age>=60) and (age <=70)) then
.
การใช้เซต
[a,b,c] = [w]
w in [a,b,c]
if age in
[12..25],[60..70] then
..
9-22
การใช้เซตในโปรแกรม
Read (choice);
CASE choice OF
1 : add;
2 : delete;
3 : update;
4: exit;
end;
Read (choice);
if choice in [1,2,3,4] then
CASE choice OF
1 : add;
2 : delete;
3 : update;
4: exit;
end;
9-23
การรับและแสดงค่าในเซต
การรับและแสดงค่าในเซต
ไม่สามารถใช้คำสั่ง Read หรือ Write ได้โดยตรง เช่น var letter : set of a..z;
write(letter);
read(letter); ไม่ได้
ต้องอาศัยคำสั่ง
IF หรือ Case
9-24
การรับและแสดงค่าตัวเลขในเซต
โปรแกรมทำการเก็บเลขคู่ และ เลขคี่เข้าไว้ในเซต พร้อมทำการพิมพ์ค่า
program setget1;
uses wincrt;
const max = 30;
type numset = set of 1..max;
var odd,even: numset; i : integer;
9-25
การรับและแสดงค่าตัวเลขในเซต
begin
odd := [];
even := [];
for i:= 1 to max do
begin
if i mod 2 > 0 then
even := even + [i] {letter := [1..max] - odd;}
else
odd := odd + [i]
end;
9-26
การรับและแสดงค่าตัวเลขในเซต
writeln('***** ODD number ********');
for i:= 1 to max do
if i in odd then write(i,' ');
writeln;
writeln('*********even number ********');
for i:= 1 to max do
if i in even then write(i,' ');
end.
9-27
การรับและแสดงค่าตัวอักษรในเซต
โปรแกรมทำการเก็บสระ และ พยานชนะเข้าไว้ในเซต พร้อมทำการพิมพ์ค่า
program setget2;
uses wincrt;
type letterset = set of 'a'..'z';
var letter, vowels:letterset;
i : char;
begin
vowels := [];
for i:= 'a' to 'z' do
9-28
การรับและแสดงค่าตัวอักษรในเซต
begin
if i= 'a' then vowels := vowels +[i];
if i= 'e' then vowels := vowels +[i];
if i= 'i' then vowels := vowels +[i];
if i= 'o' then vowels := vowels +[i];
if i= 'u' then vowels := vowels +[i];
end;
for i:= 'a' to 'z' do
if i in vowels then write(i,' ');
writeln;
letter :=
['a'..'z'] - vowels;
for i:= 'a' to 'z' do
if i in letter then write(i,' ');
end.
9-29
การรับและแสดงค่าตัวอักษรในเซต
for i:= 'a' to 'z' do
if i in vowels then write(i,' ');
writeln;
letter := ['a'..'z'] - vowels;
for i:= 'a' to 'z' do
if i in letter then write(i,' ');
end.
9-30
การรับและแสดงค่าตัวอักษรในเซต
โปรแกรมนับจำนวนตัวอักษรที่รับจากแป้นพิมพ์ และแยกว่าเป็นสระ พยานชนะ และ อักขระอื่นๆ พิมพ์จำนวนที่นับได้
9-31
การรับและแสดงค่าตัวอักษรในเซต
program sets3;
uses wincrt;
type letterset = set of 'A'..'Z';
var vowels,letter,l: letterset;
count_v,count_letter,count_wrong : integer;
ch,i:char;
9-32
การรับและแสดงค่าตัวอักษรในเซต
begin
count_v := 0; count_letter:= 0;
count_wrong := 0;
vowels := ['A','E','I','O','U'];
letter := ['A'..'Z'] - vowels;
9-33
write('Enter one letter(* for end):');
ch := readkey;
ch := upcase(ch);
while ch <> '*' do
begin
if ch in vowels then
count_v := count_v +1;
การรับและแสดงค่าตัวอักษรในเซต
9-34
else
if ch in letter then
count_letter := count_letter +1
else
count_wrong := count_wrong +1;
การรับและแสดงค่าตัวอักษรในเซต
9-35
writeln;
write('Enter one letter(* for end):');
ch := readkey;
ch := upcase(ch);
end;
การรับและแสดงค่าตัวอักษรในเซต
9-36
การรับและแสดงค่าตัวอักษรในเซต
writeln;
writeln('Total vowels is ',count_v);
writeln('Total letter is ',count_letter);
writeln('Total non letter/vowels is ',count_wrong);
end.