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

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

Войти
Регистрация
Восстановить пароль
 
un1k0
#1

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

07.06.2014, 14:02. Просмотров 811. Ответов 0
Метки нет (Все метки)

Есть образец:
постфиксный бесскобочный формат записи
числового выражения):
<выражение
>
::
=
<цифра> |
<выражение> <выражение>
<знак>
<знак>
::
=
+ | − | *
Выражения отделяются друг от друга и от знаков операций ровно одним
пробелом. Создать дерево разбора выражения и вывести указатель на его
корень. Структура дерева разбора выражения описана в задании 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++
на вход для простоты подаю коротенько выражение меньше 10 символов цифры во входе тоже от 0 до 10 при выводе строки otvet ничег оне...

Дерево разбора - C++
Вообщем суть - нужно уметь распарсить любую логическую формулу и затем сделать с ней нечто по заданию (курсовик). Спросили у препода как...

Программа разбора и вычисления значения арифметического выражения - C++
Написать программу разбора и вычисления значения арифметического выражения. На входе программы — строка, содержащая числа, скобки «(» и...

Создать класс "дерево"для представления арифметического выражения - C++
Создать класс &quot;дерево&quot; для представления арифметического выражения, каждый из узлов которого содержит числа или знаки арифметических...

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

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.06.2014, 14:02
Привет! Вот еще темы с ответами:

Создать бинарное дерево - C++
Есть обычное дерево. Узел описывается struct nod int Value; int Number_Of_Sons; nod *Son Число сыновей может быть до пяти. ...

Создать бинарное дерево - C++
Ребята, помогите с такое задачей : нужно написать ф-цию для построения бинарного дерево определенным способом, а именно : на входе есть...

Создать дерево организационной структуры организации - C++
Ребят, кто-нибудь знает как примерно это делать? А то я как-то даже не особо понял суть задания, вот сама задача: Создать систему...

Создать дерево для работы со строками - C++
организовать функции инициализации дерева, добавления/удаления элементов/веток дерева, вывода на экран как это все сделать? сам пытался -...


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

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

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