private void btnArchivo_Click(object sender, EventArgs e)
        {
            if (Validar_btnArchivo())
            {
                try
                {
                    CargarDocumentos_E objcd = new CargarDocumentos_E();
                    TipoDato_E         objtd = new TipoDato_E();
                    objcd.data = CargaDocumento();

                    if (objcd.data != null)
                    {
                        objtd.tipodato = ValidarTipoDato(objcd.data);
                        if (objtd.tipodato == 0)
                        {
                            CargaDatos(objcd.data);
                        }
                        else if (objtd.tipodato == 1)
                        {
                            MessageBox.Show("Se encontraron datos numericos", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        }
                        else if (objtd.tipodato == 2)
                        {
                            MessageBox.Show("Se encontraron datos no numericos", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        }
                    }
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }
        }
        private void btnRefrescar_Click(object sender, EventArgs e)
        {
            CargarDocumentos_E objcd = new CargarDocumentos_E();
            TipoDato_E         objtd = new TipoDato_E();

            objcd.data = null;
            objcd.ruta = openFileDialog.FileName;
            dtgvFrecuenciaRelativa.Rows.Clear();
            objcd.data = File.ReadAllLines(objcd.ruta);

            if (objcd.data != null)
            {
                objtd.tipodato = ValidarTipoDato(objcd.data);
                if (objtd.tipodato == 0)
                {
                    CargaDatos(objcd.data);
                }
                else if (objtd.tipodato == 1)
                {
                    MessageBox.Show("Se encontraron datos numericos", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }
                else if (objtd.tipodato == 2)
                {
                    MessageBox.Show("Se encontraron datos no numericos", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }
            }
        }
        private void btnTendeciaCentral_Click(object sender, EventArgs e)
        {
            List <TablaFrecuencia_E> DataFinal = new List <TablaFrecuencia_E>();

            DataFinal = RecuperarDatos();

            if (DataFinal.Count == 0)
            {
                MessageBox.Show("Se deben cargar datos previamente", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
            else
            {
                CargarDocumentos_E objcd = new CargarDocumentos_E();
                TipoDato_E         objtd = new TipoDato_E();
                objcd.data = null;
                objcd.ruta = openFileDialog.FileName;
                objcd.data = File.ReadAllLines(objcd.ruta);

                List <decimal> lststring = new List <decimal>();
                foreach (var item in objcd.data)
                {
                    lststring.Add(Decimal.Parse(item));
                }

                decimal[] array = lststring.ToArray();

                Form frombarra = new TendenciaCentral(DataFinal, array);
                frombarra.Show();
            }
        }
        public void CargaDatos(string[] data)
        {
            TipoDato_E objtd = new TipoDato_E();

            foreach (string item in data)
            {
                if (rbnTexto.Checked)
                {
                    objtd.datatexto.Add(item);
                }

                if (rbnNumerico.Checked)
                {
                    objtd.datadecimal.Add(decimal.Parse(item.Replace('.', ',')));
                }
            }

            List <TablaFrecuencia_E> xi_fi = new List <TablaFrecuencia_E>();

            if (rbnSinIntervalo.Checked)
            {
                if (rbnTexto.Checked)
                {
                    xi_fi = objtd.datatexto.GroupBy(x => x)
                            .Select(y => new TablaFrecuencia_E {
                        strxi = y.Key, fi = y.Count()
                    })
                            .OrderBy(z => z.strxi).AsEnumerable().ToList();
                }

                if (rbnNumerico.Checked)
                {
                    xi_fi = objtd.datadecimal.GroupBy(x => x)
                            .Select(y => new TablaFrecuencia_E {
                        xi = y.Key, fi = y.Count()
                    })
                            .OrderBy(z => z.xi).AsEnumerable().ToList();
                }
            }

            if (rbnConIntervalo.Checked)
            {
                Intervalo_E objint = new Intervalo_E();
                objint.numintervalo = Convert.ToInt32(txtInvertavalos.Text);
                objint.intervalo    = Convert.ToDecimal(txtIntervaloSuperior.Text.Replace('.', ',')) - Convert.ToDecimal(txtIntervaloInferior.Text.Replace('.', ','));
                objint.intinf       = Convert.ToDecimal(txtIntervaloInferior.Text.Replace('.', ','));
                objint.intsup       = Convert.ToDecimal(txtIntervaloSuperior.Text.Replace('.', ','));
                objint.fi           = 0;
                for (int i = 0; i < objint.numintervalo; i++)
                {
                    List <TablaFrecuencia_E> aux_xi_fi = new List <TablaFrecuencia_E>();

                    aux_xi_fi = objtd.datadecimal.GroupBy(x => x)
                                .Select(y => new TablaFrecuencia_E {
                        xi = y.Key, fi = y.Count()
                    })
                                .Where(z => z.xi >= objint.intinf && z.xi <= objint.intsup).ToList();

                    objint.fi = aux_xi_fi.Select(x => x.fi).Sum();

                    decimal tmpxi        = objint.intinf;
                    decimal indexxi      = objint.intinf;
                    int     numintervalo = 1;

                    while (indexxi < objint.intsup)
                    {
                        bool isNumeric = int.TryParse(objint.intinf.ToString(), out int n);
                        if (isNumeric)
                        {
                            indexxi++;
                            tmpxi += indexxi;
                            numintervalo++;
                        }
                        else
                        {
                            indexxi = indexxi + Convert.ToDecimal(0.01);
                            tmpxi  += indexxi;
                            numintervalo++;
                        }
                    }

                    TablaFrecuencia_E xi = new TablaFrecuencia_E
                    {
                        strxi = string.Concat(objint.intinf, " - ", objint.intsup),
                        xi    = tmpxi / numintervalo,
                        fi    = objint.fi
                    };

                    objint.intinf  = objint.intsup + (objint.intervalo >= 1 ? 1 : Convert.ToDecimal(0.01));
                    objint.intsup += objint.intervalo + (objint.intervalo >= 1 ? 1 : Convert.ToDecimal(0.01));

                    xi_fi.Add(xi);
                }
            }

            int xicount = xi_fi.Select(x => x.fi).Sum();

            var hi = xi_fi.Select(x => new { x.strxi, x.xi, x.fi, hi = Math.Round((decimal)x.fi / xicount, 3) }).ToList();

            int Fi = 0; decimal Hi = 0;

            for (int i = 0; i < hi.Count; i++)
            {
                dtgvFrecuenciaRelativa.Rows.Add();
                int y = 0;
                if (rbnSinIntervalo.Checked)
                {
                    if (rbnTexto.Checked)
                    {
                        dtgvFrecuenciaRelativa[y++, i].Value = hi[i].strxi;
                    }

                    if (rbnNumerico.Checked)
                    {
                        dtgvFrecuenciaRelativa[y++, i].Value = hi[i].xi;
                    }
                    y++;
                }

                if (rbnConIntervalo.Checked)
                {
                    dtgvFrecuenciaRelativa[y++, i].Value = hi[i].strxi;
                    dtgvFrecuenciaRelativa[y++, i].Value = hi[i].xi;
                }

                Fi += hi[i].fi;
                Hi += hi[i].hi;
                dtgvFrecuenciaRelativa[y++, i].Value = hi[i].fi;
                dtgvFrecuenciaRelativa[y++, i].Value = Fi;
                dtgvFrecuenciaRelativa[y++, i].Value = hi[i].hi;
                dtgvFrecuenciaRelativa[y++, i].Value = Hi;
            }
        }