Sunteți pe pagina 1din 16

Ministerul Educaţiei ,Culturii și Cercetării al Republicii Moldova

Universitatea Tehnică a Moldovei


Facultatea Calculatoare,Informatică și Microelectronică
Departamentul Informatică și Ingineria Sistemelor

RAPORT
Lucrarea de laborator Nr.2
Varianta:8
Tema:” Constructorul – funcţie de iniţializare a obiectelor clasei”

Diciplina:,,Programarea Orientata pe Obiecte”

A efectuat: st. gr.MN-181 Moraru Cristian

A verificat: dr., conf.univ. Osovschi Mariana

2019
Scopul lucrării:
 Studierea regulilor de determinare a moştenirii multiple;
 Studierea avantajelor şi neajunsurilor moştenirii multiple;
 Probleme legate de utilizarea moştenirii multiple;
 Studierea rezolvării problemelor;

Sarcina Lucrarii:
а) Pentru orice sir de caractere, introdus de la tastatura, printr-un meniu adecvat, sa se realizeze,
utilizandu-se o clasa clasaSir, urmatoarele operatii: conversia sirului la caractere mici, conversia
la caractere mari si adaugarea unui subsir la sirul dat.
b) Să se creeze clasa Matrix – matrice. Clasa conţine pointer spre double, 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) Codul Programului:
#include<stdio.h>

#include<conio.h>

#include<string.h>

using namespace std;

class clasasir

//definirea clasei sir

char sir[80]; // variabila sir ca membru privat implicit

public:
// declararea functiei de copiere sir

void copy (char *s) { strcpy(sir,s);}

// initializarea cu spatii a sirului s

clasasir(char *s=" ") {copy(s);}

// declararea functiei de scriere

void scrie(FILE *fileptr);

// declararea functiei de citire

void citeste(FILE *fileptr);

// declararea functiei de concatenare siruri

void operator +=(clasasir &s)

strcat(sir,s.sir); //concatenare siruri

// declararea functiei friend conversie caractere

friend void conversie(clasasir &s,char optiune);

}; // sfarsitul declararii clasei


// descrierea functiei de scriere

void clasasir::scrie(FILE *fileptr)

fprintf(fileptr,"\n sirul modificat este:%s",sir);

// descrierea functiei de citire

void clasasir::citeste(FILE *fileptr)

// citeste din fisierul *fileptr si depune in sir

int sizesir; // se memoreaza lungimea sirului citit

fgets(sir,80,fileptr);

sizesir=strlen(sir)-1;

if(sir[sizesir]=='\n') sir[sizesir]=0;

// descrierea functiei de conversie sir

void conversie(clasasir &s,char optiune)


{

clasasir tempsir;

switch (optiune)

case '1': strupr(s.sir);//conversie in majuscule

break;

case '2': strlwr(s.sir);//conversie in minuscule

break;

case '3': printf("\n introduceti un sir (max 80):");

tempsir.citeste(stdin); //citeste un alt sir

s+=tempsir; //concateneaza sirurile

break;

default: printf("\n optiune eronata \n");

int main()
{

clasasir clsir; //declararea obiectului clsir

char alegere='1',r='d';

while (r=='d')

printf("\n dati un sir (max=80 caractere):");

clsir.citeste(stdin);

do

// afisarea meniului de comenzi

printf("\n ==============================");

printf("\n 1. conversie sir in majuscule");

printf("\n 2. conversie sir in minuscule");

printf("\n 3. adaugare subsir la sirul dat");

printf("\n t. terminare program");

printf("\n ==============================");
printf("\n alegeti o optiune:");

alegere=getchar();getchar();

while((alegere!='1')&&(alegere!='2')&&

(alegere!='3')&&(alegere!='t'));

while(alegere!='t')

conversie(clsir,alegere);

clsir.scrie(stdout);

do

// reafisarea meniului de comenzi

printf("\n ==============================");

printf("\n 1. conversie sir in majuscule");

printf("\n 2. conversie sir in minuscule");

printf("\n 3. adaugare subsir la sirul dat");


printf("\n t. terminare program");

printf("\n ==============================");

printf("\n alegeti o optiune:");

alegere=getchar();getchar();

while((alegere!='1')&&(alegere!='2')&&

(alegere!='3')&&(alegere!='t'));

printf("\n continuati?(d/n):");

r=getche();

printf("\n terminat \n");

Rezultatul Programului:
b) Codul Programului:
#include <iostream>

using namespace std;

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

public:
Matrix();
Matrix(double);
Matrix(double, double);
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(double value);
};

double g_size;
Matrix::Matrix() : line(0), column(0) {}

Matrix::Matrix(double line, double 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. Matricea nu e pozitiva !!" << 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()
{
double 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 << "Dimensiunile nu corespund !!" << 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 << "Dimensiunile nu corespund!!" << endl;
}

void Matrix::f_multipl_matrix(const Matrix &matrix)


{
int i, j, k;
double temp = 0;
double 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 << "Matricea nu este compatibila pentru inmultire !!" << endl;
}

void Matrix::f_multipl_num(double 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;
double ml_nr;

cout << "\tIntroduceti prima matrice !!\n" << endl;


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

cout << "\tIntroduceti a doua matrice !!\n" << endl;


cout << "**Linii = ";
cin >> m2.line;
cout << "**Coloane = ";
cin >> m2.column;
Matrix matrix2(m2.line, m2.column);
matrix2.f_set_matr();
system ("pause");
system ("cls");
cout << "***Prima matrice:" << endl;
matrix1.f_show();
cout << "\n***A doua matrice:" << endl;
matrix2.f_show();

Matrix matrix3 = matrix1;


Matrix matrix4 = matrix1;
Matrix matrix5 = matrix1;

cout << "\n***Adaugarea matricei:" << endl;


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

cout << "\n***Scaderea matricei: (matrix1 - matrix2)" << endl;


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

cout << "\n***inmultirea matricei:\n" << endl;


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

cout << "\n***inmultiti prima matrice cu numar"<< endl;


cout << "**Introduceti numarul >>> ";
cin >> ml_nr;
cout << endl;
matrix3.f_multipl_num(ml_nr);
matrix3.f_show();

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

int main()
{f_menu();
return (0);}
Rezultatul Programului:

Concluzie:

 In rezultatul elaborarii lucrarii date s-a pus baza aplicarii in practica a cunostintelor
teoretice referitoare la mostenirea multipla.
 Astfel se poate judeca despre posibilitatile largi acordate de limbajul C++ referitor la
manipularea claselor.

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