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

Расчёт логического выражения - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Контур прямоугольника http://www.cyberforum.ru/cpp-beginners/thread1070776.html
Доброй ночи. Подскажите пожалуйста, пытаюсь написать программку которая выводит на экран пустотелый прямоугольник. в чем ошибка? #include <iostream> using namespace std; void main() { setlocale(LC_ALL,"rus"); int gor,vert,dlina,symbol; char znak; cout<<"Вывод на экран прямоугольника\n"; cout<<"Введите количество символов в строке\n";
C++ Считать из файла структуры в массив (указателей) Ребята, как это грамотно сделать? Мой моск вскипел. Файл бинарный, количество экземпляров всегда одно и то же. В программе эти структуры обрабатываются, значения изменяются, затем снова записываются в файл. Вот эта функция адекватно работает только для первого элемента массива: struct dates { char name; int serNumber; double volume; dates* readFile(int arrsize) { dates data1,... http://www.cyberforum.ru/cpp-beginners/thread1070766.html
шаблонный вложенный класс в .cpp C++
Привет всем! есть шаблонный вложенный класс . template<typename FinalVertex> class BFSVisitor : boost::default_bfs_visitor { public: BFSVisitor(FinalVertex final); ~BFSVisitor() = default; template<typename Vertex, typename Graph> void discover_vertex(Vertex u, Graph& g) const;
C++ Программа, которая будет продуцировать цепочки(слова) в трехсимвольном алфавите с записью их в файл
Доброе время суток. Помогите пожалуйста разобраться с задачей. "Создать программу на С++, которая будет продуцировать цепочки(слова) в трехсимвольном алфавите с записью их в файл, причем длина L цепочек ограничена: L1 <= L <= L2 и для каждой цепочки, отобранной в файл, должно выполняться условие < A >. Общее количество цепочек в файле должно быть не более M. Для продуцирования цепочек в...
C++ Найти среднюю оценку каждого стьюдента http://www.cyberforum.ru/cpp-beginners/thread1070751.html
Для каждого из N студентов группы известны ФИО и оценки по 4рем дисциплинам. Найти собственно нужно среднюю оценку каждого стьюдента и вывести стьюдента с мах средним балом. #include<iostream> #include<string> using namespace std; struct Date { int one; int two; int three; int four;
C++ Составить программу расчеты значения функции http://www.cyberforum.ru/attachment.php?attachmentid=353853&stc=1&d=1389645391 подробнее

Показать сообщение отдельно
__General__
24 / 24 / 3
Регистрация: 04.01.2014
Сообщений: 91
Завершенные тесты: 2
25.04.2014, 14:00     Расчёт логического выражения
Может, кому-то еще будет интересно.
Вычисление логического выражения методом рекурсивного спуска:

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
#include <iostream>
using namespace std;
 
 
/* Грамматика для логического выражения
S -> E&
E -> T | T '|' E
T -> F | F '&' T
F -> 0 | 1 | '(' E ')' | '!' F
*/
 
typedef char Lexeme; // Тип для лексемы (в более сложных программах Lexeme может представлять собой целый класс). 
 
Lexeme currentLex; // Текущая лексема
 
inline void getNextLexeme() // Функция получения следующей лексемы 
{ 
    cin >> currentLex;
}
 
bool parseS();
bool parseE();
bool parseT();
bool parseF();
 
int main() 
{
    bool result;
    cout <<"Input: ";
    getNextLexeme();
    try 
    {
        result = parseS();
        cout << "Calculated: " << result <<'\n';
    }
    catch ( const char * err ) 
    {
        cout << "Error: " << err << ", but " << currentLex << " got." << endl;
    }
    
    system ("pause");
}
 
bool parseS()
{
    bool r = parseE();
    if ( currentLex != '$' ) { // Проверяем конец цепочки
        throw "End of line needed";
    }
    return r;
}
 
bool parseE()
{
    bool b = parseT();
 
    if (currentLex == '|')
    {
        getNextLexeme();
        b = parseE() || b;
    }
    
    return b;
}
 
bool parseT()
{
    bool b = parseF();
    if (currentLex == '&')
    {
        getNextLexeme();
        b = parseT() && b;
    }
    return b;
}
 
bool parseF()
{
    bool b;
    if ( currentLex == '1' || currentLex == '0' ) 
    {
        b = (currentLex == '1');
        getNextLexeme();
    }
    else if ( currentLex == '!' ) 
    {
        getNextLexeme();
        b = !parseF();
    }
    else if ( currentLex == '(' ) 
    {
        getNextLexeme();
        b = parseE(); 
        if ( currentLex != ')' ) {
            throw ") needed";
        }
        getNextLexeme();
    }
    else {
        throw " 0 or 1 or ! or ( needed";
    }
    return b;
}
Этот "калькулятор" вычисляет любое логическое выражение с операциями "&, |, !". (Скобки - опциональные).
 
Текущее время: 23:34. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru