Основы программирования на C#


Операции над рациональными числами - часть 2


Обратите внимание на вычисление r12: здесь ощутимо видно преимущество операций, позволяющих записывать сложные выражения в простой форме. Результаты вычислений показаны на рис. 16.4.

Аналогичным образом определим остальные операции над рациональными числами:

public Rational Minus(Rational a) { int u,v; u = m*a.n - n*a.m; v= n*a.n; return( new Rational(u, v)); }//Minus public static Rational operator -(Rational r1, Rational r2) { return (r1.Minus(r2)); } public Rational Mult(Rational a) { int u,v; u = m*a.m; v= n*a.n; return( new Rational(u, v)); }//Mult public static Rational operator *(Rational r1, Rational r2) { return (r1.Mult(r2)); } public Rational Divide(Rational a) { int u,v; u = m*a.n; v= n*a.m; return( new Rational(u, v)); }//Divide public static Rational operator /(Rational r1, Rational r2) { return (r1.Divide(r2)); }

Вот тест, проверяющий работу этих операций:

public void TestOperRational() { Rational r1=new Rational(1,2), r2 = new Rational(1,3); Rational r3, r4, r5, r6 ; r3 = r1- r2; r4 = r1*r2; r5 = r1/r2; r6 = r3+r4*r5; r1.PrintRational("r1: (1,2)"); r2.PrintRational("r2: (1,3)"); r3.PrintRational("r3: (r1-r2)"); r4.PrintRational("r4: (r1*r2)"); r5.PrintRational("r5: (r1/r2)"); r6.PrintRational("r6: (r3+r4*r5)"); }

Результаты работы этого теста показаны на рис. 16.5. Обратите внимание: при перегрузке операций сохраняется общепринятый приоритет операций. Поэтому при вычислении выражения r3+r4*r5 вначале будет выполняться умножение рациональных чисел, а потом уже сложение.

Операции и выражения над рациональными числами

Рис. 16.5.  Операции и выражения над рациональными числами




Начало  Назад  Вперед