Multiplicación de matrices en C

CCBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este laboratorio, vamos a escribir un programa de multiplicación de matrices en C. Aprenderemos cómo crear una matriz, realizar operaciones con matrices y discutiremos el algoritmo estándar para la multiplicación de matrices. Crearemos un programa en C para multiplicar dos matrices e imprimir la matriz resultante.

Nota: Tienes que crear el archivo ~/project/main.c tú mismo para practicar la codificación y aprender cómo compilar y ejecutarlo con gcc.

cd ~/project
## crear main.c
touch main.c
## compilar main.c
gcc main.c -o main
## ejecutar main
./main

Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL c(("C")) -.-> c/BasicsGroup(["Basics"]) c(("C")) -.-> c/ControlFlowGroup(["Control Flow"]) c(("C")) -.-> c/CompoundTypesGroup(["Compound Types"]) c(("C")) -.-> c/UserInteractionGroup(["User Interaction"]) c/BasicsGroup -.-> c/variables("Variables") c/ControlFlowGroup -.-> c/for_loop("For Loop") c/CompoundTypesGroup -.-> c/arrays("Arrays") c/UserInteractionGroup -.-> c/user_input("User Input") subgraph Lab Skills c/variables -.-> lab-123281{{"Multiplicación de matrices en C"}} c/for_loop -.-> lab-123281{{"Multiplicación de matrices en C"}} c/arrays -.-> lab-123281{{"Multiplicación de matrices en C"}} c/user_input -.-> lab-123281{{"Multiplicación de matrices en C"}} end

Creando matrices

Primero, aprendamos cómo crear matrices. Una matriz es una matriz bidimensional. Aquí hay un ejemplo de cómo declarar e inicializar una matriz 2x2 en C:

int matrix[2][2] = {{1, 2}, {3, 4}};

Podemos acceder a elementos específicos de la matriz usando dos índices, como en el siguiente ejemplo:

int element = matrix[1][0];

Multiplicación de matrices por un valor escalar

La multiplicación de una matriz por un solo valor es fácil y se realiza de la siguiente manera:

int arr[2][2], n;
//Ingrese el valor escalar
scanf("%d", &n);

//Ingrese los elementos de la matriz
for(int i = 0; i < 2; i++) {
    for(int j = 0; j < 2; j++){
        scanf("%d", &arr[i][j]);
    }
}
// Multiplique cada elemento de la matriz por el valor escalar
for(int i = 0; i < 2; i++) {
    for(int j = 0; j < 2; j++){
        arr[i][j] = arr[i][j] * n;
    }
}

// Imprima los elementos de la matriz actualizada
for(int i = 0; i < 2; i++) {
    for(int j = 0; j < 2; j++){
        printf("%d ", arr[i][j]);
    }
    printf("\n");
}

El programa multiplica cada elemento de la matriz por el valor escalar ingresado por el usuario y luego imprime la matriz actualizada.

Multiplicación de matrices con dos matrices

Para multiplicar dos matrices, debes seguir ciertas reglas. Primero, el número de columnas de la primera matriz debe ser igual al número de filas de la segunda matriz. Segundo, la matriz resultante tendrá el mismo número de filas que la primera matriz y el mismo número de columnas que la segunda matriz.

Supongamos que tenemos dos matrices:

A = {{1, 3, 5},
     {4, 2, 6}};

B = {{7, 4},
     {3, 1},
     {6, 9}};

Para multiplicar estas dos matrices, realizaremos un producto punto en sus filas y columnas. Los elementos de las matrices se multiplican utilizando la siguiente fórmula:

result[row][col] = matrix1[row][0] * matrix2[0][col]
                  + matrix1[row][1] * matrix2[1][col]
                  + matrix1[row][2] * matrix2[2][col]
                  +...;

A continuación, se presenta un programa en C sobre la multiplicación de matrices:

#include <stdio.h>

