Calculando con las clases Vector y Matriz

class Vector
{
    int[] vec;


    public Vector(int dim)
    {
        try
        {
            if (dim > 0)
                vec = new int[dim];
            else
                vec = new int[5];
        }
        catch (FormatException ex)
        {
            Console.Write("Solo se aceptan numeros enteros positivos" + ex);
        }
    }


    public int Mayor()
    {
        int mayor = vec[0];
        //Inicializamos la variable i en 1 porque ya tenemos el dato en la posicion 0
        for (int i = 1; i < vec.Length; i++)
            if (mayor < vec[i])
                mayor = vec[i];
        return mayor;
    }


    public int Menor()
    {
        int menor = vec[0];
        for (int i = 0; i < vec.Length; i++)
            if (menor > vec[i])
                menor = vec[i];
        return menor;
    }


    public void Insertar()
    {
        Random ran = new Random();
        for (int i = 0; i < vec.Length; i++)
            vec[i] = ran.Next(1000, 10001);
    }


    public void Asignar(int val, int pos)
    {
        if (pos >= 0 && pos < vec.Length)
            vec[pos] = val;
    }


    public int Leer(int pos)
    {
        return vec[pos];
    }


    //El uso del indexador suple los 2 metodos anteriores
    public int this[int pos]
    {
        get { return vec[pos]; }
        set { vec[pos] = value; }
    }


    public int Tamaño
    {
        get { return vec.Length; }
    }


    public void Leer()
    {
        for (int i = 0; i < vec.Length; i++)
            Console.WriteLine(vec[i]);
    }
}
//------------------------------------------------------------------------------------
class Matriz
{
    int[,] mat;
    int ren, col;

    //Constructor
    public Matriz(int r, int c)
    {
        ren = r;
        col = c;
        mat = new int[r, c];
    }

    public Matriz(DataGridView dg)
    {

        ren = dg.RowCount;
        col = dg.ColumnCount;
        mat = new int[ren, col];
        for (int i = 0; i < dg.RowCount; i++)
            for (int j = 0; j < dg.ColumnCount; j++)
                mat[i, j] = Convert.ToInt32(dg.Rows[i].Cells[j].Value.ToString());
    }

    //Indexador
    public int this[int r, int c]
    {
        get { return mat[r, c]; }
        set { mat[r, c] = value; }
    }

    //Metodos
    public double DiagonalPrinc()//int[,] m)
    {
        if (ren != col)
            return 0.0;
        double promedio = 0.0;
        for (int r = 0; r < mat.GetLength(0); r++)
            for (int c = 0; c < mat.GetLength(1); c++)
                if (r == c)
                    promedio += mat[r, c];
        return promedio / mat.GetLength(0);
    }

    public double DiagonalInv()//int[,] m)
    {
        if (ren != col)
            return 0.0;
        double prom = 0.0;
        int _col = col - 1;
        for (int i = 0; i < ren; i++)
            prom += mat[i, _col--];
        return prom / col;

    }

    //Propiedades
    public int Renglones
    {
        get { return mat.GetLength(0); }
    }

    public int Columnas
    {
        get { return mat.GetLength(1); }
    }

    //Multiplicar matrices
    static public Matriz operator *(Matriz a, Matriz b)
    {
        Matriz aux = new Matriz(a.ren, b.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;
    }
}
//--------------------------------------------------------------------
public partial class Form1 : Form
    {
        Matriz mat = new Matriz(5, 4);
        Vector vec;
        int[,] m = { { 194, 48, 206, 45 },
                { 180, 20, 310, 15 },
                {88, 301, 90, 25},
                { 403, 70, 77, 32 },
                { 201, 88, 23, 55 }};
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            dgv1.RowCount = 5;
            dgv1.ColumnCount = 5;
            dgv2.RowCount = 1;
            dgv2.ColumnCount = 5;
            dgv3.RowCount = 1;
            dgv3.ColumnCount = 4;
            dgv1.Columns[0].HeaderCell.Value = "Distrito";
            dgv1.Columns[1].HeaderCell.Value = "Candidato A";
            dgv1.Columns[2].HeaderCell.Value = "Candidato B";
            dgv1.Columns[3].HeaderCell.Value = "Candidato C";
            dgv1.Columns[4].HeaderCell.Value = "Candidato D";
            dgv2.Rows[0].HeaderCell.Value = "Votos";
            dgv2.Columns[0].HeaderCell.Value = "Candidato A";
            dgv2.Columns[1].HeaderCell.Value = "Candidato B";
            dgv2.Columns[2].HeaderCell.Value = "Candidato C";
            dgv2.Columns[3].HeaderCell.Value = "Candidato D";
            dgv2.Columns[4].HeaderCell.Value = "Total de votos";
            dgv3.Rows[0].HeaderCell.Value = "%";
            dgv3.Columns[0].HeaderCell.Value = "Candidato A";
            dgv3.Columns[1].HeaderCell.Value = "Candidato B";
            dgv3.Columns[2].HeaderCell.Value = "Candidato C";
            dgv3.Columns[3].HeaderCell.Value = "Candidato D";
            for (int i = 0; i < 5; i++)
                for (int j = 0; j < m.GetLength(1); j++)
                {
                    mat[i, j] = m[i, j];
                    dgv1[0, i].Value = (i + 1).ToString();
                    dgv1[j + 1, i].Value = mat[i, j];
                }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            int aux = 0;
            vec = new Vector(4);
            for (int i = 0; i < vec.Tamaño; i++)
            {
                for (int j = 0; j < mat.Renglones; j++)
                {
                    vec[i] += mat[j, i];
                }
                aux += vec[i];
                dgv2[i, 0].Value = vec[i];
                dgv2[4, 0].Value = aux;
            }

            double[] vector = new double[4];
            for (int i = 0; i < dgv3.ColumnCount; i++)
            {
                vector[i] = ((double)vec[i] / aux) * 100;
                dgv3[i, 0].Value = vector[i];
            }
            if (vector[0] >= 50)
                MessageBox.Show("Ganador: Candidato A");
            else
                if (vector[1] >= 50)
                    MessageBox.Show("Ganador: Candidato B");
                else
                    if (vector[2] >= 50)
                        MessageBox.Show("Ganador: Candidato C");
                    else
                        if (vector[3] >= 50)
                            MessageBox.Show("Ganador: Candidato D");
                        else
                            MessageBox.Show("No hay ganador");   
        }
    }
}

No hay comentarios:

Publicar un comentario