Documente Academic
Documente Profesional
Documente Cultură
RAPORT
Lucrare de laborator nr.2
la
Programarea orientată pe obiecte
Chișinău 2020
Lucrare de laborator nr.2
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.
using namespace std;
class date{
public:
int zi = 0, luna = 0, an = 0;
//Constructor implicit
date(){};
//Constructorul cu parametri
date(int zi, int luna, int an){
if(an < 0) cout << "Anul introdus este invalid!\n";
else this->an = an;
if(luna < 1 || luna > 12) cout << "Luna introdusa este invalida!\n";
else this->luna = luna;
if(luna == 2){ // Daca luna == februarie
/*
Daca e an bisect atunci data trebuie sa fie mai mica de 29 si mai ma
re de 1
Daca nu e an bisect atunci data trebuie sa fie mai mica de 28 si mai
mare de 1
*/
if(AnBisect(an)){
if(zi < 1 || zi > 29) cout << "Data introdusa este invalida!\n";
else this->zi = zi;
}else{
if(zi < 1 || zi > 28) cout << "Data introdusa este invalida!\n";
else this->zi = zi;
}
}else{
if(zi < 1 || zi > 31) cout << "Data introdusa este invalida!\n";
else this->zi = zi;
}
};
if(this->an < 1){
cout << "Anul introdus este invalid!\n";
Citire(1);
}
else Citire(2);
}
else if(read == 2){
cout << "Introduceti luna: ";
cin >> this->luna;
if(this->luna < 1 || this->luna > 12){
cout << "Luna introdusa este invalida!\n";
Citire(2);
}
else Citire(3);
}
else if(read == 3){
cout << "Introduceti data: ";
cin >> this->zi;
this->Afisare();
}
}
//Functia de afisare a datelor introduse
void Afisare(){
int type;
cout << "\nSelectati metoda de afisare a datei: \n1.(dd.mm.yyyy)\n2.(dd MMMM
yyy)\n>>";
cin >> type;
if(type == 1){ // dd.mm.yyyy
string AFzi, AFluna;
if(this->zi < 10) AFzi = "0" + to_string(this->zi);
else AFzi = to_string(this->zi);
if(this->luna < 10) AFluna = "0" + to_string(this->luna);
else AFluna = to_string(this->luna);
cout << "Data introdusa: " << AFzi << "." << AFluna << "." << this->an;
}else if(type == 2){ // dd MMMM yyyy
string AFzi, AFluna;
switch (this->luna){
case 1: AFluna = "Ianuarie"; break;
case 2: AFluna = "Februarie"; break;
case 3: AFluna = "Martie"; break;
case 4: AFluna = "Aprilie"; break;
case 5: AFluna = "Mai"; break;
case 6: AFluna = "Iunie"; break;
case 7: AFluna = "Iulie"; break;
case 8: AFluna = "August"; break;
case 9: AFluna = "Septembrie"; break;
case 10: AFluna = "Octombrie"; break;
case 11: AFluna = "Noiembrie"; break;
case 12: AFluna = "Decembrie"; break;
}
if(this->zi < 10) AFzi = "0" + to_string(this->zi);
else AFzi = to_string(this->zi);
cout << "Data introdusa: " << AFzi << " " << AFluna << " " << this->an;
}
else Afisare();
}
int main(){
date d, *d1;
// Utilizand constructor
d1 = new date(19, 10, 2020);
d1->Afisare();
cout << endl;
#include <iostream>
#include <conio.h>
#include <stdlib.h>
using namespace std;
class matrix {
private:
int ** p;
int rows, cols;
public:
int error_code;
matrix();
matrix(int);
matrix(int, int);
~matrix();
void citire(int i, int j, int elem) {
p[i][j] = elem;
}
void afisare() {
for(int i = 0; i < rows; i++){
for(int j = 0; j < cols; j++) cout << " " << p[i][j];
cout << endl;
}
}
int valoare(int i, int j) {
return p[i][j];
}
};
matrix::matrix() {
p = NULL;
rows = cols = 0;
};
matrix::matrix(int n) {
rows = cols = n;
p = new int * [rows];
for (int i = 0; i < rows; i++) {
p[i] = new int[rows];
for (int j = 0; j < rows; j++)
p[i][j] = 0;
}
}
matrix::matrix(int r, int c) {
rows = r;
cols = c;
p = new int * [rows];
for (int i = 0; i < rows; i++) {
p[i] = new int[cols];
for (int j = 0; j < cols; j++)
p[i][j] = 0;
}
}
matrix::~matrix() {
delete[] p;
}
void inmultirea_2matrici() {
matrix m1;
int l1, c1, l2, c2, s;
sus:
system("CLS");
cout << "Introdu dimensiunea matricei I:" << endl;
cout << "Nr de linii: ";
cin >> l1;
cout << "Nr de coloane: ";
cin >> c1;
cout << "Introdu dimensiunea matricei II:" << endl;
cout << "Nr de linii: ";
cin >> l2;
cout << "Nr de coloane: ";
cin >> c2;
if (c1 != c2) {
m1.error_code = 1;
cout << "\nNu se poate efectua inmultirea matricilor!\nCodul erorii: " << m1.
error_code << "\nIntrodu alte dimensiuni (Enter)";
getch();
goto sus;
} else {
matrix mat1(l1, c1);
matrix mat2(l2, c2);
cout << "Introdu elementele I matricii: " << endl;
for (int i = 0; i < l1; i++) {
for (int j = 0; j < c1; j++) {
cout << "M1[" << i << "][" << j << "]= ";
cin >> s;
mat1.citire(i, j, s);
}
}
cout << "Introdu elementele II matricii: " << endl;
for (int i = 0; i < l2; i++) {
for (int j = 0; j < c2; j++) {
cout << "M2[" << i << "][" << j << "]= ";
cin >> s;
mat2.citire(i, j, s);
}
}
system("CLS");
cout << "Matricea I " << endl;
mat1.afisare();
cout << "Matricea II " << endl;
mat2.afisare();
matrix matf(l1, c2);
s = 0;
for (int i = 0; i < l1; i++){
for (int j = 0; j < c1; j++) {
for (int k = 0; k < l1; k++){
s += mat1.valoare(i, k) * mat2.valoare(k, j);
}
matf.citire(i, j, s);
s = 0;
}
}
cout << endl << "Iata matricea rezultanta " << endl;
matf.afisare();
}
getch();
}
void inmultirea_numar() {
int l, c, s, nr;
system("CLS");
cout << "Introdu dimensiunea matricii: " << endl;
cout << "Nr de linii: ";
cin >> l;
cout << "Nr de coloane: ";
cin >> c;
matrix matr_nr(l, c);
for (int i = 0; i < l; i++)
for (int j = 0; j < c; j++) {
cout << "M[" << i << "][" << j << "]= ";
cin >> s;
matr_nr.citire(i, j, s);
}
cout << endl << "Matricea dreptunghiulara: " << endl;
matr_nr.afisare();
cout << "Inmulteste cu numarul: ";
cin >> nr;
matrix matr_rsp(l, c);
for (int i = 0; i < l; i++) {
for (int j = 0; j < c; j++) {
matr_rsp.citire(i, j, matr_nr.valoare(i, j) * nr);
}
}
cout << endl << "Raspuns: " << endl;
matr_rsp.afisare();
getch();
}
void adunarea_2matrici() {
matrix m1;
int l1, c1, l2, c2, s;
sus:
system("CLS");
cout << "Introdu dimensiunea matricei I: " << endl;
cout << "Nr de linii: ";
cin >> l1;
cout << "Nr de coloane: ";
cin >> c1;
cout << "Introdu dimensiunea matricei II: " << endl;
cout << "Nr de linii: ";
cin >> l2;
cout << "Nr de coloane: ";
cin >> c2;
if ((l1 != l2) && (c1 != c2)) {
m1.error_code = 2;
cout << "\nNu se poate efectua adunarea matricilor!\nCodul erorii: " << m1.er
ror_code << "\nIntrodu alte dimensiuni (Enter)";
getch();
goto sus;
} else {
matrix mat1(l1, c1);
matrix mat2(l2, c2);
cout << "Introdu elementele I matrici: " << endl;
for (int i = 0; i < l1; i++) {
for (int j = 0; j < c1; j++) {
cout << "M1[" << i << "][" << j << "]= ";
cin >> s;
mat1.citire(i, j, s);
}
}
cout << "Introdu elementele II matrici: " << endl;
for (int i = 0; i < l2; i++) {
for (int j = 0; j < c2; j++) {
cout << "M2[" << i << "][" << j << "]= ";
cin >> s;
mat2.citire(i, j, s);
}
}
system("CLS");
cout << "Matricea I" << endl;
mat1.afisare();
cout << endl << endl << "Maticea II" << endl;
mat2.afisare();
matrix matf(l1, c2);
for (int i = 0; i < l1; i++)
for (int j = 0; j < c1; j++) {
s = mat1.valoare(i, j) + mat2.valoare(i, j);
matf.citire(i, j, s);
s = 0;
}
cout << endl << "Iata matricea rezultanta " << endl;
matf.afisare();
}
getch();
}
void scaderea_2matrici() {
matrix m1;
int l1, c1, l2, c2, s;
sus:
system("CLS");
cout << "Introdu dimensiunea matricei I: " << endl;
cout << "Nr de linii: ";
cin >> l1;
cout << "Nr de coloane: ";
cin >> c1;
cout << "Introdu dimensiunea matricei II: " << endl;
cout << "Nr de linii: ";
cin >> l2;
cout << "Nr de coloane: ";
cin >> c2;
if ((l1 != l2) && (c1 != c2)) {
m1.error_code = 3;
cout << "\nNu se poate efectua scaderea matricilor!\nCodul erorii: " << m1.er
ror_code << "\nIntrodu alte dimensiuni (Enter)";
getch();
goto sus;
} else {
matrix mat1(l1, c1);
matrix mat2(l2, c2);
cout << "Introdu elementele I matrici: " << endl;
for (int i = 0; i < l1; i++) {
for (int j = 0; j < c1; j++) {
cout << "M1[" << i << "][" << j << "]= ";
cin >> s;
mat1.citire(i, j, s);
}
}
cout << "Introdu elementele II matrici: " << endl;
for (int i = 0; i < l2; i++) {
for (int j = 0; j < c2; j++) {
cout << "M2[" << i << "][" << j << "]= ";
cin >> s;
mat2.citire(i, j, s);
}
}
system("CLS");
cout << "Matricea I:" << endl;
mat1.afisare();
cout << endl << endl << "Maticea II:" << endl;
mat2.afisare();
matrix matf(l1, c2);
for (int i = 0; i < l1; i++)
for (int j = 0; j < c1; j++) {
s = mat1.valoare(i, j) - mat2.valoare(i, j);
matf.citire(i, j, s);
s = 0;
}
cout << endl << "Matricea rezultanta: " << endl;
matf.afisare();
}
getch();
}
int main() {
while (true) {
system("CLS");
cout << "Selectati item-ul dorit:" << endl;
cout << " 1 - Inmultirea a 2 matrici" << endl;
cout << " 2 - Inmultirea a unei matrice cu un numar" << endl;
cout << " 3 - Adunarea a 2 matrici" << endl;
cout << " 4 - Scaderea a 2 matrici" << endl;
cout << " Esc - Iesire" << endl;
char com = getch();
switch (com) {
case '1': {
inmultirea_2matrici();
break;
}
case '2': {
inmultirea_numar();
break;
}
case '3': {
adunarea_2matrici();
break;
}
case '4': {
scaderea_2matrici();
break;
}
case 27: {
exit(1);
break;
}
}
}
getch();
return 0;
}
Înmulțirea 2 matrici:
Adunarea 2 matrici:
Adunarea a 2 matrici:
Scaderea a 2 matrici:
Concluzii: