Sunteți pe pagina 1din 44

Ministerul Educaţiei al Republicii Moldova

Universitatea Tehnică a Moldovei

RAPORT

Lucrarea de laborator nr.2

La Programarea orientata pe obiecte

A efectuat:

st. gr. CR-182 Bonari Oleg

A verificat:

lector,univ. Oșovschi Mariana

Chişinău -2019
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.
A)
#include <iostream>
#include <stdlib.h>
#include <string>
using namespace std;

class Set
{
int n;
int *num;
public:
Set(int n=0); // Constructor implicit si general
Set(Set &right);
~Set();
void Print();
void SetData();
void AdaugareElem();
int SearchApart(int k);
void Adunare(Set &A, Set &B);
void Scadere(Set &A, Set &B);
void Intersectie(Set &A, Set &B);
};

Set::Set(int n)
{
this->n=n;
num = new int[n];
}

int Set::SearchApart(int k)
{
int contor=0;
for(int i=0; i<n; i++)
{
if(num[i]==k)
{
contor+=1;
}
}
return contor;
}

void Set::AdaugareElem()
{
if(n==0)
{
num = new int[1];
}
else
{
n = n + 1;
num = (int*) realloc(num, n*sizeof(int));
}
cout << "Introduceti valoarea : " << endl;
cin >> num[n-1];
}

Set::Set(Set &right)
{
n=right.n;
num=new int[n];
for(int i=0; i<n; i++)
{
num[i]=right.num[i];
}
}

Set::~Set()
{
delete []num;
}

void Set::Print()
{
for(int i=0; i<n; i++)
{
cout << num[i] << "\t";
}
cout << endl;
}

void Set::SetData()
{
cout << "Intoduceti numarul de valori" << endl;
cin >> n;
cout << "Introduceti valorile" << endl;
for(int i=0; i<n; i++)
{
cout << "Valoarea : " << i+1 << endl;
cin >> num[i];
}
cout << endl;
}

void Set::Adunare(Set &A, Set &B)


{
int j=0;
n=A.n+B.n;
num = new int[n];
for(int i=0; i<A.n; i++)
{
num[i]=A.num[i];
}
for(int i=A.n; i<n; i++)
{
num[i]=B.num[j];
j+=1;
}
}

void Set::Scadere(Set &A, Set &B)


{
int k=A.n;
int contor;
int intr=0;
for(int i=0; i<A.n; i++)
{
for(int j=0; j<B.n; j++)
{
if(A.num[i]==B.num[j])
{
k=k-1;
}
}
}
n=k;
for(int i=0; i<A.n; i++)
{
contor=0;
for(int j=0; j<B.n; j++)
{
if(A.num[i]==B.num[j])
{
contor+=1;
}
}
if(contor==0)
{
num[intr]=A.num[i];
intr+=1;
}
}
}

void Set::Intersectie(Set &A, Set &B)


{
int k=0;
int contor;
int intr=0;
for(int i=0; i<A.n; i++)
{
for(int j=0; j<B.n; j++)
{
if(A.num[i]==B.num[j])
{
k=k+1;
}
}
}
n=k;
k=0;
for(int i=0; i<A.n; i++)
{
for(int j=0; j<B.n; j++)
{
if(A.num[i]==B.num[j])
{
num[k]=A.num[i];
k+=1;
}
}
}
}
int main()
{
int n, ales;
int A, B;
int element;
int menu;
cout << "Introdu numarul de Multimi pe care doriti sa le creati" << endl;
cin >> n;
Set * S = new Set[n];
for(int i=0; i<n; i++)
{
system("cls");
cout << "Introduceti datele la multimea : M" << i+1 << endl;
S[i].SetData();
}
do
{
system("cls");
cout << "1) Afisarea Multimei(-lor) " << endl;
cout << "2) Adaugarea unui element nou in multime " << endl;
cout << "3) Determinarea a apartenentei elementului la multime" <<
endl;
cout << "4) Adunarea a 2-a multimi" << endl;
cout << "5) Scaderea a 2-a multimi" << endl;
cout << "6) Intersectarea a 2-a multimi" << endl;
cout << "0) Exit" << endl;
cin >> menu;
switch(menu)
{
case 1 :
{
system("cls");
for(int i=0; i<n; i++)
{
cout << "Multimea M" << i+1 << endl;
S[i].Print();
cout << endl;
}
}
break;
case 2:
{
system("cls");
cout << "Alege la care multime doriti sa adaugati un element
nou :" << endl;
for(int i=0; i<n; i++)
{
cout << "Multimea M" << i+1 << endl;
S[i].Print();
cout << endl;
}
cin >> ales;
ales=ales-1;
S[ales].AdaugareElem();
}
break;
case 3:
{
system("cls");
cout << "Alege la care multime doriti sa controlati un
element la apartenenta :" << endl;
for(int i=0; i<n; i++)
{
cout << "Multimea M" << i+1 << endl;
S[i].Print();
cout << endl;
}
cin >> ales;
ales=ales-1;
cout << "Introduceti elementul " << endl;
cin >> element;
if(S[ales].SearchApart(element)==0)
{
cout << "Elementul : " << element << ", nu apartine
multimii " << endl;
S[ales].Print();
}
else
{
cout << "Elementul : " << element << ", apartine multimii
" << endl;
S[ales].Print();
}
}
break;
case 4:
{
system("cls");
Set * Temp = new Set[1];
cout << "Alegeti 2 multimi care o sa participe la adunare :"
<< endl;
for(int i=0; i<n; i++)
{
cout << "Multimea M" << i+1 << endl;
S[i].Print();
cout << endl;
}
cin >> A >> B;
A=A-1;
B=B-1;
Temp[0].Adunare(S[A], S[B]);
cout << "Rezultatul adunari este : " << endl;
Temp[0].Print();
delete []Temp;
}
break;
case 5:
{
system("cls");
Set * Temp = new Set[1];
cout << "Alegeti 2 multimi care o sa participe la scadere :"
<< endl;
for(int i=0; i<n; i++)
{
cout << "Multimea M" << i+1 << endl;
S[i].Print();
cout << endl;
}
cin >> A >> B;
A=A-1;
B=B-1;
Temp[0].Scadere(S[A], S[B]);
cout << "Rezultatul scaderii este : " << endl;
Temp[0].Print();
delete []Temp;
}
break;
case 6:
{
system("cls");
Set * Temp = new Set[1];
cout << "Alegeti 2 multimi care o sa participe la scadere :"
<< endl;
for(int i=0; i<n; i++)
{
cout << "Multimea M" << i+1 << endl;
S[i].Print();
cout << endl;
}
cin >> A >> B;
A=A-1;
B=B-1;
Temp[0].Intersectie(S[A], S[B]);
cout << "Rezultatul Intersectiei este : " << endl;
Temp[0].Print();
delete []Temp;
}
break;
case 0:
{
delete []S;
}
break;
}
system("pause");
}while(menu!=0);
return 0;
}
1.
2.
3.
4.
5.
6.

1. Exit.

B)

#include <iostream>
#include <random>
#include <time.h>
using namespace std;

class Matrix
{
double **p;
int randuri;
int coloane;
int eroare;
public:
Matrix();
Matrix(int);
Matrix(int, int);
Matrix(Matrix *a);
bool ShowError();
void SetManValue();
void SetAutValue();
void ShowMatrix();
int ReturnElementIJ(int i, int j);
void SetElementforIJ(int i, int j);
void AdunMatriceUnNr();
void ScadMatriceUnNr();
void AdunMatrice(Matrix *a);
void ScadMatrice(Matrix *a);
void InmultireMatricNum();
void Inmultirea2metrice(Matrix *a, Matrix *b, int exec);
void randcoloane(Matrix *a, Matrix*b, int &n, int &m);
~Matrix();
};

Matrix::Matrix()
{
randuri=0;
coloane=0;
p=NULL;
}

Matrix::~Matrix()
{
randuri=0;
coloane=0;
eroare=-1;
for(int i=0; i<randuri; i++)
{
p[i]=NULL;
delete[]p[i];
}
p=NULL;
delete[]p;
}

Matrix::Matrix(int n)
{
randuri=n;
coloane=n;
if(n!=0)
{
p=new double*[n];
if(p==NULL)
{
eroare=0;
}
for(int i=0; i<n; i++)
{
p[i]=new double [n];
if(p==NULL)
{
eroare=0;
}
}
}
}

Matrix::Matrix(int n, int m) {
randuri = n;
coloane = m;
if (n != 0 && m!=0) {
p = new double *[n];
if (p==NULL)
{
eroare=0;
}
for (int i = 0; i < n; i++) {
p[i] = new double[m];
if (p[i]==NULL)
{
eroare=0;
}
}
}
}

