class Frazione { public Frazione( int num ) { numeratore = num ; } public Frazione( int num, int denum ) { assert denum != 0 ; num = num * segno( denum ); denum = denum * segno( denum ); int mCD = mcd( denum, segno( num ) * num ); numeratore = num / mCD ; denominatore = denum / mCD; } private static int segno( int n ) { return ( n > 0 ) ? 1 : ( n == 0 ) ? 0 : -1 ; } public static int mcd( int n, int m ) { assert n > 0 && m >= 0; while ( m != 0 ) { // quando m = 0, il mcd sara` n int k = m; m = n % m; // calcolo del resto della divisione n = k; } return n; } public void cambiaSegno( ) { // invertiti di segno numeratore = - numeratore ; } public Frazione opp( ) { // inverso additivo return new Frazione( - numeratore, denominatore ) ; } public static Frazione opp( Frazione f ) { // inverso additivo, statico return new Frazione( - f.sopra(), f.sotto() ) ; } public Frazione inv( ) { // inverso moltiplicativo assert numeratore != 0; return new Frazione( denominatore, numeratore ) ; } public Frazione per( Frazione fa ) { return new Frazione( numeratore * fa.numeratore, denominatore * fa.denominatore ); } public Frazione piu( Frazione ad ) { return new Frazione( numeratore * ad.denominatore + ad.numeratore * denominatore, denominatore * ad.denominatore ); } public Frazione meno( Frazione ad ) { return ( piu( ad.opp() ) ); } public boolean equals( Frazione f ) { return numeratore == f.numeratore && denominatore == f.denominatore; } public String toString( ) { if ( denominatore == 1 ) return "" + numeratore; return numeratore + "/" + denominatore; } public int sopra( ) { return numeratore ; } public int sotto( ) { return denominatore ; } private int numeratore, denominatore = 1; public static void main( String[] argg ){ Frazione prima, seconda; System.out.println( "Le due frazioni sono: " + (prima = new Frazione( Integer.parseInt(argg[0]), Integer.parseInt(argg[1]))).toString() + ", " + (seconda = new Frazione( Integer.parseInt(argg[2]), Integer.parseInt(argg[3]))).toString() ); System.out.print( "Confronto fra le due frazioni: "); System.out.println( prima.equals( seconda )); prima.cambiaSegno(); System.out.println( "Invertendo la prima frazione l'ho tramutata in: " + prima.toString() ); System.out.println( "Sommando le due frazioni ottengo: " + prima.piu( seconda ) ); System.out.println( "Moltiplicando le due frazioni ottengo: " + prima.per( seconda ) ); System.out.println( "Sottraendo le due frazioni ottengo: " + prima.meno( seconda ) ); } }