Sunteți pe pagina 1din 30

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. AI-191

Tronciu Alexandru

A verificat: dr., conf.univ.

Lisnic Inga
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.

Punctul a)

Codul programului
#include <iostream>

#include <stdlib.h>

using namespace std;

class Set

public:

int *mult;

void afisare(int ceva2)

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

cout << mult[i] << " ";

int inserare()

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

cout << "Numarul " << i << ":";

cin >> mult[i];


}

return ceva;

int Apartenenta(int numar)

int rasp = 0;

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

if (numar == mult[i])

rasp++;

return rasp;

Set();

Set(const Set &t);

~Set();

private:

int ceva;

};

Set::Set()

cout << "Dati cate elemente o sa aiba multimea" << endl;

cout << "Alegere: ";

cin >> ceva;

mult = new int[ceva];

Set::~Set()

delete[] mult;

int main(int argc, char const *argv[])

int loop = 1, aleg2, aleg3;


int nr, dar;

int aleg, n;

int *intersectie, *elem, *adunare, *scadere;

cout << "Cate multimi doriti sa dati" << endl;

cout << "Raspunsul: ";

cin >> n;

int multime[n];

Set a[n];

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

multime[i] = a[i].inserare();

while (loop)

system("CLS");

cout << "0.Exit" << endl;

cout << "1.Adaugare un element nou" << endl;

cout << "2.Determinare apartenenta" << endl;

cout << "3.Adunare a doua multimi" << endl;

cout << "4.Scadere a doua multimi" << endl;

cout << "5.Intersectie a doua multimi" << endl;

cout << "6.Afisare a multimilor" << endl;

cout << "Comanda>>";

cin >> aleg;

switch (aleg)

case 0:

loop = 0;

cout << "Goodbye!" << endl;

break;

case 1:

system("CLS");

cout << "Dati multimea in care vreti sa adaugati noi elemente: ";

cin >> aleg2;


elem = new int[multime[aleg2 - 1]];

for (int i = 0; i < multime[aleg2 - 1]; i++)

elem[i] = a[aleg2 - 1].mult[i];

delete a[aleg2 - 1].mult;

cout << endl

<< "Dati numarul elementelor cu care vreti sa mariti multimea:";

cin >> nr;

a[aleg2 - 1].mult = new int[multime[aleg2 - 1] + nr];

multime[aleg2 - 1] = multime[aleg2 - 1] + nr;

for (int i = 0; i < multime[aleg2 - 1] - nr; i++)

a[aleg2 - 1].mult[i] = elem[i];

cout << endl;

for (int i = multime[aleg2 - 1] - nr; i < multime[aleg2 - 1]; i++)

cout << "Dati elementul nou pentru multime:";

cin >> a[aleg2 - 1].mult[i];

cout << endl;

system("PAUSE");

break;

case 2:

system("CLS");

cout << "Dati care numarul care doriti sa il verificati:";

cin >> nr;

cout << endl;

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

dar = a[i].Apartenenta(nr);

if (dar == 0)

cout << "Acest numar nu apartine multimei " << i + 1 << "!" << endl;

else if (dar > 1)

cout << "In multimea " << i + 1 << " numarul dat il intalnesti de " << dar << " ori! " << endl;
else

cout << "In multimea " << i + 1 << " numarul dat a fost intalnit odata!" << endl;

system("PAUSE");

break;

case 3:

system("CLS");

int j, d, size;

j = d = 0;

cout << "Dati cele doua multimi care vor fi adunate: ";

cin >> aleg2 >> aleg3;

size = multime[aleg2 - 1] + multime[aleg3 - 1];

adunare = new int[size * 2];

for (int i = 0; i < size * 2; i++)

if (i < multime[aleg2 - 1])

adunare[i] = a[aleg2 - 1].mult[j];

j++;

else

adunare[i] = a[aleg3 - 1].mult[d];

d++;

cout << endl;

cout << "Le rezultat: ";

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

cout << adunare[i] << " ";

cout << endl;

system("PAUSE");
break;

case 4:

system("CLS");

cout << "Dati cele doua multimi care vor fi scazute: ";

cin >> aleg2 >> aleg3;

int dab, numar, ver;

dab = 0;

size = multime[aleg2 - 1] + multime[aleg3 - 1];

scadere = new int[size];

for (int i = 0; i < multime[aleg2 - 1]; i++)

for (int j = 0; j < multime[aleg3 - 1]; j++)

if (a[aleg3 - 1].Apartenenta(a[aleg2 - 1].mult[i]) == 0)

if (scadere[dab - 1] == a[aleg2 - 1].mult[i] && dab >= 1)

dab--;

scadere[dab] = a[aleg2 - 1].mult[i];

dab++;

cout << endl;

cout << "Raspuns : ";

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

cout << scadere[i] << " ";

cout << endl;

system("PAUSE");

break;

case 5:

system("CLS");

cout << "Dati cele doua multimi care vor fi intersectate: ";

cin >> aleg2 >> aleg3;

int ok;

ok = 0;

size = multime[aleg2 - 1] + multime[aleg3 - 1];


intersectie = new int[size];

for (int i = 0; i < multime[aleg2 - 1]; i++)

for (int j = 0; j < multime[aleg3 - 1]; j++)

if (a[aleg2 - 1].mult[i] == a[aleg3 - 1].mult[j])

intersectie[ok] = a[aleg2 - 1].mult[i];

ok++;

cout << endl;

cout << "Raspuns : ";

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

cout << intersectie[i] << " ";

cout << endl;

system("PAUSE");

break;

case 6:

system("CLS");

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

cout << i << ":";

a[i].afisare(multime[i]);

cout << endl;

system("PAUSE");

break;

default:

break;

return 0;

}
Crearea multimilor de numere

Meniul principal
Functia de adaugare a unui element nou

Afisarea multimilor de numere


Determinarea apartenentei

Adunarea multimilor
Scaderea multimilor

Intersectia multimilor
Punctul b)
Codul programului:

#include <iostream>

#include <stdlib.h>

using namespace std;

int i, j, k;

struct complex

int x, y;

};

class Matrix

public:

complex **ceva;

int numar_randuri;

int numar_coloane;

char eror[45] = "Eroare, Dimensiunile matricilor nu coincid!\n";

void Afis()

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

cout << i << ":";

for (j = 0; j < numar_coloane; j++)

cout << ceva[i][j].x << " " << ceva[i][j].y << "|";

cout << endl;

}
void insert_data()

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

for (j = 0; j < numar_coloane; j++)

cout << i << "|" << j << "(x):";

cin >> ceva[i][j].x;

cout << i << "|" << j << "(y):";

cin >> ceva[i][j].y;

cout << endl;

void setare()

cout << "Dati nr de randuri ale matrici:";

cin >> numar_randuri;

cout << endl;

cout << "Dati nr de coloane ale matrici:";

cin >> numar_coloane;

cout << endl;

Matrix();

Matrix(int b);

Matrix(int baka, int d);

~Matrix();

};

void produs(complex **a, complex **b, complex **c, int n, int k)


{

int i, j, x;

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

for (j = 0; j < k; j++)

c[i][j].x = 0;

c[i][j].y = 0;

for (x = 0; x < n; x++)

c[i][j].x += a[i][x].x * b[x][j].x;

c[i][j].y += a[i][x].y * b[x][j].y;

Matrix::Matrix()

setare();

i = numar_randuri;

j = numar_coloane;

ceva = new complex *[i];

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

ceva[i] = new complex[j];

Matrix::Matrix(int b)

i = b;

numar_randuri = i;
j = b;

numar_coloane = j;

ceva = new complex *[i];

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

ceva[i] = new complex[j];

Matrix::Matrix(int baka, int d)

i = baka;

numar_randuri = i;

j = d;

numar_coloane = j;

ceva = new complex *[i];

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

ceva[i] = new complex[j];

Matrix::~Matrix()

delete[] ceva;

int main(int argc, char const *argv[])

Matrix iomaio;

cout << "Crearea primului obiect prin constructorul implicit!" << endl;

iomaio.insert_data();

cout << "Crearea celui deal doilea obiect prin constructorul cu un parametru!" << endl;

Matrix eba(2);

eba.insert_data();

cout << "Crearea celui deal treailea obiect prin constructorul cu doi parametrii!" << endl;
Matrix san(3, 2);

san.insert_data();

int loop = 1;

int aleg, aleg2, aleg3;

while (loop)

system("CLS");

cout << "0.Exit" << endl;

cout << "1.Adunare a doua matrici" << endl;

cout << "2.Scadere a doua matrici" << endl;

cout << "3.Inmultire a doua matrici" << endl;

cout << "4.Inmultire a matricii cu un numar" << endl;

cout << "Comanda>>";

cin >> aleg;

switch (aleg)

case 0:

system("CLS");

cout << "Goodbye!" << endl;

loop = 0;

break;

case 1:

system("CLS");

cout << "Alegeti doua matrici pe care vreti sa le adunati:\n1-Matricea creata prin constructorul
implicit "

<< "\n2-Matricea creata prin constructorul cu un parametru\n3-Matricea creata prin


constructorul cu doi parametrii" << endl;

cin >> aleg2 >> aleg3;

cout << endl;


if (aleg2 == 1 && aleg3 == 2)

if (iomaio.numar_coloane == eba.numar_coloane && iomaio.numar_randuri ==


eba.numar_randuri)

Matrix sic(iomaio.numar_randuri, iomaio.numar_coloane);

cout << "Rezultat:";

cout << endl;

for (i = 0; i < iomaio.numar_randuri; i++)

for (j = 0; j < iomaio.numar_coloane; j++)

sic.ceva[i][j].x = iomaio.ceva[i][j].x + eba.ceva[i][j].x;

sic.ceva[i][j].y = iomaio.ceva[i][j].y + eba.ceva[i][j].y;

cout << endl;

sic.Afis();

else

cout << eba.eror;

if (aleg2 == 2 && aleg3 == 3)

if (san.numar_coloane == eba.numar_coloane && san.numar_randuri == eba.numar_randuri)

Matrix sic(san.numar_randuri, san.numar_coloane);

cout << "Rezultat:";


cout << endl;

for (i = 0; i < san.numar_randuri; i++)

for (j = 0; j < san.numar_coloane; j++)

sic.ceva[i][j].x = san.ceva[i][j].x + eba.ceva[i][j].x;

sic.ceva[i][j].y = san.ceva[i][j].y + eba.ceva[i][j].y;

cout << endl;

sic.Afis();

else

cout << san.eror;

if (aleg2 == 1 && aleg3 == 3)

Matrix sic(iomaio.numar_randuri, iomaio.numar_coloane);

if (iomaio.numar_coloane == san.numar_coloane && iomaio.numar_randuri ==


san.numar_randuri)

cout << "Rezultat:";

cout << endl;

for (i = 0; i < iomaio.numar_randuri; i++)

for (j = 0; j < iomaio.numar_coloane; j++)

{
sic.ceva[i][j].x = iomaio.ceva[i][j].x + san.ceva[i][j].x;

sic.ceva[i][j].y = iomaio.ceva[i][j].y + san.ceva[i][j].y;

cout << endl;

sic.Afis();

else

cout << iomaio.eror;

system("PAUSE");

break;

case 2:

system("CLS");

cout << "Alegeti doua matrici pe care vreti sa le scadeti:\n1-Matricea creata prin constructorul
implicit "

<< "\n2-Matricea creata prin constructorul cu un parametru\n3-Matricea creata prin


constructorul cu doi parametrii" << endl;

cin >> aleg2 >> aleg3;

cout << endl;

if (aleg2 == 1 && aleg3 == 2)

if (iomaio.numar_coloane == eba.numar_coloane && iomaio.numar_randuri ==


eba.numar_randuri)

cout << "Rezultat:";

cout << endl;

Matrix sic(iomaio.numar_randuri, iomaio.numar_coloane);

for (i = 0; i < iomaio.numar_randuri; i++)


{

for (j = 0; j < iomaio.numar_coloane; j++)

sic.ceva[i][j].x = iomaio.ceva[i][j].x - eba.ceva[i][j].x;

sic.ceva[i][j].y = iomaio.ceva[i][j].y - eba.ceva[i][j].y;

cout << endl;

sic.Afis();

else

cout << eba.eror;

if (aleg2 == 2 && aleg3 == 3)

Matrix sic(san.numar_randuri, san.numar_coloane);

if (san.numar_coloane == eba.numar_coloane && san.numar_randuri == eba.numar_randuri)

cout << "Rezultat:";

cout << endl;

for (i = 0; i < san.numar_randuri; i++)

for (j = 0; j < san.numar_coloane; j++)

sic.ceva[i][j].x = san.ceva[i][j].x - eba.ceva[i][j].x;

sic.ceva[i][j].y = san.ceva[i][j].y - eba.ceva[i][j].y;

}
cout << endl;

sic.Afis();

else

cout << san.eror;

if (aleg2 == 1 && aleg3 == 3)

Matrix sic(iomaio.numar_randuri, iomaio.numar_coloane);

if (iomaio.numar_coloane == san.numar_coloane && iomaio.numar_randuri ==


san.numar_randuri)

cout << "Rezultat:";

cout << endl;

for (i = 0; i < iomaio.numar_randuri; i++)

for (j = 0; j < iomaio.numar_coloane; j++)

sic.ceva[i][j].x = iomaio.ceva[i][j].x - san.ceva[i][j].x;

sic.ceva[i][j].y = iomaio.ceva[i][j].y - san.ceva[i][j].y;

cout << endl;

sic.Afis();

else

cout << iomaio.eror;

}
system("PAUSE");

break;

case 3:

system("CLS");

cout << "Alegeti doua matrici pe care vreti sa le inmultiti:\n1-Matricea creata prin constructorul
implicit "

<< "\n2-Matricea creata prin constructorul cu un parametru\n3-Matricea creata prin


constructorul cu doi parametrii" << endl;

cin >> aleg2 >> aleg3;

cout << endl;

if (aleg2 == 1 && aleg3 == 2)

Matrix indi(iomaio.numar_randuri, eba.numar_coloane);

if (iomaio.numar_coloane == eba.numar_randuri && iomaio.numar_randuri ==


eba.numar_coloane)

cout << "Rezultat:";

cout << endl;

produs(iomaio.ceva, eba.ceva, indi.ceva, iomaio.numar_coloane, eba.numar_randuri);

for (i = 0; i < eba.numar_randuri; i++)

for (j = 0; j < iomaio.numar_coloane; j++)

cout << i << ":" << indi.ceva[i][j].x << " " << indi.ceva[i][j].y << "|";

cout << endl;

else

cout << eba.eror;


}

if (aleg2 == 2 && aleg3 == 3)

Matrix indi(eba.numar_randuri, san.numar_coloane);

if (eba.numar_randuri == eba.numar_coloane && san.numar_coloane == eba.numar_randuri)

cout << "Rezultat:";

cout << endl;

produs(eba.ceva, san.ceva, indi.ceva, san.numar_coloane, eba.numar_randuri);

for (i = 0; i < eba.numar_randuri; i++)

for (j = 0; j < iomaio.numar_coloane; j++)

cout << i << ":" << indi.ceva[i][j].x << " " << indi.ceva[i][j].y << "|";

cout << endl;

else

cout << san.eror;

if (aleg2 == 1 && aleg3 == 3)

Matrix indi(iomaio.numar_randuri, san.numar_coloane);

if (iomaio.numar_randuri == san.numar_coloane && san.numar_coloane ==


iomaio.numar_randuri)

cout << "Rezultat:";

cout << endl;


produs(iomaio.ceva, san.ceva, indi.ceva, san.numar_coloane, iomaio.numar_randuri);

for (i = 0; i < eba.numar_randuri; i++)

for (j = 0; j < iomaio.numar_coloane; j++)

cout << i << ":" << indi.ceva[i][j].x << " " << indi.ceva[i][j].y << "|";

cout << endl;

else

cout << iomaio.eror;

system("PAUSE");

break;

case 4:

system("CLS");

cout << "Alegeti matricea pe care vreti sa o inmultiti:\n1-Matricea creata prin constructorul
implicit\n2-Matricea creata prin constructorul cu un parametru\n3-Matricea creata prin constructorul
cu doi parametrii" << endl;

cin >> aleg2;

cout << "Dati numarul:";

cin >> aleg3;

if (aleg2 == 1)

for (i = 0; i < iomaio.numar_randuri; i++)

for (j = 0; j < iomaio.numar_coloane; j++)

{
iomaio.ceva[i][j].x = iomaio.ceva[i][j].x * aleg3;

iomaio.ceva[i][j].y = iomaio.ceva[i][j].y * aleg3;

cout << endl;

iomaio.Afis();

if (aleg2 == 2)

for (i = 0; i < eba.numar_randuri; i++)

for (j = 0; j < eba.numar_coloane; j++)

eba.ceva[i][j].x = eba.ceva[i][j].x * aleg3;

eba.ceva[i][j].y = eba.ceva[i][j].y * aleg3;

cout << endl;

eba.Afis();

if (aleg2 == 3)

for (i = 0; i < san.numar_randuri; i++)

for (j = 0; j < san.numar_coloane; j++)

san.ceva[i][j].x = san.ceva[i][j].x * aleg3;

san.ceva[i][j].y = san.ceva[i][j].y * aleg3;

}
}

cout << endl;

san.Afis();

system("PAUSE");

break;

default:

break;

return 0;

}
Crearea matricilor

Adunarea a doua matrici

Scaderea matricilor
Inmultirea matricilor

Inmultirea matricilor cu un numar


Raspunsuri la intrebari:

1) Initierea inseamna crearea obiectului si alocarea memoriei pentru el cat si itroducerea datelor
daca este necesar.
2) Pentru definirea constructorului se foloseste aceeasi definire a denumirii ca si a clasei, iar a
destructorului aceasta denumire este precedata de tilda ( ~ ).
3) Nu, constructorul nu returneaza nici o valoare.El nici tip nu are.
4) Clasele trebuie sa contina constructore. Dar exista clase si fara constructori.
5) Clasele pot avea nenumarate constructori, insa destructori numai unul. Pentru ca constructorii
pot fi supraincarcati iar destructorii nu.
6) Implicit, de copiere, cu parametrii, de convertire, general.
7) Constructorul se apeleaza odata ce se creaza o variabila in main.
8) Pentru a salva o copie a obiectului.
9) Pentru a schimba tipul datelor.
10) A copia datele unui obiect, a crea o copie.
Sintaxa: Nume_Constructor(Nume_clasa const &t)();
11) Lista de initializare sunt o lista de mai multi constructori folositi pentru o clasa.
12) Cand clasa nu contine nici un constructor atunci este definit constructorul implicit obligatoriu.

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