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

Создать дерево разбора выражения (инфиксная форма) - C++

Восстановить пароль Регистрация
 
un1k0
Сообщений: n/a
07.06.2014, 14:02     Создать дерево разбора выражения (инфиксная форма) #1
Есть образец:
постфиксный бесскобочный формат записи
числового выражения):
<выражение
>
::
=
<цифра> |
<выражение> <выражение>
<знак>
<знак>
::
=
+ | − | *
Выражения отделяются друг от друга и от знаков операций ровно одним
пробелом. Создать дерево разбора выражения и вывести указатель на его
корень. Структура дерева разбора выражения описана в задании Tree76;
для каждой вершины-операции ее левое поддерево должно
соответствовать первому операнду данной операции, а правое поддерево
— второму

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
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
struct Node
{
char value;
Node *left;
Node *right;
};
Node* create_tree(string s)
{
Node** stack = new Node*[s.length()]; // выделяем память под стек
int top = 0;
for (int index = 0; index < s.length(); ++index)
{
char ch = s[index];
if (ch != ' ')
{
Node *node = new Node;
node->value = ch;
if (ch == '+' || ch == '-' || ch == '*')
{
node->right = stack[--top];// извлечение из стека
node->left = stack[--top];
}
else // ch - цифра
{
node->left = NULL;
node->right = NULL;
}stack[top++] = node; // добавление в стек
}
}
return stack[0];
};
void print_tree(Node* root, int level)
{
if (!root)
return;
print_tree(root->left, level + 1);
for (int i=0; i < level; ++i)
cout << " ";
cout << root->value << endl;
print_tree(root->right, level + 1);
};
void print_tree(Node* root)
{
print_tree(root, 0);
}
void main()
{
setlocale(LC_ALL, "Russian");
ifstream* f = new ifstream("input.txt");
string s;
//cout << "Введите строку в постфиксном бесскобочном формате: ";
//getline (cin, s);
getline(*f, s);
Node* tree = create_tree(s);
//cout << tree << endl;
print_tree(tree);
system("pause");
}

Нужно из этого сделать -

описание числового выражения в
следующем формате:
<выражение> ::= <цифра> |
(<выражение><знак><выражение>)
<знак> ::= + | − | *
Пробелы в строке отсутствуют. Создать дерево, соответствующее
исходному выражению (дерево разбора выражения): каждая внутренняя
вершина дерева должна соответствовать одной из трех возможных
арифметических операций и иметь значение −1 для операции сложения,
−2 для операции вычитания и −3 для операции умножения; левое и
правое дочерние поддеревья любой внутренней вершины-операции
должны соответствовать выражениям слева и справа от знака операции;
листьями полученного дерева должны быть выражения-цифры. Вывести
указатель на корень созданного дерева


Прошу помощи
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.06.2014, 14:02     Создать дерево разбора выражения (инфиксная форма)
Посмотрите здесь:

Дерево разбора C++
C++ Создать класс "дерево"для представления арифметического выражения
Вычисление выражения записанного в виде обратной польской записи используя бинарное дерево C++
C++ Программа разбора и вычисления значения арифметического выражения
C++ Инфиксная форма
C++ Создать бинарное дерево
Не могу разобраться в чём ошибка(инфиксная и постфиксная запись выражения) C++
Создать бинарное дерево C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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