Sunteți pe pagina 1din 15

Ministerul Educatiei din Republica Moldova

Universitatea Tehnica din Moldova


FCIM

Raport
Lucrare de laborator nr.2
Programare in C++

VARIANTA 7

A efectuat: st.gr IA-182


Ionasco Ana

A verificat:
Mititelu Vitalie

Chisinau 2019
LUCRARE DE LABORATOR NR. 2

Tema: Constructorul – funcţie de iniţializare a obiectelor 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 12

а) 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.

b) Să se creeze clasa Matrix – matrice. Clasa conţine pointer spre Complex, numărul de rînduri şi de coloane
şi o variabilă – codul erorii. Să se definească constructorul fără parametri (constructorul implicit),
constructorul cu un parametru – matrice pătrată şi constructorul cu doi parametri – matrice
dreptunghiulară ş. a. Să se definească funcţiile membru de acces: returnarea şi setarea valorii elementului
(i,j). Să se definească funcţiile de adunare şi scădere a două matrice; înmulţirea unei matrice cu alta;
înmulţirea unei matrice cu un număr. Să se testeze funcţionarea clasei. În caz de insuficienţă de memorie,
necorespondenţă a dimensiunilor matricelor, depăşire a limitei memoriei utilizate să se stabilească codul
erorii.

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;
}
b)
#include<conio.h>
#include<iostream>
#include<iomanip>
#include<stdlib.h>

using namespace std;

class matrix
{
private:
double **p;
int rind,col,cod_eror;
public:
matrix();
matrix(int);
matrix(int,int);
~matrix();

void inscriere(int i, int j, int elem)


{
p[i][j]=elem;
}

void afisare()
{
for (int i = 0; i < rind; i++)
{
cout<<" ";
for (int j = 0; j < col; j++)
cout<<setw(5)<<p[i][j]<<" ";
cout<<endl;
}
}

int valoare(int i, int j)


{
return p[i][j];
}
};

matrix :: matrix()
{
p=NULL;
rind=col=0;
};

matrix :: matrix(int n)
{
rind=col=n;
p=new double*[rind];
for (int i = 0; i < rind; i++)
{
p[i]=new double[rind];
for (int j = 0; j < rind; j++)
p[i][j]=0;
}
}

matrix :: matrix(int r, int c)


{
rind=r;
col=c;
p=new double *[rind];
for (int i = 0; i < rind; i++)
{
p[i]= new double [col];
for (int j = 0; j < col; j++)
p[i][j]=0;
}
}

matrix ::~matrix()
{
for (int i=0; i < rind; i++)
for (int j = 0; j < col; j++)
delete[] p[j];
delete [] p;
}
void inmultirea_2matrici()
{
int l1,c1,l2,c2,s;
sus:
system("CLS");
cout<<"Introdu dimensiunea matriciei I:"<<endl;
cout<<"Linii= ";cin>>l1;
cout<<"Coloane= ";cin>>c1;
cout<<"Introdu dinemsiunea matrici II:"<<endl;
cout<<"Linii= ";cin>>l2;
cout<<"Coloane= ";cin>>c2;
if (c1!=l2)
{
cout<<endl<<"Nu se poate efectua inmultirea matricilor
!"<<endl<<"Introdu alte dimesiuni";
goto sus;
}
else
{
matrix mat1(l1,c1);
matrix mat2(l2,c2);
cout<<"Introdu elementele I matrici: "<<endl;
for (int i = 0; i < l1; i++)
{
for (int j = 0; j < c1; j++)
{
cout<<"M1["<<i<<"]["<<j<<"]= ";
cin>>s;
mat1.inscriere(i,j,s);
}
}

cout<<"Introdu elementele II matrici: "<<endl;


for (int i = 0; i < l2; i++)
{
for (int j = 0; j < c2; j++)
{
cout<<"M2["<<i<<"]["<<j<<"]= ";
cin>>s;
mat2.inscriere(i,j,s);
}
}
system("CLS");
cout<<"Matricea I "<<endl;
mat1.afisare();
cout<<endl<<endl<<"Matricea II"<<endl;
mat2.afisare();

matrix matf(l1,c2);
for (int i = 0; i < l1; i++)
for (int j = 0; j < c2; j++)
{
for (int k = 0; k < l1; k++)
s+=mat1.valoare(i,k)*mat2.valoare(k,j);
matf.inscriere(i,j,s);
s=0;
}
cout<<endl<<"Iata matricea rezultanta "<<endl;
matf.afisare();
}
getch();
}
void inmultirea_numar()
{
int l,c,s,nr;
system("CLS");
cout<<"Introdu dimensiunea matrici: "<<endl;
cout<<"Linii= ";
cin>>l;
cout<<"Coloane= ";
cin>>c;
matrix matr_nr(l,c);
for (int i = 0; i < l; i++)
for (int j = 0; j < c; j++)
{
cout<<"M["<<i<<"]["<<j<<"]= ";
cin>>s;
matr_nr.inscriere(i,j,s);
}
cout<<endl<<"Matricia dreptunghiulara: "<<endl;
matr_nr.afisare();
cout<<"Inmulteste cu numarul: ";
cin>>nr;
matrix matr_rsp(l,c);
for (int i = 0; i < l; i++)
{
for (int j = 0; j < c; j++)
{
matr_rsp.inscriere(i,j,matr_nr.valoare(i,j)*nr);
}
}
cout<<endl<<"Raspuns:"<<endl;
matr_rsp.afisare();

getch();
}

