matraanj

Màu nền
Font chữ
Font size
Chiều cao dòng

#include <iostream.h>

#include <conio.h>

#include <assert.h>

class matrix

{

private:

int row, col;

float *a;

public:

matrix(int n=3, int m=3); // constructor

matrix( const matrix &);// copy constructor

~matrix();// descontructor

void set_matrix(int , int); // khai tao ma tran

friend matrix operator+(const matrix&, const matrix & ); // cong hai ma tran

friend matrix operator-(const matrix&, const matrix & ); // tru hai ma tran

friend matrix operator*(const matrix&, const matrix & ); // nhan hai ma tran

friend matrix operator* ( const matrix &, const float &); // nhan ma tra voi mot so

friend ostream & operator << ( ostream &,const matrix&); // xuat

friend istream & operator>>( istream &, matrix &); // chen

friend bool operator==( const matrix &, const matrix &); // bang nhau

friend bool operator!=( const matrix &, const matrix &); // khac nhau

friend matrix operator !( const matrix &); // chuyen vi ma tran

matrix & operator=( const matrix &); // gan

float & operator()( int , int ); // toan tu goi ham

};

matrix::matrix(int n, int m)

{

row=n;

col=m;

a=new float [n*m];

for ( int i=0; i<n; i++)

for ( int j=0; j<m; j++)

*(a+i*m+j)=0;

}

matrix::matrix( const matrix &b)

{

row=b.row;

col=b.col;

a=new float[row*col];

for( int i=0; i<row; i++)

for ( int j=0; j<col; j++)

a[i*col+j]=b.a[i*col+j];

}

matrix::~matrix()

{

delete[] a;

}

matrix operator+(const matrix& n, const matrix &m )

{

assert(n.row==m.row && n.col==m.col); // phai la hai ma tran cung cap

matrix result(n);

delete[] result.a;

result.a=new float[result.row * result.col];

for( int i=0; i<n.row; i++)

for( int j=0; j<n.col; j++)

result.a[i*n.col+j]=n.a[i*n.col+j]+m.a[i*n.col+j];

return result;

}

matrix operator-( const matrix &n, const matrix &m)

{

assert (n.row==m.row && n.col==m.col);

matrix result(n);

delete[] result.a;

result.a=new float[result.row * result.col];

for ( int i=0; i<n.row; i++)

for( int j=0; j<n.col; j++)

result.a[i*n.col+j]=n.a[i*n.col+j]-m.a[i*n.col+j];

return result;

}

matrix operator* ( const matrix &n, const float &c)

{

matrix result(n);

delete[] result.a;

result.a=new float[result.row * result.col];

for ( int i=0; i<n.row; i++)

for( int j=0; j<n.col; j++)

result.a[i*n.col+j]=n.a[i*n.col+j]*c;

return result;

}

matrix operator*( const matrix &n, const matrix &m)

{

assert(n.col==m.row);

matrix result(n.row,m.col);

delete[] result.a;

result.a=new float[result.row * result.col];

for( int i=0; i<n.row; i++)

for( int j=0; j<m.col; j++)

for ( int k=0; k<m.row; k++)

result.a[i*m.col+j]+= n.a[i*n.col+k]* m.a[k*m.col+j] ;

return result;

}

ostream & operator <<( ostream & out, const matrix &n)

{

for( int i=0; i<n.row; i++)

{

out<<endl;

for( int j=0; j<n.col; j++)

out<<" \t "<<n.a[i*n.col+j];

}

return out;

}

istream &operator >>( istream &in, matrix &n)

{

cout <<"So hang: "; in>>n.row;

cout <<"SO cot: " ; in>>n.col;

for( int i=0; i<n.row; i++)

for( int j=0; j<n.col; j++) {

cout<<"a["<<i<<"]"<<"["<<j<<"] = ";

in>>n.a[i*n.col+j];

}

return in;

}

matrix& matrix::operator =( const matrix &n)

{

row=n.row;

col=n.col;

delete [] a;

a =new float[row*col];

assert(a!=0);

for( int i=0; i<row; i++)

for( int j=0; j<col; j++)

a[i*col+j]=n.a[i*col+j];

return *this;

}

bool operator==( const matrix &n, const matrix &m)

{

if ( n.row==m.row && n.col==m.col)

{

for( int i=0; i<n.row; i++)

for( int j=0; j<n.col; j++)

if ( n.a[i*n.col+j]!=m.a[i*n.col+j]) return 0;

}else return 0;

return 1;

}

bool operator!=( const matrix &n, const matrix &m)

{

return !(n==m);

}

matrix operator !( const matrix &n)// ma tran chuyen vi

{

matrix result(n.col,n.row);

for(int i=0; i<result.row; i++)

for( int j=0; j<result.col; j++)

result.a[i*result.col+j]=n.a[j*result.row+i];

return result;

}

float & matrix::operator()( int n, int m)

{

assert(n>=0 && n< row && m>=0 && m < col);

return a[n*col+m];

}

int main ()

{

matrix T,M, N,B,L;

cout << "Nhap hai ma tran M va T co cung so hang va so cot, thuc hien +/- ma tran:" <<endl

<< "Chu y: M va T la hai ma tran cung cap."<<endl;

cout<<"

Ma tran M: "<<endl;

cin>>T;

cout<<T;

cout<<"

Ma tran T" <<endl;

cin>>M;

cout<<M;

N=T+M;

cout<<"

Ma tran N=M+T: "<<endl <<N;

N=M-T;

cout<<"

Ma tran N=M-T: "<<endl <<N;

B=N;

cout<<"

gan hai ma tran B=N" <<endl<<B;

cout << "Nhap ma tran L, thuc hien nhan hai ma tran B va L ( chu y: B.cot=L.row)" <<endl;

cout << "Ma tran L:"<<endl;

cin>>L;

N=B*L;

cout<<"

Nhan hai ma tran N=B*L" <<endl<<N; getch();

cout<<"

Nhan ma tran B voi mot hang so c bat ki: " <<endl;

N=B*3.4;

cout<<"

Nhan hai ma tran N=B*3.4: " <<endl<<N; getch();

cout<<"

Kiem tra hai ma tran khac nhau?"<<endl;

if ( M!=N) cout<<"Ma tran M va N la khac nhau"<<endl;

else cout<< "Ma tran M va N la bang nhau." <<endl;

getch();

N=B;// thu lenh gan dong thoi kiem tra toan tu bang nhau

cout<<"Kiem tra hai ma tran co khac nhau?"<<endl;

if ( B==N) cout<<"Hai ma tran B va N la bang nhau"<<endl;

else cout<< "Hai ma tran B va N la khong bang nhau." <<endl;

getch();

cout<<"Chuyen vi ma tran B:"<<endl;

cout<<"Truoc khi chuyen vi ma tran:"<<endl <<B;

cout<<"

Sau khi chuyen vi ma tran: "<<endl <<!B;

getch();

cout << "Toan tu goi ham de truy xuat mot phan tu cua ma tran: " <<endl;

float value=M(0,1);

cout<< "value: " << value <<endl;

getch();

return 0;

}

Bạn đang đọc truyện trên: Truyen2U.Pro