Реализовать приложение "Калькулятор для обыкновенных дробей" - C#
Формулировка задачи:
Реализовать приложение "Калькулятор для обыкновенных дробей".
Спроектировать и реализовать класс Обыкновенная дробь. С помощью данного класса можно выполнять арифметические действия над обыкновенными дробями. Использовать данный класс для создания приложения "калькулятора обыкновенных дробей", в котором должны быть доступны операции сложения, вычитания, умножения и деления для обыкновенных дробей, введенные пользователем. Результатом всех операций должна быть обыкновенная дробь. Например: 1/3 + 1/3 = 2/3
Решение задачи: «Реализовать приложение "Калькулятор для обыкновенных дробей"»
textual
Листинг программы
using System;
namespace ConsoleApplication171
{
class Program
{
static void Main(string[] args)
{
var f1 = new Fraction(3, 8);
var f2 = new Fraction(5, 6);
var f3 = f1 + f2;
Console.WriteLine("{0} + {1} = {2}", f1, f2, f3);
Console.ReadLine();
}
}
public struct Fraction
{
public int N;
public int D;
public Fraction(int numerator, int denominator)
{
N = numerator;
D = denominator;
}
public Fraction(int num) : this(num, 1)
{
}
public override string ToString()
{
return string.Format("{0}/{1}", N, D);
}
public static Fraction operator +(Fraction f1, Fraction f2)
{
return new Fraction(f1.N * f2.D + f2.N * f1.D, f1.D * f2.D).Normalization();
}
public static Fraction operator *(Fraction f1, Fraction f2)
{
return new Fraction(f1.N * f2.N, f1.D * f2.D).Normalization();
}
public static Fraction operator -(Fraction f1, Fraction f2)
{
return new Fraction(f1.N * f2.D - f2.N * f1.D, f1.D * f2.D).Normalization();
}
public static Fraction operator -(Fraction f1)
{
return new Fraction(-f1.N, f1.D).Normalization();
}
public static Fraction operator /(Fraction f1, Fraction f2)
{
return new Fraction(f1.N * f2.D, f1.D * f2.N).Normalization();
}
public Fraction Normalization()
{
var n = Math.Abs(N);
var d = Math.Abs(D);
var nod = NOD(n, d);
var sign = Math.Sign(N*D);
return new Fraction(sign * n / nod, d / nod);
}
static int NOD(int a, int b)
{
while (a > 0 && b > 0)
if (a > b)
a %= b;
else
b %= a;
return a + b;
}
}
}