Ejemplo n.º 1
0
        /**
         * Equals only iff every implicant is in the same order and same subarea in both
         */
        public override bool Equals(object obj)
        {
            QuineColumn column = (QuineColumn)obj;

            if (column.implicantLength != this.implicantLength)
            {
                return(false);
            }
            if (column.implicants.Count != this.implicants.Count)
            {
                return(false);
            }
            for (int i = 0; i < implicants.Count; i++)
            {
                if (implicants[i].Count != this.implicants[i].Count)
                {
                    return(false);
                }
            }
            for (int i = 0; i < this.implicants.Count; i++)
            {
                for (int j = 0; j < this.implicants[i].Count; j++)
                {
                    if (!this.implicants[i][j].Equals(column.implicants[i][j]))
                    {
                        return(false);
                    }
                }
            }
            return(true);
        }
Ejemplo n.º 2
0
        /**
         * Finds the prime Implicants by repeatedly simplify the resulting columns
         */
        private void findPrimeImplicants()
        {
            int currentColumnNum = 0;

            do
            {
                //System.Console.WriteLine(this.columns[currentColumnNum].ToString());
                QuineColumn currentColumn = this.columns[currentColumnNum];
                Tuple <QuineColumn, List <Implicant> > tempTuple = QuineColumn.ColumnSimplify(currentColumn);
                //this.primeImplicants.AddRange(tempTuple.Item2);
                this.primeImplicants.AddRange(tempTuple.Item2);
                this.columns.Add(tempTuple.Item1);
                currentColumnNum += 1;
            } while (!this.columns[currentColumnNum].Equals(columns[currentColumnNum - 1])); // continue as long as simplification still occurs
            this.foundPrimes = true;
        }
Ejemplo n.º 3
0
        /**
         * Simplifies a list and removes any dublicates
         */
        public static Tuple <QuineColumn, List <Implicant> > ColumnSimplify(QuineColumn column)
        {
            List <List <Implicant> > newColumn       = new List <List <Implicant> >();
            List <Implicant>         unusedImplcants = buildUnusedList(column.implicants);

            for (int i = 0; i <= column.implicantLength; i++)
            {
                newColumn.Add(new List <Implicant>());
            }
            for (int i = 0; i < column.implicants.Count - 1; i++)            // Loops through the super list which sorts sublists based on the number of ones
            {
                for (int j = 0; j < column.implicants[i].Count; j++)         // one column looping through
                {
                    for (int m = 0; m < column.implicants[i + 1].Count; m++) // Lopp through next column looking for a match
                    {
                        if (Implicant.CanCombine(column.implicants[i][j], column.implicants[i + 1][m]))
                        {
                            //Console.WriteLine($"Trying to combine: {column[i][j].ToString()} {column[i + 1][m].ToString()}");
                            //Console.WriteLine($"These can combine: {Implicant.CanCombine(column[i][j], column[i+1][m])}");
                            Implicant newImp = Implicant.Combine(column.implicants[i][j], column.implicants[i + 1][m]);
                            //Console.WriteLine($"Num Ones: {newImp.numOnes}");
                            //Console.WriteLine($"{newImp.ToString()}");
                            newColumn[newImp.numOnes].Add(newImp);
                            if (unusedImplcants.Contains(column.implicants[i][j])) // Checks if either implucant is in the unused column, if unused removes and updates unused list
                            {
                                unusedImplcants.Remove(column.implicants[i][j]);
                            }
                            if (unusedImplcants.Contains(column.implicants[i + 1][m]))
                            {
                                unusedImplcants.Remove(column.implicants[i + 1][m]);
                            }
                        }
                    }
                }
            }

            newColumn = QuineColumn.removeDublicates(newColumn);

            QuineColumn nextColumn = new QuineColumn(column.implicantLength, newColumn);

            return(Tuple.Create(nextColumn, unusedImplcants));
        }