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); } }
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); } } } } }
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; } } }