Resumen: obtener el producto de matrices en C desarrollando el algoritmo con ciclos for y almacenar el resultado en una nueva matriz, validando las filas y columnas.

Hoy vamos a resolver un ejercicio matemático en C que trata sobre la multiplicación de matrices. El algoritmo es muy sencillo pero para ello primero debemos saber cómo se multiplican las matrices.

Si no sabes cómo multiplicar matrices manualmente puedes ver este enlace de Geogebra en donde se muestra que para multiplicar dos matrices, el número de columnas de la primera matriz debe ser igual al número de filas de la segunda matriz.

Multiplicación de matrices en C

En ocasiones voy a llamar a la primera matriz A, y a la segunda B.

Para obtener el producto de matrices en C comenzamos recorriendo cada columna de la segunda matriz. Dentro de ese ciclo recorremos cada fila de la primera matriz y dentro de ese ciclo recorremos cada columna (celda) de la primera matriz.

Es decir, recorremos la primera matriz normalmente, en x e y. Pero eso lo colocamos dentro de un ciclo que recorre las filas de B.

Finalmente en cada iteración paso sumamos los productos de toda la fila y lo acomodamos en la matriz resultante.

Producto de matrices en C - Código

Una vez dicho esto veamos el código. Primero definimos nuestras matrices y hacemos la validación:

#define FILAS_MATRIZ_B 3
#define COLUMNAS_MATRIZ_B 2
#define FILAS_MATRIZ_A 3
#define COLUMNAS_MATRIZ_A 3

int matrizA[FILAS_MATRIZ_A][COLUMNAS_MATRIZ_A] = {
        {3, 2, 1},
        {1, 1, 3},
        {0, 2, 1},
};
int matrizB[FILAS_MATRIZ_B][COLUMNAS_MATRIZ_B] = {
        {2, 1},
        {1, 0},
        {3, 2},
};

if (COLUMNAS_MATRIZ_A != FILAS_MATRIZ_B) {
    printf("Columnas de matriz A deben ser igual a filas de matriz B");
    return 0;
}

Si se pasa la validación entonces definimos una matriz del mismo tamaño de B:

//Lugar en donde se almacena el resultado
int producto[FILAS_MATRIZ_B][COLUMNAS_MATRIZ_B];

Hacemos los 3 ciclos y dentro vamos acomodando los valores en la matriz producto:

// Necesitamos hacer esto por cada columna de la segunda matriz (B)
for (int a = 0; a < COLUMNAS_MATRIZ_B; a++) {
    // Dentro recorremos las filas de la primera (A)
    for (int i = 0; i < FILAS_MATRIZ_A; i++) {
        int suma = 0;
        // Y cada columna de la primera (A)
        for (int j = 0; j < COLUMNAS_MATRIZ_A; j++) {
            // Multiplicamos y sumamos resultado
            suma += matrizA[i][j] * matrizB[j][a];
        }
        // Lo acomodamos dentro del producto
        producto[i][a] = suma;
    }
}

Fíjate que en la línea 9 multiplicamos lo que hay en A[i][j] por lo que hay en B[j][a], es decir, j se repite pero en el primer caso como fila y en el segundo como columna.

Finalmente imprimimos la matriz:

// Recorrer producto
printf("Imprimiendo producto\n");
for (int i = 0; i < FILAS_MATRIZ_B; i++) {
    for (int j = 0; j < COLUMNAS_MATRIZ_B; j++) {
        printf("%d ", producto[i][j]);
    }
    printf("\n");
}

Poniendo todo junto

El código completo queda así:

/**
 * Producto de matrices en C
 *
 * @author parzibyte
 * https://parzibyte.me/blog/
*/
 * */
#include <stdio.h>

#define FILAS_MATRIZ_B 3
#define COLUMNAS_MATRIZ_B 2
#define FILAS_MATRIZ_A 3
#define COLUMNAS_MATRIZ_A 3

int main(void) {

    int matrizA[FILAS_MATRIZ_A][COLUMNAS_MATRIZ_A] = {
            {3, 2, 1},
            {1, 1, 3},
            {0, 2, 1},
    };
    int matrizB[FILAS_MATRIZ_B][COLUMNAS_MATRIZ_B] = {
            {2, 1},
            {1, 0},
            {3, 2},
    };

    if (COLUMNAS_MATRIZ_A != FILAS_MATRIZ_B) {
        printf("Columnas de matriz A deben ser igual a filas de matriz B");
        return 0;
    }
    //Lugar en donde se almacena el resultado
    int producto[FILAS_MATRIZ_B][COLUMNAS_MATRIZ_B];

    // Necesitamos hacer esto por cada columna de la segunda matriz (B)
    for (int a = 0; a < COLUMNAS_MATRIZ_B; a++) {
        // Dentro recorremos las filas de la primera (A)
        for (int i = 0; i < FILAS_MATRIZ_A; i++) {
            int suma = 0;
            // Y cada columna de la primera (A)
            for (int j = 0; j < COLUMNAS_MATRIZ_A; j++) {
                // Multiplicamos y sumamos resultado
                suma += matrizA[i][j] * matrizB[j][a];
            }
            // Lo acomodamos dentro del producto
            producto[i][a] = suma;
        }
    }

    // Recorrer producto
    printf("Imprimiendo producto\n");
    for (int i = 0; i < FILAS_MATRIZ_B; i++) {
        for (int j = 0; j < COLUMNAS_MATRIZ_B; j++) {
            printf("%d ", producto[i][j]);
        }
        printf("\n");
    }
}

Los valores de la matriz y el resultado coinciden con los del enlace que dejé al principio.

En mi caso el resultado se ve así:

Ejecutando programa en C para multiplicar matrices y almacenar el resultado en otra matriz

¿Más ejercicios de C? click aquí.

Si el post ha sido de tu agrado te invito a que me sigas para saber cuando haya escrito un nuevo post, haya actualizado algún sistema o publicado un nuevo software. Facebook | X | Instagram | Telegram | También estoy a tus órdenes para cualquier contratación en mi página de contacto