Ausgabe der Determinante
In diesem letzten Schritt verbessern wir unser Programm zur Berechnung der Determinante einer Matrix, indem wir detailliertere Ausgaben hinzufügen und die Fehlerbehandlung verbessern, um die Benutzererfahrung zu steigern.
Bearbeiten Sie die Datei matrix_determinant.c
:
nano matrix_determinant.c
Ersetzen Sie den vorherigen Inhalt durch den folgenden verbesserten Code:
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define MAX_SIZE 10
// Funktion zur rekursiven Berechnung der Determinante
int determinant(int matrix[MAX_SIZE][MAX_SIZE], int n) {
int det = 0;
int submatrix[MAX_SIZE][MAX_SIZE];
// Basisfall für 1x1-Matrizen
if (n == 1) {
return matrix[0][0];
}
// Basisfall für 2x2-Matrizen
if (n == 2) {
return matrix[0][0] * matrix[1][1] - matrix[0][1] * matrix[1][0];
}
// Rekursiver Fall für größere Matrizen
int sign = 1;
for (int k = 0; k < n; k++) {
// Erstellen der Untermatrix
int subi = 0;
for (int i = 1; i < n; i++) {
int subj = 0;
for (int j = 0; j < n; j++) {
if (j == k) continue;
submatrix[subi][subj] = matrix[i][j];
subj++;
}
subi++;
}
// Rekursive Berechnung
det += sign * matrix[0][k] * determinant(submatrix, n - 1);
sign = -sign;
}
return det;
}
// Funktion zur formatierten Ausgabe der 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("%5d ", matrix[i][j]);
}
printf("\n");
}
}
int main() {
int n, i, j;
int matrix[MAX_SIZE][MAX_SIZE];
bool valid_input = false;
while (!valid_input) {
// Einlesen der Matrixdimension
printf("Geben Sie die Größe der quadratischen Matrix (1-%d) ein: ", MAX_SIZE);
if (scanf("%d", &n)!= 1) {
printf("Ungültige Eingabe. Bitte geben Sie eine Zahl ein.\n");
while (getchar()!= '\n'); // Eingabepuffer leeren
continue;
}
// Überprüfung der Matrixgröße
if (n < 1 || n > MAX_SIZE) {
printf("Ungültige Matrixgröße. Bitte geben Sie eine Größe zwischen 1 und %d ein.\n", MAX_SIZE);
continue;
}
valid_input = true;
}
// Einlesen der Matrixelemente
printf("Geben Sie die Matrixelemente ein:\n");
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
printf("Geben Sie das Element [%d][%d] ein: ", i, j);
while (scanf("%d", &matrix[i][j])!= 1) {
printf("Ungültige Eingabe. Bitte geben Sie eine Ganzzahl für das Element [%d][%d] ein: ", i, j);
while (getchar()!= '\n'); // Eingabepuffer leeren
}
}
}
// Ausgabe der eingegebenen Matrix
print_matrix(matrix, n);
// Berechnung und Ausgabe der Determinante
int det = determinant(matrix, n);
// Formatierte Ausgabe der Determinante
printf("\n--- Determinantenberechnung ---\n");
printf("Matrixgröße: %d x %d\n", n, n);
printf("Determinante: %d\n", det);
return 0;
}
Kompilieren und starten Sie das Programm:
gcc matrix_determinant.c -o matrix_determinant
./matrix_determinant
Beispielausgabe:
Geben Sie die Größe der quadratischen Matrix (1-10) 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
Matrix:
1 2 3
4 5 6
7 8 9
--- Determinantenberechnung ---
Matrixgröße: 3 x 3
Determinante: 0
Wichtige Verbesserungen:
- Eingabevalidierung hinzugefügt, um ungültige Eingaben zu behandeln
- Eine separate Funktion zur formatierten Ausgabe der Matrix erstellt
- Ausgabe verbessert, um die Matrixgröße und die Determinante klar anzuzeigen
- Fehlerbehandlung für Benutzereingaben verbessert