打卡第三十五天
矩阵的乘法运算
一、
1。建立一个整数矩阵类matrix
2.建立该整数矩阵类matrix构造函数;建立一个 *(乘号)的运算符重载;建立输出函数void display()
3.主函数输入矩阵对象
二、
三、
#include<iostream>
#include<iomanip>
using namespace std;
class matrix{
private:
int row;
int column;
int **mat;
public:
matrix(int a=0,int b=0):row(a),column(b){};
void get(int ,int);
void display();
friend bool judge(const matrix &a,const matrix &b);
friend matrix operator*(const matrix &a,const matrix &b);
};
void matrix::get(int a,int b){
int i,j;
row=a;
column=b;
mat=new int*[a];
for(i=0;i<a;i++){
mat[i]=new int[b];
}
for(i=0;i<row;i++){
for(j=0;j<column;j++){
cin>>mat[i][j];
}
}
}
bool judge(const matrix &a,const matrix &b){
if(a.column==b.row||a.column==1&&a.row==1){
return true;
}else{
return false;
}
}
void matrix::display(){
int i,j;
for(i=0;i<row;i++){
for(j=0;j<column;j++){
cout<<setw(10)<<mat[i][j];
}
cout<<endl;
}
}
matrix operator*(const matrix &a,const matrix &b){
matrix c;
int i=0,j=0,k=0,l=0,sum=0;
if(a.column==1&&a.row==1){
c.row=b.row;
c.column=b.column;
c.mat=new int*[b.row];
for(i=0;i<b.row;i++){
c.mat[i]=new int[b.column];
}
for(i=0;i<b.row;i++){
for(j=0;j<b.column;j++){
c.mat[i][j]=a.mat[0][0]*b.mat[i][j];
}
}
}else{
c.row=a.row;
c.column=b.column;
c.mat=new int*[a.row];
for(i=0;i<a.row;i++){
c.mat[i]=new int[b.column];
}
for(i=0;i<a.row;i++){
for(j=0;j<b.column;j++){
for(k=0;k<a.column;k++){
sum+=a.mat[i][k]*b.mat[k][j];
}
c.mat[i][j]=sum;
sum=0;
}
}
}
return c;
}
int main(){
matrix m1,m2,m3;
int a,b;
cin>>a>>b;
m1.get(a,b);
cin>>a>>b;
m2.get(a,b);
if(judge(m1,m2)){
m3=m1*m2;
m3.display();
}else{
cout<<"Invalid Matrix multiplication!"<<endl;
}
return 0;
}
四、
#include<iostream>
#include<iomanip>
using namespace std;
class matrix{
private:
int row;
int column;
int **mat;
public:
matrix(int a=0,int b=0):row(a),column(b){};
void get(int ,int);
void display();
friend bool judge(const matrix &a,const matrix &b);
friend matrix operator*(const matrix &a,const matrix &b);
};
void matrix::get(int a,int b){
int i,j;
row=a;
column=b;
mat=new int*[a];
for(i=0;i<a;i++){
mat[i]=new int[b];
}
for(i=0;i<row;i++){
for(j=0;j<column;j++){
cin>>mat[i][j];
}
}
}
bool judge(const matrix &a,const matrix &b){
if(a.column==b.row||a.column==1&&a.row==1){
return true;
}else{
return false;
}
}
void matrix::display(){
int i,j;
for(i=0;i<row;i++){
for(j=0;j<column;j++){
cout<<setw(10)<<mat[i][j];
}
cout<<endl;
}
}
matrix operator*(const matrix &a,const matrix &b){
matrix c;
int i=0,j=0,k=0,l=0,sum=0;
if(a.column==1&&a.row==1){
c.row=b.row;
c.column=b.column;
c.mat=new int*[b.row];
for(i=0;i<b.row;i++){
c.mat[i]=new int[b.column];
}
for(i=0;i<b.row;i++){
for(j=0;j<b.column;j++){
c.mat[i][j]=a.mat[0][0]*b.mat[i][j];
}
}
}else{
c.row=a.row;
c.column=b.column;
c.mat=new int*[a.row];
for(i=0;i<a.row;i++){
c.mat[i]=new int[b.column];
}
for(i=0;i<a.row;i++){
for(j=0;j<b.column;j++){
for(k=0;k<a.column;k++){
sum+=a.mat[i][k]*b.mat[k][j];
}
c.mat[i][j]=sum;
sum=0;
}
}
}
return c;
}
int main(){
matrix m1,m2,m3;
int a,b;
cin>>a>>b;
m1.get(a,b);
cin>>a>>b;
m2.get(a,b);
if(judge(m1,m2)){
m3=m1*m2;
m3.display();
}else{
cout<<"Invalid Matrix multiplication!"<<endl;
}
return 0;
}