using System; using System.Collections.Generic; using System.Text; namespace cw14p1 { class Ulamek { private int mLicznik; private int mMianownik; public Ulamek() : base() { Licznik = 0; Mianownik = 1; } public Ulamek(int nowyLicznik, int nowyMianownik) : base() { Licznik = nowyLicznik; Mianownik = nowyMianownik; } public Ulamek(Ulamek u) : base() { Licznik = u.Licznik; Mianownik = u.Mianownik; } public int Licznik { get { return mLicznik; } set { mLicznik = value; } } public int Mianownik { get { return mMianownik; } set { if (value <= 0) throw new Exception("Nieprawidlowy mianownik"); else mMianownik = value; } } public double Dziesietny { get { return ((double)mLicznik / (double)mMianownik); } } public override string ToString() { return Licznik.ToString() + " / " + Mianownik.ToString(); } private int NWD(int u, int v) { int k = 0; if (u == 0) return v; if (v == 0) return u; u = Math.Abs(u); v = Math.Abs(v); while (u % 2 == 0 && v % 2 == 0) { u /= 2; v /= 2; k++; } do { if (u % 2 == 0) u /= 2; else if (v % 2 == 0) v /= 2; else if (u >= v) u = (u - v) / 2; else v = (v - u) / 2; } while (u > 0); return v << k; } public void Normalizuj() { int nwd = NWD(Licznik, Mianownik); Licznik = Licznik / nwd; Mianownik = Mianownik / nwd; } public static Ulamek operator +(Ulamek lewy, Ulamek prawy) { int licz, mian; licz = lewy.Licznik * prawy.Mianownik + prawy.Licznik * lewy.Mianownik; mian = lewy.Mianownik * prawy.Mianownik; Ulamek wynik = new Ulamek(licz, mian); wynik.Normalizuj(); return wynik; } public static Ulamek operator -(Ulamek lewy, Ulamek prawy) { int licz, mian; licz = lewy.Licznik * prawy.Mianownik - prawy.Licznik * lewy.Mianownik; mian = lewy.Mianownik * prawy.Mianownik; Ulamek wynik = new Ulamek(licz, mian); wynik.Normalizuj(); return wynik; } static void Main(string[] args) { Ulamek u1, u2, u3; u1 = new Ulamek(); u2 = new Ulamek(3, 4); u3 = new Ulamek(2, 3); System.Console.WriteLine("u1 = {0}, dziesietnie = {1}", u1, u1.Dziesietny); System.Console.WriteLine("u2 = {0}, dziesietnie = {1}", u2, u2.Dziesietny); System.Console.WriteLine("u3 = {0}, dziesietnie = {1}", u3, u3.Dziesietny); System.Console.WriteLine("{0} + {1} = {2}", u2, 2, u2 + 2); System.Console.WriteLine("{0} - {1} = {2}", u2, 1, u2 - 1); System.Console.WriteLine("{0} + {1} = {2}", 1, u1, 1 + u1); } } }