string em função matemática

1. string em função matemática

rafael
rafael.99

(usa Ubuntu)

Enviado em 13/05/2009 - 14:17h

Pessoal, preciso fazer um programa que o usuário digita uma função, ex: x^2 + 3 e entra com o valor de x.

O programa tem que calcular essa operação e desenhar o grafico dela...

Entao como como faço para substituir o x da função pelo valor digitado e calcular a operação?? em C


  


2. Re: string em função matemática

Andi
upc0d3

(usa Gentoo)

Enviado em 13/05/2009 - 16:14h

normal:

printf("Entre com o valor do X: ");
scanf("%d",&x);

qual a dificuldade nisto ?


3. Re: string em função matemática

rafael
rafael.99

(usa Ubuntu)

Enviado em 13/05/2009 - 17:35h

o usuário entrará com uma string e um valor para x: assim...

char fun[11];
int x;

printf("Entre com uma função: "); //ex: 2^x + 3
scanf("%s",fun);
printf("Entre com um valor para x: ");
scanf("%d",&x); // ex: 2

Nesse caso a resposta tem que ser 7...

Então como faço para substituir o x da função pelo valor dado??



4. amigo

João Marcos Menezes
stremer

(usa Arch Linux)

Enviado em 13/05/2009 - 18:21h

não seria isso que você procura?

http://www.cs.umu.se/~isak/Snippets/eval.c

da uma olhada...

não veio a mente agora um jeito de fazer isso de forma simples, usando c puro... tbem to meio cansado hj.... senão volto a postar!


5. Re: string em função matemática

Marcelo A. B. Slomp
mslomp

(usa Slackware)

Enviado em 13/05/2009 - 19:00h

o mais usual (e prático) para resolver esse tipo de problema é através da dobradinha flex + bison


6. Re: string em função matemática

rafael
rafael.99

(usa Ubuntu)

Enviado em 13/05/2009 - 19:26h

Me explica o que é, e como funciona esse flex + bison...


7. Re: string em função matemática

Marcelo A. B. Slomp
mslomp

(usa Slackware)

Enviado em 13/05/2009 - 20:59h

em um resumo bem resumido é o seguinte:
flex (lex*) é um parser generator, ou seja, gera um analisador léxico para uma dado alfabeto. então, no caso da calculadora**, você vai definir o que é número (1,2,3...), o que é variável (x,y,z...), o que é operador (+,-,*,/...), etc. então, quando você entra com uma expressão, o analisador léxico irá dividi-la em tokens, verificando se cada um faz parte do alfabeto e qual sua classe.
estando tudo ok (todos os tokens pertencem à gramática), e de posse das classes de cada token, sua expressão como um todo será avaliada por um analisador sintático, sendo este gerado pelo bison (yacc*). é onde você definirá as regras da sua gramática. por exemplo, definir a regra que diz que numero '+' numero irá retornar como resultado a soma dos operandos, etc, além de definir outras minúcias como a precedência dos operadores (multiplicar antes de somar, etc).

recomendo a leitura dos seguintes links:

o básico, ideal para quem nunca mexeu com flex/bison:
http://dinosaur.compilertools.net

ótimo tutorial, inclusive tem um exemplo bem completo de calculadora:
http://epaperpress.com/lexandyacc

* apenas para não causar confusão: flex é o 'substituto gnu' para o lex, e bison é o 'substituto gnu' para o yacc. a sintaxe é a mesma.
** a saber: a calculadora bc foi construída com flex + bison.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts