C Programming Language Program
#include <stdlib.h>
size_t geti(size_t M, size_t k) {
return (k / M) + 1;
}
size_t getj(size_t M, size_t k) {
return (k % M) + 1;
}
return (M * i) + j - 1 - M;
}
void multiply_matrix(double* matrix_result,
double *matrix1, size_t N, size_t M1,
double *matrix2, size_t M2, size_t P) {
size_t z;
for(z = 0; z < N*P; z++) {
size_t indexi = geti(P, z);
size_t indexj = getj(P, z);
double result = 0.0;
size_t k;
for (k = 1; k <= M1; k++) {
size_t indexMatrix1 = getindex(M1, indexi, k);
size_t indexMatrix2 = getindex(P, k, indexj);
result += matrix1[indexMatrix1] * matrix2[indexMatrix2];
}
matrix_result[z] = result;
}
}
#include <stdlib.h>
/* Dado el indice @k del arreglo, retorna el indice i de una matriz
* de @N*@M */size_t geti(size_t M, size_t k) {
return (k / M) + 1;
}
/* Dado el indice @k del arreglo, retorna el indice j de una matriz
* de @N*@M */size_t getj(size_t M, size_t k) {
return (k % M) + 1;
}
/* Dada la posicion @i@j en una matriz de @Nx@M, devuelve
* el indice correspondiente al vector representante de la matriz */
size_t getindex(size_t M, size_t i, size_t j) {return (M * i) + j - 1 - M;
}
void multiply_matrix(double* matrix_result,
double *matrix1, size_t N, size_t M1,
double *matrix2, size_t M2, size_t P) {
size_t z;
for(z = 0; z < N*P; z++) {
size_t indexi = geti(P, z);
size_t indexj = getj(P, z);
double result = 0.0;
size_t k;
for (k = 1; k <= M1; k++) {
size_t indexMatrix1 = getindex(M1, indexi, k);
size_t indexMatrix2 = getindex(P, k, indexj);
result += matrix1[indexMatrix1] * matrix2[indexMatrix2];
}
matrix_result[z] = result;
}
}