1811 Matrix Calculation (eden)
来源:互联网 发布:农村淘宝怎么下载 编辑:程序博客网 时间:2024/06/08 04:17
Description:
Please complete the class Matrix.
Suppose you have understood the overload operator of C++.
Matrix(string, int, int, int**)Matrix(const Matrix &)~Matrix()bool operator ==(const Matrix& matOther)bool operator !=(const Matrix& matOther)void operator +=(const Matrix& matOther) // additionvoid operator -=(const Matrix& matOther) // substractionMatrix operator *(const Matrix& matOther) // production, return a new Matrix named "newMat"
Note:
If the caculation is invalid, print like the following:
“invalid addition.\n”
“invalid substraction.\n”
“invalid multiplication.\n” and return an empty matrix
出题人: 林楚庭
Provided Codes
main.cpp
#include <iostream>#include "Matrix.h"using namespace std;int main() { int h1, w1, h2, w2, n; string name1 = "Mat1"; string name2 = "Mat2"; cin >> h1 >> w1; int **mat1_arr = new int*[h1]; for (int i = 0; i < h1; i++) { mat1_arr[i] = new int[w1]; for (int j = 0; j < w1; j++) { cin >> mat1_arr[i][j]; } } cin >> h2 >> w2; int **mat2_arr = new int*[h2]; for (int i = 0; i < h2; i++) { mat2_arr[i] = new int[w2]; for (int j = 0; j < w2; j++) { cin >> mat2_arr[i][j]; } } Matrix mat1 = Matrix(name1, h1, w1, mat1_arr); mat1.print(); Matrix mat2 = Matrix(name2, h2, w2, mat2_arr); mat2.print(); cout << "\n(Mat1 += Mat2) addition result:\n"; mat1 += mat2; mat1.print(); cout << "\n(Mat1 -= Mat2) substraction result:\n"; mat1 -= mat2; mat1.print(); cout << "\n(Mat1 * Mat2) production result:\n"; Matrix mat3 = mat1 * mat2; if (mat3.getName() != "") mat3.print(); for (int i = 0; i < h1; i++) { delete [] mat1_arr[i]; } delete [] mat1_arr; for (int i = 0; i < h2; i++) { delete [] mat2_arr[i]; } delete []mat2_arr; return 0;}
Matrix.h
#ifndef MATRIX_H#define MATRIX_H#include <iostream>#include <string.h>using namespace std;class Matrix { public: Matrix() { name = ""; width = height = 0; param = NULL; } Matrix(string, int, int, int**); Matrix(const Matrix &); ~Matrix(); void setName(string newName) { name = newName; } string getName() { return name; } void print() { cout << name << " = [\n"; for (int i = 0; i < height; i++) { for (int j = 0; j < width; j++) { if (j == width-1) cout << param[i][j]; else cout << param[i][j] << ", "; } cout << "\n"; } cout << "]\n"; } // overload operator bool operator ==(const Matrix&); bool operator !=(const Matrix&); void operator +=(const Matrix&); void operator -=(const Matrix&); Matrix operator *(const Matrix&); private: string name; int width, height, **param;};#endif
Submission
Matrix.cpp
#include <string>#include <algorithm>#include <iterator>#include <iostream>//#include <assert.h>#include "Matrix.h"using namespace std;Matrix::Matrix(string n, int h, int w, int** mat){ //param=NULL;setName(n); this->width=w; this->height=h; this->param=new int*[h]; //assert(param!=NULL); for(int i=0;i<h;i++){ param[i]=new int[w]; for(int j=0;j<w;j++) param[i][j]=mat[i][j]; }}Matrix::Matrix(const Matrix &mat){ //param=NULL; setName(mat.name); this->width=mat.width; this->height=mat.height; //assert(param!=NULL); this->param=new int*[this->height]; for(int i=0;i<this->height;i++){ param[i]=new int[this->width]; for(int j=0;j<this->width;j++) param[i][j]=mat.param[i][j]; }}Matrix::~Matrix(){ if(this->param!=NULL){ for(int i=0;i<height;i++) delete []param[i]; } delete []param; param==NULL;}bool Matrix::operator ==(const Matrix& mat){ for(int i=0;i<this->height;i++) for(int j=0;j<this->width;j++) if(this->param[i][j]!=mat.param[i][j]) return false; return true;}bool Matrix::operator !=(const Matrix& mat){ for(int i=0;i<this->height;i++) for(int j=0;j<this->width;j++) if(this->param[i][j]!=mat.param[i][j]) return true; return false;}void Matrix::operator +=(const Matrix& mat){ if(this->width!=mat.width||this->height!=mat.height){ cout<<"invalid addition.\n"; } else{ for(int i=0;i<this->height;i++) for(int j=0;j<this->width;j++) this->param[i][j]+=mat.param[i][j]; }}void Matrix::operator -=(const Matrix& mat){ if(this->width!=mat.width||this->height!=mat.height){ cout<<"invalid substraction.\n"; }else{ for(int i=0;i<this->height;i++) for(int j=0;j<this->width;j++) this->param[i][j]-=mat.param[i][j]; }}Matrix Matrix::operator *(const Matrix& mat){ if(this->width!=mat.height){ cout<<"invalid multiplication.\n"; return Matrix(); } Matrix tem; //tem.param=NULL; tem.setName("newMat"); tem.width=mat.width; tem.height=height; tem.param=new int*[tem.height]; //assert(tem.param!=NULL); for(int i=0;i<tem.height;i++){//动态分配数组时,如果数组元素具有类类型,将使用该类的默认构造函数实现初始化;如果数组元素是内置类型,则无初始化。 tem.param[i]=new int[tem.width]();//也可以使用跟在数组长度后面的一对空圆括号,对数组元素做值初始化。圆括号要求编译器对数组做值初始化。 for(int j=0;j<tem.width;j++) for(int k=0;k<this->width;k++) tem.param[i][j]+=param[i][k]*mat.param[k][j]; } return tem;}
阅读全文
0 0
- 1811 Matrix Calculation (eden)
- Fast Matrix Calculation HDU
- Fast Matrix Calculation HDU
- hdu 4965 Fast Matrix Calculation
- hdu - 4965 Fast Matrix Calculation
- HDOJ 4965 Fast Matrix Calculation
- hdu 4965 Fast Matrix Calculation
- HDU 4965 Fast Matrix Calculation
- HDU - 4965 Fast Matrix Calculation
- hdu4965---Fast Matrix Calculation(矩阵)
- HDU 4965 Fast Matrix Calculation
- HDOJ 4965 Fast Matrix Calculation
- HDU 4965 Fast Matrix Calculation
- hdu4965---Fast Matrix Calculation(矩阵)
- hdu 4965 Fast Matrix Calculation 矩阵乘法
- HDU 4965 Fast Matrix Calculation 想法题
- HDU 4965 Fast Matrix Calculation 【矩阵】
- HDU4965-Fast Matrix Calculation(矩阵快速幂)
- vim显示行号
- hadoop分布式集群部署
- volatile关键字解析
- 对于斗地主残局,用python实现solver
- 1810 Bitset (eden)
- 1811 Matrix Calculation (eden)
- 沉浸式状态栏
- python中的_name_=='_main_'的作用
- 第2章 在 HTML 中使用 JavaScript 关于CData的那些事
- app缓存数据的大小和清除
- 基本排序方法
- 以太坊客户端区块数据磁盘地址调整
- jquery自定义插件
- 第十五周(Add Two Numbers)