С# | Вывести расположение минимального элемента двухмерного массива относительно правой диагонали
Всем привет. Программа C# Windows Form Есть задачи:
- найти минимальный элемент двухмерного массива;
- найти расположение этого минимального элемента относительно правой диагонали;
- вывести это все конечному пользователю в 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-й метод не работает :( ):
Буду благодарен за любую помощь по решению этого вопроса.
Если этот вопрос можно решить каким-либо другим, более оптимальным способом, так же буду очень благодарен.
