Beispiel #1
0
        /// <summary>
        /// Check if the two polynomial terms have the same type of variables (eg: 2xy vs 5yx)
        /// </summary>
        private static bool CompareVariables(PolynomialNode <double> term1, PolynomialNode <double> term2)
        {
            if (term2.Variables.Count == term1.Variables.Count)
            {
                bool varsMatch = true;
                foreach (var kvp in term2.Variables)
                {
                    varsMatch = varsMatch && term1.Variables.ContainsKey(kvp.Key) && term1.Variables[kvp.Key] == kvp.Value;
                }

                return(varsMatch);
            }
            else
            {
                return(false);
            }
        }
Beispiel #2
0
        public static string BuildPolynomialTerm(PolynomialNode <double> node)
        {
            var variables   = node.Variables.Select(kvp => kvp.Key + ((kvp.Value == 1) ? "" : "^" + kvp.Value)).ToArray();
            var arr         = string.Join("", variables);
            var sign        = node.Coefficient >= 0 ? 1 : -1;
            var coefficient = Math.Abs(node.Coefficient) == 1 ? "" : Math.Abs(node.Coefficient).ToString();

            var term = "";

            if (sign > 0)
            {
                term = $"+{coefficient}{arr}";
            }
            else
            {
                term = $"-{coefficient}{arr}";
            }

            return(term);
        }
Beispiel #3
0
        /// <summary>
        /// Creates list of PolynomialNode (expression) and adds it to stack.
        /// </summary>
        /// <param name="polynomialTerm"></param>
        /// <param name="expressionStack"></param>
        private void AddToExpressionStack(string polynomialTerm, Stack <List <PolynomialNode <double> > > expressionStack)
        {
            var polyNode = new PolynomialNode <double>()
            {
            };

            polyNode.Coefficient = GetCoefficient(polynomialTerm);

            // case: AX^mY^n
            var i = 0;

            while (i < polynomialTerm.Length)
            {
                var c = polynomialTerm[i];
                if (char.IsLetter(c))
                {
                    // case: x^k
                    if ((i + 1) < polynomialTerm.Length && polynomialTerm[i + 1] == '^' && (i + 2) < polynomialTerm.Length && char.IsDigit(polynomialTerm[i + 2]))
                    {
                        var exponent = int.Parse(polynomialTerm[i + 2].ToString());
                        polyNode.Variables.Add(c, exponent);
                        i += 3;
                        continue;
                    }
                    else
                    {
                        // case: x
                        polyNode.Variables.Add(c, 1);
                        i++;
                        continue;
                    }
                }
                i++;
            }

            var list = new List <PolynomialNode <double> >();

            list.Add(polyNode);
            expressionStack.Push(list);
        }