using System; namespace TPClasses { class Rationnel { /*Exercice 1*/ public long num, den; /*Exercice 2*/ public String toString() { return "" + num + "/" + den; } public static Rationnel create(long num, long den) { Rationnel r = new Rationnel(); r.num = num; r.den = den; r.reduce(); return r; } public Rationnel copy() { return create (num, den); } public Rationnel opposite() { return create(-num, den); } public Rationnel inverse() { return create(den, num); } public void reduce() { long p = num, q = den; while(q != 0) { long r = p%q; p = q; q = r; } num /= p; den /= p; } public bool isPositive() { return num >= 0 && den >= 0 || num < 0 && den < 0; } public Rationnel add(Rationnel other) { return create(num*other.den + den*other.num, den*other.den); } public void addTo(Rationnel other) { num = num*other.den + den*other.num; den = den*other.den; } public Rationnel sub(Rationnel other) { return add(other.opposite()); } public Rationnel multiply(Rationnel other) { return create(num*other.num, den*other.den); } public Rationnel divide(Rationnel other) { return multiply(other.inverse()); } public bool equals(Rationnel other) { return num*other.den == den*other.num; } public int compareTo(Rationnel other) { if (equals(other)) return 0; Rationnel s = sub(other); if (s.isPositive()) return 1; else return -1; } /*********************************************/ public static void Main (string[] args) { /*Exercice 1*/ Rationnel unDemi = new Rationnel(); unDemi.num = 1; unDemi.den = 2; Rationnel quatreTiers = new Rationnel(); quatreTiers.num = 4; quatreTiers.den = 3; /*Exercice 2*/ Console.WriteLine("4/3 = " + quatreTiers.toString()); Console.WriteLine("5/2 = " + create(5, 2).toString()); Console.WriteLine("4/3 = " + quatreTiers.copy().toString()); Console.WriteLine("-4/3 = " + quatreTiers.opposite().toString()); Console.WriteLine("3/4 = " + quatreTiers.inverse().toString()); Rationnel quatreTiersBis = create(40, 30); quatreTiersBis.reduce(); Console.WriteLine("4/3 = " + quatreTiersBis.toString()); Console.WriteLine("4/3 is " + ((quatreTiersBis.isPositive())?"positive":"negative")); Console.WriteLine("-4/3 is " + ((quatreTiersBis.opposite().isPositive())?"positive":"negative")); Console.WriteLine("4/3 + 1/2 = " + quatreTiers.add(unDemi).toString()); quatreTiersBis.addTo(unDemi); Console.WriteLine("4/3 + 1/2 = " + quatreTiersBis.toString()); Console.WriteLine("4/3 - 1/2 = " + quatreTiers.sub(unDemi).toString()); Console.WriteLine("4/3 * 1/2 = " + quatreTiers.multiply(unDemi).toString()); Console.WriteLine("(4/3) / (1/2) = " + quatreTiers.divide(unDemi).toString()); Console.WriteLine("(4/3) == (8/4) = " + quatreTiers.equals(create(8, 4))); Console.WriteLine("(4/3) == (8/6) = " + quatreTiers.equals(create(8, 6))); Console.WriteLine("(4/3) > (8/4) = " + quatreTiers.compareTo(create(8, 4))); Console.WriteLine("(8/4) > (4/3) = " + create(8, 4).compareTo(quatreTiers)); Console.WriteLine("(4/3) == (8/6) = " + quatreTiers.compareTo(create(8, 6))); } } }