Überprüfen, ob eine Matrix in C symmetrisch ist

CCBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

In diesem Lab lernen Sie, wie Sie in der C-Programmierung überprüfen können, ob eine Matrix symmetrisch ist. Das Lab umfasst die folgenden Schritte: Einlesen der Dimensionen und Elemente der Matrix, Überprüfen, ob die Matrix symmetrisch ist, indem die Elemente an symmetrischen Positionen verglichen werden, und Ausgeben, ob die Matrix symmetrisch ist oder nicht. Das Lab bietet eine Schritt-für-Schritt-Anleitung mit Codebeispielen, um Ihnen zu helfen, den Prozess der Überprüfung der Matrixsymmetrie in C zu verstehen.

Das Lab beginnt damit, zu zeigen, wie man die Dimensionen und Elemente der Matrix mit der C-Programmierung einliest. Anschließend wird die Logik eingeführt, um zu überprüfen, ob die Matrix symmetrisch ist, indem die Elemente an symmetrischen Positionen verglichen werden. Abschließend zeigt das Lab, wie man das Ergebnis ausgibt, das angibt, ob die Matrix symmetrisch ist oder nicht.


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{{"Überprüfen, ob eine Matrix in C symmetrisch ist"}} c/for_loop -.-> lab-435140{{"Überprüfen, ob eine Matrix in C symmetrisch ist"}} c/arrays -.-> lab-435140{{"Überprüfen, ob eine Matrix in C symmetrisch ist"}} c/user_input -.-> lab-435140{{"Überprüfen, ob eine Matrix in C symmetrisch ist"}} c/output -.-> lab-435140{{"Überprüfen, ob eine Matrix in C symmetrisch ist"}} end

Einlesen von Dimensionen und Elementen

In diesem Schritt lernen Sie, wie Sie in der C-Programmierung die Dimensionen und Elemente einer Matrix einlesen können, um die Symmetrie der Matrix zu überprüfen. Wir werden ein Programm erstellen, das es Benutzern ermöglicht, die Größe und die Elemente einer Matrix einzugeben.

Zunächst erstellen wir eine neue C-Datei für unser Programm zur Überprüfung der Matrixsymmetrie:

cd ~/project
nano symmetric_matrix.c

Fügen Sie nun den folgenden Code hinzu, um die Dimensionen und Elemente der Matrix einzulesen:

#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;
}

Kompilieren und führen Sie das Programm aus:

gcc symmetric_matrix.c -o symmetric_matrix
./symmetric_matrix

Beispielausgabe:

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

Lassen Sie uns die wichtigsten Teile des Codes analysieren:

  • #define MAX_SIZE 100 legt eine maximale Matrixgröße fest, um Pufferüberläufe zu vermeiden.
  • scanf() wird verwendet, um die Matrixdimensionen und einzelne Elemente einzulesen.
  • Verschachtelte Schleifen werden verwendet, um die Matrixelemente einzugeben und anzuzeigen.
  • Das Programm ermöglicht es dem Benutzer, eine quadratische Matrix beliebiger Größe bis zu 100x100 einzugeben.

Überprüfen, ob A[i][j] = A[j][i]

In diesem Schritt werden Sie das vorherige Programm ändern, um zu überprüfen, ob die Matrix symmetrisch ist, indem Sie die Elemente über Zeilen und Spalten hinweg vergleichen.

Öffnen Sie die vorhandene Datei und aktualisieren Sie den Code:

cd ~/project
nano symmetric_matrix.c

Ersetzen Sie den vorherigen Code durch die folgende Implementierung:

#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;
}

Kompilieren und führen Sie das Programm aus:

gcc symmetric_matrix.c -o symmetric_matrix
./symmetric_matrix

Beispielausgabe für eine symmetrische Matrix:

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.

Beispielausgabe für eine nicht-symmetrische Matrix:

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.

Wichtige Punkte im Code:

  • Die boolesche Variable is_symmetric verfolgt die Symmetrie der Matrix.
  • Verschachtelte Schleifen vergleichen matrix[i][j] mit matrix[j][i].
  • Wenn irgendwelche Elemente unterschiedlich sind, wird is_symmetric auf false gesetzt.
  • Das Programm bricht die Schleifen frühzeitig ab, wenn Asymmetrie festgestellt wird.

Ausgabe, ob die Matrix symmetrisch ist oder nicht

In diesem letzten Schritt verbessern Sie das Programm, um eine detailliertere Ausgabe zur Symmetrie der Matrix zu liefern, und erstellen eine Funktion, um die Modularität des Codes zu verbessern.

Öffnen Sie die vorhandene Datei und aktualisieren Sie den Code:

cd ~/project
nano symmetric_matrix.c

Ersetzen Sie den vorherigen Code durch die folgende Implementierung:

#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;
}

Kompilieren und führen Sie das Programm aus:

gcc symmetric_matrix.c -o symmetric_matrix
./symmetric_matrix

Beispielausgabe für eine symmetrische Matrix:

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

Beispielausgabe für eine nicht-symmetrische Matrix:

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]

Wichtige Verbesserungen:

  • Hinzufügen der Funktion is_symmetric_matrix() für eine bessere Codeorganisation
  • Erstellen der Funktion print_matrix() zur Anzeige der Matrixinhalte
  • Verbesserte Ausgabe mit detaillierter Symmetrieanalyse
  • Verwendung von visuellen Indikatoren (✓/✗), um den Symmetriezustand hervorzuheben

Zusammenfassung

In diesem Lab lernen Sie, wie Sie in der C-Programmierung die Dimensionen und Elemente einer Matrix einlesen und dann überprüfen können, ob die Matrix symmetrisch ist. Zunächst erstellen Sie ein Programm, das es Benutzern ermöglicht, die Größe und die Elemente einer Matrix einzugeben. Anschließend ändern Sie das Programm, um zu überprüfen, ob die Matrix symmetrisch ist, indem Sie verifizieren, dass jedes Element A[i][j] seinem entsprechenden Element A[j][i] entspricht. Abschließend geben Sie aus, ob die Matrix symmetrisch ist oder nicht.

Die wichtigsten Lernpunkte aus den abgeschlossenen Schritten umfassen das Einlesen der Matrixdimensionen und -elemente mit scanf(), die Anzeige der eingegebenen Matrix und der Vergleich der Matrixelemente, um die Symmetrie zu bestimmen. Das Programm ermöglicht es dem Benutzer, eine quadratische Matrix beliebiger Größe bis zu 100x100 einzugeben.