2 / 2 / 2
Регистрация: 23.02.2014
Сообщений: 44
1

Построить таблицу истинности

09.04.2014, 20:10. Показов 2366. Ответов 4
Метки нет (Все метки)

Здравствуйте! В принципе задача фигня, единственное с чем у меня загвоздка, это в том что в выражении могут быть скобки, следовательно считать все по очереди нельзя, может есть у кого как распарсить строку со скобками?
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.04.2014, 20:10
Ответы с готовыми решениями:

Построить таблицу истинности по формуле
нужно построить таблицу истинности по формуле подскажите как это реализовать вот у меня есть уже...

Построить таблицу истинности для формул
Пользователь вводит одну из формул вида (A*((!)B*C))*D или A*((!)B*(C*D)) или (A*(!)B)*(C*D) , где...

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

Построить таблицу истинности и определить выполнимость формулы: Значения Х1,Х2,Х3 одинаковы для всех вариантов
X1 X2 X3 0 0 0 0 0 1 Вот моё задание 7) Х1*Х2*Х3 + Х1*Х2*Х3 + Х1*Х2*Х3...

4
Заблокирован
09.04.2014, 20:22 2
Цитата Сообщение от lNORDl Посмотреть сообщение
В принципе задача фигня
Цитата Сообщение от lNORDl Посмотреть сообщение
распарсить строку со скобками


Добавлено через 10 минут
А сколько переменных будет в вашей строке со скобками?
От этого зависит размерность таблицы.

Дайте примеры выражений.
0
2 / 2 / 2
Регистрация: 23.02.2014
Сообщений: 44
09.04.2014, 20:39  [ТС] 3
Таблица простая до 3 переменных.
0
Заблокирован
10.04.2014, 00:16 4
Дайте пример выражения со скобками, которое вы хотите распарсить.
0
2 / 2 / 2
Регистрация: 23.02.2014
Сообщений: 44
10.04.2014, 01:10  [ТС] 5
Ну например a|!(b&c&(!a|c)), но опираций будет больше, но это не имеет особой разницы. Основная задача, это разбить строку на конкретные действия. В принципе я нашел вполне пригодный код, осталось только разобраться как сделать операцию отрицания как отдельное действие:
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
#include "stdafx.h"
 
using namespace System;
 
#include <iostream>
#include <string>
using namespace std;
 
string delete_spaces(string str)
{
    string s = "";
    for (int i = 0; i<str.size(); ++i)
    {
        if (str[i] != ' ' && str[i] != '\t')
            s += str[i];
    }
    return s;
}
 
bool check(string str)
{
    string s = delete_spaces(str);
 
    if (s.size() == 1 && s == "0")
        return 0;
    if (s.size() == 1 && s == "1")
        return 1;
    int q = 0;
 
    string s1, s2;
 
 
    for (int i = s.size() - 1; i >= 0; --i)
    {
 
        if (i == 0 && s[i] == '(' && q == 1)
        {
            s.assign(s, 1, s.size() - 2);
            i = s.size() - 1;
            q = 0;
        }
 
 
        if (s[i] == ')')
            q += 1;
        if (s[i] == '(')
            q -= 1;
 
        if (q == 0 && s[i] == '|')
        {
            s1.assign(s, 0, i);
            s2.assign(s, i + 1, s.size() - i - 1);
 
            bool r = check(s1) || check(s2);
            cout << "|: " << s1 << " " << s2 << "\n";
            return r;
        }
        if (q == 0 && s[i] == '&')
        {
            s1.assign(s, 0, i);
            s2.assign(s, i + 1, s.size() - i - 1);
 
            bool r = check(s1) && check(s2);
            cout << "&: " << s1 << " " << s2 << "\n";
            return r;
        }
        if (q == 0 && s[i] == '!')
        {
            s1.assign(s, 0, i - 1);
            s2.assign(s, i + 1, s.size() - i - 1);
 
            bool r = !(!check(s1) && check(s2));
            cout << "!: " << s1 << " " << s2 << "\n";
            return r;
        }
    }
}
 
 
int main(array<System::String ^> ^args)
{
 
    string s;
    getline(cin, s);
    cout << check(s);
    getchar();
    return 0;
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.04.2014, 01:10
Помогаю со студенческими работами здесь

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

Вывести таблицу истинности по условию
Нужно вывести таблицу истинности (A&lt;=&gt;B&lt;=&gt;C)V!A, где &lt;=&gt; - эквивалентность, V - или, ! - не.

Вывести таблицу истинности на консоль
Нужно сгенерировать таблицу истинности. Примера, для которого это надо сделать, нет. Должна...

Создать таблицу истинности выражения ((p==q)=>(!p))
Здраствуйте мне нужно создать таблицу истинности по формуле ((p==q)=&gt;(!p)) я начала создавать...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru