В качестве упражнения я должен написать функцию, которая может умножать две матрицы, заданные для определенного ввода. То, как упражнение пишется функция должна иметь вид:Запись функции для умножения матриц в C++
void Multiply(double **res, double **A, double **B, int ARows, int ACols, int BRows, int BCols);
Если результат умножения записывается в разрешении. Я не уверен, что понимаю вышеприведенную форму. Насколько я понимаю, в качестве входных данных принимаются адреса двух матриц и числа их столбцов и строк. Но каков должен быть вход res (который является результатом умножения матриц)? Должен ли он быть адресом предварительно распределенной матрицы с правильными размерами? В этом случае я написал следующее, чтобы проверить функцию (я также указана матрица А и В):
double** C;
C = new double [rows];
for (int i=0; i<rows; i++)
{
C[i] = new double [cols];
}
std::cout << Multiply(&C,&A,&B,Arows,Acols,Brows,Bcols) << "\n";
}
Но я не думаю, что это правильно. Вот мой код для умножения:
void Multiply(double **res, double **A, double **B, int ARows, int ACols, int BRows, int BCols)
{
assert(ACols=BRows);
for (int k=0; k<BCols; k++)
{
for (int j=0; j<ARows; j++)
{
for (int i=0; i<ACols; i++)
{
res[j][k] += A[j][i]*B[i][k];
}
}
}
}
Тест на Multiply:
int main()
{
int ARows = 2;
int ACols = 3;
int BRows = 3;
int BCols = 2;
int cols = ARows;
int rows = BCols;
double** A;
A = new double* [ARows];
for (int i=0; i<ARows; i++)
{
A[i] = new double [ACols];
}
double** B;
B = new double* [BRows];
for (int i=0; i<BRows; i++)
{
B[i] = new double [BCols];
}
A[0][0]=1;
A[0][1]=2;
A[0][2]=3;
A[1][0]=4;
A[1][1]=6;
A[1][2]=10;
B[0][0]=1;
B[0][1]=2;
B[1][0]=4;
B[1][1]=6;
B[2][0]=13;
B[2][1]=9;
double** C;
C = new double* [rows];
for (int i=0; i<rows; i++)
{
C[i] = new double [cols];
}
std::cout << Multiply(C,A,B,ARows,ACols,BRows,BCols) << "\n";
}
Как Умножить ожидает '' двойной ** для 'res', и как' C' уже '' двойной **, нет необходимости передавать '& C' функции. Пропускать простой 'C' достаточно. Кроме того, поскольку это уже указатель, функция сможет заполнить выделенный контент. –