- 论坛徽章:
- 0
|
#include<iostream>
using namespace std;
class matrix {
double * elems;
short row,col;
public:
matrix(short vrow,short vcol) ;
~matrix();
void print();
int set (short vrow,short vcol,double val);
double operator () (short,short);
friend matrix operator + (matrix,matrix);
friend matrix operator - (matrix,matrix);
friend matrix operator * (matrix,matrix);
};
matrix::matrix(short vrow,short vcol) {
row = vrow;
col = vcol;
elems = new double[row * col];
}
matrix::~matrix() {
delete elems;
}
void matrix::print() {
for(int i = 0; i < row * col ; i++) {
if ( i > 0 && i % row == 0 ) cout << "\n";
cout << elems << "\t";
}
cout << "\n";
}
double matrix: perator () (short vrow,short vcol) {
return vrow < row && vcol < col && vrow >= 0 && vcol >= 0 ? elems[vrow * col + vcol] : 0.0;
}
int matrix::set (short vrow,short vcol,double val) {
if (vrow >= 0 && vrow < row && vcol >= 0 && vcol < col ) {
elems[vrow * col + vcol] = val;
return 0;
} else {
return 1;
}
}
matrix operator + (matrix m1,matrix m2) {
matrix m3(m1.row,m1.col);
if (m1.row != m2.row || m1.col != m2.col ) return m3;
for( int i = 0 ; i < m1.row ; i++ ) {
for ( int j = 0 ; j < m1.col ; j++ )
m3.set(i,j,m1(i,j) + m2(i,j));
}
return m3;
}
matrix operator - (matrix m1,matrix m2) {
matrix m(m1.row,m1.col);
if (m1.row != m2.row || m1.col != m2.col ) return m;
for( int i = 0 ; i < m1.row ; i++ ) {
for ( int j = 0 ; j < m1.col ; j++ ) {
cout << i << "," << j << "," << m1(i,j) << "," << m2(i,j) << "\n";
m.set(i,j,m1(i,j) - m2(i,j));
}
}
return m;
}
matrix operator * (matrix m1,matrix m2) {
matrix m3(m1.row,m2.col);
if ( m1.col != m2.row ) return m3;
for ( int i = 0 ; i < m1.row ; i++ ) {
for ( int j = 0 ; j < m2.col; j++ ) {
double value = 0 ;
for ( int k = 0 ; k < m1.col ; k++ )
value += m1(i,k) * m2(k,j) ;
m3.set(i , j , value);
}
}
return m3;
}
int main() {
matrix m1(3,4),m2(3,4),m3(2,3),m4(3,4),m5(2,4),m6(3,4);
m1.set(0,0,1);
m1.set(0,1,2);
m1.set(0,2,3);
m1.set(0,3,4);
m1.set(1,0,5);
m1.set(1,1,6);
m1.set(1,2,7);
m1.set(1,3, ;
m1.set(2,0,9);
m1.set(2,1,10);
m1.set(2,2,11);
m1.set(2,3,12);
m2.set(0,0,1);
m2.set(0,1,2);
m2.set(0,2,3);
m2.set(0,3,4);
m2.set(1,0,5);
m2.set(1,1,6);
m2.set(1,2,7);
m2.set(1,3, ;
m2.set(2,0,9);
m2.set(2,1,10);
m2.set(2,2,11);
m2.set(2,3,12);
m3.set(0,0,1);
m3.set(0,1,2);
m3.set(0,2,3);
m3.set(1,0,4);
m3.set(1,1,5);
m3.set(1,2,6);
m3.print();
cout << "----------------\n";
m1.print();
cout << "----------------\n";
m2.print();
cout << "----------------\n";
m4 = m1 + m2;
m4.print();
cout << "----------------\n";
m6 = m1 - m2;
m6.print();
m5 = m3 * m1;
m5.print();
} |
|