static void Main() { // Підтримка Unicode Console.OutputEncoding = Encoding.Unicode; // для створення чогось умовно рандомного Random rnd = new Random(); // створюємо масив відповідного типу MyMatrix <double> matrix = new MyMatrix <double> (rnd.Next(1, 10), rnd.Next(1, 10)); // Заповнюємо матрицю значеннями for (int i = 0; i < matrix.Count.H; i++) { for (int j = 0; j < matrix.Count.W; j++) { matrix[i, j] = rnd.Next(-9, 10); } } // виведення даних Console.WriteLine("\n\tЗгенерована матриця:\n"); Console.WriteLine(matrix.ToString()); // вирізати підматрицю var temp = matrix.CutOut(0, 0, matrix.Count.H / 2, matrix.Count.W / 2); // результат Console.WriteLine("\n\tВирізана підматриця:\n"); // виведення даних Console.WriteLine(temp.ToString()); // зміна розмірів внутрішнього масиву matrix.Change(matrix.Count.H / 2, matrix.Count.W / 2); // виведення даних Console.WriteLine("\n\tОбрізана матриця матриця:\n"); Console.WriteLine(matrix.ToString()); // збільшення розмірів matrix.Change(matrix.Count.H * 2, matrix.Count.W * 2); // виведення даних Console.WriteLine("\n\tЗбільшена матриця матриця:\n"); Console.WriteLine(matrix.ToString()); // repeat DoExitOrRepeat(); }
/// <summary> /// Вирізає підматрицю з матриці /// </summary> /// <param name="up">границя зверху</param> /// <param name="left">границя зліва</param> /// <param name="down">границя знизу</param> /// <param name="right">границя справа</param> public MyMatrix <T> CutOut(int up, int left, int down, int right) { // може бути момент коли задано дані вказані поза межами і буде помилка // зробимо автоматичне регулювання up = Corect(up, Count.H); down = Corect(down, Count.H); left = Corect(left, Count.W); right = Corect(right, Count.W); int h = Math.Abs(down - up), // рядки w = Math.Abs(right - left); // колонки // щоб не було помилки, якщо буде ділення 1 на 2 і націло лишиться 0 h = (h < 1) ? 1 : h; w = (w < 1) ? 1 : w; // створюємо тимчасову матрицю MyMatrix <T> temp = new MyMatrix <T>(h, w); // вирізаємо підматрицю (похідні) матриці з базової for (int i = 0; i < h; i++) { for (int j = 0; j < w; j++) { // необхідно зробити захист від переплутування сторін, як приклад Math.Min(up, down) temp[i, j] = arrays[Math.Min(up, down) + i, Math.Min(left, right) + j]; } } return(temp); // внутрішня функція // value - задане користувачем значення межі обрізання матриці // limit - границя наявної матриці int Corect(int value, int limit) { return((value < 0) ? 0 : ((value > limit) ? limit : value)); } }