#include <iostream.h>
#include <math.h>
#include <string.h>
#include <stdio.h>
#include <windows.h>
// Описание класса для работы с квадратными матрицами порядка 2
class matrix {
private: float mData[4];
public: matrix() {for (int i=0;i<4;i++) mData=0;};
matrix(float el1,float el2,float el3,float el4) {mData[0]=el1; mData[1]=el2; mData[2]=el3;mData[3]=el4;};
float getel1() {return mData[0];};
float getel2() {return mData[1];};
float getel3() {return mData[2];};
float getel4() {return mData[3];};
void print() {cout<<mData[0]<<"\t"<<mData[1]<<"\n"<<mData[2]<<"\t"<<mData[3]<<endl;}
bool operator ==(const matrix &m)
{if ((mData[0]==m.mData[0])&&(mData[1]==m.mData[1])&&(mData[2]==m.mData[2])&&(mData[3]==m.mData[3]))
return true; return false;};
bool operator !=(const matrix &m)
{if ((mData[0]==m.mData[0])&&(mData[1]==m.mData[1])&&(mData[2]==m.mData[2])&&(mData[3]==m.mData[3]))
return false; return true;};
matrix operator + (const matrix &m)
{float d[4]; for (int i=0;i<4;i++) d=mData+m.mData; matrix res(d[0],d[1],d[2],d[3]); return res;};
matrix operator - (const matrix &m)
{float d[4]; for (int i=0;i<4;i++) d=mData-m.mData; matrix res(d[0],d[1],d[2],d[3]); return res;};
matrix operator * (float f)
{float d[4]; for (int i=0;i<4;i++) d=mData*f; matrix res(d[0],d[1],d[2],d[3]); return res;};
matrix operator * (const matrix &m)
{float d[4];for(int i=0;i<4;i++){
d[0]=mData[0]*m.mData[0]+mData[1]*m.mData[2];
d[1]=mData[0]*m.mData[1]+mData[1]*m.mData[3];
d[2]=mData[2]*m.mData[0]+mData[3]*m.mData[2];
d[3]=mData[2]*m.mData[1]+mData[3]*m.mData[3];}
matrix res(d[0],d[1],d[2],d[3]); return res;}
void Transponirovanie() { cout<<mData[0]<<"\t"<<mData[2]<<"\n"<<mData[1]<<"\t"<<mData[3]<<endl;}
void Obratnaya() { float q,r;
r=mData[0]*mData[3]-mData[1]*mData[2];
if(r==0) {cout<<"Obratnoi matrici ne sushestvuet"<<endl;}
else {q=1/r;
float d[4];for(int i=0;i<4;i++)
{ d[0]=q*mData[3];
d[1]=(-1)*q*mData[1];
d[2]=(-1)*q*mData[2];
d[3]=q*mData[0];}
matrix res(d[0],d[1],d[2],d[3]);
cout<<d[0]<<"\t"<<d[1]<<"\n"<<d[2]<<"\t"<<d[3]<<endl;}
};
void Determinant() { float det; det=mData[0]*mData[3]-mData[1]*mData[2]; cout<<"Determinant raven"<<"\t"<<det<<endl; }
void Sled() { float sl; sl=mData[0]+mData[3]; cout<<"Sled raven"<<"\t"<<sl<<endl; }
};
int menu();
matrix vvod(int number);
int menu() //Функция вывода меню. Возвращает ответ пользователя.
{char buf[10];
int option;
do {
puts("============================");
puts("1-Summa matric");
puts("2-Raznost matric");
puts("3-Umnojenie matrici na skalyar");
puts("4-Transponirovanie matrici");
puts("5-Nahojdenie obratnoi matrici");
puts("6-Umnojenie matric");
puts("7-Opredelitel matrici");
puts("8-Sled matrici");
puts("9-Exit");
puts("============================");
cin>>buf;
option=atoi(buf);}
while (!option);
return option;
}
matrix vvod(int number){
float e[4];
cout<<"Vevedite matricu nomer"<<number<<endl;
for(int i=0;i<4;i++) { cin>>e;}
matrix res(e[0],e[1],e[2],e[3]);
return res;
}
int main() // Главная функция
{
matrix a;
matrix b;
matrix c;
float f;
while (true){
switch (menu()){
case 1: system("cls");a=vvod(1);b=vvod(2); c=a+b;cout<<"Rezultat"<<"\n";c.print(); cout<<endl;break;
case 2: system("cls");a=vvod(1);b=vvod(2); c=a-b;cout<<"Rezultat"<<"\n";c.print(); cout<<endl;break;
case 3: system("cls");a=vvod(1);cout<<"vvedite skalyar";cin>>f; c=a*f;cout<<"Rezultat"<<"\n";c.print(); cout<<endl;break;
case 4: system("cls");a=vvod(1);cout<<"Rezultat"<<"\n";a.Transponirovanie();break;
case 5: system("cls");a=vvod(1);cout<<"Rezultat"<<"\n";a.Obratnaya();break;
case 6: system("cls");a=vvod(1);b=vvod(2); c=a*b;cout<<"Rezultat"<<"\n";c.print(); cout<<endl;break;
case 7: system("cls");a=vvod(1);a.Determinant();break;
case 8: system("cls");a=vvod(1);a.Sled();break;
case 9: return 0;
default: cout<<"Takoi optii net"<<endl;
}};
return 0;
}
разработать класс для работы с матрицами 2х2
Осталось реализовать одну функцию - возведение матрицы в степень . Если будет время и желание , посмотрите плиз . Заранее благодарен
Код: