KI UTP HP (SET TYPE)

Một phần của tài liệu Kỹ thuật lập trình turbo pascal (Trang 33 - 38)

T p h p lă m t nhóm câc đ i t ng có cùng m t ki u g i lă câc ph n t c a t p h p. Trong Toân h c, câc t p h p th ng đ c kí t b i danh sâch câc ph n t đ t trong c p d u ngo c {}. Ví d câc t p h p {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}, {♣, ♦, ♥, ♠}, v.v... T p h p không ch a ph n t năo g i lă t p h p r ng (empty set), ký hi u ∅ hay {}.

Do câc ph n t c a t p h p không đ c s p x p th t nín ng i ta không nói đ n ph n t th nh t, ph n t th hai, v.v... Nh v y, không th truy c p câc ph n t c a t p h p m t câch tr c ti p nh trong m ng.

Trong m t băi toân đòi h i đ n t p h p, câc ph n t đ c ch n t m t t p h p cho tr c đ c g i lă t p h p v tr (universal set). Ví d n u xĩt t p h p câc ch câi hoa thì t p h p v tr có th lă t p h p t t c câc kí t .

Câc phĩp toân c b n trín t p h p lă thu c (n m trong), giao, h p vă hi u nh đ c ch ra trong gi n đ Venn d i đđy.

III.2. Khai bâo t p h p Cú phâp :

Type T = set of T0 ;

T0 đ c g i lă ki u c s c a t p h p. T0 ph i lă ki u th t , không đ c ki u real ho c ki u array.

Ví d :

Type CapLetter = set of ‘A’..’Z’ ; Digit = set of 0..9 ;

Day = (Sun, Mon, Tue, Wed, Thu, Fri, Sat) ; Days = set of Day ;

Câc khai bâo trín t o thănh ba t p h p ph d ng lă : {‘A’, ‘B’, ..., ’Z’}, {0, 1, 2, 3, 4, 5, 6, 7, 8, 9} vă {Sun, Mon, Tue, Wed, Thu, Fri, Sat}.

s d ng t p h p trong ch ng trình, câc bi n đ c khai bâo nh sau : Var Vowels, Consonants : CapLetter;

Numbers, Evens, Odds : Digit; WorkDays : Days; M t h ng s t p h p có d ng : [<ds ph n t >] T p h p v tr T p h p v tr T p h p v tr S ∪ T S ∩ T S − T S T S T S T

trong đó <ds ph n t > lă danh sâch (có th r ng) câc h ng, bi n hay bi u th c đ t câch nhau d u ph y vă chúng đ c đ t trong c p d u ngo c [ vă ]. Câc giâ tr h ng liín ti p có th dùng câch bi u di n ki u mi n con.

Ví d :

Bi n Odds có th nh n giâ tr [1, 3, 5, 7, 9] (ho c [5, 9, 1, 7, 3] do t p h p không đ c s p x p th t ).

N u bi n d có giâ tr 3 thì có th bi u di n t p h p trín nh sau : [1, d, d+2, 2*d+1, d*d]

Bi n Consonants có th nh n giâ tr [‘B’ .. ‘D’, ‘F’ .. ‘H’, ‘K’ .. ‘N’].

T p h p r ng đ c ký hi u []. M i bi n ki u t p h p đ u có th nh n giâ tr năy. III.3. Câc phĩp toân trín t p h p

III.3.1. Phĩp gân

Phĩp gân đ c th c hi n cho câc bi n ki u t p h p. Ví d : Odds := [1, 3, 5, 7, 9]; Consonants := [‘B’..‘D’, ‘F’..‘H’, ‘K’..‘N’]; WorkDays := []; III.3.2. Phĩp quan h t p h p Phĩp thu c v đ c ký hi u b i t khoâ in có d ng : element in set

trong đó, set lă h ng, ho c bi n, ho c bi u th c ki u t p h p, element có ki u giâ tr lă ki u c s c a set.

Ví d :

3 in Odds có k t qu true

‘A’ in Consonants có k t qu false

Cho set1, set2 lă câc h ng, ho c bi n, ho c bi u th c ki u t p h p. Ta có câc phĩp quan h nh sau :

Phĩp quan h Ý ngh a

set1 <= set2 hay set2 >= set1 Ki m tra n u set1 ⊆ set2

set1 = set2 Ki m tra n u s1 vă s2 có cùng câc ph n t

gi ng nhau

set1 <> set2 T ng đ ng v i not (set1 = set2) Ví d : (adsbygoogle = window.adsbygoogle || []).push({});

[3, 5, 7] <= Odds có k t qu true [‘A’]<>Consonants có k t qu true

III.3.3. Câc phĩp toân trín t p h p

Cho set1, set2 lă câc h ng, ho c bi n, ho c bi u th c ki u t p h p. Ta có câc phĩp toân c b n nh sau :

Phĩp quan h Ý ngh a

set1 + set2 Phĩp h p set1 ∪ set2

set1 * set2 Phĩp giao set1 ∩ set2

set1 − set2 Phĩp hi u set1 − set2 theo th t u tiín đ c gi i thích nh sau :

