Пример #1
0
                public ElementaryTransformations GetSteppedForm()
                {
                    ElementaryTransformations newMatrix = CopyMatrix();

                    for (int i = 0; i < newMatrix.data.Lines; i++)
                    {
                        var keyElement = newMatrix.FindKeyElemnt(i);
                        if (keyElement.Item1 != -1 && keyElement.Item2 != -1)
                        {
                            if (i != keyElement.Item1)
                            {
                                newMatrix.SwapLines(i, keyElement.Item1);
                            }
                            if (newMatrix.data[i, keyElement.Item2] != 1)
                            {
                                newMatrix.MultiplyConst(i, 1 / newMatrix.data[i, keyElement.Item2]);
                            }

                            for (int k = i + 1; k < newMatrix.data.Lines; k++)
                            {
                                if (newMatrix.data[k, keyElement.Item2] != 0)
                                {
                                    newMatrix.Subtract(k, i, newMatrix.data[k, keyElement.Item2], 1);
                                }
                            }
                        }
                    }

                    newMatrix.DeleteZeroLines();

                    return(newMatrix);
                }
Пример #2
0
    private static void NewMatrix()
    {
        Console.WriteLine("\tНовая матрица: ");
        Console.WriteLine("\tДроби вводятся через '/'");

        int lines = 0, columns = 0;

        string[] dim;
        do
        {
            Console.Write("\tВведите размеры матрицы (3x4) or (3 4): ");
            dim = Console.ReadLine().Split(new string[] { " ", "x" }, StringSplitOptions.RemoveEmptyEntries);
        }while (dim.Length != 2 || !(int.TryParse(dim[0], out lines) && int.TryParse(dim[1], out columns) && lines > 0 && columns > 0));

        Rational[,] data = new Rational[lines, columns];

        for (int i = 0; i < lines; i++)
        {
            for (int j = 0; j < columns; j++)
            {
                string   str;
                Rational rational;
                do
                {
                    Console.Write("\t\tВведие число" + $" [{i}, {j}]: ");
                    str = Console.ReadLine();
                } while (!Rational.TryParse(str, out rational));

                data[i, j] = rational;
            }
            Console.WriteLine();
        }

        matrix = new ElementaryTransformations(new MatrixRational(data));
    }
Пример #3
0
    static void Main(string[] args)
    {
        while (true)
        {
            Console.Write("command ");
            command = Console.ReadLine().TrimStart(' ');

            if (command.StartsWith("show"))
            {
                Console.Write("\n" + matrix.ToString().Replace("\t", "\t\t"));
            }
            else if (command.StartsWith("stepedd"))
            {
                lastMatrix = CopyMatrix(matrix);
                matrix.SteppedForm();
            }
            else if (command.StartsWith("solve"))
            {
                lastMatrix = CopyMatrix(matrix);
                matrix.Solve();
            }
            else if (command.StartsWith("new"))
            {
                NewMatrix();
            }
            else if (command.StartsWith("subtract"))
            {
                Subtract();
            }
            else if (command.StartsWith("multiply"))
            {
                Multiply();
            }
            else if (command.StartsWith("swap"))
            {
                Swap();
            }
            else if (command.StartsWith("back"))
            {
                LastMatrix();
            }
            else if (command.StartsWith("exit"))
            {
                return;
            }
            else
            {
                UnknownCommand();
            }
        }
    }
Пример #4
0
    private static ElementaryTransformations CopyMatrix(ElementaryTransformations from)
    {
        Rational[,] newData = new Rational[from.data.Lines, from.data.Columns];

        for (int i = 0; i < from.data.Lines; i++)
        {
            for (int j = 0; j < from.data.Lines; j++)
            {
                newData[i, j] = from.data[i, j];
            }
        }

        return(new ElementaryTransformations(new MatrixRational(newData)));
    }
Пример #5
0
    private static void Swap()
    {
        lastMatrix = CopyMatrix(matrix);

        string[] lines = command.Substring("swap".Length).Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
        int      line1, line2;

        if (lines.Length == 2 && int.TryParse(lines[0], out line1) && int.TryParse(lines[1], out line2) &&
            line1 > 0 && line2 > 0 && line1 <= matrix.data.Lines && line2 <= matrix.data.Lines)
        {
            matrix.SwapLines(line1 - 1, line2 - 1);
        }
        else
        {
            Console.WriteLine("\tНе правильные параметры");
        }
    }
Пример #6
0
                public ElementaryTransformations GetSolve()
                {
                    ElementaryTransformations newMatrix = GetSteppedForm();

                    int currentCol = newMatrix.data.Lines - 1;

                    for (int i = currentCol; i > 0; i--)
                    {
                        for (int k = i - 1; k >= 0; k--)
                        {
                            newMatrix.Subtract(k, i, newMatrix.data[k, currentCol]);
                        }
                        currentCol--;
                    }

                    return(newMatrix);
                }
Пример #7
0
    private static void Multiply()
    {
        lastMatrix = CopyMatrix(matrix);

        string[] lines = command.Substring("multiply".Length).Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
        int      line;

        if (lines.Length == 2 && int.TryParse(lines[0], out line) && line > 0 && line <= matrix.data.Lines)
        {
            if (Rational.TryParse(lines[1], out Rational rational))
            {
                matrix.MultiplyConst(line - 1, rational);
            }
            else
            {
                Console.WriteLine("\tНе правильные параметры");
            }
        }
        else
        {
            Console.WriteLine("\tНе правильные параметры");
        }
    }
Пример #8
0
    private static void Subtract()
    {
        lastMatrix = CopyMatrix(matrix);

        string[] lines = command.Substring("subtract".Length).Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);

        int line1, line2;

        Rational[] constants = new Rational[2];
        constants[0] = 1;
        constants[1] = 1;

        if (lines.Length >= 2 && int.TryParse(lines[0], out line1) && int.TryParse(lines[1], out line2) &&
            line1 > 0 && line2 > 0 && line1 <= matrix.data.Lines && line2 <= matrix.data.Lines)
        {
            if (lines.Length > 2)
            {
                for (int i = 0; i < lines.Length - 2; i++)
                {
                    if (Rational.TryParse(lines[i + 2], out Rational constant))
                    {
                        constants[i] = constant;
                    }
                    else
                    {
                        Console.WriteLine("\tНе правильные параметры");
                    }
                }
            }

            matrix.Subtract(line1 - 1, line2 - 1, constants[0], constants[1]);
        }
        else
        {
            Console.WriteLine("\tНе правильные параметры");
        }
    }
Пример #9
0
 private static void LastMatrix()
 {
     Console.WriteLine("\tВосстановлено прошлое значение матрицы");
     matrix = CopyMatrix(lastMatrix);
 }