Часовой пояс: UTC + 3 часа




Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 12 
  Пред. тема | След. тема 
В случае проблем с отображением форума, отключите блокировщик рекламы
Автор Сообщение
 

Привет всем.
Хочу написать прогу, для построения любых графиков y=f(x).
Главная проблема, не могу придумать алгоритм преобразования строки в "выражение" и потом все это посчитать. Например юзер вводит- x+(1-x)^2
И как это преобразовать в x+sqr(1-x), а потом еще и посчитать?



Партнер
 

Member
Статус: Не в сети
Регистрация: 25.01.2003
Откуда: UA
Простых решений нет. Или пишешь рекурсивный парсер - нормально написаный это 2-3 экрана текста или ищешь готовый компонент типа math parser и подгоняешь его к твоему формату формул.


 

поддерживаю KaYot
имхо, других вариантов нет


 

Заблокирован
Заблокирован
Статус: Не в сети
Регистрация: 08.11.2004
Откуда: Москва
Если строить функции будешь по приращению x, то:

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

x=0.1
x^2+2*x-1 -> 0.01+0.2-1 (первый проход) -> -0.79 (второй проход)

О анализе:
Идешь по строке -> находишь знак ^ -> идешь обратно по строке до первого знака; между ним и ^ получаешь то, что надо возвести в степень. Идешь после ^ до следующего знака и получаешь то, что является степенью.

Когда-то я делал так. Самый простой для моего понимания алгоритм был.


 

Блин, сложно-то как. Попробую конечно, вот только вряд ли получится. А нет ли каких-нибудь хороших статей на эту тему?


 

Member
Статус: Не в сети
Регистрация: 14.08.2003
Откуда: Питер
MGWarlock
Цитата:
Блин, сложно-то как. Попробую конечно, вот только вряд ли получится. А нет ли каких-нибудь хороших статей на эту тему?

статьи есть - типа анализатор формул и т.п. У меня ФАК по делфям 5 метров весом - так там такое есть...

_________________
Лучшая зашита - это нападение.


 

Member
Статус: Не в сети
Регистрация: 30.01.2003
Откуда: Москва
http://algolist.manual.ru/syntax/index.php, там кое-что есть.


 

Member
Статус: Не в сети
Регистрация: 13.11.2004
Откуда: Новосибирск
Как вариант могу предложит ь перевести алгеброическую запись из инфиксной формы (знак операции между операндами) в постфиксную (знак операции находится после операнд). В этой записи нет приоритетов операций, и работать с ними значительно проще. Вобщем подумай над этим. По моему это куда проще, чем все, что здесь говорилось...


 

Member
Статус: Не в сети
Регистрация: 25.01.2003
Откуда: UA
Могу дать исходник своей курсовой - мега-калькулятор :)
В нем универсальный парсер переводящий в постфикс и далее считающий, одна проблема он на C написан.


 

Member
Статус: Не в сети
Регистрация: 14.01.2004
Откуда: Киев, Украина
MGWarlock качаешь RxLib и приспосабливаешь под свои нужды исходник компонента. Все на самом деле легко, но требует временных затрат.

_________________
Ку ку


 

to Asteroid
Спасибо за ссылку. Инфа действительно классная.
to KaYot
Если можешь, отправь пожалуйста. Не беда, что на Си, языковой барьер преодолею.
megawarlock@rambler.ru


 

Member
Статус: Не в сети
Регистрация: 11.11.2004
Откуда: Челябинск
Я тоже такую штуку в С++Builder писал для вывода произвольных графиков. Не знал, что это парсером называется :)
Тож могу скинуть если надо, всего неск. КБ отдельного модуля.

_________________
пишу я программу... и вдруг на клавиатуру выползает bug, буквально


Показать сообщения за:  Поле сортировки  
Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 12 
-

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB | Kolobok smiles © Aiwan