#ifndef CLASS_DEFINITION_H
#define CLASS_DEFINITION_H
#include <iostream.h>
#include <windows.h>
#include <stdio.h>
#include <conio.h>
#include <math.h>
#define MATRIX_SIZE_X 2
#define MATRIX_SIZE_Y 2
class matrix { // класс матрица
private:
int *mData;
int mSizeY;
int mSizeX;
int refCount;
public:
matrix (int sx,int sy)
{
int i=0;
mSizeY = sy;
mSizeX = sx;
refCount = 0;
mData = new int[sx*sy];
while(i<(sx*sy)){mData[i++]=0;};
};
~matrix() {if((refCount--)<1){delete[] mData;}}
int operator[](int i){return mData;}
matrix operator=(matrix &b);
matrix operator+(matrix &b);
matrix operator-(matrix &b);
matrix operator*(matrix &b);
matrix operator*(int f);
void Determinant();
void Trans();
void Matrix_obratnaya();
void In_put();
void Out_put();
};
matrix matrix::operator = (matrix &b)
{
int i=0; refCount++;
while(i<(mSizeX*mSizeY)){mData=b;i++;}
return *this;
};
matrix matrix::operator * (matrix &b)
{
int i=0; refCount++;
while(i<(mSizeX*mSizeY)){mData[i++]*=b;i++;}
return *this;
};
matrix matrix::operator * (int f)
{
int i=0; refCount++;
while(i<(mSizeX*mSizeY)){mData[i++]*=f;}
return *this;
};
matrix matrix::operator + (matrix &b)
{
int i=0; refCount++;
while(i<(mSizeX*mSizeY)){mData+=b;i++;}
return *this;
};
matrix matrix::operator - (matrix &b)
{
int i=0; refCount++;
while(i<(mSizeX*mSizeY)){mData-=b;i++;}
return *this;
};
void matrix::Determinant()
{
cout<<"detM="<<mData[0]*mData[3]- mData[1]*mData[2]<<endl;
};
void matrix::Trans()
{
for(int i=0;i<mSizeX;i++)
{
for(int j=0;j<mSizeY;j++)
{printf("[%d,%d]=%u ",i,j,mData[(j*mSizeX)+i]);}
cout<<endl;
}
cout<<endl;
};
void matrix::Out_put()
{
for(int i=0;i<mSizeX;i++)
{
for(int j=0;j<mSizeY;j++)
{printf("[%d,%d]=%u ",i,j,mData[(i*mSizeY)+j]);}
cout<<endl;
}
cout<<endl;
};
void matrix::In_put()
{
for(int i=0;i<mSizeX;i++)
{
for(int j=0;j<mSizeY;j++){cin>>(mData[(i*mSizeX)+j]);}
}
};
#endif
Класс матриц
Доброго времени суток. Нужна помощь. Задание звучит так : разработать класс для работы с матрицами 2х2 .Вот код . Он работает , просто нужно еще реализовать нахождение обратной матрицы. Помогите плиз
http://ru.wikipedia.org/wiki/Обратная_матрица#.D0.9F.D1.80.D0.B8.D0.BC.D0.B5.D1.80.D1.8B
Код:
void matrix::Matrix_obratnaya()
{
float k=1/((mData[0]*mData[2])-(mData[1]*mData[3]));
for(int i=0;i<mSizeX;i++)
{
for(int j=0;j<mSizeY;j++)
{printf("[%d,%d]=%u ",i,j,k*mData[(i*mSizeY)+j]);}
cout<<endl;
}
cout<<endl;
}
{
float k=1/((mData[0]*mData[2])-(mData[1]*mData[3]));
for(int i=0;i<mSizeX;i++)
{
for(int j=0;j<mSizeY;j++)
{printf("[%d,%d]=%u ",i,j,k*mData[(i*mSizeY)+j]);}
cout<<endl;
}
cout<<endl;
}
спс , а вот еще такой вопрос : как возвести матрицу в степень ?
Код:
matrix matrix::power(matrix a, int n)
{
if (n==1) return a;
else return a*power(a,n-1);
}
{
if (n==1) return a;
else return a*power(a,n-1);
}
и как правильно этот конструктор написать ?
Цитата: Gevorg
и как правильно этот конструктор написать ?