Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Расстановка приоритетов, разбор строки 
:(
    Опции темы
mus
Дата 18.12.2005, 14:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 80
Регистрация: 22.5.2005

Репутация: нет
Всего: 1



Дана арифметическая запись вида
2+2*2
Следует правильно расставить приоритеты и вычислить значение выражения.
Не раз уже видел у Вас на форуме темы наподобие, но конкретно с расстановкой приоритетов не сталкивался. Как скобки раскрывать - видел (обратная польская нотация, построение бинарного дерева - с этим разобрался, но решаю проблему иначе, нахожу последнюю открывающуюся скобку и первую закрыв., а далее вычисляю выражение внутри скобок и заменяю ариф. выражение на результат, функция работает рекурсивно).
Просто теперь функция выисления, сами понимаете, требует и расстановки приоритетности операторов. Вот тут и загвоздка...
Есть ли алгоритм? Хотя бы словесный?
Пишу на Visual Basic 6.0, курсовая...
PM MAIL   Вверх
Akina
Дата 18.12.2005, 22:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 20
Всего: 454



Погоди... так ведь обратная польская и построение дерева как раз основаны на системе приоритетов операций... так чего же тебе нехватает?


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
mus
Дата 18.12.2005, 23:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 80
Регистрация: 22.5.2005

Репутация: нет
Всего: 1



Я в обратной польской, к примеру, не понял что мне с выходной строкой делать в итоге?
Положим
(A+B)*(C+D)-E
ПРЕВРАЩАЕМ В
AB+CD+*E-
И ЧТО?
Как мне вводить переменные? Ну те самые, которые хранят в себе значения обработанных операций?
PM MAIL   Вверх
Sardar
Дата 18.12.2005, 23:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 1
Всего: 317



Цитата(mus @ 18.12.2005, 22:13)
Как мне вводить переменные? Ну те самые, которые хранят в себе значения обработанных операций?

Имеем стек куда складываем значения и результаты вычислений. Читаем выражение, где видишь букву, например A, то ложишь значение закреплённое за ней на стек, где видишь операцию, снимаешь два значения со стека, выполняешь её, ложишь результат на стек. Как видишь интерпретатор польской нотации очень прост.


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
mus
Дата 19.12.2005, 00:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 80
Регистрация: 22.5.2005

Репутация: нет
Всего: 1



Sardar
Спасибо, в принципе понятно.
А как мне реализовать стек на базе Visual Basic? Даже так, на базе массива?
PM MAIL   Вверх
Sardar
Дата 19.12.2005, 03:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 1
Всего: 317



Мой опыт в VisualBasic ограничиваеться диалектом QVB, отвратная вещь. Нужно уметь делать свои обьекты/структуры, т.к. стек лучше всего реализовывать связанным списком. Стек на массиве крайне не красивая и не эффективная (ну разве что в кеше проца лучше лежит) вещь.

Почитать можно сдесь: http://algolist.manual.ru/ds/basic/index.php

Спросить можно в разделе VB.


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Akina
Дата 19.12.2005, 09:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 20
Всего: 454



Цитата(Sardar @ 19.12.2005, 04:12)
Стек на массиве крайне не красивая и не эффективная (ну разве что в кеше проца лучше лежит) вещь.

Позвольте не согласиться. Динамический массив (приращение большим шагом и обрезание только при обработке ошибки нехватки памяти) много быстрее коллекции.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Guest
Дата 19.12.2005, 13:02 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Поскольку речь идет о разборе реальных формул, то вряд ли количество операций в них превысит два десятка (в худшем случае). Поэтому достаточно взять в качестве стека простой массив (статический или динамический) с запасом в 2 раза. Память на это уйдет по нынешним меркам просто смешная.
Если же речь идет об оптимальности алгоритма в принципе (а не в связи с реальной практической задачей), то можно использовать как классический стек (через записи), так и через динамически выделяемый массив с контролем переполнения (по типу компьютерного стека)

  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.0701 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.