首页 > 解决方案 > 在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

标签: c++matrixmultiplicationdivision

解决方案


结果矩阵的大小是 n1 * m2,而不是 n1*m1。


推荐阅读