现在的位置: 首页 > 综合 > 正文

求矩阵之和

2013年10月09日 ⁄ 综合 ⁄ 共 2049字 ⁄ 字号 评论关闭

1.题目:

Problem Description

设计一个矩阵类Data,包括矩阵的行、列、矩阵数据等私有数据成员。要求实现两个矩阵的加。

Input

输入数据有多组,每组输入数据有三行,第一行两个整数,分别代表矩阵的行数m和列数n;第二行有m*n个整数,是第一个矩阵的数据;第三行也有m*n个整数,是第二个矩阵的数据。

Output

对于每组输入数据,输出两个矩阵的和。

Sample Input

3 3
1 1 1 2 2 2 3 3 3
1 1 1 1 1 1 1 1 1
2 3
1 2 3 4 5 6
1 1 1 1 1 1

Sample Output

2 2 2
3 3 3
4 4 4
2 3 4
5 6 7

 

2.下面这个代码没有真正达到目的:

 

#include <iostream>
using namespace std;

#define N 500

class Data{
    
private:
    int row, col, *a;
    
public:
    Data();
    Data(int* b, int& l, int& r);
    Data operator+(Data&);
    void show();
    
};

Data::Data()
{
    row = 0;
    col = 0;
    int* b = new int[N];
    a = b;
}

Data::Data(int* b, int& l, int& r)
{
    row = l;
    col = r;
    a = b;
}

Data Data::operator+(Data& c)
{
    Data sum;
    sum.row = c.row;
    sum.col = c.col;
    
    for (int i = 0; i < row * col; i++)
        sum.a[i] = a[i] + c.a[i];
        
    return sum;
}

void Data::show()
{
    int i, j, k = 0;
    
    for (i = 0; i < row; i++) {
            
        for (j = 0; j < col; j++) {
            
            if (j == 0)
                cout << a[k++];
            else
                cout << ' ' << a[k++];
    
        }
        
        cout << endl;
    }
}

int main()
{
    int m, n, i, j, a[N], b[N];
    
    while (cin >> m >> n) {
            
        for (i = 0; i < m * n; i++)
            cin >> a[i];
    
        for (j = 0; j < m * n; j++)
            cin >> b[j];
            
        Data x(a, m, n), y(b, m, n), z;
        
        z = x + y;
        
        z.show();
    }
    
    return 0;
}


 

 

看看现在这段代码:

 

#include <iostream>
//#include <stdio.h>
using namespace std;

class Matrix
{

    const int row, col;
    int* a;

public:
    Matrix(int r, int c);
    Matrix(Matrix& m);
    ~Matrix();
    Matrix& operator=(Matrix& m);
    Matrix operator+(Matrix& m);
    friend istream& operator>>(istream& in, Matrix& m);
    friend ostream& operator<<(ostream& out, Matrix& m);
};

Matrix::Matrix(int r, int c): col(c), row(r)
{
    int i;

    a = new int[r * c];

    for (i = 0; i < r * c; i++)
        a[i] = 0;
}

Matrix::Matrix(Matrix& m): col(m.col), row(m.row)
{
    int i;

    a = new int[col * row];

    for (i = 0; i < col * row; i++)
        a[i] = m.a[i];
}

Matrix::~Matrix()
{
    delete []a;
}

Matrix& Matrix::operator=(Matrix& m)
{
    int i;

    if (m.row == row && m.col == col)
        for (i = 0; i < row * col; i++)
            a[i] = m.a[i];

    return *this;
}

Matrix Matrix::operator+(Matrix& m)
{
    Matrix b(m.row, m.col);

    int i;

    for (i = 0; i < row * col; i++)
        b.a[i] = m.a[i] + a[i];

    return b;
}

istream& operator>>(istream& in, Matrix& m)
{
    int i;

    for (i = 0; i < m.row * m.col; i++) {
        cin >> m.a[i];
    }

    return in;
}

ostream& operator<<(ostream& out, Matrix& m)
{
    int i, j;

    for (i = 0; i < m.row; i++) {

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

            if (j == 0)
                cout << m.a[i * m.col + j];
            else
                cout << " " << m.a[i * m.col + j];
        }

        cout << endl;
    }

    return out;
}

int main()
{
// freopen("1.txt", "r", stdin);

    int a, b;

    while (cin >> a >> b) {

        Matrix x(a, b);
        cin >> x;

        Matrix y(a, b);
        cin >> y;

        cout << x + y;
    }

    return 0;
}


 

 

 

 

 

抱歉!评论已关闭.