/*
$DATE (19.01.2001)
$AUTH Lars Ehrhardt
$VER 1.0
*/
import java.util.*;
class bruch {
public static void main(String arguments[]){
int[] feld = new int[2];
Random r = new java.util.Random();
int a, b, c, d;
a = r.nextInt() % 100 + 1;
b = r.nextInt() % 100 + 1;
c = r.nextInt() % 100 + 1;
d = r.nextInt() % 100 + 1;
bruchop(a,b,c,d,'+');
bruchop(a,b,c,d,'-');
bruchop(a,b,c,d,'*');
bruchop(a,b,c,d,':');
}
/* Funktion: Bruchop
Übergabewerte: Zahl 1: a/b, Zahl 2 a/b, op: +,-,:,*
Rückgabewerte: keine
*/
public static void bruchop(int a,int b, int c, int d, char op){
int[] zahla = new int[2];
zahla = convbruch(a,b,false);
int[] zahlb = new int[2];
zahlb = convbruch(c,d,false);
switch(op) {
case '+': System.out.print("(" + a + "/" + b + ") + (" + c + "/" + d + ") = "); convbruch((zahla[0]*zahlb[1] + zahla[1]*zahlb[0]), zahla[1]*zahlb[1],true);break;
case '-': System.out.print("(" + a + "/" + b + ") - (" + c + "/" + d + ") = "); convbruch((zahla[0]*zahlb[1] - zahla[1]*zahlb[0]), zahla[1]*zahlb[1],true);break;
case '*': System.out.print("(" + a + "/" + b + ") * (" + c + "/" + d + ") = "); convbruch (zahla[0]*zahlb[0],zahla[1]*zahlb[1],true);break;
case ':': System.out.print("(" + a + "/" + b + ") : (" + c + "/" + d + ") = "); convbruch (zahla[0]*zahlb[1],zahla[1]*zahlb[0],true);break;
default: System.out.println("Fehler: Nur Operatoren +,-,* und : erlaubt!"); break;
} //end switch
} //end bruchop
/* Funktion: convbruch
Uebergabeparameter:
Rückgabeparameter:
*/
public static int[] convbruch(int zaehler, int nenner, boolean normieren){
int[] bruch = new int[2];
bruch[0] = zaehler;
bruch[1] = nenner;
if (bruch[0] != 0 && bruch[1] != 0) { // Kuerzen durch ggT-Bestimmung!
int ggtwert;
ggtwert = ggT(bruch[0],bruch[1]);
bruch[0] = bruch[0]/ggtwert;
bruch[1] = bruch[1]/ggtwert;
}
if (normieren==true) {
if (bruch[0] < 0 && bruch[1] < 0 || bruch[1] < 0) { // Vorzeichenbereinigung
bruch[0] = bruch[0]/(-1);
bruch[1] = bruch[1]/(-1);
}
if (bruch[1] == 0)
System.out.println("Fehler: 0-Division!");
else {
System.out.print(bruch[0]); // Zaehlerausgabe
if (bruch[0] != 0 && bruch[1] != 1) { //Ausgabe, falls Zaehler != 0 und Nenner != 1
System.out.print("/");
System.out.print(bruch[1]);
}
System.out.println(""); //Zeilenabschluss
}
}
return(bruch);
}
/* Funktion: ggT
Uebergabeparameter: a (int), b (int)
Rueckgabeparameter: a (int) (groesste Zahl)
Die beiden if - Konstrukte sind nötig, da diese Funktion nur den
ggT von zwei positiven Zahlen berechnet!
*/
public static int ggT (int a, int b){
if (a < 0) a = a/-1;
if (b < 0) b = b/-1;
while (a != b) {
if (a > b)
a = a - b;
else
b = b - a;
} // end while
return(a);
} //end ggT
}