首页 > 其他分享 >打卡第三十五天

打卡第三十五天

时间:2023-05-26 10:34:25浏览次数:36  
标签:第三十五 const mat int column matrix 打卡 row

矩阵的乘法运算

一、

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

标签:第三十五,const,mat,int,column,matrix,打卡,row
From: https://www.cnblogs.com/xscya/p/17434033.html

相关文章

  • c++打卡第三十七天
    二、list容器1、基本概念 #include<iostream>#include<list>usingnamespacestd;//listvoidprint(list<int>&l){for(list<int>::iteratorit=l.begin();it!=l.end();it++){cout<<*it<<"";}......
  • 第33天打卡
    问题: 源代码:#include<stdio.h>intmain(){longinta,b,c;scanf("%ld/%ld",&a,&b);while(1){if(b%a)c=b/a+1;else{c=b/a;a=1;}if(a==1){printf("1/%ld\n",c);break;}elseprintf("1/%ld+",c);a=a*c-b;b=......
  • c++打卡练习(39)
    验证2000以内哥德巴赫猜想2000以内,大于4的所有偶数都可以由两个素数a,b相加得到,求出a最小的那个的结果流程图:伪代码:源代码:#include<iostream>usingnamespacestd;intjudge(inta){ intj,k=0; for(j=2;j<a;j++){ if(a%j==0){ k++; break; } } if(k==0){ ......
  • 每日打卡
    比较分数大小问题描述:比较两个分数的大小问题分析:先设一个新的函数以便将分母分子转化成乘的状态,再直接比较乘积的结果,大的话直接输出即可代码:#include<stdio.h>#include<math.h>intll(inta,intb);intmain(){           inti,j,k,l,m,n;       ......
  • 5.25打卡
    一、问题描述:在屏幕上用“*”显示0~360度的余弦函数cos(x)曲线二、设计思路:此问题关键在于余弦曲线在0~360度的范围内,一行要显示两个点。考虑到cos(x)的对称性,将屏幕的行方向定义为x,列方向定义为y,则0~180度的图形是左右对称的。若将图形的总宽度定义为62列,计算出x行0~180度时y点的......
  • 第三十天打卡
    一、问题描述求出100以内的勾股数。二、设计思路定义a,b两数,a以1开始循环,b以a+1开始,避免出现a=3,b=4;a=4,b=3的情况,在对于c开始从0循环,设置条件c*c=a*a+b*b出现满足就输出a,b,c三数的值。三、程序流程图四、代码实现 ......
  • 5月25日打卡
    运行下面程序,观察输出结果#include<iostream>usingnamespacestd;intx=5,y=7;voidmyFunction(){inty=10;cout<<"xfrommyFunction:"<<x<<"\n";cout<<"yfrommyFunction:"<......
  • 打卡22
    #include<iostream>usingnamespacestd;classHorse{public:Horse(){cout<<"Horse申请了空间..."<<endl;}virtualvoidFly(){cout<<"Justahorse."<<endl;}virtual~Hors......
  • 每日打卡1066
    图像过滤是把图像中不重要的像素都染成背景色,使得重要部分被凸显出来。现给定一幅黑白图像,要求你将灰度值位于某指定区间内的所有像素颜色都用一种指定的颜色替换。输入格式:输入在第一行给出一幅图像的分辨率,即两个正整数 M 和 N(0<M,N≤500),另外是待过滤的灰度值区间端点 ......
  • 打卡35
     不好意思,题太简单了,不小心就秒了。#include<bits/stdc++.h>usingnamespacestd;boolf(intn){ if(n==1||n==2)returntrue; for(inti=2;i<=n/i;i++) { if(n%i==0)returnfalse; } returntrue;}intmain(){ for(inti=1;i<=1000;i++) { if(f(i)&&f(i+2)) cou......