예제 #1
0
        /// <summary>
        /// The function reduces(simplifies) a Fraction object by dividing both its numerator 
        /// and denominator by their GCD
        /// </summary>
        public static void ReduceFraction(Fraction frac)
        {
            try
            {
                if (frac.Numerator == 0)
                {
                    frac.Denominator = 1;
                    return;
                }

                long iGCD = GCD(frac.Numerator, frac.Denominator);
                frac.Numerator /= iGCD;
                frac.Denominator /= iGCD;

                if (frac.Denominator < 0)	// if -ve sign in denominator
                {
                    //pass -ve sign to numerator
                    frac.Numerator *= -1;
                    frac.Denominator *= -1;
                }
            } // end try
            catch (Exception exp)
            {
                throw new FractionException("Cannot reduce Fraction: " + exp.Message);
            }
        }
예제 #2
0
 private void ConvertirFraciones(char x)
 {
     string val;
     int numerador;
     int denominador;
     int entero;
     int residuo;
     string[] arrfrac;
     string mod;
     switch (x)
     {
         case 'e':
             {
                 for (int i = 0; i < gridview_entradas.RowCount ; i++)
                 {
                     val = gridview_entradas.Rows[i].Cells[3].Value.ToString();
                     frac = new Fraction(val);
                     //gridview_inventario.Rows[i].Cells[13].Value = frac.ToString();
                     arrfrac = frac.ToString().Split('/');
                     if (arrfrac.Length != 1)
                     {
                         numerador = int.Parse(arrfrac[0]);
                         denominador = int.Parse(arrfrac[1]);
                         entero = numerador / denominador;
                         residuo = numerador % denominador;
                         if (entero != 0)
                         {
                             mod = entero + " " + residuo + "/" + denominador;
                             gridview_entradas.Rows[i].Cells[3].Value = mod;
                         }
                         else
                         {
                             mod = numerador + "/" + denominador;
                             gridview_entradas.Rows[i].Cells[3].Value = mod;
                         }
                     }
                     else
                     {
                         gridview_entradas.Rows[i].Cells[3].Value = frac.ToString(); ;
                     }
                 }
                 break;
             }
         case 's':
             {
                 for (int i = 0; i < gridview_salidas.RowCount ; i++)
                 {
                     val = gridview_salidas.Rows[i].Cells[3].Value.ToString();
                     frac = new Fraction(val);
                     //gridview_inventario.Rows[i].Cells[13].Value = frac.ToString();
                     arrfrac = frac.ToString().Split('/');
                     if (arrfrac.Length != 1)
                     {
                         numerador = int.Parse(arrfrac[0]);
                         denominador = int.Parse(arrfrac[1]);
                         entero = numerador / denominador;
                         residuo = numerador % denominador;
                         if (entero != 0)
                         {
                             mod = entero + " " + residuo + "/" + denominador;
                             gridview_salidas.Rows[i].Cells[3].Value = mod;
                         }
                         else
                         {
                             mod = numerador + "/" + denominador;
                             gridview_salidas.Rows[i].Cells[3].Value = mod;
                         }
                     }
                     else
                     {
                         gridview_salidas.Rows[i].Cells[3].Value = frac.ToString(); ;
                     }
                 }
                 break;
             }
     }   
 }
예제 #3
0
 private static Fraction Multiply(Fraction frac1, Fraction frac2)
 {
     try
     {
         checked
         {
             long iNumerator = frac1.Numerator * frac2.Numerator;
             long iDenominator = frac1.Denominator * frac2.Denominator;
             return (new Fraction(iNumerator, iDenominator));
         }
     }
     catch (OverflowException)
     {
         throw new FractionException("Overflow occurred while performing arithemetic operation");
     }
     catch (Exception)
     {
         throw new FractionException("An error occurred while performing arithemetic operation");
     }
 }
예제 #4
0
        /// <summary>
        /// internal function for negation
        /// </summary>
        private static Fraction Negate(Fraction frac1)
        {
            long iNumerator = -frac1.Numerator;
            long iDenominator = frac1.Denominator;
            return (new Fraction(iNumerator, iDenominator));

        }
예제 #5
0
        /// <summary>
        /// The function returns the inverse of a Fraction object
        /// </summary>
        public static Fraction Inverse(Fraction frac1)
        {
            if (frac1.Numerator == 0)
                throw new FractionException("Operation not possible (Denominator cannot be assigned a ZERO Value)");

            long iNumerator = frac1.Denominator;
            long iDenominator = frac1.Numerator;
            return (new Fraction(iNumerator, iDenominator));
        }
예제 #6
0
 /// <summary>
 /// The function replicates current Fraction object
 /// </summary>
 public Fraction Duplicate()
 {
     Fraction frac = new Fraction();
     frac.Numerator = Numerator;
     frac.Denominator = Denominator;
     return frac;
 }
예제 #7
0
 /// <summary>
 /// The function takes a floating point number as an argument 
 /// and returns its corresponding reduced fraction
 /// </summary>
 public static Fraction ToFraction(double dValue)
 {
     try
     {
         checked
         {
             Fraction frac;
             if (dValue % 1 == 0)	// if whole number
             {
                 frac = new Fraction((long)dValue);
             }
             else
             {
                 double dTemp = dValue;
                 long iMultiple = 1;
                 string strTemp = dValue.ToString();
                 while (strTemp.IndexOf("E") > 0)	// if in the form like 12E-9
                 {
                     dTemp *= 10;
                     iMultiple *= 10;
                     strTemp = dTemp.ToString();
                 }
                 int i = 0;
                 while (strTemp[i] != '.')
                     i++;
                 int iDigitsAfterDecimal = strTemp.Length - i - 1;
                 while (iDigitsAfterDecimal > 0)
                 {
                     dTemp *= 10;
                     iMultiple *= 10;
                     iDigitsAfterDecimal--;
                 }
                 frac = new Fraction((int)Math.Round(dTemp), iMultiple);
             }
             return frac;
         }
     }
     catch (OverflowException)
     {
         throw new FractionException("Conversion not possible due to overflow");
     }
     catch (Exception)
     {
         throw new FractionException("Conversion not possible");
     }
 }