9-1 

สถาบันเทคโนโลยีราชมงคล

วิทยาเขต บพิตรพิมุข จักรวรรดิ

บทที่ 9 
เซต (Set)
 

เซต หมายถึงกลุ่ม ฝูง พวก ชุด ของสิ่งใดสิ่งหนึ่ง เช่น เพศ ประกอบด้วย หญิง และ ชาย 

รายการที่อยู่ในเซต เรียกว่าสมาชิก

เซตย่อย (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 

สมาชิกเซต 

สมาชิกของเซต จะเขียนอยู่ในเครื่องหมาย [ ]

 

9-4 

สมาชิกเซต 

 

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 แบบคือ

 

9-16 

เซตเท่ากัน (Equality) 

เซตเท่ากัน (Equality) ใช้ เครื่องหมายเท่ากับ = เช่น

 

9-17 

เซตไม่เท่ากัน (Inequality) 

เซตไม่เท่ากัน (Inequality) ใช้เครื่องหมาย <> ถ้าเซตซ้ายมีสมาชิกไม่เหมือน เซตขวามือ ผลลัพธ์เป็นจริง

 

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.

Hosted by www.Geocities.ws

1