Sunteți pe pagina 1din 5

LUCRARE DE LABORATOR NR.

Tema: Mulțimi.

I. Obiectivele temei.
I.1. Să precizeze mulțimea de valori și operațiile admise pentru oricare tip de date mulțime.
I.2. Să elaboreze programe în care se utilizează tipuri de date mulțime.
II. Conținutul temei.

Un tip de date mulțime se definește în raport cu un tip de bază care trebuie să fie ordinal:

<Tip multime>::=[packed] set of <Tip>

Valorile unui tip de date set sînt mulțimi formate din valorile tipului de bază. Dacă tipul
de bază are n valori, tipul mulțime va avea 2n valori. În implementările limbajului
valoarea lui n este limitată, de regulă <= 256.

Putem avea mulțimi de caractere și mulțimi de numere byte (256 de caractere).


 Pentru a declara o mulțime:
Type multime=set of 0..9;
var mc:multime;
ml:set of ‘A’..’Z’;
mk:set of char;
 Obs! Constantele de tip mulțime se numesc constructori.
Un constructor conține între paranteze pătrate elementele membre ale mulțimii.

Ex!

mc:=[0..2,5..9];

Mulțimea de litere ia valoarea: ml:=[];{mulțimea vidă}

 Mulțimea de caractere ia valoarea: mcar:=[a..f,0..3,’+’,’*’];

Operații cu mulțimi

Operația de incluziune: m1<=m2;{verifică dacă m1 este inclusă sau egal cu m2}

m1>=m2;{incluziunea inversă}

m1=m2;{egalitatea}

m1<>m2;{diferit}

Obs!Nu există mai mare strict!>,<;EROARE!

Operatorul de apartenență!

x in m verifică dacă x aparține mulțimii m

not (x in m) dacă x nu aparține mulțimii


 + reuniunea

m:=m1+m2;

m:=[1..3,5,,9]+[6..8];

* intersecția

mi:=m1*m2;

- diferența

md:=m1-m2;

Citirea unei mulțimi:

-se inițializează mulțimea cu mulțime vidă

-într-o structură repetitivă se citește fiecare element al mulțimii și se face reuniune între
vechea mulțime, și mulțimea formată din elementul curent;

var m:set of byte; n,i,e:byte;


begin

m:=[];

write('n:=');readln;

for i:=1 to n do begin

write('Elementul ',i,' este:');

readln(e);{elementul curent}

m:=m+[e];

end;

Afișarea unei mulțimi

-se parcurge cu for mulțimea elementelor tipului de bază a mulțimii și utilizând operatorul de
apartenență in se verifică dacă elementul curent aparține mulțimii;

for i:=1 to 255 do

if i in m then write(i,' ');

OBS!Dacă m este de tip char, atunci se verifică în funcție de codul ASCII!

for i:=1 to 255 do

if chr(i) in m then write(chr(i),' ');


SAU

for c:=chr(0) to chr(255) do


if c in m then write(i)
III. Trasarea problemei.
III.1. Elaborarea sarcinii conform variantelor propuse din anexa 5.
III.2. Rezultatele obținute vor fi realizate integral în caiete.

IV. Conținutul raportului.


IV.1. Formularea matematică a problemei.
IV.2. Schema bloc a programului.
IV.3. Textul programului în limbajul Pascal.
IV.4. Rezultatele obținute la execuția programului.
IV.5. Caracterizați erorile admise pe parcursul efectuării lucrării.
V. Exemplu de program.
1. Efectuarea tuturor operațiilor cu ajutorul tipului de date mulțime(set):

Program p1;
{date de tip MultimeIndicii}
Type Indice=1..10;
MultimeIndicii=set of Indice;
Var A,B,C:MultimeIndicii;
i:integer;
Begin
A:=[1..5,8]; {A contine 1,2,3,4,5,8}
B:=[1..3,9,10]; {B contine 1,2,3,9,10}
C:=[]; {C este o multime vida}
C:=A+B; {C contine 1,2,3,4,5,8,9,10}
Write('Reuniunea');
For i:=1 to 10 do
if i in C then write(i:3);
Writeln;
C:=A*B; {C contine 1,2,3}
Writeln('Intersectia:');
For i:=1 to 10 do
if i in C then write(i:3);
writeln;
C:=A-B; {C contine 4,5,8}
Writeln('Diferenta:');
For i:=1 to 10 do
if i in C then write(i:3);
writeln;
readln; End.

2. Fie mulțimele A={1,3,5,7,8}, B={1,a,3,5,7,8,9,d}. Să se calculeze mulțimea

program set1;
var a,b,c:set of char;
i:integer;
begin
A:=['1','3','5','7','8'];
B:=['1','a','3','5','7','8','9','d'];
C:=(A+B) - (A*B);
for i:=1 to 255 do
if chr(i) in C then write(chr(i),' ');
readln
end.

3. Fie mulţimile A, C  cu elemente de tip intreg, care se vor culege de la


tastatura. Să se creeze un program care să afișeze elementele mulțimii X=A+C.

program p1;
type Indice=1..10;
MultimeIndicii=set of Indice;
Var A,C,X:MultimeIndicii;
i,n,e:integer;
begin
write('n='); readln(n);
A:=[];
for i:=1 to n do begin
write('Elementul ',i,' este:');
readln(e);
A:=A+[e];
end;
C:=[];
for i:=1 to n do begin
write('Elementul ',i,' este:');
readln(e);
C:=C+[e];
end;
X:=A+C;
for i:=1 to 255 do
if i in X then write(i,' ');
readln
end.

Anexa nr. 5.

Sarcina: Fie mulţimile A, B,C,D  cu elemente de tip intreg, care se vor culege de la tastatura.
Să se creeze un program care va rezolva problema propusă conform variantei.

Variantele lucrarii de laborator:

1. Să se afișeze elementul maxim al mulţimii: Z=A*B-C+D;


2. Să se afișeze elementul minim al mulțimii: Z=A-B+C*D;
3. Să se afișeze suma elementelor mulțimii: Z=A+(B-C)*D;
4. Să se afișeze produsul elementelor mulțimii: Z=B+C-A*D; 16
5. Să se afișeze elementele mulțimii X=A+B;
6. Să se afișeze elementele mulțimii X=A+C;
7. Să se afișeze produsul elementelor impare ale mulțimii: Z=A+B+C*D;
8. Să se afișeze suma elementelor pare ale mulțimii: Z=A+B+C-D;
9. Să se afișeze media aritmetică a mulțimii: Z=A-B+C-D;
10. Să se afișeze elementele mulțimii A care nu se conțin în mulțimea: Z=A-B*C-D;
11. Să se afișeze produsul elementelor pare ale mulțimii: Z=A*B+C-D;
12. Să se afișeze suma elementelor impare ale mulțimii: Z=B-C*A+D;

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