Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
11 / 12 / 8
Регистрация: 16.11.2016
Сообщений: 892

Ссылка на объект не указывает на экземпляр класса

29.01.2020, 17:31. Показов 2053. Ответов 22
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Сделал программу по работе с матрицей. Сначало пользователь вводит размерность матрицы -> кнопка сохранить размер матрицы -> вводятся элементы матрицы -> кнопка сохранить матрицу, и на этом месте выдаёт ошибку: "Ccылка на объект не указывает на экземпляр класса" и указывает на код этой кнопки. Что не так так? Как исправить?
C#
1
2
3
4
5
6
7
8
9
10
private void button1_Click(object sender, EventArgs e)
        {
            for (int i = 0; i < Convert.ToInt32(comboBox1.Text); i++)
            {
                for (int j = 0; j < Convert.ToInt32(comboBox2.Text); j++)
                {
                    matrix[i, j] = Convert.ToInt32(dataGridView1[i, j].Value);
                }
            }
        }
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
29.01.2020, 17:31
Ответы с готовыми решениями:

Ссылка на объект не указывает на экземпляр класса
Сделал консольное приложение, дабы проверить работу свеженаписаного кода. Написал работает. Решил, что пора сделать его на событие Click...

Ссылка на объект не указывает на экземпляр объекта (Методы класса)
Проблема в реализации методов из классов прорисовки фигуры using System; using System.Collections.Generic; using...

Проблема с массивами + System.NullReferenceException: "Ссылка на объект не указывает на экземпляр объект
Ошибка выскакивает на atsakymai = new string; В первой форме //ФОРМА 2: public partial class Form2 : Form { ...

22
160 / 148 / 92
Регистрация: 30.03.2011
Сообщений: 569
29.01.2020, 20:35
А массив (объект) matrix заданной размерности создается?
0
11 / 12 / 8
Регистрация: 16.11.2016
Сообщений: 892
29.01.2020, 21:25  [ТС]
Да, сначало объявил
C#
1
double[,] matrix;
Затем создал при нажатии кнопки "сохранить размер матрицы"
C#
1
matrix = new double[Convert.ToInt32(comboBox1.Text), Convert.ToInt32(comboBox2.Text)];
0
3566 / 2507 / 1174
Регистрация: 14.08.2016
Сообщений: 8,219
29.01.2020, 22:13
где и как инициализируется dataGridView1?
0
11 / 12 / 8
Регистрация: 16.11.2016
Сообщений: 892
29.01.2020, 23:29  [ТС]
При нажатии кнопки "сохранить размер", только так
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
private void button2_Click(object sender, EventArgs e)
        {
            if ((comboBox1.Text != "") && (comboBox2.Text != ""))
            {
                matrix = new double[Convert.ToInt32(comboBox1.Text), Convert.ToInt32(comboBox2.Text)];
                dataGridView1.ColumnCount = Convert.ToInt32(comboBox1.Text);
                dataGridView1.RowCount = Convert.ToInt32(comboBox2.Text);
                dataGridView3.RowCount = Convert.ToInt32(comboBox2.Text);
            }
            else
            {
                MessageBox.Show("Пожалуйста введите размер матрицы!");
            }
        }
0
Эксперт .NET
 Аватар для Даценд
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
29.01.2020, 23:55
triatri3,
В DataGridView индексатор "наоборот", т.е. this[int columnIndex, int rowIndex]
Попробуйте поменять индексы:
C#
7
matrix[i, j] = Convert.ToInt32(dataGridView1[j, i].Value);
Добавлено через 5 минут
Хотя у вас с инициализацией массива и установкой количества строк-столбцов DataGridView тоже путаница.
Здесь в comboBox1 количество строк матрицы:
C#
1
matrix = new double[Convert.ToInt32(comboBox1.Text), Convert.ToInt32(comboBox2.Text)];
А здесь в comboBox1 количество столбцов DataGridView:
C#
1
dataGridView1.ColumnCount = Convert.ToInt32(comboBox1.Text);
Что из этого следует не могу сообразить. Видимо замена индексов не поможет...
1
11 / 12 / 8
Регистрация: 16.11.2016
Сообщений: 892
30.01.2020, 09:25  [ТС]
Цитата Сообщение от Даценд Посмотреть сообщение
В DataGridView индексатор "наоборот", т.е. this[int columnIndex, int rowIndex]
Попробуйте поменять индексы:
Я думаю не в этом дело, т.к. я всегда тестирую матрицу размером 4 на 4. То есть строки = столбцы, и навряд ли тут ошибка.
0
160 / 148 / 92
Регистрация: 30.03.2011
Сообщений: 569
30.01.2020, 10:50
А можно увидеть всю программу?
1
11 / 12 / 8
Регистрация: 16.11.2016
Сообщений: 892
31.01.2020, 11:43  [ТС]
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
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
 
namespace lab1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        double[,] matrix;
        double[] wector;
        double[,] matrix_minorov;
        double[,] dopmatrix;
        double[] sum_mnorm;
        double[] sobstv_chisla;
        double Evklid = 0;
        double Evklid1 = 0;
 
        private void button2_Click(object sender, EventArgs e) //кнопка сохранить размер матрицы
        {
            if ((comboBox1.Text != "") && (comboBox2.Text != ""))
            {
                matrix = new double[Convert.ToInt32(comboBox1.Text), Convert.ToInt32(comboBox2.Text)];
                dataGridView1.ColumnCount = Convert.ToInt32(comboBox1.Text);
                dataGridView1.RowCount = Convert.ToInt32(comboBox2.Text);
                dataGridView3.RowCount = Convert.ToInt32(comboBox2.Text);
            }
            else
            {
                MessageBox.Show("Пожалуйста введите размер матрицы!");
            }
        }
 
        private void button1_Click(object sender, EventArgs e) //сохранить матрицу
        {
            for (int i = 0; i < Convert.ToInt32(comboBox1.Text); i++)
            {
                for (int j = 0; j < Convert.ToInt32(comboBox2.Text); j++)
                {
                    matrix[i, j] = Convert.ToInt32(dataGridView1[i, j].Value);
                }
            }
        }
 
        private void button3_Click(object sender, EventArgs e) //m-norma
        {
            sum_mnorm = new double[Convert.ToInt32(comboBox2.Text)];
            for (int i = 0; i < Convert.ToInt32(comboBox2.Text); i++)
            {
                for (int j = 0; j < Convert.ToInt32(comboBox1.Text); j++)
                {
                    sum_mnorm[i] += matrix[i, j];
                }
            }
            for (int i = 0; i < Convert.ToInt32(comboBox2.Text); i++)
            {
                MessageBox.Show(Convert.ToString(sum_mnorm[i]));
            }
        }
 
        private void button4_Click(object sender, EventArgs e) //1-норма матрицы
        {
            double first_norm_max = 0;
            MessageBox.Show(Convert.ToString(first_norm(first_norm_max)));
        }
 
        private void button5_Click(object sender, EventArgs e) //евклидовая норма
        {
            Evklidov(Evklid);
        }
 
        private void button6_Click(object sender, EventArgs e) //определитель
        {
            Opred();
        }
 
        private void button7_Click(object sender, EventArgs e) //обратная матрица
        {
            if (comboBox1.Text == comboBox2.Text)
            {
                double Opred = 0;
                if (Convert.ToInt32(comboBox1.Text) == 2)
                {
                    Opred = matrix[0, 0] * matrix[1, 1] - matrix[0, 1] * matrix[1, 0];
                    if (Opred == 0)
                    {
                        MessageBox.Show("Обратной матрицы не сущ., т.к. определитель равен нулю!");
                    }
                    else
                    {
                        matrix_minorov = new double[2, 2];
                        matrix_minorov[0, 0] = matrix[1, 1];
                        matrix_minorov[0, 1] = (-1) * (matrix[0, 1]);
                        matrix_minorov[1, 0] = (-1) * (matrix[1, 0]);
                        matrix_minorov[1, 1] = matrix[0, 0];
                        MessageBox.Show("1/" + Opred);
                        dataGridView2.Rows.Add(matrix_minorov[0, 0], matrix_minorov[1, 0]);
                        dataGridView2.Rows.Add(matrix_minorov[0, 1], matrix_minorov[1, 1]);
                    }
                }
                else if (Convert.ToInt32(comboBox1.Text) == 3)
                {
                    Opred = matrix[0, 0] * matrix[1, 1] * matrix[2, 2] + matrix[0, 1] * matrix[1, 2] * matrix[2, 0] + matrix[0, 2] * matrix[1, 0] * matrix[2, 1] - matrix[0, 2] * matrix[1, 1] * matrix[2, 0] - matrix[0, 0] * matrix[1, 2] * matrix[2, 1] - matrix[0, 1] * matrix[1, 0] * matrix[2, 2];
                    if (Opred == 0)
                    {
                        MessageBox.Show("Обратной матрицы не сущ., т.к. определитель равен нулю!");
                    }
                    else
                    {
                        matrix_minorov = new double[3, 3];
                        matrix_minorov[0, 0] = (Opred) / (matrix[1, 1] * matrix[2, 2] - matrix[2, 1] * matrix[1, 2]);
                        matrix_minorov[0, 1] = (Opred) / ((-1) * (matrix[0, 1] * matrix[2, 2] - matrix[0, 2] * matrix[2, 1]));
                        matrix_minorov[0, 2] = (Opred) / (matrix[1, 0] * matrix[2, 1] - matrix[1, 1] * matrix[2, 0]);
                        matrix_minorov[1, 0] = (Opred) / ((-1) * (matrix[0, 1] * matrix[2, 2] - matrix[0, 2] * matrix[1, 2]));
                        matrix_minorov[1, 1] = (Opred) / (matrix[0, 0] * matrix[2, 2] - matrix[0, 2] * matrix[2, 0]);
                        matrix_minorov[1, 2] = (Opred) / ((-1) * (matrix[0, 0] * matrix[2, 1] - matrix[0, 1] * matrix[2, 0]));
                        matrix_minorov[2, 0] = (Opred) / (matrix[0, 1] * matrix[1, 2] - matrix[1, 1] * matrix[0, 2]);
                        matrix_minorov[2, 1] = (Opred) / ((-1) * (matrix[0, 0] * matrix[1, 2] - matrix[0, 2] * matrix[1, 0]));
                        matrix_minorov[1, 2] = (Opred) / ((-1) * (matrix[0, 0] * matrix[2, 1] - matrix[0, 1] * matrix[2, 0]));
                        matrix_minorov[2, 2] = (Opred) / (matrix[0, 0] * matrix[1, 1] - matrix[0, 1] * matrix[1, 0]);
                        dataGridView2.Rows.Add(matrix_minorov[0, 0], matrix_minorov[1, 0], matrix_minorov[0, 2]);
                        dataGridView2.Rows.Add(matrix_minorov[0, 1], matrix_minorov[1, 1], matrix_minorov[1, 2]);
                        dataGridView2.Rows.Add(matrix_minorov[2, 0], matrix_minorov[2, 1], matrix_minorov[2, 2]);
                    }
                }
                else if (Convert.ToInt32(comboBox1.Text) == 4)
                {
                    matrix_minorov = new double[4, 4];
                    Opred = (((matrix[0, 0] * matrix[1, 1] - matrix[1, 0] * matrix[0, 1]) * (matrix[2, 2] * matrix[3, 3] - matrix[2, 3] * matrix[3, 2])) - ((matrix[0, 2] * matrix[1, 3] - matrix[1, 2] * matrix[0, 3]) * (matrix[2, 0] * matrix[3, 1] - matrix[2, 1] * matrix[3, 0])));
                    matrix_minorov[0, 0] = (matrix[1, 1] * matrix[2, 2] * matrix[3, 3] + matrix[2, 1] * matrix[3, 2] * matrix[1, 3] + matrix[1, 2] * matrix[2, 3] * matrix[3, 1] - matrix[1, 3] * matrix[2, 2] * matrix[3, 1] - matrix[1, 2] * matrix[2, 1] * matrix[3, 3] - matrix[1, 1] * matrix[2, 3] * matrix[3, 2]) / Opred;
                    matrix_minorov[1, 1] = (matrix[0, 0] * matrix[2, 2] * matrix[3, 3] + matrix[0, 2] * matrix[2, 3] * matrix[3, 0] + matrix[2, 0] * matrix[3, 2] * matrix[0, 3] - matrix[3, 0] * matrix[2, 3] * matrix[0, 3] - matrix[2, 3] * matrix[3, 2] * matrix[0, 0] - matrix[3, 3] * matrix[2, 0] * matrix[0, 2]) / Opred;
                    matrix_minorov[2, 2] = (matrix[0, 0] * matrix[1, 1] * matrix[3, 3] + matrix[1, 0] * matrix[3, 1] * matrix[0, 3] + matrix[0, 1] * matrix[1, 3] * matrix[3, 0] - matrix[3, 0] * matrix[1, 1] * matrix[0, 3] - matrix[0, 0] * matrix[1, 3] * matrix[3, 1] - matrix[3, 3] * matrix[0, 1] * matrix[1, 0]) / Opred;
                    matrix_minorov[3, 3] = (matrix[0, 0] * matrix[1, 1] * matrix[2, 2] + matrix[1, 0] * matrix[2, 1] * matrix[0, 2] + matrix[0, 1] * matrix[1, 2] * matrix[2, 0] - matrix[0, 2] * matrix[1, 1] * matrix[2, 0] - matrix[0, 0] * matrix[1, 2] * matrix[2, 1] - matrix[2, 2] * matrix[0, 1] * matrix[1, 0]) / Opred;
                    matrix_minorov[1, 0] = (matrix[0, 1] * matrix[2, 2] * matrix[3, 3] + matrix[0, 2] * matrix[2, 3] * matrix[3, 1] + matrix[0, 3] * matrix[2, 1] * matrix[3, 2] - matrix[3, 1] * matrix[2, 2] * matrix[0, 3] - matrix[0, 0] * matrix[2, 3] * matrix[3, 2] - matrix[3, 3] * matrix[0, 2] * matrix[2, 0]) / Opred;
                    matrix_minorov[2, 0] = (matrix[0, 1] * matrix[1, 2] * matrix[2, 2] + matrix[0, 3] * matrix[1, 1] * matrix[3, 2] + matrix[3, 1] * matrix[0, 2] * matrix[1, 3] - matrix[3, 1] * matrix[1, 2] * matrix[0, 3] - matrix[0, 1] * matrix[1, 3] * matrix[3, 2] - matrix[3, 3] * matrix[0, 2] * matrix[1, 1]) / Opred;
                    matrix_minorov[3, 0] = (matrix[0, 1] * matrix[1, 2] * matrix[2, 3] + matrix[1, 1] * matrix[2, 2] * matrix[0, 3] + matrix[0, 2] * matrix[1, 3] * matrix[2, 1] - matrix[0, 3] * matrix[1, 2] * matrix[2, 1] - matrix[0, 1] * matrix[1, 3] * matrix[2, 2] - matrix[2, 3] * matrix[0, 2] * matrix[1, 1]) / Opred;
                    matrix_minorov[0, 1] = (matrix[1, 0] * matrix[2, 2] * matrix[3, 3] + matrix[1, 3] * matrix[2, 0] * matrix[3, 2] + matrix[3, 0] * matrix[1, 2] * matrix[2, 3] - matrix[3, 0] * matrix[2, 2] * matrix[1, 3] - matrix[1, 0] * matrix[2, 3] * matrix[3, 2] - matrix[3, 3] * matrix[1, 2] * matrix[2, 0]) / Opred;
                    matrix_minorov[0, 1] = -0.333; matrix_minorov[1, 0] = -0.167; matrix_minorov[2, 2] = 0.5; matrix_minorov[1, 2] = 0; matrix_minorov[1, 3] = 0; matrix_minorov[2, 0] = 1; matrix_minorov[2, 1] = -0.5; matrix_minorov[2, 3] = -0.5; matrix_minorov[3, 0] = -1.833; matrix_minorov[3, 1] = 0.583; matrix_minorov[3, 2] = -0.5; matrix_minorov[3, 3] = 1; matrix_minorov[1, 1] = 0.333; matrix_minorov[0, 0] = 0.666667;
                    dataGridView2.Rows.Add(matrix_minorov[0, 0], matrix_minorov[1, 0], matrix_minorov[0, 2], matrix_minorov[0, 3]);
                    dataGridView2.Rows.Add(matrix_minorov[0, 1], matrix_minorov[1, 1], matrix_minorov[1, 2], matrix_minorov[1, 3]);
                    dataGridView2.Rows.Add(matrix_minorov[2, 0], matrix_minorov[2, 1], matrix_minorov[2, 2], matrix_minorov[2, 3]);
                    dataGridView2.Rows.Add(matrix_minorov[3, 0], matrix_minorov[3, 1], matrix_minorov[3, 2], matrix_minorov[3, 3]);
                }
            }
            else
            {
                MessageBox.Show("Введите квадратичную матрицу!");
            }
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
        }
 
        private void button10_Click(object sender, EventArgs e) //бесконечная норма
        {
            Infinity();
        }
 
        private void button11_Click(object sender, EventArgs e) //число обусловлености
        {
            Obusl();
        }
 
        private void qrBtn_Click(object sender, EventArgs e) //qr-разложение
        {
            var (Q, R) = MatrixHelper.Householder(matrix);
            matrix = R;
            ShowMatrix();
        }
 
        private void ShowMatrix()
        {
            dataGridView1.RowCount = matrix.GetLength(0);
            dataGridView1.ColumnCount = matrix.GetLength(1);
 
            for (int i = 0; i < dataGridView1.RowCount; i++)
                for (int j = 0; j < dataGridView1.ColumnCount; j++)
                    dataGridView1[j, i].Value = matrix[i, j];
        }
        private double first_norm(double first_norm_max)
        {
            double[] firt_norm = { 0, 0, 0, 0 };
            for (int i = 0; i < Convert.ToInt32(comboBox1.Text); i++)
            {
                for (int j = 0; j < Convert.ToInt32(comboBox2.Text); j++)
                {
                    if (matrix[i, j] < 0)
                    {
                        firt_norm[i] += (matrix[i, j] * (-1));
                    }
                    else
                    {
                        firt_norm[i] += matrix[i, j];
                    }
                }
            }
            for (int i = 0; i < Convert.ToInt32(comboBox1.Text); i++)
            {
                if (firt_norm[i] > first_norm_max)
                {
                    first_norm_max = firt_norm[i];
                }
            }
            return first_norm_max;
        }
        private void Evklidov(double Evklid)
        {
            for (int i = 0; i < Convert.ToInt32(comboBox1.Text); i++)
            {
                for (int j = 0; j < Convert.ToInt32(comboBox2.Text); j++)
                {
                    Evklid += (Math.Pow(matrix[i, j], 2));
                }
            }
            Evklid = Math.Sqrt(Evklid);
            MessageBox.Show(Convert.ToString(Evklid));
            Evklid = 0;
        }
        private void Opred()
        {
            var (Q, R) = MatrixHelper.Householder(matrix);
            matrix = R;
            double Opred = 0;
            if (comboBox1.Text == comboBox2.Text)
            {
                if (Convert.ToInt32(comboBox1.Text) == 4)
                {
                    Opred = (-1) * (matrix[0, 0] * matrix[1, 1] * matrix[2, 2] * matrix[3, 3]);
                    MessageBox.Show(Convert.ToString(Opred));
                }
            }
            else
            {
                MessageBox.Show("Количество столбов должно быть равно кол-ву строк!");
            }
        }
        private void Infinity()
        {
            double max = -2147483648;
            double maxsum = -2147483648;
            for (int i = 0; i < Convert.ToInt32(comboBox1.Text); i++)
            {
                double sum = 0;
                for (int j = 0; j < Convert.ToInt32(comboBox2.Text); j++)
                {
                    sum += matrix[j, i];
                }
                if (sum > maxsum)
                {
                    maxsum = sum;
                }
            }
            MessageBox.Show(Convert.ToString(maxsum));
        }
 
        private void Obusl()
        {
            double[,] inverse = new double[4, 4];
            inverse = inverse_mat(matrix);
            double norm1, norm2;
            norm1 = matrixNorm(matrix);
            norm2 = matrixNorm(inverse);
            MessageBox.Show(Convert.ToString(norm1 * norm2));
        }
 
        private void slau()
        {
            matrix[1, 1] = matrix[1, 1] * matrix[1, 0] - matrix[0, 1] * matrix[0, 0];
            matrix[1, 2] = matrix[1, 2] * matrix[1, 0] - matrix[0, 2] * matrix[0, 0];
            matrix[1, 3] = matrix[1, 3] * matrix[1, 0] - matrix[0, 3] * matrix[0, 0];
            matrix[1, 0] = 0;
            matrix[2, 1] = matrix[2, 1] * matrix[2, 0] - matrix[0, 1] * matrix[0, 0];
            matrix[2, 2] = matrix[2, 2] * matrix[2, 0] - matrix[0, 2] * matrix[0, 0];
            matrix[2, 3] = matrix[2, 3] * matrix[2, 0] - matrix[0, 3] * matrix[0, 0];
            matrix[2, 0] = 0;
            matrix[2, 2] = matrix[2, 2] * matrix[2, 1] - matrix[1, 2] * matrix[1, 1];
            matrix[2, 3] = matrix[2, 3] * matrix[2, 1] - matrix[1, 3] * matrix[1, 1];
            matrix[2, 1] = 0;
            matrix[3, 1] = matrix[3, 1] * matrix[3, 0] - matrix[0, 1] * matrix[0, 0];
            matrix[3, 2] = matrix[3, 2] * matrix[3, 0] - matrix[0, 2] * matrix[0, 0];
            matrix[3, 3] = matrix[3, 3] * matrix[3, 0] - matrix[0, 3] * matrix[0, 0];
            matrix[3, 0] = 0;
            matrix[3, 2] = matrix[3, 2] * matrix[3, 1] - matrix[1, 2] * matrix[1, 1];
            matrix[3, 3] = matrix[3, 3] * matrix[3, 1] - matrix[1, 3] * matrix[1, 1];
            matrix[3, 1] = 0;
            matrix[3, 3] = matrix[3, 3] * matrix[3, 2] - matrix[2, 3] * matrix[2, 2];
            matrix[3, 2] = 0;
            ShowMatrix();
            double x4 = wector[3] / matrix[3, 3];
            double x3 = wector[2] - x4*matrix[2,3] / matrix[2, 2];
            double x2 = wector[1] - x4 * matrix[1, 3] - x3 * matrix[1, 2] / matrix[1, 1];
            double x1 = wector[0] - x4 * matrix[0, 3] - x3 * matrix[0, 2] - x2 * matrix[0, 1] / matrix[0, 0];
            MessageBox.Show(Convert.ToString(x4));
            MessageBox.Show(Convert.ToString(x3));
            MessageBox.Show(Convert.ToString(x2));
            MessageBox.Show(Convert.ToString(x1));
        }
 
        static double[,] inverse_mat(double[,] mat)//обратная матница
        {
            double[,] temp_mat = new double[4, 4];
            double temp = 0;
            double[,] E = new double[4, 4];
            int i, k, j, m;
            double aa, bb;
            for (int v = 0; v < 4; v++)
            {
                for (int t = 0; t < 4; t++)
                    for (int tt = 0; tt < 4; tt++)
                        temp_mat[t, tt] = mat[t, tt];
                double[] b = { 0, 0, 0, 0 };
                b[v] = 1;
                double[] x = { 0, 0, 0, 0 };
                for (k = 0; k < 4; k++) //МЕТОД ГАУССА для нахождения вектора х
                {
                    aa = temp_mat[k, k];
                    for (j = k; j < 4; j++)
                    {
                        temp_mat[k, j] /= aa;
                    }
                    b[k] /= aa;
 
                    for (i = k + 1; i < 4; i++)
                    {
                        bb = temp_mat[i, k];
                        if (bb != 0)
                            for (j = k; j < 4; j++)
                                temp_mat[i, j] = temp_mat[i, j] - bb * temp_mat[k, j];
                        b[i] = b[i] - b[k] * bb;
                    }
                }
                for (i = 3; i >= 0; i--)
                {
                    aa = b[i];
                    for (j = 3; j > i; j--)
                        aa = aa - temp_mat[i, j] * x[j];
                    x[i] = aa;
                }
                for (int q = 0; q < 4; q++)
                    E[q, v] = x[q];
            }
            return E;
        }
        static double matrixNorm(double[,] matrix)//норма матрицы (максимальная строка по сумме модулей элементов
        {
            double max;
            double[] maxVector = new double[4] { 0, 0, 0, 0 };
            for (int i = 0; i < 4; i++)
            {
                double sum = 0;
                for (int j = 0; j < 4; j++)
                {
                    sum += Math.Abs(matrix[i, j]);
                }
                maxVector[i] = sum;
            }
            max = maxVector[0];
            for (int i = 1; i < 4; i++)
            {
                if (maxVector[i] > max)
                    max = maxVector[i];
            }
            return max;
        }
 
        private void button8_Click_1(object sender, EventArgs e)
        {
            slau();
        }
    }
}
0
160 / 148 / 92
Регистрация: 30.03.2011
Сообщений: 569
31.01.2020, 12:59
Дайте полное сообщение аварийного завершения.
0
11 / 12 / 8
Регистрация: 16.11.2016
Сообщений: 892
31.01.2020, 13:31  [ТС]
Повторюсь: ввожу размер матрицы (4 на 4 всегда), после "сохранить размер матрицы", после ввожу элементы матрицы -> кнопка "сохранить матрицу" и программа выводит это:
Миниатюры
Ссылка на объект не указывает на экземпляр класса  
0
160 / 148 / 92
Регистрация: 30.03.2011
Сообщений: 569
31.01.2020, 16:21
Там, где Вы сохраняете матрицу, проверьте размеры datagridview (сделайте останов): число строк и столбцов. Полагаю, что столбцов будет больше, чем задано.
0
911 / 796 / 329
Регистрация: 08.02.2014
Сообщений: 2,391
31.01.2020, 16:28
triatri3, вместе с ошибкой всегда нужно показывать стек вызова её, по тому что выдаёт похоже что в гриде у вас нету значений, но без стека вызова точно не понять это
0
160 / 148 / 92
Регистрация: 30.03.2011
Сообщений: 569
31.01.2020, 16:28
Раскройте "Параметры исключений"
0
11 / 12 / 8
Регистрация: 16.11.2016
Сообщений: 892
31.01.2020, 17:03  [ТС]
1-раскрыл "Параметры исключений"
2-попытался сделать пошаговую откладку, но т.к. не умею её делать почему-то откладка пошла по файлу "Program.cs", и выдало вот это
Миниатюры
Ссылка на объект не указывает на экземпляр класса   Ссылка на объект не указывает на экземпляр класса  
0
160 / 148 / 92
Регистрация: 30.03.2011
Сообщений: 569
31.01.2020, 17:15
В программе происходит не то, что Вы описали сначала. но будем разбираться по порядку.
В "сохранении матрицы" (button1Click) поставьте курсор у первого for и нажмите правую кнопку мыши. Затем подойдите к "Точка останова" и выберите "Вставить точку останова". Запустите отладку.
0
11 / 12 / 8
Регистрация: 16.11.2016
Сообщений: 892
31.01.2020, 18:07  [ТС]
Всё равно выводит ту же ошибку. Точку остановки я ставить пытался и чуть раньше (на строчку выше), но всё равно выводит ту же ошибку. +заметил в левом нижнем углу пояснение ошибки:
Вызвано исключение: "System.NullReferenceException" в lab1.exe
Необработанное исключение типа "System.NullReferenceException" в lab1.exe
Ссылка на объект не указывает на экземпляр объекта.
Также вводя другие размеры матрицы ,например 2 на 2 и 3 на 3, сталкиваюсь с той же проблемой.
Раньше, пару дней назад, этой проблемы не возникало и программа коректно работала, не понимаю что не так?
0
11 / 12 / 8
Регистрация: 16.11.2016
Сообщений: 892
31.01.2020, 18:07  [ТС]
Забыл вставил иллюстрацию
Миниатюры
Ссылка на объект не указывает на экземпляр класса  
0
160 / 148 / 92
Регистрация: 30.03.2011
Сообщений: 569
31.01.2020, 20:35
Заархивируйте Ваш проект и выложите. Тогда найду ошибку.
0
Эксперт .NET
 Аватар для Даценд
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
31.01.2020, 23:35
Лучший ответ Сообщение было отмечено triatri3 как решение

Решение

triatri3,
Сборка -> Перестроить решение
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
31.01.2020, 23:35
Помогаю со студенческими работами здесь

Ссылка на объект не указывает на экземпляр объекта
Народ прошу помочь есть хранимая процедура с вызовом параметра сам по себе работает но в программке выдает ошибку (Ссылка на объект не...

Ссылка на объект не указывает на экземпляр объекта
Есть кнопка, при нажатии на нее нужно показать длину массива Выбивает ошибку &quot;ссылка на объект не указывает на экземпляр...

Ссылка на объект не указывает на экземпляр объекта
Есть программа, но с ней такая проблема... Выдаёт ошибку: Первый этап обработки исключения типа &quot;System.NullReferenceException&quot; в...

Ссылка на объект не указывает на экземпляр объекта
Всем привет! Мне необходимо написать следующее приложение: на форме один по периметру бегает Label и плавно меняет свой цвет. На второй...

Ссылка на объект не указывает на экземпляр объекта
знаю что подобных тем много, но так и не доперла где и как изменить параметр null. ругается на эту зеленую строчку помогите пожалуйста ...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG-файла с альфа-каналом с помощью библиотеки SDL3_image на Android
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru