Advertisement
Guest User

Untitled

a guest
May 22nd, 2015
197
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.79 KB | None | 0 0
  1. import java.util.Arrays;
  2. import java.util.LinkedList;
  3. import java.util.Scanner;
  4.  
  5.  
  6.  
  7. public class Primeimp implements PrimeImplicants {
  8.  
  9. LinkedList<String> min0 = new LinkedList<String>(); //group of 0 ones
  10. LinkedList<String> min1 = new LinkedList<String>(); //group of 1 ones
  11. LinkedList<String> min2 = new LinkedList<String>();//group of 2 ones
  12. LinkedList<String> min3 = new LinkedList<String>();//group of 3 ones
  13. LinkedList<String> min4 = new LinkedList<String>();//group of 4 ones
  14. LinkedList<String> min2nd = new LinkedList<String>();// group of 1st phase combination
  15. LinkedList<String> min3rd = new LinkedList<String>();//group of 2nd phase combination
  16. LinkedList<String> primeImplicants = new LinkedList<String>(); // prime implicants
  17.  
  18. int minTermsNo = 0;
  19. int [] minterms;
  20. String [] mintermStr;
  21. Scanner in = new Scanner(System.in);
  22. boolean [] min0marked,min1marked,min2marked,min3marked,min4marked;
  23. @Override
  24. public String[] getPrimeImplicants(String minterms) {
  25. // TODO Auto-generated method stub
  26. return null;
  27. }
  28.  
  29. @Override
  30. public void grouping() {
  31. // TODO Auto-generated method stub
  32. System.out.println("Enter the no of minterms:");
  33. minTermsNo = Integer.parseInt(in.next());
  34. minterms = new int[minTermsNo];
  35. mintermStr = new String[minTermsNo];
  36.  
  37. System.out.println("Enter the minterms separated by space");
  38. for(int i = 0;i<minTermsNo;i++)
  39. {
  40. minterms[i]=Integer.parseInt(in.next());
  41.  
  42. }
  43. System.out.println("Minterms entered:");
  44.  
  45. for(int i = 0;i<minTermsNo;i++)
  46. {
  47. System.out.print(minterms[i] + " ");
  48. }
  49. System.out.println("");
  50. for(int i = 0;i<minTermsNo;i++)
  51. {
  52. mintermStr[i] =BinStr(Integer.toBinaryString(minterms[i]));
  53. }
  54. for(int i=0;i<minTermsNo;i++)
  55. {
  56. int cntmin = cntOnes(mintermStr[i]);
  57. switch(cntmin)
  58. {
  59. case 0:{
  60. min0.add(mintermStr[i]);break;
  61. }
  62. case 1:{
  63. min1.add(mintermStr[i]);break;
  64. }
  65. case 2:{
  66. min2.add(mintermStr[i]);break;
  67. }
  68. case 3:{
  69. min3.add(mintermStr[i]);break;
  70. }
  71. case 4:{
  72. min4.add(mintermStr[i]);break;
  73. }
  74. }
  75. }
  76. //print check //developing stuff
  77. printLL(min0);
  78. if(!min0.isEmpty())System.out.println("=====================================");
  79. printLL(min1);
  80. if(!min1.isEmpty())System.out.println("=====================================");
  81. printLL(min2);
  82. if(!min2.isEmpty())System.out.println("=====================================");
  83. printLL(min3);
  84. if(!min3.isEmpty())System.out.println("=====================================");
  85. printLL(min4);
  86. if(!min4.isEmpty())System.out.println("=====================================");
  87.  
  88. //
  89. int TEMPORARY=min0.size();
  90. boolean [] min0marked = new boolean[TEMPORARY];
  91. TEMPORARY = min1.size();
  92. boolean [] min1marked = new boolean[TEMPORARY];
  93. TEMPORARY = min2.size();
  94. boolean [] min2marked = new boolean[TEMPORARY];
  95. TEMPORARY = min3.size();
  96. boolean [] min3marked = new boolean[TEMPORARY];
  97. TEMPORARY = min4.size();
  98. boolean [] min4marked = new boolean[TEMPORARY];
  99. //initialize boolean arrays with zero
  100. Arrays.fill(min4marked,false);
  101. Arrays.fill(min3marked,false);
  102. Arrays.fill(min2marked,false);
  103. Arrays.fill(min1marked,false);
  104. Arrays.fill(min0marked,false);
  105.  
  106.  
  107. }
  108.  
  109. @Override
  110. public void combine() {
  111. // TODO Auto-generated method stub
  112. for(int i = 0;i<min1.size();i++)
  113. {
  114. if(min0.isEmpty()) break;
  115. if(compareBin(min0.getFirst(), min1.get(i))==1)
  116. {
  117. int ind = getIndexDiff(min0.getFirst(), min1.get(i));
  118. char [] c =min0.getFirst().toCharArray();
  119. c[ind]='-';
  120. min2nd.add(String.valueOf(c));
  121. min0marked[0]=true;
  122. min1marked[i]=true;
  123. }
  124. }
  125. for(int i = 0;i<min1.size();i++)
  126. {
  127. for(int j = 0;j<min2.size();j++)
  128. {
  129. if(compareBin(min1.get(i), min2.get(j))==1)
  130. {
  131. int ind = getIndexDiff(min1.get(i), min2.get(j));
  132. char [] c =min1.get(i).toCharArray();
  133. c[ind]='-';
  134. min2nd.add(String.valueOf(c));
  135. min2marked[j]=true;
  136. min1marked[i]=true;
  137. }
  138. }
  139. }
  140. for(int i = 0;i<min2.size();i++)
  141. {
  142. for(int j = 0;j<min3.size();j++)
  143. {
  144. if(compareBin(min2.get(i), min3.get(j))==1)
  145. {
  146. int ind = getIndexDiff(min2.get(i), min3.get(j));
  147. char [] c =min2.get(i).toCharArray();
  148. c[ind]='-';
  149. min2nd.add(String.valueOf(c));
  150. min3marked[j]=true;
  151. min2marked[i]=true;
  152. }
  153. }
  154. }
  155. for(int i = 0;i<min3.size();i++)
  156. {
  157. for(int j = 0;j<min4.size();j++)
  158. {
  159. if(compareBin(min3.get(i), min4.get(j))==1)
  160. {
  161. int ind = getIndexDiff(min3.get(i), min4.get(j));
  162. char [] c =min3.get(i).toCharArray();
  163. c[ind]='-';
  164. min2nd.add(String.valueOf(c));
  165. min4marked[j]=true;
  166. min3marked[i]=true;
  167. }
  168. }
  169. }
  170. deleteRep(min2nd);
  171. printLL(min2nd);
  172. System.out.println("=====================================");
  173. int TEMPORARY = min2nd.size();
  174. boolean [] min2ndmarked = new boolean[TEMPORARY];
  175. Arrays.fill(min2ndmarked,false);
  176.  
  177. //check 3rd
  178. for(int i = 0;i<min2nd.size();i++)
  179. {
  180. for(int j = i+1;j<min2nd.size();j++)
  181. {
  182. if(compareBin(min2nd.get(i), min2nd.get(j))==1)
  183. {
  184. int ind = getIndexDiff(min2nd.get(i), min2nd.get(j));
  185. char [] c =min2nd.get(i).toCharArray();
  186. c[ind]='-';
  187. min3rd.add(String.valueOf(c));
  188. min2ndmarked[j]=true;
  189. min2ndmarked[i]=true;
  190. }
  191. }
  192. }
  193. TEMPORARY = min3rd.size();
  194. boolean [] min3rdmarked = new boolean[TEMPORARY];
  195. Arrays.fill(min3rdmarked,false);
  196. // gathering prime implicants
  197. for(int i = 0;i<min3rdmarked.length;i++)
  198. {
  199. if(!min3rdmarked[i]) primeImplicants.add(min3rd.get(i));
  200. }
  201. for(int i = 0;i<min2ndmarked.length;i++)
  202. {
  203. if(!min2ndmarked[i]) primeImplicants.add(min2nd.get(i));
  204. }
  205. for(int i = 0;i<min4marked.length;i++)
  206. {
  207. if(!min4marked[i]) primeImplicants.add(min4.get(i));
  208. }
  209. for(int i = 0;i<min3marked.length;i++)
  210. {
  211. if(!min3marked[i]) primeImplicants.add(min3.get(i));
  212. }
  213. for(int i = 0;i<min2marked.length;i++)
  214. {
  215. if(!min2marked[i]) primeImplicants.add(min2.get(i));
  216. }
  217. for(int i = 0;i<min1marked.length;i++)
  218. {
  219. if(!min1marked[i]) primeImplicants.add(min1.get(i));
  220. }
  221. for(int i = 0;i<min0marked.length;i++)
  222. {
  223. if(!min0marked[i]) primeImplicants.add(min0.get(i));
  224. }
  225.  
  226. }
  227.  
  228. @Override
  229. public boolean[][] getTable() {
  230. // TODO Auto-generated method stub
  231. return null;
  232. }
  233.  
  234. // some extra quite useful methods
  235. private String BinStr(String s) {
  236. // TODO Auto-generated method stub
  237. int x = Integer.parseInt(s);
  238. if(x == 0)return "0000";
  239. else if(x == 1) return "0001";
  240. else if(x<100) return "00" + Integer.toString(x);
  241. else if(x<1000) return "0" + Integer.toString(x);
  242. return Integer.toString(x);
  243. }
  244. public int compareBin(String a ,String b) //return no. of differences if 1 then they can be combined
  245. {
  246. int counter = 0;
  247. for(int i = 0;i<a.length();i++)
  248. {
  249. if(!(a.charAt(i)==b.charAt(i)))
  250. {
  251. counter++;
  252. }
  253. }
  254. return counter;
  255.  
  256. }
  257. public Integer getIndexDiff(String a,String b) //performed only on 1differnce found
  258. {
  259.  
  260. for(int i = 0;i<a.length();i++)
  261. {
  262. if(!(a.charAt(i)==b.charAt(i)))
  263. {
  264. return i;
  265. }
  266. }
  267. System.out.println("error getting index different");
  268. return null;
  269.  
  270. }
  271. public int cntOnes(String x) //count ones in a boolean string
  272. {
  273. int counter = 0;
  274. for(int i = 0;i<x.length();i++)
  275. {
  276. if(x.charAt(i)=='1') counter++;
  277. }
  278. return counter;
  279. }
  280. public void deleteRep(LinkedList<String> x) //delete repeated nodes in linkedlist
  281. {
  282. for(int i = 0;i<x.size();i++)
  283. {
  284. for(int j=i+1;j<x.size();j++)
  285. {
  286. if(x.get(i).equals(x.get(j)))
  287. {
  288. x.remove(j);
  289. }
  290. }
  291. }
  292. }
  293. public void printLL(LinkedList<String> x)
  294. {
  295. for(int i = 0;i<x.size();i++)
  296. {
  297. System.out.println(x.get(i));
  298. }
  299. }
  300.  
  301.  
  302. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement