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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
ruTwit
6 / 6 / 1
Регистрация: 04.10.2013
Сообщений: 92
#1

Таблица истинности - C++

23.01.2014, 17:46. Просмотров 1126. Ответов 2
Метки нет (Все метки)

Нужно написать программу, которая строит таблицу истинности по любому заданному логическому выражению. Например, дано B&(B|A). Таблица
A B F()
0 0 0
0 1 1
1 0 0
1 1 1
В общем у меня строится все, кроме F() - итоговые значения. Знаю, что переменные дублируются, нужно подправить местами, но суть не в этом. Помогите достроить таблицу, а именно F(). Если, что готов заплатить.

Добавлено через 7 минут
Собственно код
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
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
#include "stdafx.h"
#include <iostream>
#include <sstream>
#include <string>
#include <stdlib.h>
using namespace std;
 
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL,"Rus");
    string stroka;
    int n=0, m1=0, i, otkr=0, zakr=0, j, alf=0, p, logop=0, kolc=0, kollog=0, kolalf=0, g, p1=0;
    int ret, mo, number;
    char B[26]={'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
    char D[5]={'&','+','-','!','`'};
    bool a=false, b=false, d=false, f=true, t=false, h=false;
 
    int table[1024][10];
    char buk[50];
    char bukva[10];
    int itog[10];
 
    cout<<"Введите выражение"<<endl; getline(cin, stroka);
    m1=stroka.length();
    n=m1;
    char *c=new char [n];
    int *num1=new int[n];
    for (i=0; i<m1; i++)
    { 
        c[i]=stroka[i];
 
        if(c[i]=='('||c[i]==')')num1[i]=0; 
        for(j=0;j<=4;j++)
            if(c[i]==D[j])num1[i]=2;
        for(g=0;g<=25;g++)
            if(c[i]==B[g])num1[i]=1;
    }
    /*
    Блок ошибок:
    проверка количества скобок, 
    проверка правильности логических операций,
    проверка правильности написания алфавита
    проверка повторений
    */
 
    for (i=0; i<m1; i++)
    { 
        //проверка количества и правильности скобок
        if('('==c[i])otkr++;
        if(')'==c[i])zakr++;
        if(((c[i]=='(' && c[i+1]==')'))||((c[i]==')')&&(c[i+1]=='(')))
            kolc++;
    }
    if(otkr==zakr)a=true;
    //проверка правильности написания алфавита
    for(j=0;j<=25;j++)
    {
        for(i=0;i<m1;i++)
        {
            if(B[j]==c[i])alf++;
            //проверка повторений всех символов
            if(num1[i]==num1[i+1])f=false;
        }
    }
    //проверка правильности логических операций
    for(j=0;j<=4;j++)
        for(i=0;i<m1;i++)
            if(D[j]==c[i])logop++;
 
    if((a==true)&&((otkr+zakr+alf+logop)==m1)&&(kolc==0)&&(f==true))
    {
        cout<<endl<<"Выражение введено верно"<<endl;
        t=true;
        
    }
    else
    {
        cout<<endl<<"Выражение введено неверно"<<endl;
        t=false;
    }
    
    //блок решения
    if(t==true)
    {
        p1=0;
        j=0;
        p=0;
        //нахождение всех символов из алфавита
        for(i=0;i<m1;i++)
        {
            for(j=0;j<=25;j++)
                if(c[i]==B[j])
                {
                            buk[p1]=B[j];
                            p1++;
                }
        }
        //нахождение раличных символов из алфавита
        
        number=p1;
        ret=0;
        mo=0;
        //сортировка по возрастанию
        char buf;
    for(i=0;i<=p1-2;i++)
     {
      for(j=i+1;j<=p1-1;j++)
     {
        if(buk[i]>buk[j])
         { buf=buk[j];
           buk[j]=buk[i];
           buk[i]=buf;
         }
      }
    }
    //
    
    for(i=0;i<p1;i++)
    {
         if((buk[i]!=buk[i+1])||((buk[i]!=buk[i+1])&&(p1==i+1)))mo++;
    }
    n=mo;
    mo=0;
    for(i=0;i<p1;i++)
    {
         if((buk[i]!=buk[i+1])||((buk[i]!=buk[i+1])&&(p1==i+1))){bukva[mo]=buk[i];mo++;}
    }
 
 
    for(i=0;i<mo;i++)
        cout<<bukva[i]<<" ";
    cout<<endl;
    //delete []c;
    delete []num1;
 
    int m=1;
    int k=1,k1=1,i,j,N=2,t,p=0;
    m=1<<mo;
    for(i=0;i<m;i++)
        for(j=0;j<mo;j++)
            table[i][j]=0;
 
    for(int i=mo-1;i>=0;i--){
        for(int j=pow(2.0,mo-i-1);j<m;j+=k){
            for(int t=0;t<k;t++)
            {
                table[j][i]=1;
                j++;
            }
            
        }
    k*=2;
    }
 
    for(i=0;i<m;i++)
    {
        for(j=0;j<n;j++)
            cout<<table[i][j]<<" ";
        cout<<endl;
    }
    cout<<endl;
    //итог
    char symbol[7]="1&1";
    int bunt=int(1&0);
    //int but[250];
    //for(i=0;i<m1;i++)
    //but[i]=atoi(&symbol[0]);
 
    cout<<int(symbol);
/*
    for(i=0;i<m;i++)
    {
        for(j=0;j<n;j++)
        {
            
        if(c[)
        }
        cout<<endl;
    }
    
 
    for(i=0;i<m1;i++)
    {
        for(j=0;j<=25;j++)
 
    }
    */
    
    }
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.01.2014, 17:46     Таблица истинности
Посмотрите здесь:

Таблица истинности - C++
Всем привет. Задание следующее: Напечатать таблицу истинности для логической функции (картинка). Помогите - объясните задание,...

таблица истинности - C++
Может у кого завалялась или кто поможет? Реализовать программу таблица истинности , для выражения 3 переменных

Таблица истинности на си - C++
Здравствуйте,помогите пожалуйста прогнать 3 выражения через таблицу истинности,нужно каждое,У меня не получается,подскажите где что и...

Таблица истинности - C++
Доброго времени суток. Хотел поинтересоваться, пытался ли кто нибудь реализовать таблицу истинности? Последнее время стал задумываться о...

Таблица истинности - C++
Ребят возникла сложность при написании программы, которая по заданному выражении создаст таблицу истинности, а именно нет идей как ее...

Таблица истинности по формуле - C++
в общем надо сделать таблицу истинности по формуле у меня вот есть часть кода я создал отдельно функции для логических операций а вот...

Таблица истинности для N переменных С++ - C++
Добрый день. Пересмотрел все похожие темы, но так и не нашел ответа. Так что приходится создань еще одну тему. Цель: построить таблицу...

таблица истинности, минтермы, макстермы - C++
Нужно написать 4 программы: О таблице истинности не много на лекция рассказывали, но все равно не могу понять как 1 прогу делать, а...

Таблица истинности и проверка выполнимости функции - C++
Как на с++ можно реализовать подобное задани Нужно составить таблицу истинности и проверить является ли формула выполнимой.. вот...

Функция не выводит результат на консоль (таблица истинности) - C++
Нужно построить таблицу истинности для формулы A _ (!B _ !C), где _ - это запрос на введение команды у пользователя (&amp;,+,&gt;,=). Отрицание B,...

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

Заполнение таблицы истинности - C++
Подскажите пожалуйста, как можно, используя матрицу, заполнить таблицу истинности 0 и 1. Например: даны A и B. Получается: A B 0 0 0...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Alex5
1048 / 711 / 104
Регистрация: 12.04.2010
Сообщений: 1,789
23.01.2014, 18:43     Таблица истинности #2
Один из способов. Для вычисления использовать обратную польскую запись.
При этом, например, строка B & ( B | A ) преобразуется к виду B B A | &
ruTwit
6 / 6 / 1
Регистрация: 04.10.2013
Сообщений: 92
23.01.2014, 19:09  [ТС]     Таблица истинности #3
Alex5, интересный способ, а другого более простого способа нет?
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru