diff --git a/apps/calculation/additional_outputs/second_degree_list_controller.cpp b/apps/calculation/additional_outputs/second_degree_list_controller.cpp index 13866e430..2533c12f9 100644 --- a/apps/calculation/additional_outputs/second_degree_list_controller.cpp +++ b/apps/calculation/additional_outputs/second_degree_list_controller.cpp @@ -113,7 +113,7 @@ void SecondDegreeListController::setExpression(Poincare::Expression e) { xMinusAlphaPowerTwoWithFactor = xMinusAlphaPowerTwo; break; case MultiplicationTypeForA::Minus: - xMinusAlphaPowerTwoWithFactor = Multiplication::Builder(a.clone(), xMinusAlphaPowerTwo); + xMinusAlphaPowerTwoWithFactor = Opposite::Builder(xMinusAlphaPowerTwo); break; case MultiplicationTypeForA::Parenthesis: xMinusAlphaPowerTwoWithFactor = Multiplication::Builder(Parenthesis::Builder(a.clone()), xMinusAlphaPowerTwo); @@ -170,15 +170,14 @@ void SecondDegreeListController::setExpression(Poincare::Expression e) { if (x0Opposite.isUninitialized()) { PoincareHelpers::Simplify(&x0, context, ExpressionNode::ReductionTarget::User); if (x0.type() == ExpressionNode::Type::Addition || x0.type() == ExpressionNode::Type::Subtraction) { - x0 = Parenthesis::Builder(x0.clone()); + firstFactor = Subtraction::Builder(Symbol::Builder("x", strlen("x")), Parenthesis::Builder(x0)); + } + else { + firstFactor = Subtraction::Builder(Symbol::Builder("x", strlen("x")), x0); } - firstFactor = Subtraction::Builder(Symbol::Builder("x", strlen("x")), x0); } else { PoincareHelpers::Simplify(&x0Opposite, context, ExpressionNode::ReductionTarget::User); - if (x0Opposite.type() == ExpressionNode::Type::Addition || x0Opposite.type() == ExpressionNode::Type::Subtraction) { - x0Opposite = Parenthesis::Builder(x0Opposite.clone()); - } firstFactor = Addition::Builder(Symbol::Builder("x", strlen("x")), x0Opposite); } if (x0.type() == ExpressionNode::Type::Opposite) { @@ -188,10 +187,12 @@ void SecondDegreeListController::setExpression(Poincare::Expression e) { Expression x1Opposite = getOppositeIfExists(x1, &reductionContext); if (x1Opposite.isUninitialized()) { PoincareHelpers::Simplify(&x1, context, ExpressionNode::ReductionTarget::User); - if (x1.type() == ExpressionNode::Type::Addition || x1.type() == ExpressionNode::Type::Subtraction) { - x1 = Parenthesis::Builder(x1.clone()); + if (x0.type() == ExpressionNode::Type::Addition || x1.type() == ExpressionNode::Type::Subtraction) { + secondFactor = Subtraction::Builder(Symbol::Builder("x", strlen("x")), Parenthesis::Builder(x1)); + } + else { + secondFactor = Subtraction::Builder(Symbol::Builder("x", strlen("x")), x1); } - secondFactor = Subtraction::Builder(Symbol::Builder("x", strlen("x")), x1); } else { PoincareHelpers::Simplify(&x1Opposite, context, ExpressionNode::ReductionTarget::User); @@ -208,7 +209,7 @@ void SecondDegreeListController::setExpression(Poincare::Expression e) { factorized = solutionProduct; break; case MultiplicationTypeForA::Minus: - factorized = Multiplication::Builder(a.clone(), solutionProduct); + factorized = Opposite::Builder(solutionProduct); break; case MultiplicationTypeForA::Parenthesis: factorized = Multiplication::Builder(Parenthesis::Builder(a.clone()), solutionProduct); @@ -227,7 +228,12 @@ void SecondDegreeListController::setExpression(Poincare::Expression e) { if (x0Opposite.isUninitialized()) { PoincareHelpers::Simplify(&x0, context, ExpressionNode::ReductionTarget::User); - factor = Subtraction::Builder(Symbol::Builder("x", strlen("x")), x0); + if (x0.type() == ExpressionNode::Type::Addition || x1.type() == ExpressionNode::Type::Subtraction) { + factor = Subtraction::Builder(Symbol::Builder("x", strlen("x")), Parenthesis::Builder(x0)); + } + else { + factor = Subtraction::Builder(Symbol::Builder("x", strlen("x")), x0); + } } else { PoincareHelpers::Simplify(&x0Opposite, context, ExpressionNode::ReductionTarget::User); @@ -241,7 +247,7 @@ void SecondDegreeListController::setExpression(Poincare::Expression e) { factorized = solutionProduct; break; case MultiplicationTypeForA::Minus: - factorized = Multiplication::Builder(a.clone(), solutionProduct); + factorized = Opposite::Builder(solutionProduct); break; case MultiplicationTypeForA::Parenthesis: factorized = Multiplication::Builder(Parenthesis::Builder(a.clone()), solutionProduct);