Программа, создающая массив из элементов, получаемых из действий над первой матрицей и выводящая элементы массива
Составить программу, которая в матрице D(m, n) находит все элементы, где сумма всех элементов строки, стоящих до рассматриваемого, больше суммы элементов столбца , стоящих до рассматриваемого. Сумму предшествующих элементов считать равной нулю, если элемент является первым в строке или столбце. Сформировать из найденных элементов массив. Вывести матрицу в виде матрицы, а под ней - элементы массива.(приложение Windows Forms)
Матрицу создать получается. А вот создать массив из элементов, получаемых по заданному правилу не получается, как и вывести элементы.
Мучаюсь уже неделю с этой задачей.
namespace WindowsFormsApp3
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
int M = 0;
int N = 0;
int[,] Numbers;
private void Form1_Load(object sender, EventArgs e)
{
}
private void button1_Click(object sender, EventArgs e) // создание матрицы
{
dataGridView1.Columns.Clear();
dataGridView1.Rows.Clear();
dataGridView1.AllowUserToAddRows = true;
M = int.Parse(M_input.Text);
N = int.Parse(N_input.Text);
Numbers = new int[0, 0];
Numbers = new int[N, M];
for (int i = 0; i < M; i++)
{
dataGridView1.Columns.Add("", "");
}
for (int i = 0; i < N; i++)
{
dataGridView1.Rows.Add("", "");
}
dataGridView1.AllowUserToAddRows = false;
}
//должна создавать вторую и выводить элементы массива( как я понял в виде строки)
private void button2_Click(object sender, EventArgs e)
{
int n = dataGridView1.RowCount;
int m = dataGridView1.ColumnCount;
double[,] mas = new double[n, m];
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
{
mas[i, j] = double.Parse(dataGridView1.Rows[i].Cells[j].Value.ToString());
}
int raz = 0;
dataGridView2.RowCount = 1;
dataGridView2.ColumnCount = 0;
for (int i = 0; i <= n; i++)
for (int j = 0; j <= m; j++)
{
double sum1 = 0;
double sum2 = 0;
if (i == 0)
sum1 = 0;
else
for (int k = 0; k < i; k++)
sum1 += mas[i, k];
if (j == 0)
sum2 = 0;
else
for (int k = 0; k < j; k++)
sum2 += mas[k, j];
if (sum1 > sum2)
{
dataGridView2.ColumnCount++;
dataGridView2.Rows[0].Cells[raz].Value = mas[i, j];
raz++;
}
}
}
private void label1_Click(object sender, EventArgs e)
{
}
private void LUM1_Click(object sender, EventArgs e)
{
}
private void LUM2_Click(object sender, EventArgs e)
{
}
private void LUM3_Click(object sender, EventArgs e)
{
}
private void Matrix_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
}
private void M_input_TextChanged(object sender, EventArgs e)
{
}
private void N_input_TextChanged(object sender, EventArgs e)
{
}
private void label2_Click(object sender, EventArgs e)
{
}
private void Matrix2_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
}
private void label3_Click(object sender, EventArgs e)
{
}
}
}
Ответы (1 шт):
Автор решения: cbr ngst
→ Ссылка
Спасибо, все же смог дописать до рабочего состояния.
namespace Matrica
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
int m; // Столбцы
int n; // Строки
int[,] MatrixArray; // Выделение памяти для массива
private void Create_Click(object sender, EventArgs e)// По нажатия создается сетка матрицы
{
GridMatrix.AllowUserToAddRows = true;// Запрещает добавление строк
m = int.Parse(Size_M.Text); // Ввод кол-ва столбцов
n = int.Parse(Size_N.Text); // Ввод кол-ва строк
_Answer.Text = "Элементы: "; // Создается строку с словом "Элементы: "
GridMatrix.Columns.Clear();
GridMatrix.Rows.Clear();
MatrixArray = new int[n, m]; // Создание пустого массива размерность n на m
for (int i = 0; i < m; i++)// Создание столбцов
{
GridMatrix.Columns.Add("", "");
}
for (int i = 0; i < n; i++)// Создание строк
{
GridMatrix.Rows.Add("", "");
}
GridMatrix.AllowUserToAddRows = false;
}
private void Answer_Click(object sender, EventArgs e)// По нажатию выдается ответ
{
for(int i = 0; i < n; i++)// Перенос матрицы в массив
{
for(int j = 0; j < m; j++)
{
MatrixArray[i, j] = int.Parse(GridMatrix[j, i].Value.ToString());
}
}
int[] AnswerArray=new int[m*n];
int Counter=0;
for (int i = 0; i < n; i++) // Сам алгоритм нахождения элементов
{
for (int j = 0; j < m; j++)
{
int RowSumm = 0,ColumnSumm=0; // Сумма элементов строки и столбца
for (int b=0;b<j;b++)// Сумма строк
{
RowSumm += MatrixArray[i, b];
}
for(int b = 0; b < i; b++)// Сумма столбов
{
ColumnSumm += MatrixArray[b, j];
}
if (RowSumm>ColumnSumm)
{
AnswerArray[Counter] = MatrixArray[i, j];
Counter++;
}
}
}
_Answer.Text = "Элементы: ";
for (int i=0;i<Counter;i++)//Вывод элементов массива по очереди
{
_Answer.Text += ""+AnswerArray[i];
if (i!=Counter-1)
{
_Answer.Text += ", ";
}
}
}
private void M_Label_Click(object sender, EventArgs e)
{
}
private void N_Label_Click(object sender, EventArgs e)
{
}
private void Answ1_Click(object sender, EventArgs e)
{
}
private void GridMatrix_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
}
private void SizeLabel_Click(object sender, EventArgs e)
{
}
private void Size_M_TextChanged(object sender, EventArgs e)
{
}
private void Size_N_TextChanged(object sender, EventArgs e)
{
}
}
}