Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/25: Рейтинг темы: голосов - 25, средняя оценка - 4.88
0 / 0 / 0
Регистрация: 20.12.2013
Сообщений: 24

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

21.12.2013, 00:02. Показов 5055. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Дана действительная квадратная матрица порядка N(N-нечётное), все элементы которой различны. Найти найбольший элемент среди стоящих на главной и побочной диагоналях и поменять его местами с элементом стоящим на пересичении этих диагоналей
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.12.2013, 00:02
Ответы с готовыми решениями:

Дана матрица 7 × 7. Найти наибольший элемент среди стоящих на главной и побочной диагоналях и поменять его местами с
Дана матрица 7 × 7. Найти наибольший элемент среди стоящих на главной и побочной диагоналях и поменять его местами с элементом, стоящим на...

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

Найти наибольший элемент среди стоящих на главной и побочной диагоналях матрицы
Подскажите пожалуйста Дана действительная квадратная матрица порядка n, все элементы которой различны. Найти наибольший элемент среди...

9
Заблокирован
21.12.2013, 12:34
N вводится пользователем? Или задается в программе?
0
 Аватар для myjumanji
16 / 16 / 5
Регистрация: 18.05.2012
Сообщений: 39
22.12.2013, 00:12
Добрый день. Я кое-что сделала, но столкнулась с проблемой: вы просите работать с элементом на пересечении диагоналей, но такой элемент не всегда существует -- Cм. картинку внизу.

Из того, что сделано: создала класс Матрица, матрицу можно заполнить, вывести, найти наибольший элемент среди стоящих на главной и побочной диагоналях. А также можно найти номер диагонали с наибольшим элементом среди стоящих на главной и побочной диагоналях.

EvenMatrixSizeException.cs
C#
1
2
3
4
5
6
7
8
9
10
11
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace Matrix
{
    class EvenMatrixSizeException : Exception
    {
    }
}
Main.cs
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
using System;
 
namespace Matrix
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                Matrix m1 = new Matrix();
                Matrix m2 = new Matrix(7);
 
                Random RandomNumber = new Random();
                for (int i = 0; i < 7; i++)
                {
                    for (int j = 0; j < 7; j++)
                    {
                        //m2[i, j] = i ;
                        m2[i, j] = (double)(i + RandomNumber.Next(0, 100)) / (i + RandomNumber.Next(0, 100));
                    }
                }
 
                //empty matrix
                Console.WriteLine(m1);
 
                //filled matrix
                Console.WriteLine(m2);
 
                Console.WriteLine("найбольший элемент среди стоящих на главной и побочной диагоналях " + m2.maxElem());
                Console.WriteLine("номер диагонали наибольшего элемента " + m2.getDiagonalNumber(m2.maxElem()));
 
            }
 
            catch (Exception e)
            {
                Console.WriteLine("{0} Exception caught.", e);
            }
        }
    }
}
Matrix.cs
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Matrix;
 
namespace Matrix
{
    class Matrix
    {
        private int size;
        private double[,] array;
 
        public Matrix(int n)
        {
            if (n % 2 == 1)
            {
                size = n;
                array = new double[size, size];
            }
            else throw new EvenMatrixSizeException();
        }
 
        public Matrix()
        {
            size = 0;
            array = new double[0, 0];
        }
 
        public double this[int x, int y]
        {
            get
            {
                return GetValue(x, y);
            }
            set
            {
                SetValue(x, y, value);
            }
 
        }
 
        private void SetValue(int x, int y, double value)
        {
            if (x > size - 1 || y > size - 1)
            {
                throw new IndexOutOfRangeException();
            }
            array[x, y] = value;
        }
 
        private double GetValue(int x, int y)
        {
            if (x > size - 1 || y > size - 1)
            {
                throw new IndexOutOfRangeException();
            }
            return array[x, y];
        }
 
        public override string ToString()
        {
            string output = "";
            for (int i = 0; i < size; i++)
            {
                for (int j = 0; j < size; j++)
                {
                    output += string.Format("{0:0.00}  ", array[i, j]);
                }
                output += "\n";
            }
            return string.Format("Matrix: \n{0}", output);
        }
 
        public double maxElem()
        {
            double max = array[0, 0];
            for (int i = 0; i < size; i++)
            {
                for (int j = 0; j < size; j++)
                {
                    if (array[i, j] > max)
                    {
                        max = array[i, j];
                    }
                }
            }
            return max;
        }
 
        public int getDiagonalNumber(double elem)
        {
            //let's find coordinates
            int x = 0;
            int y = 0;
            for (int i = 0; i < size; i++)
            {
                for (int j = 0; j < size; j++)
                {
                    if (array[i, j] == elem)
                    {
                        x = i;
                        y = j;
                    }
                }
            }
            //getting giagonal's number ( 0 - main diagonal; -1 left from main; 1 right from main and so on...)
            return y - x;
        }
 
    }
}
Миниатюры
Найти наибольший элемент среди стоящих на главной и побочной диагоналях матрицы  
Вложения
Тип файла: zip Matrix.zip (2.7 Кб, 7 просмотров)
0
Заблокирован
22.12.2013, 00:23
Цитата Сообщение от myjumanji Посмотреть сообщение
Добрый день. Я кое-что сделала, но столкнулась с проблемой: вы просите работать с элементом на пересечении диагоналей, но такой элемент не всегда существует -- Cм. картинку внизу.
Вы не правы, этот элемент всегда существует.

Побочной диагональю матрицы называется диагональ, проведённая из левого нижнего угла матрицы в правый верхний.
1
 Аватар для myjumanji
16 / 16 / 5
Регистрация: 18.05.2012
Сообщений: 39
22.12.2013, 13:37
Задача решена:

Main.cs
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
using System;
 
namespace Matrix
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                Matrix m1 = new Matrix();
                Matrix m2 = new Matrix(7);
 
                Random RandomNumber = new Random();
                for (int i = 0; i < 7; i++)
                {
                    for (int j = 0; j < 7; j++)
                    {
                        //m2[i, j] = i ;
                        m2[i, j] = (double)(i + RandomNumber.Next(0, 100)) / (i + RandomNumber.Next(0, 100));
                    }
                }
 
                //empty matrix
                Console.WriteLine(m1);
 
                //filled matrix
                Console.WriteLine(m2);
 
                Console.WriteLine("найбольший элемент среди стоящих на главной и побочной диагоналях " + m2.maxElem());
                Console.WriteLine("элемент на пересечении главной и побочной диагоналей" + m2.centralElement());
                m2.swapElements(m2.maxElem(), m2.centralElement());
                Console.WriteLine("Матрица после замены местами найбольшего элемента среди стоящих на главной и побочной диагоналях и элемента, стоящего на пересичении этих диагоналей");
                Console.WriteLine(m2);
            }
 
            catch (Exception e)
            {
                Console.WriteLine("{0} Exception caught.", e);
            }
        }
    }
}
Matrix.cs
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Matrix;
 
namespace Matrix
{
    class Matrix
    {
        private int size;
        private double[,] array;
 
        public Matrix(int n)
        {
            if (n % 2 == 1)
            {
                size = n;
                array = new double[size, size];
            }
            else throw new EvenMatrixSizeException();
        }
 
        public Matrix()
        {
            size = 0;
            array = new double[0, 0];
        }
 
        public double this[int x, int y]
        {
            get
            {
                return GetValue(x, y);
            }
            set
            {
                SetValue(x, y, value);
            }
 
        }
 
        private void SetValue(int x, int y, double value)
        {
            if (x > size - 1 || y > size - 1)
            {
                throw new IndexOutOfRangeException();
            }
            array[x, y] = value;
        }
 
        private double GetValue(int x, int y)
        {
            if (x > size - 1 || y > size - 1)
            {
                throw new IndexOutOfRangeException();
            }
            return array[x, y];
        }
 
        public override string ToString()
        {
            string output = "";
            for (int i = 0; i < size; i++)
            {
                for (int j = 0; j < size; j++)
                {
                    output += string.Format("{0:0.00}  ", array[i, j]);
                }
                output += "\n";
            }
            return string.Format("Matrix: \n{0}", output);
        }
 
        public double maxElem()
        {
            double max = array[0, 0];
            for (int i = 0; i < size; i++)
            {
                for (int j = 0; j < size; j++)
                {
                    if (((i == j) && (array[i, j] > max)) || ((i + j == size - 1) && (array[i, j] > max)))
                    {
                        max = array[i, j];
                    }
                }
            }
            return max;
        }
 
        public double centralElement()
        {
            return array[(size - 1) / 2, (size - 1) / 2];
        }
 
        public void swapElements(double elem1, double elem2)
        {
            //let's find coordinates
            int x1 = 0;
            int y1 = 0;
            int x2 = 0;
            int y2 = 0;
            for (int i = 0; i < size; i++)
            {
                for (int j = 0; j < size; j++)
                {
                    if (array[i, j] == elem1)
                    {
                        x1 = i;
                        y1 = j;
                    }
                    if (array[i, j] == elem2)
                    {
                        x2 = i;
                        y2 = j;
                    }
                }
            }
            //swap
            double c = array[x1, y1];
            array[x1, y1] = array[x2, y2];
            array[x2, y2] = c;
        }
    }
}
Вложения
Тип файла: zip Matrix.zip (2.8 Кб, 9 просмотров)
0
1057 / 864 / 195
Регистрация: 31.03.2010
Сообщений: 2,521
04.04.2014, 14:08
0) создаем переменную max Int32.MinValue и две переменных-индекса
1) цикл по строкам, for(int i=0; ...
2) элементы главной диагонали mas[i,i], побочной - mas[i, n-i-1]
3) сравниваем переменную max с элементами диагоналей и если max меньше, то сохраняем новое значение в макс и сохраняем индексы нового элемента
4) после цикла имеем индексы максимального элемента. центральный элемент имеет индексы n/2, n/2.
меняем местами
0
5 / 5 / 12
Регистрация: 28.03.2014
Сообщений: 19
07.04.2014, 21:44
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
static void Main(string[] args)
        {
            int n = int.Parse(Console.ReadLine());
            float[,] a = new float[n,n];
            Random r = new Random();
            for (int i = 0; i < n; i++)
            {
                for (int j = 0; j < n; j++)
                {
                    a[i, j] = r.Next(200) - 100;
                    Console.Write("{0,4}",a[i,j]);
                }
                Console.WriteLine();
            }
 
            int iMax = 0;
            int jMax = 0;
            for (int i = 0; i < n; i++)
            {
                if (a[i, i] > a[iMax, jMax])
                {
                    iMax = i;
                    jMax = i;
                }
                if (a[i, n - i-1] > a[iMax, jMax])
                {
                    iMax = i;
                    jMax = n-i-1;
                }
            }
            Console.WriteLine();
            float b = a[iMax, jMax];
            a[iMax, jMax] = a[n / 2, n / 2];
            a[n / 2, n / 2] = b;
 
            for (int i = 0; i < n; i++)
            {
                for (int j = 0; j < n; j++)
                    Console.Write("{0,4}", a[i, j]);
                Console.WriteLine();
            }
            
            Console.ReadLine();
        }
0
0 / 0 / 0
Регистрация: 20.12.2013
Сообщений: 24
07.04.2014, 21:48  [ТС]
а можно с коментарием пожалуйста, ростолковать что где находиться и что за чем идёт?)
0
1057 / 864 / 195
Регистрация: 31.03.2010
Сообщений: 2,521
08.04.2014, 14:16
Александр kijim, если ты код готовый не можешь прочесть, то ты совсем ленишься.
более того тут комментарии излишни, так как уже приведен алгоритм постом выше
0
814 / 422 / 169
Регистрация: 08.02.2013
Сообщений: 711
05.05.2014, 18:30
Александр kijim,
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
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();
        }
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
05.05.2014, 18:30
Помогаю со студенческими работами здесь

Найти наибольший элемент среди стоящих на главной и побочной диагоналях матрицы
Help me please! Очень нужна блок-схема на TurboPascal 7.0. Вот на это задание: Дана действительная квадратная матрица порядка n (n –...

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

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

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

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru