Olá pessoal, venho pedir a ajuda de vocês para resolver meu problema, o que ocorre éo seguinte:
eu tenho que apartir de uma equação digitada pelo usuário pegar a resposta dela, algo do genero “32^4 + 52^3 - 12^2 + 32 -5 + Sen(230)” e preciso resolver essa equação, já dei uma boa pesquisada e encontrei algumas soluções, algumas pessoas aconselhando a fazer uma analise léxica, o que daria muito trabalho.
Outras pessoas indicaram utilizar uma biblioteca a parte, já vi algumas indicações para a beanshell e uma outra paga, mas pelo que eu analisei são algumas bibliotecas “pobres” de calculo, pois elas retornam o vlor da equação digitada e pronto.
outra solução indicada, aqui no forum mesmo foi a encontrada no topico: http://www.guj.com.br/posts/list/102119.java pelo usuário rodrigo_gomes, e foi a que me atraiu mais.
Agora eu tenho uma outra biblioteca, a HartMath, que tem um pasrser bastante interessante, e eu gostaria de utilizar ela, http://hartmath.sourceforge.net/ mais precisamente a versão 0.7 pois a 0.8 é um pouco instavel, que é uma solução bem mais completa, pois permite trabalhar com equações algebricas, setando valores para x, e eu encontrei uma versão “modificada” dessa biblioteca que basta eu passar os parametros em uma string que já retorna o resultado de uma “sequencia” de comandos enviados.
Agora a minha dúvida:
eu não estou conseguindo utilizar esse jar como biblioteca, eu adiciono na library do projeto no netbeans o arquivo .jar e tento acessar a classe HartMathEduc que está no <> dentro do jar mas não consigo nem declarar uma variavel do tipo, muito menos executar o método “executeBatch” existente dentro da classe. Essa alteração está funcionando perfeitamente, mas não consigo chamar o método, vi em alguns lugares que era necessario setar um classpath mas não consegui fazer isso também.
Alguém poderia me ajudar? caso preciso coloco um zip do meu projeto aqui.
Ps:
Quem se interessar pelo hartMath aqui vai uma breve explicação de como ele funciona:
É uma forma de programação que trabalha em arvore, ou seja para cada operação existe uma classe, para fins de exemplo utilizarei a classe Multiply para multiplicação, a classe Pow para expoentes e a classe Add para soma.
então a equação 4x^3 + 2x ficaria da seguinte forma de arvore:
add(multiply(4,pow(x,3)), multiply(2,x));
então com essa arvore fica facil de resolver a equação, pois é só vir resolvendo a arvore de baixo pra cima primeiro resolvendo o pow, depois os dois multiplys e por ultimo o add, que você apenas com operações simples consegue resolver equações bem complexas, mas isso tem um custo na velocidade do programa.
Essa forma de trabalhar vem de uma linguagem chamada Autran, na década de 70, que foi desenvolvida paralelamente ao fortran, mas o fortran utilizada para trabalhar com formulas e o autran utilizado para trabalhar com algebra.