/** @author Scott Marshall @author University of Glasgow, MSc IT Project 2001 @author Building an OnLine Course in Computing Fundamentals */ package ukacgla_4inputKMap; import ukacgla_KMap.*; import java.util.*; class Minterm extends Abstract_Minterm { public Minterm(String b, int rows, int cols){ super(b, rows, cols); } /** Begin reading dataMap for specific sequences. If sequence is met, append chars to answer, and reset data in table Finally, make this instance of minterm a copy of answer. */ public void simplify(){ StringBuffer answer = new StringBuffer(); //check for !x !w for complete rows if (dataMap[0][0] == 1 && dataMap[0][1] ==1 && dataMap[0][2] ==1 && dataMap[0][3] ==1){ answer.append("!x!w +"); for (int i = 0; i< dataMapCols; i++) dataMap[0][i] = 0; } //check for !x w if (dataMap[1][0] == 1 && dataMap[1][1] ==1 && dataMap[1][2] ==1 && dataMap[1][3] ==1){ answer.append("!xw +"); for (int i = 0; i< dataMapCols; i++) dataMap[1][i] = 0; } //check for xw for complete rows if (dataMap[2][0] == 1 && dataMap[2][1] ==1 && dataMap[2][2] ==1 && dataMap[2][3] ==1){ answer.append("xw +"); for (int i = 0; i< dataMapCols; i++) dataMap[2][i] = 0; } //check for x!w if (dataMap[3][0] == 1 && dataMap[3][1] ==1 && dataMap[3][2] ==1 && dataMap[3][3] ==1){ answer.append("x!w +"); for (int i = 0; i< dataMapCols; i++) dataMap[3][i] = 0; } //check for 2 x 4 of !y if (dataMap[0][0] ==1 && dataMap[1][0] ==1 && dataMap[2][0] ==1 && dataMap[3][0] ==1 && dataMap[0][3] ==1 && dataMap[1][3] ==1 && dataMap[2][3] ==1 && dataMap[3][3] ==1){ answer.append("!y +"); for (int i = 0; i< dataMapRows; i++){ dataMap[i][0] = 0; dataMap[i][3] = 0; } } //check for 2 x 4 of !z if (dataMap[0][0] ==1 && dataMap[1][0] ==1 && dataMap[2][0] ==1 && dataMap[3][0] ==1 && dataMap[0][1] ==1 && dataMap[1][1] ==1 && dataMap[2][1] ==1 && dataMap[3][1] ==1){ answer.append("!z +"); for (int i = 0; i< dataMapRows; i++){ dataMap[i][0] = 0; dataMap[i][1] = 0; } } //check for 2 x 4 of y if (dataMap[0][1] ==1 && dataMap[1][1] ==1 && dataMap[2][1] ==1 && dataMap[3][1] ==1 && dataMap[0][2] ==1 && dataMap[1][2] ==1 && dataMap[2][2] ==1 && dataMap[3][2] ==1){ answer.append("y +"); for (int i = 0; i< dataMapRows; i++){ dataMap[i][1] = 0; dataMap[i][2] = 0; } } //check for 2 x 4 of z if (dataMap[0][2] ==1 && dataMap[1][2] ==1 && dataMap[2][2] ==1 && dataMap[3][2] ==1 && dataMap[0][3] ==1 && dataMap[1][3] ==1 && dataMap[2][3] ==1 && dataMap[3][3] ==1){ answer.append("z +"); for (int i = 0; i< dataMapRows; i++){ dataMap[i][2] = 0; dataMap[i][3] = 0; } } //then check for individual columns //check for first column //check for 2 x 4 of !y if (dataMap[0][0] ==1 && dataMap[1][0] ==1 && dataMap[2][0] ==1 && dataMap[3][0] ==1){ answer.append("!y!z +"); for (int i = 0; i< dataMapRows; i++){ dataMap[i][0] = 0; } } //check for second column. if (dataMap[0][1] ==1 && dataMap[1][1] ==1 && dataMap[2][1] ==1 && dataMap[3][1] ==1){ answer.append("y!z +"); for (int i = 0; i< dataMapRows; i++){ dataMap[i][1] = 0; } } //check for third column if (dataMap[0][2] ==1 && dataMap[1][2] ==1 && dataMap[2][2] ==1 && dataMap[3][2] ==1){ answer.append("yz +"); for (int i = 0; i< dataMapRows; i++){ dataMap[i][2] = 0; } } //check for fourth column. if (dataMap[0][3] ==1 && dataMap[1][3] ==1 && dataMap[2][3] ==1 && dataMap[3][3] ==1){ answer.append("y!z +"); for (int i = 0; i< dataMapRows; i++){ dataMap[i][3] = 0; } } //check for 2x2 blocks. This is not an exhaustive list of potential combinations //check for 2 x 2 !x !y if (dataMap[0][0] ==1 && dataMap[1][0] ==1 && dataMap[0][3] ==1 && dataMap[1][3] ==1){ answer.append("!x!y +"); dataMap[0][0] = 0; dataMap[1][0] = 0; dataMap[0][3] = 0; dataMap[1][3] = 0; } //check for 2 x 2 !x y if (dataMap[0][1] ==1 && dataMap[1][1] ==1 && dataMap[0][2] ==1 && dataMap[1][2] ==1){ answer.append("!xy +"); dataMap[0][1] = 0; dataMap[1][1] = 0; dataMap[0][2] = 0; dataMap[1][2] = 0; } //check for 2 x 2 x !y if (dataMap[2][0] ==1 && dataMap[3][0] ==1 && dataMap[2][3] ==1 && dataMap[3][3] ==1){ answer.append("x!y +"); dataMap[2][0] = 0; dataMap[3][0] = 0; dataMap[2][3] = 0; dataMap[3][3] = 0; } //check for 2 x 2 x y if (dataMap[2][1] ==1 && dataMap[3][1] ==1 && dataMap[2][2] ==1 && dataMap[2][2] ==1){ answer.append("xy +"); dataMap[2][1] = 0; dataMap[3][1] = 0; dataMap[2][2] = 0; dataMap[3][2] = 0; } //check for 2 x 2 !y !w if (dataMap[0][0] ==1 && dataMap[0][3] ==1 && dataMap[3][0] ==1 && dataMap[3][3] ==1){ answer.append("!y!w +"); dataMap[0][0] = 0; dataMap[0][3] = 0; dataMap[3][0] = 0; dataMap[3][3] = 0; } //check for 2 x 2 !y w if (dataMap[1][0] ==1 && dataMap[1][3] ==1 && dataMap[2][0] ==1 && dataMap[2][3] ==1){ answer.append("!yw +"); dataMap[1][0] = 0; dataMap[1][3] = 0; dataMap[2][0] = 0; dataMap[2][3] = 0; } //check for 2 x 2 y !w if (dataMap[0][1] ==1 && dataMap[0][2] ==1 && dataMap[3][1] ==1 && dataMap[3][2] ==1){ answer.append("y!w +"); dataMap[0][1] = 0; dataMap[0][2] = 0; dataMap[3][1] = 0; dataMap[3][2] = 0; } //check for 2 x 2 y w if (dataMap[1][1] ==1 && dataMap[1][2] ==1 && dataMap[2][1] ==1 && dataMap[2][2] ==1){ answer.append("yw +"); dataMap[1][1] = 0; dataMap[1][2] = 0; dataMap[2][1] = 0; dataMap[2][2] = 0; } //check for 2 x 2 !x!z if (dataMap[0][0] ==1 && dataMap[0][1] ==1 && dataMap[1][0] ==1 && dataMap[1][1] ==1){ answer.append("!x!z +"); dataMap[0][0] = 0; dataMap[0][1] = 0; dataMap[1][0] = 0; dataMap[1][1] = 0; } //check for 2 x 2 !xz if (dataMap[0][2] ==1 && dataMap[0][3] ==1 && dataMap[1][2] ==1 && dataMap[1][3] ==1){ answer.append("!xz +"); dataMap[0][2] = 0; dataMap[0][3] = 0; dataMap[1][2] = 0; dataMap[1][3] = 0; } //check for 2 x 2 x!z if (dataMap[2][0] ==1 && dataMap[3][0] ==1 && dataMap[2][1] ==1 && dataMap[3][1] ==1){ answer.append("x!z +"); dataMap[2][0] = 0; dataMap[3][0] = 0; dataMap[2][1] = 0; dataMap[3][1] = 0; } //check for 2 x 2 xz if (dataMap[2][2] ==1 && dataMap[3][2] ==1 && dataMap[2][3] ==1 && dataMap[3][3] ==1){ answer.append("xz +"); dataMap[2][2] = 0; dataMap[3][2] = 0; dataMap[2][3] = 0; dataMap[3][3] = 0; } //check for 2 x 2 !z!w if (dataMap[0][0] ==1 && dataMap[3][0] ==1 && dataMap[0][1] ==1 && dataMap[3][1] ==1){ answer.append("!z!w +"); dataMap[0][0] = 0; dataMap[3][0] = 0; dataMap[0][1] = 0; dataMap[3][1] = 0; } //check for 2 x 2 !zw if (dataMap[1][0] ==1 && dataMap[2][0] ==1 && dataMap[1][1] ==1 && dataMap[2][1] ==1){ answer.append("!zw +"); dataMap[1][0] = 0; dataMap[2][0] = 0; dataMap[1][1] = 0; dataMap[2][1] = 0; } //check for 2 x 2 z!w if (dataMap[0][2] ==1 && dataMap[3][2] ==1 && dataMap[0][3] ==1 && dataMap[3][3] ==1){ answer.append("z!w +"); dataMap[0][2] = 0; dataMap[3][2] = 0; dataMap[0][3] = 0; dataMap[3][3] = 0; } //check for 2 x 2 zw if (dataMap[1][2] ==1 && dataMap[2][2] ==1 && dataMap[1][3] ==1 && dataMap[2][3] ==1){ answer.append("zw +"); dataMap[1][2] = 0; dataMap[2][2] = 0; dataMap[1][3] = 0; dataMap[2][3] = 0; } //then begin checking for pairs along the rows. //first row, not y if (dataMap[0][0] ==1 && dataMap[0][3] ==1) { answer.append("!x!y!w +"); dataMap[0][0] = 0; dataMap[0][3] = 0; } //first row y, if (dataMap[0][1] ==1 && dataMap[0][2] ==1) { answer.append("!xy!w +"); dataMap[0][1] = 0; dataMap[0][2] = 0; } //first row, !z if (dataMap[0][0] ==1 && dataMap[0][1] ==1) { answer.append("!x!z!w +"); dataMap[0][0] = 0; dataMap[0][1] = 0; } //first row, z if (dataMap[0][2] ==1 && dataMap[0][3] ==1) { answer.append("!xz!w +"); dataMap[0][2] = 0; dataMap[0][3] = 0; } //2nd row, not y if (dataMap[1][0] ==1 && dataMap[1][3] ==1) { answer.append("!x!yw +"); dataMap[1][0] = 0; dataMap[1][3] = 0; } //2nd row, y if (dataMap[1][1] ==1 && dataMap[1][2] ==1) { answer.append("!xyw +"); dataMap[1][1] = 0; dataMap[1][2] = 0; } //2nd row, !z if (dataMap[1][0] ==1 && dataMap[1][1] ==1) { answer.append("!x!zw +"); dataMap[1][0] = 0; dataMap[1][1] = 0; } //2nd row, z if (dataMap[1][2] ==1 && dataMap[1][3] ==1) { answer.append("!xzw +"); dataMap[1][2] = 0; dataMap[1][3] = 0; } //third row, not y if (dataMap[2][0] ==1 && dataMap[2][3] ==1) { answer.append("x!yw +"); dataMap[2][0] = 0; dataMap[2][3] = 0; } //third row y, if (dataMap[2][1] ==1 && dataMap[2][2] ==1) { answer.append("xyw +"); dataMap[2][1] = 0; dataMap[2][2] = 0; } //third row, !z if (dataMap[2][0] ==1 && dataMap[2][1] ==1) { answer.append("x!zw +"); dataMap[2][0] = 0; dataMap[2][1] = 0; } //third row, z if (dataMap[2][2] ==1 && dataMap[2][3] ==1) { answer.append("xzw +"); dataMap[2][2] = 0; dataMap[2][3] = 0; } //fourth row, not y if (dataMap[3][0] ==1 && dataMap[3][3] ==1) { answer.append("x!y!w +"); dataMap[3][0] = 0; dataMap[3][3] = 0; } //fourth row y, if (dataMap[3][1] ==1 && dataMap[3][2] ==1) { answer.append("xy!w +"); dataMap[3][1] = 0; dataMap[3][2] = 0; } //fourth row, !z if (dataMap[3][0] ==1 && dataMap[3][1] ==1) { answer.append("x!z!w +"); dataMap[3][0] = 0; dataMap[3][1] = 0; } //fourth row, z if (dataMap[3][2] ==1 && dataMap[3][3] ==1) { answer.append("xz!w +"); dataMap[3][2] = 0; dataMap[3][3] = 0; } //then begin looking for ones ! //first line if (dataMap[0][0]==1) answer.append("!x!y!z!w +"); if (dataMap[0][1]==1) answer.append("!xy!z!w +"); if (dataMap[0][2]==1) answer.append("!xyz!w +"); if (dataMap[0][3]==1) answer.append("!x!yz!w +"); //2nd line if (dataMap[1][0]==1) answer.append("!x!y!zw +"); if (dataMap[1][1]==1) answer.append("!xy!zw +"); if (dataMap[1][2]==1) answer.append("!xyzw +"); if (dataMap[1][3]==1) answer.append("!x!yzw +"); //3rd line if (dataMap[2][0]==1) answer.append("x!y!zw +"); if (dataMap[2][1]==1) answer.append("xy!zw +"); if (dataMap[2][2]==1) answer.append("xyzw +"); if (dataMap[2][3]==1) answer.append("x!yzw +"); //4th line if (dataMap[3][0]==1) answer.append("x!y!z!w +"); if (dataMap[3][1]==1) answer.append("xy!z!w +"); if (dataMap[3][2]==1) answer.append("xyz!w +"); if (dataMap[3][3]==1) answer.append("x!yz!w +"); //delete excess +'s. int length = answer.length(); if (answer.charAt(length-1)=='+') answer.deleteCharAt(length-1); this.minterm = answer; }//ends simplify() }