Sunteți pe pagina 1din 8

Ministerul Educatiei din Republica Moldova

Universitatea Tehnica din Moldova


FCIM

Raport

Lucrare de laborator
nr.1
DPP

VARIANTA 8

A efectuat: st.gr MAI-211


Gorea Filip

A verificat:
Kulev Mihail

Chisinau 2021
LUCRARE DE LABORATOR NR. 1

Tema: Clase și obiecte. Constructorii și destructorul clasei


Scopul lucrării:
 Studierea principiilor de definire şi utilizare a constructorilor
 Studierea principiilor de definire şi utilizare a destructorilor
 Studierea tipurilor de constructori

Varianta 8

Să se creeze clasa Set – mulţimea numerelor întregi, utilizînd memoria dinamică. Să se definească
constructorii: implicit şi de copiere. Să se definească funcţiile: de adăugare a unui element nou în mulţime;
de determinare a apartenenţei elementului la mulţime; de adunare, scădere şi intersecţie a două mulţimi.

Listingul programului:

a)
#include <iostream>

using namespace std;


class Set
{
int *elem;
int nrelem;
public:

Set(){};

Set operator+(Set &right)


{
Set value;
int k = 0;

value.nrelem = this->nrelem;
value.elem = new int[this->nrelem + right.nrelem];
int i;

for (i = 0; i < this->nrelem; i++)


{
value.elem[i] = this->elem[i];
k++;
}

for (i = 0; i < right.nrelem; i++)


{
int plu = 0;
for (int j = 0; j < this->nrelem; j++)
{
if (value.elem[j] == right.elem[i])
{
plu = 1;
break;
}
}
if (plu == 0)
value.elem[k++] = right.elem[i];
}
value.nrelem = k;
return value;
}

Set operator*(Set &right)


{
int c = 0;
Set value;
value.elem = new int[this->nrelem + right.nrelem];
for (int i = 0; i < this->nrelem; i++)
{
int j = 0, k = 0;
while (right.elem[j] != this->elem[i] && j < right.nrelem) j+
+;
while (value.elem[k] != this->elem[i] && k < c)
k++;
if (j != right.nrelem && k == c)
value.elem[c++] = this->elem[i];
}
value.nrelem = c;
return value;
}

Set operator-(Set &right)


{
int c = 0;
Set value;
value.elem = new int[this->nrelem + right.nrelem];
for (int i = 0; i < this->nrelem; i++)
{
int j = 0, k = 0;
while (right.elem[j] != this->elem[i] && j < right.nrelem) j+
+;
while (value.elem[k] != this->elem[i] && k < c)
k++;
if (j == right.nrelem && k == c)
value.elem[c++] = this->elem[i];
}
value.nrelem = c;
return value;
}

friend Set operator+=(Set &left, int nr)


{
Set value;

int num = left.nrelem;


value.nrelem = left.nrelem + nr;
value.elem = new int[left.nrelem + nr];
for (int j = 0; j < left.nrelem; j++)
{
value.elem[j] = left.elem[j];
}
for (int i = num; i < value.nrelem; i++)
{
int elem;
cin >> elem;
value.elem[i] = elem;
}
left.nrelem = value.nrelem;
left.elem = new int[value.nrelem];
for (int k = 0; k < value.nrelem; k++)
{
left.elem[k] = value.elem[k];
}
return left;
}

friend bool operator==(Set &left, Set &right)


{
if (left.nrelem == right.nrelem)
{
int c;
for (int k = 0; k < left.nrelem; k++)
{
c = 0;
for (int g = 0; g < right.nrelem; g++)
{
if (left.elem[k] == right.elem[g])
{
c = 1;
}
}
}

if (c == 1)
{
return 1;
}
else
return 0;
}
else
cout << "Dati alte multimi" << endl;

return 0;
}

friend ostream &operator<<(ostream &out, const Set &c)


{
for (int i = 0; i < c.nrelem; i++)
{
out << c.elem[i] << " ";
}
out << endl;

return out;
}

friend istream &operator>>(istream &in, Set &c)


{

cout << "Dati nr elemente=";


in >> c.nrelem;
c.elem = new int[c.nrelem];
int e;
cout << "Dati elemente ale multimii" << endl;
for (int i = 0; i < c.nrelem; i++)
{
in >> e;
c.elem[i] = e;
}

return in;
}

void check(int val)


{
int v=0;
for(int i=0;i<this->nrelem;i++)
{
if(val==this->elem[i]){
v=1;
}

}
if(v==1){
cout<<"Apartine multimii"<<endl;
}
else cout<<"Nu apartine multimii"<<endl;
}
};

int main()
{
Set s1;
cin >> s1;
Set s2;
cin >> s2;
int option;
do
{
cout << endl;
cout << "1:Reuniunea" << endl;
cout << "2:Intersectie" << endl;
cout << "3:Scaderea" << endl;
cout << "4:Adaugarea in multime" << endl;
cout << "5:Echivalenta multimilor" << endl;
cout << "6:Verificarea apartenentei" << endl;
cout << "7:Exit" << endl;
cout << "Alegeti optiunea=";
cin >> option;
cout << endl;
switch (option)
{
case 1:
{
Set s3;
s3 = s1 + s2;
cout << s3;
}
break;
case 2:
{
Set s4;
s4 = s1 * s2;
cout << s4;
}
break;
case 3:
{
Set s5;
s5 = s1 - s2;
cout << s5;
}
break;
case 4:
{
cout<<s2;
int numar;
cout << "Dati nr.elem de adaugat=";
cin >> numar;
s2 += numar;
cout << s2;
}
break;
case 5:
{
cout << s1;
cout << s2;
cout << "Echivalenta prima multime si a doua multime" << (s1 == s2)
<< endl;
}
break;
case 6:
{
cout<<s1;
int valoare;
cout<<"Dati valoare de verificat=";
cin>>valoare;cout<<endl;
s1.check(valoare);
}
break;
case 7:;
break;
default:
cout << "Alegeti alta optiune" << endl;
}

} while (option != 7);

return 0;
}
Exemplu de executare a programului:

a)

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