Таблица правды - Помощь

У меня есть вопрос для назначения. Вопросы в основном следующие: есть две целочисленные переменные, скажем, A и B. Оба эти числа содержат данные. Использование таблицы истинности, которая, если таковая имеется, из следующих тестов операторов IF эквивалентна:

if (!(A == 60 && B == 40))   

 -   if (A != 60 || B != 40)
 -  if (A == 60 && (!(B == 40)))

Как бы я занялся этим, пожалуйста. Любой совет будет оценен. Я думаю, что мне нужно создать таблицу с тремя столбцами - один с именем A, другой B и третий столбец с именем RESULT (ДА ИЛИ НЕТ).

Заявление: if (!(A == 60 && B == 40)) - Я не уверен, как читать часть if (!, Другими словами, часть A == 60 && B == 40 по сути, говорит мне, что А должно равняться 60, а в то же время В должно равняться 40. После этого я запутался. Любая помощь / совет, пожалуйста, будет оценен.

Спасибо Крис

2 ответа

Решение

Это действительно не имеет никакого отношения к Java как таковой. Да, вы можете решить, написав таблицы истинности. ! означает логическое отрицание или нет, или вы можете даже думать об этом как об обратном. Лично я считаю полезным установить все части конкретной таблицы истинности.

   a    |   b    |    !b     |       a & b       |      a & !b        |      !(a & b)
 ----------------------------------------------------------------------------------------
 A = 60 | B = 40 | !(B = 40) | (A = 60 & B = 40) | A = 60 & !(B = 40) | !(A = 60 & B = 40)
   T    |   T    |     F     |         T         |        F           |          F
   T    |   F    |     T     |         F         |        T           |          T
   F    |   T    |     F     |         F         |        F           |          T
   F    |   F    |     T     |         F         |        F           |          T

Вы должны отметить, что ваш конкретный пример подчиняется одному из законов де Моргана.

введите описание изображения здесь

P is A = 60  
Q is B = 40  
¬ is !  
∧ is &&   
∨ is ||   

так...

!(A && B) действительно так же, как !A || !B

Таблица правды говорит вам все остальное, что вам нужно знать, чтобы решить эту проблему.

Я надеюсь, что этот код, который я создаю, поможет вам понять, это простой код для отображения таблицы истинности с использованием двоичных (0 и 1) чисел вместо логических (ИСТИНА, ЛОЖЬ)

/**
 * Truth table for the logical operators. Using
 * zeros and ones.
 * 
 * @ Samuel Mayol
 */

public class LogicalOpTable {
    public static void main(String[] args) {

        boolean p, q; 
        byte p1, q1, pAndQ, pOrQ, pXORq, notP, pq;

        System.out.println("Using 0s and 1s for the Truth Table:");
        System.out.println("P\tQ\tAND\tOR\tXOR\tNOT"); // using tabs \t

        pq =1;

        switch (pq) { // without break it will execute the whole swich case statements
            case 1 : 
                p = true; q = true;
                p1=(byte) (p?1:0); // The ? : operator in Java
                q1=(byte) (q?1:0); // Short form for Java If statement
                pAndQ=(byte) ((p&q)?1:0); 
                pOrQ=(byte) ((p|q)?1:0);
                pXORq=(byte) ((p^q)?1:0);
                notP= (byte) ((!p)?1:0);

                System.out.print(p1 + "\t" + q1 + "\t");
                System.out.print(pAndQ + "\t" + pOrQ + "\t");
                System.out.println(pXORq + "\t" + notP);
            case 2: 
                p = true; q = false;
                p1=(byte) (p?1:0); // The ? : operator in Java
                q1=(byte) (q?1:0); // Short form for Java If statement
                pAndQ=(byte) ((p&q)?1:0); 
                pOrQ=(byte) ((p|q)?1:0);
                pXORq=(byte) ((p^q)?1:0);
                notP= (byte) ((!p)?1:0);

                System.out.print(p1 + "\t" + q1 + "\t");
                System.out.print(pAndQ + "\t" + pOrQ + "\t");
                System.out.println(pXORq + "\t" + notP);
            case 3: 
                p = false; q = true;
                p1=(byte) (p?1:0); // The ? : operator in Java
                q1=(byte) (q?1:0); // Short form for Java If statement
                pAndQ=(byte) ((p&q)?1:0); 
                pOrQ=(byte) ((p|q)?1:0);
                pXORq=(byte) ((p^q)?1:0);
                notP= (byte) ((!p)?1:0);

                System.out.print(p1 + "\t" + q1 + "\t");
                System.out.print(pAndQ + "\t" + pOrQ + "\t");
                System.out.println(pXORq + "\t" + notP);
            case 4: 
                p = false; q = false;
                p1=(byte) (p?1:0); // The ? : operator in Java
                q1=(byte) (q?1:0); // Short form for Java If statement
                pAndQ=(byte) ((p&q)?1:0); 
                pOrQ=(byte) ((p|q)?1:0);
                pXORq=(byte) ((p^q)?1:0);
                notP= (byte) ((!p)?1:0);

                System.out.print(p1 + "\t" + q1 + "\t");
                System.out.print(pAndQ + "\t" + pOrQ + "\t");
                System.out.println(pXORq + "\t" + notP);
        }
    }
}

Результат после запуска этого кода:

Using 0s and 1s for the Truth Table:
P   Q   AND OR  XOR NOT
1   1   1   1   0   0
1   0   0   1   1   0
0   1   0   1   1   1
0   0   0   0   0   1
Другие вопросы по тегам