コード例 #1
0
ファイル: Fraction.cs プロジェクト: john-guo/hodgepodge
        public static Fraction operator /(Fraction f1, Fraction f2)
        {
            if (f1.IsNaN || f2.IsNaN)
                return NaN;

            Fraction f = new Fraction(
                (f2.Numerator < 0 ? -1 : 1) * f1.Numerator * f2.Denominator,
                (f2.Numerator < 0 ? -1 : 1) * f1.Denominator * f2.Numerator);

            f.reduce();

            return f;
        }
コード例 #2
0
ファイル: Calculate24.cs プロジェクト: john-guo/hodgepodge
 public static FractionExpression Constant(Fraction f)
 {
     var e = new FractionExpression();
     e.constant = f;
     return e;
 }
コード例 #3
0
ファイル: Fraction.cs プロジェクト: john-guo/hodgepodge
        public bool Equals(Fraction f)
        {
            if (IsNaN && f.IsNaN)
                return true;

            if (IsNaN || f.IsNaN)
                return false;

            if (Numerator == 0 && f.Numerator == 0)
                return true;

            this.reduce();
            f.reduce();

            return Numerator == f.Numerator && Denominator == f.Denominator;
        }
コード例 #4
0
ファイル: Calculate24.cs プロジェクト: john-guo/hodgepodge
        private void calculate(bool calAll)
        {
            _result = new List<Tuple<int[], OpFlag[], int[]>>();
            Fraction[] tempResult = new Fraction[CalculateCount - 1];
            List<int> effectlist = new List<int>();

            foreach (var numbers in _permNumbers)
            {
                var arrayNumber = numbers.ToArray();

                foreach (var ops in _ops)
                {
                    var arrayOp = ops.ToArray();

                    foreach (var precendences in _precedenceOp)
                    {
                        for (int i = 0; i < tempResult.Length; ++i)
                        {
                            tempResult[i] = Fraction.NaN;
                        }

                        effectlist.Clear();
                        var f = Fraction.NaN;

                        foreach (var p in precendences)
                        {
                            Fraction f1, f2;
                            int left, right;

                            if (p > 0)
                                left = p - 1;
                            else
                                left = p;
                            if (p + 1 < tempResult.Length)
                                right = p + 1;
                            else
                                right = p;

                            if (!tempResult[left].IsNaN)
                            {
                                f1 = tempResult[left];
                                effectlist.Add(left);
                            }
                            else
                                f1 = _numbers[arrayNumber[p]];

                            if (!tempResult[right].IsNaN)
                            {
                                f2 = tempResult[right];
                                effectlist.Add(right);
                            }
                            else
                                f2 = _numbers[arrayNumber[p + 1]];

                            f = tempResult[p] = _calculator[arrayOp[p]](f1, f2);

                            if (f.IsNaN)
                                break;

                            foreach (var ei in effectlist)
                            {
                                tempResult[ei] = f;
                            }
                        }

                        if (f.IsInteger && f == CalculateResult)
                        {
                            var equ = precendences.ToArray();
                            _result.Add(new Tuple<int[], OpFlag[], int[]>(
                                arrayNumber,
                                arrayOp,
                                equ));

                            //if (!_result.Any(l =>
                            //    l.Item1.SequenceEqual(arrayNumber)
                            //    && l.Item2.SequenceEqual(arrayOp)
                            //    && l.Item3.SequenceEqual(equ)))
                            //{
                            //    _result.Add(new Tuple<int[], OpFlag[], int[]>(
                            //        arrayNumber,
                            //        arrayOp,
                            //        equ));
                            //}

                            if (!calAll)
                                return;
                        }

                    }
                }
            }
        }