Пример #1
0
        public static ArbolDecision <object> JugarRespuesta(string resp, ArbolDecision <object> datos)
        {
            switch (resp)
            {
            case "si":
                if (!datos.EsHoja())
                {
                    return(datos.HijoDerecho);
                }
                else
                {
                    return(datos);
                }

            case "no":
                if (!datos.EsHoja())
                {
                    return(datos.HijoIzquierdo);
                }
                else
                {
                    return(datos);
                }

            default:
                return(null);
            }
        }
Пример #2
0
        public static void SelectCaracteristicas(ConjuntoDeDatos conjuntoDeDatos, Clasificador clasificador, ArbolDecision <object> arbol)
        {
            if (arbol == null)
            {
                Console.WriteLine("Aún no se ha construido un árbol o el CSV seleccionado está vacio.");
            }
            else
            {
                //todo corregir nombres de variables
                List <Pregunta> caracteristicas = new List <Pregunta>();

                Console.WriteLine("\nSeleccione caracteristicas:");
                for (int i = 0; i < clasificador.Encabezados.Count - 1; i++)
                {
                    Console.Write("{0}: ", clasificador.Encabezados[i]);
                    string resp = Console.ReadLine();
                    caracteristicas.Add(new Pregunta(i, resp, clasificador.Encabezados[i]));
                }

                List <string> recorridoPreguntasRespuestas = new List <string>();
                bool          respuestaCarac = false;
                bool          finArbol       = false;

                while (!finArbol)
                {
                    if (!arbol.EsHoja())
                    {
                        Pregunta pregunta = (Pregunta)arbol.Dato;
                        recorridoPreguntasRespuestas.Add(pregunta.ToString());


                        for (int j = 0; j < caracteristicas.Count; j++)
                        {
                            if (pregunta.ToString().Contains(" Mayor o igual a ") && caracteristicas[j].ToString().Contains(" Mayor o igual a ") && pregunta.Columna == caracteristicas[j].Columna)
                            {
                                if (Convert.ToDouble(caracteristicas[j].Valor) >= Convert.ToDouble(pregunta.Valor) && pregunta.Columna == caracteristicas[j].Columna)
                                {
                                    respuestaCarac = true;
                                    recorridoPreguntasRespuestas.Add("Si");
                                    break;
                                }
                                else
                                {
                                    respuestaCarac = false;
                                    recorridoPreguntasRespuestas.Add("No");
                                    break;
                                }
                            }
                            else
                            {
                                if (pregunta.Valor == caracteristicas[j].Valor && pregunta.Columna == caracteristicas[j].Columna)
                                {
                                    respuestaCarac = true;
                                    recorridoPreguntasRespuestas.Add("Si");
                                    break;
                                }
                                else if (pregunta.Valor != caracteristicas[j].Valor && pregunta.Columna == caracteristicas[j].Columna)
                                {
                                    respuestaCarac = false;
                                    recorridoPreguntasRespuestas.Add("No");
                                    break;
                                }
                            }
                        }

                        switch (respuestaCarac)
                        {
                        case true:
                            arbol = JugarRespuesta("si", arbol);
                            break;

                        case false:
                            arbol = JugarRespuesta("no", arbol);
                            break;
                        }
                    }
                    else
                    {
                        finArbol = true;
                        Dictionary <string, int> etiquetas = (Dictionary <string, int>)arbol.Dato;

                        Console.WriteLine("\nPreguntas y respuestas hechas en base a las caracteristicas brindadas:");
                        foreach (string item in recorridoPreguntasRespuestas)
                        {
                            Console.WriteLine(item);
                        }
                        Console.WriteLine("\nDatos Encontrados:");
                        foreach (var hoja in etiquetas)
                        {
                            Console.WriteLine(hoja.Key);
                        }
                    }
                }
            }
        }
Пример #3
0
        public static void Jugar(ArbolDecision <object> arbol)
        {
            if (arbol == null)
            {
                Console.WriteLine("Aún no se ha construido un árbol o el CSV seleccionado está vacio.");
            }
            else
            {
                //Consigna va a ser el árbol de referencia que se va a utilizar al jugar, una vez que se termine y quiera volver a jugar se vuelve a generar dicho árbol.
                ArbolDecision <object> consigna = arbol;

                Console.Write("¿Ya estas listo para jugar?\n");
                Console.Write(respuestas);
                //Valido y convierto lo que ingrese por consola a un número. Sino vuelvo a preguntar
                int respuesta = ValidateOpcion(Console.ReadLine(), "¿Ya estas listo para jugar?\n");

                switch (respuesta)
                {
                case 1:
                    Console.Clear();
                    Titulo();
                    Console.WriteLine("¡¡Juguemos!!");
                    while (respuesta == 1)
                    {
                        //Si no es hoja imprimo la siguiente pregunta.
                        if (!consigna.EsHoja())
                        {
                            Console.WriteLine(consigna.Dato);
                            Console.Write(respuestas);

                            int respConsigna = ValidateOpcion(Console.ReadLine(), consigna.Dato.ToString());

                            switch (respConsigna)
                            {
                            case 1:
                                consigna = JugarRespuesta("si", consigna);
                                break;

                            case 2:
                                consigna = JugarRespuesta("no", consigna);
                                break;
                            }
                        }
                        else
                        {
                            //Si es una hoja, hago una conversión explicita del tipo object a dictionary para poder recorrerlo
                            Dictionary <string, int> etiquetas = (Dictionary <string, int>)consigna.Dato;

                            Console.WriteLine("Estoy pensando en/los:");
                            foreach (var hoja in etiquetas)
                            {
                                Console.WriteLine(hoja.Key);
                            }

                            Console.WriteLine("¿Deseas seguir jugando?");
                            Console.Write(respuestas);
                            respuesta = ValidateOpcion(Console.ReadLine(), "¿Deseas seguir jugando?");
                            //Si quiere volver a jugar vuelvo a instanciar el arbol de decisión original.
                            if (respuesta == 1)
                            {
                                Jugar(arbol);
                                break;
                            }
                            else
                            {
                                Console.WriteLine("\n:(\n" +
                                                  "¡Hasta la próxima!");
                                break;
                            }
                        }
                    }
                    break;

                case 2:
                    Console.WriteLine("\n:(\n" +
                                      "¡Hasta la próxima!");
                    break;
                }
            }
        }