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

Программа с матрицей, сравнение ее элементов по столбцу

03.12.2015, 16:07. Показов 1433. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
И снова прошу помощи продвинутых программистов! Задача связанная с матрицей.
Задача:
Составить программу, находящую в матрице D(m,n) номера строк, в которых каждый элемент больше максимального из того же столбца, расположенных до рассматриваемого. Вывести исходную матрицу, номера найденных строк. Если требуемых строк нет, то выдать соответствующее сообщение.
Заранее спасибо!)
Мое мнение

P.S. Как я понял, нужно создать матрицу, затем сравнивать элемент 1 с элементом 2 выше по столбцу. Если элемент 1 больше, то идем дальше и опять сравниваем. Если вводим количество строк 1, а столбцов 0, то типа "не с чем сравнивать". Вроде понятно, но для меня сложно реализовать, помогите пожалуйста)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.12.2015, 16:07
Ответы с готовыми решениями:

Найти среднее арифметическое элементов, принадлежащих первой строке, последней строке, первому столбцу и последнему столбцу.
Дан двумерный массив размером n*m, заполненный случайными числами. Найти среднее арифметическое элементов, принадлежащих первой строке,...

В прямоугольной матрице найти сумму элементов, принадлежащих первой строке, последней строке, первому столбцу и последнему столбцу.
7.6.2. Помогите, пожалуйста, решить задачу в С++. В прямоугольной матрице найти сумму элементов, принадлежащих первой строке,...

В прямоугольной матрице найти сумму элементов, принадлежащих первой строке, последней строке, первому столбцу и последнему столбцу
в прямоугольной матрице найти сумму элементов, принадлежащих первой строке, последней строке, первому столбцу и последнему столбцу.

4
880 / 559 / 291
Регистрация: 21.11.2012
Сообщений: 1,554
03.12.2015, 16:50
Кликните здесь для просмотра всего текста

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
private int[,] GetRandomMatrix(int n, int m, int maxValue = 1000)
        {
            var random = new Random();
            int[,] res = new int[n, m];
 
            for (int i = 0; i < n; i++)
            {
                for (int j = 0; j < m; j++)
                {
                    res[i, j] = random.Next(maxValue);
                }
            }
 
            return res;
        }
 
        private string GetRowsCount(int[,] matrix)
        {
            int max = 0;
            string res = "";
 
            //get Matrix as String
            res = "Исходная матрица: \n" + GetMatrixAsString(matrix) + "\n\n";
 
            //Ищем строки
            for (int i = 0; i <= matrix.GetUpperBound(1); i++)
            {
                max = matrix[0, i];
                for (int j = 0; j <= matrix.GetUpperBound(0); j++)
                {
                    if (matrix[j, i] > max)
                    { 
                        max = matrix[j, i];
                        res = res + "Столбец " + i + " строка " + j + "\n";
                     }
                }
            }
 
            return res;
        }
 
        private string GetMatrixAsString(int[,] matrix)
        {
            string res = "";
 
            for(int i = 0; i <= matrix.GetUpperBound(0); i++)
            {
                for (int j = 0; j <= matrix.GetUpperBound(1); j++)
                {
                    res = res + matrix[i, j] + " ";
                }
                res = res + "\n";
            }
 
            return res;
        }
 
//Использование:
var matrix = GetRandomMatrix(5, 7, 20);
MessageBox.Show(GetRowsCount(matrix));


Добавлено через 3 минуты
по-моему я чуток неправильно прочитал задание)) ща переделаю

Добавлено через 2 минуты
подправил)
0
3 / 3 / 4
Регистрация: 21.07.2015
Сообщений: 51
03.12.2015, 17:09
Самый простой вариант.
Кликните здесь для просмотра всего текста
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
            int[,] mas = { { 1, 2, 4 }, { 2, 1, 3 }, { 4, 10, 5 }, { 5, 250, 17 } }; 
            List<int> rNumber = new List<int>(); //коллекция номеров нужных строк
 
            for (int i = 1; i < mas.GetLength(0); i++) //проверяем строки
            {
                for (int j = 0; j < mas.GetLength(1); j++) //проверяем столбцы
                {
                    //если значение меньше, чем в предыдущей ячейке столбца - прерываем дальнейшую проверку этой строки
                    if (mas[i, j] < mas[i - 1, j]) break; 
                    //если, дойдя до конца строки, все элементы подходят, то добавляем номер строки в коллекцию
                    if (mas[i, j] > mas[i - 1, j] && j == mas.GetLength(1) - 1 ) rNumber.Add(i);
                }
            }
            Console.WriteLine("Исходная матрица:");
            for (int i = 0; i < mas.GetLength(0); i++) //выводим исходную матрицу
            {
                Console.Write("Строка " + i + ": ");
                for (int j = 0; j < mas.GetLength(1); j++)
                {
                    Console.Write(mas[i, j] + "\t");
                }
                Console.WriteLine();
            }
 
            if (rNumber.Count() == 0) //если коллекция строк пуста - дальше не идём
            {
                Console.WriteLine("Нужная строка не найдена.");
                Console.ReadKey();
                return;
            }
 
            Console.WriteLine("Найденные строки:");
            for (int i = 0; i < rNumber.Count(); i++)
            {
                Console.Write("Строка " + i + ": ");
                for (int j = 0; j < mas.GetLength(1); j++)
                {
                    Console.Write(mas[rNumber[i], j] + "\t");
                }
                Console.WriteLine();
            }
 
            Console.ReadKey();
0
880 / 559 / 291
Регистрация: 21.11.2012
Сообщений: 1,554
03.12.2015, 17:14
Prizrak9,

чем же ваш вариант проще?))
0
3 / 3 / 4
Регистрация: 21.07.2015
Сообщений: 51
03.12.2015, 17:53
hamin, исправил.
Кликните здесь для просмотра всего текста

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
            int[,] mas = { { 1, 2, 4 }, { 2, 1, 3 }, { 4, 10, 5 }, { 5, 250, 17 } }; 
            List<int> rNumber = new List<int>(); //коллекция номеров нужных строк
            int[] maxValue = new int[mas.GetLength(1)];
 
            for (int i = 0; i < mas.GetLength(0); i++) //проверяем строки
            {
                for (int j = 0; j < mas.GetLength(1); j++) //проверяем столбцы
                {
                    if (mas[i, j] > maxValue[j])
                    {
                        maxValue[j] = mas[i, j];
                        //если, дойдя до конца строки, все элементы подходят, то добавляем номер строки в коллекцию
                        if (j == mas.GetLength(1) - 1) rNumber.Add(i);
                    }
 
                    //если значение меньше, чем максимальное значениев столбце до проверяемой строки - прерываем дальнейшую проверку этой строки
                    if (mas[i, j] < maxValue[j]) break;
                }
            }
            Console.WriteLine("Исходная матрица:");
            for (int i = 0; i < mas.GetLength(0); i++) //выводим исходную матрицу
            {
                Console.Write("Строка " + i + ": ");
                for (int j = 0; j < mas.GetLength(1); j++)
                {
                    Console.Write(mas[i, j] + "\t");
                }
                Console.WriteLine();
            }
 
            if (rNumber.Count() == 0) //если коллекция строк пуста - дальше не идём
            {
                Console.WriteLine("Нужная строка не найдена.");
                Console.ReadKey();
                return;
            }
 
            Console.WriteLine("Найденные строки:");
            for (int i = 0; i < rNumber.Count(); i++)
            {
                Console.Write("Строка " + i + ": ");
                for (int j = 0; j < mas.GetLength(1); j++)
                {
                    Console.Write(mas[rNumber[i], j] + "\t");
                }
                Console.WriteLine();
            }
 
            Console.ReadKey();

Проще тем, что он помещается в одном методе, которому нужно только передать массив.

Добавлено через 24 минуты
hamin, Затолкал в один метод, и переделал под forms.
Кликните здесь для просмотра всего текста
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
        private string Test(int[,] mas)
        {
            List<int> rNumber = new List<int>(); //коллекция номеров нужных строк
            int[] maxValue = new int[mas.GetLength(1)];
            string text = "";
            for (int i = 0; i < mas.GetLength(0); i++) //проверяем строки
            {
                for (int j = 0; j < mas.GetLength(1); j++) //проверяем столбцы
                {
                    if (mas[i, j] > maxValue[j])
                    {
                        maxValue[j] = mas[i, j];
                        //если значение меньше, чем максимальное значениев столбце до проверяемой строки - прерываем дальнейшую проверку этой строки
                        if (j == mas.GetLength(1) - 1) rNumber.Add(i);
                    }
 
                    //если значение меньше, чем в предыдущей ячейке столбца - прерываем дальнейшую проверку этой строки
                    if (mas[i, j] < maxValue[j]) break;
                }
            }
            text += "Исходная матрица:\n";
            for (int i = 0; i < mas.GetLength(0); i++) //выводим исходную матрицу
            {
                text += "Строка " + i + ": ";
                for (int j = 0; j < mas.GetLength(1); j++)
                {
                    text += mas[i, j] + "\t";
                }
                text += "\n";
            }
 
            if (rNumber.Count() == 0) //если коллекция строк пуста - дальше не идём
            {
                return text = "Нужная строка не найдена.";
            }
 
            text += "Найденные строки:\n";
            for (int i = 0; i < rNumber.Count(); i++)
            {
                text += "Строка " + i + ": ";
                for (int j = 0; j < mas.GetLength(1); j++)
                {
                    text += mas[rNumber[i], j] + "\t";
                }
                text += "\n";
            }
            return text;
        }
//Использование
            int[,] mas= //создать массив;
            MessageBox.Show(Test(mas));//передать его и вернуть текст
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
03.12.2015, 17:53
Помогаю со студенческими работами здесь

Сравнение матриц по первому столбцу
Добрый день, товарищи! Помогите пожалуйста сравнить матрицы по первому столбцу и сформировать 2 новых матрицы, в которых будут только те...

Excel: сравнение двух таблиц по первому столбцу
Помогите пожалуйста буду благодарен. Необхордимо сравнить две таблицы, по первому столбцу(part no) и вывести результаты сравнения в...

Работа с матрицей. Сравнение строк и столбцов
Здравствуйте. Помогите пожалуйста реализовать сравнение каждой строки со всеми столбцами. Предположим есть матрица 3х3: 3 ...

Сравнение 2-х Книг по первому столбцу и вывод совпавших значений( всю строку) в 3-ю книгу
Всем Добрый день! Помогите пожалуйста с формулой или может здесь макрос нужен!? Имеется. 1 книга. Есть номера домов( некий перечень),...

Сравнение 2-х Книг по первому столбцу и вывод совпавших значений( всю строку) в 3-ю книгу - MS Excel
Всем Добрый день! Помогите пожалуйста с формулой или может здесь макрос нужен!? Имеется. 1 книга. Есть номера домов( некий перечень),...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru