Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.61/18: Рейтинг темы: голосов - 18, средняя оценка - 4.61
0 / 0 / 0
Регистрация: 31.03.2014
Сообщений: 12
1
.NET 4.x

Перемножение матриц используя Datagridview

07.01.2015, 15:16. Показов 3666. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день.

Работаю с C# Windows Forms. Нужна помощь, чтобы разобраться. Есть 3 datagridview на Form. Два datagridviews заполняются рандомными матрицами одинаковой размерности. к примеру 2х2; По кнопке происходит переумножение этих матриц.
Загвоздка возникла в том как присвоить значения строк Datagridview1 к массиву array, а столбцы Datagridview2 к массиву array2;

C#
1
2
3
4
5
6
7
8
9
10
11
12
private void button2_Click(object sender, EventArgs e)
     {
            
            int i, j;
            int raz = Convert.ToInt32(textBox1.Text); // размерность матриц
            
            dataGridView4.RowCount = Convert.ToInt32(textBox1.Text); // задание количества строк
            dataGridView4.ColumnCount = Convert.ToInt32(textBox1.Text);// задание количества столбцов
            String[,] array = new String[i, j];  // Массив для Datagridview1
            String[,] array2 = new String[i, j]; // Массив для Datagridview2
                    
                }
Как перемножить матрицы я знаю. Строка DGV1 на столбец DGV2.
Как реализовать понятия не имею.
http://msdn.microsoft.com/ru-r... .110).aspx пользуюсь этим. И здесь на форуме искал. (В основном консоль попадается, но с консолью и так все понятно), но как вытащить данные из datagridview ?
Добился только переумножения ячеек с одинаковыми индексами. A11 на B11.

P.S: Второй день не могу понять. Было бы время может быть и не создавал тему и все таки разобрался бы сам,но времени нет. Помогите разжевать.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.01.2015, 15:16
Ответы с готовыми решениями:

Перемножение матриц и умножение матрицы на число
помогите с перемножением матриц и умножением матрицы на число.не понимаю как это делать все что я...

Многопоточное перемножение матриц - выход за пределы
Здравствуйте. Язык C# Моя задача: Нужно перемножить две матрицы в несколько потоков, я сделал по...

Перемножение элементов столбца DataGridView
Всем привет, такой вопрос : как перемножить элементы одного столбца между собой? имеется столбец...

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

10
25 / 25 / 10
Регистрация: 14.12.2014
Сообщений: 110
07.01.2015, 15:50 2
C#
1
 datagridviewX.Rows[i].Cells[j].Value   //.ToString
1
0 / 0 / 0
Регистрация: 31.03.2014
Сообщений: 12
07.01.2015, 16:30  [ТС] 3
как я понял присвоение получается

C#
1
2
3
for ( i = 0; i < raz; i++)
                for (j = 0; j < raz; j++)
          array[i,j]  =  dataGridView1.Rows[i].Cells[j].Value;
Ошибка 1 Не удается неявно преобразовать тип "object" в "string[*,*]". Существует явное преобразование (возможно, пропущено приведение типов)

C#
1
Меняю на  array[i,j] = Convert.ToString(dataGridView1.Rows[i].Cells[j].Value);
Ошибка 1 Неявное преобразование типа "string" в "string[*,*]" невозможно

Меняю на

C#
1
array[i,j] = dataGridView1.Rows[i].Cells[j].Value.ToString;
Ошибка 1 Невозможно преобразовать группу методов "ToString" в тип, не являющийся делегатом "string". Предполагается ли вызывать этот метод?

Понимаю, что надо преобразовать данные из dataGridView1 в String. Но Convert.ToString не помогает.
0
25 / 25 / 10
Регистрация: 14.12.2014
Сообщений: 110
07.01.2015, 17:01 4
ToString() *
В твоём случае надо в Convert.ToInt32( datagridviewX.Rows[i].Cells[j].Value) если это числа.
Догадаться думаю не трудно должно быть
1
0 / 0 / 0
Регистрация: 31.03.2014
Сообщений: 12
07.01.2015, 17:29  [ТС] 5
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
 private void button2_Click(object sender, EventArgs e)
        {
            
            
            int i, j;
           
           int raz = Convert.ToInt32(textBox1.Text); // размерность матриц
            dataGridView4.RowCount = Convert.ToInt32(textBox1.Text); // задание количества строк
            dataGridView4.ColumnCount = Convert.ToInt32(textBox1.Text);// задание количества столбцов
            String[,] array = new String[raz, raz];  // Массив для Datagridview1
            String[,] array2 = new String[raz, raz]; // Массив для Datagridview2
            int[,] array3 = new int[raz, raz];
            
            for (i = 0; i < raz; i++)
               for (j = 0; j < raz; j++)
                   array[i, j] = dataGridView1.Rows[i].Cells[j].ToString(); // Массив Datagridview1
            for (i = 0; i < raz; i++)
                for (j = 0; j < raz; j++)
                   array2[i, j] = dataGridView2.Rows[i].Cells[j].ToString(); // Массив Datagridview2 
            for (i = 0; i < raz; i++)
               for (j = 0; j < raz; j++)
                   array3[i, j] = array[i, 0] * array2[0, j]; // умножение массивов
          
                }
Ошибка 1 Оператор "*" не может применяться к операндам типа "string" и "string"

Добавляю в строку
C#
1
array3[i, j] = Convert.ToInt32(array[i, 0] * array2[0, j]); // умножение массивов
Та же ошибка. как еще можно перевести массивы в тип для вычисления?
0
25 / 25 / 10
Регистрация: 14.12.2014
Сообщений: 110
07.01.2015, 17:46 6
Не там конвертишь и про Value забыл
C#
1
2
3
for (i = 0; i < raz; i++)
               for (j = 0; j < raz; j++)
                   array[i, j] = Convert.ToInt32(dataGridView1.Rows[i].Cells[j].Value);
И почему массивы стринговые? Если тебе их перемножать нада? int[,] array...
Если не, то придётся проект открывать, может забыл чё.
1
0 / 0 / 0
Регистрация: 31.03.2014
Сообщений: 12
07.01.2015, 17:59  [ТС] 7
Благодарю. С конвертацией разобрался. В начале не правильно я задал тип для массивов.

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
    private void button2_Click(object sender, EventArgs e)
        {
            
            
            int i, j,m ,n;
           
           int raz = Convert.ToInt32(textBox1.Text); // размерность матриц
            dataGridView4.RowCount = Convert.ToInt32(textBox1.Text); // задание количества строк
            dataGridView4.ColumnCount = Convert.ToInt32(textBox1.Text);// задание количества столбцов
            int[,] array = new int[raz, raz];  // Массив для Datagridview1
            int[,] array2 = new int[raz, raz]; // Массив для Datagridview2
            int[,] array3 = new int[raz, raz]; // Массив для Datagridview4
 
            for (i = 0; i < raz; i++)
            {
                for (j = 0; j < raz; j++)
                    array[i, j] = Convert.ToInt32(dataGridView1.Rows[i].Cells[j].Value); // Массив Datagridview1
            }
            for (i = 0; i < raz; i++)
            {
                for (j = 0; j < raz; j++)
                    array2[i, j] = Convert.ToInt32(dataGridView2.Rows[i].Cells[j].Value); // Массив Datagridview2 
            }
            for (i = 0; i < raz; i++)
            {
                for (j = 0; j < raz; j++)
                    array3[i, j] = array[i, 0] * array2[0, j]; // умножение массивов
            }
            for (i = 0; i < raz; i++)
            {
                for (j = 0; j < raz; j++)
                    dataGridView4.Rows[i].Cells[j].Value = array3[i, j];
            }
               }
при попытке вывести:
C#
1
2
3
4
for (i = 0; i < raz; i++)
            {
                for (j = 0; j < raz; j++)
                    dataGridView4.Rows[i].Cells[j].Value = array3[i, j];
выбивает программу на "Дополнительные сведения: Индекс за пределами диапазона. Индекс должен быть положительным числом, а его размер не должен превышать размер коллекции."

А индексы i и j и так у меня в диапазон не должны превышать переменную raz.

P.S: перешел с Delphi вот немного и не понятно.
0
1992 / 1216 / 440
Регистрация: 13.06.2013
Сообщений: 4,115
07.01.2015, 18:11 8
в dataGridView добавляли строки и столбцы?
1
0 / 0 / 0
Регистрация: 31.03.2014
Сообщений: 12
07.01.2015, 18:53  [ТС] 9
C#
1
2
dataGridView4.RowCount = Convert.ToInt32(textBox1.Text); // задание количества строк
dataGridView4.ColumnCount = Convert.ToInt32(textBox1.Text);
Обычно мне хватало этих двух строк. А дальше формировал вывод массива через
C#
1
dataGridView1.Rows[r].Cells[t].Value
К примеру рандомное заполнение массивом dataGridView1
C#
1
2
3
4
5
6
7
8
dataGridView1.RowCount = Convert.ToInt32(textBox1.Text);
            dataGridView1.ColumnCount = Convert.ToInt32(textBox1.Text);
            Random van = new Random();
            for (int i = 0; i < raz; i++)
            {
                for (int j = 0; j < raz; j++)
                    dataGridView1.Rows[i].Cells[j].Value = Convert.ToString(van.Next(1, 3));
}
вывести получилось. Конвертацию не провел.
C#
1
  dataGridView4.Rows[i].Cells[j].Value = Convert.ToString(array3[i, j]);
Но матрица не переумножается.
0
1992 / 1216 / 440
Регистрация: 13.06.2013
Сообщений: 4,115
07.01.2015, 20:03 10
Цитата Сообщение от Ктулху Посмотреть сообщение
Но матрица не переумножается.
Конечно не умножается, посмотрите что вы умножаете.
C#
1
2
3
4
5
6
 
for (i = 0; i < raz; i++)
{
      for (j = 0; j < raz; j++)
           array3[i, j] = array[i, 0] * array2[0, j]; // умножение массивов
}
Вы всегда перемножаете 0-й столбец на 0-ю строку.

Цитата Сообщение от Ктулху Посмотреть сообщение
Индекс за пределами диапазона
Попробуйте дебагом пройтись, очень помогает в отладке кода)
1
0 / 0 / 0
Регистрация: 31.03.2014
Сообщений: 12
07.01.2015, 21:21  [ТС] 11
Все разобрался. Для перемножения нужен
Multiplication operator
http://msdn.microsoft.com/en-u... s.71).aspx

Благодарю за помощь. Тему можно закрыть.
0
07.01.2015, 21:21
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.01.2015, 21:21
Помогаю со студенческими работами здесь

Перемножение матриц, умножение матриц на вектор, сложение матриц
Помогите пожалуйста написать программу, которая производит основные действия с матрицами...

Возведение матриц в степени, перемножение и сложение матриц
Даны 3-ех элементные вещественные векторы x и y и квадратные матрицы A и B. Вычислить: (A 2 * x,...

Перемножение матриц
Народ помогите плиз!!! Не получается перемножить 2 матрици 3х3. Может у кого есть...

Перемножение 2-ух матриц
Помогите пожалуйста с перемножением 2-ух матриц? в долгу не останусь) Выделение памяти написал,...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru