public void ParseSingleVariable() { var input = "x"; var result = new KeyCountCollection<string>(); result.Add(input); Assert.IsTrue(result.Any()); Assert.AreEqual(result.First().Value, 1); }
/// <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); }
/// <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(); }