Als eine Übung soll ich eine Funktion schreiben, die zwei Matrizen multiplizieren kann, vorausgesetzt, dass Sie eine bestimmte Eingabe angeben. Die Art, wie die Übung geschrieben wird, sollte folgende Form haben:Schreibe Funktion, um Matrizen in C++ zu multiplizieren
void Multiply(double **res, double **A, double **B, int ARows, int ACols, int BRows, int BCols);
Hier wird das Ergebnis der Multiplikation in res geschrieben. Ich bin mir nicht sicher, ob ich die obige Form verstehe. Soweit ich das verstehe, werden die Adressen zweier Matrizen und die Anzahl ihrer Spalten und Zeilen als Eingabe genommen. Aber was sollte die Eingabe von res sein (was ist das Ergebnis der Multiplikation der Matrizen)? Sollte es die Adresse einer vorbelegten Matrix mit den richtigen Dimensionen sein? In diesem Fall habe ich die folgende Funktion zu testen (I auch Matrix A und B angegeben):
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";
}
Aber ich glaube nicht, das ist richtig. Hier ist mein Code für mehrfach:
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];
}
}
}
}
Test für 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";
}
Wie Multiply erwartet ein 'Doppel **' 'für res' und als 'C' ist bereits ein' Doppel ** ', gibt es keine Notwendigkeit' & C' an die Funktion übergeben. Das einfache "C" ist ausreichend. Da es bereits ein Zeiger ist, kann die Funktion den angegebenen Inhalt füllen. –