# Brüche kürzen



## nihat05 (4. Nov 2016)

Hallo Leute,
wir haben die Hausaufgabe bekommen einen Rechner für Brüche zu programmieren. Allerdings dürfen wir keine Methoden schreiben, sondern müssen alles in der main schreiben. Nur jetzt habe ich das Problem: ich weiß nicht wie ich das Ergebnis der Brüche kürzen kann. Hat jemand vielleicht ne Idee und kann mir helfen?


----------



## Nuiton (4. Nov 2016)

Wie sollte so ein "Rechner" funktionieren? Was ist der input, was ist der gewollte output?


----------



## nihat05 (4. Nov 2016)

Nuiton hat gesagt.:


> Wie sollte so ein "Rechner" funktionieren? Was ist der input, was ist der gewollte output?



Es sollen zwei Brüche eingegeben werden ( 2 Zähler, 2 Nenner) danach soll der Rechenoperator eingegeben werden und am Ende soll das Ergebnis gekürzt werden falls möglich!


----------



## Nuiton (4. Nov 2016)

Du musst den groessten gemeinsamen Teiler berechnen. Ein Beispiel findest du hier.


----------



## JStein52 (4. Nov 2016)

Nuiton hat gesagt.:


> Du musst den groessten gemeinsamen Teiler berechnen.


Und bei Addition/Subtraktion erst mal den Hauptnenner (kleinstes gemeinsames Vielfaches).


----------



## JStein52 (4. Nov 2016)

JStein52 hat gesagt.:


> erst mal den Hauptnenner


Na ja, musst du nicht wirklich. Aber so lernt man es in der Schule


----------



## Nuiton (5. Nov 2016)

Was man so alles macht... wenn man Langeweile hat.


Spoiler


----------



## JStein52 (5. Nov 2016)

Oder die Sparversion für arme Schüler die ihre Hausaufgabe machen müssen:


```
private static void bruchKuerzen(int zaehler1, int nenner1, int zaehler2, int nenner2, char operation) {
        int nenner=0, zaehler=0, ggt=0;
      
        switch(operation) {
            case '+':
                        nenner  = nenner1*nenner2;
                        zaehler = zaehler1*nenner2 + zaehler2*nenner1;
                        break;
            case '-':
                        nenner  = nenner1*nenner2;
                        zaehler = zaehler1*nenner2 - zaehler2*nenner1;
                        break;
            case '*':
                        nenner  = nenner1*nenner2;
                        zaehler = zaehler1*zaehler2;
                        break;
            case '/':
                        nenner  = nenner1*zaehler2;
                        zaehler = zaehler1*nenner2;
                        break;
            default :
                        System.out.println("Falsche Operation ");
                      
        }

        // ggt berechnen
        int a, b;
        a = zaehler;
        b = nenner;
        while (true && b !=0 && a!=0) {
            a = a % b;
            if (a == 0) {
                ggt = Math.abs(b);
                break;
            }
            b = b % a;
            if (b == 0) {
                ggt = Math.abs(a);
                break;
            }
        }
      
        // hier noch ueberlegen was du machst wenn der Nenner 0 ist
        System.out.println("Bruch "+zaehler/Math.max(1,ggt)+"/"+nenner/Math.max(1,ggt));
    }
```


----------



## Meniskusschaden (5. Nov 2016)

JStein52 hat gesagt.:


> while (true && b !=0 && a!=0)


Wofür ist denn das true? Musste spontan an das denken.


----------



## JStein52 (5. Nov 2016)

Meniskusschaden hat gesagt.:


> Wofür ist denn das true?


 Ursprünglich hatte ich dort nur
while (true)
stehen, weil ich den ggt von woanders kopiert hatte. Dann hatte ich gemerkt dass ich in diesem Zusammenhang hier nicht brauchen kann wenn a oder b == 0 wird und habe das hinzugefügt. Kann sein dass dadurch true überflüssig wurde  war aber nicht falsch also habe ich nicht weiter darüber nachgedacht.


----------

