# bruch soweit es geht kürzen



## Gast (8. Nov 2006)

ich bin grad dabei ein Programm zu schreiben mit denen man Brüche addieren, subtrahieren usw kann.
Natürlich soll es auch kürzen und zwar so weit es geht.   

Meine Methode sieht bis jetzt so aus:

```
public Fraction reduce() {
        Fraction result = new Fraction(nominator, denominator);
        int nom = nominator;
        System.out.println("Prime factors");
        HashMap nomhash = c.primeDecomposition(nom);
        System.out.println(nomhash.toString());
        int den = denominator;
        HashMap denhash = c.primeDecomposition(den);
        System.out.println(denhash.toString());
        result.nominator = nominator;
        return result;
    }
```
ich hab aber irgendwie grad überhaupt kein Plan wie ich weiter machen soll...
total blackout oder so   

kann mir mal jemand helfen wie ich das verwirkliche?
auf der Basis von dem was ich schon gemacht habe...Denn ich soll ein package von einem kumpel benutzen in dem die primzahlen generiert und in einer hashmap gespeichert werden.
wenn bedarf kann ich das auch noch posten.  

bitte helfen!
kein fertige Methode die ich dann kopiere. Wenn dann bitte erklären wie die Methode genau geht.

mfg der misteriöse gast :shock:


----------



## SlaterB (8. Nov 2006)

lasse Java weg und mache dich erstmal wieder mit der Mathematik der 5. Klasse vertraut....


```
54      2 * 3 * 3 * 3            
---  = ------------------ =  ????????
42      2 * 3 * 7
```

wie muss man da wohl vorgehen?


----------



## SnooP (8. Nov 2006)

Ein Stichwort wäre der ggT ... und da gibts nen gängigen Algorithmus vom guten Euklid (google, wiki).
Das Kürzen kann dann ebenfalls rekursiv mit Hilfe des ggTs erfolgen.


----------



## Guest (8. Nov 2006)

SlaterB hat gesagt.:
			
		

> lasse Java weg und mache dich erstmal wieder mit der Mathematik der 5. Klasse vertraut....
> 
> 
> ```
> ...


öhm...genau deswegen soll ich das programmieren damit ich das lerne
also ich würde sagen alle zahlen multiplizieren und das ergibt dann 54/42
aber wie kürzt man?
und wie setze ich das  in Java um?


----------



## SlaterB (8. Nov 2006)

> öhm...genau deswegen soll ich das programmieren damit ich das lerne
falsch, es ist fast immer andersrum, erst wenn man weiß, was zu tun ist, macht das programmieren Sinn,

natürlich kann man vorher mit dem PC viel besser rumprobieren als mit Bleistift,
das ist wahr,
leider hast du auch dazu keine Lust


> aber wie kürzt man?

tja, hier ist dir also jeder Unterschüler weit voraus, denk mal darüber nach..



```
54      2 * 3 * 3 * 3                3 * 3 * 3                3 * 3         9    
---  = ------------------ =  ------------------ =  ------------------ =    ---
42      2 * 3 * 7                    3 * 7                    7             7
```


> und wie setze ich das in Java um? 

du hast die beiden Mengen die oben und unten stehen vorliegen, das hat dir dein Kumpel abgenommen,
nun musst du eine 2 oben suchen und eine 2 unten und wegkürzen,
das ganze natürlich für alle Zahlen, dabei Doppelte beachten und überhaupt wahrscheinlich erstmal
von dieser unhandlichen Map wegkommen,
(edit: na vielleicht doch besser bei der Map bleiben!)

alles in allem wahrscheinlich viel zu hoch für dich,
Programmieren lernt sich ja nicht von selbst,
bei deinem Wissensstand sehe ich schwarz
insbesondere sind Mathematikfähigkeiten das beste Indix, und da siehts bei dir ja fast noch übler aus

(rege dich nicht über mein Gemecker auf, ich gebe wenigstens noch wertvolle Tipps  )


----------



## Guest (8. Nov 2006)

ja du sagst es zwar hart hast aber irgendwie recht
Es ist ja nicht so das ich in Mathe eine Niete bin.Nur Bruchrechnung ist mein Problem der rest geht supper.

Es ist auch so das ich bisher nicht viel bzw gar nicht mit Hash Maps gearbeitet hab und deren funktionsweise mir noch nicht das klar ist, bzw die Funktionsweise schon aber ich weiss nicht wie man mit HashMaps arbeitet.


----------



## SlaterB (8. Nov 2006)

solche Probleme hat man immer mal,
aber so grundlegende Dinge wie HashMaps kann man an anfangs 20, später vielleicht 100 Fingern abzählen,
es ist also nicht hoffnungslos aufwendig, sich damit erstmal vertraut zu machen

da kommt das Probieren ins Spiel, 
vorher mal die API-Beschreibung anschauchen
http://java.sun.com/j2se/1.5.0/docs/api/
(die Klasse suchen)

oder auch Lehrbücher, wer hätte das gedacht
http://www.galileocomputing.de/openbook/javainsel5/
(das passende Kapitel suchen)

und dann einfach mal den Inhalt einer Map auslesen,
alle Keys bestimmen,
alle Values bestimmen
Element einfügen, auslesen (suchen), überschreiben,

mehr kann eine Map gar nicht und mehr brauchst du für diese Aufgabe auch gar nicht


----------



## SnooP (8. Nov 2006)

Die interne Realisierung einer HashMap werden auch hier nicht sooooo viele in Gänze erklären können, da bin ich sicher  ... wie man damit umgehen kann ist ja schon sehr viel interessanter für den Entwickler.


zum Bruchrechnen... - ich würde mir wie gesagt nochmal dinge wie den ggT zu Gemüte führen... dann klappts auch mit dem Bruchrechnen


----------



## thE_29 (8. Nov 2006)

Sowas?


```
public void bruch(int oben, int unten)
  {
    int c=oben;
    int d=unten;
    while (c!=d) {
            if (c<d) d-=c;
            else c-=d;
    }
    System.out.println("GGT: " + c);
    System.out.println(oben + "/" + unten +  " == " + (oben/c)+"/"+ (unten/c));
  }
```

Weiß ja net wie kompliziert ihr immer denkt :bae:


----------



## byte (8. Nov 2006)

Ist doch genau das, was SnooP sagte: :bae:


```
EUCLID_OLD(a,b)
1  solange b ≠ 0
2      wenn a > b
3          dann a := a - b
4          sonst b := b - a
5  return a
```

Quelle: http://de.wikipedia.org/wiki/Euklidischer_Algorithmus#Beschreibung_durch_Pseudocode


----------



## SlaterB (8. Nov 2006)

Aufgabe lesen, Kollegen 

> auf der Basis von dem was ich schon gemacht habe...
> Denn ich soll ein package von einem kumpel benutzen in dem die 
> primzahlen generiert und in einer hashmap gespeichert werden.


----------



## SnooP (8. Nov 2006)

ah okay... - dann versteh ich erst recht das Problem nicht mehr, wenn die Primfaktoren sowieso schon da sind   - dann steht der lösungsweg quasi schon da  ... trotzdem halte ich das für wenig sinnvoll glaub ich.


----------



## thE_29 (8. Nov 2006)

Wahrscheinlich ist es ne Hausaufgabe..

Die haben sowieso selten einen Sinn


----------

