2015-12-28 2 views
0

Итак, у меня есть этот проект математики, где я должен написать программу, которая вычисляет определенный интеграл данной функции в пределах заданных границ. Я сделал это с помощью C++ и CodeBlocks, но теперь я хотел бы попытаться включить функцию, используя cmd, когда я запускаю свой код в CodeBlocks, точно так же, как я вводил границы, поэтому мне не нужно редактировать эту строку кода каждый раз, когда я хочу запустить его для разных функций. Я понял, что для этого потребуется фактически использовать этот вход (например, «sqrt (pow (x, 2) -1)») как часть кода при вводе, и я действительно не знаю, как это сделать, или если это возможно вообще, поэтому любая помощь приветствуется. Это часть кода, который обрабатывает функции:Как внести часть ввода моего кода?

double Formula(double x) 
{ 
    double a; 
    a = sqrt(x); 
    return a; 
} 
+1

Я знаю, что это не так просто, просто используя только C/C++.Вы должны разбирать функциональные слова (например, sqrt, pow), переменную (например, x), константу (2, 1) и преобразовывать в функцию с параметрами (даже пропустить ошибку). Вы знаете lex, yacc? Я также думаю, что это может быть полезно. –

+0

@ Yoon-Geun Kwon: Да, я рекомендую использовать lex и yacc тоже, но если это всего лишь небольшой проект, он будет излишним. upvoted. –

+0

@ Yoon-GeunKwon: Спасибо за совет, я проверю эти инструменты и попытаюсь сделать что-то из этого. –

ответ

1

Если вы хотите оценить выражение, как «SQRT (Pow (х, 2) -1)», вы должны:

  1. синтаксического анализа строка и генерировать AST (абстрактное синтаксическое дерево), который описывает операции для выполнения
  2. использовать функцию оценки на AST

Например, если у вас есть «SQRT (пау (х, 2) -1) "в i Nput, АСТ может быть представлен следующим образом:

  • функция - SQRT
    • функция - вычесть
      • функция - пау
        • переменных - х
        • целого числа - 2
      • целое число - -1

Вы должны определить структуры, которые будут использоваться для представления вашего AST.

Затем разобрать строку запроса у вас есть 2 варианта:

  • синтаксического анализа сам, сосчитать скобки и т.д. ...
  • использовать инструмент для создания парсера: Yacc + Лекса или под Linux бизон + гибкий. Эти инструменты требуют времени для их использования.

Если у вас есть только небольшой проект, вы можете попробовать самостоятельно проанализировать ввод, чтобы сгенерировать АСТ.

Если проект представляет собой проект компиляции, вы должны использовать bison + flex, они точно сделаны для этого (но для этого требуется время!).

+1

Разбор, AST и т. Д. И т. Д., Скорее всего, выходит за рамки этого вопроса. –

+1

очень подробное объяснение, я ценю это, это окажется самой сложной частью проекта, но я попробую реализовать его в любом случае, кажется интересным –

+0

Возможно, вы захотите посмотреть пример калькулятора в http: // www. stroustrup.com/4th.html – drescherjm

1

В качестве альтернативы можно интегрировать язык скриптов, заставить его выполнять синтаксический анализ и оценку функций. Тем не менее, он будет значительно медленнее.

Устные переводчики JavaScript повсюду. Python довольно популярен. Некоторые люди любят Луа.

Смежные вопросы