public void ParseSingleVariable()
 {
     var input = "x";
                 var result = new KeyCountCollection<string>();
                 result.Add(input);
                 Assert.IsTrue(result.Any());
                 Assert.AreEqual(result.First().Value, 1);
 }
예제 #2
0
 /// <summary>
 /// Преобразование входного уравнения к нормальному виду
 /// </summary>
 /// <param name="input"></param>
 /// <returns></returns>
 public string NormalizeExpression(string input)
 {
     var sides = PrepareStringForNormalizing(input).Split('=');
         var result = new KeyCountCollection<KeyCountCollection<string>>();
         ParseSummand(sides[0].Split('+'), result, false);
         ParseSummand(sides[1].Split('+'), result, true);
         return _expressionFormatter.GetExpression(result);
 }
 public void ParseVariablesWithRepeatlyVariables()
 {
     var input = "x*x*y";
                 var result = new KeyCountCollection<string>();
                 var parser = new VariablesParser();
                 var multipliers = parser.GetVariables(input);
                 result.AddRange(multipliers);
                 Assert.IsTrue(result.Count() == 2);
                 Assert.AreEqual(result.First(x => x.Key == "x").Value, 2);
 }
예제 #4
0
        /// <summary>
        /// Обработка слогаемых
        /// </summary>
        /// <param name="summands">Слогаемые</param>
        /// <param name="result">Выходная коллекция</param>
        /// <param name="inverse">Инвертировать ли слогаемые?</param>
        private void ParseSummand(IEnumerable<string> summands, KeyCountCollection<KeyCountCollection<string>> result, bool inverse)
        {
            foreach (var summand in summands)
                {
                    var coefficient = _coefficientParser.GetСoefficient(summand);
                    if (inverse)
                    {
                        coefficient *= -1;
                    }

                    var variableCollection = new KeyCountCollection<string>();
                    variableCollection.AddRange(_variablesParser.GetVariables(summand));
                    result.Add(variableCollection, coefficient);
                }
        }
        public string GetExpression(KeyCountCollection<KeyCountCollection<string>> summands)
        {
            var resultBuilder = new StringBuilder();
            foreach (var summand in summands)
            {
                resultBuilder
                    .Append(GetSign(summand))
                    .Append(summand.Value)
                    .Append("*");
                foreach (var variable in summand.Key)
                {
                    resultBuilder.Append(variable.Key);
                    FormatExponenta(variable, resultBuilder);
                    resultBuilder.Append("*");
                }
                resultBuilder.Length--;
            }

            TrimFirstPlus(resultBuilder);
            resultBuilder.Append("= 0");
            return resultBuilder.ToString();
        }