public quadMatrix DeepCopy()//создает полную копию матрицы
        {
            quadMatrix clone = (quadMatrix)this.MemberwiseClone();

            clone.Matrix = this.Matrix;
            return(clone);
        }
        public static quadMatrix Det(quadMatrix A)//опеределитель матрицы 3 на 3(простите я не знаю как определять для 4на4 и 5на5)
        {
            quadMatrix result = new quadMatrix(3, 0, 10);

            result.det = ((A.Matrix[0, 0] * A.Matrix[1, 1] * A.Matrix[2, 2]) + (A.Matrix[0, 1] * A.Matrix[1, 2] * A.Matrix[2, 0]) + (A.Matrix[0, 2] * A.Matrix[1, 0] * A.Matrix[2, 1]))
                         - (A.Matrix[0, 2] * A.Matrix[1, 1] * A.Matrix[2, 0]) - (A.Matrix[0, 1] * A.Matrix[1, 0] * A.Matrix[2, 2] - (A.Matrix[0, 0] * A.Matrix[1, 2] * A.Matrix[2, 1]));
            return(result);
        }
        public static quadMatrix operator -(quadMatrix A, quadMatrix B)//оператор вычитания
        {
            quadMatrix result = new quadMatrix(3, 0, 10);

            for (int i = 0; i < A.Matrix.GetLength(0); i++)
            {
                for (int j = 0; j < A.Matrix.GetLength(1); j++)
                {
                    result.Matrix[i, j] = A.Matrix[i, j] - B.Matrix[i, j];
                }
            }
            return(result);
        }
        public static quadMatrix operator ++(quadMatrix A)//оператор инкремента
        {
            quadMatrix result = new quadMatrix(3, 0, 10);

            for (int i = 0; i < A.Matrix.GetLength(0); i++)
            {
                for (int j = 0; j < A.Matrix.GetLength(1); j++)
                {
                    A.Matrix[i, j] += 1;
                }
            }
            return(A);
        }
        public static quadMatrix operator *(quadMatrix A, int a)//оператор умножения матрицы на число
        {
            quadMatrix result = new quadMatrix(3, 0, 10);

            for (int i = 0; i < A.Matrix.GetLength(0); i++)
            {
                for (int j = 0; j < A.Matrix.GetLength(1); j++)
                {
                    result.Matrix[i, j] = A.Matrix[i, j] * a;
                }
            }
            return(result);
        }
        public static quadMatrix operator *(quadMatrix A, quadMatrix B)//оператор умножения матриц между собой
        {
            quadMatrix result = new quadMatrix(3, 0, 10);

            for (int i = 0; i < A.Matrix.GetLength(0); i++)
            {
                for (int j = 0; j < A.Matrix.GetLength(1); j++)
                {
                    result.Matrix[i, j] = A.Matrix[i, j] * B.Matrix[i, j];
                }
            }
            return(result);
        }
        public static quadMatrix operator <(quadMatrix A, quadMatrix B)//второй оператор чтобы компилятор не ругался и первый не грустил
        {
            quadMatrix result = new quadMatrix(3, 0, 10);

            for (int i = 0; i < A.Matrix.GetLength(0); i++)
            {
                for (int j = 0; j < A.Matrix.GetLength(1); j++)
                {
                    result.res1 += A.Matrix[i, j];
                    result.res2 += B.Matrix[i, j];
                }
            }
            result.res3 = result.res1 - result.res2;
            if (result.res3 > 0)
            {
                Console.WriteLine("Матрица А - больше " + result.res3);
            }
            if (result.res3 < 0)
            {
                Console.WriteLine("Матрица B - больше " + result.res3);
            }
            return(result);
        }
        public static quadMatrix operator >(quadMatrix A, quadMatrix B)//опертор сравнения матриц по сумме элементов
        {
            quadMatrix result = new quadMatrix(3, 0, 10);

            for (int i = 0; i < A.Matrix.GetLength(0); i++)
            {
                for (int j = 0; j < A.Matrix.GetLength(1); j++)
                {
                    result.res1 += A.Matrix[i, j];
                    result.res2 += B.Matrix[i, j];
                }
            }
            result.res3 = result.res1 - result.res2;
            if (result.res3 > 0)
            {
                Console.WriteLine("Матрица А - больше на " + result.res3);
            }
            if (result.res3 < 0)
            {
                Console.WriteLine("Матрица B - больше на " + result.res3);
            }
            return(result);
        }
Exemple #9
0
        static void Main(string[] args)
        {
            quadMatrix A      = new quadMatrix(3, 0, 10); //матрица а
            quadMatrix aclone = A.DeepCopy();             //копия а

            quadMatrix B      = new quadMatrix(3, 0, 10); //матрица б
            quadMatrix bclone = B.DeepCopy();             //копия б

            if (A.Matrix[0, 0] == 0)
            {
                throw new Exceptions();
            }

            string choice;//переменная ввода


            while (true)                                          //менюшка, ее логика
            {
                Console.WriteLine("\n=======================\n"); //выводы
                Console.WriteLine("Matrix A:");
                Console.WriteLine(A.MatrixToString() + "\n");
                Console.WriteLine("Matrix B:");
                Console.WriteLine(B.MatrixToString() + "\n");
                Console.Write("Меню: \n " +
                              "1 - сложить \n " +
                              "2 - вычесть \n " +
                              "3 - умножить матрицы \n " +
                              " 3.1 - умножить А на число \n " +
                              " 3.2 - умножить В на число \n " +
                              "4 - сравнение \n " +
                              "5 - детерминант А \n " +
                              "6 - детерминант B \n " +
                              "7 - GetHashCode A\n " +
                              "8 - GetHashCode B\n " +
                              "9 - Equals A \n " +
                              "10 - Увеличить A на 1 \n " +
                              "11 - Увеличить В на 1 \n " +
                              "f - ВЫХОД ИЗ ПРОГРАММЫ \n " +
                              "Ввод: ");
                choice = Console.ReadLine();
                Console.Clear();

                //проверка на выход
                if (choice == "f")
                {
                    Console.WriteLine("\n\n\n\nВЫХОД\n\n\n\n");
                    break;
                }
                switch (choice)//действия по нажатию
                {
                case "1":
                    Console.WriteLine((aclone + bclone).MatrixToString());    //используем прототип, я жек его зачем то создал, правильно?
                    break;

                case "2":
                    Console.WriteLine((aclone - bclone).MatrixToString());
                    break;

                case "3":
                    Console.WriteLine((aclone * bclone).MatrixToString());
                    break;

                case "3.1":
                    Console.Write("введите число для умножения: ");
                    int a = Convert.ToInt32(Console.ReadLine());
                    if (a == 0)
                    {
                        throw new PersonException("ERROR!!!вы ввели ноль!!!", 1212);
                    }
                    else
                    {
                        Console.WriteLine((aclone * a).MatrixToString());
                    }
                    break;

                case "3.2":
                    Console.Write("введите число для умножения: ");
                    int b = Convert.ToInt32(Console.ReadLine());
                    if (b == 0)
                    {
                        throw new PersonException("ERROR!!!вы ввели ноль!!!", 1212);
                    }
                    else
                    {
                        Console.WriteLine((aclone * b).MatrixToString());
                    }
                    break;

                case "4":
                    Console.WriteLine(A > B);
                    break;

                case "5":
                    Console.WriteLine(quadMatrix.Det(A).det);
                    break;

                case "6":
                    Console.WriteLine(quadMatrix.Det(B).det);
                    break;

                case "7":
                    Console.WriteLine(A.GetHashCode());
                    break;

                case "8":
                    Console.WriteLine(B.GetHashCode());
                    break;

                case "9":
                    Console.WriteLine(B.Equals(A, B));    //по сути не имеет значения к методу какого класса обращаться, главное что он сравнивает отправляемые в него значеня
                    break;

                case "10":
                    Console.WriteLine((A++).MatrixToString());

                    /*кстати интересный факт: когда меняется класс то дипкопи меняется вместе с ним, копируя полностью его поведение,
                     * это я проверил на инкременте. Когда мы увеличивает матрицу на один, то и клон так же увеличивается на один.
                     * например запустим программу: сделаем сложение, запомним, увеличим и сложим опять, вау, разные результаты обалдеть,mindblowing!!!*/
                    break;

                case "11":
                    Console.WriteLine((B++).MatrixToString());
                    break;

                default:
                    Console.WriteLine("Введено некорректное значение");
                    break;
                }
            }
        }
Exemple #10
0
 public bool Equals(quadMatrix A, quadMatrix B)//сравнивает матрицы между собой
 {
     return(B.Matrix == A.Matrix);
 }