C-Kurs/Matrizenmultiplikation/Musterlösung
< C-Kurs | Matrizenmultiplikation
Version vom 5. März 2013, 17:37 Uhr von PaulG (Diskussion | Beiträge) (verschob „Ckurs/Matrizenmultiplikation/Musterlösung“ nach „C-Kurs/Matrizenmultiplikation/Musterlösung“)
#include <stdio.h> #include <assert.h> void mult( const int * const *a, const int * const *b, int * const *result, int rows_a, int cols_a, int cols_b) { int row = 0; for (; row < rows_a; ++row) { int col = 0; for (; col < cols_b; ++col) { int i = 0; result[row][col] = 0; for (; i < cols_a; ++i) { result[row][col] += a[row][i] * b[i][col]; } } } } int main() { const int a0[] = {1, 0}; const int a1[] = {4, 3}; const int a2[] = {2, 5}; const int *a[] = {a0, a1, a2}; const int b0[] = {6, 3, 4, 2}; const int b1[] = {7, 1, 0, 5}; const int *b[] = {b0, b1}; int c0[4], c1[4], c2[4]; int * const result[] = {c0, c1, c2}; const int d0[] = { 6, 3, 4, 2}; const int d1[] = {45, 15, 16, 23}; const int d2[] = {47, 11, 8, 29}; const int * const expected[] = {d0, d1, d2}; int row = 0; mult(a, b, result, sizeof(a) / sizeof(int *), sizeof(a0) / sizeof(int), sizeof(b0) / sizeof(int)); /* Print result, compare against expected values */ for (; row < sizeof(result) / sizeof(int *); ++row) { int col = 0; for (; col < sizeof(c0) / sizeof(int); ++col) { printf("%2d ", result[row][col]); assert(result[row][col] == expected[row][col]); } printf("\n"); } return 0; }