Saisir une fonction mathématique au clavier

fandestargate Messages postés 14 Date d'inscription dimanche 5 avril 2009 Statut Membre Dernière intervention 5 avril 2009 - 9 févr. 2009 à 01:47
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 - 13 févr. 2009 à 14:52
Bonsoir, je travaille actuellement sur un projet visant à résoudre des équations apres transformée de fourrier. Pour ce faire je rentre une fonction initiale à l'instant t0. Mon probleme c'est que pour y arriver je n'ai que deux solutions:
Soit je met la fonction dans mon code (et quand je veux la changer il faut changer partout^^)
Soit je la saisie au clavier au lancement du programme (et la fonction se rajoutera partout où j'en ai besoin dans mon code)

Pour avoir un petit peu cherche sur le net je crois savoir que ce genre de programme portent un nom, les interpreteurs^^. Le petit probleme c'est que je code depuis peu, et donc lorsque j'ai vu le code de ces fameux interpreteurs j'ai eu une frayeur^^.
Je voulais donc savoir si il n'y avait pas ici une ame charitable qui pourrait m'expliquer en terme plus ou moins simple le fonctionnement de ces interpreteurs (qu'est ce qu'ils prennent comme parametres, qu'est ce qu'ils renvoient...).

Donc voila, j'espere que quelqu'un saura m'aider dans cette rude épreuve^^, bonne soirée, ++

10 réponses

coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
9 févr. 2009 à 12:44
salut

si tu acceptes de ne pas avoir des expressions mathematiques ecrites sous la forme classique, alors c'est simple : la syntaxe RPN est vraiment tres facile a interpreter.

sinon, tu peux convertir une expression normale en expression rpn pour ensuite l'interpreter.

ici, t'as un code de convertion en javascript : http://www.javascriptfr.com/codes/NOTATION-CLASSIQUE-VERS-NOTATION-NPI_48072.aspx

et ici, t'as des explications sur le rpn : http://fr.wikipedia.org/wiki/Notation_polonaise_inverse
0
fandestargate Messages postés 14 Date d'inscription dimanche 5 avril 2009 Statut Membre Dernière intervention 5 avril 2009
9 févr. 2009 à 19:02
merci de m'avoir répondu coucou747 mais le probleme c'est que cette méthode ne gere pas les equation comportant des variables, comme par exemple f(x)=x*(1-x). Petite precision aussi je programme en C (si je me suis trompé de partie du forum excusez moi je déplacerai le sujet^^).
0
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
9 févr. 2009 à 19:22
tu ne t'es pas trompe de forum, mais j'avais pas d'exemple en C sous la main, et ce qui t'interesse, c'est bien l'algo ?

tu peux assez facilement integrer le principe des variables dans ce genre de choses.

de toute facon, dit toi bien que tu ne pourras pas creer une fonction en C. tu ne pourras pas te trouver avec un code du genre :

int (*f(int i));

scanf( ... , expression);
f = evaluer(expression);

printf("f(1) = %d\n", f(1));

ca ne pourra pas fonctionner ca le C n'est pas un langage fonctionnel, t'as rien pour creer de nouvelles fonctions.
0
fandestargate Messages postés 14 Date d'inscription dimanche 5 avril 2009 Statut Membre Dernière intervention 5 avril 2009
9 févr. 2009 à 23:07
ben en fait d'apres ce que j'ai lu, il existe des codes appellées interpreteurs qui se chargent de ça, mais je n'arrive pas à les déchiffrer.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
9 févr. 2009 à 23:18
ouais, ma ca revient a faire :

int resultat = eval(expression, x);

c'est pas la meme chose.
0
fandestargate Messages postés 14 Date d'inscription dimanche 5 avril 2009 Statut Membre Dernière intervention 5 avril 2009
9 févr. 2009 à 23:51
oui mais une fonciotn qui ferait ça ça me suffirait, car avec ça je pourrais calculer les points qui m'interresse et les stocker dnas un tableau, pour pouvoir ensuite faire ma TF et mes RK. Tu connais un programme qui fait ça?
0
fandestargate Messages postés 14 Date d'inscription dimanche 5 avril 2009 Statut Membre Dernière intervention 5 avril 2009
11 févr. 2009 à 00:10
qqun aurait il une idée lol?^^
0
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
13 févr. 2009 à 12:11
faire une fonction de type :

bt parse(char * expression){
// met ton code ici
}

et une autre de type

int eval(bt tree, int valeur_de_x)

tu ne sais pas du tout comment ca peut se faire ?

il faut faire un bout de code qui decoupe ton expression en une liste de "tokens" ces tokens sont soit des nombres, soit des operateurs (tu associes une priorite aux operateurs) soit des noms de variables. Tu ignores les espaces aussi.

ensuite, tu as un parseur qui va lire les tokens et qui va te faire un arbre binaire pret a etre evalue.

la fonction d'evaluation est bidon.

le lexeur n'est pas tres dur a faire, ce qui est chiant, c'est les regles dans le parseur.

le plus dur, c'est la gestion des priorites.
0
fandestargate Messages postés 14 Date d'inscription dimanche 5 avril 2009 Statut Membre Dernière intervention 5 avril 2009
13 févr. 2009 à 12:49
ok, je m'y colle de suite alors, merci pour les precisions.
0
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
13 févr. 2009 à 14:52
si t'as des questions, essaie de faire plus precis que : "comment faire ?"

parce-que c'est vraiment dur de t'aider sachant que t'as deja a ta disposition des codes qui font ca.
0
Rejoignez-nous