Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        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));
        }
Ejemplo n.º 4
0
        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));
        }