private void button1_Click(object sender, EventArgs e) { VarsWithValue v = new VarsWithValue(var, cmbAns.SelectedItem.ToString()); kbase.valuableVariable.Add(v); okpressed = true; this.Close(); }
public string ConcGoal(Variable var, TreeNode tn) { int indexRules = 0; string goal = ""; while (goal == "" && indexRules < rules.Count) { bool concHasVar = false, good = true; foreach (Fact f in rules[indexRules].concFact) { if (f.varName == var.name && !workedRules.Contains(rules[indexRules])) { concHasVar = true; } } if (concHasVar && !workedRules.Contains(rules[indexRules])) { tn.Nodes.Add(GetStringForRule(rules[indexRules])); foreach (Fact f in rules[indexRules].sendFact) { if (good) { TreeNode tn1 = tn.Nodes[tn.Nodes.Count - 1]; tn1.Nodes.Add("Выводим " + f.varName); if (hasVarValue(f.varName)) { TreeNode tn2 = tn1.Nodes[tn1.Nodes.Count - 1]; VarsWithValue vWv = valuableVariable.Find(delegate(VarsWithValue v) { return(v.var.name == f.varName); }); if (vWv.value != f.value) { good = false; } tn2.Nodes.Add("Уже означено " + vWv.var.name + " = " + vWv.value); } else { Variable sendVar = vars.Find(delegate(Variable v) { return(v.name == f.varName); }); if (sendVar.type == varType.query) { TreeNode tn2 = tn1.Nodes[tn1.Nodes.Count - 1]; int count = valuableVariable.Count; if (AskVar(sendVar) == -1) { goal = "Прервано"; good = false; } else { VarsWithValue vWv = valuableVariable.Find(delegate(VarsWithValue v) { return(v.var.name == f.varName); }); if (vWv.value != f.value) { good = false; } tn2.Nodes.Add("Пользователь ввел " + vWv.var.name + " = " + vWv.value); } } else if (sendVar.type == varType.queryDeduction) { Variable varDed = vars.Find(delegate(Variable v2) { return(v2.name == f.varName); }); TreeNode tn2 = tn1.Nodes[tn1.Nodes.Count - 1]; if (ConcGoal(varDed, tn2) == "") { AskVar(sendVar); tn2 = tn1.Nodes[tn1.Nodes.Count - 1]; VarsWithValue vWv = valuableVariable.Find(delegate(VarsWithValue v) { return(v.var.name == f.varName); }); if (vWv.value != f.value) { good = false; } tn2.Nodes.Add("Пользователь ввел " + vWv.var.name + " = " + vWv.value); } else { int indvar = valuableVariable.FindIndex(delegate(VarsWithValue v) { return(v.var.name == varDed.name); }); if (valuableVariable[indvar].value != f.value) { good = false; } } } else { Variable varDed = vars.Find(delegate(Variable v2) { return(v2.name == f.varName); }); TreeNode tn2 = tn1.Nodes[tn1.Nodes.Count - 1]; if (ConcGoal(varDed, tn2) == "") { good = false; } else { int indvar = valuableVariable.FindIndex(delegate(VarsWithValue v) { return(v.var.name == varDed.name); }); if (valuableVariable[indvar].value != f.value) { good = false; } } } } } } if (good) { TreeNode tn1 = tn.Nodes[tn.Nodes.Count - 1]; tn1.Nodes.Add("Правило сработало"); foreach (Fact f in rules[indexRules].concFact) { Variable varConc = vars.Find(delegate(Variable v2) { return(v2.name == f.varName); }); VarsWithValue v = new VarsWithValue(varConc, f.value); if (valuableVariable.FindIndex(delegate(VarsWithValue v3) { return(v3.var.name == f.varName); }) == -1) { valuableVariable.Add(v); tn.Nodes.Add("Означили : " + v.var.name + " = " + v.value); } } tn1.Nodes.Add(rules[indexRules].reason); VarsWithValue vWv = valuableVariable.Find(delegate(VarsWithValue v) { return(v.var.name == var.name); }); goal = vWv.value; workedRules.Add(rules[indexRules]); } else { TreeNode tn1 = tn.Nodes[tn.Nodes.Count - 1]; tn1.Nodes.Add("Правило не сработало"); tn1.Remove(); } } indexRules++; } if (goal == "") { MessageBox.Show("ЭС не смогла определить значение целевой переменной"); } treeNode = (TreeNode)tn.Clone(); return(goal); }