Comment pouvez-vous append deux fractions en c # comme ceci:
11/6 + 3/4 = 31/12
et ensuite, comment simplifieriez-vous la réponse?
Alors que l’ennui frappe un vendredi soir, il en résulte une classe de fractions avec des opérateurs surchargés. La sobriété du design ne peut être garantie.
Ça marche comme ça …
Fraction left = "1/2"; Fraction right = "3/8"; Fraction result1 = ((left + right) * left / right).Simplify(); Console.WriteLine(result1); Fraction test2 = "12/32"; test2 = test2.Simplify(); Console.WriteLine(test2);
Mise en œuvre quelque chose comme ci-dessous …
public struct Fraction { public int Numerator { get; set; } public int Denominator { get; set; } public Fraction(int numerator, int denominator) : this() { Numerator = numerator; Denominator = denominator; } public Fraction Simplify() { int gcd = GCD(); return new Fraction(Numerator / gcd, Denominator / gcd); } public Fraction InTermsOf(Fraction other) { return Denominator == other.Denominator ? this : new Fraction(Numerator * other.Denominator, Denominator * other.Denominator); } public int GCD() { int a = Numerator; int b = Denominator; while (b != 0) { int t = b; b = a % b; a = t; } return a; } public Fraction Reciprocal() { return new Fraction(Denominator, Numerator); } public static Fraction operator +(Fraction left, Fraction right) { var left2 = left.InTermsOf(right); var right2 = right.InTermsOf(left); return new Fraction(left2.Numerator + right2.Numerator, left2.Denominator); } public static Fraction operator -(Fraction left, Fraction right) { var left2 = left.InTermsOf(right); var right2 = right.InTermsOf(left); return new Fraction(left2.Numerator - right2.Numerator, left2.Denominator); } public static Fraction operator *(Fraction left, Fraction right) { return new Fraction(left.Numerator * right.Numerator, left.Denominator * right.Denominator); } public static Fraction operator /(Fraction left, Fraction right) { return new Fraction(left.Numerator * right.Denominator, left.Denominator * right.Numerator); } public static implicit operator Fraction(ssortingng value) { var tokens = value.Split('/'); int num; int den; if (tokens.Length == 1 && int.TryParse(tokens[0], out num)) { return new Fraction(num, 1); } else if (tokens.Length == 2 && int.TryParse(tokens[0], out num) && int.TryParse(tokens[1], out den)) { return new Fraction(num, den); } throw new Exception("Invalid fraction format"); } public override ssortingng ToSsortingng() { return ssortingng.Format("{0}/{1}", Numerator, Denominator); } }
.Net n’a pas de support intégré (que je sache) pour Rational Numbers , mais il existe au moins une bibliothèque existante.
Votre solution consistera finalement à stocker le numérateur et le dénominateur (probablement dans une classe personnalisée que vous créez), à calculer de manière arithmétique par rapport à d’autres paires numérateur / dénominateur (éventuellement en implémentant des opérateurs surchargés sur votre classe), et à appliquer un algorithme de simplification de fraction.
Voici quelques ressources:
Implémentations existantes
Méthodes de réduction des fractions
Trouvez d’abord l’écran LCD puis procédez comme suit
num1 *= lcd / denum1; num2 *= lcd / denum2; sumNum = num1 + num2;
Je n’ai jamais utilisé c # mais je peux vous expliquer comment le faire.