示例#1
0
        public CCarnoTable(ECarnoTableType tableType)
        {
            int mintermsCount = -1;

            m_tableType = tableType;

            switch (tableType)
            {
            case ECarnoTableType.Carno3Var:
                mintermsCount  = 8;
                m_tableLetters = new char[3] {
                    'A', 'B', 'C'
                };
                break;

            case ECarnoTableType.Carno4Var:
                mintermsCount  = 16;
                m_tableLetters = new char[4] {
                    'A', 'B', 'C', 'D'
                };
                break;
            }

            // Create minterms of table
            m_minterms = new CMinterm[mintermsCount];
            for (int i = 0; i < mintermsCount; i++)
            {
                m_minterms[i] = new CMinterm();
                m_minterms[i].SetIndex(i);
            }
        }
示例#2
0
        public static CMinterm[] GetMintermsInsideGroup(SCarnoGroup group)
        {
            CMinterm[] neighbors      = new CMinterm[0];
            int[]      mintermIndexes = new int[0];

            switch (group.Type)
            {
            case EGroupTypes.RectGroup_16:
                #region RectGroup_16
                neighbors = new CMinterm[16];
                for (int i = 0; i < 16; i++)
                {
                    neighbors[i] = new CMinterm(i);
                }

                break;
                #endregion

            case EGroupTypes.RectGroup_8_Hor:
                #region RectGroup_8_Hor
                neighbors = new CMinterm[8];
                for (int i = 0; i < 8; i++)
                {
                    neighbors[i] = new CMinterm();
                }

                if (group.Location >= 0 && group.Location <= 3)
                {
                    mintermIndexes = new int[8] {
                        0, 1, 2, 3, 4, 5, 6, 7
                    }
                }
                ;                                                               // Array of minterm indexes
                else if (group.Location >= 4 && group.Location <= 7)
                {
                    mintermIndexes = new int[8] {
                        4, 5, 6, 7, 12, 13, 14, 15
                    }
                }
                ;                                                                   // Array of minterm indexes
                else if (group.Location >= 8 && group.Location <= 11)
                {
                    mintermIndexes = new int[8] {
                        8, 9, 10, 11, 0, 1, 2, 3
                    }
                }
                ;                                                                 // Array of minterm indexes
                else if (group.Location >= 12 && group.Location <= 15)
                {
                    mintermIndexes = new int[8] {
                        12, 13, 14, 15, 8, 9, 10, 11
                    }
                }
                ;                                                                     // Array of minterm indexes

                for (int i = 0; i < 8; i++)
                {
                    neighbors[i].SetIndex(mintermIndexes[i]);
                }

                break;
                #endregion

            case EGroupTypes.RectGroup_8_Ver:
                #region RectGroup_8_Ver
                neighbors = new CMinterm[8];
                for (int i = 0; i < 8; i++)
                {
                    neighbors[i] = new CMinterm();
                }

                switch (group.Location % 4)
                {
                case 0:
                    mintermIndexes = new int[8] {
                        0, 4, 12, 8, 1, 5, 13, 9
                    };                                                                // Array of minterm indexes
                    break;

                case 1:
                    mintermIndexes = new int[8] {
                        1, 5, 13, 9, 3, 7, 15, 11
                    };                                                                 // Array of minterm indexes
                    break;

                case 2:
                    mintermIndexes = new int[8] {
                        2, 6, 14, 10, 0, 4, 12, 8
                    };                                                                 // Array of minterm indexes
                    break;

                case 3:
                    mintermIndexes = new int[8] {
                        3, 7, 15, 11, 2, 6, 14, 10
                    };                                                                  // Array of minterm indexes
                    break;
                }

                for (int i = 0; i < 8; i++)
                {
                    neighbors[i].SetIndex(mintermIndexes[i]);
                }

                break;
                #endregion

            case EGroupTypes.RectGroup_4:
                #region RectGroup_4

                neighbors = new CMinterm[4];
                for (int i = 0; i < 4; i++)
                {
                    neighbors[i] = new CMinterm();
                }

                switch (group.Location)
                {
                case 0:
                    mintermIndexes = new int[4] {
                        0, 1, 4, 5
                    };                                                  // Array of minterm indexes
                    break;

                case 1:
                    mintermIndexes = new int[4] {
                        1, 3, 5, 7
                    };                                                  // Array of minterm indexes
                    break;

                case 2:
                    mintermIndexes = new int[4] {
                        2, 0, 4, 6
                    };                                                  // Array of minterm indexes
                    break;

                case 3:
                    mintermIndexes = new int[4] {
                        3, 2, 7, 6
                    };                                                  // Array of minterm indexes
                    break;

                case 4:
                    mintermIndexes = new int[4] {
                        4, 5, 12, 13
                    };                                                    // Array of minterm indexes
                    break;

                case 5:
                    mintermIndexes = new int[4] {
                        5, 7, 13, 15
                    };                                                    // Array of minterm indexes
                    break;

                case 6:
                    mintermIndexes = new int[4] {
                        6, 4, 12, 14
                    };                                                    // Array of minterm indexes
                    break;

                case 7:
                    mintermIndexes = new int[4] {
                        7, 6, 15, 14
                    };                                                    // Array of minterm indexes
                    break;

                case 8:
                    mintermIndexes = new int[4] {
                        8, 9, 0, 1
                    };                                                  // Array of minterm indexes
                    break;

                case 9:
                    mintermIndexes = new int[4] {
                        9, 11, 1, 3
                    };                                                   // Array of minterm indexes
                    break;

                case 10:
                    mintermIndexes = new int[4] {
                        10, 8, 0, 2
                    };                                                   // Array of minterm indexes
                    break;

                case 11:
                    mintermIndexes = new int[4] {
                        11, 10, 3, 2
                    };                                                    // Array of minterm indexes
                    break;

                case 12:
                    mintermIndexes = new int[4] {
                        12, 13, 8, 9
                    };                                                    // Array of minterm indexes
                    break;

                case 13:
                    mintermIndexes = new int[4] {
                        13, 15, 9, 11
                    };                                                     // Array of minterm indexes
                    break;

                case 14:
                    mintermIndexes = new int[4] {
                        14, 12, 8, 10
                    };                                                     // Array of minterm indexes
                    break;

                case 15:
                    mintermIndexes = new int[4] {
                        15, 14, 11, 10
                    };                                                      // Array of minterm indexes
                    break;
                }

                for (int i = 0; i < 4; i++)
                {
                    neighbors[i].SetIndex(mintermIndexes[i]);
                }

                break;
                #endregion

            case EGroupTypes.LinerGroup_4_Hor:
                #region LinerGroup_4_Hor
                neighbors = new CMinterm[4];
                for (int i = 0; i < 4; i++)
                {
                    neighbors[i] = new CMinterm();
                }

                if (group.Location >= 0 && group.Location <= 3)
                {
                    mintermIndexes = new int[4] {
                        0, 1, 2, 3
                    }
                }
                ;                                                   // Array of minterm indexes
                else if (group.Location >= 4 && group.Location <= 7)
                {
                    mintermIndexes = new int[4] {
                        4, 5, 6, 7
                    }
                }
                ;                                                   // Array of minterm indexes
                else if (group.Location >= 8 && group.Location <= 11)
                {
                    mintermIndexes = new int[4] {
                        8, 9, 10, 11
                    }
                }
                ;                                                     // Array of minterm indexes
                else if (group.Location >= 12 && group.Location <= 15)
                {
                    mintermIndexes = new int[4] {
                        12, 13, 14, 15
                    }
                }
                ;                                                       // Array of minterm indexes

                for (int i = 0; i < 4; i++)
                {
                    neighbors[i].SetIndex(mintermIndexes[i]);
                }

                break;
                #endregion

            case EGroupTypes.LinerGroup_4_Ver:
                #region LinerGroup_4_Ver
                neighbors = new CMinterm[4];
                for (int i = 0; i < 4; i++)
                {
                    neighbors[i] = new CMinterm();
                }

                switch (group.Location % 4)
                {
                case 0:
                    mintermIndexes = new int[4] {
                        0, 4, 12, 8
                    };                                                   // Array of minterm indexes
                    break;

                case 1:
                    mintermIndexes = new int[4] {
                        1, 5, 13, 9
                    };                                                   // Array of minterm indexes
                    break;

                case 2:
                    mintermIndexes = new int[4] {
                        2, 6, 14, 10
                    };                                                    // Array of minterm indexes
                    break;

                case 3:
                    mintermIndexes = new int[4] {
                        3, 7, 15, 11
                    };                                                    // Array of minterm indexes
                    break;
                }

                for (int i = 0; i < 4; i++)
                {
                    neighbors[i].SetIndex(mintermIndexes[i]);
                }

                break;
                #endregion

            case EGroupTypes.LinerGroup_2_Hor:
                #region LinerGroup_2_Hor
                neighbors = new CMinterm[2];
                for (int i = 0; i < 2; i++)
                {
                    neighbors[i] = new CMinterm();
                }

                switch (group.Location % 4)
                {
                case 0:
                    neighbors[0].SetIndex(group.Location);
                    neighbors[1].SetIndex(group.Location + 1);
                    break;

                case 1:
                    neighbors[0].SetIndex(group.Location);
                    neighbors[1].SetIndex(group.Location + 2);
                    break;

                case 2:
                    neighbors[0].SetIndex(group.Location);
                    neighbors[1].SetIndex(group.Location - 2);
                    break;

                case 3:
                    neighbors[0].SetIndex(group.Location);
                    neighbors[1].SetIndex(group.Location - 1);
                    break;
                }

                break;
                #endregion

            case EGroupTypes.LinerGroup_2_Ver:
                #region LinerGroup_2_Ver
                neighbors = new CMinterm[2];
                for (int i = 0; i < 2; i++)
                {
                    neighbors[i] = new CMinterm();
                }

                if (group.Location >= 0 && group.Location <= 3)
                {
                    neighbors[0].SetIndex(group.Location);
                    neighbors[1].SetIndex(group.Location + 4);
                }
                else if (group.Location >= 4 && group.Location <= 7)
                {
                    neighbors[0].SetIndex(group.Location);
                    neighbors[1].SetIndex(group.Location + 8);
                }
                else if (group.Location >= 8 && group.Location <= 11)
                {
                    neighbors[0].SetIndex(group.Location);
                    neighbors[1].SetIndex(group.Location - 8);
                }
                else     // (group.Location >= 12 && group.Location <= 15)
                {
                    neighbors[0].SetIndex(group.Location);
                    neighbors[1].SetIndex(group.Location - 4);
                }

                break;
                #endregion

            case EGroupTypes.SingleMinterm:
                #region SingleMinterm
                neighbors    = new CMinterm[1];
                neighbors[0] = new CMinterm();

                neighbors[0].SetIndex(group.Location);
                break;
                #endregion
            }

            return(neighbors);
        }