Matrix::Matrix(Matrix *a)
{
randuri = a->randuri;
coloane = a->coloane;
p=new double *[randuri];
for(int i=0; i<randuri; i++)
{
p[i] = new double [coloane];
}
for(int i=0; i<randuri; i++)
{
for(int j=0; j<coloane; j++)
{
p[i][j]=a->p[i][j];
}
}
}

void Matrix::randcoloane(Matrix *a, Matrix *b, int &n, int &m)


{
n=a->randuri;
m =b->coloane;
}

void Matrix::SetManValue()
{
if (p!=NULL)
{
for(int i=0; i<randuri; i++)
{
for(int j=0; j<coloane; j++)
{
cout << "P[" << i+1 << "][" << j+1 << "] = ";
cin >> p[i][j];
}
cout << endl;
}
}
}

void Matrix::SetAutValue()
{
srand(time(NULL));
if (p!=NULL)
{
for(int i=0; i<randuri; i++)
{
for(int j=0; j<coloane; j++)
{
p[i][j]=rand()%10-3;
}
}
}
}

void Matrix::ShowMatrix()
{
if(p!=NULL)
{
for(int i=0; i<randuri; i++)
{
for(int j=0; j<coloane; j++)
{
cout << p[i][j] << "\t";
}
cout << endl;
}
}
}

int Matrix::ReturnElementIJ(int a, int b)


{
if(a>randuri || b > coloane)
{
eroare=2;
}
else
{
eroare=-1;
for(int i=0; i<randuri; i++)
{
for(int j=0; j<coloane; j++)
{
if(i==a-1 && j==b-1)
{
return p[i][j];
}
}
}
}
}

void Matrix::SetElementforIJ(int a, int b)


{
if(a>randuri || b > coloane)
{
eroare=2;
}
else
{
eroare = -1;
for (int i = 0; i < randuri; i++) {
for (int j = 0; j < coloane; j++) {
if (i == a - 1 && j == b - 1) {
cout << "Introduceti o alta valoare in locul lui " << p[i][j] << endl;
cin >> p[i][j];
}
}
}
}
}

bool Matrix::ShowError()
{
bool Return=false;
if(eroare==0)
{
cout << "(Eroare cod 0) - Insuficienta de memorie" << endl;
Return=true;
}
else if(eroare==1)
{
cout << "(Eroare cod 1) - Necorespondenta a dimensiunilor matricelor" << endl;
Return=true;
}
else if(eroare==2)
{
cout << "(Eroare cod 2) - Depasire a limitei memoriei utilizate" << endl;
Return=true;
}
eroare=-1;
return Return;
}

void Matrix::AdunMatriceUnNr()
{
int num;
cout << "Introdu numarul, pentru ca matricea sa fie sumat cu acest numar" << endl;
cin >> num;
for(int i=0; i<randuri; i++)
{
for(int j=0; j<coloane; j++)
{
p[i][j]=p[i][j]+num;
}
}
}

void Matrix::ScadMatriceUnNr()
{
int num;
cout << "Introdu numarul, pentru ca matricea sa fie scazut cu acest numar" << endl;
cin >> num;
for(int i=0; i<randuri; i++)
{
for(int j=0; j<coloane; j++)
{
p[i][j]=p[i][j]-num;
}
}
}

void Matrix::AdunMatrice(Matrix *a)


{
if(a->randuri==1 && a->coloane==1)
{
for(int i=0; i<randuri; i++)
{
for(int j=0; j<coloane; j++)
{
p[i][j]+=a->p[0][0];
}
}
}
else if((randuri != a->randuri)&&(coloane!=a->coloane))
{
eroare=1;
}
else
{
for(int i=0; i<randuri; i++)
{
for(int j=0; j<coloane; j++)
{
p[i][j]+=a->p[i][j];
}
}
}
}

void Matrix::ScadMatrice(Matrix *a)


{
if(a->randuri==1 && a->coloane==1)
{
for(int i=0; i<randuri; i++)
{
for(int j=0; j<coloane; j++)
{
p[i][j]-=a->p[0][0];
}
}
}
else if((randuri != a->randuri)&&(coloane!=a->coloane))
{
eroare=1;
}
else
{
for(int i=0; i<randuri; i++)
{
for(int j=0; j<coloane; j++)
{
p[i][j]-=a->p[i][j];
}
}
}
}

