![]() |
|
![]() ![]() ![]() |
|
mus |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 80 Регистрация: 22.5.2005 Репутация: нет Всего: 1 |
Дана арифметическая запись вида
2+2*2 Следует правильно расставить приоритеты и вычислить значение выражения. Не раз уже видел у Вас на форуме темы наподобие, но конкретно с расстановкой приоритетов не сталкивался. Как скобки раскрывать - видел (обратная польская нотация, построение бинарного дерева - с этим разобрался, но решаю проблему иначе, нахожу последнюю открывающуюся скобку и первую закрыв., а далее вычисляю выражение внутри скобок и заменяю ариф. выражение на результат, функция работает рекурсивно). Просто теперь функция выисления, сами понимаете, требует и расстановки приоритетности операторов. Вот тут и загвоздка... Есть ли алгоритм? Хотя бы словесный? Пишу на Visual Basic 6.0, курсовая... |
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 20 Всего: 454 |
Погоди... так ведь обратная польская и построение дерева как раз основаны на системе приоритетов операций... так чего же тебе нехватает?
-------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
mus |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 80 Регистрация: 22.5.2005 Репутация: нет Всего: 1 |
Я в обратной польской, к примеру, не понял что мне с выходной строкой делать в итоге?
Положим (A+B)*(C+D)-E ПРЕВРАЩАЕМ В AB+CD+*E- И ЧТО? Как мне вводить переменные? Ну те самые, которые хранят в себе значения обработанных операций? |
|||
|
||||
Sardar |
|
|||
![]() Бегун ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6986 Регистрация: 19.4.2002 Где: Нидерланды, Groni ngen Репутация: 1 Всего: 317 |
Имеем стек куда складываем значения и результаты вычислений. Читаем выражение, где видишь букву, например A, то ложишь значение закреплённое за ней на стек, где видишь операцию, снимаешь два значения со стека, выполняешь её, ложишь результат на стек. Как видишь интерпретатор польской нотации очень прост. -------------------- Опыт - сын ошибок трудных © А. С. Пушкин Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik Оценить мои качества можно тут. |
|||
|
||||
mus |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 80 Регистрация: 22.5.2005 Репутация: нет Всего: 1 |
Sardar
Спасибо, в принципе понятно. А как мне реализовать стек на базе Visual Basic? Даже так, на базе массива? |
|||
|
||||
Sardar |
|
|||
![]() Бегун ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6986 Регистрация: 19.4.2002 Где: Нидерланды, Groni ngen Репутация: 1 Всего: 317 |
Мой опыт в VisualBasic ограничиваеться диалектом QVB, отвратная вещь. Нужно уметь делать свои обьекты/структуры, т.к. стек лучше всего реализовывать связанным списком. Стек на массиве крайне не красивая и не эффективная (ну разве что в кеше проца лучше лежит) вещь.
Почитать можно сдесь: http://algolist.manual.ru/ds/basic/index.php Спросить можно в разделе VB. -------------------- Опыт - сын ошибок трудных © А. С. Пушкин Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik Оценить мои качества можно тут. |
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 20 Всего: 454 |
Позвольте не согласиться. Динамический массив (приращение большим шагом и обрезание только при обработке ошибки нехватки памяти) много быстрее коллекции. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
Guest |
|
|||
Unregistered |
Поскольку речь идет о разборе реальных формул, то вряд ли количество операций в них превысит два десятка (в худшем случае). Поэтому достаточно взять в качестве стека простой массив (статический или динамический) с запасом в 2 раза. Память на это уйдет по нынешним меркам просто смешная.
Если же речь идет об оптимальности алгоритма в принципе (а не в связи с реальной практической задачей), то можно использовать как классический стек (через записи), так и через динамически выделяемый массив с контролем переполнения (по типу компьютерного стека) |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Алгоритмы" | |
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Алгоритмы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |