c语言编程输出主析取范式,c++编程:从键盘上任意输入一个主析取范式,输出与之等值的主合取范式...

满意答案

02ae427d08e371d7e90d5b995e828d6d.png

zxuu11

2013.09.15

02ae427d08e371d7e90d5b995e828d6d.png

采纳率:44%    等级:8

已帮助:2365人

//从键盘上任意输入一个主析取范式,输出与之等值的主合取范式。┐∧∨

# include

# include

# include

using namespace std ;

//跳出函数

bool jump(const char ch){

char c = cin.peek() ;

if (ch == ')' && c != '+' && c != '*')

return 1 ;

return 0 ;

}

//将字母转化为二进制

int change(char ch){

int k = ch-97 ;

return pow(2,k) ;

}

//将转化后的和取公式输出

void output(int k, int n , int left){

char ch = 96;

int i ;

cout << '(' ;

for (i=0 ; i

ch++ ;

switch (k%2){

case 1:

cout << ch << '*' ;

k/=2 ;

break ;

case 0 :

cout << '!' << ch << '*' ;

k/=2 ;

break ;

}

}

if (left == 0)

cout << '\b' << ')' ;

else

cout << '\b' << ')' << '+' ;

}

//公式输入 and 公式输出....

void funtion(){

cout << "输入变量数:" ;

int var_n=0 , k ;

cin >> var_n ;

if (var_n>26 || var_n<1){

cout << "enter error!" << endl ;

MessageBox(NULL, "输入错误!", "error", MB_OK);

exit (0) ;

}

k = pow(2, var_n) ;

int *p = new int[k] ;

for (int i=0; i

p[i] = 0 ;

char ch ;

int num = 1 , count = 0 ;

cout << "----------------------------------------------------" << endl ;

cout << "输入析取公式: " ;

while (1){

cin >> ch ;

if(jump(ch))

break ;

if (ch == '*'){

p[count] = 1 ;

num++ ;

count = 0 ;

cin >> ch ;

}

if (ch == '(' || ch == ')' || ch == '+')

cin >> ch ;

if (ch == '!')

cin >> ch >> ch;

if(jump(ch))

break ;

if (ch != '*' && ch != '!' && ch != '(' && ch != ')' && ch != '+'){

count += change(ch) ;

}

if (ch == '*'){

p[count] = 1 ;

num++ ;

count = 0 ;

cin >> ch ;

}

}

p[count] = 1 ;

cout << "变项数有: " << num << endl ;

cout << "----------------------------------------------------" << endl ;

cout << "和取公式:" ;

int left ;

left = k - num ;

for (i=0 ; i

if (p[i] == 0){

left-- ;

output(i, var_n, left) ;

}

cout << "\n变项数有:" << k - num << endl ;

cout << "\n----------------------------------------------------" << endl ;

}

main(){

funtion();

return 0 ;

}

00分享举报

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值