Сравнение элементов матриц (двумерных массивов) - C#

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

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

Здравствуйте! Несколько подзавис при написании программы. Суть в том, что 2 матрицы a (n*m) и b (n*m) задаются: 1.) Заданными константами 2.) Случайно 3.) Вводятся пользователем Далее необходимо сравнить соответствующие элементы этих матриц и равные записать в вектор c (одномерный массив). В итоге осуществил все следующим образом:
Листинг программы
  1. private void заданныеЗначенияАToolStripMenuItem_Click(object sender, EventArgs e)
  2. {
  3. string wow;
  4. for (int q=0; q<3; q++)
  5. {
  6. mas = new double[3, 3] { { 101, 202, 303}, { 323, 434, 545}, { 121, 343, 565}};
  7. wow = "";
  8. for (int m=0; m<3; m++)
  9. {
  10. wow += (mas[q, m]).ToString() + " ";
  11. }
  12. listBox1.Items.Add(wow);
  13. }
  14. }
Листинг программы
  1. private void случайнаяМатрицаToolStripMenuItem_Click(object sender, EventArgs e)
  2. {
  3. int q1;
  4. int m1;
  5. q1 = Convert.ToInt32(textBox1.Text);
  6. m1 = Convert.ToInt32(textBox2.Text);
  7. Random rand = new Random();
  8. listBox1.Items.Clear();
  9. String wow;
  10. double[,] mas = new double[q1, m1];
  11. for (int q = 0; q < q1; q++)
  12. {
  13. wow = "";
  14. for (int m = 0; m < m1; m++)
  15. {
  16. mas[q, m] = rand.Next(999);
  17. wow += (mas[q, m]).ToString() + " ";
  18. }
  19. listBox1.Items.Add(wow);
  20. }
  21. }
Листинг программы
  1. private void своиЗначенияToolStripMenuItem1_Click(object sender, EventArgs e)
  2. {
  3. n = Convert.ToInt32(textBox1.Text);
  4. m = Convert.ToInt32(textBox2.Text);
  5. a = new double[n, m];
  6. k = -1;
  7. string wow = "";
  8. listBox2.Items.Clear();
  9. k++;
  10. for (int j = 0; j < n; j++)
  11. {
  12. a[k, j] = Convert.ToDouble(textBox4.Lines.ElementAt(j));
  13. wow = wow + " " + (textBox4.Lines.ElementAt(j));
  14. }
  15. listBox2.Items.Add(wow);
  16. wow = "";
  17. textBox4.Clear();
  18. }
Соответственно, повторил все для 2 матриц. Как видите, выводил массивы в listBox'ы и помучившись написал вот такую процедуру для считывания массива из этих самых листбоксов:
Листинг программы
  1. public void button1_Click(object sender, EventArgs e) // Считать матрицу a
  2. {
  3. int k = Convert.ToInt32(textBox1.Text);
  4. int j = Convert.ToInt32(textBox2.Text);
  5. int[,] arr = new int[k+1, j+1];
  6. for(int i = 0; i < listBox1.Items.Count; i++)
  7. {
  8. //for(int g; g<listBox1.Items[i]; )
  9. string a = listBox1.Items[i].ToString();
  10. string[] sis = Regex.Split(a, " ");
  11. int y=0;
  12. for(int x=0;x< sis.Count(); x++)
  13. {
  14. if (sis[x] != "")
  15. {
  16. y++;
  17. }
  18. string[] shly=new string[y+2];
  19. int l = 0;
  20. for(int c=0;c<sis.Count();c++)
  21. {
  22. if (sis[c] != "")
  23. {
  24. shly[l] = sis[c];
  25. l++;
  26. }
  27. }
  28. for(int b = 0; b < shly.Count()-2; b++)
  29. {
  30. arr[i, b] = Convert.ToInt32(shly[b]);
  31. }
  32. }
  33. }
  34. }
  35. public void button2_Click(object sender, EventArgs e) // Считать матрицу b
  36. {
  37. int k = Convert.ToInt32(textBox1.Text);
  38. int j = Convert.ToInt32(textBox2.Text);
  39. int[,] arrow = new int[k + 1, j + 1];
  40. for (int i = 0; i < listBox1.Items.Count; i++)
  41. {
  42. //for(int g; g<listBox1.Items[i]; )
  43. string a = listBox2.Items[i].ToString();
  44. string[] sis = Regex.Split(a, " ");
  45. int y = 0;
  46. for (int x = 0; x < sis.Count(); x++)
  47. {
  48. if (sis[x] != "")
  49. {
  50. y++;
  51. }
  52. string[] shly = new string[y + 2];
  53. int l = 0;
  54. for (int c = 0; c < sis.Count(); c++)
  55. {
  56. if (sis[c] != "")
  57. {
  58. shly[l] = sis[c];
  59. l++;
  60. }
  61. }
  62. for (int b = 0; b < shly.Count() - 2; b++)
  63. {
  64. arrow[i, b] = Convert.ToInt32(shly[b]);
  65. }
  66. }
  67. }
  68. }
И совсем уже в итоге запутавшись вот так вот пытался сравнивать их элементы, что явно далеко от правды:
Листинг программы
  1. private void сравнитьМатрицыToolStripMenuItem_Click(object sender, EventArgs e) // Итоговое сравнение
  2. {
  3. textBox5.Text = "";
  4. for (int i=1; i < n; i++)
  5. for (int b=1; b<m; b++)
  6. {
  7. if (arr[i, b] < arrow[i, b] || arr[i, b] > arrow[i, b])
  8. {
  9. i++;
  10. }
  11. else
  12. {
  13. textBox5.Text += " " + Convert.ToString(i);
  14. }
  15. if (arr[i, b] < arrow[i, b] || arr[i, b] > arrow[i, b])
  16. {
  17. b++;
  18. }
  19. else
  20. {
  21. textBox5.Text += " " + Convert.ToString(b);
  22. }
  23. }
  24. }
Прошу, кто может, наставьте меня на путь истинный, ибо чувствую, что дальше только хуже сделаю, если буду продолжать тыкать пальцем в небо. И на всякий случай текст программы целиком:
Листинг программы
  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.Text.RegularExpressions;
  9. using System.Threading.Tasks;
  10. using System.Windows.Forms;
  11. namespace El_Solo_Lobo
  12. {
  13. public partial class Form1 : Form
  14. {
  15. double [,] mas;
  16. double[,] kek;
  17. int n, m;
  18. double[,] a;
  19. int k,j;
  20. double[,] den;
  21. string[] shly;
  22. int[,]arr;
  23. int[,] arrow;
  24. private void случайнаяМатрицаToolStripMenuItem_Click(object sender, EventArgs e)
  25. {
  26. int q1;
  27. int m1;
  28. q1 = Convert.ToInt32(textBox1.Text);
  29. m1 = Convert.ToInt32(textBox2.Text);
  30. Random rand = new Random();
  31. listBox1.Items.Clear();
  32. String wow;
  33. double[,] mas = new double[q1, m1];
  34. for (int q = 0; q < q1; q++)
  35. {
  36. wow = "";
  37. for (int m = 0; m < m1; m++)
  38. {
  39. mas[q, m] = rand.Next(999);
  40. wow += (mas[q, m]).ToString() + " ";
  41. }
  42. listBox1.Items.Add(wow);
  43. }
  44. }
  45. public Form1()
  46. {
  47. InitializeComponent();
  48. }
  49. private void случайнаяМатрицаBToolStripMenuItem_Click(object sender, EventArgs e)
  50. {
  51. int q2;
  52. int m2;
  53. q2 = Convert.ToInt32(textBox1.Text);
  54. m2 = Convert.ToInt32(textBox2.Text);
  55. Random rand = new Random();
  56. listBox2.Items.Clear();
  57. String wow;
  58. double[,] den = new double[q2, m2];
  59. for (int q = 0; q < q2; q++)
  60. {
  61. wow = "";
  62. for (int m = 0; m < m2; m++)
  63. {
  64. den[q, m] = rand.Next(999);
  65. wow += (den[q, m]).ToString() + " ";
  66. }
  67. listBox2.Items.Add(wow);
  68. }
  69. }
  70. private void заданныеЗначенияАToolStripMenuItem_Click(object sender, EventArgs e)
  71. {
  72. string wow;
  73. for (int q=0; q<3; q++)
  74. {
  75. mas = new double[3, 3] { { 101, 202, 303}, { 323, 434, 545}, { 121, 343, 565}};
  76. wow = "";
  77. for (int m=0; m<3; m++)
  78. {
  79. wow += (mas[q, m]).ToString() + " ";
  80. }
  81. listBox1.Items.Add(wow);
  82. }
  83. }
  84. private void своиЗначенияToolStripMenuItem1_Click(object sender, EventArgs e) // Матрица b - свои значения
  85. {
  86. n = Convert.ToInt32(textBox1.Text);
  87. m = Convert.ToInt32(textBox2.Text);
  88. a = new double[n, m];
  89. k = -1;
  90. string wow = "";
  91. listBox2.Items.Clear();
  92. k++;
  93. for (int j = 0; j < n; j++)
  94. {
  95. a[k, j] = Convert.ToDouble(textBox4.Lines.ElementAt(j));
  96. wow = wow + " " + (textBox4.Lines.ElementAt(j));
  97. }
  98. listBox2.Items.Add(wow);
  99. wow = "";
  100. textBox4.Clear();
  101. }
  102. public void button1_Click(object sender, EventArgs e) // Считать матрицу a
  103. {
  104. int k = Convert.ToInt32(textBox1.Text);
  105. int j = Convert.ToInt32(textBox2.Text);
  106. int[,] arr = new int[k+1, j+1];
  107. for(int i = 0; i < listBox1.Items.Count; i++)
  108. {
  109. //for(int g; g<listBox1.Items[i]; )
  110. string a = listBox1.Items[i].ToString();
  111. string[] sis = Regex.Split(a, " ");
  112. int y=0;
  113. for(int x=0;x< sis.Count(); x++)
  114. {
  115. if (sis[x] != "")
  116. {
  117. y++;
  118. }
  119. string[] shly=new string[y+2];
  120. int l = 0;
  121. for(int c=0;c<sis.Count();c++)
  122. {
  123. if (sis[c] != "")
  124. {
  125. shly[l] = sis[c];
  126. l++;
  127. }
  128. }
  129. for(int b = 0; b < shly.Count()-2; b++)
  130. {
  131. arr[i, b] = Convert.ToInt32(shly[b]);
  132. }
  133. }
  134. }
  135. }
  136. public void button2_Click(object sender, EventArgs e) // Считать матрицу b
  137. {
  138. int k = Convert.ToInt32(textBox1.Text);
  139. int j = Convert.ToInt32(textBox2.Text);
  140. int[,] arrow = new int[k + 1, j + 1];
  141. for (int i = 0; i < listBox1.Items.Count; i++)
  142. {
  143. //for(int g; g<listBox1.Items[i]; )
  144. string a = listBox2.Items[i].ToString();
  145. string[] sis = Regex.Split(a, " ");
  146. int y = 0;
  147. for (int x = 0; x < sis.Count(); x++)
  148. {
  149. if (sis[x] != "")
  150. {
  151. y++;
  152. }
  153. string[] shly = new string[y + 2];
  154. int l = 0;
  155. for (int c = 0; c < sis.Count(); c++)
  156. {
  157. if (sis[c] != "")
  158. {
  159. shly[l] = sis[c];
  160. l++;
  161. }
  162. }
  163. for (int b = 0; b < shly.Count() - 2; b++)
  164. {
  165. arrow[i, b] = Convert.ToInt32(shly[b]);
  166. }
  167. }
  168. }
  169. }
  170. private void сравнитьМатрицыToolStripMenuItem_Click(object sender, EventArgs e) // Итоговое сравнение
  171. {
  172. textBox5.Text = "";
  173. for (int i=1; i < n; i++)
  174. for (int b=1; b<m; b++)
  175. {
  176. if (arr[i, b] < arrow[i, b] || arr[i, b] > arrow[i, b])
  177. {
  178. i++;
  179. }
  180. else
  181. {
  182. textBox5.Text += " " + Convert.ToString(i);
  183. }
  184. if (arr[i, b] < arrow[i, b] || arr[i, b] > arrow[i, b])
  185. {
  186. b++;
  187. }
  188. else
  189. {
  190. textBox5.Text += " " + Convert.ToString(b);
  191. }
  192. }
  193. }
  194. private void заданныеЗначенияToolStripMenuItem_Click(object sender, EventArgs e)
  195. {
  196. string wow;
  197. for (int q = 0; q < 3; q++)
  198. {
  199. kek = new double[3, 3] { { 21, 32, 43}, { 32, 43, 54}, { 121, 333, 565} };
  200. wow = "";
  201. for (int m = 0; m < 3; m++)
  202. {
  203. wow += (kek[q, m]).ToString() + " ";
  204. }
  205. listBox2.Items.Add(wow);
  206. }
  207. }
  208. private void своиЗначенияToolStripMenuItem_Click(object sender, EventArgs e) // Матрица a - свои значения
  209. {
  210. n = Convert.ToInt32(textBox1.Text);
  211. m = Convert.ToInt32(textBox2.Text);
  212. a = new double[n, m];
  213. k = -1;
  214. string wow = "";
  215. k++;
  216. for (int j = 0; j < n; j++)
  217. {
  218. a[k, j] = Convert.ToDouble(textBox3.Lines.ElementAt(j));
  219. wow = wow + " " + (textBox3.Lines.ElementAt(j));
  220. }
  221. listBox1.Items.Add(wow);
  222. wow = "";
  223. textBox3.Clear();
  224. }
  225. }
  226. /* n = Convert.ToInt32(textBox1.Text);
  227. m = Convert.ToInt32(textBox2.Text);
  228. a = new double[n, m];
  229. j = -1;
  230. string wow = "";
  231. listBox2.Items.Clear();
  232. j++;
  233. for (int k = 0; k<n; k++)
  234. {
  235. a[k, j] = Convert.ToDouble(textBox4.Lines.ElementAt(k));
  236. //wow = wow + " " + (textBox4.Lines.ElementAt(k));
  237. listBox2.Items.Add(textBox4.Lines.ElementAt(k));
  238. }
  239. wow = "";
  240. textBox4.Clear();
  241. */
  242. }

Решение задачи: «Сравнение элементов матриц (двумерных массивов)»

textual
Листинг программы
  1. private void сравнитьМатрицыToolStripMenuItem_Click(object sender, EventArgs e) // Итоговое сравнение
  2.         {
  3.             int[] vek = GetVector(arr,arrow);
  4.             listBox3.Items.Add(vek[p]);
  5.         }
  6.         static int[] GetVector(int[,] array1, int[,] array2)
  7.         {
  8.             if (array1.GetLength(0) != array2.GetLength(0) || array1.GetLength(1) != array2.GetLength(1))
  9.                 return null;
  10.             List<int> vector = new List<int>();
  11.             for (int i = 0; i < array1.GetLength(0); i++)
  12.                 for (int j = 0; j < array1.GetLength(1); j++)
  13.                 {
  14.                     if (array1[i, j] == array2[i, j])
  15.                         vector.Add(array1[i, j]);
  16.                 }
  17.             return vector.ToArray();
  18.         }

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


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

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

12   голосов , оценка 4 из 5

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

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

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