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

Програмирование упращения логических выражений - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ самое короткое слов в строке http://www.cyberforum.ru/cpp-beginners/thread219704.html
Дана строка символов,состоящая из слов,разделенных пробелами. Распечатать исходную строку. Определить самые короткие слова в строке :((( #include<iostream.h> #include<conio.h> void main() {char *a; int n,i;
C++ Программа в С++ Входной массив/Формируемый массив/Условие задачи/ А4 /В4*4 где, /(Сформировать массив В1, из элементов главной диагонали / / bij={1+sin(i+j) если i=j,/матрицы В.Упорядочить массивы А и В1 в порядке убывания/ /1-cos(i+j) - иначе, i=1...4 j=1...4./значений элементов(массивы А1 и В2... http://www.cyberforum.ru/cpp-beginners/thread219694.html
C++ База данных
Здравствуйте уважаемы товарищи программисты! не могли бы помочь найти ошибку! задание такое надо как бы создать базу данных! Записи о знаках зодиака людей. Каждая запись характеризуется фамилией, именем отчества человека, его знаком зодиака, датой его рождения. Каждая запись представляется собой экземпляр структуры. Все записи хранятся в массиве. Функциональность программы должна включать:...
C++ Не могу понять ошибку
Не могу понять, почему после завершения программы выдаётся ошибка о том, что стек вокруг массива поврежден. Объясните пожалуйста. PS: Я новичок. #include <iostream> int main() { FILE *pf; bool mas; fopen_s(&pf, "data", "r"); for(int i=0;i<3;i++) {
C++ Объясните мне пожалуйста http://www.cyberforum.ru/cpp-beginners/thread219674.html
Написать функцию, подсчитывающую количество слов, заканчивающихся на гласную букву. Программу писать не надо, просто объясните вот эту часть пожалуйста.в интернете не все нашла int vowelcount(char *str) { int c=0; char masgl={'a','e','y','u','i','o'}; //6 for(int i=0; i<strlen(str)+1; i++)
C++ бинарные файлы даны два файла целых чисел f и g. файл f упорядочен по возростанию. Создать файл h включив в него только те компоненты файла g , которые отсутствуют в файле f #include<fstream.h> #include<string.h> int const n=300; void main() { ifstream in1 ("out1.bin",ios::binary); ifstream in2 ("out2.bin",ios::binary); ofstream out ("out3.bin",ios::binary); int i, g, x, y; bool t=false;... подробнее

Показать сообщение отдельно
Aye Aye
 Аватар для Aye Aye
367 / 281 / 36
Регистрация: 17.12.2009
Сообщений: 567
25.12.2010, 21:05     Програмирование упращения логических выражений
у меня тут есть программка для построения дерева:
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
#include <iostream>
using namespace std;
struct node{
    node *l,*r;
    char val;
    node(node *ll,node *rr,char c):l(ll),r(rr),val(c){}
};
void print(node *t,int n)
{
    if (t)
    {
        print(t->r,n+1);
        for (int i=0;i<n;i++) cout << "  ";
        cout << t->val << '\n';
        print(t->l,n+1);
    }
}
void del(node *&t)
{
    if (t)
    {
        del(t->r);
        del(t->l);
        delete t;
    }
 
}
char lookahead;
int amount_of_errors=0;
void match(char c)
{
    if (lookahead==c) {
        cin.get(lookahead);
        while(lookahead==' ' || lookahead=='\t')
            scin.get(lookahead);
    } else {
        cout << "\nsyntax error in " << lookahead << '\n';
        amount_of_errors++;
    }
}
node *scan()
{
    while(lookahead==' '||lookahead=='\t')cin.get(lookahead);
    if (isalpha(lookahead)||isdigit(lookahead))return new node(0,0,lookahead);
    else
    {
        cout << "\nsyntax error in " << lookahead << '\n';
        amount_of_errors++;
        return 0;
    }
}
node *expr();
node *factor()
{
    if (lookahead=='(')
    {
        match('('); node *t=expr(); match(')');
        return t;
    }
    else
    {
        node *t = scan();
        match(lookahead);
        return t;
    }
}
node *prim();
node *prim1()
{
    if (lookahead=='&') {
        match('&'); return prim();
    } else {}
}
node *prim()
{
    node *t1=factor();
    if (lookahead=='&') {
        char c=lookahead;
        node *t2=prim1();
        return new node(t1,t2,c);
    } else return t1;
}
node *expr1()
{
    if (lookahead=='|') {
        match('|'); return expr();
    } else {}
}
node *expr()
{
    node *t1=prim();
    if (lookahead=='|') {
        char c=lookahead;
        node *t2=expr1();
        return new node(t1,t2,c);
    } else return t1;
}
int main()
{
    node *root=0;
    match(lookahead);
    root=expr();
    if (amount_of_errors) {
        cout << "error\n";
    } else {
        print(root,0);
    }
    del(root);
    return 0;
}
на ввод подается выражение вроде: t & ( f | t) | f, где t == true, f == false, & == and, | == or. Далее с этим деревом можно делать преобразования - вычислять значение выражения, упрощать или еще чего-нибудь. А что почитать... черт его знает, ваще всего дофига...
data = google("упрощение логических выражений C++");
braine << data;
braine >> result;
prepod << result;

ну например выражение X & X можно упростить подставив X.
функция для определения такого выражения в дереве
C++
1
2
3
4
5
6
7
8
9
bool is_idempotent(node *t)
{
    if (t != NULL) {
        if (t->l != NULL and t->r != NULL) {
            return t->r->val == t->l->val;
        } else return false;
    }
    return false;
}
и функция для упрощения
C++
1
2
3
4
5
6
7
void simplification_idempotency(node *&t)
{
     node *tmp = t->r; // или t = t->l; без разницы в данном случае.
     delete t->l;
     delete t;
     t = tmp;
}
использовать так:
C++
1
2
3
4
5
6
7
8
9
10
void simplification(node *&t)
{
     if (t != NULL) {
         simplification(t->r);
         simplification(t->l);
         if (is_idempotent(t)) 
             simplification_idempotency(t);
         // тут могут быть другие проверки и упрощения
     }
}
типа того. Некоторые функции упрощения могут использовать разные функции проверки, вызывать себя рекурсивно или использовать другие функции упрощения. Для начало надо реализовать все самые элементарные функции проверки и упрощения, а потом через них остальные.

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