Sunteți pe pagina 1din 12

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 TI-15X


Student Name

A verificat:
Scrob S.

Chisinau 2016
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 7
а) Să se creeze clasa Queue – coadă. Cîmpurile – numărul de elemente şi un pointer pentru
alocarea dinamică a memoriei. Să se definească constructorii: implicit, de copiere şi cu un
parametru – numărul necesar de elemente; funcţiile add şi get pentru punerea unui element în
coadă şi pentru scoaterea unui element din coadă respectiv; funcţiile: isEmpty, care returnează
valoarea 1 dacă coada este vidă şi zero în caz contrar, şi isFull care returnează valoarea 1 dacă
coada este plină şi zero în caz contrar.
b) Să se creeze clasa Matrix – matrice. Clasa conţine pointer spre int, 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 Queue
{
int *init;
int num;
int first_element;
int element;
int max_elem;

public:

Queue();
Queue(const Queue&);
Queue(int num);

void create(int num);


bool isFull();
bool isEmpty();
void add(int new_elem);
void get();
void display();
};

Queue::Queue() : init(NULL), num(0), first_element(0), element(0), max_elem(0) {}

void Queue::create(int num)


{
init = new int[num];
max_elem = num;
}

bool Queue::isFull()
{
return (element >= max_elem) ? true : false;
}

bool Queue::isEmpty()
{
return (first_element == element) ? true : false;
}

void Queue::add(int new_elem)


{
if(isFull())
{
cout << "Queue is full !!" << endl;
return;
}
init[element++] = new_elem;
cout << "Success !!" << endl;
}

void Queue::get()
{
if(isEmpty())
{
cout <<"Queue is Empty !!" << endl;
return;
}
init[first_element++];
max_elem++;
cout << "Success !!" << endl;
}

void Queue::display()
{
int i;

if (isEmpty())
{
cout <<"Queue is empty" << endl;
return;
}
for(i = first_element; i < element; i++)
cout << init[i] << " " ;
cout << endl;
}

int main()
{
Queue queue;
char menu_choice;
int new_elem;
int num;

while (1)
{
system("cls");
cout << "Menu" << endl;
cout << "[1]. Create queue." << endl;
cout << "[2]. Add one element." << endl;
cout << "[3]. Get one element" << endl;
cout << "[4]. Show all elements" << endl;
cout << "[0]. Exit." << endl;
cout << "\n>>> ";
cin >> menu_choice;

if (menu_choice <= '4')


{
if (menu_choice == '0')
exit(0);
if (menu_choice == '1')
{
cout << "Input the length of queue !! >> " << endl;
cin >> num;
queue.create(num);
}
if (menu_choice == '2')
{
cout << "Input one element (integer) >>> ";
cin >> new_elem;
queue.add(new_elem);
}
if (menu_choice == '3')
queue.get();
if (menu_choice == '4')
queue.display();
}
else
cout << "Bad choice" << endl;
system("pause");
}
return (0);
}
Codul programului (b) :

#include <iostream>

using namespace std;

class Matrix
{
public:
int Tab[50][50];
int line;
int column;

public:
Matrix();
Matrix(int);
Matrix(int, int);
Matrix(const Matrix&);
~Matrix();

void f_set_matr();
void f_show();
void f_addition(const Matrix &matrix);
void f_subtract(const Matrix &matrix);
void f_multipl_matrix(const Matrix &matrix);
void f_multipl_num(int value);
};

int g_size;

Matrix::Matrix() : line(0), column(0) {}

Matrix::Matrix(int line, int column) : line(line), column(column)


{
int i, j;

if ((line >= 0) && (column >= 0))


{
for (i = 0; i < line; i++)
for (j = 0; j < column; j++)
Tab[i][j] = 0;
}
else
cout << "Error. Matrix are not positive !!" << endl;
}

Matrix::Matrix(const Matrix& Tab2) : line(Tab2.line), column(Tab2.column)


{
int i, j;
for (i = 0; i < line; i++)
for (j = 0; j < column; j++)
Tab[i][j] = Tab2.Tab[i][j];
}
Matrix::~Matrix()
{
int i;

for(i = 0; i < line; ++i)


delete [] Tab;
line = 0;
column = 0;
}

void Matrix::f_set_matr()
{
int i, j;
for (i = 0; i < line; i++)
for (j = 0; j < column; j++)
{
cout << " Matrix["<<i<<"]["<<j<<"]=";
cin >>Tab[i][j];
}
}

void Matrix::f_show()
{
int i, j;

for (i = 0; i < line; i++)


{
for (j = 0; j < column; j ++)
cout << "\t" << Tab[i][j] << "\t";
cout << endl;
}
}

void Matrix::f_addition(const Matrix &matrix)


{
Matrix matr;
int i, j;

if ((line == matrix.line) && (column == matrix.column))


{
for (i = 0; i < line; i++)
for (j = 0; j < column; j ++)
Tab[i][j] += matrix.Tab[i][j];
}
else
cout << "The dimensions do not match !!" << endl;
}

void Matrix::f_subtract(const Matrix &matrix)


{
int i, j;

if ((line == matrix.line) && (column == matrix.column))


{
for (i = 0; i < line; i++)
for (j = 0; j < column; j ++)
Tab[i][j] -= matrix.Tab[i][j];
}
else
cout << "The dimensions do not match !!" << endl;
}

void Matrix::f_multipl_matrix(const Matrix &matrix)


{
int i, j, k;
int temp = 0;
int Tab2[50][50];

if (column == matrix.line)
{
for (i = 0; i < line; i++)
{
for (j = 0; j < column; j ++)
{
for (k = 0; k < line; k++)
{
temp += Tab[i][k] * matrix.Tab[k][j];
Tab2[i][j] = temp;
}
temp = 0;
}
temp = 0;
}
for (i = 0; i < line; i++)
for (j = 0; j < column; j ++)
Tab[i][j] = Tab2[i][j];
}
else
cout << "The matrix are not compatible for multiplying !!" << endl;
}

void Matrix::f_multipl_num(int value)


{
int i, j;

for (i = 0; i < line; i++)


for (j = 0; j < column; j ++)
Tab[i][j] *= value;
}

void f_menu()
{
Matrix m1, m2;
int ml_nr;

cout << "\tInput first matrix !!\n" << endl;


cout << "**Lines = ";
cin >> m1.line;
cout << "**Columns = ";
cin >> m1.column;
Matrix matrix1(m1.line, m1.column);
matrix1.f_set_matr();
system ("pause");
system ("cls");

cout << "\tInput second matrix !!\n" << endl;


cout << "**Lines = ";
cin >> m2.line;
cout << "**Columns = ";
cin >> m2.column;
Matrix matrix2(m2.line, m2.column);
matrix2.f_set_matr();
system ("pause");
system ("cls");

cout << "***First Matrix:" << endl;


matrix1.f_show();
cout << "\n***Second Matrix:" << endl;
matrix2.f_show();

Matrix matrix3 = matrix1;


Matrix matrix4 = matrix1;
Matrix matrix5 = matrix1;

cout << "\n***Matrix addition:" << endl;


matrix1.f_addition(matrix2);
matrix1.f_show();

cout << "\n***Matrix subtraction: (matrix1 - matrix2)" << endl;


matrix4.f_subtract(matrix2);
matrix4.f_show();

cout << "\n***Matrix multiplication:\n" << endl;


matrix5.f_multipl_matrix(matrix2);
matrix5.f_show();

cout << "\n***Multiply first matrix with number"<< endl;


cout << "**Imput number >>> ";
cin >> ml_nr;
cout << endl;
matrix3.f_multipl_num(ml_nr);
matrix3.f_show();

system("pause");
exit(0);
}

int main()
{
f_menu();
return (0);
}
Demonstratea programului (a):
Meniul principal:

Introducerea datelor:

Afisarea datelor:
Demonstratea programului (b):
Introducerea datelor in program:
Rezolvarea sarcinilor:
Raspunsuri la itrebari:

Î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 rezultatul elaborarii lucrarii date s-a pus baza aplicarii in practica a cunostintelor teoretice
referitoare la utilizarea claselor, si constructorilor.
 Astfel se poate judeca despre posibilitatile largi acordate de limbajul C++ referitor la
manipularea memoriei in directia dorita de utilizator.
SERGIU.SCROB@ATI.UTM.MD

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

  • Lab LFPCN3 OnicaDinu
    Lab LFPCN3 OnicaDinu
    Document18 pagini
    Lab LFPCN3 OnicaDinu
    Dinu RaceClan
    Încă nu există evaluări
  • Cde 5
    Cde 5
    Document5 pagini
    Cde 5
    Belîi Daniela
    Încă nu există evaluări
  • Serdtfgyuhjk
    Serdtfgyuhjk
    Document10 pagini
    Serdtfgyuhjk
    Belîi Daniela
    Încă nu există evaluări
  • CYTGUHBI
    CYTGUHBI
    Document6 pagini
    CYTGUHBI
    Belîi Daniela
    Încă nu există evaluări
  • MMC Lab2
    MMC Lab2
    Document6 pagini
    MMC Lab2
    Mihail Boran
    Încă nu există evaluări
  • DTYVGUB
    DTYVGUB
    Document11 pagini
    DTYVGUB
    Belîi Daniela
    Încă nu există evaluări
  • Foaia de Titlu
    Foaia de Titlu
    Document1 pagină
    Foaia de Titlu
    Belîi Daniela
    Încă nu există evaluări
  • Varianta Atestarea 2 Seria 2
    Varianta Atestarea 2 Seria 2
    Document2 pagini
    Varianta Atestarea 2 Seria 2
    Belîi Daniela
    Încă nu există evaluări
  • Proiect Dispozitive Si Circuite Electronice
    Proiect Dispozitive Si Circuite Electronice
    Document22 pagini
    Proiect Dispozitive Si Circuite Electronice
    DanielaBalan
    100% (1)
  • Cde 5
    Cde 5
    Document5 pagini
    Cde 5
    Belîi Daniela
    Încă nu există evaluări
  • Model Laborator 2 PDF
    Model Laborator 2 PDF
    Document4 pagini
    Model Laborator 2 PDF
    hsdfhdf
    Încă nu există evaluări
  • Lucrare de Laborator Nr. 1
    Lucrare de Laborator Nr. 1
    Document4 pagini
    Lucrare de Laborator Nr. 1
    Belîi Daniela
    Încă nu există evaluări
  • BIUHJK
    BIUHJK
    Document14 pagini
    BIUHJK
    Belîi Daniela
    Încă nu există evaluări
  • Mecanica 5 PDF
    Mecanica 5 PDF
    Document5 pagini
    Mecanica 5 PDF
    Belîi Daniela
    Încă nu există evaluări
  • Lab 2 Cazacu POO
    Lab 2 Cazacu POO
    Document6 pagini
    Lab 2 Cazacu POO
    Belîi Daniela
    Încă nu există evaluări
  • Lab 2 Cazacu POO
    Lab 2 Cazacu POO
    Document6 pagini
    Lab 2 Cazacu POO
    Belîi Daniela
    Încă nu există evaluări
  • Lab 2 Cazacu POO
    Lab 2 Cazacu POO
    Document6 pagini
    Lab 2 Cazacu POO
    Belîi Daniela
    Încă nu există evaluări
  • UGHIJOK
    UGHIJOK
    Document7 pagini
    UGHIJOK
    Belîi Daniela
    Încă nu există evaluări
  • Lab2 Poo
    Lab2 Poo
    Document5 pagini
    Lab2 Poo
    Maria Codreanu
    Încă nu există evaluări
  • Lab2 Poo
    Lab2 Poo
    Document5 pagini
    Lab2 Poo
    Maria Codreanu
    Încă nu există evaluări
  • Lab 2 Cazacu POO
    Lab 2 Cazacu POO
    Document6 pagini
    Lab 2 Cazacu POO
    Belîi Daniela
    Încă nu există evaluări
  • Lab2 Poo
    Lab2 Poo
    Document5 pagini
    Lab2 Poo
    Maria Codreanu
    Încă nu există evaluări
  • Curs C
    Curs C
    Document112 pagini
    Curs C
    alexsicoe
    Încă nu există evaluări
  • Lab2 Poo
    Lab2 Poo
    Document5 pagini
    Lab2 Poo
    Maria Codreanu
    Încă nu există evaluări
  • Curs C
    Curs C
    Document112 pagini
    Curs C
    alexsicoe
    Încă nu există evaluări
  • RGHRTR
    RGHRTR
    Document11 pagini
    RGHRTR
    Belîi Daniela
    Încă nu există evaluări
  • Lab2 Poo
    Lab2 Poo
    Document5 pagini
    Lab2 Poo
    Maria Codreanu
    Încă nu există evaluări
  • Lab 5
    Lab 5
    Document7 pagini
    Lab 5
    Belîi Daniela
    Încă nu există evaluări
  • Lab 26 Belii Daniela SI 191
    Lab 26 Belii Daniela SI 191
    Document4 pagini
    Lab 26 Belii Daniela SI 191
    Belîi Daniela
    Încă nu există evaluări