logo

KIỂU TẬP HỢP TRONG PASCAL

Một tập hợp bao gồm một số đối tượng nào đó có cùng bản chất. Trong Pascal điều đó có ngiã là mô tả cùng một kiểu, kiểu bày gọi là kiểu cơ bản. Kiểu cơ bản bắt buộc phải là một kiểu vô hướng hay đoạn con và không được là số thực. Các đối tượng này gọi là các phần tử của tập. Số phần tử cực đại cho phép trong Boland Pascal là 256.
KiÓu tËp hîp I. KiÓu tËp hîp Mét tËp hîp bao gåm mét sè ®èi t îng nµo ®ã cã cïng b¶n chÊt. Trong Pascal ®iÒu ®ã cã ngi· lµ m« t¶ cïng mét kiÓu, kiÓu bµy gäi lµ kiÓu c¬ b¶n. KiÓu c¬ b¶n b¾t buéc ph¶i lµ mét kiÓu v« híng hay ®o¹n con vµ kh«ng ®îc lµ sè thùc. C¸c ®èi t îng nµy gäi lµ c¸c phÇn tö cña tËp. Sè phÇn tö cùc ®¹i cho phÐp trong Boland Pascal lµ 256. §Ó m« t¶ kiÓu vµ khai b¸o biÕn tËp hîp, ngêi ta dïng tõ kho¸ SET OF theo sau lµ kiÓu c¬ b¶n T (kiÓu cña c¸c phÇn tö cña tËp) VD : TYPE Chu_Cai = SET OF CHAR; Chu_So = SET OF 0..9; VAR SO : CHU_SO; L : CHU_CAI; A : SET OF BYTE; II. X¸c lËp mét tËp Mét tËp hîp ®îc x¸c ®Þnh b»ng c¸ch liÖt kª c¸c phÇn tö cña tËp hîp, chóng c¸ch nhau b»ng dÊu phÈy vµ ®îc ®Æt gi÷a 2 dÊu ngoÆc vu«ng. VD : []; [3..5]; [3,4,5,8] hoÆc [3..5,8]; ['A'..'C','Y','Z']; B¶n th©n c¸c phÇn tö cña tËp còng cã thÓ cho b»ng biÕn hoÆc biÓu thøc VD : [X+Y, I*J, 3, 4] II I. C¸c phÐp to¸n trªn tËp 1. PhÐp g¸n Víi c¸ch m« t¶ ë trªn ta cã thÓ g¸n VD : SO := [3..5]; L := ['A'..'E','Z']; A := [1..100,140..200]; L := []; Chóng ta kh«ng thÓ g¸n L := [3,5] v× kiÓu c¬ b¶n cña chóng kh«ng t ¬ng thÝch víi nhau 2. PhÐp hîp Hîp cña 2 tËp lµ mét tËp cã c¸c phÇn tö thuéc hai tËp §îc kÝ hiÖu b»ng dÊu + VD : A := [3..5]; B := [4..6,10,123]; C := A+B; { TËp C sÏ lµ [3..6,10,123] } 3. PhÐp giao Giao cña 2 tËp lµ mét tËp cã c¸c phÇn tö n»m trong c¶ 2 tËp §îc kÝ hiÖu b»ng dÊu * VD : Víi VD trªn ta g¸n C := A*B; TËp C sÏ lµ [4,5] 4. PhÐp hiÖu HiÖu cña 2 tËp lµ tËp c¸c phÇn tö thuéc tËp thø nhÊt nhng khån thuéc tËp thø hai. VD : Víi VD trªn ta g¸n C := A-B; TËp C sÏ lµ [3]; C := B-A; TËp C sÏ lµ [6,10,123]; 5. PhÐp thö "thuéc vÒ" Lµ mét phÐp thö ®Ó xem mét biÕn, hay mét gi¸ trÞ cã thuéc mét tËp nµo ®ã kh«ng VD : §Ó thö biÕn ch cã n»m trong c©u tr¶ lêi Cã b»ng tiÕng ViÖt hoÆc b»ng tiÕng Anh lµ Yes kh«ng, b»ng c¸ch th«ng th êng ta viÕt IF(Ch='Y')or(Ch='y')or(Ch='C')or(Ch='c')THEN ... Song ta cã thÓ viÕt ng¾n gän víi phÐp thö IN nh sau : IF Ch in['Y','y','C','c'] THEN 6. C¸c phÐp so s¸nh ,=,= Hai tËp ®îc ®em ra so s¸nh tr íc hÕt ph¶i cã cïng kiÓu c¬ b¶n. KÕt qu¶ cña phÐp so s¸nh lµ gi¸ trÞ kiÓu Boolean tøc lµ : §óng(TRUE) hoÆc Sai(FALSE) Hai tËp b»ng nhau nÕu chóng cã phÇn tö nh nhau tõng ®«i mét (kh«ng kÓ thø tù s¾p xÕp trong 2 tËp) Ngîc l¹i víi phÐp = lµ phÐp so s¸nh kh¸c nhau PhÐp so s¸nh = sÏ cã gi¸ trÞ TRUE nÕu tÊt c¶ phÇn tö tËp thø hai ®Òu thuéc tËp thø nhÊt Chó ý : Trong Pascal kh«ng tån t¹i phÐp so s¸nh . Muèn so s¸nh lín h¬n hay nhá h¬n ta dïng thñ thuËt sau. IF (Abegin clrscr;{Xo¸ mµn h×nh} a:=[];b:=[];{G¸n tËp A vµ B b»ng rçng} writeln('Nhap tap A'); repeat readln(i);{§äc i} if i>0 then a:=a+[i];{NÕu i>0 th× céng i vµo tËp A} until i=0;{Cho ®Õn khi i=0} writeln('Nhap tap B'); repeat readln(i);{§äc I} if i>0 then b:=b+[i];{NÕu i>0 th× céng i vµo tËp B} until i=0;{Cho ®Õn khi i=0} Writeln('Giao'); t:=a*b;{G¸n t b»ng giao cña A vµ B} for i:=1 to 99 do{Cho i ch¹y tõ 1 ®Õn 99} if i in t then write(i,' ');{NÕu i thuéc t th× xuÊt i} writeln; writeln('Hop'); t:=a+b;{G¸n t b»ng hîp cña A vµ B} for i:=1 to 99 do{Cho i ch¹y tõ 1 ®Õn 99} if i in t then write(i,' ');{NÕu i thuéc t th× xuÊt i} readln; end. Bµi 2: { NhËp N. ViÕt ch¬ng tr×nh t¹o ra mét tËp sè ngÉu nhiªn trong kho¶ng tõ 0..255 b»ng c¸ch : - T¹o ra ngÉu nhiªn N sè trong kho¶ng tõ 0..255 TÝnh phÇn bï cña tËp ®ã VD : N=5 cã 6 sè : 0 1 2 3 6 2 th× tËp ®ã lµ [0..3,6] phÇn bï cña nã [4,5,7..255]} uses crt; var th:set of byte;{TËp th kiÓu byte} i,a,n:integer;{i,a,n kiÓu integer} begin clrscr;{Xo¸ mµn h×nh} randomize; write('N = ');readln(n);{§äc N} th:=[];{G¸n tËp th b»ng rçng} for i:=1 to n do{Cho i ch¹y tõ 1 ®Õn n} begin a:=random(256);{G¸n a b»ng sè ngÉu nhiªn trong kho¶ng 0..255} th:=th+[a];{Céng a vµo th} end; writeln('Phan bu'); th:=[0..255]-th;{G¸n th b»ng phÇn bï cña nã} for i:=0 to 255 do{Cho i ch¹y tõ 0 ®Õn 255} if i in th then write(i,' ');{NÕu i thuéc th th× xuÊt i} readln; end. Bµi 3: { NhËp sè N (N clrscr;{Xo¸ mµn h×nh} randomize; write('N = ');readln(n);{§äc N} for i:=1 to n do th[i]:=[];{G¸n th[1]..th[n] b»ng rçng} for i:=1 to n do{Cho i ch¹y tõ 1 ®Õn n} for j:=1 to 100 do{Cho j ch¹y tõ 1 ®Õn 100} begin a:=random(256);{G¸n a b»ng sè ngÉu nhiªn trong kho¶ng 0..255} th[i]:=th[i]+[a];{Céng a vµo th[i]} end; max:=0;{G¸n max b»ng 0} for i:=1 to n do{Cho i ch¹y tõ 1 ®Õn n} begin writeln('So phan tu tap ',i,' : ',sopt(th[i]));{XuÊt sè phÇn tö tËp i} if max th:set of byte;{th kiÓu byte} begin clrscr;{Xo¸ mµn h×nh} write('N = ');readln(n);{§äc N} th:=[];{G¸n th b»ng rçng} for i:=1 to n do{Cho i ch¹y tõ 1 ®Õn n} begin repeat a:=random(n)+1 until not(a in th);{G¸n a b»ng sè ngÉu nhiªn tõ 1..n cho ®Õn khi a kh«ng thuéc th} write(a,' ');{XuÊt a} th:=th+[a];{Céng a vµo th} end; readln; end. Bµi 5: { NhËp N (N N ra khái th C¸c phÇn tö cßn l¹i chÝnh lµ c¸c sè nguyªn tè} uses crt; var i,n:byte;{i,n kiÓu byte} th:set of byte;{TËp th kiÓu byte} a:integer;{a kiÓu integer} begin clrscr;{Xo¸ mµn h×nh} write('N = ');readln(n);{§äc N} th:=[2..n];{G¸n th b»ng [2..n]} for i:=2 to trunc(sqrt(n))do{Cho i ch¹y tõ 2 ®Õn trunc(sqrt(n))} if i in th then{NÕu i thuéc th} begin a:=i*i;{G¸n a b»ng i*i} while a a:=a+i;{T¨ng a thªm i ®¬n vÞ} end; end; for i:=2 to n do{Cho i ch¹y tõ 1 ®Õn n} if i in th then write(i:4);{NÕu i thuéc th th× xuÊt i} readln; end. Bµi 6: { NhËp vµo mét ch÷ chuçi kÝ tù. Xem cã bao nhiªu lo¹i kÝ tù xuÊt hiÖn trong ®ã VD : "abcdeDcB" Cã 7 lo¹i kÝ tù H íng dÉn Khai b¸o th lµ tËp hîp kiÓu kÝ tù for i=1 -> length(s)do th:=th+[s[i]]; Sau ®ã for i:=0 to 255 do NÕu chr(i)xuÊt hiÖn trong TH th× t¨ng dem len 1} uses crt; var s:string;{X©u S} i,dem:byte;{i,dem kiÓu byte} th:set of char;{TËp th} begin clrscr;{Xo¸ mµn h×nh} write('S = ');readln(s);{§äc S} th:=[];{G¸n th b»ng rçng} for i:=1 to length(s)do{Cho i ch¹y tõ 1 ®Õn chiÒu dµi x©u S} th:=th+[s[i]];{Céng s[i] vµo th} dem:=0;{G¸n dem b»ng 0} for i:=0 to 255 do{Cho i ch¹y tõ 0 ®Õn 255} if chr(i)in th then inc(dem);{NÕu kÝ tù cã m· lµ i cã trong th th× t¨ng dem} writeln(dem);{XuÊt dem} readln; end. Bµi 7: { ViÕt ch¬ng tr×nh nhËp vµo mét chuçi kÝ tù a. TÝnh c¸c tËp sau - TËp A chØ chøa c¸c ch÷ c¸i hoa - TËp B chØ chøa c¸c ch÷ c¸i th êng - TËp C chØ chøa c¸c ch÷ sè - TËp D chøa mäi kÝ tù con l¹i b. In ra mµn h×nh c¸c tËp ®ã} uses crt; var s:string;{X©u S} a,b,c,d:set of char;{TËp a,b,c,d kiÓu kÝ tù} i:byte;{i kiÓu byte} ch:char;{ch kiÓu kÝ tù} begin clrscr;{Xo¸ mµn h×nh} write('S = ');readln(S);{§äc S} a:=[];b:=[];c:=[];d:=[];{G¸n a,b,c,d b»ng rçng} for i:=1 to length(s)do{Cho i ch¹y tõ 1 ®Õn chiÒu dµi x©u S} if s[i]in['A'..'Z']then a:=a+[s[i]]{NÕu s[i]thuéc 'A'..'Z' th× céng s[i] vµo tËp A} else if s[i]in['a'..'z']then b:=b+[s[i]]{Ng îc l¹i nÕu s[i]thuéc 'a'..'a' th× céng s[i] vµo tËp B} else if s[i]in['0'..'9']then c:=c+[s[i]]{Ng îc l¹i nÕu s[i]thuéc '0'..'9' th× céng s[i] vµo tËp C} else d:=d+[s[i]];{Ngîc l¹i nÕu th× céng s[i] vµo tËp D} writeln('Tap A'); for ch:='A' to 'Z' do{Cho ch ch¹y tõ 'A' ®Õn 'Z'} if ch in a then write(ch,' ');{NÕu ch thuéc tËp A th× xuÊt ch} writeln; writeln('Tap B'); for ch:='a' to 'z'do{Cho ch ch¹y tõ 'a' ®Õn 'a'} if ch in b then write(chr(i),' ');{NÕu ch thuéc tËp B th× xuÊt ch} writeln; writeln('Tap C'); for ch:='0' to '9'do{Cho ch ch¹y tõ '0' ®Õn '9'} if ch in c then write(chr(i),' ');{NÕu ch thuéc tËp C th× xuÊt ch} writeln; writeln('Tap D'); for i:=0 to 255 do{Cho i ch¹y tõ 0 ®Õn 255} if chr(i)in d then write(chr(i),' ');{NÕu kÝ tù cã m· i thuéc tËp D th× xuÊt kÝ tù ®ã} readln; end. Bµi 8: { ViÕt thñ tôc tracnghiem(s,sa,sb,sc,sd:string;kq:char); Thñ tôc sÏ in ra c©u hái s vµ c¸c c©u lùa chän sa,sb,sc,sd. Sau ®ã ch¬ng tr×nh sÏ ®îi ®Õn khi ngêi dïng Ên c¸c phÝm A,B,C,D. So s¸nh kÕt qu¶ ®ã víi kq. NÕu ®óng th× in ra "Ban tra loi dung" ngîc l¹i in ra " Ban tra loi sai"} uses crt; procedure tracnghiem(s,sa,sb,sc,sd:string;kq:char); var ch:char;{Khai b¸o ch kiÓu kÝ tù} begin clrscr;{Xo¸ mµn h×nh} writeln(s);{XuÊt S} writeln(sa);{XuÊt sa} writeln(sb);{XuÊt sb} writeln(sc);{XuÊt sc} writeln(sd);{XuÊt sd} repeat ch:=upcase(readkey) until ch in['A'..'D'];{NhËn ch cho ®Õn khi ch lµ c¸c phÝm A,B,C,D} if ch=upcase(kq)then writeln('Ban tra loi dung'){NÕu ch b»ng kÝ tù kq th× xuÊt §óng} else writeln('Ban tra loi sai');{Ngîc l¹i th× xuÊt Sai} readln; end; begin tracnghiem('Bo nho co may loai','a. 1','b. 2','c. 3','d. 4','b'); end.
DMCA.com Protection Status Copyright by webtailieu.net