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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Программа для записи звука со стерео микшера (желательно через BASS) http://www.cyberforum.ru/cpp-beginners/thread1201809.html
вообщем помогите это реализовать желательно при помощи библиотеки BASS
C++ Не могу разложить в c[j] массив значения по мере уменьшения Не могу разложить в c массив значения по мере уменьшения. Вот программа, она работает но когда запускаю программу в c массиве все значения равны 1.0000000 Почему? и как исправить? #include<stdio.h> #include<conio.h> #define n 6 #define m 6 main() { int i,j=0,k,p=0,y=0; float b,c,a,T; http://www.cyberforum.ru/cpp-beginners/thread1201806.html
C++ Циклические алгоритмы,Начав тренироваться, лыжник в первый день пробежал n км. Каждый следующий день
Начав тренироваться, лыжник в первый день пробежал n км. Каждый следующий день он увеличивал пробег на 10% от пробега предыдущего дня. В какой день суммарный пробег за все дни превысит M км.
Кавычки и апостроф C++
Здравствуйте, подскажите, пожалуйста, в чем различие " " и ' ' в С++.
C++ Создание Записной книжки http://www.cyberforum.ru/cpp-beginners/thread1201745.html
Доброго времени суток всем.Есть задача-создать записную книжку в С++ с такими условиями: Класс Дата(Date) поля день(int) месяц(int) год(int) Класс Запись(Note)- поле-дата начала события(Date) дата окончания(Date) описание события(char)
C++ Определить, високосный ли год Помогите написать программу на языке си (разветвляющиеся алгоритмы) используя оператор варианта switch Условие задачи: По заданной дате вывести информацию о том, високосный ли год в этой дате, а также название месяца и количество дней в нем подробнее

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


Прошу помощи
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 18:38. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru