Click here to load reader
View
120
Download
4
Embed Size (px)
GLAVA 12
Skupovni tiP
Skupovni tip je sredstvo PASCAL-a koje t" 1?.. koristi tako desto' mada
njegovo korisienje u nekim sludajevima znadajno podiZe kompaktnost i ditljivost
ott?;;* je u pASCAL-u nesto uZi od tradicionalnog malem.a-tiltgq
pojma. Skupovni tip ttlp t"il je skup svih podskupova baznog tip?'
"ttji-""J:^it ]
;;;:;;" sk rp. Ako uarni iip, nu ko-e se gradi skupovni tip' ima n elemenata' to ';e
froj podstupova, koji ulaze u skup,jednak 2' '
Baznit ip,nakomesegradikonkretanskupovnit ip,moZebit ib i lokoj iprost tip sa sledeiim ogranidenjima:
- ne sme se koristiti realni tiP; - celobrojni (integer) tip se mora zadavati intervalom'
Skupovni tip je dat sledeiim sintaksnim dijagramom'
Dak le ,skupovn i t ipsezada jekor iS ien jemdverezerv isanered i -se t io f - i baznog tiPa. NaPrimer, za:
tvPe" 'Cifre=set of 1 .'3 ; var
S:Cifre;
promenljivaS-moZeuzimativre{nosti,kojedinesledeiiskupovicelihbrojeva:
1 2 J
1 , 2 1 , 3 2 , 3 1 , 2 , 3
24 Osnovi prosramirania u PASCAL-u
Treba imati u vidu da bazni tip skupa ne moZe imati vi5e od 256 razliditih vrednosti i da u sludaju celih brojeva te vrednosti moraju biti iz intervala od 0 do 255.
Neka su date sledeie definicije i opisi:
type B oj a:(crv ena,zuta,zelena,plav a) ; MesanaBoj a=set of Boja;
var SkupBoja,SkupBojal,SkupBoja2 :MesanaBoja; JednaBoja:Boja; B:boolean;
Ovde je skupovni tip MesanaBoja definisan na baznom tipu Boja. Promenljive SkupBoja, SkupBojal., SkupBoja2 pripadaju skupovnom tipu MesanaBoja.
Za razllku od tradicionalne matematiike notacij e, za ozna(avanje skupova se koriste kvadratne zagrade,unutar kojih se nabrajaju elementi baznog tipa razdvojeni zapetom. U naredbama dodele, promenljive skupovnog tipa se mogu nalaziti i levo i desno od znaka dodele ako su im identidni tipovi.
U sledeiim naredbama dodele koriste se opisane promenljive:
SkupB oj a 1 : : lcrv ena,zuta,zelena] ; SkupBoja2::[]; SkupBoj a I ::[crvena,zuta,zelena,plava] ; SkupBoja2::{plaval;
Ne sme se napisati
SkupBojal ::fcrna]; SkupBoja::[bela];
jer crna i bela boja ne pripadaju baznom tipu skupa. Nad promenljivim i konstantama skupovnog tipa mogu se primeniti operacije
za obr azov anje novih skupova : - unija (+),
- presek (*) i - razlika ().
Ako su Sl i 52 skupovi istog tipa, tada: 1. Unija skupova: S1+S2 sadrii elemente koji pripadaju ili Sl, ili 52, ili i
jednom i drugom, na primer
SkupBoja I ::[crvena,zelena] ; SkupBoja2 ::[zelena,plava] ; SkupB oj a::SkupBoj a I +SkupB oja2;
Vrednost promenljive SkupBoja je skup [crvena,zelena,plava]. Isti se rezultat dobijaposle dodele
SkupBoja::Icrvena,zelena]+[zelena,plava] ;
2. Presek skupova: sl*s2 sadrzi elemente koji pripadaju i skupu s1, i skupu
52, na primer
SkupB oj a 1 : : lctv ena,zuta,Plava] ; SkupBoja2::[Plava]; SkupBoj a ::SkuPBoj a I * SkuPB ojaZ ;
Vrednost promenljive SkupBoja je skup: [plava] ' Ako je
SkupBojal:=[crvena]; SkupBoj a::SkuPBoj a I * [zelena] ;
ro je vrednost promenljive SkupBoja prazan skup '
3. Razlika skupova: s1-s2 sadrZi elemente iz 51, koji ne pripadaju s2, na
:rimer
SkupB oj a I :: fcrv ena,zuta'zelena,plava] ; . Smpe oi a::SicupBoj a 1 - [crvena'zelena,plava] ;
Vrednost prornenljive SkupBoja je skup fzuta] '
U skupovnim izrizimaop"tu.ilu-pteseka ima viSi prioritet od operacija unije i
:azlike. NadpromenljivimikonstantamaSkupovnogtipamoguSeprrmenrtloperac{e
:oredenja: -jednakost (=), - nejednakost (+), - PodskuP (=)' 1. Jednakost i nejednakost skupova:
:lemente. Ako se dva skupa razlikuju oznalava se S 1S2) ' Na Primer'
[zuta]:l'l daje vrednost false;
[crvena,zelena][zuta,plava] daje vrednost true;
z. eodrtup (nadskup): si=S2) daje vrednost_true, ako su svi
elementi S 1 tako
JednaBoja:=zelena; B ::JednaBoj a in SkupBoja2;
vrednost B je false' skupovi se desto koriste za uprosiavanje sloZenih if-ova, na primer
if (e0) or(t=32) or(t=156) or(t=202) then '..
se moZe uprostiti sa iftin [0,32, I 56,202] then ...
u PASCAL-u nije dozvoljeno koristiti celobrojni tip u svojstvu baznog tipa'
Medutim, dozvoljeno ie korisienje njegovog intervala u granicama od 0 do 255. Na
primer, type SkuPl=set of 1..10:
Ako je skup elemenata, koji obrazuju vrednost promenljive skupovnog tipa,
ureden u st l"dulu zadatim baznim tipom, ne moraju se nabrajati svi elementi, vei
samo granidni razdvojeni sa dve taEke:
SkupBoj a:=[cwena'.Plava] ; SkupCifara::[ I 9..98] ;
Primer 1. Napisati proceduru za formiranje simetridne razlike dva skupa A i B
kori5ienjem sledeieg tiPa;
tyPe Alfabeeset of 'a'..'z':
Ovaj problem resava sledeca procedura dodeljujuii simetridnu razliku SkupC:
nrocedure Simetricna(var SkupA.SkupB,SkupC :Alfabet) ;' - I ;it.*..uva simetrictru raztitu za StupA i SkupB
* ) begin
SkupC ::(SkupA- SkupBHSkupB- SkupA) end.
primer 2. Napisati progam kojim se odreduje i ispisuje broj razliditih cifara i
ruzl1(itecifre celog pozitivnog broja N?
u ovom primeru za izJvajanje svake cifre broja N, odredujemo ostatke pn
deljenju N sa jo. Na primer, nlu 3g N=172; t72:10-17 (ostatak je: 2),1,7:10=l
ioriu,uf. j", 7), 1:10{ iostatak je: 1). Ostaci: 2,7 ,l - obrazujubroj 172'
program BrojCifara; var
Cifra:0. '9; N,I,BrojRazlCifara:integer; SkuPCifara: set of 0'.9 ;
begin write('Unesi Prirodan broj :') ; readln(N); SkuPCifara::[]; BrojRazlCifara:=0; rePeat
Cifra::Nmod l0;
Skuoovni tip
l -
then begin
BrojRazlCifara::BrojRazlCifara+ I ; SkupCifara : :SkuPC ifara+ [Cifra]
27
end; N:=Ndiv 10
untilN:0; writeln('Broj razlicitih cifaraje :',BrojRazlCifara) ; writeln('To su cifre:'); forl::0 to 9 do
if I in SkupCifarathen write(I:5); writeln
end. u ovom primeru, operacijom unije (+), promenljiva skupcifara postepeno
prikuplja razne cifre,koje-obrazuju dati broj. operacijom in se proverava pripadnost
skupu tekuie cifre. Primer 3. Napisati program kojim se odreduje i ispisuje skup delitelja brojeva od I
do 100. Rezultat smestiti u niz skupova. Ovde treba iskoristiti dinjenicu da se delitelji broja pojavljuju u parovima
rakvim da je jedan broj manji iti jednak, a drugi veii ili jednak celom delu korena
:roja. Na primer, broj 12 se moZe iztazitikao l2=lx, 12=2*6=3*4
ra se ne moraju traZiti delitelji veii od 3, vei samo u skup delitelja uvrstiti i
lolidnik deljenja broja sa deliteljem manjim ili jednakim 3 '
program Delitelji;- typ. SkuPDel:setof l. '100; var
Broj :anaY[ 1.. I 00] of SkuPDel; BrojDel, I :1. .100;
begin {* Formiranje niza sa deliteljima* } for I:=1 to 100 do
begin Brojll l::[]; for Broj Del :: I to trunc(sqrt(I)) do
if I modBrojDel=0 then Broj[I] ;:Broj [I']+ [Broj Del]+ [I div BrojDel]
end; writeln('Broj evi delitelj i su:') ; for l : :1to l00do
begin writc(I:4,' ':6);
forBrojDel:=l toldo if BroiDel in Broj [I] thenwrite(BrojDel,' l);
writeln end
end.
28 Osnovi programirania u PASCAL-u
Pri koriSienju promenljivih skupovnog tipa treba imati u vidu da je izvr5avanje operacija + i * ekvivalentno izvr5avanju operacija disjunkcije i konjunkcije nad binarnim redima, jer se svakoj vrednosti skupovnog tipa moZe pridruZiti binama red. Naprimer:
I crven a, zuta, zelena,plav a] Icrvena,zuta,zelena] [crvena,zuta] fcrvena,zelena] fcrvena] [plava]
Prema tome, unija:
je ekvivalentno je ekvivalentno jeekvivalentno jeekvivalentno je ekvivalentno je ekvivalentno
111 r 1 l l 0 l 1 0 0 1 0 1 0 l 0 0 0 0 0 0 1
[crvena, zuta] * [crv ena, ze le naf:lcrv ena,zuta,z elenaf jeekvivalentna: I 1 00 + 1 0 I 0=1 I 1 0.
A presek:
[ ] * [crv'ena,zelena,plava]:[ ] je ekvivalentan; 0000 * I 0 I 0=00 00.
Ova analogija nije sludajna, jer je u pojedinim implementacijama maksimalna dimenzija skupa desto ogranidena duZinom registra konkretnog radunara, a svaki el- ement skupa se predstavlja jednim bitom registra. Ako element pripada skupu, to se kodira sa 1. u protivnom 0. Ovakvo kompaktno predstavljanje skupa je moguie zato 5to se i skupovi, kao i nizovi mogu upakovati. Ako postoji potreba da se operi5e sa skupovima koji sadrZe veii broj elemenata nego Sto je bitova u registru, mogu se koristiti nizovi logiEkog tipa koji ie imati ista svojstva kao i skupovi:
var V:array[ I .. I 000] of boolean;
Zadacizavelbu
1. Da li su korektne sledeie definicije i opisi:
a) type
SkupCifara:set of 0.. 9 ; var
B:SkupCifara;
type SkupZnakova:set of ' 0'.. ' 9' ;
var Tabela: arrayf- I 0..+10] of SkupZnakova;
type SkupNizova:set o{array[- I 0.. I 0] ofchar;
var Tabela:SkupNizova;
b)
c)
Skupovni tip 29
2. Ako su date naredbe dodele
r,Crediti skupove koji formiraju sledeii izrazi:
a) SkupA+SkupB; e) SkuPA-SkuPB; b) SkupA*SkupB; f) (SkupA-SkupB)*(SkupC-SkupB); c) SkupA+SkupC; g) SkupA*SkupB*SkupC; d) SkupB*SkupC; h) SkuPC-SkuPC;
3. Odrediti istinitosnu vrednost sledeiih iztaza:
a) 1r,2,3):13,1,2); b) 112,1 4,1 6l:U..301; e) 'B' in [ 'C' . . 'T ' ] ;
4. Ako je dato SkupA:[10], SkupB=[1,3,10], SkupC:[0'1,2,3,4],
: SkupD:[3.4,5,6], odredi rezultat sledeiih izraza:
a) SkupA*SkupB+SkuPC - SkuP