Sunteți pe pagina 1din 12

Ministerul 

Educaţiei, Culturii și Cercetării al  Republicii Moldova                
              Universitatea Tehnică a Moldovei   
 
       Departamentul Informatică și Ingineria sistemelor 
 
 
 

                                Raport 
                                    Lucrare de laborator nr. 2
                                la POO
V-11

 
 
A efectuat: 
st.gr. CR-202                                                                   Barbacari Daniel 

 
A verificat:    Pasat Natalia
 

                                     Chișinău- 2021


Lucrarea de laborator nr. 2
Теmа: 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
Sarcină: Varianta 11
а) Să se creeze clasa Group – grupa, care conţine informaţia despre codul grupei,
specialitatea, numărul de studenţi, curatorul grupei şi anul de studii. Să se utilizeze
memoria dinamică pentru setarea cîmpurilor textuale. Să se definească: toate tipurile
de constructori; funcţiile de schimbare a curatorului şi a numărului de studenţi. Să se
definească funcţia de setare a anului de studii în aşa fel, încît valoarea acestui cîmp să
poată fi mărită şi să nu depăşească cifra 5.

b) Să se creeze clasa Matrix – matrice. Clasa conţine pointer spre char, 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.

Codul programului:

a)#include<iostream>

using namespace std;

class Group{

public:

Group();// definirea constructorul implicit

~Group();//destructorul clasei
void citire( int , int , int );

void afisare();

void schimb_curator();

void schimb_nr_stud();

private:

int grupa, nr_stud, anul;

char *specialitate, *curator;

};

Group::Group(){ specialitate= new char[20]; curator= new char[20];};//constructorul


implicit

Group::~Group(){ delete [] specialitate; delete[] curator;}//destructorul

void Group::citire( int grupa , int nr_stud , int anul){

if(anul > 4) anul = 4;

this->grupa = grupa; this->nr_stud= nr_stud; this->anul=anul;

cout <<"Da-ti specialitatea" <<endl;

cin >> specialitate;

cout <<"Da-ti curatorul" <<endl;

cin >>curator;

};

void Group::afisare(){

cout <<"Datele despre grupe!" <<endl;


cout <<"Grupa: "<< grupa <<"; Nr de studenti: "<<nr_stud <<"; Anul: " <<anul
<<"; Specalitatea: " <<specialitate <<"; Curator: "<<curator;

};

void Group::schimb_curator(){

curator= new char[20];

cout <<endl <<"Da-ti noul curator"<<endl;

cin >> curator;

};

void Group::schimb_nr_stud(){

cout <<endl<<"Da-ti numarul de studenti" <<endl;

cin >> nr_stud;

};

int main(void){

Group a1;

a1.citire(2,26,2); a1.afisare(); a1.schimb_curator(); a1.afisare();


a1.schimb_nr_stud(); a1.afisare();
return 0;

b)#include<iostream>

using namespace std;

class matrix{

public:

matrix(){

n=0;m=0; arr=NULL;

};

matrix(int, int);

~matrix();

void citire();//functia pentru afisare

void afisare();
void adunare( matrix & , matrix &, int, int );

void scadere( matrix &, matrix &, int, int );

void inmultire( matrix & , matrix & , int , int);

void inmultire_nr( matrix & , int );

private:

int **arr;

int n,m;

};

matrix::matrix(int n, int m){//alocare memorie pentru matricea dreptunghiulara

this->n =n; this->m=m;

arr = new int*[n];

for(int i = 0; i < n; i++){

arr[i] = new int[m];

};

matrix::~matrix(){//eliberarea memoriei

for(int i=0; i<n; i++)

delete[] arr[i];

delete[] arr;

};
void matrix::citire(){

if(n == 0){

n=2; m =n+1;

arr = new int*[n];

for(int i = 0; i < n; i++){

arr[i] = new int[m];

cout <<"introduceti datele in tablou" <<endl;

for(int i = 0; i<n; i++){

for(int j=0;j<m;j++){

cin >> arr[i][j];

};

void matrix::afisare(){

cout <<endl <<"Informatii despre tablou" <<endl;

for(int i = 0; i<n; i++){

for(int j=0;j<m;j++){

cout <<"A["<<i+1 <<"]["<<j+1<<"]-"<< arr[i][j]<<" ";

cout <<endl;
}

};

void matrix::adunare( matrix &a1, matrix &a2 , int num1, int num2){

if((n == num1) && ( m == num2)){

for(int i = 0; i<n;i++){

for(int j=0;j<m;j++){

arr[i][j]= (a1.arr[i][j]) + (a2.arr[i][j]);

else

cout <<" Matricele nu au dimeniuni identice, nu putem efectua operatia introdusa"


<<endl;

};

void matrix::scadere( matrix &a1, matrix &a2 , int num1, int num2){

if((n == num1) && ( m == num2)){

for(int i = 0; i<n;i++){

for(int j=0;j<m;j++){

arr[i][j]= (a1.arr[i][j]) - (a2.arr[i][j]);

}
else

cout <<" Matricele nu au dimeniuni identice, nu putem efectua operatia introdusa"


<<endl;

};

void matrix::inmultire( matrix &a1, matrix &a2 , int num1, int num2){

if((n == num1) && ( m == num2)){

for(int i = 0; i<n;i++){

for(int j=0;j<m;j++){

arr[i][j]= (a1.arr[i][j]) * (a2.arr[i][j]);

else

cout <<" Matricele nu au dimeniuni identice, nu putem efectua operatia introdusa"


<<endl;

};

void matrix::inmultire_nr( matrix &a1, int numb){

for(int i = 0; i<n;i++){

for(int j=0;j<m;j++){

arr[i][j]= (a1.arr[i][j]) * numb;

}
};

int main(void){

cout <<endl <<" Matricea I"<<endl;

matrix a1(2,2); a1.citire(); a1.afisare();

cout <<endl<<" Matricea II"<<endl;

matrix a2(2,2); a2.citire(); a2.afisare();

cout <<endl<<" Adunarea Matricei I cu II"<<endl;

matrix a3(2,2); a3.adunare(a1,a2,2,2); a3.afisare();

cout <<endl<<" Scaderea Matricei I din II"<<endl;

matrix a4(2,2); a4.scadere(a1,a2,2,2); a4.afisare();

cout <<endl<<" Inmultirea Matricei I cu II"<<endl;

matrix a5(2,2); a5.inmultire(a1,a2,2,2); a5.afisare();

cout <<endl<<" Adunarea Matricei I cu un scalar"<<endl;

matrix a6(2,2); a6.inmultire_nr(a1,7); a6.afisare();

return 0;
}
Concluzie:

Elaborand aceasta lucrare de laborator am lucrat cu clasele și constructori, am


însușit noțiunele principale referitor la aceste unități. În punctul a fost folosita o
clasa Grupa , pe cand în punctul b, clasa MATRICE, aceasta fiind mai
complexă, am deprins lucrul cu constructorii, aceștia fiind utili in alocarea
memoriei și accesarea elementelor necesare.

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