自动生成三位JK卡诺图 LeeRinji

应付数电实验期末考试用的…按顺序输进去六位数字,自动生成每个 JK 触发器的卡诺图。

生成 Excel 可以直接打开的 csv 表格

#include<bits/stdc++.h>
using namespace std;
char f[8],c=',';
int a[6];
int main()
{
    for(int i=0; i<6; ++i)cin>>a[i];
    ofstream cout("KarnaughMap.csv");
    cout<<"NextMap\n"<<c<<"State"
        <<c<<"$Q_2$"<<c<<"$Q_1$"<<c<<"$Q_0$"<<c<<"\n"
        <<c<<"-"<<c<<"\n";
    for(int i=0; i<6; ++i)
    {
        cout<<c<<a[i];
        for(int x=2; ~x; --x)cout<<c<<(a[(i+1)%6]>>x&1);
        cout<<c<<"\n";
    }
    for(int x=2; ~x; --x)
        for(int j=1; ~j; --j)
        {
            fill(f,f+8,'X');
            for(int i=0; i<6; ++i)
                if(j!=(a[i]>>x&1))
                    f[a[i]]='0'+(j==(a[(i+1)%6]>>x&1));
            cout<<(j?"$J_":"$K_")<<x<<"$Map\n"<<c<<"$Q_0\\setminus Q_1Q_2$"
                <<c<<"00"<<c<<"01"<<c<<"11"<<c<<"10"<<c<<"\n"
                <<c<<"-"<<c<<"\n"
                <<c<<"0"<<c<<f[0]<<c<<f[4]<<c<<f[6]<<c<<f[2]<<c<<"\n"
                <<c<<"1"<<c<<f[1]<<c<<f[5]<<c<<f[7]<<c<<f[3]<<c<<"\n";
        }
}

生成 Markdown 格式的表格

#include<bits/stdc++.h>
using namespace std;
char f[8],c='|';
int a[6];
int main()
{
    for(int i=0; i<6; ++i)cin>>a[i];
    ofstream cout("KarnaughMap.md");
    cout<<"NextMap\n"<<c<<"State"
        <<c<<"$Q_2$"<<c<<"$Q_1$"<<c<<"$Q_0$"<<c<<"\n"
        <<c<<"-"<<c<<"\n";
    for(int i=0; i<6; ++i)
    {
        cout<<c<<a[i];
        for(int x=2; ~x; --x)cout<<c<<(a[(i+1)%6]>>x&1);
        cout<<c<<"\n";
    }
    for(int x=2; ~x; --x)
        for(int j=1; ~j; --j)
        {
            fill(f,f+8,'X');
            for(int i=0; i<6; ++i)
                if(j!=(a[i]>>x&1))
                    f[a[i]]='0'+(j==(a[(i+1)%6]>>x&1));
            cout<<(j?"$J_":"$K_")<<x<<"$Map\n"<<c<<"$Q_0\\setminus Q_1Q_2$"
                <<c<<"00"<<c<<"01"<<c<<"11"<<c<<"10"<<c<<"\n"
                <<c<<"-"<<c<<"\n"
                <<c<<"0"<<c<<f[0]<<c<<f[4]<<c<<f[6]<<c<<f[2]<<c<<"\n"
                <<c<<"1"<<c<<f[1]<<c<<f[5]<<c<<f[7]<<c<<f[3]<<c<<"\n";
        }
}