Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sileno De Oliveira Brito

lógica da calculadora ciêntifica

Recommended Posts

Gostaria de criar uma calculadora cientifica que fosse capaz de efetuar operações polinomiais do enésimo grau, esse é um projeto pessoal tenho como objetivo usa-lo em outros projetos pessoais relacionados com ia, mas estou tendo dificuldade na parte fundamental definir uma estrutura para comportar a notação de um polinômio. Defini a estrutura abaixo para tentar comportar o problema, mas ela não consegue comportar muitas situações, como as do exemplo no PDF.

 

http://pt.scribd.com/doc/168707688/Calculadora-polimonial-pdf Essa foi a ideia inicial:

 

 

 

struct polinomial{
long numero;
char *var;
struct polinomial *base;
struct polinomial *divisor;
struct polinomial *expoente;
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se for em C++, existe a Boost Library: http://www.boost.org/doc/libs/1_38_0/libs/math/doc/sf_and_dist/html/math_toolkit/toolkit/internals2/polynomials.html

 

P/ C só conheço a GNU Scientific Library.

 

Particularmente, eu usaria R ou Haskell no lugar de C/C++, mas entendo que vc precise de desempenho.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sugiro começar com casos simples: operações fundamentais em polinômios univariados. Pra isso, uma simples lista de coeficientes basta.

 

Para divisões, sugiro usar o esquema de Horner/Huffini.

 

Se quiser se adiantar e estudar melhor o tema, o segundo volume do Art of Computer Programming trata do assunto. Também já ouvi falar bem do Polynomials and Polynomial Inequalities.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Em relação a linguagem no meu caso específico eu realmente preciso escrever em C, pois vai me dar uma boa otimização, vai ser portável para qualquer outra coisa linguagem através de dll e so e com excessão de java, PHP e C# é a que estou mais habituado.

Em relação as operações, algumas já estão implementadas como as quatro operações básicas, radiciação, logaritmo, com apenas um polinômio eu consegui fazer, outras tenho a lógica em mente, mão não escrevi devido a notação do polinômio.

A questão é mesmo para notação por exemplo (b+c+d) + d não tem como somar vai ficar b+c+d, eu precisava de uma sugestão para essa armazenar b+c+d em uma estrutura, por isso pensei em usar uma lista encadeada, para armazenar b na estrutura de polinômio e c e d dentro da lista encadeada (ou outra estrutura como uma avl), apos eu realizaria a operação, mas pelo sugestões, por questões de armazenar operações (notação polonesa nesse caso, creio que não será viável usar), mas usar uma lista encadeada dentro da estrutura de polinômio eu estou achando uma solução porca e tenho certeza que não é esse o caminho.
Pesquisando mais um pouco encontrei o que me parece ser a solução na página 39, logo no inicio há o esboço de Árvores sintáticas, que, acredito ser capaz de resolver o problema, mas, agora estou tendo dificuldades de imaginar uma estrutura para armazenar: isso o <E> seria o polinômio, o <OP> operação e ao invés do tipo de dados a ser trabalhado com o yacc e lex ser struct polinomio seria struct ArvoreSintatica.

seria uma boa solução:

 

struct ArvoreSintatica{
    struct polinomio e;
    int op;
    struct ArvoreSintatica *e1;
    struct ArvoreSintatica *e2;
};


Referência:

http://www.dei.isep.ipp.pt/~goreti/ficha5.pdf

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.