Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
0 / 0 / 1
Регистрация: 27.04.2015
Сообщений: 14
1

Перебор всех значений трёх булевых переменных

27.04.2015, 22:04. Показов 2365. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Вобщем мне надо проверить функцию на тавтологию, для этого как я понимаю надо проверить чтобы конечная функция была всегда истинной при любых интерпретациях переменных, т.е сначала сделать все три столбца таблицы истинности =true, потом все кроме последней и так 3! раз.
Я пытаюсь сделать все через вложенные условия, но мне кажется есть путь полегче
вот то что я пока написал
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
#include "stdafx.h"
#include <iostream>
#include <cstdlib>
 
using namespace std;
 
 
#include <iostream>
 
using namespace std;
 
bool con(bool A, bool B) {
    return (A && (!B));
}
 
bool impl(bool A, bool B)
{
    if (A == true && B == false) return 0;
    else return 1;
}
 
bool impl(bool A, bool B, bool C)
{
    bool R = (A && (!B));
    bool I = (C && (!C));
    if (A == true && B == false) bool D=0;
    else bool D = 1;
    if (R == true && I == false) return 0;
    else return 1;
 
}
bool impl1(bool A, bool B){
    if (A == true && B == false) return 0;
    else return 1;
}
 
bool finalimpl(bool A, bool B, bool C)
{
    bool R = (A && (!B));
    bool I = (C && (!C));
    bool E;
    bool D;
    if (A == true && B == false)  D = 0;
    else  D = 1;
    if (R == true && I == false) E=0;
    else  E=1;
    if (D == true && E == false) return 0;
    else return 1;
}
int main()
{
    setlocale(LC_ALL, "Russian");
    bool P, Q, R, F;
 
    for (int i = 0; i < 8; i++)
    {
        R = i & 0xF1;
        Q = (i >> 1) & 0xF1;
        P = (i >> 2) & 0xF1;
        cout << " | " << P << " " << Q << " " << R << " | " << !Q << " | "  << con(P, Q) << " | " << !R << " | " << con(R, R) << " | " << impl(P, Q, R) << " | " << impl1(P, Q) << " | " << finalimpl(P, Q, R) << " | " << endl;
    }
    for (int i = 0; i < 8; i++)
    {
        if (finalimpl(P, Q, R) == 1) {
            cout << "Функция выполнима\n";
            break;
        }
        else { cout << 
            "Функция противоречива\n"; 
            break; }
    }
 
    for (int i = 0; i < 8; i++)
    {
        P = 1;
        Q = 1;
        R = 1;
        if (finalimpl(P, Q, R) == 1) {
            P = 1; Q = 1; R = 0;
            if ((finalimpl(P, Q, R) == 1)) {
                P = 1; Q = 0; R = 1;
                if ((finalimpl(P, Q, R) == 1))
                    {
                    P = 0; Q = 1; R = 1;
                    if ((finalimpl(P, Q, R) == 1)) {
                        P = 1; Q = 0; R = 0;
                        if ((finalimpl(P, Q, R) == 1)){
                            P = 1; Q = 0; R = 1;
                            if ((finalimpl(P, Q, R) == 1)){
 
                            }
                        }
                    }
                }
            }
        }
    }
 
    system("pause");
    return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.04.2015, 22:04
Ответы с готовыми решениями:

Алгоритм для нахождения всех булевых функций от N переменных
Помогите придумать оптимальный алгоритм для данного условия! очень нужно плиз!!!!!!!(хотя бы для 4)

Перебор для трех переменных рекурсия. Доработка кода
Здравствуйте, уважаемые форумчане! Поставил перед собой следующую задачу: Даны три числа и...

Перебор возможных значений для трёх чисел
Доброго времени суток. Нужно перебрать все возможные значения трёх чисел. их сума равна 1....

Добавить вывод на экран адресов всех переменных, а в конец – значений всех переменных
Никак не могу найти ошибки.И еще, в начало программы добавить вывод на экран адресов всех...

2
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
28.04.2015, 00:06 2
Это претендует на звание "лучший код" на одном не малоизвестном ресурсе. Был бы подобный ресурс для условий, оно бы тоже заняло первое место.

Объясни простым языком, что нужно сделать?
0
0 / 0 / 1
Регистрация: 27.04.2015
Сообщений: 14
28.04.2015, 01:01  [ТС] 3
castaway, есть три переменных типа bool, т.к булевы переменные могут принимать лишь два значения(0,1), то получается всего 8 возможных комбинаций (111,110,101,011,010,001,100,000), мне нужно проверить одно свойство, что функция finalimpl будет истинна, т.е равна 1 при всех этих комбинаций.
вроде так, не знаю как по-другому обьяснить, изначальное задание: по таблице истинности для заданой функции определить является ли она тавтологией(это из мат. логики).
Я уже вроде сделал через вложенные условия, но хочу узнать есть ли альтернативный метод
)
0
28.04.2015, 01:01
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.04.2015, 01:01
Помогаю со студенческими работами здесь

Найти число всех булевых функций от n переменных, имеющих вид: элементарная конъюнкция
Найти число всех булевых функций от n переменных, имеющих вид: элементарная конъюнкция.

Найти простейшую формулу от трёх переменных, принимающую значение 1 только на следующих наборах значений переменных
2. Найти простейшую формулу от трёх переменных, принимающую значение 1 только на следующих наборах...

Перебор всех возможных сочетаний заданных переменных
Чтобы не создавать новую тему, напишу здесь. Есть несколько переменных - около 20, часть...

Сортировка по возрастанию значений в трех переменных A, B, C
Уважаемые эксперты и любители, помогите пожалуйста написать программу! Второй день сижу( нужно для...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru