private void crearConjuntos() { int cantidadOriginales = mapaAtributos.Count; List<KString> unitarios = new List<KString>(); /*TODOS*/ String nuevo = ""; foreach (var key in mapaAtributos.Keys) { Atributo attr = mapaAtributos[key]; if (!attr.esConjunto() && !attr.esMultivaluado()) { nuevo += (nuevo == "") ? attr.getValor().value() : "," + attr.getValor(); unitarios.Add(attr.getValor()); } } Atributo atributoConj = new Atributo(nuevo); if (!mapaAtributos.ContainsKey(atributoConj.getValor())) { mapaAtributos.Add(atributoConj.getValor(), atributoConj); System.Diagnostics.Debug.WriteLine("Agregado: " + nuevo); } /*Subconjuntos pequeños*/ KString TODOS = new KString(nuevo); for (int i = 2; i < cantidadOriginales - 1; i++) { List<KString> nuevos = combinacion(unitarios, i); foreach (KString nuevoCon in nuevos) { if (!mapaAtributos.ContainsKey(nuevoCon)) { mapaAtributos.Add(nuevoCon, new Atributo(nuevoCon)); } } } /* List<String> nuevos = new List<String>(); foreach (var atributoAQuitar in mapaAtributos.Keys) { nuevo = ""; foreach (var key in mapaAtributos.Keys) { if (atributoAQuitar == key) continue; Atributo attr = mapaAtributos[key]; if (!attr.esConjunto() && !attr.esMultivaluado()) { nuevo += (nuevo == "") ? attr.getValor().value() : "," + attr.getValor(); } } nuevos.Add(nuevo); } foreach (String val in nuevos) { Atributo atributoSubConj = new Atributo(val); if (!mapaAtributos.ContainsKey(atributoSubConj.getValor())) { mapaAtributos.Add(atributoSubConj.getValor(), atributoSubConj); System.Diagnostics.Debug.WriteLine("Agregado: " + val); } }*/ }
private void determinarClavePrimaria() { if (clavesCandidatas.Count <= 0) { MessageBox.Show("No se han encontrado Claves Candidatas ni clave primaria!\nNo se puede normalizar!"); return; } cb_accion.Enabled = true; cb_accion.SelectedIndex = 1; int menor = clavesCandidatas.First().Value.getPeso(); KString kmenor = clavesCandidatas.First().Key; if (menor > 1) { foreach(var key in clavesCandidatas.Keys){ Atributo kcand = clavesCandidatas[key]; if (kcand.getPeso() < menor) { menor = kcand.getPeso(); kmenor = (KString)key; } } } clavePrimaria = clavesCandidatas[kmenor]; fmas.Text += "Clave Primaria: " + clavePrimaria.getValor() + " \n"; }
private void button1_Click_1(object sender, EventArgs e) { String entrada = tf_entrada.Text.ToUpper(); switch (cb_tipo.SelectedIndex) { //Agregar Relacion case 0: { if (relacionValida(entrada)) { listaRelaciones.Items.Add(entrada); String[] elementos = entrada.Split(','); confPB(elementos.Length); foreach (String elem in elementos) { Atributo attr = new Atributo(elem); mapaAtributos.Add(attr.getValor(), attr); barra_progreso.PerformStep(); } crearConjuntos(); barra_progreso.Value = 0; cb_tipo.SelectedIndex = 1; tf_entrada.Text = ""; etiqueta_estado.Text = "Esperando Dependencia..."; } else { MessageBox.Show("Datos invalidos, porfavor revise: "+entrada+"\nFormato válido: X,Y<m>,Z,W<m>"); } break; } //Agregar Dependencia case 1: { if (dependenciaValida(entrada)) { String[] deps = entrada.Split('/'); foreach (String entradaD in deps) { listaDependencias.Items.Add(entradaD); String[] partes = entradaD.Split('>'); KString determinantes = new KString(partes[0]); KString dependientes = new KString(partes[1]); Atributo attrDeterminate; Atributo attrDependiente; if (mapaAtributos.ContainsKey(determinantes)) { attrDeterminate = mapaAtributos[determinantes]; } else { attrDeterminate = new Atributo(determinantes); mapaAtributos.Add(determinantes, attrDeterminate); } if (mapaAtributos.ContainsKey(dependientes)) { attrDependiente = mapaAtributos[dependientes]; } else { attrDependiente = new Atributo(dependientes); mapaAtributos.Add(dependientes, attrDependiente); } /*al agregar un determinante a un atributo internamente se agrega al atributo como dependiente. */ attrDependiente.addDeterminante(attrDeterminate); } tf_entrada.Text = ""; etiqueta_estado.Text = "Listo"; btn_ejecutar.Enabled = true; } else { MessageBox.Show("Datos invalidos, porfavor revise: " + entrada + "\nFormato válido: X,Y>W,Z[/Q,P>R,S]"); } break; } }//FIn Switch }