Introduction
Dans ce laboratoire, vous apprendrez à multiplier deux matrices en C. Le laboratoire couvre les étapes suivantes :
Lecture des dimensions et des éléments : Vous apprendrez à lire les dimensions et les éléments de deux matrices à partir de l'entrée utilisateur. Cette étape garantit que les matrices sont compatibles pour la multiplication.
Multiplication des lignes par les colonnes : Vous implémenterez l'algorithme de multiplication de matrices, où chaque élément de la matrice produit est calculé en multipliant les lignes et les colonnes correspondantes des matrices d'entrée.
Affichage de la matrice produit : Enfin, vous afficherez la matrice produit résultante.
À la fin de ce laboratoire, vous aurez une bonne compréhension de la multiplication de matrices en C et serez capable de l'appliquer à diverses applications.
Lecture des dimensions et des éléments
Dans cette étape, vous apprendrez à lire les dimensions et les éléments des matrices pour la multiplication de matrices en C. Nous allons créer un programme permettant aux utilisateurs d'entrer la taille et les valeurs de deux matrices.
Tout d'abord, créons un nouveau fichier C pour notre programme de multiplication de matrices :
cd ~/project
nano matrix_multiply.c
Maintenant, ajoutez le code suivant pour lire les dimensions des matrices :
#include <stdio.h>
#define MAX_SIZE 100
int main() {
int rows1, cols1, rows2, cols2;
// Lecture des dimensions de la première matrice
printf("Entrez les dimensions de la première matrice (lignes colonnes) : ");
scanf("%d %d", &rows1, &cols1);
// Lecture des dimensions de la deuxième matrice
printf("Entrez les dimensions de la deuxième matrice (lignes colonnes) : ");
scanf("%d %d", &rows2, &cols2);
// Vérification de la compatibilité des matrices pour la multiplication
if (cols1 != rows2) {
printf("Multiplication de matrices impossible !\n");
return 1;
}
printf("Les dimensions des matrices sont valides pour la multiplication.\n");
return 0;
}
Compilation et exécution du programme :
gcc matrix_multiply.c -o matrix_multiply
./matrix_multiply
Exemple de sortie :
Entrez les dimensions de la première matrice (lignes colonnes) : 2 3
Entrez les dimensions de la deuxième matrice (lignes colonnes) : 3 2
Les dimensions des matrices sont valides pour la multiplication.
Décomposons le code :
- Nous définissons
MAX_SIZEà 100 pour limiter les dimensions des matrices. scanf()est utilisé pour lire les dimensions des matrices à partir de l'entrée utilisateur.- Nous vérifions si la multiplication de matrices est possible en comparant les colonnes de la première matrice aux lignes de la deuxième matrice.
- Si les dimensions ne sont pas compatibles, le programme affiche un message d'erreur.
Modifions maintenant le code pour lire les éléments des matrices :
#include <stdio.h>
#define MAX_SIZE 100
int main() {
int rows1, cols1, rows2, cols2;
int matrix1[MAX_SIZE][MAX_SIZE];
int matrix2[MAX_SIZE][MAX_SIZE];
// Lecture des dimensions de la première matrice
printf("Entrez les dimensions de la première matrice (lignes colonnes) : ");
scanf("%d %d", &rows1, &cols1);
// Lecture des dimensions de la deuxième matrice
printf("Entrez les dimensions de la deuxième matrice (lignes colonnes) : ");
scanf("%d %d", &rows2, &cols2);
// Vérification de la compatibilité des matrices pour la multiplication
if (cols1 != rows2) {
printf("Multiplication de matrices impossible !\n");
return 1;
}
// Lecture des éléments de la première matrice
printf("Entrez les éléments de la première matrice :\n");
for (int i = 0; i < rows1; i++) {
for (int j = 0; j < cols1; j++) {
printf("Entrez l'élément [%d][%d] : ", i, j);
scanf("%d", &matrix1[i][j]);
}
}
// Lecture des éléments de la deuxième matrice
printf("Entrez les éléments de la deuxième matrice :\n");
for (int i = 0; i < rows2; i++) {
for (int j = 0; j < cols2; j++) {
printf("Entrez l'élément [%d][%d] : ", i, j);
scanf("%d", &matrix2[i][j]);
}
}
printf("Les matrices ont été lues avec succès.\n");
return 0;
}
Compilation et exécution du programme :
gcc matrix_multiply.c -o matrix_multiply
./matrix_multiply
Exemple de sortie :
Entrez les dimensions de la première matrice (lignes colonnes) : 2 3
Entrez les dimensions de la deuxième matrice (lignes colonnes) : 3 2
Entrez les éléments de la première matrice :
Entrez l'élément [0][0] : 1
Entrez l'élément [0][1] : 2
...
Les matrices ont été lues avec succès.
Multiplication des lignes par les colonnes
Dans cette étape, vous apprendrez à effectuer la multiplication de matrices en multipliant les lignes de la première matrice par les colonnes de la deuxième matrice. Nous allons construire sur le code précédent pour implémenter l'algorithme de multiplication de matrices.
Mettez à jour le fichier matrix_multiply.c pour ajouter la fonctionnalité de multiplication de matrices :
cd ~/project
nano matrix_multiply.c
Remplacez le code précédent par l'implémentation suivante :
#include <stdio.h>
#define MAX_SIZE 100
int main() {
int rows1, cols1, rows2, cols2;
int matrix1[MAX_SIZE][MAX_SIZE];
int matrix2[MAX_SIZE][MAX_SIZE];
int result[MAX_SIZE][MAX_SIZE];
// Lecture des dimensions de la première matrice
printf("Entrez les dimensions de la première matrice (lignes colonnes) : ");
scanf("%d %d", &rows1, &cols1);
// Lecture des dimensions de la deuxième matrice
printf("Entrez les dimensions de la deuxième matrice (lignes colonnes) : ");
scanf("%d %d", &rows2, &cols2);
// Vérification de la compatibilité des matrices pour la multiplication
if (cols1 != rows2) {
printf("Multiplication de matrices impossible !\n");
return 1;
}
// Lecture des éléments de la première matrice
printf("Entrez les éléments de la première matrice :\n");
for (int i = 0; i < rows1; i++) {
for (int j = 0; j < cols1; j++) {
printf("Entrez l'élément [%d][%d] : ", i, j);
scanf("%d", &matrix1[i][j]);
}
}
// Lecture des éléments de la deuxième matrice
printf("Entrez les éléments de la deuxième matrice :\n");
for (int i = 0; i < rows2; i++) {
for (int j = 0; j < cols2; j++) {
printf("Entrez l'élément [%d][%d] : ", i, j);
scanf("%d", &matrix2[i][j]);
}
}
// Multiplication des matrices
for (int i = 0; i < rows1; i++) {
for (int j = 0; j < cols2; j++) {
result[i][j] = 0;
for (int k = 0; k < cols1; k++) {
result[i][j] += matrix1[i][k] * matrix2[k][j];
}
}
}
// Affichage de la matrice résultat
printf("\nMatrice résultat :\n");
for (int i = 0; i < rows1; i++) {
for (int j = 0; j < cols2; j++) {
printf("%d ", result[i][j]);
}
printf("\n");
}
return 0;
}
Compilation et exécution du programme :
gcc matrix_multiply.c -o matrix_multiply
./matrix_multiply
Exemple de sortie :
... (sortie identique)
Décomposons l'algorithme de multiplication de matrices :
- Les deux boucles externes
ietjitèrent sur la matrice résultat. - La boucle interne
keffectue le produit scalaire de la ligneide la première matrice et de la colonnejde la deuxième matrice. result[i][j]est calculé en additionnant les produits des éléments correspondants.- Les boucles imbriquées garantissent que chaque élément de la matrice résultat est calculé correctement.
Points clés concernant la multiplication de matrices :
- Le nombre de colonnes de la première matrice doit être égal au nombre de lignes de la deuxième matrice.
- La matrice résultante aura des dimensions (lignes de la première matrice) × (colonnes de la deuxième matrice).
Affichage de la matrice produit
Dans cette dernière étape, nous allons améliorer notre programme de multiplication de matrices en ajoutant une fonctionnalité d'impression plus robuste et une gestion des erreurs. Nous allons créer des fonctions pour afficher les matrices et améliorer l'expérience utilisateur globale.
Mettez à jour le fichier matrix_multiply.c avec l'implémentation améliorée suivante :
cd ~/project
nano matrix_multiply.c
Remplacez le code précédent par cette version complète :
#include <stdio.h>
#define MAX_SIZE 100
// Fonction pour afficher une matrice
void printMatrix(int matrix[MAX_SIZE][MAX_SIZE], int rows, int cols, const char* matrixName) {
printf("\n%s Matrix:\n", matrixName);
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
printf("%5d ", matrix[i][j]);
}
printf("\n");
}
}
int main() {
int rows1, cols1, rows2, cols2;
int matrix1[MAX_SIZE][MAX_SIZE];
int matrix2[MAX_SIZE][MAX_SIZE];
int result[MAX_SIZE][MAX_SIZE];
// Lecture des dimensions de la première matrice
printf("Entrez les dimensions de la première matrice (lignes colonnes) : ");
scanf("%d %d", &rows1, &cols1);
// Lecture des dimensions de la deuxième matrice
printf("Entrez les dimensions de la deuxième matrice (lignes colonnes) : ");
scanf("%d %d", &rows2, &cols2);
// Vérification de la compatibilité des matrices pour la multiplication
if (cols1 != rows2) {
printf("Multiplication de matrices impossible !\n");
printf("Le nombre de colonnes de la première matrice (%d) doit être égal au nombre de lignes de la deuxième matrice (%d).\n", cols1, rows2);
return 1;
}
// Lecture des éléments de la première matrice
printf("Entrez les éléments de la première matrice :\n");
// ... (code identique)
}
Compilation et exécution du programme :
gcc matrix_multiply.c -o matrix_multiply
./matrix_multiply
Exemple de sortie :
... (sortie identique)
Améliorations clés de cette version :
- Fonction
printMatrix()créée pour afficher les matrices avec une mise en forme cohérente. - Messages d'erreur plus descriptifs pour la compatibilité de la multiplication de matrices.
- Affichage des matrices d'entrée avant l'affichage de la matrice produit.
- Utilisation de
%5dpour un affichage aligné des matrices. - Format de sortie clair et lisible.
Explication de la fonction d'affichage :
printMatrix()prend la matrice, ses dimensions et un nom en paramètres.- Utilise des boucles imbriquées pour afficher chaque élément.
- Le spécificateur de format
%5dgarantit que chaque nombre prend 5 espaces pour l'alignement. - Ajoute une nouvelle ligne après chaque ligne pour une meilleure lisibilité.
Résumé
Dans ce laboratoire, vous apprendrez à lire les dimensions et les éléments d'une matrice, puis à effectuer la multiplication de matrices en C. Premièrement, vous apprendrez à lire les dimensions de deux matrices et à vérifier si elles sont compatibles pour la multiplication. Ensuite, vous apprendrez à lire les éléments des deux matrices et à les stocker dans des tableaux bidimensionnels. Enfin, vous apprendrez à effectuer la multiplication matricielle proprement dite et à afficher la matrice produit résultante.



