首页 > 编程语言 >2023.5.22编程一小时打卡

2023.5.22编程一小时打卡

时间:2023-05-22 21:56:31浏览次数:43  
标签:matrix 22 int 矩阵 column m1 2023.5 打卡 row

一、问题描述:

线性代数中的矩阵可以表示为一个row*column的二维数组,当row和column均为1时,退化为一个数,当row为1时,为一个行向量,当column为1时,为一个列向量。
建立一个整数矩阵类matrix,其私有数据成员如下:

int row;
int column;
int **mat;

建立该整数矩阵类matrix构造函数;
建立一个 *(乘号)的运算符重载,以便于对两个输入矩阵进行乘法运算;
建立输出函数void display(),对整数矩阵按行进行列对齐输出,格式化输出语句如下:

cout<<setw(10)<<mat[i][j];
//需要#include <iomanip>

主函数里定义三个整数矩阵类对象m1、m2、m3.
###输入格式:
分别输入两个矩阵,分别为整数矩阵类对象m1和m2。
每个矩阵输入如下:
第一行两个整数 r c,分别给出矩阵的行数和列数
接下来输入r行,对应整数矩阵的每一行
每行输入c个整数,对应当前行的c个列元素
###输出格式:
整数矩阵按行进行列对齐(宽度为10)后输出
判断m1和m2是否可以执行矩阵相乘运算。
若可以,执行m3=m1*m2运算之后,调用display函数,对m3进行输出。
若不可以,输出"Invalid Matrix multiplication!"
提示:输入或输出的整数矩阵,保证满足row>=1和column>=1。

二、解题思路:

首先定义一个矩阵类包含行列和定义二维动态数组的三个私有成员数据,并定义一个*运算符重载,最后输入俩个数组并输出俩个相乘的数组结果。

三、代码实现:

 1 #include<iostream>
 2 #include<iomanip>
 3 using namespace std;
 4 class matrix{
 5  private:
 6   int row;     
 7   int column;
 8   int **mat;       
 9  public:
10   matrix(int a=0,int b=0):row(a),column(b){};  
11   void get(int ,int);    
12   void display();        
13   friend bool judge(const matrix &a,const matrix &b);   
14   friend matrix operator*(const matrix &a,const matrix &b); 
15 };
16 void matrix::get(int a,int b){ 
17  int i,j;
18  row=a;                
19  column=b;
20  mat=new int*[a];
21  for(i=0;i<a;i++){     
22   mat[i]=new int[b];
23  }
24  for(i=0;i<row;i++){
25   for(j=0;j<column;j++){
26    cin>>mat[i][j];
27   }
28  }
29 }
30 bool judge(const matrix &a,const matrix &b){
31  if(a.column==b.row||a.column==1&&a.row==1){   
32   return true;                              
33  }else{                                     
34   return false;
35  }
36 }
37 void matrix::display(){
38     int i,j;
39     for(i=0;i<row;i++){
40      for(j=0;j<column;j++){
41       cout<<setw(10)<<mat[i][j];
42   }
43   cout<<endl;         
44  }
45 }
46 matrix operator*(const matrix &a,const matrix &b){
47  matrix c;
48  int i=0,j=0,k=0,l=0,sum=0;
49  if(a.column==1&&a.row==1){ 
50   c.row=b.row;
51   c.column=b.column;
52   c.mat=new int*[b.row];
53  for(i=0;i<b.row;i++){
54   c.mat[i]=new int[b.column];
55  }
56  for(i=0;i<b.row;i++){
57   for(j=0;j<b.column;j++){   
58    c.mat[i][j]=a.mat[0][0]*b.mat[i][j];
59   }
60  }
61  }else{
62  c.row=a.row;    
63  c.column=b.column;
64  c.mat=new int*[a.row];
65  for(i=0;i<a.row;i++){
66   c.mat[i]=new int[b.column];
67  }
68  for(i=0;i<a.row;i++){
69   for(j=0;j<b.column;j++){  
70    for(k=0;k<a.column;k++){
71    sum+=a.mat[i][k]*b.mat[k][j]; 
72    }
73    c.mat[i][j]=sum;
74    sum=0;
75   }
76  }
77  }
78  return c;
79 }
80 int main(){     
81  matrix m1,m2,m3;
82  int a,b;
83  cin>>a>>b;
84  m1.get(a,b);
85  cin>>a>>b;
86  m2.get(a,b);
87  if(judge(m1,m2)){
88   m3=m1*m2;
89   m3.display();
90  }else{
91   cout<<"Invalid Matrix multiplication!"<<endl;
92  }
93  return 0;
94 }

 

标签:matrix,22,int,矩阵,column,m1,2023.5,打卡,row
From: https://www.cnblogs.com/lixinyao20223933/p/17410125.html

相关文章

  • RSA之低加密指数广播攻击------2023.5.22
    使用条件:模数n,密文C不同,明文m,加密指数e相同。(一般的话e=k,k是题目给出的n和c的组数)例如:e=k=3同余式组:C1≡m^emodn1C2≡m^emodn2C3≡m^emodn3由中国剩余定理:设n1,n2,n3是两两互素的正整数,M=n1∗n2∗n3Mi=M/ni (i=1,2,3)则同余式组: m^e≡Ci mod ni  (i=1,2,3)有唯一解......
  • 打卡30
    5.1素数 #include<bits/stdc++.h>usingnamespacestd;boolf(intx){ for(inti=2;i<=x/i;i++) { if(x%i==0)returnfalse; } returntrue;}intmain(){ intl,r;cin>>l>>r; for(inti=l;i<=r;i++) { if(f(i))cout<<i<<endl; } retu......
  • 2023.5.22——软件工程日报
    所花时间(包括上课):6h代码量(行):0行博客量(篇):1篇今天,上午学习,下午学习。我了解到的知识点:1.了解了一些数据库的知识;2.了解了一些python的知识;3.了解了一些英语知识;5.了解了一些Javaweb的知识;4.了解了一些数学建模的知识;6.了解了一些计算机网络的知识;......
  • 5.22模版 初见云雨情
    函数模板模板函数定义的一般形式如下所示:template<typenametype>ret-typefunc-name(parameterlist){//函数的主体}在这里,type是函数所使用的数据类型的占位符名称。这个名称可以在函数定义中使用。下面是函数模板的实例,返回两个数中的最大值:实例#include<iostream>#......
  • RSA之低指数攻击------2023.5.22
    1,e=3的小明文攻击:特点:当e=3时,如果明文过小,导致明文的三次方仍然小于n,那么通过直接对密文开三次方即可得到明文。 即:C=m^e mod n,如果e=3,且m^e<n,则C=m^e,m=c^(1/3) 2.如果明文的三次方比n大,但不是足够大,那么设k有: C=m^e+k∗n 爆破k,如果 C−k∗n 或者 C+k∗n......
  • 5.22 3.1
    一、问题描述求某一范围内完数的个数。如果一个数等于它的因子之和,则称该数为“完数”(或“完全数”。例如,6的因子为1,2,3,而6=1+2+3,因此6是“完数”。二、分析for(i=2;i<=n;i++){....for(j=l;j<i;j++){...}if(s==i)输出当前i是完数}三、代码#include<iostream>usingna......
  • 每日打卡
    评分问题问题描述:在歌星大奖赛中,有10个评委为选手打分去掉一个最高分去掉一个最低分,剩下的分数平均后就是选手所得的成绩编写相应程序问题分析:先用浮点序列的方法找出评分中的最大值和最小值在对其他的分数做平均处理代码:#include<stdio.h>#include<math.h>intmain(){int......
  • c++打卡练习(36)
    求多项式的和以50为例S=1+1/2+1/2*3+1/2*3*4+......1/2*3*.....*50流程图:伪代码:源代码:#include<iostream>usingnamespacestd;intmain(){ doublea=1,b,num,N; cout<<"输入你想阶乘到的最大数"<<endl; cin>>N; for(inti=1;i<=N;i++){ a*=i; b=1/a; num......
  • 每日打卡1112
    #include<bits/stdc++.h>usingnamespacestd;intmain(){intn,i,t,c[10005],a,b,x=0,k=0;cin>>n>>t;for(i=0;i<n;i++){cin>>c[i];if(c[i]>x)x=c[i];}for(i=0;i<n;i++){if(c[i]>t&am......
  • 2023年5月22号
    今天讲了一下团队开发的总结,目前的项目得不到老师认可,我们也要学会反思。我想了一下情况,不一定保真,最后还是要和团队里其他人商量一下。 没有明确的目标和计划在团队开发过程中,没有为项目设定明确的目标和计划会导致混乱。这可能会使团队成员无法集中注意力,并且在项目的不同阶......