Пример #1
0
        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("");
            }
        }
Пример #2
0
        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));
        }