Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
информатика отчет.doc
Скачиваний:
1
Добавлен:
01.03.2025
Размер:
241.15 Кб
Скачать

9)Вычислить сумму, разность, произведение матриц

#include <iostream.h>

#include <conio.h>

#include <math.h>

// Класс матрица

class Matrix

{

private:

// Собственные элементы:

static int size; // Порядок матрицы

int **matrix; // Матрица

public:

// Общедоступные элементы:

Matrix() {} // Конструктор по умолчанию

Matrix(const Matrix &Object); // Конструктор копирования

~Matrix(); // Деструктор

Matrix &operator=(const Matrix &Object); // Перегрузка =

Matrix operator+(Matrix &); // Сложение матриц

Matrix operator-(Matrix &); // Вычитание матриц

Matrix operator*(Matrix &); // Перемножение матриц

// Перегрузка оператора << для вывода матрицы

friend ostream &operator<<(ostream &, Matrix &);

// Перегрузка оператора >> для ввода матрицы

friend istream &operator>>(istream &, Matrix &);

};

// Конструктор копирования

Matrix::Matrix(const Matrix &Object)

{

int i,j;

size = Object.size;

matrix = new int *[size];

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

matrix[i] = new int [size];

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

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

matrix[i][j] = Object.matrix[i][j];

}

// Деструктор

Matrix::~Matrix()

{

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

delete matrix[i];

delete matrix;

}

// Перегрузка оператора =

Matrix& Matrix::operator=(const Matrix &Object)

{

int i, j;

size = Object.size;

matrix = new int *[size];

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

matrix[i] = new int [size];

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

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

matrix[i][j] = Object.matrix[i][j];

return *this;

}

// Перегрузка оператора +

Matrix Matrix::operator+(Matrix &fp1)

{

int i, j;

if (size == fp1.size)

{

Matrix fp(fp1);

for (i=0;i<fp.size;i++)

for (j=0;j<fp.size;j++)

fp.matrix[i][j]=matrix[i][j]+fp1.matrix[i][j];

return fp;

}

}

// Перегрузка оператора -

Matrix Matrix::operator-(Matrix &fp1)

{

int i, j;

if (size == fp1.size)

{

Matrix fp(fp1);

for (i = 0; i < fp.size; i++)

for (j = 0; j < fp.size; j++)

fp.matrix[i][j] = matrix[i][j] - fp1.matrix[i][j];

return fp;

}

}

// Перегрузка оператора *

Matrix Matrix::operator*(Matrix &fp1)

{

int i, j, k, sum;

if (size == fp1.size)

{

Matrix fp(fp1);

for(i = 0; i < fp.size; i++)

for(j = 0; j < fp.size; j++)

{

sum = 0;

for (k = 0; k < fp.size; k++)

sum += matrix[i][k] * fp1.matrix[k][j];

fp.matrix[i][j]=sum;

}

return fp;

}

}

// Перегрузка оператора >>

istream &operator>>(istream &fi, Matrix &fp)

{

int i, j;

fp.matrix = new int *[fp.size];

for (i = 0; i < fp.size; i++)

fp.matrix[i] = new int [fp.size];

for (i = 0; i < fp.size; i++)

for (j = 0; j < fp.size; j++)

{

fi >> fp.matrix[i][j];

}

return fi;

}

// Перегрузка оператора <<

ostream &operator<<(ostream &fo, Matrix &fp)

{

int i, j;

for (i = 0; i < fp.size; i++)

for (j = 0; j < fp.size; j++)

{

fo << fp.matrix[i][j]<<"\t";

}

return fo;

}

int Matrix::size = 2;

Void main()

{

Matrix pr1, pr2;

cout << "Vedite matritcu A -> \n ";

cin >> pr1;

cout << "\nVedite matritcu B -> \n ";

cin >> pr2;

cout << "\nA+B="<<(pr1+pr2);

cout << "\n\nA-B="<<(pr1-pr2);

cout << "\n\nA*B="<<(pr1*pr2)<<"\t";

pr1 = pr2;

}