Advertisement
Guest User

Untitled

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