fork download
  1. #include<sstream>
  2. #include "karnaugh.h"
  3. #pragma once
  4. Karnaugh::Karnaugh()
  5. {
  6. for (int i = 0; i < 4; i++){
  7. for (int j = 0; j < 4; j++){
  8. virtual_MAP[i][j] = 0;
  9. }
  10. }
  11. minterm_Kar[0][0] = 0; minterm_Kar[0][1] = 1; minterm_Kar[0][2] = 3; minterm_Kar[0][3] = 2;
  12. minterm_Kar[1][0] = 4; minterm_Kar[1][1] = 5; minterm_Kar[1][2] = 7; minterm_Kar[1][3] = 6;
  13. minterm_Kar[2][0] = 12; minterm_Kar[2][1] = 13; minterm_Kar[2][2] = 15; minterm_Kar[2][3] = 14;
  14. minterm_Kar[3][0] = 8; minterm_Kar[3][1] = 9; minterm_Kar[3][2] = 11; minterm_Kar[3][3] = 10;
  15.  
  16. }
  17. void Karnaugh::input_data(string input)
  18. {
  19. istringstream iss(input);
  20.  
  21. do
  22. {
  23. string sub;
  24. iss >> sub; // 잘랐어요
  25. if (sub == "+") //sub가 +기호면 그냥 다음거 또짤라줘요.
  26. {
  27. iss >> sub;
  28. }
  29. string temp = sub;
  30. int length = temp.length();
  31.  
  32. for (int i = 0; i < length; i++)
  33. {
  34. if (temp[i] == 'w')
  35. {
  36. if (temp[i + 1] == '\'') //w'의 영역
  37. {
  38. i++;
  39. i++;
  40. if (temp[i] == 'x')
  41. {
  42. if (temp[i + 1] == '\'') //w'x'
  43. {
  44. i++;
  45. i++;
  46. if (temp[i] == 'y')
  47. {
  48. if (temp[i + 1] == '\'') //w'x'y'
  49. {
  50. i++;
  51. i++;
  52. if (temp[i] == 'z')
  53. {
  54. if (temp[i + 1] == '\'') //w'x'y'z'
  55. {
  56. virtual_MAP[0][0] = 1;
  57. }
  58. else //w'x'y'z
  59. {
  60. virtual_MAP[0][1] = 1;
  61. }
  62. }
  63. else //w'x'y'(no 'z')
  64. {
  65. virtual_MAP[0][0] = 1;
  66. virtual_MAP[0][1] = 1;
  67. }
  68. }
  69.  
  70. else //w'x'y
  71. {
  72. i++;
  73. if (temp[i] == 'z')
  74. {
  75. if (temp[i + 1] == '\'') //w'x'yz'
  76. {
  77. virtual_MAP[0][3] = 1;
  78. }
  79. else //w'x'yz
  80. {
  81. virtual_MAP[0][2] = 1;
  82. }
  83. }
  84. else //w'x'y
  85. {
  86. virtual_MAP[0][2] = 1;
  87. virtual_MAP[0][3] = 1;
  88. }
  89.  
  90. }
  91.  
  92. }
  93. else //y가 없고 w'x'임
  94. {
  95. i++;
  96. if (temp[i] == 'z')
  97. {
  98. if (temp[i + 1] == '\'') //w'x'z'
  99. {
  100. virtual_MAP[0][0] = 1;
  101. virtual_MAP[0][3] = 1;
  102. }
  103. else //w'x'z
  104. {
  105. virtual_MAP[0][1] = 1;
  106. virtual_MAP[0][2] = 1;
  107. }
  108. }
  109. else //y, z둘다 없어 w'x'
  110. {
  111. virtual_MAP[0][0] = 1;
  112. virtual_MAP[0][1] = 1;
  113. virtual_MAP[0][2] = 1;
  114. virtual_MAP[0][3] = 1;
  115.  
  116. }
  117. }
  118. }
  119. else //w'x영역
  120. {
  121. i++;
  122. if (temp[i] == 'y')
  123. {
  124. if (temp[i + 1] == '\'')
  125. {
  126. i++;
  127. i++;
  128. if (temp[i] == 'z')
  129. {
  130. if (temp[i + 1] == '\'') //w'xy'z'
  131. {
  132. virtual_MAP[1][0] = 1;
  133. }
  134. else //w'xy'z
  135. {
  136. virtual_MAP[1][1] = 1;
  137. }
  138. }
  139. else //w'xy'
  140. {
  141. virtual_MAP[1][0] = 1;
  142. virtual_MAP[1][1] = 1;
  143. }
  144.  
  145. }
  146. else //w'xy
  147. {
  148. i++;
  149. if (temp[i] == 'z')
  150. {
  151. if (temp[i + 1] == '\'') //w'xyz'
  152. {
  153. virtual_MAP[1][3] = 1;
  154. }
  155. else //w'xyz
  156. {
  157. virtual_MAP[1][2] = 1;
  158. }
  159. }
  160. else //w'xy
  161. {
  162. virtual_MAP[1][2] = 1;
  163. virtual_MAP[1][3] = 1;
  164. }
  165. }
  166. }
  167. else //y가읍슴 w'x임
  168. {
  169. i++;
  170. if (temp[i] == 'z')
  171. {
  172. if (temp[i + 1] == '\'') //w'xz'
  173. {
  174. virtual_MAP[1][0] = 1;
  175. virtual_MAP[1][3] = 1;
  176. }
  177. else //w'xz
  178. {
  179. virtual_MAP[1][1] = 1;
  180. virtual_MAP[1][2] = 1;
  181. }
  182. }
  183. else //w'x
  184. {
  185. virtual_MAP[1][0] = 1;
  186. virtual_MAP[1][1] = 1;
  187. virtual_MAP[1][2] = 1;
  188. virtual_MAP[1][3] = 1;
  189. }
  190. }
  191.  
  192. }
  193. }
  194. else //w'<x가 없어>
  195. {
  196. i++;
  197. if (temp[i] == 'y')
  198. {
  199. if (temp[i + 1] == '\'')
  200. {
  201. i++;
  202. i++;
  203. if (temp[i] == 'z')
  204. {
  205. if (temp[i + 1] == '\'') //w'y'z'
  206. {
  207. virtual_MAP[0][0] = 1;
  208. virtual_MAP[1][0] = 1;
  209. }
  210. else //w'y'z
  211. {
  212. virtual_MAP[0][1] = 1;
  213. virtual_MAP[1][1] = 1;
  214. }
  215. }
  216. else //w'y'
  217. {
  218. virtual_MAP[0][0] = 1;
  219. virtual_MAP[0][1] = 1;
  220. virtual_MAP[1][0] = 1;
  221. virtual_MAP[1][1] = 1;
  222. }
  223. }
  224. else //w'y
  225. {
  226. i++;
  227. if (temp[i] == 'z')
  228. {
  229. if (temp[i + 1] == '\'') //w'yz'
  230. {
  231. virtual_MAP[0][3] = 1;
  232. virtual_MAP[1][3] = 1;
  233. }
  234. else //w'yz
  235. {
  236. virtual_MAP[0][2] = 1;
  237. virtual_MAP[1][2] = 1;
  238. }
  239. }
  240. else //w'y
  241. {
  242. virtual_MAP[0][2] = 1;
  243. virtual_MAP[0][3] = 1;
  244. virtual_MAP[1][2] = 1;
  245. virtual_MAP[1][3] = 1;
  246. }
  247. }
  248. }
  249. else //w'(x, y둘다없음)
  250. {
  251. i++;
  252. if (temp[i] == 'z')
  253. {
  254. if (temp[i + 1] == '\'') //w'z'
  255. {
  256. virtual_MAP[0][0] = 1;
  257. virtual_MAP[1][0] = 1;
  258. virtual_MAP[0][3] = 1;
  259. virtual_MAP[1][3] = 1;
  260. }
  261. else //w'z
  262. {
  263. virtual_MAP[0][1] = 1;
  264. virtual_MAP[0][2] = 1;
  265. virtual_MAP[1][1] = 1;
  266. virtual_MAP[1][2] = 1;
  267. }
  268. }
  269. else //w'
  270. {
  271. virtual_MAP[0][0] = 1;
  272. virtual_MAP[1][0] = 1;
  273. virtual_MAP[0][3] = 1;
  274. virtual_MAP[1][3] = 1;
  275. virtual_MAP[0][1] = 1;
  276. virtual_MAP[0][2] = 1;
  277. virtual_MAP[1][1] = 1;
  278. virtual_MAP[1][2] = 1;
  279. }
  280. }
  281.  
  282. }
  283. }
  284. else //w로 시작
  285. {
  286. i++;
  287. if (temp[i] == 'y')
  288. {
  289. if (temp[i + 1] == '\'') //wy'
  290. {
  291. i++;
  292. i++;
  293. if (temp[i] == 'z')
  294. {
  295. if (temp[i + 1] == '\'') //wy'z'
  296. {
  297. virtual_MAP[2][0] = 1;
  298. virtual_MAP[3][0] = 1;
  299. }
  300. else //wy'z
  301. {
  302. virtual_MAP[2][1] = 1;
  303. virtual_MAP[3][1] = 1;
  304. }
  305. }
  306. else //wy'
  307. {
  308. virtual_MAP[2][0] = 1;
  309. virtual_MAP[3][0] = 1;
  310. virtual_MAP[2][1] = 1;
  311. virtual_MAP[3][1] = 1;
  312. }
  313.  
  314. }
  315. else
  316. {
  317. i++;
  318. if (temp[i] == 'z')
  319. {
  320. if (temp[i + 1] == '\'') //wyz'
  321. {
  322. virtual_MAP[2][3] = 1;
  323. virtual_MAP[3][3] = 1;
  324. }
  325. else //wyz
  326. {
  327. virtual_MAP[2][2] = 1;
  328. virtual_MAP[3][2] = 1;
  329. }
  330. }
  331. else //wy
  332. {
  333. virtual_MAP[2][2] = 1;
  334. virtual_MAP[3][2] = 1;
  335. virtual_MAP[2][3] = 1;
  336. virtual_MAP[3][3] = 1;
  337. }
  338. }
  339. }
  340. else //w(x,y도 없음)
  341. {
  342. if (temp[i] == 'z')
  343. {
  344. if (temp[i + 1] == '\'') //wz'
  345. {
  346. virtual_MAP[0][0] = 1;
  347. virtual_MAP[1][0] = 1;
  348. virtual_MAP[0][3] = 1;
  349. virtual_MAP[1][3] = 1;
  350.  
  351. }
  352. else //wz
  353. {
  354. virtual_MAP[0][1] = 1;
  355. virtual_MAP[1][1] = 1;
  356. virtual_MAP[1][2] = 1;
  357. virtual_MAP[0][2] = 1;
  358. }
  359. }
  360. else //w
  361. {
  362. virtual_MAP[0][0] = 1;
  363. virtual_MAP[0][1] = 1;
  364. virtual_MAP[0][2] = 1;
  365. virtual_MAP[0][3] = 1;
  366. virtual_MAP[1][0] = 1;
  367. virtual_MAP[1][1] = 1;
  368. virtual_MAP[1][2] = 1;
  369. virtual_MAP[1][3] = 1;
  370. }
  371. }
  372. }
  373. }
  374. else
  375. {
  376. if (temp[i] == 'y') //y로 시작
  377. {
  378. if (temp[i + 1] == '\'')
  379. {
  380. i++;
  381. i++;
  382. if (temp[i] == 'z')
  383. {
  384. if (temp[i + 1] == '\'') // y'z'
  385. {
  386. virtual_MAP[0][0] = 1;
  387. virtual_MAP[1][0] = 1;
  388. virtual_MAP[2][0] = 1;
  389. virtual_MAP[3][0] = 1;
  390. }
  391. else //y'z
  392. {
  393. virtual_MAP[0][1] = 1;
  394. virtual_MAP[1][1] = 1;
  395. virtual_MAP[2][1] = 1;
  396. virtual_MAP[3][1] = 1;
  397. }
  398. }
  399. else //y'
  400. {
  401. virtual_MAP[0][0] = 1;
  402. virtual_MAP[1][0] = 1;
  403. virtual_MAP[2][0] = 1;
  404. virtual_MAP[3][0] = 1;
  405. virtual_MAP[0][1] = 1;
  406. virtual_MAP[1][1] = 1;
  407. virtual_MAP[2][1] = 1;
  408. virtual_MAP[3][1] = 1;
  409. }
  410.  
  411. }
  412. else
  413. {
  414. i++;
  415. if (temp[i] == 'z')
  416. {
  417. if (temp[i + 1] == '\'') //yz'
  418. {
  419. virtual_MAP[0][3] = 1;
  420. virtual_MAP[1][3] = 1;
  421. virtual_MAP[2][3] = 1;
  422. virtual_MAP[3][3] = 1;
  423. }
  424. else //yz
  425. {
  426. virtual_MAP[0][2] = 1;
  427. virtual_MAP[1][2] = 1;
  428. virtual_MAP[2][2] = 1;
  429. virtual_MAP[3][2] = 1;
  430. }
  431. }
  432. else //y
  433. {
  434. virtual_MAP[0][3] = 1;
  435. virtual_MAP[1][3] = 1;
  436. virtual_MAP[2][3] = 1;
  437. virtual_MAP[3][3] = 1;
  438. virtual_MAP[0][2] = 1;
  439. virtual_MAP[1][2] = 1;
  440. virtual_MAP[2][2] = 1;
  441. virtual_MAP[3][2] = 1;
  442. }
  443. }
  444.  
  445. }
  446. else //z시작
  447. {
  448. if (temp[i] == 'z')
  449. {
  450. if (temp[i + 1] == '\'') //z'
  451. {
  452. virtual_MAP[0][0] = 1;
  453. virtual_MAP[1][0] = 1;
  454. virtual_MAP[2][0] = 1;
  455. virtual_MAP[3][0] = 1;
  456. virtual_MAP[0][3] = 1;
  457. virtual_MAP[1][3] = 1;
  458. virtual_MAP[2][3] = 1;
  459. virtual_MAP[3][3] = 1;
  460. }
  461. else //z
  462. {
  463. virtual_MAP[0][1] = 1;
  464. virtual_MAP[1][1] = 1;
  465. virtual_MAP[2][1] = 1;
  466. virtual_MAP[3][1] = 1;
  467. virtual_MAP[0][2] = 1;
  468. virtual_MAP[1][2] = 1;
  469. virtual_MAP[2][2] = 1;
  470. virtual_MAP[3][2] = 1;
  471. }
  472. }
  473. else //수식이없어요.
  474. {
  475. cout << "수식이 없습니다." << endl;
  476. }
  477. }
  478. }
  479. }
  480.  
  481. } while (iss);
  482.  
  483. }
  484. void Karnaugh::print()
  485. {
  486. cout << "Karnaugh Map" << endl;
  487. for (int i = 0; i < 4; i++){
  488. for (int j = 0; j < 4; j++){
  489. cout << virtual_MAP[i][j] << endl;
  490. }
  491. }
  492. cout << "Minterms :";
  493. for (int i = 0; i < 4; i++){
  494. for (int j = 0; j < 4; j++){
  495. if (virtual_MAP[i][j] == 1)
  496. {
  497. cout << minterm_Kar[i][j] << " , ";
  498. }
  499. }
  500. }
  501. }
  502. string input(string logic_)
  503. {
  504. string s(logic_);
  505. while (!s.find("w") || !s.find("x") || !s.find("y") || !s.find("z") || !s.find("'") || !s.find("+"))
  506. {
  507. cout << "식을 잘못 입력했습니다. 다시 입력해주세요 :";
  508. getline(cin, logic_);
  509. string s(logic_);
  510. }
  511. return s;
  512. }
  513.  
Compilation error #stdin compilation error #stdout 0s 0KB
stdin
Standard input is empty
compilation info
prog.cpp:2:22: fatal error: karnaugh.h: No such file or directory
 #include "karnaugh.h"
                      ^
compilation terminated.
stdout
Standard output is empty