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); } }
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); }