В квадратной матрица [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();
        }
    }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 3.917 из 5
Похожие ответы