Calculer la Transposée d'une Matrice en C

CBeginner
Pratiquer maintenant

Introduction

Dans ce laboratoire, vous apprendrez à calculer la transposée d'une matrice en C. Le laboratoire couvre les étapes suivantes :

Lecture des dimensions et des éléments : Vous apprendrez à lire les dimensions (lignes et colonnes) d'une matrice et à la remplir avec les valeurs saisies par l'utilisateur. Cette étape établit les bases du processus de transposition de matrice.

Permutation des lignes et des colonnes : Le cœur de la transposition de matrice consiste à permuter les lignes et les colonnes de la matrice d'origine pour créer la matrice transposée.

Affichage de la matrice transposée : Enfin, vous apprendrez à afficher la matrice transposée, ce qui vous permettra de vérifier l'exactitude du processus de transposition.

À la fin de ce laboratoire, vous aurez une compréhension solide de la transposition de matrice et la capacité de l'implémenter en programmation C.

Lecture des dimensions et des éléments

Dans cette étape, vous apprendrez à lire les dimensions et les éléments d'une matrice dans un programme C pour la transposition de matrice. Nous allons créer un programme qui permet aux utilisateurs d'entrer le nombre de lignes et de colonnes, puis de remplir la matrice avec des valeurs.

Tout d'abord, créons un nouveau fichier C pour notre programme de transposition de matrice :

cd ~/project
nano matrix_transpose.c

Maintenant, ajoutez le code suivant pour lire les dimensions et les éléments de la matrice :

#include <stdio.h>

#define MAX_ROWS 100
#define MAX_COLS 100

int main() {
    int rows, cols;
    int matrix[MAX_ROWS][MAX_COLS];

    // Lecture des dimensions de la matrice
    printf("Entrez le nombre de lignes : ");
    scanf("%d", &rows);

    printf("Entrez le nombre de colonnes : ");
    scanf("%d", &cols);

    // Saisie des éléments de la matrice
    printf("Entrez les éléments de la matrice :\n");
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < cols; j++) {
            printf("Entrez l'élément [%d][%d] : ", i, j);
            scanf("%d", &matrix[i][j]);
        }
    }

    // Affichage de la matrice originale
    printf("\nMatrice originale :\n");
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < cols; j++) {
            printf("%d ", matrix[i][j]);
        }
        printf("\n");
    }

    return 0;
}

Compilez et exécutez le programme :

gcc matrix_transpose.c -o matrix_transpose
./matrix_transpose

Exemple de sortie :

Entrez le nombre de lignes : 3
Entrez le nombre de colonnes : 3
Entrez les éléments de la matrice :
Entrez l'élément [0][0] : 1
Entrez l'élément [0][1] : 2
Entrez l'élément [0][2] : 3
Entrez l'élément [1][0] : 4
Entrez l'élément [1][1] : 5
Entrez l'élément [1][2] : 6
Entrez l'élément [2][0] : 7
Entrez l'élément [2][1] : 8
Entrez l'élément [2][2] : 9

Matrice originale :
1 2 3
4 5 6
7 8 9

Décomposons les parties clés du code :

  • Nous définissons la taille maximale de la matrice à l'aide de MAX_ROWS et MAX_COLS
  • scanf() est utilisé pour lire les entrées utilisateur pour les lignes, les colonnes et les éléments de la matrice
  • Des boucles imbriquées sont utilisées pour saisir et afficher les éléments de la matrice
  • Le programme valide les entrées dans la taille maximale autorisée de la matrice

Permutation des lignes et des colonnes

Dans cette étape, vous apprendrez à transposer une matrice en permutant ses lignes et ses colonnes. Nous allons modifier le programme précédent pour créer une matrice transposée.

Ouvrez le fichier existant matrix_transpose.c :

cd ~/project
nano matrix_transpose.c

Remplacez le code précédent par l'implémentation suivante :

#include <stdio.h>

#define MAX_ROWS 100
#define MAX_COLS 100

int main() {
    int rows, cols;
    int matrix[MAX_ROWS][MAX_COLS];
    int transposed[MAX_COLS][MAX_ROWS];

    // Lecture des dimensions de la matrice
    printf("Entrez le nombre de lignes : ");
    scanf("%d", &rows);

    printf("Entrez le nombre de colonnes : ");
    scanf("%d", &cols);

    // Saisie des éléments de la matrice
    printf("Entrez les éléments de la matrice :\n");
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < cols; j++) {
            printf("Entrez l'élément [%d][%d] : ", i, j);
            scanf("%d", &matrix[i][j]);
        }
    }

    // Transposition de la matrice
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < cols; j++) {
            transposed[j][i] = matrix[i][j];
        }
    }

    // Affichage de la matrice originale
    printf("\nMatrice originale :\n");
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < cols; j++) {
            printf("%d ", matrix[i][j]);
        }
        printf("\n");
    }

    // Affichage de la matrice transposée
    printf("\nMatrice transposée :\n");
    for (int i = 0; i < cols; i++) {
        for (int j = 0; j < rows; j++) {
            printf("%d ", transposed[i][j]);
        }
        printf("\n");
    }

    return 0;
}

