Berechnung der Transponierten einer Matrix in C

CCBeginner
Jetzt üben

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

Einführung

In diesem Labor lernen Sie, wie Sie die Transponierte einer Matrix in C berechnen. Das Labor umfasst die folgenden Schritte:

Lesen von Dimensionen und Elementen: Sie lernen, wie Sie die Dimensionen (Zeilen und Spalten) einer Matrix einlesen und sie mit von Benutzern eingegebenen Werten füllen. Dieser Schritt bildet die Grundlage für den Matrixtranspositionsprozess.

Vertauschen von Zeilen und Spalten: Der Kern der Matrixtransposition besteht darin, die Zeilen und Spalten der ursprünglichen Matrix zu vertauschen, um die transponierte Matrix zu erstellen.

Ausgabe der transponierten Matrix: Schließlich lernen Sie, wie Sie die transponierte Matrix anzeigen, um die Korrektheit des Transpositionsprozesses zu überprüfen.

Am Ende dieses Labors haben Sie ein solides Verständnis der Matrixtransposition und die Fähigkeit, sie in der C-Programmierung zu implementieren.

Dimensionen und Elemente einlesen

In diesem Schritt lernen Sie, wie Sie Matrixdimensionen und -elemente in einem C-Programm für die Matrixtransposition einlesen. Wir erstellen ein Programm, das es Benutzern ermöglicht, die Anzahl der Zeilen und Spalten einzugeben und anschließend die Matrix mit Werten zu füllen.

Erstellen Sie zunächst eine neue C-Datei für unser Matrixtranspositionsprogramm:

cd ~/project
nano matrix_transpose.c

Fügen Sie nun den folgenden Code hinzu, um die Matrixdimensionen und -elemente einzulesen:

#include <stdio.h>

#define MAX_ZEILEN 100
#define MAX_SPALTEN 100

int main() {
    int zeilen, spalten;
    int matrix[MAX_ZEILEN][MAX_SPALTEN];

    // Matrixdimensionen einlesen
    printf("Geben Sie die Anzahl der Zeilen ein: ");
    scanf("%d", &zeilen);

    printf("Geben Sie die Anzahl der Spalten ein: ");
    scanf("%d", &spalten);

    // Matrixelemente eingeben
    printf("Geben Sie die Matrixelemente ein:\n");
    for (int i = 0; i < zeilen; i++) {
        for (int j = 0; j < spalten; j++) {
            printf("Geben Sie das Element [%d][%d] ein: ", i, j);
            scanf("%d", &matrix[i][j]);
        }
    }

    // Ursprüngliche Matrix ausgeben
    printf("\nUrsprüngliche Matrix:\n");
    for (int i = 0; i < zeilen; i++) {
        for (int j = 0; j < spalten; j++) {
            printf("%d ", matrix[i][j]);
        }
        printf("\n");
    }

    return 0;
}

Kompilieren und ausführen des Programms:

gcc matrix_transpose.c -o matrix_transpose
./matrix_transpose

Beispielausgabe:

Geben Sie die Anzahl der Zeilen ein: 3
Geben Sie die Anzahl der Spalten ein: 3
Geben Sie die Matrixelemente ein:
Geben Sie das Element [0][0] ein: 1
Geben Sie das Element [0][1] ein: 2
Geben Sie das Element [0][2] ein: 3
Geben Sie das Element [1][0] ein: 4
Geben Sie das Element [1][1] ein: 5
Geben Sie das Element [1][2] ein: 6
Geben Sie das Element [2][0] ein: 7
Geben Sie das Element [2][1] ein: 8
Geben Sie das Element [2][2] ein: 9

Ursprüngliche Matrix:
1 2 3
4 5 6
7 8 9

Zerlegung der wichtigsten Teile des Codes:

  • Wir definieren die maximale Matrixgröße mit MAX_ZEILEN und MAX_SPALTEN
  • scanf() wird verwendet, um Benutzereingaben für Zeilen, Spalten und Matrixelemente zu lesen
  • Geschachtelte Schleifen werden verwendet, um Matrixelemente einzugeben und anzuzeigen
  • Das Programm validiert die Eingabe innerhalb der maximal zulässigen Matrixgröße

Zeilen und Spalten vertauschen

In diesem Schritt lernen Sie, wie Sie eine Matrix transponieren, indem Sie ihre Zeilen und Spalten vertauschen. Wir werden das vorherige Programm modifizieren, um eine transponierte Matrix zu erstellen.

Öffnen Sie die bestehende Datei matrix_transpose.c:

cd ~/project
nano matrix_transpose.c

Ersetzen Sie den vorherigen Code durch die folgende Implementierung:

#include <stdio.h>

#define MAX_ZEILEN 100
#define MAX_SPALTEN 100

int main() {
    int zeilen, spalten;
    int matrix[MAX_ZEILEN][MAX_SPALTEN];
    int transponiert[MAX_SPALTEN][MAX_ZEILEN];

    // Matrixdimensionen einlesen
    printf("Geben Sie die Anzahl der Zeilen ein: ");
    scanf("%d", &zeilen);

    printf("Geben Sie die Anzahl der Spalten ein: ");
    scanf("%d", &spalten);

    // Matrixelemente eingeben
    printf("Geben Sie die Matrixelemente ein:\n");
    for (int i = 0; i < zeilen; i++) {
        for (int j = 0; j < spalten; j++) {
            printf("Geben Sie das Element [%d][%d] ein: ", i, j);
            scanf("%d", &matrix[i][j]);
        }
    }

    // Matrix transponieren
    for (int i = 0; i < zeilen; i++) {
        for (int j = 0; j < spalten; j++) {
            transponiert[j][i] = matrix[i][j];
        }
    }

    // Ursprüngliche Matrix ausgeben
    printf("\nUrsprüngliche Matrix:\n");
    for (int i = 0; i < zeilen; i++) {
        for (int j = 0; j < spalten; j++) {
            printf("%d ", matrix[i][j]);
        }
        printf("\n");
    }

    // Transponierte Matrix ausgeben
    printf("\nTransponierte Matrix:\n");
    for (int i = 0; i < spalten; i++) {
        for (int j = 0; j < zeilen; j++) {
            printf("%d ", transponiert[i][j]);
        }
        printf("\n");
    }

    return 0;
}

Kompilieren und ausführen des Programms:

gcc matrix_transpose.c -o matrix_transpose
./matrix_transpose

Beispielausgabe:

Geben Sie die Anzahl der Zeilen ein: 3
Geben Sie die Anzahl der Spalten ein: 3
Geben Sie die Matrixelemente ein:
Geben Sie das Element [0][0] ein: 1
...
Ursprüngliche Matrix:
1 2 3
4 5 6
7 8 9

Transponierte Matrix:
1 4 7
2 5 8
3 6 9

Wichtige Punkte zur Matrixtransposition:

  • Wir erstellen eine neue Matrix transponiert mit vertauschten Dimensionen.
  • Die Transposition wird durch das Vertauschen von Zeilen und Spalten durchgeführt.
  • transponiert[j][i] = matrix[i][j] ist die Schlüsseltransformation.
  • Die Dimensionen der ursprünglichen und der transponierten Matrix sind vertauscht.

Die transponierte Matrix ausgeben

In diesem letzten Schritt lernen Sie, wie Sie die transponierte Matrix mit verbesserter Lesbarkeit und Fehlerbehandlung formatieren und ausgeben. Wir erweitern das vorherige Programm, um die Ausgabe professioneller zu gestalten.

Öffnen Sie die Datei matrix_transpose.c:

cd ~/project
nano matrix_transpose.c

Ersetzen Sie den vorherigen Code durch die folgende verbesserte Implementierung:

#include <stdio.h>

#define MAX_ZEILEN 100
#define MAX_SPALTEN 100

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

int main() {
    int zeilen, spalten;
    int matrix[MAX_ZEILEN][MAX_SPALTEN];
    int transponiert[MAX_SPALTEN][MAX_ZEILEN];

    // Eingabevalidierung
    do {
        printf("Geben Sie die Anzahl der Zeilen (1-%d) ein: ", MAX_ZEILEN);
        scanf("%d", &zeilen);
    } while (zeilen <= 0 || zeilen > MAX_ZEILEN);

    do {
        printf("Geben Sie die Anzahl der Spalten (1-%d) ein: ", MAX_SPALTEN);
        scanf("%d", &spalten);
    } while (spalten <= 0 || spalten > MAX_SPALTEN);

    // Matrixelemente eingeben
    printf("Geben Sie die Matrixelemente ein:\n");
    for (int i = 0; i < zeilen; i++) {
        for (int j = 0; j < spalten; j++) {
            printf("Geben Sie das Element [%d][%d] ein: ", i, j);
            scanf("%d", &matrix[i][j]);
        }
    }

    // Matrix transponieren
    for (int i = 0; i < zeilen; i++) {
        for (int j = 0; j < spalten; j++) {
            transponiert[j][i] = matrix[i][j];
        }
    }

    // Matrizen mit formatierter Ausgabe ausgeben
    printMatrix(matrix, zeilen, spalten, "Ursprüngliche Matrix");
    printMatrix(transponiert, spalten, zeilen, "Transponierte Matrix");

    return 0;
}

Kompilieren und ausführen des Programms:

gcc matrix_transpose.c -o matrix_transpose
./matrix_transpose

Beispielausgabe:

Geben Sie die Anzahl der Zeilen (1-100) ein: 3
Geben Sie die Anzahl der Spalten (1-100) ein: 3
Geben Sie die Matrixelemente ein:
...
Ursprüngliche Matrix:
   1    2    3
   4    5    6
   7    8    9

Transponierte Matrix:
   1    4    7
   2    5    8
   3    6    9

Wichtige Verbesserungen in dieser Version:

  • Hinzugefügte Eingabevalidierung für Matrixdimensionen
  • Erstellung einer separaten Funktion printMatrix() für eine bessere Codeorganisation
  • Verbesserte Matrixausgabe mit ausgerichteter Formatierung mit %4d
  • Hinzugefügte Titel zur Matrixausgabe für Klarheit
  • Robustere Behandlung verschiedener Matrixgrößen

Zusammenfassung

In diesem Labor lernen Sie, wie Sie in einem C-Programm Matrixdimensionen und -elemente einlesen, Zeilen und Spalten vertauschen und die transponierte Matrix ausgeben. Zuerst fordert das Programm den Benutzer auf, die Anzahl der Zeilen und Spalten einzugeben, und anschließend erlaubt es dem Benutzer, die Matrixelemente einzugeben. Anschließend wird die ursprüngliche Matrix angezeigt. Als Nächstes tauscht das Programm die Zeilen und Spalten, um die Transponierte der Matrix zu berechnen, und schließlich wird die transponierte Matrix ausgegeben.

Die wichtigsten Lernpunkte in diesem Labor sind die Verwendung von scanf() zum Einlesen von Benutzereingaben, die Implementierung verschachtelter Schleifen zum Einlesen und Anzeigen von Matrixelementen und die Durchführung der Transposition durch Vertauschen von Zeilen und Spalten. Das Programm demonstriert auch die Verwendung von printf(), um die ursprüngliche und die transponierte Matrix anzuzeigen.