void adunarea_2matrici()
{
int l1,c1,l2,c2,s;
sus:
system("CLS");
cout<<"Introdu dimensiunea matriciei I:"<<endl;
cout<<"Linii= ";cin>>l1;
cout<<"Coloane= ";cin>>c1;
cout<<"Introdu dinemsiunea matrici II:"<<endl;
cout<<"Linii= ";cin>>l2;
cout<<"Coloane= ";cin>>c2;
if ((l1!=l2)&&(c1!=c2))
{
cout<<endl<<"Nu se poate efectua adunarea matricilor !"<<endl<<"Introdu
alte dimesiuni";
goto sus;
}
else
{
matrix mat1(l1,c1);
matrix mat2(l2,c2);
cout<<"Introdu elementele I matrici: "<<endl;
for (int i = 0; i < l1; i++)
{
for (int j = 0; j < c1; j++)
{
cout<<"M1["<<i<<"]["<<j<<"]= ";
cin>>s;
mat1.inscriere(i,j,s);
}
}

cout<<"Introdu elementele II matrici: "<<endl;


for (int i = 0; i < l2; i++)
{
for (int j = 0; j < c2; j++)
{
cout<<"M2["<<i<<"]["<<j<<"]= ";
cin>>s;
mat2.inscriere(i,j,s);
}
}
system("CLS");
cout<<"Matricea I "<<endl;
mat1.afisare();
cout<<endl<<endl<<"Matricea II"<<endl;
mat2.afisare();

matrix matf(l1,c2);
for (int i = 0; i < l1; i++)
for (int j = 0; j < c1; j++)
{
s=mat1.valoare(i,j)+mat2.valoare(i,j);
matf.inscriere(i,j,s);
s=0;
}
cout<<endl<<"Iata matricea rezultanta "<<endl;
matf.afisare();
}
getch();
}

void scaderea_2matrici()
{
int l1,c1,l2,c2,s;
sus:
system("CLS");
cout<<"Introdu dimensiunea matriciei I:"<<endl;
cout<<"Linii= ";cin>>l1;
cout<<"Coloane= ";cin>>c1;
cout<<"Introdu dinemsiunea matrici II:"<<endl;
cout<<"Linii= ";cin>>l2;
cout<<"Coloane= ";cin>>c2;
if ((l1!=l2)&&(c1!=c2))
{
cout<<endl<<"Nu se poate efectua inmultirea matricilor
!"<<endl<<"Introdu alte dimesiuni";
goto sus;
}
else
{
matrix mat1(l1,c1);
matrix mat2(l2,c2);
cout<<"Introdu elementele I matrici: "<<endl;
for (int i = 0; i < l1; i++)
{
for (int j = 0; j < c1; j++)
{
cout<<"M1["<<i<<"]["<<j<<"]= ";cin>>s;
mat1.inscriere(i,j,s);
}
}

cout<<"Introdu elementele II matrici: "<<endl;


for (int i = 0; i < l2; i++)
{
for (int j = 0; j < c2; j++)
{
cout<<"M2["<<i<<"]["<<j<<"]= ";cin>>s;
mat2.inscriere(i,j,s);
}
}
system("CLS");
cout<<"Matricea I "<<endl;
mat1.afisare();
cout<<endl<<endl<<"Matricea II"<<endl;
mat2.afisare();

matrix matf(l1,c2);
for (int i = 0; i < l1; i++)
for (int j = 0; j < c1; j++)
{
s=mat1.valoare(i,j)-mat2.valoare(i,j);
matf.inscriere(i,j,s);
s=0;
}
cout<<endl<<"Iata matricea rezultanta "<<endl;
matf.afisare();
}
getch();
}

int main()
{
char com;
while(true)
{
system("CLS");

cout<<"1 - Inmultirea a 2 matrici"<<endl;


cout<<"2 - Inmultirea unei matrice cu un numar"<<endl;
cout<<"3 - Adunarea a 2 matrici"<<endl;
cout<<"4 - Scaderea a 2 matrici"<<endl;
cout<<"Esc - Iesire"<<endl;
com=getch();
switch (com)
{
case '1':
{
inmultirea_2matrici();
break;
}
case '2':
{
inmultirea_numar();
break;
}
case '3':
{
adunarea_2matrici();
break;
}
case '4':
{
scaderea_2matrici();
break;
}
case 27:
{
exit(1);
break;
}
}
}
getch();
}
Exemplu de executare a programului:

a)

b)