/// <summary> /// Zjednodušit zlomek /// </summary> private static Fraction _CreateSimplify(int integral, int numerator, int denominator, bool negativeDenominatorToPositive, SimplifyIntegralMode integralMode, bool simplifyFraction) { // Negative denominator: prepare bool hasNegativeDenominator = (denominator < 0); if (hasNegativeDenominator) { // Uvnitř metody vždy pracuji s kladným jmenovatelem: numerator = -numerator; denominator = -denominator; } // Integral part if (denominator != 0) { switch (integralMode) { case SimplifyIntegralMode.ToIntegral: if (numerator >= denominator) { int addIntegral = (numerator / denominator); integral += addIntegral; numerator -= (addIntegral * denominator); } if (numerator <= -denominator) { int subIntegral = (-numerator / denominator); integral -= subIntegral; numerator += (subIntegral * denominator); } break; case SimplifyIntegralMode.ToNumerator: if (integral != 0) { int addNominator = integral * denominator; integral = 0; numerator += addNominator; } break; } } // Simplify Fraction part (Nominator and Denominator): if (simplifyFraction) { _SimplifyFraction(ref numerator, ref denominator); } // Negative denominator: undone if (hasNegativeDenominator && !negativeDenominatorToPositive) { // Pokud jsme měli negativní jmenovatel, ale není požadavek na jeho otočení na pozitivní => vrátím (dosud) pozitivní jmenovatel na záp**ný, a otočím i čitatel: numerator = -numerator; denominator = -denominator; } return(new Fraction(integral, numerator, denominator)); }
/// <summary> /// Zjednodušit zlomek /// </summary> private static Fraction _CreateSimplify(Fraction source, bool negativeDenominatorToPositive, SimplifyIntegralMode integralMode, bool simplifyFraction) { return(_CreateSimplify(source.Integral, source.Numerator, source.Denominator, negativeDenominatorToPositive, integralMode, simplifyFraction)); }