void Matrix::InmultireMatricNum()
{
int num;
cout << "Introdu numarul, pentru ca matricea sa fie inmultita cu acest numar" << endl;
cin >> num;
for(int i=0; i<randuri; i++)
{
for(int j=0; j<coloane; j++)
{
p[i][j]=p[i][j]*num;
}
}
}

void Matrix::Inmultirea2metrice(Matrix *a, Matrix *b, int exec)


{
if(a->coloane!=b->randuri)
{
eroare=1;
}
else
{
for(int i=0; i<randuri; i++)
{
for(int j=0; j<coloane; j++)
{
p[i][j]=0;
}
}
for(int s=0; s<randuri; s++)
{
for(int k=0; k<coloane; k++)
{
for(int i=0; i<b->randuri; i++)
{
if(exec==1)
{
cout << "Am " << p[s][k] << ", la care adun valorile " << a->p[s][i] << " si " << b->p[i][k] << "
inmultite (" << a->p[s][i]*b->p[i][k] << ") => " << p[s][k] << "+("<< a->p[s][i]*b->p[i][k] << ") = ";
p[s][k]+=a->p[s][i]*b->p[i][k];
cout << p[s][k] << endl;
}
else
{
p[s][k]+=a->p[s][i]*b->p[i][k];
}
}
if(exec==1)
{
cout << endl;
}
}
if(exec==1)
{
cout << endl;
}
}
}
}

