//EFE:Crea un gráfico con la información de los resultados en la base de datos.
        //REQ:Que exista una conexion a la base de datos.
        //MOD:--string cedulaProfesor, short annoGrupo, byte semestreGrupo, byte numeroGrupo, string siglaCurso,
        public JsonResult GraficoPie(string codigoFormulario, string cedulaProfesor, short annoGrupo, byte semestreGrupo, byte numeroGrupo, string siglaCurso, string itemId, byte tipoPregunta)
        {
            var           result = ObtenerCantidadRespuestasPorPregunta(codigoFormulario, cedulaProfesor, annoGrupo, semestreGrupo, numeroGrupo, siglaCurso, itemId).ToList();
            List <object> x      = new List <object>();
            List <object> y      = new List <object>();

            List <int?> listaOrdenada = new List <int?>();
            int         size          = 0;
            double?     mediana       = 0;
            double?     tamanio       = 0;
            int         counter       = 0;
            double?     promedio      = 0;
            double?     desviacion    = 0;
            double      sumatoria     = 0;
            double      actual        = 0;

            if (!Enumerable.Range(5, 6).Contains(tipoPregunta))
            {
                var  labels = db.SP_RecuperarEtiquetas(tipoPregunta, itemId).ToList();
                bool encontrado;

                foreach (var label in labels)
                {
                    encontrado = false;
                    x.Add(label);
                    foreach (var resul in result)
                    {
                        if (resul.Respuesta == label)
                        {
                            y.Add(resul.cntResp);
                            listaOrdenada.Add(resul.cntResp);
                            tamanio = tamanio + listaOrdenada[counter];
                            counter++;
                            encontrado = true;
                        }
                    }
                    if (encontrado == false)
                    {
                        y.Add(0);
                        listaOrdenada.Add(0);
                        tamanio = tamanio + listaOrdenada[counter];
                        counter++;
                    }
                }
            }
            else
            {
                var  rango      = db.SP_RecuperarEtiquetasEscalar(tipoPregunta, itemId).ToList();
                int  inicio     = rango[0].Inicio;
                int  final      = rango[0].Fin;
                int  incremento = rango[0].Incremento;
                bool encontrado = false;
                for (int i = inicio; i <= (final + 1); i += incremento)
                {
                    encontrado = false;
                    if (i == final + 1)
                    {
                        x.Add("No se/No Responde/No Aplica");
                        foreach (var resul in result)
                        {
                            if (Int16.Parse(resul.Respuesta) == i)
                            {
                                encontrado = true;
                                y.Add(resul.cntResp);
                                listaOrdenada.Add(resul.cntResp);
                                tamanio = tamanio + listaOrdenada[counter];
                                counter++;
                            }
                        }
                        if (encontrado == false)
                        {
                            y.Add(0);
                            listaOrdenada.Add(0);
                            tamanio = tamanio + listaOrdenada[counter];
                            counter++;
                        }
                    }
                    else
                    {
                        x.Add(i);
                        foreach (var resul in result)
                        {
                            if (Int16.Parse(resul.Respuesta) == i)
                            {
                                encontrado = true;
                                y.Add(resul.cntResp);
                                listaOrdenada.Add(resul.cntResp);
                                tamanio = tamanio + listaOrdenada[counter];
                                counter++;
                            }
                        }
                        if (encontrado == false)
                        {
                            y.Add(0);
                            listaOrdenada.Add(0);
                            tamanio = tamanio + listaOrdenada[counter];
                            counter++;
                        }
                    }
                }
            }

            listaOrdenada.Sort();
            size = listaOrdenada.Count();

            //Calcular el promedio

            promedio = tamanio / size;

            //Calcular la mediana

            if (size % 2 == 0)
            {
                mediana = (listaOrdenada[(size / 2) - 1] + listaOrdenada[(size / 2)]) / 2;
            }
            else
            {
                mediana = listaOrdenada[(size / 2)];
            }

            //Calcular la desviacion estandar

            for (int i = 0; i < size; i++)
            {
                actual    = (double)listaOrdenada[i];
                sumatoria = sumatoria + Math.Pow(actual - (double)mediana, 2);
            }

            desviacion = Math.Sqrt(sumatoria / size);

            List <object> lista = new List <object> {
                x, y, promedio, mediana, desviacion
            };

            return(Json(lista, JsonRequestBehavior.AllowGet));
        }