首页 > 其他分享 >每日打卡-25

每日打卡-25

时间:2023-05-16 20:12:21浏览次数:32  
标签:25 matrix int 每日 矩阵 column mat 打卡 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];

 

  主函数里定义三个整数矩阵类对象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。


输入样例:

4  5
1 0 0 0 5
0 2 0 0 0
0 0 3 0 0
0 0 0 4 0
5  5
1 2 3 4 5
2 3 4 5 6
3 4 5 6 7
4 5 6 8 9
5 6 7 8 9

 

输出样例:

            26        32        38        44        50
             4         6         8        10        12
             9        12        15        18        21
            16        20        24        32        36

二.设计思路

三.流程图

四.伪代码 

1

五.代码实现 

#include <iostream>
#include <iomanip>
using namespace std;
class matrix{
private:

	int row=0;
	int column=0;
	int** mat;

public:
	
	friend istream& operator>> (istream& in, matrix& a) {
		in >> a.row >> a.column;

		a.mat = new int* [a.row];//申请动态内存空间
		for (int i = 0; i < a.column; i++) a.mat[i] = new int[a.column];  

		for (int i = 0; i < a.row; i++) {
			for (int j = 0; j < a.column;j++) {
				in >> a.mat[i][j];
			}
		}
		return in;
	}

	friend matrix operator* (matrix& a,matrix& b) {
		matrix c;
		c.row = a.row;
		c.column = b.column;
		c.mat = new int* [a.row];
		for (int i = 0; i < a.row; i++)  c.mat[i] = new int[b.column];//申请动态内存空间

		for (int i = 0; i < a.row; i++) {
			for (int j = 0; j < b.column; j++) {
				int sum = 0;
				for (int k = 0; k<a.column; k++) {
					sum += a.mat[i][k] * b.mat[k][j];
				}
				c.mat[i][j] = sum;
			}
		}
		return c;
	} 

	void display() {
		for (int i = 0; i < row; i++) {
			for (int j = 0; j < column; j++) {
				cout << setw(10) << mat[i][j];
			}
			cout << endl;
		}
	}

	int putrow() {
		return row;
	}
	int putcolumn() {
		return column;
	}
};

int main() {
	matrix m1, m2, m3;
	cin >> m1;
	cin >> m2;

	if (m1.putcolumn() == m2.putrow()) {
		m3 = m1 * m2;
		m3.display();
	}
	else cout << "Invalid Matrix multiplication!" << endl;
	
	return 0;
}

 

标签:25,matrix,int,每日,矩阵,column,mat,打卡,row
From: https://www.cnblogs.com/leapssisbird/p/17406666.html

相关文章

  • 5.16每日总结
    今天思考了接下来的团队项目要完成的任务简单的了解和学习了一些关于文本数据处理的技术知识,对未来的项目改进思考了一些基本的框架,未来还将和团队成员对项目的成品和任务进行讨论和分工。......
  • 天天打卡
    “教育超市”是拼题A系统的一个衍生产品,发布了各种试卷和练习供用户选购。在试卷列表中,系统不仅列出了每份试卷的单价,还显示了当前的购买人次。本题就请你根据这些信息找出教育超市所有试卷中的销量(即购买人次)冠军和销售额冠军。输入格式:输入首先在第一行中给出一个......
  • 每日总结 5.16
    今日进行了python的学习。之后进行对于项目界面的优化处理,又进行广告的优化处理。<divclass="aside"id="aside"><spanid="s">10</span><span>秒后关闭</span>&nbsp;&nbsp;<!--<img......
  • 打卡17
    packageorg.example;importjava.sql.SQLOutput;importjava.util.*;//������Shift�......
  • 第二十一天打卡
    一、问题描述将5元的人民币兑换成1元、5角和1角的硬币,共有多少种不同的兑换方法。二、设计思路设变量x、y和z分别代表兑换的1元、5角和1角的硬币所具有的钱数(角),则由题目的要求,可得到方程:x+y+z=50其中,x为兑换的1元硬币钱数,其可能的取值为{0,10,20,30,40,50},y为兑换的5角硬币钱......
  • 5.16打卡
    一、问题描述:本节要研究孪生素数的问题,先来看看什么是孪生素数。所谓孪生素数指的是间隔为2的两个相邻素数,因为它们之间的距离已经近的不能再近了,如同李生兄弟一样,所以将这一对素数称为孪生素数。显然,最小的一对孪生素数是(1,3)。我们可以写出3~100以内的孪生素数,一共有8对,分别是(3......
  • 每日总结2023-05-16
    今天对Android记住密码以及自动登录做出了处理首先进行了对与login页面的优化:packagecom.example.math;/**登录界面**/importandroidx.annotation.NonNull;importandroidx.appcompat.app.AppCompatActivity;importandroid.annotation.SuppressLint;importand......
  • c++打卡第二十八天
    一、以圆类Circle及立体图形类Solid为基础设计圆柱类Cylinder1、题目描述以点类Point及平面图形类Plane为基类公有派生圆类Circle,再以圆类Circle及立体图形类Solid为基类公有派生圆柱类Cylinder,main(void)函数完成对圆柱类Cylinder的测试。Point类结构说明:Point类的数据成员......
  • 2023.5.16编程一小时打卡
    一、问题描述:给出下面的多边形基类框架:classpolygon{protected:intnumber;//边数,最多不超过100条边private:intside_length[100];//边长数组public:polygon();//构造函数根据需要重载intperimeter();//计算多边形边长voiddisplay();//输出多边形边......
  • 第25天打卡
    问题: 源代码:#include<stdio.h>intmain(){inti,t=0,k;inta[3]={0};for(i=2;i<=1000;i++){k=i;while(k){a[t]=k%10;k=k/10;t++;}if(i==a[0]*a[0]*a[0]+a[1]*a[1]*a[1]+a[2]*a[2]*a[2])printf("%d",i);}printf("\n");}......