В квадратной матрица [NxN] найти наибольший элемент на главной и побочной диагоналях - C#
Формулировка задачи:
Дана действительная квадратная матрица порядка N (N – нечетное),
все элементы которой различны. Найти наибольший элемент среди стоящих на
главной и побочной диагоналях и поменять его местами с элементом, стоящим
на пересечении этих диагоналей.
вот код матрицы,как сделать чтобы все элементы были различны и вторая часть задания(Найти наибольший элемент среди стоящих на
главной и побочной диагоналях и поменять его местами с элементом, стоящим
на пересечении этих диагоналей.)
буду очень благодарен за помощь.
string str; str = ""; Random rnd = new Random(); int n = Convert.ToInt32(textBox2.Text); int[,] arr = new int[n, n]; for (int i = 0; i <= arr.GetUpperBound(0); i++) { for (int j = 0; j <= arr.GetUpperBound(1); j++) { arr[i, j] = rnd.Next(Convert.ToInt32(textBox3.Text), Convert.ToInt32(textBox4.Text) + 1); str += arr[i, j] + "\t"; } str += "\r\n"; textBox1.Text = str; }
Решение задачи: «В квадратной матрица [NxN] найти наибольший элемент на главной и побочной диагоналях»
textual
Листинг программы
//Класс, представляющий элемент массива class MElement { public int Value { get; set; } public int Row { get; set; } public int Column { get; set; } } class Program { static Random rnd = new Random(); //Проверяет есть ли в матрице заданное цисло static bool ContainsValue(int[,] m, int value) { for (int i = 0; i < m.GetLength(0); i++) { for (int j = 0; j < m.GetLength(1); j++) { if (m[i, j] == value) return true; } } return false; } //Возвращает матрицу размера size, заполненную случайными, неповторяющимися числами static int[,] GetMatrix(int size) { int[,] matrix = new int[size, size]; for (int i = 0; i < size; i++) { for (int j = 0; j < size; j++) { int r; while (ContainsValue(matrix, r = rnd.Next(1, 10*size*size))); matrix[i, j] = r; } } return matrix; } //Выводит матрицу на консоль static void PrintMatrix(int[,] m) { for (int i = 0; i < m.GetLength(0); i++) { for (int j = 0; j < m.GetLength(1); j++) { Console.Write("{0,5} ", m[i,j]); } Console.WriteLine(); } } //Поиск максимального элемента на гл. и поб. диагоналях static MElement MaxDiagonalValue(int[,] m) { int size = m.GetLength(0); if (size != m.GetLength(1)) throw new ArgumentException("Матрица должна быть квадратной!"); if(size % 2 == 0) throw new ArgumentException("Матрица должна иметь нечетную размерность!"); MElement max = new MElement() { Value = int.MinValue }; //Проходимся по главной диагонали for (int i = 0; i < size; i++) { if (m[i, i] > max.Value) { max.Value = m[i, i]; max.Row = i; max.Column = i; } } //По побочной диагонали for (int i = size - 1, j = 0; i >= 0; i--, j++) { if (m[i, j] > max.Value) { max.Value = m[i, j]; max.Row = i; max.Column = j; } } return max; } //Vеняет местами элемент е и находящийся на пересечении диагоналей static void SwapWithCentr(int[,] m, MElement e) { if (m.GetLength(0) % 2 == 0 || m.GetLength(1) % 2 == 0) throw new ArgumentException("Матрица должна иметь нечетную размерность!"); int tmp = m[m.GetLength(0) / 2, m.GetLength(1) / 2]; m[m.GetLength(0) / 2, m.GetLength(1) / 2] = e.Value; m[e.Row, e.Column] = tmp; } static void Main(string[] args) { Console.WriteLine("Матрица до: "); var m = GetMatrix(5); PrintMatrix(m); var max = MaxDiagonalValue(m); Console.WriteLine("\nМаксисальное значение {0}", max.Value); Console.WriteLine("\nМатрица после: "); SwapWithCentr(m, max); PrintMatrix(m); Console.ReadKey(); } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д