剑雨君 发表于 2014-9-27 22:04:26

用编程解决数字逻辑的问题

有一道题目是这样的: F = ( AB + ~A~B) + ( CD + ~C~D ) = 1    //~代表非,~A~B即代表A非与B非
A、B、C、D都只能是0或1。
求编程列出ABCD的值组合,用真值表列出。

这是我在做万恶的数字逻辑作业的时候突然想到可以借助计算机解决出来的,不过鉴于明天要交作业了,时间又晚,所以这个问题我明天再思考,现在发出来给各位鱼油试试~~~~~~

darren_gong 发表于 2014-9-27 22:23:22

~A和~B不知道怎么表示?

剑雨君 发表于 2014-9-27 23:21:22

darren_gong 发表于 2014-9-27 22:23
~A和~B不知道怎么表示?

不是, 我的意思是利用计算机将这道题目解出来

darren_gong 发表于 2014-9-29 13:02:17

a =
b =
c =
d =

for a_1 in a:
    for b_1 in b:
      for c_1 in c:
            for d_1 in d:
                result = ((a_1 & b_1) + (~a_1 & ~b_1)) + ((c_1 & d_1) + (~c_1 & ~d_1))
                if result == 1:
                  print (a_1 + " " + b_1 + " " + c_1 + " "+ d_1)


很挫的一个例子,不过我也不知道这个描述对不对

仰望天上的光 发表于 2014-9-29 14:01:12

/*
有一道题目是这样的: F = ( AB + ~A~B) + ( CD + ~C~D ) = 1    //~代表非,~A~B即代表A非与B非
A、B、C、D都只能是0或1。
求编程列出ABCD的值组合,用真值表列出。
*/
#include <stdio.h>
#define A(i) ((i&1) != 0)
#define B(i) ((i&2) != 0)
#define C(i) ((i&4) != 0)
#define D(i) ((i&8) != 0)
int validate(int i);
void print( int i );
int main(void) {
      int i = 0;
      for(;i<16;++i)
                if(validate(i))
                        print(i);
      return 0;
}

int validate(int i) {
      return ((A(i)&&B(i) || !A(i)&&!B(i)) || ( C(i)&&D(i) || !C(i)&&!D(i) ));
}
void print( int i ) {
      printf( "A:%d, B:%d, C:%d, D:%d \n", A(i), B(i), C(i), D(i) );
}

剑雨君 发表于 2014-10-2 18:39:38

仰望天上的光 发表于 2014-9-29 14:01


谢谢!我要认真研究下,以后的数字逻辑作业就不用担心啦!

剑雨君 发表于 2014-10-2 18:41:07

darren_gong 发表于 2014-9-29 13:02
a =
b =
c =


没学过这种语言:shock:不清楚行不行。能运行么,结果对么

剑雨君 发表于 2014-10-2 19:20:46

仰望天上的光 发表于 2014-9-29 14:01


开头的那四个宏定义就是列出ABCD的各种组合,可是我不知道为什么这样做就可以使各个组合完全不同呢??能不能说下为什么?

大个的糖果 发表于 2014-11-1 02:19:12

页: [1]
查看完整版本: 用编程解决数字逻辑的问题