Nun, erst einmal kann kein Computer (bzw. keine Computersprache) was mit Bruchrechnen anfangen. Soviel schon mal vorab. Mag sein, dass es irgendwo im Internet 'ne Java Klassenbibliothek gibt, mit der Du genau das erschlagen kannst. Ich kenne mich mit Java selbst aber nicht gut genug aus, um Dir in der Richtung weiterhelfen zu können.
Deine Aufgabe hab ich so verstanden, dass es Dir ja nun mal nicht reicht, einfach nur
1:2 + 5:3 = 2,1666666666666666666666666666667 zu codieren (das Resultat wäre schon richtig, allerdings wäre es kein Bruch mehr, sondern eine Fließkommazahl, die Du ja nicht willst. Wenn Dir die Darstellung 5/3 als Zähler-Bruchstrich-Nenner-Schreibweise ausreicht, Du also keinen richtigen (horizontalen) Bruchstrich brauchst, dann bietet sich meiner Meinung an, jeweils den Zähler- und Nenner-Wert paarweise in einem zweidimensionalen Array zu speichern. Damit hättest Du dann schon einmal einen stressfreien Zugriff auf die Wertepaare:
BruchArray[ n, 2] *// mit n := Anzahl der Einzelbrüche im Term mit:
BruchArray[ n, 1] *// Zählerwert von Bruch n
BruchArray[ n, 2] *// Nennerwert von Bruch n
Jetzt nimmst Du die Eingabe auseinander (Dazu schreibst Du Dir einen mickrigen String-Parser, der immer nach Deinem Pseudo-Bruchstrich "/" sucht und links und rechts davon die Zahlen extrahiert und in das Array einträgt. (Die Anzahl der enthaltenen Bruchstriche ("/") ermittelst Du übrigens ganz zu Beginn, um damit Deine Arrays korrekt zu dimensionieren.
Gut, nun fehlt noch der Teil, der die Operatoren ausliest. Dazu solltest Du definieren, welche Operatoren zulässig sind z.B. "+ - * :" - vielleicht auch noch Klammern? Aber Achtung, dann wird so ein kleiner Zeilen-Parser schnell komplizierter!
Jetzt bietet sich an, ein weiteres Operatoren-Array gleich mit zu dimensionieren. Natürlich kann man die gefunden Operatoren auch im BruchArray mit unterbringen, was die Sache aber meiner Meinung nach etwas unleserlicher(unübersichtlicher macht. Ich würde:
OperatorenArray[ n ] *// mit n := Anzahl der Einzelbrüche im Term
einfügen. Dann kannst Du die Arrays wie folgt initialisieren (Achtung: Nachfolgend nur Pseudo-Code! JAVA kann ich nicht wirklich - da musst Du schon selbst versuchen einen fehlerfreien Weg zu finden):
AnzahlBrueche = SucheSlashes( FormelAusdruck ) ;
IF ( AnzahlBrueche > 0 ) {
BruchArray[ AnzahlBrueche, 2] = 0 ;
OperatorenArray[ AnzahlBrueche ] = "" ;
ELSE
RETURN "";
}
*// Jetzt den eingegebenen String parsen und die Arrays füllen
Dein Beispiel würde dann wie folgt in den beiden Arrays abgelegt sein:
BruchArray[ 1,1 ] := 1
BruchArray[ 1,2 ] := 2
BruchArray[ 2,1 ] := 5
BruchArray[ 2,2 ] := 3
OperatorenArray[ 1 ] := ""
OperatorenArray[ 2 ] := "+"
AnzahlBrueche := 2
So, und nun kommt das Ding mit dem KGV und dem GGT - aber wie das zu rechnen ist, sollte Dir bekannt sein. Das Schöne an den Arrays ist jetzt, das Du die mit einfachen Schleifen durchlaufen kannst, um ggf. alle möglichen Sonderfälle zu finden und zu normalisieren. Wie z.B. in Deinem Beispiel "5/3", was bekanntlich "nur" ein unechter Bruch ist, da der Nennen größer als der Zähler ist (5/3 == 1 + 2/3) .
Unter http://de.wikipedia.org/wiki/Bruchrechnung findest Du alles, was Du brauchst!
Du solltest auf jeden Fall zuerst alle Sonderformen wie, Stamm- und Zweigbrüche, sowie gemeine, echte, unechte und Schein-Brüche in ihre Normalform umrechnen und erst dann das KGV ermitteln.
Na, ich bin gespannt, ob Dein Bruchrechenprogramm mal funktionieren wird, oder immer nur "zu Bruch geht" ;-)
Viel Erfolg!