int main()
{
Matrix *M1, *M2, *M3;
int ForMatrix=0;
int ForMatrix1=0;
int isreturn=0;
int exec=-1;
int exec1=0;
int exec2=0;
int n, m;
int a, b;
int alegere=0;
for(int i=0; i<2; i++)
{
do
{
system("cls");
cout << "Creaza obiectul nr " << i+1 << endl;
cout << "1) Crearea matrice ( Constructor implicit )" << endl;
cout << "2) Crearea matrice ( Constructor 1 parametru )" << endl;
cout << "3) Crearea matrice ( Constructor 2 parametri )" << endl;
cout << "0) Exit" << endl;
cin >> alegere;
if(alegere==0)
{
return 0;
}
}
while (alegere<0 || alegere >3);
if(alegere==1)
{
if(i==0)
{
M1 = new Matrix();
} else
{
M2 = new Matrix();
}
}
else if (alegere==2)
{
cout << "Introdu valoaea parametrului " << endl;
cin >> n;
if(i==0)
{
M1 = new Matrix(n);
} else
{
M2 = new Matrix(n);
}
}
else if (alegere==3)
{
cout << "Introdu valoaea parametrului n si m" << endl;
cin >> n >> m;
if(i==0)
{
M1 = new Matrix(n, m);
} else
{
M2 = new Matrix(n, m);
}
}
}
do
{
do
{
system("cls");
cout << "1) Introdu manual datele in matrice " << endl;
cout << "2) Introdu automat datele in matrice " << endl;
cout << "3) Afiseaza matricea " << endl;
cout << "4) Returneaz valoarea elementului ce se afla pe o pozitie " << endl;
cout << "5) Schimba valoarea elementului ce se afla pe o pozitie " << endl;
cout << "6) Operatii cu matricile" << endl;
cout << "0) Eliberarea memoriei, inchiderea programului." << endl;
cin >> exec;
switch(exec)
{
case 0:
{
delete M1;
delete M2;
delete M3;
return 0;
}
case 1:
{
system("cls");
cout << "Alege matricea in care doriti sa introduceti manual datele:" << endl;
cout << "1 - Matricea nr 1\t\t2 - Matricea nr 2" << endl;
do
{
cin >> ForMatrix;
}
while (ForMatrix<0 || ForMatrix>2);
if(ForMatrix==1)
{
M1->SetManValue(); cout << "Datele au fosti introduse cu succes" << endl;
system("pause"); exec2 =1; break;
} else
{
M2->SetManValue(); cout << "Datele au fosti introduse cu succes" << endl;
system("pause"); exec2 =1; break;
}
}
case 2:
{
system("cls");
cout << "Alege matricea in care doriti sa introduceti manual datele:" << endl;
cout << "1 - Matricea nr 1\t\t2 - Matricea nr 2\t\t 3-Ambele matrice" << endl;
do
{
cin >> ForMatrix;
}
while (ForMatrix<0 || ForMatrix>3);
if(ForMatrix==1)
{
M1->SetAutValue(); cout << "Datele au fosti introduse cu succes" << endl;
system("pause"); exec2 =1; break;
}
else if (ForMatrix==2)
{
M2->SetAutValue(); cout << "Datele au fosti introduse cu succes" << endl;
system("pause"); exec2 =1; break;
} else
{
M1->SetAutValue(); system("timeout 1"); system("cls"); M2->SetAutValue(); cout <<
"Datele au fosti introduse cu succes" << endl; system("pause"); exec2 =1; break;
}
}
case 3:
{
if(exec2 != 1)
{
cout << "Mai intai introduceti valorile in matrice " << endl;
system("pause");
} else
{
system("cls");
cout << "Alege matricea in care doriti sa introduceti manual datele:" << endl;
cout << "1 - Matricea nr 1\t\t2 - Matricea nr 2\t\t3 - Ambele matrici" << endl;
do
{
cin >> ForMatrix;
}
while (ForMatrix<0 || ForMatrix>3);
if(ForMatrix==1)
{
M1->ShowMatrix(); system("pause"); system("cls"); break;
}
else if(ForMatrix==2)
{
M2->ShowMatrix(); system("pause"); system("cls"); break;
}
else
{
cout << "Matricea nr 1 :" << endl;
M1->ShowMatrix();
cout << "\n\nMatricea nr 2 :" << endl;
M2->ShowMatrix();
system("pause"); system("cls"); break;
}
}
}
break;
case 4:
{
if(exec2 != 1)
{
cout << "Mai intai introduceti valorile in matrice " << endl;
system("pause");
}
else
{
system("cls");
cout << "Alege matricea din care doriti sa returnati o valoare:" << endl;
cout << "1 - Matricea nr 1\t\t2 - Matricea nr 2" << endl;
do
{
cin >> ForMatrix;
}
while (ForMatrix<0 || ForMatrix>2);
if(ForMatrix==1)
{
system("cls");
cout << "Matrice nr 1" << endl;
M1->ShowMatrix();
cout << endl;
cout << "Dati numarul randului si coloanei"<< endl;
cin >> a >> b;
isreturn=M1->ReturnElementIJ(a, b);
if(M1->ShowError()==false)
{
cout << "Valoarea returnabila este : " << isreturn << endl;
}
}
else
{
system("cls");
cout << "Matrice nr 2" << endl;
M2->ShowMatrix();
cout << endl;
cout << "Dati numarul randului si coloanei"<< endl;
cin >> a >> b;
isreturn=M2->ReturnElementIJ(a, b);
if(M2->ShowError()==false)
{
cout << "Valoarea returnabila este : " << isreturn << endl;
}
}
system("pause");
}
}
break;
case 5:
{
if(exec2 != 1)
{
cout << "Mai intai introduceti valorile in matrice " << endl;
system("pause");
}
else
{
system("cls");
cout << "Alege matricea in care doriti sa schimbati valoarea elementului:" << endl;
cout << "1 - Matricea nr 1\t\t2 - Matricea nr 2" << endl;
do
{
cin >> ForMatrix;
}
while (ForMatrix<0 || ForMatrix>2);
if(ForMatrix==1)
{
system("cls");
cout << "Matrice nr 2\n" << endl;
M1->ShowMatrix();
cout << "Dati numarul randului si coloanei"<< endl;
cin >> a >> b;
M1->SetElementforIJ(a, b);
if(M1->ShowError()==false)
{
cout << "Valoarea a fost schimbata cu succes" << endl;
cout << endl << "Matricea primita este :" << endl;
M1->ShowMatrix();
}
}
else
{
system("cls");
cout << "Matrice nr 2\n" << endl;
M2->ShowMatrix();
cout << "Dati numarul randului si coloanei"<< endl;
cin >> a >> b;
M2->SetElementforIJ(a, b);
if(M2->ShowError()==false)
{
cout << "Valoarea a fost schimbata cu succes" << endl;
cout << endl << "Matricea primita este :" << endl;
M2->ShowMatrix();
}
}
system("pause");
}
}
break;
case 6:
{
if(exec2 != 1)
{
cout << "Mai intai introduceti valorile in matrice " << endl;
system("pause");
}
else
{
do
{
system("cls");
cout << "1) Adunarea matricei cu un numar "<< endl;
cout << "2) Scaderea matricei cu un numar "<< endl;
cout << "3) Adunarea matricelor "<< endl;
cout << "4) Scaderea matricelor "<< endl;
cout << "5) Inmultirea matricei cu un numar "<< endl;
cout << "6) Inmultirea matricei cu alta matrice "<< endl;
cout << "0) Exit "<< endl;
cin>> exec;
switch (exec)
{
case 1 :
{
system("cls");
cout << "Alege matricea cu care doriti sa executati operatia:" << endl;
cout << "1 - Matricea nr 1\t\t2 - Matricea nr 2" << endl;
do
{
cin >> ForMatrix;
}
while (ForMatrix<0 || ForMatrix>2);
if(ForMatrix==1)
{
M3=new Matrix(M1);
M1->AdunMatriceUnNr();
cout << "Operatia a fost executata cu succes"<<endl;
cout << "Matricea :"<< endl;
M3->ShowMatrix();
cout << "A devenit :" << endl;
M1->ShowMatrix();
system("pause");
delete M3;
} else
{
M3=new Matrix(M2);
M2->AdunMatriceUnNr();
cout << "Operatia a fost executata cu succes"<<endl;
cout << "Matricea :"<< endl;
M3->ShowMatrix();
cout << "A devenit :" << endl;
M2->ShowMatrix();
system("pause");
delete M3;
}
}break;
case 2 :
{
system("cls");
cout << "Alege matricea cu care doriti sa executati operatia:" << endl;
cout << "1 - Matricea nr 1\t\t2 - Matricea nr 2" << endl;
do
{
cin >> ForMatrix;
}
while (ForMatrix<0 || ForMatrix>2);
if(ForMatrix==1)
{
M3=new Matrix(M1);
M1->ScadMatriceUnNr();
cout << "Operatia a fost executata cu succes"<<endl;
cout << "Matricea :"<< endl;
M3->ShowMatrix();
cout << "A devenit :" << endl;
M1->ShowMatrix();
system("pause");
delete M3;
} else
{
M3=new Matrix(M2);
M2->ScadMatriceUnNr();
cout << "Operatia a fost executata cu succes"<<endl;
cout << "Matricea :"<< endl;
M3->ShowMatrix();
cout << "A devenit :" << endl;
M2->ShowMatrix();
system("pause");
delete M3;
}
}break;
case 3:
{
system("cls");
cout << "Alege matricea cu care doriti sa executati operatia:" << endl;
cout << "1 - Matricea (1+2) \t\t2 - Matricea (2+1)" << endl;
do
{
cin >> ForMatrix;
}
while (ForMatrix<0 || ForMatrix>2);
if(ForMatrix==1)
{
M3=new Matrix(M1);
M1->AdunMatrice(M2);
if(M1->ShowError()==false)
{
cout << "Operatia a fost executata cu succes"<<endl;
cout << "Matricea numarul 1 a fost adunata cu a 2-a."<<endl;
cout << "Matricea :"<< endl;
M3->ShowMatrix();
cout << "A devenit :" << endl;
M1->ShowMatrix();
system("pause");
delete M3;
} else{
system("pause");
}
} else
{
M3=new Matrix(M2);
M2->AdunMatrice(M1);
if(M2->ShowError()==false)
{
cout << "Operatia a fost executata cu succes"<<endl;
cout << "Matricea numarul 2 a fost adunata cu 1-a."<<endl;
cout << "Matricea :"<< endl;
M3->ShowMatrix();
cout << "A devenit :" << endl;
M2->ShowMatrix();
system("pause");
delete M3;
}else{
system("pause");
}
}
}break;
case 4:
{
system("cls");
cout << "Alege matricea cu care doriti sa executati operatia:" << endl;
cout << "1 - Matricea (1-2) \t\t2 - Matricea (2-1)" << endl;
do
{
cin >> ForMatrix;
}
while (ForMatrix<0 || ForMatrix>2);
if(ForMatrix==1)
{
M3=new Matrix(M1);
M1->ScadMatrice(M2);
if(M1->ShowError()==false)
{
cout << "Operatia a fost executata cu succes"<<endl;
cout << "Matricea numarul 1 a fost scazuta cu a 2-a."<<endl;
cout << "Matricea :"<< endl;
M3->ShowMatrix();
cout << "A devenit :" << endl;
M1->ShowMatrix();
system("pause");
delete M3;
} else{
system("pause");
}
} else
{
M3=new Matrix(M2);
M2->ScadMatrice(M1);
if(M2->ShowError()==false)
{
cout << "Operatia a fost executata cu succes"<<endl;
cout << "Matricea numarul 2 a fost scazuta cu 1-a."<<endl;
cout << "Matricea :"<< endl;
M3->ShowMatrix();
cout << "A devenit :" << endl;
M2->ShowMatrix();
system("pause");
delete M3;
}else{
system("pause");
}
}
}break;
case 5 :
{
system("cls");
cout << "Alege matricea cu care doriti sa executati operatia:" << endl;
cout << "1 - Matricea nr 1\t\t2 - Matricea nr 2" << endl;
do
{
cin >> ForMatrix;
}
while (ForMatrix<0 || ForMatrix>2);
if(ForMatrix==1)
{
M3=new Matrix(M1);
M1->InmultireMatricNum();
cout << "Operatia a fost executata cu succes"<<endl;
cout << "Matricea :"<< endl;
M3->ShowMatrix();
cout << "A devenit :" << endl;
M1->ShowMatrix();
system("pause");
delete M3;
} else
{
M3=new Matrix(M2);
M2->InmultireMatricNum();
cout << "Operatia a fost executata cu succes"<<endl;
cout << "Matricea :"<< endl;
M3->ShowMatrix();
cout << "A devenit :" << endl;
M2->ShowMatrix();
system("pause");
delete M3;
}
}break;
case 6:
{
system("cls");
cout << "Alege matricea cu care doriti sa executati operatia:" << endl;
cout << "1 - Matricea 1*2\t\t2 - Matricea 2*1" << endl;
do
{
cin >> ForMatrix;
}
while (ForMatrix<0 || ForMatrix>2);
if(ForMatrix==1)
{
system("cls");
cout << "Sa afisez procesu rezolvarii ?" << endl;
cout << "1 - Da \t\t2 - Nu" << endl;
do
{
cin >> ForMatrix1;
}
while (ForMatrix1<0 || ForMatrix1>2);
system("cls");
cout << "Matricea nr 1\n" << endl;
M1->ShowMatrix();
cout << endl;
cout << "Matricea nr 2\n" << endl;
M2->ShowMatrix();
cout << endl;
if(ForMatrix1==1)
{
M3->randcoloane(M1, M2, n, m);
M3 = new Matrix(n, m);
M3->Inmultirea2metrice(M1, M2, 1);
}
else
{
M3->randcoloane(M1, M2, n, m);
M3 = new Matrix(n, m);
M3->Inmultirea2metrice(M1, M2, 0);
}
cout << "Matricea primita este :" << endl;
if(M3->ShowError()==false)
{
cout << "Matricea primita este :" << endl;
M3->ShowMatrix();
delete M3;
system("pause");
delete M3;
}else
{
system("pause");
}
}
else
{
system("cls");
cout << "Sa afisez procesu rezolvarii ?" << endl;
cout << "1 - Da \t\t2 - Nu" << endl;
do
{
cin >> ForMatrix1;
}
while (ForMatrix1<0 || ForMatrix1>2);
system("cls");
cout << "Matricea nr 1\n" << endl;
M2->ShowMatrix();
cout << endl;
cout << "Matricea nr 2\n" << endl;
M1->ShowMatrix();
cout << endl;
if(ForMatrix1==1)
{
M3->randcoloane(M2, M1, n, m);
M3 = new Matrix(n, m);
M3->Inmultirea2metrice(M2, M1, 1);
}
else
{
M3->randcoloane(M2, M1, n, m);
M3 = new Matrix(n, m);
M3->Inmultirea2metrice(M2, M1, 0);
}
if(M3->ShowError()==false)
{
cout << "Matricea primita este :" << endl;
M3->ShowMatrix();
delete M3;
system("pause");
delete M3;
}else
{
system("pause");
}
}
}break;
}
}
while(exec!=0);
}
}
}
}
while(exec!=0);
}
while(exec1==0);
}
După anclanșăm ENTER, si ne apare meniul principal al programului.

Alegem aleator o obțiune înainte de a introduce valori în matrice.

Astfel programul nu permite executarea orecărei obțiuni, în afare de introducere. După care programul
permite accesul la oricare funcție.
Executăm pe rând fiecare obțiune propusă de program.

1) Permite să introducem manual datele în matrice. Alegem matricea nr 1, și introducem


următoarele valori.

2) Permite introducerea a valorilor automat (random), la 1, 2, sau ambele matrice. Totodată


Programul e dotat cu posibilitatea de a enera de fiecare data vlori diferite, și ca procesorul s nu
genereze valori identice la matricea 1 și 2. Este folosit un timer de 1 secundă.

3) Permite afișarea matricelor.


Alegem spre exemplu afișarea ambelor matrice.

4) Permite returnarea unei valori din matrice de pe rândul și coloana introdusă. Totodată aceasta e
dotat cu sistemul de depistare e Erorrilor.
Din meniul propus alegem matricea nr 1.

Încercăm să ducem programul în stare de eroare.


5) Permite să schimbăm valoare de pe rândul și coloana dorită. Totodată aceasta e dotat cu
sistemul de depistare e Erorrilor.
Din meniul propus alegem matricea nr 2.

Încercăm să ducem programul în stare de eroare.

6) Obțiunea 6, permite lucrul cu operațiile matricelor.


