Vérifier si une matrice est symétrique 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 lab, vous allez apprendre à vérifier si une matrice est symétrique en programmation C. Le lab couvre les étapes suivantes : lire les dimensions et les éléments de la matrice, vérifier si la matrice est symétrique en comparant les éléments aux positions symétriques, et afficher si la matrice est symétrique ou non. Le lab fournit un guide étape par étape avec des exemples de code pour vous aider à comprendre le processus de vérification de la symétrie d'une matrice en C.

Le lab commence par montrer comment lire les dimensions et les éléments de la matrice en utilisant la programmation C. Il introduit ensuite la logique pour vérifier si la matrice est symétrique en comparant les éléments aux positions symétriques. Enfin, le lab démontre comment afficher le résultat, indiquant si la matrice est symétrique ou non.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL c(("C")) -.-> c/ControlFlowGroup(["Control Flow"]) c(("C")) -.-> c/CompoundTypesGroup(["Compound Types"]) c(("C")) -.-> c/UserInteractionGroup(["User Interaction"]) c/ControlFlowGroup -.-> c/if_else("If...Else") c/ControlFlowGroup -.-> c/for_loop("For Loop") c/CompoundTypesGroup -.-> c/arrays("Arrays") c/UserInteractionGroup -.-> c/user_input("User Input") c/UserInteractionGroup -.-> c/output("Output") subgraph Lab Skills c/if_else -.-> lab-435140{{"Vérifier si une matrice est symétrique en C"}} c/for_loop -.-> lab-435140{{"Vérifier si une matrice est symétrique en C"}} c/arrays -.-> lab-435140{{"Vérifier si une matrice est symétrique en C"}} c/user_input -.-> lab-435140{{"Vérifier si une matrice est symétrique en C"}} c/output -.-> lab-435140{{"Vérifier si une matrice est symétrique en C"}} end

Lire les dimensions et les éléments

Dans cette étape, vous allez apprendre à lire les dimensions et les éléments d'une matrice en programmation C pour vérifier la symétrie d'une matrice. Nous allons créer un programme qui permet aux utilisateurs d'entrer la taille et les éléments d'une matrice.

Tout d'abord, créons un nouveau fichier C pour notre programme de vérification de la symétrie d'une matrice :

cd ~/project
nano symmetric_matrix.c

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

#include <stdio.h>

#define MAX_SIZE 100

int main() {
    int n, matrix[MAX_SIZE][MAX_SIZE];

    // Read matrix dimensions
    printf("Enter the size of the square matrix: ");
    scanf("%d", &n);

    // Read matrix elements
    printf("Enter matrix elements:\n");
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            printf("Enter element [%d][%d]: ", i, j);
            scanf("%d", &matrix[i][j]);
        }
    }

    // Print the entered matrix
    printf("\nEntered Matrix:\n");
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            printf("%d ", matrix[i][j]);
        }
        printf("\n");
    }

    return 0;
}

Compilez et exécutez le programme :

gcc symmetric_matrix.c -o symmetric_matrix
./symmetric_matrix

Exemple de sortie :

Enter the size of the square matrix: 3
Enter matrix elements:
Enter element [0][0]: 1
Enter element [0][1]: 2
Enter element [0][2]: 3
Enter element [1][0]: 2
Enter element [1][1]: 4
Enter element [1][2]: 5
Enter element [2][0]: 3
Enter element [2][1]: 5
Enter element [2][2]: 6

Entered Matrix:
1 2 3
2 4 5
3 5 6

Décortiquons les parties clés du code :

  • #define MAX_SIZE 100 définit une taille maximale de matrice pour éviter les dépassements de mémoire tampon (buffer overflows)
  • scanf() est utilisé pour lire les dimensions de la matrice et les éléments individuels
  • Des boucles imbriquées sont utilisées pour saisir et afficher les éléments de la matrice
  • Le programme permet à l'utilisateur d'entrer une matrice carrée de n'importe quelle taille jusqu'à 100x100

Vérifier si A[i][j] = A[j][i]

Dans cette étape, vous allez modifier le programme précédent pour vérifier si la matrice est symétrique en comparant les éléments entre les lignes et les colonnes.

Ouvrez le fichier existant et mettez à jour le code :

cd ~/project
nano symmetric_matrix.c

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

#include <stdio.h>
#include <stdbool.h>

#define MAX_SIZE 100

int main() {
    int n, matrix[MAX_SIZE][MAX_SIZE];
    bool is_symmetric = true;

    // Read matrix dimensions
    printf("Enter the size of the square matrix: ");
    scanf("%d", &n);

    // Read matrix elements
    printf("Enter matrix elements:\n");
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            printf("Enter element [%d][%d]: ", i, j);
            scanf("%d", &matrix[i][j]);
        }
    }

    // Check symmetry
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            if (matrix[i][j]!= matrix[j][i]) {
                is_symmetric = false;
                break;
            }
        }
        if (!is_symmetric) break;
    }

    // Print symmetry result
    if (is_symmetric) {
        printf("\nThe matrix is symmetric.\n");
    } else {
        printf("\nThe matrix is not symmetric.\n");
    }

    return 0;
}

Compilez et exécutez le programme :

gcc symmetric_matrix.c -o symmetric_matrix
./symmetric_matrix

Exemple de sortie pour une matrice symétrique :

