Tracer une function en java

herve_blondel Messages postés 8 Date d'inscription mardi 3 février 2004 Statut Membre Dernière intervention 7 décembre 2004 - 1 déc. 2004 à 22:04
herve_blondel Messages postés 8 Date d'inscription mardi 3 février 2004 Statut Membre Dernière intervention 7 décembre 2004 - 7 déc. 2004 à 12:24
salut a tous !

je suis entrain d'ecrire un programme pour tracer les courbes en java.

quelqu'un a-t-il une idée de comment recuperer dans le programme une fonction entrée dans un JTextfield ?
par exemple f(x)=log(x)+2*exp(x^2-3x).

pour le moment,j'entre la fonction dans le programme.

4 réponses

Minhounet Messages postés 20 Date d'inscription mercredi 17 novembre 2004 Statut Membre Dernière intervention 8 décembre 2004 2
3 déc. 2004 à 19:01
Je crains pour toi qu'il va falloir faire du lexing et du parsing. Il va donc falloir créer un objet que tu appelleras "Expression" et définir ce que c'est. Il s'agit donc d'abord de définir une grammaire des expressions arithmétiques.

Grosso modo et sans être vraiment juste (la grammaire et moi c'est pas le grand amour)

E = Cte
E = E + P

etc.. donc E est une expression arithmétique, E peut être une constante, ou une somme, ou un produit etc.. Je te conseille de chercher sur internet une grammaire NON AMBIGUE des expressions arithmétiques.

Le lexing consiste à lire ce qu'il y a dans le JTextField et de voir si les termes utilisées existent. Le parsing consiste à reconnaître la syntaxe, en gros "est ce une expression arithmétique ?".

bonne chance
0
herve_blondel Messages postés 8 Date d'inscription mardi 3 février 2004 Statut Membre Dernière intervention 7 décembre 2004
5 déc. 2004 à 12:20
merci pour ta reponse. je connais pas la grammaire mais je vais suivre ton conseil et chercher sur internet.
en gros, ce que je voudrais faire c'est recupere une fonction a tracer a partir d'un JTextfield. je veux dire que l'utilisateur entre par exemple x^2+5 et le programme recupere cette donnée et trace la courbe. Pour le moment, le programme trace la courbe mais seulement, il faut ecrire la fonction dans le code a chaque fois qu'on change de fonction et recompiler puis executer: c'est pas pratique.
dans le programme j'ai fais ceci: par exemple pour y=cosx+3x^2

y=Math.cos(x)+(3*Math.pow(x,2));
je voudrais donc trouver un moyen de faire cela sans plus intervenir dans le code a chaque changement de fonction a tracer.
merci. :big)
0
Minhounet Messages postés 20 Date d'inscription mercredi 17 novembre 2004 Statut Membre Dernière intervention 8 décembre 2004 2
6 déc. 2004 à 01:44
Je comprends bien ce que tu veux faire, mais je n'ai pas encore vu en java de classe java qui permet de lire une chaine de caractères représentant une fonction pour la transformer en une suite de lignes de codes pour tracer ensuite.
Il te faudra absolument faire le travail toi même à savoir lire la chaine et reconnaitre à l'aide d'une grammaire que c'est bien une fonction.

Genre ne pas accepter x+++5 qui n'est pas une fonction.
Et après ce n'est pas le plus facile, il va falloir évaluer ce que la personne a écrit.

Par exemple une fonction du genre "cos(x+5)" devra être interprété en Math.cos(x+5).

Sans compter que tu devras avoir reconnu que x est une variable aussi.

Pour résumer, 3 étapes :
- analyse lexicale (ce que j'ai écrit existe t - il ? les mots utilisés existe t-il ? Par exemple "?" n'existe pas dans les fonctions)
- analyse syntaxique (ce que j'ai écrit correspont - il à une fonction ? Ce n'est pas évident à écrire)
- evaluation (il s'agira de faire la transformation entre ce que j'ai écrit et ce qui devra être calculé : cos(2) est en fait Math.cos(2), la chaine de caractères "2" est la constante 2 etc..)

C'est donc loin d'être quelque chose de simple, donc veux tu vraiment t'y lancer ? Note que lorsque tu compiles avec javac, il analyse d'abord pour voir si tu emploies des mots qui existent, voit si tu as bien utilisé la syntaxe demandé, voit si tes variables sont bien initialisées etc.. (analyse sémantique) et ensuite seulement transforme ton code en code intermédiaire.

Je fais actuellement un projet de compilation de C en CAML et c'est loin d'être simple.

Documente toi sur l'analyse lexicale, syntaxique ça sera un bon début. bonne chance :)

Si Java bien, c'est Java Minh !
0
herve_blondel Messages postés 8 Date d'inscription mardi 3 février 2004 Statut Membre Dernière intervention 7 décembre 2004
7 déc. 2004 à 12:24
merci bcp.
pour le moment, c'est vraiment compliqué pour moi.Je vais placer ce programme en standby et me documenter d'abord . :big)
0
Rejoignez-nous