Найти наибольший элемент среди стоящих на главной и побочной диагоналях матрицы - C#

Узнай цену своей работы

Формулировка задачи:

Дана действительная квадратная матрица порядка N(N-нечётное), все элементы которой различны. Найти найбольший элемент среди стоящих на главной и побочной диагоналях и поменять его местами с элементом стоящим на пересичении этих диагоналей

Решение задачи: «Найти наибольший элемент среди стоящих на главной и побочной диагоналях матрицы»

textual
Листинг программы
using System;
using System.Collections.Generic;
 
namespace TestConsole
{
    static class Task   
    {
        delegate bool RealPredicate(double x);
 
        static double ReadNumber(string Caption, RealPredicate P = null)
        {
            double v = 0.0;
            bool flag = false;
            while (!flag)
            {
                Console.Write(Caption);
                flag = double.TryParse(Console.ReadLine(), out v);
                flag &= P != null && P(v);
            }
            return v;
        }
 
        static void Main()
        {
            // нечетный положительный размер матрицы
            int n = (int)ReadNumber("Размер матрицы: ", 
                x => (int)x == x && x > 0 && x % 2 == 1);
 
            // Ввод элементов матрицы, все элементы должны быть различны
            double[,] d = new double[n, n];
            HashSet<double> hs = new HashSet<double>();
            for (int r = 0; r < n; r++ )
            {
                for (int c = 0; c < n; c++)
                {
                    d[r, c] = ReadNumber(
                        string.Format("Элемент [{0}, {1}]: ", r, c),
                        x => !hs.Contains(x));
                    hs.Add(d[r, c]);
                }
            }
 
            // Поиск максимума
            int rm = n / 2, cm = n / 2;
            for (int i = 0; i < n; i++ )
            {
                if (d[i, i] > d[rm, cm]) { rm = i; cm = i; }
                if (d[i, n - i - 1] > d[rm, cm]) { rm = i; cm = n - i - 1; }
            }
 
            // Обмен
            d[rm, cm] = d[n / 2, n / 2] + 0 * (d[n / 2, n / 2] = d[rm, cm]);
 
            // Вывод
            for (int r = 0; r < n; r++)
            {
                for (int c = 0; c < n; c++)
                    Console.Write("{0, 5} ", d[r, c]);
 
                Console.WriteLine();
            }
 
            Console.ReadLine();
        }
    }
}

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


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

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

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