К чему файловый ввод-вывод не понятно, в задании ничего нет. Так что как-то так...
| Код | #include <iostream>
using namespace std;
//константы - размерности матриц из задания const int MATRIX_DIM_N = 3; const int MATRIX_DIM_K = 4; const int MATRIX_DIM_M = 5;
//функция создания матрицы размерности rows на cols int** CreateMatrix( int rows, int cols ); //функция удаления матрицы с rows строками void DestroyMatrix( int** matrix, int rows ); //функция ввода матрицы размерности rows на cols void InputMatrix( int** matrix, int rows, int cols ); //функция печати матрицы размерности rows на cols void PrintMatrix( int** matrix, int rows, int cols ); //функция возвращает результат произведения двух матриц, указанных размерностей //или 0, если произведение невозможно int** Mult( int** matrixA, int rowsA, int colsA, int** matrixB, int rowsB, int colsB );
int main() { int** matrixA = CreateMatrix( MATRIX_DIM_N, MATRIX_DIM_K );//создание матрицы A cout << "Please enter matrix A( " << MATRIX_DIM_N << "x" << MATRIX_DIM_K << " ):" << endl; InputMatrix( matrixA, MATRIX_DIM_N, MATRIX_DIM_K );//ввод матрицы A int** matrixB = CreateMatrix( MATRIX_DIM_K, MATRIX_DIM_M );//создание матрицы B cout << "Please enter matrix B( " << MATRIX_DIM_K << "x" << MATRIX_DIM_M << " ):" << endl; InputMatrix( matrixB, MATRIX_DIM_K, MATRIX_DIM_M );//ввод матрицы B //печать исходных матриц cout << "Matrix A:" << endl; PrintMatrix( matrixA, MATRIX_DIM_N, MATRIX_DIM_K ); cout << "Matrix B:" << endl; PrintMatrix( matrixB, MATRIX_DIM_K, MATRIX_DIM_M ); //результат умножения AxB помещаем в matrixC int** matrixC = Mult( matrixA, MATRIX_DIM_N, MATRIX_DIM_K, matrixB, MATRIX_DIM_K, MATRIX_DIM_M ); cout << "Matrix C:" << endl; PrintMatrix( matrixC, MATRIX_DIM_N, MATRIX_DIM_M );//печатаем матрицу-результат //освобождаем память, вцыделенную под матрицы DestroyMatrix( matrixA, MATRIX_DIM_N ); DestroyMatrix( matrixB, MATRIX_DIM_K ); DestroyMatrix( matrixC, MATRIX_DIM_N ); return 0;//возвращаем значение }
int** CreateMatrix( int rows, int cols ) { int** matrix = new int*[ rows ]; for( int i = 0; i < rows; i++ ) matrix[ i ] = new int[ cols ]; return matrix; }
void DestroyMatrix( int** matrix, int rows ) { if( matrix ) { for( int i = 0; i < rows; i++ ) delete[] matrix[ i ]; delete[] matrix; matrix = 0; } }
void InputMatrix( int** matrix, int rows, int cols ) { for( int i = 0; i < rows; i++ ) for( int j = 0; j < cols; j++ ) cin >> matrix[ i ][ j ]; }
void PrintMatrix( int** matrix, int rows, int cols ) { for( int i = 0; i < rows; i++ ) { for( int j = 0; j < cols - 1; j++ ) cout << matrix[ i ][ j ] << " "; cout << matrix[ i ][ cols - 1 ] << endl; } }
int** Mult( int** matrixA, int rowsA, int colsA, int** matrixB, int rowsB, int colsB ) { if( colsA != rowsB ) return 0; int** matrix = CreateMatrix( rowsA, colsB ); for( int i = 0; i < rowsA; i++ ) for( int j = 0; j < colsB; j++ ) { int sum = 0; for( int k = 0; k < colsA; k++ ) sum += matrixA[ i ][ k ] * matrixB[ k ][ j ]; matrix[ i ][ j ] = sum; } return matrix; }
|
|