矩阵testp105 p161 todo
//
// Created by 刘彪 on 2020/2/29.
//李春宝 p105 运行结果少输出一行 todo
//
#include <iostream>
#include <iomanip>
#include <cstdio>
using namespace std;
class Matrix{
int line;
int col;
int *elems;
public:
Matrix(){}
Matrix(int l,int c){
line = 1;
col = c;
elems = new int[col*line];
}
Matrix(const Matrix &s){
line = s.line;
col = s.col;
elems = new int[col*line];
for(int i=0;i<line*col;i++) elems[i] = s.elems[i];
}
~Matrix(){
delete [] elems;
}
bool get(int i,int j,int &x){
if(i<0 || j<0 ||i>=line || j>=col) return false;
else{
x = elems[i*col+j];
return true;
}
}
bool set(int i,int j,int x){
if(i<0 || j<0||i>=line || j>=col){
return false;
}else{
elems[i*col+j] = x;
return true;//p105返回false 感觉有问题
}
}
void disp(){
int i,j,x;
for(i=0;i<line;i++){
for(j=0;j<col;j++){
get(i,j,x);
cout<<setw(4)<<x;
}
cout<<endl;
}
}
};
int main(){
Matrix m1(2,3);
m1.set(0,0,1);
m1.set(0,1,2);
m1.set(0,2,3);
m1.set(1,0,4);
m1.set(1,1,5);
m1.set(1,2,6);
cout<<"juzhen 1"<<endl;
m1.disp();
Matrix m2(m1);
cout<<"juzhen 2"<<endl;
m2.disp();
return 0;
} p161 运算符重载 todo
//
// Created by 刘彪 on 2020/3/1.
//
#include <iostream>
#include <iomanip>
#include <cstdio>
using namespace std;
class Matrix{
int line;
int col;
int *elems;
public:
Matrix(){
line = col = 0;
elems = NULL;
}
Matrix(int l,int c){
line = 1;
col = c;
elems = new int[col*line];
}
Matrix(int r,int c,int *data){
line = r;
col = c;
elems = new int[line*col];
for(int i=0;i<line*col;i++) elems[i] = data[i];
}
~Matrix(){
delete [] elems;
}
const Matrix &operator=(const Matrix &);
int operator()(int row,int col);
void set(int row,int col,int val);
friend Matrix operator+(Matrix &p,Matrix &q);//void 自己加上 ??? error:friends can only be classes&nbs***bsp;functions
friend Matrix operator-(Matrix &p,Matrix &q);
friend Matrix operator*(Matrix &p,Matrix &q);
void disp();
};
const Matrix &Matrix::operator=(const Matrix &m) {
if(&m != this){
if(line != m.line || col != m.col){
delete[] elems;
line = m.line;
col = m.col;
elems = new int[line*col];
}
for(int i=0;i<line*col;i++) elems[i] = m.elems[i];
}
return *this;
}
int Matrix::operator()(int i, int j) {
if(i>=0 && i<line && j>0 && j<col) return elems[i*col+j];
else return 0;
}
void Matrix::set(int i, int j, int val){
if(i>=0 && i<line && j>0 && j<col) elems[i*col+j] = val;
}
Matrix operator+(Matrix &p,Matrix &q){
if(p.line == q.line && p.col == q.col){
int *data = new int[p.line*p.col];
for(int i=0;i<p.line*p.col;i++){
data[i] = p.elems[i] + q.elems[i];
}
return Matrix(p.line,p.col,data);
}
}
Matrix operator-(Matrix &p,Matrix &q){
if(p.line == q.line && p.col == q.col){
int *data = new int[p.line*p.col];
for(int i=0;i<p.line*p.col;i++){
data[i] = p.elems[i] - q.elems[i];
}
return Matrix(p.line,p.col,data);
}
} //control may reach end of non-void function [-Wreturn-type
Matrix operator *(Matrix &p,Matrix &q){
int s;
if(p.col == q.line){
int *data = new int[p.line*q.col];
for(int r=0;r<p.line;r++){
for(int c=0;c<q.col;c++){
s= 0;
for(int k=0;k<p.col;k++) s+=p(r,k)*q(k,c);
data[r*q.col+c] = s;
}
};
return Matrix(p.line,q.col,data);
}
}
void Matrix::disp(){
for(int r=0;r<line;++r){
for(int c=0;c<col;c++) cout<<setw(2)<<(*this)(r,c)<<" ";
cout<<endl;
}
}
int main(){
Matrix a(2,3),b(2,3),c(3,2),d(2,3),e(2,2);
a.set(0,0,1);
a.set(0,1,2);
a.set(0,2,3);
a.set(1,0,4);
a.set(1,1,5);
a.set(1,2,6);
b.set(0,0,1);
b.set(0,1,2);
b.set(0,2,3);
b.set(1,0,4);
b.set(1,1,5);
b.set(1,2,6);
c.set(0,0,1);
c.set(0,1,4);
c.set(1,0,2);
c.set(1,1,5);
c.set(2,0,3);
c.set(2,1,6);
cout<<"A:"<<endl;a.disp();
cout<<"B:"<<endl;b.disp();
cout<<"C:"<<endl;c.disp();
d = (a+b);
cout<<"A+B:"<<endl;d.disp();
d = (a-b);
cout<<"A-B:"<<endl;d.disp();
e = a*c;
cout<<"A*C:"<<endl;e.disp();
return 0;
} 