private static IBooleanFunction GetInputSignFunction(InputSign inputSign) { IBooleanFunction inputFunction = new InputFunction(inputSign.Index); if (inputSign.IsInversed) { inputFunction = new NotFunction(inputFunction); } return(inputFunction); }
static void Main(string[] args) { bool[] output = BitTools.GetOutputBool(KaterynaBodnarchukTask.KateBodnarchukCase); PrintWithTitle("Original Function", LogicConvert.ToOrFunction(PositiveMcCluskeyMethod.GetConstituents(output))); IList <Implicant> minimalDisjunctionalNormalForm = PositiveMcCluskeyMethod.GetImplicantDisjunctionNormalForm(output); PrintWithTitle("Optimized Function", LogicConvert.ToOrFunction(minimalDisjunctionalNormalForm)); Console.WriteLine(); bool[] outputInversed = output.Select(i => !i).ToArray(); PrintWithTitle( "Original Inversed Function", LogicConvert.ToOrFunction(PositiveMcCluskeyMethod.GetConstituents(outputInversed))); IBooleanFunction minimalDisjunctionalNormalFormInversed = LogicConvert.ToOrFunction(PositiveMcCluskeyMethod.GetImplicantDisjunctionNormalForm(outputInversed)); PrintWithTitle("Optimized Inversed Function", minimalDisjunctionalNormalFormInversed); Console.WriteLine(); IBooleanFunction minimalDisjunctionalNormalFormDobleInversed = new NotFunction(minimalDisjunctionalNormalFormInversed); PrintWithTitle("Optimized Inversed Function Inversed", minimalDisjunctionalNormalFormDobleInversed); Console.WriteLine(); IBooleanFunction andOfNotAndForm = RecursiveTransform.ExecuteRecursive( minimalDisjunctionalNormalFormDobleInversed, DeMorgansLaw.TryConvertNotOfOrToAndOfNot); PrintWithTitle("Not of not and", andOfNotAndForm); IBooleanFunction andOfOrForm = RecursiveTransform.ExecuteRecursive( andOfNotAndForm, DeMorgansLaw.TryConvertNotOfAndToOrOfNot); PrintWithTitle("And of or", andOfOrForm); IBooleanFunction doubleNotOfAndOfOrForm = NotFunction.DobleNot(andOfOrForm); IBooleanFunction notOfOrNotOfOrForm = RecursiveTransform.ExecuteRecursive( doubleNotOfAndOfOrForm, DeMorgansLaw.TryConvertNotOfAndToOrOfNot); PrintWithTitle("NotOfOr/NotOfOr", notOfOrNotOfOrForm); uint input = uint.Parse(Console.ReadLine()); Console.WriteLine("Output: " + notOfOrNotOfOrForm.Evaluate(new UInt32EvaluationContext(input))); Console.ReadKey(); }
public void TestTryConvertNotOfAndToOrOfNot() { var original = new NotFunction( new AndFunction( new InputFunction(0), new InputFunction(1) ) ); var expected = new OrFunction( new NotFunction(new InputFunction(0)), new NotFunction(new InputFunction(1)) ); IBooleanFunction result; Assert.IsTrue(DeMorgansLaw.TryConvertNotOfAndToOrOfNot(original, out result)); Assert.IsNotNull(result); Assert.IsTrue(BooleanFunctionEqualityComparer.Instance.Equals(result, expected)); }