| 1 |
/* matrix.c — Matrix multiplication demo for Pactor64 */ |
| 2 |
#include "libc.h" |
| 3 |
|
| 4 |
#define N 4 |
| 5 |
|
| 6 |
static void print_matrix(const char *name, int m[N][N]) { |
| 7 |
printf(" %s:\n", name); |
| 8 |
for (int i = 0; i < N; i++) { |
| 9 |
printf(" ["); |
| 10 |
for (int j = 0; j < N; j++) { |
| 11 |
printf("%4d", m[i][j]); |
| 12 |
if (j < N - 1) printf(","); |
| 13 |
} |
| 14 |
printf("]\n"); |
| 15 |
} |
| 16 |
} |
| 17 |
|
| 18 |
int main(int argc, char **argv) { |
| 19 |
printf("=== Matrix Multiplication (%dx%d) ===\n\n", N, N); |
| 20 |
|
| 21 |
int A[N][N], B[N][N], C[N][N]; |
| 22 |
|
| 23 |
/* Initialize matrices */ |
| 24 |
for (int i = 0; i < N; i++) |
| 25 |
for (int j = 0; j < N; j++) { |
| 26 |
A[i][j] = i * N + j + 1; |
| 27 |
B[i][j] = (i == j) ? 1 : 0; /* Identity matrix */ |
| 28 |
} |
| 29 |
|
| 30 |
print_matrix("Matrix A", A); |
| 31 |
printf("\n"); |
| 32 |
print_matrix("Identity B", B); |
| 33 |
|
| 34 |
/* Multiply A * B (should give A back) */ |
| 35 |
for (int i = 0; i < N; i++) |
| 36 |
for (int j = 0; j < N; j++) { |
| 37 |
C[i][j] = 0; |
| 38 |
for (int k = 0; k < N; k++) |
| 39 |
C[i][j] += A[i][k] * B[k][j]; |
| 40 |
} |
| 41 |
|
| 42 |
printf("\n"); |
| 43 |
print_matrix("A * B = ", C); |
| 44 |
|
| 45 |
/* Now multiply A * A */ |
| 46 |
for (int i = 0; i < N; i++) |
| 47 |
for (int j = 0; j < N; j++) { |
| 48 |
C[i][j] = 0; |
| 49 |
for (int k = 0; k < N; k++) |
| 50 |
C[i][j] += A[i][k] * A[k][j]; |
| 51 |
} |
| 52 |
|
| 53 |
printf("\n"); |
| 54 |
print_matrix("A * A = ", C); |
| 55 |
|
| 56 |
printf("\nDone!\n"); |
| 57 |
return 0; |
| 58 |
} |
| 59 |
|