Enter the size of the square matrix: 3
Enter matrix elements:
Enter element [0][0]: 1
Enter element [0][1]: 2
Enter element [0][2]: 3
Enter element [1][0]: 2
Enter element [1][1]: 4
Enter element [1][2]: 5
Enter element [2][0]: 3
Enter element [2][1]: 5
Enter element [2][2]: 6

The matrix is symmetric.

Exemple de sortie pour une matrice non symétrique :

Enter the size of the square matrix: 3
Enter matrix elements:
Enter element [0][0]: 1
Enter element [0][1]: 2
Enter element [0][2]: 3
Enter element [1][0]: 4
Enter element [1][1]: 5
Enter element [1][2]: 6
Enter element [2][0]: 7
Enter element [2][1]: 8
Enter element [2][2]: 9

The matrix is not symmetric.

Points clés du code :

  • La variable booléenne is_symmetric suit la symétrie de la matrice
  • Des boucles imbriquées comparent matrix[i][j] avec matrix[j][i]
  • Si des éléments diffèrent, is_symmetric est mis à false
  • Le programme sort des boucles dès qu'une asymétrie est trouvée

Afficher si la matrice est symétrique ou non

Dans cette étape finale, vous allez améliorer le programme pour fournir une sortie plus détaillée sur la symétrie de la matrice et créer une fonction pour améliorer la modularité du code.

Ouvrez le fichier existant et mettez à jour le code :

cd ~/project
nano symmetric_matrix.c

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

#include <stdio.h>
#include <stdbool.h>

#define MAX_SIZE 100

// Function to check matrix symmetry
bool is_symmetric_matrix(int matrix[MAX_SIZE][MAX_SIZE], int n) {
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            if (matrix[i][j] != matrix[j][i]) {
                return false;
            }
        }
    }
    return true;
}

// Function to print matrix
void print_matrix(int matrix[MAX_SIZE][MAX_SIZE], int n) {
    printf("\nMatrix:\n");
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            printf("%4d ", matrix[i][j]);
        }
        printf("\n");
    }
}

int main() {
    int n, matrix[MAX_SIZE][MAX_SIZE];

    // Read matrix dimensions
    printf("Enter the size of the square matrix: ");
    scanf("%d", &n);

    // Read matrix elements
    printf("Enter matrix elements:\n");
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            printf("Enter element [%d][%d]: ", i, j);
            scanf("%d", &matrix[i][j]);
        }
    }

    // Print the entered matrix
    print_matrix(matrix, n);

    // Check and print symmetry status
    if (is_symmetric_matrix(matrix, n)) {
        printf("\nSymmetry Analysis:\n");
        printf("✓ The matrix is symmetric.\n");
        printf("  - All elements A[i][j] are equal to A[j][i]\n");
        printf("  - Matrix is invariant under transpose\n");
    } else {
        printf("\nSymmetry Analysis:\n");
        printf("✗ The matrix is not symmetric.\n");
        printf("  - Some elements A[i][j] are not equal to A[j][i]\n");
    }

    return 0;
}

Compilez et exécutez le programme :

gcc symmetric_matrix.c -o symmetric_matrix
./symmetric_matrix

Exemple de sortie pour une matrice symétrique :

Enter the size of the square matrix: 3
Enter matrix elements:
Enter element [0][0]: 1
Enter element [0][1]: 2
Enter element [0][2]: 3
Enter element [1][0]: 2
Enter element [1][1]: 4
Enter element [1][2]: 5
Enter element [2][0]: 3
Enter element [2][1]: 5
Enter element [2][2]: 6

Matrix:
   1    2    3
   2    4    5
   3    5    6

Symmetry Analysis:
✓ The matrix is symmetric.
  - All elements A[i][j] are equal to A[j][i]
  - Matrix is invariant under transpose

Exemple de sortie pour une matrice non symétrique :

Enter the size of the square matrix: 3
Enter matrix elements:
Enter element [0][0]: 1
Enter element [0][1]: 2
Enter element [0][2]: 3
Enter element [1][0]: 4
Enter element [1][1]: 5
Enter element [1][2]: 6
Enter element [2][0]: 7
Enter element [2][1]: 8
Enter element [2][2]: 9

Matrix:
   1    2    3
   4    5    6
   7    8    9

Symmetry Analysis:
✗ The matrix is not symmetric.
  - Some elements A[i][j] are not equal to A[j][i]

Améliorations clés :

  • Ajout de la fonction is_symmetric_matrix() pour une meilleure organisation du code
  • Création de la fonction print_matrix() pour afficher le contenu de la matrice
  • Sortie améliorée avec une analyse détaillée de la symétrie
  • Utilisation d'indicateurs visuels (✓/✗) pour mettre en évidence l'état de symétrie

Résumé

Dans ce lab, vous allez apprendre à lire les dimensions et les éléments d'une matrice en programmation C, puis à vérifier si la matrice est symétrique. Tout d'abord, vous allez créer un programme qui permet aux utilisateurs d'entrer la taille et les éléments d'une matrice. Ensuite, vous allez modifier le programme pour vérifier si la matrice est symétrique en vérifiant que chaque élément A[i][j] est égal à l'élément correspondant A[j][i]. Enfin, vous allez afficher si la matrice est symétrique ou non.

Les principaux points d'apprentissage des étapes terminées incluent la lecture des dimensions et des éléments de la matrice à l'aide de scanf(), l'affichage de la matrice saisie et la comparaison des éléments de la matrice pour déterminer la symétrie. Le programme permet à l'utilisateur d'entrer une matrice carrée de n'importe quelle taille jusqu'à 100x100.