Привет всем.
Хочу написать прогу, для построения любых графиков y=f(x).
Главная проблема, не могу придумать алгоритм преобразования строки в "выражение" и потом все это посчитать. Например юзер вводит- x+(1-x)^2
И как это преобразовать в x+sqr(1-x), а потом еще и посчитать?
Member
Статус: Не в сети Регистрация: 25.01.2003 Откуда: UA
Простых решений нет. Или пишешь рекурсивный парсер - нормально написаный это 2-3 экрана текста или ищешь готовый компонент типа math parser и подгоняешь его к твоему формату формул.
Заблокирован Статус: Не в сети Регистрация: 08.11.2004 Откуда: Москва
Если строить функции будешь по приращению x, то:
1. Пишешь в блокноте все функции с их преоритетом (Например, у умножения преоритет перед сложением...). Первым делом считай все, что в скобках.
2. На примере делаешь:
О анализе:
Идешь по строке -> находишь знак ^ -> идешь обратно по строке до первого знака; между ним и ^ получаешь то, что надо возвести в степень. Идешь после ^ до следующего знака и получаешь то, что является степенью.
Когда-то я делал так. Самый простой для моего понимания алгоритм был.
Member
Статус: Не в сети Регистрация: 13.11.2004 Откуда: Новосибирск
Как вариант могу предложит ь перевести алгеброическую запись из инфиксной формы (знак операции между операндами) в постфиксную (знак операции находится после операнд). В этой записи нет приоритетов операций, и работать с ними значительно проще. Вобщем подумай над этим. По моему это куда проще, чем все, что здесь говорилось...
Member
Статус: Не в сети Регистрация: 25.01.2003 Откуда: UA
Могу дать исходник своей курсовой - мега-калькулятор В нем универсальный парсер переводящий в постфикс и далее считающий, одна проблема он на C написан.
to Asteroid
Спасибо за ссылку. Инфа действительно классная.
to KaYot
Если можешь, отправь пожалуйста. Не беда, что на Си, языковой барьер преодолею.
megawarlock@rambler.ru
Member
Статус: Не в сети Регистрация: 11.11.2004 Откуда: Челябинск
Я тоже такую штуку в С++Builder писал для вывода произвольных графиков. Не знал, что это парсером называется Тож могу скинуть если надо, всего неск. КБ отдельного модуля.
_________________ пишу я программу... и вдруг на клавиатуру выползает bug, буквально
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения