RAPORT
A efectuat:
A verificat:
Chişinău -2019
Tema: Constructorul – funcţie de iniţializare a obiectelor clasei
Scopul lucrării:
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;
}
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::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;
}
}
}
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::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;
}
}
}
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.
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.
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.
Întrebări de control: