Друзья, есть такая задача: написать прогу, которая запрашивает у юзера функцию, например, "y=2*x+6" и массив значений x[], задача проги подсчитать эту функцию используя значения x. Реализовать на С. Меня вот что интересует, при виде задачи, в голове сразу всплывает синтаксический анализатор формул, разбиение строки на лексемы, согласно приоритету операций их суммирование и пр. А вообще, существуют какие-то другие способы подсчета подобных формул, или какие-то нюансы, упрощающие написание анализатора???
28 февраля 2009 в 23:01
Извини, не читал предыдущие комменты, просто написал как я это знаю
28 февраля 2009 в 22:05
Алексей, это то же самое, что я предложил. Алгоритм Дейкстры переводит инфиксную нотацию в постфиксную.
28 февраля 2009 в 20:05
Можно еще польскую нотацию и вычислять на стеке потом
28 февраля 2009 в 20:00
хех)) Прикол в том, что препод, который это задал, сказал что необязательно вообще ничего на лексемы разбивать)) И посоветовал мне почитать про указатели)) Аспирант хренов… Не знаю, что он там имел ввиду, но похоже не очень-то думал о том, как сам будет это реализовывать без синтаксического разбора)) Вот я и сидел в полнейшем а*уе, когда он сказал, что можно сделать что-то еще КРОМЕ разбора. А когда я ему пытался сказать про парсер, он вообще не сразу понял, о чем я))))
28 февраля 2009 в 19:03
См. //en.wikipedia.org/wiki/Operator-precedence_parser – алгоритм Дейкстры, но не тот, что про пути в графе, а тот, что shunting yard.
Очень красивый, универсальный и простой в реализации алгоритм.
Но на лексемы, ясен пень, все равно придется разбивать.
28 февраля 2009 в 19:03
существует вариант с написанием конвертера из инфиксной записи в постфиксную (сортировочная станция). нам такое на первом курсе задавали, показывая только схематичный план сортировочной станции.
UPD: Жека Кирпичев как раз его и предложил.
28 февраля 2009 в 18:04
Просто парсер можно написать, т.е. привести это уравнение к удобному тебе виду, чтобы не заморачиваться дальше этим вопросом Вот что-то подобное, только для школьников //acmp.ru/index.asp?main=task&id_task=236 =)
–
Если интересно как это реализовано на чистом C, то советую посмотреть исходник gcalctool =) Там просто шикарный набор для работы с формулами + длинная арифметика