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

Матрица, сравнение значений в строках (Проверка кода)

12.01.2016, 19:12. Показов 1347. Ответов 8
Метки нет (Все метки)

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

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
int m;
        int n;
        private void button1_Click(object sender, EventArgs e)
        {
             m = int.Parse(textBox1.Text);
             n = int.Parse(textBox2.Text);
            dataGridView1.RowCount = n;
            dataGridView1.ColumnCount = m;
        }
 
        private void button3_Click(object sender, EventArgs e)
        {
            Random rnd= new Random();
            for (int i = 0; i < n; i++)
                for (int j = 0; j < m; j++)
                    dataGridView1.Rows[i].Cells[j].Value = rnd.Next(0, 20);
        }
 
        private void button2_Click(object sender, EventArgs e)
        {
            string str = "";
            int max= int.MinValue;
            for (int j = 0; j < m; j++)
            {
                int x = int.Parse(dataGridView1.Rows[0].Cells[j].Value.ToString());
                if (x > max)
                    max = x;
            }
            int newmax=0;
 
            for (int i = 1; i < n; i++)
            {
                bool vsebolshe = true;
                for (int j = 0; j < m; j++)
                {int x =int.Parse(dataGridView1.Rows[i].Cells[j].Value.ToString());
                    if ( x > max)
                        newmax = x;
                    else vsebolshe = false;
                }
                if (vsebolshe)
                    str += (i + 1) + " ";
                max = newmax;
            }
            if(str!="")
               if(str.Length>2)
            str += "строки подходят под условие";
               else str += "строка подходит под условие";
            else str = "строк, подходящих под условие не найдено";
            textBox3.Text = str;
        }

Прошу, найдите и исправьте ошибку, программа работает неправильно.
Ниже предоставил скрины ошибок, для наглядности проблемы
Миниатюры
Матрица, сравнение значений в строках (Проверка кода)   Матрица, сравнение значений в строках (Проверка кода)   Матрица, сравнение значений в строках (Проверка кода)  

0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
12.01.2016, 19:12
Ответы с готовыми решениями:

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

Поиск, сравнение и замена значений в строках
Имеются четыре строки, например a, b, c, d, Audi 2010-2013, Ремонт 2010-2017, Обслуживание 2009-2010, Выход 2010-2017 Возможна ли...

Сравнение значений в строках после отбора
Добрый день! Подскажите, можно ли после того как заполнил ТЗ и сделал свертку и отбор, сравнить полученные строки между собой по...

8
Эксперт .NET
 Аватар для Даценд
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
12.01.2016, 20:17
Передавайте прочитанный массив в метод:
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
static List<int> CheckRows(int[,] arr)
{
    List<int> list=new List<int>();
    for (int i = 1; i < arr.GetLength(0); i++)
    {
        bool goodRow = true;
        for (int j = 0; j < arr.GetLength(1); j++)
        {
            for (int k = 0; k < i; k++)
            {
                if (arr[i, j] <= arr[k, j])
                {
                    goodRow = false;
                    break;
                }
            }
            if (!goodRow)
                break;
        }
        if (goodRow)
            list.Add(i);
    }
    return list;
}
Метод вернет List c номерами строк, подходящих под условие.
1
0 / 0 / 1
Регистрация: 01.12.2015
Сообщений: 32
19.01.2016, 15:16  [ТС]
Даценд, простите, но я вообще не понял, что вы написали. Не могли бы вы по подробней расписать что и куда писать)
0
Эксперт .NET
 Аватар для Даценд
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
19.01.2016, 16:25
Bart_21,
Рекомендую:
1) Не использовать контролы, в частности dataGridView1, для хранения данных. Они все-таки предназначены для их отображения.
2) При рандомной генерации значений нужно записывать их в массив. Можно параллельно выводить их и в DataGridView.
3) Когда будет массив, его можно будет передать в предложенный выше метод.
4) Возвращенный методом List c номерами строк, подходящих под условие, можно через string.Join превратить в строку и вывести в текстбокс
1
0 / 0 / 1
Регистрация: 01.12.2015
Сообщений: 32
30.01.2016, 12:07  [ТС]
Даценд, разобрал с преподавателем данную задачу, он сказал, что можно обойтись без каких-либо методов Лист и Ретурнов.
После разговоров, пришел, написал по вашей схеме, но что-то все равно не работает. И вывод данных у меня немного странный.
Код

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
int m, n, x,y,a;
        bool p;
        
        private void button1_Click(object sender, EventArgs e)
        {
            m = int.Parse(textBox1.Text);
            n = int.Parse(textBox2.Text);
            dataGridView1.RowCount = m;
            dataGridView1.ColumnCount = n;
        }
 
        private void button2_Click(object sender, EventArgs e)
        {
            
            for (int i= 1; i<m; i++)
            {
                if (p == false)
                {
                    m = 4;
            n = 2;
            dataGridView2.RowCount = m;
            dataGridView2.ColumnCount = n;
                    
                    dataGridView2.Rows[a].Cells[0].Value = i;
                    a++;
                }
            
                for (int j=0; j<n; j++)
                {
 
                    if (p == true)
                    { break; }
                
                    
                    for(int z=0; z<=i-1;z++)
                    { x =int.Parse(dataGridView1.Rows[i].Cells[j].Value.ToString());
                        y=int.Parse(dataGridView1.Rows[z].Cells[j].Value.ToString());
                        if (x<y)
                        { p=true;
                            break;}
                        
 
                    }
                }    
              }  
            }


Добавлено через 16 минут
Даценд, Нашел в интернете код данной задачи на PHP, не могли бы вы его перевести на C#?
Код на PHP
PHP
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
using namespace std; 
 
int main(int argc, char **argv){ 
 
    int N; 
    cin>>N; 
    cout<<endl; 
    int **matrix=new int*[N]; 
    for(int i=0;i<N;++i)matrix[i]=new int[N]; 
 
    for(int i=0;i<N;++i){ 
        for(int j=0;j<N;++j) 
            cin>>matrix[i][j]; 
        cout<<endl; 
    } 
     
    int *max=new int[N]; 
    for(int i=0;i<N;++i) 
        max[i]=matrix[0][i]; 
    int count=0; 
    for(int i=1;i<N;++i){ 
        bool f=true; 
        for(int j=0;j<N;++j){ 
            if(matrix[i][j]<=max[j]) f=false; 
            else max[j]=matrix[i][j]; 
        } 
        if(f){ 
            cout<<i+1<<endl; 
            ++count; 
        } 
    } 
    if(!count)cout<<"Строк, удовлетворяющих условию нет"<<endl; 
     
    delete[] max; 
    for(int i=0;i<N;++i)delete[] matrix[i]; 
    delete[] matrix; 
    return 0; 
}
0
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10427 / 5157 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
30.01.2016, 12:48
Цитата Сообщение от Даценд Посмотреть сообщение
list.Add(i);
yield return? Не?
Цитата Сообщение от Bart_21 Посмотреть сообщение
с преподавателем данную задачу, он сказал, что можно обойтись без каких-либо методов Лист и Ретурнов
Ну можете передать преподу большой привет
0
Эксперт .NET
 Аватар для Даценд
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
30.01.2016, 14:47
Цитата Сообщение от Storm23 Посмотреть сообщение
yield return? Не?
я думаю, если
Цитата Сообщение от Bart_21 Посмотреть сообщение
он сказал, что можно обойтись без каких-либо методов Лист и Ретурнов.
то метод IEnumerable может негативно повлиять на его здоровье.
Bart_21,
Можно обойтись - не значит, что нужно обойтись.

1-й вариант с методом IEnumerable и yield return:
Кликните здесь для просмотра всего текста
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
private void button1_Click(object sender, EventArgs e)
{
    int[,] arr = new int[dataGridView1.RowCount, dataGridView1.ColumnCount];
    for (int i=0; i<dataGridView1.RowCount; i++)
        for (int j=0; j<dataGridView1.ColumnCount; j++)
            arr[i,j] = int.Parse(dataGridView1[j, i].Value.ToString());
    textBox3.Text = string.Empty;
    foreach (int item in CheckRows(arr))
    {
        textBox3.Text += item + " ";
    }
    if (textBox3.Text==string.Empty)
    textBox3.Text = "Строк, удовлетворяющих условию нет!";
}
 
static IEnumerable<int> CheckRows(int[,] arr)
{
    for (int i = 1; i < arr.GetLength(0); i++)
    {
        bool goodRow = true;
        for (int j = 0; j < arr.GetLength(1); j++)
        {
            for (int k = 0; k < i; k++)
            {
                if (arr[i, j] <= arr[k, j])
                {
                    goodRow = false;
                    break;
                }
            }
            if (!goodRow)
                break;
        }
        if (goodRow)
            yield return i;
    }
}


Добавлено через 8 минут
2-й вариант с List:
Кликните здесь для просмотра всего текста
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
private void button1_Click(object sender, EventArgs e)
{
    int[,] arr = new int[dataGridView1.RowCount, dataGridView1.ColumnCount];
    for (int i=0; i<dataGridView1.RowCount; i++)
        for (int j=0; j<dataGridView1.ColumnCount; j++)
            arr[i,j] = int.Parse(dataGridView1[j, i].Value.ToString());
    textBox3.Text = string.Empty;
    List<int> rowNumbers = CheckRows(arr);
    if (rowNumbers.Count == 0)
        textBox3.Text = "Строк, удовлетворяющих условию нет!";
    else
        textBox3.Text = string.Join(" ", rowNumbers);
}
 
static List<int> CheckRows(int[,] arr)
{
    List<int> list = new List<int>();
    for (int i = 1; i < arr.GetLength(0); i++)
    {
        bool goodRow = true;
        for (int j = 0; j < arr.GetLength(1); j++)
        {
            for (int k = 0; k < i; k++)
            {
                if (arr[i, j] <= arr[k, j])
                {
                    goodRow = false;
                    break;
                }
            }
            if (!goodRow)
                break;
        }
        if (goodRow)
            list.Add(i);
    }
    return list;
}
1
0 / 0 / 1
Регистрация: 01.12.2015
Сообщений: 32
30.01.2016, 15:51  [ТС]
Даценд, спасибо вам огромное, воспользовался вторым способом, который вы предложили. Я, наверное, уже достал вас, но подскажите еще пожалуйста, в вашей программе программа считывает строки считая с нулевой, а как сделать, чтобы строка под индексом 0, стала строкой номер 1?
0
Эксперт .NET
 Аватар для Даценд
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
30.01.2016, 17:13
Bart_21,
имеется в виду считывание из DataGridView или просто нужно вывести не индексы, а порядковые номера строк?
Если первое, то непонятно зачем.
Если второе, то 35-я строка:
C#
1
list.Add(i+1);
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
30.01.2016, 17:13
Помогаю со студенческими работами здесь

Дана действительная матрица размером 6*9. Найти среднее арифметическое наибольшего и наименьшего значений её элементов в строках.
Помогите пожалуйста с написанием программы и блок схемой! Дана действительная матрица размером 6*9. Найти среднее арифметическое...

Задана целочисленная матрица. Во сколько раз сумма элементов, стоящих на четных строках, больше, чем на нечетных строках.
Помогите с решением такой вот задачки: Задана целочисленная матрица. Во сколько раз сумма элементов, стоящих на четных строках,...

Сравнение символов в строках
Здравствуйте. Нужна помощь.. Имеется файл с данными(file1.txt): Имя Фамилия:номер телефона Нужно средствами php сделать...

Сравнение символов в строках
Добрый день! помогите написать прогу, которая будет сравнивать две строки и показывать каких символов нет в 1-ой строке из 2-ой строки.

Сравнение времени в строках
Доброго времени суток товарищи, я только начинаю изучать C#, поэтому прошу у вас совета... у меня консольное приложение считывает с сайта...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru