Ausgabe von Lösungen oder Sonderfällen
In diesem letzten Schritt verbessern Sie das Programm, um detailliertere Ausgaben für verschiedene Arten von Lösungen in einem System aus zwei linearen Gleichungen zu liefern.
Öffnen Sie die vorhandene Datei und machen Sie die letzten Änderungen:
cd ~/project
nano linear_equations.c
Aktualisieren Sie den Code mit einer verbesserten Ausgabeformatierung:
#include <stdio.h>
#include <math.h>
// Funktion zur Berechnung der Determinante
float determinant(float a1, float b1, float a2, float b2) {
return a1 * b2 - a2 * b1;
}
int main() {
float a1, b1, c1; // Koeffizienten für die erste Gleichung
float a2, b2, c2; // Koeffizienten für die zweite Gleichung
float det, detX, detY;
float x, y;
float EPSILON = 1e-6; // Kleiner Wert für Gleitkommavergleiche
// Aufforderung und Einlesen der Koeffizienten für die erste Gleichung
printf("Lineare Gleichungslöser\n");
printf("Geben Sie die Koeffizienten für die erste Gleichung (ax + by = c) ein:\n");
printf("a1: ");
scanf("%f", &a1);
printf("b1: ");
scanf("%f", &b1);
printf("c1: ");
scanf("%f", &c1);
// Aufforderung und Einlesen der Koeffizienten für die zweite Gleichung
printf("Geben Sie die Koeffizienten für die zweite Gleichung (ax + by = c) ein:\n");
printf("a2: ");
scanf("%f", &a2);
printf("b2: ");
scanf("%f", &b2);
printf("c2: ");
scanf("%f", &c2);
// Ausgabe der eingegebenen Gleichungen
printf("\nEingegebene Gleichungen:\n");
printf("Gleichung 1: %.2fx + %.2fy = %.2f\n", a1, b1, c1);
printf("Gleichung 2: %.2fx + %.2fy = %.2f\n", a2, b2, c2);
// Berechnung der Hauptdeterminante
det = determinant(a1, b1, a2, b2);
// Bestimmung und Ausgabe des Lösungstyps
if (fabs(det) > EPSILON) {
// Fall einer eindeutigen Lösung
detX = determinant(c1, b1, c2, b2);
detY = determinant(a1, c1, a2, c2);
x = detX / det;
y = detY / det;
printf("\n--- Lösungstyp: Eindeutige Lösung ---\n");
printf("Lösung:\n");
printf("x = %.2f\n", x);
printf("y = %.2f\n", y);
} else {
// Prüfung auf keine Lösung oder unendlich viele Lösungen
detX = determinant(c1, b1, c2, b2);
detY = determinant(a1, c1, a2, c2);
if (fabs(detX) > EPSILON || fabs(detY) > EPSILON) {
printf("\n--- Lösungstyp: Keine Lösung ---\n");
printf("Das Gleichungssystem hat keine Lösung.\n");
printf("Die Gleichungen sind inkonsistent und parallel.\n");
} else {
printf("\n--- Lösungstyp: Unendlich viele Lösungen ---\n");
printf("Das Gleichungssystem hat unendlich viele Lösungen.\n");
printf("Die Gleichungen sind äquivalent und abhängig.\n");
}
}
return 0;
}
Kompilieren und starten Sie das Programm:
gcc linear_equations.c -o linear_equations
./linear_equations
Beispielausgabe für eine eindeutige Lösung:
Lineare Gleichungslöser
Geben Sie die Koeffizienten für die erste Gleichung (ax + by = c) ein:
a1: 2
b1: 3
c1: 8
Geben Sie die Koeffizienten für die zweite Gleichung (ax + by = c) ein:
a2: 1
b2: 4
c2: 10
Eingegebene Gleichungen:
Gleichung 1: 2.00x + 3.00y = 8.00
Gleichung 2: 1.00x + 4.00y = 10.00
--- Lösungstyp: Eindeutige Lösung ---
Lösung:
x = 2.00
y = 2.00
Beispielausgabe für keine Lösung:
Lineare Gleichungslöser
Geben Sie die Koeffizienten für die erste Gleichung (ax + by = c) ein:
a1: 2
b1: 3
c1: 8
Geben Sie die Koeffizienten für die zweite Gleichung (ax + by = c) ein:
a2: 4
b2: 6
c2: 16
Eingegebene Gleichungen:
Gleichung 1: 2.00x + 3.00y = 8.00
Gleichung 2: 4.00x + 6.00y = 16.00
--- Lösungstyp: Keine Lösung ---
Das Gleichungssystem hat keine Lösung.
Die Gleichungen sind inkonsistent und parallel.