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

Минимум в строках

29.12.2022, 04:06. Показов 616. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.
Написал программу для матрицы, которая в конечном итоге выводит две матрицы, одну старую и вторую переделанную.
Я должен в каждой строке найти минимальный элемент и умножить его на него же. Но почему-то когда это минимальное число (min>0) стоит в 1 столбце(именно в нём) и не важно в какой строке, то его не умножает и оставляет как было. Не могу допетрить почему.
Вот фрагмент, в котором я преобразую. Ошибка где-то в нём.
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
double[,] NewMatr(double[,] arr, int rows, int cols)
        {
            double min = 0;
            int rowsIndex = 0;
            int colsIndex = 0;
            for (int i = 0; i < rows; i++)
            {
                min = arr[i, 0];
                for (int j = 0; j < cols; j++)
                {
                    if (arr[i, j] < min)
                    {
                        min = arr[i,j];
                        rowsIndex = i;
                        colsIndex = j;
                        
                    }
                    
                }
                if (min > 0)
                {
                    arr[rowsIndex, colsIndex] *= min;
                }
            }
            return arr;
        }

Вот также на всякий случай полный код программы.
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
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
public int Rows
        {
            get
            {
                return rows;
            }
            set
            {
                rows = value;
            }
        }
        public int Cols { get { return cols; } set { cols = value; } }
 
        public static int rows;
        public static int cols;
        public double[,] array;
        private double[,] result;
        public static Form1 a;
 
        public Form1()
        {
            InitializeComponent();
            MatrNew.Enabled = false;
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
            this.WindowState = FormWindowState.Maximized;
        }
 
        private void Exit_Click(object sender, EventArgs e)
        {
            DialogResult result = MessageBox.Show("Выйти из программы ?", "Exit", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2);
            if (result == DialogResult.Yes)
            {
                this.Close();
            }
        }
 
        private void CreateMatrix_Click(object sender, EventArgs e)
        {
            Form2 form = new Form2();
            form.Show();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            generation();
        }
 
        private void generateMatrix_Click(object sender, EventArgs e)
        {
            Random rnd = new Random();
            if (rows == 0 || cols == 0)
            {
                MessageBox.Show("Матрица отсутствует !", "Внимание !");
                return;
            }
            for (int i = 0; i < rows; i++)
            {
                for (int j = 0; j < cols; j++)
                {
                    array[i, j] = rnd.NextDouble();
                    showA();
 
                }
            }
 
        }
 
        public void generation()
        {
            array = new double[rows, cols];
            for (int i = 0; i < rows; i++)
            {
                for (int j = 0; j < cols; j++)
                {
                    array[i, j] = 0;
                }
            }
            dataGridView1.RowCount = rows;
            dataGridView1.ColumnCount = cols;
            showA();
            dataGridView1.AutoResizeRowHeadersWidth(DataGridViewRowHeadersWidthSizeMode.AutoSizeToAllHeaders);
            dataGridView1.AutoResizeColumns();
        }
 
        private void Minimal_Click(object sender, EventArgs e)
        {
            double b = MinEl(array, rows, cols);
            
            if (b > 0)
            {
                MinResult.Text = b.ToString("0.0000000");
                MatrNew.Enabled = true;
            }
            else
            {
                MessageBox.Show("Неверно");
            }
 
        }
 
        private void MatrNew_Click(object sender, EventArgs e)
        {
            result = NewMatr(array, rows, cols);
            dataGridView2.RowCount = rows;
            dataGridView2.ColumnCount = cols;
            showResult(result, rows, cols);
            dataGridView1.AutoResizeRowHeadersWidth(DataGridViewRowHeadersWidthSizeMode.AutoSizeToAllHeaders);
            dataGridView1.AutoResizeColumns();
        }
 
        public void showA()
        {
            for (int i = 0; i < rows; i++)
            {
                for (int j = 0; j < cols; j++)
                {
                    dataGridView1.TopLeftHeaderCell.Value = "Матрица A";
                    dataGridView1.Columns[j].HeaderCell.Value = Convert.ToString(j + 1);
                    dataGridView1.Rows[i].HeaderCell.Value = Convert.ToString(i + 1);
                    dataGridView1.Rows[i].Cells[j].Value = array[i, j];
                }
            }
        }
 
        private void showResult(double[,] result, int rows, int cols)
        {
            for (int i = 0; i < rows; i++)
            {
                for (int j = 0; j < cols; j++)
                {
                    dataGridView2.TopLeftHeaderCell.Value = "Результат";
                    dataGridView2.Columns[j].HeaderCell.Value = Convert.ToString(j + 1);
                    dataGridView2.Rows[i].HeaderCell.Value = Convert.ToString(i + 1);
                    dataGridView2.Rows[i].Cells[j].Value = result[i, j];
                }
            }
        }
 
 
        private double MinEl(double[,] arr, int rows, int cols)
        {
            double min = 0;
            min = Math.Abs(arr[0, 0]);
            for (int i = 0; i < rows; i++)
            {
                for (int j = 0; j < cols; j++)
                {
                    if (Math.Abs(arr[i, j]) < min)
                    {
                        min = Math.Abs(arr[i, j]);                           
                    }
                }
            }
            return min;
        }
 
        double[,] NewMatr(double[,] arr, int rows, int cols)
        {
            double min = 0;
            int rowsIndex = 0;
            int colsIndex = 0;
            for (int i = 0; i < rows; i++)
            {
                min = arr[i, 0];
                for (int j = 0; j < cols; j++)
                {
                    if (arr[i, j] < min)
                    {
                        min = arr[i,j];
                        rowsIndex = i;
                        colsIndex = j;
                        
                    }
                    
                }
                if (min > 0)
                {
                    arr[rowsIndex, colsIndex] *= 0;
                }
            }
            return arr;
        }
    }
}
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
29.12.2022, 04:06
Ответы с готовыми решениями:

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

Максимум и минимум в строках с++
с++ Дан двумерный массив целых чисел a из n строк и m столбцов. Требуется для каждой строки определить максимальное и минимальное...

Максимум и минимум в строках в двумерном массиве
Дан двумерный массив целых чисел a из n строк и m столбцов. Требуется для каждой строки определить максимальное и минимальное значение...

8
419 / 311 / 107
Регистрация: 30.08.2022
Сообщений: 1,195
29.12.2022, 06:12
C#
1
arr[rowsIndex, colsIndex] = min * min;
И вы получаете не вторую матрицу, а одну и туже, так result и array ссылаются на одно и тоже
0
1 / 1 / 0
Регистрация: 29.06.2022
Сообщений: 210
29.12.2022, 16:08  [ТС]
brian778,
Цитата Сообщение от brian778 Посмотреть сообщение
arr[rowsIndex, colsIndex] = min * min;
Сделал так, не помогло, всё равно не работает.

Добавлено через 49 секунд
brian778, Не могу понять, где я мог ошибиться

Добавлено через 1 минуту
brian778, Почему-то оно не хочет с 1 столбцом работать. Может ошибся в цикле где-то?
0
419 / 311 / 107
Регистрация: 30.08.2022
Сообщений: 1,195
29.12.2022, 16:09
Цитата Сообщение от Leoprays Посмотреть сообщение
Не могу понять, где я мог ошибиться
Не могу сказать. У меня всё работает
0
1 / 1 / 0
Регистрация: 29.06.2022
Сообщений: 210
29.12.2022, 16:11  [ТС]
brian778, У вас не пропускает 1 столбец?
0
419 / 311 / 107
Регистрация: 30.08.2022
Сообщений: 1,195
29.12.2022, 16:13
Мой код
Кликните здесь для просмотра всего текста
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
using System;
using System.Windows.Forms;
 
namespace WindowsFormsApplication11
{
    public partial class Form1 : Form
    {
 
        public double[,] array;
        public static int rows = 10;
        public static int cols = 10;
        private double[,] result;
        public Form1()
        {
            InitializeComponent();
        }
 
        public void generation()
        {
            array = new double[rows, cols];
            for (int i = 0; i < rows; i++)
            {
                for (int j = 0; j < cols; j++)
                {
                    array[i, j] = 0;
                }
            }
        }
 
        double[,] NewMatr(double[,] arr, int rows, int cols)
        {
            double min = 0;
            int rowsIndex = 0;
            int colsIndex = 0;
            for (int i = 0; i < rows; i++)
            {
                min = arr[i, 0];
                for (int j = 0; j < cols; j++)
                {
                    if (arr[i, j] < min)
                    {
                        min = arr[i, j];
                        rowsIndex = i;
                        colsIndex = j;
 
                    }
 
                }
                if (min > 0)
                {
                    arr[rowsIndex, colsIndex] = min * min;
                }
            }
            return arr;
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
            generation();
 
            Random rnd = new Random();
            if (rows == 0 || cols == 0)
            {
                MessageBox.Show("Матрица отсутствует !", "Внимание !");
                return;
            }
            for (int i = 0; i < rows; i++)
            {
                for (int j = 0; j < cols; j++)
                {
                    
                    array[i, j] = rnd.NextDouble() + 12;
                    array[i, 0] = i / 10.0;
                }
            }
 
            result = NewMatr(array, rows, cols);
        }
    }
}


Добавлено через 47 секунд
Цитата Сообщение от Leoprays Посмотреть сообщение
У вас не пропускает 1 столбец?
Нет
0
1 / 1 / 0
Регистрация: 29.06.2022
Сообщений: 210
29.12.2022, 16:29  [ТС]
brian778, Вроде всё одинаково
0
419 / 311 / 107
Регистрация: 30.08.2022
Сообщений: 1,195
29.12.2022, 16:46
Лучший ответ Сообщение было отмечено Leoprays как решение

Решение

Да, так надо
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
double[,] NewMatr(double[,] arr, int rows, int cols)
{
    double min = 0;
 
    for (int i = 0; i < rows; i++)
    {
        int rowsIndex = i;
        int colsIndex = 0;
        min = arr[i, 0];
 
        for (int j = 0; j < cols; j++)
        {
            if (arr[i, j] < min)
            {
                min = arr[i, j];
                rowsIndex = i;
                colsIndex = j;
 
            }
 
        }
        if (min > 0)
        {
            arr[rowsIndex, colsIndex] = min * min;
        }
    }
    return arr;
}
1
1 / 1 / 0
Регистрация: 29.06.2022
Сообщений: 210
29.12.2022, 16:53  [ТС]
brian778, Всё теперь работает. Была ошибка. Сделал как у вас. Спасибо большое!

Добавлено через 32 секунды
Сразу не заметил
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
29.12.2022, 16:53
Помогаю со студенческими работами здесь

В строках матрицы обменять максимум и минимум, и заменить положительные элементы последней строки нулями
В матрице размерности 5 на 10 в каждой строке поменять местами максимальный и минимальный элементы. Заменить положительные элементы...

Матрица. Найти сумму элементов в тех строках,которые имеют минимум два ненулевых элемента
помогите с матрицей,пожалуйста Для заданной матрицы размерности NxN найти такие k и n, что сумма елементов k-столбца матрицы совпадает...

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

Построить изображение, состоящее минимум из 30 объектов, созданных с использованием минимум 5 цветов
надо рисунок!(( помогите завтро надо сдать отчет !(((((или отчислят!(((ААААААа

Построить изображение, состоящее минимум из 30 объектов, созданных с использованием минимум 5 цветов
а)составить программу, отображающую на экране статичное изображение, состоящее минимум из 30 объектов, созданных с использованием минимум 5...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита табличной части. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru