Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

23.01.2014, 00:49. Просмотров 637. Ответов 2
Метки нет (Все метки)

Нужно построить таблицу истинности по заданном логическому выражению. Но суть не в этом, а в том, что в конце программы выводится массив не повторяющихся букв до mo. Все вроде работает, но если дальше вывести какую-нибудь переменную вылетает ошибка.
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
#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 *c=new char [n];
    char *c1=new char[n];
    char *c2=new char[n];
    int *num1=new int[n];
    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;
    cout<<"Введите выражение"<<endl; getline(cin, stroka);
    m1=stroka.length();
    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])
                {
                            c1[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(c1[i]>c1[j])
         { buf=c1[j];
           c1[j]=c1[i];
           c1[i]=buf;
         }
      }
    }
 
    
    for(i=0;i<p1;i++)
    {
         if((c1[i]!=c1[i+1])||((c1[i]!=c1[i+1])&&(p1==i+1))){c2[mo]=c1[i];mo++;}
    }
 
    for(i=0;i<mo;i++)
        cout<<c2[i]<<" ";
    
    cout<<endl;
    
    /*здесь ошибка вывода, хотя выше цикл с этой переменной работает нормально*/
    cout<<mo;
    }
 
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.01.2014, 00:49
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Нужно построить таблицу истинности по заданном логическому выражению. (C++):

Построить таблицу истинности - C++
Здравствуйте! В принципе задача фигня, единственное с чем у меня загвоздка, это в том что в выражении могут быть скобки, следовательно...

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

Построить таблицу истинности для формул - C++
Пользователь вводит одну из формул вида (A*((!)B*C))*D или A*((!)B*(C*D)) или (A*(!)B)*(C*D) , где * - любая из логических операций....

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

Построить таблицу значений функции на заданном интервале - C++
Построить таблицу значений следующих функций на интервале количество точек разбиения n = 50. Нарисовать график функции y=sin(e^x).

Построить таблицу значений заданной функции на заданном промежутке с указанным шагом - C++
буду очень благодарна за помощь в решение задачки :coffee2:

2
Ev_Hyper
Заблокирован
23.01.2014, 01:38 #2
прочтите статью, должно помочь в поисках ошибки:
http://www.gunsmoker.ru/2009/05/access-violation.html

Добавлено через 9 минут
Все, нашел ошибку:

C++
1
2
3
4
5
6
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 *c=new char [n];
 char *c1=new char[n];
 char *c2=new char[n];
 int *num1=new int[n];
чему у вас n равно? - 0. Вообще не вижу смысла в данном случае создавать массив динамически. Задайте число, за пределы которого массив точно не выйдет - ошибки не будет.
1
ruTwit
6 / 6 / 1
Регистрация: 04.10.2013
Сообщений: 92
23.01.2014, 01:53  [ТС] #3
Ev_Hyper, Вот это косяк, сам бы я это не заметил, спасибо.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.01.2014, 01:53
Привет! Вот еще темы с ответами:

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

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

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

Вывести на экран таблицу истинности - C++
Для !(A &amp;&amp; B) вывести на экран таблицу истинности с использованием функции string Res(bool, bool). Таблица должна выводится в главной...


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

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

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