Parametry dobrze przekazuje, oto cały kod:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int *mult(int *A, int *B, int Ay, int Bx, int Ax);
int *addSub(int *A, int *B, int Ay, int Ax, int sign);
int main() {
int *A, *B, *C;
int Ay, Ax, By, Bx, i, j;
srand(time(NULL));
Ay = rand() % 10 + 1;
Ax = rand() % 10 + 1;
By = Ax;
Bx = rand() % 10 + 1;
A = (int*) malloc(sizeof(int) * Ay * Ax);
B = (int*) malloc(sizeof(int) * By * Bx);
printf("Macierz A:\n");
for (i = 0; i < Ay; ++i)
for (j = 0; j < Ax; ++j) {
A[Ax * i + j] = rand() % 100;
printf("%3d ", A[Ax * i + j]);
if (j == Ax - 1) printf("\n");
}
printf("\n");
printf("Macierz B:\n");
for (i = 0; i < By; ++i)
for (j = 0; j < Bx; ++j) {
B[Bx * i + j] = rand() % 100;
printf("%3d ", B[Bx * i + j]);
if (j == Bx - 1) printf("\n");
}
printf("\n");
C = mult(A, B, Ay, Bx, Ax);
printf("Macierz C = A * B:\n");
for (i = 0; i < Ay; ++i)
for (j = 0; j < Bx; ++j) {
printf("%8d ", C[Ax * i + j]);
if (j == Bx - 1) printf("\n");
}
free(A);
free(B);
free(C);
return 0;
}
int *mult(int *A, int *B, int Ay, int Bx, int Ax) {
int i, ay, bx, ax;
int *C;
C = malloc(sizeof(int) * Ay * Bx);
for (i = 0; i < Ay * Bx; ++i) C[i] = 0;
i = 0;
for (ay = 0; ay < Ay; ++ay)
for (bx = 0; bx < Bx; ++bx) {
for (ax = 0; ax < Ax; ++ax) C[i] += A[Ax * ay + ax] * B[Bx * ax + bx];
++i;
}
return C;
}
int *addSub(int *A, int *B, int Ay, int Ax, int sign) {
int i;
int *C;
C = malloc(sizeof(int) * Ay * Ax);
for (i = 0; i < Ay * Ax; ++i) C[i] = A[i] + B[i] * sign;
return C;
}