Click here to load reader

Zadaci i pripreme · PDF file Zadaci i pripreme

  • View
    120

  • Download
    4

Embed Size (px)

Text of Zadaci i pripreme · PDF file Zadaci i pripreme

  • 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