Методы тутологии (DNF) и противоречия (CNF) - PullRequest
0 голосов
/ 25 октября 2019

Мне нужно сделать метод для CNF DNF, хотя мне трудно понять, как реализовать его в коде. Вот проблема

Метод 1. Создайте логическое выражение в DNF для функции, определенной данной таблицей ввода / вывода (по крайней мере, с одной строкой со значением 1). Чтобы построить DNF с заданной таблицей ввода / вывода, определите каждую строку в таблице, для которой значение функции равно 1. В приведенной выше таблице это строки 1, 2, 3, 4 и 6. Для каждогов такой строке создайте продукт, который выдает 1 (или true) для точной комбинации значений истинности p, q и r для этой строки и 0 (или false) для всех других комбинаций значений истинности p, q и r,Например, произведением для 1-й строки является pqr, поскольку pqr равно 1 (true), если p = 1, q = 1 и r = 1, и равно 0 для всех других значений истинности p, q и r. Произведение для 2-й строки равно pqr̅, поскольку pqr̅ равно 1 (true), если p = 1, q = 1 и r = 0, и равно 0 для всех других значений истинности p, q и r. Аналогично, произведение для 3-й строки - это pq̅r, произведение для 4-й строки - это pq̅r̅, а произведение для 6-й строки - это p̅ q r,. Теперь любое булево выражение с данной таблицей в качестве ввода / выводаТаблица имеет значение 1 (true) в случае pqr = 1, или в случае pqr̅ = 1, или в случае pq̅ r = 1, или в случае pq̅r̅ = 1, или в случае p̅ q r̅ = 1, и ни в каких других случаях,Отсюда следует, что логическое выражение в форме DNF с заданной таблицей имеет вид pqr + pqr̅ + pq̅ r + pq̅ r̅ + p̅ q r̅.

Метод 2. Построение логического выражения в CNF для функции, определенной заданным входным значением/ выходная таблица (хотя бы с одной строкой со значением 0). Чтобы построить CNF с данной таблицей ввода / вывода, определите каждую строку в таблице, для которой значение функции равно 0. В приведенной выше таблице это строки 5, 7 и 8. Для каждой такой строки создайтесумма, которая дает 0 (или false) для точной комбинации значений истинности p, q и r для этой строки и 1 (или true) для всех других комбинаций значений истинности p, q и r. Например, сумма для 5-й строки равна p + q̅ + r, поскольку p + q̅ + r̅ равно 0 (ложно), если p = 0, q = 1 и r = 1, и равно 0 для всех других значений истинности. из р, д и р. Сумма для 7-й строки равна p + q + r̅, потому что p + q + r̅ равно 0 (ложно), если p = 0, q = 0 и r = 1, и равно 1 для всех других значений истинности p,д и р. Аналогично, сумма для 8-й строки равна p + q + r. Теперь любое булево выражение с заданной таблицей в качестве входной / выходной таблицы имеет значение 0 (ложь) в случае p + q̅ + r̅ = 0, а в случае p + q + r̅ = 0 и в случае p + q +г = 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
...