Форум программистов, компьютерный форум CyberForum.ru

Описание логических операций - C++

Восстановить пароль Регистрация
 
JoshKFC
0 / 0 / 0
Регистрация: 22.01.2015
Сообщений: 7
05.04.2016, 18:39     Описание логических операций #1
Добрый вечер! Имеется задача по выведению закрашиваемых областей на кругах Эйлера по введенным логическим выражениям. Уперся в то, что не знаю как можно описать знак минуса подходящим образом. Образец:
Кликните здесь для просмотра всего текста
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
int inversio(int *mas1, int *result) //Инверсия
{
    for (int i = 0; i <= 8; i++)
    {
        if (mas1[i] == 0)
            result[i] = 1;
        if (mas1[i] == 1)
            result[i] = 0;
    }
    return 0;
}
 
int conjunctio(int *mas1, int *mas2, int *result) //Конъюнкция
{
    for (int i = 0; i <= 8; i++)
    {
        if (mas1[i] == 0 & mas2[i] == 0)
            result[i] = 0;
        if (mas1[i] == 0 & mas2[i] == 1)
            result[i] = 0;
        if (mas1[i] == 1 & mas2[i] == 0)
            result[i] = 0;
        if (mas1[i] == 1 & mas2[i] == 1)
            result[i] = 1;
    }
    return 0;
}

Собственно, описываю таблицы истинности для функций И, ИЛИ, Не, исключающее ИЛИ. С такими выражениями (A xor B or C, например) программа справляется нормально, но в задании фигурирует A & B - C. Хотелось бы каким-то простым образом схоже описать, возможно ли это?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nmcf
4257 / 3688 / 1243
Регистрация: 14.04.2014
Сообщений: 14,444
05.04.2016, 18:47     Описание логических операций #2
Что описать-то? Для чего там минус?
JoshKFC
0 / 0 / 0
Регистрация: 22.01.2015
Сообщений: 7
05.04.2016, 18:55  [ТС]     Описание логических операций #3
Описать функцию для минуса. Есть конечно вариант и не описывать его отдельно, а просто инвертировать значение С и записать (А и Б и неС), но не знаю насколько это верно. Результат-то я таким образом получаю, но мне кажется, что он не полный.
nmcf
4257 / 3688 / 1243
Регистрация: 14.04.2014
Сообщений: 14,444
05.04.2016, 18:57     Описание логических операций #4
Минус - арифметическая операция, а ты про таблицы истинности пишешь. Тебе вычесть нужно или что он обозначает?
JoshKFC
0 / 0 / 0
Регистрация: 22.01.2015
Сообщений: 7
05.04.2016, 19:04  [ТС]     Описание логических операций #5
Вообще да, вычесть. Я наверное перемудрил с вопросом изначальным.
вывод и мейн
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
void output(int *mas1, int *masA, int *masB, int *masC)//Функция для вывода результата на экран
{
    for (int i = 0; i <= 8; i++)
    {
        if (mas1[i] == 1)
        {
            cout << "A="<<masA[i] << "; ";
            cout << "B="<<masB[i] << "; ";
            cout << "C="<<masC[i] << "; ";
            cout << "Закрасить область под номером " << i + 1 << endl;
        }
    }
}
 
int main()
{
    setlocale(LC_ALL, "Russian");
    //             A  B  C AC AB BC ABC Z
    int masA[] = { 1, 0, 0, 1, 1, 0, 1, 0 };
    int masB[] = { 0, 1, 0, 0, 1, 1, 1, 0 };
    int masC[] = { 0, 0, 1, 1, 0, 1, 1, 0 };
    int inver[8], conjunc[8], disjunct_1[8], rxor[8], disjunct_2[8], rxor_2[8], conjuct_2[8];
    for (int i = 0; i <= 8; i++)
    {
        inver[i] = 0;
        conjunc[i] = 0;
        disjunct_1[i] = 0;
        rxor[i] = 0;
        disjunct_2[i] = 0;
        rxor_2[i] = 0;
        conjuct_2[i] = 0;
    }
    cout << "Для  логического выражения A & B - C в кругах Эйлера необходимо:" << endl;
    
    conjunctio(masA, masB, conjunc);
    inversio(masC, inver);
    conjunctio(inver, conjunc, conjuct_2);
    output(conjuct_2, masA, masB, masC);
    cout << endl;
 
    cout << "Для  логического выражения A xor B or C в кругах Эйлера необходимо:" << endl;
    xor(masA, masB, rxor_2);
    disjunctio(rxor_2, masC, disjunct_2);
    output(disjunct_2, masA, masB, masC);
    cout << endl;
 
    cout << "Для задания по изображению: \n";
    cout << "СДНФ (!A and B and !C) or (A and !B and C)\n" << endl;
 
    system("pause");
    return 0;
}
nmcf
4257 / 3688 / 1243
Регистрация: 14.04.2014
Сообщений: 14,444
05.04.2016, 19:13     Описание логических операций #6
Ну тогда минусом и вычитай.
Yandex
Объявления
05.04.2016, 19:13     Описание логических операций
Ответ Создать тему
Опции темы

Текущее время: 09:24. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru