c++ - 在c ++中找到两个不同长度的矩阵并进行乘法运算
问题描述
嘿伙计们,我想为矩阵制作一个计算器,但我有问题。首先,当我想将它们相乘时,它会在矩阵中的列和行相等时起作用,但是当它不同时,例如 n1=5 m1=2 n2=2 m2=6 它会出错并且有一些错误,更大的问题是计算确定我不知道我该怎么做谢谢你的回答。
这是代码
#include <iostream>
using namespace std;
int main() {
int n1, m1, n2, m2;
int counter = 0;
int ask;
bool matrixCheck;
int determinant = 0;
cout << "pls enter N1" << endl;
cin >> n1;
while (n1 > 100) {
cout << "N most be lower than 100";
cin >> n1;
}
cout << "pls enter M1" << endl;
cin >> m1;
while (m1 > 100) {
cout << "M most be lower than 100";
cin >> m1;
}
cout << "pls enter N2" << endl;
cin >> n2;
while (n2 > 100) {
cout << "N most be lower than 100";
cin >> n2;
}
cout << "pls enter M2" << endl;
cin >> m2;
while (m2 > 100) {
cout << "M most be lower than 100";
cin >> m2;
}
int matrixA[n1][m1];
int matrixB[n2][m2];
cout << "ENTER MATRIX A" << endl;
for (int i = 0; i <= n1 - 1; i++) {
cout << " ";
cout << counter + 1 << "," << i + 1 << "= ";
cin >> matrixA[counter][i];
cout << " ";
if (i == n1 - 1) {
cout << endl;
counter++;
i = -1;
}
if (counter == m1) {
break;
}
}
counter = 0;
cout << "This is A" << endl;
for (int j = 0; j <= n1 - 1; j++) {
cout << matrixA[counter][j] << " ";;
if (j == n1 - 1) {
cout << endl;
counter++;
j = -1;
}
if (counter == m1) {
break;
}
}
counter = 0;
cout << "ENTER MATRIX B" << endl;
for (int k = 0; k <= n2 - 1; k++) {
cout << " ";
cout << counter + 1 << "," << k + 1 << "= ";
cin >> matrixB[counter][k];
cout << " ";
if (k == n2 - 1) {
cout << endl;
counter++;
k = -1;
}
if (counter == m2) {
break;
}
}
counter = 0;
cout << "This is B" << endl;
for (int q = 0; 1 <= n2 - 1; q++) {
cout << matrixB[counter][q] << " ";;
if (q == n2 - 1) {
cout << endl;
counter++;
q = -1;
}
if (counter == m2) {
break;
}
}
cout << "Choose an operation" << endl
<< "1-(+) 2-(-) 3-(A * B) 4-(A / B) 5-(A --> B) 6-(B --> A) 7-(a * A) 8-(|A|) 9-(|B|)" << endl;
if (n1 != n2 || m1 != m2) {
cout
<< "We have to note that you can't use operaroin number 1, 2, 5 and 6 because the length of the matrixs are different"
<< endl;
matrixCheck = false;
} else if (n1 == n2 && m1 == m2) {
matrixCheck = true;
}
cin >> ask;
while (ask == 1 || ask == 2 || ask == 5 || ask == 6) {
if (matrixCheck) {
break;
}
cout
<< "We have to note that you can't use operaroin number 1, 2, 5 and 6 because the length of the matrixs are different"
<< endl;
cin >> ask;
}
if (ask == 1 && matrixCheck) {
counter = 0;
for (int n = 0; n <= n1 - 1; n++) {
matrixA[counter][n] = matrixA[counter][n] + matrixB[counter][n];
if (n + 1 == n1) {
n = -1;
if (counter + 1 == m1) {
break;
}
counter++;
}
}
counter = 0;
cout << "This is A" << endl;
for (int j = 0; j <= n1 - 1; j++) {
cout << matrixA[j][counter] << " ";;
if (j == n1 - 1) {
cout << endl;
counter++;
j = -1;
}
if (counter == m1) {
break;
}
}
}
if (ask == 2 && matrixCheck) {
counter = 0;
for (int n = 0; n <= n1 - 1; n++) {
matrixA[counter][n] = matrixA[counter][n] - matrixB[counter][n];
if (n + 1 == n1) {
n = -1;
if (counter + 1 == m1) {
break;
}
counter++;
}
}
counter = 0;
cout << "This is A" << endl;
for (int j = 0; j <= n1 - 1; j++) {
cout << matrixA[j][counter] << " ";;
if (j == n1 - 1) {
cout << endl;
counter++;
j = -1;
}
if (counter == m1) {
break;
}
}
}
if (ask == 3) {
int matrixResult[n1][m1];
int sum = 0;
// Multiplying two matrices...
for (int i = 0; i < n1; i++) {
for (int j = 0; j < m2; j++) {
sum = 0;
for (int k = 0; k < m1; k++)
sum = sum + (matrixA[i][k] * matrixB[k][j]);
matrixResult[i][j] = sum;
}
}
cout << "\nMultiplication Result:\n";
counter = 0;
for (int j = 0; j <= n1 - 1; j++) {
cout << matrixResult[j][counter] << " ";;
if (j == n1 - 1) {
cout << endl;
counter++;
j = -1;
}
if (counter == m2) {
break;
}
}
}
}
这就是结果
pls enter N1
3
pls enter M1
2
pls enter N2
2
pls enter M2
3
ENTER MATRIX A
1,1=3
1,2=3
1,3=3
2,1=3
2,2=3
2,3=3
This is A
3 3 3
3 3 3
ENTER MATRIX B
1,1=3
1,2=3
2,1=3
2,2=3
3,1=3
3,2=3
This is B
3 3
3 3
3 3
Choose an operation
1-(+) 2-(-) 3-(A * B) 4-(A / B) 5-(A --> B) 6-(B --> A) 7-(a * A) 8-(|A|) 9-(|B|)
We have to note that you can't use operaroin number 1, 2, 5 and 6 because the length of the matrixs are different
3
Multiplication Result:
18 18 12600660
18 18 12600660
18 12600660 364487398
Process finished with exit code 0
解决方案
结果矩阵的大小是 n1 * m2,而不是 n1*m1。
推荐阅读
- python-3.x - 在树莓派上运行 Dropbox 上传脚本时无法创建目录错误
- c++ - 字符串在 C++ 中不反转
- c# - 左连接在 NHibernate LINQ 中不起作用到实体
- javascript - 使用 Socket.io 连接到特定的聊天服务器 URL?
- javascript - 如何切换个人
- 元素只使用基本的 javascript 和 DOM 操作来改变它们的样式?
- reactjs - React js页面复制粘贴和刷新id不在服务器上工作但在本地主机上工作
- ruby-on-rails - 即使在控制器中调用方法,模型也无法接收来自方法的调用
- regex - 关于交替的 (a|b)* 示例,我很困惑,为什么结果集中有 ab、ba?
- razor - 如何在@Html.DropDownList等html辅助控件中使用[(ngModel)]
- java - 如何断言 SpringFramework 的 org.springframework.http.ResponseEntity 类设置的“Content-Type”?