矩阵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;
}





全部评论

相关推荐

活泼的代码渣渣在泡池...:哈哈哈挺好的,我也上岸美团了,不说了,我又接了一单
点赞 评论 收藏
分享
肖先生~:那年秋招闯进一位少年,人们都清楚:成功对他来说只是时间问题
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务