ㅋㅋ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;

}