ㅋㅋC++
#include <iostream>
#include <string>
#include<sstream>
using namespace std;
class Karnaugh
{
public:
Karnaugh();
void input_data(string input);
void print();
string input(string logic_);
private:
bool virtual_MAP[4][4];
int minterm_Kar[4][4];
};
------------------------------------------------------------------------------------
#include "karnaugh.h"
#include<iostream>
#pragma once;
int main()
{
Karnaugh map;
cout << "Input Karnaugh map's 수식 <연산자와 피연산자 사이에 공백을 꼭 입력하면서 입력해주세요>:";
string logic_;
getline(cin, logic_);
string a = map.input(logic_);
map.input_data(a);
map.print();
return 0;
}
-------------------------------------------------------------------------------------------
#include<sstream>
#include "karnaugh.h"
#pragma once
Karnaugh::Karnaugh()
{
for (int i = 0; i < 4; i++){
for (int j = 0; j < 4; j++){
virtual_MAP[i][j] = 0;
}
}
minterm_Kar[0][0] = 0; minterm_Kar[0][1] = 1; minterm_Kar[0][2] = 3; minterm_Kar[0][3] = 2;
minterm_Kar[1][0] = 4; minterm_Kar[1][1] = 5; minterm_Kar[1][2] = 7; minterm_Kar[1][3] = 6;
minterm_Kar[2][0] = 12; minterm_Kar[2][1] = 13; minterm_Kar[2][2] = 15; minterm_Kar[2][3] = 14;
minterm_Kar[3][0] = 8; minterm_Kar[3][1] = 9; minterm_Kar[3][2] = 11; minterm_Kar[3][3] = 10;
}
void Karnaugh::input_data(string input)
{
istringstream iss(input);
do
{
string sub;
iss >> sub; // 잘랐어요
if (sub == "+") //sub가 +기호면 그냥 다음거 또짤라줘요.
{
iss >> sub;
}
string temp = sub;
int length = temp.length();
for (int i = 0; i < length; i++)
{
if (temp[i] == 'w')
{
if (temp[i + 1] == '\'') //w'의 영역
{
i++;
i++;
if (temp[i] == 'x')
{
if (temp[i + 1] == '\'') //w'x'
{
i++;
i++;
if (temp[i] == 'y')
{
if (temp[i + 1] == '\'') //w'x'y'
{
i++;
i++;
if (temp[i] == 'z')
{
if (temp[i + 1] == '\'') //w'x'y'z'
{
virtual_MAP[0][0] = 1;
}
else //w'x'y'z
{
virtual_MAP[0][1] = 1;
}
}
else //w'x'y'(no 'z')
{
virtual_MAP[0][0] = 1;
virtual_MAP[0][1] = 1;
}
}
else //w'x'y
{
i++;
if (temp[i] == 'z')
{
if (temp[i + 1] == '\'') //w'x'yz'
{
virtual_MAP[0][3] = 1;
}
else //w'x'yz
{
virtual_MAP[0][2] = 1;
}
}
else //w'x'y
{
virtual_MAP[0][2] = 1;
virtual_MAP[0][3] = 1;
}
}
}
else //y가 없고 w'x'임
{
i++;
if (temp[i] == 'z')
{
if (temp[i + 1] == '\'') //w'x'z'
{
virtual_MAP[0][0] = 1;
virtual_MAP[0][3] = 1;
}
else //w'x'z
{
virtual_MAP[0][1] = 1;
virtual_MAP[0][2] = 1;
}
}
else //y, z둘다 없어 w'x'
{
virtual_MAP[0][0] = 1;
virtual_MAP[0][1] = 1;
virtual_MAP[0][2] = 1;
virtual_MAP[0][3] = 1;
}
}
}
else //w'x영역
{
i++;
if (temp[i] == 'y')
{
if (temp[i + 1] == '\'')
{
i++;
i++;
if (temp[i] == 'z')
{
if (temp[i + 1] == '\'') //w'xy'z'
{
virtual_MAP[1][0] = 1;
}
else //w'xy'z
{
virtual_MAP[1][1] = 1;
}
}
else //w'xy'
{
virtual_MAP[1][0] = 1;
virtual_MAP[1][1] = 1;
}
}
else //w'xy
{
i++;
if (temp[i] == 'z')
{
if (temp[i + 1] == '\'') //w'xyz'
{
virtual_MAP[1][3] = 1;
}
else //w'xyz
{
virtual_MAP[1][2] = 1;
}
}
else //w'xy
{
virtual_MAP[1][2] = 1;
virtual_MAP[1][3] = 1;
}
}
}
else //y가읍슴 w'x임
{
i++;
if (temp[i] == 'z')
{
if (temp[i + 1] == '\'') //w'xz'
{
virtual_MAP[1][0] = 1;
virtual_MAP[1][3] = 1;
}
else //w'xz
{
virtual_MAP[1][1] = 1;
virtual_MAP[1][2] = 1;
}
}
else //w'x
{
virtual_MAP[1][0] = 1;
virtual_MAP[1][1] = 1;
virtual_MAP[1][2] = 1;
virtual_MAP[1][3] = 1;
}
}
}
}
else //w'<x가 없어>
{
i++;
if (temp[i] == 'y')
{
if (temp[i + 1] == '\'')
{
i++;
i++;
if (temp[i] == 'z')
{
if (temp[i + 1] == '\'') //w'y'z'
{
virtual_MAP[0][0] = 1;
virtual_MAP[1][0] = 1;
}
else //w'y'z
{
virtual_MAP[0][1] = 1;
virtual_MAP[1][1] = 1;
}
}
else //w'y'
{
virtual_MAP[0][0] = 1;
virtual_MAP[0][1] = 1;
virtual_MAP[1][0] = 1;
virtual_MAP[1][1] = 1;
}
}
else //w'y
{
i++;
if (temp[i] == 'z')
{
if (temp[i + 1] == '\'') //w'yz'
{
virtual_MAP[0][3] = 1;
virtual_MAP[1][3] = 1;
}
else //w'yz
{
virtual_MAP[0][2] = 1;
virtual_MAP[1][2] = 1;
}
}
else //w'y
{
virtual_MAP[0][2] = 1;
virtual_MAP[0][3] = 1;
virtual_MAP[1][2] = 1;
virtual_MAP[1][3] = 1;
}
}
}
else //w'(x, y둘다없음)
{
i++;
if (temp[i] == 'z')
{
if (temp[i + 1] == '\'') //w'z'
{
virtual_MAP[0][0] = 1;
virtual_MAP[1][0] = 1;
virtual_MAP[0][3] = 1;
virtual_MAP[1][3] = 1;
}
else //w'z
{
virtual_MAP[0][1] = 1;
virtual_MAP[0][2] = 1;
virtual_MAP[1][1] = 1;
virtual_MAP[1][2] = 1;
}
}
else //w'
{
virtual_MAP[0][0] = 1;
virtual_MAP[1][0] = 1;
virtual_MAP[0][3] = 1;
virtual_MAP[1][3] = 1;
virtual_MAP[0][1] = 1;
virtual_MAP[0][2] = 1;
virtual_MAP[1][1] = 1;
virtual_MAP[1][2] = 1;
}
}
}
}
else //w로 시작
{
i++;
if (temp[i] == 'y')
{
if (temp[i + 1] == '\'') //wy'
{
i++;
i++;
if (temp[i] == 'z')
{
if (temp[i + 1] == '\'') //wy'z'
{
virtual_MAP[2][0] = 1;
virtual_MAP[3][0] = 1;
}
else //wy'z
{
virtual_MAP[2][1] = 1;
virtual_MAP[3][1] = 1;
}
}
else //wy'
{
virtual_MAP[2][0] = 1;
virtual_MAP[3][0] = 1;
virtual_MAP[2][1] = 1;
virtual_MAP[3][1] = 1;
}
}
else
{
i++;
if (temp[i] == 'z')
{
if (temp[i + 1] == '\'') //wyz'
{
virtual_MAP[2][3] = 1;
virtual_MAP[3][3] = 1;
}
else //wyz
{
virtual_MAP[2][2] = 1;
virtual_MAP[3][2] = 1;
}
}
else //wy
{
virtual_MAP[2][2] = 1;
virtual_MAP[3][2] = 1;
virtual_MAP[2][3] = 1;
virtual_MAP[3][3] = 1;
}
}
}
else //w(x,y도 없음)
{
if (temp[i] == 'z')
{
if (temp[i + 1] == '\'') //wz'
{
virtual_MAP[0][0] = 1;
virtual_MAP[1][0] = 1;
virtual_MAP[0][3] = 1;
virtual_MAP[1][3] = 1;
}
else //wz
{
virtual_MAP[0][1] = 1;
virtual_MAP[1][1] = 1;
virtual_MAP[1][2] = 1;
virtual_MAP[0][2] = 1;
}
}
else //w
{
virtual_MAP[0][0] = 1;
virtual_MAP[0][1] = 1;
virtual_MAP[0][2] = 1;
virtual_MAP[0][3] = 1;
virtual_MAP[1][0] = 1;
virtual_MAP[1][1] = 1;
virtual_MAP[1][2] = 1;
virtual_MAP[1][3] = 1;
}
}
}
}
else
{
if (temp[i] == 'y') //y로 시작
{
if (temp[i + 1] == '\'')
{
i++;
i++;
if (temp[i] == 'z')
{
if (temp[i + 1] == '\'') // y'z'
{
virtual_MAP[0][0] = 1;
virtual_MAP[1][0] = 1;
virtual_MAP[2][0] = 1;
virtual_MAP[3][0] = 1;
}
else //y'z
{
virtual_MAP[0][1] = 1;
virtual_MAP[1][1] = 1;
virtual_MAP[2][1] = 1;
virtual_MAP[3][1] = 1;
}
}
else //y'
{
virtual_MAP[0][0] = 1;
virtual_MAP[1][0] = 1;
virtual_MAP[2][0] = 1;
virtual_MAP[3][0] = 1;
virtual_MAP[0][1] = 1;
virtual_MAP[1][1] = 1;
virtual_MAP[2][1] = 1;
virtual_MAP[3][1] = 1;
}
}
else
{
i++;
if (temp[i] == 'z')
{
if (temp[i + 1] == '\'') //yz'
{
virtual_MAP[0][3] = 1;
virtual_MAP[1][3] = 1;
virtual_MAP[2][3] = 1;
virtual_MAP[3][3] = 1;
}
else //yz
{
virtual_MAP[0][2] = 1;
virtual_MAP[1][2] = 1;
virtual_MAP[2][2] = 1;
virtual_MAP[3][2] = 1;
}
}
else //y
{
virtual_MAP[0][3] = 1;
virtual_MAP[1][3] = 1;
virtual_MAP[2][3] = 1;
virtual_MAP[3][3] = 1;
virtual_MAP[0][2] = 1;
virtual_MAP[1][2] = 1;
virtual_MAP[2][2] = 1;
virtual_MAP[3][2] = 1;
}
}
}
else //z시작
{
if (temp[i] == 'z')
{
if (temp[i + 1] == '\'') //z'
{
virtual_MAP[0][0] = 1;
virtual_MAP[1][0] = 1;
virtual_MAP[2][0] = 1;
virtual_MAP[3][0] = 1;
virtual_MAP[0][3] = 1;
virtual_MAP[1][3] = 1;
virtual_MAP[2][3] = 1;
virtual_MAP[3][3] = 1;
}
else //z
{
virtual_MAP[0][1] = 1;
virtual_MAP[1][1] = 1;
virtual_MAP[2][1] = 1;
virtual_MAP[3][1] = 1;
virtual_MAP[0][2] = 1;
virtual_MAP[1][2] = 1;
virtual_MAP[2][2] = 1;
virtual_MAP[3][2] = 1;
}
}
else //수식이없어요.
{
cout << "수식이 없습니다." << endl;
}
}
}
}
} while (iss);
}
void Karnaugh::print()
{
cout << "Karnaugh Map" << endl;
for (int i = 0; i < 4; i++){
for (int j = 0; j < 4; j++){
cout << virtual_MAP[i][j] << endl;
}
}
cout << "Minterms :";
for (int i = 0; i < 4; i++){
for (int j = 0; j < 4; j++){
if (virtual_MAP[i][j] == 1)
{
cout << minterm_Kar[i][j] << " , ";
}
}
}
}
string input(string logic_)
{
string s(logic_);
while (!s.find("w") || !s.find("x") || !s.find("y") || !s.find("z") || !s.find("'") || !s.find("+"))
{
cout << "식을 잘못 입력했습니다. 다시 입력해주세요 :";
getline(cin, logic_);
string s(logic_);
}
return s;
}
http://ideone.com/JGSuOk
<<메소드구현