int main()
{
  int m, n, p, q, c, d, k, sum = 0;

  // define two matrices
  int first[10][10], second[10][10], result[10][10];

  // input the number of rows and columns of the first matrix
  printf("Enter the number of rows and columns of the first matrix:\n");
  scanf("%d %d", &m, &n);

  // input the elements of the first matrix
  printf("Enter the %d elements of the first matrix:\n", m * n);
  for (c = 0; c < m; c++) {
    for (d = 0; d < n; d++) {
      scanf("%d", &first[c][d]);
    }
  }

  // input the number of rows and columns of the second matrix
  printf("Enter the number of rows and columns of the second matrix:\n");
  scanf("%d %d", &p, &q);

  // input the elements of the second matrix
  printf("Enter the %d elements of the second matrix:\n", p * q);
  for (c = 0; c < p; c++) {
    for (d = 0; d < q; d++) {
      scanf("%d", &second[c][d]);
    }
  }

  // check if matrices can be multiplied
  if (n!= p) {
    printf("Matrices cannot be multiplied with each other.\n");
  } else {
    // multiplying the matrices
    for (c = 0; c < m; c++) {
      for (d = 0; d < q; d++) {
        for (k = 0; k < p; k++) {
          sum = sum + first[c][k] * second[k][d];
        }
        result[c][d] = sum;
        sum = 0;
      }
    }

    // print the resulting matrix
    printf("The resulting matrix is:\n");
    for (c = 0; c < m; c++) {
      for (d = 0; d < q; d++) {
        printf("%d\t", result[c][d]);
      }
      printf("\n");
    }
  }

  return 0;
}

El programa pedirá al usuario que ingrese los elementos de dos matrices, comprobará si se pueden multiplicar, las multiplicará si es posible e imprimirá la matriz resultante.

Programa completo

A continuación se presenta el programa completo que combina todos los pasos:

#include<stdio.h>

int main()
{
    int n, m, c, d, p, q, k, first[10][10], second[10][10], pro[10][10], sum = 0;

    printf("\nIngrese el número de filas y columnas de la primera matriz: \n\n");
    scanf("%d%d", &m, &n);

    printf("\nIngrese los %d elementos de la primera matriz: \n\n", m*n);
    for(c = 0; c < m; c++) {
        for(d = 0; d < n; d++) {
            scanf("%d", &first[c][d]);
        }
    }

    printf("\nIngrese el número de filas y columnas de la primera matriz: \n\n");
    scanf("%d%d", &p, &q);

    if(n!= p)
        printf("Las matrices con el orden dado no se pueden multiplicar entre sí.\n\n");

    else {
        printf("\nIngrese los %d elementos de la segunda matriz: \n\n",m*n);

        for(c = 0; c < p; c++) {
            for(d = 0; d < q; d++) {
                scanf("%d", &second[c][d]);
            }
        }

        printf("\n\nLa primera matriz es: \n\n");
        for(c = 0; c < m; c++) {
            for(d = 0; d < n; d++) {
                printf("%d\t", first[c][d]);
            }
            printf("\n");
        }

        printf("\n\nLa segunda matriz es: \n\n");
        for(c = 0; c < p; c++) {
            for(d = 0; d < q; d++){
                printf("%d\t", second[c][d]);
            }
            printf("\n");
        }

        for(c = 0; c < m; c++) {
            for(d = 0; d < q; d++) {
                for(k = 0; k < p; k++) {
                    sum = sum + first[c][k] * second[k][d];
                }
                pro[c][d] = sum;
                sum = 0;
            }
        }

        printf("\n\nLa multiplicación de las dos matrices ingresadas es: \n\n");
        for(c = 0; c < m; c++) {
            for(d = 0; d < q; d++) {
                printf("%d\t", pro[c][d]);
            }
            printf("\n");
        }
    }
    printf("\n\n\t\t\tCodificar es divertido!\n\n\n");
    return 0;
}

Resumen

En este laboratorio, hemos aprendido cómo crear una matriz en C y las diferentes operaciones de multiplicación de matrices que podemos realizar. Hemos creado un programa en C para calcular la multiplicación de dos matrices y hemos discutido el algoritmo estándar para la multiplicación de matrices.