以下は、2 つの行列の乗算のための私の C++ コードです。最初の入力は次元です。つまり、行列 1 の行と列、および行列 2 の行と列です。次に、両方の行列のすべての要素を入力する必要があります。それが完了したら、2 つの行列を乗算し、結果の行列を表示する必要があります。しかし、1 つの理由で、すべての要素を入力した後、動かなくなってしまいます。私が間違っていることを理解している人はいますか?
#include <iostream>
#include "Matrix_functions.hpp"
using namespace std;
int read_matrix(int** matrix, int rows, int cols)
{
for(int i = 0; i < rows; i++)
{
matrix[i] = new int[cols];
for(int j = 0; j < cols; j++)
{
cin >> matrix[i][j];
}
}
return **matrix;
}
int print_matrix(int** result, int rows, int cols)
{
for(int i = 0; i < rows; i++)
{
for(int j = 0; j < cols; j++)
{
cout << result[i][j];
}
}
cout << endl;
return **result;
}
int multiply_matrix(int** matrix, int rows, int cols, int** matrix1, int rows1, int cols1, int** result)
{
for(int i = 0; i < rows; i++)
{
for(int j = 0; j < cols1; j++)
{
result[i][j] = 0;
for(int k = 0; k < cols; k++)
{
result[i][j] = result[i][j] + (matrix[i][k] * matrix1[k][j]);
}
}
}
return **result;
}
int main ()
{
//matrices and dimensions
int rows1, cols1, rows2, cols2;
int **matrix1, **matrix2, **result = 0;
cout << "Enter matrix dimensions" << endl;
cin >> rows1 >> cols1 >> rows2 >> cols2;
cout << "Enter a matrix" << endl;
matrix1 = new int*[rows1];
// Read values from the command line into a matrix
read_matrix(matrix1, rows1, cols1);
cout << "Enter a matrix" << endl;
matrix2 = new int*[rows2];
read_matrix(matrix2, rows2, cols2);
// Multiply matrix1 one and matrix2, and put the result in matrix result
multiply_matrix(matrix1, rows1, cols1, matrix2, rows2, cols2, result);
print_matrix(result, rows1, cols2);
//TODO: free memory holding the matrices
return 0;
}
また、現在、私の行列は、行列 (1 2 とその下の 3 4) ではなく、1 次元の水平ベクトル (1 2 3 4) として出力されます。誰でもこれを解決する方法を説明できますか?