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

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

Восстановить пароль Регистрация
 
ruTwit
6 / 6 / 1
Регистрация: 04.10.2013
Сообщений: 92
23.01.2014, 00:49     Нужно построить таблицу истинности по заданном логическому выражению. #1
Нужно построить таблицу истинности по заданном логическому выражению. Но суть не в этом, а в том, что в конце программы выводится массив не повторяющихся букв до 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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.01.2014, 00:49     Нужно построить таблицу истинности по заданном логическому выражению.
Посмотрите здесь:

Построить таблицу истинности и определить выполнимость формулы: Значения Х1,Х2,Х3 одинаковы для всех вариантов C++
C++ Вывести на экран таблицу истинности
C++ Построить таблицы истинности следующих высказываний
Построить таблицу истинности C++
Построить таблицу значений функции на заданном интервале C++
C++ Составить таблицу истинности (бинарное отношение)
Напечатать таблицу истинности логической функции C++
C++ Вывести таблицу истинности на консоль

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ev_Hyper
 Аватар для Ev_Hyper
1806 / 1627 / 435
Регистрация: 15.12.2013
Сообщений: 5,780
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. Вообще не вижу смысла в данном случае создавать массив динамически. Задайте число, за пределы которого массив точно не выйдет - ошибки не будет.
ruTwit
6 / 6 / 1
Регистрация: 04.10.2013
Сообщений: 92
23.01.2014, 01:53  [ТС]     Нужно построить таблицу истинности по заданном логическому выражению. #3
Ev_Hyper, Вот это косяк, сам бы я это не заметил, спасибо.
Yandex
Объявления
23.01.2014, 01:53     Нужно построить таблицу истинности по заданном логическому выражению.
Ответ Создать тему
Опции темы

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