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

Обращение матрицы разбиением на клетки

19.11.2019, 16:29. Показов 3320. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здраствуйте, мне нужно реализовать метод разбитие матрицы на клетки. Делаю я это в Windows Form. Реализовал метод для 2 button, которые создают матрицу. Вот он

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
private void button1_Click(object sender, EventArgs e)
        {
            int a = int.Parse(textBox1.Text);
            int b = int.Parse(textBox2.Text);
            for (int i = 0; i < b; i++)
            {
                dataGridView1.Columns.Add("", "");
            }
            for (int i = 0; i < a; i++)
            {
                dataGridView1.Rows.Add();
            }
 
        }
        private void button2_Click(object sender, EventArgs e)
        {
            int a = int.Parse(textBox3.Text);
            int b = int.Parse(textBox4.Text);
            for (int i = 0; i < b; i++)
            {
                dataGridView2.Columns.Add("", "");
            }
            for (int i = 0; i < a; i++)
            {
                dataGridView2.Rows.Add();
            }
        }
Тоесть, у меня например есть матрица
1 2 3 4
5 2 1 3
И мне надо разбить её на такие клетки:
1 2
5 2
и
3 4
1 3
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
19.11.2019, 16:29
Ответы с готовыми решениями:

Обращение матрицы методом деления на клетки
Всем привет. Я заочник а тут сесия скоро (((( так вот есть задание &quot;Обращение матрицы методом деления на клетки&quot; тему незнаю в...

В таблице клетки заполнены случайным образом цифрами от 0 до 9. Найти маршрут из клетки A(1,1) в клетку A(N,N)
В таблице NхN, клетки заполнены случайным образом цифрами от 0 до 9. Найти маршрут из клетки A(1,1) в клетку A(N,N) такой, что: 1) он...

Сколькими различными способами можно дойти с клетки 1 до клетки 8?
Задача с теста в день программиста! Сегодня наткулся на тестик, решил позабавиться и залип над задачей на несколько часов, потому что...

11
 Аватар для Enifan
1849 / 1191 / 501
Регистрация: 14.10.2018
Сообщений: 3,220
19.11.2019, 16:50
Лучший ответ Сообщение было отмечено Darwins как решение

Решение

Darwins, разбить текущую матрицу не сложно. Не ясно несколько моментов:
1) какие матрицы вам надо разбивать
2) какие именно квадраты должны быть
3) что будет если матрица получится 5х2 а разбивать надо на 2х2
Вот консольный вариант, в WinForme суть таже
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
using System;
 
class Programm
{
    static void Main()
    {
        const int HEIGHT = 2;
        const int WIDTH = 4;
 
        int[,] arr = new int[HEIGHT, WIDTH]
        {
            { 1, 2, 3, 4 },
            { 5, 2, 1, 3 }
        };
 
        int[,] newArrOne = new int[HEIGHT, WIDTH / 2];
        int[,] newArrTwo = new int[HEIGHT, WIDTH / 2];
 
        for (int i = 0; i < HEIGHT; i++)
        {
            for (int j = 0; j < WIDTH / 2; j++)
            {
                newArrOne[i, j] = arr[i, j];
                newArrTwo[i, j] = arr[i, WIDTH / 2 + j];
            }
        }
 
        Console.WriteLine("Матрица arr");
        for (int i = 0; i < HEIGHT; i++)
        {
            for (int j = 0; j < WIDTH; j++)
            {
                Console.Write(arr[i, j] + " ");
            }
            Console.WriteLine();
        }
 
        Console.WriteLine("Матрица newArrOne");
        for (int i = 0; i < HEIGHT; i++)
        {
            for (int j = 0; j < WIDTH / 2; j++)
            {
                Console.Write(newArrOne[i, j] + " ");
            }
            Console.WriteLine();
        }
 
        Console.WriteLine("Матрица newArrTwo");
        for (int i = 0; i < HEIGHT; i++)
        {
            for (int j = 0; j < WIDTH / 2; j++)
            {
                Console.Write(newArrTwo[i, j] + " ");
            }
            Console.WriteLine();
        }
 
        Console.ReadLine();
    }
}
1
0 / 0 / 0
Регистрация: 06.04.2019
Сообщений: 12
20.11.2019, 17:24  [ТС]
Цитата Сообщение от Enifan Посмотреть сообщение
Darwins, разбить текущую матрицу не сложно. Не ясно несколько моментов:
1) какие матрицы вам надо разбивать
2) какие именно квадраты должны быть
3) что будет если матрица получится 5х2 а разбивать надо на 2х2
Вот консольный вариант, в WinForme суть таже
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
using System;
 
class Programm
{
    static void Main()
    {
        const int HEIGHT = 2;
        const int WIDTH = 4;
 
        int[,] arr = new int[HEIGHT, WIDTH]
        {
            { 1, 2, 3, 4 },
            { 5, 2, 1, 3 }
        };
 
        int[,] newArrOne = new int[HEIGHT, WIDTH / 2];
        int[,] newArrTwo = new int[HEIGHT, WIDTH / 2];
 
        for (int i = 0; i < HEIGHT; i++)
        {
            for (int j = 0; j < WIDTH / 2; j++)
            {
                newArrOne[i, j] = arr[i, j];
                newArrTwo[i, j] = arr[i, WIDTH / 2 + j];
            }
        }
 
        Console.WriteLine("Матрица arr");
        for (int i = 0; i < HEIGHT; i++)
        {
            for (int j = 0; j < WIDTH; j++)
            {
                Console.Write(arr[i, j] + " ");
            }
            Console.WriteLine();
        }
 
        Console.WriteLine("Матрица newArrOne");
        for (int i = 0; i < HEIGHT; i++)
        {
            for (int j = 0; j < WIDTH / 2; j++)
            {
                Console.Write(newArrOne[i, j] + " ");
            }
            Console.WriteLine();
        }
 
        Console.WriteLine("Матрица newArrTwo");
        for (int i = 0; i < HEIGHT; i++)
        {
            for (int j = 0; j < WIDTH / 2; j++)
            {
                Console.Write(newArrTwo[i, j] + " ");
            }
            Console.WriteLine();
        }
 
        Console.ReadLine();
    }
}
Извините, что напрягаю, можете помочь с еще одним. У меня есть например матрица 2 на 2:
1 5
1 6
Мне нужно 1*6 - 1*5, как мне это можно реализовать с dataGridView??
И если вам не сложно, можете подсказать, как разбить матрицу 4 на 4 , или 6 на 6 на клетки 2 на 2, а то у меня что-то не выходит, если можете то с использованием dataGrid
0
 Аватар для Enifan
1849 / 1191 / 501
Регистрация: 14.10.2018
Сообщений: 3,220
20.11.2019, 18:19
Цитата Сообщение от Darwins Посмотреть сообщение
как разбить матрицу 4 на 4 , или 6 на 6 на клетки 2 на 2
это не сложно. Опять таки консольный вариант, сделан для наглядности
Кликните здесь для просмотра всего текста
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
using System;
 
class Program
{
    static void Main()
    {
        Random random = new Random();
        const int HEIGHT = 8;
        const int WIDTH = 8;
 
        int[,] arr = new int[HEIGHT, WIDTH];
        int[][,] arr2 = new int[arr.Length / 4][,];
        for (int i = 0; i < arr2.Length; i++)
            arr2[i] = new int[2, 2];
 
        Console.WriteLine("Основной массив:");
        for (int i = 0; i < HEIGHT; i++)
        {
            for (int j = 0; j < WIDTH; j++)
            {
                arr[i, j] = random.Next(-100, 101);
                Console.Write(arr[i, j] + "\t");
            }
            Console.WriteLine();
        }
        Console.WriteLine();
 
        int indexArr2 = 0;
        for (int i = 0; i < HEIGHT; i += 2)
        {
            for (int j = 0; j < WIDTH; j += 2)
            {
                arr2[indexArr2][0, 0] = arr[i, j];
                arr2[indexArr2][0, 1] = arr[i, j + 1];
                arr2[indexArr2][1, 0] = arr[i + 1, j];
                arr2[indexArr2][1, 1] = arr[i + 1, j + 1];
                indexArr2++;
            }
        }
 
        Console.WriteLine("Много маленьких массивов:");
        for (int i = 0; i < arr2.Length; i++)
        {
            Console.WriteLine($"\t{i} массив:");
            for (int j = 0; j < 2; j++)
            {
                for (int k = 0; k < 2; k++)
                {
                    Console.Write(arr2[i][j, k] + "\t");
                }
                Console.WriteLine();
            }
        }
 
        Console.ReadKey();
    }
}


Цитата Сообщение от Darwins Посмотреть сообщение
Мне нужно 1*6 - 1*5
C#
1
arr[0, 0] * arr[1, 1] - arr[0, 1] * arr[1, 0];
Цитата Сообщение от Darwins Посмотреть сообщение
реализовать с dataGridView
суть таже
C#
1
2
3
            int total = 
            (int)dataGridView1.Rows[0].Cells[0].Value * (int)dataGridView1.Rows[1].Cells[1].Value -
            (int)dataGridView1.Rows[0].Cells[1].Value * (int)dataGridView1.Rows[1].Cells[0].Value;
Только есть честно я не совсем понял, как происходит задача. Я так понимаю что есть определенное кол-во ячеек в DGV, в каждой ячейке записаны цифры, их надо разделить на квадраты 2х2, а дальше что со значениями делать?
Или я не так понял общую задачу?
1
0 / 0 / 0
Регистрация: 06.04.2019
Сообщений: 12
20.11.2019, 19:12  [ТС]
Цитата Сообщение от Enifan Посмотреть сообщение
Только есть честно я не совсем понял, как происходит задача. Я так понимаю что есть определенное кол-во ячеек в DGV, в каждой ячейке записаны цифры, их надо разделить на квадраты 2х2, а дальше что со значениями делать?
Или я не так понял общую задачу?
Ну если брать общую задачу, то мне нужно реализовать метод обращения матрицы с помощью разбития на клетки.
Как я понял из сайтов в интернете, мне нужно Квардратную матрицу разбить на матрицы 2 на 2, и с ними уже работать. Но я не очень понимал, как мне добираться до елементов в этой матрице, сейчас попробую метод, который вы написали выше, думаю, разберусь. Большое спасибо

Добавлено через 39 минут
Цитата Сообщение от Enifan Посмотреть сообщение
суть таже
C#
Выделить код
1
2
3
int total =
(int)dataGridView1.Rows[0].Cells[0].Value * (int)dataGridView1.Rows[1].Cells[1].Value -
(int)dataGridView1.Rows[0].Cells[1].Value * (int)dataGridView1.Rows[1].Cells[0].Value;
Еще извиняюсь, выбивает вот такое вот исключение System.InvalidCastException: "Specified cast is not valid."
Может вы знаете, почему?
0
 Аватар для Enifan
1849 / 1191 / 501
Регистрация: 14.10.2018
Сообщений: 3,220
20.11.2019, 19:28
Цитата Сообщение от Darwins Посмотреть сообщение
исключение
либо текущей ячейки не существует в GVD (не создано нужное кол-во строк или столбцов), либо значение пустое в одной из ячеек, либо невозможно сделать приведение типов к int'у. Больше поводов для исключений нет.

кстати задать нужное кол-во строк и ячеек можно так (только так лучше не делать, когда там уже есть значения, можно удалить нужные ячейки)
C#
1
2
dataGridView1.RowCount = int.Parse(textBox1.Text);
dataGridView1.ColumnCount = int.Parse(textBox2.Text);
0
0 / 0 / 0
Регистрация: 06.04.2019
Сообщений: 12
20.11.2019, 19:36  [ТС]
Цитата Сообщение от Enifan Посмотреть сообщение
либо текущей ячейки не существует в GVD (не создано нужное кол-во строк или столбцов), либо значение пустое в одной из ячеек, либо невозможно сделать приведение типов к int'у. Больше поводов для исключений нет.
С этим я смог разобраться, у меня есть еще 1, надеюсь последний вопрос )
C#
1
2
3
4
5
6
7
int a11 =
                int.Parse(dataGridView2.Rows[0].Cells[0].Value.ToString()) * int.Parse(dataGridView2.Rows[1].Cells[1].Value.ToString()) -
                int.Parse(dataGridView2.Rows[0].Cells[1].Value.ToString()) * int.Parse(dataGridView2.Rows[1].Cells[0].Value.ToString());
            label3.Text = a11.ToString();
            double A00 = (1 / a11) * int.Parse(dataGridView2.Rows[0].Cells[0].Value.ToString());
            
            label4.Text = A00.ToString();
Вот, но почему-то в лабел4 выводит 0, навеное не правильно записал формулу саму.Не знаете?
0
 Аватар для Enifan
1849 / 1191 / 501
Регистрация: 14.10.2018
Сообщений: 3,220
20.11.2019, 19:42
C#
1
(1 / a11)  // тип int, дробная часть отпадает, в итоге 0
заменить на
C#
1
(1.0 / a11) // тип double
1
0 / 0 / 0
Регистрация: 06.04.2019
Сообщений: 12
20.11.2019, 20:15  [ТС]
А ще вопрос,
C#
1
double A00 = (1.0 / a11) * int.Parse(dataGridView2[i, j].Value.ToString());
Могу ли я сделать вот так?Тобиш, умножить сразу на всю матрицу, и если там можно, то могу ли я потому как-то вывести эту матрицу, которая умноженая уже в другой DGV например?И как?
Я пытался создать новый DGV, и как-то вывести туда эти значения, но у меня не получилось

Добавлено через 39 секунд
Цитата Сообщение от Enifan Посмотреть сообщение
заменить на
Спасибо, это помогло)
0
 Аватар для Enifan
1849 / 1191 / 501
Регистрация: 14.10.2018
Сообщений: 3,220
20.11.2019, 20:22
Darwins, 2-ой DGV создается с помощью WinForm (можно и в коде создать, но нужно ли ?))
Значения в ячейках должны быть нужного типа
C#
1
2
3
4
5
6
7
8
9
10
11
12
            double A00 = 0.11;
            dataGridView2.RowCount = dataGridView1.RowCount;
            dataGridView2.ColumnCount = dataGridView1.ColumnCount;
 
            for (int i = 0; i < dataGridView1.RowCount; i++)
            {
                for (int j = 0; j < dataGridView1.ColumnCount; j++)
                {
                    dataGridView2.Rows[i].Cells[j].Value =
                    (double)dataGridView1.Rows[i].Cells[j].Value * A00;
                }
            }
1
0 / 0 / 0
Регистрация: 06.04.2019
Сообщений: 12
20.11.2019, 23:24  [ТС]
2-ой DGV создается с помощью WinForm (можно и в коде создать, но нужно ли ?))
Значения в ячейках должны быть нужного типа
Спасибо большое, вроди во всём разобрался, если еще будут вопросы, то задам их сюда))

Добавлено через 26 минут
[quote="Enifan;14015026"]2-ой DGV создается с помощью WinForm (можно и в коде создать, но нужно ли ?))
Значения в ячейках должны быть нужного типа
А вот еще, теперь точно последний вопросик, у меня есть 4 матрицы 2 на 2, как мне их обьединить в 1 4 на 4??

Добавлено через 2 минуты
А вот еще вопрос, у меня есть 4 матрицы 2 на 2, как мне их можно обьединить в 1 матрицу 4 на 4??

Добавлено через 59 минут
Цитата Сообщение от Enifan Посмотреть сообщение
2-ой DGV создается с помощью WinForm (можно и в коде создать, но нужно ли ?))
Значения в ячейках должны быть нужного типа
Если быть точнее, то у меня есть
C#
1
2
3
4
dataGridView3.Rows[q].Cells[w].Value = A1 - A0;
                            double matrix1 = double.Parse(dataGridView7.Rows[i].Cells[j].Value.ToString()) + X * double.Parse(dataGridView3.Rows[q].Cells[w].Value.ToString()) * Y;
                            double matrix2 = -X * double.Parse(dataGridView3.Rows[q].Cells[w].Value.ToString());
                            double matrix3 = -double.Parse(dataGridView3.Rows[q].Cells[w].Value.ToString()) * Y;
Эти 4 матрицы, как их можно соеденить в одну?
0
 Аватар для Enifan
1849 / 1191 / 501
Регистрация: 14.10.2018
Сообщений: 3,220
21.11.2019, 14:42
Darwins, в вашем последнем коде матрицы не видно, только 4 значения
Цитата Сообщение от Darwins Посмотреть сообщение
4 матрицы, как их можно соеденить в одну
с помощью цикла не знаю как, если только отдельный метод писать. а если банально то так
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
        int[,] arr = new int[4, 4];
 
        int[,] a1 = new int[2, 2];
        int[,] a2 = new int[2, 2];
        int[,] a3 = new int[2, 2];
        int[,] a4 = new int[2, 2];
 
        arr[0, 0] = a1[0, 0];
        arr[0, 1] = a1[0, 1];
        arr[1, 0] = a1[1, 0];
        arr[1, 1] = a1[1, 1];
 
        arr[2, 0] = a2[0, 0];
        arr[2, 1] = a2[0, 1];
        arr[3, 0] = a2[1, 0];
        arr[3, 1] = a2[1, 1];
 
        arr[0, 3] = a3[0, 0];
        arr[0, 3] = a3[0, 1];
        arr[1, 2] = a3[1, 0];
        arr[1, 3] = a3[1, 1];
 
        arr[2, 2] = a4[0, 0];
        arr[2, 3] = a4[0, 1];
        arr[3, 2] = a4[1, 0];
        arr[3, 3] = a4[1, 1];
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.11.2019, 14:42
Помогаю со студенческими работами здесь

В таблице из N строк и N столбцов клетки заполнены цифрами от 0 до 9. Требуется найти такой путь из клетки (1, 1) в клетку (N, N
В таблице из N строк и N столбцов клетки заполнены цифрами от 0 до 9. Требуется найти такой путь из клетки (1, 1) в клетку (N, N), чтобы...

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

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

Реализовать умножение матрицы, транспонирование матрицы, обращение матрицы
Реализовать умножение матрицы, транспонирование матрицы, (функция должна быть универсальной) обращение матрицы (процесс такой матрицы, что...

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


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Знаешь почему 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 Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru