Bruchvereinfachung (ggT) 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 man Brüche mithilfe des größten gemeinsamen Teilers (GCD)-Algorithmus in der C-Programmierung vereinfacht. Das Labor umfasst die folgenden Schritte: Lesen des Zählers und Nenners über die Benutzereingabe, Berechnung des ggT und anschließende Division sowohl des Zählers als auch des Nenners durch den ggT, um den vereinfachten Bruch zu erhalten. Dieses Labor zielt darauf ab, Ihnen das Konzept der Bruchsvereinfachung näher zu bringen und es mithilfe von C-Programmiertechniken zu implementieren.

Zähler und Nenner einlesen

In diesem Schritt lernen Sie, wie Sie den Zähler und den Nenner aus der Benutzereingabe in einem C-Programm zur Bruchsvereinfachung lesen.

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

cd ~/project
nano fraction_simplify.c

Fügen Sie nun den folgenden Code hinzu, um den Zähler und den Nenner einzulesen:

#include <stdio.h>

int main() {
    int numerator, denominator;

    printf("Geben Sie den Zähler ein: ");
    scanf("%d", &numerator);

    printf("Geben Sie den Nenner ein: ");
    scanf("%d", &denominator);

    printf("Zähler: %d\n", numerator);
    printf("Nenner: %d\n", denominator);

    return 0;
}

Kompilieren und führen Sie das Programm aus:

gcc fraction_simplify.c -o fraction_simplify
./fraction_simplify

Beispielausgabe:

Geben Sie den Zähler ein: 12
Geben Sie den Nenner ein: 18
Zähler: 12
Nenner: 18

Codeerklärung:

  • scanf() wird verwendet, um ganzzahlige Eingaben vom Benutzer zu lesen.
  • %d ist der Formatbezeichner für ganze Zahlen.
  • &numerator und &denominator übergeben die Speicheradressen, um die Eingabewerte zu speichern.
  • printf() wird verwendet, um den eingegebenen Zähler und Nenner anzuzeigen.

ggT berechnen und beide Werte dividieren

In diesem Schritt implementieren Sie den größten gemeinsamen Teiler (ggT)-Algorithmus und verwenden ihn, um den Bruch zu vereinfachen.

Ändern wir das vorherige Programm, um eine ggT-Berechnungsfunktion hinzuzufügen:

cd ~/project
nano fraction_simplify.c

Aktualisieren Sie den Code mit folgender Implementierung:

#include <stdio.h>

// Funktion zur ggT-Berechnung mit dem euklidischen Algorithmus
int computeGCD(int a, int b) {
    // Sicherstellung positiver Werte
    a = (a > 0) ? a : -a;
    b = (b > 0) ? b : -b;

    // Euklidischer Algorithmus
    while (b != 0) {
        int temp = b;
        b = a % b;
        a = temp;
    }

    return a;
}

int main() {
    int numerator, denominator, gcd;

    printf("Geben Sie den Zähler ein: ");
    scanf("%d", &numerator);

    printf("Geben Sie den Nenner ein: ");
    scanf("%d", &denominator);

    // ggT berechnen
    gcd = computeGCD(numerator, denominator);

    // Bruch vereinfachen
    int simplified_numerator = numerator / gcd;
    int simplified_denominator = denominator / gcd;

    printf("Ursprünglicher Bruch: %d/%d\n", numerator, denominator);
    printf("Vereinfachter Bruch: %d/%d\n", simplified_numerator, simplified_denominator);

    return 0;
}

Kompilieren und ausführen des Programms:

gcc fraction_simplify.c -o fraction_simplify
./fraction_simplify

Beispielausgabe:

Geben Sie den Zähler ein: 12
Geben Sie den Nenner ein: 18
Ursprünglicher Bruch: 12/18
Vereinfachter Bruch: 2/3

Codeerklärung:

  • computeGCD() implementiert den euklidischen Algorithmus, um den größten gemeinsamen Teiler zu finden.
  • Die Funktion behandelt sowohl positive als auch negative Zahlen.
  • Der Bruch wird vereinfacht, indem Zähler und Nenner durch ihren ggT dividiert werden.
  • Behandelt Randfälle wie Null und negative Zahlen.

Ausgabe des vereinfachten Bruchs

In diesem Schritt erweitern Sie das Bruchsvereinfachungsprogramm, um verschiedene Eingabefälle zu handhaben und eine übersichtliche Ausgabeformatierung zu gewährleisten.

Aktualisieren wir das Programm, um eine robustere Ausgabe für Brüche zu implementieren:

cd ~/project
nano fraction_simplify.c

Aktualisieren Sie den Code mit folgender Implementierung:

#include <stdio.h>

// Funktion zur ggT-Berechnung mit dem euklidischen Algorithmus
int computeGCD(int a, int b) {
    a = (a > 0) ? a : -a;
    b = (b > 0) ? b : -b;

    while (b != 0) {
        int temp = b;
        b = a % b;
        a = temp;
    }

    return a;
}

// Funktion zum Drucken des Bruchs mit Sonderfallbehandlung
void printFraction(int numerator, int denominator) {
    // Division durch Null behandeln
    if (denominator == 0) {
        printf("Fehler: Division durch Null ist nicht erlaubt.\n");
        return;
    }

    // ggT berechnen
    int gcd = computeGCD(numerator, denominator);

    // Bruch vereinfachen
    int simplified_numerator = numerator / gcd;
    int simplified_denominator = denominator / gcd;

    // Vorzeichen behandeln
    if (simplified_denominator < 0) {
        simplified_numerator = -simplified_numerator;
        simplified_denominator = -simplified_denominator;
    }

    // Ergebnisse ausgeben
    printf("Ursprünglicher Bruch: %d/%d\n", numerator, denominator);

    // Unterschiedliche Ausgabe für ganze Zahlen und Brüche
    if (simplified_denominator == 1) {
        printf("Vereinfachter Bruch: %d\n", simplified_numerator);
    } else {
        printf("Vereinfachter Bruch: %d/%d\n",
               simplified_numerator, simplified_denominator);
    }
}

int main() {
    int numerator, denominator;

    printf("Geben Sie den Zähler ein: ");
    scanf("%d", &numerator);

    printf("Geben Sie den Nenner ein: ");
    scanf("%d", &denominator);

    // Funktion zum Drucken des Bruchs aufrufen
    printFraction(numerator, denominator);

    return 0;
}

Kompilieren und ausführen des Programms:

gcc fraction_simplify.c -o fraction_simplify
./fraction_simplify

Beispielausgaben:

Geben Sie den Zähler ein: 12
Geben Sie den Nenner ein: 18
Ursprünglicher Bruch: 12/18
Vereinfachter Bruch: 2/3

Geben Sie den Zähler ein: 15
Geben Sie den Nenner ein: 5
Ursprünglicher Bruch: 15/5
Vereinfachter Bruch: 3

Geben Sie den Zähler ein: -12
Geben Sie den Nenner ein: 18
Ursprünglicher Bruch: -12/18
Vereinfachter Bruch: -2/3

Codeerklärung:

  • Funktion printFraction() hinzugefügt, um den Bruch auszugeben.
  • Behandelt Sonderfälle wie Division durch Null.
  • Verwaltet das Vorzeichen des vereinfachten Bruchs.
  • Gibt ganze Zahlen aus, wenn der Nenner 1 ist.
  • Bewahrt das ursprüngliche Vorzeichen des Bruchs.

Zusammenfassung

In diesem Labor lernen Sie, wie Sie den Zähler und den Nenner aus der Benutzereingabe lesen, den größten gemeinsamen Teiler (ggT) mithilfe des euklidischen Algorithmus berechnen und anschließend den Bruch vereinfachen, indem Sie sowohl den Zähler als auch den Nenner durch den ggT dividieren. Der vereinfachte Bruch wird als Ausgabe angezeigt.

Die wichtigsten Schritte sind: 1) Lesen des Zählers und Nenners aus der Benutzereingabe, 2) Implementierung des ggT-Algorithmus zur Ermittlung des größten gemeinsamen Teilers und 3) Division von Zähler und Nenner durch den ggT, um den vereinfachten Bruch zu erhalten.