Astfel acesta la rândul său conține un submeniu.

Cercetăm fiecare funcție pe rând.


1) Permite adunarea matricei alese cu un număr.
2) Permide scădeea matricei alese cu un număr.

3) Permite adunarea matricelor între ele.

Pentru prezentarea mai detaliată a funcției, generam din nou 2 matrice


2x3 și alta 4x4. Pentru a creea starea de eroare.

4) Permite scăderea matricelor între ele.


Pentru prezentarea mai detaliată a funcției, generam din nou 2 matrice
2x3 și alta 4x4. Pentru a creea starea de eroare.

5) Permite înmulțirea matricei cu un număr dorit de utilizat


6) Permite înmulțirea între 2 matrice.
Alegem spre exemplu matricea 1*2. Și totodată în meniul apparent ne înreabă dacă dorim să
vedem cum a avut loc procesul
-DA.
-NU:

Pentru prezentarea mai detaliată a funcției, generam din nou 2 matrice


2x3 și alta 4x4. Pentru a creea starea de eroare.

Generăm cazul de eroare când lipsește memorie.


.

La anclanșarea butonulul 0, are loc ieșirea din submeniu.

Întrebări de control:

1. Explicaţi termenul de iniţializare.


-Crearea unui clase cu scopul de a manipula datele.