r * s + t = (r * s) + t r - s * t = r - (s * t) r - s + t = (r - s) + t x in s + t = x in (s + t) Ví d : Bi u th c [3,4,7]+ [1,2,5]*[2..6,8] đ c tính nh sau :

Th c hi n phĩp giao : [1,2,5]*[2..6,8]= [2,5] Th c hi n phĩp h p : [3,4,7]+ [2,5]= [[2,3,4,5,7]

III.3.4. Câc thu t gi i văo ra trín t p h p

Thu t gi i t o m i m t t p h p

{ t o m t t p h p S, đ c liín ti p câc ph n t c a S r i thím văo S } 1. S := []; { Kh i đ ng S } 2. while ( còn d li u ) do − c x lă bi n có ki u c s c a S − S :=S + [x]; Thu t gi i hi n th câc ph n t c a m t t p h p { Tìm liín ti p m t ph n t x thu c S, hi n th x, r i lo i b x kh i S. T p h p S gi m d n đ n t p h p r ng }

1. Cho x lă m t bi n có ki u lă ki u c s c a S. x:= giâ tr đ u tiín c a ki u c s năy.

2. while S <> [] do begin

while x not in S do x:=succ(x) { thay x b i ph n t ti p theo } Hi n th x.

end;

N u t p h p S c n đ c gi l i, tr c khi hi n th câc ph n t c a S, hêy l u S văo m t t p h p t m th i : TempSet:= S;

III.3.5. M t s ví d

Ví d 1 : Tìm câc s nguyín t trong kho ng 2..N. Thu t gi i Eratosthỉnes :

1. Kh i đ ng t p h p PrimeSet ch a câc s nguyín t . 2. Xđy d ng săng Sieve [2..N].

3. Repeat

Tìm s nguyín t Prime.

Thím Prime văo t p h p k t qu .

Lo i tr kh i săng câc b i s c a Prime lă 2* Prime, 3* Prime... until săng = r ng

Ch ng trình nh sau : Program TimSoNguyenTo; Const N=100;

Var Sieve, PrimeSet : set of 2..N; Prime, i : integer;

Begin

PrimeSet:=[]; { Kh i đ ng t p h p PrimeSet } Sieve:=[2..N]; { Xđy d ng săng Sieve } Prime:=2;

Repeat

{ Tìm s nguyín t Prime } while not (Prime in Sieve) do (adsbygoogle = window.adsbygoogle || []).push({});

Prime:= Prime + 1;

{ Thím Prime văo t p h p k t qu vă in ra } PrimeSet:= PrimeSet + [Prime];

Write(Perime:4,’,’);

{ Lo i tr kh i Sieve câc b i s c a Prime } i:= Prime;

while i<= N do begin Sieve:= Sieve - [i]; i:= i + Prime end until Sieve=[]; writeln; Readln End. {TimSoNguyenTo }

Ví d 2 : Tìm s câc c p kí t đi li n nhau trong m t v n b n. Ch ng h n t lúc l c g m câc c p kí t đi li n nhau lu, úc, la, ac.

Program TimCapKyTu; Const letter_a = 'a' ;

letter_z = 'z' ;

var Count : array [letter, letter] of Word ; d, c : letter ;

C1, C2 : char ; begin

for c:= letter_a to letter_Z do for d:= letter_a to letter_Z do

Count[c,d]:= 0 { Kh i đ ng }

while not eof do { c v n b n, v a đ c v a đ m } read(C1);

begin

read(C2);

if [C1, C2] <= [letter_a .. letter_z]

then Count[C1, C2]:= Count[C1, C2] + 1 ; C1:= C2

end { In k t qu } Readln end.

III.4. Bi u di n c u trúc t p h p trong mây

Cho S lă m t t p h p câc ph n t đ c ch n t m t t p h p v tr h u h n. Trong mây tính, t p h p S c ng đ c bi u di n b i m t dêy bit t ng t câc ki u d li u ti n đnh khâc (Integer, Real, Char vă Boolean).

Câch bi u di n S đ c cho b i hăm đ c tr ng C(S) lă m t m ng logic có kích th c b ng s ph n t c a t p h p v tr . M i thănh ph n C(Si) lă m t bit t ng ng v i m t ph n t c a t p h p v tr .

Giâ tr C(Si) xâc đnh có m t hay không c a giâ tr th i trong t p h p : C (Si) ≡ (i in S)

Ví d : Cho câc bi n S, T đ c khai bâo nh sau : Var S, T : set of 0..9 ;

V i phĩp gân : S:= [1,5,8] thì C(S) có giâ tr [0 1 0 0 0 1 0 0 1 0] V i phĩp gân : T:= [2,3,4] thì C(S) có giâ tr [0 0 1 1 1 0 0 0 0 0] Câc phĩp toân trín t p h p đ c xâc đ nh nh sau :

i in (S + T) ≡ (i in S) ∨ (i in T) i in (S * T) ≡ (i in S) ∧ (i in T) i in (S − T) ≡ (i in S) ∧ not (i in T) trong đó, phĩp toân in th c hi n trín câc bit :

IV. C u trúc ki u b n ghi (record) IV.1. c t ki u b n ghi

Một phần của tài liệu Kỹ thuật lập trình turbo pascal (Trang 33 - 38)