我需要为CNF创建一个DNF方法,尽管我很难理解如何在代码中实现它。继承人的问题
方法1.为给定的输入/输出表定义的函数在DNF中构造一个布尔表达式 (至少有一行值为1的行)。 要构造具有给定输入/输出表的DNF,请确定表中每一行的值 函数的值为1。在上表中,它们是第1、2、3、4和6行。对于每个此类行,构造一个 对该行的p,q和r的真值的确切组合产生1(或true)的乘积, 对于p,q和r的所有其他真值组合,为0(或false)。例如,第一天的产品 row为pqr,因为如果p = 1,q = 1和r = 1,则pqr为1(真),而对于p,q和r的所有其他真值,pqr为0。 第二行的乘积为pqr̅,因为如果p = 1,q = 1和r = 0,则pqr̅为1(真),而其他所有pqr̅为0 p,q和r的真值。同样,第3行的乘积为pq̅r,第4行的乘积为pq̅r̅, 现在第6行的乘积是p̅qr̅。现在,以给定表作为输入/输出表的任何布尔表达式的值都为1(true) pqr = 1,或者在pqr̅= 1的情况下,或者在pq̅r = 1的情况下,或者在pq̅r̅= 1的情况下,或者在p̅qr̅= 1的情况下,没有其他情况。它 因此,带有给定表的DNF形式的布尔表达式为 pqr +pqr̅+pq̅r +pq̅r̅+p̅qr̅。
方法2.在CNF中为给定的输入/输出表定义的函数构造一个布尔表达式 (至少一行值为0)。 要构建具有给定输入/输出表的CNF,请确定表中每一行的值 函数的值为0。在上表中,这些行是第5、7和8行。对于每个此类行,构造一个求和 对于该行的p,q和r的真值的确切组合产生0(或false),并产生1(或true) 对于p,q和r的所有其他真值组合。例如,第5行的总和为p +q̅+ r 因为如果p = 0,q = 1和r = 1,则p +q̅+r̅为0(假),而对于p,q和r的所有其他真值,p +q̅+r̅为0(假)。的 第7行的总和为p + q +r̅,因为如果p = 0,q = 0和r = 1,则p + q +r̅为0(假),而对于所有其他值,则为1 p,q和r的真值。同样,第8行的和为p + q + r。 现在,以给定表作为其输入/输出表的任何布尔表达式的值均为0(假),以防万一 p +q̅+r̅= 0,并且在p + q +r̅= 0的情况下,在p + q + r = 0的情况下,在其他情况下也没有。因此,布尔值 给定表的CNF形式的表达式为 (p +q̅+r̅)(p + q +r̅)(p + q + r)。
import java.util.Scanner;
class Main {
public static boolean DNF(int array[]){ // they all have to be true to be DNF
int counter =0;
for ( int x =0; x <= 8; x++){
//HEEEEEEEEEEEEEEEEEEEEEEERRRRRRRRRRRRRRRRRRRRRRRRRRREEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
}//end for
return true;
}//end dnf
public static boolean CNF(){ // they all have to be true to be cnf
int counter = 0;
for ( int y = 0; y <= 8; y++){
//////////////////////////////////HEEEEEEEEEEEEEEEEEEEEEEEEERRRRRRREEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
}//end for
return false;
}//end cnf
public static void main(String[] args) {
Scanner scan = new Scanner ( System.in);
int myArray[] = new int[8];
char p ;
char q ;
char r ;
boolean cnf = false;
boolean dnf = false;
int i = 0;
int j = 0;
int k = 0;
int input;
for(int variable = 0; variable < 8; variable++){
System.out.println(" Enter 0 or 1 : ");
input = scan.nextInt();
if (input == 0 || input == 1){
myArray[variable] = input;
}else if(input > 1){
System.out.println("ERRRORRRRRRRR!");
break;
}else if(input < 0){
System.out.println("ERRRORRRRRRRR!");
break;
}
}
System.out.println( "Truth Table" );
System.out.println( "P \t Q \t R \t | f (p,q,r)" );
System.out.println("________________________");
System.out.println();
for (i = 0; i < 2 ; i++) {
for (j = 0; j < 2 ; j++) {
for ( k= 0; k < 2 ; k++) {
if ( i == 0) {
p = '1';
}//end if
else {
p = '0';
}//end
if (j == 0) {
q = '1';
}//end if
else {
q = '0';
}//end else
if (k == 0) {
r = '1';
}//end if
else {
r = '0';
}//end else
//tutology = {i, j ,k};
System.out.println( p + "\t" + q + "\t" + r);
//System.out.println( DNF(tutology) );
System.out.println();
}//end for
}//end for
}//end for
}//end main
}//end main