2. Ce cuvinte cheie se utilizează pentru definirea constructorului şi a destructorului?


-Constructorul se defineste utilizind doar denumirea clasei, iar destructorului la definire se adauga
simbolul ~ (tilda).

3. Poate oare un constructor să returneze o valoare?


-Nu.

4. Pot oare să existe clase fără constructori?


-Da. La asa tip de clase se foloseste constructorul implicit.

5. Cîţi constructori poate conţine o clasă? Dar destructori? De ce?


-O clasa poate contine un numar nelimitat de constructori, iar destructor doar unul.

6. Enumeraţi tipurile de constructori?


-Constructorul implicit, cu un parametru, cu mai multi parametri, de conversie si cel de copiere.

7. Cum se apelează un constructor?


-Den_clasei var_clasei (parametri).

8. De ce este nevoie de definit un constructor de copiere?


-Pentru a putea copia obiectle clasei, si a manipula mai comod cu datele.

9. De ce este nevoie de definit un constructor de conversie a tipului?


-Un astfel de constructor este binevenit la supraincarcarea operatorilor, si la conversiile dintr-un tip
in altul.

10. În ce cazuri se apelează constructorul de copiere? Care este sintaxa apelului?


-Constructorul de copiere transmite o referinta catre un obiect din aceiasi clasa.

11. Ce sunt listele de iniţializare (iniţializatori)?


12. În care caz se defineşte obligatoriu constructorul implicit?
Concluzie:

In lucrarea de laborator numarul 2 am avut de lucrat si de facut cunostinta cu constructorii


impliciti,constructori si distructori pentru a creea clase ce satisfac conditia a) si b) .Am creat o clasa
pentru a putea introduce o grupa prin constructori si sa o pot edita dupa conditie ,iar la varianta b) , am
conlucrat cu matricele efectuand un sir de operatii intre ele si verificand erorile .

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