Mình xem đi xem lại nhiều lần rồi nhưng vẫn không tìm được cách khắc phục ,mong các bạn xem giúp lỗi sai ở đâu ,cái hàm friend rắc rối quá!
Code:
#include <iostream.h>
class Vector
{
private:
int n;
double *p;
public:
Vector();
Vector(int nn);
Vector(const Vector &u);
~Vector();
void nhap();
void xuat();
int layn();
friend Vector nhanmV(const matran &u, const Vector &V);
};
Vector::Vector()
{
n=0;
p=NULL;
}
Vector::Vector(int nn)
{
n=nn;
p=new double[n];
}
Vector::Vector(const Vector &u)
{
n=u.n;
p=new double[n];
for(int i=0;i<n;i++)
p[i]=u.p[i];
}
Vector::~Vector()
{
delete []p;
p=NULL;
}
void Vector::nhap()
{
if(p==NULL)
{
cout<<"Nhap so chieu: ";
cin>>n;
p=new double[n];
}
for(int i=0;i<n;i++)
{
cout<<"phan tu thu "<<i<<" :";
cin>>p[i];
}
}
void Vector::xuat()
{
for(int i=0;i<n;i++)
cout<<p[i]<<"\t";
cout<<"\n";
}
int Vector::layn()
{
return n;
}
class matran
{
private:
int sd,sc;
double **p;
public:
matran();
matran(int sd1,int sc1);
matran(const matran &u);
~matran();
void nhap();
void xuat();
double tongdong(int k);
matran cong(const matran &u);
matran nhan(const matran &u);
int laysd();
int laysc();
friend Vector nhanmV(const matran &u, const Vector &V);
};
matran::matran()
{
sd=0;
sc=0;
p=NULL;
}
matran::matran(int sd1,int sc1)
{
sd=sd1;
sc=sc1;
p=new double*[sd];
for(int i=0;i<sd;i++)
p[i]=new double[sc];
}
matran::matran(const matran &u)
{
sd=u.sd;
sc=u.sc;
p=new double*[sd];
for(int i=0;i<sd;i++)
p[i]=new double[sc];
for(i=0;i<sd;i++)
for(int j=0;j<sc;j++)
p[i][j]=u.p[i][j];
}
matran::~matran()
{
for(int i=0;i<sd;i++)
delete []p[i];
delete []p;
p=NULL;
}
void matran::nhap()
{
if(p==NULL)
{
cout<<"Nhap so dong Va cot:";
cin>>sd>>sc;
p=new double*[sd];
for(int i=0;i<sd;i++)
p[i]=new double[sc];
}
for(int i=0;i<sd;i++)
for(int j=0;j<sc;j++)
{
cout<<"phan tu thu ["<<i<<"]["<<j<<"]=";
cin>>p[i][j];
}
}
void matran::xuat()
{
for(int i=0;i<sd;i++)
{
for(int j=0;j<sc;j++)
cout<<p[i][j]<<"\t";
cout<<"\n";
}
}
int matran::laysd()
{
return sd;
}
int matran::laysc()
{
return sc;
}
double matran::tongdong(int k)
{
double ret=0;
for(int i=0;i<sc;i++)
ret+=p[k][i];
return ret;
}
matran matran::cong(const matran &u)
{
matran ret(sd,sc);
for(int i=0;i<sd;i++)
for(int j=0;j<sc;j++)
ret.p[i][j]=p[i][j]+u.p[i][j];
return ret;
}
matran matran::nhan(const matran &u)
{
matran ret(sd,u.sc);
for(int i=0;i<ret.sd;i++)
for(int j=0;j<ret.sc;j++)
{
ret.p[i][j]=0;
for(int k=0;k<sc;k++)
ret.p[i][j]+=p[i][k]*u.p[k][j];
}
return ret;
}
Vector nhanmV(const matran &u,const Vector &V)
{
Vector ret(u.sd);
for(int i=0;i<u.sd;i++)
{
ret.p[i]=0;
for(int j=0;j<V.n;j++)
ret.p[i]+=u.p[i][j]*V.p[j];
}
return ret;
}
void main()
{
matran a;
a.nhap();
cout<<"Ma tran a:\n";
a.xuat();
Vector b;
b.nhap()();
cout<<"Vector b:\n";
b.xuat();
if(a.laysc()==b.layn())
{
Vector c=nhanmV(a,b);
cout<<"Vector c=\n";
c.xuat();
}
}