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); }
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; } } }
public bool Equals(quadMatrix A, quadMatrix B)//сравнивает матрицы между собой { return(B.Matrix == A.Matrix); }