|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
12.07.2016, 13:52 | #1 |
Новичок
Джуниор
Регистрация: 12.07.2016
Сообщений: 1
|
Перевод инфиксной записи выражения в бинарное дерево. Язык- С++.
В файле задано выражение в инфиксной форме записи. В выражении могут быть целые положительные числа, знаки операций(*/+-), скобки. Написать программу, сохраняющую считанное выражение в двоичном дереве( в котором знаки операций будут родительскими вершинами, а числа- листьями), а также вычисляющую результат выражения. Дерево предоставить в виде отдельного класса (или классов). Результат выражения вывести в выходной файл.
Не понимаю как это все написать. Последний раз редактировалось Artemy; 12.07.2016 в 13:59. |
12.07.2016, 14:50 | #2 |
Старожил
Регистрация: 26.04.2008
Сообщений: 2,645
|
Один из вариантов алгоритма
Например, есть 2*(2 - 3)/3 - (4*4/2 - 4) Если скобки стоят на первой и последней позициях, то их убираем. Далее ищем первый подходящий знак + или - вне скобок, он будет вершиной дерева (если их нет, то первый попавшийся вне скобок знак * или /) Создаём новые подстроки (для формирования узлов) из правой и левой частей частей относительно первого найденного подходящего знака. В данном случае вершиной будет второй знак -, а левые и правые части соответственно 2*(2 - 3)/3 и (4*4/2 - 4) Теперь повторяем все рассуждения для этих частей с разницей в том, что вершины этих частей нужно будет поместить в созданные на предыдущем шаге узлы. И так далее пока ничего не останется. Всё это дело можно оформить в виде рекурсии. Вычисление также можно сделать рекурсивной функцией. |
13.07.2016, 10:43 | #3 |
Участник клуба
Регистрация: 14.05.2016
Сообщений: 1,793
|
Последний раз редактировалось ura_111; 13.07.2016 в 11:20. |
13.07.2016, 11:30 | #4 |
Старожил
Регистрация: 26.04.2008
Сообщений: 2,645
|
В дереве достаточно 2-х указателей *лево, *право (на левую и правую часть), информационного поля chislo и информационного поля тип_операции.
Например, если операции дальше нет, то тип_операции = 0, если знак минус - тип_операции = 1, если плюс - тип_операции = 2 и т.д. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Преобразование арифметического выражения из инфиксной в постфиксную форму записи | Nelson1992 | Паскаль, Turbo Pascal, PascalABC.NET | 2 | 29.05.2021 18:04 |
перевод выражения из инфиксной записи в постфиксную | sanchoflat | Помощь студентам | 4 | 26.10.2012 23:32 |
Перевод выражения из инфиксной в постфиксную форму | branbranzor | Помощь студентам | 1 | 18.06.2012 00:04 |
Перевод из инфиксной записи в обратную польскую | Anny_Apple | Паскаль, Turbo Pascal, PascalABC.NET | 1 | 10.04.2011 20:49 |