Сравнение элементов матриц (двумерных массивов) - C#
Формулировка задачи:
Здравствуйте! Несколько подзавис при написании программы. Суть в том, что 2 матрицы a (n*m) и b (n*m) задаются:
1.) Заданными константами
2.) Случайно
3.) Вводятся пользователем
Далее необходимо сравнить соответствующие элементы этих матриц и равные записать в вектор c (одномерный массив).
В итоге осуществил все следующим образом:
Соответственно, повторил все для 2 матриц. Как видите, выводил массивы в listBox'ы и помучившись написал вот такую процедуру для считывания массива из этих самых листбоксов:
И совсем уже в итоге запутавшись вот так вот пытался сравнивать их элементы, что явно далеко от правды:
Прошу, кто может, наставьте меня на путь истинный, ибо чувствую, что дальше только хуже сделаю, если буду продолжать тыкать пальцем в небо.
И на всякий случай текст программы целиком:
private void заданныеЗначенияАToolStripMenuItem_Click(object sender, EventArgs e) { string wow; for (int q=0; q<3; q++) { mas = new double[3, 3] { { 101, 202, 303}, { 323, 434, 545}, { 121, 343, 565}}; wow = ""; for (int m=0; m<3; m++) { wow += (mas[q, m]).ToString() + " "; } listBox1.Items.Add(wow); } }
private void случайнаяМатрицаToolStripMenuItem_Click(object sender, EventArgs e) { int q1; int m1; q1 = Convert.ToInt32(textBox1.Text); m1 = Convert.ToInt32(textBox2.Text); Random rand = new Random(); listBox1.Items.Clear(); String wow; double[,] mas = new double[q1, m1]; for (int q = 0; q < q1; q++) { wow = ""; for (int m = 0; m < m1; m++) { mas[q, m] = rand.Next(999); wow += (mas[q, m]).ToString() + " "; } listBox1.Items.Add(wow); } }
private void своиЗначенияToolStripMenuItem1_Click(object sender, EventArgs e) { n = Convert.ToInt32(textBox1.Text); m = Convert.ToInt32(textBox2.Text); a = new double[n, m]; k = -1; string wow = ""; listBox2.Items.Clear(); k++; for (int j = 0; j < n; j++) { a[k, j] = Convert.ToDouble(textBox4.Lines.ElementAt(j)); wow = wow + " " + (textBox4.Lines.ElementAt(j)); } listBox2.Items.Add(wow); wow = ""; textBox4.Clear(); }
public void button1_Click(object sender, EventArgs e) // Считать матрицу a { int k = Convert.ToInt32(textBox1.Text); int j = Convert.ToInt32(textBox2.Text); int[,] arr = new int[k+1, j+1]; for(int i = 0; i < listBox1.Items.Count; i++) { //for(int g; g<listBox1.Items[i]; ) string a = listBox1.Items[i].ToString(); string[] sis = Regex.Split(a, " "); int y=0; for(int x=0;x< sis.Count(); x++) { if (sis[x] != "") { y++; } string[] shly=new string[y+2]; int l = 0; for(int c=0;c<sis.Count();c++) { if (sis[c] != "") { shly[l] = sis[c]; l++; } } for(int b = 0; b < shly.Count()-2; b++) { arr[i, b] = Convert.ToInt32(shly[b]); } } } } public void button2_Click(object sender, EventArgs e) // Считать матрицу b { int k = Convert.ToInt32(textBox1.Text); int j = Convert.ToInt32(textBox2.Text); int[,] arrow = new int[k + 1, j + 1]; for (int i = 0; i < listBox1.Items.Count; i++) { //for(int g; g<listBox1.Items[i]; ) string a = listBox2.Items[i].ToString(); string[] sis = Regex.Split(a, " "); int y = 0; for (int x = 0; x < sis.Count(); x++) { if (sis[x] != "") { y++; } string[] shly = new string[y + 2]; int l = 0; for (int c = 0; c < sis.Count(); c++) { if (sis[c] != "") { shly[l] = sis[c]; l++; } } for (int b = 0; b < shly.Count() - 2; b++) { arrow[i, b] = Convert.ToInt32(shly[b]); } } } }
private void сравнитьМатрицыToolStripMenuItem_Click(object sender, EventArgs e) // Итоговое сравнение { textBox5.Text = ""; for (int i=1; i < n; i++) for (int b=1; b<m; b++) { if (arr[i, b] < arrow[i, b] || arr[i, b] > arrow[i, b]) { i++; } else { textBox5.Text += " " + Convert.ToString(i); } if (arr[i, b] < arrow[i, b] || arr[i, b] > arrow[i, b]) { b++; } else { textBox5.Text += " " + Convert.ToString(b); } } }
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Text.RegularExpressions; using System.Threading.Tasks; using System.Windows.Forms; namespace El_Solo_Lobo { public partial class Form1 : Form { double [,] mas; double[,] kek; int n, m; double[,] a; int k,j; double[,] den; string[] shly; int[,]arr; int[,] arrow; private void случайнаяМатрицаToolStripMenuItem_Click(object sender, EventArgs e) { int q1; int m1; q1 = Convert.ToInt32(textBox1.Text); m1 = Convert.ToInt32(textBox2.Text); Random rand = new Random(); listBox1.Items.Clear(); String wow; double[,] mas = new double[q1, m1]; for (int q = 0; q < q1; q++) { wow = ""; for (int m = 0; m < m1; m++) { mas[q, m] = rand.Next(999); wow += (mas[q, m]).ToString() + " "; } listBox1.Items.Add(wow); } } public Form1() { InitializeComponent(); } private void случайнаяМатрицаBToolStripMenuItem_Click(object sender, EventArgs e) { int q2; int m2; q2 = Convert.ToInt32(textBox1.Text); m2 = Convert.ToInt32(textBox2.Text); Random rand = new Random(); listBox2.Items.Clear(); String wow; double[,] den = new double[q2, m2]; for (int q = 0; q < q2; q++) { wow = ""; for (int m = 0; m < m2; m++) { den[q, m] = rand.Next(999); wow += (den[q, m]).ToString() + " "; } listBox2.Items.Add(wow); } } private void заданныеЗначенияАToolStripMenuItem_Click(object sender, EventArgs e) { string wow; for (int q=0; q<3; q++) { mas = new double[3, 3] { { 101, 202, 303}, { 323, 434, 545}, { 121, 343, 565}}; wow = ""; for (int m=0; m<3; m++) { wow += (mas[q, m]).ToString() + " "; } listBox1.Items.Add(wow); } } private void своиЗначенияToolStripMenuItem1_Click(object sender, EventArgs e) // Матрица b - свои значения { n = Convert.ToInt32(textBox1.Text); m = Convert.ToInt32(textBox2.Text); a = new double[n, m]; k = -1; string wow = ""; listBox2.Items.Clear(); k++; for (int j = 0; j < n; j++) { a[k, j] = Convert.ToDouble(textBox4.Lines.ElementAt(j)); wow = wow + " " + (textBox4.Lines.ElementAt(j)); } listBox2.Items.Add(wow); wow = ""; textBox4.Clear(); } public void button1_Click(object sender, EventArgs e) // Считать матрицу a { int k = Convert.ToInt32(textBox1.Text); int j = Convert.ToInt32(textBox2.Text); int[,] arr = new int[k+1, j+1]; for(int i = 0; i < listBox1.Items.Count; i++) { //for(int g; g<listBox1.Items[i]; ) string a = listBox1.Items[i].ToString(); string[] sis = Regex.Split(a, " "); int y=0; for(int x=0;x< sis.Count(); x++) { if (sis[x] != "") { y++; } string[] shly=new string[y+2]; int l = 0; for(int c=0;c<sis.Count();c++) { if (sis[c] != "") { shly[l] = sis[c]; l++; } } for(int b = 0; b < shly.Count()-2; b++) { arr[i, b] = Convert.ToInt32(shly[b]); } } } } public void button2_Click(object sender, EventArgs e) // Считать матрицу b { int k = Convert.ToInt32(textBox1.Text); int j = Convert.ToInt32(textBox2.Text); int[,] arrow = new int[k + 1, j + 1]; for (int i = 0; i < listBox1.Items.Count; i++) { //for(int g; g<listBox1.Items[i]; ) string a = listBox2.Items[i].ToString(); string[] sis = Regex.Split(a, " "); int y = 0; for (int x = 0; x < sis.Count(); x++) { if (sis[x] != "") { y++; } string[] shly = new string[y + 2]; int l = 0; for (int c = 0; c < sis.Count(); c++) { if (sis[c] != "") { shly[l] = sis[c]; l++; } } for (int b = 0; b < shly.Count() - 2; b++) { arrow[i, b] = Convert.ToInt32(shly[b]); } } } } private void сравнитьМатрицыToolStripMenuItem_Click(object sender, EventArgs e) // Итоговое сравнение { textBox5.Text = ""; for (int i=1; i < n; i++) for (int b=1; b<m; b++) { if (arr[i, b] < arrow[i, b] || arr[i, b] > arrow[i, b]) { i++; } else { textBox5.Text += " " + Convert.ToString(i); } if (arr[i, b] < arrow[i, b] || arr[i, b] > arrow[i, b]) { b++; } else { textBox5.Text += " " + Convert.ToString(b); } } } private void заданныеЗначенияToolStripMenuItem_Click(object sender, EventArgs e) { string wow; for (int q = 0; q < 3; q++) { kek = new double[3, 3] { { 21, 32, 43}, { 32, 43, 54}, { 121, 333, 565} }; wow = ""; for (int m = 0; m < 3; m++) { wow += (kek[q, m]).ToString() + " "; } listBox2.Items.Add(wow); } } private void своиЗначенияToolStripMenuItem_Click(object sender, EventArgs e) // Матрица a - свои значения { n = Convert.ToInt32(textBox1.Text); m = Convert.ToInt32(textBox2.Text); a = new double[n, m]; k = -1; string wow = ""; k++; for (int j = 0; j < n; j++) { a[k, j] = Convert.ToDouble(textBox3.Lines.ElementAt(j)); wow = wow + " " + (textBox3.Lines.ElementAt(j)); } listBox1.Items.Add(wow); wow = ""; textBox3.Clear(); } } /* n = Convert.ToInt32(textBox1.Text); m = Convert.ToInt32(textBox2.Text); a = new double[n, m]; j = -1; string wow = ""; listBox2.Items.Clear(); j++; for (int k = 0; k<n; k++) { a[k, j] = Convert.ToDouble(textBox4.Lines.ElementAt(k)); //wow = wow + " " + (textBox4.Lines.ElementAt(k)); listBox2.Items.Add(textBox4.Lines.ElementAt(k)); } wow = ""; textBox4.Clear(); */ }
Решение задачи: «Сравнение элементов матриц (двумерных массивов)»
textual
Листинг программы
private void сравнитьМатрицыToolStripMenuItem_Click(object sender, EventArgs e) // Итоговое сравнение { int[] vek = GetVector(arr,arrow); listBox3.Items.Add(vek[p]); } static int[] GetVector(int[,] array1, int[,] array2) { if (array1.GetLength(0) != array2.GetLength(0) || array1.GetLength(1) != array2.GetLength(1)) return null; List<int> vector = new List<int>(); for (int i = 0; i < array1.GetLength(0); i++) for (int j = 0; j < array1.GetLength(1); j++) { if (array1[i, j] == array2[i, j]) vector.Add(array1[i, j]); } return vector.ToArray(); }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д