Произведение двух матриц и ошибка "Индекс за пределами диапазона" - C#

Узнай цену своей работы

Формулировка задачи:

Ситуация такова. Имеются две матрицы размерностью 8 на 8. Количество строк и столбцов двух матрицах можно изменять, но не превышать 8. Как таковой код работает, но при произведении матрицы А (5 на 8) и матрицы Б (8 на 4) должна быть результативная матрица 5 на 4, но в ходи выполнения процесса вылетает ошибка

"Индекс за пределами диапазона. Индекс должен быть положительным числом, а его размер не должен превышать размер коллекции. Имя параметра: index"

. При этом матрицу А (Произвольную на 8) и Б(8 на Произвольную) он не решает. Т.е. программе не нравятся прямоугольные матрицы. Хотя, в консольном варианте все работает верно без критов, а с ДатойГридВью критует.

Помогите плз

Ниже приведен код:
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Windows.Forms;
  9. namespace SapsayLab2
  10. {
  11. public partial class Form1 : Form
  12. {
  13. string[] row1 = new string[] { "1", "1", "0", "0", "0", "0", "0", "0", "0", "0" };
  14. string[] row2 = new string[] { "1", "0", "1", "1", "0", "0", "0", "0", "0", "0" };
  15. string[] row3 = new string[] { "0", "1", "0", "1", "1", "0", "0", "0", "0", "0" };
  16. string[] row4 = new string[] { "0", "0", "1", "0", "1", "0", "0", "0", "0", "0" };
  17. string[] row5 = new string[] { "0", "0", "0", "0", "1", "0", "1", "0", "0", "0" };
  18. string[] row6 = new string[] { "0", "0", "0", "0", "0", "0", "0", "0", "1", "0" };
  19. string[] row7 = new string[] { "0", "0", "0", "0", "0", "0", "0", "0", "1", "0" };
  20. string[] row8 = new string[] { "0", "0", "0", "0", "0", "0", "0", "0", "0", "1" };
  21.  
  22. public Form1()
  23. {
  24. InitializeComponent();
  25.  
  26. }
  27. private void Form1_Load(object sender, EventArgs e)
  28. {
  29. FFM();
  30. FSM();
  31. }
  32. private void FFM(int cCount = 8, int rCount = 8)
  33. {
  34. dataGridView1.ColumnCount = cCount;
  35. List<string[]> rows = new List<string[]>();
  36. rows.Add(row1); rows.Add(row2); rows.Add(row3); rows.Add(row4); rows.Add(row5); rows.Add(row6); rows.Add(row7); rows.Add(row8);
  37. dataGridView1.AllowUserToAddRows = false;
  38. for (int i = 0; i < rows.Count(); i++)
  39. {
  40. if (i < rCount)
  41. {
  42. dataGridView1.Rows.Add(rows[i]);
  43. }
  44. }
  45.  
  46. }
  47. private void FSM(int cCount = 8, int rCount = 8)
  48. {
  49. dataGridView2.ColumnCount = cCount;
  50. List<string[]> rows = new List<string[]>();
  51. rows.Add(row1); rows.Add(row2); rows.Add(row3); rows.Add(row4); rows.Add(row5); rows.Add(row6); rows.Add(row7); rows.Add(row8);
  52. dataGridView2.AllowUserToAddRows = false;
  53. for (int i = 0; i < rows.Count(); i++)
  54. {
  55. if (i < rCount)
  56. {
  57. dataGridView2.Rows.Add(rows[i]);
  58. }
  59. }
  60. }
  61. private void numericUpDown1_Click(object sender, EventArgs e)
  62. {
  63. dataGridView1.RowCount = 0;
  64. FFM((int)numericUpDown2.Value, (int)numericUpDown1.Value);
  65. }
  66. private void numericUpDown2_Click(object sender, EventArgs e)
  67. {
  68. dataGridView1.ColumnCount = 0;
  69. FFM((int)numericUpDown2.Value, (int)numericUpDown1.Value);
  70. }
  71. private void numericUpDown3_Click(object sender, EventArgs e)
  72. {
  73. dataGridView2.RowCount = 0;
  74. FSM((int)numericUpDown4.Value, (int)numericUpDown3.Value);
  75. }
  76. private void numericUpDown4_Click(object sender, EventArgs e)
  77. {
  78. dataGridView2.ColumnCount = 0;
  79. FSM((int)numericUpDown4.Value, (int)numericUpDown3.Value);
  80. }
  81. private void button2_Click(object sender, EventArgs e)
  82. {
  83. int[,] M1;
  84. int[,] M2;
  85.  
  86. M1 = new int[dataGridView1.RowCount, dataGridView1.ColumnCount];
  87. M2 = new int[dataGridView2.RowCount, dataGridView2.ColumnCount];
  88.  
  89. dataGridView3.Rows.Clear();
  90. if (M1.GetLength(1) == M2.GetLength(0))
  91. {
  92. int[,] r = new int[M1.GetLength(0), M2.GetLength(1)];
  93. //dataGridView3.ColumnCount = M1.GetLength(1);
  94. //dataGridView3.RowCount = M2.GetLength(0);
  95. dataGridView3.RowCount = M1.GetLength(0);
  96. dataGridView3.ColumnCount = M2.GetLength(1);
  97. for (int i = 0; i < M1.GetLength(0); i++)
  98. {
  99. for (int j = 0; j < r.GetLength(1); j++)
  100. {
  101. for (int k = 0; k < r.GetLength(1); k++)
  102. {
  103. r[i, j] += Convert.ToInt32(dataGridView1[i, k].Value) * Convert.ToInt32(dataGridView2[k, j].Value);
  104. dataGridView3[i, j].Value = Convert.ToString(r[i, j]);
  105. textBox1.Text = Convert.ToString(numericUpDown1.Value);
  106. textBox2.Text = Convert.ToString(numericUpDown4.Value);
  107. }
  108. }
  109. }
  110. }
  111. else
  112. {
  113. MessageBox.Show("Югня не пашет");
  114. }
  115. }
  116. }
  117. }

Решение задачи: «Произведение двух матриц и ошибка "Индекс за пределами диапазона"»

textual
Листинг программы
  1. for (int j = 0; j < r.GetLength(1); j++)

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4.143 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы