Добавил:
Studfiles2
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Лабораторные работы3 / KG3 / matrix
.cpp//---------------------------------------------------------------------------
#pragma hdrstop
#include "matrix.h"
#include "vcl.h"
TMatrix::TMatrix()
{
shirina=SIZE_MAX;
vysota=SIZE_MAX;
for(int i=0;i<SIZE_MAX;i++)
for(int j=0;j<SIZE_MAX;j++)
data[i][j]=0;
}
//---------------------------------------------------------------------------
TMatrix::TMatrix(int sh,int vys)
{
shirina=sh;
vysota=vys;
for(int i=0;i<SIZE_MAX;i++)
for(int j=0;j<SIZE_MAX;j++)
data[i][j]=0;
}
//---------------------------------------------------------------------------
TMatrix::TMatrix(int sh,int vys, float* values)
{
shirina=sh;
vysota=vys;
for(int i=0;i<shirina;i++)
for(int j=0;j<vysota;j++)
data[i][j]=values[i*vysota+j];
}
//---------------------------------------------------------------------------
void TMatrix::SetData(int x,int y,float value)
{
data[x][y]=value;
}
//---------------------------------------------------------------------------
void TMatrix::SetSizeX(int value)
{
if(value>0 && value<SIZE_MAX) shirina=value;
}
//---------------------------------------------------------------------------
void TMatrix::SetSizeY(int value)
{
if(value>0 && value<SIZE_MAX) vysota=value;
}
//---------------------------------------------------------------------------
float TMatrix::GetData(int x,int y)
{
return data[x][y];
}
//---------------------------------------------------------------------------
int TMatrix::GetSizeX()
{
return shirina;
}
//---------------------------------------------------------------------------
int TMatrix::GetSizeY()
{
return vysota;
}
//---------------------------------------------------------------------------
TMatrix TMatrix::operator +(TMatrix mat2)
{
for(int i=0;i<shirina;i++)
for(int j=0;j<vysota;j++)
data[i][j]+=mat2.data[i][j];
return *this;
}
//---------------------------------------------------------------------------
TMatrix TMatrix::operator -(TMatrix mat2)
{
for(int i=0;i<shirina;i++)
for(int j=0;j<vysota;j++)
data[i][j]-=mat2.data[i][j];
return *this;
}
//---------------------------------------------------------------------------
TMatrix TMatrix::operator *(TMatrix mat2)
{
TMatrix mat3(mat2.shirina,vysota);
for(int y=0;y<vysota;y++)
for(int i=0;i<mat2.shirina;i++)
for(int j=0;j<shirina;j++)
{
mat3.data[y][i]+=data[y][j]*mat2.data[j][i];
}
return mat3;
}
//---------------------------------------------------------------------------
TMatrix TMatrix::operator !()
{
TMatrix obrat(shirina,vysota);
float c;
int e;
for(e=0;e<shirina;e++) obrat.data[e][e]=1;
for(e=0;e<shirina;e++)
{
if(!data[e][e])
for(int y=e+1;!data[e][e] && y<shirina;y++)
for(int j=0;j<shirina;j++)
{
c=data[e][j];
data[e][j]=data[y][j];
data[y][j]=c;
c=obrat.data[e][j];
obrat.data[e][j]=obrat.data[y][j];
obrat.data[y][j]=c;
}
if(!data[e][e])
{
for(int m=0;m<shirina;m++)
for(int k=0;k<shirina;k++)
obrat.data[m][k]=0;
ShowMessage("Обратная матрица не существует (determinant=0)");
return obrat;
}
c=data[e][e];
for(int g=shirina-1;g>=0;g--)
{
data[e][g]/=c;
obrat.data[e][g]/=c;
}
for(int j=0;j<shirina;j++)
if(j!=e)
{
c=data[j][e];
for(int y=shirina-1;y>=0;y--)
{
data[j][y]-=data[e][y]*c;
obrat.data[j][y]-=obrat.data[e][y]*c;
}
}
}
return obrat;
}
//---------------------------------------------------------------------------
TMatrix TMatrix::T(TMatrix mat)
{
if(mat.shirina!=mat.vysota)
{
ShowMessage("Транспонирование невозможно.");
return mat;
}
float c=0;
for(int i=0;i<mat.shirina;i++)
for(int j=0;j<mat.vysota;j++)
{
if(i!=j)
{
c=mat.data[i][j];
mat.data[i][j]=mat.data[j][i];
mat.data[j][i]=c;
}
}
return mat;
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
#pragma package(smart_init)
Соседние файлы в папке KG3