创建从对第一个矩阵的操作中获得的元素数组并输出数组元素的程序



创建一个程序,查找矩阵中的所有元素D(m,n(,其中位于所考虑的元素之前的行的所有元素之和大于位于所考虑元素之前的列的元素之和。如果前面的元素是行或列中的第一个,则前面元素的和被认为等于零。从找到的元素组成一个数组。将矩阵输出为矩阵,并在其下方输出数组的元素。(Windows窗体应用程序(

结果是创建了第一个矩阵。我无法根据给定的规则创建数组。我不知道如何输出数组元素(不是控制台!它的Windows窗体应用程序(

这项任务让我痛苦了一个星期。

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) // create matrix
{
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;
}
//this button should create an array and output array elements (in the form of a string, most likely)
private void button2_Click(object sender, EventArgs e)
{
int n = dataGridView1.RowCount;
int m = dataGridView1.ColumnCount;
double[,] array1 = new double[n, m];
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
{
array1[i, j] = double.Parse(dataGridView1.Rows[i].Cells[j].Value.ToString());
}
int times = 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 += array1[i, k];
if (j == 0)
sum2 = 0;
else
for (int k = 0; k < j; k++)
sum2 += array1[k, j];

if (sum1 > sum2)
{
dataGridView2.ColumnCount++;
dataGridView2.Rows[0].Cells[times].Value = array1[i, j];
times++;
}
}
}
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)
{
}
}
}

假设您打开了excel,在10x10网格中有从1到100的数字。。A1是1,B1是2,A2是11等

你的作业要求你选择一个单元格,比如B2。第1行中的值之和是否大于A列中的值的和?是->将B2的值放入列表中。对另一个单元格重复此操作。做所有细胞

我从B2开始,因为它上面有一行,左边有一列,所以它不需要处理"的特殊情况;无行或无列意味着总和为0"对于第1行或A列中的任何单元格


  • 让你的生活变得轻松。编写两种方法:
public int SumColumn(int whichCol)
//if whichCol is -1 return 0
//declare variable to hold the sum
//loop over the grid from [row 0, col whichCol] to [row N, col whichCol], adding up into sum
//return sum
public int SumRow(int which)
//copy paste and adapt code above to work across rows not down columns
  • 现在检查您的网格
//declare a list to hold the cells we find with SumRow>SumColumn 
//for r in rows
//for c in columns 
//add current cell value to a textbox ("output the matrix")
//if SumRow(r-1) > SumColumn(c-1) 
//add to list
//add the contents of the list to the TextBox too with another loop

编写此代码大约需要15分钟,而不是几周。当你不熟悉任何东西时,代码的设计过程就像我在这里做的一样。用你思考的语言写评论;在你开始破解代码并迷路之前,把算法记下来。评论是你的方向,你的作文计划,食谱,而厨房里的一切都快疯了。你必须像说外语一样计划你的课程;首先你想象你想用母语说的句子,然后你可能会按照外国人的说法(语序(重新排列,然后你翻译单词并进行共轭、修饰等,最后你说出来;C#是相同的;你知道一种语言,但不知道另一种

当你完成后,留下评论,这样如果你出了问题,你可以看到并修复它,或者你的主管可以看到你的想法和你的c#理解在哪里出现分歧,给你算法的分数,并知道教你什么来帮助你解决哪里出了问题

我已经解决了这个问题矩阵图像

namespace Matrix
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
int m; // columns
int n; // rows
int[,] MatrixArray; // array of matrix elements 
private void Create_Click(object sender, EventArgs e)// By clicking, a matrix grid is created
{
GridMatrix.AllowUserToAddRows = true;
m = int.Parse(Size_M.Text); // Enter the number of columns 
n = int.Parse(Size_N.Text); // Enter the number of rows
_Answer.Text = "Elements (answer):";
GridMatrix.Columns.Clear();
GridMatrix.Rows.Clear();
MatrixArray = new int[n, m]; // Creating an empty array of dimension m x n

for (int i = 0; i < m; i++)// Creating columns
{
GridMatrix.Columns.Add("", "");
}
for (int i = 0; i < n; i++)// Creating rows
{
GridMatrix.Rows.Add("", "");
}
GridMatrix.AllowUserToAddRows = false;
}
private void Answer_Click(object sender, EventArgs e)// When pressed, the answer appears
{

for(int i = 0; i < n; i++)// Transferring a matrix to an array
{
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++) // The algorithm for finding elements
{
for (int j = 0; j < m; j++)
{
int RowSumm = 0,ColumnSumm=0; // Sums of row and column elements
for (int b=0;b<j;b++)// Sum of rows
{
RowSumm += MatrixArray[i, b];
}
for(int b = 0; b < i; b++)// Sum of columns
{
ColumnSumm += MatrixArray[b, j];
}
if (RowSumm>ColumnSumm)
{
AnswerArray[Counter] = MatrixArray[i, j];
Counter++;
}
}
}
_Answer.Text = "Elements (answer):";
for (int i=0;i<Counter;i++)// Output of array elements in turn
{
_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)
{
}
private void Form1_Load(object sender, EventArgs e)
{
}
}
}

最新更新