public List <TablaFrecuencia_E> RecuperarDatos()
        {
            List <TablaFrecuencia_E> DataFinal = new List <TablaFrecuencia_E>();

            foreach (DataGridViewRow dr in dtgvFrecuenciaRelativa.Rows)
            {
                TablaFrecuencia_E obj = new TablaFrecuencia_E();


                if (dr.Cells["xi"].Value != null)
                {
                    if (rbnSinIntervalo.Checked)
                    {
                        if (rbnTexto.Checked)
                        {
                            obj.strxi = Convert.ToString(dr.Cells["xi"].Value);
                        }

                        if (rbnNumerico.Checked)
                        {
                            obj.xi = Convert.ToDecimal(dr.Cells["xi"].Value);
                        }
                    }

                    if (rbnConIntervalo.Checked)
                    {
                        obj.strxi = Convert.ToString(dr.Cells["xi"].Value);
                        obj.xi    = Convert.ToDecimal(dr.Cells["tmpxi"].Value);
                    }

                    obj.fi = Convert.ToInt32(dr.Cells["fi"].Value);
                    obj.Fi = Convert.ToInt32(dr.Cells["F"].Value);
                    obj.ni = Convert.ToDecimal(dr.Cells["ni"].Value);
                    obj.Ni = Convert.ToDecimal(dr.Cells["N"].Value);
                    DataFinal.Add(obj);
                }
            }

            return(DataFinal);
        }
        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;
            }
        }