Multiplication de matrices en C

CCBeginner
Pratiquer maintenant

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Dans ce laboratoire, nous allons écrire un programme de multiplication de matrices en C. Nous allons apprendre à créer une matrice, effectuer des opérations sur les matrices et discuter de l'algorithme standard de multiplication de matrices. Nous allons créer un programme C pour multiplier deux matrices et afficher la matrice résultante.

Note : Vous devez créer le fichier ~/project/main.c vous-même pour pratiquer la programmation et apprendre à le compiler et à l'exécuter avec gcc.

cd ~/project
## créer main.c
touch main.c
## compiler main.c
gcc main.c -o main
## exécuter main
./main

Création de matrices

Tout d'abord, apprenons à créer des matrices. Une matrice est un tableau à deux dimensions. Voici un exemple de déclaration et d'initialisation d'une matrice 2x2 en C :

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

Nous pouvons accéder à des éléments spécifiques de la matrice en utilisant deux indices, comme dans l'exemple suivant :

int element = matrix[1][0];

Multiplication de matrice par une valeur scalaire

La multiplication d'une matrice par une seule valeur est facile et se fait comme suit :

int arr[2][2], n;
//Entrez la valeur scalaire
scanf("%d", &n);

//Entrez les éléments de la matrice
for(int i = 0; i < 2; i++) {
    for(int j = 0; j < 2; j++){
        scanf("%d", &arr[i][j]);
    }
}
// Multipliez chaque élément de la matrice par la valeur scalaire
for(int i = 0; i < 2; i++) {
    for(int j = 0; j < 2; j++){
        arr[i][j] = arr[i][j] * n;
    }
}

// Affichez les éléments de la matrice mise à jour
for(int i = 0; i < 2; i++) {
    for(int j = 0; j < 2; j++){
        printf("%d ", arr[i][j]);
    }
    printf("\n");
}

Le programme multiplie chaque élément de la matrice par la valeur scalaire entrée par l'utilisateur puis affiche la matrice mise à jour.

Multiplication de matrice avec deux matrices

Pour multiplier deux matrices, vous devez suivre certaines règles. Premièrement, le nombre de colonnes de la première matrice doit être égal au nombre de lignes de la seconde matrice. Deuxièmement, la matrice résultante aura le même nombre de lignes que la première matrice et le même nombre de colonnes que la seconde matrice.

Supposons que nous ayons deux matrices :

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

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

Pour multiplier ces deux matrices, nous allons effectuer un produit scalaire sur leurs lignes et colonnes. Les éléments des matrices sont multipliés en utilisant la formule suivante :

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

Voici un programme C sur la multiplication de matrices :

#include <stdio.h>

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

  // définir deux matrices
  int first[10][10], second[10][10], result[10][10];

  // entrer le nombre de lignes et de colonnes de la première matrice
  printf("Entrez le nombre de lignes et de colonnes de la première matrice :\n");
  scanf("%d %d", &m, &n);

  // entrer les éléments de la première matrice
  printf("Entrez les %d éléments de la première matrice :\n", m * n);
  for (c = 0; c < m; c++) {
    for (d = 0; d < n; d++) {
      scanf("%d", &first[c][d]);
    }
  }

  // entrer le nombre de lignes et de colonnes de la seconde matrice
  printf("Entrez le nombre de lignes et de colonnes de la seconde matrice :\n");
  scanf("%d %d", &p, &q);

  // entrer les éléments de la seconde matrice
  printf("Entrez les %d éléments de la seconde matrice :\n", p * q);
  for (c = 0; c < p; c++) {
    for (d = 0; d < q; d++) {
      scanf("%d", &second[c][d]);
    }
  }

  // vérifier si les matrices peuvent être multipliées
  if (n!= p) {
    printf("Les matrices ne peuvent pas être multipliées l'une par l'autre.\n");
  } else {
    // multiplier les 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;
      }
    }

    // afficher la matrice résultante
    printf("La matrice résultante est :\n");
    for (c = 0; c < m; c++) {
      for (d = 0; d < q; d++) {
        printf("%d\t", result[c][d]);
      }
      printf("\n");
    }
  }

  return 0;
}

Le programme demandera à l'utilisateur d'entrer les éléments de deux matrices, vérifiera s'ils peuvent être multipliés, les multipliera si possible et affichera la matrice résultante.

Programme complet

Voici le programme complet combinant toutes les étapes :

#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("\nEntrez le nombre de lignes et de colonnes de la première matrice : \n\n");
    scanf("%d%d", &m, &n);

    printf("\nEntrez les %d éléments de la première matrice : \n\n", m*n);
    for(c = 0; c < m; c++) {
        for(d = 0; d < n; d++) {
            scanf("%d", &first[c][d]);
        }
    }

    printf("\nEntrez le nombre de lignes et de colonnes de la première matrice : \n\n");
    scanf("%d%d", &p, &q);

    if(n!= p)
        printf("Les matrices de l'ordre donné ne peuvent pas être multipliées l'une par l'autre.\n\n");

    else {
        printf("\nEntrez les %d éléments de la seconde matrice : \n\n",m*n);

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

        printf("\n\nLa première matrice est : \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 seconde matrice est : \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 multiplication des deux matrices entrées est : \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\tCoder est amusant!\n\n\n");
    return 0;
}

Récapitulatif

Dans ce laboratoire, nous avons appris à créer une matrice en C et les différents types d'opérations de multiplication de matrices que nous pouvons effectuer. Nous avons créé un programme pour calculer la multiplication de deux matrices en C et discuté de l'algorithme standard de multiplication de matrices.