Dado el indice @k del arreglo, retorna el indice i de una matriz

C Programming Language Program

#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;
    }
}


Learn More :