public static TruthTableValues FillTruthTableVariablesValues(List <INode> leafs, int rows) { TruthTableValues tableValues = new TruthTableValues(); foreach (INode leaf in leafs) { int numberOfZeros = (int)Math.Pow(2, (leafs.Count() - tableValues.Count()) - 1); string valueToAdd = "0"; int curr = 0; for (int i = 0; i < rows; i++) { if (tableValues.ContainsKey($@"{leaf.Value}")) { tableValues[$@"{leaf.Value}"].Add(valueToAdd); } else { tableValues.Add($@"{leaf.Value}", new List <string>() { valueToAdd }); } if (++curr == numberOfZeros) { valueToAdd = valueToAdd == "0" ? "1" : "0"; curr = 0; } } } return(tableValues); }
public void Should_Duplicate_TruthTableValues_Without_Reference() { TruthTableValues values1 = new TruthTableValues(); TruthTableValues values2 = (TruthTableValues)values1.Clone(); values1.Add("dummy_key", new List <string>()); values1.Should().NotBeSameAs(values2); }
public static TruthTable GenerateTruthTable(List <int> minterms) { TruthTableValues values = GenerateVariableValues(minterms); int rows = (int)Math.Pow(2, values.Count); List <string> resultValues = new List <string>(); for (int i = 0; i < rows; i++) { resultValues.Add(minterms.Contains(i) ? "1" : "0"); } values.Add("RESULT", resultValues); return(new TruthTable(values)); }
private static TruthTable EvaluateTruthTable( this TruthTableValues tableValues, IBinaryExpressionTree tree, string resultColumnName, int rows) { tableValues.Add(resultColumnName, new List <string>()); Stack <bool> stack = new Stack <bool>(); var postOrderedTree = tree.TraversePostOrder(); for (int i = 0; i < rows; i++) { foreach (var node in postOrderedTree) { if (node.Value.IsOperator()) { if (((char)Operators.Negation).Equals(node.Value)) { bool value = stack.Pop(); Operators operatoValue = (Operators)node.Value; bool operationResult = HelperExtensions.GetOperationResult(value, operatoValue); stack.Push(operationResult); } else { bool value2 = stack.Pop(); bool value1 = stack.Pop(); Operators operatoValue = (Operators)node.Value; bool operationResult = HelperExtensions.GetOperationResult(value1, operatoValue, value2); stack.Push(operationResult); } } else { stack.Push(Convert.ToInt32(tableValues[$@"{node.Value}"][i]).ToBool()); } } tableValues[resultColumnName].Add(stack.Pop() ? "1" : "0"); } return(new TruthTable(tableValues)); }