/** @author Scott Marshall @author University of Glasgow, MSc IT Project 2001 @author Building an OnLine Course in Computing Fundamentals */ package ukacgla_3inputKMap; 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 for complete rows if (dataMap[0][0] == 1 && dataMap[0][1] ==1 && dataMap[0][2] ==1 && dataMap[0][3] ==1){ answer.append("!x +"); for (int i = 0; i< dataMapCols; i++) dataMap[0][i] = 0; } //check for x if (dataMap[1][0] == 1 && dataMap[1][1] ==1 && dataMap[1][2] ==1 && dataMap[1][3] ==1){ answer.append("x +"); for (int i = 0; i< dataMapCols; i++) dataMap[1][i] = 0; } //then check for 2 x 2 vertical columns //check for 2 x 2 of !y if (dataMap[0][0] ==1 && dataMap[1][0] ==1 && dataMap[0][3] ==1 && dataMap[1][3] ==1){ answer.append("!y +"); dataMap[0][0] = 0; dataMap[1][0] = 0; dataMap[0][3] = 0; dataMap[1][3] = 0; } //check for 2 x 2 of !z if (dataMap[0][0] ==1 && dataMap[1][0] ==1 && dataMap[0][1] ==1 && dataMap[1][1] ==1){ answer.append("!z +"); dataMap[0][0] = 0; dataMap[1][0] = 0; dataMap[0][1] = 0; dataMap[1][1] = 0; } //check for 2 x 2 of y if (dataMap[0][1] ==1 && dataMap[0][2] ==1 && dataMap[1][1] ==1 && dataMap[1][2] ==1) { answer.append("y +"); dataMap[0][1] = 0; dataMap[0][2] = 0; dataMap[1][1] = 0; dataMap[1][2] = 0; } //check for 2 x 2 of z if (dataMap[0][2] ==1 && dataMap[0][3] ==1 && dataMap[1][2] ==1 && dataMap[1][3] ==1) { answer.append("z +"); dataMap[0][2] = 0; dataMap[0][3] = 0; dataMap[1][2] = 0; dataMap[1][3] = 0; } //then check for individual columns //check for first column if (dataMap[0][0] ==1 && dataMap[1][0] ==1) { answer.append("!y!z +"); dataMap[0][0] = 0; dataMap[1][0] = 0; } //check for second column. if (dataMap[0][1] == 1 && dataMap[1][1] ==1) { answer.append("y!z +"); dataMap[0][1] = 0; dataMap[1][1] = 0; } //check for third column if (dataMap[0][2] == 1 && dataMap[1][2] ==1) { answer.append("yz +"); dataMap[0][2] = 0; dataMap[1][2] = 0; } //check for fourth column. if (dataMap[0][3] == 1 && dataMap[1][3] ==1) { answer.append("!yz +"); dataMap[0][3] = 0; dataMap[1][3] = 0; } //then begin checking for pairs along the rows. //!x row, !y if (dataMap[0][0] ==1 && dataMap[0][3] ==1) { answer.append("!x!y +"); dataMap[0][0] = 0; dataMap[0][3] = 0; } //!x row, y if (dataMap[0][1] ==1 && dataMap[0][2] ==1) { answer.append("!xy +"); dataMap[0][1] = 0; dataMap[0][2] = 0; } //!x row, !z if (dataMap[0][0] ==1 && dataMap[0][1] ==1) { answer.append("!x!z +"); dataMap[0][0] = 0; dataMap[0][1] = 0; } //!x row, z if (dataMap[0][2] ==1 && dataMap[0][3] ==1) { answer.append("!xz +"); dataMap[0][2] = 0; dataMap[0][3] = 0; } //x row, !y if (dataMap[1][0] ==1 && dataMap[1][3] ==1) { answer.append("x!y +"); dataMap[1][0] = 0; dataMap[1][3] = 0; } //x row, y if (dataMap[1][1] ==1 && dataMap[1][2] ==1) { answer.append("xy +"); dataMap[1][1] = 0; dataMap[1][2] = 0; } //x row, !z if (dataMap[1][0] ==1 && dataMap[1][1] ==1) { answer.append("x!z +"); dataMap[1][0] = 0; dataMap[1][1] = 0; } //x row, z if (dataMap[1][2] ==1 && dataMap[1][3] ==1) { answer.append("xz +"); dataMap[1][2] = 0; dataMap[1][3] = 0; } //then begin looking for ones ! if (dataMap[0][0]==1) answer.append("!x!y!z +"); if (dataMap[0][1]==1) answer.append("!xy!z +"); if (dataMap[0][2]==1) answer.append("!xyz +"); if (dataMap[0][3]==1) answer.append("!x!yz +"); if (dataMap[1][0]==1) answer.append("x!y!z +"); if (dataMap[1][1]==1) answer.append("xy!z +"); if (dataMap[1][2]==1) answer.append("xyz +"); if (dataMap[1][3]==1) answer.append("x!yz +"); //delete excess +'s. int length = answer.length(); if (answer.charAt(length-1)=='+') answer.deleteCharAt(length-1); this.minterm = answer; }//ends simplify() }