Operaciones de una matriz

Desarrollaremos una aplicacion en visual donde apliquemos la suma, resta ,multiplicacion,el promedio de su diagonal principal e invertida 


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