Необходимо создать класс, который проверяет, является матрица нормальной (размерность матрицы и ее элементы вводятся с клавиатуры пользователем). Но мне непонятно, как реализовать это на C++.
Когда я создаю два объекта, каждый имеет матрицу и мне нужно получить две матрицы одну введенную и другую транспонированную относительно введенной, чтобы я мог их умножит поэлементно и получить единичную матрицу.
Проблема в том, что я хочу передать элементы матрицы А в объект B в оригинале и сохранить там их статическими, а транспонировать только объект А и получить две матрицы над которыми можно сделать соответствующие математические операции, когда я транспонирую матрицу А, то и транспонируются элементы в B матрицы, а мне такое не нужно.
Мои наработки:
#include<iostream>
#include<cstdlib>
#include<conio.h>
using namespace std;
class Myclass{
public:
int rows;
int cols;
int **arr;
Myclass(int rows,int cols)
{
this->rows=rows;
this->cols=cols;
this->arr=new int*[rows];
for(int i=0;i<rows;i++)
{
arr[i]=new int[cols];
}
}
void input(int rows,int cols)
{
for(int i=0;i<rows;i++)
{
for(int j=0;j<cols;j++)
{
cin>>arr[i][j];
}
}
}
void inputb(int rows,int cols)
{
for(int i=0;i<rows;i++)
{
for(int j=0;j<cols;j++)
{
arr[i][j]=0;
}
}
}
void print()
{
for(int i=0;i<rows;i++)
{
for(int j=0;j<cols;j++)
{
cout<<arr[i][j]<<"\t";
}
cout<<endl;
}
}
void transpont(int rows,int cols)
{
int t;
for(int i = 0; i < rows; ++i)
{
for(int j = i; j < cols; ++j)
{
t = arr[i][j];
arr[i][j] = arr[j][i];
arr[j][i] = t;
}
}
}
Myclass & operator=(const Myclass &other)
{
this->rows=other.rows;
this->arr=new int*[other.rows];
for(int i=0; i<other.rows; i++)
{
this->arr[i]=other.arr[i];
}
return *this;
}
};
int main()
{
int r,c;
cout<<"Enter rows:";
cin>>r;
cout<<"Enter cols:";
cin>>c;
Myclass a(r,c);
Myclass b(r,c);
a.input(r,c);
b.inputb(r,c);
a.print();
a.transpont(r,c);
cout<<"_______B____"<<endl;
b.print();
b=a;
cout<<"_______B_ after b=a___"<<endl;
b.print();
cout<<"_______A____"<<endl;
a.print();
_getch();
return 0;
}