private static string _ResolveMicroExpression(string matrix1, string _operator, string matrix2) { var processedMatrix1 = ProcessMatrix(matrix1); var processedMatrix2 = ProcessMatrix(matrix2); switch (_operator) { case "+": var validAdd = MatrixOperationValidator.ValidateSum(processedMatrix1, processedMatrix2); Console.Write($" | {matrix1} + {matrix2}"); TextProc.WriteColor(validAdd ? " | (matrix addition) OK\n" : " <- can not add this matrices", ConsoleColor.Green); if (!validAdd) { return("error (matrix addition)"); } return(_MatrixToString(_MatrixAddition(processedMatrix1, processedMatrix2))); case "-": var validSub = MatrixOperationValidator.ValidateSum(processedMatrix1, processedMatrix2); Console.Write($" | {matrix1} - {matrix2}"); TextProc.WriteColor(validSub ? " | (matrix subtraction) OK\n" : " <- can not subtract this matrices", ConsoleColor.Green); if (!validSub) { return("error (matrix subtraction)"); } return(_MatrixToString(_MatrixSubtraction(processedMatrix1, processedMatrix2))); case "*": var validMul = MatrixOperationValidator.ValidateSum(processedMatrix1, processedMatrix2); Console.Write($" | {matrix1} * {matrix2}"); TextProc.WriteColor(validMul ? " | (matrix multiplication) OK\n" : " <- can not multiple this matrices", ConsoleColor.Green); if (!validMul) { return("error (matrix multiplication)"); } return(_MatrixToString(_MatrixMultiplication(processedMatrix1, processedMatrix2))); default: return(""); } }
public static string ResolveExpression(List <string> expression) { var openingBracket = BracketsProcessor.GetDeepestOpeningBracketsIndex(expression); while (openingBracket != -1) { var closingBracket = BracketsProcessor.GetDeepestClosingBracketsIndex(expression, openingBracket); var bracketsInLineExpression = BracketsProcessor.GetBracketsExpression(expression, openingBracket, closingBracket); var matrix = ""; if (closingBracket - openingBracket == 3) { matrix = _MatrixToString(_MatrixPowMinusOne(ProcessMatrix(expression[openingBracket + 2]))); } else { matrix = _ResolveInLineExpression(bracketsInLineExpression); } if (openingBracket - 1 >= 0 && expression[openingBracket - 1] == "I") { var processedMatrix = ProcessMatrix(matrix); if (!MatrixOperationValidator.ValidateInversion(processedMatrix)) { return("error (matrix inversion)"); } matrix = _InvertMatrix(processedMatrix); openingBracket--; } expression.RemoveRange( openingBracket, closingBracket - openingBracket + 1 ); expression.Insert(openingBracket, matrix); openingBracket = BracketsProcessor.GetDeepestOpeningBracketsIndex(expression); } return(_ResolveInLineExpression(expression)); }