/* rational numbers in C#, with C# specialties */ using System; class rational { private int num; private int dem; private int gcd(int a, int b) {if (a==0) return b; else return gcd(b%a,a);} // C# attributes - automates accessor/modifier operations: public int Numerator { get { return num; } // accessor set { num = value; // value is keyword in C# } // modifier } // Numerator property public int Denominator { get { return dem; } // accessor set { if (value !=0) dem = value; // value is keyword in C# } // modifier } // Denominator property public rational(int n, int d) // constructor { int g; num = n; if (d!=0) dem = d; else dem = 1; g = gcd(num,dem); num = num/g; dem = dem/g; } public void invert() { if (num==0) return; int temp; temp = num; num = dem; dem = temp; } public bool equals(rational other) { return num*other.dem == dem*other.num; } public void multx(rational b) { num = num*b.num; dem = dem*b.dem; } public rational mult(rational b) { return new rational(num*b.num, dem*b.dem); } public override string ToString() { return (num + "/" + dem); } } // class rational public class rats { public static void Main(string[] aaa) { rational a, b; a = new rational(1,2); b = new rational(2,4); Console.WriteLine(a.equals(b)); a.multx(b); b = a.mult(b); Console.WriteLine(a); Console.WriteLine(b); a.Numerator = 3; // not same as a.num = 3!!! a.Denominator = 0; Console.WriteLine(a.Numerator); Console.WriteLine(a.Denominator); } // Main } // rats