int matrix::Determinant()
{
return mData[0]*mData[3]- mData[1]*mData[2];
};
Классы и матрицы
Доброго времени суток. Нужна помощь. Задание звучит так : разработать класс для работы с матрицами 2х2 . Кинул весь код в архиве . Он работает , просто нужно еще реализовать нахождение определителя и возведение матрицы в степень . Помогите плиз
Цитата: Gevorg
реализовать нахождение определителя
как-то так:
Код:
Цитата: Gevorg
возведение матрицы в степень
в вашем случае можно сделать в лоб (так как по условию матрица 2*2):
Код:
void matrix::PowMatr(int n)
{
int *result = new int[mSizeX*mSizeY];
int k=0;
while(k<(mSizeX*mSizeY)){result[k++]=0;};
int *temp = new int[mSizeX*mSizeY];
int t=0;
while(t<(mSizeX*mSizeY))
{
temp[t]=mData[t];
t++;
};
for (int i=0; i<n-1; i++)
{
if (i<1)
{
result[0]=temp[0]*mData[0]+temp[1]*mData[2];
result[1]=temp[0]*mData[1]+temp[1]*mData[3];
result[2]=temp[2]*mData[0]+temp[3]*mData[2];
result[3]=temp[2]*mData[1]+temp[3]*mData[3];
}
else
{
t=0;
while(t<(mSizeX*mSizeY))
{
temp[t]=result[t];
t++;
}
result[0]=temp[0]*mData[0]+temp[1]*mData[2];
result[1]=temp[0]*mData[1]+temp[1]*mData[3];
result[2]=temp[2]*mData[0]+temp[3]*mData[2];
result[3]=temp[2]*mData[1]+temp[3]*mData[3];
}
}
for(int i=0;i<mSizeX;i++)
{
for(int j=0;j<mSizeY;j++)
{printf("[%d,%d]=%u ",i,j,result[(i*mSizeY)+j]);}
cout<<endl;
}
cout<<endl;
};
{
int *result = new int[mSizeX*mSizeY];
int k=0;
while(k<(mSizeX*mSizeY)){result[k++]=0;};
int *temp = new int[mSizeX*mSizeY];
int t=0;
while(t<(mSizeX*mSizeY))
{
temp[t]=mData[t];
t++;
};
for (int i=0; i<n-1; i++)
{
if (i<1)
{
result[0]=temp[0]*mData[0]+temp[1]*mData[2];
result[1]=temp[0]*mData[1]+temp[1]*mData[3];
result[2]=temp[2]*mData[0]+temp[3]*mData[2];
result[3]=temp[2]*mData[1]+temp[3]*mData[3];
}
else
{
t=0;
while(t<(mSizeX*mSizeY))
{
temp[t]=result[t];
t++;
}
result[0]=temp[0]*mData[0]+temp[1]*mData[2];
result[1]=temp[0]*mData[1]+temp[1]*mData[3];
result[2]=temp[2]*mData[0]+temp[3]*mData[2];
result[3]=temp[2]*mData[1]+temp[3]*mData[3];
}
}
for(int i=0;i<mSizeX;i++)
{
for(int j=0;j<mSizeY;j++)
{printf("[%d,%d]=%u ",i,j,result[(i*mSizeY)+j]);}
cout<<endl;
}
cout<<endl;
};
Красивее, к сожалению, не смог придумать:(, но зато работает))
ЗЫ: после того как добавите функции в класс, не забудьте добавить объявление этих функций, ну и желательно (читай обязательно) сделать освобождение памяти, выделенной для *result и *temp
ЗЫ : а как транспонировать матрицу ?