Sunteți pe pagina 1din 6

Ministerul Educatiei din Republica Moldova

Universitatea Tehnica din Moldova


FCIM

Raport
Lucrare de laborator nr.7
Programare in C++

VARIANTA 7

A efectuat: st.gr TI-15X


Student Name

A verificat:
Scrob Sergiu

Chisinau 2016
LUCRARE DE LABORATOR NR. 7

Tema: Şabloane
Scopul lucrării:
 Studierea necesităţii şabloanelor;
 Studierea regulilor de definire şi utilizare a şabloanelor;
 Studierea specializării şabloanelor;
 Studierea potenţialelor probleme rezolvate cu ajutorul şabloanelor;

Varianta 7
а) Creaţi o funcţie şablon, care schimbă după perechi elementele masivelor în felul următor:
primul element va avea valoarea sumei perechii, dar al doilea diferenţei perechii.
De exemplu: lista- 0 2 3 4 3 6, rezultatul 2 –2 7 –1 9 –3.
b) Creaţi clasa parametrizată Matrix – matrice. Clasa trebuie să conţină constructorii, destructorii
şi funcţiile getRows, getCols, operatorii [], +, -, * şi operatorii de intrare/ieşire.
Codul programului:
#include <iostream>

using namespace std;

template <typename T>


void f_template(T *arr, int n)
{
T *tmpl;
tmpl = new T[n];
int i = 0;

while (i <= n)
{
tmpl[i] = arr[i] + arr[i + 1];
tmpl[i + 1] = arr[i] - arr[i + 1];
i += 2;
}
cout << "Original array :" << endl;
for (i = 0; i <= n; i++)
cout << arr[i] << " ";
cout << "\n\nTransformed array :" << endl;
for (i = 0; i <= n; i++)
cout << tmpl[i] << " ";
cout << endl << endl;
}

template <typename T>


void f_input(T *arr, int n)
{
int i = 0;

cout << "*Input : \n" << endl;


while (i <= n)
{

2
cin >> arr[i];
i++;
}
system("pause");
system("cls");
}

int main()
{
int n, ch;

cout << "Input array dimension >> ";


cin >> n;
cout << "Integer array or float ?? (1/0) >> ";
cin >> ch;

if (ch == 1)
{
int *arr = new int[n];
f_input(arr, n);
f_template(arr, n);
}
if (ch == 0)
{
float *arr = new float[n];
f_input(arr, n);
f_template(arr, n);
}
else
cout << "Bad choice !!" << endl;

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

Codul programului b;

#include <iostream>

using namespace std;

template <typename T>


class Matrix
{
private:
T **matrix;
int rows;
int cols;

public:
Matrix() : matrix(NULL), rows(0), cols(0)
{}

Matrix(int rows, int cols)


{
int i;

3
this->rows = rows;
this->cols = cols;
matrix = new T*[this->rows];
for (i = 0; i <= rows; i++)
matrix[i] = new T[cols];
}

~Matrix()
{
int i;

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


delete [] matrix[i];
delete [] matrix;
rows = 0;
cols = 0;
}

int getRows()
{
return (rows);
}

int getCols()
{
return (cols);
}

T *operator[](int index)
{
return (matrix[index]);
}

Matrix<T> &operator+(Matrix<T> &obj)


{
Matrix<T> *temp = new Matrix<T>(*this);
int i, j;

for (i = 0; i < obj.rows; i++)


for (j = 0; j < obj.cols; j++)
temp->matrix[i][j] += obj.matrix[i][j];
return *temp;
}

Matrix<T> &operator-(Matrix <T> &obj)


{
Matrix<T> *temp = new Matrix<T>(*this);
int i, j;

for (i = 0; i < obj.rows; i++)


for (j = 0; j < obj.cols; j++)
temp->matrix[i][j] -= obj.matrix[i][j];
return *temp;
}

Matrix <T> operator*(Matrix <T> &obj)


{

4
}

friend istream &operator>>(istream &in, Matrix<T> &obj)


{
int i = 0;
int j = 0;

cout << "*Input: \n" << endl;


for (i = 0; i < obj.rows; i++)
for (j = 0; j < obj.cols; j++)
{
cout << "M["<<i+1<<"]["<<j+1<<"] = ";
in >> obj.matrix[i][j];
}
system ("pause");
system ("cls");
return (in);
}

friend ostream &operator<<(ostream &out, Matrix<T> &obj)


{
int i = 0;
int j = 0;

out << "*Output: \n" << endl;


for (i = 0; i < obj.rows; i++)
{
for (j = 0; j < obj.cols; j++)
out << obj.matrix[i][j] << "\t";
out << endl;
}
return (out);
}
};

int main()
{
int r;
int c;

cout << "Let's create first matrix !!" << endl;


cout << "Input num of rows >> ";
cin >> r;
cout << "Input num of cols >> ";
cin >> c;

Matrix<int> obj(r, c);

cin >> obj;

cout << "Create second matrix !!" << endl;


cout << "Input num of rows >> ";
cin >> r;
cout << "Input num of cols >> ";
cin >> c;

Matrix<int> obj2(r, c);

5
cin >> obj2;

cout << "Show results:" << endl;


cout << "First matrix:" << endl << obj << endl;
cout << "Second matrix:" << endl << obj2 << endl;

cout << "Matrix adition:" << endl << obj + obj2 << endl;
obj - obj2;
cout << "Matrix - :" << endl << obj - obj2 << endl;

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

Demonstratea programului:

Concluzie:

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

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