示例#1
0
        public static IEnumerable <bool> Execute(string function, int variables)
        {
            var fun    = new LogicFunction(function, variables);
            var values = new List <bool>(fun.MaxValue);

            return(Enumerable.Range(0, fun.MaxValue).Select(i => fun.Test(i)));
        }
示例#2
0
        private void toolStripRun_Click(object sender, EventArgs e)
        {
            dataGridView1.EndEdit();
            var functions = new List <string>();

            for (int c = VariablesNumber; c < dataGridView1.Columns.Count; c++)
            {
                int?[] m = new int?[TermsNumber];
                int?[] d = new int?[TermsNumber];
                int    k = 0, j = 0;

                for (int r = 0; r < TermsNumber; r++)
                {
                    var value = dataGridView1.Rows[r].Cells[c].Value;
                    if ("1".Equals(value))
                    {
                        m[k++] = r;
                    }
                    else if (!("0".Equals(value)))
                    {
                        d[j++] = r;
                    }
                }

                var terms    = m.Where(t => t.HasValue).Select(t => t.Value).ToArray();
                var dontCare = d.Where(t => t.HasValue).Select(t => t.Value).ToArray();

                var solver   = new Solver(VariablesNumber, terms, dontCare);
                var function = solver.Solve();

                // Test the result function
                var result = LogicFunction.Execute(function, VariablesNumber).ToArray();

                var test = Enumerable.Range(0, TermsNumber)
                           .Select(i =>
                {
                    var value = dataGridView1.Rows[i].Cells[c].Value;
                    var bit   = "1".Equals(value) ? true : "0".Equals(value) ? false : (bool?)null;
                    return(new { Idx = i, Bit = bit });
                })
                           .Where(t => t.Bit.HasValue)
                           .All(t => result[t.Idx] == t.Bit);

                functions.Add(dataGridView1.Columns[c].HeaderText + " = " + function + (test ? "": " >>> Test FAIL! <<<"));
            }

            textBox1.Text = string.Join("\r\n", functions.ToArray());
        }