這是林柏出的問題,但以下是一個可自訂大小的矩陣,對其運算子作覆載
#include<iostream.h>
class matrix
{
private:
int n,m,*p;
public:
matrix();
matrix(const matrix&);
void input();
void input(matrix);
void out();
matrix same(matrix&);
matrix operator +(matrix&);
matrix operator *(matrix&);
};
matrix::matrix(){}
matrix::matrix(const matrix& nm)
{
n=nm.n;
m=nm.m;
p=new int[nm.n*nm.m];
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
p[m*i+j]=nm.p[nm.m*i+j];
}
}
}
void matrix::input()
{
cout<<"n="; cin>>n;
cout<<"m="; cin>>m;
cout<<endl;
p=new int[n*m];
*this=same(*this);
}
void matrix::input(matrix nm)
{
n=nm.n;
m=nm.m;
p=new int[n*m];
cout<<"n="<<nm.n<<endl;
cout<<"m="<<nm.m<<endl;
cout<<endl;
*this=same(nm);
}
matrix matrix::same(matrix &s)
{
for(int i=0;i<s.n;i++)
{
for(int j=0;j<s.m;j++)
{
cout<<"("<<i+1<<","<<j+1<<")=";
cin>>s.p[s.m*i+j];
}
}
return s;
}
void matrix::out()
{
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
cout<<p[m*i+j]<<" ";
}
cout<<endl;
}
cout<<endl;
cout<<"--------------------------------------------------------"<<endl;
}
matrix matrix::operator +(matrix &nm)
{
matrix c;
c.n=n;
c.m=m;
c.p=new int[n*m];
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
c.p[c.m*i+j]=p[m*i+j]+nm.p[nm.m*i+j];
}
}
return c;
}
matrix matrix::operator *(matrix &nm)
{
matrix f; //n*l
f.n=n;
f.m=nm.m;
f.p=new int[n*nm.m];
for(int a=0;a<n*nm.m;a++)
{
f.p[a]=0;
}
for(int i=0;i<n;i++)
{
for(int j=0;j<nm.m;j++)
{
for(int k=0;k<nm.n;k++)
{
f.p[f.m*i+j]+=p[m*i+k]*nm.p[nm.m*k+j];
}
}
}
return f;
}
void main()
{
matrix A,B,C,D,F;
cout<<"Please enter matrix A(n*m):"<<endl;
A.input(); //n*m
cout<<"Please enter matrix B(A.n*A.m):"<<endl;
B.input(A); //n*m
cout<<'\n'<<"C=A+B"<<endl;
C=A+B;
cout<<"Please enter matrix D(A.m*l):(n=A.m!,別輸入錯誤)"<<endl; D.input();
cout<<'\n'<<"F=A*D"<<endl;
F=A*D; //F is n*l
cout<<"--------------------------------------------------------"<<endl;
cout<<"A="<<endl; A.out();
cout<<"B="<<endl; B.out();
cout<<"C="<<endl; C.out();
cout<<"D="<<endl; D.out();
cout<<"F="<<endl; F.out();
}
我要問你會不會把矩陣內的元素都宣告成complex型態,然後對其運算子覆載
ㄏㄏㄏ 一個complex物件集合成任一大小的矩陣
wonba~~~~~~ 我知道你一定不會的拉~~~~~~~~~~~
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.231.48.52