Sunteți pe pagina 1din 4

7.

TIPURI STRUCTURATE DE DATE


7.3 TIPUL MULIME
7.3.1 Noiuni introductive
Limbajul de programare Pascal permite definirea mulimilor n sensul cunoscut din matematic, cu ajutorul
tipului structurat de date tipul mulime.
Pentru a memora efectiv o mulime trebuie s se declare o variabil.
Sintaxa: var <identificator_de_variabil> : set of <tip_elem>;
unde <identificator_de_variabil> - este identificatorul (numele) variabilei de tipul mulime
<tip_elem> - este tipul elementelor mulimii, numit tip de baz.Tipul de baz al elementelor trebuie s
fie un tip ordinal care poate cuprinde maxim 256 valori, iar ordinul elementelor care alctuiesc tipul de baz
trebuie s fie cuprins ntre 0 i 255.Deci tipul de baz poate fi:
predefinit
- byte
- char
- boolean
definit de utilizator
- enumerare
- subdomeniu
Ex 7.3.1.1 (corect): var A : set of byte;
culoare : set of (rosu,albastru,verde);
C : set of char;
numere : set of 30..100;
B : set of boolean;
litera : set of a..z;
Ex 7.3.1.2 (incorect):
var A1 : set of integer; {tipul de baz conine mai mult de 256 valori: [-32768,32767]}
A2 : set of longint; {[-2147483648,2147483647]}
A3 : set of word; {[0,65535]}
B1 : set of shortint; {tipul de baz conine 256 valori [-128,127],dar ordinul lor nu este cuprins ntre }
{0 i 255}
B2 : set of 0..300; {tipul de baz conine mai mult de 256 valori,iar ordinul lor este mai mare de 255}
B3 : set of 128..328; {tipul de baz conine 200 valori,dar ordinul lor este mai mare dect 255}
Toate tipurile de date set of de mai sus sunt anonime.Dar orice tip anonim poate fi denumit cu ajutorul
cuvntului cheie type.
Sintaxa: type <id_tip> = set of <tip_elem>;
unde <id_tip> - este identificatorul (numele) tipului mulime definit
<tip_elem> - este tipul de baz al elementelor mulimii
Ex 7.3.1.3: type numere=set of byte;
var A : numere;

7.3.2 Constructori de mulimi


Definiie 7.3.2.1 Un constructor de mulime are rolul de a descrie mulimea, prin enumerarea elementelor
care o alctuiesc ntre paranteze ptrate, elementele fiind separate prin virgul.n aceast enumerare se pot
folosi constante i subdomenii.
Ex 7.3.2.2: [ ] reprezint mulimea vid
[1,2,3] reprezint mulimea {1,2,3}
[a..d] reprezint mulimea {a,b,c,d}
[1..3,5,6,7] reprezint mulimea {1,2,3,5,6,7,}
Unei variabile i se poate atribui ca valoare o mulime prin enumerarea elementelor sale, adic folosind
constructorii de mulimi.
Ex 7.3.2.3: program ex;
type litere_mici=set of a..z;
var m,m1,m2:litere_mici;
begin

m:=[ ]; {mulimea vid}


m1:=[a,b,c]; (*mulimea {a,b,c}*)
m2:=[e..g,z] (*mulimea {e,f,g,z}*)
end.

7.3.3 Operatorii aplicabili tipului mulime


a) Operatori aritmetici
+ realizeaz reuniunea a dou mulimi. Reuniunea a dou mulimi A i B este mulimea format din
elementele ambelor mulimi luate o singur dat (toate elementele lui A la care se adaug elementele lui B
care nu aparin lui A) (vezi Ex 7.3.3.2, programul ex2)
* realizeaz intersecia a dou mulimi.Intersecia a dou mulimi A i B reprezint mulimea format
din elementele comune celor dou mulimi (vezi Ex 7.3.3.2, programul ex2)
- realizeaz diferena a dou mulimi.Diferena a dou mulimi A i B este mulimea format din
elementele care aparin lui A si nu aparin lui B. (vezi Ex 7.3.3.2, programul ex2)
b) Operatori relaionali
in verific apartenena unui element la o mulime.Este un operator binar.
<elem> in A {testeaz dac elemA} (vezi Ex 7.3.3.2, programul ex1)
not(<elem> in A) {testeaz dac elemA}
<= verific incluziunea.Este un operator binar.
A <= B {testeaz dac mulimea A este inclus n mulimea B} (vezi Ex 7.3.3.2, programul ex3)
>= verific incluziunea.Este un operator binar.
A >= B {testeaz dac mulimea A include mulimea B} (vezi Ex 7.3.3.2, programul ex3)
<> verific dac dou mulimi sunt diferite (difer prin cel puin un element)
A <> B {testeaz dac mulimile A i B sunt diferite} (vezi Ex 7.3.3.2, programul ex3)
= verific dac dou mulimi sunt egale
A = B {testeaz dac mulimile A i B sunt egale} (vezi Ex 7.3.3.2, programul ex3)
Observaia 7.3.3.1 Nu este permis folosirea operatorilor relaionali <, > asupra datelor de tip mulime.
Ex 7.3.3.2:
Program ex1;
type litera_mica=a..z;
{tip subdomeniu al tipului caracter}
multime=set of litera_mica; {tip mulime (al literelor mici)}
var m:multime; l:litera_mica;
begin
m:=[a,b,c];
(* m={a,b,c} *)
for l:=a to z do {se parcurg toate literele mici}
if l in m then write(l:2) {dac o liter se gsete n mulime, atunci aceasta se tiprete}
end.
{adic se tipresc toate elementele mulimii}
Program ex2;
type numere=1..20;
multime=set of numere;
var A,B,C:multime;
begin
A:=[1..5,9]; B:=[2,3,9]; (* A={1,2,3,4,5,9} i B={2,3,9} *)
C:=A+B;
{C=AB}
for i:=1 to 20 do
if i in C then write(i:3); {se tipresc elementele reuniunii: 1,2,3,4,5,9}
C:=A*B;
{C=AB}
for i:=1 to 20 do
if i in C then write(i:3); {se tipresc elementele interseciei: 2,3,9}
C:=A-B;
{C=A-B}
for i:=1 to 20 do
if i in C then write(i:3) {se tipresc elementele diferenei: 1,4,5}

end.
Program ex3;
type numere=1..20;
multime=set of numere;
var A,B,C:multime;
begin
A:=[1,3,7]; B:=[1,3]; C:=[1,7,3];
(* A={1,3,7} B={1,3} C={1,7,3} *)
if A<=B then writeln(A inclusa in B); {se verific dac AB}
if A>=B then writeln(A include pe B); {se verific dac AB}
if A<>B then writeln(A <> B)
{se verific dac A<>B}
else writeln(A =B);
if A=C then writeln(A=C)
{se verific dac A=B}
else writeln(A<>C)
end.

7.3.4 Operaii cu mulimi


1) Atribuirea (vezi 7.3.2 Constructori de mulimi)
2) Citirea unei mulimi
Variabilele de tip mulime nu pot fi citite n mod direct.Pentru a citi o mulime M se procedeaz n felul
urmtor:
se iniializeaz M cu mulimea vid
ntr-un ciclu se citesc pe rnd, n aceeai variabil (de exemplu x), valorile care vor fi elemente ale
mulimii M
dac valoarea citit (adic x) nu exist n M, ea trebuie adugat.Pentru aceasta se va face reuniunea
dintre mulimea format din valoarea citit i mulimea M (prin reuniune fiecare nou x va fi adugat la
mulimea M numai dac valoarea lui x nu exist deja n mulime).
Ex 7.3.4.1:
Program citire_afisare;
var M:set of byte;
x:byte; i,n:integer;
begin
write(Dati numarul de valori: );readln(n); {numrul de elemente ale mulimii}
M:=[ ];
for i:=1 to n do
begin
write(Introduceti valoarea: );readln(x);
{se citete noua valoare care se dorete a se introduce n M}
M:=M+[x]
{se face reuniunea mulimii M cu mulimea format numai din x}
end
write(M={)
{mulimea se scrie ca la matematic ntre acolade}
for i:=0 to 255 do
{se parcurg toate valorile tipului byte}
if i in M then write(i,,); {dac o valoare se gsete n mulimea M,atunci se afieaz}
writeln(#8,}){dup ultima valoare afiat se mai tiparete o virgul;#8(backspace) d cursorul napoi cu o}
end.
{poziie i ca urmare a acestui fapt acolada } se scrie peste ultima virgul}
3) Afiarea unei mulimi
Variabilele de tip mulime nu pot fi afiate n mod direct.Pentru a afia o mulime M se procedeaz n felul
urmtor:
se parcurg ntr-un ciclu toate valorile care fac parte din tipul elementelor mulimii M, adic toate valorile
care teoretic ar putea fi elemente ale mulimii M
pentru fiecare din aceste valori se testeaz dac valoarea respectiv aparine efectiv mulimii, iar n caz
afirmativ se afieaz
(vezi Ex 7.3.4.1)