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

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

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

Здравствуйте! Несколько подзавис при написании программы. Суть в том, что 2 матрицы a (n*m) и b (n*m) задаются: 1.) Заданными константами 2.) Случайно 3.) Вводятся пользователем Далее необходимо сравнить соответствующие элементы этих матриц и равные записать в вектор c (одномерный массив). В итоге осуществил все следующим образом:
 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();
        }
Соответственно, повторил все для 2 матриц. Как видите, выводил массивы в listBox'ы и помучившись написал вот такую процедуру для считывания массива из этих самых листбоксов:
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();
        }

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


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

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

12   голосов , оценка 4 из 5
Похожие ответы