Reconhecimento de expressões C - Sistema para cálculos matemáticos  XML
Índice dos Fóruns » Outras Linguagens
Autor Mensagem
matheuslmota
Virtual Machine Man

Membro desde: 09/03/2010 15:14:56
Mensagens: 664
Offline

Caros, estou desenvolvendo um sistema em C que resolve problemas de integração e equações diferenciais básicas. O problema é que eu não sei uma forma intelignete de pegar uma sring que representa uma expressão e separá-la em parâmetro para as imnhas funções.
Tipo:

uma equação diferencial simples. Como eu faço para ler a equação a partir do console?
Leio a string inteiro e a separo em parte? Como eu faço isso?
Ou leio os parâmetros da equação separadamente pelo console.
Qual é a melhor forma?
Algum amigo poderia me dar ideias?

This message was edited 1 time. Last update was at 22/11/2010 10:27:51


Toda vez que você alimenta um troll uma foca morre no Polo Norte.
[MSN]
entanglement
GUJ Hacker

Membro desde: 26/09/2009 09:18:56
Mensagens: 5750
Offline

Você precisa resolver equações diferenciais e integrações simbólicas? Escolha outra linguagem como Scheme. Ou precisa só fazer o processamento numérico?
matheuslmota
Virtual Machine Man

Membro desde: 09/03/2010 15:14:56
Mensagens: 664
Offline

Só o processamento numérico.

Toda vez que você alimenta um troll uma foca morre no Polo Norte.
[MSN]
entanglement
GUJ Hacker

Membro desde: 26/09/2009 09:18:56
Mensagens: 5750
Offline

Se for obter os parâmetros como uma fórmula, você precisa efetuar um "parse" dessa fórmula - é mais bonitinho, é claro, mas dá bastante trabalho. Provavelmente é mais fácil você ler os parâmetros separadamente (e listar quais são as , em vez de aceitar qualquer fórmula.


Para efetuar um parse, você pode usar um analisador léxico (procure por "flex" ou "lex") e provavelmente um analisador sintático (procure por "bison" ou "yacc"). É claro que existem outros "compiler-compilers" por aí. Esses são os mais antigos.
matheuslmota
Virtual Machine Man

Membro desde: 09/03/2010 15:14:56
Mensagens: 664
Offline

Eu dei uma rápida olhada no google e vi sobre o lex. Ele é usado em conjunto com o yacc, certo? Eu já suspeitava de ter de mexer com analisador léxico. Ele é complicado de mexer? Digo, eu terei que realizar muitas configurações nele para ele mapear corretamente as expressões matemáticas? Grato pela atenção.

This message was edited 1 time. Last update was at 22/11/2010 10:55:29


Toda vez que você alimenta um troll uma foca morre no Polo Norte.
[MSN]
entanglement
GUJ Hacker

Membro desde: 26/09/2009 09:18:56
Mensagens: 5750
Offline

Pois é, não sei exatamente como serão suas expressões. E mais uma coisa: você vai aceitar multiplicações implícitas e outras coisas que são meio chatinhas? Qual é a diferença entre o ponto (ou vírgula decimal) e o operador de multiplicação? Ou para multiplicação você só aceitará o "*" e a multipllicação implícita?



Por causa dessas coisas chatinhas é que é bom definir direitinho sua gramática.
matheuslmota
Virtual Machine Man

Membro desde: 09/03/2010 15:14:56
Mensagens: 664
Offline

Não, usar multiplicação implícita é suicidio. Eu iria colocar um padrão para receber a string, se eu for usar uma analisador léxico eu irei definir um modelo bem rígido de expressão. O uso do lex com o yacc é então viável para o meu caso?

This message was edited 1 time. Last update was at 22/11/2010 11:15:34


Toda vez que você alimenta um troll uma foca morre no Polo Norte.
[MSN]
entanglement
GUJ Hacker

Membro desde: 26/09/2009 09:18:56
Mensagens: 5750
Offline

Uma coisa interessante no yacc/bison é que se pode definir a precedência de operadores e se eles são associativos à esquerda e à direita.

http://dinosaur.compilertools.net/bison/bison_8.html#SEC71

edu_fernandes
JavaTeenager
[Avatar]

Membro desde: 10/05/2010 09:35:02
Mensagens: 166
Localização: Ourinhos/Alto Alegre
Offline

Se usar pilhas também funciona.
Porém uma solução interessante é usando árvores.
Acredito que vai dar um trampo, porém fica interessante seu código, sem contar que tu vai somar conhecimento pra caramba a respeito.

Mas cara. Parabéns pela iniciativa.
Muito legal a idéia e bastante interessante.

Espero ter ajudado.
Abraço e boa sorte com o projeto.

Eduardo Fernandes

A cada 1mb na internet custa 0,1 á 0,2 centavos direto ou indiretamente.
Poupe dinheiro com respostas que não ajudam.
matheuslmota
Virtual Machine Man

Membro desde: 09/03/2010 15:14:56
Mensagens: 664
Offline

Opa edu_fernandes, obrigado.
Eu tive pensando nessa possibilidade também.
Acho que o analisador léxico é bem interessante, deixa a aplicação mais completa. Quando eu terminar eu vou postar o código.
O intuito é me ajudar com alguns problemas da faculdade.

Toda vez que você alimenta um troll uma foca morre no Polo Norte.
[MSN]
edu_fernandes
JavaTeenager
[Avatar]

Membro desde: 10/05/2010 09:35:02
Mensagens: 166
Localização: Ourinhos/Alto Alegre
Offline

Ah sim entendi.
A preguiça de fazer exercícios de matemática somado a vontade de programar resultou nesse projeto.
Tá certo.


Eduardo Fernandes

A cada 1mb na internet custa 0,1 á 0,2 centavos direto ou indiretamente.
Poupe dinheiro com respostas que não ajudam.
matheuslmota
Virtual Machine Man

Membro desde: 09/03/2010 15:14:56
Mensagens: 664
Offline

Não edu_fernandes você me entendeu mal. Eu não tenho preguiça de fazer exercícios, mas na disciplina de eletromagnetismo aqui da faculdade tem questões que necessitam de complexas equações vetoriais, transformadas de fourier, integrais triplas, que embora eu saiba resolver, não é o foco da disciplina. Por exemplo, eu tô no meio de uma questão e eu me deparo com uma equação diferencial grande. Ao invés de eu perder o foco da questão resolvendo uma conta grande, eu pegaria logo o resultado da conta e aplicaria na minha questão. Assim eu veria se meu raciocínio estaria certo. É claro que não é preguiça minha, eu só quero é simplificar minha vida. E lógico, para projetar um sistema de tal complexidade eu teria que ter o total domínio da matemática usada, coisa que eu tenho. Experimenta estudar eletromagnetismo e verá que o que eu tô planejando é interessante. Obrigado por desmerecer meu projeto.

Toda vez que você alimenta um troll uma foca morre no Polo Norte.
[MSN]
edu_fernandes
JavaTeenager
[Avatar]

Membro desde: 10/05/2010 09:35:02
Mensagens: 166
Localização: Ourinhos/Alto Alegre
Offline

Não Matheus. Você me entendeu mal.
Escrevi essas palavras mas com uma gargalhada ecoando aqui em casa.
Não estou desmerecendo o projeto de forma alguma. Longe de mim fazer isso.
Foi uma brincadeira que fiz, apenas, mas você interpretou errado.
Claro que para fazer um programa assim você tem que dominar a matemática em questão.
Pode ficar tranquilo.
Se depender da minha torcida esse projeto já deu certo.
De qualquer forma, me pordoe por te-lo ofendido, não foi, nem de longe, minha intensão.

Abraço.

Eduardo Fernandes

A cada 1mb na internet custa 0,1 á 0,2 centavos direto ou indiretamente.
Poupe dinheiro com respostas que não ajudam.
entanglement
GUJ Hacker

Membro desde: 26/09/2009 09:18:56
Mensagens: 5750
Offline

matheuslmota wrote:Não edu_fernandes você me entendeu mal. Eu não tenho preguiça de fazer exercícios, mas na disciplina de eletromagnetismo aqui da faculdade tem questões que necessitam de complexas equações vetoriais, transformadas de fourier, integrais triplas, que embora eu saiba resolver, não é o foco da disciplina. Por exemplo, eu tô no meio de uma questão e eu me deparo com uma equação diferencial grande. Ao invés de eu perder o foco da questão resolvendo uma conta grande, eu pegaria logo o resultado da conta e aplicaria na minha questão. Assim eu veria se meu raciocínio estaria certo. É claro que não é preguiça minha, eu só quero é simplificar minha vida. E lógico, para projetar um sistema de tal complexidade eu teria que ter o total domínio da matemática usada, coisa que eu tenho. Experimenta estudar eletromagnetismo e verá que o que eu tô planejando é interessante. Obrigado por desmerecer meu projeto.


Matheus, por acaso você não pode usar o Mathematica ou o MatLab? Essas são ferramentas essenciais de gente que lida com matemática. Até conseguir fazer seu sistema de equações diferenciais funcionar direitinho vai comer muita poeira. (É claro que você vai apanhar bastante adaptando as bibliotecas que implementam esses algoritmos em C, é claro. Não acho que você vá implementar também essas bibliotecas. )
matheuslmota
Virtual Machine Man

Membro desde: 09/03/2010 15:14:56
Mensagens: 664
Offline

Ok, então, vou usar suas ideias e a do entanglement no meu projeto. Acho que dentro de um mês ou dois eu faço isso ai eu posto o resultado para todos aqui no guj. Obrigado e desculpa o mal entendido.

Toda vez que você alimenta um troll uma foca morre no Polo Norte.
[MSN]
 
Índice dos Fóruns » Outras Linguagens
Ir para:   
Powered by JForum 2.1.8 © JForum Team