Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.07.2016, 13:52   #1
Artemy
Новичок
Джуниор
 
Регистрация: 12.07.2016
Сообщений: 1
По умолчанию Перевод инфиксной записи выражения в бинарное дерево. Язык- С++.

В файле задано выражение в инфиксной форме записи. В выражении могут быть целые положительные числа, знаки операций(*/+-), скобки. Написать программу, сохраняющую считанное выражение в двоичном дереве( в котором знаки операций будут родительскими вершинами, а числа- листьями), а также вычисляющую результат выражения. Дерево предоставить в виде отдельного класса (или классов). Результат выражения вывести в выходной файл.
Не понимаю как это все написать.

Последний раз редактировалось Artemy; 12.07.2016 в 13:59.
Artemy вне форума Ответить с цитированием
Старый 12.07.2016, 14:50   #2
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Один из вариантов алгоритма
Например, есть 2*(2 - 3)/3 - (4*4/2 - 4)

Если скобки стоят на первой и последней позициях, то их убираем. Далее ищем первый подходящий знак + или - вне скобок, он будет вершиной дерева (если их нет, то первый попавшийся вне скобок знак * или /)
Создаём новые подстроки (для формирования узлов) из правой и левой частей частей относительно первого найденного подходящего знака.
В данном случае вершиной будет второй знак -, а левые и правые части соответственно 2*(2 - 3)/3 и (4*4/2 - 4)

Теперь повторяем все рассуждения для этих частей с разницей в том, что вершины этих частей нужно будет поместить в созданные на предыдущем шаге узлы. И так далее пока ничего не останется.

Всё это дело можно оформить в виде рекурсии. Вычисление также можно сделать рекурсивной функцией.
eoln вне форума Ответить с цитированием
Старый 13.07.2016, 10:43   #3
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Я точно не уверен, но может быть так:





Пиши, что думаешь.

Последний раз редактировалось ura_111; 13.07.2016 в 11:20.
ura_111 вне форума Ответить с цитированием
Старый 13.07.2016, 11:30   #4
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

В дереве достаточно 2-х указателей *лево, *право (на левую и правую часть), информационного поля chislo и информационного поля тип_операции.
Например, если операции дальше нет, то тип_операции = 0, если знак минус - тип_операции = 1, если плюс - тип_операции = 2 и т.д.
eoln вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Преобразование арифметического выражения из инфиксной в постфиксную форму записи 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