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.
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.
Una vez dicho esto veamos el código. Primero definimos nuestras matrices y hacemos la validación:
Si se pasa la validación entonces definimos una matriz del mismo tamaño de B
:
Hacemos los 3 ciclos y dentro vamos acomodando los valores en la matriz producto
:
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:
El código completo queda así:
Puedes probarlo en línea justo aquí. 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í:
¿Más ejercicios de C? click aquí.
La impresión de un PDF en cualquier impresora se puede automatizar con un bot de…
Hoy te enseñaré cómo enviar un mensaje a un usuario desde un bot de Telegram…
El día de hoy te enseñaré algo muy sencillo pero útil al programar con PHP:…
El plugin para imprimir en impresoras térmicas alcanza hoy su versión 3.4.0 agregando soporte para…
En ocasiones es necesario leer los pixeles y colores de una imagen con JavaScript del…
Siguiendo con los tutoriales de listas desplegables o select con JavaScript, vamos a ver cómo…
Esta web usa cookies.
Ver comentarios
Al código se deberá corregir algunas líneas como esta
#include
#define FILAS_MATRIZ_A 2
#define COLUMNAS_MATRIZ_A 3
#define FILAS_MATRIZ_B 3
#define COLUMNAS_MATRIZ_B 1
int main(void) {
int matrizA[FILAS_MATRIZ_A][COLUMNAS_MATRIZ_A] = {
{1, 2, 2},
{3, 2, 2},
};
int matrizB[FILAS_MATRIZ_B][COLUMNAS_MATRIZ_B] = {
{1,},
{2,},
{1,},
};
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_A][COLUMNAS_MATRIZ_B];
// Necesitamos hacer esto por cada columna de la segunda matriz (B)
for (int a = 0; a < FILAS_MATRIZ_A; a++) {
// Dentro recorremos las filas de la primera (A)
for (int i = 0; i < COLUMNAS_MATRIZ_B; 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[a][j] * matrizB[j][i];
}
// Lo acomodamos dentro del producto
producto[a][i] = suma;
}
}
// Recorrer producto
printf("Imprimiendo producto\n");
for (int i = 0; i < FILAS_MATRIZ_A; i++) {
for (int j = 0; j < COLUMNAS_MATRIZ_B; j++) {
printf("%d ", producto[i][j]);
}
printf("\n");
}
}
Buenas me sirvió el código, pero creo que tiene un error. Donde se crea la variable "producto" en la asignación de filas y cuando recorre para imprimir valores están con "FILAS_MATRIZ_B", cuando tendría que ser con "FILAS_MATRIZ_A". Ya que el producto de matrices es el numero de filas en A y el numero de columnas en B.
Saludos!
Bueno, deje dos comentarios pero ahora solo veo uno, así que por las dudas lo vuelvo a mandar.
Seria la linea 33 y 52.
Habría que cambiar en esas dos líneas el “FILAS_MATRIZ_B” por “FILAS_MATRIZ_A”. En el ejemplo que pusiste no se nota el error porque las filas de A y B son las mismas, pero si cambias el numero de filas en “FILAS_MATRIZ_A” (por ejemplo) estaría recorriendo mal la matriz “producto”.
Ok muchas gracias por sus comentarios :)
Saludos y éxito!
Habría que cambiar en esas dos líneas el "FILAS_MATRIZ_B" por "FILAS_MATRIZ_A". En el ejemplo que pusiste no se nota porque las filas de A y B son las mismas, pero si cambias el numero de filas en "FILAS_MATRIZ_A" (por ejemplo) estaría recorriendo mal la matriz "producto".
En la linea 33 y 52 decía.
Hola. ¿En cuál línea sería?