Алгебра – Скорочення дробів

2075 / Математика / Алгебра / Скорочення дробів

 

JavaScript

function reduce(numerator, denominator)
{
  var a = numerator; 
  var b = denominator; 
  var c; 

  while (b) 
  { 
    c = a % b; 
    a = b; 
    b = c; 
  } 
  return [numerator / a, denominator / a]; 
}


C#

public static void Main()
{
  Calc.Reduce(2,4);
}



public static class Calc
{
  public static int gcd(int answerNumerator, int answerDenominator)
  {
    int x = Math.Abs(answerNumerator);
    int y = Math.Abs(answerDenominator);
    int m;
    if (x > y)
    {
      m = y;  }  
    else
    {
      m = x;
    }
    for (int i = m; i >= 1; i--)
    {
      if (x % i == 0 && y % i == 0)
      {
        return i;
      }
    }
    return 1;
  }

  public static void Reduce(int answerNumerator, int answerDenominator)
  {
    WriteFraction(answerNumerator, answerDenominator);

    try
    {
      int gcdNum = gcd(answerNumerator, answerDenominator);

      if (gcdNum != 0)
      {
        answerNumerator = answerNumerator / gcdNum;
        answerDenominator = answerDenominator / gcdNum;
      }

      if (answerDenominator < 0)
      {
        answerDenominator = answerDenominator * -1;
        answerNumerator = answerNumerator * -1;
      }
    }
    catch (Exception exp)
    {
      throw new InvalidOperationException("Cannot reduce Fraction: " + exp.Message);
    }
    WriteFraction(answerNumerator, answerDenominator);
  }

  public static void WriteFraction(int answerNumerator, int answerDenominator)
  {
    Console.WriteLine(answerNumerator + "/" + answerDenominator);
  }
}