Как читать в определенной пользователем математической функции

Я пытаюсь построить программу на Паскале, чтобы дифференцировать математические функции. Это работает очень хорошо (вычисление мин / макс, симметрия, рисование графика и т. Д.), Но я должен поместить функции (то есть x^3+3x+2) в исходный код следующим образом:

function f(x : real): real;
begin 
   f := x * x * x + 3 * x + 2;
end;

Тем не менее, я хочу, чтобы пользователь определил функцию для дифференциации. Обвиослая функция readln не помогает. Кто-то сказал мне, что единственным решением будет конкретный парсер. Но это очень сложно, и я не знаю, как это сделать. Моя идея заключается в том, чтобы извлечь функцию, например, в файл *.txt, чтобы ее можно было легко изменить. Это возможно? Может кто-нибудь показать мне парсер, который мог бы решить эту проблему, или у кого-нибудь есть другое отличное решение? Буду очень признателен за вашу помощь! Заранее спасибо;)

2 ответа

Free Pascal поставляется с символическим пакетом, в котором есть как синтаксический анализатор, так и оценщик для математических выражений. Вы, вероятно, можете использовать это в качестве отправной точки. Смотрите документацию для использования.

В SWAG есть также несколько анализаторов / оценщиков:

Я выделил те, которые считал наиболее полезными. Я не думаю, что какие-либо из них так же полны, как символический пакет в моем другом ответе, но их, возможно, стоит прочитать, если вам нужна помощь.

(Все это довольно старый код. Если не указано иное, правило с SWAG состоит в том, чтобы относиться к этому материалу как к лицензии BSD нового стиля)

Другие вопросы по тегам