С# | Вывести расположение минимального элемента двухмерного массива относительно правой диагонали

Всем привет. Программа C# Windows Form Есть задачи:

  1. найти минимальный элемент двухмерного массива;
  2. найти расположение этого минимального элемента относительно правой диагонали;
  3. вывести это все конечному пользователю в label интерфейса.

Суть обращения: не получается коректно реализовать 2-й пункт, постоянно выводится, что элемент находится выше правой диагонали.

Общая структура:

{
    public partial class Form3 : Form
    {
        public Form3()
        {
            InitializeComponent();
        }

        class Arrays2
        {
            public bool error = false;
            int[,] a;
            int length1;
            int length2;
            public Arrays2(int size1, int size2)
            {
                a = new int[size1, size2]; length1 = size1; length2 = size2;
            }
            public int Length1
            {
                get
                {
                    return length1;
                }
            }
            public int Length2
            {
                get
                {
                    return length2;
                }
            }
            public int this[int i, int j]
            {
                get
                {
                    if ((i >= 0 && i < length1) && (j >= 0 && j <= length2))
                        return a[i, j];
                    else
                    {
                        error = true;
                        return 0;
                    }
                }
                set
                {
                    if (i >= 0 && i < length1 && j >= 0 && j <= length2 && value >= -10 && value <= 10)
                        a[i, j] = value;
                    else error = true;
                }
            }

Метод для нахождения минимального элемента (1):

public int GG
            {
                get
                {
                    
                    int imin = 0;
                    int jmin = 0;
                    int min = a[0, 0];
                    for (int i = 0; i < length1; i++)
                        for (int j = 0; j < length2; j ++)
                        if (min > a[i, j])
                            {
                                min = a[i, j];
                                imin = i;
                                jmin = j;
                            }
                    return min;
                }
            }

Метод для определения положения минимального элемента относительно правой диагонали (2):

public void GG2(Label l)
            {
                int imin = 0;
                int jmin = 0;
                int min = a[0, 0];
                for (int i = 0; i < length1; i++)
                    for (int j = 0; j < length2; j++)
                        if (min > a[i, j])
                        {
                            min = a[i, j];
                            imin = i;
                            jmin = j;
                        }
                if (imin + jmin < length1 + 1)
                    l.Text = "Минимальный элемент находится выше правой диагонали";
                else if (imin + jmin == length1 + 1)
                    l.Text = "Минимальный элемент находится на правой диагонали";
                else
                    l.Text = "Минимальный элемент находится ниже правой диагонали";
            }

Обработка по нажатию на кнопку (3):

private void Button1_Click(object sender, EventArgs e)
        {
            Random ran = new Random();
            Arrays2 l4;
            int n, m;
            try
            {
                
                n = Convert.ToInt16(textBox1.Text);
                m = Convert.ToInt16(textBox2.Text);
                DataGridViewTextBoxColumn dataGridViewAge;
                for (int i = 0; i < m; i++)
                {
                    dataGridViewAge = new DataGridViewTextBoxColumn();
                    dataGridViewAge.Width = 40;
                    dataGridView1.Columns.Add(dataGridViewAge);
                }
                dataGridView1.Rows.Clear();
                dataGridView1.RowCount = n;
                dataGridView1.ColumnCount = m;
                Arrays2 a = new Arrays2(n, m);
                l4 = new Arrays2(n, m);
                for (int i = 0; i < n; i++)
                    for (int j = 0; j < m; j++)
                    {
                        a[i, j] = ran.Next(-10, 10);
                        dataGridView1.Rows[i].Cells[j].Value = a[i, j].ToString();
                    }
                if (a.error) MessageBox.Show("Error");
                label3.Text = "Наименьший элемент массива: " + a.GG.ToString();
                l4.GG2(label4);
            }
            catch
            {
                MessageBox.Show("Error");
            }

В целом получается что-то такое (но 2-й метод не работает :( ):

введите сюда описание изображения

Буду благодарен за любую помощь по решению этого вопроса.

Если этот вопрос можно решить каким-либо другим, более оптимальным способом, так же буду очень благодарен.


Ответы (0 шт):