creamos su clase :
class Matematicaz
{
int[,] mat;
private int ren, col;
public Matematicaz(DataGridView dg1)
{
ren = dg1.RowCount;
col = dg1.ColumnCount;
mat = new int[ren, col];
for(int i = 0; i < dg1.RowCount; i ++)
for(int j = 0; j < dg1.ColumnCount; j++)
mat[i,j] = Convert.ToInt32(dg1.Rows[i].Cells[j].Value.ToString());
}
public void asignar(int r, int c, int val)
{
mat[r, c] = val;
}
public Matematicaz()
{
mat = new int[3, 3];
}
public Matematicaz(int n, int m)
{
if (n < 1)
n = 3;
if (m < 1)
m = 3;
mat = new int[n, m];
}
public int this[int r, int c]
{
get
{
return mat[r, c];
}
set
{
mat[r, c] = value;
}
}
public int Ren
{
get { return mat.GetLength(0); }
}
public int Col
{
get { return mat.GetLength(1); }
}
//Promedio diagonales
public double diagPrin()
{
double suma = 0;
for (int i = 0; i < mat.GetLength(0); i++)
suma += mat[i, i];
return suma / mat.GetLength(0);
}
public double diagSec()
{
double suma = 0;
if (ren != col)
return 0;
for (int i = 0; i < mat.GetLength(0); i++)
suma += mat[i, mat.GetLength(0) - 1 - i];
return suma / mat.GetLength(0);
}
public static Matematicaz operator *(Matematicaz a, Matematicaz b)
{
Matematicaz aux = new Matematicaz(a.Ren, a.Col);
for (int i = 0; i < a.Ren; i++)
{
for (int j = 0; j < aux.Col; j++)
{
aux[i, j] = 0;
for (int k = 0; k < aux.Ren; k++)
aux[i, j] = aux[i, j] + a[i, k] * b[k, j];
}
}
return aux;
}
//----------------------- esta es otra forma de resolverlo
public void Multiplicacion(int r, int c, DataGridView dg1, DataGridView dg2, DataGridView dg3)
{
for (int i = 0; i < r; i++)
for (int j = 0; j < c; j++)
{
dg3[j, i].Value = 0;
for (int k = 0; k < r; k++)
dg3[j, i].Value = Convert.ToInt32(dg3[j, i].Value) + Convert.ToInt32(dg1[k, i].Value) * Convert.ToInt32(dg2[j, k].Value);
}
}
public void Suma(int r, int c, DataGridView dg1, DataGridView dg2, DataGridView dg3)
{
for (int i = 0; i < r; i++)
for (int j = 0; j < c; j++)
{
dg3[j, i].Value = 0;
for (int k = 0; k < r; k++)
dg3[j, i].Value = Convert.ToInt32(dg3[j, i].Value) + Convert.ToInt32(dg1[k, i].Value) + Convert.ToInt32(dg2[j, k].Value);
}
}
public void Resta(int r, int c, DataGridView dg1, DataGridView dg2, DataGridView dg3)
{
for (int i = 0; i < r; i++)
for (int j = 0; j < c; j++)
{
dg3[j, i].Value = 0;
for (int k = 0; k < r; k++)
dg3[j, i].Value = Convert.ToInt32(dg3[j, i].Value) + Convert.ToInt32(dg1[k, i].Value) - Convert.ToInt32(dg2[j, k].Value);
}
}
}
//---------------------------------------------------------------------------------
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void numericUpDown1_ValueChanged(object sender, EventArgs e)
{
dataGridView1.RowCount = dataGridView2.RowCount = dataGridView3.RowCount = int.Parse(numericUpDown1.Value.ToString());//
dataGridView1.Columns[0].Width = dataGridView2.Columns[0].Width = dataGridView3.Columns[0].Width = 30;
}
private void numericUpDown2_ValueChanged(object sender, EventArgs e)
{
dataGridView1.ColumnCount = dataGridView2.ColumnCount = dataGridView3.ColumnCount = int.Parse(numericUpDown2.Value.ToString());
dataGridView1.Columns[int.Parse(numericUpDown2.Value.ToString()) - 1].Width = dataGridView2.Columns[int.Parse(numericUpDown2.Value.ToString()) - 1].Width = dataGridView3.Columns[int.Parse(numericUpDown2.Value.ToString()) - 1].Width = 30;
// groupBox1.Enabled();
}
private void radioButton1_CheckedChanged(object sender, EventArgs e)
{
int[,] aux = { { 1, 2, 3, 4, 5 }, { 6, 7, 8, 9, 10 }, { 1, 2, 3, 4, 5 }, { 1, 2, 3, 4, 5 }, { 1, 2, 3, 4, 5 } };
int nr = Convert.ToInt32(numericUpDown1.Value);
int nc = int.Parse(numericUpDown2.Value.ToString());
if (nr >= 3 && nr <= 5 && nc >= 3 && nc <= 5)
{
for (int ren = 0; ren < dataGridView1.RowCount; ren++)
{
for (int col = 0; col < dataGridView1.ColumnCount; col++)
{
dataGridView1.Rows[ren].Cells[col].Value = int.Parse(aux[ren, col].ToString());
}
}
}
else
{
MessageBox.Show("solo se aceptan valores entre 1 y 5\n introducir ");
radioButton1.Checked = false;
radioButton2.Checked = false;
radioButton3.Checked = false;
}
}
private void radioButton3_CheckedChanged(object sender, EventArgs e)
{
Random rnd = new Random();
for (int r = 0; r < dataGridView1.RowCount; r++)
for (int c = 0; c < dataGridView1.ColumnCount; c++)
{
dataGridView1[c, r].Value = rnd.Next(5, 10);
dataGridView2[c, r].Value = rnd.Next(5, 10);
}
}
private void radioButton2_CheckedChanged(object sender, EventArgs e)
{
// limpiar el datagrid view
dataGridView1.ReadOnly = false;
dataGridView2.ReadOnly = false;
dataGridView1.Focus();
for (int r = 0; r < dataGridView1.RowCount; r++)
for (int c = 0; c < dataGridView1.ColumnCount; c++)
{
dataGridView1[c, r].Value = Convert.ToInt32(dataGridView1[r, c].Value);
dataGridView2[c, r].Value = Convert.ToInt32(dataGridView2[r, c].Value);
}
}
private void button3_Click(object sender, EventArgs e)
{
int r = Convert.ToInt32(numericUpDown1.Value);
int c = Convert.ToInt32(numericUpDown1.Value);
Matematicaz matriz = new Matematicaz(r, c);
for (r = 0; r < dataGridView1.RowCount; r++)
for (c = 0; c < dataGridView1.ColumnCount; c++)
matriz[r, c] = Convert.ToInt32(dataGridView1[r, c].Value);
double diagP = matriz.diagPrin();
//textBox2.Text = diagP.ToString();
textBox2.Text = string.Format("{0:f2}", diagP);
}
private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
int r = 0, c = 0;
Matematicaz matriz = new Matematicaz();
for (r = 0; r < dataGridView1.RowCount; r++)
for (c = 0; c < dataGridView1.ColumnCount; c++)
dataGridView1[r, c].Value = Convert.ToInt32(dataGridView1[c, r].Value);
double diagS = matriz.diagSec();
textBox1.Text = diagS.ToString();
}
private void button1_Click(object sender, EventArgs e)
{
Matematicaz mult = new Matematicaz();
int r = Convert.ToInt32(numericUpDown1.Value);
int c = Convert.ToInt32(numericUpDown2.Value);
if (r == c)
{
mult.Multiplicacion(r, c, dataGridView1, dataGridView2, dataGridView3);
}
else
MessageBox.Show("La matriz no es apta para la multiplicacion");
}
private void button2_Click(object sender, EventArgs e)
{
int r = Convert.ToInt32(numericUpDown1.Value);
int c = Convert.ToInt32(numericUpDown1.Value);
Matematicaz matriz = new Matematicaz(r, c);
for (r = 0; r < dataGridView1.RowCount; r++)
for (c = 0; c < dataGridView1.ColumnCount; c++)
matriz[r, c] = Convert.ToInt32(dataGridView1[r, c].Value);
double diagS = matriz.diagSec();
//textBox2.Text = diagP.ToString();
textBox1.Text = string.Format("{0:f2}", diagS);
}
private void button4_Click(object sender, EventArgs e)
{
Matematicaz mult = new Matematicaz();
int r = Convert.ToInt32(numericUpDown1.Value);
int c = Convert.ToInt32(numericUpDown2.Value);
if (r == c)
{
mult.Resta(r, c, dataGridView1, dataGridView2, dataGridView3);
}
else
MessageBox.Show("La matriz no es apta para la multiplicacion");
}
private void button5_Click(object sender, EventArgs e)
{
Matematicaz mult = new Matematicaz();
int r = Convert.ToInt32(numericUpDown1.Value);
int c = Convert.ToInt32(numericUpDown2.Value);
if (r == c)
{
mult.Suma(r, c, dataGridView1, dataGridView2, dataGridView3);
}
else
MessageBox.Show("La matriz no es apta para la multiplicacion");
}
}
}
No hay comentarios:
Publicar un comentario