Sunteți pe pagina 1din 0

Tipul mulime

Consideraii teoretice
Operaii
Probleme propuse
Soluiile problemelor propuse
Capitolul
13


13.1. Consideraii teoretice
Tipul mulime este un tip structurat, total diferit de celelalte tipuri structurate; el co-
respunde noiunii de mulime din matematic. O valoare a unui tip mulime este o sub-
mulime a valorilor unui tip ordinal, standard sau definit de utilizator, numit tipul de
baz al mulimii. Tipul de baz al mulimii n Pascal are cel mult de 256 de valori or-
dinale care trebuie s aparin intervalului [0, 255].
Un tip mulime are attea valori cte submulimi admite mulimea valorilor tipului
de baz, inclusiv mulimea vid, respectiv 2
n
submulimi, dac tipul de baz are n va-
lori (n 256). Datorit modului de reprezentare intern a mulimilor, operaiile cu da-
tele de tip mulime se execut extrem de rapid.

13.2. Operaii

13.2.1. Atribuirea
Variabilele de tip mulime pot fi iniializate doar prin atribuire. O variabil de tip
mulime nu poate fi citit sau afiat.
Prin instruciunea de atribuire, unei variabile de tip mulime i se atribuie valoarea
unei expresii de acelai tip mulime, cuprinznd: constructori de mulime, variabile,
constante i operatori.
Constructorul de mulime definete o valoare de tip mulime, enumernd valorile
care formeaz mulimea respectiv sau preciznd valorile prin intermediul unui tip
subdomeniu (expresie
1
..expresie
2
). Mulimea vid se reprezint prin constructorul de
mulime []; expresie
1
i expresie
2
trebuie s aib acelai tip ordinal cu tipul de baz al
mulimii.
13. Tipul mulime 135

Exemplu
var operatori:set of Char;
a:set of 'A'..'Z';
x,y:set of Byte;
zile:set of (luni,marti,miercuri,joi,vineri,sambata);
k:Byte;
begin
operatori:=['+','-','*','/']; { operatorii aritmetici }
a:=['M','N','A'..'G']; { literele M,N,A,B,C,D,E,F,G }
x:=[]; { mulimea vid }
k:=100;
x:=[k-10..k+50]; { mulimea format din k-10, k-9, ... , k+50 }
zile:=[sambata] { mulimea format din sambata }
end;

Reuniunea a dou mulimi se obine cu operatorul +, intersecia cu *, iar diferena
cu .

Exemplu
Considernd declaraiile din exemplul anterior, se pot face urmtoarele atribuiri:
a:=['A','G','P'];
a:=a + ['X','Y','P'];
x:=[0..9];
y:=[0,10] + [15];
x:=x*y;

Operatorii relaionali (cu excepia operatorilor <, >) aplicai unor date de acelai tip
mulime dau un rezultat de tip boolean.

13.2.2. Selectarea unei componente
Elementele unei date de tip mulime nu pot fi accesate direct, dar putem verifica
apartenena unui element la data respectiv, folosind operatorul relaional in.
Expresia relaional: x in Y, unde Y este o mulime, iar x este o expresie de ace-
lai tip ordinal cu tipul de baz al mulimii Y are valoarea adevrat dac valoarea ex-
presiei reprezint un element din Y i valoarea fals n caz contrar.

Citirea unei mulimi se realizeaz (oarecum asemntor tablourilor), construind
element cu element mulimea, unde elementele pot fi citite sau calculate. Afiarea se
realizeaz cu o structur repetitiv care trebuie s genereze valorile tipului de baz una
dup alta. n corpul structurii se verific apartenena unei astfel de valori la mulimea
care este n curs de afiare.
136 13. Tipul mulime

13.3. Probleme propuse

13.3.1. Mulimi de caractere
Se citesc n cuvinte formate numai din litere mici ale alfabetului latin. S se afieze
mulimea literelor din care este format fiecare cuvnt i mulimea literelor care apar n
toate cuvintele date.

Date de intrare
Se d un numr natural n, reprezentnd numrul de cuvinte, apoi se dau pe rnd cuvin-
tele.

Date de ieire
Se vor afia mulimile de litere din care este format fiecare cuvnt, cte o mulime pe
fiecare linie. Pe linia n + 1 se vor afia caracterele care apar n toate cele n cuvinte.

Restricii i precizri
2 n 10;
datele de intrare sunt ntotdeauna corecte;
cuvintele nu au lungime mai mare de 30 de caractere.

Exemplu
Intrare
n=3
baraca
caiac
marmura
Ieire

a b c r
a c i
a m r u
a
Explicaie

Literele din care este format fiecare cuvnt

Singura liter care apare n toate cuvintele este litera 'a'

13.3.2. Diferena simetric
Se dau dou mulimi ale cror elemente sunt numere naturale n intervalul 0..255. S
se afieze diferena simetric a celor dou mulimi.

Date de intrare
Se d un numr natural n
1
i apoi n
1
valori cu ajutorul crora se construiete prima
mulime. Apoi se citete numrul natural n
2
i cele n
2
valori cu care se va construi cea
de a doua mulime.

Date de ieire
Se va afia diferena simetric a celor dou mulimi.

13. Tipul mulime 137

Restricii i precizri
1 n
1
, n
2
255;
datele de intrare sunt ntotdeauna corecte;
valorile cu care se formeaz o mulime nu sunt neaprat distincte.

Exemplu
Intrare
n1=3
6 9 14

n2=5
1 14 11 5 6
Ieire

1 5 9 11
Explicaie

Elementele din prima mulime care nu aparin
celei de a doua i elementele celei de a doua
mulimi care nu aparin celei dinti.

13.4. Soluiile problemelor propuse

13.4.1. Mulimi de caractere
Vom rezolva aceast problem cu ajutorul tipului mulime. Vom defini un tip mulime
sub forma:
type TMultime=set of 'a'..'z';

Vom declara un vector avnd componentele de tipul TMultime i vom construi
fiecare mulime pe baza literelor din cuvntul cu care este asociat. Apoi vom afia pe
rnd mulimile determinate i, la sfrit, vom afia intersecia tuturor celor n mulimi
afiate anterior.

Algoritm Mulimi:
{ iniializm toate mulimile cu mulimea vid }
{ mulimea c[11] va fi intersecia cerut }
pentru i=1,11 execut:
c[i] []
sfrit pentru
citete n { numrul cuvintelor }
pentru i=1,n execut:
citete cuvnt
{ construim mulimea literelor cuvntului }
pentru k=1,lungimea cuvntului cuvnt execut:
c[i] c[i] + [cuvnt[k]] { adugm pe rnd literele }
sfrit pentru
sfrit pentru
c[11] c[1]

138 13. Tipul mulime

pentru i=2,n execut:
c[11] c[11]*c[i] { literele comune tuturor cuvintelor }
sfrit pentru
pentru i=1,11 execut: { afim mulimile pe rnd }
dac c[i] [] atunci
pentru ch='a','z' execut:
dac ch c[i] atunci
scrie ch
sfrit dac
sfrit pentru
sfrit dac
sfrit pentru
sfrit algoritm

13.4.2. Diferena simetric
Am mai ntlnit aceast problem atunci cnd am reprezentat mulimile sub form de
tablouri unidimensionale.
Va fi util s definim tipul mulime specific acestei probleme sub forma:
type TMultime=set of Byte;

n rest, va trebui s aplicm cunotinele de matematic i de programare pentru a
calcula i a afia rezultatul cerut.

S-ar putea să vă placă și