Compilez et exécutez le programme :

gcc matrix_transpose.c -o matrix_transpose
./matrix_transpose

Exemple de sortie :

Entrez le nombre de lignes : 3
Entrez le nombre de colonnes : 3
Entrez les éléments de la matrice :
Entrez l'élément [0][0] : 1
...
Matrice originale :
1 2 3
4 5 6
7 8 9

Matrice transposée :
1 4 7
2 5 8
3 6 9

Points clés sur la transposition de matrice :

  • Nous créons une nouvelle matrice transposed avec des dimensions inversées
  • La transposition est effectuée en permutant les lignes et les colonnes
  • transposed[j][i] = matrix[i][j] est la transformation clé
  • Les dimensions de la matrice originale et de la matrice transposée sont inversées

Affichage de la matrice transposée

Dans cette dernière étape, vous apprendrez à formater et afficher la matrice transposée avec une meilleure lisibilité et une gestion des erreurs améliorée. Nous allons améliorer le programme précédent pour rendre la sortie plus professionnelle.

Ouvrez le fichier matrix_transpose.c :

cd ~/project
nano matrix_transpose.c

Remplacez le code précédent par l'implémentation améliorée suivante :

#include <stdio.h>

#define MAX_ROWS 100
#define MAX_COLS 100

void printMatrix(int matrix[MAX_ROWS][MAX_COLS], int rows, int cols, const char* title) {
    printf("%s:\n", title);
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < cols; j++) {
            printf("%4d ", matrix[i][j]);
        }
        printf("\n");
    }
    printf("\n");
}

int main() {
    int rows, cols;
    int matrix[MAX_ROWS][MAX_COLS];
    int transposed[MAX_COLS][MAX_ROWS];

    // Validation des entrées
    do {
        printf("Entrez le nombre de lignes (1-%d) : ", MAX_ROWS);
        scanf("%d", &rows);
    } while (rows <= 0 || rows > MAX_ROWS);

    do {
        printf("Entrez le nombre de colonnes (1-%d) : ", MAX_COLS);
        scanf("%d", &cols);
    } while (cols <= 0 || cols > MAX_COLS);

    // Saisie des éléments de la matrice
    printf("Entrez les éléments de la matrice :\n");
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < cols; j++) {
            printf("Entrez l'élément [%d][%d] : ", i, j);
            scanf("%d", &matrix[i][j]);
        }
    }

    // Transposition de la matrice
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < cols; j++) {
            transposed[j][i] = matrix[i][j];
        }
    }

    // Affichage des matrices avec un formatage amélioré
    printMatrix(matrix, rows, cols, "Matrice originale");
    printMatrix(transposed, cols, rows, "Matrice transposée");

    return 0;
}

Compilez et exécutez le programme :

gcc matrix_transpose.c -o matrix_transpose
./matrix_transpose

Exemple de sortie :

Entrez le nombre de lignes (1-100) : 3
Entrez le nombre de colonnes (1-100) : 3
Entrez les éléments de la matrice :
...
Matrice originale :
   1    2    3
   4    5    6
   7    8    9

Matrice transposée :
   1    4    7
   2    5    8
   3    6    9

Améliorations clés de cette version :

  • Ajout d'une validation des entrées pour les dimensions de la matrice
  • Création d'une fonction printMatrix() séparée pour une meilleure organisation du code
  • Amélioration de l'affichage de la matrice avec un formatage aligné à l'aide de %4d
  • Ajout de titres aux sorties des matrices pour plus de clarté
  • Prise en charge plus robuste de différentes tailles de matrices

Résumé

Dans ce laboratoire, vous apprendrez à lire les dimensions et les éléments d'une matrice, à permuter les lignes et les colonnes, et à afficher la matrice transposée dans un programme C. Tout d'abord, le programme invite l'utilisateur à saisir le nombre de lignes et de colonnes, puis lui permet d'entrer les éléments de la matrice. La matrice originale est ensuite affichée. Ensuite, le programme permute les lignes et les colonnes pour calculer la transposée de la matrice, et enfin, la matrice transposée est affichée.

Les points clés à retenir dans ce laboratoire incluent l'utilisation de scanf() pour lire les entrées utilisateur, l'implémentation de boucles imbriquées pour saisir et afficher les éléments de la matrice, et l'exécution de l'opération de transposition en permutant les lignes et les colonnes. Le programme démontre également l'utilisation de printf() pour afficher les matrices originale et transposée.